Name: series-workflow8smf8 Phase: Succeeded StartedAt: 2026-09-05 13:25:07 +0000 UTC FinishedAt: 2026-09-05 17:25:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[0] Phase: Succeeded StartedAt: 2026-09-05 13:25:07 +0000 UTC FinishedAt: 2026-09-05 13:46:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 13:25:07 +0000 UTC FinishedAt: 2026-09-05 13:46:04 +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": "6e0803a170552a6ab48538721df6467582fc940c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "TRANSPARENT_HUGEPAGE", "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": "6e0803a170552a6ab48538721df6467582fc940c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "TRANSPARENT_HUGEPAGE", "SWAP" ], "series_id": "edea1aeb-8507-496f-8a92-3e2256c261c7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__mem_cgroup_handle_over_high", "do_swap_page", "do_huge_pmd_anonymous_page", "do_huge_pmd_wp_page" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaCYjMzQ7LAogICAgJiMzNDtkb19zd2FwX3BhZ2UmIzM0OywKICAgICYjMzQ7ZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UmIzM0OywKICAgICYjMzQ7ZG9faHVnZV9wbWRfd3BfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKWAgaW4gYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpYCwgYGRvX3N3YXBfcGFnZSgpYCwgYW5kIGBhbGxvY19hbm9uX2ZvbGlvKClgIHRvIGVuZm9yY2Ugc3luY2hyb25vdXMgYG1lbW9yeS5oaWdoYCBjZ3JvdXAgdGhyb3R0bGluZyBkdXJpbmcgcGFnZSBmYXVsdCBoYW5kbGluZyB3aGVuIGNoYXJnaW5nIGZvbGlvcy5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBwZXJ0YWluIHRvIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZywgcmVjbGFtYXRpb24sIGFuZCB0aHJvdHRsaW5nIGNvbnRyb2wgZmxvdy4gVGhleSBkbyBub3QgYWxsb2NhdGUsIG1vZGlmeSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSBzdHJ1Y3R1cmVzLCBub3IgZG8gdGhleSBpbnRyb2R1Y2Uga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgc2xlZXBpbmctaW4tYXRvbWljLCBvciBsaWZldGltZSBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAoS0FTQU4sIExPQ0tERVAsIERFQlVHX0FUT01JQ19TTEVFUCksIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBtbS9odWdlX21lbW9yeS5jIGFuZCBtbS9tZW1vcnkuYyBieSBpbnZva2luZyBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goKSBkdXJpbmcgUE1EIFRIUCBhbm9ueW1vdXMgYWxsb2NhdGlvbiwgbVRIUCBhbm9ueW1vdXMgYWxsb2NhdGlvbiwgYW5kIHN3YXAtaW4gcGFnZSBmYXVsdCBwYXRocy4gVGhpcyBlbnN1cmVzIG1lbW9yeS5oaWdoIHRocm90dGxpbmcgZGVidCBpcyBzeW5jaHJvbm91c2x5IGhhbmRsZWQgaW4gc2xlZXBpbmcgZmF1bHQgY29udGV4dHMgd2hlbiBub24tYmxvY2tpbmcgR0ZQIG1hc2tzIHdlcmUgdXNlZCBkdXJpbmcgY2hhcmdpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBNTSBjb2RlIHBhdGhzIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gdmVyaWZ5IGxvY2tpbmcgaW52YXJpYW50cyBhbmQgdGhyb3R0bGluZyBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNlMTRlOGE5NDE5MTVkNjA4Mzc4NWY2ZmVkYTA3NzE4ZjU0ZGFmOTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDEzOjQ0OjI2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCBjZWQ0MDBmNzJkNDNhLi41NDNiYTRhNzRkYzNhIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTEzMjksNiAmIzQzOzEzMjksMTQgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBjaGFyZ2UgZ2ZwIGVuY29kZXMgVEhQIGFsbG9jYXRpb24gcG9saWN5IGFuZCBtYXkgbm90IGFsbG93XG4mIzQzO1x0ICogYmxvY2tpbmcsIHdoaWNoIG1ha2VzIHRyeV9jaGFyZ2Ugc2tpcCBpdHMgc3luY2hyb25vdXMgbWVtb3J5LmhpZ2hcbiYjNDM7XHQgKiB0aHJvdHRsaW5nLiBGYXVsdCBjb250ZXh0IGNhbiBzbGVlcCwgc28gc2V0dGxlIGFueSBvdmVyLWhpZ2ggZGVidFxuJiM0MztcdCAqIGhlcmUgaW5zdGVhZCBvZiBsZXR0aW5nIHVzYWdlIGdyb3cgdW50aHJvdHRsZWQgdXAgdG8gbWVtb3J5Lm1heC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG4mIzQzO1xuIFx0aWYgKGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKGZvbGlvKSkge1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRjb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0spO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDhiMGMyYzczNWQzZGUuLmRjOTdjZjBlYmZiMzAgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmNcbkBAIC01MjY3LDYgJiM0Mzs1MjY3LDE0IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIG91dDpcbiBcdGlmIChzaSlcbiBcdFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIExhcmdlIGZvbGlvIHN3YXBpbiBjaGFyZ2VzIHdpdGggdGhlIFRIUCBhbGxvY2F0aW9uIGdmcCwgd2hpY2ggbWF5XG4mIzQzO1x0ICogbm90IGFsbG93IGJsb2NraW5nLCBtYWtpbmcgdHJ5X2NoYXJnZSBza2lwIGl0cyBzeW5jaHJvbm91c1xuJiM0MztcdCAqIG1lbW9yeS5oaWdoIHRocm90dGxpbmcuIFNldHRsZSBhbnkgb3Zlci1oaWdoIGRlYnQgaGVyZSBpbnN0ZWFkLFxuJiM0MztcdCAqIHdoZXJlIHNsZWVwaW5nIGlzIHNhZmU6IHRoZSBmb2xpbyBsb2NrLCB0aGUgcGFnZSB0YWJsZSBsb2NrIGFuZFxuJiM0MztcdCAqIHRoZSBzd2FwIGRldmljZSByZWZlcmVuY2UgaGF2ZSBhbGwgYmVlbiBkcm9wcGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcbiBcdHJldHVybiByZXQ7XG4gb3V0X25vbWFwOlxuIFx0aWYgKHZtZi1cdTAwM2VwdGUpXG5AQCAtNTM2Miw2ICYjNDM7NTM3MCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRnb3RvIG5leHQ7XG4gXHRcdH1cbiYjNDM7XHRcdC8qIFNhbWUgcmVhc29uaW5nIGFzIGluIHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpLiAqL1xuJiM0MztcdFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xuIFx0XHRpZiAob3JkZXIgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKGZvbGlvKSkge1xuIFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdFx0Z290byBmYWxsYmFjaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2gmIzM0OywKICAgICYjMzQ7ZG9fc3dhcF9wYWdlJiMzNDssCiAgICAmIzM0O2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlJiMzNDssCiAgICAmIzM0O2RvX2h1Z2VfcG1kX3dwX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBtbS9odWdlX21lbW9yeS5jIGFuZCBtbS9tZW1vcnkuYyBieSBpbnZva2luZyBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goKSBkdXJpbmcgUE1EIFRIUCBhbm9ueW1vdXMgYWxsb2NhdGlvbiwgbVRIUCBhbm9ueW1vdXMgYWxsb2NhdGlvbiwgYW5kIHN3YXAtaW4gcGFnZSBmYXVsdCBwYXRocy4gVGhpcyBlbnN1cmVzIG1lbW9yeS5oaWdoIHRocm90dGxpbmcgZGVidCBpcyBzeW5jaHJvbm91c2x5IGhhbmRsZWQgaW4gc2xlZXBpbmcgZmF1bHQgY29udGV4dHMgd2hlbiBub24tYmxvY2tpbmcgR0ZQIG1hc2tzIHdlcmUgdXNlZCBkdXJpbmcgY2hhcmdpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBNTSBjb2RlIHBhdGhzIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gdmVyaWZ5IGxvY2tpbmcgaW52YXJpYW50cyBhbmQgdGhyb3R0bGluZyBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNlMTRlOGE5NDE5MTVkNjA4Mzc4NWY2ZmVkYTA3NzE4ZjU0ZGFmOTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDEzOjQ0OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggY2VkNDAwZjcyZDQzYS4uNTQzYmE0YTc0ZGMzYSAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0xMzI5LDYgJiM0MzsxMzI5LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBjaGFyZ2UgZ2ZwIGVuY29kZXMgVEhQIGFsbG9jYXRpb24gcG9saWN5IGFuZCBtYXkgbm90IGFsbG93CiYjNDM7CSAqIGJsb2NraW5nLCB3aGljaCBtYWtlcyB0cnlfY2hhcmdlIHNraXAgaXRzIHN5bmNocm9ub3VzIG1lbW9yeS5oaWdoCiYjNDM7CSAqIHRocm90dGxpbmcuIEZhdWx0IGNvbnRleHQgY2FuIHNsZWVwLCBzbyBzZXR0bGUgYW55IG92ZXItaGlnaCBkZWJ0CiYjNDM7CSAqIGhlcmUgaW5zdGVhZCBvZiBsZXR0aW5nIHVzYWdlIGdyb3cgdW50aHJvdHRsZWQgdXAgdG8gbWVtb3J5Lm1heC4KJiM0MzsJICovCiYjNDM7CW1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTsKJiM0MzsKIAlpZiAoZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCWNvdW50X3ZtX2V2ZW50KFRIUF9GQVVMVF9GQUxMQkFDSyk7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDhiMGMyYzczNWQzZGUuLmRjOTdjZjBlYmZiMzAgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC01MjY3LDYgJiM0Mzs1MjY3LDE0IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogb3V0OgogCWlmIChzaSkKIAkJcHV0X3N3YXBfZGV2aWNlKHNpKTsKJiM0MzsJLyoKJiM0MzsJICogTGFyZ2UgZm9saW8gc3dhcGluIGNoYXJnZXMgd2l0aCB0aGUgVEhQIGFsbG9jYXRpb24gZ2ZwLCB3aGljaCBtYXkKJiM0MzsJICogbm90IGFsbG93IGJsb2NraW5nLCBtYWtpbmcgdHJ5X2NoYXJnZSBza2lwIGl0cyBzeW5jaHJvbm91cwomIzQzOwkgKiBtZW1vcnkuaGlnaCB0aHJvdHRsaW5nLiBTZXR0bGUgYW55IG92ZXItaGlnaCBkZWJ0IGhlcmUgaW5zdGVhZCwKJiM0MzsJICogd2hlcmUgc2xlZXBpbmcgaXMgc2FmZTogdGhlIGZvbGlvIGxvY2ssIHRoZSBwYWdlIHRhYmxlIGxvY2sgYW5kCiYjNDM7CSAqIHRoZSBzd2FwIGRldmljZSByZWZlcmVuY2UgaGF2ZSBhbGwgYmVlbiBkcm9wcGVkLgomIzQzOwkgKi8KJiM0MzsJbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpOwogCXJldHVybiByZXQ7CiBvdXRfbm9tYXA6CiAJaWYgKHZtZi0mZ3Q7cHRlKQpAQCAtNTM2Miw2ICYjNDM7NTM3MCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJCQlmb2xpb19wdXQoZm9saW8pOwogCQkJZ290byBuZXh0OwogCQl9CiYjNDM7CQkvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi8KJiM0MzsJCW1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTsKIAkJaWYgKG9yZGVyICZndDsgMSAmYW1wOyZhbXA7IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKGZvbGlvKSkgewogCQkJZm9saW9fcHV0KGZvbGlvKTsKIAkJCWdvdG8gZmFsbGJhY2s7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjQKCQkJCQkJCW91dHB1dDogMTA0CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZy4gVGhlIGRpZmYgc2hvd3MgbW9kaWZpY2F0aW9ucyBhY3Jvc3MgdGhyZWUgZnVuY3Rpb25zIGluIHR3byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZpbGVzLiBJIHNlZSBhZGRpdGlvbnMgb2YgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtgIGluIGBtbS9odWdlX21lbW9yeS5jYCB3aXRoaW4gYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpYCwgYW5kIGluIGBtbS9tZW1vcnkuY2Agd2l0aGluIGBkb19zd2FwX3BhZ2UoKWAgYXQgbGFiZWwgYG91dDpgLCBhbmQgYWxzbyBpbiBgYWxsb2NfYW5vbl9mb2xpbygpYC4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGFib3V0IGhhbmRsaW5nIG1lbW9yeSBjZ3JvdXAgb3Zlci1oaWdoIGNvbmRpdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY291bnRpbmcgd2l0aGluIGNncm91cHMsIHNwZWNpZmljYWxseSB3aGVuIGEgY2dyb3VwIGlzIGV4Y2VlZGluZyBpdHMgbWVtb3J5IGxpbWl0cyBhbmQgdGhlIHN5c3RlbSBpcyB0cnlpbmcgdG8gYWxsb2NhdGUgbW9yZSBtZW1vcnkuIFRoZSBgR0ZQX0tFUk5FTGAgZmxhZyBpcyBjcnVjaWFsLCBzdWdnZXN0aW5nIHRoaXMgaXMgaGFwcGVuaW5nIGZyb20ga2VybmVsLXNwYWNlIGFsbG9jYXRpb25zLiBOb3csIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZ3Jhc3AgdGhlIHByZWNpc2UgY29udGV4dCBvZiB0aGVzZSBhZGRpdGlvbnMgd2l0aGluIGVhY2ggZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGV4YWN0bHkgdGhlc2UgaG9va3MgYXJlIGJlaW5nIGFkZGVkIGluIHJlbGF0aW9uIHRvIHRoZSBhbGxvY2F0aW9uIHBhdGhzLCBhbmQgd2hhdCB0aGUgc3Vycm91bmRpbmcgbG9naWMgaXMuIFdoYXQgaXMgdGhlIHByZWNpc2UgbWVtb3J5IGFsbG9jYXRpb24gcGF0aCBiZWluZyB0b3VjaGVkLCBhbmQgd2hhdCBpcyBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKClgIGRvaW5nLCBleGFjdGx5PyBJcyBpdCBhIHJhdGUtbGltaXRpbmcgbWVjaGFuaXNtLCBhIGRlbmlhbCBvZiBzZXJ2aWNlIHByZXZlbnRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGluc3BlY3QgdGhlIGNvZGUgbW9yZSBjYXJlZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzE1Olx0XG4xMzE2Olx0XHRpZiAodW5saWtlbHkoIWZvbGlvKSkge1xuMTMxNzpcdFx0XHRjb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0spO1xuMTMxODpcdFx0XHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLKTtcbjEzMTk6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMzIwOlx0XHR9XG4xMzIxOlx0XG4xMzIyOlx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pLCBmb2xpbyk7XG4xMzIzOlx0XHRpZiAobWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIHZtYS1cdTAwM2V2bV9tbSwgZ2ZwKSkge1xuMTMyNDpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMTMyNTpcdFx0XHRjb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0spO1xuMTMyNjpcdFx0XHRjb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0tfQ0hBUkdFKTtcbjEzMjc6XHRcdFx0Y291bnRfbXRocF9zdGF0KG9yZGVyLCBNVEhQX1NUQVRfQU5PTl9GQVVMVF9GQUxMQkFDSyk7XG4xMzI4Olx0XHRcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0tfQ0hBUkdFKTtcbjEzMjk6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMzMwOlx0XHR9XG4xMzMxOlx0XG4xMzMyOlx0XHQvKlxuMTMzMzpcdFx0ICogVGhlIGNoYXJnZSBnZnAgZW5jb2RlcyBUSFAgYWxsb2NhdGlvbiBwb2xpY3kgYW5kIG1heSBub3QgYWxsb3dcbjEzMzQ6XHRcdCAqIGJsb2NraW5nLCB3aGljaCBtYWtlcyB0cnlfY2hhcmdlIHNraXAgaXRzIHN5bmNocm9ub3VzIG1lbW9yeS5oaWdoXG4xMzM1Olx0XHQgKiB0aHJvdHRsaW5nLiBGYXVsdCBjb250ZXh0IGNhbiBzbGVlcCwgc28gc2V0dGxlIGFueSBvdmVyLWhpZ2ggZGVidFxuMTMzNjpcdFx0ICogaGVyZSBpbnN0ZWFkIG9mIGxldHRpbmcgdXNhZ2UgZ3JvdyB1bnRocm90dGxlZCB1cCB0byBtZW1vcnkubWF4LlxuMTMzNzpcdFx0ICovXG4xMzM4Olx0XHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG4xMzM5Olx0XG4xMzQwOlx0XHRpZiAoZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7XG4xMzQxOlx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4xMzQyOlx0XHRcdGNvdW50X3ZtX2V2ZW50KFRIUF9GQVVMVF9GQUxMQkFDSyk7XG4xMzQzOlx0XHRcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spO1xuMTM0NDpcdFx0XHRyZXR1cm4gTlVMTDtcbjEzNDU6XHRcdH1cbjEzNDY6XHRcbjEzNDc6XHRcdGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKGZvbGlvLCBnZnApO1xuMTM0ODpcdFxuMTM0OTpcdCAgICAgICAvKlxuMTM1MDpcdFx0KiBXaGVuIGEgZm9saW8gaXMgbm90IHplcm9lZCBkdXJpbmcgYWxsb2NhdGlvbiAoX19HRlBfWkVSTyBub3QgdXNlZClcbjEzNTE6XHRcdCogb3IgdXNlciBmb2xpb3MgcmVxdWlyZSBzcGVjaWFsIGhhbmRsaW5nLCBmb2xpb196ZXJvX3VzZXIoKSBpcyB1c2VkIHRvXG4xMzUyOlx0XHQqIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYWdlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZhdWx0aW5nIGFkZHJlc3Mgd2lsbCBiZVxuMTM1MzpcdFx0KiBob3QgaW4gdGhlIGNhY2hlIGFmdGVyIHplcm9pbmcuXG4xMzU0Olx0XHQqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUyNjA6XHRcdH1cbjUyNjE6XHRcbjUyNjI6XHRcdC8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSAtIGl0IHdhcyBub24tcHJlc2VudCBiZWZvcmUgKi9cbjUyNjM6XHRcdHVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2Uodm1mLCB2bWEsIGFkZHJlc3MsIHB0ZXAsIG5yX3BhZ2VzKTtcbjUyNjQ6XHR1bmxvY2s6XG41MjY1Olx0XHRpZiAodm1mLVx1MDAzZXB0ZSlcbjUyNjY6XHRcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbjUyNjc6XHRvdXQ6XG41MjY4Olx0XHRpZiAoc2kpXG41MjY5Olx0XHRcdHB1dF9zd2FwX2RldmljZShzaSk7XG41MjcwOlx0XHQvKlxuNTI3MTpcdFx0ICogTGFyZ2UgZm9saW8gc3dhcGluIGNoYXJnZXMgd2l0aCB0aGUgVEhQIGFsbG9jYXRpb24gZ2ZwLCB3aGljaCBtYXlcbjUyNzI6XHRcdCAqIG5vdCBhbGxvdyBibG9ja2luZywgbWFraW5nIHRyeV9jaGFyZ2Ugc2tpcCBpdHMgc3luY2hyb25vdXNcbjUyNzM6XHRcdCAqIG1lbW9yeS5oaWdoIHRocm90dGxpbmcuIFNldHRsZSBhbnkgb3Zlci1oaWdoIGRlYnQgaGVyZSBpbnN0ZWFkLFxuNTI3NDpcdFx0ICogd2hlcmUgc2xlZXBpbmcgaXMgc2FmZTogdGhlIGZvbGlvIGxvY2ssIHRoZSBwYWdlIHRhYmxlIGxvY2sgYW5kXG41Mjc1Olx0XHQgKiB0aGUgc3dhcCBkZXZpY2UgcmVmZXJlbmNlIGhhdmUgYWxsIGJlZW4gZHJvcHBlZC5cbjUyNzY6XHRcdCAqL1xuNTI3NzpcdFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xuNTI3ODpcdFx0cmV0dXJuIHJldDtcbjUyNzk6XHRvdXRfbm9tYXA6XG41MjgwOlx0XHRpZiAodm1mLVx1MDAzZXB0ZSlcbjUyODE6XHRcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbjUyODI6XHRvdXRfcGFnZTpcbjUyODM6XHRcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpXG41Mjg0Olx0XHRcdGZvbGlvX2ZyZWVfc3dhcChmb2xpbyk7XG41Mjg1Olx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuNTI4NjpcdG91dF9yZWxlYXNlOlxuNTI4NzpcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjUyODg6XHRcdGlmIChmb2xpbyAhPSBzd2FwY2FjaGUpIHtcbjUyODk6XHRcdFx0Zm9saW9fdW5sb2NrKHN3YXBjYWNoZSk7XG41MjkwOlx0XHRcdGZvbGlvX3B1dChzd2FwY2FjaGUpO1xuNTI5MTpcdFx0fVxuNTI5MjpcdFx0aWYgKHNpKVxuNTI5MzpcdFx0XHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuNTI5NDpcdFx0cmV0dXJuIHJldDtcbjUyOTU6XHR9XG41Mjk2Olx0XG41Mjk3Olx0c3RhdGljIGJvb2wgcHRlX3JhbmdlX25vbmUocHRlX3QgKnB0ZSwgaW50IG5yX3BhZ2VzKVxuNTI5ODpcdHtcbjUyOTk6XHRcdGludCBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUzNDU6XHRcdCAqIHB0ZV9ub25lKCkuIE5vdGUgdGhhdCBhbGwgcmVtYWluaW5nIG9yZGVycyB3aWxsIGJlIGNvbXBsZXRlbHlcbjUzNDY6XHRcdCAqIHB0ZV9ub25lKCkuXG41MzQ3Olx0XHQgKi9cbjUzNDg6XHRcdG9yZGVyID0gaGlnaGVzdF9vcmRlcihvcmRlcnMpO1xuNTM0OTpcdFx0d2hpbGUgKG9yZGVycykge1xuNTM1MDpcdFx0XHRhZGRyID0gQUxJR05fRE9XTih2bWYtXHUwMDNlYWRkcmVzcywgUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlcik7XG41MzUxOlx0XHRcdGlmIChwdGVfcmFuZ2Vfbm9uZShwdGUgJiM0MzsgcHRlX2luZGV4KGFkZHIpLCAxIFx1MDAzY1x1MDAzYyBvcmRlcikpXG41MzUyOlx0XHRcdFx0YnJlYWs7XG41MzUzOlx0XHRcdG9yZGVyID0gbmV4dF9vcmRlcihcdTAwMjZvcmRlcnMsIG9yZGVyKTtcbjUzNTQ6XHRcdH1cbjUzNTU6XHRcbjUzNTY6XHRcdHB0ZV91bm1hcChwdGUpO1xuNTM1NzpcdFxuNTM1ODpcdFx0aWYgKCFvcmRlcnMpXG41MzU5Olx0XHRcdGdvdG8gZmFsbGJhY2s7XG41MzYwOlx0XG41MzYxOlx0XHQvKiBUcnkgYWxsb2NhdGluZyB0aGUgaGlnaGVzdCBvZiB0aGUgcmVtYWluaW5nIG9yZGVycy4gKi9cbjUzNjI6XHRcdGdmcCA9IHZtYV90aHBfZ2ZwX21hc2sodm1hKTtcbjUzNjM6XHRcdHdoaWxlIChvcmRlcnMpIHtcbjUzNjQ6XHRcdFx0YWRkciA9IEFMSUdOX0RPV04odm1mLVx1MDAzZWFkZHJlc3MsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuNTM2NTpcdFx0XHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2bWEsIGFkZHIpO1xuNTM2NjpcdFx0XHRpZiAoIWZvbGlvKVxuNTM2NzpcdFx0XHRcdGdvdG8gbmV4dDtcbjUzNjg6XHRcdFx0aWYgKG1lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCB2bWEtXHUwMDNldm1fbW0sIGdmcCkpIHtcbjUzNjk6XHRcdFx0XHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLX0NIQVJHRSk7XG41MzcwOlx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjUzNzE6XHRcdFx0XHRnb3RvIG5leHQ7XG41MzcyOlx0XHRcdH1cbjUzNzM6XHRcdFx0LyogU2FtZSByZWFzb25pbmcgYXMgaW4gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKCkuICovXG41Mzc0Olx0XHRcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcbjUzNzU6XHRcdFx0aWYgKG9yZGVyIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChmb2xpbykpIHtcbjUzNzY6XHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuNTM3NzpcdFx0XHRcdGdvdG8gZmFsbGJhY2s7XG41Mzc4Olx0XHRcdH1cbjUzNzk6XHRcdFx0Zm9saW9fdGhyb3R0bGVfc3dhcHJhdGUoZm9saW8sIGdmcCk7XG41MzgwOlx0XHRcdC8qXG41MzgxOlx0XHRcdCAqIFdoZW4gYSBmb2xpbyBpcyBub3QgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uXG41MzgyOlx0XHRcdCAqIChfX0dGUF9aRVJPIG5vdCB1c2VkKSBvciB1c2VyIGZvbGlvcyByZXF1aXJlIHNwZWNpYWxcbjUzODM6XHRcdFx0ICogaGFuZGxpbmcsIGZvbGlvX3plcm9fdXNlcigpIGlzIHVzZWQgdG8gbWFrZSBzdXJlXG41Mzg0Olx0XHRcdCAqIHRoYXQgdGhlIHBhZ2UgY29ycmVzcG9uZGluZyB0byB0aGUgZmF1bHRpbmcgYWRkcmVzc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MDEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQb3RlbnRpYWw6IEEgUXVpY2sgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGRpdmVzIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIHNwZWNpZmljYWxseSwgaXQmIzM5O3MgdG91Y2hpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBgbW0vbWVtb3J5LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIHJpcGUgZm9yIGZ1enppbmcuIFRoZSBrZXkgZnVuY3Rpb25zIGl0IG1vZGlmaWVzIGFyZSBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCwgYGRvX3N3YXBfcGFnZWAsIGFuZCBgYWxsb2NfYW5vbl9mb2xpb2AuIAoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSBhIHF1aWNrIGdsYW5jZSwgdGhlIGNvcmUgc3Vic3lzdGVtIGludm9sdmVkIGlzIGRlZmluaXRlbHkgbWVtb3J5IG1hbmFnZW1lbnQ6IHBhZ2UgZmF1bHQgaGFuZGxpbmcsIGFub255bW91cyBUSFAgYWxsb2NhdGlvbnMsIHN3YXAtaW4gaGFuZGxpbmcsIGFuZCBtZW1jZyB0aHJvdHRsaW5nLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvci4gVGhlbiwgSSBuZWVkIHRvIGtub3cgaWYgSSBjYW4gdGVzdCB0aGlzIGVhc2lseS4gS25vd2luZyB0aGF0IHRoaXMgaXMgcmVhY2hhYmxlIGluIGEgUUVNVS9HQ0UgYW1kNjQgZW52aXJvbm1lbnQgaXMgcGVyZmVjdC4gWWVhaCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCgpOb3csIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHRlc3RpbmcgdGhpcyBwcm9wZXJseSwgSSBuZWVkIHRvIGtub3cgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zIHRvIHVzZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB3aGF0IGNvbmZpZ3MgaW5mbHVlbmNlIGBtbS9odWdlX21lbW9yeS5jYCwgcGx1cyB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLCBhbmQgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAsIGFuZCBJIHdpbGwgbGlrZWx5IG5lZWQgdG8gZW5zdXJlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBNRU1DR2AsIGFuZCBgU1dBUGAgYXJlIGVuYWJsZWQuIEdvb2QsIEkmIzM5O20gY29uZmlkZW50IEkgY2FuIG1ha2UgdGhpcyBmdXp6aW5nIGNhbXBhaWduIHdvcnRod2hpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFfENPTkZJR19NRU1DR3xDT05GSUdfU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTI1NyBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vTWFrZWZpbGU9NzY9ZW5kaWZcbm1tL01ha2VmaWxlLTc3LVxubW0vTWFrZWZpbGU6Nzg6b2JqLSQoQ09ORklHX1NXQVApXHQmIzQzOz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXG5tbS9NYWtlZmlsZS03OS1vYmotJChDT05GSUdfWlNXQVApXHQmIzQzOz0genN3YXAub1xuLS1cbm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGVfZGV2aWNlLm9cbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4tLVxubW0vY29tcGFjdGlvbi5jPTYwPXN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKSB7IHJldHVybiBmYWxzZTsgfVxuLS1cbm1tL2NvbXBhY3Rpb24uYy03NS0gKi9cbm1tL2NvbXBhY3Rpb24uYzo3NjojaWYgZGVmaW5lZCBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2NvbXBhY3Rpb24uYy03Ny0jZGVmaW5lIENPTVBBQ1RJT05fSFBBR0VfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz03Mz12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbm1tL2RhbW9uL29wcy1jb21tb24uYy03NC17XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NzU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTc2LVx0cG1kX3QgcG1kdmFsID0gcG1kcF9nZXQocG1kKTtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtOTctXHRmb2xpb19wdXQoZm9saW8pO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jOjk4OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2RhbW9uL29wcy1jb21tb24uYy05OS19XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE5ND1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjE1LVx0XHR9IGVsc2Uge1xubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIxNjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjE3LVx0XHRcdHBtZF90IHBtZCA9IHBtZHBfZ2V0KHB2bXcucG1kKTtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjIzLVx0XHRcdFdBUk5fT05fT05DRSgxKTtcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMjQ6I2VuZGlmXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMjUtXHRcdH1cbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0xMDY9c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTA4LXtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTAtXHRjZ3JvdXBfcGF0aChtZW1jZy1cdTAwM2Vjc3MuY2dyb3VwLCBtZW1jZ19wYXRoX2J1ZiwgUEFUSF9NQVgpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExMi1cdFx0cmV0dXJuIHRydWU7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMTM6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE0LVx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9Mzg5PXN0YXRpYyBpbnQgZGFtb25feW91bmdfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTM5Ny1cbm1tL2RhbW9uL3ZhZGRyLmM6Mzk4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtMzk5LVx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXHUwMDNldm1hKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jLTQxNS1cdH1cbm1tL2RhbW9uL3ZhZGRyLmM6NDE2OiNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kYW1vbi92YWRkci5jLTQxNy1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTYzNT1zdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTY0Ni1cbm1tL2RhbW9uL3ZhZGRyLmM6NjQ3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtNjQ4LVx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXHUwMDNldm1hKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jLTY2NC1cdH1cbm1tL2RhbW9uL3ZhZGRyLmM6NjY1OiNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kYW1vbi92YWRkci5jLTY2Ni1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTc5NT1zdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTgwNi1cbm1tL2RhbW9uL3ZhZGRyLmM6ODA3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtODA4LVx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XG4tLVxubW0vZGVidWcuYz03MD1zdGF0aWMgdm9pZCBfX2R1bXBfZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vZGVidWcuYy05Ni1cbm1tL2RlYnVnLmM6OTc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vZGVidWcuYy05OC1cdGlmIChmb2xpby1cdTAwM2VtZW1jZ19kYXRhKVxuLS1cbm1tL2RlYnVnLmM9MTc1PXZvaWQgZHVtcF9tbShjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS9kZWJ1Zy5jLTE4OC0jZW5kaWZcbm1tL2RlYnVnLmM6MTg5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2RlYnVnLmMtMTkwLVx0XHRcJiMzNDtvd25lciAlcHggXCYjMzQ7XG4tLVxubW0vZGVidWcuYy0yMTctI2VuZGlmXG5tbS9kZWJ1Zy5jOjIxODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9kZWJ1Zy5jLTIxOS1cdFx0bW0tXHUwMDNlb3duZXIsXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTExND1zdGF0aWMgdm9pZCBfX2luaXQgcHRlX2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTE3Mi1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxNzM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTE3NC1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTQyMz1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDI0LSNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jOjQyNTojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQyNi1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpIHsgfVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz00MzE9c3RhdGljIHZvaWQgX19pbml0IHB1ZF9sZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjQzMjojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDMzLVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz02NzE9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02ODItXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NjgzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02ODQtc3RhdGljIHZvaWQgX19pbml0IHBtZF9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02OTgtfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjY5OTojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTcwMC1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX3Byb3Rub25lX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjcwMTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzAyLVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03MTU9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9zd2FwX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzMxLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjczMjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzMzLXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03NDk9c3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzY3LX1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3Njg6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03Njktc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0X2RpcnR5X3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTc3MD1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3NzE6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTc3Mi1cbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTAxPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDMtXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTA0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDUtc3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTU1PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTk1Ni0jZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5NTc6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NTgtc3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTU5PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjk2MDojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTYxLVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz05ODc9c3RhdGljIHZvaWQgX19pbml0IGRlc3Ryb3lfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05ODktXHQvKiBGcmVlIChodWdlKSBwYWdlICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTkwOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05OTEtXHQgICAgaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSgpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05OTgtXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTk5Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMDAwLVx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz0xMTQzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjM5LVx0ICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6MTI0MDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI0MS1cdCAgICBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKCkpIHtcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI1MC1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxMjUxOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjUyLVx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7XG4tLVxubW0vZmlsZW1hcC5jPTMzMjk9c3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2ZpbGVtYXAuYy0zMzQxLVx0LyogVXNlIHRoZSByZWFkYWhlYWQgY29kZSwgZXZlbiBpZiByZWFkYWhlYWQgaXMgZGlzYWJsZWQgKi9cbm1tL2ZpbGVtYXAuYzozMzQyOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgKHZtX2ZsYWdzIFx1MDAyNiBWTV9IVUdFUEFHRSkpIHtcbm1tL2ZpbGVtYXAuYy0zMzQzLVx0XHQvKlxuLS1cbm1tL2ZpbGVtYXAuYz00NjE4PXN0YXRpYyB2b2lkIGZpbGVtYXBfY2FjaGVzdGF0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL2ZpbGVtYXAuYy00NjY1LVxubW0vZmlsZW1hcC5jOjQ2NjY6I2lmZGVmIENPTkZJR19TV0FQIC8qIGltcGxpZXMgQ09ORklHX01NVSAqL1xubW0vZmlsZW1hcC5jLTQ2NjctXHRcdFx0aWYgKHNobWVtX21hcHBpbmcobWFwcGluZykpIHtcbi0tXG5tbS9mb2xpby5jPTExMDc9dm9pZCBmb2xpb19iYXRjaF9yZW1vdmVfZXhjZXB0aW9uYWxzKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxuLS1cbm1tL2ZvbGlvLmMtMTExOC1cbm1tL2ZvbGlvLmM6MTExOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9mb2xpby5jLTExMjAtc3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXG4tLVxubW0vZ3VwLmM9NzAxPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZm9sbG93X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2d1cC5jLTczNC1cbm1tL2d1cC5jOjczNTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9ndXAuYy03MzYtXHRpZiAocG1kX3RyYW5zX2h1Z2UocG1kdmFsKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBGT0xMX1RPVUNIKSlcbm1tL2d1cC5jLTczNy1cdFx0dG91Y2hfcG1kKHZtYSwgYWRkciwgcG1kLCBmbGFncyBcdTAwMjYgRk9MTF9XUklURSk7XG5tbS9ndXAuYzo3Mzg6I2VuZGlmXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2d1cC5jLTczOS1cbi0tXG5tbS9obW0uYz0xODg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGhtbV9wZm5fZmxhZ3Nfb3JkZXIodW5zaWduZWQgbG9uZyBvcmRlcilcbi0tXG5tbS9obW0uYy0xOTItXG5tbS9obW0uYzoxOTM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vaG1tLmMtMTk0LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwbWRfdG9faG1tX3Bmbl9mbGFncyhzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcbi0tXG5tbS9obW0uYz0yMDQ9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9obW0uYy0yMjctfVxubW0vaG1tLmM6MjI4OiNlbHNlIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vaG1tLmMtMjI5LS8qIHN0dWIgdG8gYWxsb3cgdGhlIGNvZGUgYmVsb3cgdG8gY29tcGlsZSAqL1xubW0vaG1tLmM9MjMwPWludCBobW1fdm1hX2hhbmRsZV9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2htbS5jLTIzMS1cdFx0dW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgaG1tX3BmbnNbXSwgcG1kX3QgcG1kKTtcbm1tL2htbS5jOjIzMjojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9obW0uYy0yMzMtXG4tLVxubW0vaHVnZV9tZW1vcnkuYz02MT11bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzIF9fcmVhZF9tb3N0bHkgPVxubW0vaHVnZV9tZW1vcnkuYzo2MjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vaHVnZV9tZW1vcnkuYy02My1cdCgxXHUwMDNjXHUwMDNjVFJBTlNQQVJFTlRfSFVHRVBBR0VfRkxBRyl8XG5tbS9odWdlX21lbW9yeS5jLTY0LSNlbmRpZlxubW0vaHVnZV9tZW1vcnkuYzo2NTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL2h1Z2VfbWVtb3J5LmMtNjYtXHQoMVx1MDAzY1x1MDAzY1RSQU5TUEFSRU5UX0hVR0VQQUdFX1JFUV9NQURWX0ZMQUcpfFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzY0OT1zdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNzUxLVx0XHRcdGZvbGlvX3NldF9pZGxlKG5ld19mb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jOjM3NTI6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vaHVnZV9tZW1vcnkuYy0zNzUzLVx0XHRuZXdfZm9saW8tXHUwMDNlbWVtY2dfZGF0YSA9IGZvbGlvLVx1MDAzZW1lbWNnX2RhdGE7XG4tLVxubW0vaHdwb2lzb24taW5qZWN0LmM9NDU9c3RhdGljIGludCBod3BvaXNvbl9maWx0ZXJfZmxhZ3Moc3RydWN0IHBhZ2UgKnApXG4tLVxubW0vaHdwb2lzb24taW5qZWN0LmMtNjYtICovXG5tbS9od3BvaXNvbi1pbmplY3QuYzo2NzojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9od3BvaXNvbi1pbmplY3QuYy02OC1zdGF0aWMgdTY0IGh3cG9pc29uX2ZpbHRlcl9tZW1jZztcbi0tXG5tbS9od3BvaXNvbi1pbmplY3QuYz0xNjI9c3RhdGljIGludCBfX2luaXQgcGZuX2luamVjdF9pbml0KHZvaWQpXG4tLVxubW0vaHdwb2lzb24taW5qZWN0LmMtMTkxLVxubW0vaHdwb2lzb24taW5qZWN0LmM6MTkyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2h3cG9pc29uLWluamVjdC5jLTE5My1cdGRlYnVnZnNfY3JlYXRlX3U2NChcJiMzNDtjb3JydXB0LWZpbHRlci1tZW1jZ1wmIzM0OywgMDYwMCwgaHdwb2lzb25fZGlyLFxuLS1cbm1tL2tzbS5jPTI1Mjc9c3RhdGljIGludCBrc21fbmV4dF9wYWdlX3BtZF9lbnRyeShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9rc20uYy0yNTQ3LVxubW0va3NtLmM6MjU0ODpcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2IHBtZF9sZWFmKHBtZCkpIHtcbm1tL2tzbS5jLTI1NDktXHRcdHB0bCA9IHBtZF9sb2NrKG1tLCBwbWRwKTtcbi0tXG5tbS9rc20uYz0zMTM3PXN0cnVjdCBmb2xpbyAqa3NtX21pZ2h0X25lZWRfdG9fY29weShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2tzbS5jLTMxNzYtXHRcdF9fZm9saW9fc2V0X2xvY2tlZChuZXdfZm9saW8pO1xubW0va3NtLmM6MzE3NzojaWZkZWYgQ09ORklHX1NXQVBcbm1tL2tzbS5jLTMxNzgtXHRcdGNvdW50X3ZtX2V2ZW50KEtTTV9TV1BJTl9DT1BZKTtcbi0tXG5tbS9saXN0X2xydS5jPTI5PXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbCwgYm9vbCBpcnFfb2ZmLFxuLS1cbm1tL2xpc3RfbHJ1LmMtMzktXG5tbS9saXN0X2xydS5jOjQwOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmMtNDEtc3RhdGljIExJU1RfSEVBRChtZW1jZ19saXN0X2xydXMpO1xuLS1cbm1tL2xpc3RfbHJ1LmM9MTQxPWxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG4tLVxubW0vbGlzdF9scnUuYy0xNTAtfVxubW0vbGlzdF9scnUuYzoxNTE6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xubW0vbGlzdF9scnUuYy0xNTItXG4tLVxubW0vbGlzdF9scnUuYz00MTM9dW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG4tLVxubW0vbGlzdF9scnUuYy00MjEtXG5tbS9saXN0X2xydS5jOjQyMjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jLTQyMy1cdGlmICgqbnJfdG9fd2FsayBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSkge1xuLS1cbm1tL2xpc3RfbHJ1LmM9NDUxPXN0YXRpYyB2b2lkIGluaXRfb25lX2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbClcbi0tXG5tbS9saXN0X2xydS5jLTQ2MS1cbm1tL2xpc3RfbHJ1LmM6NDYyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmMtNDYzLXN0YXRpYyBzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1lbWNnX2luaXRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBnZnBfdCBnZnApXG4tLVxubW0vbGlzdF9scnUuYz02NTk9c3RhdGljIHZvaWQgbWVtY2dfZGVzdHJveV9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbi0tXG5tbS9saXN0X2xydS5jLTY2MS19XG5tbS9saXN0X2xydS5jOjY2MjojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5tbS9saXN0X2xydS5jLTY2My1cbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4tLVxubW0vbGlzdF9scnUuYy02NjctXG5tbS9saXN0X2xydS5jOjY2ODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jLTY2OS1cdGlmIChzaHJpbmtlcilcbi0tXG5tbS9saXN0X2xydS5jPTY5Mj12b2lkIGxpc3RfbHJ1X2Rlc3Ryb3koc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4tLVxubW0vbGlzdF9scnUuYy03MDMtXG5tbS9saXN0X2xydS5jOjcwNDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jLTcwNS1cdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xuLS1cbm1tL21hZHZpc2UuYz0xNTE9c3RhdGljIGludCBtYWR2aXNlX3VwZGF0ZV92bWEodm1fZmxhZ3NfdCBuZXdfZmxhZ3MsXG4tLVxubW0vbWFkdmlzZS5jLTE5NC1cbm1tL21hZHZpc2UuYzoxOTU6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tYWR2aXNlLmMtMTk2LXN0YXRpYyBpbnQgc3dhcGluX3dhbGtfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWFkdmlzZS5jPTI0Mz1zdGF0aWMgdm9pZCBzaG1lbV9zd2FwaW5fcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWFkdmlzZS5jLTI3OC19XG5tbS9tYWR2aXNlLmM6Mjc5OiNlbmRpZlx0XHQvKiBDT05GSUdfU1dBUCAqL1xubW0vbWFkdmlzZS5jLTI4MC1cbi0tXG5tbS9tYWR2aXNlLmM9MjkwPXN0YXRpYyBsb25nIG1hZHZpc2Vfd2lsbG5lZWQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTI5OC1cbm1tL21hZHZpc2UuYzoyOTk6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tYWR2aXNlLmMtMzAwLVx0aWYgKCFmaWxlKSB7XG4tLVxubW0vbWFkdmlzZS5jPTM2Mj1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21hZHZpc2UuYy0zODQtXG5tbS9tYWR2aXNlLmM6Mzg1OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21hZHZpc2UuYy0zODYtXHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZCkpIHtcbi0tXG5tbS9tYWR2aXNlLmM9MTUyNz1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTU0Ny0jZW5kaWZcbm1tL21hZHZpc2UuYzoxNTQ4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21hZHZpc2UuYy0xNTQ5LVx0Y2FzZSBNQURWX0hVR0VQQUdFOlxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz01OTY9dm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTYwNS1cbm1tL21lbWNvbnRyb2wtdjEuYzo2MDY6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLXYxLmMtNjA3LS8qKlxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xNDcyPXZvaWQgbWVtY2cxX29vbV9maW5pc2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGxvY2tlZClcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTQ3OS0gKiBjZ3JvdXAgdjEgdXNlcnNwYWNlIHZtcHJlc3N1cmUgaW50ZXJmYWNlIChtZW1vcnkucHJlc3N1cmVfbGV2ZWwgL1xubW0vbWVtY29udHJvbC12MS5jOjE0ODA6ICogY2dyb3VwLmV2ZW50X2NvbnRyb2wpLiBLZXB0IGhlcmUgc28gdjItb25seSBrZXJuZWxzIChDT05GSUdfTUVNQ0dfVjE9bilcbm1tL21lbWNvbnRyb2wtdjEuYy0xNDgxLSAqIGRyb3AgdGhlIHdob2xlIGV2ZW50ZmQgYWNjdW11bGF0b3IsIGl0cyB3b3JrIGl0ZW0sIGFuZCB0aGUgcGVyLW1lbWNnXG4tLVxubW0vbWVtY29udHJvbC12MS5jPTIxNzU9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZzFfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMjE3Ny1cdE5SX0FOT05fTUFQUEVELFxubW0vbWVtY29udHJvbC12MS5jOjIxNzg6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWVtY29udHJvbC12MS5jLTIxNzktXHROUl9BTk9OX1RIUFMsXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTIxODYtXHRXT1JLSU5HU0VUX1JFRkFVTFRfRklMRSxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMTg3OiNpZmRlZiBDT05GSUdfU1dBUFxubW0vbWVtY29udHJvbC12MS5jLTIxODgtXHRNRU1DR19TV0FQLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yMTkzPXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtZW1jZzFfc3RhdF9uYW1lc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMTk1LVx0XCYjMzQ7cnNzXCYjMzQ7LFxubW0vbWVtY29udHJvbC12MS5jOjIxOTY6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWVtY29udHJvbC12MS5jLTIxOTctXHRcJiMzNDtyc3NfaHVnZVwmIzM0Oyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMjIwNC1cdFwmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdF9maWxlXCYjMzQ7LFxubW0vbWVtY29udHJvbC12MS5jOjIyMDU6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLXYxLmMtMjIwNi1cdFwmIzM0O3N3YXBcJiMzNDssXG4tLVxubW0vbWVtY29udHJvbC12MS5oPTI1PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC12MS5oLTI4LS8qIENncm91cCB2MS1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi9cbm1tL21lbWNvbnRyb2wtdjEuaDoyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLXYxLmgtMzAtXG4tLVxubW0vbWVtY29udHJvbC12MS5oPTkyPWV4dGVybiBzdHJ1Y3QgY2Z0eXBlIG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzW107XG5tbS9tZW1jb250cm9sLXYxLmgtOTMtXG5tbS9tZW1jb250cm9sLXYxLmg6OTQ6I2Vsc2VcdC8qIENPTkZJR19NRU1DR19WMSAqL1xubW0vbWVtY29udHJvbC12MS5oLTk1LVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0xMjY9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV91bmNoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcykge31cbm1tL21lbWNvbnRyb2wtdjEuaC0xMjctXG5tbS9tZW1jb250cm9sLXYxLmg6MTI4OiNlbmRpZlx0LyogQ09ORklHX01FTUNHX1YxICovXG5tbS9tZW1jb250cm9sLXYxLmgtMTI5LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMTU9c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMzQtXG5tbS9tZW1jb250cm9sLmM6MjM1OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0yMzYtc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTM3OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy00MDYtXHROUl9TRUNPTkRBUllfUEFHRVRBQkxFLFxubW0vbWVtY29udHJvbC5jOjQwNzojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy00MDgtXHROUl9TV0FQQ0FDSEUsXG4tLVxubW0vbWVtY29udHJvbC5jPTU1MD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTcyLVxubW0vbWVtY29udHJvbC5jOjU3MzojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNTc0LXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXG4tLVxubW0vbWVtY29udHJvbC5jPTU5OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcbm1tL21lbWNvbnRyb2wuYzo1OTk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTYwMC1cdFBHUEdJTixcbi0tXG5tbS9tZW1jb250cm9sLmMtNjEwLVx0UEdMQVpZRlJFRUQsXG5tbS9tZW1jb250cm9sLmM6NjExOiNpZmRlZiBDT05GSUdfU1dBUFxubW0vbWVtY29udHJvbC5jLTYxMi1cdFNXUElOX1pFUk8sXG4tLVxubW0vbWVtY29udHJvbC5jLTYxOS0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo2MjA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWVtY29udHJvbC5jLTYyMS1cdFRIUF9GQVVMVF9BTExPQyxcbi0tXG5tbS9tZW1jb250cm9sLmM9ODMyPXN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbi0tXG5tbS9tZW1jb250cm9sLmMtODQ3LVxubW0vbWVtY29udHJvbC5jOjg0ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtODQ5LS8qXG4tLVxubW0vbWVtY29udHJvbC5jPTkxNj12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcbi0tXG5tbS9tZW1jb250cm9sLmMtOTI4LVxubW0vbWVtY29udHJvbC5jOjkyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtOTMwLS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cbi0tXG5tbS9tZW1jb250cm9sLmM9MTEwND1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtMTExMS1cbm1tL21lbWNvbnRyb2wuYzoxMTEyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xMTEzLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNTkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTE2MDktXHR7IFwmIzM0O2ZpbGVfd3JpdGViYWNrXCYjMzQ7LFx0XHROUl9XUklURUJBQ0tcdFx0XHR9LFxubW0vbWVtY29udHJvbC5jOjE2MTA6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLmMtMTYxMS1cdHsgXCYjMzQ7c3dhcGNhY2hlZFwmIzM0OyxcdFx0XHROUl9TV0FQQ0FDSEVcdFx0XHR9LFxubW0vbWVtY29udHJvbC5jLTE2MTItI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6MTYxMzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9tZW1jb250cm9sLmMtMTYxNC1cdHsgXCYjMzQ7YW5vbl90aHBcJiMzNDssXHRcdFx0TlJfQU5PTl9USFBTXHRcdFx0fSxcbi0tXG5tbS9tZW1jb250cm9sLmM9MTcxMj11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jLTE3MTctXG5tbS9tZW1jb250cm9sLmM6MTcxODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTcxOS11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jPTE3Mzg9c3RhdGljIHZvaWQgbWVtY2dfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMTc4NC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWVtY2dfdm1fZXZlbnRfc3RhdCk7IGkmIzQzOyYjNDM7KSB7XG5tbS9tZW1jb250cm9sLmM6MTc4NTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTc4Ni1cdFx0aWYgKG1lbWNnX3ZtX2V2ZW50X3N0YXRbaV0gPT0gUEdQR0lOIHx8XG4tLVxubW0vbWVtY29udHJvbC5jPTE4MzY9dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMTg1Ny1cdFx0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9ldmVudHNbTUVNQ0dfU1dBUF9NQVhdKSk7XG5tbS9tZW1jb250cm9sLmM6MTg1ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTg1OS1cdGVsc2Uge1xuLS1cbm1tL21lbWNvbnRyb2wuYz0yODYzPXN0YXRpYyB2b2lkIGNvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yODc1LVxubW0vbWVtY29udHJvbC5jOjI4NzY6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xubW0vbWVtY29udHJvbC5jLTI4Nzctc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfc2xhYl9ubWlfc2FmZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jPTMwNTA9X19hbHdheXNfaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpjdXJyZW50X29ial9jZ3JvdXAodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtMzA1NS1cbm1tL21lbWNvbnRyb2wuYzozMDU2Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTUNHX05NSV9VTlNBRkUpIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSlcbm1tL21lbWNvbnRyb2wuYy0zMDU3LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5tbS9tZW1jb250cm9sLmM9MzA5Nj1zdHJ1Y3Qgb2JqX2Nncm91cCAqZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTA2LVxubW0vbWVtY29udHJvbC5jOjMxMDc6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xubW0vbWVtY29udHJvbC5jLTMxMDgtc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfa21lbV9ubWlfc2FmZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCB2YWwpXG4tLVxubW0vbWVtY29udHJvbC5jPTQyMTg9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQyMzktXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIFx1MDAyNnBhcmVudC1cdTAwM2Vzd2FwLCBmYWxzZSk7XG5tbS9tZW1jb250cm9sLmM6NDI0MDojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNDI0MS1cdFx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7XG4tLVxubW0vbWVtY29udHJvbC5jLTQyNTMtXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIE5VTEwsIGZhbHNlKTtcbm1tL21lbWNvbnRyb2wuYzo0MjU0OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy00MjU1LVx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2VrbWVtLCBOVUxMLCBmYWxzZSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ0MjE9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDQzMS0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo0NDMyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy00NDMzLVx0cGFnZV9jb3VudGVyX3NldF9tYXgoXHUwMDI2bWVtY2ctXHUwMDNla21lbSwgUEFHRV9DT1VOVEVSX01BWCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ0NjE9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NDk2LVxubW0vbWVtY29udHJvbC5jOjQ0OTc6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xubW0vbWVtY29udHJvbC5jLTQ0OTgtc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbi0tXG5tbS9tZW1jb250cm9sLmM9NTE2MD1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUxNzEtXHQuZGZsX2NmdHlwZXMgPSBtZW1vcnlfZmlsZXMsXG5tbS9tZW1jb250cm9sLmM6NTE3MjojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNTE3My1cdC5sZWdhY3lfY2Z0eXBlcyA9IG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzLFxuLS1cbm1tL21lbWNvbnRyb2wuYz01Njg3PWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTU3MjItXG5tbS9tZW1jb250cm9sLmM6NTcyMzojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy01NzI0LS8qKlxuLS1cbm1tL21lbWNvbnRyb2wuYz02MTcyPXN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTYxNzctXHRXQVJOX09OKGNncm91cF9hZGRfZGZsX2NmdHlwZXMoXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBzd2FwX2ZpbGVzKSk7XG5tbS9tZW1jb250cm9sLmM6NjE3ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNjE3OS1cdFdBUk5fT04oY2dyb3VwX2FkZF9sZWdhY3lfY2Z0eXBlcyhcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIG1lbXN3X2ZpbGVzKSk7XG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipUcmFjaW5nIHRoZSBTb3VyY2Ugb2YgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCBmdW5jdGlvbiBpcyBkZWZpbmVkLiBJdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIGNvbnRleHQsIGFuZCBJIGNhbiYjMzk7dCBqdXN0IHJlbHkgb24gbWVtb3J5LiBUaW1lIGZvciB0aGUgdHJpZWQtYW5kLXRydWUgbWV0aG9kOiBsZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIGJlc3QgYXBwcm9hY2ggaGVyZSBpcyBnb2luZyB0byBiZSBhIHF1aWNrIGBncmVwYC4gSSYjMzk7bGwgZmlyZSB0aGF0IG9mZiBhbmQgc2VlIHdoYXQgaXQgdHVybnMgdXAuIEhvcGVmdWxseSwgaXQmIzM5O2xsIHBpbnBvaW50IHRoZSBkZWZpbml0aW9uIHF1aWNrbHkgc28gSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MTMwNz1zdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMzM3LVx0ICovXG5tbS9odWdlX21lbW9yeS5jOjEzMzg6XHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG5tbS9odWdlX21lbW9yeS5jLTEzMzktXG4tLVxubW0vbWVtY29udHJvbC5jPTI1MTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2hpZ2hfZGVsYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNTU0LSAqL1xubW0vbWVtY29udHJvbC5jOjI1NTU6dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbm1tL21lbWNvbnRyb2wuYy0yNTU2LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9MjY0NT1zdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjg0OS1cdCAgICBnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykpXG5tbS9tZW1jb250cm9sLmM6Mjg1MDpcdFx0X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spO1xubW0vbWVtY29udHJvbC5jLTI4NTEtXHRyZXR1cm4gMDtcbi0tXG5tbS9tZW1vcnkuYz00ODgxPXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTUyNzYtXHQgKi9cbm1tL21lbW9yeS5jOjUyNzc6XHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG5tbS9tZW1vcnkuYy01Mjc4LVx0cmV0dXJuIHJldDtcbi0tXG5tbS9tZW1vcnkuYz01MzA5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTM3My1cdFx0LyogU2FtZSByZWFzb25pbmcgYXMgaW4gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKCkuICovXG5tbS9tZW1vcnkuYzo1Mzc0Olx0XHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG5tbS9tZW1vcnkuYy01Mzc1LVx0XHRpZiAob3JkZXIgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKGZvbGlvKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjUxMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50LCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpdmluZyBpbnRvIHRoZSBNZW1vcnkgQ29udHJvbCBDb2RlKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBUbyByZWFsbHkgZ3Jhc3AgaXRzIG1lY2hhbmljcywgSSYjMzk7bSBnb2luZyB0byBqdW1wIGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbmF2aWdhdGluZyB0byB0aGUgaGVhZGVyIGZpbGUsIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY3J1Y2lhbCBkZWNsYXJhdGlvbiBhbmQgYW55IHJlbGV2YW50IHN1cHBvcnRpbmcgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGlzIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIGl0cyBzaWduYXR1cmUgYW5kIHdoYXQgc3RydWN0dXJlcyBpdCBpbnRlcmFjdHMgd2l0aCBpcyBrZXkgdG8gZGVjaXBoZXJpbmcgdGhlIGxhcmdlciBjb250ZXh0IG9mIG1lbW9yeSBjZ3JvdXAgbWFuYWdlbWVudC4gSSYjMzk7bSBob3BpbmcgdGhlIGNvbW1lbnRzIGFyZSBoZWxwZnVsIHRvbywgdG8gc2F2ZSBzb21lIGRlYnVnZ2luZyB0aW1lIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05MDI9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MTAtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5MTE6dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MTItXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5MTM6c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkxNC17XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MTUtXHRpZiAodW5saWtlbHkoY3VycmVudC1cdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2gpKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTE2Olx0XHRfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfbWFzayk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MTctfVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEzNTQ9bWVtX2Nncm91cF9wcmludF9vb21fbWVtaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTM1Ny1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEzNTg6c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzNTkte1xuLS1cbmluY2x1ZGUvbGludXgvcmVzdW1lX3VzZXJfbW9kZS5oPTQxPXN0YXRpYyBpbmxpbmUgdm9pZCByZXN1bWVfdXNlcl9tb2RlX3dvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuaW5jbHVkZS9saW51eC9yZXN1bWVfdXNlcl9tb2RlLmgtNTgtXG5pbmNsdWRlL2xpbnV4L3Jlc3VtZV91c2VyX21vZGUuaDo1OTpcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcbmluY2x1ZGUvbGludXgvcmVzdW1lX3VzZXJfbW9kZS5oLTYwLVx0YmxrY2dfbWF5YmVfdGhyb3R0bGVfY3VycmVudCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIwNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqRGlzc2VjdGluZyBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gcG9pbnRlZCB0byBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgIOKAkyBhIGZ1bmN0aW9uIG5hbWUgdGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHJvbGUgaW4gaGFuZGxpbmcgbWVtb3J5IGNncm91cCBvdmVyLWhpZ2ggc2NlbmFyaW9zLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBwaW5wb2ludCBpdHMgb3JpZ2luLiBUaGUgdGV4dCBjb25maXJtcyBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gRXhjZWxsZW50LCB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4KCk5vdywgbXkgbmV4dCBtb3ZlIGlzIG9idmlvdXM6IEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoYXQgc291cmNlIGZpbGUgYW5kICpyZWFkKiB0aGUgY29kZSBvZiBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgbG9naWMsIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGlzIGZ1bmN0aW9uPyBXaGF0IGFjdGlvbnMgZG9lcyBpdCBwZXJmb3JtIHRvIGFkZHJlc3MgdGhlIG92ZXItaGlnaCBzaXR1YXRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIG9mIGNvbmNlcm4gdG8gd2F0Y2ggZm9yPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IGRvZXMgaXQgZGVhbCB3aXRoIE9PTT8gSG93IGRvZXMgaXQgaGFuZGxlIHJlY2xhaW0sIG9yIHBlcmhhcHMgZXZlbiBraWxsIHByb2Nlc3Nlcz8gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB1bmRlcnN0YW5kaW5nIGJlZ2lucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTQwOlx0XHQgKiBGYWN0b3IgaW4gdGhlIHRhc2smIzM5O3Mgb3duIGNvbnRyaWJ1dGlvbiB0byB0aGUgb3ZlcmFnZSwgc3VjaCB0aGF0IGZvdXJcbjI1NDE6XHRcdCAqIE4tc2l6ZWQgYWxsb2NhdGlvbnMgYXJlIHRocm90dGxlZCBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGFzIG9uZVxuMjU0MjpcdFx0ICogNE4tc2l6ZWQgYWxsb2NhdGlvbi5cbjI1NDM6XHRcdCAqXG4yNTQ0Olx0XHQgKiBNRU1DR19DSEFSR0VfQkFUQ0ggcGFnZXMgaXMgbm9taW5hbCwgc28gd29yayBvdXQgaG93IG11Y2ggc21hbGxlciBvclxuMjU0NTpcdFx0ICogbGFyZ2VyIHRoZSBjdXJyZW50IGNoYXJnZSBwYXRjaCBpcyB0aGFuIHRoYXQuXG4yNTQ2Olx0XHQgKi9cbjI1NDc6XHRcdHJldHVybiBwZW5hbHR5X2ppZmZpZXMgKiBucl9wYWdlcyAvIE1FTUNHX0NIQVJHRV9CQVRDSDtcbjI1NDg6XHR9XG4yNTQ5Olx0XG4yNTUwOlx0LypcbjI1NTE6XHQgKiBSZWNsYWltcyBtZW1vcnkgb3ZlciB0aGUgaGlnaCBsaW1pdC4gQ2FsbGVkIGRpcmVjdGx5IGZyb21cbjI1NTI6XHQgKiB0cnlfY2hhcmdlKCkgKGNvbnRleHQgcGVybWl0dGluZyksIGFzIHdlbGwgYXMgZnJvbSB0aGUgdXNlcmxhbmRcbjI1NTM6XHQgKiByZXR1cm4gcGF0aCB3aGVyZSByZWNsYWltIGlzIGFsd2F5cyBhYmxlIHRvIGJsb2NrLlxuMjU1NDpcdCAqL1xuMjU1NTpcdHZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG4yNTU2Olx0e1xuMjU1NzpcdFx0dW5zaWduZWQgbG9uZyBwZW5hbHR5X2ppZmZpZXM7XG4yNTU4Olx0XHR1bnNpZ25lZCBsb25nIHBmbGFncztcbjI1NTk6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkO1xuMjU2MDpcdFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzID0gY3VycmVudC1cdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2g7XG4yNTYxOlx0XHRpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XG4yNTYyOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4yNTYzOlx0XHRib29sIGluX3JldHJ5ID0gZmFsc2U7XG4yNTY0Olx0XG4yNTY1Olx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oY3VycmVudC1cdTAwM2VtbSk7XG4yNTY2Olx0XHRjdXJyZW50LVx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaCA9IDA7XG4yNTY3Olx0XG4yNTY4Olx0cmV0cnlfcmVjbGFpbTpcbjI1Njk6XHRcdC8qXG4yNTcwOlx0XHQgKiBCYWlsIGlmIHRoZSB0YXNrIGlzIGFscmVhZHkgZXhpdGluZy4gVW5saWtlIG1lbW9yeS5tYXgsXG4yNTcxOlx0XHQgKiBtZW1vcnkuaGlnaCBlbmZvcmNlbWVudCBpc24mIzM5O3QgYXMgc3RyaWN0LCBhbmQgdGhlcmUgaXMgbm9cbjI1NzI6XHRcdCAqIE9PTSBraWxsZXIgaW52b2x2ZWQsIHdoaWNoIG1lYW5zIHRoZSBleGNlc3MgY291bGQgYWxyZWFkeVxuMjU3MzpcdFx0ICogYmUgbXVjaCBiaWdnZXIgKGFuZCBzdGlsbCBncm93aW5nKSB0aGFuIGl0IGNvdWxkIGZvclxuMjU3NDpcdFx0ICogbWVtb3J5Lm1heDsgdGhlIGR5aW5nIHRhc2sgY291bGQgZ2V0IHN0dWNrIGluIGZydWl0bGVzc1xuMjU3NTpcdFx0ICogcmVjbGFpbSBmb3IgYSBsb25nIHRpbWUsIHdoaWNoIGlzbiYjMzk7dCBkZXNpcmFibGUuXG4yNTc2Olx0XHQgKi9cbjI1Nzc6XHRcdGlmICh0YXNrX2lzX2R5aW5nKCkpXG4yNTc4Olx0XHRcdGdvdG8gb3V0O1xuMjU3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIwNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIEltcGxlbWVudGF0aW9uIG9mIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgaGFzIGJlZW4gaW50cm9kdWNlZCBpbnRvIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLCBgYWxsb2NfYW5vbl9mb2xpb2AsIGFuZCBgZG9fc3dhcF9wYWdlYC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZywgbGlrZWx5IGRlYWxpbmcgd2l0aCBvdmVyLWhpZ2ggbWVtb3J5IHVzYWdlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQuIFNvLCBsZXQmIzM5O3Mgc3RhcnQgYnkgZmlndXJpbmcgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHRzIGZvciBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCBhbmQgYGFsbG9jX2Fub25fZm9saW9gLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gYW5kIGhvdyB0aGlzIG5ldyBjb2RlIGludGVncmF0ZXMgaW50byB0aGUgZXhpc3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBOVU1BIGFuZCBvdGhlciByZWxhdGVkIHN1YnN5c3RlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTEzMDU9RVhQT1JUX1NZTUJPTF9HUEwodGhwX2dldF91bm1hcHBlZF9hcmVhKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTMwNi1cbm1tL2h1Z2VfbWVtb3J5LmM6MTMwNzpzdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdlX21lbW9yeS5jLTEzMDgtXHRcdHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9odWdlX21lbW9yeS5jPTEzOTA9c3RhdGljIHZtX2ZhdWx0X3QgX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEzOTctXG5tbS9odWdlX21lbW9yeS5jOjEzOTg6XHRmb2xpbyA9IHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCh2bWEsIHZtZi1cdTAwM2VhZGRyZXNzKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTM5OS1cdGlmICh1bmxpa2VseSghZm9saW8pKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjEwMT1zdGF0aWMgdm1fZmF1bHRfdCBkb19odWdlX3plcm9fd3BfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjEwOC1cbm1tL2h1Z2VfbWVtb3J5LmM6MjEwOTpcdGZvbGlvID0gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MpO1xubW0vaHVnZV9tZW1vcnkuYy0yMTEwLVx0aWYgKHVubGlrZWx5KCFmb2xpbykpXG4tLVxubW0vbWVtb3J5LmM9NTMwOT1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19hbm9uX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTUzNzItXHRcdH1cbm1tL21lbW9yeS5jOjUzNzM6XHRcdC8qIFNhbWUgcmVhc29uaW5nIGFzIGluIHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpLiAqL1xubW0vbWVtb3J5LmMtNTM3NC1cdFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk4MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBhbGxvY19hbm9uX2ZvbGlvYCBDYWxsZXJzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGNhbGxlcnMgb2YgYGFsbG9jX2Fub25fZm9saW9gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGlzIGZ1bmN0aW9uIGdldHRpbmcgdXRpbGl6ZWQ/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzLCB0aGUgdmFyaW91cyBzdWJzeXN0ZW1zIHRoYXQgZGVwZW5kIG9uIGl0LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBicm9hZCBhcHByb2FjaC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgLSBgZ2l0IGdyZXBgLCBtYXliZSBzb21lIHN0YXRpYyBhbmFseXNpcywgdG8gaWRlbnRpZnkgdGhlIHNvdXJjZSBjb2RlIGxvY2F0aW9ucy4KClRoZW4sIHRoZSBnb2FsIHNoaWZ0cyB0byB1bmRlcnN0YW5kaW5nIHdoeSB0aGVzZSBjYWxsZXJzIHVzZSBgYWxsb2NfYW5vbl9mb2xpb2Agc3BlY2lmaWNhbGx5LiBBcmUgdGhleSBkZWFsaW5nIHdpdGggcGFnZSBhbGxvY2F0aW9uIGZvciBhbm9ueW1vdXMgbWFwcGluZ3MsIGh1Z2UgcGFnZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgdHlwZSBvZiBjYWxsZXIgaXMgZ29pbmcgdG8gaGVhdmlseSBpbmZsdWVuY2UgdGhlIHVzYWdlIHBhdHRlcm5zLiBJIGFudGljaXBhdGUgc2VlaW5nIHVzYWdlIGluIGBtbWFwYCBpbXBsZW1lbnRhdGlvbnMsIHBvdGVudGlhbGx5IHdpdGhpbiB0aGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGl0c2VsZiwgcGVyaGFwcyByZWxhdGVkIHRvIGRlbWFuZCBwYWdpbmcgb3IgQ09XIG9wZXJhdGlvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBtZW1vcnkgcHJvdGVjdGlvbiBmbGFncyBhbmQgYWxsb2NhdGlvbiBjb25zdHJhaW50cyBwYXNzZWQgaW4sIHdoaWNoIGNhbiByZXZlYWwgY3J1Y2lhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW50ZW5kZWQgbWVtb3J5IHNlbWFudGljcy4gSSYjMzk7bSBhbHNvIHJlYWR5IHRvIHNlZSBzb21lIG1vcmUgZWRnZSBjYXNlIHNjZW5hcmlvcy4KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGRlZXAgZGl2ZSB0byBleGFtaW5lIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgbWVtb3J5IGZyYWdtZW50YXRpb24gaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlc2UgY2FsbGVycy4gTWF5YmUgdGhlcmUgYXJlIHNvbWUgY29tcGxleCBsb2NrIGludGVyYWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZXZhbHVhdGVkIGFuZCBjaGVja2VkLiBJIHdpbGwgYmUgbG9va2luZyB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBvcHBvcnR1bml0aWVzIHRvIG9wdGltaXplIGFuZCBtYWtlIHRoZSBtZW1vcnkgaGFuZGxpbmcgbW9yZSBlZmZpY2llbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2Fub25fZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0xMzA1PUVYUE9SVF9TWU1CT0xfR1BMKHRocF9nZXRfdW5tYXBwZWRfYXJlYSk7XG5tbS9odWdlX21lbW9yeS5jLTEzMDYtXG5tbS9odWdlX21lbW9yeS5jOjEzMDc6c3RhdGljIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0xMzA4LVx0XHR1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMzkwPXN0YXRpYyB2bV9mYXVsdF90IF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMzk3LVxubW0vaHVnZV9tZW1vcnkuYzoxMzk4Olx0Zm9saW8gPSB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQodm1hLCB2bWYtXHUwMDNlYWRkcmVzcyk7XG5tbS9odWdlX21lbW9yeS5jLTEzOTktXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcbi0tXG5tbS9odWdlX21lbW9yeS5jPTIxMDE9c3RhdGljIHZtX2ZhdWx0X3QgZG9faHVnZV96ZXJvX3dwX3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIxMDgtXG5tbS9odWdlX21lbW9yeS5jOjIxMDk6XHRmb2xpbyA9IHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCh2bWEsIHZtZi1cdTAwM2VhZGRyZXNzKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMjExMC1cdGlmICh1bmxpa2VseSghZm9saW8pKVxuLS1cbm1tL21lbW9yeS5jPTUyOTc9c3RhdGljIGJvb2wgcHRlX3JhbmdlX25vbmUocHRlX3QgKnB0ZSwgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbW9yeS5jLTUzMDgtXG5tbS9tZW1vcnkuYzo1MzA5OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9tZW1vcnkuYy01MzEwLXtcbi0tXG5tbS9tZW1vcnkuYy01MzcyLVx0XHR9XG5tbS9tZW1vcnkuYzo1MzczOlx0XHQvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi9cbm1tL21lbW9yeS5jLTUzNzQtXHRcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcbi0tXG5tbS9tZW1vcnkuYz01NDM3PXN0YXRpYyB2bV9mYXVsdF90IGRvX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTU0OTEtXHQvKiBSZXR1cm5zIE5VTEwgb24gT09NIG9yIEVSUl9QVFIoLUVBR0FJTikgaWYgd2UgbXVzdCByZXRyeSB0aGUgZmF1bHQgKi9cbm1tL21lbW9yeS5jOjU0OTI6XHRmb2xpbyA9IGFsbG9jX2Fub25fZm9saW8odm1mKTtcbm1tL21lbW9yeS5jLTU0OTMtXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5NTEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwga2V5IGFyZWFzOiBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIGFuZCB0aGVuIGBkb19zd2FwX3BhZ2VgIGFuZCBgYWxsb2NfYW5vbl9mb2xpb2AgaW4gYG1tL21lbW9yeS5jYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hhdCBhcmUgdGhlIHJlbGV2YW50IHN5bWJvbHMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQgb3IgZGlyZWN0bHkgY2FsbCB0aGVzZSBmdW5jdGlvbnMuCgpCZWZvcmUgSSBnbyB0b28gZmFyIGRvd24gdGhhdCByYWJiaXQgaG9sZSwgSSBzaG91bGQgZm9sbG93IGJlc3QgcHJhY3RpY2VzIGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgaW5jbHVkaW5nIGZ1bmN0aW9ucyB3aGljaCBhcmUgdG9vIGdlbmVyaWMuIEkmIzM5O2xsIHJlZmVyIGJhY2sgdG8gdGhlIGZvY3VzIHN5bWJvbHMgZ3VpZGVsaW5lcy4gVGhleSBleHBsaWNpdGx5IHNheSB0byAqYXZvaWQqIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocyBsaWtlIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIGV0Yy4gV2UgbmVlZCB0byB0YXJnZXQgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnkgcG9pbnRzLiBBbHNvLCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBpc3N1ZSB3aXRoIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGluIGhlYWRlcnMg4oCTIHRoZXkgZG9uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcywgc28gSSBuZWVkIHRvIGZpbmQgdGhlIG5vbi1zdGF0aWMgY2FsbGVycyBpZiB0aGUgY2hhbmdlIGlzIGxhcmdlbHkgaW4gdGhvc2UgaGVscGVycy4KClJpZ2h0LCBiYWNrIHRvIHRoZSBzeW1ib2xzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4gSSYjMzk7dmUgZ290IGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAsIHdoaWNoIGlzIG5vbi1zdGF0aWMgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEFuZCB0aGVuLCB3ZSBoYXZlIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLCB3aGljaCBpcyBzdGF0aWMsIGFuZCByZXNpZGVzIGluIGBtbS9odWdlX21lbW9yeS5jYC4gTm93LCB3aG8gKmNhbGxzKiBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYD8gSSBjYW4gc2VlIGEgY291cGxlIHJpZ2h0IGF3YXk6IGBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCAoc3RhdGljLCBjYWxsZWQgYnkgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCkgYW5kIGBkb19odWdlX3plcm9fd3BfcG1kYCAoc3RhdGljLCBjYWxsZWQgYnkgYGRvX2h1Z2VfcG1kX3dwX3BhZ2VgKS4gT2ssIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgYW5kIGBkb19odWdlX3BtZF93cF9wYWdlYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgYXJlIHRoZSBuZXh0IGZ1bmN0aW9ucyBJJiMzOTtsbCBsb29rIGludG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX2h1Z2VfcG1kXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTEzODA9c3RhdGljIHZvaWQgbWFwX2Fub25fZm9saW9fcG1kX3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMzg5LVxubW0vaHVnZV9tZW1vcnkuYzoxMzkwOnN0YXRpYyB2bV9mYXVsdF90IF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9odWdlX21lbW9yeS5jLTEzOTEte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTQ0MS1cbm1tL2h1Z2VfbWVtb3J5LmM6MTQ0Mjp2bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2RldmljZV9wcml2YXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxubW0vaHVnZV9tZW1vcnkuYy0xNDQzLXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE1MTY9c3RhdGljIHZvaWQgc2V0X2h1Z2VfemVyb19mb2xpbyhwZ3RhYmxlX3QgcGd0YWJsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xNTI3LVxubW0vaHVnZV9tZW1vcnkuYzoxNTI4OnZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9odWdlX21lbW9yeS5jLTE1Mjkte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTU4MS1cbm1tL2h1Z2VfbWVtb3J5LmM6MTU4MjpcdHJldHVybiBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHZtZik7XG5tbS9odWdlX21lbW9yeS5jLTE1ODMtfVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjEwMT1zdGF0aWMgdm1fZmF1bHRfdCBkb19odWdlX3plcm9fd3BfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjEzMi1cbm1tL2h1Z2VfbWVtb3J5LmM6MjEzMzp2bV9mYXVsdF90IGRvX2h1Z2VfcG1kX3dwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9odWdlX21lbW9yeS5jLTIxMzQte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjIyNz1zdGF0aWMgaW5saW5lIGJvb2wgY2FuX2NoYW5nZV9wbWRfd3JpdGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMjU2LVxubW0vaHVnZV9tZW1vcnkuYzoyMjU3OnZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfdWZmZF9yd3Aoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9odWdlX21lbW9yeS5jLTIyNTgte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjI4NS0vKiBOVU1BIGhpbnRpbmcgcGFnZSBmYXVsdCBlbnRyeSBwb2ludCBmb3IgdHJhbnMgaHVnZSBwbWRzICovXG5tbS9odWdlX21lbW9yeS5jOjIyODY6dm1fZmF1bHRfdCBkb19odWdlX3BtZF9udW1hX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9odWdlX21lbW9yeS5jLTIyODcte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjQ4MT1zdGF0aWMgYm9vbCBoYXNfZGVwb3NpdGVkX3BndGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90IHBtZHZhbCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI0OTYtXHQgKiBPdGhlcndpc2UsIG9ubHkgYW5vbnltb3VzIGZvbGlvcyBhcmUgZGVwb3NpdGVkLCBzZWVcbm1tL2h1Z2VfbWVtb3J5LmM6MjQ5NzpcdCAqIF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UoKS5cbm1tL2h1Z2VfbWVtb3J5LmMtMjQ5OC1cdCAqL1xuLS1cbm1tL21lbW9yeS5jPTYzODk9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IGNyZWF0ZV9odWdlX3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy02MzkyLVx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSlcbm1tL21lbW9yeS5jOjYzOTM6XHRcdHJldHVybiBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSh2bWYpO1xubW0vbWVtb3J5LmMtNjM5NC1cdGlmICh2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWh1Z2VfZmF1bHQpXG4tLVxubW0vbWVtb3J5LmM9NjQwMD1zdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3Qgd3BfaHVnZV9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNjQxMi1cdFx0fVxubW0vbWVtb3J5LmM6NjQxMzpcdFx0cmV0dXJuIGRvX2h1Z2VfcG1kX3dwX3BhZ2Uodm1mKTtcbm1tL21lbW9yeS5jLTY0MTQtXHR9XG4tLVxubW0vbWVtb3J5LmM9NjYxND1zdGF0aWMgdm1fZmF1bHRfdCBfX2hhbmRsZV9tbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1vcnkuYy02Njg4LVx0XHRpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHZtZi5vcmlnX3BtZCkpXG5tbS9tZW1vcnkuYzo2Njg5Olx0XHRcdHJldHVybiBkb19odWdlX3BtZF9kZXZpY2VfcHJpdmF0ZShcdTAwMjZ2bWYpO1xubW0vbWVtb3J5LmMtNjY5MC1cbi0tXG5tbS9tZW1vcnkuYy02Njk3LVx0XHRcdGlmICh1c2VyZmF1bHRmZF9odWdlX3BtZF9yd3Aodm1hLCB2bWYub3JpZ19wbWQpKVxubW0vbWVtb3J5LmM6NjY5ODpcdFx0XHRcdHJldHVybiBkb19odWdlX3BtZF91ZmZkX3J3cChcdTAwMjZ2bWYpO1xubW0vbWVtb3J5LmM6NjY5OTpcdFx0XHRyZXR1cm4gZG9faHVnZV9wbWRfbnVtYV9wYWdlKFx1MDAyNnZtZik7XG5tbS9tZW1vcnkuYy02NzAwLVx0XHR9XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz03ODA9RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9zZXR1cCk7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03ODgtICogQHBhZ2UgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgYW5kIHNldHVwIGFmdGVyIGl0JiMzOTtzIGFsbG9jYXRlZC4gVGhlIGNvZGUgYml0c1xubW0vbWlncmF0ZV9kZXZpY2UuYzo3ODk6ICogaGVyZSBmb2xsb3cgY2xvc2VseSB0aGUgY29kZSBpbiBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKCkuIFRoaXMgQVBJIGRvZXNcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzkwLSAqIG5vdCBzdXBwb3J0IFRIUCB6ZXJvIHBhZ2VzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI3NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEyODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nIGZvY3VzLCBrZWVwaW5nIGluIG1pbmQgdGhhdCB3ZSB3YW50IHRvIGF2b2lkIHViaXF1aXRvdXMgZnVuY3Rpb25zIHRoYXQgZGlsdXRlIHRoZSBmdXp6aW5nIGVmZm9ydC4gTXkgaW5pdGlhbCBsaXN0IGluY2x1ZGVzIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAsIGBkb19odWdlX3BtZF93cF9wYWdlYCwgYGRvX3N3YXBfcGFnZWAsIGFuZCBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgLgoKVGhlIGZpcnN0IHRob3VnaHQgaXMgYGRvX3N3YXBfcGFnZWAsIGlzIGl0IGEgaG90IHBhdGg/IE5vLCBpdCYjMzk7cyBhIHN3YXAtaW4gcGFnZSBmYXVsdCBoYW5kbGVyLCB3aGljaCBpcyBtb3JlIHNwZWNpZmljLiBIb3dldmVyLCBwYWdlIGZhdWx0IGhhbmRsZXJzIGluIGdlbmVyYWwgYXJlIHVzdWFsbHkgbm90IGdvb2QgdGFyZ2V0cy4gVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHRlbGwgdXMgdG8gYXZvaWQgdGhvc2UuIFNvLCBgaGFuZGxlX21tX2ZhdWx0YCBhbmQgYGRvX2Fub255bW91c19wYWdlYCBhcmUgb3V0LgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhhdCBsb2dpYyBpcyBhcHBsaWNhYmxlIGhlcmUuIFRoZSBpbnN0cnVjdGlvbnMgYWxzbyBzYXk6CgomZ3Q7ICYjMzQ7QVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOiBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cyAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdCBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4gTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LCB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuJiMzNDsKClNvLCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIG15IGNob2ljZXMuCgpOb3csIGxldCYjMzk7cyBjbGFyaWZ5IHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQ6IGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAsIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAsIGBkb19odWdlX3BtZF93cF9wYWdlYCwgYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAsIGBhbGxvY19hbm9uX2ZvbGlvYCwgYW5kIGBkb19zd2FwX3BhZ2VgLgoKYF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCBpcyBvbmx5IGNhbGxlZCB3aGVuIGBjdXJyZW50LSZndDttZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2hgIGlzIHNldC4gU28sIG5vdCB1YmlxdWl0b3VzLiBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgIGFuZCBgZG9faHVnZV9wbWRfd3BfcGFnZWAgYXJlIHNwZWNpZmljIHRvIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUCkuIFNvLCBpdCBzaG91bGQgYmUgYSBnb29kIGNhbmRpZGF0ZS4KCk5vdywgYGRvX3N3YXBfcGFnZWAgLSBpcyB0aGF0IGEgZ2VuZXJpYyBoYW5kbGVyIG9yIHN3YXAtc3BlY2lmaWM/IEl0IGlzIGEgJiMzNDtwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIHN3YXAgZW50cmllcyYjMzQ7LiBCdXQgdGhlIG1vcmUgc3BlY2lmaWMgdGhyb3R0bGluZyBsb2dpYyBpcyBpbiBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgISBTbywgYF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCBsb29rcyBwcm9taXNpbmcuCgpZZXMhIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgaXMgdGhlIGNvcmUgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIG1lbW9yeS5oaWdoIGxpbWl0IGlzIGV4Y2VlZGVkLiBUaGF0JiMzOTtzIGEgZGlyZWN0IHRhcmdldC4gQWxzbywgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCBhbmQgYGRvX2h1Z2VfcG1kX3dwX3BhZ2VgIGFyZSBkaXJlY3QgY2FsbGVycyBvZiBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYC4KCkJ1dCB3aGF0IGFib3V0IGBkb19zd2FwX3BhZ2VgPyBJdCBtaWdodCBiZSBhIHBhZ2UgZmF1bHQgaGFuZGxlciBhbmQgbm90IGEgZ29vZCBmb2N1cyBzeW1ib2wuIEJ1dCB0aGUgcGF0Y2ggZGlyZWN0bHkgbW9kaWZpZXMgdGhpcyBmdW5jdGlvbiBpbiBgbW0vbWVtb3J5LmNgLCBjYWxsaW5nIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgLiBBbHNvIGl0IGlzIGluOgoKYGBgYwp2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKLi4uCm91dDoKCWlmIChzaSkKCQlwdXRfc3dhcF9kZXZpY2Uoc2kpOwoJbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpOwoJcmV0dXJuIHJldDsKYGBgCgpBbHNvLCBgYWxsb2NfYW5vbl9mb2xpb2A6CgpgYGBjCnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpCi4uLgoJbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpOwpgYGAKCmFuZCBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYDoKCmBgYGMKc3RhdGljIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCi4uLgoJbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpOwpgYGAKCkxldCYjMzk7cyBjaGVjayB0aGUgY2FsbGVycyBvZiBgYWxsb2NfYW5vbl9mb2xpb2AuIEl0JiMzOTtzIHN0YXRpYywgYW5kIG9ubHkgY2FsbGVkIGJ5IGBkb19hbm9ueW1vdXNfcGFnZWAuIEFuZCBgZG9fYW5vbnltb3VzX3BhZ2VgIGlzIGEgdHlwaWNhbCBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yICphbm9ueW1vdXMqIHBhZ2VzOyB0aGVyZWZvcmUsIHViaXF1aXRvdXMuCgpJbiBzdW1tYXJ5LCBgZG9fc3dhcF9wYWdlYCBpcyBzd2FwLXNwZWNpZmljOyBzbyB0aGUgcGF0Y2ggdG8gdGhlIGZ1bmN0aW9uIGlzIGdvb2QsIGFuZCBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgIGlzIHRoZSB3b3JrIGhvcnNlLiBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgIGlzIGEgVEhQIFBNRCBmYXVsdCBoYW5kbGVyLiBgZG9faHVnZV9wbWRfd3BfcGFnZWAgaXMgVEhQIFBNRCB3cml0ZSBwcm90ZWN0aW9uIGZhdWx0IGhhbmRsZXIuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSByZWxldmFudCBjb25maWdzOgoKMQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1NXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjIzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIGBkb19zd2FwX3BhZ2VgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhpcyBwYWdlIHN3YXBwaW5nIHByb2Nlc3MuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBkb19zd2FwX3BhZ2VgIOKAkyB0aGF0JiMzOTtzIGdvaW5nIHRvIGJlIGluIGBtbS9tZW1vcnkuY2AuIEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgbWVjaGFuaWNzIG9mIHN3YXBwaW5nIGEgcGFnZSBpbiBvciBvdXQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRldGFpbHMgb24gdGhpbmdzIGxpa2UgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHN3YXAgY2FjaGUsIHRoZSBwYWdlIHRhYmxlIHVwZGF0ZXMsIHRoZSBwb3RlbnRpYWwgZm9yIEkvTyBvcGVyYXRpb25zLCBhbmQgYW55IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGludm9sdmVkLiBJIHdhbnQgdG8gc2VlIHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBzbyBJIGNhbiBhY2N1cmF0ZWx5IGFzc2VzcyB3aGVyZSB0aGUgYm90dGxlbmVjayBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19zd2FwX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz01MTAwPXZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNTEyMi1cbm1tL2h1Z2VfbWVtb3J5LmM6NTEyMzpcdC8qIFNlZSBkb19zd2FwX3BhZ2UoKTogcmVzdG9yZSBQQUdFX05PTkUgZm9yIFJXUCAqL1xubW0vaHVnZV9tZW1vcnkuYy01MTI0LVx0aWYgKHBtZF9zd3BfdWZmZCgqcHZtdy1cdTAwM2VwbWQpIFx1MDAyNlx1MDAyNiB1c2VyZmF1bHRmZF9yd3Aodm1hKSlcbi0tXG5tbS9pbnRlcm5hbC5oPTU2Nz1zdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3Qgdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9pbnRlcm5hbC5oLTU3NS1cbm1tL2ludGVybmFsLmg6NTc2OnZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcbm1tL2ludGVybmFsLmgtNTc3LXZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLS1cbm1tL2todWdlcGFnZWQuYz0xMTU5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IF9fY29sbGFwc2VfaHVnZV9wYWdlX3N3YXBpbihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTE4MS1cdFx0XHQgKiBIZXJlIHRoZSBwdGwgaXMgb25seSB1c2VkIHRvIGNoZWNrIHB0ZV9zYW1lKCkgaW5cbm1tL2todWdlcGFnZWQuYzoxMTgyOlx0XHRcdCAqIGRvX3N3YXBfcGFnZSgpLCBzbyByZWFkb25seSB2ZXJzaW9uIGlzIGVub3VnaC5cbm1tL2todWdlcGFnZWQuYy0xMTgzLVx0XHRcdCAqL1xuLS1cbm1tL2todWdlcGFnZWQuYy0xMjEyLVx0XHR2bWYucHRsID0gcHRsO1xubW0va2h1Z2VwYWdlZC5jOjEyMTM6XHRcdHJldCA9IGRvX3N3YXBfcGFnZShcdTAwMjZ2bWYpO1xubW0va2h1Z2VwYWdlZC5jLTEyMTQtXHRcdC8qIFdoaWNoIHVubWFwcyBwdGUgKGFmdGVyIHBlcmhhcHMgcmUtY2hlY2tpbmcgdGhlIGVudHJ5KSAqL1xuLS1cbm1tL2todWdlcGFnZWQuYy0xMjE3LVx0XHQvKlxubW0va2h1Z2VwYWdlZC5jOjEyMTg6XHRcdCAqIGRvX3N3YXBfcGFnZSgpIHJldHVybnMgVk1fRkFVTFRfUkVUUlkgd2l0aCByZWxlYXNlZCBtbWFwX2xvY2suXG5tbS9raHVnZXBhZ2VkLmMtMTIxOS1cdFx0ICogTm90ZSB3ZSB0cmVhdCBWTV9GQVVMVF9SRVRSWSBhcyBWTV9GQVVMVF9FUlJPUiBoZXJlIGJlY2F1c2Vcbi0tXG5tbS9rc20uYz0zMTM3PXN0cnVjdCBmb2xpbyAqa3NtX21pZ2h0X25lZWRfdG9fY29weShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2tzbS5jLTMxNTktXHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxubW0va3NtLmM6MzE2MDpcdFx0cmV0dXJuIGZvbGlvO1x0XHQvKiBsZXQgZG9fc3dhcF9wYWdlIHJlcG9ydCB0aGUgZXJyb3IgKi9cbm1tL2tzbS5jLTMxNjEtXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMDY1PXN0YXRpYyBpbnQgbWVfcGFnZWNhY2hlX2RpcnR5KHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMDk3LSAqICAgICAgICBjb3JydXB0ZWQgZGF0YSBhbmQgc2hhbGwgYmUga2lsbGVkICh3ZSBpbnN0YWxsZWQgc2ltcGxlXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEwOTg6ICogICAgICAgIGludGVyY2VwdGlvbiBjb2RlIGluIGRvX3N3YXBfcGFnZSB0byBjYXRjaCBpdCkuXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEwOTktICpcbi0tXG5tbS9tZW1vcnkuYz05NDc9c3RhdGljIHZvaWQgcmVzdG9yZV9leGNsdXNpdmVfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbW9yeS5jLTk2MS1cbm1tL21lbW9yeS5jOjk2MjpcdC8qIFNlZSBkb19zd2FwX3BhZ2UoKTogcmVzdG9yZSBQQUdFX05PTkUgZm9yIFJXUCAqL1xubW0vbWVtb3J5LmMtOTYzLVx0aWYgKHB0ZV9zd3BfdWZmZChvcmlnX3B0ZSkgXHUwMDI2XHUwMDI2IHVzZXJmYXVsdGZkX3J3cCh2bWEpKVxuLS1cbm1tL21lbW9yeS5jPTM2NTI9aW50IGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnkuYy0zNjYxLSAqIG9yIGNvbmZpZ3VyYXRpb25zIChlLmcuIGkzODYgd2l0aCBQQUUpIHdoaWNoIG1pZ2h0IGdpdmUgYSBtaXggb2YgdW5tYXRjaGVkXG5tbS9tZW1vcnkuYzozNjYyOiAqIHBhcnRzLCBkb19zd2FwX3BhZ2UgbXVzdCBjaGVjayB1bmRlciBsb2NrIGJlZm9yZSB1bm1hcHBpbmcgdGhlIHB0ZSBhbmRcbm1tL21lbW9yeS5jLTM2NjMtICogcHJvY2VlZGluZyAoYnV0IGRvX3dwX3BhZ2UgaXMgb25seSBjYWxsZWQgYWZ0ZXIgYWxyZWFkeSBtYWtpbmcgc3VjaCBhIGNoZWNrO1xuLS1cbm1tL21lbW9yeS5jPTQ3OTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDgzOS1cdC8qXG5tbS9tZW1vcnkuYzo0ODQwOlx0ICogRm9yIGRvX3N3YXBfcGFnZSwgZmluZCB0aGUgaGlnaGVzdCBvcmRlciB3aGVyZSB0aGUgYWxpZ25lZCByYW5nZSBpc1xubW0vbWVtb3J5LmMtNDg0MS1cdCAqIGNvbXBsZXRlbHkgc3dhcCBlbnRyaWVzIHdpdGggY29udGlndW91cyBzd2FwIG9mZnNldHMuXG4tLVxubW0vbWVtb3J5LmM9NDg2Mz1zdGF0aWMgdm9pZCBjaGVja19zd2FwX2V4Y2x1c2l2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSxcbi0tXG5tbS9tZW1vcnkuYy00ODgwLSAqL1xubW0vbWVtb3J5LmM6NDg4MTp2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbm1tL21lbW9yeS5jLTQ4ODIte1xuLS1cbm1tL21lbW9yeS5jLTUyMjQtXHRzZXRfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHJlc3MsIHB0ZXAsIHB0ZSwgbnJfcGFnZXMpO1xubW0vbWVtb3J5LmM6NTIyNTpcdGFyY2hfZG9fc3dhcF9wYWdlX25yKHZtYS1cdTAwM2V2bV9tbSwgdm1hLCBhZGRyZXNzLFxubW0vbWVtb3J5LmMtNTIyNi1cdFx0XHRwdGUsIHB0ZSwgbnJfcGFnZXMpO1xuLS1cbm1tL21lbW9yeS5jPTY1MjQ9c3RhdGljIHZtX2ZhdWx0X3QgaGFuZGxlX3B0ZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy02NTcwLVx0aWYgKCFwdGVfcHJlc2VudCh2bWYtXHUwMDNlb3JpZ19wdGUpKVxubW0vbWVtb3J5LmM6NjU3MTpcdFx0cmV0dXJuIGRvX3N3YXBfcGFnZSh2bWYpO1xubW0vbWVtb3J5LmMtNjU3Mi1cbi0tXG5tbS9taWdyYXRlLmM9MzUxPXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTQwNC1cbm1tL21pZ3JhdGUuYzo0MDU6XHRcdC8qIFNlZSBkb19zd2FwX3BhZ2UoKTogcmVzdG9yZSBQQUdFX05PTkUgZm9yIFJXUCAqL1xubW0vbWlncmF0ZS5jLTQwNi1cdFx0aWYgKHB0ZV9zd3BfdWZmZChvbGRfcHRlKSBcdTAwMjZcdTAwMjYgdXNlcmZhdWx0ZmRfcndwKHZtYSkpXG4tLVxubW0vcGFnZV9pby5jPTQxOT1zdGF0aWMgYm9vbCBzd2FwX3JlYWRfZm9saW9femVyb21hcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3BhZ2VfaW8uYy00MjktXHQgKiBjdXJyZW50bHkgaGFuZGxlZC4gUmV0dXJuIHRydWUgd2l0aG91dCBtYXJraW5nIHRoZSBmb2xpbyB1cHRvZGF0ZSBzb1xubW0vcGFnZV9pby5jOjQzMDpcdCAqIHRoYXQgYW4gSU8gZXJyb3IgaXMgZW1pdHRlZCAoZS5nLiBkb19zd2FwX3BhZ2UoKSB3aWxsIHNpZ2J1cykuXG5tbS9wYWdlX2lvLmMtNDMxLVx0ICogRm9saW8gbG9jayBzdGFiaWxpemVzIHRoZSBjbHVzdGVyIGFuZCBtYXAsIHNvIHRoZSBjaGVjayBpcyBzYWZlLlxuLS1cbm1tL3JtYXAuYz0yNDY1PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjcyNy1cdFx0XHQgKiBTdG9yZSB0aGUgcGZuIG9mIHRoZSBwYWdlIGluIGEgc3BlY2lhbCBtaWdyYXRpb25cbm1tL3JtYXAuYzoyNzI4Olx0XHRcdCAqIHB0ZS4gZG9fc3dhcF9wYWdlKCkgd2lsbCB3YWl0IHVudGlsIHRoZSBtaWdyYXRpb25cbm1tL3JtYXAuYy0yNzI5LVx0XHRcdCAqIHB0ZSBpcyByZW1vdmVkIGFuZCB0aGVuIHJlc3RhcnQgZmF1bHQgaGFuZGxpbmcuXG4tLVxubW0vcm1hcC5jPTI4Njk9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3JtYXAuYy0yOTQ3LVx0ICogU3RvcmUgdGhlIHBmbiBvZiB0aGUgcGFnZSBpbiBhIHNwZWNpYWwgZGV2aWNlLWV4Y2x1c2l2ZSBQRk4gc3dhcCBQVEUuXG5tbS9ybWFwLmM6Mjk0ODpcdCAqIGRvX3N3YXBfcGFnZSgpIHdpbGwgdHJpZ2dlciB0aGUgY29udmVyc2lvbiBiYWNrIHdoaWxlIGhvbGRpbmcgdGhlXG5tbS9ybWFwLmMtMjk0OS1cdCAqIGZvbGlvIGxvY2suXG4tLVxubW0vc2htZW0uYz0yMDQzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBfYWxsb2NfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9zaG1lbS5jLTIwODAtICogSW4gYSBmdXR1cmUgcmVsZWFzZSwgdGhpcyBtYXkgd2VsbCBiZSBleHRlbmRlZCB0byByZXNwZWN0IGNwdXNldCBhbmRcbm1tL3NobWVtLmM6MjA4MTogKiBOVU1BIG1lbXBvbGljeSwgYW5kIGFwcGxpZWQgYWxzbyB0byBhbm9ueW1vdXMgcGFnZXMgaW4gZG9fc3dhcF9wYWdlKCk7XG5tbS9zaG1lbS5jLTIwODItICogYnV0IGZvciBub3cgaXQgaXMgYSBzaW1wbGUgbWF0dGVyIG9mIHpvbmUuXG4tLVxubW0vc3dhcGZpbGUuYz0xODMwPXZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vc3dhcGZpbGUuYy0xODcwLSAqICAgQ1BVMVx0XHRcdFx0Q1BVMlxubW0vc3dhcGZpbGUuYzoxODcxOiAqICAgZG9fc3dhcF9wYWdlKClcbm1tL3N3YXBmaWxlLmMtMTg3Mi0gKiAgICAgLi4uXHRcdFx0XHRzd2Fwb2ZmJiM0Mztzd2Fwb25cbi0tXG5tbS9zd2FwZmlsZS5jLTE4NzgtICogY2hhbmdpbmcgcGFydGx5IGJlY2F1c2UgdGhlIHNwZWNpZmllZCBzd2FwIGVudHJ5IG1heSBiZSBmb3IgYW5vdGhlclxubW0vc3dhcGZpbGUuYzoxODc5OiAqIHN3YXAgZGV2aWNlIHdoaWNoIGhhcyBiZWVuIHN3YXBvZmYuICBBbmQgaW4gZG9fc3dhcF9wYWdlKCksIGFmdGVyXG5tbS9zd2FwZmlsZS5jLTE4ODAtICogdGhlIHBhZ2UgaXMgcmVhZCBmcm9tIHRoZSBzd2FwIGRldmljZSwgdGhlIFBURSBpcyB2ZXJpZmllZCBub3Rcbi0tXG5tbS9zd2FwZmlsZS5jPTI0MTk9c3RhdGljIGludCB1bnVzZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vc3dhcGZpbGUuYy0yNDg1LVx0XHQvKlxubW0vc3dhcGZpbGUuYzoyNDg2Olx0XHQgKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHdyaXRlYmFjayB3b3VsZCBiZSBwcm9ibGVtYXRpYy5cbm1tL3N3YXBmaWxlLmMtMjQ4Ny1cdFx0ICogSG93ZXZlciwgd2UgZG8gYSBmb2xpb193YWl0X3dyaXRlYmFjaygpIGp1c3QgYmVmb3JlIHRoaXNcbi0tXG5tbS9zd2FwZmlsZS5jLTI1MTQtXG5tbS9zd2FwZmlsZS5jOjI1MTU6XHQvKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cbm1tL3N3YXBmaWxlLmMtMjUxNi1cdGlmIChwdGVfc3dwX3VmZmQob2xkX3B0ZSkgXHUwMDI2XHUwMDI2IHVzZXJmYXVsdGZkX3J3cCh2bWEpKVxuLS1cbm1tL3pzd2FwLmM9MTQ4OD1ib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy0xNTgyLSAqICBpbnRvIHRoZSBwYWdlIGR1ZSB0byBhIGRlY29tcHJlc3Npb24gZmFpbHVyZS4gVGhlIGZvbGlvIGlzIHVubG9ja2VkLCBidXRcbm1tL3pzd2FwLmM6MTU4MzogKiAgTk9UIG1hcmtlZCB1cC10by1kYXRlLCBzbyB0aGF0IGFuIElPIGVycm9yIGlzIGVtaXR0ZWQgKGUuZy4gZG9fc3dhcF9wYWdlKClcbm1tL3pzd2FwLmMtMTU4NC0gKiAgd2lsbCBTSUdCVVMpLlxuLS1cbm1tL3pzd2FwLmMtMTU4OC0gKiAgYnV0IE5PVCBtYXJrZWQgdXAtdG8tZGF0ZSwgc28gdGhhdCBhbiBJTyBlcnJvciBpcyBlbWl0dGVkIChlLmcuXG5tbS96c3dhcC5jOjE1ODk6ICogIGRvX3N3YXBfcGFnZSgpIHdpbGwgU0lHQlVTKS5cbm1tL3pzd2FwLmMtMTU5MC0gKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzM5MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbiBmb3IgT3B0aW1hbCBQZXJmb3JtYW5jZSoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgTUVNQ0dgIGFzIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9ucyB0byBvcHRpbWl6ZS4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHR3ZWFraW5nIG1lbW9yeSBwZXJmb3JtYW5jZS4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGUgbmVjZXNzaXR5IG9mIGBTV0FQYC4gSXMgYFNXQVBgIGdlbnVpbmVseSByZXF1aXJlZCwgb3IgaXMgdGhlcmUgYSBzcGVjaWZpYyBgQ09ORklHX1NXQVBgIG9wdGlvbiBJIG5lZWQgdG8gY29uc2lkZXI/IFJpZ2h0LCBub3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCBgZG9fc3dhcF9wYWdlYCBpcyB0aGUgb25lIHRoYXQmIzM5O3MgaW52b2x2ZWQgaW4gc3dhcC1pbiwgbWlncmF0aW9uLCB0aG9zZSBkZXZpY2UgcHJpdmF0ZS9leGNsdXNpdmUgZW50cmllcywgYW5kIGFsbCB0aGF0LiBTbyBJIHByb2JhYmx5IGRvbiYjMzk7dCBuZWVkIHRvIGRpdmUgaW50byB0aGF0IHNwZWNpZmljIGRldGFpbCB5ZXQuCgpOb3csIGxldCYjMzk7cyBnbyBiYWNrIHRvIHRoZSBLY29uZmlnIGZpbGVzLiBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbnMgb2YgYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHRoZXJlLiBJdCYjMzk7cyBiZXN0IHByYWN0aWNlIHRvIHJldmlldyB0aGVpciBzZXR0aW5ncyBhbmQgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgaW4gYG1tL0tjb25maWdgIGZvciBib3RoIG9mIHRoZXNlLCBvZiBjb3Vyc2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2YgdGhlaXIgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRXxjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04MzI9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04MzQtXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzNi1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODUzPWNob2ljZVxuLS1cbm1tL0tjb25maWctODU4LVxubW0vS2NvbmZpZzo4NTk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg2MC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2NS1cbm1tL0tjb25maWc6ODY2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODY3LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3NC1cbm1tL0tjb25maWc6ODc1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg3Ni1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODgyPWNob2ljZVxuLS1cbm1tL0tjb25maWctODkxLVxubW0vS2NvbmZpZzo4OTI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04OTMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwMS1cbm1tL0tjb25maWc6OTAyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkwMy1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwOS1cbm1tL0tjb25maWc6OTEwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTExLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTctXG5tbS9LY29uZmlnOjkxODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MTktXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05Mjc9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MzYtXG5tbS9LY29uZmlnOjkzNzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkzOC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQ1LVxubW0vS2NvbmZpZzo5NDY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTQ3LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTUzLVxubW0vS2NvbmZpZzo5NTQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NTUtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk2MS1cbm1tL0tjb25maWc6OTYyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk2My1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1MDUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsJiMzOTtzIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBNRU1DR2Agd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHN0ZXAsIGVzcGVjaWFsbHkgd2hlbiB3b3JraW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgb3B0aW9uIGlzIHNldCBhbmQgcG90ZW50aWFsbHkgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBMZXQmIzM5O3Mgc2VlLi4uIEtjb25maWcgaXMgdGhlIGtleSBoZXJlLiBJdOKAmXMgdGhlIGJhY2tib25lIG9mIHRoZSBrZXJuZWzigJlzIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdXNlIHRoZSB0b29scyBhdmFpbGFibGUgdG8gcXVpY2tseSB0cmFjZSBpdHMgZGVjbGFyYXRpb24uIFVuZGVyc3RhbmRpbmcgaXRzIHBsYWNlbWVudCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBpbmZyYXN0cnVjdHVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDg0LVxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA4Ni1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA5NS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwMC1cbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTExMDItXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDctXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTA5LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTE3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFN3YXAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3dhcCBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBmaXJzdCB0aGluZyBJJiMzOTtsbCBjaGVjayBpcyBgQ09ORklHX1NXQVBgIGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIG1hc3RlciBzd2l0Y2gsIHNvIHRvIHNwZWFrLiBVbmRlcnN0YW5kaW5nIHRoYXQgc2V0dGluZyBpcyBjcnVjaWFsLiBJIGtub3cgdGhlcmUgYXJlIGRlcGVuZGVuY2llcyBhbmQgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBjb21lIGludG8gcGxheSBvbmNlIGBDT05GSUdfU1dBUGAgaXMgZW5hYmxlZCAob3IgZGlzYWJsZWQpLCBsaWtlIHZhcmlvdXMgc3dhcCBhbGdvcml0aG1zLCBkZXZpY2Ugc3VwcG9ydCwgYW5kIHNvIG9uLCBidXQgKnRoaXMqIGlzIHRoZSBpbml0aWFsIGdhdGUuIEJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljcyBvZiBhIHBhcnRpY3VsYXIgaXNzdWUsIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgb3IgYSBkZXNpZ24gY29uc2lkZXJhdGlvbiwgSSB3YW50IHRvIGJlIDEwMCUgY2xlYXIgb24gKndoZXRoZXIqIHN3YXAgaXMgZXZlbiAqZW5hYmxlZCogYXQgYWxsLCBvciBwb3RlbnRpYWxseSBhY2NpZGVudGFsbHkgZGlzYWJsZWQuIEdyYWJiaW5nIHRoYXQgaW5pdGlhbCBkYXRhIHBvaW50IGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgc3dhcCBpbnRlcmFjdHMgd2l0aCBteSB1c2UgY2FzZSwgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBtaWdodCBiZSBpZiBzd2FwIGlzIHNldCB0byBvZmYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXG4tLVxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyNTMKCQkJCQkJCW91dHB1dDogMjAxCgkJCQkJCQl0aG91Z2h0czogMTA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIFNlbGVjdGlvbiBmb3IgRnV6emluZyBGb2N1cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBzZXQgZm9yIHRoZSBmdXp6aW5nIGFuYWx5c2lzIHRvIGJlIHJlbGV2YW50LiBUaGUgcGF0Y2ggZGVwZW5kcyBvbiBgTUVNQ0dgIChmb3IgbWVtb3J5IGNncm91cCBjb250cm9sbGVyIGFuZCB0aHJvdHRsaW5nLCBzcGVjaWZpY2FsbHkgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgYW5kIGl0cyBpbnRlcm5hbCBvcGVyYXRpb25zKSwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCAoZm9yIFRIUCBzdXBwb3J0IGFuZCB0aGUgYG1tL2h1Z2VfbWVtb3J5LmNgIGNvZGUsIGluY2x1ZGluZyBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCksIGFuZCBgU1dBUGAgKGZvciBhbm9ueW1vdXMgbWVtb3J5IHN3YXAgc3VwcG9ydCwgaW52b2x2aW5nIGBkb19zd2FwX3BhZ2VgKS4gSSYjMzk7bSBnb2luZyB0byBub3RlIHRoZXNlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLgoKTm93LCBmb3IgdGhlIGltcG9ydGFudCBwYXJ0OiBpZGVudGlmeWluZyB0aGUgKnJpZ2h0KiBzeW1ib2xzIHRvIGZvY3VzIHRoZSBmdXp6aW5nIGVmZm9ydC4gSW5pdGlhbGx5LCBteSBtaW5kIGp1bXBzIHRvIHRoZSBrZXkgZnVuY3Rpb25zOiBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgICh0aGUgY29yZSB0aHJvdHRsaW5nIGxvZ2ljKSwgYGRvX3N3YXBfcGFnZWAgKHdoaWNoIG5vdyBpbmNvcnBvcmF0ZXMgdGhlIHRocm90dGxpbmcpLCBhbmQgdGhlIFRIUCBmYXVsdCBoYW5kbGVycyBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgIGFuZCBgZG9faHVnZV9wbWRfd3BfcGFnZWAuCgpIb3dldmVyLCB0aGUgZG9jdW1lbnRhdGlvbiBpcyBjbGVhcjogSSBuZWVkIHRvIGF2b2lkIGxpc3RpbmcgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoZSBnZW5lcmljIGZhdWx0IGhhbmRsZXJzIChgaGFuZGxlX21tX2ZhdWx0YCwgYGRvX2Fub255bW91c19wYWdlYCwgZXRjLikgYXJlIGNhbGxlZCAqZXZlcnl3aGVyZSouICBCdXQsIGBkb19zd2FwX3BhZ2VgIGlzIGEgZ29vZCBjaG9pY2UgYmVjYXVzZSBpdCYjMzk7cyAqc3BlY2lmaWMqIHRvIHN3YXBwZWQtb3V0IHBhZ2VzLiBTaW1pbGFybHksIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgYW5kIGBkb19odWdlX3BtZF93cF9wYWdlYCBhcmUgVEhQLXNwZWNpZmljLiBUaGV5JiMzOTtyZSBub3QgY2FsbGVkIG9uICpldmVyeSogcGFnZSBmYXVsdCwgb25seSBmb3IgdGhlIHJlbGV2YW50IGNhc2VzLCB3aGljaCBpcyBwZXJmZWN0IGZvciB0YXJnZXRlZCBmdXp6aW5nLiBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgIGlzIHRoZSBjb3JlLCB0YXJnZXQgZnVuY3Rpb24sIGFzIHdlbGwuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJIHRob3VnaHQgYWJvdXQgYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAgb3IgYGFsbG9jX2Fub25fZm9saW9gLCBiZWNhdXNlIHRoZXkgYXJlIHN0YXRpYyBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRoZXkgYXJlIHN0YXRpYyBmdW5jdGlvbnMgaW4gYC5jYCBmaWxlcywgc28gdGhleSYjMzk7cmUgbm90IHN1YmplY3QgdG8gdGhlIGhlYWRlciBydWxlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7dmUgY2hlY2tlZCBldmVyeXRoaW5nIGFjY29yZGluZyB0byB0aGUgcHJvY2Vzcy4KCjEuICBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgOiBUaGUgY2hhbmdlcyAqZG8qIHRvdWNoIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtZW1jZyB0aHJvdHRsaW5nIHBhdGhzLCBzcGVjaWZpY2FsbHkgYnkgYWRkaW5nIGNhbGxzIHRvIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgaW4gZmF1bHQgaGFuZGxpbmcgZm9yIGFub255bW91cyBUSFAgYWxsb2NhdGlvbnMgYW5kIHN3YXAtaW4uIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0YXNrcyB0aGF0IGFyZSBibG9ja2VkIHdhaXRpbmcgZm9yIG1lbW9yeSBzZXR0bGUgdGhlaXIgYG1lbW9yeS5oaWdoYCBkZWJ0LgoyLiAgYEVuYWJsZUNvbmZpZ3NgIGluY2x1ZGVzICYjMzQ7TUVNQ0cmIzM0OywgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LCBhbmQgJiMzNDtTV0FQJiMzNDsuIENvbmZpcm1lZC4KMy4gIGBGb2N1c1N5bWJvbHNgOiBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgLCBgZG9fc3dhcF9wYWdlYCwgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCwgYW5kIGBkb19odWdlX3BtZF93cF9wYWdlYC4gIFRoYXQgY292ZXJzIHRoZSBjb3JlIHRocm90dGxpbmcgbG9naWMgaW4gdGhlIGtleSBmYXVsdCBwYXRocy4KNC4gIFRoZSByZWFzb25pbmcgaXMgY29uY2lzZTogdGhlIHBhdGNoIHRhcmdldHMgZmF1bHQgaGFuZGxpbmcgcGF0aHMgdG8gZW5zdXJlIG1lbW9yeS5oaWdoIGRlYnQgc2V0dGxlbWVudC4gR3JlYXQsIGl0JiMzOTtzIGFsbCBleHBsYWluZWQuCgpUaGF0JiMzOTtzIGl0LiBFdmVyeXRoaW5nJiMzOTtzIHZlcmlmaWVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaCYjMzQ7LAogICAgJiMzNDtkb19zd2FwX3BhZ2UmIzM0OywKICAgICYjMzQ7ZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UmIzM0OywKICAgICYjMzQ7ZG9faHVnZV9wbWRfd3BfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGluIG1tL2h1Z2VfbWVtb3J5LmMgYW5kIG1tL21lbW9yeS5jIGJ5IGludm9raW5nIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaCgpIGR1cmluZyBQTUQgVEhQIGFub255bW91cyBhbGxvY2F0aW9uLCBtVEhQIGFub255bW91cyBhbGxvY2F0aW9uLCBhbmQgc3dhcC1pbiBwYWdlIGZhdWx0IHBhdGhzLiBUaGlzIGVuc3VyZXMgbWVtb3J5LmhpZ2ggdGhyb3R0bGluZyBkZWJ0IGlzIHN5bmNocm9ub3VzbHkgaGFuZGxlZCBpbiBzbGVlcGluZyBmYXVsdCBjb250ZXh0cyB3aGVuIG5vbi1ibG9ja2luZyBHRlAgbWFza3Mgd2VyZSB1c2VkIGR1cmluZyBjaGFyZ2luZy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gcmVhY2hhYmxlIE1NIGNvZGUgcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZyB0byB2ZXJpZnkgbG9ja2luZyBpbnZhcmlhbnRzIGFuZCB0aHJvdHRsaW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2gmIzM0OywKICAgICYjMzQ7ZG9fc3dhcF9wYWdlJiMzNDssCiAgICAmIzM0O2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlJiMzNDssCiAgICAmIzM0O2RvX2h1Z2VfcG1kX3dwX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBtbS9odWdlX21lbW9yeS5jIGFuZCBtbS9tZW1vcnkuYyBieSBpbnZva2luZyBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goKSBkdXJpbmcgUE1EIFRIUCBhbm9ueW1vdXMgYWxsb2NhdGlvbiwgbVRIUCBhbm9ueW1vdXMgYWxsb2NhdGlvbiwgYW5kIHN3YXAtaW4gcGFnZSBmYXVsdCBwYXRocy4gVGhpcyBlbnN1cmVzIG1lbW9yeS5oaWdoIHRocm90dGxpbmcgZGVidCBpcyBzeW5jaHJvbm91c2x5IGhhbmRsZWQgaW4gc2xlZXBpbmcgZmF1bHQgY29udGV4dHMgd2hlbiBub24tYmxvY2tpbmcgR0ZQIG1hc2tzIHdlcmUgdXNlZCBkdXJpbmcgY2hhcmdpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBNTSBjb2RlIHBhdGhzIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gdmVyaWZ5IGxvY2tpbmcgaW52YXJpYW50cyBhbmQgdGhyb3R0bGluZyBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKWAgaW4gYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpYCwgYGRvX3N3YXBfcGFnZSgpYCwgYW5kIGBhbGxvY19hbm9uX2ZvbGlvKClgIHRvIGVuZm9yY2Ugc3luY2hyb25vdXMgYG1lbW9yeS5oaWdoYCBjZ3JvdXAgdGhyb3R0bGluZyBkdXJpbmcgcGFnZSBmYXVsdCBoYW5kbGluZyB3aGVuIGNoYXJnaW5nIGZvbGlvcy5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBwZXJ0YWluIHRvIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZywgcmVjbGFtYXRpb24sIGFuZCB0aHJvdHRsaW5nIGNvbnRyb2wgZmxvdy4gVGhleSBkbyBub3QgYWxsb2NhdGUsIG1vZGlmeSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSBzdHJ1Y3R1cmVzLCBub3IgZG8gdGhleSBpbnRyb2R1Y2Uga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgc2xlZXBpbmctaW4tYXRvbWljLCBvciBsaWZldGltZSBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAoS0FTQU4sIExPQ0tERVAsIERFQlVHX0FUT01JQ19TTEVFUCksIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNlMTRlOGE5NDE5MTVkNjA4Mzc4NWY2ZmVkYTA3NzE4ZjU0ZGFmOTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDEzOjQ0OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggY2VkNDAwZjcyZDQzYS4uNTQzYmE0YTc0ZGMzYSAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0xMzI5LDYgJiM0MzsxMzI5LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBjaGFyZ2UgZ2ZwIGVuY29kZXMgVEhQIGFsbG9jYXRpb24gcG9saWN5IGFuZCBtYXkgbm90IGFsbG93CiYjNDM7CSAqIGJsb2NraW5nLCB3aGljaCBtYWtlcyB0cnlfY2hhcmdlIHNraXAgaXRzIHN5bmNocm9ub3VzIG1lbW9yeS5oaWdoCiYjNDM7CSAqIHRocm90dGxpbmcuIEZhdWx0IGNvbnRleHQgY2FuIHNsZWVwLCBzbyBzZXR0bGUgYW55IG92ZXItaGlnaCBkZWJ0CiYjNDM7CSAqIGhlcmUgaW5zdGVhZCBvZiBsZXR0aW5nIHVzYWdlIGdyb3cgdW50aHJvdHRsZWQgdXAgdG8gbWVtb3J5Lm1heC4KJiM0MzsJICovCiYjNDM7CW1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTsKJiM0MzsKIAlpZiAoZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCWNvdW50X3ZtX2V2ZW50KFRIUF9GQVVMVF9GQUxMQkFDSyk7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDhiMGMyYzczNWQzZGUuLmRjOTdjZjBlYmZiMzAgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC01MjY3LDYgJiM0Mzs1MjY3LDE0IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogb3V0OgogCWlmIChzaSkKIAkJcHV0X3N3YXBfZGV2aWNlKHNpKTsKJiM0MzsJLyoKJiM0MzsJICogTGFyZ2UgZm9saW8gc3dhcGluIGNoYXJnZXMgd2l0aCB0aGUgVEhQIGFsbG9jYXRpb24gZ2ZwLCB3aGljaCBtYXkKJiM0MzsJICogbm90IGFsbG93IGJsb2NraW5nLCBtYWtpbmcgdHJ5X2NoYXJnZSBza2lwIGl0cyBzeW5jaHJvbm91cwomIzQzOwkgKiBtZW1vcnkuaGlnaCB0aHJvdHRsaW5nLiBTZXR0bGUgYW55IG92ZXItaGlnaCBkZWJ0IGhlcmUgaW5zdGVhZCwKJiM0MzsJICogd2hlcmUgc2xlZXBpbmcgaXMgc2FmZTogdGhlIGZvbGlvIGxvY2ssIHRoZSBwYWdlIHRhYmxlIGxvY2sgYW5kCiYjNDM7CSAqIHRoZSBzd2FwIGRldmljZSByZWZlcmVuY2UgaGF2ZSBhbGwgYmVlbiBkcm9wcGVkLgomIzQzOwkgKi8KJiM0MzsJbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpOwogCXJldHVybiByZXQ7CiBvdXRfbm9tYXA6CiAJaWYgKHZtZi0mZ3Q7cHRlKQpAQCAtNTM2Miw2ICYjNDM7NTM3MCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJCQlmb2xpb19wdXQoZm9saW8pOwogCQkJZ290byBuZXh0OwogCQl9CiYjNDM7CQkvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi8KJiM0MzsJCW1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTsKIAkJaWYgKG9yZGVyICZndDsgMSAmYW1wOyZhbXA7IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKGZvbGlvKSkgewogCQkJZm9saW9fcHV0KGZvbGlvKTsKIAkJCWdvdG8gZmFsbGJhY2s7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vaHVnZV9tZW1vcnkuY2AgYW5kIGBtbS9tZW1vcnkuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaW50cm9kdWNpbmcgY2FsbHMgdG8gYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtgIHdpdGhpbiBhIGZldyBrZXkgbWVtb3J5IGFsbG9jYXRpb24gcGF0aHM6IHNwZWNpZmljYWxseSwgYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAsIGBkb19zd2FwX3BhZ2VgLCBhbmQgYGFsbG9jX2Fub25fZm9saW9gLiAKClRoZXNlIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgYXJlYXMgdG8gd2F0Y2ggaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gTm93LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgKmRvZXMqLiBJJiMzOTtsbCByZWFjaCBmb3IgZ3JlcHBlciByaWdodCBhd2F5LCBsb2NhdGUgaXRzIGRlZmluaXRpb24gYW5kIGltcGxlbWVudGF0aW9uLCBhbmQgZGlzc2VjdCBpdHMgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyB0aGUgbHluY2hwaW4sIHRoZSBjcnVjaWFsIGVsZW1lbnQuIEtub3dpbmcgKml0cyogYmVoYXZpb3Igd2lsbCB0ZWxsIG1lIHRoZSBhY3R1YWwgZWZmZWN0IG9mIHRoaXMgcGF0Y2guIElzIHRoaXMgcmVsYXRlZCB0byBoaWdoLW9yZGVyIGFsbG9jYXRpb24gZmFpbHVyZXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlPyBJcyBpdCBhYm91dCBjZ3JvdXAgYWNjb3VudGluZz8gVGhlIGFuc3dlciBsaWVzIGluIHRoYXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTkxMT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkxMi1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjkxMzpzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTE0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMzU0PW1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzNTctXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMzU4OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzU5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGNvZGUgbG9jYXRpb25zLCBwaHJhc2VkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgd2VsbC12ZXJzZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cHM6CgoqKkRpdmluZyBEZWVwIGludG8gTWVtY29udHJvbCYjMzk7cyBIYW5kbGluZyBvZiBIaWdoIE1lbW9yeSBPdmVyZmxvd3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgd2l0aGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIHBhcnRpY3VsYXJseSBhcm91bmQgbGluZSA5MTEuIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgcGVyaGFwcyBzb21lIGNydWNpYWwgbWFjcm9zIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLCBtYXliZSBldmVuIHRoZSBzcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgbWVtb3J5IGxpbWl0cyBvciB0aHJlc2hvbGRzLCBhcmUgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoZSBoaWdoIG1lbW9yeSB3YXRlcm1hcmsgaXMgaGFuZGxlZCB0aGVyZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IHNlY3Rpb24gb2YgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBkZWZpbml0aW9ucyBvZiBgbWVtX2Nncm91cGAgcmVsYXRlZCB2YXJpYWJsZXMgYW5kIGRhdGEgc3RydWN0dXJlcy4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBqdW1wIG92ZXIgdG8gYG1tL21lbWNvbnRyb2wuY2AgYW5kIHplcm8gaW4gYXJvdW5kIHRoZSBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSAqcmVhbCogbG9naWMga2lja3MgaW4uIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIHdoZXJlIGEgbWVtb3J5IGNncm91cCBoYXMgZXhjZWVkZWQgaXRzIGhpZ2ggbWVtb3J5IGxpbWl0LiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgaW4gdGhlc2Ugc2l0dWF0aW9ucy4gSXMgaXQgaW52b2tpbmcgT09NIGtpbGxlciwgdGhyb3R0bGluZywgbWlncmF0aW5nIHBhZ2VzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNvbW1lbnRzIHNob3VsZCBiZSBoZWxwZnVsLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBhbmQgdGhlIHNwZWNpZmljIGFjdGlvbnMgaXQgdGFrZXMgdG8gZW5mb3JjZSB0aGUgbWVtb3J5IGxpbWl0cy4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgaGFyZCBsaW1pdCwgYSBzb2Z0IGxpbWl0LCBvciBzb21ldGhpbmcgbW9yZSBudWFuY2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgc3lzdGVtIHJlYWN0cy4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yIGFuZCByZWNsYWltIGxvZ2ljLiBJcyBpdCBhdHRlbXB0aW5nIHRvIHJlY2xhaW0gcGFnZXMgc3BlY2lmaWNhbGx5IGZyb20gdGhpcyBjZ3JvdXA/IERvZXMgaXQgcG90ZW50aWFsbHkgY2F1c2UgdGhlIE9PTSBraWxsZXIgdG8gc2VsZWN0IGEgdGFzayBmcm9tIHRoaXMgY2dyb3VwPyBJdCYjMzk7cyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhlIHN5c3RlbSBkb2VzbiYjMzk7dCBncmluZCB0byBhIGhhbHQgd2hlbiBtZW1vcnkgaXMgY29uc3RyYWluZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcHV6emxlLCBhbmQgaXQmIzM5O3MgZXNzZW50aWFsIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGl0IGFsbCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTA1Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4gOTA2Olx0XG4gOTA3Olx0XHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuIDkwODpcdFx0cmV0dXJuIFJFQURfT05DRShtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbiA5MDk6XHR9XG4gOTEwOlx0XG4gOTExOlx0dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG4gOTEyOlx0XG4gOTEzOlx0c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbiA5MTQ6XHR7XG4gOTE1Olx0XHRpZiAodW5saWtlbHkoY3VycmVudC1cdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2gpKVxuIDkxNjpcdFx0XHRfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfbWFzayk7XG4gOTE3Olx0fVxuIDkxODpcdFxuIDkxOTpcdHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gOTIwOlx0XG4gOTIxOlx0dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiA5MjI6XHRcdFx0XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG4gOTIzOlx0XG4gOTI0Olx0dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMDgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBvdmVyLWhpZ2ggY29uZGl0aW9ucyB3aXRoaW4gbWVtb3J5IGNncm91cHMuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAuIEkmIzM5O2xsIGp1bXAgc3RyYWlnaHQgaW50byBgbW0vbWVtY29udHJvbC5jYCBhbmQgemVybyBpbiBvbiB0aGF0IGZ1bmN0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgbG9naWMgZm9yIHRocm90dGxpbmcgb3IgcG9zc2libHkgT09NIGtpbGxpbmcgcHJvY2Vzc2VzIGluIHRoYXQgY2dyb3VwIGhlcmUuIEkgd2FudCB0byBzZWUgaWYgdGhlIHJlY2VudCBjaGFuZ2VzIEnigJl2ZSBiZWVuIHJlYWRpbmcgYWJvdXQgaGF2ZSBhbHRlcmVkIHRoZSB3YXkgdGhpcyBiZWhhdmVzLCBvciBpZiB0aGVyZSYjMzk7cyBhbnkgbm92ZWwgb3B0aW1pemF0aW9uLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgYmFsYW5jZXMgcHJldmVudGluZyBydW5hd2F5IG1lbW9yeSBjb25zdW1wdGlvbiB3aXRoIGFsbG93aW5nIGZvciBsZWdpdGltYXRlIGJ1cnN0cywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBjZ3JvdXAgaGllcmFyY2h5IGFuZCByZWNsYWltIG1lY2hhbmlzbXMuIEhvcGVmdWxseSwgdGhlIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQ7IG90aGVyd2lzZSwgSeKAmW0gbWVudGFsbHkgcHJlcGFyaW5nIHRvIG5hdmlnYXRlIGEgZmV3IGxldmVscyBvZiBmdW5jdGlvbiBjYWxscyB0byBwaWVjZSB0aGUgZmxvdyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05MDI9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MTAtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5MTE6dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MTItXG4tLVxubW0vbWVtY29udHJvbC5jPTI1MTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2hpZ2hfZGVsYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNTU0LSAqL1xubW0vbWVtY29udHJvbC5jOjI1NTU6dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbm1tL21lbWNvbnRyb2wuYy0yNTU2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUwNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG1tL21lbWNvbnRyb2wuY2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhvbmluZyBpbiBhcm91bmQgbGluZSAyNTU1LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBzb21lIGludGVyZXN0aW5nIGJpdHMgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBhbmQgYWNjb3VudGluZy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBjb3JlIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIHJlc291cmNlIG1hbmFnZW1lbnQsIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVjbGFpbWVkLCBvciBjaGFyZ2VkIHRvIHZhcmlvdXMgY29udHJvbCBncm91cHMuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGF0IGEgZGVlcCBsZXZlbC4gSeKAmW0gdGhpbmtpbmcgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGNvdWxkIGJlIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIHR1bmluZyBvciBwaW5wb2ludGluZyBib3R0bGVuZWNrcyBpbiBhIG1lbW9yeS1pbnRlbnNpdmUgd29ya2xvYWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHN1YnRsZSBudWFuY2VzIG9mIGhvdyBtZW1vcnkgbGltaXRzIGFyZSBlbmZvcmNlZCwgYW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIE5VTUEgYXJjaGl0ZWN0dXJlcywgb3IgcGVyaGFwcyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIE9PTSBzaXR1YXRpb25zIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSBmcm9tIGNvbnRyb2wgZ3JvdXBzLiBMZXTigJlzIHNlZSB3aGF0IGdlbXMgbGluZSAyNTU1IGlzIGhvbGRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTU1Olx0dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbjI1NTY6XHR7XG4yNTU3Olx0XHR1bnNpZ25lZCBsb25nIHBlbmFsdHlfamlmZmllcztcbjI1NTg6XHRcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xuMjU1OTpcdFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7XG4yNTYwOlx0XHR1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBjdXJyZW50LVx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaDtcbjI1NjE6XHRcdGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbjI1NjI6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjI1NjM6XHRcdGJvb2wgaW5fcmV0cnkgPSBmYWxzZTtcbjI1NjQ6XHRcbjI1NjU6XHRcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShjdXJyZW50LVx1MDAzZW1tKTtcbjI1NjY6XHRcdGN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoID0gMDtcbjI1Njc6XHRcbjI1Njg6XHRyZXRyeV9yZWNsYWltOlxuMjU2OTpcdFx0LypcbjI1NzA6XHRcdCAqIEJhaWwgaWYgdGhlIHRhc2sgaXMgYWxyZWFkeSBleGl0aW5nLiBVbmxpa2UgbWVtb3J5Lm1heCxcbjI1NzE6XHRcdCAqIG1lbW9yeS5oaWdoIGVuZm9yY2VtZW50IGlzbiYjMzk7dCBhcyBzdHJpY3QsIGFuZCB0aGVyZSBpcyBub1xuMjU3MjpcdFx0ICogT09NIGtpbGxlciBpbnZvbHZlZCwgd2hpY2ggbWVhbnMgdGhlIGV4Y2VzcyBjb3VsZCBhbHJlYWR5XG4yNTczOlx0XHQgKiBiZSBtdWNoIGJpZ2dlciAoYW5kIHN0aWxsIGdyb3dpbmcpIHRoYW4gaXQgY291bGQgZm9yXG4yNTc0Olx0XHQgKiBtZW1vcnkubWF4OyB0aGUgZHlpbmcgdGFzayBjb3VsZCBnZXQgc3R1Y2sgaW4gZnJ1aXRsZXNzXG4yNTc1Olx0XHQgKiByZWNsYWltIGZvciBhIGxvbmcgdGltZSwgd2hpY2ggaXNuJiMzOTt0IGRlc2lyYWJsZS5cbjI1NzY6XHRcdCAqL1xuMjU3NzpcdFx0aWYgKHRhc2tfaXNfZHlpbmcoKSlcbjI1Nzg6XHRcdFx0Z290byBvdXQ7XG4yNTc5Olx0XG4yNTgwOlx0XHQvKlxuMjU4MTpcdFx0ICogVGhlIGFsbG9jYXRpbmcgdGFzayBzaG91bGQgcmVjbGFpbSBhdCBsZWFzdCB0aGUgYmF0Y2ggc2l6ZSwgYnV0IGZvclxuMjU4MjpcdFx0ICogc3Vic2VxdWVudCByZXRyaWVzIHdlIG9ubHkgd2FudCB0byBkbyB3aGF0JiMzOTtzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IG9vbVxuMjU4MzpcdFx0ICogb3IgYnJlYWNoaW5nIHJlc291cmNlIGlzb2xhdGlvbi5cbjI1ODQ6XHRcdCAqXG4yNTg1Olx0XHQgKiBUaGlzIGlzIGRpc3RpbmN0IGZyb20gbWVtb3J5Lm1heCBvciBwYWdlIGFsbG9jYXRvciBiZWhhdmlvdXIgYmVjYXVzZVxuMjU4NjpcdFx0ICogbWVtb3J5LmhpZ2ggaXMgY3VycmVudGx5IGJhdGNoZWQsIHdoZXJlYXMgbWVtb3J5Lm1heCBhbmQgdGhlIHBhZ2VcbjI1ODc6XHRcdCAqIGFsbG9jYXRvciBydW4gZXZlcnkgdGltZSBhbiBhbGxvY2F0aW9uIGlzIG1hZGUuXG4yNTg4Olx0XHQgKi9cbjI1ODk6XHRcdG5yX3JlY2xhaW1lZCA9IHJlY2xhaW1faGlnaChtZW1jZyxcbjI1OTA6XHRcdFx0XHRcdCAgICBpbl9yZXRyeSA/IFNXQVBfQ0xVU1RFUl9NQVggOiBucl9wYWdlcyxcbjI1OTE6XHRcdFx0XHRcdCAgICBnZnBfbWFzayk7XG4yNTkyOlx0XG4yNTkzOlx0XHQvKlxuMjU5NDpcdFx0ICogbWVtb3J5LmhpZ2ggaXMgYnJlYWNoZWQgYW5kIHJlY2xhaW0gaXMgdW5hYmxlIHRvIGtlZXAgdXAuIFRocm90dGxlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IENvcmUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEJhc2VkIG9uIHRoZSB0YXNrIGF0IGhhbmQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtJiMzOTtzIGhhbmRsaW5nIGxhcmdlIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGNvcmUgc291cmNlIGNvZGUuIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBzdGFydCB3aXRoIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCYjMzk7cyB0aGUgb2J2aW91cyBwbGFjZSB0byBpbnZlc3RpZ2F0ZSB0aGUgYmVoYXZpb3Igb2YgaHVnZSBwYWdlcyBhbmQgcmVsYXRlZCBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuIEFmdGVyIHRoYXQsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYG1tL21lbW9yeS5jYCBhcyB0aGlzIHdpbGwgcHJvdmlkZSB0aGUgZ2VuZXJhbCBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsgYW5kIGNvbXBsZW1lbnQgdGhlIHNwZWNpZmljIGh1Z2UgcGFnZSBkZXRhaWxzLiBCZXR3ZWVuIHRob3NlIHR3bywgSSBzaG91bGQgaGF2ZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGJlaGF2aW9yIEkmIzM5O20gYWZ0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMyMDpcdFx0fVxuMTMyMTpcdFxuMTMyMjpcdFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSwgZm9saW8pO1xuMTMyMzpcdFx0aWYgKG1lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCB2bWEtXHUwMDNldm1fbW0sIGdmcCkpIHtcbjEzMjQ6XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjEzMjU6XHRcdFx0Y291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLKTtcbjEzMjY6XHRcdFx0Y291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLX0NIQVJHRSk7XG4xMzI3Olx0XHRcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spO1xuMTMyODpcdFx0XHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLX0NIQVJHRSk7XG4xMzI5Olx0XHRcdHJldHVybiBOVUxMO1xuMTMzMDpcdFx0fVxuMTMzMTpcdFxuMTMzMjpcdFx0LypcbjEzMzM6XHRcdCAqIFRoZSBjaGFyZ2UgZ2ZwIGVuY29kZXMgVEhQIGFsbG9jYXRpb24gcG9saWN5IGFuZCBtYXkgbm90IGFsbG93XG4xMzM0Olx0XHQgKiBibG9ja2luZywgd2hpY2ggbWFrZXMgdHJ5X2NoYXJnZSBza2lwIGl0cyBzeW5jaHJvbm91cyBtZW1vcnkuaGlnaFxuMTMzNTpcdFx0ICogdGhyb3R0bGluZy4gRmF1bHQgY29udGV4dCBjYW4gc2xlZXAsIHNvIHNldHRsZSBhbnkgb3Zlci1oaWdoIGRlYnRcbjEzMzY6XHRcdCAqIGhlcmUgaW5zdGVhZCBvZiBsZXR0aW5nIHVzYWdlIGdyb3cgdW50aHJvdHRsZWQgdXAgdG8gbWVtb3J5Lm1heC5cbjEzMzc6XHRcdCAqL1xuMTMzODpcdFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xuMTMzOTpcdFxuMTM0MDpcdFx0aWYgKGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKGZvbGlvKSkge1xuMTM0MTpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMTM0MjpcdFx0XHRjb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0spO1xuMTM0MzpcdFx0XHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLKTtcbjEzNDQ6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMzQ1Olx0XHR9XG4xMzQ2Olx0XG4xMzQ3Olx0XHRmb2xpb190aHJvdHRsZV9zd2FwcmF0ZShmb2xpbywgZ2ZwKTtcbjEzNDg6XHRcbjEzNDk6XHQgICAgICAgLypcbjEzNTA6XHRcdCogV2hlbiBhIGZvbGlvIGlzIG5vdCB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb24gKF9fR0ZQX1pFUk8gbm90IHVzZWQpXG4xMzUxOlx0XHQqIG9yIHVzZXIgZm9saW9zIHJlcXVpcmUgc3BlY2lhbCBoYW5kbGluZywgZm9saW9femVyb191c2VyKCkgaXMgdXNlZCB0b1xuMTM1MjpcdFx0KiBtYWtlIHN1cmUgdGhhdCB0aGUgcGFnZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmYXVsdGluZyBhZGRyZXNzIHdpbGwgYmVcbjEzNTM6XHRcdCogaG90IGluIHRoZSBjYWNoZSBhZnRlciB6ZXJvaW5nLlxuMTM1NDpcdFx0Ki9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI1MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnksIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBtbS9tZW1vcnkuY2AuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIHBvdGVudGlhbCBmb3IgaXNzdWVzIGFyb3VuZCB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcy4gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpYyBhcmVhcyB3aXRoaW4gdGhhdCBmaWxlIGFyZSBsaWtlbHkgdG8gaG9sZCB0aGUgYW5zd2Vycy4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGUgc2VjdGlvbnMgYXJvdW5kIGxpbmVzIDUyNjAgYW5kIDUzNjAgbWlnaHQgYmUgZ29vZCBzdGFydGluZyBwb2ludHMuIFRoZXNlIGFyZSBsaWtlbHkgdG8gYmUgYXJvdW5kIHNvbWUgY3JpdGljYWwgYXNwZWN0cyBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHByb2Nlc3MsIG9yIHBlcmhhcHMgaGFuZGxpbmcgb2Ygc3BlY2lmaWMgbWVtb3J5IHJlZ2lvbnMuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUyNjA6XHRcdH1cbjUyNjE6XHRcbjUyNjI6XHRcdC8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSAtIGl0IHdhcyBub24tcHJlc2VudCBiZWZvcmUgKi9cbjUyNjM6XHRcdHVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2Uodm1mLCB2bWEsIGFkZHJlc3MsIHB0ZXAsIG5yX3BhZ2VzKTtcbjUyNjQ6XHR1bmxvY2s6XG41MjY1Olx0XHRpZiAodm1mLVx1MDAzZXB0ZSlcbjUyNjY6XHRcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbjUyNjc6XHRvdXQ6XG41MjY4Olx0XHRpZiAoc2kpXG41MjY5Olx0XHRcdHB1dF9zd2FwX2RldmljZShzaSk7XG41MjcwOlx0XHQvKlxuNTI3MTpcdFx0ICogTGFyZ2UgZm9saW8gc3dhcGluIGNoYXJnZXMgd2l0aCB0aGUgVEhQIGFsbG9jYXRpb24gZ2ZwLCB3aGljaCBtYXlcbjUyNzI6XHRcdCAqIG5vdCBhbGxvdyBibG9ja2luZywgbWFraW5nIHRyeV9jaGFyZ2Ugc2tpcCBpdHMgc3luY2hyb25vdXNcbjUyNzM6XHRcdCAqIG1lbW9yeS5oaWdoIHRocm90dGxpbmcuIFNldHRsZSBhbnkgb3Zlci1oaWdoIGRlYnQgaGVyZSBpbnN0ZWFkLFxuNTI3NDpcdFx0ICogd2hlcmUgc2xlZXBpbmcgaXMgc2FmZTogdGhlIGZvbGlvIGxvY2ssIHRoZSBwYWdlIHRhYmxlIGxvY2sgYW5kXG41Mjc1Olx0XHQgKiB0aGUgc3dhcCBkZXZpY2UgcmVmZXJlbmNlIGhhdmUgYWxsIGJlZW4gZHJvcHBlZC5cbjUyNzY6XHRcdCAqL1xuNTI3NzpcdFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xuNTI3ODpcdFx0cmV0dXJuIHJldDtcbjUyNzk6XHRvdXRfbm9tYXA6XG41MjgwOlx0XHRpZiAodm1mLVx1MDAzZXB0ZSlcbjUyODE6XHRcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbjUyODI6XHRvdXRfcGFnZTpcbjUyODM6XHRcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpXG41Mjg0Olx0XHRcdGZvbGlvX2ZyZWVfc3dhcChmb2xpbyk7XG41Mjg1Olx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuNTI4NjpcdG91dF9yZWxlYXNlOlxuNTI4NzpcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjUyODg6XHRcdGlmIChmb2xpbyAhPSBzd2FwY2FjaGUpIHtcbjUyODk6XHRcdFx0Zm9saW9fdW5sb2NrKHN3YXBjYWNoZSk7XG41MjkwOlx0XHRcdGZvbGlvX3B1dChzd2FwY2FjaGUpO1xuNTI5MTpcdFx0fVxuNTI5MjpcdFx0aWYgKHNpKVxuNTI5MzpcdFx0XHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuNTI5NDpcdFx0cmV0dXJuIHJldDtcbjUyOTU6XHR9XG41Mjk2Olx0XG41Mjk3Olx0c3RhdGljIGJvb2wgcHRlX3JhbmdlX25vbmUocHRlX3QgKnB0ZSwgaW50IG5yX3BhZ2VzKVxuNTI5ODpcdHtcbjUyOTk6XHRcdGludCBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDU5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIGBhbGxvY19hbm9uX2ZvbGlvYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBhbm9ueW1vdXMgZm9saW8gYWxsb2NhdGlvbiBwcm9jZXNzLiBNeSBmaXJzdCBzdG9wIGlzIGRlZmluaXRlbHkgYGFsbG9jX2Fub25fZm9saW9gLCBzbyBJJiMzOTtsbCBiZSBoZWFkaW5nIHN0cmFpZ2h0IHRvIGBtbS9tZW1vcnkuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGFub255bW91cyBwYWdlL2ZvbGlvIGFsbG9jYXRpb25zLiBJIGtub3cgdGhlIGJhc2ljcywgb2YgY291cnNlLCBidXQgdGhlIGRldmlsIGlzIGFsd2F5cyBpbiB0aGUgZGV0YWlscywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHRoZSBhbGxvY2F0aW9uIGl0c2VsZiwgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIHBhZ2UgY2FjaGUgKGlmIGF0IGFsbCwgZm9yIHRoaXMgYW5vbnltb3VzIGNhc2UpLCBhbmQgdGhlIHZhcmlvdXMgY29uc2lkZXJhdGlvbnMgaXQgdGFrZXMgaW50byBhY2NvdW50LCBsaWtlIE5VTUEsIHpvbmVzLCBhbmQgcG90ZW50aWFsIG1lbW9yeSBwcmVzc3VyZS4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgb3B0aW1pemF0aW9ucyBvciBsb2NrIGNvbnRlbnRpb24gcG9pbnRzIEkgbWlnaHQgaGF2ZSBtaXNzZWQgaW4gcHJldmlvdXMgcmV2aWV3cy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byBzYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUzNTA6XHRcdFx0YWRkciA9IEFMSUdOX0RPV04odm1mLVx1MDAzZWFkZHJlc3MsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuNTM1MTpcdFx0XHRpZiAocHRlX3JhbmdlX25vbmUocHRlICYjNDM7IHB0ZV9pbmRleChhZGRyKSwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpKVxuNTM1MjpcdFx0XHRcdGJyZWFrO1xuNTM1MzpcdFx0XHRvcmRlciA9IG5leHRfb3JkZXIoXHUwMDI2b3JkZXJzLCBvcmRlcik7XG41MzU0Olx0XHR9XG41MzU1Olx0XG41MzU2Olx0XHRwdGVfdW5tYXAocHRlKTtcbjUzNTc6XHRcbjUzNTg6XHRcdGlmICghb3JkZXJzKVxuNTM1OTpcdFx0XHRnb3RvIGZhbGxiYWNrO1xuNTM2MDpcdFxuNTM2MTpcdFx0LyogVHJ5IGFsbG9jYXRpbmcgdGhlIGhpZ2hlc3Qgb2YgdGhlIHJlbWFpbmluZyBvcmRlcnMuICovXG41MzYyOlx0XHRnZnAgPSB2bWFfdGhwX2dmcF9tYXNrKHZtYSk7XG41MzYzOlx0XHR3aGlsZSAob3JkZXJzKSB7XG41MzY0Olx0XHRcdGFkZHIgPSBBTElHTl9ET1dOKHZtZi1cdTAwM2VhZGRyZXNzLCBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbjUzNjU6XHRcdFx0Zm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdm1hLCBhZGRyKTtcbjUzNjY6XHRcdFx0aWYgKCFmb2xpbylcbjUzNjc6XHRcdFx0XHRnb3RvIG5leHQ7XG41MzY4Olx0XHRcdGlmIChtZW1fY2dyb3VwX2NoYXJnZShmb2xpbywgdm1hLVx1MDAzZXZtX21tLCBnZnApKSB7XG41MzY5Olx0XHRcdFx0Y291bnRfbXRocF9zdGF0KG9yZGVyLCBNVEhQX1NUQVRfQU5PTl9GQVVMVF9GQUxMQkFDS19DSEFSR0UpO1xuNTM3MDpcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG41MzcxOlx0XHRcdFx0Z290byBuZXh0O1xuNTM3MjpcdFx0XHR9XG41MzczOlx0XHRcdC8qIFNhbWUgcmVhc29uaW5nIGFzIGluIHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpLiAqL1xuNTM3NDpcdFx0XHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG41Mzc1Olx0XHRcdGlmIChvcmRlciBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7XG41Mzc2Olx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjUzNzc6XHRcdFx0XHRnb3RvIGZhbGxiYWNrO1xuNTM3ODpcdFx0XHR9XG41Mzc5Olx0XHRcdGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKGZvbGlvLCBnZnApO1xuNTM4MDpcdFx0XHQvKlxuNTM4MTpcdFx0XHQgKiBXaGVuIGEgZm9saW8gaXMgbm90IHplcm9lZCBkdXJpbmcgYWxsb2NhdGlvblxuNTM4MjpcdFx0XHQgKiAoX19HRlBfWkVSTyBub3QgdXNlZCkgb3IgdXNlciBmb2xpb3MgcmVxdWlyZSBzcGVjaWFsXG41MzgzOlx0XHRcdCAqIGhhbmRsaW5nLCBmb2xpb196ZXJvX3VzZXIoKSBpcyB1c2VkIHRvIG1ha2Ugc3VyZVxuNTM4NDpcdFx0XHQgKiB0aGF0IHRoZSBwYWdlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZhdWx0aW5nIGFkZHJlc3NcbjUzODU6XHRcdFx0ICogd2lsbCBiZSBob3QgaW4gdGhlIGNhY2hlIGFmdGVyIHplcm9pbmcuXG41Mzg2Olx0XHRcdCAqL1xuNTM4NzpcdFx0XHRpZiAodXNlcl9hbGxvY19uZWVkc196ZXJvaW5nKCkpXG41Mzg4Olx0XHRcdFx0Zm9saW9femVyb191c2VyKGZvbGlvLCB2bWYtXHUwMDNlYWRkcmVzcyk7XG41Mzg5Olx0XHRcdHJldHVybiBmb2xpbztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk3MAoJCQkJCQkJb3V0cHV0OiAxOTQKCQkJCQkJCXRob3VnaHRzOiA0NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGluc2VydGluZyBjYWxscyB0byBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpYCBpbnRvIGEgZmV3IGtleSBhcmVhczogYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAsIGBkb19zd2FwX3BhZ2VgLCBhbmQgYGFsbG9jX2Fub25fZm9saW9gLiBUaGUgcmF0aW9uYWxlIGlzIHRoYXQgVEhQIGFsbG9jYXRpb25zLCBpZiB1c2luZyBub24tYmxvY2tpbmcgR0ZQIGZsYWdzLCBtaWdodCBieXBhc3MgdGhlIHN5bmNocm9ub3VzIGBtZW1vcnkuaGlnaGAgdGhyb3R0bGluZyB0aGF0IG5vcm1hbGx5IGhhcHBlbnMgaW4gYHRyeV9jaGFyZ2VgLiBUaGUgcGF0Y2gmIzM5O3MgZ29hbCBpcyB0byBmb3JjZSBzeW5jaHJvbm91cyBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCBjYWxscyBpbiB0aGVzZSBmYXVsdCBjb250ZXh0cywgYnV0IG9ubHkgd2hlbiBzbGVlcGluZyBpcyBwZXJtaXR0ZWQuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgYWx3YXlzIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBEb2VzIHRoaXMgY2hhbmdlIGV4cG9zZSBhbnkgbmV3IHJpc2tzIHRoZXJlPyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OgoKKiAgICoqVW5pbml0aWFsaXplZCBtZW1vcnkgY29waWVkIHRvIHVzZXJzcGFjZT8qKiBObywgaXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIGFueSB1bmluaXRpYWxpemVkIGRhdGEgaXMgYmVpbmcgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UuCiogICAqKlVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyByZWFkPyoqIE5vLCBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCBqdXN0IGNoZWNrcyBhIGNvdW50ZXIgKGBjdXJyZW50LSZndDttZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2hgKSBhbmQgY2FsbHMgYHJlY2xhaW1faGlnaGAgaWYgdGhlIGNvdW50ZXIgaXNuJiMzOTt0IHplcm8uIFRoYXQgY291bnRlciYjMzk7cyB2YWx1ZSBpcyBjZXJ0YWlubHkgaW5pdGlhbGl6ZWQgZWFybGllciwgc28gcmVhZGluZyBpdCBpcyBzYWZlLgoqICAgKipCdWZmZXIgYm91bmRzIGFsdGVyZWQsIGFsbG93aW5nIGZvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzPyoqIE5vLCBub3RoaW5nIGxpa2UgdGhhdCBpcyBoYXBwZW5pbmcgaGVyZS4KKiAgICoqRm9saW8gemVyb2luZy9pbml0aWFsaXphdGlvbiBjaGFuZ2VkPyoqIE5vcGUsIHRob3NlIG9wZXJhdGlvbnMgKGBmb2xpb196ZXJvX3VzZXJgIGV0Yy4pIGFyZSBjb21wbGV0ZWx5IHVudG91Y2hlZC4KCkJhc2VkIG9uIHRoaXMsIGl0IHNlZW1zIHRoaXMgaXMgKipub3QqKiBnb2luZyB0byBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd291bGQgYmUgcmVsYXRlZCB0byBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dHMgKHRob3VnaCB0aGUgY29tbWVudHMgc3VnZ2VzdCB0aGlzIGlzIG5vdyBzYWZlKSBvciwgbW9yZSBsaWtlbHksIGlzc3VlcyBhcm91bmQgbWVtb3J5IHRocm90dGxpbmcvcmVjbGFpbSBiZWhhdmlvci4gVGhlc2UgYXJlIGZpcm1seSBpbiB0aGUgZG9tYWluIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSwgYW5kIGxvY2tpbmcgc2VtYW50aWNzIOKAkyB0aGluZ3MgdGhhdCBLQVNBTiwgTE9DS0RFUCwgV0FSTiwgYW5kIG90aGVyIHN0YW5kYXJkIHRvb2xzIGFyZSBkZXNpZ25lZCB0byBjYXRjaC4gVGhpcyBpcyBub3QgYSBLTVNBTiBjb25jZXJuLgoKU28sIEkmIzM5O20gY29uZmlkZW50IGluIHNheWluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KCk5vdywgbGV0JiMzOTtzIHNvbGlkaWZ5IHRoZSBLTVNBTiByZWFzb25pbmc6IFRoaXMgcGF0Y2ggYWRkcmVzc2VzIHRoZSB0aHJvdHRsaW5nIG9mIG1lbW9yeSBjZ3JvdXAgdXNhZ2Ugd2hlbiBvdmVyIHRoZSBoaWdoIGxpbWl0IGluIFRIUCBhbmQgc3dhcCBmYXVsdCBwYXRocyBieSBhZGRpbmcgY2FsbHMgdG8gYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGJlY2F1c2UgaXQgZG9lcyBub3QgcmVzdWx0IGluIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGhhbmRsaW5nLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24uIFRoZSBjaGFuZ2VzIGFyZSBzdGFuZGFyZCBtZW1vcnkgbWFuYWdlbWVudC1yZWxhdGVkIG1vZGlmaWNhdGlvbnMsIGFuZCBhbnkgcG90ZW50aWFsIHNsZWVwL2xvY2tpbmcgaXNzdWVzLCBhcmUgcHJvcGVybHkgYWRkcmVzc2VkIGJ5IEtBU0FOL0xPQ0tERVAgZXRjLgoKQWxyaWdodCwgdGhhdCBjb3ZlcnMgaXQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGNhbGxzIHRvIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTClgIGluIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKWAsIGBkb19zd2FwX3BhZ2UoKWAsIGFuZCBgYWxsb2NfYW5vbl9mb2xpbygpYCB0byBlbmZvcmNlIHN5bmNocm9ub3VzIGBtZW1vcnkuaGlnaGAgY2dyb3VwIHRocm90dGxpbmcgZHVyaW5nIHBhZ2UgZmF1bHQgaGFuZGxpbmcgd2hlbiBjaGFyZ2luZyBmb2xpb3MuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgcGVydGFpbiB0byBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcsIHJlY2xhbWF0aW9uLCBhbmQgdGhyb3R0bGluZyBjb250cm9sIGZsb3cuIFRoZXkgZG8gbm90IGFsbG9jYXRlLCBtb2RpZnksIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkgc3RydWN0dXJlcywgbm9yIGRvIHRoZXkgaW50cm9kdWNlIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3ksIHNsZWVwaW5nLWluLWF0b21pYywgb3IgbGlmZXRpbWUgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKEtBU0FOLCBMT0NLREVQLCBERUJVR19BVE9NSUNfU0xFRVApLCBtYWtpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGNhbGxzIHRvIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTClgIGluIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKWAsIGBkb19zd2FwX3BhZ2UoKWAsIGFuZCBgYWxsb2NfYW5vbl9mb2xpbygpYCB0byBlbmZvcmNlIHN5bmNocm9ub3VzIGBtZW1vcnkuaGlnaGAgY2dyb3VwIHRocm90dGxpbmcgZHVyaW5nIHBhZ2UgZmF1bHQgaGFuZGxpbmcgd2hlbiBjaGFyZ2luZyBmb2xpb3MuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgcGVydGFpbiB0byBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcsIHJlY2xhbWF0aW9uLCBhbmQgdGhyb3R0bGluZyBjb250cm9sIGZsb3cuIFRoZXkgZG8gbm90IGFsbG9jYXRlLCBtb2RpZnksIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkgc3RydWN0dXJlcywgbm9yIGRvIHRoZXkgaW50cm9kdWNlIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3ksIHNsZWVwaW5nLWluLWF0b21pYywgb3IgbGlmZXRpbWUgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKEtBU0FOLCBMT0NLREVQLCBERUJVR19BVE9NSUNfU0xFRVApLCBtYWtpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ0OjI3LjUxNDA2MTYyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MjE1Mjk1MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoXCIsXG4gICAgXCJkb19zd2FwX3BhZ2VcIixcbiAgICBcImRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlXCIsXG4gICAgXCJkb19odWdlX3BtZF93cF9wYWdlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGNhbGxzIHRvIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTClgIGluIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKWAsIGBkb19zd2FwX3BhZ2UoKWAsIGFuZCBgYWxsb2NfYW5vbl9mb2xpbygpYCB0byBlbmZvcmNlIHN5bmNocm9ub3VzIGBtZW1vcnkuaGlnaGAgY2dyb3VwIHRocm90dGxpbmcgZHVyaW5nIHBhZ2UgZmF1bHQgaGFuZGxpbmcgd2hlbiBjaGFyZ2luZyBmb2xpb3MuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBwZXJ0YWluIHRvIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZywgcmVjbGFtYXRpb24sIGFuZCB0aHJvdHRsaW5nIGNvbnRyb2wgZmxvdy4gVGhleSBkbyBub3QgYWxsb2NhdGUsIG1vZGlmeSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSBzdHJ1Y3R1cmVzLCBub3IgZG8gdGhleSBpbnRyb2R1Y2Uga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgc2xlZXBpbmctaW4tYXRvbWljLCBvciBsaWZldGltZSBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAoS0FTQU4sIExPQ0tERVAsIERFQlVHX0FUT01JQ19TTEVFUCksIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGluIG1tL2h1Z2VfbWVtb3J5LmMgYW5kIG1tL21lbW9yeS5jIGJ5IGludm9raW5nIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaCgpIGR1cmluZyBQTUQgVEhQIGFub255bW91cyBhbGxvY2F0aW9uLCBtVEhQIGFub255bW91cyBhbGxvY2F0aW9uLCBhbmQgc3dhcC1pbiBwYWdlIGZhdWx0IHBhdGhzLiBUaGlzIGVuc3VyZXMgbWVtb3J5LmhpZ2ggdGhyb3R0bGluZyBkZWJ0IGlzIHN5bmNocm9ub3VzbHkgaGFuZGxlZCBpbiBzbGVlcGluZyBmYXVsdCBjb250ZXh0cyB3aGVuIG5vbi1ibG9ja2luZyBHRlAgbWFza3Mgd2VyZSB1c2VkIGR1cmluZyBjaGFyZ2luZy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gcmVhY2hhYmxlIE1NIGNvZGUgcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZyB0byB2ZXJpZnkgbG9ja2luZyBpbnZhcmlhbnRzIGFuZCB0aHJvdHRsaW5nIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NDoyNy41MTQwNjY4MDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NDgyMTc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNlMTRlOGE5NDE5MTVkNjA4Mzc4NWY2ZmVkYTA3NzE4ZjU0ZGFmOTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxMzo0NDoyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IGNlZDQwMGY3MmQ0M2EuLjU0M2JhNGE3NGRjM2EgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMTMyOSw2ICsxMzI5LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBjaGFyZ2UgZ2ZwIGVuY29kZXMgVEhQIGFsbG9jYXRpb24gcG9saWN5IGFuZCBtYXkgbm90IGFsbG93XFxuK1xcdCAqIGJsb2NraW5nLCB3aGljaCBtYWtlcyB0cnlfY2hhcmdlIHNraXAgaXRzIHN5bmNocm9ub3VzIG1lbW9yeS5oaWdoXFxuK1xcdCAqIHRocm90dGxpbmcuIEZhdWx0IGNvbnRleHQgY2FuIHNsZWVwLCBzbyBzZXR0bGUgYW55IG92ZXItaGlnaCBkZWJ0XFxuK1xcdCAqIGhlcmUgaW5zdGVhZCBvZiBsZXR0aW5nIHVzYWdlIGdyb3cgdW50aHJvdHRsZWQgdXAgdG8gbWVtb3J5Lm1heC5cXG4rXFx0ICovXFxuK1xcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcXG4rXFxuIFxcdGlmIChmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChmb2xpbykpIHtcXG4gXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xcbmluZGV4IDhiMGMyYzczNWQzZGUuLmRjOTdjZjBlYmZiMzAgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC01MjY3LDYgKzUyNjcsMTQgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIG91dDpcXG4gXFx0aWYgKHNpKVxcbiBcXHRcXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xcbitcXHQvKlxcbitcXHQgKiBMYXJnZSBmb2xpbyBzd2FwaW4gY2hhcmdlcyB3aXRoIHRoZSBUSFAgYWxsb2NhdGlvbiBnZnAsIHdoaWNoIG1heVxcbitcXHQgKiBub3QgYWxsb3cgYmxvY2tpbmcsIG1ha2luZyB0cnlfY2hhcmdlIHNraXAgaXRzIHN5bmNocm9ub3VzXFxuK1xcdCAqIG1lbW9yeS5oaWdoIHRocm90dGxpbmcuIFNldHRsZSBhbnkgb3Zlci1oaWdoIGRlYnQgaGVyZSBpbnN0ZWFkLFxcbitcXHQgKiB3aGVyZSBzbGVlcGluZyBpcyBzYWZlOiB0aGUgZm9saW8gbG9jaywgdGhlIHBhZ2UgdGFibGUgbG9jayBhbmRcXG4rXFx0ICogdGhlIHN3YXAgZGV2aWNlIHJlZmVyZW5jZSBoYXZlIGFsbCBiZWVuIGRyb3BwZWQuXFxuK1xcdCAqL1xcbitcXHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIG91dF9ub21hcDpcXG4gXFx0aWYgKHZtZi1cXHUwMDNlcHRlKVxcbkBAIC01MzYyLDYgKzUzNzAsOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19hbm9uX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiBcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRcXHRnb3RvIG5leHQ7XFxuIFxcdFxcdH1cXG4rXFx0XFx0LyogU2FtZSByZWFzb25pbmcgYXMgaW4gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKCkuICovXFxuK1xcdFxcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcXG4gXFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMSBcXHUwMDI2XFx1MDAyNiBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChmb2xpbykpIHtcXG4gXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0XFx0Z290byBmYWxsYmFjaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDQ6MjcuODY5NjQ3NjM2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1NTM0Njg1MjUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaFwiLFxuICAgIFwiZG9fc3dhcF9wYWdlXCIsXG4gICAgXCJkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZVwiLFxuICAgIFwiZG9faHVnZV9wbWRfd3BfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmF1bHQgaGFuZGxpbmcgbG9naWMgaW4gbW0vaHVnZV9tZW1vcnkuYyBhbmQgbW0vbWVtb3J5LmMgYnkgaW52b2tpbmcgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKCkgZHVyaW5nIFBNRCBUSFAgYW5vbnltb3VzIGFsbG9jYXRpb24sIG1USFAgYW5vbnltb3VzIGFsbG9jYXRpb24sIGFuZCBzd2FwLWluIHBhZ2UgZmF1bHQgcGF0aHMuIFRoaXMgZW5zdXJlcyBtZW1vcnkuaGlnaCB0aHJvdHRsaW5nIGRlYnQgaXMgc3luY2hyb25vdXNseSBoYW5kbGVkIGluIHNsZWVwaW5nIGZhdWx0IGNvbnRleHRzIHdoZW4gbm9uLWJsb2NraW5nIEdGUCBtYXNrcyB3ZXJlIHVzZWQgZHVyaW5nIGNoYXJnaW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiByZWFjaGFibGUgTU0gY29kZSBwYXRocyBhbmQgd2FycmFudCBmdXp6aW5nIHRvIHZlcmlmeSBsb2NraW5nIGludmFyaWFudHMgYW5kIHRocm90dGxpbmcgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2UxNGU4YTk0MTkxNWQ2MDgzNzg1ZjZmZWRhMDc3MThmNTRkYWY5OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTM6NDQ6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggY2VkNDAwZjcyZDQzYS4uNTQzYmE0YTc0ZGMzYSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0xMzI5LDYgKzEzMjksMTQgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBUaGUgY2hhcmdlIGdmcCBlbmNvZGVzIFRIUCBhbGxvY2F0aW9uIHBvbGljeSBhbmQgbWF5IG5vdCBhbGxvd1xuK1x0ICogYmxvY2tpbmcsIHdoaWNoIG1ha2VzIHRyeV9jaGFyZ2Ugc2tpcCBpdHMgc3luY2hyb25vdXMgbWVtb3J5LmhpZ2hcbitcdCAqIHRocm90dGxpbmcuIEZhdWx0IGNvbnRleHQgY2FuIHNsZWVwLCBzbyBzZXR0bGUgYW55IG92ZXItaGlnaCBkZWJ0XG4rXHQgKiBoZXJlIGluc3RlYWQgb2YgbGV0dGluZyB1c2FnZSBncm93IHVudGhyb3R0bGVkIHVwIHRvIG1lbW9yeS5tYXguXG4rXHQgKi9cbitcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcbitcbiBcdGlmIChmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChmb2xpbykpIHtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0Y291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA4YjBjMmM3MzVkM2RlLi5kYzk3Y2YwZWJmYjMwIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNTI2Nyw2ICs1MjY3LDE0IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIG91dDpcbiBcdGlmIChzaSlcbiBcdFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcbitcdC8qXG4rXHQgKiBMYXJnZSBmb2xpbyBzd2FwaW4gY2hhcmdlcyB3aXRoIHRoZSBUSFAgYWxsb2NhdGlvbiBnZnAsIHdoaWNoIG1heVxuK1x0ICogbm90IGFsbG93IGJsb2NraW5nLCBtYWtpbmcgdHJ5X2NoYXJnZSBza2lwIGl0cyBzeW5jaHJvbm91c1xuK1x0ICogbWVtb3J5LmhpZ2ggdGhyb3R0bGluZy4gU2V0dGxlIGFueSBvdmVyLWhpZ2ggZGVidCBoZXJlIGluc3RlYWQsXG4rXHQgKiB3aGVyZSBzbGVlcGluZyBpcyBzYWZlOiB0aGUgZm9saW8gbG9jaywgdGhlIHBhZ2UgdGFibGUgbG9jayBhbmRcbitcdCAqIHRoZSBzd2FwIGRldmljZSByZWZlcmVuY2UgaGF2ZSBhbGwgYmVlbiBkcm9wcGVkLlxuK1x0ICovXG4rXHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG4gXHRyZXR1cm4gcmV0O1xuIG91dF9ub21hcDpcbiBcdGlmICh2bWYtXHUwMDNlcHRlKVxuQEAgLTUzNjIsNiArNTM3MCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRnb3RvIG5leHQ7XG4gXHRcdH1cbitcdFx0LyogU2FtZSByZWFzb25pbmcgYXMgaW4gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKCkuICovXG4rXHRcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKG9yZGVyIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChmb2xpbykpIHtcbiBcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRcdGdvdG8gZmFsbGJhY2s7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NDoyNy44Njk2NDk4MzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MjMxMzMyNTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuIFRoZSBkaWZmIHNob3dzIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHRocmVlIGZ1bmN0aW9ucyBpbiB0d28gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmaWxlcy4gSSBzZWUgYWRkaXRpb25zIG9mIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7YCBpbiBgbW0vaHVnZV9tZW1vcnkuY2Agd2l0aGluIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKWAsIGFuZCBpbiBgbW0vbWVtb3J5LmNgIHdpdGhpbiBgZG9fc3dhcF9wYWdlKClgIGF0IGxhYmVsIGBvdXQ6YCwgYW5kIGFsc28gaW4gYGFsbG9jX2Fub25fZm9saW8oKWAuXG5cbkVzc2VudGlhbGx5LCB0aGlzIGlzIGFib3V0IGhhbmRsaW5nIG1lbW9yeSBjZ3JvdXAgb3Zlci1oaWdoIGNvbmRpdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY291bnRpbmcgd2l0aGluIGNncm91cHMsIHNwZWNpZmljYWxseSB3aGVuIGEgY2dyb3VwIGlzIGV4Y2VlZGluZyBpdHMgbWVtb3J5IGxpbWl0cyBhbmQgdGhlIHN5c3RlbSBpcyB0cnlpbmcgdG8gYWxsb2NhdGUgbW9yZSBtZW1vcnkuIFRoZSBgR0ZQX0tFUk5FTGAgZmxhZyBpcyBjcnVjaWFsLCBzdWdnZXN0aW5nIHRoaXMgaXMgaGFwcGVuaW5nIGZyb20ga2VybmVsLXNwYWNlIGFsbG9jYXRpb25zLiBOb3csIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZ3Jhc3AgdGhlIHByZWNpc2UgY29udGV4dCBvZiB0aGVzZSBhZGRpdGlvbnMgd2l0aGluIGVhY2ggZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGV4YWN0bHkgdGhlc2UgaG9va3MgYXJlIGJlaW5nIGFkZGVkIGluIHJlbGF0aW9uIHRvIHRoZSBhbGxvY2F0aW9uIHBhdGhzLCBhbmQgd2hhdCB0aGUgc3Vycm91bmRpbmcgbG9naWMgaXMuIFdoYXQgaXMgdGhlIHByZWNpc2UgbWVtb3J5IGFsbG9jYXRpb24gcGF0aCBiZWluZyB0b3VjaGVkLCBhbmQgd2hhdCBpcyBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKClgIGRvaW5nLCBleGFjdGx5PyBJcyBpdCBhIHJhdGUtbGltaXRpbmcgbWVjaGFuaXNtLCBhIGRlbmlhbCBvZiBzZXJ2aWNlIHByZXZlbnRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGluc3BlY3QgdGhlIGNvZGUgbW9yZSBjYXJlZnVsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMjQsIk91dHB1dFRva2VucyI6MTA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDQ6MzUuMTAwOTg0ODQ4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMxNTpcXHRcXG4xMzE2OlxcdFxcdGlmICh1bmxpa2VseSghZm9saW8pKSB7XFxuMTMxNzpcXHRcXHRcXHRjb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0spO1xcbjEzMTg6XFx0XFx0XFx0Y291bnRfbXRocF9zdGF0KG9yZGVyLCBNVEhQX1NUQVRfQU5PTl9GQVVMVF9GQUxMQkFDSyk7XFxuMTMxOTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzIwOlxcdFxcdH1cXG4xMzIxOlxcdFxcbjEzMjI6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSwgZm9saW8pO1xcbjEzMjM6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCB2bWEtXFx1MDAzZXZtX21tLCBnZnApKSB7XFxuMTMyNDpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjEzMjU6XFx0XFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLKTtcXG4xMzI2OlxcdFxcdFxcdGNvdW50X3ZtX2V2ZW50KFRIUF9GQVVMVF9GQUxMQkFDS19DSEFSR0UpO1xcbjEzMjc6XFx0XFx0XFx0Y291bnRfbXRocF9zdGF0KG9yZGVyLCBNVEhQX1NUQVRfQU5PTl9GQVVMVF9GQUxMQkFDSyk7XFxuMTMyODpcXHRcXHRcXHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLX0NIQVJHRSk7XFxuMTMyOTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzMwOlxcdFxcdH1cXG4xMzMxOlxcdFxcbjEzMzI6XFx0XFx0LypcXG4xMzMzOlxcdFxcdCAqIFRoZSBjaGFyZ2UgZ2ZwIGVuY29kZXMgVEhQIGFsbG9jYXRpb24gcG9saWN5IGFuZCBtYXkgbm90IGFsbG93XFxuMTMzNDpcXHRcXHQgKiBibG9ja2luZywgd2hpY2ggbWFrZXMgdHJ5X2NoYXJnZSBza2lwIGl0cyBzeW5jaHJvbm91cyBtZW1vcnkuaGlnaFxcbjEzMzU6XFx0XFx0ICogdGhyb3R0bGluZy4gRmF1bHQgY29udGV4dCBjYW4gc2xlZXAsIHNvIHNldHRsZSBhbnkgb3Zlci1oaWdoIGRlYnRcXG4xMzM2OlxcdFxcdCAqIGhlcmUgaW5zdGVhZCBvZiBsZXR0aW5nIHVzYWdlIGdyb3cgdW50aHJvdHRsZWQgdXAgdG8gbWVtb3J5Lm1heC5cXG4xMzM3OlxcdFxcdCAqL1xcbjEzMzg6XFx0XFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xcbjEzMzk6XFx0XFxuMTM0MDpcXHRcXHRpZiAoZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7XFxuMTM0MTpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjEzNDI6XFx0XFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLKTtcXG4xMzQzOlxcdFxcdFxcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spO1xcbjEzNDQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTM0NTpcXHRcXHR9XFxuMTM0NjpcXHRcXG4xMzQ3OlxcdFxcdGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKGZvbGlvLCBnZnApO1xcbjEzNDg6XFx0XFxuMTM0OTpcXHQgICAgICAgLypcXG4xMzUwOlxcdFxcdCogV2hlbiBhIGZvbGlvIGlzIG5vdCB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb24gKF9fR0ZQX1pFUk8gbm90IHVzZWQpXFxuMTM1MTpcXHRcXHQqIG9yIHVzZXIgZm9saW9zIHJlcXVpcmUgc3BlY2lhbCBoYW5kbGluZywgZm9saW9femVyb191c2VyKCkgaXMgdXNlZCB0b1xcbjEzNTI6XFx0XFx0KiBtYWtlIHN1cmUgdGhhdCB0aGUgcGFnZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmYXVsdGluZyBhZGRyZXNzIHdpbGwgYmVcXG4xMzUzOlxcdFxcdCogaG90IGluIHRoZSBjYWNoZSBhZnRlciB6ZXJvaW5nLlxcbjEzNTQ6XFx0XFx0Ki9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDQ6MzUuMTAxMTkzNTE4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUyNjA6XFx0XFx0fVxcbjUyNjE6XFx0XFxuNTI2MjpcXHRcXHQvKiBObyBuZWVkIHRvIGludmFsaWRhdGUgLSBpdCB3YXMgbm9uLXByZXNlbnQgYmVmb3JlICovXFxuNTI2MzpcXHRcXHR1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHZtZiwgdm1hLCBhZGRyZXNzLCBwdGVwLCBucl9wYWdlcyk7XFxuNTI2NDpcXHR1bmxvY2s6XFxuNTI2NTpcXHRcXHRpZiAodm1mLVxcdTAwM2VwdGUpXFxuNTI2NjpcXHRcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cXHUwMDNlcHRlLCB2bWYtXFx1MDAzZXB0bCk7XFxuNTI2NzpcXHRvdXQ6XFxuNTI2ODpcXHRcXHRpZiAoc2kpXFxuNTI2OTpcXHRcXHRcXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xcbjUyNzA6XFx0XFx0LypcXG41MjcxOlxcdFxcdCAqIExhcmdlIGZvbGlvIHN3YXBpbiBjaGFyZ2VzIHdpdGggdGhlIFRIUCBhbGxvY2F0aW9uIGdmcCwgd2hpY2ggbWF5XFxuNTI3MjpcXHRcXHQgKiBub3QgYWxsb3cgYmxvY2tpbmcsIG1ha2luZyB0cnlfY2hhcmdlIHNraXAgaXRzIHN5bmNocm9ub3VzXFxuNTI3MzpcXHRcXHQgKiBtZW1vcnkuaGlnaCB0aHJvdHRsaW5nLiBTZXR0bGUgYW55IG92ZXItaGlnaCBkZWJ0IGhlcmUgaW5zdGVhZCxcXG41Mjc0OlxcdFxcdCAqIHdoZXJlIHNsZWVwaW5nIGlzIHNhZmU6IHRoZSBmb2xpbyBsb2NrLCB0aGUgcGFnZSB0YWJsZSBsb2NrIGFuZFxcbjUyNzU6XFx0XFx0ICogdGhlIHN3YXAgZGV2aWNlIHJlZmVyZW5jZSBoYXZlIGFsbCBiZWVuIGRyb3BwZWQuXFxuNTI3NjpcXHRcXHQgKi9cXG41Mjc3OlxcdFxcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcXG41Mjc4OlxcdFxcdHJldHVybiByZXQ7XFxuNTI3OTpcXHRvdXRfbm9tYXA6XFxuNTI4MDpcXHRcXHRpZiAodm1mLVxcdTAwM2VwdGUpXFxuNTI4MTpcXHRcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cXHUwMDNlcHRlLCB2bWYtXFx1MDAzZXB0bCk7XFxuNTI4MjpcXHRvdXRfcGFnZTpcXG41MjgzOlxcdFxcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpXFxuNTI4NDpcXHRcXHRcXHRmb2xpb19mcmVlX3N3YXAoZm9saW8pO1xcbjUyODU6XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG41Mjg2OlxcdG91dF9yZWxlYXNlOlxcbjUyODc6XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG41Mjg4OlxcdFxcdGlmIChmb2xpbyAhPSBzd2FwY2FjaGUpIHtcXG41Mjg5OlxcdFxcdFxcdGZvbGlvX3VubG9jayhzd2FwY2FjaGUpO1xcbjUyOTA6XFx0XFx0XFx0Zm9saW9fcHV0KHN3YXBjYWNoZSk7XFxuNTI5MTpcXHRcXHR9XFxuNTI5MjpcXHRcXHRpZiAoc2kpXFxuNTI5MzpcXHRcXHRcXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xcbjUyOTQ6XFx0XFx0cmV0dXJuIHJldDtcXG41Mjk1OlxcdH1cXG41Mjk2OlxcdFxcbjUyOTc6XFx0c3RhdGljIGJvb2wgcHRlX3JhbmdlX25vbmUocHRlX3QgKnB0ZSwgaW50IG5yX3BhZ2VzKVxcbjUyOTg6XFx0e1xcbjUyOTk6XFx0XFx0aW50IGk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ0OjM1LjEwMTQyNTk4OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MzQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MzQ1OlxcdFxcdCAqIHB0ZV9ub25lKCkuIE5vdGUgdGhhdCBhbGwgcmVtYWluaW5nIG9yZGVycyB3aWxsIGJlIGNvbXBsZXRlbHlcXG41MzQ2OlxcdFxcdCAqIHB0ZV9ub25lKCkuXFxuNTM0NzpcXHRcXHQgKi9cXG41MzQ4OlxcdFxcdG9yZGVyID0gaGlnaGVzdF9vcmRlcihvcmRlcnMpO1xcbjUzNDk6XFx0XFx0d2hpbGUgKG9yZGVycykge1xcbjUzNTA6XFx0XFx0XFx0YWRkciA9IEFMSUdOX0RPV04odm1mLVxcdTAwM2VhZGRyZXNzLCBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbjUzNTE6XFx0XFx0XFx0aWYgKHB0ZV9yYW5nZV9ub25lKHB0ZSArIHB0ZV9pbmRleChhZGRyKSwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlcikpXFxuNTM1MjpcXHRcXHRcXHRcXHRicmVhaztcXG41MzUzOlxcdFxcdFxcdG9yZGVyID0gbmV4dF9vcmRlcihcXHUwMDI2b3JkZXJzLCBvcmRlcik7XFxuNTM1NDpcXHRcXHR9XFxuNTM1NTpcXHRcXG41MzU2OlxcdFxcdHB0ZV91bm1hcChwdGUpO1xcbjUzNTc6XFx0XFxuNTM1ODpcXHRcXHRpZiAoIW9yZGVycylcXG41MzU5OlxcdFxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuNTM2MDpcXHRcXG41MzYxOlxcdFxcdC8qIFRyeSBhbGxvY2F0aW5nIHRoZSBoaWdoZXN0IG9mIHRoZSByZW1haW5pbmcgb3JkZXJzLiAqL1xcbjUzNjI6XFx0XFx0Z2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xcbjUzNjM6XFx0XFx0d2hpbGUgKG9yZGVycykge1xcbjUzNjQ6XFx0XFx0XFx0YWRkciA9IEFMSUdOX0RPV04odm1mLVxcdTAwM2VhZGRyZXNzLCBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbjUzNjU6XFx0XFx0XFx0Zm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdm1hLCBhZGRyKTtcXG41MzY2OlxcdFxcdFxcdGlmICghZm9saW8pXFxuNTM2NzpcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuNTM2ODpcXHRcXHRcXHRpZiAobWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIHZtYS1cXHUwMDNldm1fbW0sIGdmcCkpIHtcXG41MzY5OlxcdFxcdFxcdFxcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0tfQ0hBUkdFKTtcXG41MzcwOlxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuNTM3MTpcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuNTM3MjpcXHRcXHRcXHR9XFxuNTM3MzpcXHRcXHRcXHQvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi9cXG41Mzc0OlxcdFxcdFxcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcXG41Mzc1OlxcdFxcdFxcdGlmIChvcmRlciBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7XFxuNTM3NjpcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjUzNzc6XFx0XFx0XFx0XFx0Z290byBmYWxsYmFjaztcXG41Mzc4OlxcdFxcdFxcdH1cXG41Mzc5OlxcdFxcdFxcdGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKGZvbGlvLCBnZnApO1xcbjUzODA6XFx0XFx0XFx0LypcXG41MzgxOlxcdFxcdFxcdCAqIFdoZW4gYSBmb2xpbyBpcyBub3QgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uXFxuNTM4MjpcXHRcXHRcXHQgKiAoX19HRlBfWkVSTyBub3QgdXNlZCkgb3IgdXNlciBmb2xpb3MgcmVxdWlyZSBzcGVjaWFsXFxuNTM4MzpcXHRcXHRcXHQgKiBoYW5kbGluZywgZm9saW9femVyb191c2VyKCkgaXMgdXNlZCB0byBtYWtlIHN1cmVcXG41Mzg0OlxcdFxcdFxcdCAqIHRoYXQgdGhlIHBhZ2UgY29ycmVzcG9uZGluZyB0byB0aGUgZmF1bHRpbmcgYWRkcmVzc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NDozNS4xMDE2NDQ5ODhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzY4MzUxMTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUG90ZW50aWFsOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZGl2ZXMgaW50byB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IOKAkyBzcGVjaWZpY2FsbHksIGl0J3MgdG91Y2hpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBgbW0vbWVtb3J5LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIHJpcGUgZm9yIGZ1enppbmcuIFRoZSBrZXkgZnVuY3Rpb25zIGl0IG1vZGlmaWVzIGFyZSBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCwgYGRvX3N3YXBfcGFnZWAsIGFuZCBgYWxsb2NfYW5vbl9mb2xpb2AuIFxuXG5MZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gYSBxdWljayBnbGFuY2UsIHRoZSBjb3JlIHN1YnN5c3RlbSBpbnZvbHZlZCBpcyBkZWZpbml0ZWx5IG1lbW9yeSBtYW5hZ2VtZW50OiBwYWdlIGZhdWx0IGhhbmRsaW5nLCBhbm9ueW1vdXMgVEhQIGFsbG9jYXRpb25zLCBzd2FwLWluIGhhbmRsaW5nLCBhbmQgbWVtY2cgdGhyb3R0bGluZy4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvci4gVGhlbiwgSSBuZWVkIHRvIGtub3cgaWYgSSBjYW4gdGVzdCB0aGlzIGVhc2lseS4gS25vd2luZyB0aGF0IHRoaXMgaXMgcmVhY2hhYmxlIGluIGEgUUVNVS9HQ0UgYW1kNjQgZW52aXJvbm1lbnQgaXMgcGVyZmVjdC4gWWVhaCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbk5vdywgdG8gbWFrZSBzdXJlIEknbSB0ZXN0aW5nIHRoaXMgcHJvcGVybHksIEkgbmVlZCB0byBrbm93IHRoZSByaWdodCBjb25maWd1cmF0aW9ucyB0byB1c2UuIEknbGwgbmVlZCB0byBjaGVjayB3aGF0IGNvbmZpZ3MgaW5mbHVlbmNlIGBtbS9odWdlX21lbW9yeS5jYCwgcGx1cyB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLCBhbmQgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAsIGFuZCBJIHdpbGwgbGlrZWx5IG5lZWQgdG8gZW5zdXJlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBNRU1DR2AsIGFuZCBgU1dBUGAgYXJlIGVuYWJsZWQuIEdvb2QsIEknbSBjb25maWRlbnQgSSBjYW4gbWFrZSB0aGlzIGZ1enppbmcgY2FtcGFpZ24gd29ydGh3aGlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgwMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ0OjM3Ljg2OTk5ODY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTkyODM1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0V8Q09ORklHX01FTUNHfENPTkZJR19TV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEyNTcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL01ha2VmaWxlPTc2PWVuZGlmXFxubW0vTWFrZWZpbGUtNzctXFxubW0vTWFrZWZpbGU6Nzg6b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxubW0vTWFrZWZpbGUtNzktb2JqLSQoQ09ORklHX1pTV0FQKVxcdCs9IHpzd2FwLm9cXG4tLVxcbm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgKz0gYnBmX21lbWNvbnRyb2wub1xcbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTYwPXN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKSB7IHJldHVybiBmYWxzZTsgfVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTc1LSAqL1xcbm1tL2NvbXBhY3Rpb24uYzo3NjojaWYgZGVmaW5lZCBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9jb21wYWN0aW9uLmMtNzctI2RlZmluZSBDT01QQUNUSU9OX0hQQUdFX09SREVSXFx0SFBBR0VfUE1EX09SREVSXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9NzM9dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTc0LXtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NzU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy03Ni1cXHRwbWRfdCBwbWR2YWwgPSBwbWRwX2dldChwbWQpO1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTk3LVxcdGZvbGlvX3B1dChmb2xpbyk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjk4OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtOTktfVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE5ND1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMTUtXFx0XFx0fSBlbHNlIHtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjE2OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjE3LVxcdFxcdFxcdHBtZF90IHBtZCA9IHBtZHBfZ2V0KHB2bXcucG1kKTtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMjMtXFx0XFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMjQ6I2VuZGlmXFx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIyNS1cXHRcXHR9XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0xMDY9c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMDgte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTEwLVxcdGNncm91cF9wYXRoKG1lbWNnLVxcdTAwM2Vjc3MuY2dyb3VwLCBtZW1jZ19wYXRoX2J1ZiwgUEFUSF9NQVgpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTEyLVxcdFxcdHJldHVybiB0cnVlO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjExMzojZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE0LVxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9Mzg5PXN0YXRpYyBpbnQgZGFtb25feW91bmdfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMzk3LVxcbm1tL2RhbW9uL3ZhZGRyLmM6Mzk4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kYW1vbi92YWRkci5jLTM5OS1cXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cXHUwMDNldm1hKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNDE1LVxcdH1cXG5tbS9kYW1vbi92YWRkci5jOjQxNjojZW5kaWZcXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kYW1vbi92YWRkci5jLTQxNy1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NjM1PXN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy02NDYtXFxubW0vZGFtb24vdmFkZHIuYzo2NDc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RhbW9uL3ZhZGRyLmMtNjQ4LVxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVxcdTAwM2V2bWEpO1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYy02NjQtXFx0fVxcbm1tL2RhbW9uL3ZhZGRyLmM6NjY1OiNlbmRpZlxcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RhbW9uL3ZhZGRyLmMtNjY2LVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz03OTU9c3RhdGljIGludCBkYW1vc192YV9zdGF0X3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTgwNi1cXG5tbS9kYW1vbi92YWRkci5jOjgwNzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vZGFtb24vdmFkZHIuYy04MDgtXFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XFxuLS1cXG5tbS9kZWJ1Zy5jPTcwPXN0YXRpYyB2b2lkIF9fZHVtcF9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL2RlYnVnLmMtOTYtXFxubW0vZGVidWcuYzo5NzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZGVidWcuYy05OC1cXHRpZiAoZm9saW8tXFx1MDAzZW1lbWNnX2RhdGEpXFxuLS1cXG5tbS9kZWJ1Zy5jPTE3NT12b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS9kZWJ1Zy5jLTE4OC0jZW5kaWZcXG5tbS9kZWJ1Zy5jOjE4OTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZGVidWcuYy0xOTAtXFx0XFx0XFxcIm93bmVyICVweCBcXFwiXFxuLS1cXG5tbS9kZWJ1Zy5jLTIxNy0jZW5kaWZcXG5tbS9kZWJ1Zy5jOjIxODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZGVidWcuYy0yMTktXFx0XFx0bW0tXFx1MDAzZW93bmVyLFxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTExND1zdGF0aWMgdm9pZCBfX2luaXQgcHRlX2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTcyLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxNzM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xNzQtc3RhdGljIHZvaWQgX19pbml0IHBtZF9iYXNpY190ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzLCBpbnQgaWR4KVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTQyMz1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQyNC0jZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NDI1OiNlbHNlICAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQyNi1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpIHsgfVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTQzMT1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjQzMjojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQzMy1cXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz02NzE9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTY4Mi1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NjgzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNjg0LXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfcHJvdG5vbmVfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02OTgtfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo2OTk6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzAwLXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfcHJvdG5vbmVfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjcwMTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTcwMi1cXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03MTU9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9zd2FwX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03MzEtXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjczMjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTczMy1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03NDk9c3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03NjctfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3Njg6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzY5LXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9NzcwPXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfbGVhZl9zb2Z0X2RpcnR5X3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3NzE6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03NzItXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTAxPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTkwMy1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTA0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTA1LXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTU1PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NTYtI2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjk1NzojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NTgtc3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTk1OT1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX3RocF90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTYwOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTYxLVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTk4Nz1zdGF0aWMgdm9pZCBfX2luaXQgZGVzdHJveV9hcmdzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTg5LVxcdC8qIEZyZWUgKGh1Z2UpIHBhZ2UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTkwOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTkxLVxcdCAgICBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05OTgtXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjk5OTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTEwMDAtXFx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9MTE0Mz1zdGF0aWMgaW50IF9faW5pdCBpbml0X2FyZ3Moc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjM5LVxcdCAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxMjQwOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI0MS1cXHQgICAgaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSgpKSB7XFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI1MC1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6MTI1MTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTEyNTItXFx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7XFxuLS1cXG5tbS9maWxlbWFwLmM9MzMyOT1zdGF0aWMgc3RydWN0IGZpbGUgKmRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9maWxlbWFwLmMtMzM0MS1cXHQvKiBVc2UgdGhlIHJlYWRhaGVhZCBjb2RlLCBldmVuIGlmIHJlYWRhaGVhZCBpcyBkaXNhYmxlZCAqL1xcbm1tL2ZpbGVtYXAuYzozMzQyOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgKHZtX2ZsYWdzIFxcdTAwMjYgVk1fSFVHRVBBR0UpKSB7XFxubW0vZmlsZW1hcC5jLTMzNDMtXFx0XFx0LypcXG4tLVxcbm1tL2ZpbGVtYXAuYz00NjE4PXN0YXRpYyB2b2lkIGZpbGVtYXBfY2FjaGVzdGF0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vZmlsZW1hcC5jLTQ2NjUtXFxubW0vZmlsZW1hcC5jOjQ2NjY6I2lmZGVmIENPTkZJR19TV0FQIC8qIGltcGxpZXMgQ09ORklHX01NVSAqL1xcbm1tL2ZpbGVtYXAuYy00NjY3LVxcdFxcdFxcdGlmIChzaG1lbV9tYXBwaW5nKG1hcHBpbmcpKSB7XFxuLS1cXG5tbS9mb2xpby5jPTExMDc9dm9pZCBmb2xpb19iYXRjaF9yZW1vdmVfZXhjZXB0aW9uYWxzKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxcbi0tXFxubW0vZm9saW8uYy0xMTE4LVxcbm1tL2ZvbGlvLmM6MTExOTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZm9saW8uYy0xMTIwLXN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLFxcbi0tXFxubW0vZ3VwLmM9NzAxPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZm9sbG93X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vZ3VwLmMtNzM0LVxcbm1tL2d1cC5jOjczNTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vZ3VwLmMtNzM2LVxcdGlmIChwbWRfdHJhbnNfaHVnZShwbWR2YWwpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IEZPTExfVE9VQ0gpKVxcbm1tL2d1cC5jLTczNy1cXHRcXHR0b3VjaF9wbWQodm1hLCBhZGRyLCBwbWQsIGZsYWdzIFxcdTAwMjYgRk9MTF9XUklURSk7XFxubW0vZ3VwLmM6NzM4OiNlbmRpZlxcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2d1cC5jLTczOS1cXG4tLVxcbm1tL2htbS5jPTE4OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaG1tX3Bmbl9mbGFnc19vcmRlcih1bnNpZ25lZCBsb25nIG9yZGVyKVxcbi0tXFxubW0vaG1tLmMtMTkyLVxcbm1tL2htbS5jOjE5MzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vaG1tLmMtMTk0LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwbWRfdG9faG1tX3Bmbl9mbGFncyhzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcXG4tLVxcbm1tL2htbS5jPTIwND1zdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vaG1tLmMtMjI3LX1cXG5tbS9obW0uYzoyMjg6I2Vsc2UgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vaG1tLmMtMjI5LS8qIHN0dWIgdG8gYWxsb3cgdGhlIGNvZGUgYmVsb3cgdG8gY29tcGlsZSAqL1xcbm1tL2htbS5jPTIzMD1pbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vaG1tLmMtMjMxLVxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIGhtbV9wZm5zW10sIHBtZF90IHBtZCk7XFxubW0vaG1tLmM6MjMyOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9obW0uYy0yMzMtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTYxPXVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgX19yZWFkX21vc3RseSA9XFxubW0vaHVnZV9tZW1vcnkuYzo2MjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL2h1Z2VfbWVtb3J5LmMtNjMtXFx0KDFcXHUwMDNjXFx1MDAzY1RSQU5TUEFSRU5UX0hVR0VQQUdFX0ZMQUcpfFxcbm1tL2h1Z2VfbWVtb3J5LmMtNjQtI2VuZGlmXFxubW0vaHVnZV9tZW1vcnkuYzo2NTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9odWdlX21lbW9yeS5jLTY2LVxcdCgxXFx1MDAzY1xcdTAwM2NUUkFOU1BBUkVOVF9IVUdFUEFHRV9SRVFfTUFEVl9GTEFHKXxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzY0OT1zdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM3NTEtXFx0XFx0XFx0Zm9saW9fc2V0X2lkbGUobmV3X2ZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jOjM3NTI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzc1My1cXHRcXHRuZXdfZm9saW8tXFx1MDAzZW1lbWNnX2RhdGEgPSBmb2xpby1cXHUwMDNlbWVtY2dfZGF0YTtcXG4tLVxcbm1tL2h3cG9pc29uLWluamVjdC5jPTQ1PXN0YXRpYyBpbnQgaHdwb2lzb25fZmlsdGVyX2ZsYWdzKHN0cnVjdCBwYWdlICpwKVxcbi0tXFxubW0vaHdwb2lzb24taW5qZWN0LmMtNjYtICovXFxubW0vaHdwb2lzb24taW5qZWN0LmM6Njc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2h3cG9pc29uLWluamVjdC5jLTY4LXN0YXRpYyB1NjQgaHdwb2lzb25fZmlsdGVyX21lbWNnO1xcbi0tXFxubW0vaHdwb2lzb24taW5qZWN0LmM9MTYyPXN0YXRpYyBpbnQgX19pbml0IHBmbl9pbmplY3RfaW5pdCh2b2lkKVxcbi0tXFxubW0vaHdwb2lzb24taW5qZWN0LmMtMTkxLVxcbm1tL2h3cG9pc29uLWluamVjdC5jOjE5MjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vaHdwb2lzb24taW5qZWN0LmMtMTkzLVxcdGRlYnVnZnNfY3JlYXRlX3U2NChcXFwiY29ycnVwdC1maWx0ZXItbWVtY2dcXFwiLCAwNjAwLCBod3BvaXNvbl9kaXIsXFxuLS1cXG5tbS9rc20uYz0yNTI3PXN0YXRpYyBpbnQga3NtX25leHRfcGFnZV9wbWRfZW50cnkocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9rc20uYy0yNTQ3LVxcbm1tL2tzbS5jOjI1NDg6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBwbWRfbGVhZihwbWQpKSB7XFxubW0va3NtLmMtMjU0OS1cXHRcXHRwdGwgPSBwbWRfbG9jayhtbSwgcG1kcCk7XFxuLS1cXG5tbS9rc20uYz0zMTM3PXN0cnVjdCBmb2xpbyAqa3NtX21pZ2h0X25lZWRfdG9fY29weShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0va3NtLmMtMzE3Ni1cXHRcXHRfX2ZvbGlvX3NldF9sb2NrZWQobmV3X2ZvbGlvKTtcXG5tbS9rc20uYzozMTc3OiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL2tzbS5jLTMxNzgtXFx0XFx0Y291bnRfdm1fZXZlbnQoS1NNX1NXUElOX0NPUFkpO1xcbi0tXFxubW0vbGlzdF9scnUuYz0yOT1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsIGJvb2wgaXJxX29mZixcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMzktXFxubW0vbGlzdF9scnUuYzo0MDojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy00MS1zdGF0aWMgTElTVF9IRUFEKG1lbWNnX2xpc3RfbHJ1cyk7XFxuLS1cXG5tbS9saXN0X2xydS5jPTE0MT1sb2NrX2xpc3RfbHJ1X29mX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbi0tXFxubW0vbGlzdF9scnUuYy0xNTAtfVxcbm1tL2xpc3RfbHJ1LmM6MTUxOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG5tbS9saXN0X2xydS5jLTE1Mi1cXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NDEzPXVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbi0tXFxubW0vbGlzdF9scnUuYy00MjEtXFxubW0vbGlzdF9scnUuYzo0MjI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2xpc3RfbHJ1LmMtNDIzLVxcdGlmICgqbnJfdG9fd2FsayBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSkge1xcbi0tXFxubW0vbGlzdF9scnUuYz00NTE9c3RhdGljIHZvaWQgaW5pdF9vbmVfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxcbi0tXFxubW0vbGlzdF9scnUuYy00NjEtXFxubW0vbGlzdF9scnUuYzo0NjI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2xpc3RfbHJ1LmMtNDYzLXN0YXRpYyBzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1lbWNnX2luaXRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBnZnBfdCBnZnApXFxuLS1cXG5tbS9saXN0X2xydS5jPTY1OT1zdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbi0tXFxubW0vbGlzdF9scnUuYy02NjEtfVxcbm1tL2xpc3RfbHJ1LmM6NjYyOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG5tbS9saXN0X2xydS5jLTY2My1cXG5tbS9saXN0X2xydS5jPTY2ND1pbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbi0tXFxubW0vbGlzdF9scnUuYy02NjctXFxubW0vbGlzdF9scnUuYzo2Njg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2xpc3RfbHJ1LmMtNjY5LVxcdGlmIChzaHJpbmtlcilcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NjkyPXZvaWQgbGlzdF9scnVfZGVzdHJveShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNzAzLVxcbm1tL2xpc3RfbHJ1LmM6NzA0OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9saXN0X2xydS5jLTcwNS1cXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gLTE7XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxPXN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE5NC1cXG5tbS9tYWR2aXNlLmM6MTk1OiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21hZHZpc2UuYy0xOTYtc3RhdGljIGludCBzd2FwaW5fd2Fsa19wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL21hZHZpc2UuYz0yNDM9c3RhdGljIHZvaWQgc2htZW1fc3dhcGluX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWFkdmlzZS5jLTI3OC19XFxubW0vbWFkdmlzZS5jOjI3OTojZW5kaWZcXHRcXHQvKiBDT05GSUdfU1dBUCAqL1xcbm1tL21hZHZpc2UuYy0yODAtXFxuLS1cXG5tbS9tYWR2aXNlLmM9MjkwPXN0YXRpYyBsb25nIG1hZHZpc2Vfd2lsbG5lZWQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMjk4LVxcbm1tL21hZHZpc2UuYzoyOTk6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWFkdmlzZS5jLTMwMC1cXHRpZiAoIWZpbGUpIHtcXG4tLVxcbm1tL21hZHZpc2UuYz0zNjI9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4tLVxcbm1tL21hZHZpc2UuYy0zODQtXFxubW0vbWFkdmlzZS5jOjM4NTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWFkdmlzZS5jLTM4Ni1cXHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZCkpIHtcXG4tLVxcbm1tL21hZHZpc2UuYz0xNTI3PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE1NDctI2VuZGlmXFxubW0vbWFkdmlzZS5jOjE1NDg6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21hZHZpc2UuYy0xNTQ5LVxcdGNhc2UgTUFEVl9IVUdFUEFHRTpcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz01OTY9dm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtNjA1LVxcbm1tL21lbWNvbnRyb2wtdjEuYzo2MDY6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC12MS5jLTYwNy0vKipcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xNDcyPXZvaWQgbWVtY2cxX29vbV9maW5pc2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGxvY2tlZClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNDc5LSAqIGNncm91cCB2MSB1c2Vyc3BhY2Ugdm1wcmVzc3VyZSBpbnRlcmZhY2UgKG1lbW9yeS5wcmVzc3VyZV9sZXZlbCAvXFxubW0vbWVtY29udHJvbC12MS5jOjE0ODA6ICogY2dyb3VwLmV2ZW50X2NvbnRyb2wpLiBLZXB0IGhlcmUgc28gdjItb25seSBrZXJuZWxzIChDT05GSUdfTUVNQ0dfVjE9bilcXG5tbS9tZW1jb250cm9sLXYxLmMtMTQ4MS0gKiBkcm9wIHRoZSB3aG9sZSBldmVudGZkIGFjY3VtdWxhdG9yLCBpdHMgd29yayBpdGVtLCBhbmQgdGhlIHBlci1tZW1jZ1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIxNzU9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZzFfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMTc3LVxcdE5SX0FOT05fTUFQUEVELFxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMTc4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9tZW1jb250cm9sLXYxLmMtMjE3OS1cXHROUl9BTk9OX1RIUFMsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjE4Ni1cXHRXT1JLSU5HU0VUX1JFRkFVTFRfRklMRSxcXG5tbS9tZW1jb250cm9sLXYxLmM6MjE4NzojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLXYxLmMtMjE4OC1cXHRNRU1DR19TV0FQLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIxOTM9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1lbWNnMV9zdGF0X25hbWVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjE5NS1cXHRcXFwicnNzXFxcIixcXG5tbS9tZW1jb250cm9sLXYxLmM6MjE5NjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWVtY29udHJvbC12MS5jLTIxOTctXFx0XFxcInJzc19odWdlXFxcIixcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMjA0LVxcdFxcXCJ3b3JraW5nc2V0X3JlZmF1bHRfZmlsZVxcXCIsXFxubW0vbWVtY29udHJvbC12MS5jOjIyMDU6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC12MS5jLTIyMDYtXFx0XFxcInN3YXBcXFwiLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTI1PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmgtMjgtLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqL1xcbm1tL21lbWNvbnRyb2wtdjEuaDoyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC12MS5oLTMwLVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTkyPWV4dGVybiBzdHJ1Y3QgY2Z0eXBlIG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzW107XFxubW0vbWVtY29udHJvbC12MS5oLTkzLVxcbm1tL21lbWNvbnRyb2wtdjEuaDo5NDojZWxzZVxcdC8qIENPTkZJR19NRU1DR19WMSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuaC05NS1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0xMjY9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV91bmNoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcykge31cXG5tbS9tZW1jb250cm9sLXYxLmgtMTI3LVxcbm1tL21lbWNvbnRyb2wtdjEuaDoxMjg6I2VuZGlmXFx0LyogQ09ORklHX01FTUNHX1YxICovXFxubW0vbWVtY29udHJvbC12MS5oLTEyOS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yMTU9c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIzNC1cXG5tbS9tZW1jb250cm9sLmM6MjM1OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMjM2LXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTM3OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTQwNi1cXHROUl9TRUNPTkRBUllfUEFHRVRBQkxFLFxcbm1tL21lbWNvbnRyb2wuYzo0MDc6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC5jLTQwOC1cXHROUl9TV0FQQ0FDSEUsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTUwPXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3Mi1cXG5tbS9tZW1jb250cm9sLmM6NTczOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNTc0LXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTk4PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xcbm1tL21lbWNvbnRyb2wuYzo1OTk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy02MDAtXFx0UEdQR0lOLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTYxMC1cXHRQR0xBWllGUkVFRCxcXG5tbS9tZW1jb250cm9sLmM6NjExOiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wuYy02MTItXFx0U1dQSU5fWkVSTyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MTktI2VuZGlmXFxubW0vbWVtY29udHJvbC5jOjYyMDojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWVtY29udHJvbC5jLTYyMS1cXHRUSFBfRkFVTFRfQUxMT0MsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9ODMyPXN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04NDctXFxubW0vbWVtY29udHJvbC5jOjg0ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTg0OS0vKlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTkxNj12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05MjgtXFxubW0vbWVtY29udHJvbC5jOjkyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTkzMC0vKiBpZHggY2FuIGJlIG9mIHR5cGUgZW51bSBtZW1jZ19zdGF0X2l0ZW0gb3Igbm9kZV9zdGF0X2l0ZW0uICovXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTEwND1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTExLVxcbm1tL21lbWNvbnRyb2wuYzoxMTEyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTExMy11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNTkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTYwOS1cXHR7IFxcXCJmaWxlX3dyaXRlYmFja1xcXCIsXFx0XFx0TlJfV1JJVEVCQUNLXFx0XFx0XFx0fSxcXG5tbS9tZW1jb250cm9sLmM6MTYxMDojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLmMtMTYxMS1cXHR7IFxcXCJzd2FwY2FjaGVkXFxcIixcXHRcXHRcXHROUl9TV0FQQ0FDSEVcXHRcXHRcXHR9LFxcbm1tL21lbWNvbnRyb2wuYy0xNjEyLSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzoxNjEzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9tZW1jb250cm9sLmMtMTYxNC1cXHR7IFxcXCJhbm9uX3RocFxcXCIsXFx0XFx0XFx0TlJfQU5PTl9USFBTXFx0XFx0XFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzEyPXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzE3LVxcbm1tL21lbWNvbnRyb2wuYzoxNzE4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTcxOS11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTczOD1zdGF0aWMgdm9pZCBtZW1jZ19zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE3ODQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobWVtY2dfdm1fZXZlbnRfc3RhdCk7IGkrKykge1xcbm1tL21lbWNvbnRyb2wuYzoxNzg1OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTc4Ni1cXHRcXHRpZiAobWVtY2dfdm1fZXZlbnRfc3RhdFtpXSA9PSBQR1BHSU4gfHxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xODM2PXZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fbWVtaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTg1Ny1cXHRcXHRcXHRhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcXG5tbS9tZW1jb250cm9sLmM6MTg1ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTE4NTktXFx0ZWxzZSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mjg2Mz1zdGF0aWMgdm9pZCBjb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODc1LVxcbm1tL21lbWNvbnRyb2wuYzoyODc2OiNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5tbS9tZW1jb250cm9sLmMtMjg3Ny1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiX25taV9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMDUwPV9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqY3VycmVudF9vYmpfY2dyb3VwKHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzA1NS1cXG5tbS9tZW1jb250cm9sLmM6MzA1NjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNQ0dfTk1JX1VOU0FGRSkgXFx1MDAyNlxcdTAwMjYgaW5fbm1pKCkpXFxubW0vbWVtY29udHJvbC5jLTMwNTctXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzA5Nj1zdHJ1Y3Qgb2JqX2Nncm91cCAqZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxMDYtXFxubW0vbWVtY29udHJvbC5jOjMxMDc6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbm1tL21lbWNvbnRyb2wuYy0zMTA4LXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2ttZW1fbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQyMTg9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDIzOS1cXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIFxcdTAwMjZwYXJlbnQtXFx1MDAzZXN3YXAsIGZhbHNlKTtcXG5tbS9tZW1jb250cm9sLmM6NDI0MDojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTQyNDEtXFx0XFx0V1JJVEVfT05DRShtZW1jZy1cXHUwMDNlc3dhcHBpbmVzcywgbWVtX2Nncm91cF9zd2FwcGluZXNzKHBhcmVudCkpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTQyNTMtXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBOVUxMLCBmYWxzZSk7XFxubW0vbWVtY29udHJvbC5jOjQyNTQ6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy00MjU1LVxcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNla21lbSwgTlVMTCwgZmFsc2UpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ0MjE9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NDMxLSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo0NDMyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNDQzMy1cXHRwYWdlX2NvdW50ZXJfc2V0X21heChcXHUwMDI2bWVtY2ctXFx1MDAzZWttZW0sIFBBR0VfQ09VTlRFUl9NQVgpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ0NjE9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ0OTYtXFxubW0vbWVtY29udHJvbC5jOjQ0OTc6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbm1tL21lbWNvbnRyb2wuYy00NDk4LXN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTE2MD1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE3MS1cXHQuZGZsX2NmdHlwZXMgPSBtZW1vcnlfZmlsZXMsXFxubW0vbWVtY29udHJvbC5jOjUxNzI6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy01MTczLVxcdC5sZWdhY3lfY2Z0eXBlcyA9IG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU2ODc9aW50IF9faW5pdCBtZW1fY2dyb3VwX2luaXQodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzIyLVxcbm1tL21lbWNvbnRyb2wuYzo1NzIzOiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wuYy01NzI0LS8qKlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTYxNzI9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MTc3LVxcdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBzd2FwX2ZpbGVzKSk7XFxubW0vbWVtY29udHJvbC5jOjYxNzg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy02MTc5LVxcdFdBUk5fT04oY2dyb3VwX2FkZF9sZWdhY3lfY2Z0eXBlcyhcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBtZW1zd19maWxlcykpO1xcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ0OjM4LjA4NTkzMzgzMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MjE3NTIwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlRyYWNpbmcgdGhlIFNvdXJjZSBvZiBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgZnVuY3Rpb24gaXMgZGVmaW5lZC4gSXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIGNvbnRleHQsIGFuZCBJIGNhbid0IGp1c3QgcmVseSBvbiBtZW1vcnkuIFRpbWUgZm9yIHRoZSB0cmllZC1hbmQtdHJ1ZSBtZXRob2Q6IGxldCdzIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBiZXN0IGFwcHJvYWNoIGhlcmUgaXMgZ29pbmcgdG8gYmUgYSBxdWljayBgZ3JlcGAuIEknbGwgZmlyZSB0aGF0IG9mZiBhbmQgc2VlIHdoYXQgaXQgdHVybnMgdXAuIEhvcGVmdWxseSwgaXQnbGwgcGlucG9pbnQgdGhlIGRlZmluaXRpb24gcXVpY2tseSBzbyBJIGNhbiBzdGFydCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzU2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDQ6MzkuODA3Njg5NDE3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTczMDEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MTMwNz1zdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTEzMzctXFx0ICovXFxubW0vaHVnZV9tZW1vcnkuYzoxMzM4OlxcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcXG5tbS9odWdlX21lbW9yeS5jLTEzMzktXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjUxOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfaGlnaF9kZWxheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjU1NC0gKi9cXG5tbS9tZW1jb250cm9sLmM6MjU1NTp2b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxcbm1tL21lbWNvbnRyb2wuYy0yNTU2LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNjQ1PXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI4NDktXFx0ICAgIGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcXG5tbS9tZW1jb250cm9sLmM6Mjg1MDpcXHRcXHRfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfbWFzayk7XFxubW0vbWVtY29udHJvbC5jLTI4NTEtXFx0cmV0dXJuIDA7XFxuLS1cXG5tbS9tZW1vcnkuYz00ODgxPXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTI3Ni1cXHQgKi9cXG5tbS9tZW1vcnkuYzo1Mjc3OlxcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcXG5tbS9tZW1vcnkuYy01Mjc4LVxcdHJldHVybiByZXQ7XFxuLS1cXG5tbS9tZW1vcnkuYz01MzA5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01MzczLVxcdFxcdC8qIFNhbWUgcmVhc29uaW5nIGFzIGluIHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpLiAqL1xcbm1tL21lbW9yeS5jOjUzNzQ6XFx0XFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xcbm1tL21lbW9yeS5jLTUzNzUtXFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMSBcXHUwMDI2XFx1MDAyNiBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChmb2xpbykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDQ6MzkuODU5NDI4MDk1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjYzMDk0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBDb250cm9sIENvZGUqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBob3cgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgaXMgZGVmaW5lZCBhbmQgdXNlZC4gVG8gcmVhbGx5IGdyYXNwIGl0cyBtZWNoYW5pY3MsIEknbSBnb2luZyB0byBqdW1wIGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBzdGFydCBieSBuYXZpZ2F0aW5nIHRvIHRoZSBoZWFkZXIgZmlsZSwgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNydWNpYWwgZGVjbGFyYXRpb24gYW5kIGFueSByZWxldmFudCBzdXBwb3J0aW5nIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyBpdHMgc2lnbmF0dXJlIGFuZCB3aGF0IHN0cnVjdHVyZXMgaXQgaW50ZXJhY3RzIHdpdGggaXMga2V5IHRvIGRlY2lwaGVyaW5nIHRoZSBsYXJnZXIgY29udGV4dCBvZiBtZW1vcnkgY2dyb3VwIG1hbmFnZW1lbnQuIEknbSBob3BpbmcgdGhlIGNvbW1lbnRzIGFyZSBoZWxwZnVsIHRvbywgdG8gc2F2ZSBzb21lIGRlYnVnZ2luZyB0aW1lIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUxMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ0OjQxLjkyNTc0MjA3N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5NDc0NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05MDI9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkxMC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5MTE6dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTEyLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjkxMzpzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkxNC17XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTE1LVxcdGlmICh1bmxpa2VseShjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2gpKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjkxNjpcXHRcXHRfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTE3LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEzNTQ9bWVtX2Nncm91cF9wcmludF9vb21fbWVtaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzU3LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEzNTg6c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzU5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvcmVzdW1lX3VzZXJfbW9kZS5oPTQxPXN0YXRpYyBpbmxpbmUgdm9pZCByZXN1bWVfdXNlcl9tb2RlX3dvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Jlc3VtZV91c2VyX21vZGUuaC01OC1cXG5pbmNsdWRlL2xpbnV4L3Jlc3VtZV91c2VyX21vZGUuaDo1OTpcXHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XFxuaW5jbHVkZS9saW51eC9yZXN1bWVfdXNlcl9tb2RlLmgtNjAtXFx0YmxrY2dfbWF5YmVfdGhyb3R0bGVfY3VycmVudCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NDo0Mi4wNjUyMjM4NzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1NDY5MjQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gcG9pbnRlZCB0byBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgIOKAkyBhIGZ1bmN0aW9uIG5hbWUgdGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHJvbGUgaW4gaGFuZGxpbmcgbWVtb3J5IGNncm91cCBvdmVyLWhpZ2ggc2NlbmFyaW9zLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBwaW5wb2ludCBpdHMgb3JpZ2luLiBUaGUgdGV4dCBjb25maXJtcyBpdCdzIGRlZmluZWQgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBFeGNlbGxlbnQsIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuXG5cbk5vdywgbXkgbmV4dCBtb3ZlIGlzIG9idmlvdXM6IEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoYXQgc291cmNlIGZpbGUgYW5kICpyZWFkKiB0aGUgY29kZSBvZiBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgbG9naWMsIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGlzIGZ1bmN0aW9uPyBXaGF0IGFjdGlvbnMgZG9lcyBpdCBwZXJmb3JtIHRvIGFkZHJlc3MgdGhlIG92ZXItaGlnaCBzaXR1YXRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIG9mIGNvbmNlcm4gdG8gd2F0Y2ggZm9yPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOiBob3cgZG9lcyBpdCBkZWFsIHdpdGggT09NPyBIb3cgZG9lcyBpdCBoYW5kbGUgcmVjbGFpbSwgb3IgcGVyaGFwcyBldmVuIGtpbGwgcHJvY2Vzc2VzPyBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHVuZGVyc3RhbmRpbmcgYmVnaW5zLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjA3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDQ6NDQuMzE5OTIwNDg1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU0MDpcXHRcXHQgKiBGYWN0b3IgaW4gdGhlIHRhc2sncyBvd24gY29udHJpYnV0aW9uIHRvIHRoZSBvdmVyYWdlLCBzdWNoIHRoYXQgZm91clxcbjI1NDE6XFx0XFx0ICogTi1zaXplZCBhbGxvY2F0aW9ucyBhcmUgdGhyb3R0bGVkIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgYXMgb25lXFxuMjU0MjpcXHRcXHQgKiA0Ti1zaXplZCBhbGxvY2F0aW9uLlxcbjI1NDM6XFx0XFx0ICpcXG4yNTQ0OlxcdFxcdCAqIE1FTUNHX0NIQVJHRV9CQVRDSCBwYWdlcyBpcyBub21pbmFsLCBzbyB3b3JrIG91dCBob3cgbXVjaCBzbWFsbGVyIG9yXFxuMjU0NTpcXHRcXHQgKiBsYXJnZXIgdGhlIGN1cnJlbnQgY2hhcmdlIHBhdGNoIGlzIHRoYW4gdGhhdC5cXG4yNTQ2OlxcdFxcdCAqL1xcbjI1NDc6XFx0XFx0cmV0dXJuIHBlbmFsdHlfamlmZmllcyAqIG5yX3BhZ2VzIC8gTUVNQ0dfQ0hBUkdFX0JBVENIO1xcbjI1NDg6XFx0fVxcbjI1NDk6XFx0XFxuMjU1MDpcXHQvKlxcbjI1NTE6XFx0ICogUmVjbGFpbXMgbWVtb3J5IG92ZXIgdGhlIGhpZ2ggbGltaXQuIENhbGxlZCBkaXJlY3RseSBmcm9tXFxuMjU1MjpcXHQgKiB0cnlfY2hhcmdlKCkgKGNvbnRleHQgcGVybWl0dGluZyksIGFzIHdlbGwgYXMgZnJvbSB0aGUgdXNlcmxhbmRcXG4yNTUzOlxcdCAqIHJldHVybiBwYXRoIHdoZXJlIHJlY2xhaW0gaXMgYWx3YXlzIGFibGUgdG8gYmxvY2suXFxuMjU1NDpcXHQgKi9cXG4yNTU1OlxcdHZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuMjU1NjpcXHR7XFxuMjU1NzpcXHRcXHR1bnNpZ25lZCBsb25nIHBlbmFsdHlfamlmZmllcztcXG4yNTU4OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xcbjI1NTk6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7XFxuMjU2MDpcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2g7XFxuMjU2MTpcXHRcXHRpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxuMjU2MjpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuMjU2MzpcXHRcXHRib29sIGluX3JldHJ5ID0gZmFsc2U7XFxuMjU2NDpcXHRcXG4yNTY1OlxcdFxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShjdXJyZW50LVxcdTAwM2VtbSk7XFxuMjU2NjpcXHRcXHRjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2ggPSAwO1xcbjI1Njc6XFx0XFxuMjU2ODpcXHRyZXRyeV9yZWNsYWltOlxcbjI1Njk6XFx0XFx0LypcXG4yNTcwOlxcdFxcdCAqIEJhaWwgaWYgdGhlIHRhc2sgaXMgYWxyZWFkeSBleGl0aW5nLiBVbmxpa2UgbWVtb3J5Lm1heCxcXG4yNTcxOlxcdFxcdCAqIG1lbW9yeS5oaWdoIGVuZm9yY2VtZW50IGlzbid0IGFzIHN0cmljdCwgYW5kIHRoZXJlIGlzIG5vXFxuMjU3MjpcXHRcXHQgKiBPT00ga2lsbGVyIGludm9sdmVkLCB3aGljaCBtZWFucyB0aGUgZXhjZXNzIGNvdWxkIGFscmVhZHlcXG4yNTczOlxcdFxcdCAqIGJlIG11Y2ggYmlnZ2VyIChhbmQgc3RpbGwgZ3Jvd2luZykgdGhhbiBpdCBjb3VsZCBmb3JcXG4yNTc0OlxcdFxcdCAqIG1lbW9yeS5tYXg7IHRoZSBkeWluZyB0YXNrIGNvdWxkIGdldCBzdHVjayBpbiBmcnVpdGxlc3NcXG4yNTc1OlxcdFxcdCAqIHJlY2xhaW0gZm9yIGEgbG9uZyB0aW1lLCB3aGljaCBpc24ndCBkZXNpcmFibGUuXFxuMjU3NjpcXHRcXHQgKi9cXG4yNTc3OlxcdFxcdGlmICh0YXNrX2lzX2R5aW5nKCkpXFxuMjU3ODpcXHRcXHRcXHRnb3RvIG91dDtcXG4yNTc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NDo0NC4zMjAxNTQzNDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njk1NzkzNjI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSW1wbGVtZW50YXRpb24gb2YgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgIGhhcyBiZWVuIGludHJvZHVjZWQgaW50byBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCwgYGFsbG9jX2Fub25fZm9saW9gLCBhbmQgYGRvX3N3YXBfcGFnZWAuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0J3MgYWxtb3N0IGNlcnRhaW5seSByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZywgbGlrZWx5IGRlYWxpbmcgd2l0aCBvdmVyLWhpZ2ggbWVtb3J5IHVzYWdlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQuIFNvLCBsZXQncyBzdGFydCBieSBmaWd1cmluZyBvdXQgdGhlIGNhbGxpbmcgY29udGV4dHMgZm9yIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgIGFuZCBgYWxsb2NfYW5vbl9mb2xpb2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uIGFuZCBob3cgdGhpcyBuZXcgY29kZSBpbnRlZ3JhdGVzIGludG8gdGhlIGV4aXN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBOVU1BIGFuZCBvdGhlciByZWxhdGVkIHN1YnN5c3RlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjA2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NDo1MS4yNzgwOTM2OThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTEzNDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0xMzA1PUVYUE9SVF9TWU1CT0xfR1BMKHRocF9nZXRfdW5tYXBwZWRfYXJlYSk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMzA2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTMwNzpzdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZV9tZW1vcnkuYy0xMzA4LVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTM5MD1zdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMzk3LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTM5ODpcXHRmb2xpbyA9IHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCh2bWEsIHZtZi1cXHUwMDNlYWRkcmVzcyk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMzk5LVxcdGlmICh1bmxpa2VseSghZm9saW8pKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yMTAxPXN0YXRpYyB2bV9mYXVsdF90IGRvX2h1Z2VfemVyb193cF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIxMDgtXFxubW0vaHVnZV9tZW1vcnkuYzoyMTA5OlxcdGZvbGlvID0gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHZtYSwgdm1mLVxcdTAwM2VhZGRyZXNzKTtcXG5tbS9odWdlX21lbW9yeS5jLTIxMTAtXFx0aWYgKHVubGlrZWx5KCFmb2xpbykpXFxuLS1cXG5tbS9tZW1vcnkuYz01MzA5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01MzcyLVxcdFxcdH1cXG5tbS9tZW1vcnkuYzo1MzczOlxcdFxcdC8qIFNhbWUgcmVhc29uaW5nIGFzIGluIHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpLiAqL1xcbm1tL21lbW9yeS5jLTUzNzQtXFx0XFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NDo1MS4zMzEyMTMxODZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYwNzU4NzQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGFsbG9jX2Fub25fZm9saW9gIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGNhbGxlcnMgb2YgYGFsbG9jX2Fub25fZm9saW9gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSdzIHRoaXMgZnVuY3Rpb24gZ2V0dGluZyB1dGlsaXplZD9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMsIHRoZSB2YXJpb3VzIHN1YnN5c3RlbXMgdGhhdCBkZXBlbmQgb24gaXQuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgYnJvYWQgYXBwcm9hY2guIEknbGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgLSBgZ2l0IGdyZXBgLCBtYXliZSBzb21lIHN0YXRpYyBhbmFseXNpcywgdG8gaWRlbnRpZnkgdGhlIHNvdXJjZSBjb2RlIGxvY2F0aW9ucy5cblxuVGhlbiwgdGhlIGdvYWwgc2hpZnRzIHRvIHVuZGVyc3RhbmRpbmcgd2h5IHRoZXNlIGNhbGxlcnMgdXNlIGBhbGxvY19hbm9uX2ZvbGlvYCBzcGVjaWZpY2FsbHkuIEFyZSB0aGV5IGRlYWxpbmcgd2l0aCBwYWdlIGFsbG9jYXRpb24gZm9yIGFub255bW91cyBtYXBwaW5ncywgaHVnZSBwYWdlcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSB0eXBlIG9mIGNhbGxlciBpcyBnb2luZyB0byBoZWF2aWx5IGluZmx1ZW5jZSB0aGUgdXNhZ2UgcGF0dGVybnMuIEkgYW50aWNpcGF0ZSBzZWVpbmcgdXNhZ2UgaW4gYG1tYXBgIGltcGxlbWVudGF0aW9ucywgcG90ZW50aWFsbHkgd2l0aGluIHRoZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgaXRzZWxmLCBwZXJoYXBzIHJlbGF0ZWQgdG8gZGVtYW5kIHBhZ2luZyBvciBDT1cgb3BlcmF0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgbWVtb3J5IHByb3RlY3Rpb24gZmxhZ3MgYW5kIGFsbG9jYXRpb24gY29uc3RyYWludHMgcGFzc2VkIGluLCB3aGljaCBjYW4gcmV2ZWFsIGNydWNpYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGludGVuZGVkIG1lbW9yeSBzZW1hbnRpY3MuIEknbSBhbHNvIHJlYWR5IHRvIHNlZSBzb21lIG1vcmUgZWRnZSBjYXNlIHNjZW5hcmlvcy5cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgYSBkZWVwIGRpdmUgdG8gZXhhbWluZSBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIG1lbW9yeSBmcmFnbWVudGF0aW9uIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNhbGxlcnMuIE1heWJlIHRoZXJlIGFyZSBzb21lIGNvbXBsZXggbG9jayBpbnRlcmFjdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGV2YWx1YXRlZCBhbmQgY2hlY2tlZC4gSSB3aWxsIGJlIGxvb2tpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgb3Bwb3J0dW5pdGllcyB0byBvcHRpbWl6ZSBhbmQgbWFrZSB0aGUgbWVtb3J5IGhhbmRsaW5nIG1vcmUgZWZmaWNpZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk4MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ0OjUzLjkzODgwMzg5NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA1MzQwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfYW5vbl9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0xMzA1PUVYUE9SVF9TWU1CT0xfR1BMKHRocF9nZXRfdW5tYXBwZWRfYXJlYSk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMzA2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTMwNzpzdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZV9tZW1vcnkuYy0xMzA4LVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTM5MD1zdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMzk3LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTM5ODpcXHRmb2xpbyA9IHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCh2bWEsIHZtZi1cXHUwMDNlYWRkcmVzcyk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMzk5LVxcdGlmICh1bmxpa2VseSghZm9saW8pKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yMTAxPXN0YXRpYyB2bV9mYXVsdF90IGRvX2h1Z2VfemVyb193cF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIxMDgtXFxubW0vaHVnZV9tZW1vcnkuYzoyMTA5OlxcdGZvbGlvID0gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHZtYSwgdm1mLVxcdTAwM2VhZGRyZXNzKTtcXG5tbS9odWdlX21lbW9yeS5jLTIxMTAtXFx0aWYgKHVubGlrZWx5KCFmb2xpbykpXFxuLS1cXG5tbS9tZW1vcnkuYz01Mjk3PXN0YXRpYyBib29sIHB0ZV9yYW5nZV9ub25lKHB0ZV90ICpwdGUsIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbW9yeS5jLTUzMDgtXFxubW0vbWVtb3J5LmM6NTMwOTpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19hbm9uX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL21lbW9yeS5jLTUzMTAte1xcbi0tXFxubW0vbWVtb3J5LmMtNTM3Mi1cXHRcXHR9XFxubW0vbWVtb3J5LmM6NTM3MzpcXHRcXHQvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi9cXG5tbS9tZW1vcnkuYy01Mzc0LVxcdFxcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcXG4tLVxcbm1tL21lbW9yeS5jPTU0Mzc9c3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01NDkxLVxcdC8qIFJldHVybnMgTlVMTCBvbiBPT00gb3IgRVJSX1BUUigtRUFHQUlOKSBpZiB3ZSBtdXN0IHJldHJ5IHRoZSBmYXVsdCAqL1xcbm1tL21lbW9yeS5jOjU0OTI6XFx0Zm9saW8gPSBhbGxvY19hbm9uX2ZvbGlvKHZtZik7XFxubW0vbWVtb3J5LmMtNTQ5My1cXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDQ6NTMuOTg5MzQ0MTUzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4MTI2NDUzMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGtleSBhcmVhczogYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBhbmQgdGhlbiBgZG9fc3dhcF9wYWdlYCBhbmQgYGFsbG9jX2Fub25fZm9saW9gIGluIGBtbS9tZW1vcnkuY2AuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoYXQgYXJlIHRoZSByZWxldmFudCBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkIG9yIGRpcmVjdGx5IGNhbGwgdGhlc2UgZnVuY3Rpb25zLlxuXG5CZWZvcmUgSSBnbyB0b28gZmFyIGRvd24gdGhhdCByYWJiaXQgaG9sZSwgSSBzaG91bGQgZm9sbG93IGJlc3QgcHJhY3RpY2VzIGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgaW5jbHVkaW5nIGZ1bmN0aW9ucyB3aGljaCBhcmUgdG9vIGdlbmVyaWMuIEknbGwgcmVmZXIgYmFjayB0byB0aGUgZm9jdXMgc3ltYm9scyBndWlkZWxpbmVzLiBUaGV5IGV4cGxpY2l0bHkgc2F5IHRvICphdm9pZCogdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzIGxpa2UgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdCBoYW5kbGVycywgZXRjLiBXZSBuZWVkIHRvIHRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeSBwb2ludHMuIEFsc28sIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIGlzc3VlIHdpdGggc3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gaGVhZGVycyDigJMgdGhleSBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBub24tc3RhdGljIGNhbGxlcnMgaWYgdGhlIGNoYW5nZSBpcyBsYXJnZWx5IGluIHRob3NlIGhlbHBlcnMuXG5cblJpZ2h0LCBiYWNrIHRvIHRoZSBzeW1ib2xzLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuIEkndmUgZ290IGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAsIHdoaWNoIGlzIG5vbi1zdGF0aWMgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEFuZCB0aGVuLCB3ZSBoYXZlIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLCB3aGljaCBpcyBzdGF0aWMsIGFuZCByZXNpZGVzIGluIGBtbS9odWdlX21lbW9yeS5jYC4gTm93LCB3aG8gKmNhbGxzKiBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYD8gSSBjYW4gc2VlIGEgY291cGxlIHJpZ2h0IGF3YXk6IGBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCAoc3RhdGljLCBjYWxsZWQgYnkgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCkgYW5kIGBkb19odWdlX3plcm9fd3BfcG1kYCAoc3RhdGljLCBjYWxsZWQgYnkgYGRvX2h1Z2VfcG1kX3dwX3BhZ2VgKS4gT2ssIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgYW5kIGBkb19odWdlX3BtZF93cF9wYWdlYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgYXJlIHRoZSBuZXh0IGZ1bmN0aW9ucyBJJ2xsIGxvb2sgaW50by5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5NTEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDQ6NTcuODAxOTkyMjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzkzMTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX2h1Z2VfcG1kX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0xMzgwPXN0YXRpYyB2b2lkIG1hcF9hbm9uX2ZvbGlvX3BtZF9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMzg5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTM5MDpzdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTM5MS17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE0NDEtXFxubW0vaHVnZV9tZW1vcnkuYzoxNDQyOnZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfZGV2aWNlX3ByaXZhdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxubW0vaHVnZV9tZW1vcnkuYy0xNDQzLXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTUxNj1zdGF0aWMgdm9pZCBzZXRfaHVnZV96ZXJvX2ZvbGlvKHBndGFibGVfdCBwZ3RhYmxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTUyNy1cXG5tbS9odWdlX21lbW9yeS5jOjE1Mjg6dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5tbS9odWdlX21lbW9yeS5jLTE1Mjkte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xNTgxLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTU4MjpcXHRyZXR1cm4gX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSh2bWYpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTU4My19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIxMDE9c3RhdGljIHZtX2ZhdWx0X3QgZG9faHVnZV96ZXJvX3dwX3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjEzMi1cXG5tbS9odWdlX21lbW9yeS5jOjIxMzM6dm1fZmF1bHRfdCBkb19odWdlX3BtZF93cF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjEzNC17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIyMjc9c3RhdGljIGlubGluZSBib29sIGNhbl9jaGFuZ2VfcG1kX3dyaXRhYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yMjU2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjI1Nzp2bV9mYXVsdF90IGRvX2h1Z2VfcG1kX3VmZmRfcndwKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjI1OC17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIyODUtLyogTlVNQSBoaW50aW5nIHBhZ2UgZmF1bHQgZW50cnkgcG9pbnQgZm9yIHRyYW5zIGh1Z2UgcG1kcyAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6MjI4Njp2bV9mYXVsdF90IGRvX2h1Z2VfcG1kX251bWFfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5tbS9odWdlX21lbW9yeS5jLTIyODcte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNDgxPXN0YXRpYyBib29sIGhhc19kZXBvc2l0ZWRfcGd0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgcG1kdmFsLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNDk2LVxcdCAqIE90aGVyd2lzZSwgb25seSBhbm9ueW1vdXMgZm9saW9zIGFyZSBkZXBvc2l0ZWQsIHNlZVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjQ5NzpcXHQgKiBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKCkuXFxubW0vaHVnZV9tZW1vcnkuYy0yNDk4LVxcdCAqL1xcbi0tXFxubW0vbWVtb3J5LmM9NjM4OT1zdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3QgY3JlYXRlX2h1Z2VfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNjM5Mi1cXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKVxcbm1tL21lbW9yeS5jOjYzOTM6XFx0XFx0cmV0dXJuIGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHZtZik7XFxubW0vbWVtb3J5LmMtNjM5NC1cXHRpZiAodm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWh1Z2VfZmF1bHQpXFxuLS1cXG5tbS9tZW1vcnkuYz02NDAwPXN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB3cF9odWdlX3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTY0MTItXFx0XFx0fVxcbm1tL21lbW9yeS5jOjY0MTM6XFx0XFx0cmV0dXJuIGRvX2h1Z2VfcG1kX3dwX3BhZ2Uodm1mKTtcXG5tbS9tZW1vcnkuYy02NDE0LVxcdH1cXG4tLVxcbm1tL21lbW9yeS5jPTY2MTQ9c3RhdGljIHZtX2ZhdWx0X3QgX19oYW5kbGVfbW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1vcnkuYy02Njg4LVxcdFxcdGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkodm1mLm9yaWdfcG1kKSlcXG5tbS9tZW1vcnkuYzo2Njg5OlxcdFxcdFxcdHJldHVybiBkb19odWdlX3BtZF9kZXZpY2VfcHJpdmF0ZShcXHUwMDI2dm1mKTtcXG5tbS9tZW1vcnkuYy02NjkwLVxcbi0tXFxubW0vbWVtb3J5LmMtNjY5Ny1cXHRcXHRcXHRpZiAodXNlcmZhdWx0ZmRfaHVnZV9wbWRfcndwKHZtYSwgdm1mLm9yaWdfcG1kKSlcXG5tbS9tZW1vcnkuYzo2Njk4OlxcdFxcdFxcdFxcdHJldHVybiBkb19odWdlX3BtZF91ZmZkX3J3cChcXHUwMDI2dm1mKTtcXG5tbS9tZW1vcnkuYzo2Njk5OlxcdFxcdFxcdHJldHVybiBkb19odWdlX3BtZF9udW1hX3BhZ2UoXFx1MDAyNnZtZik7XFxubW0vbWVtb3J5LmMtNjcwMC1cXHRcXHR9XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTc4MD1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX3NldHVwKTtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzg4LSAqIEBwYWdlIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGFuZCBzZXR1cCBhZnRlciBpdCdzIGFsbG9jYXRlZC4gVGhlIGNvZGUgYml0c1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6Nzg5OiAqIGhlcmUgZm9sbG93IGNsb3NlbHkgdGhlIGNvZGUgaW4gX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSgpLiBUaGlzIEFQSSBkb2VzXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03OTAtICogbm90IHN1cHBvcnQgVEhQIHplcm8gcGFnZXMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ0OjU3Ljg1Mzc5MjM1OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3ODgyNjIzNjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcgZm9jdXMsIGtlZXBpbmcgaW4gbWluZCB0aGF0IHdlIHdhbnQgdG8gYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMgdGhhdCBkaWx1dGUgdGhlIGZ1enppbmcgZWZmb3J0LiBNeSBpbml0aWFsIGxpc3QgaW5jbHVkZXMgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCwgYGRvX2h1Z2VfcG1kX3dwX3BhZ2VgLCBgZG9fc3dhcF9wYWdlYCwgYW5kIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAuXG5cblRoZSBmaXJzdCB0aG91Z2h0IGlzIGBkb19zd2FwX3BhZ2VgLCBpcyBpdCBhIGhvdCBwYXRoPyBObywgaXQncyBhIHN3YXAtaW4gcGFnZSBmYXVsdCBoYW5kbGVyLCB3aGljaCBpcyBtb3JlIHNwZWNpZmljLiBIb3dldmVyLCBwYWdlIGZhdWx0IGhhbmRsZXJzIGluIGdlbmVyYWwgYXJlIHVzdWFsbHkgbm90IGdvb2QgdGFyZ2V0cy4gVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHRlbGwgdXMgdG8gYXZvaWQgdGhvc2UuIFNvLCBgaGFuZGxlX21tX2ZhdWx0YCBhbmQgYGRvX2Fub255bW91c19wYWdlYCBhcmUgb3V0LlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGF0IGxvZ2ljIGlzIGFwcGxpY2FibGUgaGVyZS4gVGhlIGluc3RydWN0aW9ucyBhbHNvIHNheTpcblxuXHUwMDNlIFwiQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOiBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cyAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdCBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4gTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLCB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXCJcblxuU28sIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggbXkgY2hvaWNlcy5cblxuTm93LCBsZXQncyBjbGFyaWZ5IHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQ6IGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAsIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAsIGBkb19odWdlX3BtZF93cF9wYWdlYCwgYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAsIGBhbGxvY19hbm9uX2ZvbGlvYCwgYW5kIGBkb19zd2FwX3BhZ2VgLlxuXG5gX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgIGlzIG9ubHkgY2FsbGVkIHdoZW4gYGN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoYCBpcyBzZXQuIFNvLCBub3QgdWJpcXVpdG91cy4gYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCBhbmQgYGRvX2h1Z2VfcG1kX3dwX3BhZ2VgIGFyZSBzcGVjaWZpYyB0byB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFApLiBTbywgaXQgc2hvdWxkIGJlIGEgZ29vZCBjYW5kaWRhdGUuXG5cbk5vdywgYGRvX3N3YXBfcGFnZWAgLSBpcyB0aGF0IGEgZ2VuZXJpYyBoYW5kbGVyIG9yIHN3YXAtc3BlY2lmaWM/IEl0IGlzIGEgXCJwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIHN3YXAgZW50cmllc1wiLiBCdXQgdGhlIG1vcmUgc3BlY2lmaWMgdGhyb3R0bGluZyBsb2dpYyBpcyBpbiBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgISBTbywgYF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCBsb29rcyBwcm9taXNpbmcuXG5cblllcyEgYF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgbWVtb3J5LmhpZ2ggbGltaXQgaXMgZXhjZWVkZWQuIFRoYXQncyBhIGRpcmVjdCB0YXJnZXQuIEFsc28sIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgYW5kIGBkb19odWdlX3BtZF93cF9wYWdlYCBhcmUgZGlyZWN0IGNhbGxlcnMgb2YgYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAuXG5cbkJ1dCB3aGF0IGFib3V0IGBkb19zd2FwX3BhZ2VgPyBJdCBtaWdodCBiZSBhIHBhZ2UgZmF1bHQgaGFuZGxlciBhbmQgbm90IGEgZ29vZCBmb2N1cyBzeW1ib2wuIEJ1dCB0aGUgcGF0Y2ggZGlyZWN0bHkgbW9kaWZpZXMgdGhpcyBmdW5jdGlvbiBpbiBgbW0vbWVtb3J5LmNgLCBjYWxsaW5nIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgLiBBbHNvIGl0IGlzIGluOlxuXG5gYGBjXG52bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi4uLlxub3V0OlxuXHRpZiAoc2kpXG5cdFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcblx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xuXHRyZXR1cm4gcmV0O1xuYGBgXG5cbkFsc28sIGBhbGxvY19hbm9uX2ZvbGlvYDpcblxuYGBgY1xuc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi4uLlxuXHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG5gYGBcblxuYW5kIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgOlxuXG5gYGBjXG5zdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi4uLlxuXHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG5gYGBcblxuTGV0J3MgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGFsbG9jX2Fub25fZm9saW9gLiBJdCdzIHN0YXRpYywgYW5kIG9ubHkgY2FsbGVkIGJ5IGBkb19hbm9ueW1vdXNfcGFnZWAuIEFuZCBgZG9fYW5vbnltb3VzX3BhZ2VgIGlzIGEgdHlwaWNhbCBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yICphbm9ueW1vdXMqIHBhZ2VzOyB0aGVyZWZvcmUsIHViaXF1aXRvdXMuXG5cbkluIHN1bW1hcnksIGBkb19zd2FwX3BhZ2VgIGlzIHN3YXAtc3BlY2lmaWM7IHNvIHRoZSBwYXRjaCB0byB0aGUgZnVuY3Rpb24gaXMgZ29vZCwgYW5kIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgaXMgdGhlIHdvcmsgaG9yc2UuIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgaXMgYSBUSFAgUE1EIGZhdWx0IGhhbmRsZXIuIGBkb19odWdlX3BtZF93cF9wYWdlYCBpcyBUSFAgUE1EIHdyaXRlIHByb3RlY3Rpb24gZmF1bHQgaGFuZGxlci5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSByZWxldmFudCBjb25maWdzOlxuXG4xXG5cbiIsIklucHV0VG9rZW5zIjoyMjI3NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MDUuNzM2NDE5MzQxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTQ0NTYzOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1NXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ1OjA1LjgwMTg3NTE5OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDEwMjA1MDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgYGRvX3N3YXBfcGFnZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhpcyBwYWdlIHN3YXBwaW5nIHByb2Nlc3MuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIHB1bGwgdXAgdGhlIGRlZmluaXRpb24gb2YgYGRvX3N3YXBfcGFnZWAg4oCTIHRoYXQncyBnb2luZyB0byBiZSBpbiBgbW0vbWVtb3J5LmNgLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgbG93LWxldmVsIG1lY2hhbmljcyBvZiBzd2FwcGluZyBhIHBhZ2UgaW4gb3Igb3V0LiBJJ20gbG9va2luZyBmb3IgdGhlIGRldGFpbHMgb24gdGhpbmdzIGxpa2UgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHN3YXAgY2FjaGUsIHRoZSBwYWdlIHRhYmxlIHVwZGF0ZXMsIHRoZSBwb3RlbnRpYWwgZm9yIEkvTyBvcGVyYXRpb25zLCBhbmQgYW55IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGludm9sdmVkLiBJIHdhbnQgdG8gc2VlIHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBzbyBJIGNhbiBhY2N1cmF0ZWx5IGFzc2VzcyB3aGVyZSB0aGUgYm90dGxlbmVjayBsaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDYyMywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ1OjA3LjgxMjA4Mjk0M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM3NTMzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fc3dhcF9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTUxMDA9dm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTUxMjItXFxubW0vaHVnZV9tZW1vcnkuYzo1MTIzOlxcdC8qIFNlZSBkb19zd2FwX3BhZ2UoKTogcmVzdG9yZSBQQUdFX05PTkUgZm9yIFJXUCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmMtNTEyNC1cXHRpZiAocG1kX3N3cF91ZmZkKCpwdm13LVxcdTAwM2VwbWQpIFxcdTAwMjZcXHUwMDI2IHVzZXJmYXVsdGZkX3J3cCh2bWEpKVxcbi0tXFxubW0vaW50ZXJuYWwuaD01Njc9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTU3NS1cXG5tbS9pbnRlcm5hbC5oOjU3Njp2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxubW0vaW50ZXJuYWwuaC01Nzctdm9pZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTE1OT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9zd2FwaW4oc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTE4MS1cXHRcXHRcXHQgKiBIZXJlIHRoZSBwdGwgaXMgb25seSB1c2VkIHRvIGNoZWNrIHB0ZV9zYW1lKCkgaW5cXG5tbS9raHVnZXBhZ2VkLmM6MTE4MjpcXHRcXHRcXHQgKiBkb19zd2FwX3BhZ2UoKSwgc28gcmVhZG9ubHkgdmVyc2lvbiBpcyBlbm91Z2guXFxubW0va2h1Z2VwYWdlZC5jLTExODMtXFx0XFx0XFx0ICovXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTIxMi1cXHRcXHR2bWYucHRsID0gcHRsO1xcbm1tL2todWdlcGFnZWQuYzoxMjEzOlxcdFxcdHJldCA9IGRvX3N3YXBfcGFnZShcXHUwMDI2dm1mKTtcXG5tbS9raHVnZXBhZ2VkLmMtMTIxNC1cXHRcXHQvKiBXaGljaCB1bm1hcHMgcHRlIChhZnRlciBwZXJoYXBzIHJlLWNoZWNraW5nIHRoZSBlbnRyeSkgKi9cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMjE3LVxcdFxcdC8qXFxubW0va2h1Z2VwYWdlZC5jOjEyMTg6XFx0XFx0ICogZG9fc3dhcF9wYWdlKCkgcmV0dXJucyBWTV9GQVVMVF9SRVRSWSB3aXRoIHJlbGVhc2VkIG1tYXBfbG9jay5cXG5tbS9raHVnZXBhZ2VkLmMtMTIxOS1cXHRcXHQgKiBOb3RlIHdlIHRyZWF0IFZNX0ZBVUxUX1JFVFJZIGFzIFZNX0ZBVUxUX0VSUk9SIGhlcmUgYmVjYXVzZVxcbi0tXFxubW0va3NtLmM9MzEzNz1zdHJ1Y3QgZm9saW8gKmtzbV9taWdodF9uZWVkX3RvX2NvcHkoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2tzbS5jLTMxNTktXFx0aWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcXG5tbS9rc20uYzozMTYwOlxcdFxcdHJldHVybiBmb2xpbztcXHRcXHQvKiBsZXQgZG9fc3dhcF9wYWdlIHJlcG9ydCB0aGUgZXJyb3IgKi9cXG5tbS9rc20uYy0zMTYxLVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMDY1PXN0YXRpYyBpbnQgbWVfcGFnZWNhY2hlX2RpcnR5KHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEwOTctICogICAgICAgIGNvcnJ1cHRlZCBkYXRhIGFuZCBzaGFsbCBiZSBraWxsZWQgKHdlIGluc3RhbGxlZCBzaW1wbGVcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEwOTg6ICogICAgICAgIGludGVyY2VwdGlvbiBjb2RlIGluIGRvX3N3YXBfcGFnZSB0byBjYXRjaCBpdCkuXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMDk5LSAqXFxuLS1cXG5tbS9tZW1vcnkuYz05NDc9c3RhdGljIHZvaWQgcmVzdG9yZV9leGNsdXNpdmVfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtOTYxLVxcbm1tL21lbW9yeS5jOjk2MjpcXHQvKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cXG5tbS9tZW1vcnkuYy05NjMtXFx0aWYgKHB0ZV9zd3BfdWZmZChvcmlnX3B0ZSkgXFx1MDAyNlxcdTAwMjYgdXNlcmZhdWx0ZmRfcndwKHZtYSkpXFxuLS1cXG5tbS9tZW1vcnkuYz0zNjUyPWludCBhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1vcnkuYy0zNjYxLSAqIG9yIGNvbmZpZ3VyYXRpb25zIChlLmcuIGkzODYgd2l0aCBQQUUpIHdoaWNoIG1pZ2h0IGdpdmUgYSBtaXggb2YgdW5tYXRjaGVkXFxubW0vbWVtb3J5LmM6MzY2MjogKiBwYXJ0cywgZG9fc3dhcF9wYWdlIG11c3QgY2hlY2sgdW5kZXIgbG9jayBiZWZvcmUgdW5tYXBwaW5nIHRoZSBwdGUgYW5kXFxubW0vbWVtb3J5LmMtMzY2My0gKiBwcm9jZWVkaW5nIChidXQgZG9fd3BfcGFnZSBpcyBvbmx5IGNhbGxlZCBhZnRlciBhbHJlYWR5IG1ha2luZyBzdWNoIGEgY2hlY2s7XFxuLS1cXG5tbS9tZW1vcnkuYz00Nzk1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDgzOS1cXHQvKlxcbm1tL21lbW9yeS5jOjQ4NDA6XFx0ICogRm9yIGRvX3N3YXBfcGFnZSwgZmluZCB0aGUgaGlnaGVzdCBvcmRlciB3aGVyZSB0aGUgYWxpZ25lZCByYW5nZSBpc1xcbm1tL21lbW9yeS5jLTQ4NDEtXFx0ICogY29tcGxldGVseSBzd2FwIGVudHJpZXMgd2l0aCBjb250aWd1b3VzIHN3YXAgb2Zmc2V0cy5cXG4tLVxcbm1tL21lbW9yeS5jPTQ4NjM9c3RhdGljIHZvaWQgY2hlY2tfc3dhcF9leGNsdXNpdmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksXFxuLS1cXG5tbS9tZW1vcnkuYy00ODgwLSAqL1xcbm1tL21lbW9yeS5jOjQ4ODE6dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxubW0vbWVtb3J5LmMtNDg4Mi17XFxuLS1cXG5tbS9tZW1vcnkuYy01MjI0LVxcdHNldF9wdGVzKHZtYS1cXHUwMDNldm1fbW0sIGFkZHJlc3MsIHB0ZXAsIHB0ZSwgbnJfcGFnZXMpO1xcbm1tL21lbW9yeS5jOjUyMjU6XFx0YXJjaF9kb19zd2FwX3BhZ2VfbnIodm1hLVxcdTAwM2V2bV9tbSwgdm1hLCBhZGRyZXNzLFxcbm1tL21lbW9yeS5jLTUyMjYtXFx0XFx0XFx0cHRlLCBwdGUsIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL21lbW9yeS5jPTY1MjQ9c3RhdGljIHZtX2ZhdWx0X3QgaGFuZGxlX3B0ZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTY1NzAtXFx0aWYgKCFwdGVfcHJlc2VudCh2bWYtXFx1MDAzZW9yaWdfcHRlKSlcXG5tbS9tZW1vcnkuYzo2NTcxOlxcdFxcdHJldHVybiBkb19zd2FwX3BhZ2Uodm1mKTtcXG5tbS9tZW1vcnkuYy02NTcyLVxcbi0tXFxubW0vbWlncmF0ZS5jPTM1MT1zdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTQwNC1cXG5tbS9taWdyYXRlLmM6NDA1OlxcdFxcdC8qIFNlZSBkb19zd2FwX3BhZ2UoKTogcmVzdG9yZSBQQUdFX05PTkUgZm9yIFJXUCAqL1xcbm1tL21pZ3JhdGUuYy00MDYtXFx0XFx0aWYgKHB0ZV9zd3BfdWZmZChvbGRfcHRlKSBcXHUwMDI2XFx1MDAyNiB1c2VyZmF1bHRmZF9yd3Aodm1hKSlcXG4tLVxcbm1tL3BhZ2VfaW8uYz00MTk9c3RhdGljIGJvb2wgc3dhcF9yZWFkX2ZvbGlvX3plcm9tYXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3BhZ2VfaW8uYy00MjktXFx0ICogY3VycmVudGx5IGhhbmRsZWQuIFJldHVybiB0cnVlIHdpdGhvdXQgbWFya2luZyB0aGUgZm9saW8gdXB0b2RhdGUgc29cXG5tbS9wYWdlX2lvLmM6NDMwOlxcdCAqIHRoYXQgYW4gSU8gZXJyb3IgaXMgZW1pdHRlZCAoZS5nLiBkb19zd2FwX3BhZ2UoKSB3aWxsIHNpZ2J1cykuXFxubW0vcGFnZV9pby5jLTQzMS1cXHQgKiBGb2xpbyBsb2NrIHN0YWJpbGl6ZXMgdGhlIGNsdXN0ZXIgYW5kIG1hcCwgc28gdGhlIGNoZWNrIGlzIHNhZmUuXFxuLS1cXG5tbS9ybWFwLmM9MjQ2NT1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjcyNy1cXHRcXHRcXHQgKiBTdG9yZSB0aGUgcGZuIG9mIHRoZSBwYWdlIGluIGEgc3BlY2lhbCBtaWdyYXRpb25cXG5tbS9ybWFwLmM6MjcyODpcXHRcXHRcXHQgKiBwdGUuIGRvX3N3YXBfcGFnZSgpIHdpbGwgd2FpdCB1bnRpbCB0aGUgbWlncmF0aW9uXFxubW0vcm1hcC5jLTI3MjktXFx0XFx0XFx0ICogcHRlIGlzIHJlbW92ZWQgYW5kIHRoZW4gcmVzdGFydCBmYXVsdCBoYW5kbGluZy5cXG4tLVxcbm1tL3JtYXAuYz0yODY5PXN0cnVjdCBwYWdlICptYWtlX2RldmljZV9leGNsdXNpdmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL3JtYXAuYy0yOTQ3LVxcdCAqIFN0b3JlIHRoZSBwZm4gb2YgdGhlIHBhZ2UgaW4gYSBzcGVjaWFsIGRldmljZS1leGNsdXNpdmUgUEZOIHN3YXAgUFRFLlxcbm1tL3JtYXAuYzoyOTQ4OlxcdCAqIGRvX3N3YXBfcGFnZSgpIHdpbGwgdHJpZ2dlciB0aGUgY29udmVyc2lvbiBiYWNrIHdoaWxlIGhvbGRpbmcgdGhlXFxubW0vcm1hcC5jLTI5NDktXFx0ICogZm9saW8gbG9jay5cXG4tLVxcbm1tL3NobWVtLmM9MjA0Mz1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9zd2FwX2FsbG9jX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5tbS9zaG1lbS5jLTIwODAtICogSW4gYSBmdXR1cmUgcmVsZWFzZSwgdGhpcyBtYXkgd2VsbCBiZSBleHRlbmRlZCB0byByZXNwZWN0IGNwdXNldCBhbmRcXG5tbS9zaG1lbS5jOjIwODE6ICogTlVNQSBtZW1wb2xpY3ksIGFuZCBhcHBsaWVkIGFsc28gdG8gYW5vbnltb3VzIHBhZ2VzIGluIGRvX3N3YXBfcGFnZSgpO1xcbm1tL3NobWVtLmMtMjA4Mi0gKiBidXQgZm9yIG5vdyBpdCBpcyBhIHNpbXBsZSBtYXR0ZXIgb2Ygem9uZS5cXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTgzMD12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xODcwLSAqICAgQ1BVMVxcdFxcdFxcdFxcdENQVTJcXG5tbS9zd2FwZmlsZS5jOjE4NzE6ICogICBkb19zd2FwX3BhZ2UoKVxcbm1tL3N3YXBmaWxlLmMtMTg3Mi0gKiAgICAgLi4uXFx0XFx0XFx0XFx0c3dhcG9mZitzd2Fwb25cXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTg3OC0gKiBjaGFuZ2luZyBwYXJ0bHkgYmVjYXVzZSB0aGUgc3BlY2lmaWVkIHN3YXAgZW50cnkgbWF5IGJlIGZvciBhbm90aGVyXFxubW0vc3dhcGZpbGUuYzoxODc5OiAqIHN3YXAgZGV2aWNlIHdoaWNoIGhhcyBiZWVuIHN3YXBvZmYuICBBbmQgaW4gZG9fc3dhcF9wYWdlKCksIGFmdGVyXFxubW0vc3dhcGZpbGUuYy0xODgwLSAqIHRoZSBwYWdlIGlzIHJlYWQgZnJvbSB0aGUgc3dhcCBkZXZpY2UsIHRoZSBQVEUgaXMgdmVyaWZpZWQgbm90XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTI0MTk9c3RhdGljIGludCB1bnVzZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI0ODUtXFx0XFx0LypcXG5tbS9zd2FwZmlsZS5jOjI0ODY6XFx0XFx0ICogU2VlIGRvX3N3YXBfcGFnZSgpOiB3cml0ZWJhY2sgd291bGQgYmUgcHJvYmxlbWF0aWMuXFxubW0vc3dhcGZpbGUuYy0yNDg3LVxcdFxcdCAqIEhvd2V2ZXIsIHdlIGRvIGEgZm9saW9fd2FpdF93cml0ZWJhY2soKSBqdXN0IGJlZm9yZSB0aGlzXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI1MTQtXFxubW0vc3dhcGZpbGUuYzoyNTE1OlxcdC8qIFNlZSBkb19zd2FwX3BhZ2UoKTogcmVzdG9yZSBQQUdFX05PTkUgZm9yIFJXUCAqL1xcbm1tL3N3YXBmaWxlLmMtMjUxNi1cXHRpZiAocHRlX3N3cF91ZmZkKG9sZF9wdGUpIFxcdTAwMjZcXHUwMDI2IHVzZXJmYXVsdGZkX3J3cCh2bWEpKVxcbi0tXFxubW0venN3YXAuYz0xNDg4PWJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtMTU4Mi0gKiAgaW50byB0aGUgcGFnZSBkdWUgdG8gYSBkZWNvbXByZXNzaW9uIGZhaWx1cmUuIFRoZSBmb2xpbyBpcyB1bmxvY2tlZCwgYnV0XFxubW0venN3YXAuYzoxNTgzOiAqICBOT1QgbWFya2VkIHVwLXRvLWRhdGUsIHNvIHRoYXQgYW4gSU8gZXJyb3IgaXMgZW1pdHRlZCAoZS5nLiBkb19zd2FwX3BhZ2UoKVxcbm1tL3pzd2FwLmMtMTU4NC0gKiAgd2lsbCBTSUdCVVMpLlxcbi0tXFxubW0venN3YXAuYy0xNTg4LSAqICBidXQgTk9UIG1hcmtlZCB1cC10by1kYXRlLCBzbyB0aGF0IGFuIElPIGVycm9yIGlzIGVtaXR0ZWQgKGUuZy5cXG5tbS96c3dhcC5jOjE1ODk6ICogIGRvX3N3YXBfcGFnZSgpIHdpbGwgU0lHQlVTKS5cXG5tbS96c3dhcC5jLTE1OTAtICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MDcuODY1ODQyMTkxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3ODMxNDIyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24gZm9yIE9wdGltYWwgUGVyZm9ybWFuY2UqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcuIEknbSBmb2N1c2luZyBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgTUVNQ0dgIGFzIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9ucyB0byBvcHRpbWl6ZS4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHR3ZWFraW5nIG1lbW9yeSBwZXJmb3JtYW5jZS4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGUgbmVjZXNzaXR5IG9mIGBTV0FQYC4gSXMgYFNXQVBgIGdlbnVpbmVseSByZXF1aXJlZCwgb3IgaXMgdGhlcmUgYSBzcGVjaWZpYyBgQ09ORklHX1NXQVBgIG9wdGlvbiBJIG5lZWQgdG8gY29uc2lkZXI/IFJpZ2h0LCBub3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCBgZG9fc3dhcF9wYWdlYCBpcyB0aGUgb25lIHRoYXQncyBpbnZvbHZlZCBpbiBzd2FwLWluLCBtaWdyYXRpb24sIHRob3NlIGRldmljZSBwcml2YXRlL2V4Y2x1c2l2ZSBlbnRyaWVzLCBhbmQgYWxsIHRoYXQuIFNvIEkgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkaXZlIGludG8gdGhhdCBzcGVjaWZpYyBkZXRhaWwgeWV0LlxuXG5Ob3csIGxldCdzIGdvIGJhY2sgdG8gdGhlIEtjb25maWcgZmlsZXMuIEknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb25zIG9mIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCB0aGVyZS4gSXQncyBiZXN0IHByYWN0aWNlIHRvIHJldmlldyB0aGVpciBzZXR0aW5ncyBhbmQgZGVwZW5kZW5jaWVzLiBJJ2xsIG5lZWQgdG8gbG9vayBpbiBgbW0vS2NvbmZpZ2AgZm9yIGJvdGggb2YgdGhlc2UsIG9mIGNvdXJzZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiB0aGVpciBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczOTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MTAuNjQ4OTg4ODQyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzA5NjMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0V8Y29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgzMj1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODM0LVxcbm1tL0tjb25maWc6ODM1Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzNi1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NTM9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg1OC1cXG5tbS9LY29uZmlnOjg1OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NjAtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NjUtXFxubW0vS2NvbmZpZzo4NjY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg2Ny1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzQtXFxubW0vS2NvbmZpZzo4NzU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04NzYtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg4Mj1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODkxLVxcbm1tL0tjb25maWc6ODkyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy04OTMtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwMS1cXG5tbS9LY29uZmlnOjkwMjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkwMy1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwOS1cXG5tbS9LY29uZmlnOjkxMDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTExLVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTctXFxubW0vS2NvbmZpZzo5MTg6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MTktXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05Mjc9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkzNi1cXG5tbS9LY29uZmlnOjkzNzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTM4LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NDUtXFxubW0vS2NvbmZpZzo5NDY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NDctXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTMtXFxubW0vS2NvbmZpZzo5NTQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk1NS1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTYxLVxcbm1tL0tjb25maWc6OTYyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTYzLVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MTAuNzAyMDkxOTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQzNjMzNzE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCdzIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYE1FTUNHYCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgc3RlcCwgZXNwZWNpYWxseSB3aGVuIHdvcmtpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBvcHRpb24gaXMgc2V0IGFuZCBwb3RlbnRpYWxseSB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMuIExldCdzIHNlZS4uLiBLY29uZmlnIGlzIHRoZSBrZXkgaGVyZS4gSXTigJlzIHRoZSBiYWNrYm9uZSBvZiB0aGUga2VybmVs4oCZcyBidWlsZCBjb25maWd1cmF0aW9uLiBJJ2xsIG5lZWQgdG8gdXNlIHRoZSB0b29scyBhdmFpbGFibGUgdG8gcXVpY2tseSB0cmFjZSBpdHMgZGVjbGFyYXRpb24uIFVuZGVyc3RhbmRpbmcgaXRzIHBsYWNlbWVudCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBpbmZyYXN0cnVjdHVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTA1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MTIuMTM4NDMyMDg5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM0OTk4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA4NC1cXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA4Ni1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkzLVxcbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwOTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDAtXFxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTExMDItXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDctXFxuaW5pdC9LY29uZmlnOjExMDg6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDktXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MTIuMTg1Nzg5MDc3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNTAyMzM0NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBTd2FwIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3dhcCBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUuLi4gdGhlIGZpcnN0IHRoaW5nIEknbGwgY2hlY2sgaXMgYENPTkZJR19TV0FQYCBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIG1hc3RlciBzd2l0Y2gsIHNvIHRvIHNwZWFrLiBVbmRlcnN0YW5kaW5nIHRoYXQgc2V0dGluZyBpcyBjcnVjaWFsLiBJIGtub3cgdGhlcmUgYXJlIGRlcGVuZGVuY2llcyBhbmQgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBjb21lIGludG8gcGxheSBvbmNlIGBDT05GSUdfU1dBUGAgaXMgZW5hYmxlZCAob3IgZGlzYWJsZWQpLCBsaWtlIHZhcmlvdXMgc3dhcCBhbGdvcml0aG1zLCBkZXZpY2Ugc3VwcG9ydCwgYW5kIHNvIG9uLCBidXQgKnRoaXMqIGlzIHRoZSBpbml0aWFsIGdhdGUuIEJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljcyBvZiBhIHBhcnRpY3VsYXIgaXNzdWUsIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgb3IgYSBkZXNpZ24gY29uc2lkZXJhdGlvbiwgSSB3YW50IHRvIGJlIDEwMCUgY2xlYXIgb24gKndoZXRoZXIqIHN3YXAgaXMgZXZlbiAqZW5hYmxlZCogYXQgYWxsLCBvciBwb3RlbnRpYWxseSBhY2NpZGVudGFsbHkgZGlzYWJsZWQuIEdyYWJiaW5nIHRoYXQgaW5pdGlhbCBkYXRhIHBvaW50IGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyBzd2FwIGludGVyYWN0cyB3aXRoIG15IHVzZSBjYXNlLCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlIGlmIHN3YXAgaXMgc2V0IHRvIG9mZi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5MTcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NToxNC41MzYwMjcwODZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxODc1NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0xMS1cXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxcbm1tL0tjb25maWctMTMtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NToxNC41ODc5MDk1MTRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODU1NDM5MTc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIFNlbGVjdGlvbiBmb3IgRnV6emluZyBGb2N1cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBzZXQgZm9yIHRoZSBmdXp6aW5nIGFuYWx5c2lzIHRvIGJlIHJlbGV2YW50LiBUaGUgcGF0Y2ggZGVwZW5kcyBvbiBgTUVNQ0dgIChmb3IgbWVtb3J5IGNncm91cCBjb250cm9sbGVyIGFuZCB0aHJvdHRsaW5nLCBzcGVjaWZpY2FsbHkgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgYW5kIGl0cyBpbnRlcm5hbCBvcGVyYXRpb25zKSwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCAoZm9yIFRIUCBzdXBwb3J0IGFuZCB0aGUgYG1tL2h1Z2VfbWVtb3J5LmNgIGNvZGUsIGluY2x1ZGluZyBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCksIGFuZCBgU1dBUGAgKGZvciBhbm9ueW1vdXMgbWVtb3J5IHN3YXAgc3VwcG9ydCwgaW52b2x2aW5nIGBkb19zd2FwX3BhZ2VgKS4gSSdtIGdvaW5nIHRvIG5vdGUgdGhlc2UgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuXG5cbk5vdywgZm9yIHRoZSBpbXBvcnRhbnQgcGFydDogaWRlbnRpZnlpbmcgdGhlICpyaWdodCogc3ltYm9scyB0byBmb2N1cyB0aGUgZnV6emluZyBlZmZvcnQuIEluaXRpYWxseSwgbXkgbWluZCBqdW1wcyB0byB0aGUga2V5IGZ1bmN0aW9uczogYF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCAodGhlIGNvcmUgdGhyb3R0bGluZyBsb2dpYyksIGBkb19zd2FwX3BhZ2VgICh3aGljaCBub3cgaW5jb3Jwb3JhdGVzIHRoZSB0aHJvdHRsaW5nKSwgYW5kIHRoZSBUSFAgZmF1bHQgaGFuZGxlcnMgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCBhbmQgYGRvX2h1Z2VfcG1kX3dwX3BhZ2VgLlxuXG5Ib3dldmVyLCB0aGUgZG9jdW1lbnRhdGlvbiBpcyBjbGVhcjogSSBuZWVkIHRvIGF2b2lkIGxpc3RpbmcgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoZSBnZW5lcmljIGZhdWx0IGhhbmRsZXJzIChgaGFuZGxlX21tX2ZhdWx0YCwgYGRvX2Fub255bW91c19wYWdlYCwgZXRjLikgYXJlIGNhbGxlZCAqZXZlcnl3aGVyZSouICBCdXQsIGBkb19zd2FwX3BhZ2VgIGlzIGEgZ29vZCBjaG9pY2UgYmVjYXVzZSBpdCdzICpzcGVjaWZpYyogdG8gc3dhcHBlZC1vdXQgcGFnZXMuIFNpbWlsYXJseSwgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCBhbmQgYGRvX2h1Z2VfcG1kX3dwX3BhZ2VgIGFyZSBUSFAtc3BlY2lmaWMuIFRoZXkncmUgbm90IGNhbGxlZCBvbiAqZXZlcnkqIHBhZ2UgZmF1bHQsIG9ubHkgZm9yIHRoZSByZWxldmFudCBjYXNlcywgd2hpY2ggaXMgcGVyZmVjdCBmb3IgdGFyZ2V0ZWQgZnV6emluZy4gYF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCBpcyB0aGUgY29yZSwgdGFyZ2V0IGZ1bmN0aW9uLCBhcyB3ZWxsLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEkgdGhvdWdodCBhYm91dCBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCBvciBgYWxsb2NfYW5vbl9mb2xpb2AsIGJlY2F1c2UgdGhleSBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gSG93ZXZlciwgdGhleSBhcmUgc3RhdGljIGZ1bmN0aW9ucyBpbiBgLmNgIGZpbGVzLCBzbyB0aGV5J3JlIG5vdCBzdWJqZWN0IHRvIHRoZSBoZWFkZXIgcnVsZS5cblxuQWxyaWdodCwgbGV0J3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSBJJ3ZlIGNoZWNrZWQgZXZlcnl0aGluZyBhY2NvcmRpbmcgdG8gdGhlIHByb2Nlc3MuXG5cbjEuICBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgOiBUaGUgY2hhbmdlcyAqZG8qIHRvdWNoIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtZW1jZyB0aHJvdHRsaW5nIHBhdGhzLCBzcGVjaWZpY2FsbHkgYnkgYWRkaW5nIGNhbGxzIHRvIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgaW4gZmF1bHQgaGFuZGxpbmcgZm9yIGFub255bW91cyBUSFAgYWxsb2NhdGlvbnMgYW5kIHN3YXAtaW4uIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0YXNrcyB0aGF0IGFyZSBibG9ja2VkIHdhaXRpbmcgZm9yIG1lbW9yeSBzZXR0bGUgdGhlaXIgYG1lbW9yeS5oaWdoYCBkZWJ0LlxuMi4gIGBFbmFibGVDb25maWdzYCBpbmNsdWRlcyBcIk1FTUNHXCIsIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIiwgYW5kIFwiU1dBUFwiLiBDb25maXJtZWQuXG4zLiAgYEZvY3VzU3ltYm9sc2A6IGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAsIGBkb19zd2FwX3BhZ2VgLCBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgLCBhbmQgYGRvX2h1Z2VfcG1kX3dwX3BhZ2VgLiAgVGhhdCBjb3ZlcnMgdGhlIGNvcmUgdGhyb3R0bGluZyBsb2dpYyBpbiB0aGUga2V5IGZhdWx0IHBhdGhzLlxuNC4gIFRoZSByZWFzb25pbmcgaXMgY29uY2lzZTogdGhlIHBhdGNoIHRhcmdldHMgZmF1bHQgaGFuZGxpbmcgcGF0aHMgdG8gZW5zdXJlIG1lbW9yeS5oaWdoIGRlYnQgc2V0dGxlbWVudC4gR3JlYXQsIGl0J3MgYWxsIGV4cGxhaW5lZC5cblxuVGhhdCdzIGl0LiBFdmVyeXRoaW5nJ3MgdmVyaWZpZWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTI1MywiT3V0cHV0VG9rZW5zIjoyMDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ1OjIzLjE0MjMwMzQyOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MTk0MjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaFwiLFxuICAgIFwiZG9fc3dhcF9wYWdlXCIsXG4gICAgXCJkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZVwiLFxuICAgIFwiZG9faHVnZV9wbWRfd3BfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmF1bHQgaGFuZGxpbmcgbG9naWMgaW4gbW0vaHVnZV9tZW1vcnkuYyBhbmQgbW0vbWVtb3J5LmMgYnkgaW52b2tpbmcgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKCkgZHVyaW5nIFBNRCBUSFAgYW5vbnltb3VzIGFsbG9jYXRpb24sIG1USFAgYW5vbnltb3VzIGFsbG9jYXRpb24sIGFuZCBzd2FwLWluIHBhZ2UgZmF1bHQgcGF0aHMuIFRoaXMgZW5zdXJlcyBtZW1vcnkuaGlnaCB0aHJvdHRsaW5nIGRlYnQgaXMgc3luY2hyb25vdXNseSBoYW5kbGVkIGluIHNsZWVwaW5nIGZhdWx0IGNvbnRleHRzIHdoZW4gbm9uLWJsb2NraW5nIEdGUCBtYXNrcyB3ZXJlIHVzZWQgZHVyaW5nIGNoYXJnaW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiByZWFjaGFibGUgTU0gY29kZSBwYXRocyBhbmQgd2FycmFudCBmdXp6aW5nIHRvIHZlcmlmeSBsb2NraW5nIGludmFyaWFudHMgYW5kIHRocm90dGxpbmcgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hcIixcbiAgICBcImRvX3N3YXBfcGFnZVwiLFxuICAgIFwiZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VcIixcbiAgICBcImRvX2h1Z2VfcG1kX3dwX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGluIG1tL2h1Z2VfbWVtb3J5LmMgYW5kIG1tL21lbW9yeS5jIGJ5IGludm9raW5nIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaCgpIGR1cmluZyBQTUQgVEhQIGFub255bW91cyBhbGxvY2F0aW9uLCBtVEhQIGFub255bW91cyBhbGxvY2F0aW9uLCBhbmQgc3dhcC1pbiBwYWdlIGZhdWx0IHBhdGhzLiBUaGlzIGVuc3VyZXMgbWVtb3J5LmhpZ2ggdGhyb3R0bGluZyBkZWJ0IGlzIHN5bmNocm9ub3VzbHkgaGFuZGxlZCBpbiBzbGVlcGluZyBmYXVsdCBjb250ZXh0cyB3aGVuIG5vbi1ibG9ja2luZyBHRlAgbWFza3Mgd2VyZSB1c2VkIGR1cmluZyBjaGFyZ2luZy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gcmVhY2hhYmxlIE1NIGNvZGUgcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZyB0byB2ZXJpZnkgbG9ja2luZyBpbnZhcmlhbnRzIGFuZCB0aHJvdHRsaW5nIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NToyMy4yMTY1MDM2MDZaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NTEyODQyMzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MjMuMjE2OTg5MDg2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjk1MTIzNDkzNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKWAgaW4gYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpYCwgYGRvX3N3YXBfcGFnZSgpYCwgYW5kIGBhbGxvY19hbm9uX2ZvbGlvKClgIHRvIGVuZm9yY2Ugc3luY2hyb25vdXMgYG1lbW9yeS5oaWdoYCBjZ3JvdXAgdGhyb3R0bGluZyBkdXJpbmcgcGFnZSBmYXVsdCBoYW5kbGluZyB3aGVuIGNoYXJnaW5nIGZvbGlvcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IHBlcnRhaW4gdG8gbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLCByZWNsYW1hdGlvbiwgYW5kIHRocm90dGxpbmcgY29udHJvbCBmbG93LiBUaGV5IGRvIG5vdCBhbGxvY2F0ZSwgbW9kaWZ5LCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHN0cnVjdHVyZXMsIG5vciBkbyB0aGV5IGludHJvZHVjZSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBzbGVlcGluZy1pbi1hdG9taWMsIG9yIGxpZmV0aW1lIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChLQVNBTiwgTE9DS0RFUCwgREVCVUdfQVRPTUlDX1NMRUVQKSwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNlMTRlOGE5NDE5MTVkNjA4Mzc4NWY2ZmVkYTA3NzE4ZjU0ZGFmOTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDEzOjQ0OjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGNlZDQwMGY3MmQ0M2EuLjU0M2JhNGE3NGRjM2EgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTMyOSw2ICsxMzI5LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogVGhlIGNoYXJnZSBnZnAgZW5jb2RlcyBUSFAgYWxsb2NhdGlvbiBwb2xpY3kgYW5kIG1heSBub3QgYWxsb3dcbitcdCAqIGJsb2NraW5nLCB3aGljaCBtYWtlcyB0cnlfY2hhcmdlIHNraXAgaXRzIHN5bmNocm9ub3VzIG1lbW9yeS5oaWdoXG4rXHQgKiB0aHJvdHRsaW5nLiBGYXVsdCBjb250ZXh0IGNhbiBzbGVlcCwgc28gc2V0dGxlIGFueSBvdmVyLWhpZ2ggZGVidFxuK1x0ICogaGVyZSBpbnN0ZWFkIG9mIGxldHRpbmcgdXNhZ2UgZ3JvdyB1bnRocm90dGxlZCB1cCB0byBtZW1vcnkubWF4LlxuK1x0ICovXG4rXHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG4rXG4gXHRpZiAoZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdGNvdW50X3ZtX2V2ZW50KFRIUF9GQVVMVF9GQUxMQkFDSyk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggOGIwYzJjNzM1ZDNkZS4uZGM5N2NmMGViZmIzMCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTUyNjcsNiArNTI2NywxNCBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBvdXQ6XG4gXHRpZiAoc2kpXG4gXHRcdHB1dF9zd2FwX2RldmljZShzaSk7XG4rXHQvKlxuK1x0ICogTGFyZ2UgZm9saW8gc3dhcGluIGNoYXJnZXMgd2l0aCB0aGUgVEhQIGFsbG9jYXRpb24gZ2ZwLCB3aGljaCBtYXlcbitcdCAqIG5vdCBhbGxvdyBibG9ja2luZywgbWFraW5nIHRyeV9jaGFyZ2Ugc2tpcCBpdHMgc3luY2hyb25vdXNcbitcdCAqIG1lbW9yeS5oaWdoIHRocm90dGxpbmcuIFNldHRsZSBhbnkgb3Zlci1oaWdoIGRlYnQgaGVyZSBpbnN0ZWFkLFxuK1x0ICogd2hlcmUgc2xlZXBpbmcgaXMgc2FmZTogdGhlIGZvbGlvIGxvY2ssIHRoZSBwYWdlIHRhYmxlIGxvY2sgYW5kXG4rXHQgKiB0aGUgc3dhcCBkZXZpY2UgcmVmZXJlbmNlIGhhdmUgYWxsIGJlZW4gZHJvcHBlZC5cbitcdCAqL1xuK1x0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xuIFx0cmV0dXJuIHJldDtcbiBvdXRfbm9tYXA6XG4gXHRpZiAodm1mLVx1MDAzZXB0ZSlcbkBAIC01MzYyLDYgKzUzNzAsOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19hbm9uX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdFx0Z290byBuZXh0O1xuIFx0XHR9XG4rXHRcdC8qIFNhbWUgcmVhc29uaW5nIGFzIGluIHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpLiAqL1xuK1x0XHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG4gXHRcdGlmIChvcmRlciBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRnb3RvIGZhbGxiYWNrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MjMuMjE2OTkwMDE2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwMzc3Mzk5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBgbW0vbWVtb3J5LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiBJdCBsb29rcyBsaWtlIGl0J3MgaW50cm9kdWNpbmcgY2FsbHMgdG8gYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtgIHdpdGhpbiBhIGZldyBrZXkgbWVtb3J5IGFsbG9jYXRpb24gcGF0aHM6IHNwZWNpZmljYWxseSwgYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAsIGBkb19zd2FwX3BhZ2VgLCBhbmQgYGFsbG9jX2Fub25fZm9saW9gLiBcblxuVGhlc2UgZnVuY3Rpb25zIGFyZSBjcml0aWNhbCBhcmVhcyB0byB3YXRjaCBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBOb3csIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCAqZG9lcyouIEknbGwgcmVhY2ggZm9yIGdyZXBwZXIgcmlnaHQgYXdheSwgbG9jYXRlIGl0cyBkZWZpbml0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbiwgYW5kIGRpc3NlY3QgaXRzIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgdGhlIGx5bmNocGluLCB0aGUgY3J1Y2lhbCBlbGVtZW50LiBLbm93aW5nICppdHMqIGJlaGF2aW9yIHdpbGwgdGVsbCBtZSB0aGUgYWN0dWFsIGVmZmVjdCBvZiB0aGlzIHBhdGNoLiBJcyB0aGlzIHJlbGF0ZWQgdG8gaGlnaC1vcmRlciBhbGxvY2F0aW9uIGZhaWx1cmVzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZT8gSXMgaXQgYWJvdXQgY2dyb3VwIGFjY291bnRpbmc/IFRoZSBhbnN3ZXIgbGllcyBpbiB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MjcuMjU0NzM0NzE0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA0NTY5NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTkxMT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MTItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTEzOnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTE0LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEzNTQ9bWVtX2Nncm91cF9wcmludF9vb21fbWVtaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzU3LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEzNTg6c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzU5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MjkuMDU5MzExNzk3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NzU1ODY2NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBjb2RlIGxvY2F0aW9ucywgcGhyYXNlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgd2VsbC12ZXJzZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cHM6XG5cbioqRGl2aW5nIERlZXAgaW50byBNZW1jb250cm9sJ3MgSGFuZGxpbmcgb2YgSGlnaCBNZW1vcnkgT3ZlcmZsb3dzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIHdpdGhpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmUgOTExLiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgcGVyaGFwcyBzb21lIGNydWNpYWwgbWFjcm9zIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLCBtYXliZSBldmVuIHRoZSBzcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgbWVtb3J5IGxpbWl0cyBvciB0aHJlc2hvbGRzLCBhcmUgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhlIGhpZ2ggbWVtb3J5IHdhdGVybWFyayBpcyBoYW5kbGVkIHRoZXJlLiBJJ20gZm9jdXNpbmcgb24gdGhhdCBzZWN0aW9uIG9mIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgZGVmaW5pdGlvbnMgb2YgYG1lbV9jZ3JvdXBgIHJlbGF0ZWQgdmFyaWFibGVzIGFuZCBkYXRhIHN0cnVjdHVyZXMuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGp1bXAgb3ZlciB0byBgbW0vbWVtY29udHJvbC5jYCBhbmQgemVybyBpbiBhcm91bmQgdGhlIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhlICpyZWFsKiBsb2dpYyBraWNrcyBpbi4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBzaXR1YXRpb24gd2hlcmUgYSBtZW1vcnkgY2dyb3VwIGhhcyBleGNlZWRlZCBpdHMgaGlnaCBtZW1vcnkgbGltaXQuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBpbiB0aGVzZSBzaXR1YXRpb25zLiBJcyBpdCBpbnZva2luZyBPT00ga2lsbGVyLCB0aHJvdHRsaW5nLCBtaWdyYXRpbmcgcGFnZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgY29tbWVudHMgc2hvdWxkIGJlIGhlbHBmdWwsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIGFuZCB0aGUgc3BlY2lmaWMgYWN0aW9ucyBpdCB0YWtlcyB0byBlbmZvcmNlIHRoZSBtZW1vcnkgbGltaXRzLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBoYXJkIGxpbWl0LCBhIHNvZnQgbGltaXQsIG9yIHNvbWV0aGluZyBtb3JlIG51YW5jZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBzeXN0ZW0gcmVhY3RzLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvciBhbmQgcmVjbGFpbSBsb2dpYy4gSXMgaXQgYXR0ZW1wdGluZyB0byByZWNsYWltIHBhZ2VzIHNwZWNpZmljYWxseSBmcm9tIHRoaXMgY2dyb3VwPyBEb2VzIGl0IHBvdGVudGlhbGx5IGNhdXNlIHRoZSBPT00ga2lsbGVyIHRvIHNlbGVjdCBhIHRhc2sgZnJvbSB0aGlzIGNncm91cD8gSXQncyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhlIHN5c3RlbSBkb2Vzbid0IGdyaW5kIHRvIGEgaGFsdCB3aGVuIG1lbW9yeSBpcyBjb25zdHJhaW5lZC4gVGhpcyBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBwdXp6bGUsIGFuZCBpdCdzIGVzc2VudGlhbCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBpdCBhbGwgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NTozMi43MzQ5MDEzM1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogOTA1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTA1OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcXG4gOTA2OlxcdFxcbiA5MDc6XFx0XFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcXG4gOTA4OlxcdFxcdHJldHVybiBSRUFEX09OQ0UobXotXFx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xcbiA5MDk6XFx0fVxcbiA5MTA6XFx0XFxuIDkxMTpcXHR2b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKTtcXG4gOTEyOlxcdFxcbiA5MTM6XFx0c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG4gOTE0OlxcdHtcXG4gOTE1OlxcdFxcdGlmICh1bmxpa2VseShjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2gpKVxcbiA5MTY6XFx0XFx0XFx0X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spO1xcbiA5MTc6XFx0fVxcbiA5MTg6XFx0XFxuIDkxOTpcXHR1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiA5MjA6XFx0XFxuIDkyMTpcXHR2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiA5MjI6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICpwKTtcXG4gOTIzOlxcdFxcbiA5MjQ6XFx0dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ1OjMyLjczNTAzNjA5WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTExMjAwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgb3Zlci1oaWdoIGNvbmRpdGlvbnMgd2l0aGluIG1lbW9yeSBjZ3JvdXBzLiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAuIEknbGwganVtcCBzdHJhaWdodCBpbnRvIGBtbS9tZW1jb250cm9sLmNgIGFuZCB6ZXJvIGluIG9uIHRoYXQgZnVuY3Rpb24uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGxvZ2ljIGZvciB0aHJvdHRsaW5nIG9yIHBvc3NpYmx5IE9PTSBraWxsaW5nIHByb2Nlc3NlcyBpbiB0aGF0IGNncm91cCBoZXJlLiBJIHdhbnQgdG8gc2VlIGlmIHRoZSByZWNlbnQgY2hhbmdlcyBJ4oCZdmUgYmVlbiByZWFkaW5nIGFib3V0IGhhdmUgYWx0ZXJlZCB0aGUgd2F5IHRoaXMgYmVoYXZlcywgb3IgaWYgdGhlcmUncyBhbnkgbm92ZWwgb3B0aW1pemF0aW9uLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBiYWxhbmNlcyBwcmV2ZW50aW5nIHJ1bmF3YXkgbWVtb3J5IGNvbnN1bXB0aW9uIHdpdGggYWxsb3dpbmcgZm9yIGxlZ2l0aW1hdGUgYnVyc3RzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIGNncm91cCBoaWVyYXJjaHkgYW5kIHJlY2xhaW0gbWVjaGFuaXNtcy4gSG9wZWZ1bGx5LCB0aGUgY29kZSBpcyB3ZWxsLWNvbW1lbnRlZDsgb3RoZXJ3aXNlLCBJ4oCZbSBtZW50YWxseSBwcmVwYXJpbmcgdG8gbmF2aWdhdGUgYSBmZXcgbGV2ZWxzIG9mIGZ1bmN0aW9uIGNhbGxzIHRvIHBpZWNlIHRoZSBmbG93IHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDA4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NTozNS4yMjYxNTg5ODRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDIxNDIwMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05MDI9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkxMC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5MTE6dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTEyLVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI1MTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2hpZ2hfZGVsYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI1NTQtICovXFxubW0vbWVtY29udHJvbC5jOjI1NTU6dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG5tbS9tZW1jb250cm9sLmMtMjU1Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ1OjM2Ljk2ODMwNzAxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTM5MjcwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG1tL21lbWNvbnRyb2wuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBndXRzIG9mIGBtbS9tZW1jb250cm9sLmNgLiBTcGVjaWZpY2FsbHksIEknbSBob25pbmcgaW4gYXJvdW5kIGxpbmUgMjU1NS4gVGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgc29tZSBpbnRlcmVzdGluZyBiaXRzIHJlbGF0ZWQgdG8gbWVtb3J5IGNvbnRyb2wgYW5kIGFjY291bnRpbmcuIEknbSBleHBlY3RpbmcgdG8gZmluZCBjb3JlIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIHJlc291cmNlIG1hbmFnZW1lbnQsIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVjbGFpbWVkLCBvciBjaGFyZ2VkIHRvIHZhcmlvdXMgY29udHJvbCBncm91cHMuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGF0IGEgZGVlcCBsZXZlbC4gSeKAmW0gdGhpbmtpbmcgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGNvdWxkIGJlIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIHR1bmluZyBvciBwaW5wb2ludGluZyBib3R0bGVuZWNrcyBpbiBhIG1lbW9yeS1pbnRlbnNpdmUgd29ya2xvYWQuIEknbSBsb29raW5nIGZvciB0aGUgc3VidGxlIG51YW5jZXMgb2YgaG93IG1lbW9yeSBsaW1pdHMgYXJlIGVuZm9yY2VkLCBhbmQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggTlVNQSBhcmNoaXRlY3R1cmVzLCBvciBwZXJoYXBzIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgT09NIHNpdHVhdGlvbnMgdW5kZXIgbWVtb3J5IHByZXNzdXJlIGZyb20gY29udHJvbCBncm91cHMuIExldOKAmXMgc2VlIHdoYXQgZ2VtcyBsaW5lIDI1NTUgaXMgaG9sZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ1OjM4LjkyMjIzNjk2NloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjExODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1NTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1NTU6XFx0dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG4yNTU2OlxcdHtcXG4yNTU3OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGVuYWx0eV9qaWZmaWVzO1xcbjI1NTg6XFx0XFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XFxuMjU1OTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcXG4yNTYwOlxcdFxcdHVuc2lnbmVkIGludCBucl9wYWdlcyA9IGN1cnJlbnQtXFx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaDtcXG4yNTYxOlxcdFxcdGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG4yNTYyOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4yNTYzOlxcdFxcdGJvb2wgaW5fcmV0cnkgPSBmYWxzZTtcXG4yNTY0OlxcdFxcbjI1NjU6XFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG4yNTY2OlxcdFxcdGN1cnJlbnQtXFx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaCA9IDA7XFxuMjU2NzpcXHRcXG4yNTY4OlxcdHJldHJ5X3JlY2xhaW06XFxuMjU2OTpcXHRcXHQvKlxcbjI1NzA6XFx0XFx0ICogQmFpbCBpZiB0aGUgdGFzayBpcyBhbHJlYWR5IGV4aXRpbmcuIFVubGlrZSBtZW1vcnkubWF4LFxcbjI1NzE6XFx0XFx0ICogbWVtb3J5LmhpZ2ggZW5mb3JjZW1lbnQgaXNuJ3QgYXMgc3RyaWN0LCBhbmQgdGhlcmUgaXMgbm9cXG4yNTcyOlxcdFxcdCAqIE9PTSBraWxsZXIgaW52b2x2ZWQsIHdoaWNoIG1lYW5zIHRoZSBleGNlc3MgY291bGQgYWxyZWFkeVxcbjI1NzM6XFx0XFx0ICogYmUgbXVjaCBiaWdnZXIgKGFuZCBzdGlsbCBncm93aW5nKSB0aGFuIGl0IGNvdWxkIGZvclxcbjI1NzQ6XFx0XFx0ICogbWVtb3J5Lm1heDsgdGhlIGR5aW5nIHRhc2sgY291bGQgZ2V0IHN0dWNrIGluIGZydWl0bGVzc1xcbjI1NzU6XFx0XFx0ICogcmVjbGFpbSBmb3IgYSBsb25nIHRpbWUsIHdoaWNoIGlzbid0IGRlc2lyYWJsZS5cXG4yNTc2OlxcdFxcdCAqL1xcbjI1Nzc6XFx0XFx0aWYgKHRhc2tfaXNfZHlpbmcoKSlcXG4yNTc4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjI1Nzk6XFx0XFxuMjU4MDpcXHRcXHQvKlxcbjI1ODE6XFx0XFx0ICogVGhlIGFsbG9jYXRpbmcgdGFzayBzaG91bGQgcmVjbGFpbSBhdCBsZWFzdCB0aGUgYmF0Y2ggc2l6ZSwgYnV0IGZvclxcbjI1ODI6XFx0XFx0ICogc3Vic2VxdWVudCByZXRyaWVzIHdlIG9ubHkgd2FudCB0byBkbyB3aGF0J3MgbmVjZXNzYXJ5IHRvIHByZXZlbnQgb29tXFxuMjU4MzpcXHRcXHQgKiBvciBicmVhY2hpbmcgcmVzb3VyY2UgaXNvbGF0aW9uLlxcbjI1ODQ6XFx0XFx0ICpcXG4yNTg1OlxcdFxcdCAqIFRoaXMgaXMgZGlzdGluY3QgZnJvbSBtZW1vcnkubWF4IG9yIHBhZ2UgYWxsb2NhdG9yIGJlaGF2aW91ciBiZWNhdXNlXFxuMjU4NjpcXHRcXHQgKiBtZW1vcnkuaGlnaCBpcyBjdXJyZW50bHkgYmF0Y2hlZCwgd2hlcmVhcyBtZW1vcnkubWF4IGFuZCB0aGUgcGFnZVxcbjI1ODc6XFx0XFx0ICogYWxsb2NhdG9yIHJ1biBldmVyeSB0aW1lIGFuIGFsbG9jYXRpb24gaXMgbWFkZS5cXG4yNTg4OlxcdFxcdCAqL1xcbjI1ODk6XFx0XFx0bnJfcmVjbGFpbWVkID0gcmVjbGFpbV9oaWdoKG1lbWNnLFxcbjI1OTA6XFx0XFx0XFx0XFx0XFx0ICAgIGluX3JldHJ5ID8gU1dBUF9DTFVTVEVSX01BWCA6IG5yX3BhZ2VzLFxcbjI1OTE6XFx0XFx0XFx0XFx0XFx0ICAgIGdmcF9tYXNrKTtcXG4yNTkyOlxcdFxcbjI1OTM6XFx0XFx0LypcXG4yNTk0OlxcdFxcdCAqIG1lbW9yeS5oaWdoIGlzIGJyZWFjaGVkIGFuZCByZWNsYWltIGlzIHVuYWJsZSB0byBrZWVwIHVwLiBUaHJvdHRsZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NTozOC45MjI1NjQzNDZaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxOTYzMDQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBDb3JlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEJhc2VkIG9uIHRoZSB0YXNrIGF0IGhhbmQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtJ3MgaGFuZGxpbmcgbGFyZ2UgbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50LiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgY29yZSBzb3VyY2UgY29kZS4gSSdtIHRoaW5raW5nLCBsZXQncyBzdGFydCB3aXRoIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCdzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGludmVzdGlnYXRlIHRoZSBiZWhhdmlvciBvZiBodWdlIHBhZ2VzIGFuZCByZWxhdGVkIGFsbG9jYXRpb24gc3RyYXRlZ2llcy4gQWZ0ZXIgdGhhdCwgSSdsbCBuZWVkIHRvIGNoZWNrIGBtbS9tZW1vcnkuY2AgYXMgdGhpcyB3aWxsIHByb3ZpZGUgdGhlIGdlbmVyYWwgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrIGFuZCBjb21wbGVtZW50IHRoZSBzcGVjaWZpYyBodWdlIHBhZ2UgZGV0YWlscy4gQmV0d2VlbiB0aG9zZSB0d28sIEkgc2hvdWxkIGhhdmUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBiZWhhdmlvciBJJ20gYWZ0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ1OjQxLjI0MjE5NzQzOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTU3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzIwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzIwOlxcdFxcdH1cXG4xMzIxOlxcdFxcbjEzMjI6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSwgZm9saW8pO1xcbjEzMjM6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCB2bWEtXFx1MDAzZXZtX21tLCBnZnApKSB7XFxuMTMyNDpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjEzMjU6XFx0XFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLKTtcXG4xMzI2OlxcdFxcdFxcdGNvdW50X3ZtX2V2ZW50KFRIUF9GQVVMVF9GQUxMQkFDS19DSEFSR0UpO1xcbjEzMjc6XFx0XFx0XFx0Y291bnRfbXRocF9zdGF0KG9yZGVyLCBNVEhQX1NUQVRfQU5PTl9GQVVMVF9GQUxMQkFDSyk7XFxuMTMyODpcXHRcXHRcXHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLX0NIQVJHRSk7XFxuMTMyOTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzMwOlxcdFxcdH1cXG4xMzMxOlxcdFxcbjEzMzI6XFx0XFx0LypcXG4xMzMzOlxcdFxcdCAqIFRoZSBjaGFyZ2UgZ2ZwIGVuY29kZXMgVEhQIGFsbG9jYXRpb24gcG9saWN5IGFuZCBtYXkgbm90IGFsbG93XFxuMTMzNDpcXHRcXHQgKiBibG9ja2luZywgd2hpY2ggbWFrZXMgdHJ5X2NoYXJnZSBza2lwIGl0cyBzeW5jaHJvbm91cyBtZW1vcnkuaGlnaFxcbjEzMzU6XFx0XFx0ICogdGhyb3R0bGluZy4gRmF1bHQgY29udGV4dCBjYW4gc2xlZXAsIHNvIHNldHRsZSBhbnkgb3Zlci1oaWdoIGRlYnRcXG4xMzM2OlxcdFxcdCAqIGhlcmUgaW5zdGVhZCBvZiBsZXR0aW5nIHVzYWdlIGdyb3cgdW50aHJvdHRsZWQgdXAgdG8gbWVtb3J5Lm1heC5cXG4xMzM3OlxcdFxcdCAqL1xcbjEzMzg6XFx0XFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xcbjEzMzk6XFx0XFxuMTM0MDpcXHRcXHRpZiAoZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7XFxuMTM0MTpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjEzNDI6XFx0XFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLKTtcXG4xMzQzOlxcdFxcdFxcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spO1xcbjEzNDQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTM0NTpcXHRcXHR9XFxuMTM0NjpcXHRcXG4xMzQ3OlxcdFxcdGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKGZvbGlvLCBnZnApO1xcbjEzNDg6XFx0XFxuMTM0OTpcXHQgICAgICAgLypcXG4xMzUwOlxcdFxcdCogV2hlbiBhIGZvbGlvIGlzIG5vdCB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb24gKF9fR0ZQX1pFUk8gbm90IHVzZWQpXFxuMTM1MTpcXHRcXHQqIG9yIHVzZXIgZm9saW9zIHJlcXVpcmUgc3BlY2lhbCBoYW5kbGluZywgZm9saW9femVyb191c2VyKCkgaXMgdXNlZCB0b1xcbjEzNTI6XFx0XFx0KiBtYWtlIHN1cmUgdGhhdCB0aGUgcGFnZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmYXVsdGluZyBhZGRyZXNzIHdpbGwgYmVcXG4xMzUzOlxcdFxcdCogaG90IGluIHRoZSBjYWNoZSBhZnRlciB6ZXJvaW5nLlxcbjEzNTQ6XFx0XFx0Ki9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6NDEuMjQyNDk0ODk4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDMyNjcxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYG1tL21lbW9yeS5jYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBwb3RlbnRpYWwgZm9yIGlzc3VlcyBhcm91bmQgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMuIEknbSB0aGlua2luZyBzcGVjaWZpYyBhcmVhcyB3aXRoaW4gdGhhdCBmaWxlIGFyZSBsaWtlbHkgdG8gaG9sZCB0aGUgYW5zd2Vycy4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGUgc2VjdGlvbnMgYXJvdW5kIGxpbmVzIDUyNjAgYW5kIDUzNjAgbWlnaHQgYmUgZ29vZCBzdGFydGluZyBwb2ludHMuIFRoZXNlIGFyZSBsaWtlbHkgdG8gYmUgYXJvdW5kIHNvbWUgY3JpdGljYWwgYXNwZWN0cyBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHByb2Nlc3MsIG9yIHBlcmhhcHMgaGFuZGxpbmcgb2Ygc3BlY2lmaWMgbWVtb3J5IHJlZ2lvbnMuIEknbGwgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IGp1bXBzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI1MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6NDMuMTQ1NzY1OTE2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NjI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MjYwOlxcdFxcdH1cXG41MjYxOlxcdFxcbjUyNjI6XFx0XFx0LyogTm8gbmVlZCB0byBpbnZhbGlkYXRlIC0gaXQgd2FzIG5vbi1wcmVzZW50IGJlZm9yZSAqL1xcbjUyNjM6XFx0XFx0dXBkYXRlX21tdV9jYWNoZV9yYW5nZSh2bWYsIHZtYSwgYWRkcmVzcywgcHRlcCwgbnJfcGFnZXMpO1xcbjUyNjQ6XFx0dW5sb2NrOlxcbjUyNjU6XFx0XFx0aWYgKHZtZi1cXHUwMDNlcHRlKVxcbjUyNjY6XFx0XFx0XFx0cHRlX3VubWFwX3VubG9jayh2bWYtXFx1MDAzZXB0ZSwgdm1mLVxcdTAwM2VwdGwpO1xcbjUyNjc6XFx0b3V0OlxcbjUyNjg6XFx0XFx0aWYgKHNpKVxcbjUyNjk6XFx0XFx0XFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcXG41MjcwOlxcdFxcdC8qXFxuNTI3MTpcXHRcXHQgKiBMYXJnZSBmb2xpbyBzd2FwaW4gY2hhcmdlcyB3aXRoIHRoZSBUSFAgYWxsb2NhdGlvbiBnZnAsIHdoaWNoIG1heVxcbjUyNzI6XFx0XFx0ICogbm90IGFsbG93IGJsb2NraW5nLCBtYWtpbmcgdHJ5X2NoYXJnZSBza2lwIGl0cyBzeW5jaHJvbm91c1xcbjUyNzM6XFx0XFx0ICogbWVtb3J5LmhpZ2ggdGhyb3R0bGluZy4gU2V0dGxlIGFueSBvdmVyLWhpZ2ggZGVidCBoZXJlIGluc3RlYWQsXFxuNTI3NDpcXHRcXHQgKiB3aGVyZSBzbGVlcGluZyBpcyBzYWZlOiB0aGUgZm9saW8gbG9jaywgdGhlIHBhZ2UgdGFibGUgbG9jayBhbmRcXG41Mjc1OlxcdFxcdCAqIHRoZSBzd2FwIGRldmljZSByZWZlcmVuY2UgaGF2ZSBhbGwgYmVlbiBkcm9wcGVkLlxcbjUyNzY6XFx0XFx0ICovXFxuNTI3NzpcXHRcXHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XFxuNTI3ODpcXHRcXHRyZXR1cm4gcmV0O1xcbjUyNzk6XFx0b3V0X25vbWFwOlxcbjUyODA6XFx0XFx0aWYgKHZtZi1cXHUwMDNlcHRlKVxcbjUyODE6XFx0XFx0XFx0cHRlX3VubWFwX3VubG9jayh2bWYtXFx1MDAzZXB0ZSwgdm1mLVxcdTAwM2VwdGwpO1xcbjUyODI6XFx0b3V0X3BhZ2U6XFxuNTI4MzpcXHRcXHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKVxcbjUyODQ6XFx0XFx0XFx0Zm9saW9fZnJlZV9zd2FwKGZvbGlvKTtcXG41Mjg1OlxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuNTI4NjpcXHRvdXRfcmVsZWFzZTpcXG41Mjg3OlxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuNTI4ODpcXHRcXHRpZiAoZm9saW8gIT0gc3dhcGNhY2hlKSB7XFxuNTI4OTpcXHRcXHRcXHRmb2xpb191bmxvY2soc3dhcGNhY2hlKTtcXG41MjkwOlxcdFxcdFxcdGZvbGlvX3B1dChzd2FwY2FjaGUpO1xcbjUyOTE6XFx0XFx0fVxcbjUyOTI6XFx0XFx0aWYgKHNpKVxcbjUyOTM6XFx0XFx0XFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcXG41Mjk0OlxcdFxcdHJldHVybiByZXQ7XFxuNTI5NTpcXHR9XFxuNTI5NjpcXHRcXG41Mjk3OlxcdHN0YXRpYyBib29sIHB0ZV9yYW5nZV9ub25lKHB0ZV90ICpwdGUsIGludCBucl9wYWdlcylcXG41Mjk4OlxcdHtcXG41Mjk5OlxcdFxcdGludCBpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NTo0My4xNDYxNjM3ODZaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDA4MDAwOTk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIGBhbGxvY19hbm9uX2ZvbGlvYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGFub255bW91cyBmb2xpbyBhbGxvY2F0aW9uIHByb2Nlc3MuIE15IGZpcnN0IHN0b3AgaXMgZGVmaW5pdGVseSBgYWxsb2NfYW5vbl9mb2xpb2AsIHNvIEknbGwgYmUgaGVhZGluZyBzdHJhaWdodCB0byBgbW0vbWVtb3J5LmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBhbm9ueW1vdXMgcGFnZS9mb2xpbyBhbGxvY2F0aW9ucy4gSSBrbm93IHRoZSBiYXNpY3MsIG9mIGNvdXJzZSwgYnV0IHRoZSBkZXZpbCBpcyBhbHdheXMgaW4gdGhlIGRldGFpbHMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGl0J3MgZGVhbGluZyB3aXRoIHRoZSBhbGxvY2F0aW9uIGl0c2VsZiwgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcGFnZSBjYWNoZSAoaWYgYXQgYWxsLCBmb3IgdGhpcyBhbm9ueW1vdXMgY2FzZSksIGFuZCB0aGUgdmFyaW91cyBjb25zaWRlcmF0aW9ucyBpdCB0YWtlcyBpbnRvIGFjY291bnQsIGxpa2UgTlVNQSwgem9uZXMsIGFuZCBwb3RlbnRpYWwgbWVtb3J5IHByZXNzdXJlLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IG9wdGltaXphdGlvbnMgb3IgbG9jayBjb250ZW50aW9uIHBvaW50cyBJIG1pZ2h0IGhhdmUgbWlzc2VkIGluIHByZXZpb3VzIHJldmlld3MuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byBzYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ1OjQ3LjIyNjE3Njg3MloiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDI3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTM1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTM1MDpcXHRcXHRcXHRhZGRyID0gQUxJR05fRE9XTih2bWYtXFx1MDAzZWFkZHJlc3MsIFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7XFxuNTM1MTpcXHRcXHRcXHRpZiAocHRlX3JhbmdlX25vbmUocHRlICsgcHRlX2luZGV4KGFkZHIpLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSlcXG41MzUyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjUzNTM6XFx0XFx0XFx0b3JkZXIgPSBuZXh0X29yZGVyKFxcdTAwMjZvcmRlcnMsIG9yZGVyKTtcXG41MzU0OlxcdFxcdH1cXG41MzU1OlxcdFxcbjUzNTY6XFx0XFx0cHRlX3VubWFwKHB0ZSk7XFxuNTM1NzpcXHRcXG41MzU4OlxcdFxcdGlmICghb3JkZXJzKVxcbjUzNTk6XFx0XFx0XFx0Z290byBmYWxsYmFjaztcXG41MzYwOlxcdFxcbjUzNjE6XFx0XFx0LyogVHJ5IGFsbG9jYXRpbmcgdGhlIGhpZ2hlc3Qgb2YgdGhlIHJlbWFpbmluZyBvcmRlcnMuICovXFxuNTM2MjpcXHRcXHRnZnAgPSB2bWFfdGhwX2dmcF9tYXNrKHZtYSk7XFxuNTM2MzpcXHRcXHR3aGlsZSAob3JkZXJzKSB7XFxuNTM2NDpcXHRcXHRcXHRhZGRyID0gQUxJR05fRE9XTih2bWYtXFx1MDAzZWFkZHJlc3MsIFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7XFxuNTM2NTpcXHRcXHRcXHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2bWEsIGFkZHIpO1xcbjUzNjY6XFx0XFx0XFx0aWYgKCFmb2xpbylcXG41MzY3OlxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG41MzY4OlxcdFxcdFxcdGlmIChtZW1fY2dyb3VwX2NoYXJnZShmb2xpbywgdm1hLVxcdTAwM2V2bV9tbSwgZ2ZwKSkge1xcbjUzNjk6XFx0XFx0XFx0XFx0Y291bnRfbXRocF9zdGF0KG9yZGVyLCBNVEhQX1NUQVRfQU5PTl9GQVVMVF9GQUxMQkFDS19DSEFSR0UpO1xcbjUzNzA6XFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG41MzcxOlxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG41MzcyOlxcdFxcdFxcdH1cXG41MzczOlxcdFxcdFxcdC8qIFNhbWUgcmVhc29uaW5nIGFzIGluIHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpLiAqL1xcbjUzNzQ6XFx0XFx0XFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xcbjUzNzU6XFx0XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMSBcXHUwMDI2XFx1MDAyNiBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChmb2xpbykpIHtcXG41Mzc2OlxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuNTM3NzpcXHRcXHRcXHRcXHRnb3RvIGZhbGxiYWNrO1xcbjUzNzg6XFx0XFx0XFx0fVxcbjUzNzk6XFx0XFx0XFx0Zm9saW9fdGhyb3R0bGVfc3dhcHJhdGUoZm9saW8sIGdmcCk7XFxuNTM4MDpcXHRcXHRcXHQvKlxcbjUzODE6XFx0XFx0XFx0ICogV2hlbiBhIGZvbGlvIGlzIG5vdCB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb25cXG41MzgyOlxcdFxcdFxcdCAqIChfX0dGUF9aRVJPIG5vdCB1c2VkKSBvciB1c2VyIGZvbGlvcyByZXF1aXJlIHNwZWNpYWxcXG41MzgzOlxcdFxcdFxcdCAqIGhhbmRsaW5nLCBmb2xpb196ZXJvX3VzZXIoKSBpcyB1c2VkIHRvIG1ha2Ugc3VyZVxcbjUzODQ6XFx0XFx0XFx0ICogdGhhdCB0aGUgcGFnZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmYXVsdGluZyBhZGRyZXNzXFxuNTM4NTpcXHRcXHRcXHQgKiB3aWxsIGJlIGhvdCBpbiB0aGUgY2FjaGUgYWZ0ZXIgemVyb2luZy5cXG41Mzg2OlxcdFxcdFxcdCAqL1xcbjUzODc6XFx0XFx0XFx0aWYgKHVzZXJfYWxsb2NfbmVlZHNfemVyb2luZygpKVxcbjUzODg6XFx0XFx0XFx0XFx0Zm9saW9femVyb191c2VyKGZvbGlvLCB2bWYtXFx1MDAzZWFkZHJlc3MpO1xcbjUzODk6XFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NTo0Ny4yMjY1ODE1MjJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUwMjcyOTgzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGluc2VydGluZyBjYWxscyB0byBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpYCBpbnRvIGEgZmV3IGtleSBhcmVhczogYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAsIGBkb19zd2FwX3BhZ2VgLCBhbmQgYGFsbG9jX2Fub25fZm9saW9gLiBUaGUgcmF0aW9uYWxlIGlzIHRoYXQgVEhQIGFsbG9jYXRpb25zLCBpZiB1c2luZyBub24tYmxvY2tpbmcgR0ZQIGZsYWdzLCBtaWdodCBieXBhc3MgdGhlIHN5bmNocm9ub3VzIGBtZW1vcnkuaGlnaGAgdGhyb3R0bGluZyB0aGF0IG5vcm1hbGx5IGhhcHBlbnMgaW4gYHRyeV9jaGFyZ2VgLiBUaGUgcGF0Y2gncyBnb2FsIGlzIHRvIGZvcmNlIHN5bmNocm9ub3VzIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgIGNhbGxzIGluIHRoZXNlIGZhdWx0IGNvbnRleHRzLCBidXQgb25seSB3aGVuIHNsZWVwaW5nIGlzIHBlcm1pdHRlZC5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeS4gRG9lcyB0aGlzIGNoYW5nZSBleHBvc2UgYW55IG5ldyByaXNrcyB0aGVyZT8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OlxuXG4qICAgKipVbmluaXRpYWxpemVkIG1lbW9yeSBjb3BpZWQgdG8gdXNlcnNwYWNlPyoqIE5vLCBpdCBkb2Vzbid0IGxvb2sgbGlrZSBhbnkgdW5pbml0aWFsaXplZCBkYXRhIGlzIGJlaW5nIGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlLlxuKiAgICoqVW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIHJlYWQ/KiogTm8sIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgIGp1c3QgY2hlY2tzIGEgY291bnRlciAoYGN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoYCkgYW5kIGNhbGxzIGByZWNsYWltX2hpZ2hgIGlmIHRoZSBjb3VudGVyIGlzbid0IHplcm8uIFRoYXQgY291bnRlcidzIHZhbHVlIGlzIGNlcnRhaW5seSBpbml0aWFsaXplZCBlYXJsaWVyLCBzbyByZWFkaW5nIGl0IGlzIHNhZmUuXG4qICAgKipCdWZmZXIgYm91bmRzIGFsdGVyZWQsIGFsbG93aW5nIGZvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzPyoqIE5vLCBub3RoaW5nIGxpa2UgdGhhdCBpcyBoYXBwZW5pbmcgaGVyZS5cbiogICAqKkZvbGlvIHplcm9pbmcvaW5pdGlhbGl6YXRpb24gY2hhbmdlZD8qKiBOb3BlLCB0aG9zZSBvcGVyYXRpb25zIChgZm9saW9femVyb191c2VyYCBldGMuKSBhcmUgY29tcGxldGVseSB1bnRvdWNoZWQuXG5cbkJhc2VkIG9uIHRoaXMsIGl0IHNlZW1zIHRoaXMgaXMgKipub3QqKiBnb2luZyB0byBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd291bGQgYmUgcmVsYXRlZCB0byBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dHMgKHRob3VnaCB0aGUgY29tbWVudHMgc3VnZ2VzdCB0aGlzIGlzIG5vdyBzYWZlKSBvciwgbW9yZSBsaWtlbHksIGlzc3VlcyBhcm91bmQgbWVtb3J5IHRocm90dGxpbmcvcmVjbGFpbSBiZWhhdmlvci4gVGhlc2UgYXJlIGZpcm1seSBpbiB0aGUgZG9tYWluIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSwgYW5kIGxvY2tpbmcgc2VtYW50aWNzIOKAkyB0aGluZ3MgdGhhdCBLQVNBTiwgTE9DS0RFUCwgV0FSTiwgYW5kIG90aGVyIHN0YW5kYXJkIHRvb2xzIGFyZSBkZXNpZ25lZCB0byBjYXRjaC4gVGhpcyBpcyBub3QgYSBLTVNBTiBjb25jZXJuLlxuXG5TbywgSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgYE5lZWRzS01TQU4gPSBmYWxzZWAuXG5cbk5vdywgbGV0J3Mgc29saWRpZnkgdGhlIEtNU0FOIHJlYXNvbmluZzogVGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhlIHRocm90dGxpbmcgb2YgbWVtb3J5IGNncm91cCB1c2FnZSB3aGVuIG92ZXIgdGhlIGhpZ2ggbGltaXQgaW4gVEhQIGFuZCBzd2FwIGZhdWx0IHBhdGhzIGJ5IGFkZGluZyBjYWxscyB0byBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYC4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgYmVjYXVzZSBpdCBkb2VzIG5vdCByZXN1bHQgaW4gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgaGFuZGxpbmcsIGRhdGEgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbi4gVGhlIGNoYW5nZXMgYXJlIHN0YW5kYXJkIG1lbW9yeSBtYW5hZ2VtZW50LXJlbGF0ZWQgbW9kaWZpY2F0aW9ucywgYW5kIGFueSBwb3RlbnRpYWwgc2xlZXAvbG9ja2luZyBpc3N1ZXMsIGFyZSBwcm9wZXJseSBhZGRyZXNzZWQgYnkgS0FTQU4vTE9DS0RFUCBldGMuXG5cbkFscmlnaHQsIHRoYXQgY292ZXJzIGl0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk3MCwiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NTo1Mi43MjkzMTQ1MjhaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKWAgaW4gYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpYCwgYGRvX3N3YXBfcGFnZSgpYCwgYW5kIGBhbGxvY19hbm9uX2ZvbGlvKClgIHRvIGVuZm9yY2Ugc3luY2hyb25vdXMgYG1lbW9yeS5oaWdoYCBjZ3JvdXAgdGhyb3R0bGluZyBkdXJpbmcgcGFnZSBmYXVsdCBoYW5kbGluZyB3aGVuIGNoYXJnaW5nIGZvbGlvcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IHBlcnRhaW4gdG8gbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLCByZWNsYW1hdGlvbiwgYW5kIHRocm90dGxpbmcgY29udHJvbCBmbG93LiBUaGV5IGRvIG5vdCBhbGxvY2F0ZSwgbW9kaWZ5LCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHN0cnVjdHVyZXMsIG5vciBkbyB0aGV5IGludHJvZHVjZSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBzbGVlcGluZy1pbi1hdG9taWMsIG9yIGxpZmV0aW1lIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChLQVNBTiwgTE9DS0RFUCwgREVCVUdfQVRPTUlDX1NMRUVQKSwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKWAgaW4gYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpYCwgYGRvX3N3YXBfcGFnZSgpYCwgYW5kIGBhbGxvY19hbm9uX2ZvbGlvKClgIHRvIGVuZm9yY2Ugc3luY2hyb25vdXMgYG1lbW9yeS5oaWdoYCBjZ3JvdXAgdGhyb3R0bGluZyBkdXJpbmcgcGFnZSBmYXVsdCBoYW5kbGluZyB3aGVuIGNoYXJnaW5nIGZvbGlvcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IHBlcnRhaW4gdG8gbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLCByZWNsYW1hdGlvbiwgYW5kIHRocm90dGxpbmcgY29udHJvbCBmbG93LiBUaGV5IGRvIG5vdCBhbGxvY2F0ZSwgbW9kaWZ5LCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHN0cnVjdHVyZXMsIG5vciBkbyB0aGV5IGludHJvZHVjZSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBzbGVlcGluZy1pbi1hdG9taWMsIG9yIGxpZmV0aW1lIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChLQVNBTiwgTE9DS0RFUCwgREVCVUdfQVRPTUlDX1NMRUVQKSwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow8smf8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 13:25:07 +0000 UTC FinishedAt: 2026-09-05 13:45:54 +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": "6e0803a170552a6ab48538721df6467582fc940c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "TRANSPARENT_HUGEPAGE", "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": "6e0803a170552a6ab48538721df6467582fc940c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "TRANSPARENT_HUGEPAGE", "SWAP" ], "series_id": "edea1aeb-8507-496f-8a92-3e2256c261c7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__mem_cgroup_handle_over_high", "do_swap_page", "do_huge_pmd_anonymous_page", "do_huge_pmd_wp_page" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaCYjMzQ7LAogICAgJiMzNDtkb19zd2FwX3BhZ2UmIzM0OywKICAgICYjMzQ7ZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UmIzM0OywKICAgICYjMzQ7ZG9faHVnZV9wbWRfd3BfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKWAgaW4gYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpYCwgYGRvX3N3YXBfcGFnZSgpYCwgYW5kIGBhbGxvY19hbm9uX2ZvbGlvKClgIHRvIGVuZm9yY2Ugc3luY2hyb25vdXMgYG1lbW9yeS5oaWdoYCBjZ3JvdXAgdGhyb3R0bGluZyBkdXJpbmcgcGFnZSBmYXVsdCBoYW5kbGluZyB3aGVuIGNoYXJnaW5nIGZvbGlvcy5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBwZXJ0YWluIHRvIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZywgcmVjbGFtYXRpb24sIGFuZCB0aHJvdHRsaW5nIGNvbnRyb2wgZmxvdy4gVGhleSBkbyBub3QgYWxsb2NhdGUsIG1vZGlmeSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSBzdHJ1Y3R1cmVzLCBub3IgZG8gdGhleSBpbnRyb2R1Y2Uga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgc2xlZXBpbmctaW4tYXRvbWljLCBvciBsaWZldGltZSBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAoS0FTQU4sIExPQ0tERVAsIERFQlVHX0FUT01JQ19TTEVFUCksIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBtbS9odWdlX21lbW9yeS5jIGFuZCBtbS9tZW1vcnkuYyBieSBpbnZva2luZyBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goKSBkdXJpbmcgUE1EIFRIUCBhbm9ueW1vdXMgYWxsb2NhdGlvbiwgbVRIUCBhbm9ueW1vdXMgYWxsb2NhdGlvbiwgYW5kIHN3YXAtaW4gcGFnZSBmYXVsdCBwYXRocy4gVGhpcyBlbnN1cmVzIG1lbW9yeS5oaWdoIHRocm90dGxpbmcgZGVidCBpcyBzeW5jaHJvbm91c2x5IGhhbmRsZWQgaW4gc2xlZXBpbmcgZmF1bHQgY29udGV4dHMgd2hlbiBub24tYmxvY2tpbmcgR0ZQIG1hc2tzIHdlcmUgdXNlZCBkdXJpbmcgY2hhcmdpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBNTSBjb2RlIHBhdGhzIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gdmVyaWZ5IGxvY2tpbmcgaW52YXJpYW50cyBhbmQgdGhyb3R0bGluZyBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNlMTRlOGE5NDE5MTVkNjA4Mzc4NWY2ZmVkYTA3NzE4ZjU0ZGFmOTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDEzOjQ0OjI2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCBjZWQ0MDBmNzJkNDNhLi41NDNiYTRhNzRkYzNhIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTEzMjksNiAmIzQzOzEzMjksMTQgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBjaGFyZ2UgZ2ZwIGVuY29kZXMgVEhQIGFsbG9jYXRpb24gcG9saWN5IGFuZCBtYXkgbm90IGFsbG93XG4mIzQzO1x0ICogYmxvY2tpbmcsIHdoaWNoIG1ha2VzIHRyeV9jaGFyZ2Ugc2tpcCBpdHMgc3luY2hyb25vdXMgbWVtb3J5LmhpZ2hcbiYjNDM7XHQgKiB0aHJvdHRsaW5nLiBGYXVsdCBjb250ZXh0IGNhbiBzbGVlcCwgc28gc2V0dGxlIGFueSBvdmVyLWhpZ2ggZGVidFxuJiM0MztcdCAqIGhlcmUgaW5zdGVhZCBvZiBsZXR0aW5nIHVzYWdlIGdyb3cgdW50aHJvdHRsZWQgdXAgdG8gbWVtb3J5Lm1heC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG4mIzQzO1xuIFx0aWYgKGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKGZvbGlvKSkge1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRjb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0spO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDhiMGMyYzczNWQzZGUuLmRjOTdjZjBlYmZiMzAgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmNcbkBAIC01MjY3LDYgJiM0Mzs1MjY3LDE0IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIG91dDpcbiBcdGlmIChzaSlcbiBcdFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIExhcmdlIGZvbGlvIHN3YXBpbiBjaGFyZ2VzIHdpdGggdGhlIFRIUCBhbGxvY2F0aW9uIGdmcCwgd2hpY2ggbWF5XG4mIzQzO1x0ICogbm90IGFsbG93IGJsb2NraW5nLCBtYWtpbmcgdHJ5X2NoYXJnZSBza2lwIGl0cyBzeW5jaHJvbm91c1xuJiM0MztcdCAqIG1lbW9yeS5oaWdoIHRocm90dGxpbmcuIFNldHRsZSBhbnkgb3Zlci1oaWdoIGRlYnQgaGVyZSBpbnN0ZWFkLFxuJiM0MztcdCAqIHdoZXJlIHNsZWVwaW5nIGlzIHNhZmU6IHRoZSBmb2xpbyBsb2NrLCB0aGUgcGFnZSB0YWJsZSBsb2NrIGFuZFxuJiM0MztcdCAqIHRoZSBzd2FwIGRldmljZSByZWZlcmVuY2UgaGF2ZSBhbGwgYmVlbiBkcm9wcGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcbiBcdHJldHVybiByZXQ7XG4gb3V0X25vbWFwOlxuIFx0aWYgKHZtZi1cdTAwM2VwdGUpXG5AQCAtNTM2Miw2ICYjNDM7NTM3MCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRnb3RvIG5leHQ7XG4gXHRcdH1cbiYjNDM7XHRcdC8qIFNhbWUgcmVhc29uaW5nIGFzIGluIHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpLiAqL1xuJiM0MztcdFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xuIFx0XHRpZiAob3JkZXIgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKGZvbGlvKSkge1xuIFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdFx0Z290byBmYWxsYmFjaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2gmIzM0OywKICAgICYjMzQ7ZG9fc3dhcF9wYWdlJiMzNDssCiAgICAmIzM0O2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlJiMzNDssCiAgICAmIzM0O2RvX2h1Z2VfcG1kX3dwX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBtbS9odWdlX21lbW9yeS5jIGFuZCBtbS9tZW1vcnkuYyBieSBpbnZva2luZyBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goKSBkdXJpbmcgUE1EIFRIUCBhbm9ueW1vdXMgYWxsb2NhdGlvbiwgbVRIUCBhbm9ueW1vdXMgYWxsb2NhdGlvbiwgYW5kIHN3YXAtaW4gcGFnZSBmYXVsdCBwYXRocy4gVGhpcyBlbnN1cmVzIG1lbW9yeS5oaWdoIHRocm90dGxpbmcgZGVidCBpcyBzeW5jaHJvbm91c2x5IGhhbmRsZWQgaW4gc2xlZXBpbmcgZmF1bHQgY29udGV4dHMgd2hlbiBub24tYmxvY2tpbmcgR0ZQIG1hc2tzIHdlcmUgdXNlZCBkdXJpbmcgY2hhcmdpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBNTSBjb2RlIHBhdGhzIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gdmVyaWZ5IGxvY2tpbmcgaW52YXJpYW50cyBhbmQgdGhyb3R0bGluZyBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNlMTRlOGE5NDE5MTVkNjA4Mzc4NWY2ZmVkYTA3NzE4ZjU0ZGFmOTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDEzOjQ0OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggY2VkNDAwZjcyZDQzYS4uNTQzYmE0YTc0ZGMzYSAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0xMzI5LDYgJiM0MzsxMzI5LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBjaGFyZ2UgZ2ZwIGVuY29kZXMgVEhQIGFsbG9jYXRpb24gcG9saWN5IGFuZCBtYXkgbm90IGFsbG93CiYjNDM7CSAqIGJsb2NraW5nLCB3aGljaCBtYWtlcyB0cnlfY2hhcmdlIHNraXAgaXRzIHN5bmNocm9ub3VzIG1lbW9yeS5oaWdoCiYjNDM7CSAqIHRocm90dGxpbmcuIEZhdWx0IGNvbnRleHQgY2FuIHNsZWVwLCBzbyBzZXR0bGUgYW55IG92ZXItaGlnaCBkZWJ0CiYjNDM7CSAqIGhlcmUgaW5zdGVhZCBvZiBsZXR0aW5nIHVzYWdlIGdyb3cgdW50aHJvdHRsZWQgdXAgdG8gbWVtb3J5Lm1heC4KJiM0MzsJICovCiYjNDM7CW1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTsKJiM0MzsKIAlpZiAoZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCWNvdW50X3ZtX2V2ZW50KFRIUF9GQVVMVF9GQUxMQkFDSyk7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDhiMGMyYzczNWQzZGUuLmRjOTdjZjBlYmZiMzAgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC01MjY3LDYgJiM0Mzs1MjY3LDE0IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogb3V0OgogCWlmIChzaSkKIAkJcHV0X3N3YXBfZGV2aWNlKHNpKTsKJiM0MzsJLyoKJiM0MzsJICogTGFyZ2UgZm9saW8gc3dhcGluIGNoYXJnZXMgd2l0aCB0aGUgVEhQIGFsbG9jYXRpb24gZ2ZwLCB3aGljaCBtYXkKJiM0MzsJICogbm90IGFsbG93IGJsb2NraW5nLCBtYWtpbmcgdHJ5X2NoYXJnZSBza2lwIGl0cyBzeW5jaHJvbm91cwomIzQzOwkgKiBtZW1vcnkuaGlnaCB0aHJvdHRsaW5nLiBTZXR0bGUgYW55IG92ZXItaGlnaCBkZWJ0IGhlcmUgaW5zdGVhZCwKJiM0MzsJICogd2hlcmUgc2xlZXBpbmcgaXMgc2FmZTogdGhlIGZvbGlvIGxvY2ssIHRoZSBwYWdlIHRhYmxlIGxvY2sgYW5kCiYjNDM7CSAqIHRoZSBzd2FwIGRldmljZSByZWZlcmVuY2UgaGF2ZSBhbGwgYmVlbiBkcm9wcGVkLgomIzQzOwkgKi8KJiM0MzsJbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpOwogCXJldHVybiByZXQ7CiBvdXRfbm9tYXA6CiAJaWYgKHZtZi0mZ3Q7cHRlKQpAQCAtNTM2Miw2ICYjNDM7NTM3MCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJCQlmb2xpb19wdXQoZm9saW8pOwogCQkJZ290byBuZXh0OwogCQl9CiYjNDM7CQkvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi8KJiM0MzsJCW1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTsKIAkJaWYgKG9yZGVyICZndDsgMSAmYW1wOyZhbXA7IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKGZvbGlvKSkgewogCQkJZm9saW9fcHV0KGZvbGlvKTsKIAkJCWdvdG8gZmFsbGJhY2s7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjQKCQkJCQkJCW91dHB1dDogMTA0CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZy4gVGhlIGRpZmYgc2hvd3MgbW9kaWZpY2F0aW9ucyBhY3Jvc3MgdGhyZWUgZnVuY3Rpb25zIGluIHR3byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZpbGVzLiBJIHNlZSBhZGRpdGlvbnMgb2YgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtgIGluIGBtbS9odWdlX21lbW9yeS5jYCB3aXRoaW4gYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpYCwgYW5kIGluIGBtbS9tZW1vcnkuY2Agd2l0aGluIGBkb19zd2FwX3BhZ2UoKWAgYXQgbGFiZWwgYG91dDpgLCBhbmQgYWxzbyBpbiBgYWxsb2NfYW5vbl9mb2xpbygpYC4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGFib3V0IGhhbmRsaW5nIG1lbW9yeSBjZ3JvdXAgb3Zlci1oaWdoIGNvbmRpdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY291bnRpbmcgd2l0aGluIGNncm91cHMsIHNwZWNpZmljYWxseSB3aGVuIGEgY2dyb3VwIGlzIGV4Y2VlZGluZyBpdHMgbWVtb3J5IGxpbWl0cyBhbmQgdGhlIHN5c3RlbSBpcyB0cnlpbmcgdG8gYWxsb2NhdGUgbW9yZSBtZW1vcnkuIFRoZSBgR0ZQX0tFUk5FTGAgZmxhZyBpcyBjcnVjaWFsLCBzdWdnZXN0aW5nIHRoaXMgaXMgaGFwcGVuaW5nIGZyb20ga2VybmVsLXNwYWNlIGFsbG9jYXRpb25zLiBOb3csIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZ3Jhc3AgdGhlIHByZWNpc2UgY29udGV4dCBvZiB0aGVzZSBhZGRpdGlvbnMgd2l0aGluIGVhY2ggZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGV4YWN0bHkgdGhlc2UgaG9va3MgYXJlIGJlaW5nIGFkZGVkIGluIHJlbGF0aW9uIHRvIHRoZSBhbGxvY2F0aW9uIHBhdGhzLCBhbmQgd2hhdCB0aGUgc3Vycm91bmRpbmcgbG9naWMgaXMuIFdoYXQgaXMgdGhlIHByZWNpc2UgbWVtb3J5IGFsbG9jYXRpb24gcGF0aCBiZWluZyB0b3VjaGVkLCBhbmQgd2hhdCBpcyBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKClgIGRvaW5nLCBleGFjdGx5PyBJcyBpdCBhIHJhdGUtbGltaXRpbmcgbWVjaGFuaXNtLCBhIGRlbmlhbCBvZiBzZXJ2aWNlIHByZXZlbnRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGluc3BlY3QgdGhlIGNvZGUgbW9yZSBjYXJlZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzE1Olx0XG4xMzE2Olx0XHRpZiAodW5saWtlbHkoIWZvbGlvKSkge1xuMTMxNzpcdFx0XHRjb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0spO1xuMTMxODpcdFx0XHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLKTtcbjEzMTk6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMzIwOlx0XHR9XG4xMzIxOlx0XG4xMzIyOlx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pLCBmb2xpbyk7XG4xMzIzOlx0XHRpZiAobWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIHZtYS1cdTAwM2V2bV9tbSwgZ2ZwKSkge1xuMTMyNDpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMTMyNTpcdFx0XHRjb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0spO1xuMTMyNjpcdFx0XHRjb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0tfQ0hBUkdFKTtcbjEzMjc6XHRcdFx0Y291bnRfbXRocF9zdGF0KG9yZGVyLCBNVEhQX1NUQVRfQU5PTl9GQVVMVF9GQUxMQkFDSyk7XG4xMzI4Olx0XHRcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0tfQ0hBUkdFKTtcbjEzMjk6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMzMwOlx0XHR9XG4xMzMxOlx0XG4xMzMyOlx0XHQvKlxuMTMzMzpcdFx0ICogVGhlIGNoYXJnZSBnZnAgZW5jb2RlcyBUSFAgYWxsb2NhdGlvbiBwb2xpY3kgYW5kIG1heSBub3QgYWxsb3dcbjEzMzQ6XHRcdCAqIGJsb2NraW5nLCB3aGljaCBtYWtlcyB0cnlfY2hhcmdlIHNraXAgaXRzIHN5bmNocm9ub3VzIG1lbW9yeS5oaWdoXG4xMzM1Olx0XHQgKiB0aHJvdHRsaW5nLiBGYXVsdCBjb250ZXh0IGNhbiBzbGVlcCwgc28gc2V0dGxlIGFueSBvdmVyLWhpZ2ggZGVidFxuMTMzNjpcdFx0ICogaGVyZSBpbnN0ZWFkIG9mIGxldHRpbmcgdXNhZ2UgZ3JvdyB1bnRocm90dGxlZCB1cCB0byBtZW1vcnkubWF4LlxuMTMzNzpcdFx0ICovXG4xMzM4Olx0XHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG4xMzM5Olx0XG4xMzQwOlx0XHRpZiAoZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7XG4xMzQxOlx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4xMzQyOlx0XHRcdGNvdW50X3ZtX2V2ZW50KFRIUF9GQVVMVF9GQUxMQkFDSyk7XG4xMzQzOlx0XHRcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spO1xuMTM0NDpcdFx0XHRyZXR1cm4gTlVMTDtcbjEzNDU6XHRcdH1cbjEzNDY6XHRcbjEzNDc6XHRcdGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKGZvbGlvLCBnZnApO1xuMTM0ODpcdFxuMTM0OTpcdCAgICAgICAvKlxuMTM1MDpcdFx0KiBXaGVuIGEgZm9saW8gaXMgbm90IHplcm9lZCBkdXJpbmcgYWxsb2NhdGlvbiAoX19HRlBfWkVSTyBub3QgdXNlZClcbjEzNTE6XHRcdCogb3IgdXNlciBmb2xpb3MgcmVxdWlyZSBzcGVjaWFsIGhhbmRsaW5nLCBmb2xpb196ZXJvX3VzZXIoKSBpcyB1c2VkIHRvXG4xMzUyOlx0XHQqIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYWdlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZhdWx0aW5nIGFkZHJlc3Mgd2lsbCBiZVxuMTM1MzpcdFx0KiBob3QgaW4gdGhlIGNhY2hlIGFmdGVyIHplcm9pbmcuXG4xMzU0Olx0XHQqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUyNjA6XHRcdH1cbjUyNjE6XHRcbjUyNjI6XHRcdC8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSAtIGl0IHdhcyBub24tcHJlc2VudCBiZWZvcmUgKi9cbjUyNjM6XHRcdHVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2Uodm1mLCB2bWEsIGFkZHJlc3MsIHB0ZXAsIG5yX3BhZ2VzKTtcbjUyNjQ6XHR1bmxvY2s6XG41MjY1Olx0XHRpZiAodm1mLVx1MDAzZXB0ZSlcbjUyNjY6XHRcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbjUyNjc6XHRvdXQ6XG41MjY4Olx0XHRpZiAoc2kpXG41MjY5Olx0XHRcdHB1dF9zd2FwX2RldmljZShzaSk7XG41MjcwOlx0XHQvKlxuNTI3MTpcdFx0ICogTGFyZ2UgZm9saW8gc3dhcGluIGNoYXJnZXMgd2l0aCB0aGUgVEhQIGFsbG9jYXRpb24gZ2ZwLCB3aGljaCBtYXlcbjUyNzI6XHRcdCAqIG5vdCBhbGxvdyBibG9ja2luZywgbWFraW5nIHRyeV9jaGFyZ2Ugc2tpcCBpdHMgc3luY2hyb25vdXNcbjUyNzM6XHRcdCAqIG1lbW9yeS5oaWdoIHRocm90dGxpbmcuIFNldHRsZSBhbnkgb3Zlci1oaWdoIGRlYnQgaGVyZSBpbnN0ZWFkLFxuNTI3NDpcdFx0ICogd2hlcmUgc2xlZXBpbmcgaXMgc2FmZTogdGhlIGZvbGlvIGxvY2ssIHRoZSBwYWdlIHRhYmxlIGxvY2sgYW5kXG41Mjc1Olx0XHQgKiB0aGUgc3dhcCBkZXZpY2UgcmVmZXJlbmNlIGhhdmUgYWxsIGJlZW4gZHJvcHBlZC5cbjUyNzY6XHRcdCAqL1xuNTI3NzpcdFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xuNTI3ODpcdFx0cmV0dXJuIHJldDtcbjUyNzk6XHRvdXRfbm9tYXA6XG41MjgwOlx0XHRpZiAodm1mLVx1MDAzZXB0ZSlcbjUyODE6XHRcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbjUyODI6XHRvdXRfcGFnZTpcbjUyODM6XHRcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpXG41Mjg0Olx0XHRcdGZvbGlvX2ZyZWVfc3dhcChmb2xpbyk7XG41Mjg1Olx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuNTI4NjpcdG91dF9yZWxlYXNlOlxuNTI4NzpcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjUyODg6XHRcdGlmIChmb2xpbyAhPSBzd2FwY2FjaGUpIHtcbjUyODk6XHRcdFx0Zm9saW9fdW5sb2NrKHN3YXBjYWNoZSk7XG41MjkwOlx0XHRcdGZvbGlvX3B1dChzd2FwY2FjaGUpO1xuNTI5MTpcdFx0fVxuNTI5MjpcdFx0aWYgKHNpKVxuNTI5MzpcdFx0XHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuNTI5NDpcdFx0cmV0dXJuIHJldDtcbjUyOTU6XHR9XG41Mjk2Olx0XG41Mjk3Olx0c3RhdGljIGJvb2wgcHRlX3JhbmdlX25vbmUocHRlX3QgKnB0ZSwgaW50IG5yX3BhZ2VzKVxuNTI5ODpcdHtcbjUyOTk6XHRcdGludCBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUzNDU6XHRcdCAqIHB0ZV9ub25lKCkuIE5vdGUgdGhhdCBhbGwgcmVtYWluaW5nIG9yZGVycyB3aWxsIGJlIGNvbXBsZXRlbHlcbjUzNDY6XHRcdCAqIHB0ZV9ub25lKCkuXG41MzQ3Olx0XHQgKi9cbjUzNDg6XHRcdG9yZGVyID0gaGlnaGVzdF9vcmRlcihvcmRlcnMpO1xuNTM0OTpcdFx0d2hpbGUgKG9yZGVycykge1xuNTM1MDpcdFx0XHRhZGRyID0gQUxJR05fRE9XTih2bWYtXHUwMDNlYWRkcmVzcywgUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlcik7XG41MzUxOlx0XHRcdGlmIChwdGVfcmFuZ2Vfbm9uZShwdGUgJiM0MzsgcHRlX2luZGV4KGFkZHIpLCAxIFx1MDAzY1x1MDAzYyBvcmRlcikpXG41MzUyOlx0XHRcdFx0YnJlYWs7XG41MzUzOlx0XHRcdG9yZGVyID0gbmV4dF9vcmRlcihcdTAwMjZvcmRlcnMsIG9yZGVyKTtcbjUzNTQ6XHRcdH1cbjUzNTU6XHRcbjUzNTY6XHRcdHB0ZV91bm1hcChwdGUpO1xuNTM1NzpcdFxuNTM1ODpcdFx0aWYgKCFvcmRlcnMpXG41MzU5Olx0XHRcdGdvdG8gZmFsbGJhY2s7XG41MzYwOlx0XG41MzYxOlx0XHQvKiBUcnkgYWxsb2NhdGluZyB0aGUgaGlnaGVzdCBvZiB0aGUgcmVtYWluaW5nIG9yZGVycy4gKi9cbjUzNjI6XHRcdGdmcCA9IHZtYV90aHBfZ2ZwX21hc2sodm1hKTtcbjUzNjM6XHRcdHdoaWxlIChvcmRlcnMpIHtcbjUzNjQ6XHRcdFx0YWRkciA9IEFMSUdOX0RPV04odm1mLVx1MDAzZWFkZHJlc3MsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuNTM2NTpcdFx0XHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2bWEsIGFkZHIpO1xuNTM2NjpcdFx0XHRpZiAoIWZvbGlvKVxuNTM2NzpcdFx0XHRcdGdvdG8gbmV4dDtcbjUzNjg6XHRcdFx0aWYgKG1lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCB2bWEtXHUwMDNldm1fbW0sIGdmcCkpIHtcbjUzNjk6XHRcdFx0XHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLX0NIQVJHRSk7XG41MzcwOlx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjUzNzE6XHRcdFx0XHRnb3RvIG5leHQ7XG41MzcyOlx0XHRcdH1cbjUzNzM6XHRcdFx0LyogU2FtZSByZWFzb25pbmcgYXMgaW4gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKCkuICovXG41Mzc0Olx0XHRcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcbjUzNzU6XHRcdFx0aWYgKG9yZGVyIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChmb2xpbykpIHtcbjUzNzY6XHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuNTM3NzpcdFx0XHRcdGdvdG8gZmFsbGJhY2s7XG41Mzc4Olx0XHRcdH1cbjUzNzk6XHRcdFx0Zm9saW9fdGhyb3R0bGVfc3dhcHJhdGUoZm9saW8sIGdmcCk7XG41MzgwOlx0XHRcdC8qXG41MzgxOlx0XHRcdCAqIFdoZW4gYSBmb2xpbyBpcyBub3QgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uXG41MzgyOlx0XHRcdCAqIChfX0dGUF9aRVJPIG5vdCB1c2VkKSBvciB1c2VyIGZvbGlvcyByZXF1aXJlIHNwZWNpYWxcbjUzODM6XHRcdFx0ICogaGFuZGxpbmcsIGZvbGlvX3plcm9fdXNlcigpIGlzIHVzZWQgdG8gbWFrZSBzdXJlXG41Mzg0Olx0XHRcdCAqIHRoYXQgdGhlIHBhZ2UgY29ycmVzcG9uZGluZyB0byB0aGUgZmF1bHRpbmcgYWRkcmVzc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MDEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQb3RlbnRpYWw6IEEgUXVpY2sgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGRpdmVzIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIHNwZWNpZmljYWxseSwgaXQmIzM5O3MgdG91Y2hpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBgbW0vbWVtb3J5LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIHJpcGUgZm9yIGZ1enppbmcuIFRoZSBrZXkgZnVuY3Rpb25zIGl0IG1vZGlmaWVzIGFyZSBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCwgYGRvX3N3YXBfcGFnZWAsIGFuZCBgYWxsb2NfYW5vbl9mb2xpb2AuIAoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSBhIHF1aWNrIGdsYW5jZSwgdGhlIGNvcmUgc3Vic3lzdGVtIGludm9sdmVkIGlzIGRlZmluaXRlbHkgbWVtb3J5IG1hbmFnZW1lbnQ6IHBhZ2UgZmF1bHQgaGFuZGxpbmcsIGFub255bW91cyBUSFAgYWxsb2NhdGlvbnMsIHN3YXAtaW4gaGFuZGxpbmcsIGFuZCBtZW1jZyB0aHJvdHRsaW5nLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvci4gVGhlbiwgSSBuZWVkIHRvIGtub3cgaWYgSSBjYW4gdGVzdCB0aGlzIGVhc2lseS4gS25vd2luZyB0aGF0IHRoaXMgaXMgcmVhY2hhYmxlIGluIGEgUUVNVS9HQ0UgYW1kNjQgZW52aXJvbm1lbnQgaXMgcGVyZmVjdC4gWWVhaCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCgpOb3csIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHRlc3RpbmcgdGhpcyBwcm9wZXJseSwgSSBuZWVkIHRvIGtub3cgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zIHRvIHVzZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB3aGF0IGNvbmZpZ3MgaW5mbHVlbmNlIGBtbS9odWdlX21lbW9yeS5jYCwgcGx1cyB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLCBhbmQgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAsIGFuZCBJIHdpbGwgbGlrZWx5IG5lZWQgdG8gZW5zdXJlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBNRU1DR2AsIGFuZCBgU1dBUGAgYXJlIGVuYWJsZWQuIEdvb2QsIEkmIzM5O20gY29uZmlkZW50IEkgY2FuIG1ha2UgdGhpcyBmdXp6aW5nIGNhbXBhaWduIHdvcnRod2hpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFfENPTkZJR19NRU1DR3xDT05GSUdfU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTI1NyBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vTWFrZWZpbGU9NzY9ZW5kaWZcbm1tL01ha2VmaWxlLTc3LVxubW0vTWFrZWZpbGU6Nzg6b2JqLSQoQ09ORklHX1NXQVApXHQmIzQzOz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXG5tbS9NYWtlZmlsZS03OS1vYmotJChDT05GSUdfWlNXQVApXHQmIzQzOz0genN3YXAub1xuLS1cbm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGVfZGV2aWNlLm9cbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4tLVxubW0vY29tcGFjdGlvbi5jPTYwPXN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKSB7IHJldHVybiBmYWxzZTsgfVxuLS1cbm1tL2NvbXBhY3Rpb24uYy03NS0gKi9cbm1tL2NvbXBhY3Rpb24uYzo3NjojaWYgZGVmaW5lZCBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2NvbXBhY3Rpb24uYy03Ny0jZGVmaW5lIENPTVBBQ1RJT05fSFBBR0VfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz03Mz12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbm1tL2RhbW9uL29wcy1jb21tb24uYy03NC17XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NzU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTc2LVx0cG1kX3QgcG1kdmFsID0gcG1kcF9nZXQocG1kKTtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtOTctXHRmb2xpb19wdXQoZm9saW8pO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jOjk4OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2RhbW9uL29wcy1jb21tb24uYy05OS19XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE5ND1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjE1LVx0XHR9IGVsc2Uge1xubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIxNjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjE3LVx0XHRcdHBtZF90IHBtZCA9IHBtZHBfZ2V0KHB2bXcucG1kKTtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjIzLVx0XHRcdFdBUk5fT05fT05DRSgxKTtcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMjQ6I2VuZGlmXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMjUtXHRcdH1cbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0xMDY9c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTA4LXtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTAtXHRjZ3JvdXBfcGF0aChtZW1jZy1cdTAwM2Vjc3MuY2dyb3VwLCBtZW1jZ19wYXRoX2J1ZiwgUEFUSF9NQVgpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExMi1cdFx0cmV0dXJuIHRydWU7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMTM6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE0LVx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9Mzg5PXN0YXRpYyBpbnQgZGFtb25feW91bmdfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTM5Ny1cbm1tL2RhbW9uL3ZhZGRyLmM6Mzk4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtMzk5LVx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXHUwMDNldm1hKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jLTQxNS1cdH1cbm1tL2RhbW9uL3ZhZGRyLmM6NDE2OiNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kYW1vbi92YWRkci5jLTQxNy1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTYzNT1zdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTY0Ni1cbm1tL2RhbW9uL3ZhZGRyLmM6NjQ3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtNjQ4LVx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXHUwMDNldm1hKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jLTY2NC1cdH1cbm1tL2RhbW9uL3ZhZGRyLmM6NjY1OiNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kYW1vbi92YWRkci5jLTY2Ni1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTc5NT1zdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTgwNi1cbm1tL2RhbW9uL3ZhZGRyLmM6ODA3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtODA4LVx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XG4tLVxubW0vZGVidWcuYz03MD1zdGF0aWMgdm9pZCBfX2R1bXBfZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vZGVidWcuYy05Ni1cbm1tL2RlYnVnLmM6OTc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vZGVidWcuYy05OC1cdGlmIChmb2xpby1cdTAwM2VtZW1jZ19kYXRhKVxuLS1cbm1tL2RlYnVnLmM9MTc1PXZvaWQgZHVtcF9tbShjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS9kZWJ1Zy5jLTE4OC0jZW5kaWZcbm1tL2RlYnVnLmM6MTg5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2RlYnVnLmMtMTkwLVx0XHRcJiMzNDtvd25lciAlcHggXCYjMzQ7XG4tLVxubW0vZGVidWcuYy0yMTctI2VuZGlmXG5tbS9kZWJ1Zy5jOjIxODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9kZWJ1Zy5jLTIxOS1cdFx0bW0tXHUwMDNlb3duZXIsXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTExND1zdGF0aWMgdm9pZCBfX2luaXQgcHRlX2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTE3Mi1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxNzM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTE3NC1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTQyMz1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDI0LSNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jOjQyNTojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQyNi1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpIHsgfVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz00MzE9c3RhdGljIHZvaWQgX19pbml0IHB1ZF9sZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjQzMjojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDMzLVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz02NzE9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02ODItXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NjgzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02ODQtc3RhdGljIHZvaWQgX19pbml0IHBtZF9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02OTgtfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjY5OTojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTcwMC1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX3Byb3Rub25lX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjcwMTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzAyLVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03MTU9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9zd2FwX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzMxLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjczMjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzMzLXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03NDk9c3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzY3LX1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3Njg6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03Njktc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0X2RpcnR5X3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTc3MD1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3NzE6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTc3Mi1cbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTAxPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDMtXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTA0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDUtc3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTU1PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTk1Ni0jZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5NTc6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NTgtc3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTU5PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjk2MDojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTYxLVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz05ODc9c3RhdGljIHZvaWQgX19pbml0IGRlc3Ryb3lfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05ODktXHQvKiBGcmVlIChodWdlKSBwYWdlICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTkwOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05OTEtXHQgICAgaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSgpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05OTgtXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTk5Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMDAwLVx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz0xMTQzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjM5LVx0ICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6MTI0MDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI0MS1cdCAgICBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKCkpIHtcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI1MC1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxMjUxOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjUyLVx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7XG4tLVxubW0vZmlsZW1hcC5jPTMzMjk9c3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2ZpbGVtYXAuYy0zMzQxLVx0LyogVXNlIHRoZSByZWFkYWhlYWQgY29kZSwgZXZlbiBpZiByZWFkYWhlYWQgaXMgZGlzYWJsZWQgKi9cbm1tL2ZpbGVtYXAuYzozMzQyOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgKHZtX2ZsYWdzIFx1MDAyNiBWTV9IVUdFUEFHRSkpIHtcbm1tL2ZpbGVtYXAuYy0zMzQzLVx0XHQvKlxuLS1cbm1tL2ZpbGVtYXAuYz00NjE4PXN0YXRpYyB2b2lkIGZpbGVtYXBfY2FjaGVzdGF0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL2ZpbGVtYXAuYy00NjY1LVxubW0vZmlsZW1hcC5jOjQ2NjY6I2lmZGVmIENPTkZJR19TV0FQIC8qIGltcGxpZXMgQ09ORklHX01NVSAqL1xubW0vZmlsZW1hcC5jLTQ2NjctXHRcdFx0aWYgKHNobWVtX21hcHBpbmcobWFwcGluZykpIHtcbi0tXG5tbS9mb2xpby5jPTExMDc9dm9pZCBmb2xpb19iYXRjaF9yZW1vdmVfZXhjZXB0aW9uYWxzKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxuLS1cbm1tL2ZvbGlvLmMtMTExOC1cbm1tL2ZvbGlvLmM6MTExOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9mb2xpby5jLTExMjAtc3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXG4tLVxubW0vZ3VwLmM9NzAxPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZm9sbG93X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2d1cC5jLTczNC1cbm1tL2d1cC5jOjczNTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9ndXAuYy03MzYtXHRpZiAocG1kX3RyYW5zX2h1Z2UocG1kdmFsKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBGT0xMX1RPVUNIKSlcbm1tL2d1cC5jLTczNy1cdFx0dG91Y2hfcG1kKHZtYSwgYWRkciwgcG1kLCBmbGFncyBcdTAwMjYgRk9MTF9XUklURSk7XG5tbS9ndXAuYzo3Mzg6I2VuZGlmXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2d1cC5jLTczOS1cbi0tXG5tbS9obW0uYz0xODg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGhtbV9wZm5fZmxhZ3Nfb3JkZXIodW5zaWduZWQgbG9uZyBvcmRlcilcbi0tXG5tbS9obW0uYy0xOTItXG5tbS9obW0uYzoxOTM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vaG1tLmMtMTk0LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwbWRfdG9faG1tX3Bmbl9mbGFncyhzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcbi0tXG5tbS9obW0uYz0yMDQ9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9obW0uYy0yMjctfVxubW0vaG1tLmM6MjI4OiNlbHNlIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vaG1tLmMtMjI5LS8qIHN0dWIgdG8gYWxsb3cgdGhlIGNvZGUgYmVsb3cgdG8gY29tcGlsZSAqL1xubW0vaG1tLmM9MjMwPWludCBobW1fdm1hX2hhbmRsZV9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2htbS5jLTIzMS1cdFx0dW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgaG1tX3BmbnNbXSwgcG1kX3QgcG1kKTtcbm1tL2htbS5jOjIzMjojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9obW0uYy0yMzMtXG4tLVxubW0vaHVnZV9tZW1vcnkuYz02MT11bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzIF9fcmVhZF9tb3N0bHkgPVxubW0vaHVnZV9tZW1vcnkuYzo2MjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vaHVnZV9tZW1vcnkuYy02My1cdCgxXHUwMDNjXHUwMDNjVFJBTlNQQVJFTlRfSFVHRVBBR0VfRkxBRyl8XG5tbS9odWdlX21lbW9yeS5jLTY0LSNlbmRpZlxubW0vaHVnZV9tZW1vcnkuYzo2NTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL2h1Z2VfbWVtb3J5LmMtNjYtXHQoMVx1MDAzY1x1MDAzY1RSQU5TUEFSRU5UX0hVR0VQQUdFX1JFUV9NQURWX0ZMQUcpfFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzY0OT1zdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNzUxLVx0XHRcdGZvbGlvX3NldF9pZGxlKG5ld19mb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jOjM3NTI6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vaHVnZV9tZW1vcnkuYy0zNzUzLVx0XHRuZXdfZm9saW8tXHUwMDNlbWVtY2dfZGF0YSA9IGZvbGlvLVx1MDAzZW1lbWNnX2RhdGE7XG4tLVxubW0vaHdwb2lzb24taW5qZWN0LmM9NDU9c3RhdGljIGludCBod3BvaXNvbl9maWx0ZXJfZmxhZ3Moc3RydWN0IHBhZ2UgKnApXG4tLVxubW0vaHdwb2lzb24taW5qZWN0LmMtNjYtICovXG5tbS9od3BvaXNvbi1pbmplY3QuYzo2NzojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9od3BvaXNvbi1pbmplY3QuYy02OC1zdGF0aWMgdTY0IGh3cG9pc29uX2ZpbHRlcl9tZW1jZztcbi0tXG5tbS9od3BvaXNvbi1pbmplY3QuYz0xNjI9c3RhdGljIGludCBfX2luaXQgcGZuX2luamVjdF9pbml0KHZvaWQpXG4tLVxubW0vaHdwb2lzb24taW5qZWN0LmMtMTkxLVxubW0vaHdwb2lzb24taW5qZWN0LmM6MTkyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2h3cG9pc29uLWluamVjdC5jLTE5My1cdGRlYnVnZnNfY3JlYXRlX3U2NChcJiMzNDtjb3JydXB0LWZpbHRlci1tZW1jZ1wmIzM0OywgMDYwMCwgaHdwb2lzb25fZGlyLFxuLS1cbm1tL2tzbS5jPTI1Mjc9c3RhdGljIGludCBrc21fbmV4dF9wYWdlX3BtZF9lbnRyeShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9rc20uYy0yNTQ3LVxubW0va3NtLmM6MjU0ODpcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2IHBtZF9sZWFmKHBtZCkpIHtcbm1tL2tzbS5jLTI1NDktXHRcdHB0bCA9IHBtZF9sb2NrKG1tLCBwbWRwKTtcbi0tXG5tbS9rc20uYz0zMTM3PXN0cnVjdCBmb2xpbyAqa3NtX21pZ2h0X25lZWRfdG9fY29weShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2tzbS5jLTMxNzYtXHRcdF9fZm9saW9fc2V0X2xvY2tlZChuZXdfZm9saW8pO1xubW0va3NtLmM6MzE3NzojaWZkZWYgQ09ORklHX1NXQVBcbm1tL2tzbS5jLTMxNzgtXHRcdGNvdW50X3ZtX2V2ZW50KEtTTV9TV1BJTl9DT1BZKTtcbi0tXG5tbS9saXN0X2xydS5jPTI5PXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbCwgYm9vbCBpcnFfb2ZmLFxuLS1cbm1tL2xpc3RfbHJ1LmMtMzktXG5tbS9saXN0X2xydS5jOjQwOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmMtNDEtc3RhdGljIExJU1RfSEVBRChtZW1jZ19saXN0X2xydXMpO1xuLS1cbm1tL2xpc3RfbHJ1LmM9MTQxPWxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG4tLVxubW0vbGlzdF9scnUuYy0xNTAtfVxubW0vbGlzdF9scnUuYzoxNTE6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xubW0vbGlzdF9scnUuYy0xNTItXG4tLVxubW0vbGlzdF9scnUuYz00MTM9dW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXG4tLVxubW0vbGlzdF9scnUuYy00MjEtXG5tbS9saXN0X2xydS5jOjQyMjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jLTQyMy1cdGlmICgqbnJfdG9fd2FsayBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSkge1xuLS1cbm1tL2xpc3RfbHJ1LmM9NDUxPXN0YXRpYyB2b2lkIGluaXRfb25lX2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbClcbi0tXG5tbS9saXN0X2xydS5jLTQ2MS1cbm1tL2xpc3RfbHJ1LmM6NDYyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmMtNDYzLXN0YXRpYyBzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1lbWNnX2luaXRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBnZnBfdCBnZnApXG4tLVxubW0vbGlzdF9scnUuYz02NTk9c3RhdGljIHZvaWQgbWVtY2dfZGVzdHJveV9saXN0X2xydShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbi0tXG5tbS9saXN0X2xydS5jLTY2MS19XG5tbS9saXN0X2xydS5jOjY2MjojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5tbS9saXN0X2xydS5jLTY2My1cbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4tLVxubW0vbGlzdF9scnUuYy02NjctXG5tbS9saXN0X2xydS5jOjY2ODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jLTY2OS1cdGlmIChzaHJpbmtlcilcbi0tXG5tbS9saXN0X2xydS5jPTY5Mj12b2lkIGxpc3RfbHJ1X2Rlc3Ryb3koc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4tLVxubW0vbGlzdF9scnUuYy03MDMtXG5tbS9saXN0X2xydS5jOjcwNDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jLTcwNS1cdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xuLS1cbm1tL21hZHZpc2UuYz0xNTE9c3RhdGljIGludCBtYWR2aXNlX3VwZGF0ZV92bWEodm1fZmxhZ3NfdCBuZXdfZmxhZ3MsXG4tLVxubW0vbWFkdmlzZS5jLTE5NC1cbm1tL21hZHZpc2UuYzoxOTU6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tYWR2aXNlLmMtMTk2LXN0YXRpYyBpbnQgc3dhcGluX3dhbGtfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWFkdmlzZS5jPTI0Mz1zdGF0aWMgdm9pZCBzaG1lbV9zd2FwaW5fcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWFkdmlzZS5jLTI3OC19XG5tbS9tYWR2aXNlLmM6Mjc5OiNlbmRpZlx0XHQvKiBDT05GSUdfU1dBUCAqL1xubW0vbWFkdmlzZS5jLTI4MC1cbi0tXG5tbS9tYWR2aXNlLmM9MjkwPXN0YXRpYyBsb25nIG1hZHZpc2Vfd2lsbG5lZWQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTI5OC1cbm1tL21hZHZpc2UuYzoyOTk6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tYWR2aXNlLmMtMzAwLVx0aWYgKCFmaWxlKSB7XG4tLVxubW0vbWFkdmlzZS5jPTM2Mj1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21hZHZpc2UuYy0zODQtXG5tbS9tYWR2aXNlLmM6Mzg1OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21hZHZpc2UuYy0zODYtXHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZCkpIHtcbi0tXG5tbS9tYWR2aXNlLmM9MTUyNz1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTU0Ny0jZW5kaWZcbm1tL21hZHZpc2UuYzoxNTQ4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21hZHZpc2UuYy0xNTQ5LVx0Y2FzZSBNQURWX0hVR0VQQUdFOlxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz01OTY9dm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTYwNS1cbm1tL21lbWNvbnRyb2wtdjEuYzo2MDY6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLXYxLmMtNjA3LS8qKlxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xNDcyPXZvaWQgbWVtY2cxX29vbV9maW5pc2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGxvY2tlZClcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTQ3OS0gKiBjZ3JvdXAgdjEgdXNlcnNwYWNlIHZtcHJlc3N1cmUgaW50ZXJmYWNlIChtZW1vcnkucHJlc3N1cmVfbGV2ZWwgL1xubW0vbWVtY29udHJvbC12MS5jOjE0ODA6ICogY2dyb3VwLmV2ZW50X2NvbnRyb2wpLiBLZXB0IGhlcmUgc28gdjItb25seSBrZXJuZWxzIChDT05GSUdfTUVNQ0dfVjE9bilcbm1tL21lbWNvbnRyb2wtdjEuYy0xNDgxLSAqIGRyb3AgdGhlIHdob2xlIGV2ZW50ZmQgYWNjdW11bGF0b3IsIGl0cyB3b3JrIGl0ZW0sIGFuZCB0aGUgcGVyLW1lbWNnXG4tLVxubW0vbWVtY29udHJvbC12MS5jPTIxNzU9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZzFfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMjE3Ny1cdE5SX0FOT05fTUFQUEVELFxubW0vbWVtY29udHJvbC12MS5jOjIxNzg6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWVtY29udHJvbC12MS5jLTIxNzktXHROUl9BTk9OX1RIUFMsXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTIxODYtXHRXT1JLSU5HU0VUX1JFRkFVTFRfRklMRSxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMTg3OiNpZmRlZiBDT05GSUdfU1dBUFxubW0vbWVtY29udHJvbC12MS5jLTIxODgtXHRNRU1DR19TV0FQLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yMTkzPXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtZW1jZzFfc3RhdF9uYW1lc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMTk1LVx0XCYjMzQ7cnNzXCYjMzQ7LFxubW0vbWVtY29udHJvbC12MS5jOjIxOTY6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWVtY29udHJvbC12MS5jLTIxOTctXHRcJiMzNDtyc3NfaHVnZVwmIzM0Oyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMjIwNC1cdFwmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdF9maWxlXCYjMzQ7LFxubW0vbWVtY29udHJvbC12MS5jOjIyMDU6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLXYxLmMtMjIwNi1cdFwmIzM0O3N3YXBcJiMzNDssXG4tLVxubW0vbWVtY29udHJvbC12MS5oPTI1PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC12MS5oLTI4LS8qIENncm91cCB2MS1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi9cbm1tL21lbWNvbnRyb2wtdjEuaDoyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLXYxLmgtMzAtXG4tLVxubW0vbWVtY29udHJvbC12MS5oPTkyPWV4dGVybiBzdHJ1Y3QgY2Z0eXBlIG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzW107XG5tbS9tZW1jb250cm9sLXYxLmgtOTMtXG5tbS9tZW1jb250cm9sLXYxLmg6OTQ6I2Vsc2VcdC8qIENPTkZJR19NRU1DR19WMSAqL1xubW0vbWVtY29udHJvbC12MS5oLTk1LVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0xMjY9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV91bmNoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcykge31cbm1tL21lbWNvbnRyb2wtdjEuaC0xMjctXG5tbS9tZW1jb250cm9sLXYxLmg6MTI4OiNlbmRpZlx0LyogQ09ORklHX01FTUNHX1YxICovXG5tbS9tZW1jb250cm9sLXYxLmgtMTI5LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMTU9c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMzQtXG5tbS9tZW1jb250cm9sLmM6MjM1OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0yMzYtc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTM3OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy00MDYtXHROUl9TRUNPTkRBUllfUEFHRVRBQkxFLFxubW0vbWVtY29udHJvbC5jOjQwNzojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy00MDgtXHROUl9TV0FQQ0FDSEUsXG4tLVxubW0vbWVtY29udHJvbC5jPTU1MD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTcyLVxubW0vbWVtY29udHJvbC5jOjU3MzojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNTc0LXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXG4tLVxubW0vbWVtY29udHJvbC5jPTU5OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcbm1tL21lbWNvbnRyb2wuYzo1OTk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTYwMC1cdFBHUEdJTixcbi0tXG5tbS9tZW1jb250cm9sLmMtNjEwLVx0UEdMQVpZRlJFRUQsXG5tbS9tZW1jb250cm9sLmM6NjExOiNpZmRlZiBDT05GSUdfU1dBUFxubW0vbWVtY29udHJvbC5jLTYxMi1cdFNXUElOX1pFUk8sXG4tLVxubW0vbWVtY29udHJvbC5jLTYxOS0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo2MjA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWVtY29udHJvbC5jLTYyMS1cdFRIUF9GQVVMVF9BTExPQyxcbi0tXG5tbS9tZW1jb250cm9sLmM9ODMyPXN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbi0tXG5tbS9tZW1jb250cm9sLmMtODQ3LVxubW0vbWVtY29udHJvbC5jOjg0ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtODQ5LS8qXG4tLVxubW0vbWVtY29udHJvbC5jPTkxNj12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcbi0tXG5tbS9tZW1jb250cm9sLmMtOTI4LVxubW0vbWVtY29udHJvbC5jOjkyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtOTMwLS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cbi0tXG5tbS9tZW1jb250cm9sLmM9MTEwND1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtMTExMS1cbm1tL21lbWNvbnRyb2wuYzoxMTEyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xMTEzLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNTkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTE2MDktXHR7IFwmIzM0O2ZpbGVfd3JpdGViYWNrXCYjMzQ7LFx0XHROUl9XUklURUJBQ0tcdFx0XHR9LFxubW0vbWVtY29udHJvbC5jOjE2MTA6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLmMtMTYxMS1cdHsgXCYjMzQ7c3dhcGNhY2hlZFwmIzM0OyxcdFx0XHROUl9TV0FQQ0FDSEVcdFx0XHR9LFxubW0vbWVtY29udHJvbC5jLTE2MTItI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6MTYxMzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9tZW1jb250cm9sLmMtMTYxNC1cdHsgXCYjMzQ7YW5vbl90aHBcJiMzNDssXHRcdFx0TlJfQU5PTl9USFBTXHRcdFx0fSxcbi0tXG5tbS9tZW1jb250cm9sLmM9MTcxMj11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jLTE3MTctXG5tbS9tZW1jb250cm9sLmM6MTcxODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTcxOS11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jPTE3Mzg9c3RhdGljIHZvaWQgbWVtY2dfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMTc4NC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWVtY2dfdm1fZXZlbnRfc3RhdCk7IGkmIzQzOyYjNDM7KSB7XG5tbS9tZW1jb250cm9sLmM6MTc4NTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTc4Ni1cdFx0aWYgKG1lbWNnX3ZtX2V2ZW50X3N0YXRbaV0gPT0gUEdQR0lOIHx8XG4tLVxubW0vbWVtY29udHJvbC5jPTE4MzY9dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMTg1Ny1cdFx0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9ldmVudHNbTUVNQ0dfU1dBUF9NQVhdKSk7XG5tbS9tZW1jb250cm9sLmM6MTg1ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTg1OS1cdGVsc2Uge1xuLS1cbm1tL21lbWNvbnRyb2wuYz0yODYzPXN0YXRpYyB2b2lkIGNvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yODc1LVxubW0vbWVtY29udHJvbC5jOjI4NzY6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xubW0vbWVtY29udHJvbC5jLTI4Nzctc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfc2xhYl9ubWlfc2FmZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jPTMwNTA9X19hbHdheXNfaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpjdXJyZW50X29ial9jZ3JvdXAodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtMzA1NS1cbm1tL21lbWNvbnRyb2wuYzozMDU2Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTUNHX05NSV9VTlNBRkUpIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSlcbm1tL21lbWNvbnRyb2wuYy0zMDU3LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5tbS9tZW1jb250cm9sLmM9MzA5Nj1zdHJ1Y3Qgb2JqX2Nncm91cCAqZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTA2LVxubW0vbWVtY29udHJvbC5jOjMxMDc6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xubW0vbWVtY29udHJvbC5jLTMxMDgtc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfa21lbV9ubWlfc2FmZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCB2YWwpXG4tLVxubW0vbWVtY29udHJvbC5jPTQyMTg9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQyMzktXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIFx1MDAyNnBhcmVudC1cdTAwM2Vzd2FwLCBmYWxzZSk7XG5tbS9tZW1jb250cm9sLmM6NDI0MDojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNDI0MS1cdFx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7XG4tLVxubW0vbWVtY29udHJvbC5jLTQyNTMtXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIE5VTEwsIGZhbHNlKTtcbm1tL21lbWNvbnRyb2wuYzo0MjU0OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy00MjU1LVx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2VrbWVtLCBOVUxMLCBmYWxzZSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ0MjE9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDQzMS0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzo0NDMyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy00NDMzLVx0cGFnZV9jb3VudGVyX3NldF9tYXgoXHUwMDI2bWVtY2ctXHUwMDNla21lbSwgUEFHRV9DT1VOVEVSX01BWCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ0NjE9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NDk2LVxubW0vbWVtY29udHJvbC5jOjQ0OTc6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xubW0vbWVtY29udHJvbC5jLTQ0OTgtc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbi0tXG5tbS9tZW1jb250cm9sLmM9NTE2MD1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUxNzEtXHQuZGZsX2NmdHlwZXMgPSBtZW1vcnlfZmlsZXMsXG5tbS9tZW1jb250cm9sLmM6NTE3MjojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNTE3My1cdC5sZWdhY3lfY2Z0eXBlcyA9IG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzLFxuLS1cbm1tL21lbWNvbnRyb2wuYz01Njg3PWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTU3MjItXG5tbS9tZW1jb250cm9sLmM6NTcyMzojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy01NzI0LS8qKlxuLS1cbm1tL21lbWNvbnRyb2wuYz02MTcyPXN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTYxNzctXHRXQVJOX09OKGNncm91cF9hZGRfZGZsX2NmdHlwZXMoXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBzd2FwX2ZpbGVzKSk7XG5tbS9tZW1jb250cm9sLmM6NjE3ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNjE3OS1cdFdBUk5fT04oY2dyb3VwX2FkZF9sZWdhY3lfY2Z0eXBlcyhcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIG1lbXN3X2ZpbGVzKSk7XG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipUcmFjaW5nIHRoZSBTb3VyY2Ugb2YgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCBmdW5jdGlvbiBpcyBkZWZpbmVkLiBJdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIGNvbnRleHQsIGFuZCBJIGNhbiYjMzk7dCBqdXN0IHJlbHkgb24gbWVtb3J5LiBUaW1lIGZvciB0aGUgdHJpZWQtYW5kLXRydWUgbWV0aG9kOiBsZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIGJlc3QgYXBwcm9hY2ggaGVyZSBpcyBnb2luZyB0byBiZSBhIHF1aWNrIGBncmVwYC4gSSYjMzk7bGwgZmlyZSB0aGF0IG9mZiBhbmQgc2VlIHdoYXQgaXQgdHVybnMgdXAuIEhvcGVmdWxseSwgaXQmIzM5O2xsIHBpbnBvaW50IHRoZSBkZWZpbml0aW9uIHF1aWNrbHkgc28gSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MTMwNz1zdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMzM3LVx0ICovXG5tbS9odWdlX21lbW9yeS5jOjEzMzg6XHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG5tbS9odWdlX21lbW9yeS5jLTEzMzktXG4tLVxubW0vbWVtY29udHJvbC5jPTI1MTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2hpZ2hfZGVsYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNTU0LSAqL1xubW0vbWVtY29udHJvbC5jOjI1NTU6dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbm1tL21lbWNvbnRyb2wuYy0yNTU2LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9MjY0NT1zdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjg0OS1cdCAgICBnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykpXG5tbS9tZW1jb250cm9sLmM6Mjg1MDpcdFx0X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spO1xubW0vbWVtY29udHJvbC5jLTI4NTEtXHRyZXR1cm4gMDtcbi0tXG5tbS9tZW1vcnkuYz00ODgxPXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTUyNzYtXHQgKi9cbm1tL21lbW9yeS5jOjUyNzc6XHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG5tbS9tZW1vcnkuYy01Mjc4LVx0cmV0dXJuIHJldDtcbi0tXG5tbS9tZW1vcnkuYz01MzA5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTM3My1cdFx0LyogU2FtZSByZWFzb25pbmcgYXMgaW4gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKCkuICovXG5tbS9tZW1vcnkuYzo1Mzc0Olx0XHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG5tbS9tZW1vcnkuYy01Mzc1LVx0XHRpZiAob3JkZXIgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKGZvbGlvKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjUxMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50LCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpdmluZyBpbnRvIHRoZSBNZW1vcnkgQ29udHJvbCBDb2RlKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBUbyByZWFsbHkgZ3Jhc3AgaXRzIG1lY2hhbmljcywgSSYjMzk7bSBnb2luZyB0byBqdW1wIGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbmF2aWdhdGluZyB0byB0aGUgaGVhZGVyIGZpbGUsIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY3J1Y2lhbCBkZWNsYXJhdGlvbiBhbmQgYW55IHJlbGV2YW50IHN1cHBvcnRpbmcgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGlzIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIGl0cyBzaWduYXR1cmUgYW5kIHdoYXQgc3RydWN0dXJlcyBpdCBpbnRlcmFjdHMgd2l0aCBpcyBrZXkgdG8gZGVjaXBoZXJpbmcgdGhlIGxhcmdlciBjb250ZXh0IG9mIG1lbW9yeSBjZ3JvdXAgbWFuYWdlbWVudC4gSSYjMzk7bSBob3BpbmcgdGhlIGNvbW1lbnRzIGFyZSBoZWxwZnVsIHRvbywgdG8gc2F2ZSBzb21lIGRlYnVnZ2luZyB0aW1lIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05MDI9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MTAtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5MTE6dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MTItXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5MTM6c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkxNC17XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MTUtXHRpZiAodW5saWtlbHkoY3VycmVudC1cdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2gpKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTE2Olx0XHRfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfbWFzayk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MTctfVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEzNTQ9bWVtX2Nncm91cF9wcmludF9vb21fbWVtaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTM1Ny1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEzNTg6c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzNTkte1xuLS1cbmluY2x1ZGUvbGludXgvcmVzdW1lX3VzZXJfbW9kZS5oPTQxPXN0YXRpYyBpbmxpbmUgdm9pZCByZXN1bWVfdXNlcl9tb2RlX3dvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuaW5jbHVkZS9saW51eC9yZXN1bWVfdXNlcl9tb2RlLmgtNTgtXG5pbmNsdWRlL2xpbnV4L3Jlc3VtZV91c2VyX21vZGUuaDo1OTpcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcbmluY2x1ZGUvbGludXgvcmVzdW1lX3VzZXJfbW9kZS5oLTYwLVx0YmxrY2dfbWF5YmVfdGhyb3R0bGVfY3VycmVudCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIwNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqRGlzc2VjdGluZyBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gcG9pbnRlZCB0byBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgIOKAkyBhIGZ1bmN0aW9uIG5hbWUgdGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHJvbGUgaW4gaGFuZGxpbmcgbWVtb3J5IGNncm91cCBvdmVyLWhpZ2ggc2NlbmFyaW9zLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBwaW5wb2ludCBpdHMgb3JpZ2luLiBUaGUgdGV4dCBjb25maXJtcyBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gRXhjZWxsZW50LCB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4KCk5vdywgbXkgbmV4dCBtb3ZlIGlzIG9idmlvdXM6IEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoYXQgc291cmNlIGZpbGUgYW5kICpyZWFkKiB0aGUgY29kZSBvZiBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgbG9naWMsIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGlzIGZ1bmN0aW9uPyBXaGF0IGFjdGlvbnMgZG9lcyBpdCBwZXJmb3JtIHRvIGFkZHJlc3MgdGhlIG92ZXItaGlnaCBzaXR1YXRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIG9mIGNvbmNlcm4gdG8gd2F0Y2ggZm9yPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IGRvZXMgaXQgZGVhbCB3aXRoIE9PTT8gSG93IGRvZXMgaXQgaGFuZGxlIHJlY2xhaW0sIG9yIHBlcmhhcHMgZXZlbiBraWxsIHByb2Nlc3Nlcz8gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB1bmRlcnN0YW5kaW5nIGJlZ2lucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTQwOlx0XHQgKiBGYWN0b3IgaW4gdGhlIHRhc2smIzM5O3Mgb3duIGNvbnRyaWJ1dGlvbiB0byB0aGUgb3ZlcmFnZSwgc3VjaCB0aGF0IGZvdXJcbjI1NDE6XHRcdCAqIE4tc2l6ZWQgYWxsb2NhdGlvbnMgYXJlIHRocm90dGxlZCBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGFzIG9uZVxuMjU0MjpcdFx0ICogNE4tc2l6ZWQgYWxsb2NhdGlvbi5cbjI1NDM6XHRcdCAqXG4yNTQ0Olx0XHQgKiBNRU1DR19DSEFSR0VfQkFUQ0ggcGFnZXMgaXMgbm9taW5hbCwgc28gd29yayBvdXQgaG93IG11Y2ggc21hbGxlciBvclxuMjU0NTpcdFx0ICogbGFyZ2VyIHRoZSBjdXJyZW50IGNoYXJnZSBwYXRjaCBpcyB0aGFuIHRoYXQuXG4yNTQ2Olx0XHQgKi9cbjI1NDc6XHRcdHJldHVybiBwZW5hbHR5X2ppZmZpZXMgKiBucl9wYWdlcyAvIE1FTUNHX0NIQVJHRV9CQVRDSDtcbjI1NDg6XHR9XG4yNTQ5Olx0XG4yNTUwOlx0LypcbjI1NTE6XHQgKiBSZWNsYWltcyBtZW1vcnkgb3ZlciB0aGUgaGlnaCBsaW1pdC4gQ2FsbGVkIGRpcmVjdGx5IGZyb21cbjI1NTI6XHQgKiB0cnlfY2hhcmdlKCkgKGNvbnRleHQgcGVybWl0dGluZyksIGFzIHdlbGwgYXMgZnJvbSB0aGUgdXNlcmxhbmRcbjI1NTM6XHQgKiByZXR1cm4gcGF0aCB3aGVyZSByZWNsYWltIGlzIGFsd2F5cyBhYmxlIHRvIGJsb2NrLlxuMjU1NDpcdCAqL1xuMjU1NTpcdHZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG4yNTU2Olx0e1xuMjU1NzpcdFx0dW5zaWduZWQgbG9uZyBwZW5hbHR5X2ppZmZpZXM7XG4yNTU4Olx0XHR1bnNpZ25lZCBsb25nIHBmbGFncztcbjI1NTk6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkO1xuMjU2MDpcdFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzID0gY3VycmVudC1cdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2g7XG4yNTYxOlx0XHRpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XG4yNTYyOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4yNTYzOlx0XHRib29sIGluX3JldHJ5ID0gZmFsc2U7XG4yNTY0Olx0XG4yNTY1Olx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oY3VycmVudC1cdTAwM2VtbSk7XG4yNTY2Olx0XHRjdXJyZW50LVx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaCA9IDA7XG4yNTY3Olx0XG4yNTY4Olx0cmV0cnlfcmVjbGFpbTpcbjI1Njk6XHRcdC8qXG4yNTcwOlx0XHQgKiBCYWlsIGlmIHRoZSB0YXNrIGlzIGFscmVhZHkgZXhpdGluZy4gVW5saWtlIG1lbW9yeS5tYXgsXG4yNTcxOlx0XHQgKiBtZW1vcnkuaGlnaCBlbmZvcmNlbWVudCBpc24mIzM5O3QgYXMgc3RyaWN0LCBhbmQgdGhlcmUgaXMgbm9cbjI1NzI6XHRcdCAqIE9PTSBraWxsZXIgaW52b2x2ZWQsIHdoaWNoIG1lYW5zIHRoZSBleGNlc3MgY291bGQgYWxyZWFkeVxuMjU3MzpcdFx0ICogYmUgbXVjaCBiaWdnZXIgKGFuZCBzdGlsbCBncm93aW5nKSB0aGFuIGl0IGNvdWxkIGZvclxuMjU3NDpcdFx0ICogbWVtb3J5Lm1heDsgdGhlIGR5aW5nIHRhc2sgY291bGQgZ2V0IHN0dWNrIGluIGZydWl0bGVzc1xuMjU3NTpcdFx0ICogcmVjbGFpbSBmb3IgYSBsb25nIHRpbWUsIHdoaWNoIGlzbiYjMzk7dCBkZXNpcmFibGUuXG4yNTc2Olx0XHQgKi9cbjI1Nzc6XHRcdGlmICh0YXNrX2lzX2R5aW5nKCkpXG4yNTc4Olx0XHRcdGdvdG8gb3V0O1xuMjU3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIwNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIEltcGxlbWVudGF0aW9uIG9mIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgaGFzIGJlZW4gaW50cm9kdWNlZCBpbnRvIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLCBgYWxsb2NfYW5vbl9mb2xpb2AsIGFuZCBgZG9fc3dhcF9wYWdlYC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZywgbGlrZWx5IGRlYWxpbmcgd2l0aCBvdmVyLWhpZ2ggbWVtb3J5IHVzYWdlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQuIFNvLCBsZXQmIzM5O3Mgc3RhcnQgYnkgZmlndXJpbmcgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHRzIGZvciBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCBhbmQgYGFsbG9jX2Fub25fZm9saW9gLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gYW5kIGhvdyB0aGlzIG5ldyBjb2RlIGludGVncmF0ZXMgaW50byB0aGUgZXhpc3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBOVU1BIGFuZCBvdGhlciByZWxhdGVkIHN1YnN5c3RlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTEzMDU9RVhQT1JUX1NZTUJPTF9HUEwodGhwX2dldF91bm1hcHBlZF9hcmVhKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTMwNi1cbm1tL2h1Z2VfbWVtb3J5LmM6MTMwNzpzdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdlX21lbW9yeS5jLTEzMDgtXHRcdHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9odWdlX21lbW9yeS5jPTEzOTA9c3RhdGljIHZtX2ZhdWx0X3QgX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEzOTctXG5tbS9odWdlX21lbW9yeS5jOjEzOTg6XHRmb2xpbyA9IHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCh2bWEsIHZtZi1cdTAwM2VhZGRyZXNzKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTM5OS1cdGlmICh1bmxpa2VseSghZm9saW8pKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjEwMT1zdGF0aWMgdm1fZmF1bHRfdCBkb19odWdlX3plcm9fd3BfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjEwOC1cbm1tL2h1Z2VfbWVtb3J5LmM6MjEwOTpcdGZvbGlvID0gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MpO1xubW0vaHVnZV9tZW1vcnkuYy0yMTEwLVx0aWYgKHVubGlrZWx5KCFmb2xpbykpXG4tLVxubW0vbWVtb3J5LmM9NTMwOT1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19hbm9uX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTUzNzItXHRcdH1cbm1tL21lbW9yeS5jOjUzNzM6XHRcdC8qIFNhbWUgcmVhc29uaW5nIGFzIGluIHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpLiAqL1xubW0vbWVtb3J5LmMtNTM3NC1cdFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk4MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBhbGxvY19hbm9uX2ZvbGlvYCBDYWxsZXJzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGNhbGxlcnMgb2YgYGFsbG9jX2Fub25fZm9saW9gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGlzIGZ1bmN0aW9uIGdldHRpbmcgdXRpbGl6ZWQ/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzLCB0aGUgdmFyaW91cyBzdWJzeXN0ZW1zIHRoYXQgZGVwZW5kIG9uIGl0LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBicm9hZCBhcHByb2FjaC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgLSBgZ2l0IGdyZXBgLCBtYXliZSBzb21lIHN0YXRpYyBhbmFseXNpcywgdG8gaWRlbnRpZnkgdGhlIHNvdXJjZSBjb2RlIGxvY2F0aW9ucy4KClRoZW4sIHRoZSBnb2FsIHNoaWZ0cyB0byB1bmRlcnN0YW5kaW5nIHdoeSB0aGVzZSBjYWxsZXJzIHVzZSBgYWxsb2NfYW5vbl9mb2xpb2Agc3BlY2lmaWNhbGx5LiBBcmUgdGhleSBkZWFsaW5nIHdpdGggcGFnZSBhbGxvY2F0aW9uIGZvciBhbm9ueW1vdXMgbWFwcGluZ3MsIGh1Z2UgcGFnZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgdHlwZSBvZiBjYWxsZXIgaXMgZ29pbmcgdG8gaGVhdmlseSBpbmZsdWVuY2UgdGhlIHVzYWdlIHBhdHRlcm5zLiBJIGFudGljaXBhdGUgc2VlaW5nIHVzYWdlIGluIGBtbWFwYCBpbXBsZW1lbnRhdGlvbnMsIHBvdGVudGlhbGx5IHdpdGhpbiB0aGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGl0c2VsZiwgcGVyaGFwcyByZWxhdGVkIHRvIGRlbWFuZCBwYWdpbmcgb3IgQ09XIG9wZXJhdGlvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBtZW1vcnkgcHJvdGVjdGlvbiBmbGFncyBhbmQgYWxsb2NhdGlvbiBjb25zdHJhaW50cyBwYXNzZWQgaW4sIHdoaWNoIGNhbiByZXZlYWwgY3J1Y2lhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW50ZW5kZWQgbWVtb3J5IHNlbWFudGljcy4gSSYjMzk7bSBhbHNvIHJlYWR5IHRvIHNlZSBzb21lIG1vcmUgZWRnZSBjYXNlIHNjZW5hcmlvcy4KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGRlZXAgZGl2ZSB0byBleGFtaW5lIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgbWVtb3J5IGZyYWdtZW50YXRpb24gaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlc2UgY2FsbGVycy4gTWF5YmUgdGhlcmUgYXJlIHNvbWUgY29tcGxleCBsb2NrIGludGVyYWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZXZhbHVhdGVkIGFuZCBjaGVja2VkLiBJIHdpbGwgYmUgbG9va2luZyB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBvcHBvcnR1bml0aWVzIHRvIG9wdGltaXplIGFuZCBtYWtlIHRoZSBtZW1vcnkgaGFuZGxpbmcgbW9yZSBlZmZpY2llbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2Fub25fZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0xMzA1PUVYUE9SVF9TWU1CT0xfR1BMKHRocF9nZXRfdW5tYXBwZWRfYXJlYSk7XG5tbS9odWdlX21lbW9yeS5jLTEzMDYtXG5tbS9odWdlX21lbW9yeS5jOjEzMDc6c3RhdGljIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0xMzA4LVx0XHR1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMzkwPXN0YXRpYyB2bV9mYXVsdF90IF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMzk3LVxubW0vaHVnZV9tZW1vcnkuYzoxMzk4Olx0Zm9saW8gPSB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQodm1hLCB2bWYtXHUwMDNlYWRkcmVzcyk7XG5tbS9odWdlX21lbW9yeS5jLTEzOTktXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcbi0tXG5tbS9odWdlX21lbW9yeS5jPTIxMDE9c3RhdGljIHZtX2ZhdWx0X3QgZG9faHVnZV96ZXJvX3dwX3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIxMDgtXG5tbS9odWdlX21lbW9yeS5jOjIxMDk6XHRmb2xpbyA9IHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCh2bWEsIHZtZi1cdTAwM2VhZGRyZXNzKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMjExMC1cdGlmICh1bmxpa2VseSghZm9saW8pKVxuLS1cbm1tL21lbW9yeS5jPTUyOTc9c3RhdGljIGJvb2wgcHRlX3JhbmdlX25vbmUocHRlX3QgKnB0ZSwgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbW9yeS5jLTUzMDgtXG5tbS9tZW1vcnkuYzo1MzA5OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9tZW1vcnkuYy01MzEwLXtcbi0tXG5tbS9tZW1vcnkuYy01MzcyLVx0XHR9XG5tbS9tZW1vcnkuYzo1MzczOlx0XHQvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi9cbm1tL21lbW9yeS5jLTUzNzQtXHRcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcbi0tXG5tbS9tZW1vcnkuYz01NDM3PXN0YXRpYyB2bV9mYXVsdF90IGRvX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTU0OTEtXHQvKiBSZXR1cm5zIE5VTEwgb24gT09NIG9yIEVSUl9QVFIoLUVBR0FJTikgaWYgd2UgbXVzdCByZXRyeSB0aGUgZmF1bHQgKi9cbm1tL21lbW9yeS5jOjU0OTI6XHRmb2xpbyA9IGFsbG9jX2Fub25fZm9saW8odm1mKTtcbm1tL21lbW9yeS5jLTU0OTMtXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5NTEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwga2V5IGFyZWFzOiBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIGFuZCB0aGVuIGBkb19zd2FwX3BhZ2VgIGFuZCBgYWxsb2NfYW5vbl9mb2xpb2AgaW4gYG1tL21lbW9yeS5jYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hhdCBhcmUgdGhlIHJlbGV2YW50IHN5bWJvbHMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQgb3IgZGlyZWN0bHkgY2FsbCB0aGVzZSBmdW5jdGlvbnMuCgpCZWZvcmUgSSBnbyB0b28gZmFyIGRvd24gdGhhdCByYWJiaXQgaG9sZSwgSSBzaG91bGQgZm9sbG93IGJlc3QgcHJhY3RpY2VzIGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgaW5jbHVkaW5nIGZ1bmN0aW9ucyB3aGljaCBhcmUgdG9vIGdlbmVyaWMuIEkmIzM5O2xsIHJlZmVyIGJhY2sgdG8gdGhlIGZvY3VzIHN5bWJvbHMgZ3VpZGVsaW5lcy4gVGhleSBleHBsaWNpdGx5IHNheSB0byAqYXZvaWQqIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocyBsaWtlIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIGV0Yy4gV2UgbmVlZCB0byB0YXJnZXQgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnkgcG9pbnRzLiBBbHNvLCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBpc3N1ZSB3aXRoIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGluIGhlYWRlcnMg4oCTIHRoZXkgZG9uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcywgc28gSSBuZWVkIHRvIGZpbmQgdGhlIG5vbi1zdGF0aWMgY2FsbGVycyBpZiB0aGUgY2hhbmdlIGlzIGxhcmdlbHkgaW4gdGhvc2UgaGVscGVycy4KClJpZ2h0LCBiYWNrIHRvIHRoZSBzeW1ib2xzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4gSSYjMzk7dmUgZ290IGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAsIHdoaWNoIGlzIG5vbi1zdGF0aWMgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEFuZCB0aGVuLCB3ZSBoYXZlIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLCB3aGljaCBpcyBzdGF0aWMsIGFuZCByZXNpZGVzIGluIGBtbS9odWdlX21lbW9yeS5jYC4gTm93LCB3aG8gKmNhbGxzKiBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYD8gSSBjYW4gc2VlIGEgY291cGxlIHJpZ2h0IGF3YXk6IGBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCAoc3RhdGljLCBjYWxsZWQgYnkgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCkgYW5kIGBkb19odWdlX3plcm9fd3BfcG1kYCAoc3RhdGljLCBjYWxsZWQgYnkgYGRvX2h1Z2VfcG1kX3dwX3BhZ2VgKS4gT2ssIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgYW5kIGBkb19odWdlX3BtZF93cF9wYWdlYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgYXJlIHRoZSBuZXh0IGZ1bmN0aW9ucyBJJiMzOTtsbCBsb29rIGludG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX2h1Z2VfcG1kXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTEzODA9c3RhdGljIHZvaWQgbWFwX2Fub25fZm9saW9fcG1kX3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMzg5LVxubW0vaHVnZV9tZW1vcnkuYzoxMzkwOnN0YXRpYyB2bV9mYXVsdF90IF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9odWdlX21lbW9yeS5jLTEzOTEte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTQ0MS1cbm1tL2h1Z2VfbWVtb3J5LmM6MTQ0Mjp2bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2RldmljZV9wcml2YXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxubW0vaHVnZV9tZW1vcnkuYy0xNDQzLXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE1MTY9c3RhdGljIHZvaWQgc2V0X2h1Z2VfemVyb19mb2xpbyhwZ3RhYmxlX3QgcGd0YWJsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xNTI3LVxubW0vaHVnZV9tZW1vcnkuYzoxNTI4OnZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9odWdlX21lbW9yeS5jLTE1Mjkte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTU4MS1cbm1tL2h1Z2VfbWVtb3J5LmM6MTU4MjpcdHJldHVybiBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHZtZik7XG5tbS9odWdlX21lbW9yeS5jLTE1ODMtfVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjEwMT1zdGF0aWMgdm1fZmF1bHRfdCBkb19odWdlX3plcm9fd3BfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjEzMi1cbm1tL2h1Z2VfbWVtb3J5LmM6MjEzMzp2bV9mYXVsdF90IGRvX2h1Z2VfcG1kX3dwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9odWdlX21lbW9yeS5jLTIxMzQte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjIyNz1zdGF0aWMgaW5saW5lIGJvb2wgY2FuX2NoYW5nZV9wbWRfd3JpdGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMjU2LVxubW0vaHVnZV9tZW1vcnkuYzoyMjU3OnZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfdWZmZF9yd3Aoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9odWdlX21lbW9yeS5jLTIyNTgte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjI4NS0vKiBOVU1BIGhpbnRpbmcgcGFnZSBmYXVsdCBlbnRyeSBwb2ludCBmb3IgdHJhbnMgaHVnZSBwbWRzICovXG5tbS9odWdlX21lbW9yeS5jOjIyODY6dm1fZmF1bHRfdCBkb19odWdlX3BtZF9udW1hX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9odWdlX21lbW9yeS5jLTIyODcte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjQ4MT1zdGF0aWMgYm9vbCBoYXNfZGVwb3NpdGVkX3BndGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90IHBtZHZhbCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI0OTYtXHQgKiBPdGhlcndpc2UsIG9ubHkgYW5vbnltb3VzIGZvbGlvcyBhcmUgZGVwb3NpdGVkLCBzZWVcbm1tL2h1Z2VfbWVtb3J5LmM6MjQ5NzpcdCAqIF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UoKS5cbm1tL2h1Z2VfbWVtb3J5LmMtMjQ5OC1cdCAqL1xuLS1cbm1tL21lbW9yeS5jPTYzODk9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IGNyZWF0ZV9odWdlX3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy02MzkyLVx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSlcbm1tL21lbW9yeS5jOjYzOTM6XHRcdHJldHVybiBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSh2bWYpO1xubW0vbWVtb3J5LmMtNjM5NC1cdGlmICh2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWh1Z2VfZmF1bHQpXG4tLVxubW0vbWVtb3J5LmM9NjQwMD1zdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3Qgd3BfaHVnZV9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNjQxMi1cdFx0fVxubW0vbWVtb3J5LmM6NjQxMzpcdFx0cmV0dXJuIGRvX2h1Z2VfcG1kX3dwX3BhZ2Uodm1mKTtcbm1tL21lbW9yeS5jLTY0MTQtXHR9XG4tLVxubW0vbWVtb3J5LmM9NjYxND1zdGF0aWMgdm1fZmF1bHRfdCBfX2hhbmRsZV9tbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1vcnkuYy02Njg4LVx0XHRpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHZtZi5vcmlnX3BtZCkpXG5tbS9tZW1vcnkuYzo2Njg5Olx0XHRcdHJldHVybiBkb19odWdlX3BtZF9kZXZpY2VfcHJpdmF0ZShcdTAwMjZ2bWYpO1xubW0vbWVtb3J5LmMtNjY5MC1cbi0tXG5tbS9tZW1vcnkuYy02Njk3LVx0XHRcdGlmICh1c2VyZmF1bHRmZF9odWdlX3BtZF9yd3Aodm1hLCB2bWYub3JpZ19wbWQpKVxubW0vbWVtb3J5LmM6NjY5ODpcdFx0XHRcdHJldHVybiBkb19odWdlX3BtZF91ZmZkX3J3cChcdTAwMjZ2bWYpO1xubW0vbWVtb3J5LmM6NjY5OTpcdFx0XHRyZXR1cm4gZG9faHVnZV9wbWRfbnVtYV9wYWdlKFx1MDAyNnZtZik7XG5tbS9tZW1vcnkuYy02NzAwLVx0XHR9XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz03ODA9RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9zZXR1cCk7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03ODgtICogQHBhZ2UgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgYW5kIHNldHVwIGFmdGVyIGl0JiMzOTtzIGFsbG9jYXRlZC4gVGhlIGNvZGUgYml0c1xubW0vbWlncmF0ZV9kZXZpY2UuYzo3ODk6ICogaGVyZSBmb2xsb3cgY2xvc2VseSB0aGUgY29kZSBpbiBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKCkuIFRoaXMgQVBJIGRvZXNcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzkwLSAqIG5vdCBzdXBwb3J0IFRIUCB6ZXJvIHBhZ2VzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI3NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEyODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nIGZvY3VzLCBrZWVwaW5nIGluIG1pbmQgdGhhdCB3ZSB3YW50IHRvIGF2b2lkIHViaXF1aXRvdXMgZnVuY3Rpb25zIHRoYXQgZGlsdXRlIHRoZSBmdXp6aW5nIGVmZm9ydC4gTXkgaW5pdGlhbCBsaXN0IGluY2x1ZGVzIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAsIGBkb19odWdlX3BtZF93cF9wYWdlYCwgYGRvX3N3YXBfcGFnZWAsIGFuZCBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgLgoKVGhlIGZpcnN0IHRob3VnaHQgaXMgYGRvX3N3YXBfcGFnZWAsIGlzIGl0IGEgaG90IHBhdGg/IE5vLCBpdCYjMzk7cyBhIHN3YXAtaW4gcGFnZSBmYXVsdCBoYW5kbGVyLCB3aGljaCBpcyBtb3JlIHNwZWNpZmljLiBIb3dldmVyLCBwYWdlIGZhdWx0IGhhbmRsZXJzIGluIGdlbmVyYWwgYXJlIHVzdWFsbHkgbm90IGdvb2QgdGFyZ2V0cy4gVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHRlbGwgdXMgdG8gYXZvaWQgdGhvc2UuIFNvLCBgaGFuZGxlX21tX2ZhdWx0YCBhbmQgYGRvX2Fub255bW91c19wYWdlYCBhcmUgb3V0LgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhhdCBsb2dpYyBpcyBhcHBsaWNhYmxlIGhlcmUuIFRoZSBpbnN0cnVjdGlvbnMgYWxzbyBzYXk6CgomZ3Q7ICYjMzQ7QVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOiBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cyAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdCBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4gTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LCB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuJiMzNDsKClNvLCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIG15IGNob2ljZXMuCgpOb3csIGxldCYjMzk7cyBjbGFyaWZ5IHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQ6IGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAsIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAsIGBkb19odWdlX3BtZF93cF9wYWdlYCwgYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAsIGBhbGxvY19hbm9uX2ZvbGlvYCwgYW5kIGBkb19zd2FwX3BhZ2VgLgoKYF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCBpcyBvbmx5IGNhbGxlZCB3aGVuIGBjdXJyZW50LSZndDttZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2hgIGlzIHNldC4gU28sIG5vdCB1YmlxdWl0b3VzLiBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgIGFuZCBgZG9faHVnZV9wbWRfd3BfcGFnZWAgYXJlIHNwZWNpZmljIHRvIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUCkuIFNvLCBpdCBzaG91bGQgYmUgYSBnb29kIGNhbmRpZGF0ZS4KCk5vdywgYGRvX3N3YXBfcGFnZWAgLSBpcyB0aGF0IGEgZ2VuZXJpYyBoYW5kbGVyIG9yIHN3YXAtc3BlY2lmaWM/IEl0IGlzIGEgJiMzNDtwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIHN3YXAgZW50cmllcyYjMzQ7LiBCdXQgdGhlIG1vcmUgc3BlY2lmaWMgdGhyb3R0bGluZyBsb2dpYyBpcyBpbiBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgISBTbywgYF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCBsb29rcyBwcm9taXNpbmcuCgpZZXMhIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgaXMgdGhlIGNvcmUgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIG1lbW9yeS5oaWdoIGxpbWl0IGlzIGV4Y2VlZGVkLiBUaGF0JiMzOTtzIGEgZGlyZWN0IHRhcmdldC4gQWxzbywgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCBhbmQgYGRvX2h1Z2VfcG1kX3dwX3BhZ2VgIGFyZSBkaXJlY3QgY2FsbGVycyBvZiBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYC4KCkJ1dCB3aGF0IGFib3V0IGBkb19zd2FwX3BhZ2VgPyBJdCBtaWdodCBiZSBhIHBhZ2UgZmF1bHQgaGFuZGxlciBhbmQgbm90IGEgZ29vZCBmb2N1cyBzeW1ib2wuIEJ1dCB0aGUgcGF0Y2ggZGlyZWN0bHkgbW9kaWZpZXMgdGhpcyBmdW5jdGlvbiBpbiBgbW0vbWVtb3J5LmNgLCBjYWxsaW5nIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgLiBBbHNvIGl0IGlzIGluOgoKYGBgYwp2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKLi4uCm91dDoKCWlmIChzaSkKCQlwdXRfc3dhcF9kZXZpY2Uoc2kpOwoJbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpOwoJcmV0dXJuIHJldDsKYGBgCgpBbHNvLCBgYWxsb2NfYW5vbl9mb2xpb2A6CgpgYGBjCnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpCi4uLgoJbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpOwpgYGAKCmFuZCBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYDoKCmBgYGMKc3RhdGljIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCi4uLgoJbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpOwpgYGAKCkxldCYjMzk7cyBjaGVjayB0aGUgY2FsbGVycyBvZiBgYWxsb2NfYW5vbl9mb2xpb2AuIEl0JiMzOTtzIHN0YXRpYywgYW5kIG9ubHkgY2FsbGVkIGJ5IGBkb19hbm9ueW1vdXNfcGFnZWAuIEFuZCBgZG9fYW5vbnltb3VzX3BhZ2VgIGlzIGEgdHlwaWNhbCBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yICphbm9ueW1vdXMqIHBhZ2VzOyB0aGVyZWZvcmUsIHViaXF1aXRvdXMuCgpJbiBzdW1tYXJ5LCBgZG9fc3dhcF9wYWdlYCBpcyBzd2FwLXNwZWNpZmljOyBzbyB0aGUgcGF0Y2ggdG8gdGhlIGZ1bmN0aW9uIGlzIGdvb2QsIGFuZCBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgIGlzIHRoZSB3b3JrIGhvcnNlLiBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgIGlzIGEgVEhQIFBNRCBmYXVsdCBoYW5kbGVyLiBgZG9faHVnZV9wbWRfd3BfcGFnZWAgaXMgVEhQIFBNRCB3cml0ZSBwcm90ZWN0aW9uIGZhdWx0IGhhbmRsZXIuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSByZWxldmFudCBjb25maWdzOgoKMQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1NXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjIzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIGBkb19zd2FwX3BhZ2VgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhpcyBwYWdlIHN3YXBwaW5nIHByb2Nlc3MuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBkb19zd2FwX3BhZ2VgIOKAkyB0aGF0JiMzOTtzIGdvaW5nIHRvIGJlIGluIGBtbS9tZW1vcnkuY2AuIEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgbWVjaGFuaWNzIG9mIHN3YXBwaW5nIGEgcGFnZSBpbiBvciBvdXQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRldGFpbHMgb24gdGhpbmdzIGxpa2UgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHN3YXAgY2FjaGUsIHRoZSBwYWdlIHRhYmxlIHVwZGF0ZXMsIHRoZSBwb3RlbnRpYWwgZm9yIEkvTyBvcGVyYXRpb25zLCBhbmQgYW55IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGludm9sdmVkLiBJIHdhbnQgdG8gc2VlIHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBzbyBJIGNhbiBhY2N1cmF0ZWx5IGFzc2VzcyB3aGVyZSB0aGUgYm90dGxlbmVjayBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19zd2FwX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz01MTAwPXZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNTEyMi1cbm1tL2h1Z2VfbWVtb3J5LmM6NTEyMzpcdC8qIFNlZSBkb19zd2FwX3BhZ2UoKTogcmVzdG9yZSBQQUdFX05PTkUgZm9yIFJXUCAqL1xubW0vaHVnZV9tZW1vcnkuYy01MTI0LVx0aWYgKHBtZF9zd3BfdWZmZCgqcHZtdy1cdTAwM2VwbWQpIFx1MDAyNlx1MDAyNiB1c2VyZmF1bHRmZF9yd3Aodm1hKSlcbi0tXG5tbS9pbnRlcm5hbC5oPTU2Nz1zdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3Qgdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9pbnRlcm5hbC5oLTU3NS1cbm1tL2ludGVybmFsLmg6NTc2OnZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcbm1tL2ludGVybmFsLmgtNTc3LXZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLS1cbm1tL2todWdlcGFnZWQuYz0xMTU5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IF9fY29sbGFwc2VfaHVnZV9wYWdlX3N3YXBpbihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTE4MS1cdFx0XHQgKiBIZXJlIHRoZSBwdGwgaXMgb25seSB1c2VkIHRvIGNoZWNrIHB0ZV9zYW1lKCkgaW5cbm1tL2todWdlcGFnZWQuYzoxMTgyOlx0XHRcdCAqIGRvX3N3YXBfcGFnZSgpLCBzbyByZWFkb25seSB2ZXJzaW9uIGlzIGVub3VnaC5cbm1tL2todWdlcGFnZWQuYy0xMTgzLVx0XHRcdCAqL1xuLS1cbm1tL2todWdlcGFnZWQuYy0xMjEyLVx0XHR2bWYucHRsID0gcHRsO1xubW0va2h1Z2VwYWdlZC5jOjEyMTM6XHRcdHJldCA9IGRvX3N3YXBfcGFnZShcdTAwMjZ2bWYpO1xubW0va2h1Z2VwYWdlZC5jLTEyMTQtXHRcdC8qIFdoaWNoIHVubWFwcyBwdGUgKGFmdGVyIHBlcmhhcHMgcmUtY2hlY2tpbmcgdGhlIGVudHJ5KSAqL1xuLS1cbm1tL2todWdlcGFnZWQuYy0xMjE3LVx0XHQvKlxubW0va2h1Z2VwYWdlZC5jOjEyMTg6XHRcdCAqIGRvX3N3YXBfcGFnZSgpIHJldHVybnMgVk1fRkFVTFRfUkVUUlkgd2l0aCByZWxlYXNlZCBtbWFwX2xvY2suXG5tbS9raHVnZXBhZ2VkLmMtMTIxOS1cdFx0ICogTm90ZSB3ZSB0cmVhdCBWTV9GQVVMVF9SRVRSWSBhcyBWTV9GQVVMVF9FUlJPUiBoZXJlIGJlY2F1c2Vcbi0tXG5tbS9rc20uYz0zMTM3PXN0cnVjdCBmb2xpbyAqa3NtX21pZ2h0X25lZWRfdG9fY29weShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2tzbS5jLTMxNTktXHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxubW0va3NtLmM6MzE2MDpcdFx0cmV0dXJuIGZvbGlvO1x0XHQvKiBsZXQgZG9fc3dhcF9wYWdlIHJlcG9ydCB0aGUgZXJyb3IgKi9cbm1tL2tzbS5jLTMxNjEtXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMDY1PXN0YXRpYyBpbnQgbWVfcGFnZWNhY2hlX2RpcnR5KHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMDk3LSAqICAgICAgICBjb3JydXB0ZWQgZGF0YSBhbmQgc2hhbGwgYmUga2lsbGVkICh3ZSBpbnN0YWxsZWQgc2ltcGxlXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEwOTg6ICogICAgICAgIGludGVyY2VwdGlvbiBjb2RlIGluIGRvX3N3YXBfcGFnZSB0byBjYXRjaCBpdCkuXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEwOTktICpcbi0tXG5tbS9tZW1vcnkuYz05NDc9c3RhdGljIHZvaWQgcmVzdG9yZV9leGNsdXNpdmVfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbW9yeS5jLTk2MS1cbm1tL21lbW9yeS5jOjk2MjpcdC8qIFNlZSBkb19zd2FwX3BhZ2UoKTogcmVzdG9yZSBQQUdFX05PTkUgZm9yIFJXUCAqL1xubW0vbWVtb3J5LmMtOTYzLVx0aWYgKHB0ZV9zd3BfdWZmZChvcmlnX3B0ZSkgXHUwMDI2XHUwMDI2IHVzZXJmYXVsdGZkX3J3cCh2bWEpKVxuLS1cbm1tL21lbW9yeS5jPTM2NTI9aW50IGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnkuYy0zNjYxLSAqIG9yIGNvbmZpZ3VyYXRpb25zIChlLmcuIGkzODYgd2l0aCBQQUUpIHdoaWNoIG1pZ2h0IGdpdmUgYSBtaXggb2YgdW5tYXRjaGVkXG5tbS9tZW1vcnkuYzozNjYyOiAqIHBhcnRzLCBkb19zd2FwX3BhZ2UgbXVzdCBjaGVjayB1bmRlciBsb2NrIGJlZm9yZSB1bm1hcHBpbmcgdGhlIHB0ZSBhbmRcbm1tL21lbW9yeS5jLTM2NjMtICogcHJvY2VlZGluZyAoYnV0IGRvX3dwX3BhZ2UgaXMgb25seSBjYWxsZWQgYWZ0ZXIgYWxyZWFkeSBtYWtpbmcgc3VjaCBhIGNoZWNrO1xuLS1cbm1tL21lbW9yeS5jPTQ3OTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDgzOS1cdC8qXG5tbS9tZW1vcnkuYzo0ODQwOlx0ICogRm9yIGRvX3N3YXBfcGFnZSwgZmluZCB0aGUgaGlnaGVzdCBvcmRlciB3aGVyZSB0aGUgYWxpZ25lZCByYW5nZSBpc1xubW0vbWVtb3J5LmMtNDg0MS1cdCAqIGNvbXBsZXRlbHkgc3dhcCBlbnRyaWVzIHdpdGggY29udGlndW91cyBzd2FwIG9mZnNldHMuXG4tLVxubW0vbWVtb3J5LmM9NDg2Mz1zdGF0aWMgdm9pZCBjaGVja19zd2FwX2V4Y2x1c2l2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSxcbi0tXG5tbS9tZW1vcnkuYy00ODgwLSAqL1xubW0vbWVtb3J5LmM6NDg4MTp2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbm1tL21lbW9yeS5jLTQ4ODIte1xuLS1cbm1tL21lbW9yeS5jLTUyMjQtXHRzZXRfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHJlc3MsIHB0ZXAsIHB0ZSwgbnJfcGFnZXMpO1xubW0vbWVtb3J5LmM6NTIyNTpcdGFyY2hfZG9fc3dhcF9wYWdlX25yKHZtYS1cdTAwM2V2bV9tbSwgdm1hLCBhZGRyZXNzLFxubW0vbWVtb3J5LmMtNTIyNi1cdFx0XHRwdGUsIHB0ZSwgbnJfcGFnZXMpO1xuLS1cbm1tL21lbW9yeS5jPTY1MjQ9c3RhdGljIHZtX2ZhdWx0X3QgaGFuZGxlX3B0ZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy02NTcwLVx0aWYgKCFwdGVfcHJlc2VudCh2bWYtXHUwMDNlb3JpZ19wdGUpKVxubW0vbWVtb3J5LmM6NjU3MTpcdFx0cmV0dXJuIGRvX3N3YXBfcGFnZSh2bWYpO1xubW0vbWVtb3J5LmMtNjU3Mi1cbi0tXG5tbS9taWdyYXRlLmM9MzUxPXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTQwNC1cbm1tL21pZ3JhdGUuYzo0MDU6XHRcdC8qIFNlZSBkb19zd2FwX3BhZ2UoKTogcmVzdG9yZSBQQUdFX05PTkUgZm9yIFJXUCAqL1xubW0vbWlncmF0ZS5jLTQwNi1cdFx0aWYgKHB0ZV9zd3BfdWZmZChvbGRfcHRlKSBcdTAwMjZcdTAwMjYgdXNlcmZhdWx0ZmRfcndwKHZtYSkpXG4tLVxubW0vcGFnZV9pby5jPTQxOT1zdGF0aWMgYm9vbCBzd2FwX3JlYWRfZm9saW9femVyb21hcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3BhZ2VfaW8uYy00MjktXHQgKiBjdXJyZW50bHkgaGFuZGxlZC4gUmV0dXJuIHRydWUgd2l0aG91dCBtYXJraW5nIHRoZSBmb2xpbyB1cHRvZGF0ZSBzb1xubW0vcGFnZV9pby5jOjQzMDpcdCAqIHRoYXQgYW4gSU8gZXJyb3IgaXMgZW1pdHRlZCAoZS5nLiBkb19zd2FwX3BhZ2UoKSB3aWxsIHNpZ2J1cykuXG5tbS9wYWdlX2lvLmMtNDMxLVx0ICogRm9saW8gbG9jayBzdGFiaWxpemVzIHRoZSBjbHVzdGVyIGFuZCBtYXAsIHNvIHRoZSBjaGVjayBpcyBzYWZlLlxuLS1cbm1tL3JtYXAuYz0yNDY1PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjcyNy1cdFx0XHQgKiBTdG9yZSB0aGUgcGZuIG9mIHRoZSBwYWdlIGluIGEgc3BlY2lhbCBtaWdyYXRpb25cbm1tL3JtYXAuYzoyNzI4Olx0XHRcdCAqIHB0ZS4gZG9fc3dhcF9wYWdlKCkgd2lsbCB3YWl0IHVudGlsIHRoZSBtaWdyYXRpb25cbm1tL3JtYXAuYy0yNzI5LVx0XHRcdCAqIHB0ZSBpcyByZW1vdmVkIGFuZCB0aGVuIHJlc3RhcnQgZmF1bHQgaGFuZGxpbmcuXG4tLVxubW0vcm1hcC5jPTI4Njk9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3JtYXAuYy0yOTQ3LVx0ICogU3RvcmUgdGhlIHBmbiBvZiB0aGUgcGFnZSBpbiBhIHNwZWNpYWwgZGV2aWNlLWV4Y2x1c2l2ZSBQRk4gc3dhcCBQVEUuXG5tbS9ybWFwLmM6Mjk0ODpcdCAqIGRvX3N3YXBfcGFnZSgpIHdpbGwgdHJpZ2dlciB0aGUgY29udmVyc2lvbiBiYWNrIHdoaWxlIGhvbGRpbmcgdGhlXG5tbS9ybWFwLmMtMjk0OS1cdCAqIGZvbGlvIGxvY2suXG4tLVxubW0vc2htZW0uYz0yMDQzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBfYWxsb2NfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9zaG1lbS5jLTIwODAtICogSW4gYSBmdXR1cmUgcmVsZWFzZSwgdGhpcyBtYXkgd2VsbCBiZSBleHRlbmRlZCB0byByZXNwZWN0IGNwdXNldCBhbmRcbm1tL3NobWVtLmM6MjA4MTogKiBOVU1BIG1lbXBvbGljeSwgYW5kIGFwcGxpZWQgYWxzbyB0byBhbm9ueW1vdXMgcGFnZXMgaW4gZG9fc3dhcF9wYWdlKCk7XG5tbS9zaG1lbS5jLTIwODItICogYnV0IGZvciBub3cgaXQgaXMgYSBzaW1wbGUgbWF0dGVyIG9mIHpvbmUuXG4tLVxubW0vc3dhcGZpbGUuYz0xODMwPXZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vc3dhcGZpbGUuYy0xODcwLSAqICAgQ1BVMVx0XHRcdFx0Q1BVMlxubW0vc3dhcGZpbGUuYzoxODcxOiAqICAgZG9fc3dhcF9wYWdlKClcbm1tL3N3YXBmaWxlLmMtMTg3Mi0gKiAgICAgLi4uXHRcdFx0XHRzd2Fwb2ZmJiM0Mztzd2Fwb25cbi0tXG5tbS9zd2FwZmlsZS5jLTE4NzgtICogY2hhbmdpbmcgcGFydGx5IGJlY2F1c2UgdGhlIHNwZWNpZmllZCBzd2FwIGVudHJ5IG1heSBiZSBmb3IgYW5vdGhlclxubW0vc3dhcGZpbGUuYzoxODc5OiAqIHN3YXAgZGV2aWNlIHdoaWNoIGhhcyBiZWVuIHN3YXBvZmYuICBBbmQgaW4gZG9fc3dhcF9wYWdlKCksIGFmdGVyXG5tbS9zd2FwZmlsZS5jLTE4ODAtICogdGhlIHBhZ2UgaXMgcmVhZCBmcm9tIHRoZSBzd2FwIGRldmljZSwgdGhlIFBURSBpcyB2ZXJpZmllZCBub3Rcbi0tXG5tbS9zd2FwZmlsZS5jPTI0MTk9c3RhdGljIGludCB1bnVzZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vc3dhcGZpbGUuYy0yNDg1LVx0XHQvKlxubW0vc3dhcGZpbGUuYzoyNDg2Olx0XHQgKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHdyaXRlYmFjayB3b3VsZCBiZSBwcm9ibGVtYXRpYy5cbm1tL3N3YXBmaWxlLmMtMjQ4Ny1cdFx0ICogSG93ZXZlciwgd2UgZG8gYSBmb2xpb193YWl0X3dyaXRlYmFjaygpIGp1c3QgYmVmb3JlIHRoaXNcbi0tXG5tbS9zd2FwZmlsZS5jLTI1MTQtXG5tbS9zd2FwZmlsZS5jOjI1MTU6XHQvKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cbm1tL3N3YXBmaWxlLmMtMjUxNi1cdGlmIChwdGVfc3dwX3VmZmQob2xkX3B0ZSkgXHUwMDI2XHUwMDI2IHVzZXJmYXVsdGZkX3J3cCh2bWEpKVxuLS1cbm1tL3pzd2FwLmM9MTQ4OD1ib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy0xNTgyLSAqICBpbnRvIHRoZSBwYWdlIGR1ZSB0byBhIGRlY29tcHJlc3Npb24gZmFpbHVyZS4gVGhlIGZvbGlvIGlzIHVubG9ja2VkLCBidXRcbm1tL3pzd2FwLmM6MTU4MzogKiAgTk9UIG1hcmtlZCB1cC10by1kYXRlLCBzbyB0aGF0IGFuIElPIGVycm9yIGlzIGVtaXR0ZWQgKGUuZy4gZG9fc3dhcF9wYWdlKClcbm1tL3pzd2FwLmMtMTU4NC0gKiAgd2lsbCBTSUdCVVMpLlxuLS1cbm1tL3pzd2FwLmMtMTU4OC0gKiAgYnV0IE5PVCBtYXJrZWQgdXAtdG8tZGF0ZSwgc28gdGhhdCBhbiBJTyBlcnJvciBpcyBlbWl0dGVkIChlLmcuXG5tbS96c3dhcC5jOjE1ODk6ICogIGRvX3N3YXBfcGFnZSgpIHdpbGwgU0lHQlVTKS5cbm1tL3pzd2FwLmMtMTU5MC0gKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzM5MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbiBmb3IgT3B0aW1hbCBQZXJmb3JtYW5jZSoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgTUVNQ0dgIGFzIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9ucyB0byBvcHRpbWl6ZS4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHR3ZWFraW5nIG1lbW9yeSBwZXJmb3JtYW5jZS4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGUgbmVjZXNzaXR5IG9mIGBTV0FQYC4gSXMgYFNXQVBgIGdlbnVpbmVseSByZXF1aXJlZCwgb3IgaXMgdGhlcmUgYSBzcGVjaWZpYyBgQ09ORklHX1NXQVBgIG9wdGlvbiBJIG5lZWQgdG8gY29uc2lkZXI/IFJpZ2h0LCBub3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCBgZG9fc3dhcF9wYWdlYCBpcyB0aGUgb25lIHRoYXQmIzM5O3MgaW52b2x2ZWQgaW4gc3dhcC1pbiwgbWlncmF0aW9uLCB0aG9zZSBkZXZpY2UgcHJpdmF0ZS9leGNsdXNpdmUgZW50cmllcywgYW5kIGFsbCB0aGF0LiBTbyBJIHByb2JhYmx5IGRvbiYjMzk7dCBuZWVkIHRvIGRpdmUgaW50byB0aGF0IHNwZWNpZmljIGRldGFpbCB5ZXQuCgpOb3csIGxldCYjMzk7cyBnbyBiYWNrIHRvIHRoZSBLY29uZmlnIGZpbGVzLiBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbnMgb2YgYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHRoZXJlLiBJdCYjMzk7cyBiZXN0IHByYWN0aWNlIHRvIHJldmlldyB0aGVpciBzZXR0aW5ncyBhbmQgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgaW4gYG1tL0tjb25maWdgIGZvciBib3RoIG9mIHRoZXNlLCBvZiBjb3Vyc2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2YgdGhlaXIgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRXxjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04MzI9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04MzQtXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzNi1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODUzPWNob2ljZVxuLS1cbm1tL0tjb25maWctODU4LVxubW0vS2NvbmZpZzo4NTk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg2MC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2NS1cbm1tL0tjb25maWc6ODY2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODY3LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3NC1cbm1tL0tjb25maWc6ODc1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg3Ni1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODgyPWNob2ljZVxuLS1cbm1tL0tjb25maWctODkxLVxubW0vS2NvbmZpZzo4OTI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04OTMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwMS1cbm1tL0tjb25maWc6OTAyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkwMy1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwOS1cbm1tL0tjb25maWc6OTEwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTExLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTctXG5tbS9LY29uZmlnOjkxODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MTktXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05Mjc9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MzYtXG5tbS9LY29uZmlnOjkzNzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkzOC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQ1LVxubW0vS2NvbmZpZzo5NDY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTQ3LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTUzLVxubW0vS2NvbmZpZzo5NTQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NTUtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk2MS1cbm1tL0tjb25maWc6OTYyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk2My1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1MDUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsJiMzOTtzIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBNRU1DR2Agd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHN0ZXAsIGVzcGVjaWFsbHkgd2hlbiB3b3JraW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgb3B0aW9uIGlzIHNldCBhbmQgcG90ZW50aWFsbHkgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBMZXQmIzM5O3Mgc2VlLi4uIEtjb25maWcgaXMgdGhlIGtleSBoZXJlLiBJdOKAmXMgdGhlIGJhY2tib25lIG9mIHRoZSBrZXJuZWzigJlzIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdXNlIHRoZSB0b29scyBhdmFpbGFibGUgdG8gcXVpY2tseSB0cmFjZSBpdHMgZGVjbGFyYXRpb24uIFVuZGVyc3RhbmRpbmcgaXRzIHBsYWNlbWVudCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBpbmZyYXN0cnVjdHVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDg0LVxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA4Ni1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA5NS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwMC1cbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTExMDItXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDctXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTA5LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTE3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFN3YXAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3dhcCBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBmaXJzdCB0aGluZyBJJiMzOTtsbCBjaGVjayBpcyBgQ09ORklHX1NXQVBgIGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIG1hc3RlciBzd2l0Y2gsIHNvIHRvIHNwZWFrLiBVbmRlcnN0YW5kaW5nIHRoYXQgc2V0dGluZyBpcyBjcnVjaWFsLiBJIGtub3cgdGhlcmUgYXJlIGRlcGVuZGVuY2llcyBhbmQgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBjb21lIGludG8gcGxheSBvbmNlIGBDT05GSUdfU1dBUGAgaXMgZW5hYmxlZCAob3IgZGlzYWJsZWQpLCBsaWtlIHZhcmlvdXMgc3dhcCBhbGdvcml0aG1zLCBkZXZpY2Ugc3VwcG9ydCwgYW5kIHNvIG9uLCBidXQgKnRoaXMqIGlzIHRoZSBpbml0aWFsIGdhdGUuIEJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljcyBvZiBhIHBhcnRpY3VsYXIgaXNzdWUsIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgb3IgYSBkZXNpZ24gY29uc2lkZXJhdGlvbiwgSSB3YW50IHRvIGJlIDEwMCUgY2xlYXIgb24gKndoZXRoZXIqIHN3YXAgaXMgZXZlbiAqZW5hYmxlZCogYXQgYWxsLCBvciBwb3RlbnRpYWxseSBhY2NpZGVudGFsbHkgZGlzYWJsZWQuIEdyYWJiaW5nIHRoYXQgaW5pdGlhbCBkYXRhIHBvaW50IGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgc3dhcCBpbnRlcmFjdHMgd2l0aCBteSB1c2UgY2FzZSwgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBtaWdodCBiZSBpZiBzd2FwIGlzIHNldCB0byBvZmYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXG4tLVxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyNTMKCQkJCQkJCW91dHB1dDogMjAxCgkJCQkJCQl0aG91Z2h0czogMTA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIFNlbGVjdGlvbiBmb3IgRnV6emluZyBGb2N1cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBzZXQgZm9yIHRoZSBmdXp6aW5nIGFuYWx5c2lzIHRvIGJlIHJlbGV2YW50LiBUaGUgcGF0Y2ggZGVwZW5kcyBvbiBgTUVNQ0dgIChmb3IgbWVtb3J5IGNncm91cCBjb250cm9sbGVyIGFuZCB0aHJvdHRsaW5nLCBzcGVjaWZpY2FsbHkgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgYW5kIGl0cyBpbnRlcm5hbCBvcGVyYXRpb25zKSwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCAoZm9yIFRIUCBzdXBwb3J0IGFuZCB0aGUgYG1tL2h1Z2VfbWVtb3J5LmNgIGNvZGUsIGluY2x1ZGluZyBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCksIGFuZCBgU1dBUGAgKGZvciBhbm9ueW1vdXMgbWVtb3J5IHN3YXAgc3VwcG9ydCwgaW52b2x2aW5nIGBkb19zd2FwX3BhZ2VgKS4gSSYjMzk7bSBnb2luZyB0byBub3RlIHRoZXNlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLgoKTm93LCBmb3IgdGhlIGltcG9ydGFudCBwYXJ0OiBpZGVudGlmeWluZyB0aGUgKnJpZ2h0KiBzeW1ib2xzIHRvIGZvY3VzIHRoZSBmdXp6aW5nIGVmZm9ydC4gSW5pdGlhbGx5LCBteSBtaW5kIGp1bXBzIHRvIHRoZSBrZXkgZnVuY3Rpb25zOiBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgICh0aGUgY29yZSB0aHJvdHRsaW5nIGxvZ2ljKSwgYGRvX3N3YXBfcGFnZWAgKHdoaWNoIG5vdyBpbmNvcnBvcmF0ZXMgdGhlIHRocm90dGxpbmcpLCBhbmQgdGhlIFRIUCBmYXVsdCBoYW5kbGVycyBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgIGFuZCBgZG9faHVnZV9wbWRfd3BfcGFnZWAuCgpIb3dldmVyLCB0aGUgZG9jdW1lbnRhdGlvbiBpcyBjbGVhcjogSSBuZWVkIHRvIGF2b2lkIGxpc3RpbmcgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoZSBnZW5lcmljIGZhdWx0IGhhbmRsZXJzIChgaGFuZGxlX21tX2ZhdWx0YCwgYGRvX2Fub255bW91c19wYWdlYCwgZXRjLikgYXJlIGNhbGxlZCAqZXZlcnl3aGVyZSouICBCdXQsIGBkb19zd2FwX3BhZ2VgIGlzIGEgZ29vZCBjaG9pY2UgYmVjYXVzZSBpdCYjMzk7cyAqc3BlY2lmaWMqIHRvIHN3YXBwZWQtb3V0IHBhZ2VzLiBTaW1pbGFybHksIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgYW5kIGBkb19odWdlX3BtZF93cF9wYWdlYCBhcmUgVEhQLXNwZWNpZmljLiBUaGV5JiMzOTtyZSBub3QgY2FsbGVkIG9uICpldmVyeSogcGFnZSBmYXVsdCwgb25seSBmb3IgdGhlIHJlbGV2YW50IGNhc2VzLCB3aGljaCBpcyBwZXJmZWN0IGZvciB0YXJnZXRlZCBmdXp6aW5nLiBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgIGlzIHRoZSBjb3JlLCB0YXJnZXQgZnVuY3Rpb24sIGFzIHdlbGwuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJIHRob3VnaHQgYWJvdXQgYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAgb3IgYGFsbG9jX2Fub25fZm9saW9gLCBiZWNhdXNlIHRoZXkgYXJlIHN0YXRpYyBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRoZXkgYXJlIHN0YXRpYyBmdW5jdGlvbnMgaW4gYC5jYCBmaWxlcywgc28gdGhleSYjMzk7cmUgbm90IHN1YmplY3QgdG8gdGhlIGhlYWRlciBydWxlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7dmUgY2hlY2tlZCBldmVyeXRoaW5nIGFjY29yZGluZyB0byB0aGUgcHJvY2Vzcy4KCjEuICBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgOiBUaGUgY2hhbmdlcyAqZG8qIHRvdWNoIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtZW1jZyB0aHJvdHRsaW5nIHBhdGhzLCBzcGVjaWZpY2FsbHkgYnkgYWRkaW5nIGNhbGxzIHRvIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgaW4gZmF1bHQgaGFuZGxpbmcgZm9yIGFub255bW91cyBUSFAgYWxsb2NhdGlvbnMgYW5kIHN3YXAtaW4uIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0YXNrcyB0aGF0IGFyZSBibG9ja2VkIHdhaXRpbmcgZm9yIG1lbW9yeSBzZXR0bGUgdGhlaXIgYG1lbW9yeS5oaWdoYCBkZWJ0LgoyLiAgYEVuYWJsZUNvbmZpZ3NgIGluY2x1ZGVzICYjMzQ7TUVNQ0cmIzM0OywgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LCBhbmQgJiMzNDtTV0FQJiMzNDsuIENvbmZpcm1lZC4KMy4gIGBGb2N1c1N5bWJvbHNgOiBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgLCBgZG9fc3dhcF9wYWdlYCwgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCwgYW5kIGBkb19odWdlX3BtZF93cF9wYWdlYC4gIFRoYXQgY292ZXJzIHRoZSBjb3JlIHRocm90dGxpbmcgbG9naWMgaW4gdGhlIGtleSBmYXVsdCBwYXRocy4KNC4gIFRoZSByZWFzb25pbmcgaXMgY29uY2lzZTogdGhlIHBhdGNoIHRhcmdldHMgZmF1bHQgaGFuZGxpbmcgcGF0aHMgdG8gZW5zdXJlIG1lbW9yeS5oaWdoIGRlYnQgc2V0dGxlbWVudC4gR3JlYXQsIGl0JiMzOTtzIGFsbCBleHBsYWluZWQuCgpUaGF0JiMzOTtzIGl0LiBFdmVyeXRoaW5nJiMzOTtzIHZlcmlmaWVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaCYjMzQ7LAogICAgJiMzNDtkb19zd2FwX3BhZ2UmIzM0OywKICAgICYjMzQ7ZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UmIzM0OywKICAgICYjMzQ7ZG9faHVnZV9wbWRfd3BfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGluIG1tL2h1Z2VfbWVtb3J5LmMgYW5kIG1tL21lbW9yeS5jIGJ5IGludm9raW5nIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaCgpIGR1cmluZyBQTUQgVEhQIGFub255bW91cyBhbGxvY2F0aW9uLCBtVEhQIGFub255bW91cyBhbGxvY2F0aW9uLCBhbmQgc3dhcC1pbiBwYWdlIGZhdWx0IHBhdGhzLiBUaGlzIGVuc3VyZXMgbWVtb3J5LmhpZ2ggdGhyb3R0bGluZyBkZWJ0IGlzIHN5bmNocm9ub3VzbHkgaGFuZGxlZCBpbiBzbGVlcGluZyBmYXVsdCBjb250ZXh0cyB3aGVuIG5vbi1ibG9ja2luZyBHRlAgbWFza3Mgd2VyZSB1c2VkIGR1cmluZyBjaGFyZ2luZy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gcmVhY2hhYmxlIE1NIGNvZGUgcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZyB0byB2ZXJpZnkgbG9ja2luZyBpbnZhcmlhbnRzIGFuZCB0aHJvdHRsaW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2gmIzM0OywKICAgICYjMzQ7ZG9fc3dhcF9wYWdlJiMzNDssCiAgICAmIzM0O2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlJiMzNDssCiAgICAmIzM0O2RvX2h1Z2VfcG1kX3dwX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBtbS9odWdlX21lbW9yeS5jIGFuZCBtbS9tZW1vcnkuYyBieSBpbnZva2luZyBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goKSBkdXJpbmcgUE1EIFRIUCBhbm9ueW1vdXMgYWxsb2NhdGlvbiwgbVRIUCBhbm9ueW1vdXMgYWxsb2NhdGlvbiwgYW5kIHN3YXAtaW4gcGFnZSBmYXVsdCBwYXRocy4gVGhpcyBlbnN1cmVzIG1lbW9yeS5oaWdoIHRocm90dGxpbmcgZGVidCBpcyBzeW5jaHJvbm91c2x5IGhhbmRsZWQgaW4gc2xlZXBpbmcgZmF1bHQgY29udGV4dHMgd2hlbiBub24tYmxvY2tpbmcgR0ZQIG1hc2tzIHdlcmUgdXNlZCBkdXJpbmcgY2hhcmdpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBNTSBjb2RlIHBhdGhzIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gdmVyaWZ5IGxvY2tpbmcgaW52YXJpYW50cyBhbmQgdGhyb3R0bGluZyBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKWAgaW4gYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpYCwgYGRvX3N3YXBfcGFnZSgpYCwgYW5kIGBhbGxvY19hbm9uX2ZvbGlvKClgIHRvIGVuZm9yY2Ugc3luY2hyb25vdXMgYG1lbW9yeS5oaWdoYCBjZ3JvdXAgdGhyb3R0bGluZyBkdXJpbmcgcGFnZSBmYXVsdCBoYW5kbGluZyB3aGVuIGNoYXJnaW5nIGZvbGlvcy5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBwZXJ0YWluIHRvIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZywgcmVjbGFtYXRpb24sIGFuZCB0aHJvdHRsaW5nIGNvbnRyb2wgZmxvdy4gVGhleSBkbyBub3QgYWxsb2NhdGUsIG1vZGlmeSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSBzdHJ1Y3R1cmVzLCBub3IgZG8gdGhleSBpbnRyb2R1Y2Uga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgc2xlZXBpbmctaW4tYXRvbWljLCBvciBsaWZldGltZSBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAoS0FTQU4sIExPQ0tERVAsIERFQlVHX0FUT01JQ19TTEVFUCksIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNlMTRlOGE5NDE5MTVkNjA4Mzc4NWY2ZmVkYTA3NzE4ZjU0ZGFmOTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDEzOjQ0OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggY2VkNDAwZjcyZDQzYS4uNTQzYmE0YTc0ZGMzYSAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0xMzI5LDYgJiM0MzsxMzI5LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBjaGFyZ2UgZ2ZwIGVuY29kZXMgVEhQIGFsbG9jYXRpb24gcG9saWN5IGFuZCBtYXkgbm90IGFsbG93CiYjNDM7CSAqIGJsb2NraW5nLCB3aGljaCBtYWtlcyB0cnlfY2hhcmdlIHNraXAgaXRzIHN5bmNocm9ub3VzIG1lbW9yeS5oaWdoCiYjNDM7CSAqIHRocm90dGxpbmcuIEZhdWx0IGNvbnRleHQgY2FuIHNsZWVwLCBzbyBzZXR0bGUgYW55IG92ZXItaGlnaCBkZWJ0CiYjNDM7CSAqIGhlcmUgaW5zdGVhZCBvZiBsZXR0aW5nIHVzYWdlIGdyb3cgdW50aHJvdHRsZWQgdXAgdG8gbWVtb3J5Lm1heC4KJiM0MzsJICovCiYjNDM7CW1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTsKJiM0MzsKIAlpZiAoZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCWNvdW50X3ZtX2V2ZW50KFRIUF9GQVVMVF9GQUxMQkFDSyk7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDhiMGMyYzczNWQzZGUuLmRjOTdjZjBlYmZiMzAgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC01MjY3LDYgJiM0Mzs1MjY3LDE0IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogb3V0OgogCWlmIChzaSkKIAkJcHV0X3N3YXBfZGV2aWNlKHNpKTsKJiM0MzsJLyoKJiM0MzsJICogTGFyZ2UgZm9saW8gc3dhcGluIGNoYXJnZXMgd2l0aCB0aGUgVEhQIGFsbG9jYXRpb24gZ2ZwLCB3aGljaCBtYXkKJiM0MzsJICogbm90IGFsbG93IGJsb2NraW5nLCBtYWtpbmcgdHJ5X2NoYXJnZSBza2lwIGl0cyBzeW5jaHJvbm91cwomIzQzOwkgKiBtZW1vcnkuaGlnaCB0aHJvdHRsaW5nLiBTZXR0bGUgYW55IG92ZXItaGlnaCBkZWJ0IGhlcmUgaW5zdGVhZCwKJiM0MzsJICogd2hlcmUgc2xlZXBpbmcgaXMgc2FmZTogdGhlIGZvbGlvIGxvY2ssIHRoZSBwYWdlIHRhYmxlIGxvY2sgYW5kCiYjNDM7CSAqIHRoZSBzd2FwIGRldmljZSByZWZlcmVuY2UgaGF2ZSBhbGwgYmVlbiBkcm9wcGVkLgomIzQzOwkgKi8KJiM0MzsJbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpOwogCXJldHVybiByZXQ7CiBvdXRfbm9tYXA6CiAJaWYgKHZtZi0mZ3Q7cHRlKQpAQCAtNTM2Miw2ICYjNDM7NTM3MCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJCQlmb2xpb19wdXQoZm9saW8pOwogCQkJZ290byBuZXh0OwogCQl9CiYjNDM7CQkvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi8KJiM0MzsJCW1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTsKIAkJaWYgKG9yZGVyICZndDsgMSAmYW1wOyZhbXA7IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKGZvbGlvKSkgewogCQkJZm9saW9fcHV0KGZvbGlvKTsKIAkJCWdvdG8gZmFsbGJhY2s7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vaHVnZV9tZW1vcnkuY2AgYW5kIGBtbS9tZW1vcnkuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaW50cm9kdWNpbmcgY2FsbHMgdG8gYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtgIHdpdGhpbiBhIGZldyBrZXkgbWVtb3J5IGFsbG9jYXRpb24gcGF0aHM6IHNwZWNpZmljYWxseSwgYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAsIGBkb19zd2FwX3BhZ2VgLCBhbmQgYGFsbG9jX2Fub25fZm9saW9gLiAKClRoZXNlIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgYXJlYXMgdG8gd2F0Y2ggaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gTm93LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgKmRvZXMqLiBJJiMzOTtsbCByZWFjaCBmb3IgZ3JlcHBlciByaWdodCBhd2F5LCBsb2NhdGUgaXRzIGRlZmluaXRpb24gYW5kIGltcGxlbWVudGF0aW9uLCBhbmQgZGlzc2VjdCBpdHMgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyB0aGUgbHluY2hwaW4sIHRoZSBjcnVjaWFsIGVsZW1lbnQuIEtub3dpbmcgKml0cyogYmVoYXZpb3Igd2lsbCB0ZWxsIG1lIHRoZSBhY3R1YWwgZWZmZWN0IG9mIHRoaXMgcGF0Y2guIElzIHRoaXMgcmVsYXRlZCB0byBoaWdoLW9yZGVyIGFsbG9jYXRpb24gZmFpbHVyZXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlPyBJcyBpdCBhYm91dCBjZ3JvdXAgYWNjb3VudGluZz8gVGhlIGFuc3dlciBsaWVzIGluIHRoYXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTkxMT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkxMi1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjkxMzpzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTE0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMzU0PW1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzNTctXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMzU4OnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzU5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGNvZGUgbG9jYXRpb25zLCBwaHJhc2VkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgd2VsbC12ZXJzZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cHM6CgoqKkRpdmluZyBEZWVwIGludG8gTWVtY29udHJvbCYjMzk7cyBIYW5kbGluZyBvZiBIaWdoIE1lbW9yeSBPdmVyZmxvd3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgd2l0aGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIHBhcnRpY3VsYXJseSBhcm91bmQgbGluZSA5MTEuIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgcGVyaGFwcyBzb21lIGNydWNpYWwgbWFjcm9zIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLCBtYXliZSBldmVuIHRoZSBzcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgbWVtb3J5IGxpbWl0cyBvciB0aHJlc2hvbGRzLCBhcmUgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoZSBoaWdoIG1lbW9yeSB3YXRlcm1hcmsgaXMgaGFuZGxlZCB0aGVyZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IHNlY3Rpb24gb2YgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBkZWZpbml0aW9ucyBvZiBgbWVtX2Nncm91cGAgcmVsYXRlZCB2YXJpYWJsZXMgYW5kIGRhdGEgc3RydWN0dXJlcy4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBqdW1wIG92ZXIgdG8gYG1tL21lbWNvbnRyb2wuY2AgYW5kIHplcm8gaW4gYXJvdW5kIHRoZSBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSAqcmVhbCogbG9naWMga2lja3MgaW4uIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIHdoZXJlIGEgbWVtb3J5IGNncm91cCBoYXMgZXhjZWVkZWQgaXRzIGhpZ2ggbWVtb3J5IGxpbWl0LiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgaW4gdGhlc2Ugc2l0dWF0aW9ucy4gSXMgaXQgaW52b2tpbmcgT09NIGtpbGxlciwgdGhyb3R0bGluZywgbWlncmF0aW5nIHBhZ2VzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNvbW1lbnRzIHNob3VsZCBiZSBoZWxwZnVsLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBhbmQgdGhlIHNwZWNpZmljIGFjdGlvbnMgaXQgdGFrZXMgdG8gZW5mb3JjZSB0aGUgbWVtb3J5IGxpbWl0cy4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgaGFyZCBsaW1pdCwgYSBzb2Z0IGxpbWl0LCBvciBzb21ldGhpbmcgbW9yZSBudWFuY2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgc3lzdGVtIHJlYWN0cy4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yIGFuZCByZWNsYWltIGxvZ2ljLiBJcyBpdCBhdHRlbXB0aW5nIHRvIHJlY2xhaW0gcGFnZXMgc3BlY2lmaWNhbGx5IGZyb20gdGhpcyBjZ3JvdXA/IERvZXMgaXQgcG90ZW50aWFsbHkgY2F1c2UgdGhlIE9PTSBraWxsZXIgdG8gc2VsZWN0IGEgdGFzayBmcm9tIHRoaXMgY2dyb3VwPyBJdCYjMzk7cyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhlIHN5c3RlbSBkb2VzbiYjMzk7dCBncmluZCB0byBhIGhhbHQgd2hlbiBtZW1vcnkgaXMgY29uc3RyYWluZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcHV6emxlLCBhbmQgaXQmIzM5O3MgZXNzZW50aWFsIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGl0IGFsbCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTA1Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4gOTA2Olx0XG4gOTA3Olx0XHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuIDkwODpcdFx0cmV0dXJuIFJFQURfT05DRShtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbiA5MDk6XHR9XG4gOTEwOlx0XG4gOTExOlx0dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG4gOTEyOlx0XG4gOTEzOlx0c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbiA5MTQ6XHR7XG4gOTE1Olx0XHRpZiAodW5saWtlbHkoY3VycmVudC1cdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2gpKVxuIDkxNjpcdFx0XHRfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfbWFzayk7XG4gOTE3Olx0fVxuIDkxODpcdFxuIDkxOTpcdHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gOTIwOlx0XG4gOTIxOlx0dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiA5MjI6XHRcdFx0XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG4gOTIzOlx0XG4gOTI0Olx0dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMDgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBvdmVyLWhpZ2ggY29uZGl0aW9ucyB3aXRoaW4gbWVtb3J5IGNncm91cHMuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAuIEkmIzM5O2xsIGp1bXAgc3RyYWlnaHQgaW50byBgbW0vbWVtY29udHJvbC5jYCBhbmQgemVybyBpbiBvbiB0aGF0IGZ1bmN0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgbG9naWMgZm9yIHRocm90dGxpbmcgb3IgcG9zc2libHkgT09NIGtpbGxpbmcgcHJvY2Vzc2VzIGluIHRoYXQgY2dyb3VwIGhlcmUuIEkgd2FudCB0byBzZWUgaWYgdGhlIHJlY2VudCBjaGFuZ2VzIEnigJl2ZSBiZWVuIHJlYWRpbmcgYWJvdXQgaGF2ZSBhbHRlcmVkIHRoZSB3YXkgdGhpcyBiZWhhdmVzLCBvciBpZiB0aGVyZSYjMzk7cyBhbnkgbm92ZWwgb3B0aW1pemF0aW9uLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgYmFsYW5jZXMgcHJldmVudGluZyBydW5hd2F5IG1lbW9yeSBjb25zdW1wdGlvbiB3aXRoIGFsbG93aW5nIGZvciBsZWdpdGltYXRlIGJ1cnN0cywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBjZ3JvdXAgaGllcmFyY2h5IGFuZCByZWNsYWltIG1lY2hhbmlzbXMuIEhvcGVmdWxseSwgdGhlIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQ7IG90aGVyd2lzZSwgSeKAmW0gbWVudGFsbHkgcHJlcGFyaW5nIHRvIG5hdmlnYXRlIGEgZmV3IGxldmVscyBvZiBmdW5jdGlvbiBjYWxscyB0byBwaWVjZSB0aGUgZmxvdyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05MDI9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MTAtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5MTE6dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MTItXG4tLVxubW0vbWVtY29udHJvbC5jPTI1MTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2hpZ2hfZGVsYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNTU0LSAqL1xubW0vbWVtY29udHJvbC5jOjI1NTU6dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbm1tL21lbWNvbnRyb2wuYy0yNTU2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUwNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG1tL21lbWNvbnRyb2wuY2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhvbmluZyBpbiBhcm91bmQgbGluZSAyNTU1LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBzb21lIGludGVyZXN0aW5nIGJpdHMgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBhbmQgYWNjb3VudGluZy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBjb3JlIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIHJlc291cmNlIG1hbmFnZW1lbnQsIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVjbGFpbWVkLCBvciBjaGFyZ2VkIHRvIHZhcmlvdXMgY29udHJvbCBncm91cHMuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGF0IGEgZGVlcCBsZXZlbC4gSeKAmW0gdGhpbmtpbmcgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGNvdWxkIGJlIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIHR1bmluZyBvciBwaW5wb2ludGluZyBib3R0bGVuZWNrcyBpbiBhIG1lbW9yeS1pbnRlbnNpdmUgd29ya2xvYWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHN1YnRsZSBudWFuY2VzIG9mIGhvdyBtZW1vcnkgbGltaXRzIGFyZSBlbmZvcmNlZCwgYW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIE5VTUEgYXJjaGl0ZWN0dXJlcywgb3IgcGVyaGFwcyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIE9PTSBzaXR1YXRpb25zIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSBmcm9tIGNvbnRyb2wgZ3JvdXBzLiBMZXTigJlzIHNlZSB3aGF0IGdlbXMgbGluZSAyNTU1IGlzIGhvbGRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTU1Olx0dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbjI1NTY6XHR7XG4yNTU3Olx0XHR1bnNpZ25lZCBsb25nIHBlbmFsdHlfamlmZmllcztcbjI1NTg6XHRcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xuMjU1OTpcdFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7XG4yNTYwOlx0XHR1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBjdXJyZW50LVx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaDtcbjI1NjE6XHRcdGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbjI1NjI6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjI1NjM6XHRcdGJvb2wgaW5fcmV0cnkgPSBmYWxzZTtcbjI1NjQ6XHRcbjI1NjU6XHRcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShjdXJyZW50LVx1MDAzZW1tKTtcbjI1NjY6XHRcdGN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoID0gMDtcbjI1Njc6XHRcbjI1Njg6XHRyZXRyeV9yZWNsYWltOlxuMjU2OTpcdFx0LypcbjI1NzA6XHRcdCAqIEJhaWwgaWYgdGhlIHRhc2sgaXMgYWxyZWFkeSBleGl0aW5nLiBVbmxpa2UgbWVtb3J5Lm1heCxcbjI1NzE6XHRcdCAqIG1lbW9yeS5oaWdoIGVuZm9yY2VtZW50IGlzbiYjMzk7dCBhcyBzdHJpY3QsIGFuZCB0aGVyZSBpcyBub1xuMjU3MjpcdFx0ICogT09NIGtpbGxlciBpbnZvbHZlZCwgd2hpY2ggbWVhbnMgdGhlIGV4Y2VzcyBjb3VsZCBhbHJlYWR5XG4yNTczOlx0XHQgKiBiZSBtdWNoIGJpZ2dlciAoYW5kIHN0aWxsIGdyb3dpbmcpIHRoYW4gaXQgY291bGQgZm9yXG4yNTc0Olx0XHQgKiBtZW1vcnkubWF4OyB0aGUgZHlpbmcgdGFzayBjb3VsZCBnZXQgc3R1Y2sgaW4gZnJ1aXRsZXNzXG4yNTc1Olx0XHQgKiByZWNsYWltIGZvciBhIGxvbmcgdGltZSwgd2hpY2ggaXNuJiMzOTt0IGRlc2lyYWJsZS5cbjI1NzY6XHRcdCAqL1xuMjU3NzpcdFx0aWYgKHRhc2tfaXNfZHlpbmcoKSlcbjI1Nzg6XHRcdFx0Z290byBvdXQ7XG4yNTc5Olx0XG4yNTgwOlx0XHQvKlxuMjU4MTpcdFx0ICogVGhlIGFsbG9jYXRpbmcgdGFzayBzaG91bGQgcmVjbGFpbSBhdCBsZWFzdCB0aGUgYmF0Y2ggc2l6ZSwgYnV0IGZvclxuMjU4MjpcdFx0ICogc3Vic2VxdWVudCByZXRyaWVzIHdlIG9ubHkgd2FudCB0byBkbyB3aGF0JiMzOTtzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IG9vbVxuMjU4MzpcdFx0ICogb3IgYnJlYWNoaW5nIHJlc291cmNlIGlzb2xhdGlvbi5cbjI1ODQ6XHRcdCAqXG4yNTg1Olx0XHQgKiBUaGlzIGlzIGRpc3RpbmN0IGZyb20gbWVtb3J5Lm1heCBvciBwYWdlIGFsbG9jYXRvciBiZWhhdmlvdXIgYmVjYXVzZVxuMjU4NjpcdFx0ICogbWVtb3J5LmhpZ2ggaXMgY3VycmVudGx5IGJhdGNoZWQsIHdoZXJlYXMgbWVtb3J5Lm1heCBhbmQgdGhlIHBhZ2VcbjI1ODc6XHRcdCAqIGFsbG9jYXRvciBydW4gZXZlcnkgdGltZSBhbiBhbGxvY2F0aW9uIGlzIG1hZGUuXG4yNTg4Olx0XHQgKi9cbjI1ODk6XHRcdG5yX3JlY2xhaW1lZCA9IHJlY2xhaW1faGlnaChtZW1jZyxcbjI1OTA6XHRcdFx0XHRcdCAgICBpbl9yZXRyeSA/IFNXQVBfQ0xVU1RFUl9NQVggOiBucl9wYWdlcyxcbjI1OTE6XHRcdFx0XHRcdCAgICBnZnBfbWFzayk7XG4yNTkyOlx0XG4yNTkzOlx0XHQvKlxuMjU5NDpcdFx0ICogbWVtb3J5LmhpZ2ggaXMgYnJlYWNoZWQgYW5kIHJlY2xhaW0gaXMgdW5hYmxlIHRvIGtlZXAgdXAuIFRocm90dGxlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IENvcmUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEJhc2VkIG9uIHRoZSB0YXNrIGF0IGhhbmQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtJiMzOTtzIGhhbmRsaW5nIGxhcmdlIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGNvcmUgc291cmNlIGNvZGUuIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBzdGFydCB3aXRoIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCYjMzk7cyB0aGUgb2J2aW91cyBwbGFjZSB0byBpbnZlc3RpZ2F0ZSB0aGUgYmVoYXZpb3Igb2YgaHVnZSBwYWdlcyBhbmQgcmVsYXRlZCBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuIEFmdGVyIHRoYXQsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYG1tL21lbW9yeS5jYCBhcyB0aGlzIHdpbGwgcHJvdmlkZSB0aGUgZ2VuZXJhbCBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsgYW5kIGNvbXBsZW1lbnQgdGhlIHNwZWNpZmljIGh1Z2UgcGFnZSBkZXRhaWxzLiBCZXR3ZWVuIHRob3NlIHR3bywgSSBzaG91bGQgaGF2ZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGJlaGF2aW9yIEkmIzM5O20gYWZ0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMyMDpcdFx0fVxuMTMyMTpcdFxuMTMyMjpcdFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSwgZm9saW8pO1xuMTMyMzpcdFx0aWYgKG1lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCB2bWEtXHUwMDNldm1fbW0sIGdmcCkpIHtcbjEzMjQ6XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjEzMjU6XHRcdFx0Y291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLKTtcbjEzMjY6XHRcdFx0Y291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLX0NIQVJHRSk7XG4xMzI3Olx0XHRcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spO1xuMTMyODpcdFx0XHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLX0NIQVJHRSk7XG4xMzI5Olx0XHRcdHJldHVybiBOVUxMO1xuMTMzMDpcdFx0fVxuMTMzMTpcdFxuMTMzMjpcdFx0LypcbjEzMzM6XHRcdCAqIFRoZSBjaGFyZ2UgZ2ZwIGVuY29kZXMgVEhQIGFsbG9jYXRpb24gcG9saWN5IGFuZCBtYXkgbm90IGFsbG93XG4xMzM0Olx0XHQgKiBibG9ja2luZywgd2hpY2ggbWFrZXMgdHJ5X2NoYXJnZSBza2lwIGl0cyBzeW5jaHJvbm91cyBtZW1vcnkuaGlnaFxuMTMzNTpcdFx0ICogdGhyb3R0bGluZy4gRmF1bHQgY29udGV4dCBjYW4gc2xlZXAsIHNvIHNldHRsZSBhbnkgb3Zlci1oaWdoIGRlYnRcbjEzMzY6XHRcdCAqIGhlcmUgaW5zdGVhZCBvZiBsZXR0aW5nIHVzYWdlIGdyb3cgdW50aHJvdHRsZWQgdXAgdG8gbWVtb3J5Lm1heC5cbjEzMzc6XHRcdCAqL1xuMTMzODpcdFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xuMTMzOTpcdFxuMTM0MDpcdFx0aWYgKGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKGZvbGlvKSkge1xuMTM0MTpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMTM0MjpcdFx0XHRjb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0spO1xuMTM0MzpcdFx0XHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLKTtcbjEzNDQ6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMzQ1Olx0XHR9XG4xMzQ2Olx0XG4xMzQ3Olx0XHRmb2xpb190aHJvdHRsZV9zd2FwcmF0ZShmb2xpbywgZ2ZwKTtcbjEzNDg6XHRcbjEzNDk6XHQgICAgICAgLypcbjEzNTA6XHRcdCogV2hlbiBhIGZvbGlvIGlzIG5vdCB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb24gKF9fR0ZQX1pFUk8gbm90IHVzZWQpXG4xMzUxOlx0XHQqIG9yIHVzZXIgZm9saW9zIHJlcXVpcmUgc3BlY2lhbCBoYW5kbGluZywgZm9saW9femVyb191c2VyKCkgaXMgdXNlZCB0b1xuMTM1MjpcdFx0KiBtYWtlIHN1cmUgdGhhdCB0aGUgcGFnZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmYXVsdGluZyBhZGRyZXNzIHdpbGwgYmVcbjEzNTM6XHRcdCogaG90IGluIHRoZSBjYWNoZSBhZnRlciB6ZXJvaW5nLlxuMTM1NDpcdFx0Ki9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI1MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnksIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBtbS9tZW1vcnkuY2AuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIHBvdGVudGlhbCBmb3IgaXNzdWVzIGFyb3VuZCB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcy4gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpYyBhcmVhcyB3aXRoaW4gdGhhdCBmaWxlIGFyZSBsaWtlbHkgdG8gaG9sZCB0aGUgYW5zd2Vycy4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGUgc2VjdGlvbnMgYXJvdW5kIGxpbmVzIDUyNjAgYW5kIDUzNjAgbWlnaHQgYmUgZ29vZCBzdGFydGluZyBwb2ludHMuIFRoZXNlIGFyZSBsaWtlbHkgdG8gYmUgYXJvdW5kIHNvbWUgY3JpdGljYWwgYXNwZWN0cyBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHByb2Nlc3MsIG9yIHBlcmhhcHMgaGFuZGxpbmcgb2Ygc3BlY2lmaWMgbWVtb3J5IHJlZ2lvbnMuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUyNjA6XHRcdH1cbjUyNjE6XHRcbjUyNjI6XHRcdC8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSAtIGl0IHdhcyBub24tcHJlc2VudCBiZWZvcmUgKi9cbjUyNjM6XHRcdHVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2Uodm1mLCB2bWEsIGFkZHJlc3MsIHB0ZXAsIG5yX3BhZ2VzKTtcbjUyNjQ6XHR1bmxvY2s6XG41MjY1Olx0XHRpZiAodm1mLVx1MDAzZXB0ZSlcbjUyNjY6XHRcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbjUyNjc6XHRvdXQ6XG41MjY4Olx0XHRpZiAoc2kpXG41MjY5Olx0XHRcdHB1dF9zd2FwX2RldmljZShzaSk7XG41MjcwOlx0XHQvKlxuNTI3MTpcdFx0ICogTGFyZ2UgZm9saW8gc3dhcGluIGNoYXJnZXMgd2l0aCB0aGUgVEhQIGFsbG9jYXRpb24gZ2ZwLCB3aGljaCBtYXlcbjUyNzI6XHRcdCAqIG5vdCBhbGxvdyBibG9ja2luZywgbWFraW5nIHRyeV9jaGFyZ2Ugc2tpcCBpdHMgc3luY2hyb25vdXNcbjUyNzM6XHRcdCAqIG1lbW9yeS5oaWdoIHRocm90dGxpbmcuIFNldHRsZSBhbnkgb3Zlci1oaWdoIGRlYnQgaGVyZSBpbnN0ZWFkLFxuNTI3NDpcdFx0ICogd2hlcmUgc2xlZXBpbmcgaXMgc2FmZTogdGhlIGZvbGlvIGxvY2ssIHRoZSBwYWdlIHRhYmxlIGxvY2sgYW5kXG41Mjc1Olx0XHQgKiB0aGUgc3dhcCBkZXZpY2UgcmVmZXJlbmNlIGhhdmUgYWxsIGJlZW4gZHJvcHBlZC5cbjUyNzY6XHRcdCAqL1xuNTI3NzpcdFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xuNTI3ODpcdFx0cmV0dXJuIHJldDtcbjUyNzk6XHRvdXRfbm9tYXA6XG41MjgwOlx0XHRpZiAodm1mLVx1MDAzZXB0ZSlcbjUyODE6XHRcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbjUyODI6XHRvdXRfcGFnZTpcbjUyODM6XHRcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpXG41Mjg0Olx0XHRcdGZvbGlvX2ZyZWVfc3dhcChmb2xpbyk7XG41Mjg1Olx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuNTI4NjpcdG91dF9yZWxlYXNlOlxuNTI4NzpcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjUyODg6XHRcdGlmIChmb2xpbyAhPSBzd2FwY2FjaGUpIHtcbjUyODk6XHRcdFx0Zm9saW9fdW5sb2NrKHN3YXBjYWNoZSk7XG41MjkwOlx0XHRcdGZvbGlvX3B1dChzd2FwY2FjaGUpO1xuNTI5MTpcdFx0fVxuNTI5MjpcdFx0aWYgKHNpKVxuNTI5MzpcdFx0XHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuNTI5NDpcdFx0cmV0dXJuIHJldDtcbjUyOTU6XHR9XG41Mjk2Olx0XG41Mjk3Olx0c3RhdGljIGJvb2wgcHRlX3JhbmdlX25vbmUocHRlX3QgKnB0ZSwgaW50IG5yX3BhZ2VzKVxuNTI5ODpcdHtcbjUyOTk6XHRcdGludCBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDU5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIGBhbGxvY19hbm9uX2ZvbGlvYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBhbm9ueW1vdXMgZm9saW8gYWxsb2NhdGlvbiBwcm9jZXNzLiBNeSBmaXJzdCBzdG9wIGlzIGRlZmluaXRlbHkgYGFsbG9jX2Fub25fZm9saW9gLCBzbyBJJiMzOTtsbCBiZSBoZWFkaW5nIHN0cmFpZ2h0IHRvIGBtbS9tZW1vcnkuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGFub255bW91cyBwYWdlL2ZvbGlvIGFsbG9jYXRpb25zLiBJIGtub3cgdGhlIGJhc2ljcywgb2YgY291cnNlLCBidXQgdGhlIGRldmlsIGlzIGFsd2F5cyBpbiB0aGUgZGV0YWlscywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHRoZSBhbGxvY2F0aW9uIGl0c2VsZiwgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIHBhZ2UgY2FjaGUgKGlmIGF0IGFsbCwgZm9yIHRoaXMgYW5vbnltb3VzIGNhc2UpLCBhbmQgdGhlIHZhcmlvdXMgY29uc2lkZXJhdGlvbnMgaXQgdGFrZXMgaW50byBhY2NvdW50LCBsaWtlIE5VTUEsIHpvbmVzLCBhbmQgcG90ZW50aWFsIG1lbW9yeSBwcmVzc3VyZS4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgb3B0aW1pemF0aW9ucyBvciBsb2NrIGNvbnRlbnRpb24gcG9pbnRzIEkgbWlnaHQgaGF2ZSBtaXNzZWQgaW4gcHJldmlvdXMgcmV2aWV3cy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byBzYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUzNTA6XHRcdFx0YWRkciA9IEFMSUdOX0RPV04odm1mLVx1MDAzZWFkZHJlc3MsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuNTM1MTpcdFx0XHRpZiAocHRlX3JhbmdlX25vbmUocHRlICYjNDM7IHB0ZV9pbmRleChhZGRyKSwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpKVxuNTM1MjpcdFx0XHRcdGJyZWFrO1xuNTM1MzpcdFx0XHRvcmRlciA9IG5leHRfb3JkZXIoXHUwMDI2b3JkZXJzLCBvcmRlcik7XG41MzU0Olx0XHR9XG41MzU1Olx0XG41MzU2Olx0XHRwdGVfdW5tYXAocHRlKTtcbjUzNTc6XHRcbjUzNTg6XHRcdGlmICghb3JkZXJzKVxuNTM1OTpcdFx0XHRnb3RvIGZhbGxiYWNrO1xuNTM2MDpcdFxuNTM2MTpcdFx0LyogVHJ5IGFsbG9jYXRpbmcgdGhlIGhpZ2hlc3Qgb2YgdGhlIHJlbWFpbmluZyBvcmRlcnMuICovXG41MzYyOlx0XHRnZnAgPSB2bWFfdGhwX2dmcF9tYXNrKHZtYSk7XG41MzYzOlx0XHR3aGlsZSAob3JkZXJzKSB7XG41MzY0Olx0XHRcdGFkZHIgPSBBTElHTl9ET1dOKHZtZi1cdTAwM2VhZGRyZXNzLCBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbjUzNjU6XHRcdFx0Zm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdm1hLCBhZGRyKTtcbjUzNjY6XHRcdFx0aWYgKCFmb2xpbylcbjUzNjc6XHRcdFx0XHRnb3RvIG5leHQ7XG41MzY4Olx0XHRcdGlmIChtZW1fY2dyb3VwX2NoYXJnZShmb2xpbywgdm1hLVx1MDAzZXZtX21tLCBnZnApKSB7XG41MzY5Olx0XHRcdFx0Y291bnRfbXRocF9zdGF0KG9yZGVyLCBNVEhQX1NUQVRfQU5PTl9GQVVMVF9GQUxMQkFDS19DSEFSR0UpO1xuNTM3MDpcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG41MzcxOlx0XHRcdFx0Z290byBuZXh0O1xuNTM3MjpcdFx0XHR9XG41MzczOlx0XHRcdC8qIFNhbWUgcmVhc29uaW5nIGFzIGluIHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpLiAqL1xuNTM3NDpcdFx0XHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG41Mzc1Olx0XHRcdGlmIChvcmRlciBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7XG41Mzc2Olx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjUzNzc6XHRcdFx0XHRnb3RvIGZhbGxiYWNrO1xuNTM3ODpcdFx0XHR9XG41Mzc5Olx0XHRcdGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKGZvbGlvLCBnZnApO1xuNTM4MDpcdFx0XHQvKlxuNTM4MTpcdFx0XHQgKiBXaGVuIGEgZm9saW8gaXMgbm90IHplcm9lZCBkdXJpbmcgYWxsb2NhdGlvblxuNTM4MjpcdFx0XHQgKiAoX19HRlBfWkVSTyBub3QgdXNlZCkgb3IgdXNlciBmb2xpb3MgcmVxdWlyZSBzcGVjaWFsXG41MzgzOlx0XHRcdCAqIGhhbmRsaW5nLCBmb2xpb196ZXJvX3VzZXIoKSBpcyB1c2VkIHRvIG1ha2Ugc3VyZVxuNTM4NDpcdFx0XHQgKiB0aGF0IHRoZSBwYWdlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZhdWx0aW5nIGFkZHJlc3NcbjUzODU6XHRcdFx0ICogd2lsbCBiZSBob3QgaW4gdGhlIGNhY2hlIGFmdGVyIHplcm9pbmcuXG41Mzg2Olx0XHRcdCAqL1xuNTM4NzpcdFx0XHRpZiAodXNlcl9hbGxvY19uZWVkc196ZXJvaW5nKCkpXG41Mzg4Olx0XHRcdFx0Zm9saW9femVyb191c2VyKGZvbGlvLCB2bWYtXHUwMDNlYWRkcmVzcyk7XG41Mzg5Olx0XHRcdHJldHVybiBmb2xpbztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk3MAoJCQkJCQkJb3V0cHV0OiAxOTQKCQkJCQkJCXRob3VnaHRzOiA0NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGluc2VydGluZyBjYWxscyB0byBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpYCBpbnRvIGEgZmV3IGtleSBhcmVhczogYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAsIGBkb19zd2FwX3BhZ2VgLCBhbmQgYGFsbG9jX2Fub25fZm9saW9gLiBUaGUgcmF0aW9uYWxlIGlzIHRoYXQgVEhQIGFsbG9jYXRpb25zLCBpZiB1c2luZyBub24tYmxvY2tpbmcgR0ZQIGZsYWdzLCBtaWdodCBieXBhc3MgdGhlIHN5bmNocm9ub3VzIGBtZW1vcnkuaGlnaGAgdGhyb3R0bGluZyB0aGF0IG5vcm1hbGx5IGhhcHBlbnMgaW4gYHRyeV9jaGFyZ2VgLiBUaGUgcGF0Y2gmIzM5O3MgZ29hbCBpcyB0byBmb3JjZSBzeW5jaHJvbm91cyBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCBjYWxscyBpbiB0aGVzZSBmYXVsdCBjb250ZXh0cywgYnV0IG9ubHkgd2hlbiBzbGVlcGluZyBpcyBwZXJtaXR0ZWQuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgYWx3YXlzIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBEb2VzIHRoaXMgY2hhbmdlIGV4cG9zZSBhbnkgbmV3IHJpc2tzIHRoZXJlPyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OgoKKiAgICoqVW5pbml0aWFsaXplZCBtZW1vcnkgY29waWVkIHRvIHVzZXJzcGFjZT8qKiBObywgaXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIGFueSB1bmluaXRpYWxpemVkIGRhdGEgaXMgYmVpbmcgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UuCiogICAqKlVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyByZWFkPyoqIE5vLCBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCBqdXN0IGNoZWNrcyBhIGNvdW50ZXIgKGBjdXJyZW50LSZndDttZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2hgKSBhbmQgY2FsbHMgYHJlY2xhaW1faGlnaGAgaWYgdGhlIGNvdW50ZXIgaXNuJiMzOTt0IHplcm8uIFRoYXQgY291bnRlciYjMzk7cyB2YWx1ZSBpcyBjZXJ0YWlubHkgaW5pdGlhbGl6ZWQgZWFybGllciwgc28gcmVhZGluZyBpdCBpcyBzYWZlLgoqICAgKipCdWZmZXIgYm91bmRzIGFsdGVyZWQsIGFsbG93aW5nIGZvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzPyoqIE5vLCBub3RoaW5nIGxpa2UgdGhhdCBpcyBoYXBwZW5pbmcgaGVyZS4KKiAgICoqRm9saW8gemVyb2luZy9pbml0aWFsaXphdGlvbiBjaGFuZ2VkPyoqIE5vcGUsIHRob3NlIG9wZXJhdGlvbnMgKGBmb2xpb196ZXJvX3VzZXJgIGV0Yy4pIGFyZSBjb21wbGV0ZWx5IHVudG91Y2hlZC4KCkJhc2VkIG9uIHRoaXMsIGl0IHNlZW1zIHRoaXMgaXMgKipub3QqKiBnb2luZyB0byBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd291bGQgYmUgcmVsYXRlZCB0byBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dHMgKHRob3VnaCB0aGUgY29tbWVudHMgc3VnZ2VzdCB0aGlzIGlzIG5vdyBzYWZlKSBvciwgbW9yZSBsaWtlbHksIGlzc3VlcyBhcm91bmQgbWVtb3J5IHRocm90dGxpbmcvcmVjbGFpbSBiZWhhdmlvci4gVGhlc2UgYXJlIGZpcm1seSBpbiB0aGUgZG9tYWluIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSwgYW5kIGxvY2tpbmcgc2VtYW50aWNzIOKAkyB0aGluZ3MgdGhhdCBLQVNBTiwgTE9DS0RFUCwgV0FSTiwgYW5kIG90aGVyIHN0YW5kYXJkIHRvb2xzIGFyZSBkZXNpZ25lZCB0byBjYXRjaC4gVGhpcyBpcyBub3QgYSBLTVNBTiBjb25jZXJuLgoKU28sIEkmIzM5O20gY29uZmlkZW50IGluIHNheWluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KCk5vdywgbGV0JiMzOTtzIHNvbGlkaWZ5IHRoZSBLTVNBTiByZWFzb25pbmc6IFRoaXMgcGF0Y2ggYWRkcmVzc2VzIHRoZSB0aHJvdHRsaW5nIG9mIG1lbW9yeSBjZ3JvdXAgdXNhZ2Ugd2hlbiBvdmVyIHRoZSBoaWdoIGxpbWl0IGluIFRIUCBhbmQgc3dhcCBmYXVsdCBwYXRocyBieSBhZGRpbmcgY2FsbHMgdG8gYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGJlY2F1c2UgaXQgZG9lcyBub3QgcmVzdWx0IGluIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGhhbmRsaW5nLCBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24uIFRoZSBjaGFuZ2VzIGFyZSBzdGFuZGFyZCBtZW1vcnkgbWFuYWdlbWVudC1yZWxhdGVkIG1vZGlmaWNhdGlvbnMsIGFuZCBhbnkgcG90ZW50aWFsIHNsZWVwL2xvY2tpbmcgaXNzdWVzLCBhcmUgcHJvcGVybHkgYWRkcmVzc2VkIGJ5IEtBU0FOL0xPQ0tERVAgZXRjLgoKQWxyaWdodCwgdGhhdCBjb3ZlcnMgaXQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGNhbGxzIHRvIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTClgIGluIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKWAsIGBkb19zd2FwX3BhZ2UoKWAsIGFuZCBgYWxsb2NfYW5vbl9mb2xpbygpYCB0byBlbmZvcmNlIHN5bmNocm9ub3VzIGBtZW1vcnkuaGlnaGAgY2dyb3VwIHRocm90dGxpbmcgZHVyaW5nIHBhZ2UgZmF1bHQgaGFuZGxpbmcgd2hlbiBjaGFyZ2luZyBmb2xpb3MuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgcGVydGFpbiB0byBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcsIHJlY2xhbWF0aW9uLCBhbmQgdGhyb3R0bGluZyBjb250cm9sIGZsb3cuIFRoZXkgZG8gbm90IGFsbG9jYXRlLCBtb2RpZnksIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkgc3RydWN0dXJlcywgbm9yIGRvIHRoZXkgaW50cm9kdWNlIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3ksIHNsZWVwaW5nLWluLWF0b21pYywgb3IgbGlmZXRpbWUgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKEtBU0FOLCBMT0NLREVQLCBERUJVR19BVE9NSUNfU0xFRVApLCBtYWtpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGNhbGxzIHRvIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTClgIGluIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKWAsIGBkb19zd2FwX3BhZ2UoKWAsIGFuZCBgYWxsb2NfYW5vbl9mb2xpbygpYCB0byBlbmZvcmNlIHN5bmNocm9ub3VzIGBtZW1vcnkuaGlnaGAgY2dyb3VwIHRocm90dGxpbmcgZHVyaW5nIHBhZ2UgZmF1bHQgaGFuZGxpbmcgd2hlbiBjaGFyZ2luZyBmb2xpb3MuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgcGVydGFpbiB0byBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcsIHJlY2xhbWF0aW9uLCBhbmQgdGhyb3R0bGluZyBjb250cm9sIGZsb3cuIFRoZXkgZG8gbm90IGFsbG9jYXRlLCBtb2RpZnksIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkgc3RydWN0dXJlcywgbm9yIGRvIHRoZXkgaW50cm9kdWNlIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3ksIHNsZWVwaW5nLWluLWF0b21pYywgb3IgbGlmZXRpbWUgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKEtBU0FOLCBMT0NLREVQLCBERUJVR19BVE9NSUNfU0xFRVApLCBtYWtpbmcgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ0OjI3LjUxNDA2MTYyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MjE1Mjk1MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoXCIsXG4gICAgXCJkb19zd2FwX3BhZ2VcIixcbiAgICBcImRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlXCIsXG4gICAgXCJkb19odWdlX3BtZF93cF9wYWdlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGNhbGxzIHRvIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTClgIGluIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKWAsIGBkb19zd2FwX3BhZ2UoKWAsIGFuZCBgYWxsb2NfYW5vbl9mb2xpbygpYCB0byBlbmZvcmNlIHN5bmNocm9ub3VzIGBtZW1vcnkuaGlnaGAgY2dyb3VwIHRocm90dGxpbmcgZHVyaW5nIHBhZ2UgZmF1bHQgaGFuZGxpbmcgd2hlbiBjaGFyZ2luZyBmb2xpb3MuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBwZXJ0YWluIHRvIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZywgcmVjbGFtYXRpb24sIGFuZCB0aHJvdHRsaW5nIGNvbnRyb2wgZmxvdy4gVGhleSBkbyBub3QgYWxsb2NhdGUsIG1vZGlmeSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSBzdHJ1Y3R1cmVzLCBub3IgZG8gdGhleSBpbnRyb2R1Y2Uga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgc2xlZXBpbmctaW4tYXRvbWljLCBvciBsaWZldGltZSBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAoS0FTQU4sIExPQ0tERVAsIERFQlVHX0FUT01JQ19TTEVFUCksIG1ha2luZyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGluIG1tL2h1Z2VfbWVtb3J5LmMgYW5kIG1tL21lbW9yeS5jIGJ5IGludm9raW5nIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaCgpIGR1cmluZyBQTUQgVEhQIGFub255bW91cyBhbGxvY2F0aW9uLCBtVEhQIGFub255bW91cyBhbGxvY2F0aW9uLCBhbmQgc3dhcC1pbiBwYWdlIGZhdWx0IHBhdGhzLiBUaGlzIGVuc3VyZXMgbWVtb3J5LmhpZ2ggdGhyb3R0bGluZyBkZWJ0IGlzIHN5bmNocm9ub3VzbHkgaGFuZGxlZCBpbiBzbGVlcGluZyBmYXVsdCBjb250ZXh0cyB3aGVuIG5vbi1ibG9ja2luZyBHRlAgbWFza3Mgd2VyZSB1c2VkIGR1cmluZyBjaGFyZ2luZy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gcmVhY2hhYmxlIE1NIGNvZGUgcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZyB0byB2ZXJpZnkgbG9ja2luZyBpbnZhcmlhbnRzIGFuZCB0aHJvdHRsaW5nIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NDoyNy41MTQwNjY4MDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NDgyMTc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNlMTRlOGE5NDE5MTVkNjA4Mzc4NWY2ZmVkYTA3NzE4ZjU0ZGFmOTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxMzo0NDoyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IGNlZDQwMGY3MmQ0M2EuLjU0M2JhNGE3NGRjM2EgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMTMyOSw2ICsxMzI5LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBjaGFyZ2UgZ2ZwIGVuY29kZXMgVEhQIGFsbG9jYXRpb24gcG9saWN5IGFuZCBtYXkgbm90IGFsbG93XFxuK1xcdCAqIGJsb2NraW5nLCB3aGljaCBtYWtlcyB0cnlfY2hhcmdlIHNraXAgaXRzIHN5bmNocm9ub3VzIG1lbW9yeS5oaWdoXFxuK1xcdCAqIHRocm90dGxpbmcuIEZhdWx0IGNvbnRleHQgY2FuIHNsZWVwLCBzbyBzZXR0bGUgYW55IG92ZXItaGlnaCBkZWJ0XFxuK1xcdCAqIGhlcmUgaW5zdGVhZCBvZiBsZXR0aW5nIHVzYWdlIGdyb3cgdW50aHJvdHRsZWQgdXAgdG8gbWVtb3J5Lm1heC5cXG4rXFx0ICovXFxuK1xcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcXG4rXFxuIFxcdGlmIChmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChmb2xpbykpIHtcXG4gXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xcbmluZGV4IDhiMGMyYzczNWQzZGUuLmRjOTdjZjBlYmZiMzAgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC01MjY3LDYgKzUyNjcsMTQgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIG91dDpcXG4gXFx0aWYgKHNpKVxcbiBcXHRcXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xcbitcXHQvKlxcbitcXHQgKiBMYXJnZSBmb2xpbyBzd2FwaW4gY2hhcmdlcyB3aXRoIHRoZSBUSFAgYWxsb2NhdGlvbiBnZnAsIHdoaWNoIG1heVxcbitcXHQgKiBub3QgYWxsb3cgYmxvY2tpbmcsIG1ha2luZyB0cnlfY2hhcmdlIHNraXAgaXRzIHN5bmNocm9ub3VzXFxuK1xcdCAqIG1lbW9yeS5oaWdoIHRocm90dGxpbmcuIFNldHRsZSBhbnkgb3Zlci1oaWdoIGRlYnQgaGVyZSBpbnN0ZWFkLFxcbitcXHQgKiB3aGVyZSBzbGVlcGluZyBpcyBzYWZlOiB0aGUgZm9saW8gbG9jaywgdGhlIHBhZ2UgdGFibGUgbG9jayBhbmRcXG4rXFx0ICogdGhlIHN3YXAgZGV2aWNlIHJlZmVyZW5jZSBoYXZlIGFsbCBiZWVuIGRyb3BwZWQuXFxuK1xcdCAqL1xcbitcXHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIG91dF9ub21hcDpcXG4gXFx0aWYgKHZtZi1cXHUwMDNlcHRlKVxcbkBAIC01MzYyLDYgKzUzNzAsOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19hbm9uX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiBcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRcXHRnb3RvIG5leHQ7XFxuIFxcdFxcdH1cXG4rXFx0XFx0LyogU2FtZSByZWFzb25pbmcgYXMgaW4gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKCkuICovXFxuK1xcdFxcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcXG4gXFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMSBcXHUwMDI2XFx1MDAyNiBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChmb2xpbykpIHtcXG4gXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0XFx0Z290byBmYWxsYmFjaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDQ6MjcuODY5NjQ3NjM2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1NTM0Njg1MjUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaFwiLFxuICAgIFwiZG9fc3dhcF9wYWdlXCIsXG4gICAgXCJkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZVwiLFxuICAgIFwiZG9faHVnZV9wbWRfd3BfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmF1bHQgaGFuZGxpbmcgbG9naWMgaW4gbW0vaHVnZV9tZW1vcnkuYyBhbmQgbW0vbWVtb3J5LmMgYnkgaW52b2tpbmcgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKCkgZHVyaW5nIFBNRCBUSFAgYW5vbnltb3VzIGFsbG9jYXRpb24sIG1USFAgYW5vbnltb3VzIGFsbG9jYXRpb24sIGFuZCBzd2FwLWluIHBhZ2UgZmF1bHQgcGF0aHMuIFRoaXMgZW5zdXJlcyBtZW1vcnkuaGlnaCB0aHJvdHRsaW5nIGRlYnQgaXMgc3luY2hyb25vdXNseSBoYW5kbGVkIGluIHNsZWVwaW5nIGZhdWx0IGNvbnRleHRzIHdoZW4gbm9uLWJsb2NraW5nIEdGUCBtYXNrcyB3ZXJlIHVzZWQgZHVyaW5nIGNoYXJnaW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiByZWFjaGFibGUgTU0gY29kZSBwYXRocyBhbmQgd2FycmFudCBmdXp6aW5nIHRvIHZlcmlmeSBsb2NraW5nIGludmFyaWFudHMgYW5kIHRocm90dGxpbmcgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2UxNGU4YTk0MTkxNWQ2MDgzNzg1ZjZmZWRhMDc3MThmNTRkYWY5OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTM6NDQ6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggY2VkNDAwZjcyZDQzYS4uNTQzYmE0YTc0ZGMzYSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0xMzI5LDYgKzEzMjksMTQgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBUaGUgY2hhcmdlIGdmcCBlbmNvZGVzIFRIUCBhbGxvY2F0aW9uIHBvbGljeSBhbmQgbWF5IG5vdCBhbGxvd1xuK1x0ICogYmxvY2tpbmcsIHdoaWNoIG1ha2VzIHRyeV9jaGFyZ2Ugc2tpcCBpdHMgc3luY2hyb25vdXMgbWVtb3J5LmhpZ2hcbitcdCAqIHRocm90dGxpbmcuIEZhdWx0IGNvbnRleHQgY2FuIHNsZWVwLCBzbyBzZXR0bGUgYW55IG92ZXItaGlnaCBkZWJ0XG4rXHQgKiBoZXJlIGluc3RlYWQgb2YgbGV0dGluZyB1c2FnZSBncm93IHVudGhyb3R0bGVkIHVwIHRvIG1lbW9yeS5tYXguXG4rXHQgKi9cbitcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcbitcbiBcdGlmIChmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChmb2xpbykpIHtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0Y291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA4YjBjMmM3MzVkM2RlLi5kYzk3Y2YwZWJmYjMwIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNTI2Nyw2ICs1MjY3LDE0IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIG91dDpcbiBcdGlmIChzaSlcbiBcdFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcbitcdC8qXG4rXHQgKiBMYXJnZSBmb2xpbyBzd2FwaW4gY2hhcmdlcyB3aXRoIHRoZSBUSFAgYWxsb2NhdGlvbiBnZnAsIHdoaWNoIG1heVxuK1x0ICogbm90IGFsbG93IGJsb2NraW5nLCBtYWtpbmcgdHJ5X2NoYXJnZSBza2lwIGl0cyBzeW5jaHJvbm91c1xuK1x0ICogbWVtb3J5LmhpZ2ggdGhyb3R0bGluZy4gU2V0dGxlIGFueSBvdmVyLWhpZ2ggZGVidCBoZXJlIGluc3RlYWQsXG4rXHQgKiB3aGVyZSBzbGVlcGluZyBpcyBzYWZlOiB0aGUgZm9saW8gbG9jaywgdGhlIHBhZ2UgdGFibGUgbG9jayBhbmRcbitcdCAqIHRoZSBzd2FwIGRldmljZSByZWZlcmVuY2UgaGF2ZSBhbGwgYmVlbiBkcm9wcGVkLlxuK1x0ICovXG4rXHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG4gXHRyZXR1cm4gcmV0O1xuIG91dF9ub21hcDpcbiBcdGlmICh2bWYtXHUwMDNlcHRlKVxuQEAgLTUzNjIsNiArNTM3MCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRnb3RvIG5leHQ7XG4gXHRcdH1cbitcdFx0LyogU2FtZSByZWFzb25pbmcgYXMgaW4gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKCkuICovXG4rXHRcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKG9yZGVyIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChmb2xpbykpIHtcbiBcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRcdGdvdG8gZmFsbGJhY2s7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NDoyNy44Njk2NDk4MzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MjMxMzMyNTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuIFRoZSBkaWZmIHNob3dzIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHRocmVlIGZ1bmN0aW9ucyBpbiB0d28gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmaWxlcy4gSSBzZWUgYWRkaXRpb25zIG9mIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7YCBpbiBgbW0vaHVnZV9tZW1vcnkuY2Agd2l0aGluIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKWAsIGFuZCBpbiBgbW0vbWVtb3J5LmNgIHdpdGhpbiBgZG9fc3dhcF9wYWdlKClgIGF0IGxhYmVsIGBvdXQ6YCwgYW5kIGFsc28gaW4gYGFsbG9jX2Fub25fZm9saW8oKWAuXG5cbkVzc2VudGlhbGx5LCB0aGlzIGlzIGFib3V0IGhhbmRsaW5nIG1lbW9yeSBjZ3JvdXAgb3Zlci1oaWdoIGNvbmRpdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY291bnRpbmcgd2l0aGluIGNncm91cHMsIHNwZWNpZmljYWxseSB3aGVuIGEgY2dyb3VwIGlzIGV4Y2VlZGluZyBpdHMgbWVtb3J5IGxpbWl0cyBhbmQgdGhlIHN5c3RlbSBpcyB0cnlpbmcgdG8gYWxsb2NhdGUgbW9yZSBtZW1vcnkuIFRoZSBgR0ZQX0tFUk5FTGAgZmxhZyBpcyBjcnVjaWFsLCBzdWdnZXN0aW5nIHRoaXMgaXMgaGFwcGVuaW5nIGZyb20ga2VybmVsLXNwYWNlIGFsbG9jYXRpb25zLiBOb3csIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZ3Jhc3AgdGhlIHByZWNpc2UgY29udGV4dCBvZiB0aGVzZSBhZGRpdGlvbnMgd2l0aGluIGVhY2ggZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGV4YWN0bHkgdGhlc2UgaG9va3MgYXJlIGJlaW5nIGFkZGVkIGluIHJlbGF0aW9uIHRvIHRoZSBhbGxvY2F0aW9uIHBhdGhzLCBhbmQgd2hhdCB0aGUgc3Vycm91bmRpbmcgbG9naWMgaXMuIFdoYXQgaXMgdGhlIHByZWNpc2UgbWVtb3J5IGFsbG9jYXRpb24gcGF0aCBiZWluZyB0b3VjaGVkLCBhbmQgd2hhdCBpcyBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKClgIGRvaW5nLCBleGFjdGx5PyBJcyBpdCBhIHJhdGUtbGltaXRpbmcgbWVjaGFuaXNtLCBhIGRlbmlhbCBvZiBzZXJ2aWNlIHByZXZlbnRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGluc3BlY3QgdGhlIGNvZGUgbW9yZSBjYXJlZnVsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMjQsIk91dHB1dFRva2VucyI6MTA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDQ6MzUuMTAwOTg0ODQ4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMxNTpcXHRcXG4xMzE2OlxcdFxcdGlmICh1bmxpa2VseSghZm9saW8pKSB7XFxuMTMxNzpcXHRcXHRcXHRjb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0spO1xcbjEzMTg6XFx0XFx0XFx0Y291bnRfbXRocF9zdGF0KG9yZGVyLCBNVEhQX1NUQVRfQU5PTl9GQVVMVF9GQUxMQkFDSyk7XFxuMTMxOTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzIwOlxcdFxcdH1cXG4xMzIxOlxcdFxcbjEzMjI6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSwgZm9saW8pO1xcbjEzMjM6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCB2bWEtXFx1MDAzZXZtX21tLCBnZnApKSB7XFxuMTMyNDpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjEzMjU6XFx0XFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLKTtcXG4xMzI2OlxcdFxcdFxcdGNvdW50X3ZtX2V2ZW50KFRIUF9GQVVMVF9GQUxMQkFDS19DSEFSR0UpO1xcbjEzMjc6XFx0XFx0XFx0Y291bnRfbXRocF9zdGF0KG9yZGVyLCBNVEhQX1NUQVRfQU5PTl9GQVVMVF9GQUxMQkFDSyk7XFxuMTMyODpcXHRcXHRcXHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLX0NIQVJHRSk7XFxuMTMyOTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzMwOlxcdFxcdH1cXG4xMzMxOlxcdFxcbjEzMzI6XFx0XFx0LypcXG4xMzMzOlxcdFxcdCAqIFRoZSBjaGFyZ2UgZ2ZwIGVuY29kZXMgVEhQIGFsbG9jYXRpb24gcG9saWN5IGFuZCBtYXkgbm90IGFsbG93XFxuMTMzNDpcXHRcXHQgKiBibG9ja2luZywgd2hpY2ggbWFrZXMgdHJ5X2NoYXJnZSBza2lwIGl0cyBzeW5jaHJvbm91cyBtZW1vcnkuaGlnaFxcbjEzMzU6XFx0XFx0ICogdGhyb3R0bGluZy4gRmF1bHQgY29udGV4dCBjYW4gc2xlZXAsIHNvIHNldHRsZSBhbnkgb3Zlci1oaWdoIGRlYnRcXG4xMzM2OlxcdFxcdCAqIGhlcmUgaW5zdGVhZCBvZiBsZXR0aW5nIHVzYWdlIGdyb3cgdW50aHJvdHRsZWQgdXAgdG8gbWVtb3J5Lm1heC5cXG4xMzM3OlxcdFxcdCAqL1xcbjEzMzg6XFx0XFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xcbjEzMzk6XFx0XFxuMTM0MDpcXHRcXHRpZiAoZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7XFxuMTM0MTpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjEzNDI6XFx0XFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLKTtcXG4xMzQzOlxcdFxcdFxcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spO1xcbjEzNDQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTM0NTpcXHRcXHR9XFxuMTM0NjpcXHRcXG4xMzQ3OlxcdFxcdGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKGZvbGlvLCBnZnApO1xcbjEzNDg6XFx0XFxuMTM0OTpcXHQgICAgICAgLypcXG4xMzUwOlxcdFxcdCogV2hlbiBhIGZvbGlvIGlzIG5vdCB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb24gKF9fR0ZQX1pFUk8gbm90IHVzZWQpXFxuMTM1MTpcXHRcXHQqIG9yIHVzZXIgZm9saW9zIHJlcXVpcmUgc3BlY2lhbCBoYW5kbGluZywgZm9saW9femVyb191c2VyKCkgaXMgdXNlZCB0b1xcbjEzNTI6XFx0XFx0KiBtYWtlIHN1cmUgdGhhdCB0aGUgcGFnZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmYXVsdGluZyBhZGRyZXNzIHdpbGwgYmVcXG4xMzUzOlxcdFxcdCogaG90IGluIHRoZSBjYWNoZSBhZnRlciB6ZXJvaW5nLlxcbjEzNTQ6XFx0XFx0Ki9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDQ6MzUuMTAxMTkzNTE4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUyNjA6XFx0XFx0fVxcbjUyNjE6XFx0XFxuNTI2MjpcXHRcXHQvKiBObyBuZWVkIHRvIGludmFsaWRhdGUgLSBpdCB3YXMgbm9uLXByZXNlbnQgYmVmb3JlICovXFxuNTI2MzpcXHRcXHR1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHZtZiwgdm1hLCBhZGRyZXNzLCBwdGVwLCBucl9wYWdlcyk7XFxuNTI2NDpcXHR1bmxvY2s6XFxuNTI2NTpcXHRcXHRpZiAodm1mLVxcdTAwM2VwdGUpXFxuNTI2NjpcXHRcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cXHUwMDNlcHRlLCB2bWYtXFx1MDAzZXB0bCk7XFxuNTI2NzpcXHRvdXQ6XFxuNTI2ODpcXHRcXHRpZiAoc2kpXFxuNTI2OTpcXHRcXHRcXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xcbjUyNzA6XFx0XFx0LypcXG41MjcxOlxcdFxcdCAqIExhcmdlIGZvbGlvIHN3YXBpbiBjaGFyZ2VzIHdpdGggdGhlIFRIUCBhbGxvY2F0aW9uIGdmcCwgd2hpY2ggbWF5XFxuNTI3MjpcXHRcXHQgKiBub3QgYWxsb3cgYmxvY2tpbmcsIG1ha2luZyB0cnlfY2hhcmdlIHNraXAgaXRzIHN5bmNocm9ub3VzXFxuNTI3MzpcXHRcXHQgKiBtZW1vcnkuaGlnaCB0aHJvdHRsaW5nLiBTZXR0bGUgYW55IG92ZXItaGlnaCBkZWJ0IGhlcmUgaW5zdGVhZCxcXG41Mjc0OlxcdFxcdCAqIHdoZXJlIHNsZWVwaW5nIGlzIHNhZmU6IHRoZSBmb2xpbyBsb2NrLCB0aGUgcGFnZSB0YWJsZSBsb2NrIGFuZFxcbjUyNzU6XFx0XFx0ICogdGhlIHN3YXAgZGV2aWNlIHJlZmVyZW5jZSBoYXZlIGFsbCBiZWVuIGRyb3BwZWQuXFxuNTI3NjpcXHRcXHQgKi9cXG41Mjc3OlxcdFxcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcXG41Mjc4OlxcdFxcdHJldHVybiByZXQ7XFxuNTI3OTpcXHRvdXRfbm9tYXA6XFxuNTI4MDpcXHRcXHRpZiAodm1mLVxcdTAwM2VwdGUpXFxuNTI4MTpcXHRcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cXHUwMDNlcHRlLCB2bWYtXFx1MDAzZXB0bCk7XFxuNTI4MjpcXHRvdXRfcGFnZTpcXG41MjgzOlxcdFxcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpXFxuNTI4NDpcXHRcXHRcXHRmb2xpb19mcmVlX3N3YXAoZm9saW8pO1xcbjUyODU6XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG41Mjg2OlxcdG91dF9yZWxlYXNlOlxcbjUyODc6XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG41Mjg4OlxcdFxcdGlmIChmb2xpbyAhPSBzd2FwY2FjaGUpIHtcXG41Mjg5OlxcdFxcdFxcdGZvbGlvX3VubG9jayhzd2FwY2FjaGUpO1xcbjUyOTA6XFx0XFx0XFx0Zm9saW9fcHV0KHN3YXBjYWNoZSk7XFxuNTI5MTpcXHRcXHR9XFxuNTI5MjpcXHRcXHRpZiAoc2kpXFxuNTI5MzpcXHRcXHRcXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xcbjUyOTQ6XFx0XFx0cmV0dXJuIHJldDtcXG41Mjk1OlxcdH1cXG41Mjk2OlxcdFxcbjUyOTc6XFx0c3RhdGljIGJvb2wgcHRlX3JhbmdlX25vbmUocHRlX3QgKnB0ZSwgaW50IG5yX3BhZ2VzKVxcbjUyOTg6XFx0e1xcbjUyOTk6XFx0XFx0aW50IGk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ0OjM1LjEwMTQyNTk4OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MzQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MzQ1OlxcdFxcdCAqIHB0ZV9ub25lKCkuIE5vdGUgdGhhdCBhbGwgcmVtYWluaW5nIG9yZGVycyB3aWxsIGJlIGNvbXBsZXRlbHlcXG41MzQ2OlxcdFxcdCAqIHB0ZV9ub25lKCkuXFxuNTM0NzpcXHRcXHQgKi9cXG41MzQ4OlxcdFxcdG9yZGVyID0gaGlnaGVzdF9vcmRlcihvcmRlcnMpO1xcbjUzNDk6XFx0XFx0d2hpbGUgKG9yZGVycykge1xcbjUzNTA6XFx0XFx0XFx0YWRkciA9IEFMSUdOX0RPV04odm1mLVxcdTAwM2VhZGRyZXNzLCBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbjUzNTE6XFx0XFx0XFx0aWYgKHB0ZV9yYW5nZV9ub25lKHB0ZSArIHB0ZV9pbmRleChhZGRyKSwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlcikpXFxuNTM1MjpcXHRcXHRcXHRcXHRicmVhaztcXG41MzUzOlxcdFxcdFxcdG9yZGVyID0gbmV4dF9vcmRlcihcXHUwMDI2b3JkZXJzLCBvcmRlcik7XFxuNTM1NDpcXHRcXHR9XFxuNTM1NTpcXHRcXG41MzU2OlxcdFxcdHB0ZV91bm1hcChwdGUpO1xcbjUzNTc6XFx0XFxuNTM1ODpcXHRcXHRpZiAoIW9yZGVycylcXG41MzU5OlxcdFxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuNTM2MDpcXHRcXG41MzYxOlxcdFxcdC8qIFRyeSBhbGxvY2F0aW5nIHRoZSBoaWdoZXN0IG9mIHRoZSByZW1haW5pbmcgb3JkZXJzLiAqL1xcbjUzNjI6XFx0XFx0Z2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xcbjUzNjM6XFx0XFx0d2hpbGUgKG9yZGVycykge1xcbjUzNjQ6XFx0XFx0XFx0YWRkciA9IEFMSUdOX0RPV04odm1mLVxcdTAwM2VhZGRyZXNzLCBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbjUzNjU6XFx0XFx0XFx0Zm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdm1hLCBhZGRyKTtcXG41MzY2OlxcdFxcdFxcdGlmICghZm9saW8pXFxuNTM2NzpcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuNTM2ODpcXHRcXHRcXHRpZiAobWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIHZtYS1cXHUwMDNldm1fbW0sIGdmcCkpIHtcXG41MzY5OlxcdFxcdFxcdFxcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0tfQ0hBUkdFKTtcXG41MzcwOlxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuNTM3MTpcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuNTM3MjpcXHRcXHRcXHR9XFxuNTM3MzpcXHRcXHRcXHQvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi9cXG41Mzc0OlxcdFxcdFxcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcXG41Mzc1OlxcdFxcdFxcdGlmIChvcmRlciBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7XFxuNTM3NjpcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjUzNzc6XFx0XFx0XFx0XFx0Z290byBmYWxsYmFjaztcXG41Mzc4OlxcdFxcdFxcdH1cXG41Mzc5OlxcdFxcdFxcdGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKGZvbGlvLCBnZnApO1xcbjUzODA6XFx0XFx0XFx0LypcXG41MzgxOlxcdFxcdFxcdCAqIFdoZW4gYSBmb2xpbyBpcyBub3QgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uXFxuNTM4MjpcXHRcXHRcXHQgKiAoX19HRlBfWkVSTyBub3QgdXNlZCkgb3IgdXNlciBmb2xpb3MgcmVxdWlyZSBzcGVjaWFsXFxuNTM4MzpcXHRcXHRcXHQgKiBoYW5kbGluZywgZm9saW9femVyb191c2VyKCkgaXMgdXNlZCB0byBtYWtlIHN1cmVcXG41Mzg0OlxcdFxcdFxcdCAqIHRoYXQgdGhlIHBhZ2UgY29ycmVzcG9uZGluZyB0byB0aGUgZmF1bHRpbmcgYWRkcmVzc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NDozNS4xMDE2NDQ5ODhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzY4MzUxMTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUG90ZW50aWFsOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZGl2ZXMgaW50byB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IOKAkyBzcGVjaWZpY2FsbHksIGl0J3MgdG91Y2hpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBgbW0vbWVtb3J5LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIHJpcGUgZm9yIGZ1enppbmcuIFRoZSBrZXkgZnVuY3Rpb25zIGl0IG1vZGlmaWVzIGFyZSBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCwgYGRvX3N3YXBfcGFnZWAsIGFuZCBgYWxsb2NfYW5vbl9mb2xpb2AuIFxuXG5MZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gYSBxdWljayBnbGFuY2UsIHRoZSBjb3JlIHN1YnN5c3RlbSBpbnZvbHZlZCBpcyBkZWZpbml0ZWx5IG1lbW9yeSBtYW5hZ2VtZW50OiBwYWdlIGZhdWx0IGhhbmRsaW5nLCBhbm9ueW1vdXMgVEhQIGFsbG9jYXRpb25zLCBzd2FwLWluIGhhbmRsaW5nLCBhbmQgbWVtY2cgdGhyb3R0bGluZy4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvci4gVGhlbiwgSSBuZWVkIHRvIGtub3cgaWYgSSBjYW4gdGVzdCB0aGlzIGVhc2lseS4gS25vd2luZyB0aGF0IHRoaXMgaXMgcmVhY2hhYmxlIGluIGEgUUVNVS9HQ0UgYW1kNjQgZW52aXJvbm1lbnQgaXMgcGVyZmVjdC4gWWVhaCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbk5vdywgdG8gbWFrZSBzdXJlIEknbSB0ZXN0aW5nIHRoaXMgcHJvcGVybHksIEkgbmVlZCB0byBrbm93IHRoZSByaWdodCBjb25maWd1cmF0aW9ucyB0byB1c2UuIEknbGwgbmVlZCB0byBjaGVjayB3aGF0IGNvbmZpZ3MgaW5mbHVlbmNlIGBtbS9odWdlX21lbW9yeS5jYCwgcGx1cyB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLCBhbmQgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAsIGFuZCBJIHdpbGwgbGlrZWx5IG5lZWQgdG8gZW5zdXJlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBNRU1DR2AsIGFuZCBgU1dBUGAgYXJlIGVuYWJsZWQuIEdvb2QsIEknbSBjb25maWRlbnQgSSBjYW4gbWFrZSB0aGlzIGZ1enppbmcgY2FtcGFpZ24gd29ydGh3aGlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgwMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ0OjM3Ljg2OTk5ODY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTkyODM1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0V8Q09ORklHX01FTUNHfENPTkZJR19TV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEyNTcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL01ha2VmaWxlPTc2PWVuZGlmXFxubW0vTWFrZWZpbGUtNzctXFxubW0vTWFrZWZpbGU6Nzg6b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxubW0vTWFrZWZpbGUtNzktb2JqLSQoQ09ORklHX1pTV0FQKVxcdCs9IHpzd2FwLm9cXG4tLVxcbm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgKz0gYnBmX21lbWNvbnRyb2wub1xcbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTYwPXN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKSB7IHJldHVybiBmYWxzZTsgfVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTc1LSAqL1xcbm1tL2NvbXBhY3Rpb24uYzo3NjojaWYgZGVmaW5lZCBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9jb21wYWN0aW9uLmMtNzctI2RlZmluZSBDT01QQUNUSU9OX0hQQUdFX09SREVSXFx0SFBBR0VfUE1EX09SREVSXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9NzM9dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTc0LXtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NzU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy03Ni1cXHRwbWRfdCBwbWR2YWwgPSBwbWRwX2dldChwbWQpO1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTk3LVxcdGZvbGlvX3B1dChmb2xpbyk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjk4OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtOTktfVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE5ND1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMTUtXFx0XFx0fSBlbHNlIHtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjE2OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjE3LVxcdFxcdFxcdHBtZF90IHBtZCA9IHBtZHBfZ2V0KHB2bXcucG1kKTtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMjMtXFx0XFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMjQ6I2VuZGlmXFx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIyNS1cXHRcXHR9XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0xMDY9c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMDgte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTEwLVxcdGNncm91cF9wYXRoKG1lbWNnLVxcdTAwM2Vjc3MuY2dyb3VwLCBtZW1jZ19wYXRoX2J1ZiwgUEFUSF9NQVgpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTEyLVxcdFxcdHJldHVybiB0cnVlO1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjExMzojZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE0LVxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9Mzg5PXN0YXRpYyBpbnQgZGFtb25feW91bmdfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMzk3LVxcbm1tL2RhbW9uL3ZhZGRyLmM6Mzk4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kYW1vbi92YWRkci5jLTM5OS1cXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cXHUwMDNldm1hKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNDE1LVxcdH1cXG5tbS9kYW1vbi92YWRkci5jOjQxNjojZW5kaWZcXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kYW1vbi92YWRkci5jLTQxNy1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NjM1PXN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy02NDYtXFxubW0vZGFtb24vdmFkZHIuYzo2NDc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RhbW9uL3ZhZGRyLmMtNjQ4LVxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVxcdTAwM2V2bWEpO1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYy02NjQtXFx0fVxcbm1tL2RhbW9uL3ZhZGRyLmM6NjY1OiNlbmRpZlxcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RhbW9uL3ZhZGRyLmMtNjY2LVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz03OTU9c3RhdGljIGludCBkYW1vc192YV9zdGF0X3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTgwNi1cXG5tbS9kYW1vbi92YWRkci5jOjgwNzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vZGFtb24vdmFkZHIuYy04MDgtXFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XFxuLS1cXG5tbS9kZWJ1Zy5jPTcwPXN0YXRpYyB2b2lkIF9fZHVtcF9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL2RlYnVnLmMtOTYtXFxubW0vZGVidWcuYzo5NzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZGVidWcuYy05OC1cXHRpZiAoZm9saW8tXFx1MDAzZW1lbWNnX2RhdGEpXFxuLS1cXG5tbS9kZWJ1Zy5jPTE3NT12b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS9kZWJ1Zy5jLTE4OC0jZW5kaWZcXG5tbS9kZWJ1Zy5jOjE4OTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZGVidWcuYy0xOTAtXFx0XFx0XFxcIm93bmVyICVweCBcXFwiXFxuLS1cXG5tbS9kZWJ1Zy5jLTIxNy0jZW5kaWZcXG5tbS9kZWJ1Zy5jOjIxODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZGVidWcuYy0yMTktXFx0XFx0bW0tXFx1MDAzZW93bmVyLFxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTExND1zdGF0aWMgdm9pZCBfX2luaXQgcHRlX2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTcyLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxNzM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xNzQtc3RhdGljIHZvaWQgX19pbml0IHBtZF9iYXNpY190ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzLCBpbnQgaWR4KVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTQyMz1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQyNC0jZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NDI1OiNlbHNlICAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQyNi1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpIHsgfVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTQzMT1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjQzMjojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQzMy1cXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz02NzE9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTY4Mi1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NjgzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNjg0LXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfcHJvdG5vbmVfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02OTgtfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo2OTk6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzAwLXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfcHJvdG5vbmVfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjcwMTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTcwMi1cXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03MTU9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9zd2FwX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03MzEtXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjczMjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTczMy1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03NDk9c3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03NjctfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3Njg6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzY5LXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9NzcwPXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfbGVhZl9zb2Z0X2RpcnR5X3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3NzE6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03NzItXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTAxPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTkwMy1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTA0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTA1LXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTU1PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NTYtI2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjk1NzojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NTgtc3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTk1OT1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX3RocF90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTYwOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTYxLVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTk4Nz1zdGF0aWMgdm9pZCBfX2luaXQgZGVzdHJveV9hcmdzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTg5LVxcdC8qIEZyZWUgKGh1Z2UpIHBhZ2UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTkwOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTkxLVxcdCAgICBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05OTgtXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjk5OTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTEwMDAtXFx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9MTE0Mz1zdGF0aWMgaW50IF9faW5pdCBpbml0X2FyZ3Moc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjM5LVxcdCAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxMjQwOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI0MS1cXHQgICAgaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSgpKSB7XFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI1MC1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6MTI1MTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTEyNTItXFx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7XFxuLS1cXG5tbS9maWxlbWFwLmM9MzMyOT1zdGF0aWMgc3RydWN0IGZpbGUgKmRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9maWxlbWFwLmMtMzM0MS1cXHQvKiBVc2UgdGhlIHJlYWRhaGVhZCBjb2RlLCBldmVuIGlmIHJlYWRhaGVhZCBpcyBkaXNhYmxlZCAqL1xcbm1tL2ZpbGVtYXAuYzozMzQyOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgKHZtX2ZsYWdzIFxcdTAwMjYgVk1fSFVHRVBBR0UpKSB7XFxubW0vZmlsZW1hcC5jLTMzNDMtXFx0XFx0LypcXG4tLVxcbm1tL2ZpbGVtYXAuYz00NjE4PXN0YXRpYyB2b2lkIGZpbGVtYXBfY2FjaGVzdGF0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vZmlsZW1hcC5jLTQ2NjUtXFxubW0vZmlsZW1hcC5jOjQ2NjY6I2lmZGVmIENPTkZJR19TV0FQIC8qIGltcGxpZXMgQ09ORklHX01NVSAqL1xcbm1tL2ZpbGVtYXAuYy00NjY3LVxcdFxcdFxcdGlmIChzaG1lbV9tYXBwaW5nKG1hcHBpbmcpKSB7XFxuLS1cXG5tbS9mb2xpby5jPTExMDc9dm9pZCBmb2xpb19iYXRjaF9yZW1vdmVfZXhjZXB0aW9uYWxzKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxcbi0tXFxubW0vZm9saW8uYy0xMTE4LVxcbm1tL2ZvbGlvLmM6MTExOTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZm9saW8uYy0xMTIwLXN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLFxcbi0tXFxubW0vZ3VwLmM9NzAxPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZm9sbG93X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vZ3VwLmMtNzM0LVxcbm1tL2d1cC5jOjczNTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vZ3VwLmMtNzM2LVxcdGlmIChwbWRfdHJhbnNfaHVnZShwbWR2YWwpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IEZPTExfVE9VQ0gpKVxcbm1tL2d1cC5jLTczNy1cXHRcXHR0b3VjaF9wbWQodm1hLCBhZGRyLCBwbWQsIGZsYWdzIFxcdTAwMjYgRk9MTF9XUklURSk7XFxubW0vZ3VwLmM6NzM4OiNlbmRpZlxcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2d1cC5jLTczOS1cXG4tLVxcbm1tL2htbS5jPTE4OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaG1tX3Bmbl9mbGFnc19vcmRlcih1bnNpZ25lZCBsb25nIG9yZGVyKVxcbi0tXFxubW0vaG1tLmMtMTkyLVxcbm1tL2htbS5jOjE5MzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vaG1tLmMtMTk0LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwbWRfdG9faG1tX3Bmbl9mbGFncyhzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcXG4tLVxcbm1tL2htbS5jPTIwND1zdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vaG1tLmMtMjI3LX1cXG5tbS9obW0uYzoyMjg6I2Vsc2UgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vaG1tLmMtMjI5LS8qIHN0dWIgdG8gYWxsb3cgdGhlIGNvZGUgYmVsb3cgdG8gY29tcGlsZSAqL1xcbm1tL2htbS5jPTIzMD1pbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vaG1tLmMtMjMxLVxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIGhtbV9wZm5zW10sIHBtZF90IHBtZCk7XFxubW0vaG1tLmM6MjMyOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9obW0uYy0yMzMtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTYxPXVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgX19yZWFkX21vc3RseSA9XFxubW0vaHVnZV9tZW1vcnkuYzo2MjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL2h1Z2VfbWVtb3J5LmMtNjMtXFx0KDFcXHUwMDNjXFx1MDAzY1RSQU5TUEFSRU5UX0hVR0VQQUdFX0ZMQUcpfFxcbm1tL2h1Z2VfbWVtb3J5LmMtNjQtI2VuZGlmXFxubW0vaHVnZV9tZW1vcnkuYzo2NTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9odWdlX21lbW9yeS5jLTY2LVxcdCgxXFx1MDAzY1xcdTAwM2NUUkFOU1BBUkVOVF9IVUdFUEFHRV9SRVFfTUFEVl9GTEFHKXxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzY0OT1zdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM3NTEtXFx0XFx0XFx0Zm9saW9fc2V0X2lkbGUobmV3X2ZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jOjM3NTI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzc1My1cXHRcXHRuZXdfZm9saW8tXFx1MDAzZW1lbWNnX2RhdGEgPSBmb2xpby1cXHUwMDNlbWVtY2dfZGF0YTtcXG4tLVxcbm1tL2h3cG9pc29uLWluamVjdC5jPTQ1PXN0YXRpYyBpbnQgaHdwb2lzb25fZmlsdGVyX2ZsYWdzKHN0cnVjdCBwYWdlICpwKVxcbi0tXFxubW0vaHdwb2lzb24taW5qZWN0LmMtNjYtICovXFxubW0vaHdwb2lzb24taW5qZWN0LmM6Njc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2h3cG9pc29uLWluamVjdC5jLTY4LXN0YXRpYyB1NjQgaHdwb2lzb25fZmlsdGVyX21lbWNnO1xcbi0tXFxubW0vaHdwb2lzb24taW5qZWN0LmM9MTYyPXN0YXRpYyBpbnQgX19pbml0IHBmbl9pbmplY3RfaW5pdCh2b2lkKVxcbi0tXFxubW0vaHdwb2lzb24taW5qZWN0LmMtMTkxLVxcbm1tL2h3cG9pc29uLWluamVjdC5jOjE5MjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vaHdwb2lzb24taW5qZWN0LmMtMTkzLVxcdGRlYnVnZnNfY3JlYXRlX3U2NChcXFwiY29ycnVwdC1maWx0ZXItbWVtY2dcXFwiLCAwNjAwLCBod3BvaXNvbl9kaXIsXFxuLS1cXG5tbS9rc20uYz0yNTI3PXN0YXRpYyBpbnQga3NtX25leHRfcGFnZV9wbWRfZW50cnkocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9rc20uYy0yNTQ3LVxcbm1tL2tzbS5jOjI1NDg6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBwbWRfbGVhZihwbWQpKSB7XFxubW0va3NtLmMtMjU0OS1cXHRcXHRwdGwgPSBwbWRfbG9jayhtbSwgcG1kcCk7XFxuLS1cXG5tbS9rc20uYz0zMTM3PXN0cnVjdCBmb2xpbyAqa3NtX21pZ2h0X25lZWRfdG9fY29weShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0va3NtLmMtMzE3Ni1cXHRcXHRfX2ZvbGlvX3NldF9sb2NrZWQobmV3X2ZvbGlvKTtcXG5tbS9rc20uYzozMTc3OiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL2tzbS5jLTMxNzgtXFx0XFx0Y291bnRfdm1fZXZlbnQoS1NNX1NXUElOX0NPUFkpO1xcbi0tXFxubW0vbGlzdF9scnUuYz0yOT1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsIGJvb2wgaXJxX29mZixcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtMzktXFxubW0vbGlzdF9scnUuYzo0MDojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy00MS1zdGF0aWMgTElTVF9IRUFEKG1lbWNnX2xpc3RfbHJ1cyk7XFxuLS1cXG5tbS9saXN0X2xydS5jPTE0MT1sb2NrX2xpc3RfbHJ1X29mX21lbWNnKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbi0tXFxubW0vbGlzdF9scnUuYy0xNTAtfVxcbm1tL2xpc3RfbHJ1LmM6MTUxOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG5tbS9saXN0X2xydS5jLTE1Mi1cXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NDEzPXVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxcbi0tXFxubW0vbGlzdF9scnUuYy00MjEtXFxubW0vbGlzdF9scnUuYzo0MjI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2xpc3RfbHJ1LmMtNDIzLVxcdGlmICgqbnJfdG9fd2FsayBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgbGlzdF9scnVfbWVtY2dfYXdhcmUobHJ1KSkge1xcbi0tXFxubW0vbGlzdF9scnUuYz00NTE9c3RhdGljIHZvaWQgaW5pdF9vbmVfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxcbi0tXFxubW0vbGlzdF9scnUuYy00NjEtXFxubW0vbGlzdF9scnUuYzo0NjI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2xpc3RfbHJ1LmMtNDYzLXN0YXRpYyBzdHJ1Y3QgbGlzdF9scnVfbWVtY2cgKm1lbWNnX2luaXRfbGlzdF9scnVfb25lKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBnZnBfdCBnZnApXFxuLS1cXG5tbS9saXN0X2xydS5jPTY1OT1zdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbi0tXFxubW0vbGlzdF9scnUuYy02NjEtfVxcbm1tL2xpc3RfbHJ1LmM6NjYyOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG5tbS9saXN0X2xydS5jLTY2My1cXG5tbS9saXN0X2xydS5jPTY2ND1pbnQgX19saXN0X2xydV9pbml0KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBib29sIG1lbWNnX2F3YXJlLCBzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbi0tXFxubW0vbGlzdF9scnUuYy02NjctXFxubW0vbGlzdF9scnUuYzo2Njg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2xpc3RfbHJ1LmMtNjY5LVxcdGlmIChzaHJpbmtlcilcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NjkyPXZvaWQgbGlzdF9scnVfZGVzdHJveShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcXG4tLVxcbm1tL2xpc3RfbHJ1LmMtNzAzLVxcbm1tL2xpc3RfbHJ1LmM6NzA0OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9saXN0X2xydS5jLTcwNS1cXHRscnUtXFx1MDAzZXNocmlua2VyX2lkID0gLTE7XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxPXN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE5NC1cXG5tbS9tYWR2aXNlLmM6MTk1OiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21hZHZpc2UuYy0xOTYtc3RhdGljIGludCBzd2FwaW5fd2Fsa19wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL21hZHZpc2UuYz0yNDM9c3RhdGljIHZvaWQgc2htZW1fc3dhcGluX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWFkdmlzZS5jLTI3OC19XFxubW0vbWFkdmlzZS5jOjI3OTojZW5kaWZcXHRcXHQvKiBDT05GSUdfU1dBUCAqL1xcbm1tL21hZHZpc2UuYy0yODAtXFxuLS1cXG5tbS9tYWR2aXNlLmM9MjkwPXN0YXRpYyBsb25nIG1hZHZpc2Vfd2lsbG5lZWQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMjk4LVxcbm1tL21hZHZpc2UuYzoyOTk6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWFkdmlzZS5jLTMwMC1cXHRpZiAoIWZpbGUpIHtcXG4tLVxcbm1tL21hZHZpc2UuYz0zNjI9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4tLVxcbm1tL21hZHZpc2UuYy0zODQtXFxubW0vbWFkdmlzZS5jOjM4NTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWFkdmlzZS5jLTM4Ni1cXHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZCkpIHtcXG4tLVxcbm1tL21hZHZpc2UuYz0xNTI3PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE1NDctI2VuZGlmXFxubW0vbWFkdmlzZS5jOjE1NDg6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21hZHZpc2UuYy0xNTQ5LVxcdGNhc2UgTUFEVl9IVUdFUEFHRTpcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz01OTY9dm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtNjA1LVxcbm1tL21lbWNvbnRyb2wtdjEuYzo2MDY6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC12MS5jLTYwNy0vKipcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xNDcyPXZvaWQgbWVtY2cxX29vbV9maW5pc2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGxvY2tlZClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNDc5LSAqIGNncm91cCB2MSB1c2Vyc3BhY2Ugdm1wcmVzc3VyZSBpbnRlcmZhY2UgKG1lbW9yeS5wcmVzc3VyZV9sZXZlbCAvXFxubW0vbWVtY29udHJvbC12MS5jOjE0ODA6ICogY2dyb3VwLmV2ZW50X2NvbnRyb2wpLiBLZXB0IGhlcmUgc28gdjItb25seSBrZXJuZWxzIChDT05GSUdfTUVNQ0dfVjE9bilcXG5tbS9tZW1jb250cm9sLXYxLmMtMTQ4MS0gKiBkcm9wIHRoZSB3aG9sZSBldmVudGZkIGFjY3VtdWxhdG9yLCBpdHMgd29yayBpdGVtLCBhbmQgdGhlIHBlci1tZW1jZ1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIxNzU9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZzFfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMTc3LVxcdE5SX0FOT05fTUFQUEVELFxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMTc4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9tZW1jb250cm9sLXYxLmMtMjE3OS1cXHROUl9BTk9OX1RIUFMsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjE4Ni1cXHRXT1JLSU5HU0VUX1JFRkFVTFRfRklMRSxcXG5tbS9tZW1jb250cm9sLXYxLmM6MjE4NzojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLXYxLmMtMjE4OC1cXHRNRU1DR19TV0FQLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIxOTM9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1lbWNnMV9zdGF0X25hbWVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjE5NS1cXHRcXFwicnNzXFxcIixcXG5tbS9tZW1jb250cm9sLXYxLmM6MjE5NjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWVtY29udHJvbC12MS5jLTIxOTctXFx0XFxcInJzc19odWdlXFxcIixcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMjA0LVxcdFxcXCJ3b3JraW5nc2V0X3JlZmF1bHRfZmlsZVxcXCIsXFxubW0vbWVtY29udHJvbC12MS5jOjIyMDU6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC12MS5jLTIyMDYtXFx0XFxcInN3YXBcXFwiLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTI1PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmgtMjgtLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqL1xcbm1tL21lbWNvbnRyb2wtdjEuaDoyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC12MS5oLTMwLVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTkyPWV4dGVybiBzdHJ1Y3QgY2Z0eXBlIG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzW107XFxubW0vbWVtY29udHJvbC12MS5oLTkzLVxcbm1tL21lbWNvbnRyb2wtdjEuaDo5NDojZWxzZVxcdC8qIENPTkZJR19NRU1DR19WMSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuaC05NS1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0xMjY9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV91bmNoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcykge31cXG5tbS9tZW1jb250cm9sLXYxLmgtMTI3LVxcbm1tL21lbWNvbnRyb2wtdjEuaDoxMjg6I2VuZGlmXFx0LyogQ09ORklHX01FTUNHX1YxICovXFxubW0vbWVtY29udHJvbC12MS5oLTEyOS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yMTU9c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIzNC1cXG5tbS9tZW1jb250cm9sLmM6MjM1OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMjM2LXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTM3OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTQwNi1cXHROUl9TRUNPTkRBUllfUEFHRVRBQkxFLFxcbm1tL21lbWNvbnRyb2wuYzo0MDc6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC5jLTQwOC1cXHROUl9TV0FQQ0FDSEUsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTUwPXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3Mi1cXG5tbS9tZW1jb250cm9sLmM6NTczOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNTc0LXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTk4PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xcbm1tL21lbWNvbnRyb2wuYzo1OTk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy02MDAtXFx0UEdQR0lOLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTYxMC1cXHRQR0xBWllGUkVFRCxcXG5tbS9tZW1jb250cm9sLmM6NjExOiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wuYy02MTItXFx0U1dQSU5fWkVSTyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MTktI2VuZGlmXFxubW0vbWVtY29udHJvbC5jOjYyMDojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWVtY29udHJvbC5jLTYyMS1cXHRUSFBfRkFVTFRfQUxMT0MsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9ODMyPXN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04NDctXFxubW0vbWVtY29udHJvbC5jOjg0ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTg0OS0vKlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTkxNj12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05MjgtXFxubW0vbWVtY29udHJvbC5jOjkyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTkzMC0vKiBpZHggY2FuIGJlIG9mIHR5cGUgZW51bSBtZW1jZ19zdGF0X2l0ZW0gb3Igbm9kZV9zdGF0X2l0ZW0uICovXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTEwND1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTExLVxcbm1tL21lbWNvbnRyb2wuYzoxMTEyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTExMy11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNTkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTYwOS1cXHR7IFxcXCJmaWxlX3dyaXRlYmFja1xcXCIsXFx0XFx0TlJfV1JJVEVCQUNLXFx0XFx0XFx0fSxcXG5tbS9tZW1jb250cm9sLmM6MTYxMDojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLmMtMTYxMS1cXHR7IFxcXCJzd2FwY2FjaGVkXFxcIixcXHRcXHRcXHROUl9TV0FQQ0FDSEVcXHRcXHRcXHR9LFxcbm1tL21lbWNvbnRyb2wuYy0xNjEyLSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzoxNjEzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9tZW1jb250cm9sLmMtMTYxNC1cXHR7IFxcXCJhbm9uX3RocFxcXCIsXFx0XFx0XFx0TlJfQU5PTl9USFBTXFx0XFx0XFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzEyPXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzE3LVxcbm1tL21lbWNvbnRyb2wuYzoxNzE4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTcxOS11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTczOD1zdGF0aWMgdm9pZCBtZW1jZ19zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE3ODQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobWVtY2dfdm1fZXZlbnRfc3RhdCk7IGkrKykge1xcbm1tL21lbWNvbnRyb2wuYzoxNzg1OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTc4Ni1cXHRcXHRpZiAobWVtY2dfdm1fZXZlbnRfc3RhdFtpXSA9PSBQR1BHSU4gfHxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xODM2PXZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fbWVtaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTg1Ny1cXHRcXHRcXHRhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcXG5tbS9tZW1jb250cm9sLmM6MTg1ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTE4NTktXFx0ZWxzZSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mjg2Mz1zdGF0aWMgdm9pZCBjb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODc1LVxcbm1tL21lbWNvbnRyb2wuYzoyODc2OiNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5tbS9tZW1jb250cm9sLmMtMjg3Ny1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiX25taV9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMDUwPV9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqY3VycmVudF9vYmpfY2dyb3VwKHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzA1NS1cXG5tbS9tZW1jb250cm9sLmM6MzA1NjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNQ0dfTk1JX1VOU0FGRSkgXFx1MDAyNlxcdTAwMjYgaW5fbm1pKCkpXFxubW0vbWVtY29udHJvbC5jLTMwNTctXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzA5Nj1zdHJ1Y3Qgb2JqX2Nncm91cCAqZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxMDYtXFxubW0vbWVtY29udHJvbC5jOjMxMDc6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbm1tL21lbWNvbnRyb2wuYy0zMTA4LXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2ttZW1fbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQyMTg9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDIzOS1cXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIFxcdTAwMjZwYXJlbnQtXFx1MDAzZXN3YXAsIGZhbHNlKTtcXG5tbS9tZW1jb250cm9sLmM6NDI0MDojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTQyNDEtXFx0XFx0V1JJVEVfT05DRShtZW1jZy1cXHUwMDNlc3dhcHBpbmVzcywgbWVtX2Nncm91cF9zd2FwcGluZXNzKHBhcmVudCkpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTQyNTMtXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBOVUxMLCBmYWxzZSk7XFxubW0vbWVtY29udHJvbC5jOjQyNTQ6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy00MjU1LVxcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNla21lbSwgTlVMTCwgZmFsc2UpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ0MjE9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NDMxLSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo0NDMyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNDQzMy1cXHRwYWdlX2NvdW50ZXJfc2V0X21heChcXHUwMDI2bWVtY2ctXFx1MDAzZWttZW0sIFBBR0VfQ09VTlRFUl9NQVgpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ0NjE9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ0OTYtXFxubW0vbWVtY29udHJvbC5jOjQ0OTc6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbm1tL21lbWNvbnRyb2wuYy00NDk4LXN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTE2MD1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE3MS1cXHQuZGZsX2NmdHlwZXMgPSBtZW1vcnlfZmlsZXMsXFxubW0vbWVtY29udHJvbC5jOjUxNzI6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy01MTczLVxcdC5sZWdhY3lfY2Z0eXBlcyA9IG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU2ODc9aW50IF9faW5pdCBtZW1fY2dyb3VwX2luaXQodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzIyLVxcbm1tL21lbWNvbnRyb2wuYzo1NzIzOiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wuYy01NzI0LS8qKlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTYxNzI9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MTc3LVxcdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBzd2FwX2ZpbGVzKSk7XFxubW0vbWVtY29udHJvbC5jOjYxNzg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy02MTc5LVxcdFdBUk5fT04oY2dyb3VwX2FkZF9sZWdhY3lfY2Z0eXBlcyhcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBtZW1zd19maWxlcykpO1xcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ0OjM4LjA4NTkzMzgzMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MjE3NTIwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlRyYWNpbmcgdGhlIFNvdXJjZSBvZiBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgZnVuY3Rpb24gaXMgZGVmaW5lZC4gSXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIGNvbnRleHQsIGFuZCBJIGNhbid0IGp1c3QgcmVseSBvbiBtZW1vcnkuIFRpbWUgZm9yIHRoZSB0cmllZC1hbmQtdHJ1ZSBtZXRob2Q6IGxldCdzIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBiZXN0IGFwcHJvYWNoIGhlcmUgaXMgZ29pbmcgdG8gYmUgYSBxdWljayBgZ3JlcGAuIEknbGwgZmlyZSB0aGF0IG9mZiBhbmQgc2VlIHdoYXQgaXQgdHVybnMgdXAuIEhvcGVmdWxseSwgaXQnbGwgcGlucG9pbnQgdGhlIGRlZmluaXRpb24gcXVpY2tseSBzbyBJIGNhbiBzdGFydCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzU2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDQ6MzkuODA3Njg5NDE3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTczMDEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MTMwNz1zdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTEzMzctXFx0ICovXFxubW0vaHVnZV9tZW1vcnkuYzoxMzM4OlxcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcXG5tbS9odWdlX21lbW9yeS5jLTEzMzktXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjUxOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfaGlnaF9kZWxheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjU1NC0gKi9cXG5tbS9tZW1jb250cm9sLmM6MjU1NTp2b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxcbm1tL21lbWNvbnRyb2wuYy0yNTU2LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNjQ1PXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI4NDktXFx0ICAgIGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcXG5tbS9tZW1jb250cm9sLmM6Mjg1MDpcXHRcXHRfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfbWFzayk7XFxubW0vbWVtY29udHJvbC5jLTI4NTEtXFx0cmV0dXJuIDA7XFxuLS1cXG5tbS9tZW1vcnkuYz00ODgxPXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTI3Ni1cXHQgKi9cXG5tbS9tZW1vcnkuYzo1Mjc3OlxcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcXG5tbS9tZW1vcnkuYy01Mjc4LVxcdHJldHVybiByZXQ7XFxuLS1cXG5tbS9tZW1vcnkuYz01MzA5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01MzczLVxcdFxcdC8qIFNhbWUgcmVhc29uaW5nIGFzIGluIHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpLiAqL1xcbm1tL21lbW9yeS5jOjUzNzQ6XFx0XFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xcbm1tL21lbW9yeS5jLTUzNzUtXFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMSBcXHUwMDI2XFx1MDAyNiBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChmb2xpbykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDQ6MzkuODU5NDI4MDk1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjYzMDk0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBDb250cm9sIENvZGUqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBob3cgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgaXMgZGVmaW5lZCBhbmQgdXNlZC4gVG8gcmVhbGx5IGdyYXNwIGl0cyBtZWNoYW5pY3MsIEknbSBnb2luZyB0byBqdW1wIGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBzdGFydCBieSBuYXZpZ2F0aW5nIHRvIHRoZSBoZWFkZXIgZmlsZSwgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNydWNpYWwgZGVjbGFyYXRpb24gYW5kIGFueSByZWxldmFudCBzdXBwb3J0aW5nIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyBpdHMgc2lnbmF0dXJlIGFuZCB3aGF0IHN0cnVjdHVyZXMgaXQgaW50ZXJhY3RzIHdpdGggaXMga2V5IHRvIGRlY2lwaGVyaW5nIHRoZSBsYXJnZXIgY29udGV4dCBvZiBtZW1vcnkgY2dyb3VwIG1hbmFnZW1lbnQuIEknbSBob3BpbmcgdGhlIGNvbW1lbnRzIGFyZSBoZWxwZnVsIHRvbywgdG8gc2F2ZSBzb21lIGRlYnVnZ2luZyB0aW1lIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUxMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ0OjQxLjkyNTc0MjA3N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5NDc0NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05MDI9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkxMC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5MTE6dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTEyLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjkxMzpzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkxNC17XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTE1LVxcdGlmICh1bmxpa2VseShjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2gpKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjkxNjpcXHRcXHRfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTE3LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEzNTQ9bWVtX2Nncm91cF9wcmludF9vb21fbWVtaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzU3LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEzNTg6c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzU5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvcmVzdW1lX3VzZXJfbW9kZS5oPTQxPXN0YXRpYyBpbmxpbmUgdm9pZCByZXN1bWVfdXNlcl9tb2RlX3dvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Jlc3VtZV91c2VyX21vZGUuaC01OC1cXG5pbmNsdWRlL2xpbnV4L3Jlc3VtZV91c2VyX21vZGUuaDo1OTpcXHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XFxuaW5jbHVkZS9saW51eC9yZXN1bWVfdXNlcl9tb2RlLmgtNjAtXFx0YmxrY2dfbWF5YmVfdGhyb3R0bGVfY3VycmVudCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NDo0Mi4wNjUyMjM4NzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1NDY5MjQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gcG9pbnRlZCB0byBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgIOKAkyBhIGZ1bmN0aW9uIG5hbWUgdGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHJvbGUgaW4gaGFuZGxpbmcgbWVtb3J5IGNncm91cCBvdmVyLWhpZ2ggc2NlbmFyaW9zLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBwaW5wb2ludCBpdHMgb3JpZ2luLiBUaGUgdGV4dCBjb25maXJtcyBpdCdzIGRlZmluZWQgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBFeGNlbGxlbnQsIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuXG5cbk5vdywgbXkgbmV4dCBtb3ZlIGlzIG9idmlvdXM6IEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoYXQgc291cmNlIGZpbGUgYW5kICpyZWFkKiB0aGUgY29kZSBvZiBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgbG9naWMsIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGlzIGZ1bmN0aW9uPyBXaGF0IGFjdGlvbnMgZG9lcyBpdCBwZXJmb3JtIHRvIGFkZHJlc3MgdGhlIG92ZXItaGlnaCBzaXR1YXRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIG9mIGNvbmNlcm4gdG8gd2F0Y2ggZm9yPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOiBob3cgZG9lcyBpdCBkZWFsIHdpdGggT09NPyBIb3cgZG9lcyBpdCBoYW5kbGUgcmVjbGFpbSwgb3IgcGVyaGFwcyBldmVuIGtpbGwgcHJvY2Vzc2VzPyBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHVuZGVyc3RhbmRpbmcgYmVnaW5zLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjA3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDQ6NDQuMzE5OTIwNDg1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU0MDpcXHRcXHQgKiBGYWN0b3IgaW4gdGhlIHRhc2sncyBvd24gY29udHJpYnV0aW9uIHRvIHRoZSBvdmVyYWdlLCBzdWNoIHRoYXQgZm91clxcbjI1NDE6XFx0XFx0ICogTi1zaXplZCBhbGxvY2F0aW9ucyBhcmUgdGhyb3R0bGVkIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgYXMgb25lXFxuMjU0MjpcXHRcXHQgKiA0Ti1zaXplZCBhbGxvY2F0aW9uLlxcbjI1NDM6XFx0XFx0ICpcXG4yNTQ0OlxcdFxcdCAqIE1FTUNHX0NIQVJHRV9CQVRDSCBwYWdlcyBpcyBub21pbmFsLCBzbyB3b3JrIG91dCBob3cgbXVjaCBzbWFsbGVyIG9yXFxuMjU0NTpcXHRcXHQgKiBsYXJnZXIgdGhlIGN1cnJlbnQgY2hhcmdlIHBhdGNoIGlzIHRoYW4gdGhhdC5cXG4yNTQ2OlxcdFxcdCAqL1xcbjI1NDc6XFx0XFx0cmV0dXJuIHBlbmFsdHlfamlmZmllcyAqIG5yX3BhZ2VzIC8gTUVNQ0dfQ0hBUkdFX0JBVENIO1xcbjI1NDg6XFx0fVxcbjI1NDk6XFx0XFxuMjU1MDpcXHQvKlxcbjI1NTE6XFx0ICogUmVjbGFpbXMgbWVtb3J5IG92ZXIgdGhlIGhpZ2ggbGltaXQuIENhbGxlZCBkaXJlY3RseSBmcm9tXFxuMjU1MjpcXHQgKiB0cnlfY2hhcmdlKCkgKGNvbnRleHQgcGVybWl0dGluZyksIGFzIHdlbGwgYXMgZnJvbSB0aGUgdXNlcmxhbmRcXG4yNTUzOlxcdCAqIHJldHVybiBwYXRoIHdoZXJlIHJlY2xhaW0gaXMgYWx3YXlzIGFibGUgdG8gYmxvY2suXFxuMjU1NDpcXHQgKi9cXG4yNTU1OlxcdHZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuMjU1NjpcXHR7XFxuMjU1NzpcXHRcXHR1bnNpZ25lZCBsb25nIHBlbmFsdHlfamlmZmllcztcXG4yNTU4OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xcbjI1NTk6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7XFxuMjU2MDpcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2g7XFxuMjU2MTpcXHRcXHRpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxuMjU2MjpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuMjU2MzpcXHRcXHRib29sIGluX3JldHJ5ID0gZmFsc2U7XFxuMjU2NDpcXHRcXG4yNTY1OlxcdFxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShjdXJyZW50LVxcdTAwM2VtbSk7XFxuMjU2NjpcXHRcXHRjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2ggPSAwO1xcbjI1Njc6XFx0XFxuMjU2ODpcXHRyZXRyeV9yZWNsYWltOlxcbjI1Njk6XFx0XFx0LypcXG4yNTcwOlxcdFxcdCAqIEJhaWwgaWYgdGhlIHRhc2sgaXMgYWxyZWFkeSBleGl0aW5nLiBVbmxpa2UgbWVtb3J5Lm1heCxcXG4yNTcxOlxcdFxcdCAqIG1lbW9yeS5oaWdoIGVuZm9yY2VtZW50IGlzbid0IGFzIHN0cmljdCwgYW5kIHRoZXJlIGlzIG5vXFxuMjU3MjpcXHRcXHQgKiBPT00ga2lsbGVyIGludm9sdmVkLCB3aGljaCBtZWFucyB0aGUgZXhjZXNzIGNvdWxkIGFscmVhZHlcXG4yNTczOlxcdFxcdCAqIGJlIG11Y2ggYmlnZ2VyIChhbmQgc3RpbGwgZ3Jvd2luZykgdGhhbiBpdCBjb3VsZCBmb3JcXG4yNTc0OlxcdFxcdCAqIG1lbW9yeS5tYXg7IHRoZSBkeWluZyB0YXNrIGNvdWxkIGdldCBzdHVjayBpbiBmcnVpdGxlc3NcXG4yNTc1OlxcdFxcdCAqIHJlY2xhaW0gZm9yIGEgbG9uZyB0aW1lLCB3aGljaCBpc24ndCBkZXNpcmFibGUuXFxuMjU3NjpcXHRcXHQgKi9cXG4yNTc3OlxcdFxcdGlmICh0YXNrX2lzX2R5aW5nKCkpXFxuMjU3ODpcXHRcXHRcXHRnb3RvIG91dDtcXG4yNTc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NDo0NC4zMjAxNTQzNDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njk1NzkzNjI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSW1wbGVtZW50YXRpb24gb2YgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgIGhhcyBiZWVuIGludHJvZHVjZWQgaW50byBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCwgYGFsbG9jX2Fub25fZm9saW9gLCBhbmQgYGRvX3N3YXBfcGFnZWAuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0J3MgYWxtb3N0IGNlcnRhaW5seSByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZywgbGlrZWx5IGRlYWxpbmcgd2l0aCBvdmVyLWhpZ2ggbWVtb3J5IHVzYWdlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQuIFNvLCBsZXQncyBzdGFydCBieSBmaWd1cmluZyBvdXQgdGhlIGNhbGxpbmcgY29udGV4dHMgZm9yIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgIGFuZCBgYWxsb2NfYW5vbl9mb2xpb2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uIGFuZCBob3cgdGhpcyBuZXcgY29kZSBpbnRlZ3JhdGVzIGludG8gdGhlIGV4aXN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBOVU1BIGFuZCBvdGhlciByZWxhdGVkIHN1YnN5c3RlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjA2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NDo1MS4yNzgwOTM2OThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTEzNDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0xMzA1PUVYUE9SVF9TWU1CT0xfR1BMKHRocF9nZXRfdW5tYXBwZWRfYXJlYSk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMzA2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTMwNzpzdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZV9tZW1vcnkuYy0xMzA4LVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTM5MD1zdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMzk3LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTM5ODpcXHRmb2xpbyA9IHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCh2bWEsIHZtZi1cXHUwMDNlYWRkcmVzcyk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMzk5LVxcdGlmICh1bmxpa2VseSghZm9saW8pKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yMTAxPXN0YXRpYyB2bV9mYXVsdF90IGRvX2h1Z2VfemVyb193cF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIxMDgtXFxubW0vaHVnZV9tZW1vcnkuYzoyMTA5OlxcdGZvbGlvID0gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHZtYSwgdm1mLVxcdTAwM2VhZGRyZXNzKTtcXG5tbS9odWdlX21lbW9yeS5jLTIxMTAtXFx0aWYgKHVubGlrZWx5KCFmb2xpbykpXFxuLS1cXG5tbS9tZW1vcnkuYz01MzA5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01MzcyLVxcdFxcdH1cXG5tbS9tZW1vcnkuYzo1MzczOlxcdFxcdC8qIFNhbWUgcmVhc29uaW5nIGFzIGluIHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpLiAqL1xcbm1tL21lbW9yeS5jLTUzNzQtXFx0XFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NDo1MS4zMzEyMTMxODZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYwNzU4NzQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGFsbG9jX2Fub25fZm9saW9gIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGNhbGxlcnMgb2YgYGFsbG9jX2Fub25fZm9saW9gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSdzIHRoaXMgZnVuY3Rpb24gZ2V0dGluZyB1dGlsaXplZD9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMsIHRoZSB2YXJpb3VzIHN1YnN5c3RlbXMgdGhhdCBkZXBlbmQgb24gaXQuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgYnJvYWQgYXBwcm9hY2guIEknbGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgLSBgZ2l0IGdyZXBgLCBtYXliZSBzb21lIHN0YXRpYyBhbmFseXNpcywgdG8gaWRlbnRpZnkgdGhlIHNvdXJjZSBjb2RlIGxvY2F0aW9ucy5cblxuVGhlbiwgdGhlIGdvYWwgc2hpZnRzIHRvIHVuZGVyc3RhbmRpbmcgd2h5IHRoZXNlIGNhbGxlcnMgdXNlIGBhbGxvY19hbm9uX2ZvbGlvYCBzcGVjaWZpY2FsbHkuIEFyZSB0aGV5IGRlYWxpbmcgd2l0aCBwYWdlIGFsbG9jYXRpb24gZm9yIGFub255bW91cyBtYXBwaW5ncywgaHVnZSBwYWdlcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSB0eXBlIG9mIGNhbGxlciBpcyBnb2luZyB0byBoZWF2aWx5IGluZmx1ZW5jZSB0aGUgdXNhZ2UgcGF0dGVybnMuIEkgYW50aWNpcGF0ZSBzZWVpbmcgdXNhZ2UgaW4gYG1tYXBgIGltcGxlbWVudGF0aW9ucywgcG90ZW50aWFsbHkgd2l0aGluIHRoZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgaXRzZWxmLCBwZXJoYXBzIHJlbGF0ZWQgdG8gZGVtYW5kIHBhZ2luZyBvciBDT1cgb3BlcmF0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgbWVtb3J5IHByb3RlY3Rpb24gZmxhZ3MgYW5kIGFsbG9jYXRpb24gY29uc3RyYWludHMgcGFzc2VkIGluLCB3aGljaCBjYW4gcmV2ZWFsIGNydWNpYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGludGVuZGVkIG1lbW9yeSBzZW1hbnRpY3MuIEknbSBhbHNvIHJlYWR5IHRvIHNlZSBzb21lIG1vcmUgZWRnZSBjYXNlIHNjZW5hcmlvcy5cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgYSBkZWVwIGRpdmUgdG8gZXhhbWluZSBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIG1lbW9yeSBmcmFnbWVudGF0aW9uIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNhbGxlcnMuIE1heWJlIHRoZXJlIGFyZSBzb21lIGNvbXBsZXggbG9jayBpbnRlcmFjdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGV2YWx1YXRlZCBhbmQgY2hlY2tlZC4gSSB3aWxsIGJlIGxvb2tpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgb3Bwb3J0dW5pdGllcyB0byBvcHRpbWl6ZSBhbmQgbWFrZSB0aGUgbWVtb3J5IGhhbmRsaW5nIG1vcmUgZWZmaWNpZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk4MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ0OjUzLjkzODgwMzg5NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA1MzQwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfYW5vbl9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0xMzA1PUVYUE9SVF9TWU1CT0xfR1BMKHRocF9nZXRfdW5tYXBwZWRfYXJlYSk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMzA2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTMwNzpzdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZV9tZW1vcnkuYy0xMzA4LVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTM5MD1zdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMzk3LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTM5ODpcXHRmb2xpbyA9IHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCh2bWEsIHZtZi1cXHUwMDNlYWRkcmVzcyk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMzk5LVxcdGlmICh1bmxpa2VseSghZm9saW8pKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yMTAxPXN0YXRpYyB2bV9mYXVsdF90IGRvX2h1Z2VfemVyb193cF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIxMDgtXFxubW0vaHVnZV9tZW1vcnkuYzoyMTA5OlxcdGZvbGlvID0gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHZtYSwgdm1mLVxcdTAwM2VhZGRyZXNzKTtcXG5tbS9odWdlX21lbW9yeS5jLTIxMTAtXFx0aWYgKHVubGlrZWx5KCFmb2xpbykpXFxuLS1cXG5tbS9tZW1vcnkuYz01Mjk3PXN0YXRpYyBib29sIHB0ZV9yYW5nZV9ub25lKHB0ZV90ICpwdGUsIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbW9yeS5jLTUzMDgtXFxubW0vbWVtb3J5LmM6NTMwOTpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19hbm9uX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL21lbW9yeS5jLTUzMTAte1xcbi0tXFxubW0vbWVtb3J5LmMtNTM3Mi1cXHRcXHR9XFxubW0vbWVtb3J5LmM6NTM3MzpcXHRcXHQvKiBTYW1lIHJlYXNvbmluZyBhcyBpbiB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoKS4gKi9cXG5tbS9tZW1vcnkuYy01Mzc0LVxcdFxcdG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtcXG4tLVxcbm1tL21lbW9yeS5jPTU0Mzc9c3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01NDkxLVxcdC8qIFJldHVybnMgTlVMTCBvbiBPT00gb3IgRVJSX1BUUigtRUFHQUlOKSBpZiB3ZSBtdXN0IHJldHJ5IHRoZSBmYXVsdCAqL1xcbm1tL21lbW9yeS5jOjU0OTI6XFx0Zm9saW8gPSBhbGxvY19hbm9uX2ZvbGlvKHZtZik7XFxubW0vbWVtb3J5LmMtNTQ5My1cXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDQ6NTMuOTg5MzQ0MTUzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4MTI2NDUzMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGtleSBhcmVhczogYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBhbmQgdGhlbiBgZG9fc3dhcF9wYWdlYCBhbmQgYGFsbG9jX2Fub25fZm9saW9gIGluIGBtbS9tZW1vcnkuY2AuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoYXQgYXJlIHRoZSByZWxldmFudCBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkIG9yIGRpcmVjdGx5IGNhbGwgdGhlc2UgZnVuY3Rpb25zLlxuXG5CZWZvcmUgSSBnbyB0b28gZmFyIGRvd24gdGhhdCByYWJiaXQgaG9sZSwgSSBzaG91bGQgZm9sbG93IGJlc3QgcHJhY3RpY2VzIGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgaW5jbHVkaW5nIGZ1bmN0aW9ucyB3aGljaCBhcmUgdG9vIGdlbmVyaWMuIEknbGwgcmVmZXIgYmFjayB0byB0aGUgZm9jdXMgc3ltYm9scyBndWlkZWxpbmVzLiBUaGV5IGV4cGxpY2l0bHkgc2F5IHRvICphdm9pZCogdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzIGxpa2UgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdCBoYW5kbGVycywgZXRjLiBXZSBuZWVkIHRvIHRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeSBwb2ludHMuIEFsc28sIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIGlzc3VlIHdpdGggc3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gaGVhZGVycyDigJMgdGhleSBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBub24tc3RhdGljIGNhbGxlcnMgaWYgdGhlIGNoYW5nZSBpcyBsYXJnZWx5IGluIHRob3NlIGhlbHBlcnMuXG5cblJpZ2h0LCBiYWNrIHRvIHRoZSBzeW1ib2xzLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuIEkndmUgZ290IGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAsIHdoaWNoIGlzIG5vbi1zdGF0aWMgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEFuZCB0aGVuLCB3ZSBoYXZlIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLCB3aGljaCBpcyBzdGF0aWMsIGFuZCByZXNpZGVzIGluIGBtbS9odWdlX21lbW9yeS5jYC4gTm93LCB3aG8gKmNhbGxzKiBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYD8gSSBjYW4gc2VlIGEgY291cGxlIHJpZ2h0IGF3YXk6IGBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCAoc3RhdGljLCBjYWxsZWQgYnkgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCkgYW5kIGBkb19odWdlX3plcm9fd3BfcG1kYCAoc3RhdGljLCBjYWxsZWQgYnkgYGRvX2h1Z2VfcG1kX3dwX3BhZ2VgKS4gT2ssIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgYW5kIGBkb19odWdlX3BtZF93cF9wYWdlYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgYXJlIHRoZSBuZXh0IGZ1bmN0aW9ucyBJJ2xsIGxvb2sgaW50by5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5NTEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDQ6NTcuODAxOTkyMjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzkzMTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX2h1Z2VfcG1kX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0xMzgwPXN0YXRpYyB2b2lkIG1hcF9hbm9uX2ZvbGlvX3BtZF9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMzg5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTM5MDpzdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTM5MS17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE0NDEtXFxubW0vaHVnZV9tZW1vcnkuYzoxNDQyOnZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfZGV2aWNlX3ByaXZhdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxubW0vaHVnZV9tZW1vcnkuYy0xNDQzLXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTUxNj1zdGF0aWMgdm9pZCBzZXRfaHVnZV96ZXJvX2ZvbGlvKHBndGFibGVfdCBwZ3RhYmxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTUyNy1cXG5tbS9odWdlX21lbW9yeS5jOjE1Mjg6dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5tbS9odWdlX21lbW9yeS5jLTE1Mjkte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xNTgxLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTU4MjpcXHRyZXR1cm4gX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSh2bWYpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTU4My19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIxMDE9c3RhdGljIHZtX2ZhdWx0X3QgZG9faHVnZV96ZXJvX3dwX3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjEzMi1cXG5tbS9odWdlX21lbW9yeS5jOjIxMzM6dm1fZmF1bHRfdCBkb19odWdlX3BtZF93cF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjEzNC17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIyMjc9c3RhdGljIGlubGluZSBib29sIGNhbl9jaGFuZ2VfcG1kX3dyaXRhYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yMjU2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjI1Nzp2bV9mYXVsdF90IGRvX2h1Z2VfcG1kX3VmZmRfcndwKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjI1OC17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIyODUtLyogTlVNQSBoaW50aW5nIHBhZ2UgZmF1bHQgZW50cnkgcG9pbnQgZm9yIHRyYW5zIGh1Z2UgcG1kcyAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6MjI4Njp2bV9mYXVsdF90IGRvX2h1Z2VfcG1kX251bWFfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5tbS9odWdlX21lbW9yeS5jLTIyODcte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNDgxPXN0YXRpYyBib29sIGhhc19kZXBvc2l0ZWRfcGd0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgcG1kdmFsLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNDk2LVxcdCAqIE90aGVyd2lzZSwgb25seSBhbm9ueW1vdXMgZm9saW9zIGFyZSBkZXBvc2l0ZWQsIHNlZVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjQ5NzpcXHQgKiBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKCkuXFxubW0vaHVnZV9tZW1vcnkuYy0yNDk4LVxcdCAqL1xcbi0tXFxubW0vbWVtb3J5LmM9NjM4OT1zdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3QgY3JlYXRlX2h1Z2VfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNjM5Mi1cXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKVxcbm1tL21lbW9yeS5jOjYzOTM6XFx0XFx0cmV0dXJuIGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHZtZik7XFxubW0vbWVtb3J5LmMtNjM5NC1cXHRpZiAodm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWh1Z2VfZmF1bHQpXFxuLS1cXG5tbS9tZW1vcnkuYz02NDAwPXN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB3cF9odWdlX3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTY0MTItXFx0XFx0fVxcbm1tL21lbW9yeS5jOjY0MTM6XFx0XFx0cmV0dXJuIGRvX2h1Z2VfcG1kX3dwX3BhZ2Uodm1mKTtcXG5tbS9tZW1vcnkuYy02NDE0LVxcdH1cXG4tLVxcbm1tL21lbW9yeS5jPTY2MTQ9c3RhdGljIHZtX2ZhdWx0X3QgX19oYW5kbGVfbW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1vcnkuYy02Njg4LVxcdFxcdGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkodm1mLm9yaWdfcG1kKSlcXG5tbS9tZW1vcnkuYzo2Njg5OlxcdFxcdFxcdHJldHVybiBkb19odWdlX3BtZF9kZXZpY2VfcHJpdmF0ZShcXHUwMDI2dm1mKTtcXG5tbS9tZW1vcnkuYy02NjkwLVxcbi0tXFxubW0vbWVtb3J5LmMtNjY5Ny1cXHRcXHRcXHRpZiAodXNlcmZhdWx0ZmRfaHVnZV9wbWRfcndwKHZtYSwgdm1mLm9yaWdfcG1kKSlcXG5tbS9tZW1vcnkuYzo2Njk4OlxcdFxcdFxcdFxcdHJldHVybiBkb19odWdlX3BtZF91ZmZkX3J3cChcXHUwMDI2dm1mKTtcXG5tbS9tZW1vcnkuYzo2Njk5OlxcdFxcdFxcdHJldHVybiBkb19odWdlX3BtZF9udW1hX3BhZ2UoXFx1MDAyNnZtZik7XFxubW0vbWVtb3J5LmMtNjcwMC1cXHRcXHR9XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTc4MD1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX3NldHVwKTtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzg4LSAqIEBwYWdlIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGFuZCBzZXR1cCBhZnRlciBpdCdzIGFsbG9jYXRlZC4gVGhlIGNvZGUgYml0c1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6Nzg5OiAqIGhlcmUgZm9sbG93IGNsb3NlbHkgdGhlIGNvZGUgaW4gX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSgpLiBUaGlzIEFQSSBkb2VzXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03OTAtICogbm90IHN1cHBvcnQgVEhQIHplcm8gcGFnZXMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ0OjU3Ljg1Mzc5MjM1OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3ODgyNjIzNjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcgZm9jdXMsIGtlZXBpbmcgaW4gbWluZCB0aGF0IHdlIHdhbnQgdG8gYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMgdGhhdCBkaWx1dGUgdGhlIGZ1enppbmcgZWZmb3J0LiBNeSBpbml0aWFsIGxpc3QgaW5jbHVkZXMgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCwgYGRvX2h1Z2VfcG1kX3dwX3BhZ2VgLCBgZG9fc3dhcF9wYWdlYCwgYW5kIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAuXG5cblRoZSBmaXJzdCB0aG91Z2h0IGlzIGBkb19zd2FwX3BhZ2VgLCBpcyBpdCBhIGhvdCBwYXRoPyBObywgaXQncyBhIHN3YXAtaW4gcGFnZSBmYXVsdCBoYW5kbGVyLCB3aGljaCBpcyBtb3JlIHNwZWNpZmljLiBIb3dldmVyLCBwYWdlIGZhdWx0IGhhbmRsZXJzIGluIGdlbmVyYWwgYXJlIHVzdWFsbHkgbm90IGdvb2QgdGFyZ2V0cy4gVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHRlbGwgdXMgdG8gYXZvaWQgdGhvc2UuIFNvLCBgaGFuZGxlX21tX2ZhdWx0YCBhbmQgYGRvX2Fub255bW91c19wYWdlYCBhcmUgb3V0LlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGF0IGxvZ2ljIGlzIGFwcGxpY2FibGUgaGVyZS4gVGhlIGluc3RydWN0aW9ucyBhbHNvIHNheTpcblxuXHUwMDNlIFwiQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOiBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cyAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdCBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4gTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLCB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXCJcblxuU28sIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggbXkgY2hvaWNlcy5cblxuTm93LCBsZXQncyBjbGFyaWZ5IHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQ6IGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAsIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAsIGBkb19odWdlX3BtZF93cF9wYWdlYCwgYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAsIGBhbGxvY19hbm9uX2ZvbGlvYCwgYW5kIGBkb19zd2FwX3BhZ2VgLlxuXG5gX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgIGlzIG9ubHkgY2FsbGVkIHdoZW4gYGN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoYCBpcyBzZXQuIFNvLCBub3QgdWJpcXVpdG91cy4gYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCBhbmQgYGRvX2h1Z2VfcG1kX3dwX3BhZ2VgIGFyZSBzcGVjaWZpYyB0byB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFApLiBTbywgaXQgc2hvdWxkIGJlIGEgZ29vZCBjYW5kaWRhdGUuXG5cbk5vdywgYGRvX3N3YXBfcGFnZWAgLSBpcyB0aGF0IGEgZ2VuZXJpYyBoYW5kbGVyIG9yIHN3YXAtc3BlY2lmaWM/IEl0IGlzIGEgXCJwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIHN3YXAgZW50cmllc1wiLiBCdXQgdGhlIG1vcmUgc3BlY2lmaWMgdGhyb3R0bGluZyBsb2dpYyBpcyBpbiBgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgISBTbywgYF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCBsb29rcyBwcm9taXNpbmcuXG5cblllcyEgYF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgbWVtb3J5LmhpZ2ggbGltaXQgaXMgZXhjZWVkZWQuIFRoYXQncyBhIGRpcmVjdCB0YXJnZXQuIEFsc28sIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgYW5kIGBkb19odWdlX3BtZF93cF9wYWdlYCBhcmUgZGlyZWN0IGNhbGxlcnMgb2YgYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAuXG5cbkJ1dCB3aGF0IGFib3V0IGBkb19zd2FwX3BhZ2VgPyBJdCBtaWdodCBiZSBhIHBhZ2UgZmF1bHQgaGFuZGxlciBhbmQgbm90IGEgZ29vZCBmb2N1cyBzeW1ib2wuIEJ1dCB0aGUgcGF0Y2ggZGlyZWN0bHkgbW9kaWZpZXMgdGhpcyBmdW5jdGlvbiBpbiBgbW0vbWVtb3J5LmNgLCBjYWxsaW5nIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgLiBBbHNvIGl0IGlzIGluOlxuXG5gYGBjXG52bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi4uLlxub3V0OlxuXHRpZiAoc2kpXG5cdFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcblx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xuXHRyZXR1cm4gcmV0O1xuYGBgXG5cbkFsc28sIGBhbGxvY19hbm9uX2ZvbGlvYDpcblxuYGBgY1xuc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi4uLlxuXHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG5gYGBcblxuYW5kIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgOlxuXG5gYGBjXG5zdGF0aWMgc3RydWN0IGZvbGlvICp2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi4uLlxuXHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG5gYGBcblxuTGV0J3MgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGFsbG9jX2Fub25fZm9saW9gLiBJdCdzIHN0YXRpYywgYW5kIG9ubHkgY2FsbGVkIGJ5IGBkb19hbm9ueW1vdXNfcGFnZWAuIEFuZCBgZG9fYW5vbnltb3VzX3BhZ2VgIGlzIGEgdHlwaWNhbCBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yICphbm9ueW1vdXMqIHBhZ2VzOyB0aGVyZWZvcmUsIHViaXF1aXRvdXMuXG5cbkluIHN1bW1hcnksIGBkb19zd2FwX3BhZ2VgIGlzIHN3YXAtc3BlY2lmaWM7IHNvIHRoZSBwYXRjaCB0byB0aGUgZnVuY3Rpb24gaXMgZ29vZCwgYW5kIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgaXMgdGhlIHdvcmsgaG9yc2UuIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgaXMgYSBUSFAgUE1EIGZhdWx0IGhhbmRsZXIuIGBkb19odWdlX3BtZF93cF9wYWdlYCBpcyBUSFAgUE1EIHdyaXRlIHByb3RlY3Rpb24gZmF1bHQgaGFuZGxlci5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSByZWxldmFudCBjb25maWdzOlxuXG4xXG5cbiIsIklucHV0VG9rZW5zIjoyMjI3NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MDUuNzM2NDE5MzQxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTQ0NTYzOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1NXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ1OjA1LjgwMTg3NTE5OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDEwMjA1MDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgYGRvX3N3YXBfcGFnZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhpcyBwYWdlIHN3YXBwaW5nIHByb2Nlc3MuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIHB1bGwgdXAgdGhlIGRlZmluaXRpb24gb2YgYGRvX3N3YXBfcGFnZWAg4oCTIHRoYXQncyBnb2luZyB0byBiZSBpbiBgbW0vbWVtb3J5LmNgLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgbG93LWxldmVsIG1lY2hhbmljcyBvZiBzd2FwcGluZyBhIHBhZ2UgaW4gb3Igb3V0LiBJJ20gbG9va2luZyBmb3IgdGhlIGRldGFpbHMgb24gdGhpbmdzIGxpa2UgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHN3YXAgY2FjaGUsIHRoZSBwYWdlIHRhYmxlIHVwZGF0ZXMsIHRoZSBwb3RlbnRpYWwgZm9yIEkvTyBvcGVyYXRpb25zLCBhbmQgYW55IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGludm9sdmVkLiBJIHdhbnQgdG8gc2VlIHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBzbyBJIGNhbiBhY2N1cmF0ZWx5IGFzc2VzcyB3aGVyZSB0aGUgYm90dGxlbmVjayBsaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDYyMywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ1OjA3LjgxMjA4Mjk0M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM3NTMzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fc3dhcF9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTUxMDA9dm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTUxMjItXFxubW0vaHVnZV9tZW1vcnkuYzo1MTIzOlxcdC8qIFNlZSBkb19zd2FwX3BhZ2UoKTogcmVzdG9yZSBQQUdFX05PTkUgZm9yIFJXUCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmMtNTEyNC1cXHRpZiAocG1kX3N3cF91ZmZkKCpwdm13LVxcdTAwM2VwbWQpIFxcdTAwMjZcXHUwMDI2IHVzZXJmYXVsdGZkX3J3cCh2bWEpKVxcbi0tXFxubW0vaW50ZXJuYWwuaD01Njc9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTU3NS1cXG5tbS9pbnRlcm5hbC5oOjU3Njp2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxubW0vaW50ZXJuYWwuaC01Nzctdm9pZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTE1OT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9zd2FwaW4oc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTE4MS1cXHRcXHRcXHQgKiBIZXJlIHRoZSBwdGwgaXMgb25seSB1c2VkIHRvIGNoZWNrIHB0ZV9zYW1lKCkgaW5cXG5tbS9raHVnZXBhZ2VkLmM6MTE4MjpcXHRcXHRcXHQgKiBkb19zd2FwX3BhZ2UoKSwgc28gcmVhZG9ubHkgdmVyc2lvbiBpcyBlbm91Z2guXFxubW0va2h1Z2VwYWdlZC5jLTExODMtXFx0XFx0XFx0ICovXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTIxMi1cXHRcXHR2bWYucHRsID0gcHRsO1xcbm1tL2todWdlcGFnZWQuYzoxMjEzOlxcdFxcdHJldCA9IGRvX3N3YXBfcGFnZShcXHUwMDI2dm1mKTtcXG5tbS9raHVnZXBhZ2VkLmMtMTIxNC1cXHRcXHQvKiBXaGljaCB1bm1hcHMgcHRlIChhZnRlciBwZXJoYXBzIHJlLWNoZWNraW5nIHRoZSBlbnRyeSkgKi9cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMjE3LVxcdFxcdC8qXFxubW0va2h1Z2VwYWdlZC5jOjEyMTg6XFx0XFx0ICogZG9fc3dhcF9wYWdlKCkgcmV0dXJucyBWTV9GQVVMVF9SRVRSWSB3aXRoIHJlbGVhc2VkIG1tYXBfbG9jay5cXG5tbS9raHVnZXBhZ2VkLmMtMTIxOS1cXHRcXHQgKiBOb3RlIHdlIHRyZWF0IFZNX0ZBVUxUX1JFVFJZIGFzIFZNX0ZBVUxUX0VSUk9SIGhlcmUgYmVjYXVzZVxcbi0tXFxubW0va3NtLmM9MzEzNz1zdHJ1Y3QgZm9saW8gKmtzbV9taWdodF9uZWVkX3RvX2NvcHkoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2tzbS5jLTMxNTktXFx0aWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcXG5tbS9rc20uYzozMTYwOlxcdFxcdHJldHVybiBmb2xpbztcXHRcXHQvKiBsZXQgZG9fc3dhcF9wYWdlIHJlcG9ydCB0aGUgZXJyb3IgKi9cXG5tbS9rc20uYy0zMTYxLVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMDY1PXN0YXRpYyBpbnQgbWVfcGFnZWNhY2hlX2RpcnR5KHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEwOTctICogICAgICAgIGNvcnJ1cHRlZCBkYXRhIGFuZCBzaGFsbCBiZSBraWxsZWQgKHdlIGluc3RhbGxlZCBzaW1wbGVcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEwOTg6ICogICAgICAgIGludGVyY2VwdGlvbiBjb2RlIGluIGRvX3N3YXBfcGFnZSB0byBjYXRjaCBpdCkuXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMDk5LSAqXFxuLS1cXG5tbS9tZW1vcnkuYz05NDc9c3RhdGljIHZvaWQgcmVzdG9yZV9leGNsdXNpdmVfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtOTYxLVxcbm1tL21lbW9yeS5jOjk2MjpcXHQvKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cXG5tbS9tZW1vcnkuYy05NjMtXFx0aWYgKHB0ZV9zd3BfdWZmZChvcmlnX3B0ZSkgXFx1MDAyNlxcdTAwMjYgdXNlcmZhdWx0ZmRfcndwKHZtYSkpXFxuLS1cXG5tbS9tZW1vcnkuYz0zNjUyPWludCBhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1vcnkuYy0zNjYxLSAqIG9yIGNvbmZpZ3VyYXRpb25zIChlLmcuIGkzODYgd2l0aCBQQUUpIHdoaWNoIG1pZ2h0IGdpdmUgYSBtaXggb2YgdW5tYXRjaGVkXFxubW0vbWVtb3J5LmM6MzY2MjogKiBwYXJ0cywgZG9fc3dhcF9wYWdlIG11c3QgY2hlY2sgdW5kZXIgbG9jayBiZWZvcmUgdW5tYXBwaW5nIHRoZSBwdGUgYW5kXFxubW0vbWVtb3J5LmMtMzY2My0gKiBwcm9jZWVkaW5nIChidXQgZG9fd3BfcGFnZSBpcyBvbmx5IGNhbGxlZCBhZnRlciBhbHJlYWR5IG1ha2luZyBzdWNoIGEgY2hlY2s7XFxuLS1cXG5tbS9tZW1vcnkuYz00Nzk1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDgzOS1cXHQvKlxcbm1tL21lbW9yeS5jOjQ4NDA6XFx0ICogRm9yIGRvX3N3YXBfcGFnZSwgZmluZCB0aGUgaGlnaGVzdCBvcmRlciB3aGVyZSB0aGUgYWxpZ25lZCByYW5nZSBpc1xcbm1tL21lbW9yeS5jLTQ4NDEtXFx0ICogY29tcGxldGVseSBzd2FwIGVudHJpZXMgd2l0aCBjb250aWd1b3VzIHN3YXAgb2Zmc2V0cy5cXG4tLVxcbm1tL21lbW9yeS5jPTQ4NjM9c3RhdGljIHZvaWQgY2hlY2tfc3dhcF9leGNsdXNpdmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksXFxuLS1cXG5tbS9tZW1vcnkuYy00ODgwLSAqL1xcbm1tL21lbW9yeS5jOjQ4ODE6dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxubW0vbWVtb3J5LmMtNDg4Mi17XFxuLS1cXG5tbS9tZW1vcnkuYy01MjI0LVxcdHNldF9wdGVzKHZtYS1cXHUwMDNldm1fbW0sIGFkZHJlc3MsIHB0ZXAsIHB0ZSwgbnJfcGFnZXMpO1xcbm1tL21lbW9yeS5jOjUyMjU6XFx0YXJjaF9kb19zd2FwX3BhZ2VfbnIodm1hLVxcdTAwM2V2bV9tbSwgdm1hLCBhZGRyZXNzLFxcbm1tL21lbW9yeS5jLTUyMjYtXFx0XFx0XFx0cHRlLCBwdGUsIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL21lbW9yeS5jPTY1MjQ9c3RhdGljIHZtX2ZhdWx0X3QgaGFuZGxlX3B0ZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTY1NzAtXFx0aWYgKCFwdGVfcHJlc2VudCh2bWYtXFx1MDAzZW9yaWdfcHRlKSlcXG5tbS9tZW1vcnkuYzo2NTcxOlxcdFxcdHJldHVybiBkb19zd2FwX3BhZ2Uodm1mKTtcXG5tbS9tZW1vcnkuYy02NTcyLVxcbi0tXFxubW0vbWlncmF0ZS5jPTM1MT1zdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTQwNC1cXG5tbS9taWdyYXRlLmM6NDA1OlxcdFxcdC8qIFNlZSBkb19zd2FwX3BhZ2UoKTogcmVzdG9yZSBQQUdFX05PTkUgZm9yIFJXUCAqL1xcbm1tL21pZ3JhdGUuYy00MDYtXFx0XFx0aWYgKHB0ZV9zd3BfdWZmZChvbGRfcHRlKSBcXHUwMDI2XFx1MDAyNiB1c2VyZmF1bHRmZF9yd3Aodm1hKSlcXG4tLVxcbm1tL3BhZ2VfaW8uYz00MTk9c3RhdGljIGJvb2wgc3dhcF9yZWFkX2ZvbGlvX3plcm9tYXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3BhZ2VfaW8uYy00MjktXFx0ICogY3VycmVudGx5IGhhbmRsZWQuIFJldHVybiB0cnVlIHdpdGhvdXQgbWFya2luZyB0aGUgZm9saW8gdXB0b2RhdGUgc29cXG5tbS9wYWdlX2lvLmM6NDMwOlxcdCAqIHRoYXQgYW4gSU8gZXJyb3IgaXMgZW1pdHRlZCAoZS5nLiBkb19zd2FwX3BhZ2UoKSB3aWxsIHNpZ2J1cykuXFxubW0vcGFnZV9pby5jLTQzMS1cXHQgKiBGb2xpbyBsb2NrIHN0YWJpbGl6ZXMgdGhlIGNsdXN0ZXIgYW5kIG1hcCwgc28gdGhlIGNoZWNrIGlzIHNhZmUuXFxuLS1cXG5tbS9ybWFwLmM9MjQ2NT1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjcyNy1cXHRcXHRcXHQgKiBTdG9yZSB0aGUgcGZuIG9mIHRoZSBwYWdlIGluIGEgc3BlY2lhbCBtaWdyYXRpb25cXG5tbS9ybWFwLmM6MjcyODpcXHRcXHRcXHQgKiBwdGUuIGRvX3N3YXBfcGFnZSgpIHdpbGwgd2FpdCB1bnRpbCB0aGUgbWlncmF0aW9uXFxubW0vcm1hcC5jLTI3MjktXFx0XFx0XFx0ICogcHRlIGlzIHJlbW92ZWQgYW5kIHRoZW4gcmVzdGFydCBmYXVsdCBoYW5kbGluZy5cXG4tLVxcbm1tL3JtYXAuYz0yODY5PXN0cnVjdCBwYWdlICptYWtlX2RldmljZV9leGNsdXNpdmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL3JtYXAuYy0yOTQ3LVxcdCAqIFN0b3JlIHRoZSBwZm4gb2YgdGhlIHBhZ2UgaW4gYSBzcGVjaWFsIGRldmljZS1leGNsdXNpdmUgUEZOIHN3YXAgUFRFLlxcbm1tL3JtYXAuYzoyOTQ4OlxcdCAqIGRvX3N3YXBfcGFnZSgpIHdpbGwgdHJpZ2dlciB0aGUgY29udmVyc2lvbiBiYWNrIHdoaWxlIGhvbGRpbmcgdGhlXFxubW0vcm1hcC5jLTI5NDktXFx0ICogZm9saW8gbG9jay5cXG4tLVxcbm1tL3NobWVtLmM9MjA0Mz1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9zd2FwX2FsbG9jX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5tbS9zaG1lbS5jLTIwODAtICogSW4gYSBmdXR1cmUgcmVsZWFzZSwgdGhpcyBtYXkgd2VsbCBiZSBleHRlbmRlZCB0byByZXNwZWN0IGNwdXNldCBhbmRcXG5tbS9zaG1lbS5jOjIwODE6ICogTlVNQSBtZW1wb2xpY3ksIGFuZCBhcHBsaWVkIGFsc28gdG8gYW5vbnltb3VzIHBhZ2VzIGluIGRvX3N3YXBfcGFnZSgpO1xcbm1tL3NobWVtLmMtMjA4Mi0gKiBidXQgZm9yIG5vdyBpdCBpcyBhIHNpbXBsZSBtYXR0ZXIgb2Ygem9uZS5cXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTgzMD12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xODcwLSAqICAgQ1BVMVxcdFxcdFxcdFxcdENQVTJcXG5tbS9zd2FwZmlsZS5jOjE4NzE6ICogICBkb19zd2FwX3BhZ2UoKVxcbm1tL3N3YXBmaWxlLmMtMTg3Mi0gKiAgICAgLi4uXFx0XFx0XFx0XFx0c3dhcG9mZitzd2Fwb25cXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTg3OC0gKiBjaGFuZ2luZyBwYXJ0bHkgYmVjYXVzZSB0aGUgc3BlY2lmaWVkIHN3YXAgZW50cnkgbWF5IGJlIGZvciBhbm90aGVyXFxubW0vc3dhcGZpbGUuYzoxODc5OiAqIHN3YXAgZGV2aWNlIHdoaWNoIGhhcyBiZWVuIHN3YXBvZmYuICBBbmQgaW4gZG9fc3dhcF9wYWdlKCksIGFmdGVyXFxubW0vc3dhcGZpbGUuYy0xODgwLSAqIHRoZSBwYWdlIGlzIHJlYWQgZnJvbSB0aGUgc3dhcCBkZXZpY2UsIHRoZSBQVEUgaXMgdmVyaWZpZWQgbm90XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTI0MTk9c3RhdGljIGludCB1bnVzZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI0ODUtXFx0XFx0LypcXG5tbS9zd2FwZmlsZS5jOjI0ODY6XFx0XFx0ICogU2VlIGRvX3N3YXBfcGFnZSgpOiB3cml0ZWJhY2sgd291bGQgYmUgcHJvYmxlbWF0aWMuXFxubW0vc3dhcGZpbGUuYy0yNDg3LVxcdFxcdCAqIEhvd2V2ZXIsIHdlIGRvIGEgZm9saW9fd2FpdF93cml0ZWJhY2soKSBqdXN0IGJlZm9yZSB0aGlzXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI1MTQtXFxubW0vc3dhcGZpbGUuYzoyNTE1OlxcdC8qIFNlZSBkb19zd2FwX3BhZ2UoKTogcmVzdG9yZSBQQUdFX05PTkUgZm9yIFJXUCAqL1xcbm1tL3N3YXBmaWxlLmMtMjUxNi1cXHRpZiAocHRlX3N3cF91ZmZkKG9sZF9wdGUpIFxcdTAwMjZcXHUwMDI2IHVzZXJmYXVsdGZkX3J3cCh2bWEpKVxcbi0tXFxubW0venN3YXAuYz0xNDg4PWJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtMTU4Mi0gKiAgaW50byB0aGUgcGFnZSBkdWUgdG8gYSBkZWNvbXByZXNzaW9uIGZhaWx1cmUuIFRoZSBmb2xpbyBpcyB1bmxvY2tlZCwgYnV0XFxubW0venN3YXAuYzoxNTgzOiAqICBOT1QgbWFya2VkIHVwLXRvLWRhdGUsIHNvIHRoYXQgYW4gSU8gZXJyb3IgaXMgZW1pdHRlZCAoZS5nLiBkb19zd2FwX3BhZ2UoKVxcbm1tL3pzd2FwLmMtMTU4NC0gKiAgd2lsbCBTSUdCVVMpLlxcbi0tXFxubW0venN3YXAuYy0xNTg4LSAqICBidXQgTk9UIG1hcmtlZCB1cC10by1kYXRlLCBzbyB0aGF0IGFuIElPIGVycm9yIGlzIGVtaXR0ZWQgKGUuZy5cXG5tbS96c3dhcC5jOjE1ODk6ICogIGRvX3N3YXBfcGFnZSgpIHdpbGwgU0lHQlVTKS5cXG5tbS96c3dhcC5jLTE1OTAtICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MDcuODY1ODQyMTkxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3ODMxNDIyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24gZm9yIE9wdGltYWwgUGVyZm9ybWFuY2UqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcuIEknbSBmb2N1c2luZyBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgTUVNQ0dgIGFzIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9ucyB0byBvcHRpbWl6ZS4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHR3ZWFraW5nIG1lbW9yeSBwZXJmb3JtYW5jZS4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGUgbmVjZXNzaXR5IG9mIGBTV0FQYC4gSXMgYFNXQVBgIGdlbnVpbmVseSByZXF1aXJlZCwgb3IgaXMgdGhlcmUgYSBzcGVjaWZpYyBgQ09ORklHX1NXQVBgIG9wdGlvbiBJIG5lZWQgdG8gY29uc2lkZXI/IFJpZ2h0LCBub3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCBgZG9fc3dhcF9wYWdlYCBpcyB0aGUgb25lIHRoYXQncyBpbnZvbHZlZCBpbiBzd2FwLWluLCBtaWdyYXRpb24sIHRob3NlIGRldmljZSBwcml2YXRlL2V4Y2x1c2l2ZSBlbnRyaWVzLCBhbmQgYWxsIHRoYXQuIFNvIEkgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBkaXZlIGludG8gdGhhdCBzcGVjaWZpYyBkZXRhaWwgeWV0LlxuXG5Ob3csIGxldCdzIGdvIGJhY2sgdG8gdGhlIEtjb25maWcgZmlsZXMuIEknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb25zIG9mIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCB0aGVyZS4gSXQncyBiZXN0IHByYWN0aWNlIHRvIHJldmlldyB0aGVpciBzZXR0aW5ncyBhbmQgZGVwZW5kZW5jaWVzLiBJJ2xsIG5lZWQgdG8gbG9vayBpbiBgbW0vS2NvbmZpZ2AgZm9yIGJvdGggb2YgdGhlc2UsIG9mIGNvdXJzZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiB0aGVpciBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczOTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MTAuNjQ4OTg4ODQyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzA5NjMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0V8Y29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgzMj1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODM0LVxcbm1tL0tjb25maWc6ODM1Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzNi1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NTM9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg1OC1cXG5tbS9LY29uZmlnOjg1OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NjAtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NjUtXFxubW0vS2NvbmZpZzo4NjY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg2Ny1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzQtXFxubW0vS2NvbmZpZzo4NzU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04NzYtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg4Mj1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODkxLVxcbm1tL0tjb25maWc6ODkyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy04OTMtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwMS1cXG5tbS9LY29uZmlnOjkwMjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkwMy1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwOS1cXG5tbS9LY29uZmlnOjkxMDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTExLVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTctXFxubW0vS2NvbmZpZzo5MTg6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MTktXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05Mjc9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkzNi1cXG5tbS9LY29uZmlnOjkzNzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTM4LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NDUtXFxubW0vS2NvbmZpZzo5NDY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NDctXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTMtXFxubW0vS2NvbmZpZzo5NTQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk1NS1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTYxLVxcbm1tL0tjb25maWc6OTYyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTYzLVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MTAuNzAyMDkxOTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQzNjMzNzE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCdzIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYE1FTUNHYCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgc3RlcCwgZXNwZWNpYWxseSB3aGVuIHdvcmtpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBvcHRpb24gaXMgc2V0IGFuZCBwb3RlbnRpYWxseSB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMuIExldCdzIHNlZS4uLiBLY29uZmlnIGlzIHRoZSBrZXkgaGVyZS4gSXTigJlzIHRoZSBiYWNrYm9uZSBvZiB0aGUga2VybmVs4oCZcyBidWlsZCBjb25maWd1cmF0aW9uLiBJJ2xsIG5lZWQgdG8gdXNlIHRoZSB0b29scyBhdmFpbGFibGUgdG8gcXVpY2tseSB0cmFjZSBpdHMgZGVjbGFyYXRpb24uIFVuZGVyc3RhbmRpbmcgaXRzIHBsYWNlbWVudCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBpbmZyYXN0cnVjdHVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTA1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MTIuMTM4NDMyMDg5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM0OTk4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA4NC1cXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA4Ni1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkzLVxcbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwOTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDAtXFxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTExMDItXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDctXFxuaW5pdC9LY29uZmlnOjExMDg6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDktXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MTIuMTg1Nzg5MDc3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNTAyMzM0NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBTd2FwIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3dhcCBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUuLi4gdGhlIGZpcnN0IHRoaW5nIEknbGwgY2hlY2sgaXMgYENPTkZJR19TV0FQYCBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIG1hc3RlciBzd2l0Y2gsIHNvIHRvIHNwZWFrLiBVbmRlcnN0YW5kaW5nIHRoYXQgc2V0dGluZyBpcyBjcnVjaWFsLiBJIGtub3cgdGhlcmUgYXJlIGRlcGVuZGVuY2llcyBhbmQgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBjb21lIGludG8gcGxheSBvbmNlIGBDT05GSUdfU1dBUGAgaXMgZW5hYmxlZCAob3IgZGlzYWJsZWQpLCBsaWtlIHZhcmlvdXMgc3dhcCBhbGdvcml0aG1zLCBkZXZpY2Ugc3VwcG9ydCwgYW5kIHNvIG9uLCBidXQgKnRoaXMqIGlzIHRoZSBpbml0aWFsIGdhdGUuIEJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljcyBvZiBhIHBhcnRpY3VsYXIgaXNzdWUsIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgb3IgYSBkZXNpZ24gY29uc2lkZXJhdGlvbiwgSSB3YW50IHRvIGJlIDEwMCUgY2xlYXIgb24gKndoZXRoZXIqIHN3YXAgaXMgZXZlbiAqZW5hYmxlZCogYXQgYWxsLCBvciBwb3RlbnRpYWxseSBhY2NpZGVudGFsbHkgZGlzYWJsZWQuIEdyYWJiaW5nIHRoYXQgaW5pdGlhbCBkYXRhIHBvaW50IGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyBzd2FwIGludGVyYWN0cyB3aXRoIG15IHVzZSBjYXNlLCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlIGlmIHN3YXAgaXMgc2V0IHRvIG9mZi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5MTcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NToxNC41MzYwMjcwODZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxODc1NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0xMS1cXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxcbm1tL0tjb25maWctMTMtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NToxNC41ODc5MDk1MTRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODU1NDM5MTc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIFNlbGVjdGlvbiBmb3IgRnV6emluZyBGb2N1cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBzZXQgZm9yIHRoZSBmdXp6aW5nIGFuYWx5c2lzIHRvIGJlIHJlbGV2YW50LiBUaGUgcGF0Y2ggZGVwZW5kcyBvbiBgTUVNQ0dgIChmb3IgbWVtb3J5IGNncm91cCBjb250cm9sbGVyIGFuZCB0aHJvdHRsaW5nLCBzcGVjaWZpY2FsbHkgYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgYW5kIGl0cyBpbnRlcm5hbCBvcGVyYXRpb25zKSwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCAoZm9yIFRIUCBzdXBwb3J0IGFuZCB0aGUgYG1tL2h1Z2VfbWVtb3J5LmNgIGNvZGUsIGluY2x1ZGluZyBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCksIGFuZCBgU1dBUGAgKGZvciBhbm9ueW1vdXMgbWVtb3J5IHN3YXAgc3VwcG9ydCwgaW52b2x2aW5nIGBkb19zd2FwX3BhZ2VgKS4gSSdtIGdvaW5nIHRvIG5vdGUgdGhlc2UgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuXG5cbk5vdywgZm9yIHRoZSBpbXBvcnRhbnQgcGFydDogaWRlbnRpZnlpbmcgdGhlICpyaWdodCogc3ltYm9scyB0byBmb2N1cyB0aGUgZnV6emluZyBlZmZvcnQuIEluaXRpYWxseSwgbXkgbWluZCBqdW1wcyB0byB0aGUga2V5IGZ1bmN0aW9uczogYF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCAodGhlIGNvcmUgdGhyb3R0bGluZyBsb2dpYyksIGBkb19zd2FwX3BhZ2VgICh3aGljaCBub3cgaW5jb3Jwb3JhdGVzIHRoZSB0aHJvdHRsaW5nKSwgYW5kIHRoZSBUSFAgZmF1bHQgaGFuZGxlcnMgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCBhbmQgYGRvX2h1Z2VfcG1kX3dwX3BhZ2VgLlxuXG5Ib3dldmVyLCB0aGUgZG9jdW1lbnRhdGlvbiBpcyBjbGVhcjogSSBuZWVkIHRvIGF2b2lkIGxpc3RpbmcgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoZSBnZW5lcmljIGZhdWx0IGhhbmRsZXJzIChgaGFuZGxlX21tX2ZhdWx0YCwgYGRvX2Fub255bW91c19wYWdlYCwgZXRjLikgYXJlIGNhbGxlZCAqZXZlcnl3aGVyZSouICBCdXQsIGBkb19zd2FwX3BhZ2VgIGlzIGEgZ29vZCBjaG9pY2UgYmVjYXVzZSBpdCdzICpzcGVjaWZpYyogdG8gc3dhcHBlZC1vdXQgcGFnZXMuIFNpbWlsYXJseSwgYGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCBhbmQgYGRvX2h1Z2VfcG1kX3dwX3BhZ2VgIGFyZSBUSFAtc3BlY2lmaWMuIFRoZXkncmUgbm90IGNhbGxlZCBvbiAqZXZlcnkqIHBhZ2UgZmF1bHQsIG9ubHkgZm9yIHRoZSByZWxldmFudCBjYXNlcywgd2hpY2ggaXMgcGVyZmVjdCBmb3IgdGFyZ2V0ZWQgZnV6emluZy4gYF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCBpcyB0aGUgY29yZSwgdGFyZ2V0IGZ1bmN0aW9uLCBhcyB3ZWxsLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEkgdGhvdWdodCBhYm91dCBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCBvciBgYWxsb2NfYW5vbl9mb2xpb2AsIGJlY2F1c2UgdGhleSBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gSG93ZXZlciwgdGhleSBhcmUgc3RhdGljIGZ1bmN0aW9ucyBpbiBgLmNgIGZpbGVzLCBzbyB0aGV5J3JlIG5vdCBzdWJqZWN0IHRvIHRoZSBoZWFkZXIgcnVsZS5cblxuQWxyaWdodCwgbGV0J3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSBJJ3ZlIGNoZWNrZWQgZXZlcnl0aGluZyBhY2NvcmRpbmcgdG8gdGhlIHByb2Nlc3MuXG5cbjEuICBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgOiBUaGUgY2hhbmdlcyAqZG8qIHRvdWNoIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtZW1jZyB0aHJvdHRsaW5nIHBhdGhzLCBzcGVjaWZpY2FsbHkgYnkgYWRkaW5nIGNhbGxzIHRvIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgaW4gZmF1bHQgaGFuZGxpbmcgZm9yIGFub255bW91cyBUSFAgYWxsb2NhdGlvbnMgYW5kIHN3YXAtaW4uIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0YXNrcyB0aGF0IGFyZSBibG9ja2VkIHdhaXRpbmcgZm9yIG1lbW9yeSBzZXR0bGUgdGhlaXIgYG1lbW9yeS5oaWdoYCBkZWJ0LlxuMi4gIGBFbmFibGVDb25maWdzYCBpbmNsdWRlcyBcIk1FTUNHXCIsIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIiwgYW5kIFwiU1dBUFwiLiBDb25maXJtZWQuXG4zLiAgYEZvY3VzU3ltYm9sc2A6IGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAsIGBkb19zd2FwX3BhZ2VgLCBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgLCBhbmQgYGRvX2h1Z2VfcG1kX3dwX3BhZ2VgLiAgVGhhdCBjb3ZlcnMgdGhlIGNvcmUgdGhyb3R0bGluZyBsb2dpYyBpbiB0aGUga2V5IGZhdWx0IHBhdGhzLlxuNC4gIFRoZSByZWFzb25pbmcgaXMgY29uY2lzZTogdGhlIHBhdGNoIHRhcmdldHMgZmF1bHQgaGFuZGxpbmcgcGF0aHMgdG8gZW5zdXJlIG1lbW9yeS5oaWdoIGRlYnQgc2V0dGxlbWVudC4gR3JlYXQsIGl0J3MgYWxsIGV4cGxhaW5lZC5cblxuVGhhdCdzIGl0LiBFdmVyeXRoaW5nJ3MgdmVyaWZpZWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTI1MywiT3V0cHV0VG9rZW5zIjoyMDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ1OjIzLjE0MjMwMzQyOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MTk0MjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaFwiLFxuICAgIFwiZG9fc3dhcF9wYWdlXCIsXG4gICAgXCJkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZVwiLFxuICAgIFwiZG9faHVnZV9wbWRfd3BfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmF1bHQgaGFuZGxpbmcgbG9naWMgaW4gbW0vaHVnZV9tZW1vcnkuYyBhbmQgbW0vbWVtb3J5LmMgYnkgaW52b2tpbmcgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKCkgZHVyaW5nIFBNRCBUSFAgYW5vbnltb3VzIGFsbG9jYXRpb24sIG1USFAgYW5vbnltb3VzIGFsbG9jYXRpb24sIGFuZCBzd2FwLWluIHBhZ2UgZmF1bHQgcGF0aHMuIFRoaXMgZW5zdXJlcyBtZW1vcnkuaGlnaCB0aHJvdHRsaW5nIGRlYnQgaXMgc3luY2hyb25vdXNseSBoYW5kbGVkIGluIHNsZWVwaW5nIGZhdWx0IGNvbnRleHRzIHdoZW4gbm9uLWJsb2NraW5nIEdGUCBtYXNrcyB3ZXJlIHVzZWQgZHVyaW5nIGNoYXJnaW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiByZWFjaGFibGUgTU0gY29kZSBwYXRocyBhbmQgd2FycmFudCBmdXp6aW5nIHRvIHZlcmlmeSBsb2NraW5nIGludmFyaWFudHMgYW5kIHRocm90dGxpbmcgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hcIixcbiAgICBcImRvX3N3YXBfcGFnZVwiLFxuICAgIFwiZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VcIixcbiAgICBcImRvX2h1Z2VfcG1kX3dwX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGluIG1tL2h1Z2VfbWVtb3J5LmMgYW5kIG1tL21lbW9yeS5jIGJ5IGludm9raW5nIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaCgpIGR1cmluZyBQTUQgVEhQIGFub255bW91cyBhbGxvY2F0aW9uLCBtVEhQIGFub255bW91cyBhbGxvY2F0aW9uLCBhbmQgc3dhcC1pbiBwYWdlIGZhdWx0IHBhdGhzLiBUaGlzIGVuc3VyZXMgbWVtb3J5LmhpZ2ggdGhyb3R0bGluZyBkZWJ0IGlzIHN5bmNocm9ub3VzbHkgaGFuZGxlZCBpbiBzbGVlcGluZyBmYXVsdCBjb250ZXh0cyB3aGVuIG5vbi1ibG9ja2luZyBHRlAgbWFza3Mgd2VyZSB1c2VkIGR1cmluZyBjaGFyZ2luZy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gcmVhY2hhYmxlIE1NIGNvZGUgcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZyB0byB2ZXJpZnkgbG9ja2luZyBpbnZhcmlhbnRzIGFuZCB0aHJvdHRsaW5nIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NToyMy4yMTY1MDM2MDZaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NTEyODQyMzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MjMuMjE2OTg5MDg2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjk1MTIzNDkzNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKWAgaW4gYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpYCwgYGRvX3N3YXBfcGFnZSgpYCwgYW5kIGBhbGxvY19hbm9uX2ZvbGlvKClgIHRvIGVuZm9yY2Ugc3luY2hyb25vdXMgYG1lbW9yeS5oaWdoYCBjZ3JvdXAgdGhyb3R0bGluZyBkdXJpbmcgcGFnZSBmYXVsdCBoYW5kbGluZyB3aGVuIGNoYXJnaW5nIGZvbGlvcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IHBlcnRhaW4gdG8gbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLCByZWNsYW1hdGlvbiwgYW5kIHRocm90dGxpbmcgY29udHJvbCBmbG93LiBUaGV5IGRvIG5vdCBhbGxvY2F0ZSwgbW9kaWZ5LCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHN0cnVjdHVyZXMsIG5vciBkbyB0aGV5IGludHJvZHVjZSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBzbGVlcGluZy1pbi1hdG9taWMsIG9yIGxpZmV0aW1lIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChLQVNBTiwgTE9DS0RFUCwgREVCVUdfQVRPTUlDX1NMRUVQKSwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNlMTRlOGE5NDE5MTVkNjA4Mzc4NWY2ZmVkYTA3NzE4ZjU0ZGFmOTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDEzOjQ0OjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGNlZDQwMGY3MmQ0M2EuLjU0M2JhNGE3NGRjM2EgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTMyOSw2ICsxMzI5LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogVGhlIGNoYXJnZSBnZnAgZW5jb2RlcyBUSFAgYWxsb2NhdGlvbiBwb2xpY3kgYW5kIG1heSBub3QgYWxsb3dcbitcdCAqIGJsb2NraW5nLCB3aGljaCBtYWtlcyB0cnlfY2hhcmdlIHNraXAgaXRzIHN5bmNocm9ub3VzIG1lbW9yeS5oaWdoXG4rXHQgKiB0aHJvdHRsaW5nLiBGYXVsdCBjb250ZXh0IGNhbiBzbGVlcCwgc28gc2V0dGxlIGFueSBvdmVyLWhpZ2ggZGVidFxuK1x0ICogaGVyZSBpbnN0ZWFkIG9mIGxldHRpbmcgdXNhZ2UgZ3JvdyB1bnRocm90dGxlZCB1cCB0byBtZW1vcnkubWF4LlxuK1x0ICovXG4rXHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG4rXG4gXHRpZiAoZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdGNvdW50X3ZtX2V2ZW50KFRIUF9GQVVMVF9GQUxMQkFDSyk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggOGIwYzJjNzM1ZDNkZS4uZGM5N2NmMGViZmIzMCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTUyNjcsNiArNTI2NywxNCBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBvdXQ6XG4gXHRpZiAoc2kpXG4gXHRcdHB1dF9zd2FwX2RldmljZShzaSk7XG4rXHQvKlxuK1x0ICogTGFyZ2UgZm9saW8gc3dhcGluIGNoYXJnZXMgd2l0aCB0aGUgVEhQIGFsbG9jYXRpb24gZ2ZwLCB3aGljaCBtYXlcbitcdCAqIG5vdCBhbGxvdyBibG9ja2luZywgbWFraW5nIHRyeV9jaGFyZ2Ugc2tpcCBpdHMgc3luY2hyb25vdXNcbitcdCAqIG1lbW9yeS5oaWdoIHRocm90dGxpbmcuIFNldHRsZSBhbnkgb3Zlci1oaWdoIGRlYnQgaGVyZSBpbnN0ZWFkLFxuK1x0ICogd2hlcmUgc2xlZXBpbmcgaXMgc2FmZTogdGhlIGZvbGlvIGxvY2ssIHRoZSBwYWdlIHRhYmxlIGxvY2sgYW5kXG4rXHQgKiB0aGUgc3dhcCBkZXZpY2UgcmVmZXJlbmNlIGhhdmUgYWxsIGJlZW4gZHJvcHBlZC5cbitcdCAqL1xuK1x0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xuIFx0cmV0dXJuIHJldDtcbiBvdXRfbm9tYXA6XG4gXHRpZiAodm1mLVx1MDAzZXB0ZSlcbkBAIC01MzYyLDYgKzUzNzAsOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19hbm9uX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdFx0Z290byBuZXh0O1xuIFx0XHR9XG4rXHRcdC8qIFNhbWUgcmVhc29uaW5nIGFzIGluIHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpLiAqL1xuK1x0XHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XG4gXHRcdGlmIChvcmRlciBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRnb3RvIGZhbGxiYWNrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MjMuMjE2OTkwMDE2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwMzc3Mzk5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBgbW0vbWVtb3J5LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiBJdCBsb29rcyBsaWtlIGl0J3MgaW50cm9kdWNpbmcgY2FsbHMgdG8gYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKTtgIHdpdGhpbiBhIGZldyBrZXkgbWVtb3J5IGFsbG9jYXRpb24gcGF0aHM6IHNwZWNpZmljYWxseSwgYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAsIGBkb19zd2FwX3BhZ2VgLCBhbmQgYGFsbG9jX2Fub25fZm9saW9gLiBcblxuVGhlc2UgZnVuY3Rpb25zIGFyZSBjcml0aWNhbCBhcmVhcyB0byB3YXRjaCBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBOb3csIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYCAqZG9lcyouIEknbGwgcmVhY2ggZm9yIGdyZXBwZXIgcmlnaHQgYXdheSwgbG9jYXRlIGl0cyBkZWZpbml0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbiwgYW5kIGRpc3NlY3QgaXRzIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgdGhlIGx5bmNocGluLCB0aGUgY3J1Y2lhbCBlbGVtZW50LiBLbm93aW5nICppdHMqIGJlaGF2aW9yIHdpbGwgdGVsbCBtZSB0aGUgYWN0dWFsIGVmZmVjdCBvZiB0aGlzIHBhdGNoLiBJcyB0aGlzIHJlbGF0ZWQgdG8gaGlnaC1vcmRlciBhbGxvY2F0aW9uIGZhaWx1cmVzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZT8gSXMgaXQgYWJvdXQgY2dyb3VwIGFjY291bnRpbmc/IFRoZSBhbnN3ZXIgbGllcyBpbiB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MjcuMjU0NzM0NzE0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA0NTY5NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTkxMT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05MTItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTEzOnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTE0LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEzNTQ9bWVtX2Nncm91cF9wcmludF9vb21fbWVtaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzU3LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEzNTg6c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzU5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6MjkuMDU5MzExNzk3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NzU1ODY2NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBjb2RlIGxvY2F0aW9ucywgcGhyYXNlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgd2VsbC12ZXJzZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cHM6XG5cbioqRGl2aW5nIERlZXAgaW50byBNZW1jb250cm9sJ3MgSGFuZGxpbmcgb2YgSGlnaCBNZW1vcnkgT3ZlcmZsb3dzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIHdpdGhpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmUgOTExLiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgcGVyaGFwcyBzb21lIGNydWNpYWwgbWFjcm9zIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLCBtYXliZSBldmVuIHRoZSBzcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgbWVtb3J5IGxpbWl0cyBvciB0aHJlc2hvbGRzLCBhcmUgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhlIGhpZ2ggbWVtb3J5IHdhdGVybWFyayBpcyBoYW5kbGVkIHRoZXJlLiBJJ20gZm9jdXNpbmcgb24gdGhhdCBzZWN0aW9uIG9mIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgZGVmaW5pdGlvbnMgb2YgYG1lbV9jZ3JvdXBgIHJlbGF0ZWQgdmFyaWFibGVzIGFuZCBkYXRhIHN0cnVjdHVyZXMuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGp1bXAgb3ZlciB0byBgbW0vbWVtY29udHJvbC5jYCBhbmQgemVybyBpbiBhcm91bmQgdGhlIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhlICpyZWFsKiBsb2dpYyBraWNrcyBpbi4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBzaXR1YXRpb24gd2hlcmUgYSBtZW1vcnkgY2dyb3VwIGhhcyBleGNlZWRlZCBpdHMgaGlnaCBtZW1vcnkgbGltaXQuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBpbiB0aGVzZSBzaXR1YXRpb25zLiBJcyBpdCBpbnZva2luZyBPT00ga2lsbGVyLCB0aHJvdHRsaW5nLCBtaWdyYXRpbmcgcGFnZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgY29tbWVudHMgc2hvdWxkIGJlIGhlbHBmdWwsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIGFuZCB0aGUgc3BlY2lmaWMgYWN0aW9ucyBpdCB0YWtlcyB0byBlbmZvcmNlIHRoZSBtZW1vcnkgbGltaXRzLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBoYXJkIGxpbWl0LCBhIHNvZnQgbGltaXQsIG9yIHNvbWV0aGluZyBtb3JlIG51YW5jZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBzeXN0ZW0gcmVhY3RzLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvciBhbmQgcmVjbGFpbSBsb2dpYy4gSXMgaXQgYXR0ZW1wdGluZyB0byByZWNsYWltIHBhZ2VzIHNwZWNpZmljYWxseSBmcm9tIHRoaXMgY2dyb3VwPyBEb2VzIGl0IHBvdGVudGlhbGx5IGNhdXNlIHRoZSBPT00ga2lsbGVyIHRvIHNlbGVjdCBhIHRhc2sgZnJvbSB0aGlzIGNncm91cD8gSXQncyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhlIHN5c3RlbSBkb2Vzbid0IGdyaW5kIHRvIGEgaGFsdCB3aGVuIG1lbW9yeSBpcyBjb25zdHJhaW5lZC4gVGhpcyBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBwdXp6bGUsIGFuZCBpdCdzIGVzc2VudGlhbCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBpdCBhbGwgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NTozMi43MzQ5MDEzM1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogOTA1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTA1OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcXG4gOTA2OlxcdFxcbiA5MDc6XFx0XFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcXG4gOTA4OlxcdFxcdHJldHVybiBSRUFEX09OQ0UobXotXFx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xcbiA5MDk6XFx0fVxcbiA5MTA6XFx0XFxuIDkxMTpcXHR2b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKTtcXG4gOTEyOlxcdFxcbiA5MTM6XFx0c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG4gOTE0OlxcdHtcXG4gOTE1OlxcdFxcdGlmICh1bmxpa2VseShjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2gpKVxcbiA5MTY6XFx0XFx0XFx0X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spO1xcbiA5MTc6XFx0fVxcbiA5MTg6XFx0XFxuIDkxOTpcXHR1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiA5MjA6XFx0XFxuIDkyMTpcXHR2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiA5MjI6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICpwKTtcXG4gOTIzOlxcdFxcbiA5MjQ6XFx0dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ1OjMyLjczNTAzNjA5WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTExMjAwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgb3Zlci1oaWdoIGNvbmRpdGlvbnMgd2l0aGluIG1lbW9yeSBjZ3JvdXBzLiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaGAuIEknbGwganVtcCBzdHJhaWdodCBpbnRvIGBtbS9tZW1jb250cm9sLmNgIGFuZCB6ZXJvIGluIG9uIHRoYXQgZnVuY3Rpb24uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGxvZ2ljIGZvciB0aHJvdHRsaW5nIG9yIHBvc3NpYmx5IE9PTSBraWxsaW5nIHByb2Nlc3NlcyBpbiB0aGF0IGNncm91cCBoZXJlLiBJIHdhbnQgdG8gc2VlIGlmIHRoZSByZWNlbnQgY2hhbmdlcyBJ4oCZdmUgYmVlbiByZWFkaW5nIGFib3V0IGhhdmUgYWx0ZXJlZCB0aGUgd2F5IHRoaXMgYmVoYXZlcywgb3IgaWYgdGhlcmUncyBhbnkgbm92ZWwgb3B0aW1pemF0aW9uLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBiYWxhbmNlcyBwcmV2ZW50aW5nIHJ1bmF3YXkgbWVtb3J5IGNvbnN1bXB0aW9uIHdpdGggYWxsb3dpbmcgZm9yIGxlZ2l0aW1hdGUgYnVyc3RzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIGNncm91cCBoaWVyYXJjaHkgYW5kIHJlY2xhaW0gbWVjaGFuaXNtcy4gSG9wZWZ1bGx5LCB0aGUgY29kZSBpcyB3ZWxsLWNvbW1lbnRlZDsgb3RoZXJ3aXNlLCBJ4oCZbSBtZW50YWxseSBwcmVwYXJpbmcgdG8gbmF2aWdhdGUgYSBmZXcgbGV2ZWxzIG9mIGZ1bmN0aW9uIGNhbGxzIHRvIHBpZWNlIHRoZSBmbG93IHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDA4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NTozNS4yMjYxNTg5ODRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDIxNDIwMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05MDI9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTkxMC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5MTE6dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTEyLVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI1MTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2hpZ2hfZGVsYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI1NTQtICovXFxubW0vbWVtY29udHJvbC5jOjI1NTU6dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG5tbS9tZW1jb250cm9sLmMtMjU1Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ1OjM2Ljk2ODMwNzAxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTM5MjcwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG1tL21lbWNvbnRyb2wuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBndXRzIG9mIGBtbS9tZW1jb250cm9sLmNgLiBTcGVjaWZpY2FsbHksIEknbSBob25pbmcgaW4gYXJvdW5kIGxpbmUgMjU1NS4gVGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgc29tZSBpbnRlcmVzdGluZyBiaXRzIHJlbGF0ZWQgdG8gbWVtb3J5IGNvbnRyb2wgYW5kIGFjY291bnRpbmcuIEknbSBleHBlY3RpbmcgdG8gZmluZCBjb3JlIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIHJlc291cmNlIG1hbmFnZW1lbnQsIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVjbGFpbWVkLCBvciBjaGFyZ2VkIHRvIHZhcmlvdXMgY29udHJvbCBncm91cHMuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGF0IGEgZGVlcCBsZXZlbC4gSeKAmW0gdGhpbmtpbmcgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGNvdWxkIGJlIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIHR1bmluZyBvciBwaW5wb2ludGluZyBib3R0bGVuZWNrcyBpbiBhIG1lbW9yeS1pbnRlbnNpdmUgd29ya2xvYWQuIEknbSBsb29raW5nIGZvciB0aGUgc3VidGxlIG51YW5jZXMgb2YgaG93IG1lbW9yeSBsaW1pdHMgYXJlIGVuZm9yY2VkLCBhbmQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggTlVNQSBhcmNoaXRlY3R1cmVzLCBvciBwZXJoYXBzIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgT09NIHNpdHVhdGlvbnMgdW5kZXIgbWVtb3J5IHByZXNzdXJlIGZyb20gY29udHJvbCBncm91cHMuIExldOKAmXMgc2VlIHdoYXQgZ2VtcyBsaW5lIDI1NTUgaXMgaG9sZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ1OjM4LjkyMjIzNjk2NloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjExODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1NTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1NTU6XFx0dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG4yNTU2OlxcdHtcXG4yNTU3OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGVuYWx0eV9qaWZmaWVzO1xcbjI1NTg6XFx0XFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XFxuMjU1OTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcXG4yNTYwOlxcdFxcdHVuc2lnbmVkIGludCBucl9wYWdlcyA9IGN1cnJlbnQtXFx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaDtcXG4yNTYxOlxcdFxcdGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG4yNTYyOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4yNTYzOlxcdFxcdGJvb2wgaW5fcmV0cnkgPSBmYWxzZTtcXG4yNTY0OlxcdFxcbjI1NjU6XFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG4yNTY2OlxcdFxcdGN1cnJlbnQtXFx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaCA9IDA7XFxuMjU2NzpcXHRcXG4yNTY4OlxcdHJldHJ5X3JlY2xhaW06XFxuMjU2OTpcXHRcXHQvKlxcbjI1NzA6XFx0XFx0ICogQmFpbCBpZiB0aGUgdGFzayBpcyBhbHJlYWR5IGV4aXRpbmcuIFVubGlrZSBtZW1vcnkubWF4LFxcbjI1NzE6XFx0XFx0ICogbWVtb3J5LmhpZ2ggZW5mb3JjZW1lbnQgaXNuJ3QgYXMgc3RyaWN0LCBhbmQgdGhlcmUgaXMgbm9cXG4yNTcyOlxcdFxcdCAqIE9PTSBraWxsZXIgaW52b2x2ZWQsIHdoaWNoIG1lYW5zIHRoZSBleGNlc3MgY291bGQgYWxyZWFkeVxcbjI1NzM6XFx0XFx0ICogYmUgbXVjaCBiaWdnZXIgKGFuZCBzdGlsbCBncm93aW5nKSB0aGFuIGl0IGNvdWxkIGZvclxcbjI1NzQ6XFx0XFx0ICogbWVtb3J5Lm1heDsgdGhlIGR5aW5nIHRhc2sgY291bGQgZ2V0IHN0dWNrIGluIGZydWl0bGVzc1xcbjI1NzU6XFx0XFx0ICogcmVjbGFpbSBmb3IgYSBsb25nIHRpbWUsIHdoaWNoIGlzbid0IGRlc2lyYWJsZS5cXG4yNTc2OlxcdFxcdCAqL1xcbjI1Nzc6XFx0XFx0aWYgKHRhc2tfaXNfZHlpbmcoKSlcXG4yNTc4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjI1Nzk6XFx0XFxuMjU4MDpcXHRcXHQvKlxcbjI1ODE6XFx0XFx0ICogVGhlIGFsbG9jYXRpbmcgdGFzayBzaG91bGQgcmVjbGFpbSBhdCBsZWFzdCB0aGUgYmF0Y2ggc2l6ZSwgYnV0IGZvclxcbjI1ODI6XFx0XFx0ICogc3Vic2VxdWVudCByZXRyaWVzIHdlIG9ubHkgd2FudCB0byBkbyB3aGF0J3MgbmVjZXNzYXJ5IHRvIHByZXZlbnQgb29tXFxuMjU4MzpcXHRcXHQgKiBvciBicmVhY2hpbmcgcmVzb3VyY2UgaXNvbGF0aW9uLlxcbjI1ODQ6XFx0XFx0ICpcXG4yNTg1OlxcdFxcdCAqIFRoaXMgaXMgZGlzdGluY3QgZnJvbSBtZW1vcnkubWF4IG9yIHBhZ2UgYWxsb2NhdG9yIGJlaGF2aW91ciBiZWNhdXNlXFxuMjU4NjpcXHRcXHQgKiBtZW1vcnkuaGlnaCBpcyBjdXJyZW50bHkgYmF0Y2hlZCwgd2hlcmVhcyBtZW1vcnkubWF4IGFuZCB0aGUgcGFnZVxcbjI1ODc6XFx0XFx0ICogYWxsb2NhdG9yIHJ1biBldmVyeSB0aW1lIGFuIGFsbG9jYXRpb24gaXMgbWFkZS5cXG4yNTg4OlxcdFxcdCAqL1xcbjI1ODk6XFx0XFx0bnJfcmVjbGFpbWVkID0gcmVjbGFpbV9oaWdoKG1lbWNnLFxcbjI1OTA6XFx0XFx0XFx0XFx0XFx0ICAgIGluX3JldHJ5ID8gU1dBUF9DTFVTVEVSX01BWCA6IG5yX3BhZ2VzLFxcbjI1OTE6XFx0XFx0XFx0XFx0XFx0ICAgIGdmcF9tYXNrKTtcXG4yNTkyOlxcdFxcbjI1OTM6XFx0XFx0LypcXG4yNTk0OlxcdFxcdCAqIG1lbW9yeS5oaWdoIGlzIGJyZWFjaGVkIGFuZCByZWNsYWltIGlzIHVuYWJsZSB0byBrZWVwIHVwLiBUaHJvdHRsZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NTozOC45MjI1NjQzNDZaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxOTYzMDQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBDb3JlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEJhc2VkIG9uIHRoZSB0YXNrIGF0IGhhbmQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtJ3MgaGFuZGxpbmcgbGFyZ2UgbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50LiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgY29yZSBzb3VyY2UgY29kZS4gSSdtIHRoaW5raW5nLCBsZXQncyBzdGFydCB3aXRoIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCdzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGludmVzdGlnYXRlIHRoZSBiZWhhdmlvciBvZiBodWdlIHBhZ2VzIGFuZCByZWxhdGVkIGFsbG9jYXRpb24gc3RyYXRlZ2llcy4gQWZ0ZXIgdGhhdCwgSSdsbCBuZWVkIHRvIGNoZWNrIGBtbS9tZW1vcnkuY2AgYXMgdGhpcyB3aWxsIHByb3ZpZGUgdGhlIGdlbmVyYWwgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrIGFuZCBjb21wbGVtZW50IHRoZSBzcGVjaWZpYyBodWdlIHBhZ2UgZGV0YWlscy4gQmV0d2VlbiB0aG9zZSB0d28sIEkgc2hvdWxkIGhhdmUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBiZWhhdmlvciBJJ20gYWZ0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ1OjQxLjI0MjE5NzQzOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTU3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzIwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzIwOlxcdFxcdH1cXG4xMzIxOlxcdFxcbjEzMjI6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSwgZm9saW8pO1xcbjEzMjM6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCB2bWEtXFx1MDAzZXZtX21tLCBnZnApKSB7XFxuMTMyNDpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjEzMjU6XFx0XFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLKTtcXG4xMzI2OlxcdFxcdFxcdGNvdW50X3ZtX2V2ZW50KFRIUF9GQVVMVF9GQUxMQkFDS19DSEFSR0UpO1xcbjEzMjc6XFx0XFx0XFx0Y291bnRfbXRocF9zdGF0KG9yZGVyLCBNVEhQX1NUQVRfQU5PTl9GQVVMVF9GQUxMQkFDSyk7XFxuMTMyODpcXHRcXHRcXHRjb3VudF9tdGhwX3N0YXQob3JkZXIsIE1USFBfU1RBVF9BTk9OX0ZBVUxUX0ZBTExCQUNLX0NIQVJHRSk7XFxuMTMyOTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzMwOlxcdFxcdH1cXG4xMzMxOlxcdFxcbjEzMzI6XFx0XFx0LypcXG4xMzMzOlxcdFxcdCAqIFRoZSBjaGFyZ2UgZ2ZwIGVuY29kZXMgVEhQIGFsbG9jYXRpb24gcG9saWN5IGFuZCBtYXkgbm90IGFsbG93XFxuMTMzNDpcXHRcXHQgKiBibG9ja2luZywgd2hpY2ggbWFrZXMgdHJ5X2NoYXJnZSBza2lwIGl0cyBzeW5jaHJvbm91cyBtZW1vcnkuaGlnaFxcbjEzMzU6XFx0XFx0ICogdGhyb3R0bGluZy4gRmF1bHQgY29udGV4dCBjYW4gc2xlZXAsIHNvIHNldHRsZSBhbnkgb3Zlci1oaWdoIGRlYnRcXG4xMzM2OlxcdFxcdCAqIGhlcmUgaW5zdGVhZCBvZiBsZXR0aW5nIHVzYWdlIGdyb3cgdW50aHJvdHRsZWQgdXAgdG8gbWVtb3J5Lm1heC5cXG4xMzM3OlxcdFxcdCAqL1xcbjEzMzg6XFx0XFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xcbjEzMzk6XFx0XFxuMTM0MDpcXHRcXHRpZiAoZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoZm9saW8pKSB7XFxuMTM0MTpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjEzNDI6XFx0XFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0ZBTExCQUNLKTtcXG4xMzQzOlxcdFxcdFxcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX0FOT05fRkFVTFRfRkFMTEJBQ0spO1xcbjEzNDQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTM0NTpcXHRcXHR9XFxuMTM0NjpcXHRcXG4xMzQ3OlxcdFxcdGZvbGlvX3Rocm90dGxlX3N3YXByYXRlKGZvbGlvLCBnZnApO1xcbjEzNDg6XFx0XFxuMTM0OTpcXHQgICAgICAgLypcXG4xMzUwOlxcdFxcdCogV2hlbiBhIGZvbGlvIGlzIG5vdCB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb24gKF9fR0ZQX1pFUk8gbm90IHVzZWQpXFxuMTM1MTpcXHRcXHQqIG9yIHVzZXIgZm9saW9zIHJlcXVpcmUgc3BlY2lhbCBoYW5kbGluZywgZm9saW9femVyb191c2VyKCkgaXMgdXNlZCB0b1xcbjEzNTI6XFx0XFx0KiBtYWtlIHN1cmUgdGhhdCB0aGUgcGFnZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmYXVsdGluZyBhZGRyZXNzIHdpbGwgYmVcXG4xMzUzOlxcdFxcdCogaG90IGluIHRoZSBjYWNoZSBhZnRlciB6ZXJvaW5nLlxcbjEzNTQ6XFx0XFx0Ki9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6NDEuMjQyNDk0ODk4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDMyNjcxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYG1tL21lbW9yeS5jYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBwb3RlbnRpYWwgZm9yIGlzc3VlcyBhcm91bmQgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMuIEknbSB0aGlua2luZyBzcGVjaWZpYyBhcmVhcyB3aXRoaW4gdGhhdCBmaWxlIGFyZSBsaWtlbHkgdG8gaG9sZCB0aGUgYW5zd2Vycy4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGUgc2VjdGlvbnMgYXJvdW5kIGxpbmVzIDUyNjAgYW5kIDUzNjAgbWlnaHQgYmUgZ29vZCBzdGFydGluZyBwb2ludHMuIFRoZXNlIGFyZSBsaWtlbHkgdG8gYmUgYXJvdW5kIHNvbWUgY3JpdGljYWwgYXNwZWN0cyBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHByb2Nlc3MsIG9yIHBlcmhhcHMgaGFuZGxpbmcgb2Ygc3BlY2lmaWMgbWVtb3J5IHJlZ2lvbnMuIEknbGwgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IGp1bXBzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI1MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTM6NDU6NDMuMTQ1NzY1OTE2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NjI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MjYwOlxcdFxcdH1cXG41MjYxOlxcdFxcbjUyNjI6XFx0XFx0LyogTm8gbmVlZCB0byBpbnZhbGlkYXRlIC0gaXQgd2FzIG5vbi1wcmVzZW50IGJlZm9yZSAqL1xcbjUyNjM6XFx0XFx0dXBkYXRlX21tdV9jYWNoZV9yYW5nZSh2bWYsIHZtYSwgYWRkcmVzcywgcHRlcCwgbnJfcGFnZXMpO1xcbjUyNjQ6XFx0dW5sb2NrOlxcbjUyNjU6XFx0XFx0aWYgKHZtZi1cXHUwMDNlcHRlKVxcbjUyNjY6XFx0XFx0XFx0cHRlX3VubWFwX3VubG9jayh2bWYtXFx1MDAzZXB0ZSwgdm1mLVxcdTAwM2VwdGwpO1xcbjUyNjc6XFx0b3V0OlxcbjUyNjg6XFx0XFx0aWYgKHNpKVxcbjUyNjk6XFx0XFx0XFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcXG41MjcwOlxcdFxcdC8qXFxuNTI3MTpcXHRcXHQgKiBMYXJnZSBmb2xpbyBzd2FwaW4gY2hhcmdlcyB3aXRoIHRoZSBUSFAgYWxsb2NhdGlvbiBnZnAsIHdoaWNoIG1heVxcbjUyNzI6XFx0XFx0ICogbm90IGFsbG93IGJsb2NraW5nLCBtYWtpbmcgdHJ5X2NoYXJnZSBza2lwIGl0cyBzeW5jaHJvbm91c1xcbjUyNzM6XFx0XFx0ICogbWVtb3J5LmhpZ2ggdGhyb3R0bGluZy4gU2V0dGxlIGFueSBvdmVyLWhpZ2ggZGVidCBoZXJlIGluc3RlYWQsXFxuNTI3NDpcXHRcXHQgKiB3aGVyZSBzbGVlcGluZyBpcyBzYWZlOiB0aGUgZm9saW8gbG9jaywgdGhlIHBhZ2UgdGFibGUgbG9jayBhbmRcXG41Mjc1OlxcdFxcdCAqIHRoZSBzd2FwIGRldmljZSByZWZlcmVuY2UgaGF2ZSBhbGwgYmVlbiBkcm9wcGVkLlxcbjUyNzY6XFx0XFx0ICovXFxuNTI3NzpcXHRcXHRtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goR0ZQX0tFUk5FTCk7XFxuNTI3ODpcXHRcXHRyZXR1cm4gcmV0O1xcbjUyNzk6XFx0b3V0X25vbWFwOlxcbjUyODA6XFx0XFx0aWYgKHZtZi1cXHUwMDNlcHRlKVxcbjUyODE6XFx0XFx0XFx0cHRlX3VubWFwX3VubG9jayh2bWYtXFx1MDAzZXB0ZSwgdm1mLVxcdTAwM2VwdGwpO1xcbjUyODI6XFx0b3V0X3BhZ2U6XFxuNTI4MzpcXHRcXHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKVxcbjUyODQ6XFx0XFx0XFx0Zm9saW9fZnJlZV9zd2FwKGZvbGlvKTtcXG41Mjg1OlxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuNTI4NjpcXHRvdXRfcmVsZWFzZTpcXG41Mjg3OlxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuNTI4ODpcXHRcXHRpZiAoZm9saW8gIT0gc3dhcGNhY2hlKSB7XFxuNTI4OTpcXHRcXHRcXHRmb2xpb191bmxvY2soc3dhcGNhY2hlKTtcXG41MjkwOlxcdFxcdFxcdGZvbGlvX3B1dChzd2FwY2FjaGUpO1xcbjUyOTE6XFx0XFx0fVxcbjUyOTI6XFx0XFx0aWYgKHNpKVxcbjUyOTM6XFx0XFx0XFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcXG41Mjk0OlxcdFxcdHJldHVybiByZXQ7XFxuNTI5NTpcXHR9XFxuNTI5NjpcXHRcXG41Mjk3OlxcdHN0YXRpYyBib29sIHB0ZV9yYW5nZV9ub25lKHB0ZV90ICpwdGUsIGludCBucl9wYWdlcylcXG41Mjk4OlxcdHtcXG41Mjk5OlxcdFxcdGludCBpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NTo0My4xNDYxNjM3ODZaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDA4MDAwOTk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIGBhbGxvY19hbm9uX2ZvbGlvYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGFub255bW91cyBmb2xpbyBhbGxvY2F0aW9uIHByb2Nlc3MuIE15IGZpcnN0IHN0b3AgaXMgZGVmaW5pdGVseSBgYWxsb2NfYW5vbl9mb2xpb2AsIHNvIEknbGwgYmUgaGVhZGluZyBzdHJhaWdodCB0byBgbW0vbWVtb3J5LmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBhbm9ueW1vdXMgcGFnZS9mb2xpbyBhbGxvY2F0aW9ucy4gSSBrbm93IHRoZSBiYXNpY3MsIG9mIGNvdXJzZSwgYnV0IHRoZSBkZXZpbCBpcyBhbHdheXMgaW4gdGhlIGRldGFpbHMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGl0J3MgZGVhbGluZyB3aXRoIHRoZSBhbGxvY2F0aW9uIGl0c2VsZiwgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcGFnZSBjYWNoZSAoaWYgYXQgYWxsLCBmb3IgdGhpcyBhbm9ueW1vdXMgY2FzZSksIGFuZCB0aGUgdmFyaW91cyBjb25zaWRlcmF0aW9ucyBpdCB0YWtlcyBpbnRvIGFjY291bnQsIGxpa2UgTlVNQSwgem9uZXMsIGFuZCBwb3RlbnRpYWwgbWVtb3J5IHByZXNzdXJlLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IG9wdGltaXphdGlvbnMgb3IgbG9jayBjb250ZW50aW9uIHBvaW50cyBJIG1pZ2h0IGhhdmUgbWlzc2VkIGluIHByZXZpb3VzIHJldmlld3MuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byBzYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEzOjQ1OjQ3LjIyNjE3Njg3MloiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDI3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTM1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTM1MDpcXHRcXHRcXHRhZGRyID0gQUxJR05fRE9XTih2bWYtXFx1MDAzZWFkZHJlc3MsIFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7XFxuNTM1MTpcXHRcXHRcXHRpZiAocHRlX3JhbmdlX25vbmUocHRlICsgcHRlX2luZGV4KGFkZHIpLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSlcXG41MzUyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjUzNTM6XFx0XFx0XFx0b3JkZXIgPSBuZXh0X29yZGVyKFxcdTAwMjZvcmRlcnMsIG9yZGVyKTtcXG41MzU0OlxcdFxcdH1cXG41MzU1OlxcdFxcbjUzNTY6XFx0XFx0cHRlX3VubWFwKHB0ZSk7XFxuNTM1NzpcXHRcXG41MzU4OlxcdFxcdGlmICghb3JkZXJzKVxcbjUzNTk6XFx0XFx0XFx0Z290byBmYWxsYmFjaztcXG41MzYwOlxcdFxcbjUzNjE6XFx0XFx0LyogVHJ5IGFsbG9jYXRpbmcgdGhlIGhpZ2hlc3Qgb2YgdGhlIHJlbWFpbmluZyBvcmRlcnMuICovXFxuNTM2MjpcXHRcXHRnZnAgPSB2bWFfdGhwX2dmcF9tYXNrKHZtYSk7XFxuNTM2MzpcXHRcXHR3aGlsZSAob3JkZXJzKSB7XFxuNTM2NDpcXHRcXHRcXHRhZGRyID0gQUxJR05fRE9XTih2bWYtXFx1MDAzZWFkZHJlc3MsIFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7XFxuNTM2NTpcXHRcXHRcXHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2bWEsIGFkZHIpO1xcbjUzNjY6XFx0XFx0XFx0aWYgKCFmb2xpbylcXG41MzY3OlxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG41MzY4OlxcdFxcdFxcdGlmIChtZW1fY2dyb3VwX2NoYXJnZShmb2xpbywgdm1hLVxcdTAwM2V2bV9tbSwgZ2ZwKSkge1xcbjUzNjk6XFx0XFx0XFx0XFx0Y291bnRfbXRocF9zdGF0KG9yZGVyLCBNVEhQX1NUQVRfQU5PTl9GQVVMVF9GQUxMQkFDS19DSEFSR0UpO1xcbjUzNzA6XFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG41MzcxOlxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG41MzcyOlxcdFxcdFxcdH1cXG41MzczOlxcdFxcdFxcdC8qIFNhbWUgcmVhc29uaW5nIGFzIGluIHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpLiAqL1xcbjUzNzQ6XFx0XFx0XFx0bWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpO1xcbjUzNzU6XFx0XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMSBcXHUwMDI2XFx1MDAyNiBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChmb2xpbykpIHtcXG41Mzc2OlxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuNTM3NzpcXHRcXHRcXHRcXHRnb3RvIGZhbGxiYWNrO1xcbjUzNzg6XFx0XFx0XFx0fVxcbjUzNzk6XFx0XFx0XFx0Zm9saW9fdGhyb3R0bGVfc3dhcHJhdGUoZm9saW8sIGdmcCk7XFxuNTM4MDpcXHRcXHRcXHQvKlxcbjUzODE6XFx0XFx0XFx0ICogV2hlbiBhIGZvbGlvIGlzIG5vdCB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb25cXG41MzgyOlxcdFxcdFxcdCAqIChfX0dGUF9aRVJPIG5vdCB1c2VkKSBvciB1c2VyIGZvbGlvcyByZXF1aXJlIHNwZWNpYWxcXG41MzgzOlxcdFxcdFxcdCAqIGhhbmRsaW5nLCBmb2xpb196ZXJvX3VzZXIoKSBpcyB1c2VkIHRvIG1ha2Ugc3VyZVxcbjUzODQ6XFx0XFx0XFx0ICogdGhhdCB0aGUgcGFnZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmYXVsdGluZyBhZGRyZXNzXFxuNTM4NTpcXHRcXHRcXHQgKiB3aWxsIGJlIGhvdCBpbiB0aGUgY2FjaGUgYWZ0ZXIgemVyb2luZy5cXG41Mzg2OlxcdFxcdFxcdCAqL1xcbjUzODc6XFx0XFx0XFx0aWYgKHVzZXJfYWxsb2NfbmVlZHNfemVyb2luZygpKVxcbjUzODg6XFx0XFx0XFx0XFx0Zm9saW9femVyb191c2VyKGZvbGlvLCB2bWYtXFx1MDAzZWFkZHJlc3MpO1xcbjUzODk6XFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NTo0Ny4yMjY1ODE1MjJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUwMjcyOTgzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGluc2VydGluZyBjYWxscyB0byBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKEdGUF9LRVJORUwpYCBpbnRvIGEgZmV3IGtleSBhcmVhczogYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZGAsIGBkb19zd2FwX3BhZ2VgLCBhbmQgYGFsbG9jX2Fub25fZm9saW9gLiBUaGUgcmF0aW9uYWxlIGlzIHRoYXQgVEhQIGFsbG9jYXRpb25zLCBpZiB1c2luZyBub24tYmxvY2tpbmcgR0ZQIGZsYWdzLCBtaWdodCBieXBhc3MgdGhlIHN5bmNocm9ub3VzIGBtZW1vcnkuaGlnaGAgdGhyb3R0bGluZyB0aGF0IG5vcm1hbGx5IGhhcHBlbnMgaW4gYHRyeV9jaGFyZ2VgLiBUaGUgcGF0Y2gncyBnb2FsIGlzIHRvIGZvcmNlIHN5bmNocm9ub3VzIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgIGNhbGxzIGluIHRoZXNlIGZhdWx0IGNvbnRleHRzLCBidXQgb25seSB3aGVuIHNsZWVwaW5nIGlzIHBlcm1pdHRlZC5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeS4gRG9lcyB0aGlzIGNoYW5nZSBleHBvc2UgYW55IG5ldyByaXNrcyB0aGVyZT8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OlxuXG4qICAgKipVbmluaXRpYWxpemVkIG1lbW9yeSBjb3BpZWQgdG8gdXNlcnNwYWNlPyoqIE5vLCBpdCBkb2Vzbid0IGxvb2sgbGlrZSBhbnkgdW5pbml0aWFsaXplZCBkYXRhIGlzIGJlaW5nIGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlLlxuKiAgICoqVW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIHJlYWQ/KiogTm8sIGBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2hgIGp1c3QgY2hlY2tzIGEgY291bnRlciAoYGN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoYCkgYW5kIGNhbGxzIGByZWNsYWltX2hpZ2hgIGlmIHRoZSBjb3VudGVyIGlzbid0IHplcm8uIFRoYXQgY291bnRlcidzIHZhbHVlIGlzIGNlcnRhaW5seSBpbml0aWFsaXplZCBlYXJsaWVyLCBzbyByZWFkaW5nIGl0IGlzIHNhZmUuXG4qICAgKipCdWZmZXIgYm91bmRzIGFsdGVyZWQsIGFsbG93aW5nIGZvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzPyoqIE5vLCBub3RoaW5nIGxpa2UgdGhhdCBpcyBoYXBwZW5pbmcgaGVyZS5cbiogICAqKkZvbGlvIHplcm9pbmcvaW5pdGlhbGl6YXRpb24gY2hhbmdlZD8qKiBOb3BlLCB0aG9zZSBvcGVyYXRpb25zIChgZm9saW9femVyb191c2VyYCBldGMuKSBhcmUgY29tcGxldGVseSB1bnRvdWNoZWQuXG5cbkJhc2VkIG9uIHRoaXMsIGl0IHNlZW1zIHRoaXMgaXMgKipub3QqKiBnb2luZyB0byBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd291bGQgYmUgcmVsYXRlZCB0byBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dHMgKHRob3VnaCB0aGUgY29tbWVudHMgc3VnZ2VzdCB0aGlzIGlzIG5vdyBzYWZlKSBvciwgbW9yZSBsaWtlbHksIGlzc3VlcyBhcm91bmQgbWVtb3J5IHRocm90dGxpbmcvcmVjbGFpbSBiZWhhdmlvci4gVGhlc2UgYXJlIGZpcm1seSBpbiB0aGUgZG9tYWluIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSwgYW5kIGxvY2tpbmcgc2VtYW50aWNzIOKAkyB0aGluZ3MgdGhhdCBLQVNBTiwgTE9DS0RFUCwgV0FSTiwgYW5kIG90aGVyIHN0YW5kYXJkIHRvb2xzIGFyZSBkZXNpZ25lZCB0byBjYXRjaC4gVGhpcyBpcyBub3QgYSBLTVNBTiBjb25jZXJuLlxuXG5TbywgSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgYE5lZWRzS01TQU4gPSBmYWxzZWAuXG5cbk5vdywgbGV0J3Mgc29saWRpZnkgdGhlIEtNU0FOIHJlYXNvbmluZzogVGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhlIHRocm90dGxpbmcgb2YgbWVtb3J5IGNncm91cCB1c2FnZSB3aGVuIG92ZXIgdGhlIGhpZ2ggbGltaXQgaW4gVEhQIGFuZCBzd2FwIGZhdWx0IHBhdGhzIGJ5IGFkZGluZyBjYWxscyB0byBgbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoYC4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgYmVjYXVzZSBpdCBkb2VzIG5vdCByZXN1bHQgaW4gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgaGFuZGxpbmcsIGRhdGEgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbi4gVGhlIGNoYW5nZXMgYXJlIHN0YW5kYXJkIG1lbW9yeSBtYW5hZ2VtZW50LXJlbGF0ZWQgbW9kaWZpY2F0aW9ucywgYW5kIGFueSBwb3RlbnRpYWwgc2xlZXAvbG9ja2luZyBpc3N1ZXMsIGFyZSBwcm9wZXJseSBhZGRyZXNzZWQgYnkgS0FTQU4vTE9DS0RFUCBldGMuXG5cbkFscmlnaHQsIHRoYXQgY292ZXJzIGl0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk3MCwiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMzo0NTo1Mi43MjkzMTQ1MjhaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKWAgaW4gYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpYCwgYGRvX3N3YXBfcGFnZSgpYCwgYW5kIGBhbGxvY19hbm9uX2ZvbGlvKClgIHRvIGVuZm9yY2Ugc3luY2hyb25vdXMgYG1lbW9yeS5oaWdoYCBjZ3JvdXAgdGhyb3R0bGluZyBkdXJpbmcgcGFnZSBmYXVsdCBoYW5kbGluZyB3aGVuIGNoYXJnaW5nIGZvbGlvcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IHBlcnRhaW4gdG8gbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLCByZWNsYW1hdGlvbiwgYW5kIHRocm90dGxpbmcgY29udHJvbCBmbG93LiBUaGV5IGRvIG5vdCBhbGxvY2F0ZSwgbW9kaWZ5LCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHN0cnVjdHVyZXMsIG5vciBkbyB0aGV5IGludHJvZHVjZSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBzbGVlcGluZy1pbi1hdG9taWMsIG9yIGxpZmV0aW1lIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChLQVNBTiwgTE9DS0RFUCwgREVCVUdfQVRPTUlDX1NMRUVQKSwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2FsbHMgdG8gYG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChHRlBfS0VSTkVMKWAgaW4gYHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCgpYCwgYGRvX3N3YXBfcGFnZSgpYCwgYW5kIGBhbGxvY19hbm9uX2ZvbGlvKClgIHRvIGVuZm9yY2Ugc3luY2hyb25vdXMgYG1lbW9yeS5oaWdoYCBjZ3JvdXAgdGhyb3R0bGluZyBkdXJpbmcgcGFnZSBmYXVsdCBoYW5kbGluZyB3aGVuIGNoYXJnaW5nIGZvbGlvcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IHBlcnRhaW4gdG8gbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLCByZWNsYW1hdGlvbiwgYW5kIHRocm90dGxpbmcgY29udHJvbCBmbG93LiBUaGV5IGRvIG5vdCBhbGxvY2F0ZSwgbW9kaWZ5LCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHN0cnVjdHVyZXMsIG5vciBkbyB0aGV5IGludHJvZHVjZSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBzbGVlcGluZy1pbi1hdG9taWMsIG9yIGxpZmV0aW1lIGlzc3VlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChLQVNBTiwgTE9DS0RFUCwgREVCVUdfQVRPTUlDX1NMRUVQKSwgbWFraW5nIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow8smf8[1] Phase: Succeeded StartedAt: 2026-09-05 13:46:04 +0000 UTC FinishedAt: 2026-09-05 13:46:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 13:46:04 +0000 UTC FinishedAt: 2026-09-05 13:46:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2] Phase: Succeeded StartedAt: 2026-09-05 13:46:04 +0000 UTC FinishedAt: 2026-09-05 17:25:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 13:46:04 +0000 UTC FinishedAt: 2026-09-05 17:25:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 13:46:04 +0000 UTC FinishedAt: 2026-09-05 13:46:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 13:46:04 +0000 UTC FinishedAt: 2026-09-05 13:46:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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-workflow8smf8/series-workflow8smf8-convert-artifact-3058116427/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 13:46:14 +0000 UTC FinishedAt: 2026-09-05 14:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 13:46:14 +0000 UTC FinishedAt: 2026-09-05 14:02:51 +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:*6a4c86ff-be53-4f25-80a1-7c7231c11e5f,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-workflow8smf8/series-workflow8smf8-convert-artifact-3058116427/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": "e7956f89-9cc6-4e11-8588-2bb20c28fde3", "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-workflow8smf8/series-workflow8smf8-build-action-2534055497/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 13:46:14 +0000 UTC FinishedAt: 2026-09-05 14:02:41 +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:*6a4c86ff-be53-4f25-80a1-7c7231c11e5f,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-workflow8smf8/series-workflow8smf8-convert-artifact-3058116427/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": "e7956f89-9cc6-4e11-8588-2bb20c28fde3", "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-workflow8smf8/series-workflow8smf8-build-action-2534055497/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:02:51 +0000 UTC FinishedAt: 2026-09-05 14:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:02:51 +0000 UTC FinishedAt: 2026-09-05 14:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:02:51 +0000 UTC FinishedAt: 2026-09-05 14:03:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:02:51 +0000 UTC FinishedAt: 2026-09-05 14:02:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-workflow8smf8/series-workflow8smf8-convert-artifact-712391330/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:03:01 +0000 UTC FinishedAt: 2026-09-05 14:04:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:03:01 +0000 UTC FinishedAt: 2026-09-05 14:04:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e7956f89-9cc6-4e11-8588-2bb20c28fde3,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-workflow8smf8/series-workflow8smf8-build-action-2534055497/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-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:04:53 +0000 UTC FinishedAt: 2026-09-05 14:04:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:04:53 +0000 UTC FinishedAt: 2026-09-05 14:04:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:04:53 +0000 UTC FinishedAt: 2026-09-05 14:21:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:04:53 +0000 UTC FinishedAt: 2026-09-05 14:21:48 +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:*6a4c86ff-be53-4f25-80a1-7c7231c11e5f,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-workflow8smf8/series-workflow8smf8-convert-artifact-712391330/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": "4291b437-6c80-438a-b4df-769a744164aa", "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-workflow8smf8/series-workflow8smf8-build-action-3092216566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:04:53 +0000 UTC FinishedAt: 2026-09-05 14:21:38 +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:*6a4c86ff-be53-4f25-80a1-7c7231c11e5f,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-workflow8smf8/series-workflow8smf8-convert-artifact-712391330/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": "4291b437-6c80-438a-b4df-769a744164aa", "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-workflow8smf8/series-workflow8smf8-build-action-3092216566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:21:48 +0000 UTC FinishedAt: 2026-09-05 14:21:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:21:48 +0000 UTC FinishedAt: 2026-09-05 14:21:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:21:48 +0000 UTC FinishedAt: 2026-09-05 14:24:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:21:48 +0000 UTC FinishedAt: 2026-09-05 14:23:50 +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:*4291b437-6c80-438a-b4df-769a744164aa,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-workflow8smf8/series-workflow8smf8-build-action-3092216566/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-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:24:00 +0000 UTC FinishedAt: 2026-09-05 17:25:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:24:00 +0000 UTC FinishedAt: 2026-09-05 17:25:39 +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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"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:*e7956f89-9cc6-4e11-8588-2bb20c28fde3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4291b437-6c80-438a-b4df-769a744164aa,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-workflow8smf8/series-workflow8smf8-build-action-2534055497/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-workflow8smf8/series-workflow8smf8-build-action-3092216566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:24:00 +0000 UTC FinishedAt: 2026-09-05 14:24:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:24:00 +0000 UTC FinishedAt: 2026-09-05 14:24:04 +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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"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-workflow8smf8/series-workflow8smf8-convert-artifact-802061271/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:24:00 +0000 UTC FinishedAt: 2026-09-05 14:24:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:24:00 +0000 UTC FinishedAt: 2026-09-05 14:24:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:24:00 +0000 UTC FinishedAt: 2026-09-05 14:24:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:24:10 +0000 UTC FinishedAt: 2026-09-05 17:25:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8smf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","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":["__mem_cgroup_handle_over_high","do_swap_page","do_huge_pmd_anonymous_page","do_huge_pmd_wp_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6e0803a170552a6ab48538721df6467582fc940c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","TRANSPARENT_HUGEPAGE","SWAP"],"series_id":"edea1aeb-8507-496f-8a92-3e2256c261c7","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-09-05 14:24:10 +0000 UTC FinishedAt: 2026-09-05 17:25:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e7956f89-9cc6-4e11-8588-2bb20c28fde3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4291b437-6c80-438a-b4df-769a744164aa,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-workflow8smf8/series-workflow8smf8-build-action-2534055497/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-workflow8smf8/series-workflow8smf8-build-action-3092216566/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-workflow8smf8/series-workflow8smf8-convert-artifact-802061271/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,}