Name: series-workflow9d4p2 Phase: Succeeded StartedAt: 2026-07-07 01:32:16 +0000 UTC FinishedAt: 2026-07-07 06:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[0] Phase: Succeeded StartedAt: 2026-07-07 01:32:16 +0000 UTC FinishedAt: 2026-07-07 02:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 01:32:16 +0000 UTC FinishedAt: 2026-07-07 02:05:49 +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": "820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "MSHV_ROOT" ], "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": "820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "MSHV_ROOT" ], "series_id": "163771b5-7490-4eb7-97c9-b3d52da5a177" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hmm_range_fault_unlocked", "hmm_range_fault", "hmm_do_fault", "hmm_record_fault", "hmm_range_fault_locked", "dmirror_read_unlocked", "dmirror_range_fault_unlocked", "dmirror_fault_unlocked", "mshv_region_hmm_fault_and_lock" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O01TSFZfUk9PVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2htbV9yYW5nZV9mYXVsdF91bmxvY2tlZCYjMzQ7LAogICAgJiMzNDtobW1fcmFuZ2VfZmF1bHQmIzM0OywKICAgICYjMzQ7aG1tX2RvX2ZhdWx0JiMzNDssCiAgICAmIzM0O2htbV9yZWNvcmRfZmF1bHQmIzM0OywKICAgICYjMzQ7aG1tX3JhbmdlX2ZhdWx0X2xvY2tlZCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX3JlYWRfdW5sb2NrZWQmIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX2ZhdWx0X3VubG9ja2VkJiMzNDssCiAgICAmIzM0O21zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKClgIGluIHRoZSBITU0gc3Vic3lzdGVtIHRvIGFsbG93IGRyb3BwaW5nIHRoZSBtbWFwIGxvY2sgZHVyaW5nIHBhZ2UgZmF1bHRzLCB3aGljaCBpcyB1c2VmdWwgZm9yIHJlZ2lvbnMgbWFuYWdlZCBieSB1c2VyZmF1bHRmZC4gSXQgcmVmYWN0b3JzIHRoZSBjb3JlIGBobW1fcmFuZ2VfZmF1bHQoKWAgbG9naWMgdG8gc3VwcG9ydCB0aGlzIGFuZCB1cGRhdGVzIHRoZSBgdGVzdF9obW1gIG1vZHVsZSBhbmQgYG1zaHZfcmVnaW9uc2AgZHJpdmVyIHRvIHV0aWxpemUgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRyaXZlciBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY0Yjc1OTNmNmZlODZjYjZjNTQwZTY0NGE5YjFkMWRjZGY4ODBlNzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDAyOjAzOjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdFxuaW5kZXggN2Q2MWI3YThiNjViNzkuLjg0NDM0MzcxMmFiZGRhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcbkBAIC0yMDgsNiAmIzQzOzIwOCw2NSBAQCBpbnZhbGlkYXRlKCkgY2FsbGJhY2suIFRoYXQgbG9jayBtdXN0IGJlIGhlbGQgYmVmb3JlIGNhbGxpbmdcbiBtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeSgpIHRvIGF2b2lkIGFueSByYWNlIHdpdGggYSBjb25jdXJyZW50IENQVSBwYWdlIHRhYmxlXG4gdXBkYXRlLlxuIFxuJiM0MztEcm9wcGluZyB0aGUgbW1hcCBsb2NrIGR1cmluZyBwYWdlIGZhdWx0c1xuJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7U29tZSBWTUFzIGhhdmUgZmF1bHQgaGFuZGxlcnMgdGhhdCBuZWVkIHRvIHJlbGVhc2UgdGhlIG1tYXAgbG9jayB3aGlsZVxuJiM0MztzZXJ2aWNpbmcgYSBmYXVsdCAoZm9yIGV4YW1wbGUsIHJlZ2lvbnMgbWFuYWdlZCBieSBgYHVzZXJmYXVsdGZkYGApLlxuJiM0MztgYGhtbV9yYW5nZV9mYXVsdCgpYGAgY2Fubm90IGJlIHVzZWQgb24gc3VjaCBtYXBwaW5ncyBiZWNhdXNlIGl0IG11c3QgaG9sZCB0aGVcbiYjNDM7bW1hcCBsb2NrIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNhbGwuIERyaXZlcnMgdGhhdCBuZWVkIHRvIHN1cHBvcnQgdGhlbVxuJiM0MztzaG91bGQgY2FsbDo6XG4mIzQzO1xuJiM0MzsgIGludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xuJiM0MztcbiYjNDM7VGhlIGNhbGxlciBtdXN0IG5vdCBob2xkIGBgbW1hcF9yZWFkX2xvY2tgYCBiZWZvcmUgdGhlIGNhbGwuXG4mIzQzO2BgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKClgYCB0YWtlcyB0aGUgbW1hcCByZWFkIGxvY2sgaW50ZXJuYWxseSBhbmQgYWxsb3dzXG4mIzQzO2BgaGFuZGxlX21tX2ZhdWx0KClgYCB0byBkcm9wIGl0IGR1cmluZyBmYXVsdCBoYW5kbGluZy4gSWYgdGhlIG1tYXAgbG9jayBpc1xuJiM0Mztkcm9wcGVkLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgYC1FQlVTWWBgLiBUaGUgY2FsbGVyIG11c3QgdGhlbiByZXN0YXJ0IHRoZVxuJiM0Mzt3YWxrIGZyb20gYGByYW5nZS1cdTAwM2VzdGFydGBgIHdpdGggYSBmcmVzaCBub3RpZmllciBzZXF1ZW5jZS4gYGAtRUlOVFJgYCBpc1xuJiM0MztyZXR1cm5lZCBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nIGR1cmluZyByZXRyeSBoYW5kbGluZy5cbiYjNDM7XG4mIzQzO0EgdHlwaWNhbCBjYWxsZXIgbG9va3MgbGlrZSB0aGlzOjpcbiYjNDM7XG4mIzQzOyBpbnQgZHJpdmVyX3BvcHVsYXRlX3JhbmdlX3VubG9ja2VkKC4uLilcbiYjNDM7IHtcbiYjNDM7ICAgICAgc3RydWN0IGhtbV9yYW5nZSByYW5nZTtcbiYjNDM7ICAgICAgLi4uXG4mIzQzO1xuJiM0MzsgICAgICByYW5nZS5ub3RpZmllciA9IFx1MDAyNmludGVydmFsX3N1YjtcbiYjNDM7ICAgICAgcmFuZ2Uuc3RhcnQgPSAuLi47XG4mIzQzOyAgICAgIHJhbmdlLmVuZCA9IC4uLjtcbiYjNDM7ICAgICAgcmFuZ2UuaG1tX3BmbnMgPSAuLi47XG4mIzQzO1xuJiM0MzsgICAgICBpZiAoIW1tZ2V0X25vdF96ZXJvKGludGVydmFsX3N1Yi5tbSkpXG4mIzQzOyAgICAgICAgICByZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzOyBhZ2FpbjpcbiYjNDM7ICAgICAgcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4oXHUwMDI2aW50ZXJ2YWxfc3ViKTtcbiYjNDM7ICAgICAgcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKFx1MDAyNnJhbmdlKTtcbiYjNDM7ICAgICAgaWYgKHJldCkge1xuJiM0MzsgICAgICAgICAgaWYgKHJldCA9PSAtRUJVU1kpXG4mIzQzOyAgICAgICAgICAgICAgZ290byBhZ2FpbjtcbiYjNDM7ICAgICAgICAgIGdvdG8gb3V0X3B1dDtcbiYjNDM7ICAgICAgfVxuJiM0MztcbiYjNDM7ICAgICAgdGFrZV9sb2NrKGRyaXZlci1cdTAwM2V1cGRhdGUpO1xuJiM0MzsgICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoXHUwMDI2aW50ZXJ2YWxfc3ViLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XG4mIzQzOyAgICAgICAgICByZWxlYXNlX2xvY2soZHJpdmVyLVx1MDAzZXVwZGF0ZSk7XG4mIzQzOyAgICAgICAgICBnb3RvIGFnYWluO1xuJiM0MzsgICAgICB9XG4mIzQzO1xuJiM0MzsgICAgICAvKiBVc2UgcGZucyBhcnJheSBjb250ZW50IHRvIHVwZGF0ZSBkZXZpY2UgcGFnZSB0YWJsZSxcbiYjNDM7ICAgICAgICogdW5kZXIgdGhlIHVwZGF0ZSBsb2NrICovXG4mIzQzO1xuJiM0MzsgICAgICByZWxlYXNlX2xvY2soZHJpdmVyLVx1MDAzZXVwZGF0ZSk7XG4mIzQzOyAgICAgIHJldCA9IDA7XG4mIzQzO1xuJiM0Mzsgb3V0X3B1dDpcbiYjNDM7ICAgICAgbW1wdXQoaW50ZXJ2YWxfc3ViLm1tKTtcbiYjNDM7ICAgICAgcmV0dXJuIHJldDtcbiYjNDM7IH1cbiYjNDM7XG4gTGV2ZXJhZ2UgZGVmYXVsdF9mbGFncyBhbmQgcGZuX2ZsYWdzX21hc2tcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMgYi9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jXG5pbmRleCA2ZDY1ZTViNDIxNTI5NS4uMDQ2NzZmMDZjNWM3NDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jXG5AQCAtMzg4LDEzICYjNDM7Mzg4LDExIEBAIGludCBtc2h2X3JlZ2lvbl9nZXQoc3RydWN0IG1zaHZfbWVtX3JlZ2lvbiAqcmVnaW9uKVxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICAqIDEuIFJlYWRzIHRoZSBub3RpZmllciBzZXF1ZW5jZSBmb3IgdGhlIEhNTSByYW5nZS5cbi0gKiAyLiBBY3F1aXJlcyBhIHJlYWQgbG9jayBvbiB0aGUgbWVtb3J5IG1hcC5cbi0gKiAzLiBIYW5kbGVzIEhNTSBmYXVsdHMgZm9yIHRoZSBzcGVjaWZpZWQgcmFuZ2UuXG4tICogNC4gUmVsZWFzZXMgdGhlIHJlYWQgbG9jayBvbiB0aGUgbWVtb3J5IG1hcC5cbi0gKiA1LiBJZiBzdWNjZXNzZnVsLCBsb2NrcyB0aGUgbWVtb3J5IHJlZ2lvbiBtdXRleC5cbi0gKiA2LiBWZXJpZmllcyBpZiB0aGUgbm90aWZpZXIgc2VxdWVuY2UgaGFzIGNoYW5nZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24uXG4mIzQzOyAqIDIuIEhhbmRsZXMgSE1NIGZhdWx0cyBmb3IgdGhlIHNwZWNpZmllZCByYW5nZS5cbiYjNDM7ICogMy4gSWYgc3VjY2Vzc2Z1bCwgbG9ja3MgdGhlIG1lbW9yeSByZWdpb24gbXV0ZXguXG4mIzQzOyAqIDQuIFZlcmlmaWVzIGlmIHRoZSBub3RpZmllciBzZXF1ZW5jZSBoYXMgY2hhbmdlZCBkdXJpbmcgdGhlIG9wZXJhdGlvbi5cbiAgKiAgICBJZiBpdCBoYXMsIHJlbGVhc2VzIHRoZSBtdXRleCBhbmQgcmV0dXJucyAtRUJVU1kgdG8gbWF0Y2ggd2l0aFxuLSAqICAgIGhtbV9yYW5nZV9mYXVsdCgpIHJldHVybiBjb2RlIGZvciByZXBlYXRpbmcuXG4mIzQzOyAqICAgIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpIHNvIHRoZSBjYWxsZXIgcmV0cmllcyB0aGUgcmFuZ2UgZmF1bHQuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiAgKi9cbkBAIC00MDQsOSAmIzQzOzQwMiw3IEBAIHN0YXRpYyBpbnQgbXNodl9yZWdpb25faG1tX2ZhdWx0X2FuZF9sb2NrKHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbixcbiBcdGludCByZXQ7XG4gXG4gXHRyYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS1cdTAwM2Vub3RpZmllcik7XG4tXHRtbWFwX3JlYWRfbG9jayhyZWdpb24tXHUwMDNlbXJlZ19tbmkubW0pO1xuLVx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0KHJhbmdlKTtcbi1cdG1tYXBfcmVhZF91bmxvY2socmVnaW9uLVx1MDAzZW1yZWdfbW5pLm1tKTtcbiYjNDM7XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQocmFuZ2UpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2htbS5oIGIvaW5jbHVkZS9saW51eC9obW0uaFxuaW5kZXggZGI3NWZmYzk0OWE3YWMuLjFiNTg0ZTVhMjkwMDFlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9obW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9obW0uaFxuQEAgLTEyMyw2ICYjNDM7MTIzLDcgQEAgc3RydWN0IGhtbV9yYW5nZSB7XG4gICogUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL21tL2htbS5yc3QgZm9yIGhvdyB0byB1c2UgdGhlIHJhbmdlIEFQSS5cbiAgKi9cbiBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTtcbiYjNDM7aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XG4gXG4gLypcbiAgKiBITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUIC0gZGVmYXVsdCB0aW1lb3V0IChtcykgd2hlbiB3YWl0aW5nIGZvciBhIHJhbmdlXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfaG1tLmMgYi9saWIvdGVzdF9obW0uY1xuaW5kZXggNDVjMGNiOTkyMjE4NGEuLmRjYzNhMjNiYjk4M2RjIDEwMDY0NFxuLS0tIGEvbGliL3Rlc3RfaG1tLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0X2htbS5jXG5AQCAtMzg5LDYgJiM0MzszODksNzYgQEAgc3RhdGljIGludCBkbWlycm9yX3JhbmdlX2ZhdWx0KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cbiYjNDM7XHRcdGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHR3aGlsZSAodHJ1ZSkge1xuJiM0MztcdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVCVVNZO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS1cdTAwM2Vub3RpZmllcik7XG4mIzQzO1x0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQocmFuZ2UpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRpZiAocmV0ID09IC1FQlVTWSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZkbWlycm9yLVx1MDAzZW11dGV4KTtcbiYjNDM7XHRcdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS1cdTAwM2Vub3RpZmllcixcbiYjNDM7XHRcdFx0XHRcdCAgICByYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEpKSB7XG4mIzQzO1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZkbWlycm9yLVx1MDAzZW11dGV4KTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGRtaXJyb3JfZG9fZmF1bHQoZG1pcnJvciwgcmFuZ2UpO1xuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4mIzQzO291dDpcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4mIzQzO1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuJiM0MztcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgd3JpdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGRtaXJyb3ItXHUwMDNlbm90aWZpZXIubW07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBhZGRyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcGZuc1szMl07XG4mIzQzO1x0c3RydWN0IGhtbV9yYW5nZSByYW5nZSA9IHtcbiYjNDM7XHRcdC5ub3RpZmllciA9IFx1MDAyNmRtaXJyb3ItXHUwMDNlbm90aWZpZXIsXG4mIzQzO1x0XHQuaG1tX3BmbnMgPSBwZm5zLFxuJiM0MztcdFx0LnBmbl9mbGFnc19tYXNrID0gMCxcbiYjNDM7XHRcdC5kZWZhdWx0X2ZsYWdzID1cbiYjNDM7XHRcdFx0SE1NX1BGTl9SRVFfRkFVTFQgfCAod3JpdGUgPyBITU1fUEZOX1JFUV9XUklURSA6IDApLFxuJiM0MztcdFx0LmRldl9wcml2YXRlX293bmVyID0gZG1pcnJvci1cdTAwM2VtZGV2aWNlLFxuJiM0MztcdH07XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghbW1nZXRfbm90X3plcm8obW0pKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdGZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIFx1MDAzYyBlbmQ7IGFkZHIgPSByYW5nZS5lbmQpIHtcbiYjNDM7XHRcdHJhbmdlLnN0YXJ0ID0gYWRkcjtcbiYjNDM7XHRcdHJhbmdlLmVuZCA9IG1pbihhZGRyICYjNDM7IChBUlJBWV9TSVpFKHBmbnMpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSwgZW5kKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkKGRtaXJyb3IsIFx1MDAyNnJhbmdlKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bW1wdXQobW0pO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBkbWlycm9yX2ZhdWx0KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdCB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB3cml0ZSlcbiB7XG5AQCAtNDg4LDYgJiM0Mzs1NTgsNDcgQEAgc3RhdGljIGludCBkbWlycm9yX3JlYWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGRtaXJyb3JfcmVhZF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtaXJyb3JfYm91bmNlIGJvdW5jZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzaXplID0gY21kLVx1MDAzZW5wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRzdGFydCA9IGNtZC1cdTAwM2VhZGRyO1xuJiM0MztcdGVuZCA9IHN0YXJ0ICYjNDM7IHNpemU7XG4mIzQzO1x0aWYgKGVuZCBcdTAwM2Mgc3RhcnQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZG1pcnJvcl9ib3VuY2VfaW5pdChcdTAwMjZib3VuY2UsIHN0YXJ0LCBzaXplKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKDEpIHtcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4mIzQzO1x0XHRyZXQgPSBkbWlycm9yX2RvX3JlYWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgXHUwMDI2Ym91bmNlKTtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZkbWlycm9yLVx1MDAzZW11dGV4KTtcbiYjNDM7XHRcdGlmIChyZXQgIT0gLUVOT0VOVClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0c3RhcnQgPSBjbWQtXHUwMDNlYWRkciAmIzQzOyAoYm91bmNlLmNwYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4mIzQzO1x0XHRyZXQgPSBkbWlycm9yX2ZhdWx0X3VubG9ja2VkKGRtaXJyb3IsIHN0YXJ0LCBlbmQsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y21kLVx1MDAzZWZhdWx0cyYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmV0ID09IDApIHtcbiYjNDM7XHRcdGlmIChjb3B5X3RvX3VzZXIodTY0X3RvX3VzZXJfcHRyKGNtZC1cdTAwM2VwdHIpLCBib3VuY2UucHRyLFxuJiM0MztcdFx0XHRcdCBib3VuY2Uuc2l6ZSkpXG4mIzQzO1x0XHRcdHJldCA9IC1FRkFVTFQ7XG4mIzQzO1x0fVxuJiM0MztcdGNtZC1cdTAwM2VjcGFnZXMgPSBib3VuY2UuY3BhZ2VzO1xuJiM0MztcdGRtaXJyb3JfYm91bmNlX2ZpbmkoXHUwMDI2Ym91bmNlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZG1pcnJvcl9kb193cml0ZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBkbWlycm9yX2JvdW5jZSAqYm91bmNlKVxuIHtcbkBAIC0xNTcyLDYgJiM0MzsxNjgzLDkgQEAgc3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRkbWlycm9yLVx1MDAzZWZsYWdzID0gY21kLm5wYWdlcztcbiBcdFx0cmV0ID0gMDtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VEOlxuJiM0MztcdFx0cmV0ID0gZG1pcnJvcl9yZWFkX3VubG9ja2VkKGRtaXJyb3IsIFx1MDAyNmNtZCk7XG4mIzQzO1x0XHRicmVhaztcbiBcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuZGlmZiAtLWdpdCBhL2xpYi90ZXN0X2htbV91YXBpLmggYi9saWIvdGVzdF9obW1fdWFwaS5oXG5pbmRleCBmOTRjNmQ0NTczMzgyOC4uZWE5YjBlYzQwNGZiNTUgMTAwNjQ0XG4tLS0gYS9saWIvdGVzdF9obW1fdWFwaS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF9obW1fdWFwaS5oXG5AQCAtMzgsNiAmIzQzOzM4LDcgQEAgc3RydWN0IGhtbV9kbWlycm9yX2NtZCB7XG4gI2RlZmluZSBITU1fRE1JUlJPUl9DSEVDS19FWENMVVNJVkVcdF9JT1dSKCYjMzk7SCYjMzk7LCAweDA2LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxuICNkZWZpbmUgSE1NX0RNSVJST1JfUkVMRUFTRVx0XHRfSU9XUigmIzM5O0gmIzM5OywgMHgwNywgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX0ZMQUdTXHRcdF9JT1dSKCYjMzk7SCYjMzk7LCAweDA4LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxuJiM0MzsjZGVmaW5lIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRURcdF9JT1dSKCYjMzk7SCYjMzk7LCAweDA5LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxuIFxuICNkZWZpbmUgSE1NX0RNSVJST1JfRkxBR19GQUlMX0FMTE9DXHQoMVVMTCBcdTAwM2NcdTAwM2MgMClcbiBcbmRpZmYgLS1naXQgYS9tbS9obW0uYyBiL21tL2htbS5jXG5pbmRleCA0ZjNmNjI3ZDJiNDc3Mi4uMzE2MTE2OTk0MjA5YzggMTAwNjQ0XG4tLS0gYS9tbS9obW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaG1tLmNcbkBAIC0zMiw5ICYjNDM7MzIsMjcgQEBcbiBcbiBzdHJ1Y3QgaG1tX3ZtYV93YWxrIHtcbiBcdHN0cnVjdCBobW1fcmFuZ2VcdCpyYW5nZTtcbiYjNDM7XHRpbnRcdFx0XHQqbG9ja2VkO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRsYXN0O1xuJiM0MztcdHVuc2lnbmVkIGxvbmdcdFx0ZW5kO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRyZXF1aXJlZF9mYXVsdDtcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBJbnRlcm5hbCBzZW50aW5lbCByZXR1cm5lZCBieSB3YWxrIGNhbGxiYWNrcyB3aGVuIHRoZXkgbmVlZCBhIHBhZ2UgZmF1bHQuXG4mIzQzOyAqIFRoZSBjYWxsYmFjayBzdG9yZXMgZW5kL3JlcXVpcmVkX2ZhdWx0IGluIGhtbV92bWFfd2FsazsgdGhlIG91dGVyIGxvb3BcbiYjNDM7ICogY29uc3VtZXMgdGhlIHNlbnRpbmVsIGFuZCBuZXZlciBwcm9wYWdhdGVzIGl0IHRvIHRoZSBjYWxsZXIuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEhNTV9GQVVMVF9QRU5ESU5HXHQtRUFHQUlOXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBJbnRlcm5hbCBzZW50aW5lbCByZXR1cm5lZCBieSBobW1fZG9fZmF1bHQoKSB3aGVuIGhhbmRsZV9tbV9mYXVsdCgpXG4mIzQzOyAqIGNvbXBsZXRlcyBhIHBhZ2UgZmF1bHQgd2l0aCB0aGUgbW1hcCBsb2NrIGRyb3BwZWQuIGhtbV9kb19mYXVsdCgpIHNldHNcbiYjNDM7ICogKmxvY2tlZCA9IDA7IHRoZSBvdXRlciBsb29wIGNvbnN1bWVzIHRoZSBzZW50aW5lbCBhbmQgbmV2ZXIgcHJvcGFnYXRlcyBpdFxuJiM0MzsgKiB0byB0aGUgY2FsbGVyLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBITU1fRkFVTFRfVU5MT0NLRURcdC1FTk9MQ0tcbiYjNDM7XG4gZW51bSB7XG4gXHRITU1fTkVFRF9GQVVMVCA9IDEgXHUwMDNjXHUwMDNjIDAsXG4gXHRITU1fTkVFRF9XUklURV9GQVVMVCA9IDEgXHUwMDNjXHUwMDNjIDEsXG5AQCAtNjAsMzcgJiM0Mzs3OCwyNSBAQCBzdGF0aWMgaW50IGhtbV9wZm5zX2ZpbGwodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiB9XG4gXG4gLypcbi0gKiBobW1fdm1hX2ZhdWx0KCkgLSBmYXVsdCBpbiBhIHJhbmdlIGxhY2tpbmcgdmFsaWQgcG1kIG9yIHB0ZShzKVxuLSAqIEBhZGRyOiByYW5nZSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MgKGluY2x1c2l2ZSlcbi0gKiBAZW5kOiByYW5nZSB2aXJ0dWFsIGVuZCBhZGRyZXNzIChleGNsdXNpdmUpXG4tICogQHJlcXVpcmVkX2ZhdWx0OiBITU1fTkVFRF8qIGZsYWdzXG4tICogQHdhbGs6IG1tX3dhbGsgc3RydWN0dXJlXG4tICogUmV0dXJuOiAtRUJVU1kgYWZ0ZXIgcGFnZSBmYXVsdCwgb3IgcGFnZSBmYXVsdCBlcnJvclxuJiM0MzsgKiBobW1fcmVjb3JkX2ZhdWx0KCkgLSByZWNvcmQgYSByYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGZhdWx0ZWQgaW5cbiAgKlxuLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgcG1kX25vbmUoKSBvciBwdGVfbm9uZSgpIHJldHVybnMgdHJ1ZSxcbi0gKiBvciB3aGVuZXZlciB0aGVyZSBpcyBubyBwYWdlIGRpcmVjdG9yeSBjb3ZlcmluZyB0aGUgdmlydHVhbCBhZGRyZXNzIHJhbmdlLlxuJiM0MzsgKiBDYWxsZWQgYnkgdGhlIHdhbGsgY2FsbGJhY2tzIHdoZW4gdGhleSBkaXNjb3ZlciB0aGF0IHBhcnQgb2YgdGhlIHJhbmdlXG4mIzQzOyAqIG5lZWRzIGEgcGFnZSBmYXVsdC4gIFRoZSBjYWxsYmFjayByZWNvcmRzIHdoYXQgdG8gZmF1bHQgYW5kIHJldHVybnNcbiYjNDM7ICogSE1NX0ZBVUxUX1BFTkRJTkc7IHRoZSBvdXRlciBsb29wIGluIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoKSBkcm9wc1xuJiM0MzsgKiBiYWNrIG91dCBvZiB3YWxrX3BhZ2VfcmFuZ2UoKSBhbmQgaW52b2tlcyBoYW5kbGVfbW1fZmF1bHQoKSBmcm9tIGEgY29udGV4dFxuJiM0MzsgKiB3aGVyZSBubyBwYWdlLXRhYmxlIG9yIGh1Z2V0bGJfdm1hX2xvY2sgaXMgaGVsZC5cbiAgKi9cbi1zdGF0aWMgaW50IGhtbV92bWFfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi1cdFx0XHQgdW5zaWduZWQgaW50IHJlcXVpcmVkX2ZhdWx0LCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiYjNDM7c3RhdGljIGludCBobW1fcmVjb3JkX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4mIzQzO1x0XHRcdCAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmF1bHQsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiB7XG4gXHRzdHJ1Y3QgaG1tX3ZtYV93YWxrICpobW1fdm1hX3dhbGsgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4tXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuLVx0dW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzID0gRkFVTFRfRkxBR19SRU1PVEU7XG4gXG4gXHRXQVJOX09OX09OQ0UoIXJlcXVpcmVkX2ZhdWx0KTtcbiBcdGhtbV92bWFfd2Fsay1cdTAwM2VsYXN0ID0gYWRkcjtcbi1cbi1cdGlmIChyZXF1aXJlZF9mYXVsdCBcdTAwMjYgSE1NX05FRURfV1JJVEVfRkFVTFQpIHtcbi1cdFx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XUklURSkpXG4tXHRcdFx0cmV0dXJuIC1FUEVSTTtcbi1cdFx0ZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19XUklURTtcbi1cdH1cbi1cbi1cdGZvciAoOyBhZGRyIFx1MDAzYyBlbmQ7IGFkZHIgJiM0Mzs9IFBBR0VfU0laRSlcbi1cdFx0aWYgKGhhbmRsZV9tbV9mYXVsdCh2bWEsIGFkZHIsIGZhdWx0X2ZsYWdzLCBOVUxMKSBcdTAwMjZcbi1cdFx0ICAgIFZNX0ZBVUxUX0VSUk9SKVxuLVx0XHRcdHJldHVybiAtRUZBVUxUO1xuLVx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHRobW1fdm1hX3dhbGstXHUwMDNlZW5kID0gZW5kO1xuJiM0MztcdGhtbV92bWFfd2Fsay1cdTAwM2VyZXF1aXJlZF9mYXVsdCA9IHJlcXVpcmVkX2ZhdWx0O1xuJiM0MztcdHJldHVybiBITU1fRkFVTFRfUEVORElORztcbiB9XG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBobW1fcHRlX25lZWRfZmF1bHQoY29uc3Qgc3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrLFxuQEAgLTE3NCw3ICYjNDM7MTgwLDcgQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfaG9sZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRyZXR1cm4gaG1tX3BmbnNfZmlsbChhZGRyLCBlbmQsIHJhbmdlLCBITU1fUEZOX0VSUk9SKTtcbiBcdH1cbiBcdGlmIChyZXF1aXJlZF9mYXVsdClcbi1cdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4mIzQzO1x0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcdHJldHVybiBobW1fcGZuc19maWxsKGFkZHIsIGVuZCwgcmFuZ2UsIDApO1xuIH1cbiBcbkBAIC0yMDksNyAmIzQzOzIxNSw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRyZXF1aXJlZF9mYXVsdCA9XG4gXHRcdGhtbV9yYW5nZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgaG1tX3BmbnMsIG5wYWdlcywgY3B1X2ZsYWdzKTtcbiBcdGlmIChyZXF1aXJlZF9mYXVsdClcbi1cdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4mIzQzO1x0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcbiBcdHBmbiA9IHBtZF9wZm4ocG1kKSAmIzQzOyAoKGFkZHIgXHUwMDI2IH5QTURfTUFTSykgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuIFx0Zm9yIChpID0gMDsgYWRkciBcdTAwM2MgZW5kOyBhZGRyICYjNDM7PSBQQUdFX1NJWkUsIGkmIzQzOyYjNDM7LCBwZm4mIzQzOyYjNDM7KSB7XG5AQCAtMzI4LDcgJiM0MzszMzQsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuIGZhdWx0OlxuIFx0cHRlX3VubWFwKHB0ZXApO1xuIFx0LyogRmF1bHQgYW55IHZpcnR1YWwgYWRkcmVzcyB3ZSB3ZXJlIGFza2VkIHRvIGZhdWx0ICovXG4tXHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiYjNDM7XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuQEAgLTM3MSw3ICYjNDM7Mzc3LDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdFx0XHQgICAgICBucGFnZXMsIDApO1xuIFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG4gXHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG4tXHRcdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4mIzQzO1x0XHRcdHJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHR9XG5AQCAtNTE3LDcgJiM0Mzs1MjMsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19wdWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdFx0XHRcdCAgICAgIG5wYWdlcywgY3B1X2ZsYWdzKTtcbiBcdFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG4gXHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbi1cdFx0XHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4gXHRcdH1cbiBcbiBcdFx0cGZuID0gcHVkX3BmbihwdWQpICYjNDM7ICgoYWRkciBcdTAwMjYgflBVRF9NQVNLKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5AQCAtNTY0LDIxICYjNDM7NTcwLDggQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuIFx0cmVxdWlyZWRfZmF1bHQgPVxuIFx0XHRobW1fcHRlX25lZWRfZmF1bHQoaG1tX3ZtYV93YWxrLCBwZm5fcmVxX2ZsYWdzLCBjcHVfZmxhZ3MpO1xuIFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG4tXHRcdGludCByZXQ7XG4tXG4gXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4tXHRcdGh1Z2V0bGJfdm1hX3VubG9ja19yZWFkKHZtYSk7XG4tXHRcdC8qXG4tXHRcdCAqIEF2b2lkIGRlYWRsb2NrOiBkcm9wIHRoZSB2bWEgbG9jayBiZWZvcmUgY2FsbGluZ1xuLVx0XHQgKiBobW1fdm1hX2ZhdWx0KCksIHdoaWNoIHdpbGwgaXRzZWxmIHBvdGVudGlhbGx5IHRha2UgYW5kXG4tXHRcdCAqIGRyb3AgdGhlIHZtYSBsb2NrLiBUaGlzIGlzIGFsc28gY29ycmVjdCBmcm9tIGFcbi1cdFx0ICogcHJvdGVjdGlvbiBwb2ludCBvZiB2aWV3LCBiZWNhdXNlIHRoZXJlIGlzIG5vIGZ1cnRoZXJcbi1cdFx0ICogdXNlIGhlcmUgb2YgZWl0aGVyIHB0ZSBvciBwdGwgYWZ0ZXIgZHJvcHBpbmcgdGhlIHZtYVxuLVx0XHQgKiBsb2NrLlxuLVx0XHQgKi9cbi1cdFx0cmV0ID0gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbi1cdFx0aHVnZXRsYl92bWFfbG9ja19yZWFkKHZtYSk7XG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcdH1cbiBcbiBcdHBmbiA9IHB0ZV9wZm4oZW50cnkpICYjNDM7ICgoc3RhcnQgXHUwMDI2IH5obWFzaykgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuQEAgLTYzNywyOSAmIzQzOzYzMCw2NiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGhtbV93YWxrX29wcyA9IHtcbiBcdC53YWxrX2xvY2tcdD0gUEdXQUxLX1JETE9DSyxcbiB9O1xuIFxuLS8qKlxuLSAqIGhtbV9yYW5nZV9mYXVsdCAtIHRyeSB0byBmYXVsdCBzb21lIGFkZHJlc3MgaW4gYSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2Vcbi0gKiBAcmFuZ2U6XHRhcmd1bWVudCBzdHJ1Y3R1cmVcbi0gKlxuLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOlxuJiM0MzsvKlxuJiM0MzsgKiBobW1fZG9fZmF1bHQgLSBmYXVsdCBpbiBhIHJhbmdlIHJlY29yZGVkIGJ5IGEgd2FsayBjYWxsYmFja1xuICAqXG4tICogLUVJTlZBTDpcdEludmFsaWQgYXJndW1lbnRzIG9yIG1tIG9yIHZpcnR1YWwgYWRkcmVzcyBpcyBpbiBhbiBpbnZhbGlkIHZtYVxuLSAqXHRcdChlLmcuLCBkZXZpY2UgZmlsZSB2bWEpLlxuLSAqIC1FTk9NRU06XHRPdXQgb2YgbWVtb3J5LlxuLSAqIC1FUEVSTTpcdEludmFsaWQgcGVybWlzc2lvbiAoZS5nLiwgYXNraW5nIGZvciB3cml0ZSBhbmQgcmFuZ2UgaXMgcmVhZFxuLSAqXHRcdG9ubHkpLlxuLSAqIC1FQlVTWTpcdFRoZSByYW5nZSBoYXMgYmVlbiBpbnZhbGlkYXRlZCBhbmQgdGhlIGNhbGxlciBuZWVkcyB0byB3YWl0IGZvclxuLSAqXHRcdHRoZSBpbnZhbGlkYXRpb24gdG8gZmluaXNoLlxuLSAqIC1FRkFVTFQ6ICAgICBBIHBhZ2Ugd2FzIHJlcXVlc3RlZCB0byBiZSB2YWxpZCBhbmQgY291bGQgbm90IGJlIG1hZGUgdmFsaWRcbi0gKiAgICAgICAgICAgICAgaWUgaXQgaGFzIG5vIGJhY2tpbmcgVk1BIG9yIGl0IGlzIGlsbGVnYWwgdG8gYWNjZXNzXG4mIzQzOyAqIENhbGxlZCBmcm9tIHRoZSBvdXRlciBsb29wIGluIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoKSBhZnRlciBhIGNhbGxiYWNrXG4mIzQzOyAqIHJldHVybmVkIEhNTV9GQVVMVF9QRU5ESU5HLiAgQXQgdGhpcyBwb2ludCB3ZSBob2xkIG9ubHkgbW1hcF9sb2NrO1xuJiM0MzsgKiB0aGUgcGFnZS10YWJsZSBzcGlubG9jayBhbmQgYW55IGh1Z2V0bGJfdm1hX2xvY2sgYWNxdWlyZWQgYnkgdGhlIHdhbGtcbiYjNDM7ICogZnJhbWV3b3JrIGhhdmUgYWxyZWFkeSBiZWVuIHJlbGVhc2VkIGJ5IHRoZSB1bndpbmQuXG4gICpcbi0gKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ2V0X3VzZXJfcGFnZXMoKSwgZXhjZXB0IHRoYXQgaXQgY2FuIHJlYWQgdGhlIHBhZ2UgdGFibGVzXG4tICogd2l0aG91dCBtdXRhdGluZyB0aGVtIChpZSBjYXVzaW5nIGZhdWx0cykuXG4mIzQzOyAqIFJldHVybnMgLUVCVVNZIG9uIHN1Y2Nlc3MgKGFsbCBwYWdlcyBmYXVsdGVkLCBjYWxsZXIgc2hvdWxkIHJlLXdhbGspLlxuJiM0MzsgKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbiAgKi9cbi1pbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxuJiM0MztzdGF0aWMgaW50IGhtbV9kb19mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiYjNDM7XHRcdFx0c3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBhZGRyID0gaG1tX3ZtYV93YWxrLVx1MDAzZWxhc3Q7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBlbmQgPSBobW1fdm1hX3dhbGstXHUwMDNlZW5kO1xuJiM0MztcdHVuc2lnbmVkIGludCByZXF1aXJlZF9mYXVsdCA9IGhtbV92bWFfd2Fsay1cdTAwM2VyZXF1aXJlZF9mYXVsdDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MgPSBGQVVMVF9GTEFHX1JFTU9URTtcbiYjNDM7XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiYjNDM7XG4mIzQzO1x0aWYgKGhtbV92bWFfd2Fsay1cdTAwM2Vsb2NrZWQpXG4mIzQzO1x0XHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX0FMTE9XX1JFVFJZIHwgRkFVTFRfRkxBR19LSUxMQUJMRTtcbiYjNDM7XG4mIzQzO1x0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XG4mIzQzO1x0aWYgKCF2bWEpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcXVpcmVkX2ZhdWx0IFx1MDAyNiBITU1fTkVFRF9XUklURV9GQVVMVCkge1xuJiM0MztcdFx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XUklURSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0XHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yICg7IGFkZHIgXHUwMDNjIGVuZDsgYWRkciAmIzQzOz0gUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHR2bV9mYXVsdF90IHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBoYW5kbGVfbW1fZmF1bHQodm1hLCBhZGRyLCBmYXVsdF9mbGFncywgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwMjYgKFZNX0ZBVUxUX0NPTVBMRVRFRCB8IFZNX0ZBVUxUX1JFVFJZKSkge1xuJiM0MztcdFx0XHQqaG1tX3ZtYV93YWxrLVx1MDAzZWxvY2tlZCA9IDA7XG4mIzQzO1x0XHRcdHJldHVybiBITU1fRkFVTFRfVU5MT0NLRUQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwMjYgVk1fRkFVTFRfRVJST1IpIHtcbiYjNDM7XHRcdFx0aW50IGVyciA9IHZtX2ZhdWx0X3RvX2Vycm5vKHJldCwgMCk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRcdEJVRygpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FQlVTWTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLCBpbnQgKmxvY2tlZClcbiB7XG4gXHRzdHJ1Y3QgaG1tX3ZtYV93YWxrIGhtbV92bWFfd2FsayA9IHtcbiBcdFx0LnJhbmdlID0gcmFuZ2UsXG4mIzQzO1x0XHQubG9ja2VkID0gbG9ja2VkLFxuIFx0XHQubGFzdCA9IHJhbmdlLVx1MDAzZXN0YXJ0LFxuIFx0fTtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtXHUwMDNlbm90aWZpZXItXHUwMDNlbW07XG5AQCAtNjc0LDYgJiM0Mzs3MDQsMjIgQEAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHRyZXQgPSB3YWxrX3BhZ2VfcmFuZ2UobW0sIGhtbV92bWFfd2Fsay5sYXN0LCByYW5nZS1cdTAwM2VlbmQsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZobW1fd2Fsa19vcHMsIFx1MDAyNmhtbV92bWFfd2Fsayk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogV2hlbiBITU1fRkFVTFRfUEVORElORyBpcyByZXR1cm5lZCBhIHdhbGsgY2FsbGJhY2tcbiYjNDM7XHRcdCAqIHJlY29yZGVkIGEgcmFuZ2UgdGhhdCBuZWVkcyBoYW5kbGVfbW1fZmF1bHQoKTtcbiYjNDM7XHRcdCAqIGhtbV9kb19mYXVsdCgpIHJ1bnMgdGhlIGZhdWx0IG91dHNpZGUgd2Fsa19wYWdlX3JhbmdlKClcbiYjNDM7XHRcdCAqIChzbyBubyBwYWdlLXRhYmxlIG9yIGh1Z2V0bGJfdm1hX2xvY2sgaXMgaGVsZCkgYW5kXG4mIzQzO1x0XHQgKiByZXR1cm5zIC1FQlVTWSBzbyB0aGUgbG9vcCByZS13YWxrcyBhbmQgcGlja3MgdXAgdGhlXG4mIzQzO1x0XHQgKiBub3ctcHJlc2VudCBlbnRyaWVzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocmV0ID09IEhNTV9GQVVMVF9QRU5ESU5HKSB7XG4mIzQzO1x0XHRcdHJldCA9IGhtbV9kb19mYXVsdChtbSwgXHUwMDI2aG1tX3ZtYV93YWxrKTtcbiYjNDM7XHRcdFx0aWYgKHJldCA9PSBITU1fRkFVTFRfVU5MT0NLRUQpIHtcbiYjNDM7XHRcdFx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gLUVJTlRSO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiBcdFx0LypcbiBcdFx0ICogV2hlbiAtRUJVU1kgaXMgcmV0dXJuZWQgdGhlIGxvb3AgcmVzdGFydHMgd2l0aFxuIFx0XHQgKiBobW1fdm1hX3dhbGsubGFzdCBzZXQgdG8gYW4gYWRkcmVzcyB0aGF0IGhhcyBub3QgYmVlbiBzdG9yZWRcbkBAIC02ODMsOCAmIzQzOzcyOSw2NSBAQCBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxuIFx0fSB3aGlsZSAocmV0ID09IC1FQlVTWSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBobW1fcmFuZ2VfZmF1bHQgLSB0cnkgdG8gZmF1bHQgc29tZSBhZGRyZXNzIGluIGEgdmlydHVhbCBhZGRyZXNzIHJhbmdlXG4mIzQzOyAqIEByYW5nZTpcdGFyZ3VtZW50IHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczpcbiYjNDM7ICpcbiYjNDM7ICogLUVJTlZBTDpcdEludmFsaWQgYXJndW1lbnRzIG9yIG1tIG9yIHZpcnR1YWwgYWRkcmVzcyBpcyBpbiBhbiBpbnZhbGlkIHZtYVxuJiM0MzsgKlx0XHQoZS5nLiwgZGV2aWNlIGZpbGUgdm1hKS5cbiYjNDM7ICogLUVOT01FTTpcdE91dCBvZiBtZW1vcnkuXG4mIzQzOyAqIC1FUEVSTTpcdEludmFsaWQgcGVybWlzc2lvbiAoZS5nLiwgYXNraW5nIGZvciB3cml0ZSBhbmQgcmFuZ2UgaXMgcmVhZFxuJiM0MzsgKlx0XHRvbmx5KS5cbiYjNDM7ICogLUVCVVNZOlx0VGhlIHJhbmdlIGhhcyBiZWVuIGludmFsaWRhdGVkIGFuZCB0aGUgY2FsbGVyIG5lZWRzIHRvIHdhaXQgZm9yXG4mIzQzOyAqXHRcdHRoZSBpbnZhbGlkYXRpb24gdG8gZmluaXNoLlxuJiM0MzsgKiAtRUZBVUxUOiAgICAgQSBwYWdlIHdhcyByZXF1ZXN0ZWQgdG8gYmUgdmFsaWQgYW5kIGNvdWxkIG5vdCBiZSBtYWRlIHZhbGlkXG4mIzQzOyAqICAgICAgICAgICAgICBpZSBpdCBoYXMgbm8gYmFja2luZyBWTUEgb3IgaXQgaXMgaWxsZWdhbCB0byBhY2Nlc3NcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpcyBzaW1pbGFyIHRvIGdldF91c2VyX3BhZ2VzKCksIGV4Y2VwdCB0aGF0IGl0IGNhbiByZWFkIHRoZSBwYWdlIHRhYmxlc1xuJiM0MzsgKiB3aXRob3V0IG11dGF0aW5nIHRoZW0gKGllIGNhdXNpbmcgZmF1bHRzKS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIG1tYXAgbG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlciBhbmQgd2lsbCByZW1haW4gaGVsZCBvbiByZXR1cm4uXG4mIzQzOyAqIEZvciBhIHZhcmlhbnQgdGhhdCBhbGxvd3MgdGhlIG1tYXAgbG9jayB0byBiZSBkcm9wcGVkIGR1cmluZyBmYXVsdHMgKGUuZy4sXG4mIzQzOyAqIGZvciB1c2VyZmF1bHRmZCBzdXBwb3J0KSwgc2VlIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpLlxuJiM0MzsgKi9cbiYjNDM7aW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHJhbmdlLCBOVUxMKTtcbiYjNDM7fVxuIEVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0KTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCAtIGZhdWx0IGluIGEgcmFuZ2UsIHBvc3NpYmx5IGRyb3BwaW5nIHRoZSBtbWFwIGxvY2tcbiYjNDM7ICogQHJhbmdlOlx0YXJndW1lbnQgc3RydWN0dXJlXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgaXMgc2ltaWxhciB0byBobW1fcmFuZ2VfZmF1bHQoKSwgZXhjZXB0IHRoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCB0aGVcbiYjNDM7ICogbW1hcCBsb2NrLiBUaGUgZnVuY3Rpb24gdGFrZXMgdGhlIG1tYXAgcmVhZCBsb2NrIGludGVybmFsbHkgYW5kIGFsbG93c1xuJiM0MzsgKiBoYW5kbGVfbW1fZmF1bHQoKSB0byBkcm9wIGl0IGR1cmluZyBmYXVsdHMuIElmIHRoZSBsb2NrIGlzIGRyb3BwZWQsIHRoZVxuJiM0MzsgKiBmdW5jdGlvbiByZXR1cm5zIC1FQlVTWSBhbmQgdGhlIGNhbGxlciBtdXN0IHJlc3RhcnQgdGhlIHdhbGsgd2l0aCBhIGZyZXNoXG4mIzQzOyAqIG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKCkgc2VxdWVuY2UuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZXJyb3IgY29kZXMgZG9jdW1lbnRlZCBmb3JcbiYjNDM7ICogaG1tX3JhbmdlX2ZhdWx0KCkuIC1FSU5UUiBpcyByZXR1cm5lZCBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nIGR1cmluZ1xuJiM0MzsgKiByZXRyeSBoYW5kbGluZy5cbiYjNDM7ICovXG4mIzQzO2ludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJhbmdlLVx1MDAzZW5vdGlmaWVyLVx1MDAzZW1tO1xuJiM0MztcdGludCBsb2NrZWQgPSAxO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbiYjNDM7XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHJhbmdlLCBcdTAwMjZsb2NrZWQpO1xuJiM0MztcdGlmIChsb2NrZWQpXG4mIzQzO1x0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCk7XG4mIzQzO1xuIC8qKlxuICAqIGhtbV9kbWFfbWFwX2FsbG9jIC0gQWxsb2NhdGUgSE1NIG1hcCBzdHJ1Y3R1cmVcbiAgKiBAZGV2OiBkZXZpY2UgdG8gYWxsb2NhdGUgc3RydWN0dXJlIGZvclxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbmluZGV4IDJmMmI5ODc5ZDEwMDUxLi43MTc2NWM0ZDgwZjNlNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuQEAgLTI5LDYgJiM0MzsyOSwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvaW9jdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvZXZlbnRmZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjcG9sbC5oXHUwMDNlXG4gXG4gLypcbiAgKiBUaGlzIGlzIGEgcHJpdmF0ZSBVQVBJIHRvIHRoZSBrZXJuZWwgdGVzdCBtb2R1bGUgc28gaXQgaXNuJiMzOTt0IGV4cG9ydGVkXG5AQCAtMjk0OSw0ICYjNDM7Mjk1MywxNDkgQEAgVEVTVF9GX1RJTUVPVVQoaG1tLCBiZW5jaG1hcmtfdGhwX21pZ3JhdGlvbiwgMTIwKVxuIFx0XHRcdFx0XHRcdTAwMjZ0aHBfcmVzdWx0cywgXHUwMDI2cmVndWxhcl9yZXN1bHRzKTtcbiBcdH1cbiB9XG4mIzQzOy8qXG4mIzQzOyAqIFRlc3QgdGhhdCBITU0gY2FuIGZhdWx0IGluIHBhZ2VzIGJhY2tlZCBieSB1c2VyZmF1bHRmZCB1c2luZyB0aGVcbiYjNDM7ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKCkgcGF0aC4gVGhpcyBleGVyY2lzZXMgdGhlIGxvY2stZHJvcCByZXRyeVxuJiM0MzsgKiBsb2dpYyBpbiB0aGUgSE1NIGZyYW1ld29yay5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB1ZmZkX3RocmVhZF9hcmdzIHtcbiYjNDM7XHRpbnQgdWZmZDtcbiYjNDM7XHRpbnQgc3RvcF9mZDtcbiYjNDM7XHR2b2lkICpwYWdlX2J1ZmZlcjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkICp1ZmZkX2hhbmRsZXJfdGhyZWFkKHZvaWQgKmFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB1ZmZkX3RocmVhZF9hcmdzICphcmdzID0gYXJnO1xuJiM0MztcdHN0cnVjdCB1ZmZkX21zZyBtc2c7XG4mIzQzO1x0c3RydWN0IHVmZmRpb19jb3B5IGNvcHk7XG4mIzQzO1x0c3RydWN0IHBvbGxmZCBwb2xsZmRbMl07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cG9sbGZkWzBdLmZkID0gYXJncy1cdTAwM2V1ZmZkO1xuJiM0MztcdHBvbGxmZFswXS5ldmVudHMgPSBQT0xMSU47XG4mIzQzO1x0cG9sbGZkWzFdLmZkID0gYXJncy1cdTAwM2VzdG9wX2ZkO1xuJiM0MztcdHBvbGxmZFsxXS5ldmVudHMgPSBQT0xMSU47XG4mIzQzO1xuJiM0MztcdHdoaWxlICgxKSB7XG4mIzQzO1x0XHRyZXQgPSBwb2xsKHBvbGxmZCwgMiwgLTEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKHBvbGxmZFsxXS5yZXZlbnRzKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGlmICghKHBvbGxmZFswXS5yZXZlbnRzIFx1MDAyNiBQT0xMSU4pKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSByZWFkKGFyZ3MtXHUwMDNldWZmZCwgXHUwMDI2bXNnLCBzaXplb2YobXNnKSk7XG4mIzQzO1x0XHRpZiAocmV0ICE9IHNpemVvZihtc2cpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRpZiAobXNnLmV2ZW50ICE9IFVGRkRfRVZFTlRfUEFHRUZBVUxUKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHQvKiBGaWxsIHRoZSBwYWdlIHdpdGggYSBrbm93biBwYXR0ZXJuICovXG4mIzQzO1x0XHRtZW1zZXQoYXJncy1cdTAwM2VwYWdlX2J1ZmZlciwgMHhBQiwgYXJncy1cdTAwM2VwYWdlX3NpemUpO1xuJiM0MztcbiYjNDM7XHRcdGNvcHkuZHN0ID0gbXNnLmFyZy5wYWdlZmF1bHQuYWRkcmVzcyBcdTAwMjYgfihhcmdzLVx1MDAzZXBhZ2Vfc2l6ZSAtIDEpO1xuJiM0MztcdFx0Y29weS5zcmMgPSAodW5zaWduZWQgbG9uZylhcmdzLVx1MDAzZXBhZ2VfYnVmZmVyO1xuJiM0MztcdFx0Y29weS5sZW4gPSBhcmdzLVx1MDAzZXBhZ2Vfc2l6ZTtcbiYjNDM7XHRcdGNvcHkubW9kZSA9IDA7XG4mIzQzO1x0XHRjb3B5LmNvcHkgPSAwO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGlvY3RsKGFyZ3MtXHUwMDNldWZmZCwgVUZGRElPX0NPUFksIFx1MDAyNmNvcHkpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGhtbSwgdXNlcmZhdWx0ZmRfcmVhZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBobW1fYnVmZmVyICpidWZmZXI7XG4mIzQzO1x0c3RydWN0IHVmZmRfdGhyZWFkX2FyZ3MgdWZmZF9hcmdzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4mIzQzO1x0dW5zaWduZWQgY2hhciAqcHRyO1xuJiM0MztcdHB0aHJlYWRfdCB0aHJlYWQ7XG4mIzQzO1x0aW50IHVmZmQ7XG4mIzQzO1x0aW50IHN0b3BfZmQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRzdHJ1Y3QgdWZmZGlvX2FwaSBhcGk7XG4mIzQzO1x0c3RydWN0IHVmZmRpb19yZWdpc3RlciByZWc7XG4mIzQzO1x0dWludDY0X3Qgc3RvcCA9IDE7XG4mIzQzO1x0c3NpemVfdCBud3JpdGU7XG4mIzQzO1xuJiM0MztcdG5wYWdlcyA9IDQ7XG4mIzQzO1x0c2l6ZSA9IG5wYWdlcyBcdTAwM2NcdTAwM2Mgc2VsZi1cdTAwM2VwYWdlX3NoaWZ0O1xuJiM0MztcbiYjNDM7XHQvKiBDcmVhdGUgdXNlcmZhdWx0ZmQgKi9cbiYjNDM7XHR1ZmZkID0gc3lzY2FsbChfX05SX3VzZXJmYXVsdGZkLCBPX0NMT0VYRUMgfCBPX05PTkJMT0NLKTtcbiYjNDM7XHRpZiAodWZmZCBcdTAwM2MgMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDt1c2VyZmF1bHRmZCBub3QgYXZhaWxhYmxlXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0YXBpLmFwaSA9IFVGRkRfQVBJO1xuJiM0MztcdGFwaS5mZWF0dXJlcyA9IDA7XG4mIzQzO1x0cmV0ID0gaW9jdGwodWZmZCwgVUZGRElPX0FQSSwgXHUwMDI2YXBpKTtcbiYjNDM7XHRBU1NFUlRfRVEocmV0LCAwKTtcbiYjNDM7XG4mIzQzO1x0YnVmZmVyID0gbWFsbG9jKHNpemVvZigqYnVmZmVyKSk7XG4mIzQzO1x0QVNTRVJUX05FKGJ1ZmZlciwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdGJ1ZmZlci1cdTAwM2VmZCA9IC0xO1xuJiM0MztcdGJ1ZmZlci1cdTAwM2VzaXplID0gc2l6ZTtcbiYjNDM7XHRidWZmZXItXHUwMDNlbWlycm9yID0gbWFsbG9jKHNpemUpO1xuJiM0MztcdEFTU0VSVF9ORShidWZmZXItXHUwMDNlbWlycm9yLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0LyogQ3JlYXRlIGFub255bW91cyBtYXBwaW5nICovXG4mIzQzO1x0YnVmZmVyLVx1MDAzZXB0ciA9IG1tYXAoTlVMTCwgc2l6ZSxcbiYjNDM7XHRcdFx0ICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiYjNDM7XHRcdFx0ICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLFxuJiM0MztcdFx0XHQgICAtMSwgMCk7XG4mIzQzO1x0QVNTRVJUX05FKGJ1ZmZlci1cdTAwM2VwdHIsIE1BUF9GQUlMRUQpO1xuJiM0MztcbiYjNDM7XHQvKiBSZWdpc3RlciB0aGUgcmVnaW9uIHdpdGggdXNlcmZhdWx0ZmQgKi9cbiYjNDM7XHRyZWcucmFuZ2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZylidWZmZXItXHUwMDNlcHRyO1xuJiM0MztcdHJlZy5yYW5nZS5sZW4gPSBzaXplO1xuJiM0MztcdHJlZy5tb2RlID0gVUZGRElPX1JFR0lTVEVSX01PREVfTUlTU0lORztcbiYjNDM7XHRyZXQgPSBpb2N0bCh1ZmZkLCBVRkZESU9fUkVHSVNURVIsIFx1MDAyNnJlZyk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIFNldCB1cCB0aGUgaGFuZGxlciB0aHJlYWQgKi9cbiYjNDM7XHR1ZmZkX2FyZ3MudWZmZCA9IHVmZmQ7XG4mIzQzO1x0c3RvcF9mZCA9IGV2ZW50ZmQoMCwgRUZEX0NMT0VYRUMpO1xuJiM0MztcdEFTU0VSVF9HRShzdG9wX2ZkLCAwKTtcbiYjNDM7XHR1ZmZkX2FyZ3Muc3RvcF9mZCA9IHN0b3BfZmQ7XG4mIzQzO1x0dWZmZF9hcmdzLnBhZ2VfYnVmZmVyID0gbWFsbG9jKHNlbGYtXHUwMDNlcGFnZV9zaXplKTtcbiYjNDM7XHRBU1NFUlRfTkUodWZmZF9hcmdzLnBhZ2VfYnVmZmVyLCBOVUxMKTtcbiYjNDM7XHR1ZmZkX2FyZ3MucGFnZV9zaXplID0gc2VsZi1cdTAwM2VwYWdlX3NpemU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgdWZmZF9oYW5kbGVyX3RocmVhZCwgXHUwMDI2dWZmZF9hcmdzKTtcbiYjNDM7XHRBU1NFUlRfRVEocmV0LCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVc2UgdGhlIHVubG9ja2VkIHJlYWQgcGF0aCB3aGljaCBhbGxvd3MgdGhlIG1tYXAgbG9jayB0byBiZVxuJiM0MztcdCAqIGRyb3BwZWQgZHVyaW5nIHRoZSBmYXVsdCwgZW5hYmxpbmcgdXNlcmZhdWx0ZmQgcmVzb2x1dGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfUkVBRF9VTkxPQ0tFRCxcbiYjNDM7XHRcdFx0ICAgICAgYnVmZmVyLCBucGFnZXMpO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIDApO1xuJiM0MztcdEFTU0VSVF9FUShidWZmZXItXHUwMDNlY3BhZ2VzLCBucGFnZXMpO1xuJiM0MztcbiYjNDM7XHQvKiBWZXJpZnkgdGhlIGRldmljZSByZWFkIHRoZSBkYXRhIGZpbGxlZCBieSB0aGUgdWZmZCBoYW5kbGVyICovXG4mIzQzO1x0cHRyID0gYnVmZmVyLVx1MDAzZW1pcnJvcjtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaXplOyAmIzQzOyYjNDM7aSlcbiYjNDM7XHRcdEFTU0VSVF9FUShwdHJbaV0sICh1bnNpZ25lZCBjaGFyKTB4QUIpO1xuJiM0MztcbiYjNDM7XHRud3JpdGUgPSB3cml0ZShzdG9wX2ZkLCBcdTAwMjZzdG9wLCBzaXplb2Yoc3RvcCkpO1xuJiM0MztcdEFTU0VSVF9FUShud3JpdGUsIHNpemVvZihzdG9wKSk7XG4mIzQzO1x0cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XG4mIzQzO1x0Y2xvc2Uoc3RvcF9mZCk7XG4mIzQzO1x0ZnJlZSh1ZmZkX2FyZ3MucGFnZV9idWZmZXIpO1xuJiM0MztcdGNsb3NlKHVmZmQpO1xuJiM0MztcdGhtbV9idWZmZXJfZnJlZShidWZmZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIFRFU1RfSEFSTkVTU19NQUlOXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VEVTVF9ITU0mIzM0OywKICAgICYjMzQ7TVNIVl9ST09UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkJiMzNDssCiAgICAmIzM0O2htbV9yYW5nZV9mYXVsdCYjMzQ7LAogICAgJiMzNDtobW1fZG9fZmF1bHQmIzM0OywKICAgICYjMzQ7aG1tX3JlY29yZF9mYXVsdCYjMzQ7LAogICAgJiMzNDtobW1fcmFuZ2VfZmF1bHRfbG9ja2VkJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfcmVhZF91bmxvY2tlZCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfZmF1bHRfdW5sb2NrZWQmIzM0OywKICAgICYjMzQ7bXNodl9yZWdpb25faG1tX2ZhdWx0X2FuZF9sb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKWAgaW4gdGhlIEhNTSBzdWJzeXN0ZW0gdG8gYWxsb3cgZHJvcHBpbmcgdGhlIG1tYXAgbG9jayBkdXJpbmcgcGFnZSBmYXVsdHMsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgcmVnaW9ucyBtYW5hZ2VkIGJ5IHVzZXJmYXVsdGZkLiBJdCByZWZhY3RvcnMgdGhlIGNvcmUgYGhtbV9yYW5nZV9mYXVsdCgpYCBsb2dpYyB0byBzdXBwb3J0IHRoaXMgYW5kIHVwZGF0ZXMgdGhlIGB0ZXN0X2htbWAgbW9kdWxlIGFuZCBgbXNodl9yZWdpb25zYCBkcml2ZXIgdG8gdXRpbGl6ZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZHJpdmVyIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNGI3NTkzZjZmZTg2Y2I2YzU0MGU2NDRhOWIxZDFkY2RmODgwZTcwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgNyAwMjowMzoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdAppbmRleCA3ZDYxYjdhOGI2NWI3OS4uODQ0MzQzNzEyYWJkZGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QKQEAgLTIwOCw2ICYjNDM7MjA4LDY1IEBAIGludmFsaWRhdGUoKSBjYWxsYmFjay4gVGhhdCBsb2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZwogbW11X2ludGVydmFsX3JlYWRfcmV0cnkoKSB0byBhdm9pZCBhbnkgcmFjZSB3aXRoIGEgY29uY3VycmVudCBDUFUgcGFnZSB0YWJsZQogdXBkYXRlLgogCiYjNDM7RHJvcHBpbmcgdGhlIG1tYXAgbG9jayBkdXJpbmcgcGFnZSBmYXVsdHMKJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO1NvbWUgVk1BcyBoYXZlIGZhdWx0IGhhbmRsZXJzIHRoYXQgbmVlZCB0byByZWxlYXNlIHRoZSBtbWFwIGxvY2sgd2hpbGUKJiM0MztzZXJ2aWNpbmcgYSBmYXVsdCAoZm9yIGV4YW1wbGUsIHJlZ2lvbnMgbWFuYWdlZCBieSBgYHVzZXJmYXVsdGZkYGApLgomIzQzO2BgaG1tX3JhbmdlX2ZhdWx0KClgYCBjYW5ub3QgYmUgdXNlZCBvbiBzdWNoIG1hcHBpbmdzIGJlY2F1c2UgaXQgbXVzdCBob2xkIHRoZQomIzQzO21tYXAgbG9jayBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjYWxsLiBEcml2ZXJzIHRoYXQgbmVlZCB0byBzdXBwb3J0IHRoZW0KJiM0MztzaG91bGQgY2FsbDo6CiYjNDM7CiYjNDM7ICBpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTsKJiM0MzsKJiM0MztUaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgYGBtbWFwX3JlYWRfbG9ja2BgIGJlZm9yZSB0aGUgY2FsbC4KJiM0MztgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpYGAgdGFrZXMgdGhlIG1tYXAgcmVhZCBsb2NrIGludGVybmFsbHkgYW5kIGFsbG93cwomIzQzO2BgaGFuZGxlX21tX2ZhdWx0KClgYCB0byBkcm9wIGl0IGR1cmluZyBmYXVsdCBoYW5kbGluZy4gSWYgdGhlIG1tYXAgbG9jayBpcwomIzQzO2Ryb3BwZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGBgLUVCVVNZYGAuIFRoZSBjYWxsZXIgbXVzdCB0aGVuIHJlc3RhcnQgdGhlCiYjNDM7d2FsayBmcm9tIGBgcmFuZ2UtJmd0O3N0YXJ0YGAgd2l0aCBhIGZyZXNoIG5vdGlmaWVyIHNlcXVlbmNlLiBgYC1FSU5UUmBgIGlzCiYjNDM7cmV0dXJuZWQgaWYgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZyBkdXJpbmcgcmV0cnkgaGFuZGxpbmcuCiYjNDM7CiYjNDM7QSB0eXBpY2FsIGNhbGxlciBsb29rcyBsaWtlIHRoaXM6OgomIzQzOwomIzQzOyBpbnQgZHJpdmVyX3BvcHVsYXRlX3JhbmdlX3VubG9ja2VkKC4uLikKJiM0MzsgewomIzQzOyAgICAgIHN0cnVjdCBobW1fcmFuZ2UgcmFuZ2U7CiYjNDM7ICAgICAgLi4uCiYjNDM7CiYjNDM7ICAgICAgcmFuZ2Uubm90aWZpZXIgPSAmYW1wO2ludGVydmFsX3N1YjsKJiM0MzsgICAgICByYW5nZS5zdGFydCA9IC4uLjsKJiM0MzsgICAgICByYW5nZS5lbmQgPSAuLi47CiYjNDM7ICAgICAgcmFuZ2UuaG1tX3BmbnMgPSAuLi47CiYjNDM7CiYjNDM7ICAgICAgaWYgKCFtbWdldF9ub3RfemVybyhpbnRlcnZhbF9zdWIubW0pKQomIzQzOyAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsgYWdhaW46CiYjNDM7ICAgICAgcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4oJmFtcDtpbnRlcnZhbF9zdWIpOwomIzQzOyAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgmYW1wO3JhbmdlKTsKJiM0MzsgICAgICBpZiAocmV0KSB7CiYjNDM7ICAgICAgICAgIGlmIChyZXQgPT0gLUVCVVNZKQomIzQzOyAgICAgICAgICAgICAgZ290byBhZ2FpbjsKJiM0MzsgICAgICAgICAgZ290byBvdXRfcHV0OwomIzQzOyAgICAgIH0KJiM0MzsKJiM0MzsgICAgICB0YWtlX2xvY2soZHJpdmVyLSZndDt1cGRhdGUpOwomIzQzOyAgICAgIGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeSgmYW1wO2ludGVydmFsX3N1YiwgcmFuZ2Uubm90aWZpZXJfc2VxKSkgewomIzQzOyAgICAgICAgICByZWxlYXNlX2xvY2soZHJpdmVyLSZndDt1cGRhdGUpOwomIzQzOyAgICAgICAgICBnb3RvIGFnYWluOwomIzQzOyAgICAgIH0KJiM0MzsKJiM0MzsgICAgICAvKiBVc2UgcGZucyBhcnJheSBjb250ZW50IHRvIHVwZGF0ZSBkZXZpY2UgcGFnZSB0YWJsZSwKJiM0MzsgICAgICAgKiB1bmRlciB0aGUgdXBkYXRlIGxvY2sgKi8KJiM0MzsKJiM0MzsgICAgICByZWxlYXNlX2xvY2soZHJpdmVyLSZndDt1cGRhdGUpOwomIzQzOyAgICAgIHJldCA9IDA7CiYjNDM7CiYjNDM7IG91dF9wdXQ6CiYjNDM7ICAgICAgbW1wdXQoaW50ZXJ2YWxfc3ViLm1tKTsKJiM0MzsgICAgICByZXR1cm4gcmV0OwomIzQzOyB9CiYjNDM7CiBMZXZlcmFnZSBkZWZhdWx0X2ZsYWdzIGFuZCBwZm5fZmxhZ3NfbWFzawogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYyBiL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMKaW5kZXggNmQ2NWU1YjQyMTUyOTUuLjA0Njc2ZjA2YzVjNzQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMKQEAgLTM4OCwxMyAmIzQzOzM4OCwxMSBAQCBpbnQgbXNodl9yZWdpb25fZ2V0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbikKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgc3RlcHM6CiAgKiAxLiBSZWFkcyB0aGUgbm90aWZpZXIgc2VxdWVuY2UgZm9yIHRoZSBITU0gcmFuZ2UuCi0gKiAyLiBBY3F1aXJlcyBhIHJlYWQgbG9jayBvbiB0aGUgbWVtb3J5IG1hcC4KLSAqIDMuIEhhbmRsZXMgSE1NIGZhdWx0cyBmb3IgdGhlIHNwZWNpZmllZCByYW5nZS4KLSAqIDQuIFJlbGVhc2VzIHRoZSByZWFkIGxvY2sgb24gdGhlIG1lbW9yeSBtYXAuCi0gKiA1LiBJZiBzdWNjZXNzZnVsLCBsb2NrcyB0aGUgbWVtb3J5IHJlZ2lvbiBtdXRleC4KLSAqIDYuIFZlcmlmaWVzIGlmIHRoZSBub3RpZmllciBzZXF1ZW5jZSBoYXMgY2hhbmdlZCBkdXJpbmcgdGhlIG9wZXJhdGlvbi4KJiM0MzsgKiAyLiBIYW5kbGVzIEhNTSBmYXVsdHMgZm9yIHRoZSBzcGVjaWZpZWQgcmFuZ2UuCiYjNDM7ICogMy4gSWYgc3VjY2Vzc2Z1bCwgbG9ja3MgdGhlIG1lbW9yeSByZWdpb24gbXV0ZXguCiYjNDM7ICogNC4gVmVyaWZpZXMgaWYgdGhlIG5vdGlmaWVyIHNlcXVlbmNlIGhhcyBjaGFuZ2VkIGR1cmluZyB0aGUgb3BlcmF0aW9uLgogICogICAgSWYgaXQgaGFzLCByZWxlYXNlcyB0aGUgbXV0ZXggYW5kIHJldHVybnMgLUVCVVNZIHRvIG1hdGNoIHdpdGgKLSAqICAgIGhtbV9yYW5nZV9mYXVsdCgpIHJldHVybiBjb2RlIGZvciByZXBlYXRpbmcuCiYjNDM7ICogICAgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKCkgc28gdGhlIGNhbGxlciByZXRyaWVzIHRoZSByYW5nZSBmYXVsdC4KICAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KICAqLwpAQCAtNDA0LDkgJiM0Mzs0MDIsNyBAQCBzdGF0aWMgaW50IG1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9jayhzdHJ1Y3QgbXNodl9tZW1fcmVnaW9uICpyZWdpb24sCiAJaW50IHJldDsKIAogCXJhbmdlLSZndDtub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS0mZ3Q7bm90aWZpZXIpOwotCW1tYXBfcmVhZF9sb2NrKHJlZ2lvbi0mZ3Q7bXJlZ19tbmkubW0pOwotCXJldCA9IGhtbV9yYW5nZV9mYXVsdChyYW5nZSk7Ci0JbW1hcF9yZWFkX3VubG9jayhyZWdpb24tJmd0O21yZWdfbW5pLm1tKTsKJiM0MzsJcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHJhbmdlKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2htbS5oIGIvaW5jbHVkZS9saW51eC9obW0uaAppbmRleCBkYjc1ZmZjOTQ5YTdhYy4uMWI1ODRlNWEyOTAwMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaG1tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9obW0uaApAQCAtMTIzLDYgJiM0MzsxMjMsNyBAQCBzdHJ1Y3QgaG1tX3JhbmdlIHsKICAqIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0IGZvciBob3cgdG8gdXNlIHRoZSByYW5nZSBBUEkuCiAgKi8KIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpOwomIzQzO2ludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpOwogCiAvKgogICogSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCAtIGRlZmF1bHQgdGltZW91dCAobXMpIHdoZW4gd2FpdGluZyBmb3IgYSByYW5nZQpkaWZmIC0tZ2l0IGEvbGliL3Rlc3RfaG1tLmMgYi9saWIvdGVzdF9obW0uYwppbmRleCA0NWMwY2I5OTIyMTg0YS4uZGNjM2EyM2JiOTgzZGMgMTAwNjQ0Ci0tLSBhL2xpYi90ZXN0X2htbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0X2htbS5jCkBAIC0zODksNiAmIzQzOzM4OSw3NiBAQCBzdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwKJiM0MzsJCQkJCXN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0KJiM0MzsJCWppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJd2hpbGUgKHRydWUpIHsKJiM0MzsJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CiYjNDM7CQkJcmV0ID0gLUVCVVNZOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmFuZ2UtJmd0O25vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKHJhbmdlLSZndDtub3RpZmllcik7CiYjNDM7CQlyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQocmFuZ2UpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWlmIChyZXQgPT0gLUVCVVNZKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtkbWlycm9yLSZndDttdXRleCk7CiYjNDM7CQlpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2UtJmd0O25vdGlmaWVyLAomIzQzOwkJCQkJICAgIHJhbmdlLSZndDtub3RpZmllcl9zZXEpKSB7CiYjNDM7CQkJbXV0ZXhfdW5sb2NrKCZhbXA7ZG1pcnJvci0mZ3Q7bXV0ZXgpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gZG1pcnJvcl9kb19mYXVsdChkbWlycm9yLCByYW5nZSk7CiYjNDM7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2RtaXJyb3ItJmd0O211dGV4KTsKJiM0MztvdXQ6CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZG1pcnJvcl9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwKJiM0MzsJCQkJICB1bnNpZ25lZCBsb25nIHN0YXJ0LAomIzQzOwkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHdyaXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBkbWlycm9yLSZndDtub3RpZmllci5tbTsKJiM0MzsJdW5zaWduZWQgbG9uZyBhZGRyOwomIzQzOwl1bnNpZ25lZCBsb25nIHBmbnNbMzJdOwomIzQzOwlzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlID0gewomIzQzOwkJLm5vdGlmaWVyID0gJmFtcDtkbWlycm9yLSZndDtub3RpZmllciwKJiM0MzsJCS5obW1fcGZucyA9IHBmbnMsCiYjNDM7CQkucGZuX2ZsYWdzX21hc2sgPSAwLAomIzQzOwkJLmRlZmF1bHRfZmxhZ3MgPQomIzQzOwkJCUhNTV9QRk5fUkVRX0ZBVUxUIHwgKHdyaXRlID8gSE1NX1BGTl9SRVFfV1JJVEUgOiAwKSwKJiM0MzsJCS5kZXZfcHJpdmF0ZV9vd25lciA9IGRtaXJyb3ItJmd0O21kZXZpY2UsCiYjNDM7CX07CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAoIW1tZ2V0X25vdF96ZXJvKG1tKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlmb3IgKGFkZHIgPSBzdGFydDsgYWRkciAmbHQ7IGVuZDsgYWRkciA9IHJhbmdlLmVuZCkgewomIzQzOwkJcmFuZ2Uuc3RhcnQgPSBhZGRyOwomIzQzOwkJcmFuZ2UuZW5kID0gbWluKGFkZHIgJiM0MzsgKEFSUkFZX1NJWkUocGZucykgJmx0OyZsdDsgUEFHRV9TSElGVCksIGVuZCk7CiYjNDM7CiYjNDM7CQlyZXQgPSBkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkKGRtaXJyb3IsICZhbXA7cmFuZ2UpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwltbXB1dChtbSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkbWlycm9yX2ZhdWx0KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHdyaXRlKQogewpAQCAtNDg4LDYgJiM0Mzs1NTgsNDcgQEAgc3RhdGljIGludCBkbWlycm9yX3JlYWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZCkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBkbWlycm9yX3JlYWRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsCiYjNDM7CQkJCSBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kICpjbWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZG1pcnJvcl9ib3VuY2UgYm91bmNlOwomIzQzOwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNtZC0mZ3Q7bnBhZ2VzICZsdDsmbHQ7IFBBR0VfU0hJRlQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXN0YXJ0ID0gY21kLSZndDthZGRyOwomIzQzOwllbmQgPSBzdGFydCAmIzQzOyBzaXplOwomIzQzOwlpZiAoZW5kICZsdDsgc3RhcnQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0ID0gZG1pcnJvcl9ib3VuY2VfaW5pdCgmYW1wO2JvdW5jZSwgc3RhcnQsIHNpemUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJd2hpbGUgKDEpIHsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtkbWlycm9yLSZndDttdXRleCk7CiYjNDM7CQlyZXQgPSBkbWlycm9yX2RvX3JlYWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgJmFtcDtib3VuY2UpOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7ZG1pcnJvci0mZ3Q7bXV0ZXgpOwomIzQzOwkJaWYgKHJldCAhPSAtRU5PRU5UKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJc3RhcnQgPSBjbWQtJmd0O2FkZHIgJiM0MzsgKGJvdW5jZS5jcGFnZXMgJmx0OyZsdDsgUEFHRV9TSElGVCk7CiYjNDM7CQlyZXQgPSBkbWlycm9yX2ZhdWx0X3VubG9ja2VkKGRtaXJyb3IsIHN0YXJ0LCBlbmQsIGZhbHNlKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljbWQtJmd0O2ZhdWx0cyYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJldCA9PSAwKSB7CiYjNDM7CQlpZiAoY29weV90b191c2VyKHU2NF90b191c2VyX3B0cihjbWQtJmd0O3B0ciksIGJvdW5jZS5wdHIsCiYjNDM7CQkJCSBib3VuY2Uuc2l6ZSkpCiYjNDM7CQkJcmV0ID0gLUVGQVVMVDsKJiM0MzsJfQomIzQzOwljbWQtJmd0O2NwYWdlcyA9IGJvdW5jZS5jcGFnZXM7CiYjNDM7CWRtaXJyb3JfYm91bmNlX2ZpbmkoJmFtcDtib3VuY2UpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZG1pcnJvcl9kb193cml0ZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IGRtaXJyb3JfYm91bmNlICpib3VuY2UpCiB7CkBAIC0xNTcyLDYgJiM0MzsxNjgzLDkgQEAgc3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCQlkbWlycm9yLSZndDtmbGFncyA9IGNtZC5ucGFnZXM7CiAJCXJldCA9IDA7CiAJCWJyZWFrOwomIzQzOwljYXNlIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRUQ6CiYjNDM7CQlyZXQgPSBkbWlycm9yX3JlYWRfdW5sb2NrZWQoZG1pcnJvciwgJmFtcDtjbWQpOwomIzQzOwkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2xpYi90ZXN0X2htbV91YXBpLmggYi9saWIvdGVzdF9obW1fdWFwaS5oCmluZGV4IGY5NGM2ZDQ1NzMzODI4Li5lYTliMGVjNDA0ZmI1NSAxMDA2NDQKLS0tIGEvbGliL3Rlc3RfaG1tX3VhcGkuaAomIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF9obW1fdWFwaS5oCkBAIC0zOCw2ICYjNDM7MzgsNyBAQCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kIHsKICNkZWZpbmUgSE1NX0RNSVJST1JfQ0hFQ0tfRVhDTFVTSVZFCV9JT1dSKCYjMzk7SCYjMzk7LCAweDA2LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKQogI2RlZmluZSBITU1fRE1JUlJPUl9SRUxFQVNFCQlfSU9XUigmIzM5O0gmIzM5OywgMHgwNywgc3RydWN0IGhtbV9kbWlycm9yX2NtZCkKICNkZWZpbmUgSE1NX0RNSVJST1JfRkxBR1MJCV9JT1dSKCYjMzk7SCYjMzk7LCAweDA4LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKQomIzQzOyNkZWZpbmUgSE1NX0RNSVJST1JfUkVBRF9VTkxPQ0tFRAlfSU9XUigmIzM5O0gmIzM5OywgMHgwOSwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCkKIAogI2RlZmluZSBITU1fRE1JUlJPUl9GTEFHX0ZBSUxfQUxMT0MJKDFVTEwgJmx0OyZsdDsgMCkKIApkaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uYwppbmRleCA0ZjNmNjI3ZDJiNDc3Mi4uMzE2MTE2OTk0MjA5YzggMTAwNjQ0Ci0tLSBhL21tL2htbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2htbS5jCkBAIC0zMiw5ICYjNDM7MzIsMjcgQEAKIAogc3RydWN0IGhtbV92bWFfd2FsayB7CiAJc3RydWN0IGhtbV9yYW5nZQkqcmFuZ2U7CiYjNDM7CWludAkJCSpsb2NrZWQ7CiAJdW5zaWduZWQgbG9uZwkJbGFzdDsKJiM0MzsJdW5zaWduZWQgbG9uZwkJZW5kOwomIzQzOwl1bnNpZ25lZCBpbnQJCXJlcXVpcmVkX2ZhdWx0OwogfTsKIAomIzQzOy8qCiYjNDM7ICogSW50ZXJuYWwgc2VudGluZWwgcmV0dXJuZWQgYnkgd2FsayBjYWxsYmFja3Mgd2hlbiB0aGV5IG5lZWQgYSBwYWdlIGZhdWx0LgomIzQzOyAqIFRoZSBjYWxsYmFjayBzdG9yZXMgZW5kL3JlcXVpcmVkX2ZhdWx0IGluIGhtbV92bWFfd2FsazsgdGhlIG91dGVyIGxvb3AKJiM0MzsgKiBjb25zdW1lcyB0aGUgc2VudGluZWwgYW5kIG5ldmVyIHByb3BhZ2F0ZXMgaXQgdG8gdGhlIGNhbGxlci4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEhNTV9GQVVMVF9QRU5ESU5HCS1FQUdBSU4KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEludGVybmFsIHNlbnRpbmVsIHJldHVybmVkIGJ5IGhtbV9kb19mYXVsdCgpIHdoZW4gaGFuZGxlX21tX2ZhdWx0KCkKJiM0MzsgKiBjb21wbGV0ZXMgYSBwYWdlIGZhdWx0IHdpdGggdGhlIG1tYXAgbG9jayBkcm9wcGVkLiBobW1fZG9fZmF1bHQoKSBzZXRzCiYjNDM7ICogKmxvY2tlZCA9IDA7IHRoZSBvdXRlciBsb29wIGNvbnN1bWVzIHRoZSBzZW50aW5lbCBhbmQgbmV2ZXIgcHJvcGFnYXRlcyBpdAomIzQzOyAqIHRvIHRoZSBjYWxsZXIuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBITU1fRkFVTFRfVU5MT0NLRUQJLUVOT0xDSwomIzQzOwogZW51bSB7CiAJSE1NX05FRURfRkFVTFQgPSAxICZsdDsmbHQ7IDAsCiAJSE1NX05FRURfV1JJVEVfRkFVTFQgPSAxICZsdDsmbHQ7IDEsCkBAIC02MCwzNyAmIzQzOzc4LDI1IEBAIHN0YXRpYyBpbnQgaG1tX3BmbnNfZmlsbCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogfQogCiAvKgotICogaG1tX3ZtYV9mYXVsdCgpIC0gZmF1bHQgaW4gYSByYW5nZSBsYWNraW5nIHZhbGlkIHBtZCBvciBwdGUocykKLSAqIEBhZGRyOiByYW5nZSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MgKGluY2x1c2l2ZSkKLSAqIEBlbmQ6IHJhbmdlIHZpcnR1YWwgZW5kIGFkZHJlc3MgKGV4Y2x1c2l2ZSkKLSAqIEByZXF1aXJlZF9mYXVsdDogSE1NX05FRURfKiBmbGFncwotICogQHdhbGs6IG1tX3dhbGsgc3RydWN0dXJlCi0gKiBSZXR1cm46IC1FQlVTWSBhZnRlciBwYWdlIGZhdWx0LCBvciBwYWdlIGZhdWx0IGVycm9yCiYjNDM7ICogaG1tX3JlY29yZF9mYXVsdCgpIC0gcmVjb3JkIGEgcmFuZ2UgdGhhdCBuZWVkcyB0byBiZSBmYXVsdGVkIGluCiAgKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBwbWRfbm9uZSgpIG9yIHB0ZV9ub25lKCkgcmV0dXJucyB0cnVlLAotICogb3Igd2hlbmV2ZXIgdGhlcmUgaXMgbm8gcGFnZSBkaXJlY3RvcnkgY292ZXJpbmcgdGhlIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KJiM0MzsgKiBDYWxsZWQgYnkgdGhlIHdhbGsgY2FsbGJhY2tzIHdoZW4gdGhleSBkaXNjb3ZlciB0aGF0IHBhcnQgb2YgdGhlIHJhbmdlCiYjNDM7ICogbmVlZHMgYSBwYWdlIGZhdWx0LiAgVGhlIGNhbGxiYWNrIHJlY29yZHMgd2hhdCB0byBmYXVsdCBhbmQgcmV0dXJucwomIzQzOyAqIEhNTV9GQVVMVF9QRU5ESU5HOyB0aGUgb3V0ZXIgbG9vcCBpbiBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKCkgZHJvcHMKJiM0MzsgKiBiYWNrIG91dCBvZiB3YWxrX3BhZ2VfcmFuZ2UoKSBhbmQgaW52b2tlcyBoYW5kbGVfbW1fZmF1bHQoKSBmcm9tIGEgY29udGV4dAomIzQzOyAqIHdoZXJlIG5vIHBhZ2UtdGFibGUgb3IgaHVnZXRsYl92bWFfbG9jayBpcyBoZWxkLgogICovCi1zdGF0aWMgaW50IGhtbV92bWFfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKLQkJCSB1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmF1bHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQomIzQzO3N0YXRpYyBpbnQgaG1tX3JlY29yZF9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAomIzQzOwkJCSAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmF1bHQsCiYjNDM7CQkJICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKQogewogCXN0cnVjdCBobW1fdm1hX3dhbGsgKmhtbV92bWFfd2FsayA9IHdhbGstJmd0O3ByaXZhdGU7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLSZndDt2bWE7Ci0JdW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzID0gRkFVTFRfRkxBR19SRU1PVEU7CiAKIAlXQVJOX09OX09OQ0UoIXJlcXVpcmVkX2ZhdWx0KTsKIAlobW1fdm1hX3dhbGstJmd0O2xhc3QgPSBhZGRyOwotCi0JaWYgKHJlcXVpcmVkX2ZhdWx0ICZhbXA7IEhNTV9ORUVEX1dSSVRFX0ZBVUxUKSB7Ci0JCWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fV1JJVEUpKQotCQkJcmV0dXJuIC1FUEVSTTsKLQkJZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19XUklURTsKLQl9Ci0KLQlmb3IgKDsgYWRkciAmbHQ7IGVuZDsgYWRkciAmIzQzOz0gUEFHRV9TSVpFKQotCQlpZiAoaGFuZGxlX21tX2ZhdWx0KHZtYSwgYWRkciwgZmF1bHRfZmxhZ3MsIE5VTEwpICZhbXA7Ci0JCSAgICBWTV9GQVVMVF9FUlJPUikKLQkJCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAtRUJVU1k7CiYjNDM7CWhtbV92bWFfd2Fsay0mZ3Q7ZW5kID0gZW5kOwomIzQzOwlobW1fdm1hX3dhbGstJmd0O3JlcXVpcmVkX2ZhdWx0ID0gcmVxdWlyZWRfZmF1bHQ7CiYjNDM7CXJldHVybiBITU1fRkFVTFRfUEVORElORzsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBobW1fcHRlX25lZWRfZmF1bHQoY29uc3Qgc3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrLApAQCAtMTc0LDcgJiM0MzsxODAsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19ob2xlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCXJldHVybiBobW1fcGZuc19maWxsKGFkZHIsIGVuZCwgcmFuZ2UsIEhNTV9QRk5fRVJST1IpOwogCX0KIAlpZiAocmVxdWlyZWRfZmF1bHQpCi0JCXJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwomIzQzOwkJcmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7CiAJcmV0dXJuIGhtbV9wZm5zX2ZpbGwoYWRkciwgZW5kLCByYW5nZSwgMCk7CiB9CiAKQEAgLTIwOSw3ICYjNDM7MjE1LDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlyZXF1aXJlZF9mYXVsdCA9CiAJCWhtbV9yYW5nZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgaG1tX3BmbnMsIG5wYWdlcywgY3B1X2ZsYWdzKTsKIAlpZiAocmVxdWlyZWRfZmF1bHQpCi0JCXJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwomIzQzOwkJcmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7CiAKIAlwZm4gPSBwbWRfcGZuKHBtZCkgJiM0MzsgKChhZGRyICZhbXA7IH5QTURfTUFTSykgJmd0OyZndDsgUEFHRV9TSElGVCk7CiAJZm9yIChpID0gMDsgYWRkciAmbHQ7IGVuZDsgYWRkciAmIzQzOz0gUEFHRV9TSVpFLCBpJiM0MzsmIzQzOywgcGZuJiM0MzsmIzQzOykgewpAQCAtMzI4LDcgJiM0MzszMzQsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLAogZmF1bHQ6CiAJcHRlX3VubWFwKHB0ZXApOwogCS8qIEZhdWx0IGFueSB2aXJ0dWFsIGFkZHJlc3Mgd2Ugd2VyZSBhc2tlZCB0byBmYXVsdCAqLwotCXJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwomIzQzOwlyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTsKIH0KIAogI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRgpAQCAtMzcxLDcgJiM0MzszNzcsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX2Fic2VudF9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQkJCSAgICAgIG5wYWdlcywgMCk7CiAJaWYgKHJlcXVpcmVkX2ZhdWx0KSB7CiAJCWlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpCi0JCQlyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTsKJiM0MzsJCQlyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTsKIAkJZWxzZQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpAQCAtNTE3LDcgJiM0Mzs1MjMsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19wdWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJCQkJICAgICAgbnBhZ2VzLCBjcHVfZmxhZ3MpOwogCQlpZiAocmVxdWlyZWRfZmF1bHQpIHsKIAkJCXNwaW5fdW5sb2NrKHB0bCk7Ci0JCQlyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTsKJiM0MzsJCQlyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTsKIAkJfQogCiAJCXBmbiA9IHB1ZF9wZm4ocHVkKSAmIzQzOyAoKGFkZHIgJmFtcDsgflBVRF9NQVNLKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKQEAgLTU2NCwyMSAmIzQzOzU3MCw4IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzaywKIAlyZXF1aXJlZF9mYXVsdCA9CiAJCWhtbV9wdGVfbmVlZF9mYXVsdChobW1fdm1hX3dhbGssIHBmbl9yZXFfZmxhZ3MsIGNwdV9mbGFncyk7CiAJaWYgKHJlcXVpcmVkX2ZhdWx0KSB7Ci0JCWludCByZXQ7Ci0KIAkJc3Bpbl91bmxvY2socHRsKTsKLQkJaHVnZXRsYl92bWFfdW5sb2NrX3JlYWQodm1hKTsKLQkJLyoKLQkJICogQXZvaWQgZGVhZGxvY2s6IGRyb3AgdGhlIHZtYSBsb2NrIGJlZm9yZSBjYWxsaW5nCi0JCSAqIGhtbV92bWFfZmF1bHQoKSwgd2hpY2ggd2lsbCBpdHNlbGYgcG90ZW50aWFsbHkgdGFrZSBhbmQKLQkJICogZHJvcCB0aGUgdm1hIGxvY2suIFRoaXMgaXMgYWxzbyBjb3JyZWN0IGZyb20gYQotCQkgKiBwcm90ZWN0aW9uIHBvaW50IG9mIHZpZXcsIGJlY2F1c2UgdGhlcmUgaXMgbm8gZnVydGhlcgotCQkgKiB1c2UgaGVyZSBvZiBlaXRoZXIgcHRlIG9yIHB0bCBhZnRlciBkcm9wcGluZyB0aGUgdm1hCi0JCSAqIGxvY2suCi0JCSAqLwotCQlyZXQgPSBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwotCQlodWdldGxiX3ZtYV9sb2NrX3JlYWQodm1hKTsKLQkJcmV0dXJuIHJldDsKJiM0MzsJCXJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwogCX0KIAogCXBmbiA9IHB0ZV9wZm4oZW50cnkpICYjNDM7ICgoc3RhcnQgJmFtcDsgfmhtYXNrKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKQEAgLTYzNywyOSAmIzQzOzYzMCw2NiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGhtbV93YWxrX29wcyA9IHsKIAkud2Fsa19sb2NrCT0gUEdXQUxLX1JETE9DSywKIH07CiAKLS8qKgotICogaG1tX3JhbmdlX2ZhdWx0IC0gdHJ5IHRvIGZhdWx0IHNvbWUgYWRkcmVzcyBpbiBhIHZpcnR1YWwgYWRkcmVzcyByYW5nZQotICogQHJhbmdlOglhcmd1bWVudCBzdHJ1Y3R1cmUKLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczoKJiM0MzsvKgomIzQzOyAqIGhtbV9kb19mYXVsdCAtIGZhdWx0IGluIGEgcmFuZ2UgcmVjb3JkZWQgYnkgYSB3YWxrIGNhbGxiYWNrCiAgKgotICogLUVJTlZBTDoJSW52YWxpZCBhcmd1bWVudHMgb3IgbW0gb3IgdmlydHVhbCBhZGRyZXNzIGlzIGluIGFuIGludmFsaWQgdm1hCi0gKgkJKGUuZy4sIGRldmljZSBmaWxlIHZtYSkuCi0gKiAtRU5PTUVNOglPdXQgb2YgbWVtb3J5LgotICogLUVQRVJNOglJbnZhbGlkIHBlcm1pc3Npb24gKGUuZy4sIGFza2luZyBmb3Igd3JpdGUgYW5kIHJhbmdlIGlzIHJlYWQKLSAqCQlvbmx5KS4KLSAqIC1FQlVTWToJVGhlIHJhbmdlIGhhcyBiZWVuIGludmFsaWRhdGVkIGFuZCB0aGUgY2FsbGVyIG5lZWRzIHRvIHdhaXQgZm9yCi0gKgkJdGhlIGludmFsaWRhdGlvbiB0byBmaW5pc2guCi0gKiAtRUZBVUxUOiAgICAgQSBwYWdlIHdhcyByZXF1ZXN0ZWQgdG8gYmUgdmFsaWQgYW5kIGNvdWxkIG5vdCBiZSBtYWRlIHZhbGlkCi0gKiAgICAgICAgICAgICAgaWUgaXQgaGFzIG5vIGJhY2tpbmcgVk1BIG9yIGl0IGlzIGlsbGVnYWwgdG8gYWNjZXNzCiYjNDM7ICogQ2FsbGVkIGZyb20gdGhlIG91dGVyIGxvb3AgaW4gaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZCgpIGFmdGVyIGEgY2FsbGJhY2sKJiM0MzsgKiByZXR1cm5lZCBITU1fRkFVTFRfUEVORElORy4gIEF0IHRoaXMgcG9pbnQgd2UgaG9sZCBvbmx5IG1tYXBfbG9jazsKJiM0MzsgKiB0aGUgcGFnZS10YWJsZSBzcGlubG9jayBhbmQgYW55IGh1Z2V0bGJfdm1hX2xvY2sgYWNxdWlyZWQgYnkgdGhlIHdhbGsKJiM0MzsgKiBmcmFtZXdvcmsgaGF2ZSBhbHJlYWR5IGJlZW4gcmVsZWFzZWQgYnkgdGhlIHVud2luZC4KICAqCi0gKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ2V0X3VzZXJfcGFnZXMoKSwgZXhjZXB0IHRoYXQgaXQgY2FuIHJlYWQgdGhlIHBhZ2UgdGFibGVzCi0gKiB3aXRob3V0IG11dGF0aW5nIHRoZW0gKGllIGNhdXNpbmcgZmF1bHRzKS4KJiM0MzsgKiBSZXR1cm5zIC1FQlVTWSBvbiBzdWNjZXNzIChhbGwgcGFnZXMgZmF1bHRlZCwgY2FsbGVyIHNob3VsZCByZS13YWxrKS4KJiM0MzsgKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KICAqLwotaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSkKJiM0MztzdGF0aWMgaW50IGhtbV9kb19mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCQlzdHJ1Y3QgaG1tX3ZtYV93YWxrICpobW1fdm1hX3dhbGspCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGFkZHIgPSBobW1fdm1hX3dhbGstJmd0O2xhc3Q7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW5kID0gaG1tX3ZtYV93YWxrLSZndDtlbmQ7CiYjNDM7CXVuc2lnbmVkIGludCByZXF1aXJlZF9mYXVsdCA9IGhtbV92bWFfd2Fsay0mZ3Q7cmVxdWlyZWRfZmF1bHQ7CiYjNDM7CXVuc2lnbmVkIGludCBmYXVsdF9mbGFncyA9IEZBVUxUX0ZMQUdfUkVNT1RFOwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKJiM0MzsKJiM0MzsJaWYgKGhtbV92bWFfd2Fsay0mZ3Q7bG9ja2VkKQomIzQzOwkJZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19BTExPV19SRVRSWSB8IEZBVUxUX0ZMQUdfS0lMTEFCTEU7CiYjNDM7CiYjNDM7CXZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpOwomIzQzOwlpZiAoIXZtYSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlpZiAocmVxdWlyZWRfZmF1bHQgJmFtcDsgSE1NX05FRURfV1JJVEVfRkFVTFQpIHsKJiM0MzsJCWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fV1JJVEUpKQomIzQzOwkJCXJldHVybiAtRVBFUk07CiYjNDM7CQlmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoOyBhZGRyICZsdDsgZW5kOyBhZGRyICYjNDM7PSBQQUdFX1NJWkUpIHsKJiM0MzsJCXZtX2ZhdWx0X3QgcmV0OwomIzQzOwomIzQzOwkJcmV0ID0gaGFuZGxlX21tX2ZhdWx0KHZtYSwgYWRkciwgZmF1bHRfZmxhZ3MsIE5VTEwpOwomIzQzOwomIzQzOwkJaWYgKHJldCAmYW1wOyAoVk1fRkFVTFRfQ09NUExFVEVEIHwgVk1fRkFVTFRfUkVUUlkpKSB7CiYjNDM7CQkJKmhtbV92bWFfd2Fsay0mZ3Q7bG9ja2VkID0gMDsKJiM0MzsJCQlyZXR1cm4gSE1NX0ZBVUxUX1VOTE9DS0VEOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHJldCAmYW1wOyBWTV9GQVVMVF9FUlJPUikgewomIzQzOwkJCWludCBlcnIgPSB2bV9mYXVsdF90b19lcnJubyhyZXQsIDApOwomIzQzOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiYjNDM7CQkJQlVHKCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FQlVTWTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLCBpbnQgKmxvY2tlZCkKIHsKIAlzdHJ1Y3QgaG1tX3ZtYV93YWxrIGhtbV92bWFfd2FsayA9IHsKIAkJLnJhbmdlID0gcmFuZ2UsCiYjNDM7CQkubG9ja2VkID0gbG9ja2VkLAogCQkubGFzdCA9IHJhbmdlLSZndDtzdGFydCwKIAl9OwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtJmd0O25vdGlmaWVyLSZndDttbTsKQEAgLTY3NCw2ICYjNDM7NzA0LDIyIEBAIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCiAJCQlyZXR1cm4gLUVCVVNZOwogCQlyZXQgPSB3YWxrX3BhZ2VfcmFuZ2UobW0sIGhtbV92bWFfd2Fsay5sYXN0LCByYW5nZS0mZ3Q7ZW5kLAogCQkJCSAgICAgICZhbXA7aG1tX3dhbGtfb3BzLCAmYW1wO2htbV92bWFfd2Fsayk7CiYjNDM7CQkvKgomIzQzOwkJICogV2hlbiBITU1fRkFVTFRfUEVORElORyBpcyByZXR1cm5lZCBhIHdhbGsgY2FsbGJhY2sKJiM0MzsJCSAqIHJlY29yZGVkIGEgcmFuZ2UgdGhhdCBuZWVkcyBoYW5kbGVfbW1fZmF1bHQoKTsKJiM0MzsJCSAqIGhtbV9kb19mYXVsdCgpIHJ1bnMgdGhlIGZhdWx0IG91dHNpZGUgd2Fsa19wYWdlX3JhbmdlKCkKJiM0MzsJCSAqIChzbyBubyBwYWdlLXRhYmxlIG9yIGh1Z2V0bGJfdm1hX2xvY2sgaXMgaGVsZCkgYW5kCiYjNDM7CQkgKiByZXR1cm5zIC1FQlVTWSBzbyB0aGUgbG9vcCByZS13YWxrcyBhbmQgcGlja3MgdXAgdGhlCiYjNDM7CQkgKiBub3ctcHJlc2VudCBlbnRyaWVzLgomIzQzOwkJICovCiYjNDM7CQlpZiAocmV0ID09IEhNTV9GQVVMVF9QRU5ESU5HKSB7CiYjNDM7CQkJcmV0ID0gaG1tX2RvX2ZhdWx0KG1tLCAmYW1wO2htbV92bWFfd2Fsayk7CiYjNDM7CQkJaWYgKHJldCA9PSBITU1fRkFVTFRfVU5MT0NLRUQpIHsKJiM0MzsJCQkJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQomIzQzOwkJCQkJcmV0dXJuIC1FSU5UUjsKJiM0MzsJCQkJcmV0dXJuIC1FQlVTWTsKJiM0MzsJCQl9CiYjNDM7CQl9CiAJCS8qCiAJCSAqIFdoZW4gLUVCVVNZIGlzIHJldHVybmVkIHRoZSBsb29wIHJlc3RhcnRzIHdpdGgKIAkJICogaG1tX3ZtYV93YWxrLmxhc3Qgc2V0IHRvIGFuIGFkZHJlc3MgdGhhdCBoYXMgbm90IGJlZW4gc3RvcmVkCkBAIC02ODMsOCAmIzQzOzcyOSw2NSBAQCBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQogCX0gd2hpbGUgKHJldCA9PSAtRUJVU1kpOwogCXJldHVybiByZXQ7CiB9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogaG1tX3JhbmdlX2ZhdWx0IC0gdHJ5IHRvIGZhdWx0IHNvbWUgYWRkcmVzcyBpbiBhIHZpcnR1YWwgYWRkcmVzcyByYW5nZQomIzQzOyAqIEByYW5nZToJYXJndW1lbnQgc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczoKJiM0MzsgKgomIzQzOyAqIC1FSU5WQUw6CUludmFsaWQgYXJndW1lbnRzIG9yIG1tIG9yIHZpcnR1YWwgYWRkcmVzcyBpcyBpbiBhbiBpbnZhbGlkIHZtYQomIzQzOyAqCQkoZS5nLiwgZGV2aWNlIGZpbGUgdm1hKS4KJiM0MzsgKiAtRU5PTUVNOglPdXQgb2YgbWVtb3J5LgomIzQzOyAqIC1FUEVSTToJSW52YWxpZCBwZXJtaXNzaW9uIChlLmcuLCBhc2tpbmcgZm9yIHdyaXRlIGFuZCByYW5nZSBpcyByZWFkCiYjNDM7ICoJCW9ubHkpLgomIzQzOyAqIC1FQlVTWToJVGhlIHJhbmdlIGhhcyBiZWVuIGludmFsaWRhdGVkIGFuZCB0aGUgY2FsbGVyIG5lZWRzIHRvIHdhaXQgZm9yCiYjNDM7ICoJCXRoZSBpbnZhbGlkYXRpb24gdG8gZmluaXNoLgomIzQzOyAqIC1FRkFVTFQ6ICAgICBBIHBhZ2Ugd2FzIHJlcXVlc3RlZCB0byBiZSB2YWxpZCBhbmQgY291bGQgbm90IGJlIG1hZGUgdmFsaWQKJiM0MzsgKiAgICAgICAgICAgICAgaWUgaXQgaGFzIG5vIGJhY2tpbmcgVk1BIG9yIGl0IGlzIGlsbGVnYWwgdG8gYWNjZXNzCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ2V0X3VzZXJfcGFnZXMoKSwgZXhjZXB0IHRoYXQgaXQgY2FuIHJlYWQgdGhlIHBhZ2UgdGFibGVzCiYjNDM7ICogd2l0aG91dCBtdXRhdGluZyB0aGVtIChpZSBjYXVzaW5nIGZhdWx0cykuCiYjNDM7ICoKJiM0MzsgKiBUaGUgbW1hcCBsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIGFuZCB3aWxsIHJlbWFpbiBoZWxkIG9uIHJldHVybi4KJiM0MzsgKiBGb3IgYSB2YXJpYW50IHRoYXQgYWxsb3dzIHRoZSBtbWFwIGxvY2sgdG8gYmUgZHJvcHBlZCBkdXJpbmcgZmF1bHRzIChlLmcuLAomIzQzOyAqIGZvciB1c2VyZmF1bHRmZCBzdXBwb3J0KSwgc2VlIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpLgomIzQzOyAqLwomIzQzO2ludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChyYW5nZSwgTlVMTCk7CiYjNDM7fQogRVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHQpOwogCiYjNDM7LyoqCiYjNDM7ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkIC0gZmF1bHQgaW4gYSByYW5nZSwgcG9zc2libHkgZHJvcHBpbmcgdGhlIG1tYXAgbG9jawomIzQzOyAqIEByYW5nZToJYXJndW1lbnQgc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGlzIHNpbWlsYXIgdG8gaG1tX3JhbmdlX2ZhdWx0KCksIGV4Y2VwdCB0aGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgdGhlCiYjNDM7ICogbW1hcCBsb2NrLiBUaGUgZnVuY3Rpb24gdGFrZXMgdGhlIG1tYXAgcmVhZCBsb2NrIGludGVybmFsbHkgYW5kIGFsbG93cwomIzQzOyAqIGhhbmRsZV9tbV9mYXVsdCgpIHRvIGRyb3AgaXQgZHVyaW5nIGZhdWx0cy4gSWYgdGhlIGxvY2sgaXMgZHJvcHBlZCwgdGhlCiYjNDM7ICogZnVuY3Rpb24gcmV0dXJucyAtRUJVU1kgYW5kIHRoZSBjYWxsZXIgbXVzdCByZXN0YXJ0IHRoZSB3YWxrIHdpdGggYSBmcmVzaAomIzQzOyAqIG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKCkgc2VxdWVuY2UuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBvbmUgb2YgdGhlIGVycm9yIGNvZGVzIGRvY3VtZW50ZWQgZm9yCiYjNDM7ICogaG1tX3JhbmdlX2ZhdWx0KCkuIC1FSU5UUiBpcyByZXR1cm5lZCBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nIGR1cmluZwomIzQzOyAqIHJldHJ5IGhhbmRsaW5nLgomIzQzOyAqLwomIzQzO2ludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJhbmdlLSZndDtub3RpZmllci0mZ3Q7bW07CiYjNDM7CWludCBsb2NrZWQgPSAxOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltbWFwX3JlYWRfbG9jayhtbSk7CiYjNDM7CXJldCA9IGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQocmFuZ2UsICZhbXA7bG9ja2VkKTsKJiM0MzsJaWYgKGxvY2tlZCkKJiM0MzsJCW1tYXBfcmVhZF91bmxvY2sobW0pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCk7CiYjNDM7CiAvKioKICAqIGhtbV9kbWFfbWFwX2FsbG9jIC0gQWxsb2NhdGUgSE1NIG1hcCBzdHJ1Y3R1cmUKICAqIEBkZXY6IGRldmljZSB0byBhbGxvY2F0ZSBzdHJ1Y3R1cmUgZm9yCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jCmluZGV4IDJmMmI5ODc5ZDEwMDUxLi43MTc2NWM0ZDgwZjNlNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKQEAgLTI5LDYgJiM0MzsyOSwxMCBAQAogI2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL2lvY3RsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N5c2NhbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL2V2ZW50ZmQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdXNlcmZhdWx0ZmQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7cG9sbC5oJmd0OwogCiAvKgogICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbiYjMzk7dCBleHBvcnRlZApAQCAtMjk0OSw0ICYjNDM7Mjk1MywxNDkgQEAgVEVTVF9GX1RJTUVPVVQoaG1tLCBiZW5jaG1hcmtfdGhwX21pZ3JhdGlvbiwgMTIwKQogCQkJCQkmYW1wO3RocF9yZXN1bHRzLCAmYW1wO3JlZ3VsYXJfcmVzdWx0cyk7CiAJfQogfQomIzQzOy8qCiYjNDM7ICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZQomIzQzOyAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpIHBhdGguIFRoaXMgZXhlcmNpc2VzIHRoZSBsb2NrLWRyb3AgcmV0cnkKJiM0MzsgKiBsb2dpYyBpbiB0aGUgSE1NIGZyYW1ld29yay4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgdWZmZF90aHJlYWRfYXJncyB7CiYjNDM7CWludCB1ZmZkOwomIzQzOwlpbnQgc3RvcF9mZDsKJiM0MzsJdm9pZCAqcGFnZV9idWZmZXI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcGFnZV9zaXplOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKnVmZmRfaGFuZGxlcl90aHJlYWQodm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJc3RydWN0IHVmZmRfdGhyZWFkX2FyZ3MgKmFyZ3MgPSBhcmc7CiYjNDM7CXN0cnVjdCB1ZmZkX21zZyBtc2c7CiYjNDM7CXN0cnVjdCB1ZmZkaW9fY29weSBjb3B5OwomIzQzOwlzdHJ1Y3QgcG9sbGZkIHBvbGxmZFsyXTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcG9sbGZkWzBdLmZkID0gYXJncy0mZ3Q7dWZmZDsKJiM0MzsJcG9sbGZkWzBdLmV2ZW50cyA9IFBPTExJTjsKJiM0MzsJcG9sbGZkWzFdLmZkID0gYXJncy0mZ3Q7c3RvcF9mZDsKJiM0MzsJcG9sbGZkWzFdLmV2ZW50cyA9IFBPTExJTjsKJiM0MzsKJiM0MzsJd2hpbGUgKDEpIHsKJiM0MzsJCXJldCA9IHBvbGwocG9sbGZkLCAyLCAtMSk7CiYjNDM7CQlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlpZiAocG9sbGZkWzFdLnJldmVudHMpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlpZiAoIShwb2xsZmRbMF0ucmV2ZW50cyAmYW1wOyBQT0xMSU4pKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJcmV0ID0gcmVhZChhcmdzLSZndDt1ZmZkLCAmYW1wO21zZywgc2l6ZW9mKG1zZykpOwomIzQzOwkJaWYgKHJldCAhPSBzaXplb2YobXNnKSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWlmIChtc2cuZXZlbnQgIT0gVUZGRF9FVkVOVF9QQUdFRkFVTFQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBGaWxsIHRoZSBwYWdlIHdpdGggYSBrbm93biBwYXR0ZXJuICovCiYjNDM7CQltZW1zZXQoYXJncy0mZ3Q7cGFnZV9idWZmZXIsIDB4QUIsIGFyZ3MtJmd0O3BhZ2Vfc2l6ZSk7CiYjNDM7CiYjNDM7CQljb3B5LmRzdCA9IG1zZy5hcmcucGFnZWZhdWx0LmFkZHJlc3MgJmFtcDsgfihhcmdzLSZndDtwYWdlX3NpemUgLSAxKTsKJiM0MzsJCWNvcHkuc3JjID0gKHVuc2lnbmVkIGxvbmcpYXJncy0mZ3Q7cGFnZV9idWZmZXI7CiYjNDM7CQljb3B5LmxlbiA9IGFyZ3MtJmd0O3BhZ2Vfc2l6ZTsKJiM0MzsJCWNvcHkubW9kZSA9IDA7CiYjNDM7CQljb3B5LmNvcHkgPSAwOwomIzQzOwomIzQzOwkJcmV0ID0gaW9jdGwoYXJncy0mZ3Q7dWZmZCwgVUZGRElPX0NPUFksICZhbXA7Y29weSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGhtbSwgdXNlcmZhdWx0ZmRfcmVhZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBobW1fYnVmZmVyICpidWZmZXI7CiYjNDM7CXN0cnVjdCB1ZmZkX3RocmVhZF9hcmdzIHVmZmRfYXJnczsKJiM0MzsJdW5zaWduZWQgbG9uZyBucGFnZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwomIzQzOwl1bnNpZ25lZCBjaGFyICpwdHI7CiYjNDM7CXB0aHJlYWRfdCB0aHJlYWQ7CiYjNDM7CWludCB1ZmZkOwomIzQzOwlpbnQgc3RvcF9mZDsKJiM0MzsJaW50IHJldDsKJiM0MzsJc3RydWN0IHVmZmRpb19hcGkgYXBpOwomIzQzOwlzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHJlZzsKJiM0MzsJdWludDY0X3Qgc3RvcCA9IDE7CiYjNDM7CXNzaXplX3QgbndyaXRlOwomIzQzOwomIzQzOwlucGFnZXMgPSA0OwomIzQzOwlzaXplID0gbnBhZ2VzICZsdDsmbHQ7IHNlbGYtJmd0O3BhZ2Vfc2hpZnQ7CiYjNDM7CiYjNDM7CS8qIENyZWF0ZSB1c2VyZmF1bHRmZCAqLwomIzQzOwl1ZmZkID0gc3lzY2FsbChfX05SX3VzZXJmYXVsdGZkLCBPX0NMT0VYRUMgfCBPX05PTkJMT0NLKTsKJiM0MzsJaWYgKHVmZmQgJmx0OyAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7dXNlcmZhdWx0ZmQgbm90IGF2YWlsYWJsZSYjMzQ7KTsKJiM0MzsKJiM0MzsJYXBpLmFwaSA9IFVGRkRfQVBJOwomIzQzOwlhcGkuZmVhdHVyZXMgPSAwOwomIzQzOwlyZXQgPSBpb2N0bCh1ZmZkLCBVRkZESU9fQVBJLCAmYW1wO2FwaSk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwomIzQzOwomIzQzOwlidWZmZXIgPSBtYWxsb2Moc2l6ZW9mKCpidWZmZXIpKTsKJiM0MzsJQVNTRVJUX05FKGJ1ZmZlciwgTlVMTCk7CiYjNDM7CiYjNDM7CWJ1ZmZlci0mZ3Q7ZmQgPSAtMTsKJiM0MzsJYnVmZmVyLSZndDtzaXplID0gc2l6ZTsKJiM0MzsJYnVmZmVyLSZndDttaXJyb3IgPSBtYWxsb2Moc2l6ZSk7CiYjNDM7CUFTU0VSVF9ORShidWZmZXItJmd0O21pcnJvciwgTlVMTCk7CiYjNDM7CiYjNDM7CS8qIENyZWF0ZSBhbm9ueW1vdXMgbWFwcGluZyAqLwomIzQzOwlidWZmZXItJmd0O3B0ciA9IG1tYXAoTlVMTCwgc2l6ZSwKJiM0MzsJCQkgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJCSAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywKJiM0MzsJCQkgICAtMSwgMCk7CiYjNDM7CUFTU0VSVF9ORShidWZmZXItJmd0O3B0ciwgTUFQX0ZBSUxFRCk7CiYjNDM7CiYjNDM7CS8qIFJlZ2lzdGVyIHRoZSByZWdpb24gd2l0aCB1c2VyZmF1bHRmZCAqLwomIzQzOwlyZWcucmFuZ2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZylidWZmZXItJmd0O3B0cjsKJiM0MzsJcmVnLnJhbmdlLmxlbiA9IHNpemU7CiYjNDM7CXJlZy5tb2RlID0gVUZGRElPX1JFR0lTVEVSX01PREVfTUlTU0lORzsKJiM0MzsJcmV0ID0gaW9jdGwodWZmZCwgVUZGRElPX1JFR0lTVEVSLCAmYW1wO3JlZyk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwomIzQzOwomIzQzOwkvKiBTZXQgdXAgdGhlIGhhbmRsZXIgdGhyZWFkICovCiYjNDM7CXVmZmRfYXJncy51ZmZkID0gdWZmZDsKJiM0MzsJc3RvcF9mZCA9IGV2ZW50ZmQoMCwgRUZEX0NMT0VYRUMpOwomIzQzOwlBU1NFUlRfR0Uoc3RvcF9mZCwgMCk7CiYjNDM7CXVmZmRfYXJncy5zdG9wX2ZkID0gc3RvcF9mZDsKJiM0MzsJdWZmZF9hcmdzLnBhZ2VfYnVmZmVyID0gbWFsbG9jKHNlbGYtJmd0O3BhZ2Vfc2l6ZSk7CiYjNDM7CUFTU0VSVF9ORSh1ZmZkX2FyZ3MucGFnZV9idWZmZXIsIE5VTEwpOwomIzQzOwl1ZmZkX2FyZ3MucGFnZV9zaXplID0gc2VsZi0mZ3Q7cGFnZV9zaXplOwomIzQzOwomIzQzOwlyZXQgPSBwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgTlVMTCwgdWZmZF9oYW5kbGVyX3RocmVhZCwgJmFtcDt1ZmZkX2FyZ3MpOwomIzQzOwlBU1NFUlRfRVEocmV0LCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVXNlIHRoZSB1bmxvY2tlZCByZWFkIHBhdGggd2hpY2ggYWxsb3dzIHRoZSBtbWFwIGxvY2sgdG8gYmUKJiM0MzsJICogZHJvcHBlZCBkdXJpbmcgdGhlIGZhdWx0LCBlbmFibGluZyB1c2VyZmF1bHRmZCByZXNvbHV0aW9uLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtJmd0O2ZkLCBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VELAomIzQzOwkJCSAgICAgIGJ1ZmZlciwgbnBhZ2VzKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMCk7CiYjNDM7CUFTU0VSVF9FUShidWZmZXItJmd0O2NwYWdlcywgbnBhZ2VzKTsKJiM0MzsKJiM0MzsJLyogVmVyaWZ5IHRoZSBkZXZpY2UgcmVhZCB0aGUgZGF0YSBmaWxsZWQgYnkgdGhlIHVmZmQgaGFuZGxlciAqLwomIzQzOwlwdHIgPSBidWZmZXItJmd0O21pcnJvcjsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHNpemU7ICYjNDM7JiM0MztpKQomIzQzOwkJQVNTRVJUX0VRKHB0cltpXSwgKHVuc2lnbmVkIGNoYXIpMHhBQik7CiYjNDM7CiYjNDM7CW53cml0ZSA9IHdyaXRlKHN0b3BfZmQsICZhbXA7c3RvcCwgc2l6ZW9mKHN0b3ApKTsKJiM0MzsJQVNTRVJUX0VRKG53cml0ZSwgc2l6ZW9mKHN0b3ApKTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7CiYjNDM7CWNsb3NlKHN0b3BfZmQpOwomIzQzOwlmcmVlKHVmZmRfYXJncy5wYWdlX2J1ZmZlcik7CiYjNDM7CWNsb3NlKHVmZmQpOwomIzQzOwlobW1fYnVmZmVyX2ZyZWUoYnVmZmVyKTsKJiM0Mzt9CiYjNDM7CiBURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYxMAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBITU0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgSE1NIHBhdGNoLCBhbmQgaXQgc2VlbXMgbGlrZSBhIGZhaXJseSB0YXJnZXRlZCBjaGFuZ2UuIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhbGxvd2luZyB1cyB0byBkcm9wIHRoZSBtbWFwIGxvY2sgZHVyaW5nIHBhZ2UgZmF1bHRzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKClgIGZ1bmN0aW9uIGlzIHRoZSBrZXksIGFuZCBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSBiZW5lZmljaWFsIGZvciByZWdpb25zIG1hbmFnZWQgYnkgYHVzZXJmYXVsdGZkYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIE1pbmltaXppbmcgbG9jayBjb250ZW50aW9uIGR1cmluZyBmYXVsdCBoYW5kbGluZyBpcyBhbHdheXMgYSBnb29kIHRoaW5nLCBlc3BlY2lhbGx5IGluIHRoaXMgY29udGV4dC4KClRoZSBwYXRjaCB0b3VjaGVzIGEgZ29vZCBudW1iZXIgb2YgZmlsZXM6IGBtbS9obW0uY2AsIHRoZSBpbmNsdWRlIGZpbGVzLCB0aGUgdGVzdCBjb2RlIChgbGliL3Rlc3RfaG1tLmNgKSwgdGhlIEh5cGVyLVYgZHJpdmVyIChgZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuY2ApLCBhbmQgYSBzZWxmLXRlc3QuIFRoaXMgaW5kaWNhdGVzIGEgZ29vZCBsZXZlbCBvZiBzY29wZSBhbmQgaW1wYWN0LCB0b3VjaGluZyBib3RoIGNvcmUgSE1NIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZSByZWxldmFudCB1c2VyIHNwYWNlIGludGVyZmFjZXMgYW5kIGRyaXZlcnMuCgpGdW5jdGlvbmFsbHksIHRoaXMgbG9va3Mgc291bmQuIFdlJiMzOTt2ZSBnb3QgdGhlIG5ldyBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkYCBBUEksIGFuZCB0aGUgZXhpc3RpbmcgYGhtbV9yYW5nZV9mYXVsdGAgaGFzIGJlZW4gcmV3b3JrZWQgdG8gdXRpbGl6ZSBhIGNvbW1vbiBpbnRlcm5hbCBmdW5jdGlvbi4gVGhlIEh5cGVyLVYgZHJpdmVyIChgbXNodl9yZWdpb25zLmNgKSBpcyB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IEFQSSwgc28gd2UgaGF2ZSBhIGNvbmNyZXRlIHVzZSBjYXNlLiBBbmQsIGltcG9ydGFudGx5LCB0aGVyZSYjMzk7cyBhIG5ldyBgSE1NX0RNSVJST1JfUkVBRF9VTkxPQ0tFRGAgaW9jdGwgYWRkZWQgdG8gdGhlIHRlc3QgY29kZSwgd2hpY2ggZ2l2ZXMgdXMgYSBkZWRpY2F0ZWQgbWVjaGFuaXNtIHRvIGFjdHVhbGx5ICp0ZXN0KiB0aGlzIG5ldyB1bmxvY2tlZCBmdW5jdGlvbmFsaXR5LgoKUmVhY2hhYmxlIGNvZGUgaXMgY3JpdGljYWwuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBjb2RlIGlzIGFjdHVhbGx5ICp1c2VkKi4gYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZGAgaXMgZXhwb3J0ZWQsIGFuZCBpdCYjMzk7cyBiZWluZyB1c2VkIGJ5IGB0ZXN0X2htbS5jYCAoYSB0ZXN0IG1vZHVsZSwgZ29vZCEpIGFuZCBgbXNodl9yZWdpb25zLmNgIChIeXBlci1WKS4gU28sIHRoZSByZWFjaGFiaWxpdHkgc2VlbXMgc29saWQuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgYnVpbGQgY29uZmlnIG9wdGlvbnMgdG8gdmVyaWZ5IHRoZXkgYXJlIGFjdGl2ZS4KCk5vdywgdG8gbWFrZSBzdXJlIHRoZSBjb2RlIGlzIGFjdHVhbGx5ICplbmFibGVkKiBpbiByZWxldmFudCBjb25maWd1cmF0aW9ucywgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGZvciBgQ09ORklHX1RFU1RfSE1NYCwgYENPTkZJR19IWVBFUlZgLCBhbmQgYENPTkZJR19NU0hWYC4gTGV0IG1lIGZpcmUgdXAgbXkgYGdyZXBwZXJgIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgc2V0dGluZ3MgYXJlIGZvciB0aGlzIGNvZGUuIFRoaXMgd2lsbCBjb25maXJtIHRoZSBwYXRjaCYjMzk7cyBpbnRlZ3JhdGlvbiBpbnRvIHRoZSBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIxOD1zaG91bGQgY2FsbDo6XG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjE5LVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjIyMDogIGludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIyMS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yMjI9VGhlIGNhbGxlciBtdXN0IG5vdCBob2xkIGBgbW1hcF9yZWFkX2xvY2tgYCBiZWZvcmUgdGhlIGNhbGwuXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjIzOmBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKClgYCB0YWtlcyB0aGUgbW1hcCByZWFkIGxvY2sgaW50ZXJuYWxseSBhbmQgYWxsb3dzXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjI0LWBgaGFuZGxlX21tX2ZhdWx0KClgYCB0byBkcm9wIGl0IGR1cmluZyBmYXVsdCBoYW5kbGluZy4gSWYgdGhlIG1tYXAgbG9jayBpc1xuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yMjk9QSB0eXBpY2FsIGNhbGxlciBsb29rcyBsaWtlIHRoaXM6OlxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNDUtICAgICAgcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4oXHUwMDI2aW50ZXJ2YWxfc3ViKTtcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyNDY6ICAgICAgcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKFx1MDAyNnJhbmdlKTtcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNDctICAgICAgaWYgKHJldCkge1xuLS1cbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM9Mzc5PWludCBtc2h2X3JlZ2lvbl9nZXQoc3RydWN0IG1zaHZfbWVtX3JlZ2lvbiAqcmVnaW9uKVxuLS1cbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtMzk0LSAqICAgIElmIGl0IGhhcywgcmVsZWFzZXMgdGhlIG11dGV4IGFuZCByZXR1cm5zIC1FQlVTWSB0byBtYXRjaCB3aXRoXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jOjM5NTogKiAgICBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKSBzbyB0aGUgY2FsbGVyIHJldHJpZXMgdGhlIHJhbmdlIGZhdWx0LlxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy0zOTYtICpcbi0tXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jPTM5OT1zdGF0aWMgaW50IG1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9jayhzdHJ1Y3QgbXNodl9tZW1fcmVnaW9uICpyZWdpb24sXG4tLVxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy00MDQtXHRyYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS1cdTAwM2Vub3RpZmllcik7XG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jOjQwNTpcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZChyYW5nZSk7XG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jLTQwNi1cdGlmIChyZXQpXG4tLVxuaW5jbHVkZS9saW51eC9obW0uaD0xMjU9aW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XG5pbmNsdWRlL2xpbnV4L2htbS5oOjEyNjppbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTtcbmluY2x1ZGUvbGludXgvaG1tLmgtMTI3LVxuLS1cbmxpYi90ZXN0X2htbS5jPTM5Mj1zdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4tLVxubGliL3Rlc3RfaG1tLmMtNDA1LVx0XHRyYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS1cdTAwM2Vub3RpZmllcik7XG5saWIvdGVzdF9obW0uYzo0MDY6XHRcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZChyYW5nZSk7XG5saWIvdGVzdF9obW0uYy00MDctXHRcdGlmIChyZXQpIHtcbi0tXG5tbS9obW0uYz02ODg9c3RhdGljIGludCBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLCBpbnQgKmxvY2tlZClcbi0tXG5tbS9obW0uYy03NTMtICogRm9yIGEgdmFyaWFudCB0aGF0IGFsbG93cyB0aGUgbW1hcCBsb2NrIHRvIGJlIGRyb3BwZWQgZHVyaW5nIGZhdWx0cyAoZS5nLixcbm1tL2htbS5jOjc1NDogKiBmb3IgdXNlcmZhdWx0ZmQgc3VwcG9ydCksIHNlZSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKS5cbm1tL2htbS5jLTc1NS0gKi9cbi0tXG5tbS9obW0uYz03NjA9RVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHQpO1xuLS1cbm1tL2htbS5jLTc2Mi0vKipcbm1tL2htbS5jOjc2MzogKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQgLSBmYXVsdCBpbiBhIHJhbmdlLCBwb3NzaWJseSBkcm9wcGluZyB0aGUgbW1hcCBsb2NrXG5tbS9obW0uYy03NjQtICogQHJhbmdlOlx0YXJndW1lbnQgc3RydWN0dXJlXG4tLVxubW0vaG1tLmMtNzc1LSAqL1xubW0vaG1tLmM6Nzc2OmludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXG5tbS9obW0uYy03Nzcte1xuLS1cbm1tL2htbS5jLTc4OC19XG5tbS9obW0uYzo3ODk6RVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQpO1xubW0vaG1tLmMtNzkwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTI5MDE9VEVTVF9GX1RJTUVPVVQoaG1tLCBiZW5jaG1hcmtfdGhwX21pZ3JhdGlvbiwgMTIwKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5NTctICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6Mjk1ODogKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKSBwYXRoLiBUaGlzIGV4ZXJjaXNlcyB0aGUgbG9jay1kcm9wIHJldHJ5XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yOTU5LSAqIGxvZ2ljIGluIHRoZSBITU0gZnJhbWV3b3JrLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjgzCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBSZWxldmFudCBDb25maWd1cmF0aW9uIEZpbGVzKioKClJpZ2h0LCBiZWZvcmUgcHJvY2VlZGluZyBmdXJ0aGVyLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFmZmFpcnMgcmVnYXJkaW5nIHRoZSBITU0gdGVzdGluZyBhbmQgdGhlIGh5cGVydmlzb3IgcmVnaW9ucy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9mIGBsaWIvdGVzdF9obW0uY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHRlc3QgSE1NIGlzIGNvcnJlY3RseSBjb25maWd1cmVkIGFuZCB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG9idmlvdXMgcmVkIGZsYWdzIHRoZXJlLiBUaGVuIEkmIzM5O2xsIHNoaWZ0IGdlYXJzIGFuZCBjaGVjayB0aGUgYGRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNgIGNvbmZpZy4gSSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IHJlZ2lvbiBzZXR0aW5ncywgcGFydGljdWxhcmx5IHRob3NlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hcHBpbmcgb3IgYWRkcmVzcyBzcGFjZSBhbGxvY2F0aW9uLCBoYXZlbiYjMzk7dCBiZWVuIGNvbmZpZ3VyZWQgaW4gYSB3YXkgdGhhdCB3b3VsZCBpbnRlcmZlcmUgd2l0aCB0aGUgSE1NIHRlc3RzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHRoZXNlIHR3byBjb25maWd1cmF0aW9uIGFyZWFzLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHNhbml0eSBjaGVjayB0byBydWxlIG91dCBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gcHJvYmxlbXMgYmVmb3JlIEkgc3RhcnQgZGVlcGVyIGRlYnVnZ2luZyBvciBtYWtlIGNvZGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZXN0X2htbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtNQUlOVEFJTkVSUz0xMTg1Mz1GOlx0aW5jbHVkZS9saW51eC9obW0qXG5NQUlOVEFJTkVSUzoxMTg1NDpGOlx0bGliL3Rlc3RfaG1tKlxuTUFJTlRBSU5FUlMtMTE4NTUtRjpcdG1tL2htbSpcbi0tXG5saWIvTWFrZWZpbGU9MTAyPW9iai0kKENPTkZJR19URVNUX0xPQ0tVUCkgJiM0Mzs9IHRlc3RfbG9ja3VwLm9cbmxpYi9NYWtlZmlsZToxMDM6b2JqLSQoQ09ORklHX1RFU1RfSE1NKSAmIzQzOz0gdGVzdF9obW0ub1xubGliL01ha2VmaWxlLTEwNC1vYmotJChDT05GSUdfVEVTVF9GUkVFX1BBR0VTKSAmIzQzOz0gdGVzdF9mcmVlX3BhZ2VzLm9cbi0tXG5saWIvdGVzdF9obW0uYy0zMi1cbmxpYi90ZXN0X2htbS5jOjMzOiNpbmNsdWRlIFwmIzM0O3Rlc3RfaG1tX3VhcGkuaFwmIzM0O1xubGliL3Rlc3RfaG1tLmMtMzQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGU9MTgxPVRFU1RfRklMRVMgOj0gdGVzdF92bWFsbG9jLnNoXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZToxODI6VEVTVF9GSUxFUyAmIzQzOz0gdGVzdF9obW0uc2hcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlLTE4My1URVNUX0ZJTEVTICYjNDM7PSB2YV9oaWdoX2FkZHJfc3dpdGNoLnNoXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNDAtICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo0MTojaW5jbHVkZSBcdTAwM2NsaWIvdGVzdF9obW1fdWFwaS5oXHUwMDNlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy00Mi0jaW5jbHVkZSBcdTAwM2NtbS9ndXBfdGVzdC5oXHUwMDNlXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2g9MzQxPUNBVEVHT1JZPVwmIzM0O21yZW1hcFwmIzM0OyBydW5fdGVzdCAuL21yZW1hcF9kb250dW5tYXBcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoLTM0Mi1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoOjM0MzpDQVRFR09SWT1cJiMzNDtobW1cJiMzNDsgcnVuX3Rlc3QgYmFzaCAuL3Rlc3RfaG1tLnNoIHNtb2tlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaC0zNDQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGVzdF9obW0uc2gtMTEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaDoxMjpURVNUX05BTUU9XCYjMzQ7dGVzdF9obW1cJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoOjEzOkRSSVZFUj1cJiMzNDt0ZXN0X2htbVwmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGVzdF9obW0uc2gtMTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MzEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIGBDT05GSUdfVEVTVF9ITU1gIC0gdGhhdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpdCYjMzk7cyB0aGUgZmxhZyB0aGF0IGNvbnRyb2xzIHRoZSBidWlsZCBpbmNsdXNpb24gZm9yIGB0ZXN0X2htbS5jYC4gRWFzeSBlbm91Z2guIEJ1dCBub3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8ga2VlcCB0aGUgY29kZSBvcmdhbml6ZWQgYW5kIGF2b2lkIGFueSBjb25maWd1cmF0aW9uIGNvbmZsaWN0cy4gVGhhdCBicmluZ3MgbWUgdG8gdGhlIG5leHQgZmlsZSBJIG5lZWQgdG8gY29uc2lkZXIsIHdoaWNoIGlzIGBtc2h2X3JlZ2lvbnMuY2AuIEkgaGF2ZSB0byBub3cgYmVnaW4gdGhlIHByb2Nlc3MgdG8gdGhpbmsgdGhyb3VnaCBpdHMgY29uZmlnIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXNodl9yZWdpb25zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaHYvTWFrZWZpbGU9MTY9bXNodl9yb290LXkgOj0gbXNodl9yb290X21haW4ubyBtc2h2X3N5bmljLm8gbXNodl9ldmVudGZkLm8gbXNodl9pcnEubyBcXFxuZHJpdmVycy9odi9NYWtlZmlsZToxNzpcdCAgICAgICBtc2h2X3Jvb3RfaHZfY2FsbC5vIG1zaHZfcG9ydGlkX3RhYmxlLm8gbXNodl9yZWdpb25zLm9cbmRyaXZlcnMvaHYvTWFrZWZpbGUtMTgtbXNodl9yb290LSQoQ09ORklHX0RFQlVHX0ZTKSAmIzQzOz0gbXNodl9kZWJ1Z2ZzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg2MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBIeXBlci1WIERyaXZlciBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgbXNodl9yb290YCBpcyBkZWZpbmVkIG9yIHVzZWQgd2l0aGluIHRoZSBIeXBlci1WIGRyaXZlciBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCBsb2NhdGVkIGluIHRoZSBgZHJpdmVycy9odi9gIGRpcmVjdG9yeS4gVGhhdCBmaWxlIGlzIHVzdWFsbHkgdGhlIGNlbnRyYWwgcG9pbnQgb2YgY29uZmlndXJhdGlvbiBmb3IgdGhhdCBlbnRpcmUgcGFydCBvZiB0aGUga2VybmVsLCBzbyBpdOKAmXMgdGhlIGxvZ2ljYWwgZmlyc3QgcGxhY2UgdG8gbG9vay4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBkZWZpbml0aW9uIG9yIHJlZmVyZW5jZSwgYW5kIEkgd29uJiMzOTt0IGhhdmUgdG8gdHJhY2UgdGhyb3VnaCBpbmNsdWRlIGZpbGVzIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIHRvIGZpbmQgaXQuIFRpbWUgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXNodl9yb290JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaHYvTWFrZWZpbGU9ND1vYmotJChDT05GSUdfSFlQRVJWX0JBTExPT04pXHQmIzQzOz0gaHZfYmFsbG9vbi5vXG5kcml2ZXJzL2h2L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX01TSFZfUk9PVClcdFx0JiM0Mzs9IG1zaHZfcm9vdC5vXG5kcml2ZXJzL2h2L01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX01TSFZfVlRMKSAgICAgICAgICAmIzQzOz0gbXNodl92dGwub1xuLS1cbmRyaXZlcnMvaHYvTWFrZWZpbGU9MTU9aHZfdXRpbHMteSA6PSBodl91dGlsLm8gaHZfa3ZwLm8gaHZfc25hcHNob3QubyBodl91dGlsc190cmFuc3BvcnQub1xuZHJpdmVycy9odi9NYWtlZmlsZToxNjptc2h2X3Jvb3QteSA6PSBtc2h2X3Jvb3RfbWFpbi5vIG1zaHZfc3luaWMubyBtc2h2X2V2ZW50ZmQubyBtc2h2X2lycS5vIFxcXG5kcml2ZXJzL2h2L01ha2VmaWxlOjE3Olx0ICAgICAgIG1zaHZfcm9vdF9odl9jYWxsLm8gbXNodl9wb3J0aWRfdGFibGUubyBtc2h2X3JlZ2lvbnMub1xuZHJpdmVycy9odi9NYWtlZmlsZToxODptc2h2X3Jvb3QtJChDT05GSUdfREVCVUdfRlMpICYjNDM7PSBtc2h2X2RlYnVnZnMub1xuZHJpdmVycy9odi9NYWtlZmlsZToxOTptc2h2X3Jvb3QtJChDT05GSUdfVFJBQ0VQT0lOVFMpICYjNDM7PSBtc2h2X3RyYWNlLm9cbmRyaXZlcnMvaHYvTWFrZWZpbGUtMjAtbXNodl92dGwteSA6PSBtc2h2X3Z0bF9tYWluLm9cbi0tXG5kcml2ZXJzL2h2L21zaHZfZGVidWdmcy5jLTE2LSNpbmNsdWRlIFwmIzM0O21zaHYuaFwmIzM0O1xuZHJpdmVycy9odi9tc2h2X2RlYnVnZnMuYzoxNzojaW5jbHVkZSBcJiMzNDttc2h2X3Jvb3QuaFwmIzM0O1xuZHJpdmVycy9odi9tc2h2X2RlYnVnZnMuYy0xOC1cbi0tXG5kcml2ZXJzL2h2L21zaHZfZXZlbnRmZC5jLTI1LSNpbmNsdWRlIFwmIzM0O21zaHYuaFwmIzM0O1xuZHJpdmVycy9odi9tc2h2X2V2ZW50ZmQuYzoyNjojaW5jbHVkZSBcJiMzNDttc2h2X3Jvb3QuaFwmIzM0O1xuZHJpdmVycy9odi9tc2h2X2V2ZW50ZmQuYy0yNy1cbi0tXG5kcml2ZXJzL2h2L21zaHZfZXZlbnRmZC5oLTEzLSNpbmNsdWRlIFwmIzM0O21zaHYuaFwmIzM0O1xuZHJpdmVycy9odi9tc2h2X2V2ZW50ZmQuaDoxNDojaW5jbHVkZSBcJiMzNDttc2h2X3Jvb3QuaFwmIzM0O1xuZHJpdmVycy9odi9tc2h2X2V2ZW50ZmQuaC0xNS1cbi0tXG5kcml2ZXJzL2h2L21zaHZfaXJxLmMtMTQtI2luY2x1ZGUgXCYjMzQ7bXNodi5oXCYjMzQ7XG5kcml2ZXJzL2h2L21zaHZfaXJxLmM6MTU6I2luY2x1ZGUgXCYjMzQ7bXNodl9yb290LmhcJiMzNDtcbmRyaXZlcnMvaHYvbXNodl9pcnEuYy0xNi1cbi0tXG5kcml2ZXJzL2h2L21zaHZfcG9ydGlkX3RhYmxlLmMtOC0jaW5jbHVkZSBcJiMzNDttc2h2LmhcJiMzNDtcbmRyaXZlcnMvaHYvbXNodl9wb3J0aWRfdGFibGUuYzo5OiNpbmNsdWRlIFwmIzM0O21zaHZfcm9vdC5oXCYjMzQ7XG5kcml2ZXJzL2h2L21zaHZfcG9ydGlkX3RhYmxlLmMtMTAtXG4tLVxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy00LSAqXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jOjU6ICogTWVtb3J5IHJlZ2lvbiBtYW5hZ2VtZW50IGZvciBtc2h2X3Jvb3QgbW9kdWxlLlxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy02LSAqXG4tLVxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy0xNy1cbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM6MTg6I2luY2x1ZGUgXCYjMzQ7bXNodl9yb290LmhcJiMzNDtcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtMTktXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3QuaD0xODc9c3RydWN0IGh2X3N5bmljX3BhZ2VzIHtcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdC5oLTE5Mi1cbmRyaXZlcnMvaHYvbXNodl9yb290Lmg6MTkzOnN0cnVjdCBtc2h2X3Jvb3Qge1xuZHJpdmVycy9odi9tc2h2X3Jvb3QuaC0xOTQtXHRzcGlubG9ja190IHB0X2h0X2xvY2s7XG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3QuaD0zNjE9c3RhdGljIGlubGluZSB2b2lkIG1zaHZfZGVidWdmc192cF9yZW1vdmUoc3RydWN0IG1zaHZfdnAgKnZwKSB7IH1cbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdC5oLTM2My1cbmRyaXZlcnMvaHYvbXNodl9yb290Lmg6MzY0OmV4dGVybiBzdHJ1Y3QgbXNodl9yb290IG1zaHZfcm9vdDtcbmRyaXZlcnMvaHYvbXNodl9yb290LmgtMzY1LWV4dGVybiBlbnVtIGh2X3NjaGVkdWxlcl90eXBlIGh2X3NjaGVkdWxlcl90eXBlO1xuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYy00LSAqXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmM6NTogKiBIeXBlcmNhbGwgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBtc2h2X3Jvb3QgbW9kdWxlLlxuZHJpdmVycy9odi9tc2h2X3Jvb3RfaHZfY2FsbC5jLTYtICpcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmMtMTQtXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmM6MTU6I2luY2x1ZGUgXCYjMzQ7bXNodl9yb290LmhcJiMzNDtcbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYy0xNi1cbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmM9NTkxPXN0YXRpYyBib29sIG1zaHZfdXNlX292ZXJsYXlfZ3Bmbih2b2lkKVxuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYy01OTMtXHRyZXR1cm4gaHZfbDF2aF9wYXJ0aXRpb24oKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYzo1OTQ6XHQgICAgICAgbXNodl9yb290LnZtbV9jYXBzLnZtbV9jYW5fcHJvdmlkZV9vdmVybGF5X2dwZm47XG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmMtNTk1LX1cbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtNC0gKlxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjU6ICogVGhlIG1haW4gcGFydCBvZiB0aGUgbXNodl9yb290IG1vZHVsZSwgcHJvdmlkaW5nIEFQSXMgdG8gY3JlYXRlXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtNi0gKiBhbmQgbWFuYWdlIGd1ZXN0IHBhcnRpdGlvbnMuXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTM1LSNpbmNsdWRlIFwmIzM0O21zaHYuaFwmIzM0O1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjM2OiNpbmNsdWRlIFwmIzM0O21zaHZfcm9vdC5oXCYjMzQ7XG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMzctXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTQwPU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNaWNyb3NvZnQgSHlwZXItViByb290IHBhcnRpdGlvbiBWTU0gaW50ZXJmYWNlIC9kZXYvbXNodlwmIzM0Oyk7XG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTQ4LVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjQ5OnN0cnVjdCBtc2h2X3Jvb3QgbXNodl9yb290O1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTUwLVxuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYz0xNzA9c3RhdGljIGludCBtc2h2X2lvY3RsX3Bhc3N0aHJ1X2h2Y2FsbChzdHJ1Y3QgbXNodl9wYXJ0aXRpb24gKnBhcnRpdGlvbixcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTc2LVx0Ym9vbCBpc19hc3luYztcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoxNzc6XHRzdHJ1Y3QgbXNodl9yb290X2h2Y2FsbCBhcmdzO1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTE3OC1cdHN0cnVjdCBwYWdlICpwYWdlO1xuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYz0xNzY2PXJlbW92ZV9wYXJ0aXRpb24oc3RydWN0IG1zaHZfcGFydGl0aW9uICpwYXJ0aXRpb24pXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTc2Ny17XG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MTc2ODpcdHNwaW5fbG9jayhcdTAwMjZtc2h2X3Jvb3QucHRfaHRfbG9jayk7XG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTc2OS1cdGhsaXN0X2RlbF9yY3UoXHUwMDI2cGFydGl0aW9uLVx1MDAzZXB0X2hub2RlKTtcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoxNzcwOlx0c3Bpbl91bmxvY2soXHUwMDI2bXNodl9yb290LnB0X2h0X2xvY2spO1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTE3NzEtXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTE4NzU9bXNodl9wYXJ0aXRpb24gKm1zaHZfcGFydGl0aW9uX2ZpbmQodTY0IHBhcnRpdGlvbl9pZClcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTg3OS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoxODgwOlx0aGFzaF9mb3JfZWFjaF9wb3NzaWJsZV9yY3UobXNodl9yb290LnB0X2h0YWJsZSwgcCwgcHRfaG5vZGUsXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTg4MS1cdFx0XHRcdCAgIHBhcnRpdGlvbl9pZClcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9MTkxMj1hZGRfcGFydGl0aW9uKHN0cnVjdCBtc2h2X3BhcnRpdGlvbiAqcGFydGl0aW9uKVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTE5MTMte1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjE5MTQ6XHRzcGluX2xvY2soXHUwMDI2bXNodl9yb290LnB0X2h0X2xvY2spO1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTE5MTUtXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MTkxNjpcdGhhc2hfYWRkX3JjdShtc2h2X3Jvb3QucHRfaHRhYmxlLCBcdTAwMjZwYXJ0aXRpb24tXHUwMDNlcHRfaG5vZGUsXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTkxNy1cdFx0ICAgICBwYXJ0aXRpb24tXHUwMDNlcHRfaWQpO1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTE5MTgtXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MTkxOTpcdHNwaW5fdW5sb2NrKFx1MDAyNm1zaHZfcm9vdC5wdF9odF9sb2NrKTtcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0xOTIwLVxuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYz0yMTMwPW1zaHZfZGV2X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIxMzQtXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjEzNTpzdGF0aWMgaW50IG1zaHZfcm9vdF9zY2hlZF9vbmxpbmU7XG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjEzNi1cbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9MjE1Mz1zdGF0aWMgaW50IF9faW5pdCBsMXZoX3JldHJpZXZlX3NjaGVkdWxlcl90eXBlKGVudW0gaHZfc2NoZWR1bGVyX3R5cGUgKm91dClcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjE1OS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyMTYwOlx0aWYgKCFtc2h2X3Jvb3Qudm1tX2NhcHMudm1tX2VuYWJsZV9pbnRlZ3JhdGVkX3NjaGVkdWxlcilcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMTYxLVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9MjIwNj1zdGF0aWMgaW50IF9faW5pdCBtc2h2X3JldHJpZXZlX3NjaGVkdWxlcl90eXBlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjIzNS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyMjM2OnN0YXRpYyBpbnQgbXNodl9yb290X3NjaGVkdWxlcl9pbml0KHVuc2lnbmVkIGludCBjcHUpXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjIzNy17XG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIyNTMtXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjI1NDpzdGF0aWMgaW50IG1zaHZfcm9vdF9zY2hlZHVsZXJfY2xlYW51cCh1bnNpZ25lZCBpbnQgY3B1KVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIyNTUte1xuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYz0yMjczPXJvb3Rfc2NoZWR1bGVyX2luaXQoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMjg4LVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjIyODk6XHRyZXQgPSBjcHVocF9zZXR1cF9zdGF0ZShDUFVIUF9BUF9PTkxJTkVfRFlOLCBcJiMzNDttc2h2X3Jvb3Rfc2NoZWRcJiMzNDssXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjI5MDpcdFx0XHRcdG1zaHZfcm9vdF9zY2hlZHVsZXJfaW5pdCxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyMjkxOlx0XHRcdFx0bXNodl9yb290X3NjaGVkdWxlcl9jbGVhbnVwKTtcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMjkyLVxuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMjk3LVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjIyOTg6XHRtc2h2X3Jvb3Rfc2NoZWRfb25saW5lID0gcmV0O1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIyOTktXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTIzMDk9cm9vdF9zY2hlZHVsZXJfZGVpbml0KHZvaWQpXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIzMTMtXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjMxNDpcdGNwdWhwX3JlbW92ZV9zdGF0ZShtc2h2X3Jvb3Rfc2NoZWRfb25saW5lKTtcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMzE1LVx0ZnJlZV9wZXJjcHUocm9vdF9zY2hlZHVsZXJfaW5wdXQpO1xuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYz0yMzE5PXN0YXRpYyBpbnQgX19pbml0IG1zaHZfaW5pdF92bW1fY2FwcyhzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIzMjQtXHRcdFx0XHRcdFx0SFZfUEFSVElUSU9OX1BST1BFUlRZX1ZNTV9DQVBBQklMSVRJRVMsXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjMyNTpcdFx0XHRcdFx0XHQwLCBcdTAwMjZtc2h2X3Jvb3Qudm1tX2NhcHMsXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjMyNjpcdFx0XHRcdFx0XHRzaXplb2YobXNodl9yb290LnZtbV9jYXBzKSk7XG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjMyNy1cdGlmIChyZXQgXHUwMDI2XHUwMDI2IGh2X2wxdmhfcGFydGl0aW9uKCkpIHtcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjMzMS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyMzMyOlx0ZGV2X2RiZyhkZXYsIFwmIzM0O3ZtbV9jYXBzID0gJSNsbHhcXG5cJiMzNDssIG1zaHZfcm9vdC52bW1fY2Fwcy5hc191aW50NjRbMF0pO1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIzMzMtXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTIzMzc9c3RhdGljIGludCBfX2luaXQgbXNodl9wYXJlbnRfcGFydGl0aW9uX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjM4Ni1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyMzg3Olx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bXNodl9yb290LnB0X2h0X2xvY2spO1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjIzODg6XHRoYXNoX2luaXQobXNodl9yb290LnB0X2h0YWJsZSk7XG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjM4OS1cbi0tXG5kcml2ZXJzL2h2L21zaHZfc3luaWMuYy00LSAqXG5kcml2ZXJzL2h2L21zaHZfc3luaWMuYzo1OiAqIG1zaHZfcm9vdCBtb2R1bGUmIzM5O3MgbWFpbiBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbmFsaXR5LlxuZHJpdmVycy9odi9tc2h2X3N5bmljLmMtNi0gKlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9tc2h2Lmg9MjEzPXN0cnVjdCBtc2h2X2dwYXBfYWNjZXNzX2JpdG1hcCB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaC0yMjItLyoqXG5pbmNsdWRlL3VhcGkvbGludXgvbXNodi5oOjIyMzogKiBzdHJ1Y3QgbXNodl9yb290X2h2Y2FsbCAtIGFyZ3VtZW50cyBmb3IgTVNIVl9ST09UX0hWQ0FMTFxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaC0yMjQtICogQGNvZGU6IEh5cGVyY2FsbCBjb2RlIChIVkNBTExfKilcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbXNodi5oLTIzNS0gKi9cbmluY2x1ZGUvdWFwaS9saW51eC9tc2h2Lmg6MjM2OnN0cnVjdCBtc2h2X3Jvb3RfaHZjYWxsIHtcbmluY2x1ZGUvdWFwaS9saW51eC9tc2h2LmgtMjM3LVx0X191MTYgY29kZTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbXNodi5oLTI1NS0vKiBHZW5lcmljIGh5cGVyY2FsbCAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaDoyNTY6I2RlZmluZSBNU0hWX1JPT1RfSFZDQUxMXHRcdF9JT1dSKE1TSFZfSU9DVEwsIDB4MDcsIHN0cnVjdCBtc2h2X3Jvb3RfaHZjYWxsKVxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaC0yNTctXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaD0zMTA9c3RydWN0IG1zaHZfZ2V0X3NldF92cF9zdGF0ZSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaC0zMjMtICogRGVmaW5lZCBhYm92ZSBpbiBwYXJ0aXRpb24gSU9DVExzLCBhdm9pZCByZWRlZmluaW5nIGl0IGhlcmVcbmluY2x1ZGUvdWFwaS9saW51eC9tc2h2Lmg6MzI0OiAqICNkZWZpbmUgTVNIVl9ST09UX0hWQ0FMTFx0XHRcdF9JT1dSKE1TSFZfSU9DVEwsIDB4MDcsIHN0cnVjdCBtc2h2X3Jvb3RfaHZjYWxsKVxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaC0zMjUtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTAzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBNU0hWIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBDT05GSUdfTVNIVl9ST09UYC4gUmlnaHQsIHRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdGhhdCB0aWVzIGludG8gYG1zaHZfcmVnaW9ucy5jYC4gTXkgbWluZCBpcyByYWNpbmcgdG8gcmVtZW1iZXIgaG93IHRoZXNlIHBpZWNlcyBjb25uZWN0LiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBidWlsZCBzeXN0ZW0gY29uZmlybXMgdGhhdCBgbXNodl9yZWdpb25zLmNgIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19NU0hWX1JPT1RgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgZ29vZCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0LiBOb3cgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19NU0hWX1JPT1RgIGlzIGFjdHVhbGx5IGRlZmluZWQsIGFuZCB0aGVuIEkgY2FuIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNU0hWX1JPT1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9odi9LY29uZmlnPTYwPWNvbmZpZyBIWVBFUlZfVk1CVVNcbi0tXG5kcml2ZXJzL2h2L0tjb25maWctNjctXG5kcml2ZXJzL2h2L0tjb25maWc6Njg6Y29uZmlnIE1TSFZfUk9PVFxuZHJpdmVycy9odi9LY29uZmlnLTY5LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgcm9vdCBwYXJ0aXRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM5OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQ1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSE1NIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgQ09ORklHX01TSFZfUk9PVGAgc2VlbXMgdG8gYmUgdGhlIGNvbnRyb2xsaW5nIGNvbmZpZyBoZXJlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGZvY3VzZWQgb24gbW9kaWZ5aW5nIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRgIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgYGhtbV9yYW5nZV9mYXVsdGAuIFRoaXMgYGhtbV9yYW5nZV9mYXVsdGAgaXMgYSBjcml0aWNhbCBITU0gZnVuY3Rpb24sIGhlYXZpbHkgdXNlZCBhY3Jvc3MgdmFyaW91cyBkcml2ZXJzIGxpa2Ugbm91dmVhdSBhbmQgYW1kZ3B1IOKAkyBhIHNpZ25pZmljYW50IHBpZWNlIG9mIGNvcmUgSE1NIGZ1bmN0aW9uYWxpdHkuIFRoZSBwYXRjaCByZWZhY3RvcnMgaXQgdG8gdXNlIGEgbG9ja2VkIHZlcnNpb24gKGBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkYCksIHdoaWNoIHRoZW4gbGV2ZXJhZ2VzIGBobW1fZG9fZmF1bHRgIGFuZCBgaG1tX3JlY29yZF9mYXVsdGAuIFRoaXMgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb3JlIEhNTSBjb2RlLCBtZWFuaW5nIGZ1enppbmcgdGhpcyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4KCkxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuIFdlJiMzOTt2ZSBnb3Q6CgoqICAgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZGAKKiAgIGBobW1fcmFuZ2VfZmF1bHRgCiogICBgaG1tX2RvX2ZhdWx0YAoqICAgYGhtbV9yZWNvcmRfZmF1bHRgCiogICBgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZGAKCkZvciBjb25maWcgb3B0aW9ucywgd2UmIzM5O2xsIG5lZWQgYFRFU1RfSE1NYCBhbmQgYE1TSFZfUk9PVGAgdG8gcmVwcm9kdWNlIHRoZSBjaGFuZ2VzLiBUaG91Z2ggYGhtbV9yYW5nZV9mYXVsdGAgaXMgdXNlZCBieSBtdWx0aXBsZSBkcml2ZXJzLCBmb2N1c2luZyBvbiBgVEVTVF9ITU1gIG9mZmVycyBhIGNsZWFuZXIgd2F5IHRvIHRlc3QgdGhlIGNoYW5nZXMuCgpJIG5lZWQgdG8gZGlnIGludG8gYHRlc3RfaG1tLmNgIHRvIGlkZW50aWZ5IGFueSBzcGVjaWZpYyBpb2N0bHMgdG8gdGFyZ2V0LiBBaCwgaXQgYWRkcyBgSE1NX0RNSVJST1JfUkVBRF9VTkxPQ0tFRGAuIFRoZSBjb3JyZXNwb25kaW5nIGhhbmRsZXIgaXMgYGRtaXJyb3JfcmVhZF91bmxvY2tlZGAsIGFsb25nIHdpdGggYGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRgIGFuZCBgZG1pcnJvcl9mYXVsdF91bmxvY2tlZGAuCgpTbywgdGhlIGV4dGVuZGVkIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBiZWNvbWVzOgoKKiAgIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRgCiogICBgaG1tX3JhbmdlX2ZhdWx0YAoqICAgYGhtbV9kb19mYXVsdGAKKiAgIGBkbWlycm9yX3JlYWRfdW5sb2NrZWRgCiogICBgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZGAKKiAgIGBkbWlycm9yX2ZhdWx0X3VubG9ja2VkYAoqICAgYG1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9ja2AKCkkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWdzLiBTcGVjaWZpY2FsbHkgYFRFU1RfSE1NYCBhbmQgYE1TSFZfUk9PVGAuCgpJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciByZWxhdGVkIGNvbmZpZ3MuIFR5cGljYWxseSBgVEVTVF9ITU1gIHNob3VsZCBhbHNvIHNlbGVjdCBgQ09ORklHX0hNTV9NSVJST1JgLiBJJiMzOTtsbCBjb25maXJtIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBURVNUX0hNTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE4PWNvbmZpZyBURVNUX01FTUlOSVRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI1LVxubGliL0tjb25maWcuZGVidWc6MzMyNjpjb25maWcgVEVTVF9ITU1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjctXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0OTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyB0aGUgS2NvbmZpZyBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbi4gVGhlIHRhc2sgaXMgcmVsYXRlZCB0byB0aGUgYFRFU1RfSE1NYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGZpcnN0IHBsYWNlIEkmIzM5O2QgY2hlY2sgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgb3B0aW9uLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgd2hhdCBpdCBjb250cm9scyBpcyBnb2luZyB0byBiZSBgbGliL0tjb25maWcuZGVidWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZGV0YWlscyBmb3IgZGVidWctcmVsYXRlZCBmZWF0dXJlcyB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZmVhdHVyZSBpcyBkZWZpbmVkIGFuZCBoYW5kbGVkIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYFRFU1RfSE1NYCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMyNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzI2Olx0Y29uZmlnIFRFU1RfSE1NXG4zMzI3Olx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbjMzMjg6XHRcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbjMzMjk6XHRcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcbjMzMzA6XHRcdHNlbGVjdCBITU1fTUlSUk9SXG4zMzMxOlx0XHRzZWxlY3QgTU1VX05PVElGSUVSXG4zMzMyOlx0XHRoZWxwXG4zMzMzOlx0XHQgIFRoaXMgaXMgYSBwc2V1ZG8gZGV2aWNlIGRyaXZlciBzb2xlbHkgZm9yIHRlc3RpbmcgSE1NLlxuMzMzNDpcdFx0ICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBITU0gdGVzdCBtb2R1bGUuXG4zMzM1Olx0XHQgIERvaW5nIHNvIHdpbGwgYWxsb3cgeW91IHRvIHJ1biB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0L3ZtL2htbS10ZXN0cy5cbjMzMzY6XHRcbjMzMzc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjMzMzg6XHRcbjMzMzk6XHRjb25maWcgVEVTVF9GUkVFX1BBR0VTXG4zMzQwOlx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IGZyZWVpbmcgcGFnZXNcJiMzNDtcbjMzNDE6XHRcdGhlbHBcbjMzNDI6XHRcdCAgVGVzdCB0aGF0IGEgbWVtb3J5IGxlYWsgZG9lcyBub3Qgb2NjdXIgZHVlIHRvIGEgcmFjZSBiZXR3ZWVuXG4zMzQzOlx0XHQgIGZyZWVpbmcgYSBibG9jayBvZiBwYWdlcyBhbmQgYSBzcGVjdWxhdGl2ZSBwYWdlIHJlZmVyZW5jZS5cbjMzNDQ6XHRcdCAgTG9hZGluZyB0aGlzIG1vZHVsZSBpcyBzYWZlIGlmIHlvdXIga2VybmVsIGhhcyB0aGUgYnVnIGZpeGVkLlxuMzM0NTpcdFx0ICBJZiB0aGUgYnVnIGlzIG5vdCBmaXhlZCwgaXQgd2lsbCBsZWFrIGdpZ2FieXRlcyBvZiBtZW1vcnkgYW5kXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDE3CgkJCQkJCQlvdXRwdXQ6IDIzNwoJCQkJCQkJdGhvdWdodHM6IDYyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBITU0gUGF0Y2ggZm9yIEZ1enppbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaW5jbHVkZXMgYWxsIG5lY2Vzc2FyeSBjb21wb25lbnRzLiBTbywgSSYjMzk7bGwgYmUgYWRkaW5nIGBURVNUX0hNTWAgYW5kIGBNU0hWX1JPT1RgIHRvIHRoZSBjb25maWd1cmF0aW9ucy4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoYXQgdGhlIHBhdGNoJiMzOTtzIGNvcmUgcmVsYXRlcyB0byB0aGUgSE1NIHN1YnN5c3RlbSBhbmQgdGhlIE1TSFYgcmVnaW9uIGhhbmRsaW5nLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBhcmVhcyBmb3IgZnV6emluZy4gSSYjMzk7dmUgZ290IGEgbGlzdCBvZiBzeW1ib2xzIHRvIHJldmlldzogYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZGAsIGBobW1fcmFuZ2VfZmF1bHRgLCBgaG1tX2RvX2ZhdWx0YCwgYGhtbV9yZWNvcmRfZmF1bHRgLCBgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZGAsIGBkbWlycm9yX3JlYWRfdW5sb2NrZWRgLCBgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZGAsIGBkbWlycm9yX2ZhdWx0X3VubG9ja2VkYCwgYW5kIGBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2tgLgoKU3BlY2lmaWNhbGx5LCBgaG1tX3JhbmdlX2ZhdWx0YCBpdHNlbGYgaXMgYW4gaW50ZXJlc3RpbmcgcG9pbnQuIFdoaWxlIGl0JiMzOTtzIG5vdCBhIGdlbmVyYWwgaG90LXBhdGggZnVuY3Rpb24gbGlrZSBgaGFuZGxlX21tX2ZhdWx0YCwgaXQmIzM5O3MgY29yZSB0byBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciBITU0gZGV2aWNlcywgc28gaXQmIzM5O3MgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBgaG1tX2RvX2ZhdWx0YCBhbmQgYGhtbV9yZWNvcmRfZmF1bHRgIGFyZSBzdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbW0vaG1tLmNgLiBUaGUgYGRtaXJyb3JfKmAgZnVuY3Rpb25zIGFyZSB3aXRoaW4gYGxpYi90ZXN0X2htbS5jYCwgYW5kIGBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2tgIGlzIGluIGBkcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jYC4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRoZSBsb2NhdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zIGluIG1pbmQgd2hlbiBzZXR0aW5nIHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LgoKVGhlIHBhdGNoJiMzOTtzIGFjdHVhbCBtZWF0IGlzIHRoZSBtb2RpZmljYXRpb24gdG8gdGhlIGNvcmUgSE1NIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSwgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZGAsIGZvciBkcm9wcGluZyB0aGUgbW1hcCBsb2NrIGR1cmluZyBwYWdlIGZhdWx0cy4gVGhpcyBoYXMgZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMsIGFzIGl0IGFpbXMgdG8gaW1wcm92ZSBoYW5kbGluZyB3aXRoIHVzZXJmYXVsdGZkIHJlZ2lvbnMuIEl0IGFsc28gcmVmYWN0b3JzIHRoZSBvcmlnaW5hbCBgaG1tX3JhbmdlX2ZhdWx0YC4gRnVydGhlcm1vcmUsIEkmIzM5O3ZlIGdvdCB0byByZW1lbWJlciB0aGF0IHRoZSBjaGFuZ2VzIHJpcHBsZSB0aHJvdWdoIGB0ZXN0X2htbS5jYCBhbmQgYG1zaHZfcmVnaW9ucy5jYCB0byB1c2UgdGhpcyBuZXcgQVBJLgoKU28sIGluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbXBhY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRyaXZlciBjb2RlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgbG9jayBkcm9wcGluZyBkdXJpbmcgcGFnZSBmYXVsdHMsIHNvIGl0IHdhcnJhbnRzIHNlcmlvdXMgZnV6emluZy4gTm93LCBJJiMzOTtsbCBgc2V0LXJlc3VsdHNgIGFuZCBwcmVwYXJlIGZvciB0aGUgZnV6emluZyBjYW1wYWlnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O01TSFZfUk9PVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2htbV9yYW5nZV9mYXVsdF91bmxvY2tlZCYjMzQ7LAogICAgJiMzNDtobW1fcmFuZ2VfZmF1bHQmIzM0OywKICAgICYjMzQ7aG1tX2RvX2ZhdWx0JiMzNDssCiAgICAmIzM0O2htbV9yZWNvcmRfZmF1bHQmIzM0OywKICAgICYjMzQ7aG1tX3JhbmdlX2ZhdWx0X2xvY2tlZCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX3JlYWRfdW5sb2NrZWQmIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX2ZhdWx0X3VubG9ja2VkJiMzNDssCiAgICAmIzM0O21zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKClgIGluIHRoZSBITU0gc3Vic3lzdGVtIHRvIGFsbG93IGRyb3BwaW5nIHRoZSBtbWFwIGxvY2sgZHVyaW5nIHBhZ2UgZmF1bHRzLCB3aGljaCBpcyB1c2VmdWwgZm9yIHJlZ2lvbnMgbWFuYWdlZCBieSB1c2VyZmF1bHRmZC4gSXQgcmVmYWN0b3JzIHRoZSBjb3JlIGBobW1fcmFuZ2VfZmF1bHQoKWAgbG9naWMgdG8gc3VwcG9ydCB0aGlzIGFuZCB1cGRhdGVzIHRoZSBgdGVzdF9obW1gIG1vZHVsZSBhbmQgYG1zaHZfcmVnaW9uc2AgZHJpdmVyIHRvIHV0aWxpemUgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRyaXZlciBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VEVTVF9ITU0mIzM0OywKICAgICYjMzQ7TVNIVl9ST09UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkJiMzNDssCiAgICAmIzM0O2htbV9yYW5nZV9mYXVsdCYjMzQ7LAogICAgJiMzNDtobW1fZG9fZmF1bHQmIzM0OywKICAgICYjMzQ7aG1tX3JlY29yZF9mYXVsdCYjMzQ7LAogICAgJiMzNDtobW1fcmFuZ2VfZmF1bHRfbG9ja2VkJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfcmVhZF91bmxvY2tlZCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfZmF1bHRfdW5sb2NrZWQmIzM0OywKICAgICYjMzQ7bXNodl9yZWdpb25faG1tX2ZhdWx0X2FuZF9sb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKWAgaW4gdGhlIEhNTSBzdWJzeXN0ZW0gdG8gYWxsb3cgZHJvcHBpbmcgdGhlIG1tYXAgbG9jayBkdXJpbmcgcGFnZSBmYXVsdHMsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgcmVnaW9ucyBtYW5hZ2VkIGJ5IHVzZXJmYXVsdGZkLiBJdCByZWZhY3RvcnMgdGhlIGNvcmUgYGhtbV9yYW5nZV9mYXVsdCgpYCBsb2dpYyB0byBzdXBwb3J0IHRoaXMgYW5kIHVwZGF0ZXMgdGhlIGB0ZXN0X2htbWAgbW9kdWxlIGFuZCBgbXNodl9yZWdpb25zYCBkcml2ZXIgdG8gdXRpbGl6ZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZHJpdmVyIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6MDM6MjcuNjE4MjAzNjM2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTczMzU0MTg5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIk1TSFZfUk9PVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZFwiLFxuICAgIFwiaG1tX3JhbmdlX2ZhdWx0XCIsXG4gICAgXCJobW1fZG9fZmF1bHRcIixcbiAgICBcImhtbV9yZWNvcmRfZmF1bHRcIixcbiAgICBcImhtbV9yYW5nZV9mYXVsdF9sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfcmVhZF91bmxvY2tlZFwiLFxuICAgIFwiZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZFwiLFxuICAgIFwiZG1pcnJvcl9mYXVsdF91bmxvY2tlZFwiLFxuICAgIFwibXNodl9yZWdpb25faG1tX2ZhdWx0X2FuZF9sb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBBUEkgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpYCBpbiB0aGUgSE1NIHN1YnN5c3RlbSB0byBhbGxvdyBkcm9wcGluZyB0aGUgbW1hcCBsb2NrIGR1cmluZyBwYWdlIGZhdWx0cywgd2hpY2ggaXMgdXNlZnVsIGZvciByZWdpb25zIG1hbmFnZWQgYnkgdXNlcmZhdWx0ZmQuIEl0IHJlZmFjdG9ycyB0aGUgY29yZSBgaG1tX3JhbmdlX2ZhdWx0KClgIGxvZ2ljIHRvIHN1cHBvcnQgdGhpcyBhbmQgdXBkYXRlcyB0aGUgYHRlc3RfaG1tYCBtb2R1bGUgYW5kIGBtc2h2X3JlZ2lvbnNgIGRyaXZlciB0byB1dGlsaXplIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkcml2ZXIgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDAyOjAzOjI3LjYxODIwOTc1NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNjQ2NjQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY0Yjc1OTNmNmZlODZjYjZjNTQwZTY0NGE5YjFkMWRjZGY4ODBlNzBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgNyAwMjowMzoyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcXG5pbmRleCA3ZDYxYjdhOGI2NWI3OS4uODQ0MzQzNzEyYWJkZGEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0XFxuQEAgLTIwOCw2ICsyMDgsNjUgQEAgaW52YWxpZGF0ZSgpIGNhbGxiYWNrLiBUaGF0IGxvY2sgbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nXFxuIG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCkgdG8gYXZvaWQgYW55IHJhY2Ugd2l0aCBhIGNvbmN1cnJlbnQgQ1BVIHBhZ2UgdGFibGVcXG4gdXBkYXRlLlxcbiBcXG4rRHJvcHBpbmcgdGhlIG1tYXAgbG9jayBkdXJpbmcgcGFnZSBmYXVsdHNcXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK1NvbWUgVk1BcyBoYXZlIGZhdWx0IGhhbmRsZXJzIHRoYXQgbmVlZCB0byByZWxlYXNlIHRoZSBtbWFwIGxvY2sgd2hpbGVcXG4rc2VydmljaW5nIGEgZmF1bHQgKGZvciBleGFtcGxlLCByZWdpb25zIG1hbmFnZWQgYnkgYGB1c2VyZmF1bHRmZGBgKS5cXG4rYGBobW1fcmFuZ2VfZmF1bHQoKWBgIGNhbm5vdCBiZSB1c2VkIG9uIHN1Y2ggbWFwcGluZ3MgYmVjYXVzZSBpdCBtdXN0IGhvbGQgdGhlXFxuK21tYXAgbG9jayBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjYWxsLiBEcml2ZXJzIHRoYXQgbmVlZCB0byBzdXBwb3J0IHRoZW1cXG4rc2hvdWxkIGNhbGw6OlxcbitcXG4rICBpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTtcXG4rXFxuK1RoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCBgYG1tYXBfcmVhZF9sb2NrYGAgYmVmb3JlIHRoZSBjYWxsLlxcbitgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpYGAgdGFrZXMgdGhlIG1tYXAgcmVhZCBsb2NrIGludGVybmFsbHkgYW5kIGFsbG93c1xcbitgYGhhbmRsZV9tbV9mYXVsdCgpYGAgdG8gZHJvcCBpdCBkdXJpbmcgZmF1bHQgaGFuZGxpbmcuIElmIHRoZSBtbWFwIGxvY2sgaXNcXG4rZHJvcHBlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGAtRUJVU1lgYC4gVGhlIGNhbGxlciBtdXN0IHRoZW4gcmVzdGFydCB0aGVcXG4rd2FsayBmcm9tIGBgcmFuZ2UtXFx1MDAzZXN0YXJ0YGAgd2l0aCBhIGZyZXNoIG5vdGlmaWVyIHNlcXVlbmNlLiBgYC1FSU5UUmBgIGlzXFxuK3JldHVybmVkIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcgZHVyaW5nIHJldHJ5IGhhbmRsaW5nLlxcbitcXG4rQSB0eXBpY2FsIGNhbGxlciBsb29rcyBsaWtlIHRoaXM6OlxcbitcXG4rIGludCBkcml2ZXJfcG9wdWxhdGVfcmFuZ2VfdW5sb2NrZWQoLi4uKVxcbisge1xcbisgICAgICBzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlO1xcbisgICAgICAuLi5cXG4rXFxuKyAgICAgIHJhbmdlLm5vdGlmaWVyID0gXFx1MDAyNmludGVydmFsX3N1YjtcXG4rICAgICAgcmFuZ2Uuc3RhcnQgPSAuLi47XFxuKyAgICAgIHJhbmdlLmVuZCA9IC4uLjtcXG4rICAgICAgcmFuZ2UuaG1tX3BmbnMgPSAuLi47XFxuK1xcbisgICAgICBpZiAoIW1tZ2V0X25vdF96ZXJvKGludGVydmFsX3N1Yi5tbSkpXFxuKyAgICAgICAgICByZXR1cm4gLUVGQVVMVDtcXG4rXFxuKyBhZ2FpbjpcXG4rICAgICAgcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4oXFx1MDAyNmludGVydmFsX3N1Yik7XFxuKyAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZChcXHUwMDI2cmFuZ2UpO1xcbisgICAgICBpZiAocmV0KSB7XFxuKyAgICAgICAgICBpZiAocmV0ID09IC1FQlVTWSlcXG4rICAgICAgICAgICAgICBnb3RvIGFnYWluO1xcbisgICAgICAgICAgZ290byBvdXRfcHV0O1xcbisgICAgICB9XFxuK1xcbisgICAgICB0YWtlX2xvY2soZHJpdmVyLVxcdTAwM2V1cGRhdGUpO1xcbisgICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoXFx1MDAyNmludGVydmFsX3N1YiwgcmFuZ2Uubm90aWZpZXJfc2VxKSkge1xcbisgICAgICAgICAgcmVsZWFzZV9sb2NrKGRyaXZlci1cXHUwMDNldXBkYXRlKTtcXG4rICAgICAgICAgIGdvdG8gYWdhaW47XFxuKyAgICAgIH1cXG4rXFxuKyAgICAgIC8qIFVzZSBwZm5zIGFycmF5IGNvbnRlbnQgdG8gdXBkYXRlIGRldmljZSBwYWdlIHRhYmxlLFxcbisgICAgICAgKiB1bmRlciB0aGUgdXBkYXRlIGxvY2sgKi9cXG4rXFxuKyAgICAgIHJlbGVhc2VfbG9jayhkcml2ZXItXFx1MDAzZXVwZGF0ZSk7XFxuKyAgICAgIHJldCA9IDA7XFxuK1xcbisgb3V0X3B1dDpcXG4rICAgICAgbW1wdXQoaW50ZXJ2YWxfc3ViLm1tKTtcXG4rICAgICAgcmV0dXJuIHJldDtcXG4rIH1cXG4rXFxuIExldmVyYWdlIGRlZmF1bHRfZmxhZ3MgYW5kIHBmbl9mbGFnc19tYXNrXFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jIGIvZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuY1xcbmluZGV4IDZkNjVlNWI0MjE1Mjk1Li4wNDY3NmYwNmM1Yzc0MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jXFxuKysrIGIvZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuY1xcbkBAIC0zODgsMTMgKzM4OCwxMSBAQCBpbnQgbXNodl9yZWdpb25fZ2V0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbilcXG4gICpcXG4gICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIHN0ZXBzOlxcbiAgKiAxLiBSZWFkcyB0aGUgbm90aWZpZXIgc2VxdWVuY2UgZm9yIHRoZSBITU0gcmFuZ2UuXFxuLSAqIDIuIEFjcXVpcmVzIGEgcmVhZCBsb2NrIG9uIHRoZSBtZW1vcnkgbWFwLlxcbi0gKiAzLiBIYW5kbGVzIEhNTSBmYXVsdHMgZm9yIHRoZSBzcGVjaWZpZWQgcmFuZ2UuXFxuLSAqIDQuIFJlbGVhc2VzIHRoZSByZWFkIGxvY2sgb24gdGhlIG1lbW9yeSBtYXAuXFxuLSAqIDUuIElmIHN1Y2Nlc3NmdWwsIGxvY2tzIHRoZSBtZW1vcnkgcmVnaW9uIG11dGV4Llxcbi0gKiA2LiBWZXJpZmllcyBpZiB0aGUgbm90aWZpZXIgc2VxdWVuY2UgaGFzIGNoYW5nZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24uXFxuKyAqIDIuIEhhbmRsZXMgSE1NIGZhdWx0cyBmb3IgdGhlIHNwZWNpZmllZCByYW5nZS5cXG4rICogMy4gSWYgc3VjY2Vzc2Z1bCwgbG9ja3MgdGhlIG1lbW9yeSByZWdpb24gbXV0ZXguXFxuKyAqIDQuIFZlcmlmaWVzIGlmIHRoZSBub3RpZmllciBzZXF1ZW5jZSBoYXMgY2hhbmdlZCBkdXJpbmcgdGhlIG9wZXJhdGlvbi5cXG4gICogICAgSWYgaXQgaGFzLCByZWxlYXNlcyB0aGUgbXV0ZXggYW5kIHJldHVybnMgLUVCVVNZIHRvIG1hdGNoIHdpdGhcXG4tICogICAgaG1tX3JhbmdlX2ZhdWx0KCkgcmV0dXJuIGNvZGUgZm9yIHJlcGVhdGluZy5cXG4rICogICAgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKCkgc28gdGhlIGNhbGxlciByZXRyaWVzIHRoZSByYW5nZSBmYXVsdC5cXG4gICpcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuICAqL1xcbkBAIC00MDQsOSArNDAyLDcgQEAgc3RhdGljIGludCBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2soc3RydWN0IG1zaHZfbWVtX3JlZ2lvbiAqcmVnaW9uLFxcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmFuZ2UtXFx1MDAzZW5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKHJhbmdlLVxcdTAwM2Vub3RpZmllcik7XFxuLVxcdG1tYXBfcmVhZF9sb2NrKHJlZ2lvbi1cXHUwMDNlbXJlZ19tbmkubW0pO1xcbi1cXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHQocmFuZ2UpO1xcbi1cXHRtbWFwX3JlYWRfdW5sb2NrKHJlZ2lvbi1cXHUwMDNlbXJlZ19tbmkubW0pO1xcbitcXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQocmFuZ2UpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9obW0uaCBiL2luY2x1ZGUvbGludXgvaG1tLmhcXG5pbmRleCBkYjc1ZmZjOTQ5YTdhYy4uMWI1ODRlNWEyOTAwMWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9obW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaG1tLmhcXG5AQCAtMTIzLDYgKzEyMyw3IEBAIHN0cnVjdCBobW1fcmFuZ2Uge1xcbiAgKiBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBmb3IgaG93IHRvIHVzZSB0aGUgcmFuZ2UgQVBJLlxcbiAgKi9cXG4gaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XFxuK2ludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xcbiBcXG4gLypcXG4gICogSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCAtIGRlZmF1bHQgdGltZW91dCAobXMpIHdoZW4gd2FpdGluZyBmb3IgYSByYW5nZVxcbmRpZmYgLS1naXQgYS9saWIvdGVzdF9obW0uYyBiL2xpYi90ZXN0X2htbS5jXFxuaW5kZXggNDVjMGNiOTkyMjE4NGEuLmRjYzNhMjNiYjk4M2RjIDEwMDY0NFxcbi0tLSBhL2xpYi90ZXN0X2htbS5jXFxuKysrIGIvbGliL3Rlc3RfaG1tLmNcXG5AQCAtMzg5LDYgKzM4OSw3NiBAQCBzdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cXG4rXFx0XFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHR3aGlsZSAodHJ1ZSkge1xcbitcXHRcXHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyYW5nZS1cXHUwMDNlbm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4ocmFuZ2UtXFx1MDAzZW5vdGlmaWVyKTtcXG4rXFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHJhbmdlKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRpZiAocmV0ID09IC1FQlVTWSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkbWlycm9yLVxcdTAwM2VtdXRleCk7XFxuK1xcdFxcdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS1cXHUwMDNlbm90aWZpZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICByYW5nZS1cXHUwMDNlbm90aWZpZXJfc2VxKSkge1xcbitcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRtaXJyb3ItXFx1MDAzZW11dGV4KTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRtaXJyb3JfZG9fZmF1bHQoZG1pcnJvciwgcmFuZ2UpO1xcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkbWlycm9yLVxcdTAwM2VtdXRleCk7XFxuK291dDpcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkbWlycm9yX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbitcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuK1xcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgd3JpdGUpXFxuK3tcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBkbWlycm9yLVxcdTAwM2Vub3RpZmllci5tbTtcXG4rXFx0dW5zaWduZWQgbG9uZyBhZGRyO1xcbitcXHR1bnNpZ25lZCBsb25nIHBmbnNbMzJdO1xcbitcXHRzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlID0ge1xcbitcXHRcXHQubm90aWZpZXIgPSBcXHUwMDI2ZG1pcnJvci1cXHUwMDNlbm90aWZpZXIsXFxuK1xcdFxcdC5obW1fcGZucyA9IHBmbnMsXFxuK1xcdFxcdC5wZm5fZmxhZ3NfbWFzayA9IDAsXFxuK1xcdFxcdC5kZWZhdWx0X2ZsYWdzID1cXG4rXFx0XFx0XFx0SE1NX1BGTl9SRVFfRkFVTFQgfCAod3JpdGUgPyBITU1fUEZOX1JFUV9XUklURSA6IDApLFxcbitcXHRcXHQuZGV2X3ByaXZhdGVfb3duZXIgPSBkbWlycm9yLVxcdTAwM2VtZGV2aWNlLFxcbitcXHR9O1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmICghbW1nZXRfbm90X3plcm8obW0pKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIFxcdTAwM2MgZW5kOyBhZGRyID0gcmFuZ2UuZW5kKSB7XFxuK1xcdFxcdHJhbmdlLnN0YXJ0ID0gYWRkcjtcXG4rXFx0XFx0cmFuZ2UuZW5kID0gbWluKGFkZHIgKyAoQVJSQVlfU0laRShwZm5zKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSwgZW5kKTtcXG4rXFxuK1xcdFxcdHJldCA9IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgXFx1MDAyNnJhbmdlKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdG1tcHV0KG1tKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBkbWlycm9yX2ZhdWx0KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgd3JpdGUpXFxuIHtcXG5AQCAtNDg4LDYgKzU1OCw0NyBAQCBzdGF0aWMgaW50IGRtaXJyb3JfcmVhZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGRtaXJyb3JfcmVhZF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcXG4re1xcbitcXHRzdHJ1Y3QgZG1pcnJvcl9ib3VuY2UgYm91bmNlO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNtZC1cXHUwMDNlbnBhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRzdGFydCA9IGNtZC1cXHUwMDNlYWRkcjtcXG4rXFx0ZW5kID0gc3RhcnQgKyBzaXplO1xcbitcXHRpZiAoZW5kIFxcdTAwM2Mgc3RhcnQpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0ID0gZG1pcnJvcl9ib3VuY2VfaW5pdChcXHUwMDI2Ym91bmNlLCBzdGFydCwgc2l6ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHR3aGlsZSAoMSkge1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkbWlycm9yLVxcdTAwM2VtdXRleCk7XFxuK1xcdFxcdHJldCA9IGRtaXJyb3JfZG9fcmVhZChkbWlycm9yLCBzdGFydCwgZW5kLCBcXHUwMDI2Ym91bmNlKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkbWlycm9yLVxcdTAwM2VtdXRleCk7XFxuK1xcdFxcdGlmIChyZXQgIT0gLUVOT0VOVClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRzdGFydCA9IGNtZC1cXHUwMDNlYWRkciArIChib3VuY2UuY3BhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbitcXHRcXHRyZXQgPSBkbWlycm9yX2ZhdWx0X3VubG9ja2VkKGRtaXJyb3IsIHN0YXJ0LCBlbmQsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNtZC1cXHUwMDNlZmF1bHRzKys7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyZXQgPT0gMCkge1xcbitcXHRcXHRpZiAoY29weV90b191c2VyKHU2NF90b191c2VyX3B0cihjbWQtXFx1MDAzZXB0ciksIGJvdW5jZS5wdHIsXFxuK1xcdFxcdFxcdFxcdCBib3VuY2Uuc2l6ZSkpXFxuK1xcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuK1xcdH1cXG4rXFx0Y21kLVxcdTAwM2VjcGFnZXMgPSBib3VuY2UuY3BhZ2VzO1xcbitcXHRkbWlycm9yX2JvdW5jZV9maW5pKFxcdTAwMjZib3VuY2UpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGRtaXJyb3JfZG9fd3JpdGUoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuIFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IGRtaXJyb3JfYm91bmNlICpib3VuY2UpXFxuIHtcXG5AQCAtMTU3Miw2ICsxNjgzLDkgQEAgc3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHRcXHRkbWlycm9yLVxcdTAwM2VmbGFncyA9IGNtZC5ucGFnZXM7XFxuIFxcdFxcdHJldCA9IDA7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRUQ6XFxuK1xcdFxcdHJldCA9IGRtaXJyb3JfcmVhZF91bmxvY2tlZChkbWlycm9yLCBcXHUwMDI2Y21kKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfaG1tX3VhcGkuaCBiL2xpYi90ZXN0X2htbV91YXBpLmhcXG5pbmRleCBmOTRjNmQ0NTczMzgyOC4uZWE5YjBlYzQwNGZiNTUgMTAwNjQ0XFxuLS0tIGEvbGliL3Rlc3RfaG1tX3VhcGkuaFxcbisrKyBiL2xpYi90ZXN0X2htbV91YXBpLmhcXG5AQCAtMzgsNiArMzgsNyBAQCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kIHtcXG4gI2RlZmluZSBITU1fRE1JUlJPUl9DSEVDS19FWENMVVNJVkVcXHRfSU9XUignSCcsIDB4MDYsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXFxuICNkZWZpbmUgSE1NX0RNSVJST1JfUkVMRUFTRVxcdFxcdF9JT1dSKCdIJywgMHgwNywgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcXG4gI2RlZmluZSBITU1fRE1JUlJPUl9GTEFHU1xcdFxcdF9JT1dSKCdIJywgMHgwOCwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcXG4rI2RlZmluZSBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VEXFx0X0lPV1IoJ0gnLCAweDA5LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxcbiBcXG4gI2RlZmluZSBITU1fRE1JUlJPUl9GTEFHX0ZBSUxfQUxMT0NcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAwKVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uY1xcbmluZGV4IDRmM2Y2MjdkMmI0NzcyLi4zMTYxMTY5OTQyMDljOCAxMDA2NDRcXG4tLS0gYS9tbS9obW0uY1xcbisrKyBiL21tL2htbS5jXFxuQEAgLTMyLDkgKzMyLDI3IEBAXFxuIFxcbiBzdHJ1Y3QgaG1tX3ZtYV93YWxrIHtcXG4gXFx0c3RydWN0IGhtbV9yYW5nZVxcdCpyYW5nZTtcXG4rXFx0aW50XFx0XFx0XFx0KmxvY2tlZDtcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGxhc3Q7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRlbmQ7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdHJlcXVpcmVkX2ZhdWx0O1xcbiB9O1xcbiBcXG4rLypcXG4rICogSW50ZXJuYWwgc2VudGluZWwgcmV0dXJuZWQgYnkgd2FsayBjYWxsYmFja3Mgd2hlbiB0aGV5IG5lZWQgYSBwYWdlIGZhdWx0LlxcbisgKiBUaGUgY2FsbGJhY2sgc3RvcmVzIGVuZC9yZXF1aXJlZF9mYXVsdCBpbiBobW1fdm1hX3dhbGs7IHRoZSBvdXRlciBsb29wXFxuKyAqIGNvbnN1bWVzIHRoZSBzZW50aW5lbCBhbmQgbmV2ZXIgcHJvcGFnYXRlcyBpdCB0byB0aGUgY2FsbGVyLlxcbisgKi9cXG4rI2RlZmluZSBITU1fRkFVTFRfUEVORElOR1xcdC1FQUdBSU5cXG4rXFxuKy8qXFxuKyAqIEludGVybmFsIHNlbnRpbmVsIHJldHVybmVkIGJ5IGhtbV9kb19mYXVsdCgpIHdoZW4gaGFuZGxlX21tX2ZhdWx0KClcXG4rICogY29tcGxldGVzIGEgcGFnZSBmYXVsdCB3aXRoIHRoZSBtbWFwIGxvY2sgZHJvcHBlZC4gaG1tX2RvX2ZhdWx0KCkgc2V0c1xcbisgKiAqbG9ja2VkID0gMDsgdGhlIG91dGVyIGxvb3AgY29uc3VtZXMgdGhlIHNlbnRpbmVsIGFuZCBuZXZlciBwcm9wYWdhdGVzIGl0XFxuKyAqIHRvIHRoZSBjYWxsZXIuXFxuKyAqL1xcbisjZGVmaW5lIEhNTV9GQVVMVF9VTkxPQ0tFRFxcdC1FTk9MQ0tcXG4rXFxuIGVudW0ge1xcbiBcXHRITU1fTkVFRF9GQVVMVCA9IDEgXFx1MDAzY1xcdTAwM2MgMCxcXG4gXFx0SE1NX05FRURfV1JJVEVfRkFVTFQgPSAxIFxcdTAwM2NcXHUwMDNjIDEsXFxuQEAgLTYwLDM3ICs3OCwyNSBAQCBzdGF0aWMgaW50IGhtbV9wZm5zX2ZpbGwodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gfVxcbiBcXG4gLypcXG4tICogaG1tX3ZtYV9mYXVsdCgpIC0gZmF1bHQgaW4gYSByYW5nZSBsYWNraW5nIHZhbGlkIHBtZCBvciBwdGUocylcXG4tICogQGFkZHI6IHJhbmdlIHZpcnR1YWwgc3RhcnQgYWRkcmVzcyAoaW5jbHVzaXZlKVxcbi0gKiBAZW5kOiByYW5nZSB2aXJ0dWFsIGVuZCBhZGRyZXNzIChleGNsdXNpdmUpXFxuLSAqIEByZXF1aXJlZF9mYXVsdDogSE1NX05FRURfKiBmbGFnc1xcbi0gKiBAd2FsazogbW1fd2FsayBzdHJ1Y3R1cmVcXG4tICogUmV0dXJuOiAtRUJVU1kgYWZ0ZXIgcGFnZSBmYXVsdCwgb3IgcGFnZSBmYXVsdCBlcnJvclxcbisgKiBobW1fcmVjb3JkX2ZhdWx0KCkgLSByZWNvcmQgYSByYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGZhdWx0ZWQgaW5cXG4gICpcXG4tICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBwbWRfbm9uZSgpIG9yIHB0ZV9ub25lKCkgcmV0dXJucyB0cnVlLFxcbi0gKiBvciB3aGVuZXZlciB0aGVyZSBpcyBubyBwYWdlIGRpcmVjdG9yeSBjb3ZlcmluZyB0aGUgdmlydHVhbCBhZGRyZXNzIHJhbmdlLlxcbisgKiBDYWxsZWQgYnkgdGhlIHdhbGsgY2FsbGJhY2tzIHdoZW4gdGhleSBkaXNjb3ZlciB0aGF0IHBhcnQgb2YgdGhlIHJhbmdlXFxuKyAqIG5lZWRzIGEgcGFnZSBmYXVsdC4gIFRoZSBjYWxsYmFjayByZWNvcmRzIHdoYXQgdG8gZmF1bHQgYW5kIHJldHVybnNcXG4rICogSE1NX0ZBVUxUX1BFTkRJTkc7IHRoZSBvdXRlciBsb29wIGluIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoKSBkcm9wc1xcbisgKiBiYWNrIG91dCBvZiB3YWxrX3BhZ2VfcmFuZ2UoKSBhbmQgaW52b2tlcyBoYW5kbGVfbW1fZmF1bHQoKSBmcm9tIGEgY29udGV4dFxcbisgKiB3aGVyZSBubyBwYWdlLXRhYmxlIG9yIGh1Z2V0bGJfdm1hX2xvY2sgaXMgaGVsZC5cXG4gICovXFxuLXN0YXRpYyBpbnQgaG1tX3ZtYV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi1cXHRcXHRcXHQgdW5zaWduZWQgaW50IHJlcXVpcmVkX2ZhdWx0LCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4rc3RhdGljIGludCBobW1fcmVjb3JkX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuK1xcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmF1bHQsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4ge1xcbiBcXHRzdHJ1Y3QgaG1tX3ZtYV93YWxrICpobW1fdm1hX3dhbGsgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbi1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXFx1MDAzZXZtYTtcXG4tXFx0dW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzID0gRkFVTFRfRkxBR19SRU1PVEU7XFxuIFxcbiBcXHRXQVJOX09OX09OQ0UoIXJlcXVpcmVkX2ZhdWx0KTtcXG4gXFx0aG1tX3ZtYV93YWxrLVxcdTAwM2VsYXN0ID0gYWRkcjtcXG4tXFxuLVxcdGlmIChyZXF1aXJlZF9mYXVsdCBcXHUwMDI2IEhNTV9ORUVEX1dSSVRFX0ZBVUxUKSB7XFxuLVxcdFxcdGlmICghKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9XUklURSkpXFxuLVxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuLVxcdFxcdGZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfV1JJVEU7XFxuLVxcdH1cXG4tXFxuLVxcdGZvciAoOyBhZGRyIFxcdTAwM2MgZW5kOyBhZGRyICs9IFBBR0VfU0laRSlcXG4tXFx0XFx0aWYgKGhhbmRsZV9tbV9mYXVsdCh2bWEsIGFkZHIsIGZhdWx0X2ZsYWdzLCBOVUxMKSBcXHUwMDI2XFxuLVxcdFxcdCAgICBWTV9GQVVMVF9FUlJPUilcXG4tXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdHJldHVybiAtRUJVU1k7XFxuK1xcdGhtbV92bWFfd2Fsay1cXHUwMDNlZW5kID0gZW5kO1xcbitcXHRobW1fdm1hX3dhbGstXFx1MDAzZXJlcXVpcmVkX2ZhdWx0ID0gcmVxdWlyZWRfZmF1bHQ7XFxuK1xcdHJldHVybiBITU1fRkFVTFRfUEVORElORztcXG4gfVxcbiBcXG4gc3RhdGljIHVuc2lnbmVkIGludCBobW1fcHRlX25lZWRfZmF1bHQoY29uc3Qgc3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrLFxcbkBAIC0xNzQsNyArMTgwLDcgQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfaG9sZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRyZXR1cm4gaG1tX3BmbnNfZmlsbChhZGRyLCBlbmQsIHJhbmdlLCBITU1fUEZOX0VSUk9SKTtcXG4gXFx0fVxcbiBcXHRpZiAocmVxdWlyZWRfZmF1bHQpXFxuLVxcdFxcdHJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xcbitcXHRcXHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4gXFx0cmV0dXJuIGhtbV9wZm5zX2ZpbGwoYWRkciwgZW5kLCByYW5nZSwgMCk7XFxuIH1cXG4gXFxuQEAgLTIwOSw3ICsyMTUsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRyZXF1aXJlZF9mYXVsdCA9XFxuIFxcdFxcdGhtbV9yYW5nZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgaG1tX3BmbnMsIG5wYWdlcywgY3B1X2ZsYWdzKTtcXG4gXFx0aWYgKHJlcXVpcmVkX2ZhdWx0KVxcbi1cXHRcXHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4rXFx0XFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuIFxcbiBcXHRwZm4gPSBwbWRfcGZuKHBtZCkgKyAoKGFkZHIgXFx1MDAyNiB+UE1EX01BU0spIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbiBcXHRmb3IgKGkgPSAwOyBhZGRyIFxcdTAwM2MgZW5kOyBhZGRyICs9IFBBR0VfU0laRSwgaSsrLCBwZm4rKykge1xcbkBAIC0zMjgsNyArMzM0LDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gZmF1bHQ6XFxuIFxcdHB0ZV91bm1hcChwdGVwKTtcXG4gXFx0LyogRmF1bHQgYW55IHZpcnR1YWwgYWRkcmVzcyB3ZSB3ZXJlIGFza2VkIHRvIGZhdWx0ICovXFxuLVxcdHJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xcbitcXHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbkBAIC0zNzEsNyArMzc3LDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBucGFnZXMsIDApO1xcbiBcXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcXG4gXFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcXG4tXFx0XFx0XFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuK1xcdFxcdFxcdHJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHR9XFxuQEAgLTUxNyw3ICs1MjMsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19wdWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBucGFnZXMsIGNwdV9mbGFncyk7XFxuIFxcdFxcdGlmIChyZXF1aXJlZF9mYXVsdCkge1xcbiBcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbi1cXHRcXHRcXHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHBmbiA9IHB1ZF9wZm4ocHVkKSArICgoYWRkciBcXHUwMDI2IH5QVURfTUFTSykgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuQEAgLTU2NCwyMSArNTcwLDggQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbiBcXHRyZXF1aXJlZF9mYXVsdCA9XFxuIFxcdFxcdGhtbV9wdGVfbmVlZF9mYXVsdChobW1fdm1hX3dhbGssIHBmbl9yZXFfZmxhZ3MsIGNwdV9mbGFncyk7XFxuIFxcdGlmIChyZXF1aXJlZF9mYXVsdCkge1xcbi1cXHRcXHRpbnQgcmV0O1xcbi1cXG4gXFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4tXFx0XFx0aHVnZXRsYl92bWFfdW5sb2NrX3JlYWQodm1hKTtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogQXZvaWQgZGVhZGxvY2s6IGRyb3AgdGhlIHZtYSBsb2NrIGJlZm9yZSBjYWxsaW5nXFxuLVxcdFxcdCAqIGhtbV92bWFfZmF1bHQoKSwgd2hpY2ggd2lsbCBpdHNlbGYgcG90ZW50aWFsbHkgdGFrZSBhbmRcXG4tXFx0XFx0ICogZHJvcCB0aGUgdm1hIGxvY2suIFRoaXMgaXMgYWxzbyBjb3JyZWN0IGZyb20gYVxcbi1cXHRcXHQgKiBwcm90ZWN0aW9uIHBvaW50IG9mIHZpZXcsIGJlY2F1c2UgdGhlcmUgaXMgbm8gZnVydGhlclxcbi1cXHRcXHQgKiB1c2UgaGVyZSBvZiBlaXRoZXIgcHRlIG9yIHB0bCBhZnRlciBkcm9wcGluZyB0aGUgdm1hXFxuLVxcdFxcdCAqIGxvY2suXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZXQgPSBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xcbi1cXHRcXHRodWdldGxiX3ZtYV9sb2NrX3JlYWQodm1hKTtcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuIFxcdH1cXG4gXFxuIFxcdHBmbiA9IHB0ZV9wZm4oZW50cnkpICsgKChzdGFydCBcXHUwMDI2IH5obWFzaykgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuQEAgLTYzNywyOSArNjMwLDY2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgaG1tX3dhbGtfb3BzID0ge1xcbiBcXHQud2Fsa19sb2NrXFx0PSBQR1dBTEtfUkRMT0NLLFxcbiB9O1xcbiBcXG4tLyoqXFxuLSAqIGhtbV9yYW5nZV9mYXVsdCAtIHRyeSB0byBmYXVsdCBzb21lIGFkZHJlc3MgaW4gYSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2VcXG4tICogQHJhbmdlOlxcdGFyZ3VtZW50IHN0cnVjdHVyZVxcbi0gKlxcbi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczpcXG4rLypcXG4rICogaG1tX2RvX2ZhdWx0IC0gZmF1bHQgaW4gYSByYW5nZSByZWNvcmRlZCBieSBhIHdhbGsgY2FsbGJhY2tcXG4gICpcXG4tICogLUVJTlZBTDpcXHRJbnZhbGlkIGFyZ3VtZW50cyBvciBtbSBvciB2aXJ0dWFsIGFkZHJlc3MgaXMgaW4gYW4gaW52YWxpZCB2bWFcXG4tICpcXHRcXHQoZS5nLiwgZGV2aWNlIGZpbGUgdm1hKS5cXG4tICogLUVOT01FTTpcXHRPdXQgb2YgbWVtb3J5Llxcbi0gKiAtRVBFUk06XFx0SW52YWxpZCBwZXJtaXNzaW9uIChlLmcuLCBhc2tpbmcgZm9yIHdyaXRlIGFuZCByYW5nZSBpcyByZWFkXFxuLSAqXFx0XFx0b25seSkuXFxuLSAqIC1FQlVTWTpcXHRUaGUgcmFuZ2UgaGFzIGJlZW4gaW52YWxpZGF0ZWQgYW5kIHRoZSBjYWxsZXIgbmVlZHMgdG8gd2FpdCBmb3JcXG4tICpcXHRcXHR0aGUgaW52YWxpZGF0aW9uIHRvIGZpbmlzaC5cXG4tICogLUVGQVVMVDogICAgIEEgcGFnZSB3YXMgcmVxdWVzdGVkIHRvIGJlIHZhbGlkIGFuZCBjb3VsZCBub3QgYmUgbWFkZSB2YWxpZFxcbi0gKiAgICAgICAgICAgICAgaWUgaXQgaGFzIG5vIGJhY2tpbmcgVk1BIG9yIGl0IGlzIGlsbGVnYWwgdG8gYWNjZXNzXFxuKyAqIENhbGxlZCBmcm9tIHRoZSBvdXRlciBsb29wIGluIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoKSBhZnRlciBhIGNhbGxiYWNrXFxuKyAqIHJldHVybmVkIEhNTV9GQVVMVF9QRU5ESU5HLiAgQXQgdGhpcyBwb2ludCB3ZSBob2xkIG9ubHkgbW1hcF9sb2NrO1xcbisgKiB0aGUgcGFnZS10YWJsZSBzcGlubG9jayBhbmQgYW55IGh1Z2V0bGJfdm1hX2xvY2sgYWNxdWlyZWQgYnkgdGhlIHdhbGtcXG4rICogZnJhbWV3b3JrIGhhdmUgYWxyZWFkeSBiZWVuIHJlbGVhc2VkIGJ5IHRoZSB1bndpbmQuXFxuICAqXFxuLSAqIFRoaXMgaXMgc2ltaWxhciB0byBnZXRfdXNlcl9wYWdlcygpLCBleGNlcHQgdGhhdCBpdCBjYW4gcmVhZCB0aGUgcGFnZSB0YWJsZXNcXG4tICogd2l0aG91dCBtdXRhdGluZyB0aGVtIChpZSBjYXVzaW5nIGZhdWx0cykuXFxuKyAqIFJldHVybnMgLUVCVVNZIG9uIHN1Y2Nlc3MgKGFsbCBwYWdlcyBmYXVsdGVkLCBjYWxsZXIgc2hvdWxkIHJlLXdhbGspLlxcbisgKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cXG4gICovXFxuLWludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXFxuK3N0YXRpYyBpbnQgaG1tX2RvX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbitcXHRcXHRcXHRzdHJ1Y3QgaG1tX3ZtYV93YWxrICpobW1fdm1hX3dhbGspXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBhZGRyID0gaG1tX3ZtYV93YWxrLVxcdTAwM2VsYXN0O1xcbitcXHR1bnNpZ25lZCBsb25nIGVuZCA9IGhtbV92bWFfd2Fsay1cXHUwMDNlZW5kO1xcbitcXHR1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmF1bHQgPSBobW1fdm1hX3dhbGstXFx1MDAzZXJlcXVpcmVkX2ZhdWx0O1xcbitcXHR1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MgPSBGQVVMVF9GTEFHX1JFTU9URTtcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuK1xcbitcXHRpZiAoaG1tX3ZtYV93YWxrLVxcdTAwM2Vsb2NrZWQpXFxuK1xcdFxcdGZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfQUxMT1dfUkVUUlkgfCBGQVVMVF9GTEFHX0tJTExBQkxFO1xcbitcXG4rXFx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XFxuK1xcdGlmICghdm1hKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGlmIChyZXF1aXJlZF9mYXVsdCBcXHUwMDI2IEhNTV9ORUVEX1dSSVRFX0ZBVUxUKSB7XFxuK1xcdFxcdGlmICghKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9XUklURSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcdFxcdGZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfV1JJVEU7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoOyBhZGRyIFxcdTAwM2MgZW5kOyBhZGRyICs9IFBBR0VfU0laRSkge1xcbitcXHRcXHR2bV9mYXVsdF90IHJldDtcXG4rXFxuK1xcdFxcdHJldCA9IGhhbmRsZV9tbV9mYXVsdCh2bWEsIGFkZHIsIGZhdWx0X2ZsYWdzLCBOVUxMKTtcXG4rXFxuK1xcdFxcdGlmIChyZXQgXFx1MDAyNiAoVk1fRkFVTFRfQ09NUExFVEVEIHwgVk1fRkFVTFRfUkVUUlkpKSB7XFxuK1xcdFxcdFxcdCpobW1fdm1hX3dhbGstXFx1MDAzZWxvY2tlZCA9IDA7XFxuK1xcdFxcdFxcdHJldHVybiBITU1fRkFVTFRfVU5MT0NLRUQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChyZXQgXFx1MDAyNiBWTV9GQVVMVF9FUlJPUikge1xcbitcXHRcXHRcXHRpbnQgZXJyID0gdm1fZmF1bHRfdG9fZXJybm8ocmV0LCAwKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdFxcdEJVRygpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRUJVU1k7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgaW50ICpsb2NrZWQpXFxuIHtcXG4gXFx0c3RydWN0IGhtbV92bWFfd2FsayBobW1fdm1hX3dhbGsgPSB7XFxuIFxcdFxcdC5yYW5nZSA9IHJhbmdlLFxcbitcXHRcXHQubG9ja2VkID0gbG9ja2VkLFxcbiBcXHRcXHQubGFzdCA9IHJhbmdlLVxcdTAwM2VzdGFydCxcXG4gXFx0fTtcXG4gXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSByYW5nZS1cXHUwMDNlbm90aWZpZXItXFx1MDAzZW1tO1xcbkBAIC02NzQsNiArNzA0LDIyIEBAIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXFxuIFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcdFxcdHJldCA9IHdhbGtfcGFnZV9yYW5nZShtbSwgaG1tX3ZtYV93YWxrLmxhc3QsIHJhbmdlLVxcdTAwM2VlbmQsXFxuIFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZobW1fd2Fsa19vcHMsIFxcdTAwMjZobW1fdm1hX3dhbGspO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBXaGVuIEhNTV9GQVVMVF9QRU5ESU5HIGlzIHJldHVybmVkIGEgd2FsayBjYWxsYmFja1xcbitcXHRcXHQgKiByZWNvcmRlZCBhIHJhbmdlIHRoYXQgbmVlZHMgaGFuZGxlX21tX2ZhdWx0KCk7XFxuK1xcdFxcdCAqIGhtbV9kb19mYXVsdCgpIHJ1bnMgdGhlIGZhdWx0IG91dHNpZGUgd2Fsa19wYWdlX3JhbmdlKClcXG4rXFx0XFx0ICogKHNvIG5vIHBhZ2UtdGFibGUgb3IgaHVnZXRsYl92bWFfbG9jayBpcyBoZWxkKSBhbmRcXG4rXFx0XFx0ICogcmV0dXJucyAtRUJVU1kgc28gdGhlIGxvb3AgcmUtd2Fsa3MgYW5kIHBpY2tzIHVwIHRoZVxcbitcXHRcXHQgKiBub3ctcHJlc2VudCBlbnRyaWVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJldCA9PSBITU1fRkFVTFRfUEVORElORykge1xcbitcXHRcXHRcXHRyZXQgPSBobW1fZG9fZmF1bHQobW0sIFxcdTAwMjZobW1fdm1hX3dhbGspO1xcbitcXHRcXHRcXHRpZiAocmV0ID09IEhNTV9GQVVMVF9VTkxPQ0tFRCkge1xcbitcXHRcXHRcXHRcXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBXaGVuIC1FQlVTWSBpcyByZXR1cm5lZCB0aGUgbG9vcCByZXN0YXJ0cyB3aXRoXFxuIFxcdFxcdCAqIGhtbV92bWFfd2Fsay5sYXN0IHNldCB0byBhbiBhZGRyZXNzIHRoYXQgaGFzIG5vdCBiZWVuIHN0b3JlZFxcbkBAIC02ODMsOCArNzI5LDY1IEBAIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXFxuIFxcdH0gd2hpbGUgKHJldCA9PSAtRUJVU1kpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuK1xcbisvKipcXG4rICogaG1tX3JhbmdlX2ZhdWx0IC0gdHJ5IHRvIGZhdWx0IHNvbWUgYWRkcmVzcyBpbiBhIHZpcnR1YWwgYWRkcmVzcyByYW5nZVxcbisgKiBAcmFuZ2U6XFx0YXJndW1lbnQgc3RydWN0dXJlXFxuKyAqXFxuKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOlxcbisgKlxcbisgKiAtRUlOVkFMOlxcdEludmFsaWQgYXJndW1lbnRzIG9yIG1tIG9yIHZpcnR1YWwgYWRkcmVzcyBpcyBpbiBhbiBpbnZhbGlkIHZtYVxcbisgKlxcdFxcdChlLmcuLCBkZXZpY2UgZmlsZSB2bWEpLlxcbisgKiAtRU5PTUVNOlxcdE91dCBvZiBtZW1vcnkuXFxuKyAqIC1FUEVSTTpcXHRJbnZhbGlkIHBlcm1pc3Npb24gKGUuZy4sIGFza2luZyBmb3Igd3JpdGUgYW5kIHJhbmdlIGlzIHJlYWRcXG4rICpcXHRcXHRvbmx5KS5cXG4rICogLUVCVVNZOlxcdFRoZSByYW5nZSBoYXMgYmVlbiBpbnZhbGlkYXRlZCBhbmQgdGhlIGNhbGxlciBuZWVkcyB0byB3YWl0IGZvclxcbisgKlxcdFxcdHRoZSBpbnZhbGlkYXRpb24gdG8gZmluaXNoLlxcbisgKiAtRUZBVUxUOiAgICAgQSBwYWdlIHdhcyByZXF1ZXN0ZWQgdG8gYmUgdmFsaWQgYW5kIGNvdWxkIG5vdCBiZSBtYWRlIHZhbGlkXFxuKyAqICAgICAgICAgICAgICBpZSBpdCBoYXMgbm8gYmFja2luZyBWTUEgb3IgaXQgaXMgaWxsZWdhbCB0byBhY2Nlc3NcXG4rICpcXG4rICogVGhpcyBpcyBzaW1pbGFyIHRvIGdldF91c2VyX3BhZ2VzKCksIGV4Y2VwdCB0aGF0IGl0IGNhbiByZWFkIHRoZSBwYWdlIHRhYmxlc1xcbisgKiB3aXRob3V0IG11dGF0aW5nIHRoZW0gKGllIGNhdXNpbmcgZmF1bHRzKS5cXG4rICpcXG4rICogVGhlIG1tYXAgbG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlciBhbmQgd2lsbCByZW1haW4gaGVsZCBvbiByZXR1cm4uXFxuKyAqIEZvciBhIHZhcmlhbnQgdGhhdCBhbGxvd3MgdGhlIG1tYXAgbG9jayB0byBiZSBkcm9wcGVkIGR1cmluZyBmYXVsdHMgKGUuZy4sXFxuKyAqIGZvciB1c2VyZmF1bHRmZCBzdXBwb3J0KSwgc2VlIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpLlxcbisgKi9cXG4raW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcXG4re1xcbitcXHRyZXR1cm4gaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChyYW5nZSwgTlVMTCk7XFxuK31cXG4gRVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHQpO1xcbiBcXG4rLyoqXFxuKyAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCAtIGZhdWx0IGluIGEgcmFuZ2UsIHBvc3NpYmx5IGRyb3BwaW5nIHRoZSBtbWFwIGxvY2tcXG4rICogQHJhbmdlOlxcdGFyZ3VtZW50IHN0cnVjdHVyZVxcbisgKlxcbisgKiBUaGlzIGlzIHNpbWlsYXIgdG8gaG1tX3JhbmdlX2ZhdWx0KCksIGV4Y2VwdCB0aGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgdGhlXFxuKyAqIG1tYXAgbG9jay4gVGhlIGZ1bmN0aW9uIHRha2VzIHRoZSBtbWFwIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFuZCBhbGxvd3NcXG4rICogaGFuZGxlX21tX2ZhdWx0KCkgdG8gZHJvcCBpdCBkdXJpbmcgZmF1bHRzLiBJZiB0aGUgbG9jayBpcyBkcm9wcGVkLCB0aGVcXG4rICogZnVuY3Rpb24gcmV0dXJucyAtRUJVU1kgYW5kIHRoZSBjYWxsZXIgbXVzdCByZXN0YXJ0IHRoZSB3YWxrIHdpdGggYSBmcmVzaFxcbisgKiBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbigpIHNlcXVlbmNlLlxcbisgKlxcbisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBvbmUgb2YgdGhlIGVycm9yIGNvZGVzIGRvY3VtZW50ZWQgZm9yXFxuKyAqIGhtbV9yYW5nZV9mYXVsdCgpLiAtRUlOVFIgaXMgcmV0dXJuZWQgaWYgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZyBkdXJpbmdcXG4rICogcmV0cnkgaGFuZGxpbmcuXFxuKyAqL1xcbitpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxcbit7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtXFx1MDAzZW5vdGlmaWVyLVxcdTAwM2VtbTtcXG4rXFx0aW50IGxvY2tlZCA9IDE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuK1xcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQocmFuZ2UsIFxcdTAwMjZsb2NrZWQpO1xcbitcXHRpZiAobG9ja2VkKVxcbitcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQpO1xcbitcXG4gLyoqXFxuICAqIGhtbV9kbWFfbWFwX2FsbG9jIC0gQWxsb2NhdGUgSE1NIG1hcCBzdHJ1Y3R1cmVcXG4gICogQGRldjogZGV2aWNlIHRvIGFsbG9jYXRlIHN0cnVjdHVyZSBmb3JcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xcbmluZGV4IDJmMmI5ODc5ZDEwMDUxLi43MTc2NWM0ZDgwZjNlNCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXFxuQEAgLTI5LDYgKzI5LDEwIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL2lvY3RsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdGltZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9ldmVudGZkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyZmF1bHRmZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjcG9sbC5oXFx1MDAzZVxcbiBcXG4gLypcXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbid0IGV4cG9ydGVkXFxuQEAgLTI5NDksNCArMjk1MywxNDkgQEAgVEVTVF9GX1RJTUVPVVQoaG1tLCBiZW5jaG1hcmtfdGhwX21pZ3JhdGlvbiwgMTIwKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dGhwX3Jlc3VsdHMsIFxcdTAwMjZyZWd1bGFyX3Jlc3VsdHMpO1xcbiBcXHR9XFxuIH1cXG4rLypcXG4rICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxcbisgKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKSBwYXRoLiBUaGlzIGV4ZXJjaXNlcyB0aGUgbG9jay1kcm9wIHJldHJ5XFxuKyAqIGxvZ2ljIGluIHRoZSBITU0gZnJhbWV3b3JrLlxcbisgKi9cXG4rc3RydWN0IHVmZmRfdGhyZWFkX2FyZ3Mge1xcbitcXHRpbnQgdWZmZDtcXG4rXFx0aW50IHN0b3BfZmQ7XFxuK1xcdHZvaWQgKnBhZ2VfYnVmZmVyO1xcbitcXHR1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkICp1ZmZkX2hhbmRsZXJfdGhyZWFkKHZvaWQgKmFyZylcXG4re1xcbitcXHRzdHJ1Y3QgdWZmZF90aHJlYWRfYXJncyAqYXJncyA9IGFyZztcXG4rXFx0c3RydWN0IHVmZmRfbXNnIG1zZztcXG4rXFx0c3RydWN0IHVmZmRpb19jb3B5IGNvcHk7XFxuK1xcdHN0cnVjdCBwb2xsZmQgcG9sbGZkWzJdO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cG9sbGZkWzBdLmZkID0gYXJncy1cXHUwMDNldWZmZDtcXG4rXFx0cG9sbGZkWzBdLmV2ZW50cyA9IFBPTExJTjtcXG4rXFx0cG9sbGZkWzFdLmZkID0gYXJncy1cXHUwMDNlc3RvcF9mZDtcXG4rXFx0cG9sbGZkWzFdLmV2ZW50cyA9IFBPTExJTjtcXG4rXFxuK1xcdHdoaWxlICgxKSB7XFxuK1xcdFxcdHJldCA9IHBvbGwocG9sbGZkLCAyLCAtMSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmIChwb2xsZmRbMV0ucmV2ZW50cylcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmICghKHBvbGxmZFswXS5yZXZlbnRzIFxcdTAwMjYgUE9MTElOKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRyZXQgPSByZWFkKGFyZ3MtXFx1MDAzZXVmZmQsIFxcdTAwMjZtc2csIHNpemVvZihtc2cpKTtcXG4rXFx0XFx0aWYgKHJldCAhPSBzaXplb2YobXNnKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRpZiAobXNnLmV2ZW50ICE9IFVGRkRfRVZFTlRfUEFHRUZBVUxUKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qIEZpbGwgdGhlIHBhZ2Ugd2l0aCBhIGtub3duIHBhdHRlcm4gKi9cXG4rXFx0XFx0bWVtc2V0KGFyZ3MtXFx1MDAzZXBhZ2VfYnVmZmVyLCAweEFCLCBhcmdzLVxcdTAwM2VwYWdlX3NpemUpO1xcbitcXG4rXFx0XFx0Y29weS5kc3QgPSBtc2cuYXJnLnBhZ2VmYXVsdC5hZGRyZXNzIFxcdTAwMjYgfihhcmdzLVxcdTAwM2VwYWdlX3NpemUgLSAxKTtcXG4rXFx0XFx0Y29weS5zcmMgPSAodW5zaWduZWQgbG9uZylhcmdzLVxcdTAwM2VwYWdlX2J1ZmZlcjtcXG4rXFx0XFx0Y29weS5sZW4gPSBhcmdzLVxcdTAwM2VwYWdlX3NpemU7XFxuK1xcdFxcdGNvcHkubW9kZSA9IDA7XFxuK1xcdFxcdGNvcHkuY29weSA9IDA7XFxuK1xcbitcXHRcXHRyZXQgPSBpb2N0bChhcmdzLVxcdTAwM2V1ZmZkLCBVRkZESU9fQ09QWSwgXFx1MDAyNmNvcHkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitURVNUX0YoaG1tLCB1c2VyZmF1bHRmZF9yZWFkKVxcbit7XFxuK1xcdHN0cnVjdCBobW1fYnVmZmVyICpidWZmZXI7XFxuK1xcdHN0cnVjdCB1ZmZkX3RocmVhZF9hcmdzIHVmZmRfYXJncztcXG4rXFx0dW5zaWduZWQgbG9uZyBucGFnZXM7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXHR1bnNpZ25lZCBjaGFyICpwdHI7XFxuK1xcdHB0aHJlYWRfdCB0aHJlYWQ7XFxuK1xcdGludCB1ZmZkO1xcbitcXHRpbnQgc3RvcF9mZDtcXG4rXFx0aW50IHJldDtcXG4rXFx0c3RydWN0IHVmZmRpb19hcGkgYXBpO1xcbitcXHRzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHJlZztcXG4rXFx0dWludDY0X3Qgc3RvcCA9IDE7XFxuK1xcdHNzaXplX3QgbndyaXRlO1xcbitcXG4rXFx0bnBhZ2VzID0gNDtcXG4rXFx0c2l6ZSA9IG5wYWdlcyBcXHUwMDNjXFx1MDAzYyBzZWxmLVxcdTAwM2VwYWdlX3NoaWZ0O1xcbitcXG4rXFx0LyogQ3JlYXRlIHVzZXJmYXVsdGZkICovXFxuK1xcdHVmZmQgPSBzeXNjYWxsKF9fTlJfdXNlcmZhdWx0ZmQsIE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0spO1xcbitcXHRpZiAodWZmZCBcXHUwMDNjIDApXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwidXNlcmZhdWx0ZmQgbm90IGF2YWlsYWJsZVxcXCIpO1xcbitcXG4rXFx0YXBpLmFwaSA9IFVGRkRfQVBJO1xcbitcXHRhcGkuZmVhdHVyZXMgPSAwO1xcbitcXHRyZXQgPSBpb2N0bCh1ZmZkLCBVRkZESU9fQVBJLCBcXHUwMDI2YXBpKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuK1xcbitcXHRidWZmZXIgPSBtYWxsb2Moc2l6ZW9mKCpidWZmZXIpKTtcXG4rXFx0QVNTRVJUX05FKGJ1ZmZlciwgTlVMTCk7XFxuK1xcbitcXHRidWZmZXItXFx1MDAzZWZkID0gLTE7XFxuK1xcdGJ1ZmZlci1cXHUwMDNlc2l6ZSA9IHNpemU7XFxuK1xcdGJ1ZmZlci1cXHUwMDNlbWlycm9yID0gbWFsbG9jKHNpemUpO1xcbitcXHRBU1NFUlRfTkUoYnVmZmVyLVxcdTAwM2VtaXJyb3IsIE5VTEwpO1xcbitcXG4rXFx0LyogQ3JlYXRlIGFub255bW91cyBtYXBwaW5nICovXFxuK1xcdGJ1ZmZlci1cXHUwMDNlcHRyID0gbW1hcChOVUxMLCBzaXplLFxcbitcXHRcXHRcXHQgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHRcXHQgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsXFxuK1xcdFxcdFxcdCAgIC0xLCAwKTtcXG4rXFx0QVNTRVJUX05FKGJ1ZmZlci1cXHUwMDNlcHRyLCBNQVBfRkFJTEVEKTtcXG4rXFxuK1xcdC8qIFJlZ2lzdGVyIHRoZSByZWdpb24gd2l0aCB1c2VyZmF1bHRmZCAqL1xcbitcXHRyZWcucmFuZ2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZylidWZmZXItXFx1MDAzZXB0cjtcXG4rXFx0cmVnLnJhbmdlLmxlbiA9IHNpemU7XFxuK1xcdHJlZy5tb2RlID0gVUZGRElPX1JFR0lTVEVSX01PREVfTUlTU0lORztcXG4rXFx0cmV0ID0gaW9jdGwodWZmZCwgVUZGRElPX1JFR0lTVEVSLCBcXHUwMDI2cmVnKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuK1xcbitcXHQvKiBTZXQgdXAgdGhlIGhhbmRsZXIgdGhyZWFkICovXFxuK1xcdHVmZmRfYXJncy51ZmZkID0gdWZmZDtcXG4rXFx0c3RvcF9mZCA9IGV2ZW50ZmQoMCwgRUZEX0NMT0VYRUMpO1xcbitcXHRBU1NFUlRfR0Uoc3RvcF9mZCwgMCk7XFxuK1xcdHVmZmRfYXJncy5zdG9wX2ZkID0gc3RvcF9mZDtcXG4rXFx0dWZmZF9hcmdzLnBhZ2VfYnVmZmVyID0gbWFsbG9jKHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSk7XFxuK1xcdEFTU0VSVF9ORSh1ZmZkX2FyZ3MucGFnZV9idWZmZXIsIE5VTEwpO1xcbitcXHR1ZmZkX2FyZ3MucGFnZV9zaXplID0gc2VsZi1cXHUwMDNlcGFnZV9zaXplO1xcbitcXG4rXFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZCwgTlVMTCwgdWZmZF9oYW5kbGVyX3RocmVhZCwgXFx1MDAyNnVmZmRfYXJncyk7XFxuK1xcdEFTU0VSVF9FUShyZXQsIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlIHRoZSB1bmxvY2tlZCByZWFkIHBhdGggd2hpY2ggYWxsb3dzIHRoZSBtbWFwIGxvY2sgdG8gYmVcXG4rXFx0ICogZHJvcHBlZCBkdXJpbmcgdGhlIGZhdWx0LCBlbmFibGluZyB1c2VyZmF1bHRmZCByZXNvbHV0aW9uLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VELFxcbitcXHRcXHRcXHQgICAgICBidWZmZXIsIG5wYWdlcyk7XFxuK1xcdEFTU0VSVF9FUShyZXQsIDApO1xcbitcXHRBU1NFUlRfRVEoYnVmZmVyLVxcdTAwM2VjcGFnZXMsIG5wYWdlcyk7XFxuK1xcbitcXHQvKiBWZXJpZnkgdGhlIGRldmljZSByZWFkIHRoZSBkYXRhIGZpbGxlZCBieSB0aGUgdWZmZCBoYW5kbGVyICovXFxuK1xcdHB0ciA9IGJ1ZmZlci1cXHUwMDNlbWlycm9yO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2l6ZTsgKytpKVxcbitcXHRcXHRBU1NFUlRfRVEocHRyW2ldLCAodW5zaWduZWQgY2hhcikweEFCKTtcXG4rXFxuK1xcdG53cml0ZSA9IHdyaXRlKHN0b3BfZmQsIFxcdTAwMjZzdG9wLCBzaXplb2Yoc3RvcCkpO1xcbitcXHRBU1NFUlRfRVEobndyaXRlLCBzaXplb2Yoc3RvcCkpO1xcbitcXHRwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcXG4rXFx0Y2xvc2Uoc3RvcF9mZCk7XFxuK1xcdGZyZWUodWZmZF9hcmdzLnBhZ2VfYnVmZmVyKTtcXG4rXFx0Y2xvc2UodWZmZCk7XFxuK1xcdGhtbV9idWZmZXJfZnJlZShidWZmZXIpO1xcbit9XFxuK1xcbiBURVNUX0hBUk5FU1NfTUFJTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjowMzoyOC43MjU2NzQwMzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2MjI3OTI4MTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJNU0hWX1JPT1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImhtbV9yYW5nZV9mYXVsdFwiLFxuICAgIFwiaG1tX2RvX2ZhdWx0XCIsXG4gICAgXCJobW1fcmVjb3JkX2ZhdWx0XCIsXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRfbG9ja2VkXCIsXG4gICAgXCJkbWlycm9yX3JlYWRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcIm1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKWAgaW4gdGhlIEhNTSBzdWJzeXN0ZW0gdG8gYWxsb3cgZHJvcHBpbmcgdGhlIG1tYXAgbG9jayBkdXJpbmcgcGFnZSBmYXVsdHMsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgcmVnaW9ucyBtYW5hZ2VkIGJ5IHVzZXJmYXVsdGZkLiBJdCByZWZhY3RvcnMgdGhlIGNvcmUgYGhtbV9yYW5nZV9mYXVsdCgpYCBsb2dpYyB0byBzdXBwb3J0IHRoaXMgYW5kIHVwZGF0ZXMgdGhlIGB0ZXN0X2htbWAgbW9kdWxlIGFuZCBgbXNodl9yZWdpb25zYCBkcml2ZXIgdG8gdXRpbGl6ZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZHJpdmVyIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY0Yjc1OTNmNmZlODZjYjZjNTQwZTY0NGE5YjFkMWRjZGY4ODBlNzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDAyOjAzOjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0XG5pbmRleCA3ZDYxYjdhOGI2NWI3OS4uODQ0MzQzNzEyYWJkZGEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdFxuQEAgLTIwOCw2ICsyMDgsNjUgQEAgaW52YWxpZGF0ZSgpIGNhbGxiYWNrLiBUaGF0IGxvY2sgbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nXG4gbW11X2ludGVydmFsX3JlYWRfcmV0cnkoKSB0byBhdm9pZCBhbnkgcmFjZSB3aXRoIGEgY29uY3VycmVudCBDUFUgcGFnZSB0YWJsZVxuIHVwZGF0ZS5cbiBcbitEcm9wcGluZyB0aGUgbW1hcCBsb2NrIGR1cmluZyBwYWdlIGZhdWx0c1xuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rU29tZSBWTUFzIGhhdmUgZmF1bHQgaGFuZGxlcnMgdGhhdCBuZWVkIHRvIHJlbGVhc2UgdGhlIG1tYXAgbG9jayB3aGlsZVxuK3NlcnZpY2luZyBhIGZhdWx0IChmb3IgZXhhbXBsZSwgcmVnaW9ucyBtYW5hZ2VkIGJ5IGBgdXNlcmZhdWx0ZmRgYCkuXG4rYGBobW1fcmFuZ2VfZmF1bHQoKWBgIGNhbm5vdCBiZSB1c2VkIG9uIHN1Y2ggbWFwcGluZ3MgYmVjYXVzZSBpdCBtdXN0IGhvbGQgdGhlXG4rbW1hcCBsb2NrIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNhbGwuIERyaXZlcnMgdGhhdCBuZWVkIHRvIHN1cHBvcnQgdGhlbVxuK3Nob3VsZCBjYWxsOjpcbitcbisgIGludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xuK1xuK1RoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCBgYG1tYXBfcmVhZF9sb2NrYGAgYmVmb3JlIHRoZSBjYWxsLlxuK2BgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKClgYCB0YWtlcyB0aGUgbW1hcCByZWFkIGxvY2sgaW50ZXJuYWxseSBhbmQgYWxsb3dzXG4rYGBoYW5kbGVfbW1fZmF1bHQoKWBgIHRvIGRyb3AgaXQgZHVyaW5nIGZhdWx0IGhhbmRsaW5nLiBJZiB0aGUgbW1hcCBsb2NrIGlzXG4rZHJvcHBlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGAtRUJVU1lgYC4gVGhlIGNhbGxlciBtdXN0IHRoZW4gcmVzdGFydCB0aGVcbit3YWxrIGZyb20gYGByYW5nZS1cdTAwM2VzdGFydGBgIHdpdGggYSBmcmVzaCBub3RpZmllciBzZXF1ZW5jZS4gYGAtRUlOVFJgYCBpc1xuK3JldHVybmVkIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcgZHVyaW5nIHJldHJ5IGhhbmRsaW5nLlxuK1xuK0EgdHlwaWNhbCBjYWxsZXIgbG9va3MgbGlrZSB0aGlzOjpcbitcbisgaW50IGRyaXZlcl9wb3B1bGF0ZV9yYW5nZV91bmxvY2tlZCguLi4pXG4rIHtcbisgICAgICBzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlO1xuKyAgICAgIC4uLlxuK1xuKyAgICAgIHJhbmdlLm5vdGlmaWVyID0gXHUwMDI2aW50ZXJ2YWxfc3ViO1xuKyAgICAgIHJhbmdlLnN0YXJ0ID0gLi4uO1xuKyAgICAgIHJhbmdlLmVuZCA9IC4uLjtcbisgICAgICByYW5nZS5obW1fcGZucyA9IC4uLjtcbitcbisgICAgICBpZiAoIW1tZ2V0X25vdF96ZXJvKGludGVydmFsX3N1Yi5tbSkpXG4rICAgICAgICAgIHJldHVybiAtRUZBVUxUO1xuK1xuKyBhZ2FpbjpcbisgICAgICByYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihcdTAwMjZpbnRlcnZhbF9zdWIpO1xuKyAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZChcdTAwMjZyYW5nZSk7XG4rICAgICAgaWYgKHJldCkge1xuKyAgICAgICAgICBpZiAocmV0ID09IC1FQlVTWSlcbisgICAgICAgICAgICAgIGdvdG8gYWdhaW47XG4rICAgICAgICAgIGdvdG8gb3V0X3B1dDtcbisgICAgICB9XG4rXG4rICAgICAgdGFrZV9sb2NrKGRyaXZlci1cdTAwM2V1cGRhdGUpO1xuKyAgICAgIGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShcdTAwMjZpbnRlcnZhbF9zdWIsIHJhbmdlLm5vdGlmaWVyX3NlcSkpIHtcbisgICAgICAgICAgcmVsZWFzZV9sb2NrKGRyaXZlci1cdTAwM2V1cGRhdGUpO1xuKyAgICAgICAgICBnb3RvIGFnYWluO1xuKyAgICAgIH1cbitcbisgICAgICAvKiBVc2UgcGZucyBhcnJheSBjb250ZW50IHRvIHVwZGF0ZSBkZXZpY2UgcGFnZSB0YWJsZSxcbisgICAgICAgKiB1bmRlciB0aGUgdXBkYXRlIGxvY2sgKi9cbitcbisgICAgICByZWxlYXNlX2xvY2soZHJpdmVyLVx1MDAzZXVwZGF0ZSk7XG4rICAgICAgcmV0ID0gMDtcbitcbisgb3V0X3B1dDpcbisgICAgICBtbXB1dChpbnRlcnZhbF9zdWIubW0pO1xuKyAgICAgIHJldHVybiByZXQ7XG4rIH1cbitcbiBMZXZlcmFnZSBkZWZhdWx0X2ZsYWdzIGFuZCBwZm5fZmxhZ3NfbWFza1xuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYyBiL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNcbmluZGV4IDZkNjVlNWI0MjE1Mjk1Li4wNDY3NmYwNmM1Yzc0MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNcbisrKyBiL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNcbkBAIC0zODgsMTMgKzM4OCwxMSBAQCBpbnQgbXNodl9yZWdpb25fZ2V0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbilcbiAgKlxuICAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgKiAxLiBSZWFkcyB0aGUgbm90aWZpZXIgc2VxdWVuY2UgZm9yIHRoZSBITU0gcmFuZ2UuXG4tICogMi4gQWNxdWlyZXMgYSByZWFkIGxvY2sgb24gdGhlIG1lbW9yeSBtYXAuXG4tICogMy4gSGFuZGxlcyBITU0gZmF1bHRzIGZvciB0aGUgc3BlY2lmaWVkIHJhbmdlLlxuLSAqIDQuIFJlbGVhc2VzIHRoZSByZWFkIGxvY2sgb24gdGhlIG1lbW9yeSBtYXAuXG4tICogNS4gSWYgc3VjY2Vzc2Z1bCwgbG9ja3MgdGhlIG1lbW9yeSByZWdpb24gbXV0ZXguXG4tICogNi4gVmVyaWZpZXMgaWYgdGhlIG5vdGlmaWVyIHNlcXVlbmNlIGhhcyBjaGFuZ2VkIGR1cmluZyB0aGUgb3BlcmF0aW9uLlxuKyAqIDIuIEhhbmRsZXMgSE1NIGZhdWx0cyBmb3IgdGhlIHNwZWNpZmllZCByYW5nZS5cbisgKiAzLiBJZiBzdWNjZXNzZnVsLCBsb2NrcyB0aGUgbWVtb3J5IHJlZ2lvbiBtdXRleC5cbisgKiA0LiBWZXJpZmllcyBpZiB0aGUgbm90aWZpZXIgc2VxdWVuY2UgaGFzIGNoYW5nZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24uXG4gICogICAgSWYgaXQgaGFzLCByZWxlYXNlcyB0aGUgbXV0ZXggYW5kIHJldHVybnMgLUVCVVNZIHRvIG1hdGNoIHdpdGhcbi0gKiAgICBobW1fcmFuZ2VfZmF1bHQoKSByZXR1cm4gY29kZSBmb3IgcmVwZWF0aW5nLlxuKyAqICAgIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpIHNvIHRoZSBjYWxsZXIgcmV0cmllcyB0aGUgcmFuZ2UgZmF1bHQuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiAgKi9cbkBAIC00MDQsOSArNDAyLDcgQEAgc3RhdGljIGludCBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2soc3RydWN0IG1zaHZfbWVtX3JlZ2lvbiAqcmVnaW9uLFxuIFx0aW50IHJldDtcbiBcbiBcdHJhbmdlLVx1MDAzZW5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKHJhbmdlLVx1MDAzZW5vdGlmaWVyKTtcbi1cdG1tYXBfcmVhZF9sb2NrKHJlZ2lvbi1cdTAwM2VtcmVnX21uaS5tbSk7XG4tXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHQocmFuZ2UpO1xuLVx0bW1hcF9yZWFkX3VubG9jayhyZWdpb24tXHUwMDNlbXJlZ19tbmkubW0pO1xuK1x0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHJhbmdlKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9obW0uaCBiL2luY2x1ZGUvbGludXgvaG1tLmhcbmluZGV4IGRiNzVmZmM5NDlhN2FjLi4xYjU4NGU1YTI5MDAxZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaG1tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaG1tLmhcbkBAIC0xMjMsNiArMTIzLDcgQEAgc3RydWN0IGhtbV9yYW5nZSB7XG4gICogUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL21tL2htbS5yc3QgZm9yIGhvdyB0byB1c2UgdGhlIHJhbmdlIEFQSS5cbiAgKi9cbiBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTtcbitpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTtcbiBcbiAvKlxuICAqIEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQgLSBkZWZhdWx0IHRpbWVvdXQgKG1zKSB3aGVuIHdhaXRpbmcgZm9yIGEgcmFuZ2VcbmRpZmYgLS1naXQgYS9saWIvdGVzdF9obW0uYyBiL2xpYi90ZXN0X2htbS5jXG5pbmRleCA0NWMwY2I5OTIyMTg0YS4uZGNjM2EyM2JiOTgzZGMgMTAwNjQ0XG4tLS0gYS9saWIvdGVzdF9obW0uY1xuKysrIGIvbGliL3Rlc3RfaG1tLmNcbkBAIC0zODksNiArMzg5LDc2IEBAIHN0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbitcdFx0XHRcdFx0c3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXG4re1xuK1x0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cbitcdFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0d2hpbGUgKHRydWUpIHtcbitcdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcbitcdFx0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0cmFuZ2UtXHUwMDNlbm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4ocmFuZ2UtXHUwMDNlbm90aWZpZXIpO1xuK1x0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQocmFuZ2UpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuK1x0XHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2UtXHUwMDNlbm90aWZpZXIsXG4rXHRcdFx0XHRcdCAgICByYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEpKSB7XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0ID0gZG1pcnJvcl9kb19mYXVsdChkbWlycm9yLCByYW5nZSk7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4rb3V0OlxuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBkbWlycm9yX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuK1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuK1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB3cml0ZSlcbit7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGRtaXJyb3ItXHUwMDNlbm90aWZpZXIubW07XG4rXHR1bnNpZ25lZCBsb25nIGFkZHI7XG4rXHR1bnNpZ25lZCBsb25nIHBmbnNbMzJdO1xuK1x0c3RydWN0IGhtbV9yYW5nZSByYW5nZSA9IHtcbitcdFx0Lm5vdGlmaWVyID0gXHUwMDI2ZG1pcnJvci1cdTAwM2Vub3RpZmllcixcbitcdFx0LmhtbV9wZm5zID0gcGZucyxcbitcdFx0LnBmbl9mbGFnc19tYXNrID0gMCxcbitcdFx0LmRlZmF1bHRfZmxhZ3MgPVxuK1x0XHRcdEhNTV9QRk5fUkVRX0ZBVUxUIHwgKHdyaXRlID8gSE1NX1BGTl9SRVFfV1JJVEUgOiAwKSxcbitcdFx0LmRldl9wcml2YXRlX293bmVyID0gZG1pcnJvci1cdTAwM2VtZGV2aWNlLFxuK1x0fTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKCFtbWdldF9ub3RfemVybyhtbSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0Zm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgXHUwMDNjIGVuZDsgYWRkciA9IHJhbmdlLmVuZCkge1xuK1x0XHRyYW5nZS5zdGFydCA9IGFkZHI7XG4rXHRcdHJhbmdlLmVuZCA9IG1pbihhZGRyICsgKEFSUkFZX1NJWkUocGZucykgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpLCBlbmQpO1xuK1xuK1x0XHRyZXQgPSBkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkKGRtaXJyb3IsIFx1MDAyNnJhbmdlKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdG1tcHV0KG1tKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZG1pcnJvcl9mYXVsdChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHQgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgd3JpdGUpXG4ge1xuQEAgLTQ4OCw2ICs1NTgsNDcgQEAgc3RhdGljIGludCBkbWlycm9yX3JlYWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZG1pcnJvcl9yZWFkX3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuK1x0XHRcdFx0IHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcbit7XG4rXHRzdHJ1Y3QgZG1pcnJvcl9ib3VuY2UgYm91bmNlO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xuK1x0dW5zaWduZWQgbG9uZyBzaXplID0gY21kLVx1MDAzZW5wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbitcdGludCByZXQ7XG4rXG4rXHRzdGFydCA9IGNtZC1cdTAwM2VhZGRyO1xuK1x0ZW5kID0gc3RhcnQgKyBzaXplO1xuK1x0aWYgKGVuZCBcdTAwM2Mgc3RhcnQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0ID0gZG1pcnJvcl9ib3VuY2VfaW5pdChcdTAwMjZib3VuY2UsIHN0YXJ0LCBzaXplKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHR3aGlsZSAoMSkge1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuK1x0XHRyZXQgPSBkbWlycm9yX2RvX3JlYWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgXHUwMDI2Ym91bmNlKTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuK1x0XHRpZiAocmV0ICE9IC1FTk9FTlQpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdHN0YXJ0ID0gY21kLVx1MDAzZWFkZHIgKyAoYm91bmNlLmNwYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4rXHRcdHJldCA9IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgZmFsc2UpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRjbWQtXHUwMDNlZmF1bHRzKys7XG4rXHR9XG4rXG4rXHRpZiAocmV0ID09IDApIHtcbitcdFx0aWYgKGNvcHlfdG9fdXNlcih1NjRfdG9fdXNlcl9wdHIoY21kLVx1MDAzZXB0ciksIGJvdW5jZS5wdHIsXG4rXHRcdFx0XHQgYm91bmNlLnNpemUpKVxuK1x0XHRcdHJldCA9IC1FRkFVTFQ7XG4rXHR9XG4rXHRjbWQtXHUwMDNlY3BhZ2VzID0gYm91bmNlLmNwYWdlcztcbitcdGRtaXJyb3JfYm91bmNlX2ZpbmkoXHUwMDI2Ym91bmNlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZG1pcnJvcl9kb193cml0ZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBkbWlycm9yX2JvdW5jZSAqYm91bmNlKVxuIHtcbkBAIC0xNTcyLDYgKzE2ODMsOSBAQCBzdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdGRtaXJyb3ItXHUwMDNlZmxhZ3MgPSBjbWQubnBhZ2VzO1xuIFx0XHRyZXQgPSAwO1xuIFx0XHRicmVhaztcbitcdGNhc2UgSE1NX0RNSVJST1JfUkVBRF9VTkxPQ0tFRDpcbitcdFx0cmV0ID0gZG1pcnJvcl9yZWFkX3VubG9ja2VkKGRtaXJyb3IsIFx1MDAyNmNtZCk7XG4rXHRcdGJyZWFrO1xuIFxuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfaG1tX3VhcGkuaCBiL2xpYi90ZXN0X2htbV91YXBpLmhcbmluZGV4IGY5NGM2ZDQ1NzMzODI4Li5lYTliMGVjNDA0ZmI1NSAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0X2htbV91YXBpLmhcbisrKyBiL2xpYi90ZXN0X2htbV91YXBpLmhcbkBAIC0zOCw2ICszOCw3IEBAIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQge1xuICNkZWZpbmUgSE1NX0RNSVJST1JfQ0hFQ0tfRVhDTFVTSVZFXHRfSU9XUignSCcsIDB4MDYsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXG4gI2RlZmluZSBITU1fRE1JUlJPUl9SRUxFQVNFXHRcdF9JT1dSKCdIJywgMHgwNywgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX0ZMQUdTXHRcdF9JT1dSKCdIJywgMHgwOCwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbisjZGVmaW5lIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRURcdF9JT1dSKCdIJywgMHgwOSwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbiBcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQ1x0KDFVTEwgXHUwMDNjXHUwMDNjIDApXG4gXG5kaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uY1xuaW5kZXggNGYzZjYyN2QyYjQ3NzIuLjMxNjExNjk5NDIwOWM4IDEwMDY0NFxuLS0tIGEvbW0vaG1tLmNcbisrKyBiL21tL2htbS5jXG5AQCAtMzIsOSArMzIsMjcgQEBcbiBcbiBzdHJ1Y3QgaG1tX3ZtYV93YWxrIHtcbiBcdHN0cnVjdCBobW1fcmFuZ2VcdCpyYW5nZTtcbitcdGludFx0XHRcdCpsb2NrZWQ7XG4gXHR1bnNpZ25lZCBsb25nXHRcdGxhc3Q7XG4rXHR1bnNpZ25lZCBsb25nXHRcdGVuZDtcbitcdHVuc2lnbmVkIGludFx0XHRyZXF1aXJlZF9mYXVsdDtcbiB9O1xuIFxuKy8qXG4rICogSW50ZXJuYWwgc2VudGluZWwgcmV0dXJuZWQgYnkgd2FsayBjYWxsYmFja3Mgd2hlbiB0aGV5IG5lZWQgYSBwYWdlIGZhdWx0LlxuKyAqIFRoZSBjYWxsYmFjayBzdG9yZXMgZW5kL3JlcXVpcmVkX2ZhdWx0IGluIGhtbV92bWFfd2FsazsgdGhlIG91dGVyIGxvb3BcbisgKiBjb25zdW1lcyB0aGUgc2VudGluZWwgYW5kIG5ldmVyIHByb3BhZ2F0ZXMgaXQgdG8gdGhlIGNhbGxlci5cbisgKi9cbisjZGVmaW5lIEhNTV9GQVVMVF9QRU5ESU5HXHQtRUFHQUlOXG4rXG4rLypcbisgKiBJbnRlcm5hbCBzZW50aW5lbCByZXR1cm5lZCBieSBobW1fZG9fZmF1bHQoKSB3aGVuIGhhbmRsZV9tbV9mYXVsdCgpXG4rICogY29tcGxldGVzIGEgcGFnZSBmYXVsdCB3aXRoIHRoZSBtbWFwIGxvY2sgZHJvcHBlZC4gaG1tX2RvX2ZhdWx0KCkgc2V0c1xuKyAqICpsb2NrZWQgPSAwOyB0aGUgb3V0ZXIgbG9vcCBjb25zdW1lcyB0aGUgc2VudGluZWwgYW5kIG5ldmVyIHByb3BhZ2F0ZXMgaXRcbisgKiB0byB0aGUgY2FsbGVyLlxuKyAqL1xuKyNkZWZpbmUgSE1NX0ZBVUxUX1VOTE9DS0VEXHQtRU5PTENLXG4rXG4gZW51bSB7XG4gXHRITU1fTkVFRF9GQVVMVCA9IDEgXHUwMDNjXHUwMDNjIDAsXG4gXHRITU1fTkVFRF9XUklURV9GQVVMVCA9IDEgXHUwMDNjXHUwMDNjIDEsXG5AQCAtNjAsMzcgKzc4LDI1IEBAIHN0YXRpYyBpbnQgaG1tX3BmbnNfZmlsbCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIH1cbiBcbiAvKlxuLSAqIGhtbV92bWFfZmF1bHQoKSAtIGZhdWx0IGluIGEgcmFuZ2UgbGFja2luZyB2YWxpZCBwbWQgb3IgcHRlKHMpXG4tICogQGFkZHI6IHJhbmdlIHZpcnR1YWwgc3RhcnQgYWRkcmVzcyAoaW5jbHVzaXZlKVxuLSAqIEBlbmQ6IHJhbmdlIHZpcnR1YWwgZW5kIGFkZHJlc3MgKGV4Y2x1c2l2ZSlcbi0gKiBAcmVxdWlyZWRfZmF1bHQ6IEhNTV9ORUVEXyogZmxhZ3Ncbi0gKiBAd2FsazogbW1fd2FsayBzdHJ1Y3R1cmVcbi0gKiBSZXR1cm46IC1FQlVTWSBhZnRlciBwYWdlIGZhdWx0LCBvciBwYWdlIGZhdWx0IGVycm9yXG4rICogaG1tX3JlY29yZF9mYXVsdCgpIC0gcmVjb3JkIGEgcmFuZ2UgdGhhdCBuZWVkcyB0byBiZSBmYXVsdGVkIGluXG4gICpcbi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHBtZF9ub25lKCkgb3IgcHRlX25vbmUoKSByZXR1cm5zIHRydWUsXG4tICogb3Igd2hlbmV2ZXIgdGhlcmUgaXMgbm8gcGFnZSBkaXJlY3RvcnkgY292ZXJpbmcgdGhlIHZpcnR1YWwgYWRkcmVzcyByYW5nZS5cbisgKiBDYWxsZWQgYnkgdGhlIHdhbGsgY2FsbGJhY2tzIHdoZW4gdGhleSBkaXNjb3ZlciB0aGF0IHBhcnQgb2YgdGhlIHJhbmdlXG4rICogbmVlZHMgYSBwYWdlIGZhdWx0LiAgVGhlIGNhbGxiYWNrIHJlY29yZHMgd2hhdCB0byBmYXVsdCBhbmQgcmV0dXJuc1xuKyAqIEhNTV9GQVVMVF9QRU5ESU5HOyB0aGUgb3V0ZXIgbG9vcCBpbiBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKCkgZHJvcHNcbisgKiBiYWNrIG91dCBvZiB3YWxrX3BhZ2VfcmFuZ2UoKSBhbmQgaW52b2tlcyBoYW5kbGVfbW1fZmF1bHQoKSBmcm9tIGEgY29udGV4dFxuKyAqIHdoZXJlIG5vIHBhZ2UtdGFibGUgb3IgaHVnZXRsYl92bWFfbG9jayBpcyBoZWxkLlxuICAqL1xuLXN0YXRpYyBpbnQgaG1tX3ZtYV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmF1bHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuK3N0YXRpYyBpbnQgaG1tX3JlY29yZF9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuK1x0XHRcdCAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmF1bHQsXG4rXHRcdFx0ICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIHtcbiBcdHN0cnVjdCBobW1fdm1hX3dhbGsgKmhtbV92bWFfd2FsayA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbi1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay1cdTAwM2V2bWE7XG4tXHR1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MgPSBGQVVMVF9GTEFHX1JFTU9URTtcbiBcbiBcdFdBUk5fT05fT05DRSghcmVxdWlyZWRfZmF1bHQpO1xuIFx0aG1tX3ZtYV93YWxrLVx1MDAzZWxhc3QgPSBhZGRyO1xuLVxuLVx0aWYgKHJlcXVpcmVkX2ZhdWx0IFx1MDAyNiBITU1fTkVFRF9XUklURV9GQVVMVCkge1xuLVx0XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1dSSVRFKSlcbi1cdFx0XHRyZXR1cm4gLUVQRVJNO1xuLVx0XHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFO1xuLVx0fVxuLVxuLVx0Zm9yICg7IGFkZHIgXHUwMDNjIGVuZDsgYWRkciArPSBQQUdFX1NJWkUpXG4tXHRcdGlmIChoYW5kbGVfbW1fZmF1bHQodm1hLCBhZGRyLCBmYXVsdF9mbGFncywgTlVMTCkgXHUwMDI2XG4tXHRcdCAgICBWTV9GQVVMVF9FUlJPUilcbi1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdHJldHVybiAtRUJVU1k7XG4rXHRobW1fdm1hX3dhbGstXHUwMDNlZW5kID0gZW5kO1xuK1x0aG1tX3ZtYV93YWxrLVx1MDAzZXJlcXVpcmVkX2ZhdWx0ID0gcmVxdWlyZWRfZmF1bHQ7XG4rXHRyZXR1cm4gSE1NX0ZBVUxUX1BFTkRJTkc7XG4gfVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgaG1tX3B0ZV9uZWVkX2ZhdWx0KGNvbnN0IHN0cnVjdCBobW1fdm1hX3dhbGsgKmhtbV92bWFfd2FsayxcbkBAIC0xNzQsNyArMTgwLDcgQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfaG9sZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRyZXR1cm4gaG1tX3BmbnNfZmlsbChhZGRyLCBlbmQsIHJhbmdlLCBITU1fUEZOX0VSUk9SKTtcbiBcdH1cbiBcdGlmIChyZXF1aXJlZF9mYXVsdClcbi1cdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4rXHRcdHJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xuIFx0cmV0dXJuIGhtbV9wZm5zX2ZpbGwoYWRkciwgZW5kLCByYW5nZSwgMCk7XG4gfVxuIFxuQEAgLTIwOSw3ICsyMTUsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0cmVxdWlyZWRfZmF1bHQgPVxuIFx0XHRobW1fcmFuZ2VfbmVlZF9mYXVsdChobW1fdm1hX3dhbGssIGhtbV9wZm5zLCBucGFnZXMsIGNwdV9mbGFncyk7XG4gXHRpZiAocmVxdWlyZWRfZmF1bHQpXG4tXHRcdHJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xuK1x0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcbiBcdHBmbiA9IHBtZF9wZm4ocG1kKSArICgoYWRkciBcdTAwMjYgflBNRF9NQVNLKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4gXHRmb3IgKGkgPSAwOyBhZGRyIFx1MDAzYyBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFLCBpKyssIHBmbisrKSB7XG5AQCAtMzI4LDcgKzMzNCw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcHRlKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gZmF1bHQ6XG4gXHRwdGVfdW5tYXAocHRlcCk7XG4gXHQvKiBGYXVsdCBhbnkgdmlydHVhbCBhZGRyZXNzIHdlIHdlcmUgYXNrZWQgdG8gZmF1bHQgKi9cbi1cdHJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xuK1x0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbkBAIC0zNzEsNyArMzc3LDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdFx0XHQgICAgICBucGFnZXMsIDApO1xuIFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG4gXHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG4tXHRcdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4rXHRcdFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdH1cbkBAIC01MTcsNyArNTIzLDcgQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfcHVkKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRcdFx0XHQgICAgICBucGFnZXMsIGNwdV9mbGFncyk7XG4gXHRcdGlmIChyZXF1aXJlZF9mYXVsdCkge1xuIFx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4tXHRcdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4rXHRcdFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4gXHRcdH1cbiBcbiBcdFx0cGZuID0gcHVkX3BmbihwdWQpICsgKChhZGRyIFx1MDAyNiB+UFVEX01BU0spIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbkBAIC01NjQsMjEgKzU3MCw4IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbiBcdHJlcXVpcmVkX2ZhdWx0ID1cbiBcdFx0aG1tX3B0ZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgcGZuX3JlcV9mbGFncywgY3B1X2ZsYWdzKTtcbiBcdGlmIChyZXF1aXJlZF9mYXVsdCkge1xuLVx0XHRpbnQgcmV0O1xuLVxuIFx0XHRzcGluX3VubG9jayhwdGwpO1xuLVx0XHRodWdldGxiX3ZtYV91bmxvY2tfcmVhZCh2bWEpO1xuLVx0XHQvKlxuLVx0XHQgKiBBdm9pZCBkZWFkbG9jazogZHJvcCB0aGUgdm1hIGxvY2sgYmVmb3JlIGNhbGxpbmdcbi1cdFx0ICogaG1tX3ZtYV9mYXVsdCgpLCB3aGljaCB3aWxsIGl0c2VsZiBwb3RlbnRpYWxseSB0YWtlIGFuZFxuLVx0XHQgKiBkcm9wIHRoZSB2bWEgbG9jay4gVGhpcyBpcyBhbHNvIGNvcnJlY3QgZnJvbSBhXG4tXHRcdCAqIHByb3RlY3Rpb24gcG9pbnQgb2YgdmlldywgYmVjYXVzZSB0aGVyZSBpcyBubyBmdXJ0aGVyXG4tXHRcdCAqIHVzZSBoZXJlIG9mIGVpdGhlciBwdGUgb3IgcHRsIGFmdGVyIGRyb3BwaW5nIHRoZSB2bWFcbi1cdFx0ICogbG9jay5cbi1cdFx0ICovXG4tXHRcdHJldCA9IGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4tXHRcdGh1Z2V0bGJfdm1hX2xvY2tfcmVhZCh2bWEpO1xuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcdH1cbiBcbiBcdHBmbiA9IHB0ZV9wZm4oZW50cnkpICsgKChzdGFydCBcdTAwMjYgfmhtYXNrKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5AQCAtNjM3LDI5ICs2MzAsNjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBobW1fd2Fsa19vcHMgPSB7XG4gXHQud2Fsa19sb2NrXHQ9IFBHV0FMS19SRExPQ0ssXG4gfTtcbiBcbi0vKipcbi0gKiBobW1fcmFuZ2VfZmF1bHQgLSB0cnkgdG8gZmF1bHQgc29tZSBhZGRyZXNzIGluIGEgdmlydHVhbCBhZGRyZXNzIHJhbmdlXG4tICogQHJhbmdlOlx0YXJndW1lbnQgc3RydWN0dXJlXG4tICpcbi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczpcbisvKlxuKyAqIGhtbV9kb19mYXVsdCAtIGZhdWx0IGluIGEgcmFuZ2UgcmVjb3JkZWQgYnkgYSB3YWxrIGNhbGxiYWNrXG4gICpcbi0gKiAtRUlOVkFMOlx0SW52YWxpZCBhcmd1bWVudHMgb3IgbW0gb3IgdmlydHVhbCBhZGRyZXNzIGlzIGluIGFuIGludmFsaWQgdm1hXG4tICpcdFx0KGUuZy4sIGRldmljZSBmaWxlIHZtYSkuXG4tICogLUVOT01FTTpcdE91dCBvZiBtZW1vcnkuXG4tICogLUVQRVJNOlx0SW52YWxpZCBwZXJtaXNzaW9uIChlLmcuLCBhc2tpbmcgZm9yIHdyaXRlIGFuZCByYW5nZSBpcyByZWFkXG4tICpcdFx0b25seSkuXG4tICogLUVCVVNZOlx0VGhlIHJhbmdlIGhhcyBiZWVuIGludmFsaWRhdGVkIGFuZCB0aGUgY2FsbGVyIG5lZWRzIHRvIHdhaXQgZm9yXG4tICpcdFx0dGhlIGludmFsaWRhdGlvbiB0byBmaW5pc2guXG4tICogLUVGQVVMVDogICAgIEEgcGFnZSB3YXMgcmVxdWVzdGVkIHRvIGJlIHZhbGlkIGFuZCBjb3VsZCBub3QgYmUgbWFkZSB2YWxpZFxuLSAqICAgICAgICAgICAgICBpZSBpdCBoYXMgbm8gYmFja2luZyBWTUEgb3IgaXQgaXMgaWxsZWdhbCB0byBhY2Nlc3NcbisgKiBDYWxsZWQgZnJvbSB0aGUgb3V0ZXIgbG9vcCBpbiBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKCkgYWZ0ZXIgYSBjYWxsYmFja1xuKyAqIHJldHVybmVkIEhNTV9GQVVMVF9QRU5ESU5HLiAgQXQgdGhpcyBwb2ludCB3ZSBob2xkIG9ubHkgbW1hcF9sb2NrO1xuKyAqIHRoZSBwYWdlLXRhYmxlIHNwaW5sb2NrIGFuZCBhbnkgaHVnZXRsYl92bWFfbG9jayBhY3F1aXJlZCBieSB0aGUgd2Fsa1xuKyAqIGZyYW1ld29yayBoYXZlIGFscmVhZHkgYmVlbiByZWxlYXNlZCBieSB0aGUgdW53aW5kLlxuICAqXG4tICogVGhpcyBpcyBzaW1pbGFyIHRvIGdldF91c2VyX3BhZ2VzKCksIGV4Y2VwdCB0aGF0IGl0IGNhbiByZWFkIHRoZSBwYWdlIHRhYmxlc1xuLSAqIHdpdGhvdXQgbXV0YXRpbmcgdGhlbSAoaWUgY2F1c2luZyBmYXVsdHMpLlxuKyAqIFJldHVybnMgLUVCVVNZIG9uIHN1Y2Nlc3MgKGFsbCBwYWdlcyBmYXVsdGVkLCBjYWxsZXIgc2hvdWxkIHJlLXdhbGspLlxuKyAqIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuICAqL1xuLWludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXG4rc3RhdGljIGludCBobW1fZG9fZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0c3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGhtbV92bWFfd2Fsay1cdTAwM2VsYXN0O1xuK1x0dW5zaWduZWQgbG9uZyBlbmQgPSBobW1fdm1hX3dhbGstXHUwMDNlZW5kO1xuK1x0dW5zaWduZWQgaW50IHJlcXVpcmVkX2ZhdWx0ID0gaG1tX3ZtYV93YWxrLVx1MDAzZXJlcXVpcmVkX2ZhdWx0O1xuK1x0dW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzID0gRkFVTFRfRkxBR19SRU1PVEU7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbitcbitcdGlmIChobW1fdm1hX3dhbGstXHUwMDNlbG9ja2VkKVxuK1x0XHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX0FMTE9XX1JFVFJZIHwgRkFVTFRfRkxBR19LSUxMQUJMRTtcbitcbitcdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xuK1x0aWYgKCF2bWEpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0aWYgKHJlcXVpcmVkX2ZhdWx0IFx1MDAyNiBITU1fTkVFRF9XUklURV9GQVVMVCkge1xuK1x0XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1dSSVRFKSlcbitcdFx0XHRyZXR1cm4gLUVQRVJNO1xuK1x0XHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFO1xuK1x0fVxuK1xuK1x0Zm9yICg7IGFkZHIgXHUwMDNjIGVuZDsgYWRkciArPSBQQUdFX1NJWkUpIHtcbitcdFx0dm1fZmF1bHRfdCByZXQ7XG4rXG4rXHRcdHJldCA9IGhhbmRsZV9tbV9mYXVsdCh2bWEsIGFkZHIsIGZhdWx0X2ZsYWdzLCBOVUxMKTtcbitcbitcdFx0aWYgKHJldCBcdTAwMjYgKFZNX0ZBVUxUX0NPTVBMRVRFRCB8IFZNX0ZBVUxUX1JFVFJZKSkge1xuK1x0XHRcdCpobW1fdm1hX3dhbGstXHUwMDNlbG9ja2VkID0gMDtcbitcdFx0XHRyZXR1cm4gSE1NX0ZBVUxUX1VOTE9DS0VEO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChyZXQgXHUwMDI2IFZNX0ZBVUxUX0VSUk9SKSB7XG4rXHRcdFx0aW50IGVyciA9IHZtX2ZhdWx0X3RvX2Vycm5vKHJldCwgMCk7XG4rXG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdFx0QlVHKCk7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAtRUJVU1k7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgaW50ICpsb2NrZWQpXG4ge1xuIFx0c3RydWN0IGhtbV92bWFfd2FsayBobW1fdm1hX3dhbGsgPSB7XG4gXHRcdC5yYW5nZSA9IHJhbmdlLFxuK1x0XHQubG9ja2VkID0gbG9ja2VkLFxuIFx0XHQubGFzdCA9IHJhbmdlLVx1MDAzZXN0YXJ0LFxuIFx0fTtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtXHUwMDNlbm90aWZpZXItXHUwMDNlbW07XG5AQCAtNjc0LDYgKzcwNCwyMiBAQCBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdHJldCA9IHdhbGtfcGFnZV9yYW5nZShtbSwgaG1tX3ZtYV93YWxrLmxhc3QsIHJhbmdlLVx1MDAzZWVuZCxcbiBcdFx0XHRcdCAgICAgIFx1MDAyNmhtbV93YWxrX29wcywgXHUwMDI2aG1tX3ZtYV93YWxrKTtcbitcdFx0LypcbitcdFx0ICogV2hlbiBITU1fRkFVTFRfUEVORElORyBpcyByZXR1cm5lZCBhIHdhbGsgY2FsbGJhY2tcbitcdFx0ICogcmVjb3JkZWQgYSByYW5nZSB0aGF0IG5lZWRzIGhhbmRsZV9tbV9mYXVsdCgpO1xuK1x0XHQgKiBobW1fZG9fZmF1bHQoKSBydW5zIHRoZSBmYXVsdCBvdXRzaWRlIHdhbGtfcGFnZV9yYW5nZSgpXG4rXHRcdCAqIChzbyBubyBwYWdlLXRhYmxlIG9yIGh1Z2V0bGJfdm1hX2xvY2sgaXMgaGVsZCkgYW5kXG4rXHRcdCAqIHJldHVybnMgLUVCVVNZIHNvIHRoZSBsb29wIHJlLXdhbGtzIGFuZCBwaWNrcyB1cCB0aGVcbitcdFx0ICogbm93LXByZXNlbnQgZW50cmllcy5cbitcdFx0ICovXG4rXHRcdGlmIChyZXQgPT0gSE1NX0ZBVUxUX1BFTkRJTkcpIHtcbitcdFx0XHRyZXQgPSBobW1fZG9fZmF1bHQobW0sIFx1MDAyNmhtbV92bWFfd2Fsayk7XG4rXHRcdFx0aWYgKHJldCA9PSBITU1fRkFVTFRfVU5MT0NLRUQpIHtcbitcdFx0XHRcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbitcdFx0XHRcdFx0cmV0dXJuIC1FSU5UUjtcbitcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4rXHRcdFx0fVxuK1x0XHR9XG4gXHRcdC8qXG4gXHRcdCAqIFdoZW4gLUVCVVNZIGlzIHJldHVybmVkIHRoZSBsb29wIHJlc3RhcnRzIHdpdGhcbiBcdFx0ICogaG1tX3ZtYV93YWxrLmxhc3Qgc2V0IHRvIGFuIGFkZHJlc3MgdGhhdCBoYXMgbm90IGJlZW4gc3RvcmVkXG5AQCAtNjgzLDggKzcyOSw2NSBAQCBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxuIFx0fSB3aGlsZSAocmV0ID09IC1FQlVTWSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbitcbisvKipcbisgKiBobW1fcmFuZ2VfZmF1bHQgLSB0cnkgdG8gZmF1bHQgc29tZSBhZGRyZXNzIGluIGEgdmlydHVhbCBhZGRyZXNzIHJhbmdlXG4rICogQHJhbmdlOlx0YXJndW1lbnQgc3RydWN0dXJlXG4rICpcbisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczpcbisgKlxuKyAqIC1FSU5WQUw6XHRJbnZhbGlkIGFyZ3VtZW50cyBvciBtbSBvciB2aXJ0dWFsIGFkZHJlc3MgaXMgaW4gYW4gaW52YWxpZCB2bWFcbisgKlx0XHQoZS5nLiwgZGV2aWNlIGZpbGUgdm1hKS5cbisgKiAtRU5PTUVNOlx0T3V0IG9mIG1lbW9yeS5cbisgKiAtRVBFUk06XHRJbnZhbGlkIHBlcm1pc3Npb24gKGUuZy4sIGFza2luZyBmb3Igd3JpdGUgYW5kIHJhbmdlIGlzIHJlYWRcbisgKlx0XHRvbmx5KS5cbisgKiAtRUJVU1k6XHRUaGUgcmFuZ2UgaGFzIGJlZW4gaW52YWxpZGF0ZWQgYW5kIHRoZSBjYWxsZXIgbmVlZHMgdG8gd2FpdCBmb3JcbisgKlx0XHR0aGUgaW52YWxpZGF0aW9uIHRvIGZpbmlzaC5cbisgKiAtRUZBVUxUOiAgICAgQSBwYWdlIHdhcyByZXF1ZXN0ZWQgdG8gYmUgdmFsaWQgYW5kIGNvdWxkIG5vdCBiZSBtYWRlIHZhbGlkXG4rICogICAgICAgICAgICAgIGllIGl0IGhhcyBubyBiYWNraW5nIFZNQSBvciBpdCBpcyBpbGxlZ2FsIHRvIGFjY2Vzc1xuKyAqXG4rICogVGhpcyBpcyBzaW1pbGFyIHRvIGdldF91c2VyX3BhZ2VzKCksIGV4Y2VwdCB0aGF0IGl0IGNhbiByZWFkIHRoZSBwYWdlIHRhYmxlc1xuKyAqIHdpdGhvdXQgbXV0YXRpbmcgdGhlbSAoaWUgY2F1c2luZyBmYXVsdHMpLlxuKyAqXG4rICogVGhlIG1tYXAgbG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlciBhbmQgd2lsbCByZW1haW4gaGVsZCBvbiByZXR1cm4uXG4rICogRm9yIGEgdmFyaWFudCB0aGF0IGFsbG93cyB0aGUgbW1hcCBsb2NrIHRvIGJlIGRyb3BwZWQgZHVyaW5nIGZhdWx0cyAoZS5nLixcbisgKiBmb3IgdXNlcmZhdWx0ZmQgc3VwcG9ydCksIHNlZSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKS5cbisgKi9cbitpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxuK3tcbitcdHJldHVybiBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHJhbmdlLCBOVUxMKTtcbit9XG4gRVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHQpO1xuIFxuKy8qKlxuKyAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCAtIGZhdWx0IGluIGEgcmFuZ2UsIHBvc3NpYmx5IGRyb3BwaW5nIHRoZSBtbWFwIGxvY2tcbisgKiBAcmFuZ2U6XHRhcmd1bWVudCBzdHJ1Y3R1cmVcbisgKlxuKyAqIFRoaXMgaXMgc2ltaWxhciB0byBobW1fcmFuZ2VfZmF1bHQoKSwgZXhjZXB0IHRoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCB0aGVcbisgKiBtbWFwIGxvY2suIFRoZSBmdW5jdGlvbiB0YWtlcyB0aGUgbW1hcCByZWFkIGxvY2sgaW50ZXJuYWxseSBhbmQgYWxsb3dzXG4rICogaGFuZGxlX21tX2ZhdWx0KCkgdG8gZHJvcCBpdCBkdXJpbmcgZmF1bHRzLiBJZiB0aGUgbG9jayBpcyBkcm9wcGVkLCB0aGVcbisgKiBmdW5jdGlvbiByZXR1cm5zIC1FQlVTWSBhbmQgdGhlIGNhbGxlciBtdXN0IHJlc3RhcnQgdGhlIHdhbGsgd2l0aCBhIGZyZXNoXG4rICogbW11X2ludGVydmFsX3JlYWRfYmVnaW4oKSBzZXF1ZW5jZS5cbisgKlxuKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZXJyb3IgY29kZXMgZG9jdW1lbnRlZCBmb3JcbisgKiBobW1fcmFuZ2VfZmF1bHQoKS4gLUVJTlRSIGlzIHJldHVybmVkIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcgZHVyaW5nXG4rICogcmV0cnkgaGFuZGxpbmcuXG4rICovXG4raW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcbit7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJhbmdlLVx1MDAzZW5vdGlmaWVyLVx1MDAzZW1tO1xuK1x0aW50IGxvY2tlZCA9IDE7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bW1hcF9yZWFkX2xvY2sobW0pO1xuK1x0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChyYW5nZSwgXHUwMDI2bG9ja2VkKTtcbitcdGlmIChsb2NrZWQpXG4rXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rRVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQpO1xuK1xuIC8qKlxuICAqIGhtbV9kbWFfbWFwX2FsbG9jIC0gQWxsb2NhdGUgSE1NIG1hcCBzdHJ1Y3R1cmVcbiAgKiBAZGV2OiBkZXZpY2UgdG8gYWxsb2NhdGUgc3RydWN0dXJlIGZvclxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbmluZGV4IDJmMmI5ODc5ZDEwMDUxLi43MTc2NWM0ZDgwZjNlNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuQEAgLTI5LDYgKzI5LDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvZXZlbnRmZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcmZhdWx0ZmQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3BvbGwuaFx1MDAzZVxuIFxuIC8qXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbid0IGV4cG9ydGVkXG5AQCAtMjk0OSw0ICsyOTUzLDE0OSBAQCBURVNUX0ZfVElNRU9VVChobW0sIGJlbmNobWFya190aHBfbWlncmF0aW9uLCAxMjApXG4gXHRcdFx0XHRcdFx1MDAyNnRocF9yZXN1bHRzLCBcdTAwMjZyZWd1bGFyX3Jlc3VsdHMpO1xuIFx0fVxuIH1cbisvKlxuKyAqIFRlc3QgdGhhdCBITU0gY2FuIGZhdWx0IGluIHBhZ2VzIGJhY2tlZCBieSB1c2VyZmF1bHRmZCB1c2luZyB0aGVcbisgKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKSBwYXRoLiBUaGlzIGV4ZXJjaXNlcyB0aGUgbG9jay1kcm9wIHJldHJ5XG4rICogbG9naWMgaW4gdGhlIEhNTSBmcmFtZXdvcmsuXG4rICovXG4rc3RydWN0IHVmZmRfdGhyZWFkX2FyZ3Mge1xuK1x0aW50IHVmZmQ7XG4rXHRpbnQgc3RvcF9mZDtcbitcdHZvaWQgKnBhZ2VfYnVmZmVyO1xuK1x0dW5zaWduZWQgbG9uZyBwYWdlX3NpemU7XG4rfTtcbitcbitzdGF0aWMgdm9pZCAqdWZmZF9oYW5kbGVyX3RocmVhZCh2b2lkICphcmcpXG4re1xuK1x0c3RydWN0IHVmZmRfdGhyZWFkX2FyZ3MgKmFyZ3MgPSBhcmc7XG4rXHRzdHJ1Y3QgdWZmZF9tc2cgbXNnO1xuK1x0c3RydWN0IHVmZmRpb19jb3B5IGNvcHk7XG4rXHRzdHJ1Y3QgcG9sbGZkIHBvbGxmZFsyXTtcbitcdGludCByZXQ7XG4rXG4rXHRwb2xsZmRbMF0uZmQgPSBhcmdzLVx1MDAzZXVmZmQ7XG4rXHRwb2xsZmRbMF0uZXZlbnRzID0gUE9MTElOO1xuK1x0cG9sbGZkWzFdLmZkID0gYXJncy1cdTAwM2VzdG9wX2ZkO1xuK1x0cG9sbGZkWzFdLmV2ZW50cyA9IFBPTExJTjtcbitcbitcdHdoaWxlICgxKSB7XG4rXHRcdHJldCA9IHBvbGwocG9sbGZkLCAyLCAtMSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRpZiAocG9sbGZkWzFdLnJldmVudHMpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGlmICghKHBvbGxmZFswXS5yZXZlbnRzIFx1MDAyNiBQT0xMSU4pKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRyZXQgPSByZWFkKGFyZ3MtXHUwMDNldWZmZCwgXHUwMDI2bXNnLCBzaXplb2YobXNnKSk7XG4rXHRcdGlmIChyZXQgIT0gc2l6ZW9mKG1zZykpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGlmIChtc2cuZXZlbnQgIT0gVUZGRF9FVkVOVF9QQUdFRkFVTFQpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIEZpbGwgdGhlIHBhZ2Ugd2l0aCBhIGtub3duIHBhdHRlcm4gKi9cbitcdFx0bWVtc2V0KGFyZ3MtXHUwMDNlcGFnZV9idWZmZXIsIDB4QUIsIGFyZ3MtXHUwMDNlcGFnZV9zaXplKTtcbitcbitcdFx0Y29weS5kc3QgPSBtc2cuYXJnLnBhZ2VmYXVsdC5hZGRyZXNzIFx1MDAyNiB+KGFyZ3MtXHUwMDNlcGFnZV9zaXplIC0gMSk7XG4rXHRcdGNvcHkuc3JjID0gKHVuc2lnbmVkIGxvbmcpYXJncy1cdTAwM2VwYWdlX2J1ZmZlcjtcbitcdFx0Y29weS5sZW4gPSBhcmdzLVx1MDAzZXBhZ2Vfc2l6ZTtcbitcdFx0Y29weS5tb2RlID0gMDtcbitcdFx0Y29weS5jb3B5ID0gMDtcbitcbitcdFx0cmV0ID0gaW9jdGwoYXJncy1cdTAwM2V1ZmZkLCBVRkZESU9fQ09QWSwgXHUwMDI2Y29weSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rVEVTVF9GKGhtbSwgdXNlcmZhdWx0ZmRfcmVhZClcbit7XG4rXHRzdHJ1Y3QgaG1tX2J1ZmZlciAqYnVmZmVyO1xuK1x0c3RydWN0IHVmZmRfdGhyZWFkX2FyZ3MgdWZmZF9hcmdzO1xuK1x0dW5zaWduZWQgbG9uZyBucGFnZXM7XG4rXHR1bnNpZ25lZCBsb25nIHNpemU7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXHR1bnNpZ25lZCBjaGFyICpwdHI7XG4rXHRwdGhyZWFkX3QgdGhyZWFkO1xuK1x0aW50IHVmZmQ7XG4rXHRpbnQgc3RvcF9mZDtcbitcdGludCByZXQ7XG4rXHRzdHJ1Y3QgdWZmZGlvX2FwaSBhcGk7XG4rXHRzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHJlZztcbitcdHVpbnQ2NF90IHN0b3AgPSAxO1xuK1x0c3NpemVfdCBud3JpdGU7XG4rXG4rXHRucGFnZXMgPSA0O1xuK1x0c2l6ZSA9IG5wYWdlcyBcdTAwM2NcdTAwM2Mgc2VsZi1cdTAwM2VwYWdlX3NoaWZ0O1xuK1xuK1x0LyogQ3JlYXRlIHVzZXJmYXVsdGZkICovXG4rXHR1ZmZkID0gc3lzY2FsbChfX05SX3VzZXJmYXVsdGZkLCBPX0NMT0VYRUMgfCBPX05PTkJMT0NLKTtcbitcdGlmICh1ZmZkIFx1MDAzYyAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJ1c2VyZmF1bHRmZCBub3QgYXZhaWxhYmxlXCIpO1xuK1xuK1x0YXBpLmFwaSA9IFVGRkRfQVBJO1xuK1x0YXBpLmZlYXR1cmVzID0gMDtcbitcdHJldCA9IGlvY3RsKHVmZmQsIFVGRkRJT19BUEksIFx1MDAyNmFwaSk7XG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbitcbitcdGJ1ZmZlciA9IG1hbGxvYyhzaXplb2YoKmJ1ZmZlcikpO1xuK1x0QVNTRVJUX05FKGJ1ZmZlciwgTlVMTCk7XG4rXG4rXHRidWZmZXItXHUwMDNlZmQgPSAtMTtcbitcdGJ1ZmZlci1cdTAwM2VzaXplID0gc2l6ZTtcbitcdGJ1ZmZlci1cdTAwM2VtaXJyb3IgPSBtYWxsb2Moc2l6ZSk7XG4rXHRBU1NFUlRfTkUoYnVmZmVyLVx1MDAzZW1pcnJvciwgTlVMTCk7XG4rXG4rXHQvKiBDcmVhdGUgYW5vbnltb3VzIG1hcHBpbmcgKi9cbitcdGJ1ZmZlci1cdTAwM2VwdHIgPSBtbWFwKE5VTEwsIHNpemUsXG4rXHRcdFx0ICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0XHQgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsXG4rXHRcdFx0ICAgLTEsIDApO1xuK1x0QVNTRVJUX05FKGJ1ZmZlci1cdTAwM2VwdHIsIE1BUF9GQUlMRUQpO1xuK1xuK1x0LyogUmVnaXN0ZXIgdGhlIHJlZ2lvbiB3aXRoIHVzZXJmYXVsdGZkICovXG4rXHRyZWcucmFuZ2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZylidWZmZXItXHUwMDNlcHRyO1xuK1x0cmVnLnJhbmdlLmxlbiA9IHNpemU7XG4rXHRyZWcubW9kZSA9IFVGRkRJT19SRUdJU1RFUl9NT0RFX01JU1NJTkc7XG4rXHRyZXQgPSBpb2N0bCh1ZmZkLCBVRkZESU9fUkVHSVNURVIsIFx1MDAyNnJlZyk7XG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbitcbitcdC8qIFNldCB1cCB0aGUgaGFuZGxlciB0aHJlYWQgKi9cbitcdHVmZmRfYXJncy51ZmZkID0gdWZmZDtcbitcdHN0b3BfZmQgPSBldmVudGZkKDAsIEVGRF9DTE9FWEVDKTtcbitcdEFTU0VSVF9HRShzdG9wX2ZkLCAwKTtcbitcdHVmZmRfYXJncy5zdG9wX2ZkID0gc3RvcF9mZDtcbitcdHVmZmRfYXJncy5wYWdlX2J1ZmZlciA9IG1hbGxvYyhzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4rXHRBU1NFUlRfTkUodWZmZF9hcmdzLnBhZ2VfYnVmZmVyLCBOVUxMKTtcbitcdHVmZmRfYXJncy5wYWdlX3NpemUgPSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZTtcbitcbitcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgdWZmZF9oYW5kbGVyX3RocmVhZCwgXHUwMDI2dWZmZF9hcmdzKTtcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuK1xuK1x0LypcbitcdCAqIFVzZSB0aGUgdW5sb2NrZWQgcmVhZCBwYXRoIHdoaWNoIGFsbG93cyB0aGUgbW1hcCBsb2NrIHRvIGJlXG4rXHQgKiBkcm9wcGVkIGR1cmluZyB0aGUgZmF1bHQsIGVuYWJsaW5nIHVzZXJmYXVsdGZkIHJlc29sdXRpb24uXG4rXHQgKi9cbitcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VELFxuK1x0XHRcdCAgICAgIGJ1ZmZlciwgbnBhZ2VzKTtcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuK1x0QVNTRVJUX0VRKGJ1ZmZlci1cdTAwM2VjcGFnZXMsIG5wYWdlcyk7XG4rXG4rXHQvKiBWZXJpZnkgdGhlIGRldmljZSByZWFkIHRoZSBkYXRhIGZpbGxlZCBieSB0aGUgdWZmZCBoYW5kbGVyICovXG4rXHRwdHIgPSBidWZmZXItXHUwMDNlbWlycm9yO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2l6ZTsgKytpKVxuK1x0XHRBU1NFUlRfRVEocHRyW2ldLCAodW5zaWduZWQgY2hhcikweEFCKTtcbitcbitcdG53cml0ZSA9IHdyaXRlKHN0b3BfZmQsIFx1MDAyNnN0b3AsIHNpemVvZihzdG9wKSk7XG4rXHRBU1NFUlRfRVEobndyaXRlLCBzaXplb2Yoc3RvcCkpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XG4rXHRjbG9zZShzdG9wX2ZkKTtcbitcdGZyZWUodWZmZF9hcmdzLnBhZ2VfYnVmZmVyKTtcbitcdGNsb3NlKHVmZmQpO1xuK1x0aG1tX2J1ZmZlcl9mcmVlKGJ1ZmZlcik7XG4rfVxuK1xuIFRFU1RfSEFSTkVTU19NQUlOXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjowMzoyOC43MjU2ODMzMjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTE5NDQ5MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhNTSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgSE1NIHBhdGNoLCBhbmQgaXQgc2VlbXMgbGlrZSBhIGZhaXJseSB0YXJnZXRlZCBjaGFuZ2UuIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhbGxvd2luZyB1cyB0byBkcm9wIHRoZSBtbWFwIGxvY2sgZHVyaW5nIHBhZ2UgZmF1bHRzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKClgIGZ1bmN0aW9uIGlzIHRoZSBrZXksIGFuZCBpdCdzIGRlc2lnbmVkIHRvIGJlIGJlbmVmaWNpYWwgZm9yIHJlZ2lvbnMgbWFuYWdlZCBieSBgdXNlcmZhdWx0ZmRgLCB3aGljaCBtYWtlcyBzZW5zZS4gTWluaW1pemluZyBsb2NrIGNvbnRlbnRpb24gZHVyaW5nIGZhdWx0IGhhbmRsaW5nIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcsIGVzcGVjaWFsbHkgaW4gdGhpcyBjb250ZXh0LlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBhIGdvb2QgbnVtYmVyIG9mIGZpbGVzOiBgbW0vaG1tLmNgLCB0aGUgaW5jbHVkZSBmaWxlcywgdGhlIHRlc3QgY29kZSAoYGxpYi90ZXN0X2htbS5jYCksIHRoZSBIeXBlci1WIGRyaXZlciAoYGRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNgKSwgYW5kIGEgc2VsZi10ZXN0LiBUaGlzIGluZGljYXRlcyBhIGdvb2QgbGV2ZWwgb2Ygc2NvcGUgYW5kIGltcGFjdCwgdG91Y2hpbmcgYm90aCBjb3JlIEhNTSBmdW5jdGlvbmFsaXR5IGFuZCB0aGUgcmVsZXZhbnQgdXNlciBzcGFjZSBpbnRlcmZhY2VzIGFuZCBkcml2ZXJzLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgbG9va3Mgc291bmQuIFdlJ3ZlIGdvdCB0aGUgbmV3IGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRgIEFQSSwgYW5kIHRoZSBleGlzdGluZyBgaG1tX3JhbmdlX2ZhdWx0YCBoYXMgYmVlbiByZXdvcmtlZCB0byB1dGlsaXplIGEgY29tbW9uIGludGVybmFsIGZ1bmN0aW9uLiBUaGUgSHlwZXItViBkcml2ZXIgKGBtc2h2X3JlZ2lvbnMuY2ApIGlzIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgQVBJLCBzbyB3ZSBoYXZlIGEgY29uY3JldGUgdXNlIGNhc2UuIEFuZCwgaW1wb3J0YW50bHksIHRoZXJlJ3MgYSBuZXcgYEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRURgIGlvY3RsIGFkZGVkIHRvIHRoZSB0ZXN0IGNvZGUsIHdoaWNoIGdpdmVzIHVzIGEgZGVkaWNhdGVkIG1lY2hhbmlzbSB0byBhY3R1YWxseSAqdGVzdCogdGhpcyBuZXcgdW5sb2NrZWQgZnVuY3Rpb25hbGl0eS5cblxuUmVhY2hhYmxlIGNvZGUgaXMgY3JpdGljYWwuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBjb2RlIGlzIGFjdHVhbGx5ICp1c2VkKi4gYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZGAgaXMgZXhwb3J0ZWQsIGFuZCBpdCdzIGJlaW5nIHVzZWQgYnkgYHRlc3RfaG1tLmNgIChhIHRlc3QgbW9kdWxlLCBnb29kISkgYW5kIGBtc2h2X3JlZ2lvbnMuY2AgKEh5cGVyLVYpLiBTbywgdGhlIHJlYWNoYWJpbGl0eSBzZWVtcyBzb2xpZC4gQnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBidWlsZCBjb25maWcgb3B0aW9ucyB0byB2ZXJpZnkgdGhleSBhcmUgYWN0aXZlLlxuXG5Ob3csIHRvIG1ha2Ugc3VyZSB0aGUgY29kZSBpcyBhY3R1YWxseSAqZW5hYmxlZCogaW4gcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gY2hlY2sgZm9yIGBDT05GSUdfVEVTVF9ITU1gLCBgQ09ORklHX0hZUEVSVmAsIGFuZCBgQ09ORklHX01TSFZgLiBMZXQgbWUgZmlyZSB1cCBteSBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzZXR0aW5ncyBhcmUgZm9yIHRoaXMgY29kZS4gVGhpcyB3aWxsIGNvbmZpcm0gdGhlIHBhdGNoJ3MgaW50ZWdyYXRpb24gaW50byB0aGUgc3RhbmRhcmQga2VybmVsIGJ1aWxkIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjEwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6MDM6MzYuMjQ1MTM2NDY5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MzY5MjAyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yMTg9c2hvdWxkIGNhbGw6OlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMTktXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjIyMDogIGludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMjEtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIyMj1UaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgYGBtbWFwX3JlYWRfbG9ja2BgIGJlZm9yZSB0aGUgY2FsbC5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjIzOmBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKClgYCB0YWtlcyB0aGUgbW1hcCByZWFkIGxvY2sgaW50ZXJuYWxseSBhbmQgYWxsb3dzXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIyNC1gYGhhbmRsZV9tbV9mYXVsdCgpYGAgdG8gZHJvcCBpdCBkdXJpbmcgZmF1bHQgaGFuZGxpbmcuIElmIHRoZSBtbWFwIGxvY2sgaXNcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yMjk9QSB0eXBpY2FsIGNhbGxlciBsb29rcyBsaWtlIHRoaXM6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI0NS0gICAgICByYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihcXHUwMDI2aW50ZXJ2YWxfc3ViKTtcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjQ2OiAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZChcXHUwMDI2cmFuZ2UpO1xcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNDctICAgICAgaWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYz0zNzk9aW50IG1zaHZfcmVnaW9uX2dldChzdHJ1Y3QgbXNodl9tZW1fcmVnaW9uICpyZWdpb24pXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jLTM5NC0gKiAgICBJZiBpdCBoYXMsIHJlbGVhc2VzIHRoZSBtdXRleCBhbmQgcmV0dXJucyAtRUJVU1kgdG8gbWF0Y2ggd2l0aFxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM6Mzk1OiAqICAgIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpIHNvIHRoZSBjYWxsZXIgcmV0cmllcyB0aGUgcmFuZ2UgZmF1bHQuXFxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy0zOTYtICpcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM9Mzk5PXN0YXRpYyBpbnQgbXNodl9yZWdpb25faG1tX2ZhdWx0X2FuZF9sb2NrKHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbixcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtNDA0LVxcdHJhbmdlLVxcdTAwM2Vub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS1cXHUwMDNlbm90aWZpZXIpO1xcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM6NDA1OlxcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZChyYW5nZSk7XFxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy00MDYtXFx0aWYgKHJldClcXG4tLVxcbmluY2x1ZGUvbGludXgvaG1tLmg9MTI1PWludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xcbmluY2x1ZGUvbGludXgvaG1tLmg6MTI2OmludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xcbmluY2x1ZGUvbGludXgvaG1tLmgtMTI3LVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MzkyPXN0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTQwNS1cXHRcXHRyYW5nZS1cXHUwMDNlbm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4ocmFuZ2UtXFx1MDAzZW5vdGlmaWVyKTtcXG5saWIvdGVzdF9obW0uYzo0MDY6XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHJhbmdlKTtcXG5saWIvdGVzdF9obW0uYy00MDctXFx0XFx0aWYgKHJldCkge1xcbi0tXFxubW0vaG1tLmM9Njg4PXN0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgaW50ICpsb2NrZWQpXFxuLS1cXG5tbS9obW0uYy03NTMtICogRm9yIGEgdmFyaWFudCB0aGF0IGFsbG93cyB0aGUgbW1hcCBsb2NrIHRvIGJlIGRyb3BwZWQgZHVyaW5nIGZhdWx0cyAoZS5nLixcXG5tbS9obW0uYzo3NTQ6ICogZm9yIHVzZXJmYXVsdGZkIHN1cHBvcnQpLCBzZWUgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKCkuXFxubW0vaG1tLmMtNzU1LSAqL1xcbi0tXFxubW0vaG1tLmM9NzYwPUVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0KTtcXG4tLVxcbm1tL2htbS5jLTc2Mi0vKipcXG5tbS9obW0uYzo3NjM6ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkIC0gZmF1bHQgaW4gYSByYW5nZSwgcG9zc2libHkgZHJvcHBpbmcgdGhlIG1tYXAgbG9ja1xcbm1tL2htbS5jLTc2NC0gKiBAcmFuZ2U6XFx0YXJndW1lbnQgc3RydWN0dXJlXFxuLS1cXG5tbS9obW0uYy03NzUtICovXFxubW0vaG1tLmM6Nzc2OmludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXFxubW0vaG1tLmMtNzc3LXtcXG4tLVxcbm1tL2htbS5jLTc4OC19XFxubW0vaG1tLmM6Nzg5OkVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKTtcXG5tbS9obW0uYy03OTAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0yOTAxPVRFU1RfRl9USU1FT1VUKGhtbSwgYmVuY2htYXJrX3RocF9taWdyYXRpb24sIDEyMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5NTctICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjI5NTg6ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKCkgcGF0aC4gVGhpcyBleGVyY2lzZXMgdGhlIGxvY2stZHJvcCByZXRyeVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5NTktICogbG9naWMgaW4gdGhlIEhNTSBmcmFtZXdvcmsuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDAyOjAzOjQ0LjA4MjA2ODgxOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjAzMzk0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFJlbGV2YW50IENvbmZpZ3VyYXRpb24gRmlsZXMqKlxuXG5SaWdodCwgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlciwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiBhZmZhaXJzIHJlZ2FyZGluZyB0aGUgSE1NIHRlc3RpbmcgYW5kIHRoZSBoeXBlcnZpc29yIHJlZ2lvbnMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9mIGBsaWIvdGVzdF9obW0uY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHRlc3QgSE1NIGlzIGNvcnJlY3RseSBjb25maWd1cmVkIGFuZCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb2J2aW91cyByZWQgZmxhZ3MgdGhlcmUuIFRoZW4gSSdsbCBzaGlmdCBnZWFycyBhbmQgY2hlY2sgdGhlIGBkcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jYCBjb25maWcuIEkgd2FudCB0byBtYWtlIGNlcnRhaW4gdGhhdCByZWdpb24gc2V0dGluZ3MsIHBhcnRpY3VsYXJseSB0aG9zZSByZWxhdGVkIHRvIG1lbW9yeSBtYXBwaW5nIG9yIGFkZHJlc3Mgc3BhY2UgYWxsb2NhdGlvbiwgaGF2ZW4ndCBiZWVuIGNvbmZpZ3VyZWQgaW4gYSB3YXkgdGhhdCB3b3VsZCBpbnRlcmZlcmUgd2l0aCB0aGUgSE1NIHRlc3RzLiBJJ20gbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gdGhlc2UgdHdvIGNvbmZpZ3VyYXRpb24gYXJlYXMuIEl0J3MgYSBmdW5kYW1lbnRhbCBzYW5pdHkgY2hlY2sgdG8gcnVsZSBvdXQgb2J2aW91cyBjb25maWd1cmF0aW9uIHByb2JsZW1zIGJlZm9yZSBJIHN0YXJ0IGRlZXBlciBkZWJ1Z2dpbmcgb3IgbWFrZSBjb2RlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjgzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6MDM6NDcuNzQyNDEwODY0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NDkxMDcwODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGVzdF9obW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiTUFJTlRBSU5FUlM9MTE4NTM9RjpcXHRpbmNsdWRlL2xpbnV4L2htbSpcXG5NQUlOVEFJTkVSUzoxMTg1NDpGOlxcdGxpYi90ZXN0X2htbSpcXG5NQUlOVEFJTkVSUy0xMTg1NS1GOlxcdG1tL2htbSpcXG4tLVxcbmxpYi9NYWtlZmlsZT0xMDI9b2JqLSQoQ09ORklHX1RFU1RfTE9DS1VQKSArPSB0ZXN0X2xvY2t1cC5vXFxubGliL01ha2VmaWxlOjEwMzpvYmotJChDT05GSUdfVEVTVF9ITU0pICs9IHRlc3RfaG1tLm9cXG5saWIvTWFrZWZpbGUtMTA0LW9iai0kKENPTkZJR19URVNUX0ZSRUVfUEFHRVMpICs9IHRlc3RfZnJlZV9wYWdlcy5vXFxuLS1cXG5saWIvdGVzdF9obW0uYy0zMi1cXG5saWIvdGVzdF9obW0uYzozMzojaW5jbHVkZSBcXFwidGVzdF9obW1fdWFwaS5oXFxcIlxcbmxpYi90ZXN0X2htbS5jLTM0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGU9MTgxPVRFU1RfRklMRVMgOj0gdGVzdF92bWFsbG9jLnNoXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGU6MTgyOlRFU1RfRklMRVMgKz0gdGVzdF9obW0uc2hcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZS0xODMtVEVTVF9GSUxFUyArPSB2YV9oaWdoX2FkZHJfc3dpdGNoLnNoXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy00MC0gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo0MTojaW5jbHVkZSBcXHUwMDNjbGliL3Rlc3RfaG1tX3VhcGkuaFxcdTAwM2VcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy00Mi0jaW5jbHVkZSBcXHUwMDNjbW0vZ3VwX3Rlc3QuaFxcdTAwM2VcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoPTM0MT1DQVRFR09SWT1cXFwibXJlbWFwXFxcIiBydW5fdGVzdCAuL21yZW1hcF9kb250dW5tYXBcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaC0zNDItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2g6MzQzOkNBVEVHT1JZPVxcXCJobW1cXFwiIHJ1bl90ZXN0IGJhc2ggLi90ZXN0X2htbS5zaCBzbW9rZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoLTM0NC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoLTExLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoOjEyOlRFU1RfTkFNRT1cXFwidGVzdF9obW1cXFwiXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGVzdF9obW0uc2g6MTM6RFJJVkVSPVxcXCJ0ZXN0X2htbVxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaC0xNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6MDM6NTUuMjkxNTMwNjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDg1MjE4NDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiB0aGVzZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBgQ09ORklHX1RFU1RfSE1NYCAtIHRoYXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpdCdzIHRoZSBmbGFnIHRoYXQgY29udHJvbHMgdGhlIGJ1aWxkIGluY2x1c2lvbiBmb3IgYHRlc3RfaG1tLmNgLiBFYXN5IGVub3VnaC4gQnV0IG5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIGtlZXAgdGhlIGNvZGUgb3JnYW5pemVkIGFuZCBhdm9pZCBhbnkgY29uZmlndXJhdGlvbiBjb25mbGljdHMuIFRoYXQgYnJpbmdzIG1lIHRvIHRoZSBuZXh0IGZpbGUgSSBuZWVkIHRvIGNvbnNpZGVyLCB3aGljaCBpcyBgbXNodl9yZWdpb25zLmNgLiBJIGhhdmUgdG8gbm93IGJlZ2luIHRoZSBwcm9jZXNzIHRvIHRoaW5rIHRocm91Z2ggaXRzIGNvbmZpZyBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUzMSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDAyOjA0OjAzLjc3Njc1MzE4NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTExOTgyNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1zaHZfcmVnaW9uc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2h2L01ha2VmaWxlPTE2PW1zaHZfcm9vdC15IDo9IG1zaHZfcm9vdF9tYWluLm8gbXNodl9zeW5pYy5vIG1zaHZfZXZlbnRmZC5vIG1zaHZfaXJxLm8gXFxcXFxcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTc6XFx0ICAgICAgIG1zaHZfcm9vdF9odl9jYWxsLm8gbXNodl9wb3J0aWRfdGFibGUubyBtc2h2X3JlZ2lvbnMub1xcbmRyaXZlcnMvaHYvTWFrZWZpbGUtMTgtbXNodl9yb290LSQoQ09ORklHX0RFQlVHX0ZTKSArPSBtc2h2X2RlYnVnZnMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjowNDoxMS4yODg3NDI2MjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI2MzI0NzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSHlwZXItViBEcml2ZXIgTWFrZWZpbGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgbXNodl9yb290YCBpcyBkZWZpbmVkIG9yIHVzZWQgd2l0aGluIHRoZSBIeXBlci1WIGRyaXZlciBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCBsb2NhdGVkIGluIHRoZSBgZHJpdmVycy9odi9gIGRpcmVjdG9yeS4gVGhhdCBmaWxlIGlzIHVzdWFsbHkgdGhlIGNlbnRyYWwgcG9pbnQgb2YgY29uZmlndXJhdGlvbiBmb3IgdGhhdCBlbnRpcmUgcGFydCBvZiB0aGUga2VybmVsLCBzbyBpdOKAmXMgdGhlIGxvZ2ljYWwgZmlyc3QgcGxhY2UgdG8gbG9vay4gSG9wZWZ1bGx5LCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGRlZmluaXRpb24gb3IgcmVmZXJlbmNlLCBhbmQgSSB3b24ndCBoYXZlIHRvIHRyYWNlIHRocm91Z2ggaW5jbHVkZSBmaWxlcyBvciBjb25kaXRpb25hbCBsb2dpYyB0byBmaW5kIGl0LiBUaW1lIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODYwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6MDQ6MTQuMzE1MDcyNzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNTkwODI1MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXNodl9yb290XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaHYvTWFrZWZpbGU9ND1vYmotJChDT05GSUdfSFlQRVJWX0JBTExPT04pXFx0Kz0gaHZfYmFsbG9vbi5vXFxuZHJpdmVycy9odi9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19NU0hWX1JPT1QpXFx0XFx0Kz0gbXNodl9yb290Lm9cXG5kcml2ZXJzL2h2L01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX01TSFZfVlRMKSAgICAgICAgICArPSBtc2h2X3Z0bC5vXFxuLS1cXG5kcml2ZXJzL2h2L01ha2VmaWxlPTE1PWh2X3V0aWxzLXkgOj0gaHZfdXRpbC5vIGh2X2t2cC5vIGh2X3NuYXBzaG90Lm8gaHZfdXRpbHNfdHJhbnNwb3J0Lm9cXG5kcml2ZXJzL2h2L01ha2VmaWxlOjE2Om1zaHZfcm9vdC15IDo9IG1zaHZfcm9vdF9tYWluLm8gbXNodl9zeW5pYy5vIG1zaHZfZXZlbnRmZC5vIG1zaHZfaXJxLm8gXFxcXFxcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTc6XFx0ICAgICAgIG1zaHZfcm9vdF9odl9jYWxsLm8gbXNodl9wb3J0aWRfdGFibGUubyBtc2h2X3JlZ2lvbnMub1xcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTg6bXNodl9yb290LSQoQ09ORklHX0RFQlVHX0ZTKSArPSBtc2h2X2RlYnVnZnMub1xcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTk6bXNodl9yb290LSQoQ09ORklHX1RSQUNFUE9JTlRTKSArPSBtc2h2X3RyYWNlLm9cXG5kcml2ZXJzL2h2L01ha2VmaWxlLTIwLW1zaHZfdnRsLXkgOj0gbXNodl92dGxfbWFpbi5vXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfZGVidWdmcy5jLTE2LSNpbmNsdWRlIFxcXCJtc2h2LmhcXFwiXFxuZHJpdmVycy9odi9tc2h2X2RlYnVnZnMuYzoxNzojaW5jbHVkZSBcXFwibXNodl9yb290LmhcXFwiXFxuZHJpdmVycy9odi9tc2h2X2RlYnVnZnMuYy0xOC1cXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9ldmVudGZkLmMtMjUtI2luY2x1ZGUgXFxcIm1zaHYuaFxcXCJcXG5kcml2ZXJzL2h2L21zaHZfZXZlbnRmZC5jOjI2OiNpbmNsdWRlIFxcXCJtc2h2X3Jvb3QuaFxcXCJcXG5kcml2ZXJzL2h2L21zaHZfZXZlbnRmZC5jLTI3LVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X2V2ZW50ZmQuaC0xMy0jaW5jbHVkZSBcXFwibXNodi5oXFxcIlxcbmRyaXZlcnMvaHYvbXNodl9ldmVudGZkLmg6MTQ6I2luY2x1ZGUgXFxcIm1zaHZfcm9vdC5oXFxcIlxcbmRyaXZlcnMvaHYvbXNodl9ldmVudGZkLmgtMTUtXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfaXJxLmMtMTQtI2luY2x1ZGUgXFxcIm1zaHYuaFxcXCJcXG5kcml2ZXJzL2h2L21zaHZfaXJxLmM6MTU6I2luY2x1ZGUgXFxcIm1zaHZfcm9vdC5oXFxcIlxcbmRyaXZlcnMvaHYvbXNodl9pcnEuYy0xNi1cXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9wb3J0aWRfdGFibGUuYy04LSNpbmNsdWRlIFxcXCJtc2h2LmhcXFwiXFxuZHJpdmVycy9odi9tc2h2X3BvcnRpZF90YWJsZS5jOjk6I2luY2x1ZGUgXFxcIm1zaHZfcm9vdC5oXFxcIlxcbmRyaXZlcnMvaHYvbXNodl9wb3J0aWRfdGFibGUuYy0xMC1cXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtNC0gKlxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM6NTogKiBNZW1vcnkgcmVnaW9uIG1hbmFnZW1lbnQgZm9yIG1zaHZfcm9vdCBtb2R1bGUuXFxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy02LSAqXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jLTE3LVxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM6MTg6I2luY2x1ZGUgXFxcIm1zaHZfcm9vdC5oXFxcIlxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtMTktXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdC5oPTE4Nz1zdHJ1Y3QgaHZfc3luaWNfcGFnZXMge1xcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3QuaC0xOTItXFxuZHJpdmVycy9odi9tc2h2X3Jvb3QuaDoxOTM6c3RydWN0IG1zaHZfcm9vdCB7XFxuZHJpdmVycy9odi9tc2h2X3Jvb3QuaC0xOTQtXFx0c3BpbmxvY2tfdCBwdF9odF9sb2NrO1xcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3QuaD0zNjE9c3RhdGljIGlubGluZSB2b2lkIG1zaHZfZGVidWdmc192cF9yZW1vdmUoc3RydWN0IG1zaHZfdnAgKnZwKSB7IH1cXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290LmgtMzYzLVxcbmRyaXZlcnMvaHYvbXNodl9yb290Lmg6MzY0OmV4dGVybiBzdHJ1Y3QgbXNodl9yb290IG1zaHZfcm9vdDtcXG5kcml2ZXJzL2h2L21zaHZfcm9vdC5oLTM2NS1leHRlcm4gZW51bSBodl9zY2hlZHVsZXJfdHlwZSBodl9zY2hlZHVsZXJfdHlwZTtcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYy00LSAqXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfaHZfY2FsbC5jOjU6ICogSHlwZXJjYWxsIGhlbHBlciBmdW5jdGlvbnMgdXNlZCBieSB0aGUgbXNodl9yb290IG1vZHVsZS5cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmMtNi0gKlxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfaHZfY2FsbC5jLTE0LVxcbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYzoxNTojaW5jbHVkZSBcXFwibXNodl9yb290LmhcXFwiXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfaHZfY2FsbC5jLTE2LVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfaHZfY2FsbC5jPTU5MT1zdGF0aWMgYm9vbCBtc2h2X3VzZV9vdmVybGF5X2dwZm4odm9pZClcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYy01OTMtXFx0cmV0dXJuIGh2X2wxdmhfcGFydGl0aW9uKCkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmM6NTk0OlxcdCAgICAgICBtc2h2X3Jvb3Qudm1tX2NhcHMudm1tX2Nhbl9wcm92aWRlX292ZXJsYXlfZ3BmbjtcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmMtNTk1LX1cXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy00LSAqXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjU6ICogVGhlIG1haW4gcGFydCBvZiB0aGUgbXNodl9yb290IG1vZHVsZSwgcHJvdmlkaW5nIEFQSXMgdG8gY3JlYXRlXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTYtICogYW5kIG1hbmFnZSBndWVzdCBwYXJ0aXRpb25zLlxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTM1LSNpbmNsdWRlIFxcXCJtc2h2LmhcXFwiXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjM2OiNpbmNsdWRlIFxcXCJtc2h2X3Jvb3QuaFxcXCJcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMzctXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9NDA9TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNaWNyb3NvZnQgSHlwZXItViByb290IHBhcnRpdGlvbiBWTU0gaW50ZXJmYWNlIC9kZXYvbXNodlxcXCIpO1xcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTQ4LVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzo0OTpzdHJ1Y3QgbXNodl9yb290IG1zaHZfcm9vdDtcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtNTAtXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9MTcwPXN0YXRpYyBpbnQgbXNodl9pb2N0bF9wYXNzdGhydV9odmNhbGwoc3RydWN0IG1zaHZfcGFydGl0aW9uICpwYXJ0aXRpb24sXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTc2LVxcdGJvb2wgaXNfYXN5bmM7XFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjE3NzpcXHRzdHJ1Y3QgbXNodl9yb290X2h2Y2FsbCBhcmdzO1xcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0xNzgtXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9MTc2Nj1yZW1vdmVfcGFydGl0aW9uKHN0cnVjdCBtc2h2X3BhcnRpdGlvbiAqcGFydGl0aW9uKVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0xNzY3LXtcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MTc2ODpcXHRzcGluX2xvY2soXFx1MDAyNm1zaHZfcm9vdC5wdF9odF9sb2NrKTtcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTc2OS1cXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZwYXJ0aXRpb24tXFx1MDAzZXB0X2hub2RlKTtcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MTc3MDpcXHRzcGluX3VubG9jayhcXHUwMDI2bXNodl9yb290LnB0X2h0X2xvY2spO1xcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0xNzcxLVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTE4NzU9bXNodl9wYXJ0aXRpb24gKm1zaHZfcGFydGl0aW9uX2ZpbmQodTY0IHBhcnRpdGlvbl9pZClcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0xODc5LVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoxODgwOlxcdGhhc2hfZm9yX2VhY2hfcG9zc2libGVfcmN1KG1zaHZfcm9vdC5wdF9odGFibGUsIHAsIHB0X2hub2RlLFxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0xODgxLVxcdFxcdFxcdFxcdCAgIHBhcnRpdGlvbl9pZClcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYz0xOTEyPWFkZF9wYXJ0aXRpb24oc3RydWN0IG1zaHZfcGFydGl0aW9uICpwYXJ0aXRpb24pXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTE5MTMte1xcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoxOTE0OlxcdHNwaW5fbG9jayhcXHUwMDI2bXNodl9yb290LnB0X2h0X2xvY2spO1xcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0xOTE1LVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoxOTE2OlxcdGhhc2hfYWRkX3JjdShtc2h2X3Jvb3QucHRfaHRhYmxlLCBcXHUwMDI2cGFydGl0aW9uLVxcdTAwM2VwdF9obm9kZSxcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTkxNy1cXHRcXHQgICAgIHBhcnRpdGlvbi1cXHUwMDNlcHRfaWQpO1xcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0xOTE4LVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoxOTE5OlxcdHNwaW5fdW5sb2NrKFxcdTAwMjZtc2h2X3Jvb3QucHRfaHRfbG9jayk7XFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTE5MjAtXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9MjEzMD1tc2h2X2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIxMzQtXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjIxMzU6c3RhdGljIGludCBtc2h2X3Jvb3Rfc2NoZWRfb25saW5lO1xcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMTM2LVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTIxNTM9c3RhdGljIGludCBfX2luaXQgbDF2aF9yZXRyaWV2ZV9zY2hlZHVsZXJfdHlwZShlbnVtIGh2X3NjaGVkdWxlcl90eXBlICpvdXQpXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjE1OS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjE2MDpcXHRpZiAoIW1zaHZfcm9vdC52bW1fY2Fwcy52bW1fZW5hYmxlX2ludGVncmF0ZWRfc2NoZWR1bGVyKVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMTYxLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTIyMDY9c3RhdGljIGludCBfX2luaXQgbXNodl9yZXRyaWV2ZV9zY2hlZHVsZXJfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjIzNS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjIzNjpzdGF0aWMgaW50IG1zaHZfcm9vdF9zY2hlZHVsZXJfaW5pdCh1bnNpZ25lZCBpbnQgY3B1KVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMjM3LXtcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMjUzLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyMjU0OnN0YXRpYyBpbnQgbXNodl9yb290X3NjaGVkdWxlcl9jbGVhbnVwKHVuc2lnbmVkIGludCBjcHUpXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIyNTUte1xcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTIyNzM9cm9vdF9zY2hlZHVsZXJfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjI4OC1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjI4OTpcXHRyZXQgPSBjcHVocF9zZXR1cF9zdGF0ZShDUFVIUF9BUF9PTkxJTkVfRFlOLCBcXFwibXNodl9yb290X3NjaGVkXFxcIixcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjI5MDpcXHRcXHRcXHRcXHRtc2h2X3Jvb3Rfc2NoZWR1bGVyX2luaXQsXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjIyOTE6XFx0XFx0XFx0XFx0bXNodl9yb290X3NjaGVkdWxlcl9jbGVhbnVwKTtcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjI5Mi1cXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMjk3LVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyMjk4OlxcdG1zaHZfcm9vdF9zY2hlZF9vbmxpbmUgPSByZXQ7XFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIyOTktXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9MjMwOT1yb290X3NjaGVkdWxlcl9kZWluaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMzEzLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyMzE0OlxcdGNwdWhwX3JlbW92ZV9zdGF0ZShtc2h2X3Jvb3Rfc2NoZWRfb25saW5lKTtcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjMxNS1cXHRmcmVlX3BlcmNwdShyb290X3NjaGVkdWxlcl9pbnB1dCk7XFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9MjMxOT1zdGF0aWMgaW50IF9faW5pdCBtc2h2X2luaXRfdm1tX2NhcHMoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIzMjQtXFx0XFx0XFx0XFx0XFx0XFx0SFZfUEFSVElUSU9OX1BST1BFUlRZX1ZNTV9DQVBBQklMSVRJRVMsXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjIzMjU6XFx0XFx0XFx0XFx0XFx0XFx0MCwgXFx1MDAyNm1zaHZfcm9vdC52bW1fY2FwcyxcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjMyNjpcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2YobXNodl9yb290LnZtbV9jYXBzKSk7XFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIzMjctXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiBodl9sMXZoX3BhcnRpdGlvbigpKSB7XFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjMzMS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjMzMjpcXHRkZXZfZGJnKGRldiwgXFxcInZtbV9jYXBzID0gJSNsbHhcXFxcblxcXCIsIG1zaHZfcm9vdC52bW1fY2Fwcy5hc191aW50NjRbMF0pO1xcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMzMzLVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTIzMzc9c3RhdGljIGludCBfX2luaXQgbXNodl9wYXJlbnRfcGFydGl0aW9uX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMzg2LVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyMzg3OlxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZtc2h2X3Jvb3QucHRfaHRfbG9jayk7XFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjIzODg6XFx0aGFzaF9pbml0KG1zaHZfcm9vdC5wdF9odGFibGUpO1xcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMzg5LVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3N5bmljLmMtNC0gKlxcbmRyaXZlcnMvaHYvbXNodl9zeW5pYy5jOjU6ICogbXNodl9yb290IG1vZHVsZSdzIG1haW4gaW50ZXJydXB0IGhhbmRsZXIgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25hbGl0eS5cXG5kcml2ZXJzL2h2L21zaHZfc3luaWMuYy02LSAqXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbXNodi5oPTIxMz1zdHJ1Y3QgbXNodl9ncGFwX2FjY2Vzc19iaXRtYXAge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaC0yMjItLyoqXFxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaDoyMjM6ICogc3RydWN0IG1zaHZfcm9vdF9odmNhbGwgLSBhcmd1bWVudHMgZm9yIE1TSFZfUk9PVF9IVkNBTExcXG5pbmNsdWRlL3VhcGkvbGludXgvbXNodi5oLTIyNC0gKiBAY29kZTogSHlwZXJjYWxsIGNvZGUgKEhWQ0FMTF8qKVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaC0yMzUtICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaDoyMzY6c3RydWN0IG1zaHZfcm9vdF9odmNhbGwge1xcbmluY2x1ZGUvdWFwaS9saW51eC9tc2h2LmgtMjM3LVxcdF9fdTE2IGNvZGU7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbXNodi5oLTI1NS0vKiBHZW5lcmljIGh5cGVyY2FsbCAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9tc2h2Lmg6MjU2OiNkZWZpbmUgTVNIVl9ST09UX0hWQ0FMTFxcdFxcdF9JT1dSKE1TSFZfSU9DVEwsIDB4MDcsIHN0cnVjdCBtc2h2X3Jvb3RfaHZjYWxsKVxcbmluY2x1ZGUvdWFwaS9saW51eC9tc2h2LmgtMjU3LVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaD0zMTA9c3RydWN0IG1zaHZfZ2V0X3NldF92cF9zdGF0ZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbXNodi5oLTMyMy0gKiBEZWZpbmVkIGFib3ZlIGluIHBhcnRpdGlvbiBJT0NUTHMsIGF2b2lkIHJlZGVmaW5pbmcgaXQgaGVyZVxcbmluY2x1ZGUvdWFwaS9saW51eC9tc2h2Lmg6MzI0OiAqICNkZWZpbmUgTVNIVl9ST09UX0hWQ0FMTFxcdFxcdFxcdF9JT1dSKE1TSFZfSU9DVEwsIDB4MDcsIHN0cnVjdCBtc2h2X3Jvb3RfaHZjYWxsKVxcbmluY2x1ZGUvdWFwaS9saW51eC9tc2h2LmgtMzI1LSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjowNDoyMS42NzQxNjQ0NjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzNTIwNjQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIE1TSFYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBDT05GSUdfTVNIVl9ST09UYC4gUmlnaHQsIHRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdGhhdCB0aWVzIGludG8gYG1zaHZfcmVnaW9ucy5jYC4gTXkgbWluZCBpcyByYWNpbmcgdG8gcmVtZW1iZXIgaG93IHRoZXNlIHBpZWNlcyBjb25uZWN0LiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBidWlsZCBzeXN0ZW0gY29uZmlybXMgdGhhdCBgbXNodl9yZWdpb25zLmNgIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19NU0hWX1JPT1RgIGlzIGVuYWJsZWQuIFRoYXQncyBnb29kLCB0aGF0J3Mgd2hhdCBJIGV4cGVjdC4gTm93IEkganVzdCBuZWVkIHRvIHZlcmlmeSB0aGF0IGBDT05GSUdfTVNIVl9ST09UYCBpcyBhY3R1YWxseSBkZWZpbmVkLCBhbmQgdGhlbiBJIGNhbiBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEwMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDAyOjA0OjI2LjIwOTM3NDI4MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAwOTcyMTMxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVNIVl9ST09UXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaHYvS2NvbmZpZz02MD1jb25maWcgSFlQRVJWX1ZNQlVTXFxuLS1cXG5kcml2ZXJzL2h2L0tjb25maWctNjctXFxuZHJpdmVycy9odi9LY29uZmlnOjY4OmNvbmZpZyBNU0hWX1JPT1RcXG5kcml2ZXJzL2h2L0tjb25maWctNjktXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIHJvb3QgcGFydGl0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDAyOjA0OjMzLjIxOTEwOTk3NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTA2MjY5ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBITU0gUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgQ09ORklHX01TSFZfUk9PVGAgc2VlbXMgdG8gYmUgdGhlIGNvbnRyb2xsaW5nIGNvbmZpZyBoZXJlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGZvY3VzZWQgb24gbW9kaWZ5aW5nIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRgIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgYGhtbV9yYW5nZV9mYXVsdGAuIFRoaXMgYGhtbV9yYW5nZV9mYXVsdGAgaXMgYSBjcml0aWNhbCBITU0gZnVuY3Rpb24sIGhlYXZpbHkgdXNlZCBhY3Jvc3MgdmFyaW91cyBkcml2ZXJzIGxpa2Ugbm91dmVhdSBhbmQgYW1kZ3B1IOKAkyBhIHNpZ25pZmljYW50IHBpZWNlIG9mIGNvcmUgSE1NIGZ1bmN0aW9uYWxpdHkuIFRoZSBwYXRjaCByZWZhY3RvcnMgaXQgdG8gdXNlIGEgbG9ja2VkIHZlcnNpb24gKGBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkYCksIHdoaWNoIHRoZW4gbGV2ZXJhZ2VzIGBobW1fZG9fZmF1bHRgIGFuZCBgaG1tX3JlY29yZF9mYXVsdGAuIFRoaXMgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb3JlIEhNTSBjb2RlLCBtZWFuaW5nIGZ1enppbmcgdGhpcyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC5cblxuTGV0J3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBXZSd2ZSBnb3Q6XG5cbiogICBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkYFxuKiAgIGBobW1fcmFuZ2VfZmF1bHRgXG4qICAgYGhtbV9kb19mYXVsdGBcbiogICBgaG1tX3JlY29yZF9mYXVsdGBcbiogICBgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZGBcblxuRm9yIGNvbmZpZyBvcHRpb25zLCB3ZSdsbCBuZWVkIGBURVNUX0hNTWAgYW5kIGBNU0hWX1JPT1RgIHRvIHJlcHJvZHVjZSB0aGUgY2hhbmdlcy4gVGhvdWdoIGBobW1fcmFuZ2VfZmF1bHRgIGlzIHVzZWQgYnkgbXVsdGlwbGUgZHJpdmVycywgZm9jdXNpbmcgb24gYFRFU1RfSE1NYCBvZmZlcnMgYSBjbGVhbmVyIHdheSB0byB0ZXN0IHRoZSBjaGFuZ2VzLlxuXG5JIG5lZWQgdG8gZGlnIGludG8gYHRlc3RfaG1tLmNgIHRvIGlkZW50aWZ5IGFueSBzcGVjaWZpYyBpb2N0bHMgdG8gdGFyZ2V0LiBBaCwgaXQgYWRkcyBgSE1NX0RNSVJST1JfUkVBRF9VTkxPQ0tFRGAuIFRoZSBjb3JyZXNwb25kaW5nIGhhbmRsZXIgaXMgYGRtaXJyb3JfcmVhZF91bmxvY2tlZGAsIGFsb25nIHdpdGggYGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRgIGFuZCBgZG1pcnJvcl9mYXVsdF91bmxvY2tlZGAuXG5cblNvLCB0aGUgZXh0ZW5kZWQgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGJlY29tZXM6XG5cbiogICBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkYFxuKiAgIGBobW1fcmFuZ2VfZmF1bHRgXG4qICAgYGhtbV9kb19mYXVsdGBcbiogICBgZG1pcnJvcl9yZWFkX3VubG9ja2VkYFxuKiAgIGBkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkYFxuKiAgIGBkbWlycm9yX2ZhdWx0X3VubG9ja2VkYFxuKiAgIGBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2tgXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWdzLiBTcGVjaWZpY2FsbHkgYFRFU1RfSE1NYCBhbmQgYE1TSFZfUk9PVGAuXG5cbkkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGF0ZWQgY29uZmlncy4gVHlwaWNhbGx5IGBURVNUX0hNTWAgc2hvdWxkIGFsc28gc2VsZWN0IGBDT05GSUdfSE1NX01JUlJPUmAuIEknbGwgY29uZmlybSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM5OSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjowNDo0MS4zMjUzODYyNjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2OTUxMDUzMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRFU1RfSE1NXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTMzMTg9Y29uZmlnIFRFU1RfTUVNSU5JVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzMyNS1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzI2OmNvbmZpZyBURVNUX0hNTVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjctXFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6MDQ6NDcuMDIwNDk4NTU4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NjU1ODE0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgdGhlIEtjb25maWcgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBkaXZlIHN0cmFpZ2h0IGluLiBUaGUgdGFzayBpcyByZWxhdGVkIHRvIHRoZSBgVEVTVF9ITU1gIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgZmlyc3QgcGxhY2UgSSdkIGNoZWNrIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG9wdGlvbiwgaXRzIGRlcGVuZGVuY2llcywgYW5kIHdoYXQgaXQgY29udHJvbHMgaXMgZ29pbmcgdG8gYmUgYGxpYi9LY29uZmlnLmRlYnVnYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZGV0YWlscyBmb3IgZGVidWctcmVsYXRlZCBmZWF0dXJlcyB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIGlzIGRlZmluZWQgYW5kIGhhbmRsZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IGBURVNUX0hNTWAgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0OTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjowNDo1Mi44ODYwODM3NjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMzE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzI2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzI2OlxcdGNvbmZpZyBURVNUX0hNTVxcbjMzMjc6XFx0XFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG4zMzI4OlxcdFxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4zMzI5OlxcdFxcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcXG4zMzMwOlxcdFxcdHNlbGVjdCBITU1fTUlSUk9SXFxuMzMzMTpcXHRcXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuMzMzMjpcXHRcXHRoZWxwXFxuMzMzMzpcXHRcXHQgIFRoaXMgaXMgYSBwc2V1ZG8gZGV2aWNlIGRyaXZlciBzb2xlbHkgZm9yIHRlc3RpbmcgSE1NLlxcbjMzMzQ6XFx0XFx0ICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBITU0gdGVzdCBtb2R1bGUuXFxuMzMzNTpcXHRcXHQgIERvaW5nIHNvIHdpbGwgYWxsb3cgeW91IHRvIHJ1biB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0L3ZtL2htbS10ZXN0cy5cXG4zMzM2OlxcdFxcbjMzMzc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjMzMzg6XFx0XFxuMzMzOTpcXHRjb25maWcgVEVTVF9GUkVFX1BBR0VTXFxuMzM0MDpcXHRcXHR0cmlzdGF0ZSBcXFwiVGVzdCBmcmVlaW5nIHBhZ2VzXFxcIlxcbjMzNDE6XFx0XFx0aGVscFxcbjMzNDI6XFx0XFx0ICBUZXN0IHRoYXQgYSBtZW1vcnkgbGVhayBkb2VzIG5vdCBvY2N1ciBkdWUgdG8gYSByYWNlIGJldHdlZW5cXG4zMzQzOlxcdFxcdCAgZnJlZWluZyBhIGJsb2NrIG9mIHBhZ2VzIGFuZCBhIHNwZWN1bGF0aXZlIHBhZ2UgcmVmZXJlbmNlLlxcbjMzNDQ6XFx0XFx0ICBMb2FkaW5nIHRoaXMgbW9kdWxlIGlzIHNhZmUgaWYgeW91ciBrZXJuZWwgaGFzIHRoZSBidWcgZml4ZWQuXFxuMzM0NTpcXHRcXHQgIElmIHRoZSBidWcgaXMgbm90IGZpeGVkLCBpdCB3aWxsIGxlYWsgZ2lnYWJ5dGVzIG9mIG1lbW9yeSBhbmRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6MDQ6NTIuODg3NDEzNjU3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODE3MjAyMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhNTSBQYXRjaCBmb3IgRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaW5jbHVkZXMgYWxsIG5lY2Vzc2FyeSBjb21wb25lbnRzLiBTbywgSSdsbCBiZSBhZGRpbmcgYFRFU1RfSE1NYCBhbmQgYE1TSFZfUk9PVGAgdG8gdGhlIGNvbmZpZ3VyYXRpb25zLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhhdCB0aGUgcGF0Y2gncyBjb3JlIHJlbGF0ZXMgdG8gdGhlIEhNTSBzdWJzeXN0ZW0gYW5kIHRoZSBNU0hWIHJlZ2lvbiBoYW5kbGluZy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGZvY3VzIGFyZWFzIGZvciBmdXp6aW5nLiBJJ3ZlIGdvdCBhIGxpc3Qgb2Ygc3ltYm9scyB0byByZXZpZXc6IGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRgLCBgaG1tX3JhbmdlX2ZhdWx0YCwgYGhtbV9kb19mYXVsdGAsIGBobW1fcmVjb3JkX2ZhdWx0YCwgYGhtbV9yYW5nZV9mYXVsdF9sb2NrZWRgLCBgZG1pcnJvcl9yZWFkX3VubG9ja2VkYCwgYGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRgLCBgZG1pcnJvcl9mYXVsdF91bmxvY2tlZGAsIGFuZCBgbXNodl9yZWdpb25faG1tX2ZhdWx0X2FuZF9sb2NrYC5cblxuU3BlY2lmaWNhbGx5LCBgaG1tX3JhbmdlX2ZhdWx0YCBpdHNlbGYgaXMgYW4gaW50ZXJlc3RpbmcgcG9pbnQuIFdoaWxlIGl0J3Mgbm90IGEgZ2VuZXJhbCBob3QtcGF0aCBmdW5jdGlvbiBsaWtlIGBoYW5kbGVfbW1fZmF1bHRgLCBpdCdzIGNvcmUgdG8gcGFnZSBmYXVsdCBoYW5kbGluZyBmb3IgSE1NIGRldmljZXMsIHNvIGl0J3MgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIGBobW1fZG9fZmF1bHRgIGFuZCBgaG1tX3JlY29yZF9mYXVsdGAgYXJlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBtbS9obW0uY2AuIFRoZSBgZG1pcnJvcl8qYCBmdW5jdGlvbnMgYXJlIHdpdGhpbiBgbGliL3Rlc3RfaG1tLmNgLCBhbmQgYG1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9ja2AgaXMgaW4gYGRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNgLiBJJ2xsIG5lZWQgdG8ga2VlcCB0aGUgbG9jYXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiBtaW5kIHdoZW4gc2V0dGluZyB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudC5cblxuVGhlIHBhdGNoJ3MgYWN0dWFsIG1lYXQgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgY29yZSBITU0gbG9naWMuIEl0IGludHJvZHVjZXMgYSBuZXcgQVBJLCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkYCwgZm9yIGRyb3BwaW5nIHRoZSBtbWFwIGxvY2sgZHVyaW5nIHBhZ2UgZmF1bHRzLiBUaGlzIGhhcyBmdW5jdGlvbmFsIGltcGxpY2F0aW9ucywgYXMgaXQgYWltcyB0byBpbXByb3ZlIGhhbmRsaW5nIHdpdGggdXNlcmZhdWx0ZmQgcmVnaW9ucy4gSXQgYWxzbyByZWZhY3RvcnMgdGhlIG9yaWdpbmFsIGBobW1fcmFuZ2VfZmF1bHRgLiBGdXJ0aGVybW9yZSwgSSd2ZSBnb3QgdG8gcmVtZW1iZXIgdGhhdCB0aGUgY2hhbmdlcyByaXBwbGUgdGhyb3VnaCBgdGVzdF9obW0uY2AgYW5kIGBtc2h2X3JlZ2lvbnMuY2AgdG8gdXNlIHRoaXMgbmV3IEFQSS5cblxuU28sIGluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbXBhY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRyaXZlciBjb2RlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgbG9jayBkcm9wcGluZyBkdXJpbmcgcGFnZSBmYXVsdHMsIHNvIGl0IHdhcnJhbnRzIHNlcmlvdXMgZnV6emluZy4gTm93LCBJJ2xsIGBzZXQtcmVzdWx0c2AgYW5kIHByZXBhcmUgZm9yIHRoZSBmdXp6aW5nIGNhbXBhaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDAxNywiT3V0cHV0VG9rZW5zIjoyMzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjowNTowNC43MDQ2NTc0MzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg4NzU5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJNU0hWX1JPT1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImhtbV9yYW5nZV9mYXVsdFwiLFxuICAgIFwiaG1tX2RvX2ZhdWx0XCIsXG4gICAgXCJobW1fcmVjb3JkX2ZhdWx0XCIsXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRfbG9ja2VkXCIsXG4gICAgXCJkbWlycm9yX3JlYWRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcIm1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKWAgaW4gdGhlIEhNTSBzdWJzeXN0ZW0gdG8gYWxsb3cgZHJvcHBpbmcgdGhlIG1tYXAgbG9jayBkdXJpbmcgcGFnZSBmYXVsdHMsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgcmVnaW9ucyBtYW5hZ2VkIGJ5IHVzZXJmYXVsdGZkLiBJdCByZWZhY3RvcnMgdGhlIGNvcmUgYGhtbV9yYW5nZV9mYXVsdCgpYCBsb2dpYyB0byBzdXBwb3J0IHRoaXMgYW5kIHVwZGF0ZXMgdGhlIGB0ZXN0X2htbWAgbW9kdWxlIGFuZCBgbXNodl9yZWdpb25zYCBkcml2ZXIgdG8gdXRpbGl6ZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZHJpdmVyIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJNU0hWX1JPT1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImhtbV9yYW5nZV9mYXVsdFwiLFxuICAgIFwiaG1tX2RvX2ZhdWx0XCIsXG4gICAgXCJobW1fcmVjb3JkX2ZhdWx0XCIsXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRfbG9ja2VkXCIsXG4gICAgXCJkbWlycm9yX3JlYWRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcIm1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKWAgaW4gdGhlIEhNTSBzdWJzeXN0ZW0gdG8gYWxsb3cgZHJvcHBpbmcgdGhlIG1tYXAgbG9jayBkdXJpbmcgcGFnZSBmYXVsdHMsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgcmVnaW9ucyBtYW5hZ2VkIGJ5IHVzZXJmYXVsdGZkLiBJdCByZWZhY3RvcnMgdGhlIGNvcmUgYGhtbV9yYW5nZV9mYXVsdCgpYCBsb2dpYyB0byBzdXBwb3J0IHRoaXMgYW5kIHVwZGF0ZXMgdGhlIGB0ZXN0X2htbWAgbW9kdWxlIGFuZCBgbXNodl9yZWdpb25zYCBkcml2ZXIgdG8gdXRpbGl6ZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZHJpdmVyIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow9d4p2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 01:32:16 +0000 UTC FinishedAt: 2026-07-07 02:05:07 +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": "820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "MSHV_ROOT" ], "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": "820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "MSHV_ROOT" ], "series_id": "163771b5-7490-4eb7-97c9-b3d52da5a177" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hmm_range_fault_unlocked", "hmm_range_fault", "hmm_do_fault", "hmm_record_fault", "hmm_range_fault_locked", "dmirror_read_unlocked", "dmirror_range_fault_unlocked", "dmirror_fault_unlocked", "mshv_region_hmm_fault_and_lock" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O01TSFZfUk9PVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2htbV9yYW5nZV9mYXVsdF91bmxvY2tlZCYjMzQ7LAogICAgJiMzNDtobW1fcmFuZ2VfZmF1bHQmIzM0OywKICAgICYjMzQ7aG1tX2RvX2ZhdWx0JiMzNDssCiAgICAmIzM0O2htbV9yZWNvcmRfZmF1bHQmIzM0OywKICAgICYjMzQ7aG1tX3JhbmdlX2ZhdWx0X2xvY2tlZCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX3JlYWRfdW5sb2NrZWQmIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX2ZhdWx0X3VubG9ja2VkJiMzNDssCiAgICAmIzM0O21zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKClgIGluIHRoZSBITU0gc3Vic3lzdGVtIHRvIGFsbG93IGRyb3BwaW5nIHRoZSBtbWFwIGxvY2sgZHVyaW5nIHBhZ2UgZmF1bHRzLCB3aGljaCBpcyB1c2VmdWwgZm9yIHJlZ2lvbnMgbWFuYWdlZCBieSB1c2VyZmF1bHRmZC4gSXQgcmVmYWN0b3JzIHRoZSBjb3JlIGBobW1fcmFuZ2VfZmF1bHQoKWAgbG9naWMgdG8gc3VwcG9ydCB0aGlzIGFuZCB1cGRhdGVzIHRoZSBgdGVzdF9obW1gIG1vZHVsZSBhbmQgYG1zaHZfcmVnaW9uc2AgZHJpdmVyIHRvIHV0aWxpemUgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRyaXZlciBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY0Yjc1OTNmNmZlODZjYjZjNTQwZTY0NGE5YjFkMWRjZGY4ODBlNzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDAyOjAzOjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdFxuaW5kZXggN2Q2MWI3YThiNjViNzkuLjg0NDM0MzcxMmFiZGRhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcbkBAIC0yMDgsNiAmIzQzOzIwOCw2NSBAQCBpbnZhbGlkYXRlKCkgY2FsbGJhY2suIFRoYXQgbG9jayBtdXN0IGJlIGhlbGQgYmVmb3JlIGNhbGxpbmdcbiBtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeSgpIHRvIGF2b2lkIGFueSByYWNlIHdpdGggYSBjb25jdXJyZW50IENQVSBwYWdlIHRhYmxlXG4gdXBkYXRlLlxuIFxuJiM0MztEcm9wcGluZyB0aGUgbW1hcCBsb2NrIGR1cmluZyBwYWdlIGZhdWx0c1xuJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7U29tZSBWTUFzIGhhdmUgZmF1bHQgaGFuZGxlcnMgdGhhdCBuZWVkIHRvIHJlbGVhc2UgdGhlIG1tYXAgbG9jayB3aGlsZVxuJiM0MztzZXJ2aWNpbmcgYSBmYXVsdCAoZm9yIGV4YW1wbGUsIHJlZ2lvbnMgbWFuYWdlZCBieSBgYHVzZXJmYXVsdGZkYGApLlxuJiM0MztgYGhtbV9yYW5nZV9mYXVsdCgpYGAgY2Fubm90IGJlIHVzZWQgb24gc3VjaCBtYXBwaW5ncyBiZWNhdXNlIGl0IG11c3QgaG9sZCB0aGVcbiYjNDM7bW1hcCBsb2NrIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNhbGwuIERyaXZlcnMgdGhhdCBuZWVkIHRvIHN1cHBvcnQgdGhlbVxuJiM0MztzaG91bGQgY2FsbDo6XG4mIzQzO1xuJiM0MzsgIGludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xuJiM0MztcbiYjNDM7VGhlIGNhbGxlciBtdXN0IG5vdCBob2xkIGBgbW1hcF9yZWFkX2xvY2tgYCBiZWZvcmUgdGhlIGNhbGwuXG4mIzQzO2BgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKClgYCB0YWtlcyB0aGUgbW1hcCByZWFkIGxvY2sgaW50ZXJuYWxseSBhbmQgYWxsb3dzXG4mIzQzO2BgaGFuZGxlX21tX2ZhdWx0KClgYCB0byBkcm9wIGl0IGR1cmluZyBmYXVsdCBoYW5kbGluZy4gSWYgdGhlIG1tYXAgbG9jayBpc1xuJiM0Mztkcm9wcGVkLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgYC1FQlVTWWBgLiBUaGUgY2FsbGVyIG11c3QgdGhlbiByZXN0YXJ0IHRoZVxuJiM0Mzt3YWxrIGZyb20gYGByYW5nZS1cdTAwM2VzdGFydGBgIHdpdGggYSBmcmVzaCBub3RpZmllciBzZXF1ZW5jZS4gYGAtRUlOVFJgYCBpc1xuJiM0MztyZXR1cm5lZCBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nIGR1cmluZyByZXRyeSBoYW5kbGluZy5cbiYjNDM7XG4mIzQzO0EgdHlwaWNhbCBjYWxsZXIgbG9va3MgbGlrZSB0aGlzOjpcbiYjNDM7XG4mIzQzOyBpbnQgZHJpdmVyX3BvcHVsYXRlX3JhbmdlX3VubG9ja2VkKC4uLilcbiYjNDM7IHtcbiYjNDM7ICAgICAgc3RydWN0IGhtbV9yYW5nZSByYW5nZTtcbiYjNDM7ICAgICAgLi4uXG4mIzQzO1xuJiM0MzsgICAgICByYW5nZS5ub3RpZmllciA9IFx1MDAyNmludGVydmFsX3N1YjtcbiYjNDM7ICAgICAgcmFuZ2Uuc3RhcnQgPSAuLi47XG4mIzQzOyAgICAgIHJhbmdlLmVuZCA9IC4uLjtcbiYjNDM7ICAgICAgcmFuZ2UuaG1tX3BmbnMgPSAuLi47XG4mIzQzO1xuJiM0MzsgICAgICBpZiAoIW1tZ2V0X25vdF96ZXJvKGludGVydmFsX3N1Yi5tbSkpXG4mIzQzOyAgICAgICAgICByZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzOyBhZ2FpbjpcbiYjNDM7ICAgICAgcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4oXHUwMDI2aW50ZXJ2YWxfc3ViKTtcbiYjNDM7ICAgICAgcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKFx1MDAyNnJhbmdlKTtcbiYjNDM7ICAgICAgaWYgKHJldCkge1xuJiM0MzsgICAgICAgICAgaWYgKHJldCA9PSAtRUJVU1kpXG4mIzQzOyAgICAgICAgICAgICAgZ290byBhZ2FpbjtcbiYjNDM7ICAgICAgICAgIGdvdG8gb3V0X3B1dDtcbiYjNDM7ICAgICAgfVxuJiM0MztcbiYjNDM7ICAgICAgdGFrZV9sb2NrKGRyaXZlci1cdTAwM2V1cGRhdGUpO1xuJiM0MzsgICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoXHUwMDI2aW50ZXJ2YWxfc3ViLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XG4mIzQzOyAgICAgICAgICByZWxlYXNlX2xvY2soZHJpdmVyLVx1MDAzZXVwZGF0ZSk7XG4mIzQzOyAgICAgICAgICBnb3RvIGFnYWluO1xuJiM0MzsgICAgICB9XG4mIzQzO1xuJiM0MzsgICAgICAvKiBVc2UgcGZucyBhcnJheSBjb250ZW50IHRvIHVwZGF0ZSBkZXZpY2UgcGFnZSB0YWJsZSxcbiYjNDM7ICAgICAgICogdW5kZXIgdGhlIHVwZGF0ZSBsb2NrICovXG4mIzQzO1xuJiM0MzsgICAgICByZWxlYXNlX2xvY2soZHJpdmVyLVx1MDAzZXVwZGF0ZSk7XG4mIzQzOyAgICAgIHJldCA9IDA7XG4mIzQzO1xuJiM0Mzsgb3V0X3B1dDpcbiYjNDM7ICAgICAgbW1wdXQoaW50ZXJ2YWxfc3ViLm1tKTtcbiYjNDM7ICAgICAgcmV0dXJuIHJldDtcbiYjNDM7IH1cbiYjNDM7XG4gTGV2ZXJhZ2UgZGVmYXVsdF9mbGFncyBhbmQgcGZuX2ZsYWdzX21hc2tcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMgYi9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jXG5pbmRleCA2ZDY1ZTViNDIxNTI5NS4uMDQ2NzZmMDZjNWM3NDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jXG5AQCAtMzg4LDEzICYjNDM7Mzg4LDExIEBAIGludCBtc2h2X3JlZ2lvbl9nZXQoc3RydWN0IG1zaHZfbWVtX3JlZ2lvbiAqcmVnaW9uKVxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICAqIDEuIFJlYWRzIHRoZSBub3RpZmllciBzZXF1ZW5jZSBmb3IgdGhlIEhNTSByYW5nZS5cbi0gKiAyLiBBY3F1aXJlcyBhIHJlYWQgbG9jayBvbiB0aGUgbWVtb3J5IG1hcC5cbi0gKiAzLiBIYW5kbGVzIEhNTSBmYXVsdHMgZm9yIHRoZSBzcGVjaWZpZWQgcmFuZ2UuXG4tICogNC4gUmVsZWFzZXMgdGhlIHJlYWQgbG9jayBvbiB0aGUgbWVtb3J5IG1hcC5cbi0gKiA1LiBJZiBzdWNjZXNzZnVsLCBsb2NrcyB0aGUgbWVtb3J5IHJlZ2lvbiBtdXRleC5cbi0gKiA2LiBWZXJpZmllcyBpZiB0aGUgbm90aWZpZXIgc2VxdWVuY2UgaGFzIGNoYW5nZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24uXG4mIzQzOyAqIDIuIEhhbmRsZXMgSE1NIGZhdWx0cyBmb3IgdGhlIHNwZWNpZmllZCByYW5nZS5cbiYjNDM7ICogMy4gSWYgc3VjY2Vzc2Z1bCwgbG9ja3MgdGhlIG1lbW9yeSByZWdpb24gbXV0ZXguXG4mIzQzOyAqIDQuIFZlcmlmaWVzIGlmIHRoZSBub3RpZmllciBzZXF1ZW5jZSBoYXMgY2hhbmdlZCBkdXJpbmcgdGhlIG9wZXJhdGlvbi5cbiAgKiAgICBJZiBpdCBoYXMsIHJlbGVhc2VzIHRoZSBtdXRleCBhbmQgcmV0dXJucyAtRUJVU1kgdG8gbWF0Y2ggd2l0aFxuLSAqICAgIGhtbV9yYW5nZV9mYXVsdCgpIHJldHVybiBjb2RlIGZvciByZXBlYXRpbmcuXG4mIzQzOyAqICAgIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpIHNvIHRoZSBjYWxsZXIgcmV0cmllcyB0aGUgcmFuZ2UgZmF1bHQuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiAgKi9cbkBAIC00MDQsOSAmIzQzOzQwMiw3IEBAIHN0YXRpYyBpbnQgbXNodl9yZWdpb25faG1tX2ZhdWx0X2FuZF9sb2NrKHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbixcbiBcdGludCByZXQ7XG4gXG4gXHRyYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS1cdTAwM2Vub3RpZmllcik7XG4tXHRtbWFwX3JlYWRfbG9jayhyZWdpb24tXHUwMDNlbXJlZ19tbmkubW0pO1xuLVx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0KHJhbmdlKTtcbi1cdG1tYXBfcmVhZF91bmxvY2socmVnaW9uLVx1MDAzZW1yZWdfbW5pLm1tKTtcbiYjNDM7XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQocmFuZ2UpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2htbS5oIGIvaW5jbHVkZS9saW51eC9obW0uaFxuaW5kZXggZGI3NWZmYzk0OWE3YWMuLjFiNTg0ZTVhMjkwMDFlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9obW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9obW0uaFxuQEAgLTEyMyw2ICYjNDM7MTIzLDcgQEAgc3RydWN0IGhtbV9yYW5nZSB7XG4gICogUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL21tL2htbS5yc3QgZm9yIGhvdyB0byB1c2UgdGhlIHJhbmdlIEFQSS5cbiAgKi9cbiBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTtcbiYjNDM7aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XG4gXG4gLypcbiAgKiBITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUIC0gZGVmYXVsdCB0aW1lb3V0IChtcykgd2hlbiB3YWl0aW5nIGZvciBhIHJhbmdlXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfaG1tLmMgYi9saWIvdGVzdF9obW0uY1xuaW5kZXggNDVjMGNiOTkyMjE4NGEuLmRjYzNhMjNiYjk4M2RjIDEwMDY0NFxuLS0tIGEvbGliL3Rlc3RfaG1tLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0X2htbS5jXG5AQCAtMzg5LDYgJiM0MzszODksNzYgQEAgc3RhdGljIGludCBkbWlycm9yX3JhbmdlX2ZhdWx0KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cbiYjNDM7XHRcdGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHR3aGlsZSAodHJ1ZSkge1xuJiM0MztcdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVCVVNZO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS1cdTAwM2Vub3RpZmllcik7XG4mIzQzO1x0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQocmFuZ2UpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRpZiAocmV0ID09IC1FQlVTWSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZkbWlycm9yLVx1MDAzZW11dGV4KTtcbiYjNDM7XHRcdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS1cdTAwM2Vub3RpZmllcixcbiYjNDM7XHRcdFx0XHRcdCAgICByYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEpKSB7XG4mIzQzO1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZkbWlycm9yLVx1MDAzZW11dGV4KTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGRtaXJyb3JfZG9fZmF1bHQoZG1pcnJvciwgcmFuZ2UpO1xuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4mIzQzO291dDpcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4mIzQzO1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuJiM0MztcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgd3JpdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGRtaXJyb3ItXHUwMDNlbm90aWZpZXIubW07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBhZGRyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcGZuc1szMl07XG4mIzQzO1x0c3RydWN0IGhtbV9yYW5nZSByYW5nZSA9IHtcbiYjNDM7XHRcdC5ub3RpZmllciA9IFx1MDAyNmRtaXJyb3ItXHUwMDNlbm90aWZpZXIsXG4mIzQzO1x0XHQuaG1tX3BmbnMgPSBwZm5zLFxuJiM0MztcdFx0LnBmbl9mbGFnc19tYXNrID0gMCxcbiYjNDM7XHRcdC5kZWZhdWx0X2ZsYWdzID1cbiYjNDM7XHRcdFx0SE1NX1BGTl9SRVFfRkFVTFQgfCAod3JpdGUgPyBITU1fUEZOX1JFUV9XUklURSA6IDApLFxuJiM0MztcdFx0LmRldl9wcml2YXRlX293bmVyID0gZG1pcnJvci1cdTAwM2VtZGV2aWNlLFxuJiM0MztcdH07XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghbW1nZXRfbm90X3plcm8obW0pKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdGZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIFx1MDAzYyBlbmQ7IGFkZHIgPSByYW5nZS5lbmQpIHtcbiYjNDM7XHRcdHJhbmdlLnN0YXJ0ID0gYWRkcjtcbiYjNDM7XHRcdHJhbmdlLmVuZCA9IG1pbihhZGRyICYjNDM7IChBUlJBWV9TSVpFKHBmbnMpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSwgZW5kKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkKGRtaXJyb3IsIFx1MDAyNnJhbmdlKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bW1wdXQobW0pO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBkbWlycm9yX2ZhdWx0KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdCB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB3cml0ZSlcbiB7XG5AQCAtNDg4LDYgJiM0Mzs1NTgsNDcgQEAgc3RhdGljIGludCBkbWlycm9yX3JlYWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGRtaXJyb3JfcmVhZF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtaXJyb3JfYm91bmNlIGJvdW5jZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzaXplID0gY21kLVx1MDAzZW5wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRzdGFydCA9IGNtZC1cdTAwM2VhZGRyO1xuJiM0MztcdGVuZCA9IHN0YXJ0ICYjNDM7IHNpemU7XG4mIzQzO1x0aWYgKGVuZCBcdTAwM2Mgc3RhcnQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZG1pcnJvcl9ib3VuY2VfaW5pdChcdTAwMjZib3VuY2UsIHN0YXJ0LCBzaXplKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKDEpIHtcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4mIzQzO1x0XHRyZXQgPSBkbWlycm9yX2RvX3JlYWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgXHUwMDI2Ym91bmNlKTtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZkbWlycm9yLVx1MDAzZW11dGV4KTtcbiYjNDM7XHRcdGlmIChyZXQgIT0gLUVOT0VOVClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0c3RhcnQgPSBjbWQtXHUwMDNlYWRkciAmIzQzOyAoYm91bmNlLmNwYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4mIzQzO1x0XHRyZXQgPSBkbWlycm9yX2ZhdWx0X3VubG9ja2VkKGRtaXJyb3IsIHN0YXJ0LCBlbmQsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y21kLVx1MDAzZWZhdWx0cyYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmV0ID09IDApIHtcbiYjNDM7XHRcdGlmIChjb3B5X3RvX3VzZXIodTY0X3RvX3VzZXJfcHRyKGNtZC1cdTAwM2VwdHIpLCBib3VuY2UucHRyLFxuJiM0MztcdFx0XHRcdCBib3VuY2Uuc2l6ZSkpXG4mIzQzO1x0XHRcdHJldCA9IC1FRkFVTFQ7XG4mIzQzO1x0fVxuJiM0MztcdGNtZC1cdTAwM2VjcGFnZXMgPSBib3VuY2UuY3BhZ2VzO1xuJiM0MztcdGRtaXJyb3JfYm91bmNlX2ZpbmkoXHUwMDI2Ym91bmNlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZG1pcnJvcl9kb193cml0ZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBkbWlycm9yX2JvdW5jZSAqYm91bmNlKVxuIHtcbkBAIC0xNTcyLDYgJiM0MzsxNjgzLDkgQEAgc3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRkbWlycm9yLVx1MDAzZWZsYWdzID0gY21kLm5wYWdlcztcbiBcdFx0cmV0ID0gMDtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VEOlxuJiM0MztcdFx0cmV0ID0gZG1pcnJvcl9yZWFkX3VubG9ja2VkKGRtaXJyb3IsIFx1MDAyNmNtZCk7XG4mIzQzO1x0XHRicmVhaztcbiBcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuZGlmZiAtLWdpdCBhL2xpYi90ZXN0X2htbV91YXBpLmggYi9saWIvdGVzdF9obW1fdWFwaS5oXG5pbmRleCBmOTRjNmQ0NTczMzgyOC4uZWE5YjBlYzQwNGZiNTUgMTAwNjQ0XG4tLS0gYS9saWIvdGVzdF9obW1fdWFwaS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF9obW1fdWFwaS5oXG5AQCAtMzgsNiAmIzQzOzM4LDcgQEAgc3RydWN0IGhtbV9kbWlycm9yX2NtZCB7XG4gI2RlZmluZSBITU1fRE1JUlJPUl9DSEVDS19FWENMVVNJVkVcdF9JT1dSKCYjMzk7SCYjMzk7LCAweDA2LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxuICNkZWZpbmUgSE1NX0RNSVJST1JfUkVMRUFTRVx0XHRfSU9XUigmIzM5O0gmIzM5OywgMHgwNywgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX0ZMQUdTXHRcdF9JT1dSKCYjMzk7SCYjMzk7LCAweDA4LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxuJiM0MzsjZGVmaW5lIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRURcdF9JT1dSKCYjMzk7SCYjMzk7LCAweDA5LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxuIFxuICNkZWZpbmUgSE1NX0RNSVJST1JfRkxBR19GQUlMX0FMTE9DXHQoMVVMTCBcdTAwM2NcdTAwM2MgMClcbiBcbmRpZmYgLS1naXQgYS9tbS9obW0uYyBiL21tL2htbS5jXG5pbmRleCA0ZjNmNjI3ZDJiNDc3Mi4uMzE2MTE2OTk0MjA5YzggMTAwNjQ0XG4tLS0gYS9tbS9obW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaG1tLmNcbkBAIC0zMiw5ICYjNDM7MzIsMjcgQEBcbiBcbiBzdHJ1Y3QgaG1tX3ZtYV93YWxrIHtcbiBcdHN0cnVjdCBobW1fcmFuZ2VcdCpyYW5nZTtcbiYjNDM7XHRpbnRcdFx0XHQqbG9ja2VkO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRsYXN0O1xuJiM0MztcdHVuc2lnbmVkIGxvbmdcdFx0ZW5kO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRyZXF1aXJlZF9mYXVsdDtcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBJbnRlcm5hbCBzZW50aW5lbCByZXR1cm5lZCBieSB3YWxrIGNhbGxiYWNrcyB3aGVuIHRoZXkgbmVlZCBhIHBhZ2UgZmF1bHQuXG4mIzQzOyAqIFRoZSBjYWxsYmFjayBzdG9yZXMgZW5kL3JlcXVpcmVkX2ZhdWx0IGluIGhtbV92bWFfd2FsazsgdGhlIG91dGVyIGxvb3BcbiYjNDM7ICogY29uc3VtZXMgdGhlIHNlbnRpbmVsIGFuZCBuZXZlciBwcm9wYWdhdGVzIGl0IHRvIHRoZSBjYWxsZXIuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEhNTV9GQVVMVF9QRU5ESU5HXHQtRUFHQUlOXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBJbnRlcm5hbCBzZW50aW5lbCByZXR1cm5lZCBieSBobW1fZG9fZmF1bHQoKSB3aGVuIGhhbmRsZV9tbV9mYXVsdCgpXG4mIzQzOyAqIGNvbXBsZXRlcyBhIHBhZ2UgZmF1bHQgd2l0aCB0aGUgbW1hcCBsb2NrIGRyb3BwZWQuIGhtbV9kb19mYXVsdCgpIHNldHNcbiYjNDM7ICogKmxvY2tlZCA9IDA7IHRoZSBvdXRlciBsb29wIGNvbnN1bWVzIHRoZSBzZW50aW5lbCBhbmQgbmV2ZXIgcHJvcGFnYXRlcyBpdFxuJiM0MzsgKiB0byB0aGUgY2FsbGVyLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBITU1fRkFVTFRfVU5MT0NLRURcdC1FTk9MQ0tcbiYjNDM7XG4gZW51bSB7XG4gXHRITU1fTkVFRF9GQVVMVCA9IDEgXHUwMDNjXHUwMDNjIDAsXG4gXHRITU1fTkVFRF9XUklURV9GQVVMVCA9IDEgXHUwMDNjXHUwMDNjIDEsXG5AQCAtNjAsMzcgJiM0Mzs3OCwyNSBAQCBzdGF0aWMgaW50IGhtbV9wZm5zX2ZpbGwodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiB9XG4gXG4gLypcbi0gKiBobW1fdm1hX2ZhdWx0KCkgLSBmYXVsdCBpbiBhIHJhbmdlIGxhY2tpbmcgdmFsaWQgcG1kIG9yIHB0ZShzKVxuLSAqIEBhZGRyOiByYW5nZSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MgKGluY2x1c2l2ZSlcbi0gKiBAZW5kOiByYW5nZSB2aXJ0dWFsIGVuZCBhZGRyZXNzIChleGNsdXNpdmUpXG4tICogQHJlcXVpcmVkX2ZhdWx0OiBITU1fTkVFRF8qIGZsYWdzXG4tICogQHdhbGs6IG1tX3dhbGsgc3RydWN0dXJlXG4tICogUmV0dXJuOiAtRUJVU1kgYWZ0ZXIgcGFnZSBmYXVsdCwgb3IgcGFnZSBmYXVsdCBlcnJvclxuJiM0MzsgKiBobW1fcmVjb3JkX2ZhdWx0KCkgLSByZWNvcmQgYSByYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGZhdWx0ZWQgaW5cbiAgKlxuLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgcG1kX25vbmUoKSBvciBwdGVfbm9uZSgpIHJldHVybnMgdHJ1ZSxcbi0gKiBvciB3aGVuZXZlciB0aGVyZSBpcyBubyBwYWdlIGRpcmVjdG9yeSBjb3ZlcmluZyB0aGUgdmlydHVhbCBhZGRyZXNzIHJhbmdlLlxuJiM0MzsgKiBDYWxsZWQgYnkgdGhlIHdhbGsgY2FsbGJhY2tzIHdoZW4gdGhleSBkaXNjb3ZlciB0aGF0IHBhcnQgb2YgdGhlIHJhbmdlXG4mIzQzOyAqIG5lZWRzIGEgcGFnZSBmYXVsdC4gIFRoZSBjYWxsYmFjayByZWNvcmRzIHdoYXQgdG8gZmF1bHQgYW5kIHJldHVybnNcbiYjNDM7ICogSE1NX0ZBVUxUX1BFTkRJTkc7IHRoZSBvdXRlciBsb29wIGluIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoKSBkcm9wc1xuJiM0MzsgKiBiYWNrIG91dCBvZiB3YWxrX3BhZ2VfcmFuZ2UoKSBhbmQgaW52b2tlcyBoYW5kbGVfbW1fZmF1bHQoKSBmcm9tIGEgY29udGV4dFxuJiM0MzsgKiB3aGVyZSBubyBwYWdlLXRhYmxlIG9yIGh1Z2V0bGJfdm1hX2xvY2sgaXMgaGVsZC5cbiAgKi9cbi1zdGF0aWMgaW50IGhtbV92bWFfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi1cdFx0XHQgdW5zaWduZWQgaW50IHJlcXVpcmVkX2ZhdWx0LCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiYjNDM7c3RhdGljIGludCBobW1fcmVjb3JkX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4mIzQzO1x0XHRcdCAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmF1bHQsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiB7XG4gXHRzdHJ1Y3QgaG1tX3ZtYV93YWxrICpobW1fdm1hX3dhbGsgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4tXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuLVx0dW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzID0gRkFVTFRfRkxBR19SRU1PVEU7XG4gXG4gXHRXQVJOX09OX09OQ0UoIXJlcXVpcmVkX2ZhdWx0KTtcbiBcdGhtbV92bWFfd2Fsay1cdTAwM2VsYXN0ID0gYWRkcjtcbi1cbi1cdGlmIChyZXF1aXJlZF9mYXVsdCBcdTAwMjYgSE1NX05FRURfV1JJVEVfRkFVTFQpIHtcbi1cdFx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XUklURSkpXG4tXHRcdFx0cmV0dXJuIC1FUEVSTTtcbi1cdFx0ZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19XUklURTtcbi1cdH1cbi1cbi1cdGZvciAoOyBhZGRyIFx1MDAzYyBlbmQ7IGFkZHIgJiM0Mzs9IFBBR0VfU0laRSlcbi1cdFx0aWYgKGhhbmRsZV9tbV9mYXVsdCh2bWEsIGFkZHIsIGZhdWx0X2ZsYWdzLCBOVUxMKSBcdTAwMjZcbi1cdFx0ICAgIFZNX0ZBVUxUX0VSUk9SKVxuLVx0XHRcdHJldHVybiAtRUZBVUxUO1xuLVx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHRobW1fdm1hX3dhbGstXHUwMDNlZW5kID0gZW5kO1xuJiM0MztcdGhtbV92bWFfd2Fsay1cdTAwM2VyZXF1aXJlZF9mYXVsdCA9IHJlcXVpcmVkX2ZhdWx0O1xuJiM0MztcdHJldHVybiBITU1fRkFVTFRfUEVORElORztcbiB9XG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBobW1fcHRlX25lZWRfZmF1bHQoY29uc3Qgc3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrLFxuQEAgLTE3NCw3ICYjNDM7MTgwLDcgQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfaG9sZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRyZXR1cm4gaG1tX3BmbnNfZmlsbChhZGRyLCBlbmQsIHJhbmdlLCBITU1fUEZOX0VSUk9SKTtcbiBcdH1cbiBcdGlmIChyZXF1aXJlZF9mYXVsdClcbi1cdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4mIzQzO1x0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcdHJldHVybiBobW1fcGZuc19maWxsKGFkZHIsIGVuZCwgcmFuZ2UsIDApO1xuIH1cbiBcbkBAIC0yMDksNyAmIzQzOzIxNSw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRyZXF1aXJlZF9mYXVsdCA9XG4gXHRcdGhtbV9yYW5nZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgaG1tX3BmbnMsIG5wYWdlcywgY3B1X2ZsYWdzKTtcbiBcdGlmIChyZXF1aXJlZF9mYXVsdClcbi1cdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4mIzQzO1x0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcbiBcdHBmbiA9IHBtZF9wZm4ocG1kKSAmIzQzOyAoKGFkZHIgXHUwMDI2IH5QTURfTUFTSykgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuIFx0Zm9yIChpID0gMDsgYWRkciBcdTAwM2MgZW5kOyBhZGRyICYjNDM7PSBQQUdFX1NJWkUsIGkmIzQzOyYjNDM7LCBwZm4mIzQzOyYjNDM7KSB7XG5AQCAtMzI4LDcgJiM0MzszMzQsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuIGZhdWx0OlxuIFx0cHRlX3VubWFwKHB0ZXApO1xuIFx0LyogRmF1bHQgYW55IHZpcnR1YWwgYWRkcmVzcyB3ZSB3ZXJlIGFza2VkIHRvIGZhdWx0ICovXG4tXHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiYjNDM7XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuQEAgLTM3MSw3ICYjNDM7Mzc3LDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdFx0XHQgICAgICBucGFnZXMsIDApO1xuIFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG4gXHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG4tXHRcdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4mIzQzO1x0XHRcdHJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHR9XG5AQCAtNTE3LDcgJiM0Mzs1MjMsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19wdWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdFx0XHRcdCAgICAgIG5wYWdlcywgY3B1X2ZsYWdzKTtcbiBcdFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG4gXHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbi1cdFx0XHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4gXHRcdH1cbiBcbiBcdFx0cGZuID0gcHVkX3BmbihwdWQpICYjNDM7ICgoYWRkciBcdTAwMjYgflBVRF9NQVNLKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5AQCAtNTY0LDIxICYjNDM7NTcwLDggQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuIFx0cmVxdWlyZWRfZmF1bHQgPVxuIFx0XHRobW1fcHRlX25lZWRfZmF1bHQoaG1tX3ZtYV93YWxrLCBwZm5fcmVxX2ZsYWdzLCBjcHVfZmxhZ3MpO1xuIFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG4tXHRcdGludCByZXQ7XG4tXG4gXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4tXHRcdGh1Z2V0bGJfdm1hX3VubG9ja19yZWFkKHZtYSk7XG4tXHRcdC8qXG4tXHRcdCAqIEF2b2lkIGRlYWRsb2NrOiBkcm9wIHRoZSB2bWEgbG9jayBiZWZvcmUgY2FsbGluZ1xuLVx0XHQgKiBobW1fdm1hX2ZhdWx0KCksIHdoaWNoIHdpbGwgaXRzZWxmIHBvdGVudGlhbGx5IHRha2UgYW5kXG4tXHRcdCAqIGRyb3AgdGhlIHZtYSBsb2NrLiBUaGlzIGlzIGFsc28gY29ycmVjdCBmcm9tIGFcbi1cdFx0ICogcHJvdGVjdGlvbiBwb2ludCBvZiB2aWV3LCBiZWNhdXNlIHRoZXJlIGlzIG5vIGZ1cnRoZXJcbi1cdFx0ICogdXNlIGhlcmUgb2YgZWl0aGVyIHB0ZSBvciBwdGwgYWZ0ZXIgZHJvcHBpbmcgdGhlIHZtYVxuLVx0XHQgKiBsb2NrLlxuLVx0XHQgKi9cbi1cdFx0cmV0ID0gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbi1cdFx0aHVnZXRsYl92bWFfbG9ja19yZWFkKHZtYSk7XG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcdH1cbiBcbiBcdHBmbiA9IHB0ZV9wZm4oZW50cnkpICYjNDM7ICgoc3RhcnQgXHUwMDI2IH5obWFzaykgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuQEAgLTYzNywyOSAmIzQzOzYzMCw2NiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGhtbV93YWxrX29wcyA9IHtcbiBcdC53YWxrX2xvY2tcdD0gUEdXQUxLX1JETE9DSyxcbiB9O1xuIFxuLS8qKlxuLSAqIGhtbV9yYW5nZV9mYXVsdCAtIHRyeSB0byBmYXVsdCBzb21lIGFkZHJlc3MgaW4gYSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2Vcbi0gKiBAcmFuZ2U6XHRhcmd1bWVudCBzdHJ1Y3R1cmVcbi0gKlxuLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOlxuJiM0MzsvKlxuJiM0MzsgKiBobW1fZG9fZmF1bHQgLSBmYXVsdCBpbiBhIHJhbmdlIHJlY29yZGVkIGJ5IGEgd2FsayBjYWxsYmFja1xuICAqXG4tICogLUVJTlZBTDpcdEludmFsaWQgYXJndW1lbnRzIG9yIG1tIG9yIHZpcnR1YWwgYWRkcmVzcyBpcyBpbiBhbiBpbnZhbGlkIHZtYVxuLSAqXHRcdChlLmcuLCBkZXZpY2UgZmlsZSB2bWEpLlxuLSAqIC1FTk9NRU06XHRPdXQgb2YgbWVtb3J5LlxuLSAqIC1FUEVSTTpcdEludmFsaWQgcGVybWlzc2lvbiAoZS5nLiwgYXNraW5nIGZvciB3cml0ZSBhbmQgcmFuZ2UgaXMgcmVhZFxuLSAqXHRcdG9ubHkpLlxuLSAqIC1FQlVTWTpcdFRoZSByYW5nZSBoYXMgYmVlbiBpbnZhbGlkYXRlZCBhbmQgdGhlIGNhbGxlciBuZWVkcyB0byB3YWl0IGZvclxuLSAqXHRcdHRoZSBpbnZhbGlkYXRpb24gdG8gZmluaXNoLlxuLSAqIC1FRkFVTFQ6ICAgICBBIHBhZ2Ugd2FzIHJlcXVlc3RlZCB0byBiZSB2YWxpZCBhbmQgY291bGQgbm90IGJlIG1hZGUgdmFsaWRcbi0gKiAgICAgICAgICAgICAgaWUgaXQgaGFzIG5vIGJhY2tpbmcgVk1BIG9yIGl0IGlzIGlsbGVnYWwgdG8gYWNjZXNzXG4mIzQzOyAqIENhbGxlZCBmcm9tIHRoZSBvdXRlciBsb29wIGluIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoKSBhZnRlciBhIGNhbGxiYWNrXG4mIzQzOyAqIHJldHVybmVkIEhNTV9GQVVMVF9QRU5ESU5HLiAgQXQgdGhpcyBwb2ludCB3ZSBob2xkIG9ubHkgbW1hcF9sb2NrO1xuJiM0MzsgKiB0aGUgcGFnZS10YWJsZSBzcGlubG9jayBhbmQgYW55IGh1Z2V0bGJfdm1hX2xvY2sgYWNxdWlyZWQgYnkgdGhlIHdhbGtcbiYjNDM7ICogZnJhbWV3b3JrIGhhdmUgYWxyZWFkeSBiZWVuIHJlbGVhc2VkIGJ5IHRoZSB1bndpbmQuXG4gICpcbi0gKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ2V0X3VzZXJfcGFnZXMoKSwgZXhjZXB0IHRoYXQgaXQgY2FuIHJlYWQgdGhlIHBhZ2UgdGFibGVzXG4tICogd2l0aG91dCBtdXRhdGluZyB0aGVtIChpZSBjYXVzaW5nIGZhdWx0cykuXG4mIzQzOyAqIFJldHVybnMgLUVCVVNZIG9uIHN1Y2Nlc3MgKGFsbCBwYWdlcyBmYXVsdGVkLCBjYWxsZXIgc2hvdWxkIHJlLXdhbGspLlxuJiM0MzsgKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbiAgKi9cbi1pbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxuJiM0MztzdGF0aWMgaW50IGhtbV9kb19mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiYjNDM7XHRcdFx0c3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBhZGRyID0gaG1tX3ZtYV93YWxrLVx1MDAzZWxhc3Q7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBlbmQgPSBobW1fdm1hX3dhbGstXHUwMDNlZW5kO1xuJiM0MztcdHVuc2lnbmVkIGludCByZXF1aXJlZF9mYXVsdCA9IGhtbV92bWFfd2Fsay1cdTAwM2VyZXF1aXJlZF9mYXVsdDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MgPSBGQVVMVF9GTEFHX1JFTU9URTtcbiYjNDM7XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiYjNDM7XG4mIzQzO1x0aWYgKGhtbV92bWFfd2Fsay1cdTAwM2Vsb2NrZWQpXG4mIzQzO1x0XHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX0FMTE9XX1JFVFJZIHwgRkFVTFRfRkxBR19LSUxMQUJMRTtcbiYjNDM7XG4mIzQzO1x0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XG4mIzQzO1x0aWYgKCF2bWEpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcXVpcmVkX2ZhdWx0IFx1MDAyNiBITU1fTkVFRF9XUklURV9GQVVMVCkge1xuJiM0MztcdFx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XUklURSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0XHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yICg7IGFkZHIgXHUwMDNjIGVuZDsgYWRkciAmIzQzOz0gUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHR2bV9mYXVsdF90IHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBoYW5kbGVfbW1fZmF1bHQodm1hLCBhZGRyLCBmYXVsdF9mbGFncywgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwMjYgKFZNX0ZBVUxUX0NPTVBMRVRFRCB8IFZNX0ZBVUxUX1JFVFJZKSkge1xuJiM0MztcdFx0XHQqaG1tX3ZtYV93YWxrLVx1MDAzZWxvY2tlZCA9IDA7XG4mIzQzO1x0XHRcdHJldHVybiBITU1fRkFVTFRfVU5MT0NLRUQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwMjYgVk1fRkFVTFRfRVJST1IpIHtcbiYjNDM7XHRcdFx0aW50IGVyciA9IHZtX2ZhdWx0X3RvX2Vycm5vKHJldCwgMCk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRcdEJVRygpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FQlVTWTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLCBpbnQgKmxvY2tlZClcbiB7XG4gXHRzdHJ1Y3QgaG1tX3ZtYV93YWxrIGhtbV92bWFfd2FsayA9IHtcbiBcdFx0LnJhbmdlID0gcmFuZ2UsXG4mIzQzO1x0XHQubG9ja2VkID0gbG9ja2VkLFxuIFx0XHQubGFzdCA9IHJhbmdlLVx1MDAzZXN0YXJ0LFxuIFx0fTtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtXHUwMDNlbm90aWZpZXItXHUwMDNlbW07XG5AQCAtNjc0LDYgJiM0Mzs3MDQsMjIgQEAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHRyZXQgPSB3YWxrX3BhZ2VfcmFuZ2UobW0sIGhtbV92bWFfd2Fsay5sYXN0LCByYW5nZS1cdTAwM2VlbmQsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZobW1fd2Fsa19vcHMsIFx1MDAyNmhtbV92bWFfd2Fsayk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogV2hlbiBITU1fRkFVTFRfUEVORElORyBpcyByZXR1cm5lZCBhIHdhbGsgY2FsbGJhY2tcbiYjNDM7XHRcdCAqIHJlY29yZGVkIGEgcmFuZ2UgdGhhdCBuZWVkcyBoYW5kbGVfbW1fZmF1bHQoKTtcbiYjNDM7XHRcdCAqIGhtbV9kb19mYXVsdCgpIHJ1bnMgdGhlIGZhdWx0IG91dHNpZGUgd2Fsa19wYWdlX3JhbmdlKClcbiYjNDM7XHRcdCAqIChzbyBubyBwYWdlLXRhYmxlIG9yIGh1Z2V0bGJfdm1hX2xvY2sgaXMgaGVsZCkgYW5kXG4mIzQzO1x0XHQgKiByZXR1cm5zIC1FQlVTWSBzbyB0aGUgbG9vcCByZS13YWxrcyBhbmQgcGlja3MgdXAgdGhlXG4mIzQzO1x0XHQgKiBub3ctcHJlc2VudCBlbnRyaWVzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocmV0ID09IEhNTV9GQVVMVF9QRU5ESU5HKSB7XG4mIzQzO1x0XHRcdHJldCA9IGhtbV9kb19mYXVsdChtbSwgXHUwMDI2aG1tX3ZtYV93YWxrKTtcbiYjNDM7XHRcdFx0aWYgKHJldCA9PSBITU1fRkFVTFRfVU5MT0NLRUQpIHtcbiYjNDM7XHRcdFx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gLUVJTlRSO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiBcdFx0LypcbiBcdFx0ICogV2hlbiAtRUJVU1kgaXMgcmV0dXJuZWQgdGhlIGxvb3AgcmVzdGFydHMgd2l0aFxuIFx0XHQgKiBobW1fdm1hX3dhbGsubGFzdCBzZXQgdG8gYW4gYWRkcmVzcyB0aGF0IGhhcyBub3QgYmVlbiBzdG9yZWRcbkBAIC02ODMsOCAmIzQzOzcyOSw2NSBAQCBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxuIFx0fSB3aGlsZSAocmV0ID09IC1FQlVTWSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBobW1fcmFuZ2VfZmF1bHQgLSB0cnkgdG8gZmF1bHQgc29tZSBhZGRyZXNzIGluIGEgdmlydHVhbCBhZGRyZXNzIHJhbmdlXG4mIzQzOyAqIEByYW5nZTpcdGFyZ3VtZW50IHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczpcbiYjNDM7ICpcbiYjNDM7ICogLUVJTlZBTDpcdEludmFsaWQgYXJndW1lbnRzIG9yIG1tIG9yIHZpcnR1YWwgYWRkcmVzcyBpcyBpbiBhbiBpbnZhbGlkIHZtYVxuJiM0MzsgKlx0XHQoZS5nLiwgZGV2aWNlIGZpbGUgdm1hKS5cbiYjNDM7ICogLUVOT01FTTpcdE91dCBvZiBtZW1vcnkuXG4mIzQzOyAqIC1FUEVSTTpcdEludmFsaWQgcGVybWlzc2lvbiAoZS5nLiwgYXNraW5nIGZvciB3cml0ZSBhbmQgcmFuZ2UgaXMgcmVhZFxuJiM0MzsgKlx0XHRvbmx5KS5cbiYjNDM7ICogLUVCVVNZOlx0VGhlIHJhbmdlIGhhcyBiZWVuIGludmFsaWRhdGVkIGFuZCB0aGUgY2FsbGVyIG5lZWRzIHRvIHdhaXQgZm9yXG4mIzQzOyAqXHRcdHRoZSBpbnZhbGlkYXRpb24gdG8gZmluaXNoLlxuJiM0MzsgKiAtRUZBVUxUOiAgICAgQSBwYWdlIHdhcyByZXF1ZXN0ZWQgdG8gYmUgdmFsaWQgYW5kIGNvdWxkIG5vdCBiZSBtYWRlIHZhbGlkXG4mIzQzOyAqICAgICAgICAgICAgICBpZSBpdCBoYXMgbm8gYmFja2luZyBWTUEgb3IgaXQgaXMgaWxsZWdhbCB0byBhY2Nlc3NcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpcyBzaW1pbGFyIHRvIGdldF91c2VyX3BhZ2VzKCksIGV4Y2VwdCB0aGF0IGl0IGNhbiByZWFkIHRoZSBwYWdlIHRhYmxlc1xuJiM0MzsgKiB3aXRob3V0IG11dGF0aW5nIHRoZW0gKGllIGNhdXNpbmcgZmF1bHRzKS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIG1tYXAgbG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlciBhbmQgd2lsbCByZW1haW4gaGVsZCBvbiByZXR1cm4uXG4mIzQzOyAqIEZvciBhIHZhcmlhbnQgdGhhdCBhbGxvd3MgdGhlIG1tYXAgbG9jayB0byBiZSBkcm9wcGVkIGR1cmluZyBmYXVsdHMgKGUuZy4sXG4mIzQzOyAqIGZvciB1c2VyZmF1bHRmZCBzdXBwb3J0KSwgc2VlIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpLlxuJiM0MzsgKi9cbiYjNDM7aW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHJhbmdlLCBOVUxMKTtcbiYjNDM7fVxuIEVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0KTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCAtIGZhdWx0IGluIGEgcmFuZ2UsIHBvc3NpYmx5IGRyb3BwaW5nIHRoZSBtbWFwIGxvY2tcbiYjNDM7ICogQHJhbmdlOlx0YXJndW1lbnQgc3RydWN0dXJlXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgaXMgc2ltaWxhciB0byBobW1fcmFuZ2VfZmF1bHQoKSwgZXhjZXB0IHRoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCB0aGVcbiYjNDM7ICogbW1hcCBsb2NrLiBUaGUgZnVuY3Rpb24gdGFrZXMgdGhlIG1tYXAgcmVhZCBsb2NrIGludGVybmFsbHkgYW5kIGFsbG93c1xuJiM0MzsgKiBoYW5kbGVfbW1fZmF1bHQoKSB0byBkcm9wIGl0IGR1cmluZyBmYXVsdHMuIElmIHRoZSBsb2NrIGlzIGRyb3BwZWQsIHRoZVxuJiM0MzsgKiBmdW5jdGlvbiByZXR1cm5zIC1FQlVTWSBhbmQgdGhlIGNhbGxlciBtdXN0IHJlc3RhcnQgdGhlIHdhbGsgd2l0aCBhIGZyZXNoXG4mIzQzOyAqIG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKCkgc2VxdWVuY2UuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZXJyb3IgY29kZXMgZG9jdW1lbnRlZCBmb3JcbiYjNDM7ICogaG1tX3JhbmdlX2ZhdWx0KCkuIC1FSU5UUiBpcyByZXR1cm5lZCBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nIGR1cmluZ1xuJiM0MzsgKiByZXRyeSBoYW5kbGluZy5cbiYjNDM7ICovXG4mIzQzO2ludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJhbmdlLVx1MDAzZW5vdGlmaWVyLVx1MDAzZW1tO1xuJiM0MztcdGludCBsb2NrZWQgPSAxO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbiYjNDM7XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHJhbmdlLCBcdTAwMjZsb2NrZWQpO1xuJiM0MztcdGlmIChsb2NrZWQpXG4mIzQzO1x0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCk7XG4mIzQzO1xuIC8qKlxuICAqIGhtbV9kbWFfbWFwX2FsbG9jIC0gQWxsb2NhdGUgSE1NIG1hcCBzdHJ1Y3R1cmVcbiAgKiBAZGV2OiBkZXZpY2UgdG8gYWxsb2NhdGUgc3RydWN0dXJlIGZvclxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbmluZGV4IDJmMmI5ODc5ZDEwMDUxLi43MTc2NWM0ZDgwZjNlNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuQEAgLTI5LDYgJiM0MzsyOSwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvaW9jdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvZXZlbnRmZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjcG9sbC5oXHUwMDNlXG4gXG4gLypcbiAgKiBUaGlzIGlzIGEgcHJpdmF0ZSBVQVBJIHRvIHRoZSBrZXJuZWwgdGVzdCBtb2R1bGUgc28gaXQgaXNuJiMzOTt0IGV4cG9ydGVkXG5AQCAtMjk0OSw0ICYjNDM7Mjk1MywxNDkgQEAgVEVTVF9GX1RJTUVPVVQoaG1tLCBiZW5jaG1hcmtfdGhwX21pZ3JhdGlvbiwgMTIwKVxuIFx0XHRcdFx0XHRcdTAwMjZ0aHBfcmVzdWx0cywgXHUwMDI2cmVndWxhcl9yZXN1bHRzKTtcbiBcdH1cbiB9XG4mIzQzOy8qXG4mIzQzOyAqIFRlc3QgdGhhdCBITU0gY2FuIGZhdWx0IGluIHBhZ2VzIGJhY2tlZCBieSB1c2VyZmF1bHRmZCB1c2luZyB0aGVcbiYjNDM7ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKCkgcGF0aC4gVGhpcyBleGVyY2lzZXMgdGhlIGxvY2stZHJvcCByZXRyeVxuJiM0MzsgKiBsb2dpYyBpbiB0aGUgSE1NIGZyYW1ld29yay5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB1ZmZkX3RocmVhZF9hcmdzIHtcbiYjNDM7XHRpbnQgdWZmZDtcbiYjNDM7XHRpbnQgc3RvcF9mZDtcbiYjNDM7XHR2b2lkICpwYWdlX2J1ZmZlcjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkICp1ZmZkX2hhbmRsZXJfdGhyZWFkKHZvaWQgKmFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB1ZmZkX3RocmVhZF9hcmdzICphcmdzID0gYXJnO1xuJiM0MztcdHN0cnVjdCB1ZmZkX21zZyBtc2c7XG4mIzQzO1x0c3RydWN0IHVmZmRpb19jb3B5IGNvcHk7XG4mIzQzO1x0c3RydWN0IHBvbGxmZCBwb2xsZmRbMl07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cG9sbGZkWzBdLmZkID0gYXJncy1cdTAwM2V1ZmZkO1xuJiM0MztcdHBvbGxmZFswXS5ldmVudHMgPSBQT0xMSU47XG4mIzQzO1x0cG9sbGZkWzFdLmZkID0gYXJncy1cdTAwM2VzdG9wX2ZkO1xuJiM0MztcdHBvbGxmZFsxXS5ldmVudHMgPSBQT0xMSU47XG4mIzQzO1xuJiM0MztcdHdoaWxlICgxKSB7XG4mIzQzO1x0XHRyZXQgPSBwb2xsKHBvbGxmZCwgMiwgLTEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKHBvbGxmZFsxXS5yZXZlbnRzKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGlmICghKHBvbGxmZFswXS5yZXZlbnRzIFx1MDAyNiBQT0xMSU4pKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSByZWFkKGFyZ3MtXHUwMDNldWZmZCwgXHUwMDI2bXNnLCBzaXplb2YobXNnKSk7XG4mIzQzO1x0XHRpZiAocmV0ICE9IHNpemVvZihtc2cpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRpZiAobXNnLmV2ZW50ICE9IFVGRkRfRVZFTlRfUEFHRUZBVUxUKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHQvKiBGaWxsIHRoZSBwYWdlIHdpdGggYSBrbm93biBwYXR0ZXJuICovXG4mIzQzO1x0XHRtZW1zZXQoYXJncy1cdTAwM2VwYWdlX2J1ZmZlciwgMHhBQiwgYXJncy1cdTAwM2VwYWdlX3NpemUpO1xuJiM0MztcbiYjNDM7XHRcdGNvcHkuZHN0ID0gbXNnLmFyZy5wYWdlZmF1bHQuYWRkcmVzcyBcdTAwMjYgfihhcmdzLVx1MDAzZXBhZ2Vfc2l6ZSAtIDEpO1xuJiM0MztcdFx0Y29weS5zcmMgPSAodW5zaWduZWQgbG9uZylhcmdzLVx1MDAzZXBhZ2VfYnVmZmVyO1xuJiM0MztcdFx0Y29weS5sZW4gPSBhcmdzLVx1MDAzZXBhZ2Vfc2l6ZTtcbiYjNDM7XHRcdGNvcHkubW9kZSA9IDA7XG4mIzQzO1x0XHRjb3B5LmNvcHkgPSAwO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGlvY3RsKGFyZ3MtXHUwMDNldWZmZCwgVUZGRElPX0NPUFksIFx1MDAyNmNvcHkpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGhtbSwgdXNlcmZhdWx0ZmRfcmVhZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBobW1fYnVmZmVyICpidWZmZXI7XG4mIzQzO1x0c3RydWN0IHVmZmRfdGhyZWFkX2FyZ3MgdWZmZF9hcmdzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4mIzQzO1x0dW5zaWduZWQgY2hhciAqcHRyO1xuJiM0MztcdHB0aHJlYWRfdCB0aHJlYWQ7XG4mIzQzO1x0aW50IHVmZmQ7XG4mIzQzO1x0aW50IHN0b3BfZmQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRzdHJ1Y3QgdWZmZGlvX2FwaSBhcGk7XG4mIzQzO1x0c3RydWN0IHVmZmRpb19yZWdpc3RlciByZWc7XG4mIzQzO1x0dWludDY0X3Qgc3RvcCA9IDE7XG4mIzQzO1x0c3NpemVfdCBud3JpdGU7XG4mIzQzO1xuJiM0MztcdG5wYWdlcyA9IDQ7XG4mIzQzO1x0c2l6ZSA9IG5wYWdlcyBcdTAwM2NcdTAwM2Mgc2VsZi1cdTAwM2VwYWdlX3NoaWZ0O1xuJiM0MztcbiYjNDM7XHQvKiBDcmVhdGUgdXNlcmZhdWx0ZmQgKi9cbiYjNDM7XHR1ZmZkID0gc3lzY2FsbChfX05SX3VzZXJmYXVsdGZkLCBPX0NMT0VYRUMgfCBPX05PTkJMT0NLKTtcbiYjNDM7XHRpZiAodWZmZCBcdTAwM2MgMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDt1c2VyZmF1bHRmZCBub3QgYXZhaWxhYmxlXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0YXBpLmFwaSA9IFVGRkRfQVBJO1xuJiM0MztcdGFwaS5mZWF0dXJlcyA9IDA7XG4mIzQzO1x0cmV0ID0gaW9jdGwodWZmZCwgVUZGRElPX0FQSSwgXHUwMDI2YXBpKTtcbiYjNDM7XHRBU1NFUlRfRVEocmV0LCAwKTtcbiYjNDM7XG4mIzQzO1x0YnVmZmVyID0gbWFsbG9jKHNpemVvZigqYnVmZmVyKSk7XG4mIzQzO1x0QVNTRVJUX05FKGJ1ZmZlciwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdGJ1ZmZlci1cdTAwM2VmZCA9IC0xO1xuJiM0MztcdGJ1ZmZlci1cdTAwM2VzaXplID0gc2l6ZTtcbiYjNDM7XHRidWZmZXItXHUwMDNlbWlycm9yID0gbWFsbG9jKHNpemUpO1xuJiM0MztcdEFTU0VSVF9ORShidWZmZXItXHUwMDNlbWlycm9yLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0LyogQ3JlYXRlIGFub255bW91cyBtYXBwaW5nICovXG4mIzQzO1x0YnVmZmVyLVx1MDAzZXB0ciA9IG1tYXAoTlVMTCwgc2l6ZSxcbiYjNDM7XHRcdFx0ICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiYjNDM7XHRcdFx0ICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLFxuJiM0MztcdFx0XHQgICAtMSwgMCk7XG4mIzQzO1x0QVNTRVJUX05FKGJ1ZmZlci1cdTAwM2VwdHIsIE1BUF9GQUlMRUQpO1xuJiM0MztcbiYjNDM7XHQvKiBSZWdpc3RlciB0aGUgcmVnaW9uIHdpdGggdXNlcmZhdWx0ZmQgKi9cbiYjNDM7XHRyZWcucmFuZ2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZylidWZmZXItXHUwMDNlcHRyO1xuJiM0MztcdHJlZy5yYW5nZS5sZW4gPSBzaXplO1xuJiM0MztcdHJlZy5tb2RlID0gVUZGRElPX1JFR0lTVEVSX01PREVfTUlTU0lORztcbiYjNDM7XHRyZXQgPSBpb2N0bCh1ZmZkLCBVRkZESU9fUkVHSVNURVIsIFx1MDAyNnJlZyk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIFNldCB1cCB0aGUgaGFuZGxlciB0aHJlYWQgKi9cbiYjNDM7XHR1ZmZkX2FyZ3MudWZmZCA9IHVmZmQ7XG4mIzQzO1x0c3RvcF9mZCA9IGV2ZW50ZmQoMCwgRUZEX0NMT0VYRUMpO1xuJiM0MztcdEFTU0VSVF9HRShzdG9wX2ZkLCAwKTtcbiYjNDM7XHR1ZmZkX2FyZ3Muc3RvcF9mZCA9IHN0b3BfZmQ7XG4mIzQzO1x0dWZmZF9hcmdzLnBhZ2VfYnVmZmVyID0gbWFsbG9jKHNlbGYtXHUwMDNlcGFnZV9zaXplKTtcbiYjNDM7XHRBU1NFUlRfTkUodWZmZF9hcmdzLnBhZ2VfYnVmZmVyLCBOVUxMKTtcbiYjNDM7XHR1ZmZkX2FyZ3MucGFnZV9zaXplID0gc2VsZi1cdTAwM2VwYWdlX3NpemU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgdWZmZF9oYW5kbGVyX3RocmVhZCwgXHUwMDI2dWZmZF9hcmdzKTtcbiYjNDM7XHRBU1NFUlRfRVEocmV0LCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVc2UgdGhlIHVubG9ja2VkIHJlYWQgcGF0aCB3aGljaCBhbGxvd3MgdGhlIG1tYXAgbG9jayB0byBiZVxuJiM0MztcdCAqIGRyb3BwZWQgZHVyaW5nIHRoZSBmYXVsdCwgZW5hYmxpbmcgdXNlcmZhdWx0ZmQgcmVzb2x1dGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBobW1fZG1pcnJvcl9jbWQoc2VsZi1cdTAwM2VmZCwgSE1NX0RNSVJST1JfUkVBRF9VTkxPQ0tFRCxcbiYjNDM7XHRcdFx0ICAgICAgYnVmZmVyLCBucGFnZXMpO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIDApO1xuJiM0MztcdEFTU0VSVF9FUShidWZmZXItXHUwMDNlY3BhZ2VzLCBucGFnZXMpO1xuJiM0MztcbiYjNDM7XHQvKiBWZXJpZnkgdGhlIGRldmljZSByZWFkIHRoZSBkYXRhIGZpbGxlZCBieSB0aGUgdWZmZCBoYW5kbGVyICovXG4mIzQzO1x0cHRyID0gYnVmZmVyLVx1MDAzZW1pcnJvcjtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaXplOyAmIzQzOyYjNDM7aSlcbiYjNDM7XHRcdEFTU0VSVF9FUShwdHJbaV0sICh1bnNpZ25lZCBjaGFyKTB4QUIpO1xuJiM0MztcbiYjNDM7XHRud3JpdGUgPSB3cml0ZShzdG9wX2ZkLCBcdTAwMjZzdG9wLCBzaXplb2Yoc3RvcCkpO1xuJiM0MztcdEFTU0VSVF9FUShud3JpdGUsIHNpemVvZihzdG9wKSk7XG4mIzQzO1x0cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XG4mIzQzO1x0Y2xvc2Uoc3RvcF9mZCk7XG4mIzQzO1x0ZnJlZSh1ZmZkX2FyZ3MucGFnZV9idWZmZXIpO1xuJiM0MztcdGNsb3NlKHVmZmQpO1xuJiM0MztcdGhtbV9idWZmZXJfZnJlZShidWZmZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIFRFU1RfSEFSTkVTU19NQUlOXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VEVTVF9ITU0mIzM0OywKICAgICYjMzQ7TVNIVl9ST09UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkJiMzNDssCiAgICAmIzM0O2htbV9yYW5nZV9mYXVsdCYjMzQ7LAogICAgJiMzNDtobW1fZG9fZmF1bHQmIzM0OywKICAgICYjMzQ7aG1tX3JlY29yZF9mYXVsdCYjMzQ7LAogICAgJiMzNDtobW1fcmFuZ2VfZmF1bHRfbG9ja2VkJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfcmVhZF91bmxvY2tlZCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfZmF1bHRfdW5sb2NrZWQmIzM0OywKICAgICYjMzQ7bXNodl9yZWdpb25faG1tX2ZhdWx0X2FuZF9sb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKWAgaW4gdGhlIEhNTSBzdWJzeXN0ZW0gdG8gYWxsb3cgZHJvcHBpbmcgdGhlIG1tYXAgbG9jayBkdXJpbmcgcGFnZSBmYXVsdHMsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgcmVnaW9ucyBtYW5hZ2VkIGJ5IHVzZXJmYXVsdGZkLiBJdCByZWZhY3RvcnMgdGhlIGNvcmUgYGhtbV9yYW5nZV9mYXVsdCgpYCBsb2dpYyB0byBzdXBwb3J0IHRoaXMgYW5kIHVwZGF0ZXMgdGhlIGB0ZXN0X2htbWAgbW9kdWxlIGFuZCBgbXNodl9yZWdpb25zYCBkcml2ZXIgdG8gdXRpbGl6ZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZHJpdmVyIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNGI3NTkzZjZmZTg2Y2I2YzU0MGU2NDRhOWIxZDFkY2RmODgwZTcwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgNyAwMjowMzoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdAppbmRleCA3ZDYxYjdhOGI2NWI3OS4uODQ0MzQzNzEyYWJkZGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QKQEAgLTIwOCw2ICYjNDM7MjA4LDY1IEBAIGludmFsaWRhdGUoKSBjYWxsYmFjay4gVGhhdCBsb2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZwogbW11X2ludGVydmFsX3JlYWRfcmV0cnkoKSB0byBhdm9pZCBhbnkgcmFjZSB3aXRoIGEgY29uY3VycmVudCBDUFUgcGFnZSB0YWJsZQogdXBkYXRlLgogCiYjNDM7RHJvcHBpbmcgdGhlIG1tYXAgbG9jayBkdXJpbmcgcGFnZSBmYXVsdHMKJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO1NvbWUgVk1BcyBoYXZlIGZhdWx0IGhhbmRsZXJzIHRoYXQgbmVlZCB0byByZWxlYXNlIHRoZSBtbWFwIGxvY2sgd2hpbGUKJiM0MztzZXJ2aWNpbmcgYSBmYXVsdCAoZm9yIGV4YW1wbGUsIHJlZ2lvbnMgbWFuYWdlZCBieSBgYHVzZXJmYXVsdGZkYGApLgomIzQzO2BgaG1tX3JhbmdlX2ZhdWx0KClgYCBjYW5ub3QgYmUgdXNlZCBvbiBzdWNoIG1hcHBpbmdzIGJlY2F1c2UgaXQgbXVzdCBob2xkIHRoZQomIzQzO21tYXAgbG9jayBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjYWxsLiBEcml2ZXJzIHRoYXQgbmVlZCB0byBzdXBwb3J0IHRoZW0KJiM0MztzaG91bGQgY2FsbDo6CiYjNDM7CiYjNDM7ICBpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTsKJiM0MzsKJiM0MztUaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgYGBtbWFwX3JlYWRfbG9ja2BgIGJlZm9yZSB0aGUgY2FsbC4KJiM0MztgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpYGAgdGFrZXMgdGhlIG1tYXAgcmVhZCBsb2NrIGludGVybmFsbHkgYW5kIGFsbG93cwomIzQzO2BgaGFuZGxlX21tX2ZhdWx0KClgYCB0byBkcm9wIGl0IGR1cmluZyBmYXVsdCBoYW5kbGluZy4gSWYgdGhlIG1tYXAgbG9jayBpcwomIzQzO2Ryb3BwZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGBgLUVCVVNZYGAuIFRoZSBjYWxsZXIgbXVzdCB0aGVuIHJlc3RhcnQgdGhlCiYjNDM7d2FsayBmcm9tIGBgcmFuZ2UtJmd0O3N0YXJ0YGAgd2l0aCBhIGZyZXNoIG5vdGlmaWVyIHNlcXVlbmNlLiBgYC1FSU5UUmBgIGlzCiYjNDM7cmV0dXJuZWQgaWYgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZyBkdXJpbmcgcmV0cnkgaGFuZGxpbmcuCiYjNDM7CiYjNDM7QSB0eXBpY2FsIGNhbGxlciBsb29rcyBsaWtlIHRoaXM6OgomIzQzOwomIzQzOyBpbnQgZHJpdmVyX3BvcHVsYXRlX3JhbmdlX3VubG9ja2VkKC4uLikKJiM0MzsgewomIzQzOyAgICAgIHN0cnVjdCBobW1fcmFuZ2UgcmFuZ2U7CiYjNDM7ICAgICAgLi4uCiYjNDM7CiYjNDM7ICAgICAgcmFuZ2Uubm90aWZpZXIgPSAmYW1wO2ludGVydmFsX3N1YjsKJiM0MzsgICAgICByYW5nZS5zdGFydCA9IC4uLjsKJiM0MzsgICAgICByYW5nZS5lbmQgPSAuLi47CiYjNDM7ICAgICAgcmFuZ2UuaG1tX3BmbnMgPSAuLi47CiYjNDM7CiYjNDM7ICAgICAgaWYgKCFtbWdldF9ub3RfemVybyhpbnRlcnZhbF9zdWIubW0pKQomIzQzOyAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsgYWdhaW46CiYjNDM7ICAgICAgcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4oJmFtcDtpbnRlcnZhbF9zdWIpOwomIzQzOyAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgmYW1wO3JhbmdlKTsKJiM0MzsgICAgICBpZiAocmV0KSB7CiYjNDM7ICAgICAgICAgIGlmIChyZXQgPT0gLUVCVVNZKQomIzQzOyAgICAgICAgICAgICAgZ290byBhZ2FpbjsKJiM0MzsgICAgICAgICAgZ290byBvdXRfcHV0OwomIzQzOyAgICAgIH0KJiM0MzsKJiM0MzsgICAgICB0YWtlX2xvY2soZHJpdmVyLSZndDt1cGRhdGUpOwomIzQzOyAgICAgIGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeSgmYW1wO2ludGVydmFsX3N1YiwgcmFuZ2Uubm90aWZpZXJfc2VxKSkgewomIzQzOyAgICAgICAgICByZWxlYXNlX2xvY2soZHJpdmVyLSZndDt1cGRhdGUpOwomIzQzOyAgICAgICAgICBnb3RvIGFnYWluOwomIzQzOyAgICAgIH0KJiM0MzsKJiM0MzsgICAgICAvKiBVc2UgcGZucyBhcnJheSBjb250ZW50IHRvIHVwZGF0ZSBkZXZpY2UgcGFnZSB0YWJsZSwKJiM0MzsgICAgICAgKiB1bmRlciB0aGUgdXBkYXRlIGxvY2sgKi8KJiM0MzsKJiM0MzsgICAgICByZWxlYXNlX2xvY2soZHJpdmVyLSZndDt1cGRhdGUpOwomIzQzOyAgICAgIHJldCA9IDA7CiYjNDM7CiYjNDM7IG91dF9wdXQ6CiYjNDM7ICAgICAgbW1wdXQoaW50ZXJ2YWxfc3ViLm1tKTsKJiM0MzsgICAgICByZXR1cm4gcmV0OwomIzQzOyB9CiYjNDM7CiBMZXZlcmFnZSBkZWZhdWx0X2ZsYWdzIGFuZCBwZm5fZmxhZ3NfbWFzawogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYyBiL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMKaW5kZXggNmQ2NWU1YjQyMTUyOTUuLjA0Njc2ZjA2YzVjNzQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMKQEAgLTM4OCwxMyAmIzQzOzM4OCwxMSBAQCBpbnQgbXNodl9yZWdpb25fZ2V0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbikKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgc3RlcHM6CiAgKiAxLiBSZWFkcyB0aGUgbm90aWZpZXIgc2VxdWVuY2UgZm9yIHRoZSBITU0gcmFuZ2UuCi0gKiAyLiBBY3F1aXJlcyBhIHJlYWQgbG9jayBvbiB0aGUgbWVtb3J5IG1hcC4KLSAqIDMuIEhhbmRsZXMgSE1NIGZhdWx0cyBmb3IgdGhlIHNwZWNpZmllZCByYW5nZS4KLSAqIDQuIFJlbGVhc2VzIHRoZSByZWFkIGxvY2sgb24gdGhlIG1lbW9yeSBtYXAuCi0gKiA1LiBJZiBzdWNjZXNzZnVsLCBsb2NrcyB0aGUgbWVtb3J5IHJlZ2lvbiBtdXRleC4KLSAqIDYuIFZlcmlmaWVzIGlmIHRoZSBub3RpZmllciBzZXF1ZW5jZSBoYXMgY2hhbmdlZCBkdXJpbmcgdGhlIG9wZXJhdGlvbi4KJiM0MzsgKiAyLiBIYW5kbGVzIEhNTSBmYXVsdHMgZm9yIHRoZSBzcGVjaWZpZWQgcmFuZ2UuCiYjNDM7ICogMy4gSWYgc3VjY2Vzc2Z1bCwgbG9ja3MgdGhlIG1lbW9yeSByZWdpb24gbXV0ZXguCiYjNDM7ICogNC4gVmVyaWZpZXMgaWYgdGhlIG5vdGlmaWVyIHNlcXVlbmNlIGhhcyBjaGFuZ2VkIGR1cmluZyB0aGUgb3BlcmF0aW9uLgogICogICAgSWYgaXQgaGFzLCByZWxlYXNlcyB0aGUgbXV0ZXggYW5kIHJldHVybnMgLUVCVVNZIHRvIG1hdGNoIHdpdGgKLSAqICAgIGhtbV9yYW5nZV9mYXVsdCgpIHJldHVybiBjb2RlIGZvciByZXBlYXRpbmcuCiYjNDM7ICogICAgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKCkgc28gdGhlIGNhbGxlciByZXRyaWVzIHRoZSByYW5nZSBmYXVsdC4KICAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KICAqLwpAQCAtNDA0LDkgJiM0Mzs0MDIsNyBAQCBzdGF0aWMgaW50IG1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9jayhzdHJ1Y3QgbXNodl9tZW1fcmVnaW9uICpyZWdpb24sCiAJaW50IHJldDsKIAogCXJhbmdlLSZndDtub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS0mZ3Q7bm90aWZpZXIpOwotCW1tYXBfcmVhZF9sb2NrKHJlZ2lvbi0mZ3Q7bXJlZ19tbmkubW0pOwotCXJldCA9IGhtbV9yYW5nZV9mYXVsdChyYW5nZSk7Ci0JbW1hcF9yZWFkX3VubG9jayhyZWdpb24tJmd0O21yZWdfbW5pLm1tKTsKJiM0MzsJcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHJhbmdlKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2htbS5oIGIvaW5jbHVkZS9saW51eC9obW0uaAppbmRleCBkYjc1ZmZjOTQ5YTdhYy4uMWI1ODRlNWEyOTAwMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaG1tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9obW0uaApAQCAtMTIzLDYgJiM0MzsxMjMsNyBAQCBzdHJ1Y3QgaG1tX3JhbmdlIHsKICAqIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0IGZvciBob3cgdG8gdXNlIHRoZSByYW5nZSBBUEkuCiAgKi8KIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpOwomIzQzO2ludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpOwogCiAvKgogICogSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCAtIGRlZmF1bHQgdGltZW91dCAobXMpIHdoZW4gd2FpdGluZyBmb3IgYSByYW5nZQpkaWZmIC0tZ2l0IGEvbGliL3Rlc3RfaG1tLmMgYi9saWIvdGVzdF9obW0uYwppbmRleCA0NWMwY2I5OTIyMTg0YS4uZGNjM2EyM2JiOTgzZGMgMTAwNjQ0Ci0tLSBhL2xpYi90ZXN0X2htbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0X2htbS5jCkBAIC0zODksNiAmIzQzOzM4OSw3NiBAQCBzdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwKJiM0MzsJCQkJCXN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0KJiM0MzsJCWppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJd2hpbGUgKHRydWUpIHsKJiM0MzsJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CiYjNDM7CQkJcmV0ID0gLUVCVVNZOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmFuZ2UtJmd0O25vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKHJhbmdlLSZndDtub3RpZmllcik7CiYjNDM7CQlyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQocmFuZ2UpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWlmIChyZXQgPT0gLUVCVVNZKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtkbWlycm9yLSZndDttdXRleCk7CiYjNDM7CQlpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2UtJmd0O25vdGlmaWVyLAomIzQzOwkJCQkJICAgIHJhbmdlLSZndDtub3RpZmllcl9zZXEpKSB7CiYjNDM7CQkJbXV0ZXhfdW5sb2NrKCZhbXA7ZG1pcnJvci0mZ3Q7bXV0ZXgpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gZG1pcnJvcl9kb19mYXVsdChkbWlycm9yLCByYW5nZSk7CiYjNDM7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2RtaXJyb3ItJmd0O211dGV4KTsKJiM0MztvdXQ6CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZG1pcnJvcl9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwKJiM0MzsJCQkJICB1bnNpZ25lZCBsb25nIHN0YXJ0LAomIzQzOwkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHdyaXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBkbWlycm9yLSZndDtub3RpZmllci5tbTsKJiM0MzsJdW5zaWduZWQgbG9uZyBhZGRyOwomIzQzOwl1bnNpZ25lZCBsb25nIHBmbnNbMzJdOwomIzQzOwlzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlID0gewomIzQzOwkJLm5vdGlmaWVyID0gJmFtcDtkbWlycm9yLSZndDtub3RpZmllciwKJiM0MzsJCS5obW1fcGZucyA9IHBmbnMsCiYjNDM7CQkucGZuX2ZsYWdzX21hc2sgPSAwLAomIzQzOwkJLmRlZmF1bHRfZmxhZ3MgPQomIzQzOwkJCUhNTV9QRk5fUkVRX0ZBVUxUIHwgKHdyaXRlID8gSE1NX1BGTl9SRVFfV1JJVEUgOiAwKSwKJiM0MzsJCS5kZXZfcHJpdmF0ZV9vd25lciA9IGRtaXJyb3ItJmd0O21kZXZpY2UsCiYjNDM7CX07CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAoIW1tZ2V0X25vdF96ZXJvKG1tKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlmb3IgKGFkZHIgPSBzdGFydDsgYWRkciAmbHQ7IGVuZDsgYWRkciA9IHJhbmdlLmVuZCkgewomIzQzOwkJcmFuZ2Uuc3RhcnQgPSBhZGRyOwomIzQzOwkJcmFuZ2UuZW5kID0gbWluKGFkZHIgJiM0MzsgKEFSUkFZX1NJWkUocGZucykgJmx0OyZsdDsgUEFHRV9TSElGVCksIGVuZCk7CiYjNDM7CiYjNDM7CQlyZXQgPSBkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkKGRtaXJyb3IsICZhbXA7cmFuZ2UpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwltbXB1dChtbSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkbWlycm9yX2ZhdWx0KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHdyaXRlKQogewpAQCAtNDg4LDYgJiM0Mzs1NTgsNDcgQEAgc3RhdGljIGludCBkbWlycm9yX3JlYWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZCkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBkbWlycm9yX3JlYWRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsCiYjNDM7CQkJCSBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kICpjbWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZG1pcnJvcl9ib3VuY2UgYm91bmNlOwomIzQzOwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNtZC0mZ3Q7bnBhZ2VzICZsdDsmbHQ7IFBBR0VfU0hJRlQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXN0YXJ0ID0gY21kLSZndDthZGRyOwomIzQzOwllbmQgPSBzdGFydCAmIzQzOyBzaXplOwomIzQzOwlpZiAoZW5kICZsdDsgc3RhcnQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0ID0gZG1pcnJvcl9ib3VuY2VfaW5pdCgmYW1wO2JvdW5jZSwgc3RhcnQsIHNpemUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJd2hpbGUgKDEpIHsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtkbWlycm9yLSZndDttdXRleCk7CiYjNDM7CQlyZXQgPSBkbWlycm9yX2RvX3JlYWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgJmFtcDtib3VuY2UpOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7ZG1pcnJvci0mZ3Q7bXV0ZXgpOwomIzQzOwkJaWYgKHJldCAhPSAtRU5PRU5UKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJc3RhcnQgPSBjbWQtJmd0O2FkZHIgJiM0MzsgKGJvdW5jZS5jcGFnZXMgJmx0OyZsdDsgUEFHRV9TSElGVCk7CiYjNDM7CQlyZXQgPSBkbWlycm9yX2ZhdWx0X3VubG9ja2VkKGRtaXJyb3IsIHN0YXJ0LCBlbmQsIGZhbHNlKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljbWQtJmd0O2ZhdWx0cyYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJldCA9PSAwKSB7CiYjNDM7CQlpZiAoY29weV90b191c2VyKHU2NF90b191c2VyX3B0cihjbWQtJmd0O3B0ciksIGJvdW5jZS5wdHIsCiYjNDM7CQkJCSBib3VuY2Uuc2l6ZSkpCiYjNDM7CQkJcmV0ID0gLUVGQVVMVDsKJiM0MzsJfQomIzQzOwljbWQtJmd0O2NwYWdlcyA9IGJvdW5jZS5jcGFnZXM7CiYjNDM7CWRtaXJyb3JfYm91bmNlX2ZpbmkoJmFtcDtib3VuY2UpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZG1pcnJvcl9kb193cml0ZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IGRtaXJyb3JfYm91bmNlICpib3VuY2UpCiB7CkBAIC0xNTcyLDYgJiM0MzsxNjgzLDkgQEAgc3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCQlkbWlycm9yLSZndDtmbGFncyA9IGNtZC5ucGFnZXM7CiAJCXJldCA9IDA7CiAJCWJyZWFrOwomIzQzOwljYXNlIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRUQ6CiYjNDM7CQlyZXQgPSBkbWlycm9yX3JlYWRfdW5sb2NrZWQoZG1pcnJvciwgJmFtcDtjbWQpOwomIzQzOwkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2xpYi90ZXN0X2htbV91YXBpLmggYi9saWIvdGVzdF9obW1fdWFwaS5oCmluZGV4IGY5NGM2ZDQ1NzMzODI4Li5lYTliMGVjNDA0ZmI1NSAxMDA2NDQKLS0tIGEvbGliL3Rlc3RfaG1tX3VhcGkuaAomIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF9obW1fdWFwaS5oCkBAIC0zOCw2ICYjNDM7MzgsNyBAQCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kIHsKICNkZWZpbmUgSE1NX0RNSVJST1JfQ0hFQ0tfRVhDTFVTSVZFCV9JT1dSKCYjMzk7SCYjMzk7LCAweDA2LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKQogI2RlZmluZSBITU1fRE1JUlJPUl9SRUxFQVNFCQlfSU9XUigmIzM5O0gmIzM5OywgMHgwNywgc3RydWN0IGhtbV9kbWlycm9yX2NtZCkKICNkZWZpbmUgSE1NX0RNSVJST1JfRkxBR1MJCV9JT1dSKCYjMzk7SCYjMzk7LCAweDA4LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKQomIzQzOyNkZWZpbmUgSE1NX0RNSVJST1JfUkVBRF9VTkxPQ0tFRAlfSU9XUigmIzM5O0gmIzM5OywgMHgwOSwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCkKIAogI2RlZmluZSBITU1fRE1JUlJPUl9GTEFHX0ZBSUxfQUxMT0MJKDFVTEwgJmx0OyZsdDsgMCkKIApkaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uYwppbmRleCA0ZjNmNjI3ZDJiNDc3Mi4uMzE2MTE2OTk0MjA5YzggMTAwNjQ0Ci0tLSBhL21tL2htbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2htbS5jCkBAIC0zMiw5ICYjNDM7MzIsMjcgQEAKIAogc3RydWN0IGhtbV92bWFfd2FsayB7CiAJc3RydWN0IGhtbV9yYW5nZQkqcmFuZ2U7CiYjNDM7CWludAkJCSpsb2NrZWQ7CiAJdW5zaWduZWQgbG9uZwkJbGFzdDsKJiM0MzsJdW5zaWduZWQgbG9uZwkJZW5kOwomIzQzOwl1bnNpZ25lZCBpbnQJCXJlcXVpcmVkX2ZhdWx0OwogfTsKIAomIzQzOy8qCiYjNDM7ICogSW50ZXJuYWwgc2VudGluZWwgcmV0dXJuZWQgYnkgd2FsayBjYWxsYmFja3Mgd2hlbiB0aGV5IG5lZWQgYSBwYWdlIGZhdWx0LgomIzQzOyAqIFRoZSBjYWxsYmFjayBzdG9yZXMgZW5kL3JlcXVpcmVkX2ZhdWx0IGluIGhtbV92bWFfd2FsazsgdGhlIG91dGVyIGxvb3AKJiM0MzsgKiBjb25zdW1lcyB0aGUgc2VudGluZWwgYW5kIG5ldmVyIHByb3BhZ2F0ZXMgaXQgdG8gdGhlIGNhbGxlci4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEhNTV9GQVVMVF9QRU5ESU5HCS1FQUdBSU4KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEludGVybmFsIHNlbnRpbmVsIHJldHVybmVkIGJ5IGhtbV9kb19mYXVsdCgpIHdoZW4gaGFuZGxlX21tX2ZhdWx0KCkKJiM0MzsgKiBjb21wbGV0ZXMgYSBwYWdlIGZhdWx0IHdpdGggdGhlIG1tYXAgbG9jayBkcm9wcGVkLiBobW1fZG9fZmF1bHQoKSBzZXRzCiYjNDM7ICogKmxvY2tlZCA9IDA7IHRoZSBvdXRlciBsb29wIGNvbnN1bWVzIHRoZSBzZW50aW5lbCBhbmQgbmV2ZXIgcHJvcGFnYXRlcyBpdAomIzQzOyAqIHRvIHRoZSBjYWxsZXIuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBITU1fRkFVTFRfVU5MT0NLRUQJLUVOT0xDSwomIzQzOwogZW51bSB7CiAJSE1NX05FRURfRkFVTFQgPSAxICZsdDsmbHQ7IDAsCiAJSE1NX05FRURfV1JJVEVfRkFVTFQgPSAxICZsdDsmbHQ7IDEsCkBAIC02MCwzNyAmIzQzOzc4LDI1IEBAIHN0YXRpYyBpbnQgaG1tX3BmbnNfZmlsbCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogfQogCiAvKgotICogaG1tX3ZtYV9mYXVsdCgpIC0gZmF1bHQgaW4gYSByYW5nZSBsYWNraW5nIHZhbGlkIHBtZCBvciBwdGUocykKLSAqIEBhZGRyOiByYW5nZSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MgKGluY2x1c2l2ZSkKLSAqIEBlbmQ6IHJhbmdlIHZpcnR1YWwgZW5kIGFkZHJlc3MgKGV4Y2x1c2l2ZSkKLSAqIEByZXF1aXJlZF9mYXVsdDogSE1NX05FRURfKiBmbGFncwotICogQHdhbGs6IG1tX3dhbGsgc3RydWN0dXJlCi0gKiBSZXR1cm46IC1FQlVTWSBhZnRlciBwYWdlIGZhdWx0LCBvciBwYWdlIGZhdWx0IGVycm9yCiYjNDM7ICogaG1tX3JlY29yZF9mYXVsdCgpIC0gcmVjb3JkIGEgcmFuZ2UgdGhhdCBuZWVkcyB0byBiZSBmYXVsdGVkIGluCiAgKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBwbWRfbm9uZSgpIG9yIHB0ZV9ub25lKCkgcmV0dXJucyB0cnVlLAotICogb3Igd2hlbmV2ZXIgdGhlcmUgaXMgbm8gcGFnZSBkaXJlY3RvcnkgY292ZXJpbmcgdGhlIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KJiM0MzsgKiBDYWxsZWQgYnkgdGhlIHdhbGsgY2FsbGJhY2tzIHdoZW4gdGhleSBkaXNjb3ZlciB0aGF0IHBhcnQgb2YgdGhlIHJhbmdlCiYjNDM7ICogbmVlZHMgYSBwYWdlIGZhdWx0LiAgVGhlIGNhbGxiYWNrIHJlY29yZHMgd2hhdCB0byBmYXVsdCBhbmQgcmV0dXJucwomIzQzOyAqIEhNTV9GQVVMVF9QRU5ESU5HOyB0aGUgb3V0ZXIgbG9vcCBpbiBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKCkgZHJvcHMKJiM0MzsgKiBiYWNrIG91dCBvZiB3YWxrX3BhZ2VfcmFuZ2UoKSBhbmQgaW52b2tlcyBoYW5kbGVfbW1fZmF1bHQoKSBmcm9tIGEgY29udGV4dAomIzQzOyAqIHdoZXJlIG5vIHBhZ2UtdGFibGUgb3IgaHVnZXRsYl92bWFfbG9jayBpcyBoZWxkLgogICovCi1zdGF0aWMgaW50IGhtbV92bWFfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKLQkJCSB1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmF1bHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQomIzQzO3N0YXRpYyBpbnQgaG1tX3JlY29yZF9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAomIzQzOwkJCSAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmF1bHQsCiYjNDM7CQkJICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKQogewogCXN0cnVjdCBobW1fdm1hX3dhbGsgKmhtbV92bWFfd2FsayA9IHdhbGstJmd0O3ByaXZhdGU7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLSZndDt2bWE7Ci0JdW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzID0gRkFVTFRfRkxBR19SRU1PVEU7CiAKIAlXQVJOX09OX09OQ0UoIXJlcXVpcmVkX2ZhdWx0KTsKIAlobW1fdm1hX3dhbGstJmd0O2xhc3QgPSBhZGRyOwotCi0JaWYgKHJlcXVpcmVkX2ZhdWx0ICZhbXA7IEhNTV9ORUVEX1dSSVRFX0ZBVUxUKSB7Ci0JCWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fV1JJVEUpKQotCQkJcmV0dXJuIC1FUEVSTTsKLQkJZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19XUklURTsKLQl9Ci0KLQlmb3IgKDsgYWRkciAmbHQ7IGVuZDsgYWRkciAmIzQzOz0gUEFHRV9TSVpFKQotCQlpZiAoaGFuZGxlX21tX2ZhdWx0KHZtYSwgYWRkciwgZmF1bHRfZmxhZ3MsIE5VTEwpICZhbXA7Ci0JCSAgICBWTV9GQVVMVF9FUlJPUikKLQkJCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAtRUJVU1k7CiYjNDM7CWhtbV92bWFfd2Fsay0mZ3Q7ZW5kID0gZW5kOwomIzQzOwlobW1fdm1hX3dhbGstJmd0O3JlcXVpcmVkX2ZhdWx0ID0gcmVxdWlyZWRfZmF1bHQ7CiYjNDM7CXJldHVybiBITU1fRkFVTFRfUEVORElORzsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBobW1fcHRlX25lZWRfZmF1bHQoY29uc3Qgc3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrLApAQCAtMTc0LDcgJiM0MzsxODAsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19ob2xlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCXJldHVybiBobW1fcGZuc19maWxsKGFkZHIsIGVuZCwgcmFuZ2UsIEhNTV9QRk5fRVJST1IpOwogCX0KIAlpZiAocmVxdWlyZWRfZmF1bHQpCi0JCXJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwomIzQzOwkJcmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7CiAJcmV0dXJuIGhtbV9wZm5zX2ZpbGwoYWRkciwgZW5kLCByYW5nZSwgMCk7CiB9CiAKQEAgLTIwOSw3ICYjNDM7MjE1LDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlyZXF1aXJlZF9mYXVsdCA9CiAJCWhtbV9yYW5nZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgaG1tX3BmbnMsIG5wYWdlcywgY3B1X2ZsYWdzKTsKIAlpZiAocmVxdWlyZWRfZmF1bHQpCi0JCXJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwomIzQzOwkJcmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7CiAKIAlwZm4gPSBwbWRfcGZuKHBtZCkgJiM0MzsgKChhZGRyICZhbXA7IH5QTURfTUFTSykgJmd0OyZndDsgUEFHRV9TSElGVCk7CiAJZm9yIChpID0gMDsgYWRkciAmbHQ7IGVuZDsgYWRkciAmIzQzOz0gUEFHRV9TSVpFLCBpJiM0MzsmIzQzOywgcGZuJiM0MzsmIzQzOykgewpAQCAtMzI4LDcgJiM0MzszMzQsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLAogZmF1bHQ6CiAJcHRlX3VubWFwKHB0ZXApOwogCS8qIEZhdWx0IGFueSB2aXJ0dWFsIGFkZHJlc3Mgd2Ugd2VyZSBhc2tlZCB0byBmYXVsdCAqLwotCXJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwomIzQzOwlyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTsKIH0KIAogI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRgpAQCAtMzcxLDcgJiM0MzszNzcsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX2Fic2VudF9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQkJCSAgICAgIG5wYWdlcywgMCk7CiAJaWYgKHJlcXVpcmVkX2ZhdWx0KSB7CiAJCWlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpCi0JCQlyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTsKJiM0MzsJCQlyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTsKIAkJZWxzZQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpAQCAtNTE3LDcgJiM0Mzs1MjMsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19wdWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJCQkJICAgICAgbnBhZ2VzLCBjcHVfZmxhZ3MpOwogCQlpZiAocmVxdWlyZWRfZmF1bHQpIHsKIAkJCXNwaW5fdW5sb2NrKHB0bCk7Ci0JCQlyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTsKJiM0MzsJCQlyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTsKIAkJfQogCiAJCXBmbiA9IHB1ZF9wZm4ocHVkKSAmIzQzOyAoKGFkZHIgJmFtcDsgflBVRF9NQVNLKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKQEAgLTU2NCwyMSAmIzQzOzU3MCw4IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzaywKIAlyZXF1aXJlZF9mYXVsdCA9CiAJCWhtbV9wdGVfbmVlZF9mYXVsdChobW1fdm1hX3dhbGssIHBmbl9yZXFfZmxhZ3MsIGNwdV9mbGFncyk7CiAJaWYgKHJlcXVpcmVkX2ZhdWx0KSB7Ci0JCWludCByZXQ7Ci0KIAkJc3Bpbl91bmxvY2socHRsKTsKLQkJaHVnZXRsYl92bWFfdW5sb2NrX3JlYWQodm1hKTsKLQkJLyoKLQkJICogQXZvaWQgZGVhZGxvY2s6IGRyb3AgdGhlIHZtYSBsb2NrIGJlZm9yZSBjYWxsaW5nCi0JCSAqIGhtbV92bWFfZmF1bHQoKSwgd2hpY2ggd2lsbCBpdHNlbGYgcG90ZW50aWFsbHkgdGFrZSBhbmQKLQkJICogZHJvcCB0aGUgdm1hIGxvY2suIFRoaXMgaXMgYWxzbyBjb3JyZWN0IGZyb20gYQotCQkgKiBwcm90ZWN0aW9uIHBvaW50IG9mIHZpZXcsIGJlY2F1c2UgdGhlcmUgaXMgbm8gZnVydGhlcgotCQkgKiB1c2UgaGVyZSBvZiBlaXRoZXIgcHRlIG9yIHB0bCBhZnRlciBkcm9wcGluZyB0aGUgdm1hCi0JCSAqIGxvY2suCi0JCSAqLwotCQlyZXQgPSBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwotCQlodWdldGxiX3ZtYV9sb2NrX3JlYWQodm1hKTsKLQkJcmV0dXJuIHJldDsKJiM0MzsJCXJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwogCX0KIAogCXBmbiA9IHB0ZV9wZm4oZW50cnkpICYjNDM7ICgoc3RhcnQgJmFtcDsgfmhtYXNrKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKQEAgLTYzNywyOSAmIzQzOzYzMCw2NiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGhtbV93YWxrX29wcyA9IHsKIAkud2Fsa19sb2NrCT0gUEdXQUxLX1JETE9DSywKIH07CiAKLS8qKgotICogaG1tX3JhbmdlX2ZhdWx0IC0gdHJ5IHRvIGZhdWx0IHNvbWUgYWRkcmVzcyBpbiBhIHZpcnR1YWwgYWRkcmVzcyByYW5nZQotICogQHJhbmdlOglhcmd1bWVudCBzdHJ1Y3R1cmUKLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczoKJiM0MzsvKgomIzQzOyAqIGhtbV9kb19mYXVsdCAtIGZhdWx0IGluIGEgcmFuZ2UgcmVjb3JkZWQgYnkgYSB3YWxrIGNhbGxiYWNrCiAgKgotICogLUVJTlZBTDoJSW52YWxpZCBhcmd1bWVudHMgb3IgbW0gb3IgdmlydHVhbCBhZGRyZXNzIGlzIGluIGFuIGludmFsaWQgdm1hCi0gKgkJKGUuZy4sIGRldmljZSBmaWxlIHZtYSkuCi0gKiAtRU5PTUVNOglPdXQgb2YgbWVtb3J5LgotICogLUVQRVJNOglJbnZhbGlkIHBlcm1pc3Npb24gKGUuZy4sIGFza2luZyBmb3Igd3JpdGUgYW5kIHJhbmdlIGlzIHJlYWQKLSAqCQlvbmx5KS4KLSAqIC1FQlVTWToJVGhlIHJhbmdlIGhhcyBiZWVuIGludmFsaWRhdGVkIGFuZCB0aGUgY2FsbGVyIG5lZWRzIHRvIHdhaXQgZm9yCi0gKgkJdGhlIGludmFsaWRhdGlvbiB0byBmaW5pc2guCi0gKiAtRUZBVUxUOiAgICAgQSBwYWdlIHdhcyByZXF1ZXN0ZWQgdG8gYmUgdmFsaWQgYW5kIGNvdWxkIG5vdCBiZSBtYWRlIHZhbGlkCi0gKiAgICAgICAgICAgICAgaWUgaXQgaGFzIG5vIGJhY2tpbmcgVk1BIG9yIGl0IGlzIGlsbGVnYWwgdG8gYWNjZXNzCiYjNDM7ICogQ2FsbGVkIGZyb20gdGhlIG91dGVyIGxvb3AgaW4gaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZCgpIGFmdGVyIGEgY2FsbGJhY2sKJiM0MzsgKiByZXR1cm5lZCBITU1fRkFVTFRfUEVORElORy4gIEF0IHRoaXMgcG9pbnQgd2UgaG9sZCBvbmx5IG1tYXBfbG9jazsKJiM0MzsgKiB0aGUgcGFnZS10YWJsZSBzcGlubG9jayBhbmQgYW55IGh1Z2V0bGJfdm1hX2xvY2sgYWNxdWlyZWQgYnkgdGhlIHdhbGsKJiM0MzsgKiBmcmFtZXdvcmsgaGF2ZSBhbHJlYWR5IGJlZW4gcmVsZWFzZWQgYnkgdGhlIHVud2luZC4KICAqCi0gKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ2V0X3VzZXJfcGFnZXMoKSwgZXhjZXB0IHRoYXQgaXQgY2FuIHJlYWQgdGhlIHBhZ2UgdGFibGVzCi0gKiB3aXRob3V0IG11dGF0aW5nIHRoZW0gKGllIGNhdXNpbmcgZmF1bHRzKS4KJiM0MzsgKiBSZXR1cm5zIC1FQlVTWSBvbiBzdWNjZXNzIChhbGwgcGFnZXMgZmF1bHRlZCwgY2FsbGVyIHNob3VsZCByZS13YWxrKS4KJiM0MzsgKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KICAqLwotaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSkKJiM0MztzdGF0aWMgaW50IGhtbV9kb19mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCQlzdHJ1Y3QgaG1tX3ZtYV93YWxrICpobW1fdm1hX3dhbGspCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGFkZHIgPSBobW1fdm1hX3dhbGstJmd0O2xhc3Q7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW5kID0gaG1tX3ZtYV93YWxrLSZndDtlbmQ7CiYjNDM7CXVuc2lnbmVkIGludCByZXF1aXJlZF9mYXVsdCA9IGhtbV92bWFfd2Fsay0mZ3Q7cmVxdWlyZWRfZmF1bHQ7CiYjNDM7CXVuc2lnbmVkIGludCBmYXVsdF9mbGFncyA9IEZBVUxUX0ZMQUdfUkVNT1RFOwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKJiM0MzsKJiM0MzsJaWYgKGhtbV92bWFfd2Fsay0mZ3Q7bG9ja2VkKQomIzQzOwkJZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19BTExPV19SRVRSWSB8IEZBVUxUX0ZMQUdfS0lMTEFCTEU7CiYjNDM7CiYjNDM7CXZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpOwomIzQzOwlpZiAoIXZtYSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlpZiAocmVxdWlyZWRfZmF1bHQgJmFtcDsgSE1NX05FRURfV1JJVEVfRkFVTFQpIHsKJiM0MzsJCWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fV1JJVEUpKQomIzQzOwkJCXJldHVybiAtRVBFUk07CiYjNDM7CQlmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoOyBhZGRyICZsdDsgZW5kOyBhZGRyICYjNDM7PSBQQUdFX1NJWkUpIHsKJiM0MzsJCXZtX2ZhdWx0X3QgcmV0OwomIzQzOwomIzQzOwkJcmV0ID0gaGFuZGxlX21tX2ZhdWx0KHZtYSwgYWRkciwgZmF1bHRfZmxhZ3MsIE5VTEwpOwomIzQzOwomIzQzOwkJaWYgKHJldCAmYW1wOyAoVk1fRkFVTFRfQ09NUExFVEVEIHwgVk1fRkFVTFRfUkVUUlkpKSB7CiYjNDM7CQkJKmhtbV92bWFfd2Fsay0mZ3Q7bG9ja2VkID0gMDsKJiM0MzsJCQlyZXR1cm4gSE1NX0ZBVUxUX1VOTE9DS0VEOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHJldCAmYW1wOyBWTV9GQVVMVF9FUlJPUikgewomIzQzOwkJCWludCBlcnIgPSB2bV9mYXVsdF90b19lcnJubyhyZXQsIDApOwomIzQzOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiYjNDM7CQkJQlVHKCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FQlVTWTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLCBpbnQgKmxvY2tlZCkKIHsKIAlzdHJ1Y3QgaG1tX3ZtYV93YWxrIGhtbV92bWFfd2FsayA9IHsKIAkJLnJhbmdlID0gcmFuZ2UsCiYjNDM7CQkubG9ja2VkID0gbG9ja2VkLAogCQkubGFzdCA9IHJhbmdlLSZndDtzdGFydCwKIAl9OwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtJmd0O25vdGlmaWVyLSZndDttbTsKQEAgLTY3NCw2ICYjNDM7NzA0LDIyIEBAIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCiAJCQlyZXR1cm4gLUVCVVNZOwogCQlyZXQgPSB3YWxrX3BhZ2VfcmFuZ2UobW0sIGhtbV92bWFfd2Fsay5sYXN0LCByYW5nZS0mZ3Q7ZW5kLAogCQkJCSAgICAgICZhbXA7aG1tX3dhbGtfb3BzLCAmYW1wO2htbV92bWFfd2Fsayk7CiYjNDM7CQkvKgomIzQzOwkJICogV2hlbiBITU1fRkFVTFRfUEVORElORyBpcyByZXR1cm5lZCBhIHdhbGsgY2FsbGJhY2sKJiM0MzsJCSAqIHJlY29yZGVkIGEgcmFuZ2UgdGhhdCBuZWVkcyBoYW5kbGVfbW1fZmF1bHQoKTsKJiM0MzsJCSAqIGhtbV9kb19mYXVsdCgpIHJ1bnMgdGhlIGZhdWx0IG91dHNpZGUgd2Fsa19wYWdlX3JhbmdlKCkKJiM0MzsJCSAqIChzbyBubyBwYWdlLXRhYmxlIG9yIGh1Z2V0bGJfdm1hX2xvY2sgaXMgaGVsZCkgYW5kCiYjNDM7CQkgKiByZXR1cm5zIC1FQlVTWSBzbyB0aGUgbG9vcCByZS13YWxrcyBhbmQgcGlja3MgdXAgdGhlCiYjNDM7CQkgKiBub3ctcHJlc2VudCBlbnRyaWVzLgomIzQzOwkJICovCiYjNDM7CQlpZiAocmV0ID09IEhNTV9GQVVMVF9QRU5ESU5HKSB7CiYjNDM7CQkJcmV0ID0gaG1tX2RvX2ZhdWx0KG1tLCAmYW1wO2htbV92bWFfd2Fsayk7CiYjNDM7CQkJaWYgKHJldCA9PSBITU1fRkFVTFRfVU5MT0NLRUQpIHsKJiM0MzsJCQkJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQomIzQzOwkJCQkJcmV0dXJuIC1FSU5UUjsKJiM0MzsJCQkJcmV0dXJuIC1FQlVTWTsKJiM0MzsJCQl9CiYjNDM7CQl9CiAJCS8qCiAJCSAqIFdoZW4gLUVCVVNZIGlzIHJldHVybmVkIHRoZSBsb29wIHJlc3RhcnRzIHdpdGgKIAkJICogaG1tX3ZtYV93YWxrLmxhc3Qgc2V0IHRvIGFuIGFkZHJlc3MgdGhhdCBoYXMgbm90IGJlZW4gc3RvcmVkCkBAIC02ODMsOCAmIzQzOzcyOSw2NSBAQCBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQogCX0gd2hpbGUgKHJldCA9PSAtRUJVU1kpOwogCXJldHVybiByZXQ7CiB9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogaG1tX3JhbmdlX2ZhdWx0IC0gdHJ5IHRvIGZhdWx0IHNvbWUgYWRkcmVzcyBpbiBhIHZpcnR1YWwgYWRkcmVzcyByYW5nZQomIzQzOyAqIEByYW5nZToJYXJndW1lbnQgc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczoKJiM0MzsgKgomIzQzOyAqIC1FSU5WQUw6CUludmFsaWQgYXJndW1lbnRzIG9yIG1tIG9yIHZpcnR1YWwgYWRkcmVzcyBpcyBpbiBhbiBpbnZhbGlkIHZtYQomIzQzOyAqCQkoZS5nLiwgZGV2aWNlIGZpbGUgdm1hKS4KJiM0MzsgKiAtRU5PTUVNOglPdXQgb2YgbWVtb3J5LgomIzQzOyAqIC1FUEVSTToJSW52YWxpZCBwZXJtaXNzaW9uIChlLmcuLCBhc2tpbmcgZm9yIHdyaXRlIGFuZCByYW5nZSBpcyByZWFkCiYjNDM7ICoJCW9ubHkpLgomIzQzOyAqIC1FQlVTWToJVGhlIHJhbmdlIGhhcyBiZWVuIGludmFsaWRhdGVkIGFuZCB0aGUgY2FsbGVyIG5lZWRzIHRvIHdhaXQgZm9yCiYjNDM7ICoJCXRoZSBpbnZhbGlkYXRpb24gdG8gZmluaXNoLgomIzQzOyAqIC1FRkFVTFQ6ICAgICBBIHBhZ2Ugd2FzIHJlcXVlc3RlZCB0byBiZSB2YWxpZCBhbmQgY291bGQgbm90IGJlIG1hZGUgdmFsaWQKJiM0MzsgKiAgICAgICAgICAgICAgaWUgaXQgaGFzIG5vIGJhY2tpbmcgVk1BIG9yIGl0IGlzIGlsbGVnYWwgdG8gYWNjZXNzCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ2V0X3VzZXJfcGFnZXMoKSwgZXhjZXB0IHRoYXQgaXQgY2FuIHJlYWQgdGhlIHBhZ2UgdGFibGVzCiYjNDM7ICogd2l0aG91dCBtdXRhdGluZyB0aGVtIChpZSBjYXVzaW5nIGZhdWx0cykuCiYjNDM7ICoKJiM0MzsgKiBUaGUgbW1hcCBsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIGFuZCB3aWxsIHJlbWFpbiBoZWxkIG9uIHJldHVybi4KJiM0MzsgKiBGb3IgYSB2YXJpYW50IHRoYXQgYWxsb3dzIHRoZSBtbWFwIGxvY2sgdG8gYmUgZHJvcHBlZCBkdXJpbmcgZmF1bHRzIChlLmcuLAomIzQzOyAqIGZvciB1c2VyZmF1bHRmZCBzdXBwb3J0KSwgc2VlIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpLgomIzQzOyAqLwomIzQzO2ludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChyYW5nZSwgTlVMTCk7CiYjNDM7fQogRVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHQpOwogCiYjNDM7LyoqCiYjNDM7ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkIC0gZmF1bHQgaW4gYSByYW5nZSwgcG9zc2libHkgZHJvcHBpbmcgdGhlIG1tYXAgbG9jawomIzQzOyAqIEByYW5nZToJYXJndW1lbnQgc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGlzIHNpbWlsYXIgdG8gaG1tX3JhbmdlX2ZhdWx0KCksIGV4Y2VwdCB0aGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgdGhlCiYjNDM7ICogbW1hcCBsb2NrLiBUaGUgZnVuY3Rpb24gdGFrZXMgdGhlIG1tYXAgcmVhZCBsb2NrIGludGVybmFsbHkgYW5kIGFsbG93cwomIzQzOyAqIGhhbmRsZV9tbV9mYXVsdCgpIHRvIGRyb3AgaXQgZHVyaW5nIGZhdWx0cy4gSWYgdGhlIGxvY2sgaXMgZHJvcHBlZCwgdGhlCiYjNDM7ICogZnVuY3Rpb24gcmV0dXJucyAtRUJVU1kgYW5kIHRoZSBjYWxsZXIgbXVzdCByZXN0YXJ0IHRoZSB3YWxrIHdpdGggYSBmcmVzaAomIzQzOyAqIG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKCkgc2VxdWVuY2UuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBvbmUgb2YgdGhlIGVycm9yIGNvZGVzIGRvY3VtZW50ZWQgZm9yCiYjNDM7ICogaG1tX3JhbmdlX2ZhdWx0KCkuIC1FSU5UUiBpcyByZXR1cm5lZCBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nIGR1cmluZwomIzQzOyAqIHJldHJ5IGhhbmRsaW5nLgomIzQzOyAqLwomIzQzO2ludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJhbmdlLSZndDtub3RpZmllci0mZ3Q7bW07CiYjNDM7CWludCBsb2NrZWQgPSAxOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltbWFwX3JlYWRfbG9jayhtbSk7CiYjNDM7CXJldCA9IGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQocmFuZ2UsICZhbXA7bG9ja2VkKTsKJiM0MzsJaWYgKGxvY2tlZCkKJiM0MzsJCW1tYXBfcmVhZF91bmxvY2sobW0pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCk7CiYjNDM7CiAvKioKICAqIGhtbV9kbWFfbWFwX2FsbG9jIC0gQWxsb2NhdGUgSE1NIG1hcCBzdHJ1Y3R1cmUKICAqIEBkZXY6IGRldmljZSB0byBhbGxvY2F0ZSBzdHJ1Y3R1cmUgZm9yCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jCmluZGV4IDJmMmI5ODc5ZDEwMDUxLi43MTc2NWM0ZDgwZjNlNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKQEAgLTI5LDYgJiM0MzsyOSwxMCBAQAogI2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL2lvY3RsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N5c2NhbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL2V2ZW50ZmQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdXNlcmZhdWx0ZmQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7cG9sbC5oJmd0OwogCiAvKgogICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbiYjMzk7dCBleHBvcnRlZApAQCAtMjk0OSw0ICYjNDM7Mjk1MywxNDkgQEAgVEVTVF9GX1RJTUVPVVQoaG1tLCBiZW5jaG1hcmtfdGhwX21pZ3JhdGlvbiwgMTIwKQogCQkJCQkmYW1wO3RocF9yZXN1bHRzLCAmYW1wO3JlZ3VsYXJfcmVzdWx0cyk7CiAJfQogfQomIzQzOy8qCiYjNDM7ICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZQomIzQzOyAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpIHBhdGguIFRoaXMgZXhlcmNpc2VzIHRoZSBsb2NrLWRyb3AgcmV0cnkKJiM0MzsgKiBsb2dpYyBpbiB0aGUgSE1NIGZyYW1ld29yay4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgdWZmZF90aHJlYWRfYXJncyB7CiYjNDM7CWludCB1ZmZkOwomIzQzOwlpbnQgc3RvcF9mZDsKJiM0MzsJdm9pZCAqcGFnZV9idWZmZXI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcGFnZV9zaXplOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKnVmZmRfaGFuZGxlcl90aHJlYWQodm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJc3RydWN0IHVmZmRfdGhyZWFkX2FyZ3MgKmFyZ3MgPSBhcmc7CiYjNDM7CXN0cnVjdCB1ZmZkX21zZyBtc2c7CiYjNDM7CXN0cnVjdCB1ZmZkaW9fY29weSBjb3B5OwomIzQzOwlzdHJ1Y3QgcG9sbGZkIHBvbGxmZFsyXTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcG9sbGZkWzBdLmZkID0gYXJncy0mZ3Q7dWZmZDsKJiM0MzsJcG9sbGZkWzBdLmV2ZW50cyA9IFBPTExJTjsKJiM0MzsJcG9sbGZkWzFdLmZkID0gYXJncy0mZ3Q7c3RvcF9mZDsKJiM0MzsJcG9sbGZkWzFdLmV2ZW50cyA9IFBPTExJTjsKJiM0MzsKJiM0MzsJd2hpbGUgKDEpIHsKJiM0MzsJCXJldCA9IHBvbGwocG9sbGZkLCAyLCAtMSk7CiYjNDM7CQlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlpZiAocG9sbGZkWzFdLnJldmVudHMpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlpZiAoIShwb2xsZmRbMF0ucmV2ZW50cyAmYW1wOyBQT0xMSU4pKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJcmV0ID0gcmVhZChhcmdzLSZndDt1ZmZkLCAmYW1wO21zZywgc2l6ZW9mKG1zZykpOwomIzQzOwkJaWYgKHJldCAhPSBzaXplb2YobXNnKSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWlmIChtc2cuZXZlbnQgIT0gVUZGRF9FVkVOVF9QQUdFRkFVTFQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBGaWxsIHRoZSBwYWdlIHdpdGggYSBrbm93biBwYXR0ZXJuICovCiYjNDM7CQltZW1zZXQoYXJncy0mZ3Q7cGFnZV9idWZmZXIsIDB4QUIsIGFyZ3MtJmd0O3BhZ2Vfc2l6ZSk7CiYjNDM7CiYjNDM7CQljb3B5LmRzdCA9IG1zZy5hcmcucGFnZWZhdWx0LmFkZHJlc3MgJmFtcDsgfihhcmdzLSZndDtwYWdlX3NpemUgLSAxKTsKJiM0MzsJCWNvcHkuc3JjID0gKHVuc2lnbmVkIGxvbmcpYXJncy0mZ3Q7cGFnZV9idWZmZXI7CiYjNDM7CQljb3B5LmxlbiA9IGFyZ3MtJmd0O3BhZ2Vfc2l6ZTsKJiM0MzsJCWNvcHkubW9kZSA9IDA7CiYjNDM7CQljb3B5LmNvcHkgPSAwOwomIzQzOwomIzQzOwkJcmV0ID0gaW9jdGwoYXJncy0mZ3Q7dWZmZCwgVUZGRElPX0NPUFksICZhbXA7Y29weSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGhtbSwgdXNlcmZhdWx0ZmRfcmVhZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBobW1fYnVmZmVyICpidWZmZXI7CiYjNDM7CXN0cnVjdCB1ZmZkX3RocmVhZF9hcmdzIHVmZmRfYXJnczsKJiM0MzsJdW5zaWduZWQgbG9uZyBucGFnZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwomIzQzOwl1bnNpZ25lZCBjaGFyICpwdHI7CiYjNDM7CXB0aHJlYWRfdCB0aHJlYWQ7CiYjNDM7CWludCB1ZmZkOwomIzQzOwlpbnQgc3RvcF9mZDsKJiM0MzsJaW50IHJldDsKJiM0MzsJc3RydWN0IHVmZmRpb19hcGkgYXBpOwomIzQzOwlzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHJlZzsKJiM0MzsJdWludDY0X3Qgc3RvcCA9IDE7CiYjNDM7CXNzaXplX3QgbndyaXRlOwomIzQzOwomIzQzOwlucGFnZXMgPSA0OwomIzQzOwlzaXplID0gbnBhZ2VzICZsdDsmbHQ7IHNlbGYtJmd0O3BhZ2Vfc2hpZnQ7CiYjNDM7CiYjNDM7CS8qIENyZWF0ZSB1c2VyZmF1bHRmZCAqLwomIzQzOwl1ZmZkID0gc3lzY2FsbChfX05SX3VzZXJmYXVsdGZkLCBPX0NMT0VYRUMgfCBPX05PTkJMT0NLKTsKJiM0MzsJaWYgKHVmZmQgJmx0OyAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7dXNlcmZhdWx0ZmQgbm90IGF2YWlsYWJsZSYjMzQ7KTsKJiM0MzsKJiM0MzsJYXBpLmFwaSA9IFVGRkRfQVBJOwomIzQzOwlhcGkuZmVhdHVyZXMgPSAwOwomIzQzOwlyZXQgPSBpb2N0bCh1ZmZkLCBVRkZESU9fQVBJLCAmYW1wO2FwaSk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwomIzQzOwomIzQzOwlidWZmZXIgPSBtYWxsb2Moc2l6ZW9mKCpidWZmZXIpKTsKJiM0MzsJQVNTRVJUX05FKGJ1ZmZlciwgTlVMTCk7CiYjNDM7CiYjNDM7CWJ1ZmZlci0mZ3Q7ZmQgPSAtMTsKJiM0MzsJYnVmZmVyLSZndDtzaXplID0gc2l6ZTsKJiM0MzsJYnVmZmVyLSZndDttaXJyb3IgPSBtYWxsb2Moc2l6ZSk7CiYjNDM7CUFTU0VSVF9ORShidWZmZXItJmd0O21pcnJvciwgTlVMTCk7CiYjNDM7CiYjNDM7CS8qIENyZWF0ZSBhbm9ueW1vdXMgbWFwcGluZyAqLwomIzQzOwlidWZmZXItJmd0O3B0ciA9IG1tYXAoTlVMTCwgc2l6ZSwKJiM0MzsJCQkgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJCSAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywKJiM0MzsJCQkgICAtMSwgMCk7CiYjNDM7CUFTU0VSVF9ORShidWZmZXItJmd0O3B0ciwgTUFQX0ZBSUxFRCk7CiYjNDM7CiYjNDM7CS8qIFJlZ2lzdGVyIHRoZSByZWdpb24gd2l0aCB1c2VyZmF1bHRmZCAqLwomIzQzOwlyZWcucmFuZ2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZylidWZmZXItJmd0O3B0cjsKJiM0MzsJcmVnLnJhbmdlLmxlbiA9IHNpemU7CiYjNDM7CXJlZy5tb2RlID0gVUZGRElPX1JFR0lTVEVSX01PREVfTUlTU0lORzsKJiM0MzsJcmV0ID0gaW9jdGwodWZmZCwgVUZGRElPX1JFR0lTVEVSLCAmYW1wO3JlZyk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwomIzQzOwomIzQzOwkvKiBTZXQgdXAgdGhlIGhhbmRsZXIgdGhyZWFkICovCiYjNDM7CXVmZmRfYXJncy51ZmZkID0gdWZmZDsKJiM0MzsJc3RvcF9mZCA9IGV2ZW50ZmQoMCwgRUZEX0NMT0VYRUMpOwomIzQzOwlBU1NFUlRfR0Uoc3RvcF9mZCwgMCk7CiYjNDM7CXVmZmRfYXJncy5zdG9wX2ZkID0gc3RvcF9mZDsKJiM0MzsJdWZmZF9hcmdzLnBhZ2VfYnVmZmVyID0gbWFsbG9jKHNlbGYtJmd0O3BhZ2Vfc2l6ZSk7CiYjNDM7CUFTU0VSVF9ORSh1ZmZkX2FyZ3MucGFnZV9idWZmZXIsIE5VTEwpOwomIzQzOwl1ZmZkX2FyZ3MucGFnZV9zaXplID0gc2VsZi0mZ3Q7cGFnZV9zaXplOwomIzQzOwomIzQzOwlyZXQgPSBwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgTlVMTCwgdWZmZF9oYW5kbGVyX3RocmVhZCwgJmFtcDt1ZmZkX2FyZ3MpOwomIzQzOwlBU1NFUlRfRVEocmV0LCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVXNlIHRoZSB1bmxvY2tlZCByZWFkIHBhdGggd2hpY2ggYWxsb3dzIHRoZSBtbWFwIGxvY2sgdG8gYmUKJiM0MzsJICogZHJvcHBlZCBkdXJpbmcgdGhlIGZhdWx0LCBlbmFibGluZyB1c2VyZmF1bHRmZCByZXNvbHV0aW9uLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtJmd0O2ZkLCBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VELAomIzQzOwkJCSAgICAgIGJ1ZmZlciwgbnBhZ2VzKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMCk7CiYjNDM7CUFTU0VSVF9FUShidWZmZXItJmd0O2NwYWdlcywgbnBhZ2VzKTsKJiM0MzsKJiM0MzsJLyogVmVyaWZ5IHRoZSBkZXZpY2UgcmVhZCB0aGUgZGF0YSBmaWxsZWQgYnkgdGhlIHVmZmQgaGFuZGxlciAqLwomIzQzOwlwdHIgPSBidWZmZXItJmd0O21pcnJvcjsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHNpemU7ICYjNDM7JiM0MztpKQomIzQzOwkJQVNTRVJUX0VRKHB0cltpXSwgKHVuc2lnbmVkIGNoYXIpMHhBQik7CiYjNDM7CiYjNDM7CW53cml0ZSA9IHdyaXRlKHN0b3BfZmQsICZhbXA7c3RvcCwgc2l6ZW9mKHN0b3ApKTsKJiM0MzsJQVNTRVJUX0VRKG53cml0ZSwgc2l6ZW9mKHN0b3ApKTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7CiYjNDM7CWNsb3NlKHN0b3BfZmQpOwomIzQzOwlmcmVlKHVmZmRfYXJncy5wYWdlX2J1ZmZlcik7CiYjNDM7CWNsb3NlKHVmZmQpOwomIzQzOwlobW1fYnVmZmVyX2ZyZWUoYnVmZmVyKTsKJiM0Mzt9CiYjNDM7CiBURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYxMAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBITU0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgSE1NIHBhdGNoLCBhbmQgaXQgc2VlbXMgbGlrZSBhIGZhaXJseSB0YXJnZXRlZCBjaGFuZ2UuIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhbGxvd2luZyB1cyB0byBkcm9wIHRoZSBtbWFwIGxvY2sgZHVyaW5nIHBhZ2UgZmF1bHRzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKClgIGZ1bmN0aW9uIGlzIHRoZSBrZXksIGFuZCBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSBiZW5lZmljaWFsIGZvciByZWdpb25zIG1hbmFnZWQgYnkgYHVzZXJmYXVsdGZkYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIE1pbmltaXppbmcgbG9jayBjb250ZW50aW9uIGR1cmluZyBmYXVsdCBoYW5kbGluZyBpcyBhbHdheXMgYSBnb29kIHRoaW5nLCBlc3BlY2lhbGx5IGluIHRoaXMgY29udGV4dC4KClRoZSBwYXRjaCB0b3VjaGVzIGEgZ29vZCBudW1iZXIgb2YgZmlsZXM6IGBtbS9obW0uY2AsIHRoZSBpbmNsdWRlIGZpbGVzLCB0aGUgdGVzdCBjb2RlIChgbGliL3Rlc3RfaG1tLmNgKSwgdGhlIEh5cGVyLVYgZHJpdmVyIChgZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuY2ApLCBhbmQgYSBzZWxmLXRlc3QuIFRoaXMgaW5kaWNhdGVzIGEgZ29vZCBsZXZlbCBvZiBzY29wZSBhbmQgaW1wYWN0LCB0b3VjaGluZyBib3RoIGNvcmUgSE1NIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZSByZWxldmFudCB1c2VyIHNwYWNlIGludGVyZmFjZXMgYW5kIGRyaXZlcnMuCgpGdW5jdGlvbmFsbHksIHRoaXMgbG9va3Mgc291bmQuIFdlJiMzOTt2ZSBnb3QgdGhlIG5ldyBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkYCBBUEksIGFuZCB0aGUgZXhpc3RpbmcgYGhtbV9yYW5nZV9mYXVsdGAgaGFzIGJlZW4gcmV3b3JrZWQgdG8gdXRpbGl6ZSBhIGNvbW1vbiBpbnRlcm5hbCBmdW5jdGlvbi4gVGhlIEh5cGVyLVYgZHJpdmVyIChgbXNodl9yZWdpb25zLmNgKSBpcyB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IEFQSSwgc28gd2UgaGF2ZSBhIGNvbmNyZXRlIHVzZSBjYXNlLiBBbmQsIGltcG9ydGFudGx5LCB0aGVyZSYjMzk7cyBhIG5ldyBgSE1NX0RNSVJST1JfUkVBRF9VTkxPQ0tFRGAgaW9jdGwgYWRkZWQgdG8gdGhlIHRlc3QgY29kZSwgd2hpY2ggZ2l2ZXMgdXMgYSBkZWRpY2F0ZWQgbWVjaGFuaXNtIHRvIGFjdHVhbGx5ICp0ZXN0KiB0aGlzIG5ldyB1bmxvY2tlZCBmdW5jdGlvbmFsaXR5LgoKUmVhY2hhYmxlIGNvZGUgaXMgY3JpdGljYWwuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBjb2RlIGlzIGFjdHVhbGx5ICp1c2VkKi4gYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZGAgaXMgZXhwb3J0ZWQsIGFuZCBpdCYjMzk7cyBiZWluZyB1c2VkIGJ5IGB0ZXN0X2htbS5jYCAoYSB0ZXN0IG1vZHVsZSwgZ29vZCEpIGFuZCBgbXNodl9yZWdpb25zLmNgIChIeXBlci1WKS4gU28sIHRoZSByZWFjaGFiaWxpdHkgc2VlbXMgc29saWQuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgYnVpbGQgY29uZmlnIG9wdGlvbnMgdG8gdmVyaWZ5IHRoZXkgYXJlIGFjdGl2ZS4KCk5vdywgdG8gbWFrZSBzdXJlIHRoZSBjb2RlIGlzIGFjdHVhbGx5ICplbmFibGVkKiBpbiByZWxldmFudCBjb25maWd1cmF0aW9ucywgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGZvciBgQ09ORklHX1RFU1RfSE1NYCwgYENPTkZJR19IWVBFUlZgLCBhbmQgYENPTkZJR19NU0hWYC4gTGV0IG1lIGZpcmUgdXAgbXkgYGdyZXBwZXJgIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgc2V0dGluZ3MgYXJlIGZvciB0aGlzIGNvZGUuIFRoaXMgd2lsbCBjb25maXJtIHRoZSBwYXRjaCYjMzk7cyBpbnRlZ3JhdGlvbiBpbnRvIHRoZSBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIxOD1zaG91bGQgY2FsbDo6XG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjE5LVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjIyMDogIGludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIyMS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yMjI9VGhlIGNhbGxlciBtdXN0IG5vdCBob2xkIGBgbW1hcF9yZWFkX2xvY2tgYCBiZWZvcmUgdGhlIGNhbGwuXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjIzOmBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKClgYCB0YWtlcyB0aGUgbW1hcCByZWFkIGxvY2sgaW50ZXJuYWxseSBhbmQgYWxsb3dzXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjI0LWBgaGFuZGxlX21tX2ZhdWx0KClgYCB0byBkcm9wIGl0IGR1cmluZyBmYXVsdCBoYW5kbGluZy4gSWYgdGhlIG1tYXAgbG9jayBpc1xuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yMjk9QSB0eXBpY2FsIGNhbGxlciBsb29rcyBsaWtlIHRoaXM6OlxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNDUtICAgICAgcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4oXHUwMDI2aW50ZXJ2YWxfc3ViKTtcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyNDY6ICAgICAgcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKFx1MDAyNnJhbmdlKTtcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNDctICAgICAgaWYgKHJldCkge1xuLS1cbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM9Mzc5PWludCBtc2h2X3JlZ2lvbl9nZXQoc3RydWN0IG1zaHZfbWVtX3JlZ2lvbiAqcmVnaW9uKVxuLS1cbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtMzk0LSAqICAgIElmIGl0IGhhcywgcmVsZWFzZXMgdGhlIG11dGV4IGFuZCByZXR1cm5zIC1FQlVTWSB0byBtYXRjaCB3aXRoXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jOjM5NTogKiAgICBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKSBzbyB0aGUgY2FsbGVyIHJldHJpZXMgdGhlIHJhbmdlIGZhdWx0LlxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy0zOTYtICpcbi0tXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jPTM5OT1zdGF0aWMgaW50IG1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9jayhzdHJ1Y3QgbXNodl9tZW1fcmVnaW9uICpyZWdpb24sXG4tLVxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy00MDQtXHRyYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS1cdTAwM2Vub3RpZmllcik7XG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jOjQwNTpcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZChyYW5nZSk7XG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jLTQwNi1cdGlmIChyZXQpXG4tLVxuaW5jbHVkZS9saW51eC9obW0uaD0xMjU9aW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XG5pbmNsdWRlL2xpbnV4L2htbS5oOjEyNjppbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTtcbmluY2x1ZGUvbGludXgvaG1tLmgtMTI3LVxuLS1cbmxpYi90ZXN0X2htbS5jPTM5Mj1zdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4tLVxubGliL3Rlc3RfaG1tLmMtNDA1LVx0XHRyYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS1cdTAwM2Vub3RpZmllcik7XG5saWIvdGVzdF9obW0uYzo0MDY6XHRcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZChyYW5nZSk7XG5saWIvdGVzdF9obW0uYy00MDctXHRcdGlmIChyZXQpIHtcbi0tXG5tbS9obW0uYz02ODg9c3RhdGljIGludCBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLCBpbnQgKmxvY2tlZClcbi0tXG5tbS9obW0uYy03NTMtICogRm9yIGEgdmFyaWFudCB0aGF0IGFsbG93cyB0aGUgbW1hcCBsb2NrIHRvIGJlIGRyb3BwZWQgZHVyaW5nIGZhdWx0cyAoZS5nLixcbm1tL2htbS5jOjc1NDogKiBmb3IgdXNlcmZhdWx0ZmQgc3VwcG9ydCksIHNlZSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKS5cbm1tL2htbS5jLTc1NS0gKi9cbi0tXG5tbS9obW0uYz03NjA9RVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHQpO1xuLS1cbm1tL2htbS5jLTc2Mi0vKipcbm1tL2htbS5jOjc2MzogKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQgLSBmYXVsdCBpbiBhIHJhbmdlLCBwb3NzaWJseSBkcm9wcGluZyB0aGUgbW1hcCBsb2NrXG5tbS9obW0uYy03NjQtICogQHJhbmdlOlx0YXJndW1lbnQgc3RydWN0dXJlXG4tLVxubW0vaG1tLmMtNzc1LSAqL1xubW0vaG1tLmM6Nzc2OmludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXG5tbS9obW0uYy03Nzcte1xuLS1cbm1tL2htbS5jLTc4OC19XG5tbS9obW0uYzo3ODk6RVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQpO1xubW0vaG1tLmMtNzkwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTI5MDE9VEVTVF9GX1RJTUVPVVQoaG1tLCBiZW5jaG1hcmtfdGhwX21pZ3JhdGlvbiwgMTIwKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5NTctICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6Mjk1ODogKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKSBwYXRoLiBUaGlzIGV4ZXJjaXNlcyB0aGUgbG9jay1kcm9wIHJldHJ5XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yOTU5LSAqIGxvZ2ljIGluIHRoZSBITU0gZnJhbWV3b3JrLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjgzCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBSZWxldmFudCBDb25maWd1cmF0aW9uIEZpbGVzKioKClJpZ2h0LCBiZWZvcmUgcHJvY2VlZGluZyBmdXJ0aGVyLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFmZmFpcnMgcmVnYXJkaW5nIHRoZSBITU0gdGVzdGluZyBhbmQgdGhlIGh5cGVydmlzb3IgcmVnaW9ucy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9mIGBsaWIvdGVzdF9obW0uY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHRlc3QgSE1NIGlzIGNvcnJlY3RseSBjb25maWd1cmVkIGFuZCB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG9idmlvdXMgcmVkIGZsYWdzIHRoZXJlLiBUaGVuIEkmIzM5O2xsIHNoaWZ0IGdlYXJzIGFuZCBjaGVjayB0aGUgYGRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNgIGNvbmZpZy4gSSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IHJlZ2lvbiBzZXR0aW5ncywgcGFydGljdWxhcmx5IHRob3NlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hcHBpbmcgb3IgYWRkcmVzcyBzcGFjZSBhbGxvY2F0aW9uLCBoYXZlbiYjMzk7dCBiZWVuIGNvbmZpZ3VyZWQgaW4gYSB3YXkgdGhhdCB3b3VsZCBpbnRlcmZlcmUgd2l0aCB0aGUgSE1NIHRlc3RzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHRoZXNlIHR3byBjb25maWd1cmF0aW9uIGFyZWFzLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHNhbml0eSBjaGVjayB0byBydWxlIG91dCBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gcHJvYmxlbXMgYmVmb3JlIEkgc3RhcnQgZGVlcGVyIGRlYnVnZ2luZyBvciBtYWtlIGNvZGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZXN0X2htbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtNQUlOVEFJTkVSUz0xMTg1Mz1GOlx0aW5jbHVkZS9saW51eC9obW0qXG5NQUlOVEFJTkVSUzoxMTg1NDpGOlx0bGliL3Rlc3RfaG1tKlxuTUFJTlRBSU5FUlMtMTE4NTUtRjpcdG1tL2htbSpcbi0tXG5saWIvTWFrZWZpbGU9MTAyPW9iai0kKENPTkZJR19URVNUX0xPQ0tVUCkgJiM0Mzs9IHRlc3RfbG9ja3VwLm9cbmxpYi9NYWtlZmlsZToxMDM6b2JqLSQoQ09ORklHX1RFU1RfSE1NKSAmIzQzOz0gdGVzdF9obW0ub1xubGliL01ha2VmaWxlLTEwNC1vYmotJChDT05GSUdfVEVTVF9GUkVFX1BBR0VTKSAmIzQzOz0gdGVzdF9mcmVlX3BhZ2VzLm9cbi0tXG5saWIvdGVzdF9obW0uYy0zMi1cbmxpYi90ZXN0X2htbS5jOjMzOiNpbmNsdWRlIFwmIzM0O3Rlc3RfaG1tX3VhcGkuaFwmIzM0O1xubGliL3Rlc3RfaG1tLmMtMzQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGU9MTgxPVRFU1RfRklMRVMgOj0gdGVzdF92bWFsbG9jLnNoXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZToxODI6VEVTVF9GSUxFUyAmIzQzOz0gdGVzdF9obW0uc2hcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlLTE4My1URVNUX0ZJTEVTICYjNDM7PSB2YV9oaWdoX2FkZHJfc3dpdGNoLnNoXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNDAtICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo0MTojaW5jbHVkZSBcdTAwM2NsaWIvdGVzdF9obW1fdWFwaS5oXHUwMDNlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy00Mi0jaW5jbHVkZSBcdTAwM2NtbS9ndXBfdGVzdC5oXHUwMDNlXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2g9MzQxPUNBVEVHT1JZPVwmIzM0O21yZW1hcFwmIzM0OyBydW5fdGVzdCAuL21yZW1hcF9kb250dW5tYXBcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoLTM0Mi1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoOjM0MzpDQVRFR09SWT1cJiMzNDtobW1cJiMzNDsgcnVuX3Rlc3QgYmFzaCAuL3Rlc3RfaG1tLnNoIHNtb2tlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaC0zNDQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGVzdF9obW0uc2gtMTEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaDoxMjpURVNUX05BTUU9XCYjMzQ7dGVzdF9obW1cJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoOjEzOkRSSVZFUj1cJiMzNDt0ZXN0X2htbVwmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGVzdF9obW0uc2gtMTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MzEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIGBDT05GSUdfVEVTVF9ITU1gIC0gdGhhdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpdCYjMzk7cyB0aGUgZmxhZyB0aGF0IGNvbnRyb2xzIHRoZSBidWlsZCBpbmNsdXNpb24gZm9yIGB0ZXN0X2htbS5jYC4gRWFzeSBlbm91Z2guIEJ1dCBub3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8ga2VlcCB0aGUgY29kZSBvcmdhbml6ZWQgYW5kIGF2b2lkIGFueSBjb25maWd1cmF0aW9uIGNvbmZsaWN0cy4gVGhhdCBicmluZ3MgbWUgdG8gdGhlIG5leHQgZmlsZSBJIG5lZWQgdG8gY29uc2lkZXIsIHdoaWNoIGlzIGBtc2h2X3JlZ2lvbnMuY2AuIEkgaGF2ZSB0byBub3cgYmVnaW4gdGhlIHByb2Nlc3MgdG8gdGhpbmsgdGhyb3VnaCBpdHMgY29uZmlnIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXNodl9yZWdpb25zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaHYvTWFrZWZpbGU9MTY9bXNodl9yb290LXkgOj0gbXNodl9yb290X21haW4ubyBtc2h2X3N5bmljLm8gbXNodl9ldmVudGZkLm8gbXNodl9pcnEubyBcXFxuZHJpdmVycy9odi9NYWtlZmlsZToxNzpcdCAgICAgICBtc2h2X3Jvb3RfaHZfY2FsbC5vIG1zaHZfcG9ydGlkX3RhYmxlLm8gbXNodl9yZWdpb25zLm9cbmRyaXZlcnMvaHYvTWFrZWZpbGUtMTgtbXNodl9yb290LSQoQ09ORklHX0RFQlVHX0ZTKSAmIzQzOz0gbXNodl9kZWJ1Z2ZzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg2MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBIeXBlci1WIERyaXZlciBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgbXNodl9yb290YCBpcyBkZWZpbmVkIG9yIHVzZWQgd2l0aGluIHRoZSBIeXBlci1WIGRyaXZlciBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCBsb2NhdGVkIGluIHRoZSBgZHJpdmVycy9odi9gIGRpcmVjdG9yeS4gVGhhdCBmaWxlIGlzIHVzdWFsbHkgdGhlIGNlbnRyYWwgcG9pbnQgb2YgY29uZmlndXJhdGlvbiBmb3IgdGhhdCBlbnRpcmUgcGFydCBvZiB0aGUga2VybmVsLCBzbyBpdOKAmXMgdGhlIGxvZ2ljYWwgZmlyc3QgcGxhY2UgdG8gbG9vay4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBkZWZpbml0aW9uIG9yIHJlZmVyZW5jZSwgYW5kIEkgd29uJiMzOTt0IGhhdmUgdG8gdHJhY2UgdGhyb3VnaCBpbmNsdWRlIGZpbGVzIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIHRvIGZpbmQgaXQuIFRpbWUgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXNodl9yb290JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaHYvTWFrZWZpbGU9ND1vYmotJChDT05GSUdfSFlQRVJWX0JBTExPT04pXHQmIzQzOz0gaHZfYmFsbG9vbi5vXG5kcml2ZXJzL2h2L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX01TSFZfUk9PVClcdFx0JiM0Mzs9IG1zaHZfcm9vdC5vXG5kcml2ZXJzL2h2L01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX01TSFZfVlRMKSAgICAgICAgICAmIzQzOz0gbXNodl92dGwub1xuLS1cbmRyaXZlcnMvaHYvTWFrZWZpbGU9MTU9aHZfdXRpbHMteSA6PSBodl91dGlsLm8gaHZfa3ZwLm8gaHZfc25hcHNob3QubyBodl91dGlsc190cmFuc3BvcnQub1xuZHJpdmVycy9odi9NYWtlZmlsZToxNjptc2h2X3Jvb3QteSA6PSBtc2h2X3Jvb3RfbWFpbi5vIG1zaHZfc3luaWMubyBtc2h2X2V2ZW50ZmQubyBtc2h2X2lycS5vIFxcXG5kcml2ZXJzL2h2L01ha2VmaWxlOjE3Olx0ICAgICAgIG1zaHZfcm9vdF9odl9jYWxsLm8gbXNodl9wb3J0aWRfdGFibGUubyBtc2h2X3JlZ2lvbnMub1xuZHJpdmVycy9odi9NYWtlZmlsZToxODptc2h2X3Jvb3QtJChDT05GSUdfREVCVUdfRlMpICYjNDM7PSBtc2h2X2RlYnVnZnMub1xuZHJpdmVycy9odi9NYWtlZmlsZToxOTptc2h2X3Jvb3QtJChDT05GSUdfVFJBQ0VQT0lOVFMpICYjNDM7PSBtc2h2X3RyYWNlLm9cbmRyaXZlcnMvaHYvTWFrZWZpbGUtMjAtbXNodl92dGwteSA6PSBtc2h2X3Z0bF9tYWluLm9cbi0tXG5kcml2ZXJzL2h2L21zaHZfZGVidWdmcy5jLTE2LSNpbmNsdWRlIFwmIzM0O21zaHYuaFwmIzM0O1xuZHJpdmVycy9odi9tc2h2X2RlYnVnZnMuYzoxNzojaW5jbHVkZSBcJiMzNDttc2h2X3Jvb3QuaFwmIzM0O1xuZHJpdmVycy9odi9tc2h2X2RlYnVnZnMuYy0xOC1cbi0tXG5kcml2ZXJzL2h2L21zaHZfZXZlbnRmZC5jLTI1LSNpbmNsdWRlIFwmIzM0O21zaHYuaFwmIzM0O1xuZHJpdmVycy9odi9tc2h2X2V2ZW50ZmQuYzoyNjojaW5jbHVkZSBcJiMzNDttc2h2X3Jvb3QuaFwmIzM0O1xuZHJpdmVycy9odi9tc2h2X2V2ZW50ZmQuYy0yNy1cbi0tXG5kcml2ZXJzL2h2L21zaHZfZXZlbnRmZC5oLTEzLSNpbmNsdWRlIFwmIzM0O21zaHYuaFwmIzM0O1xuZHJpdmVycy9odi9tc2h2X2V2ZW50ZmQuaDoxNDojaW5jbHVkZSBcJiMzNDttc2h2X3Jvb3QuaFwmIzM0O1xuZHJpdmVycy9odi9tc2h2X2V2ZW50ZmQuaC0xNS1cbi0tXG5kcml2ZXJzL2h2L21zaHZfaXJxLmMtMTQtI2luY2x1ZGUgXCYjMzQ7bXNodi5oXCYjMzQ7XG5kcml2ZXJzL2h2L21zaHZfaXJxLmM6MTU6I2luY2x1ZGUgXCYjMzQ7bXNodl9yb290LmhcJiMzNDtcbmRyaXZlcnMvaHYvbXNodl9pcnEuYy0xNi1cbi0tXG5kcml2ZXJzL2h2L21zaHZfcG9ydGlkX3RhYmxlLmMtOC0jaW5jbHVkZSBcJiMzNDttc2h2LmhcJiMzNDtcbmRyaXZlcnMvaHYvbXNodl9wb3J0aWRfdGFibGUuYzo5OiNpbmNsdWRlIFwmIzM0O21zaHZfcm9vdC5oXCYjMzQ7XG5kcml2ZXJzL2h2L21zaHZfcG9ydGlkX3RhYmxlLmMtMTAtXG4tLVxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy00LSAqXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jOjU6ICogTWVtb3J5IHJlZ2lvbiBtYW5hZ2VtZW50IGZvciBtc2h2X3Jvb3QgbW9kdWxlLlxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy02LSAqXG4tLVxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy0xNy1cbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM6MTg6I2luY2x1ZGUgXCYjMzQ7bXNodl9yb290LmhcJiMzNDtcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtMTktXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3QuaD0xODc9c3RydWN0IGh2X3N5bmljX3BhZ2VzIHtcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdC5oLTE5Mi1cbmRyaXZlcnMvaHYvbXNodl9yb290Lmg6MTkzOnN0cnVjdCBtc2h2X3Jvb3Qge1xuZHJpdmVycy9odi9tc2h2X3Jvb3QuaC0xOTQtXHRzcGlubG9ja190IHB0X2h0X2xvY2s7XG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3QuaD0zNjE9c3RhdGljIGlubGluZSB2b2lkIG1zaHZfZGVidWdmc192cF9yZW1vdmUoc3RydWN0IG1zaHZfdnAgKnZwKSB7IH1cbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdC5oLTM2My1cbmRyaXZlcnMvaHYvbXNodl9yb290Lmg6MzY0OmV4dGVybiBzdHJ1Y3QgbXNodl9yb290IG1zaHZfcm9vdDtcbmRyaXZlcnMvaHYvbXNodl9yb290LmgtMzY1LWV4dGVybiBlbnVtIGh2X3NjaGVkdWxlcl90eXBlIGh2X3NjaGVkdWxlcl90eXBlO1xuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYy00LSAqXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmM6NTogKiBIeXBlcmNhbGwgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBtc2h2X3Jvb3QgbW9kdWxlLlxuZHJpdmVycy9odi9tc2h2X3Jvb3RfaHZfY2FsbC5jLTYtICpcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmMtMTQtXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmM6MTU6I2luY2x1ZGUgXCYjMzQ7bXNodl9yb290LmhcJiMzNDtcbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYy0xNi1cbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmM9NTkxPXN0YXRpYyBib29sIG1zaHZfdXNlX292ZXJsYXlfZ3Bmbih2b2lkKVxuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYy01OTMtXHRyZXR1cm4gaHZfbDF2aF9wYXJ0aXRpb24oKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYzo1OTQ6XHQgICAgICAgbXNodl9yb290LnZtbV9jYXBzLnZtbV9jYW5fcHJvdmlkZV9vdmVybGF5X2dwZm47XG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmMtNTk1LX1cbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtNC0gKlxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjU6ICogVGhlIG1haW4gcGFydCBvZiB0aGUgbXNodl9yb290IG1vZHVsZSwgcHJvdmlkaW5nIEFQSXMgdG8gY3JlYXRlXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtNi0gKiBhbmQgbWFuYWdlIGd1ZXN0IHBhcnRpdGlvbnMuXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTM1LSNpbmNsdWRlIFwmIzM0O21zaHYuaFwmIzM0O1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjM2OiNpbmNsdWRlIFwmIzM0O21zaHZfcm9vdC5oXCYjMzQ7XG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMzctXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTQwPU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNaWNyb3NvZnQgSHlwZXItViByb290IHBhcnRpdGlvbiBWTU0gaW50ZXJmYWNlIC9kZXYvbXNodlwmIzM0Oyk7XG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTQ4LVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjQ5OnN0cnVjdCBtc2h2X3Jvb3QgbXNodl9yb290O1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTUwLVxuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYz0xNzA9c3RhdGljIGludCBtc2h2X2lvY3RsX3Bhc3N0aHJ1X2h2Y2FsbChzdHJ1Y3QgbXNodl9wYXJ0aXRpb24gKnBhcnRpdGlvbixcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTc2LVx0Ym9vbCBpc19hc3luYztcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoxNzc6XHRzdHJ1Y3QgbXNodl9yb290X2h2Y2FsbCBhcmdzO1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTE3OC1cdHN0cnVjdCBwYWdlICpwYWdlO1xuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYz0xNzY2PXJlbW92ZV9wYXJ0aXRpb24oc3RydWN0IG1zaHZfcGFydGl0aW9uICpwYXJ0aXRpb24pXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTc2Ny17XG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MTc2ODpcdHNwaW5fbG9jayhcdTAwMjZtc2h2X3Jvb3QucHRfaHRfbG9jayk7XG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTc2OS1cdGhsaXN0X2RlbF9yY3UoXHUwMDI2cGFydGl0aW9uLVx1MDAzZXB0X2hub2RlKTtcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoxNzcwOlx0c3Bpbl91bmxvY2soXHUwMDI2bXNodl9yb290LnB0X2h0X2xvY2spO1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTE3NzEtXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTE4NzU9bXNodl9wYXJ0aXRpb24gKm1zaHZfcGFydGl0aW9uX2ZpbmQodTY0IHBhcnRpdGlvbl9pZClcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTg3OS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoxODgwOlx0aGFzaF9mb3JfZWFjaF9wb3NzaWJsZV9yY3UobXNodl9yb290LnB0X2h0YWJsZSwgcCwgcHRfaG5vZGUsXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTg4MS1cdFx0XHRcdCAgIHBhcnRpdGlvbl9pZClcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9MTkxMj1hZGRfcGFydGl0aW9uKHN0cnVjdCBtc2h2X3BhcnRpdGlvbiAqcGFydGl0aW9uKVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTE5MTMte1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjE5MTQ6XHRzcGluX2xvY2soXHUwMDI2bXNodl9yb290LnB0X2h0X2xvY2spO1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTE5MTUtXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MTkxNjpcdGhhc2hfYWRkX3JjdShtc2h2X3Jvb3QucHRfaHRhYmxlLCBcdTAwMjZwYXJ0aXRpb24tXHUwMDNlcHRfaG5vZGUsXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTkxNy1cdFx0ICAgICBwYXJ0aXRpb24tXHUwMDNlcHRfaWQpO1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTE5MTgtXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MTkxOTpcdHNwaW5fdW5sb2NrKFx1MDAyNm1zaHZfcm9vdC5wdF9odF9sb2NrKTtcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0xOTIwLVxuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYz0yMTMwPW1zaHZfZGV2X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIxMzQtXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjEzNTpzdGF0aWMgaW50IG1zaHZfcm9vdF9zY2hlZF9vbmxpbmU7XG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjEzNi1cbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9MjE1Mz1zdGF0aWMgaW50IF9faW5pdCBsMXZoX3JldHJpZXZlX3NjaGVkdWxlcl90eXBlKGVudW0gaHZfc2NoZWR1bGVyX3R5cGUgKm91dClcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjE1OS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyMTYwOlx0aWYgKCFtc2h2X3Jvb3Qudm1tX2NhcHMudm1tX2VuYWJsZV9pbnRlZ3JhdGVkX3NjaGVkdWxlcilcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMTYxLVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9MjIwNj1zdGF0aWMgaW50IF9faW5pdCBtc2h2X3JldHJpZXZlX3NjaGVkdWxlcl90eXBlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjIzNS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyMjM2OnN0YXRpYyBpbnQgbXNodl9yb290X3NjaGVkdWxlcl9pbml0KHVuc2lnbmVkIGludCBjcHUpXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjIzNy17XG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIyNTMtXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjI1NDpzdGF0aWMgaW50IG1zaHZfcm9vdF9zY2hlZHVsZXJfY2xlYW51cCh1bnNpZ25lZCBpbnQgY3B1KVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIyNTUte1xuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYz0yMjczPXJvb3Rfc2NoZWR1bGVyX2luaXQoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMjg4LVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjIyODk6XHRyZXQgPSBjcHVocF9zZXR1cF9zdGF0ZShDUFVIUF9BUF9PTkxJTkVfRFlOLCBcJiMzNDttc2h2X3Jvb3Rfc2NoZWRcJiMzNDssXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjI5MDpcdFx0XHRcdG1zaHZfcm9vdF9zY2hlZHVsZXJfaW5pdCxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyMjkxOlx0XHRcdFx0bXNodl9yb290X3NjaGVkdWxlcl9jbGVhbnVwKTtcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMjkyLVxuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMjk3LVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjIyOTg6XHRtc2h2X3Jvb3Rfc2NoZWRfb25saW5lID0gcmV0O1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIyOTktXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTIzMDk9cm9vdF9zY2hlZHVsZXJfZGVpbml0KHZvaWQpXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIzMTMtXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjMxNDpcdGNwdWhwX3JlbW92ZV9zdGF0ZShtc2h2X3Jvb3Rfc2NoZWRfb25saW5lKTtcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMzE1LVx0ZnJlZV9wZXJjcHUocm9vdF9zY2hlZHVsZXJfaW5wdXQpO1xuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYz0yMzE5PXN0YXRpYyBpbnQgX19pbml0IG1zaHZfaW5pdF92bW1fY2FwcyhzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIzMjQtXHRcdFx0XHRcdFx0SFZfUEFSVElUSU9OX1BST1BFUlRZX1ZNTV9DQVBBQklMSVRJRVMsXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjMyNTpcdFx0XHRcdFx0XHQwLCBcdTAwMjZtc2h2X3Jvb3Qudm1tX2NhcHMsXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjMyNjpcdFx0XHRcdFx0XHRzaXplb2YobXNodl9yb290LnZtbV9jYXBzKSk7XG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjMyNy1cdGlmIChyZXQgXHUwMDI2XHUwMDI2IGh2X2wxdmhfcGFydGl0aW9uKCkpIHtcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjMzMS1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyMzMyOlx0ZGV2X2RiZyhkZXYsIFwmIzM0O3ZtbV9jYXBzID0gJSNsbHhcXG5cJiMzNDssIG1zaHZfcm9vdC52bW1fY2Fwcy5hc191aW50NjRbMF0pO1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIzMzMtXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTIzMzc9c3RhdGljIGludCBfX2luaXQgbXNodl9wYXJlbnRfcGFydGl0aW9uX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjM4Ni1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyMzg3Olx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bXNodl9yb290LnB0X2h0X2xvY2spO1xuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjIzODg6XHRoYXNoX2luaXQobXNodl9yb290LnB0X2h0YWJsZSk7XG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjM4OS1cbi0tXG5kcml2ZXJzL2h2L21zaHZfc3luaWMuYy00LSAqXG5kcml2ZXJzL2h2L21zaHZfc3luaWMuYzo1OiAqIG1zaHZfcm9vdCBtb2R1bGUmIzM5O3MgbWFpbiBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbmFsaXR5LlxuZHJpdmVycy9odi9tc2h2X3N5bmljLmMtNi0gKlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9tc2h2Lmg9MjEzPXN0cnVjdCBtc2h2X2dwYXBfYWNjZXNzX2JpdG1hcCB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaC0yMjItLyoqXG5pbmNsdWRlL3VhcGkvbGludXgvbXNodi5oOjIyMzogKiBzdHJ1Y3QgbXNodl9yb290X2h2Y2FsbCAtIGFyZ3VtZW50cyBmb3IgTVNIVl9ST09UX0hWQ0FMTFxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaC0yMjQtICogQGNvZGU6IEh5cGVyY2FsbCBjb2RlIChIVkNBTExfKilcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbXNodi5oLTIzNS0gKi9cbmluY2x1ZGUvdWFwaS9saW51eC9tc2h2Lmg6MjM2OnN0cnVjdCBtc2h2X3Jvb3RfaHZjYWxsIHtcbmluY2x1ZGUvdWFwaS9saW51eC9tc2h2LmgtMjM3LVx0X191MTYgY29kZTtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbXNodi5oLTI1NS0vKiBHZW5lcmljIGh5cGVyY2FsbCAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaDoyNTY6I2RlZmluZSBNU0hWX1JPT1RfSFZDQUxMXHRcdF9JT1dSKE1TSFZfSU9DVEwsIDB4MDcsIHN0cnVjdCBtc2h2X3Jvb3RfaHZjYWxsKVxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaC0yNTctXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaD0zMTA9c3RydWN0IG1zaHZfZ2V0X3NldF92cF9zdGF0ZSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaC0zMjMtICogRGVmaW5lZCBhYm92ZSBpbiBwYXJ0aXRpb24gSU9DVExzLCBhdm9pZCByZWRlZmluaW5nIGl0IGhlcmVcbmluY2x1ZGUvdWFwaS9saW51eC9tc2h2Lmg6MzI0OiAqICNkZWZpbmUgTVNIVl9ST09UX0hWQ0FMTFx0XHRcdF9JT1dSKE1TSFZfSU9DVEwsIDB4MDcsIHN0cnVjdCBtc2h2X3Jvb3RfaHZjYWxsKVxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaC0zMjUtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTAzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBNU0hWIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBDT05GSUdfTVNIVl9ST09UYC4gUmlnaHQsIHRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdGhhdCB0aWVzIGludG8gYG1zaHZfcmVnaW9ucy5jYC4gTXkgbWluZCBpcyByYWNpbmcgdG8gcmVtZW1iZXIgaG93IHRoZXNlIHBpZWNlcyBjb25uZWN0LiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBidWlsZCBzeXN0ZW0gY29uZmlybXMgdGhhdCBgbXNodl9yZWdpb25zLmNgIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19NU0hWX1JPT1RgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgZ29vZCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0LiBOb3cgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19NU0hWX1JPT1RgIGlzIGFjdHVhbGx5IGRlZmluZWQsIGFuZCB0aGVuIEkgY2FuIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNU0hWX1JPT1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9odi9LY29uZmlnPTYwPWNvbmZpZyBIWVBFUlZfVk1CVVNcbi0tXG5kcml2ZXJzL2h2L0tjb25maWctNjctXG5kcml2ZXJzL2h2L0tjb25maWc6Njg6Y29uZmlnIE1TSFZfUk9PVFxuZHJpdmVycy9odi9LY29uZmlnLTY5LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgcm9vdCBwYXJ0aXRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM5OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQ1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSE1NIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgQ09ORklHX01TSFZfUk9PVGAgc2VlbXMgdG8gYmUgdGhlIGNvbnRyb2xsaW5nIGNvbmZpZyBoZXJlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGZvY3VzZWQgb24gbW9kaWZ5aW5nIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRgIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgYGhtbV9yYW5nZV9mYXVsdGAuIFRoaXMgYGhtbV9yYW5nZV9mYXVsdGAgaXMgYSBjcml0aWNhbCBITU0gZnVuY3Rpb24sIGhlYXZpbHkgdXNlZCBhY3Jvc3MgdmFyaW91cyBkcml2ZXJzIGxpa2Ugbm91dmVhdSBhbmQgYW1kZ3B1IOKAkyBhIHNpZ25pZmljYW50IHBpZWNlIG9mIGNvcmUgSE1NIGZ1bmN0aW9uYWxpdHkuIFRoZSBwYXRjaCByZWZhY3RvcnMgaXQgdG8gdXNlIGEgbG9ja2VkIHZlcnNpb24gKGBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkYCksIHdoaWNoIHRoZW4gbGV2ZXJhZ2VzIGBobW1fZG9fZmF1bHRgIGFuZCBgaG1tX3JlY29yZF9mYXVsdGAuIFRoaXMgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb3JlIEhNTSBjb2RlLCBtZWFuaW5nIGZ1enppbmcgdGhpcyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4KCkxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuIFdlJiMzOTt2ZSBnb3Q6CgoqICAgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZGAKKiAgIGBobW1fcmFuZ2VfZmF1bHRgCiogICBgaG1tX2RvX2ZhdWx0YAoqICAgYGhtbV9yZWNvcmRfZmF1bHRgCiogICBgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZGAKCkZvciBjb25maWcgb3B0aW9ucywgd2UmIzM5O2xsIG5lZWQgYFRFU1RfSE1NYCBhbmQgYE1TSFZfUk9PVGAgdG8gcmVwcm9kdWNlIHRoZSBjaGFuZ2VzLiBUaG91Z2ggYGhtbV9yYW5nZV9mYXVsdGAgaXMgdXNlZCBieSBtdWx0aXBsZSBkcml2ZXJzLCBmb2N1c2luZyBvbiBgVEVTVF9ITU1gIG9mZmVycyBhIGNsZWFuZXIgd2F5IHRvIHRlc3QgdGhlIGNoYW5nZXMuCgpJIG5lZWQgdG8gZGlnIGludG8gYHRlc3RfaG1tLmNgIHRvIGlkZW50aWZ5IGFueSBzcGVjaWZpYyBpb2N0bHMgdG8gdGFyZ2V0LiBBaCwgaXQgYWRkcyBgSE1NX0RNSVJST1JfUkVBRF9VTkxPQ0tFRGAuIFRoZSBjb3JyZXNwb25kaW5nIGhhbmRsZXIgaXMgYGRtaXJyb3JfcmVhZF91bmxvY2tlZGAsIGFsb25nIHdpdGggYGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRgIGFuZCBgZG1pcnJvcl9mYXVsdF91bmxvY2tlZGAuCgpTbywgdGhlIGV4dGVuZGVkIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBiZWNvbWVzOgoKKiAgIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRgCiogICBgaG1tX3JhbmdlX2ZhdWx0YAoqICAgYGhtbV9kb19mYXVsdGAKKiAgIGBkbWlycm9yX3JlYWRfdW5sb2NrZWRgCiogICBgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZGAKKiAgIGBkbWlycm9yX2ZhdWx0X3VubG9ja2VkYAoqICAgYG1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9ja2AKCkkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWdzLiBTcGVjaWZpY2FsbHkgYFRFU1RfSE1NYCBhbmQgYE1TSFZfUk9PVGAuCgpJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciByZWxhdGVkIGNvbmZpZ3MuIFR5cGljYWxseSBgVEVTVF9ITU1gIHNob3VsZCBhbHNvIHNlbGVjdCBgQ09ORklHX0hNTV9NSVJST1JgLiBJJiMzOTtsbCBjb25maXJtIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBURVNUX0hNTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE4PWNvbmZpZyBURVNUX01FTUlOSVRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI1LVxubGliL0tjb25maWcuZGVidWc6MzMyNjpjb25maWcgVEVTVF9ITU1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjctXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0OTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyB0aGUgS2NvbmZpZyBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbi4gVGhlIHRhc2sgaXMgcmVsYXRlZCB0byB0aGUgYFRFU1RfSE1NYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGZpcnN0IHBsYWNlIEkmIzM5O2QgY2hlY2sgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgb3B0aW9uLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgd2hhdCBpdCBjb250cm9scyBpcyBnb2luZyB0byBiZSBgbGliL0tjb25maWcuZGVidWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZGV0YWlscyBmb3IgZGVidWctcmVsYXRlZCBmZWF0dXJlcyB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZmVhdHVyZSBpcyBkZWZpbmVkIGFuZCBoYW5kbGVkIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYFRFU1RfSE1NYCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMyNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzI2Olx0Y29uZmlnIFRFU1RfSE1NXG4zMzI3Olx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbjMzMjg6XHRcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbjMzMjk6XHRcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcbjMzMzA6XHRcdHNlbGVjdCBITU1fTUlSUk9SXG4zMzMxOlx0XHRzZWxlY3QgTU1VX05PVElGSUVSXG4zMzMyOlx0XHRoZWxwXG4zMzMzOlx0XHQgIFRoaXMgaXMgYSBwc2V1ZG8gZGV2aWNlIGRyaXZlciBzb2xlbHkgZm9yIHRlc3RpbmcgSE1NLlxuMzMzNDpcdFx0ICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBITU0gdGVzdCBtb2R1bGUuXG4zMzM1Olx0XHQgIERvaW5nIHNvIHdpbGwgYWxsb3cgeW91IHRvIHJ1biB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0L3ZtL2htbS10ZXN0cy5cbjMzMzY6XHRcbjMzMzc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjMzMzg6XHRcbjMzMzk6XHRjb25maWcgVEVTVF9GUkVFX1BBR0VTXG4zMzQwOlx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IGZyZWVpbmcgcGFnZXNcJiMzNDtcbjMzNDE6XHRcdGhlbHBcbjMzNDI6XHRcdCAgVGVzdCB0aGF0IGEgbWVtb3J5IGxlYWsgZG9lcyBub3Qgb2NjdXIgZHVlIHRvIGEgcmFjZSBiZXR3ZWVuXG4zMzQzOlx0XHQgIGZyZWVpbmcgYSBibG9jayBvZiBwYWdlcyBhbmQgYSBzcGVjdWxhdGl2ZSBwYWdlIHJlZmVyZW5jZS5cbjMzNDQ6XHRcdCAgTG9hZGluZyB0aGlzIG1vZHVsZSBpcyBzYWZlIGlmIHlvdXIga2VybmVsIGhhcyB0aGUgYnVnIGZpeGVkLlxuMzM0NTpcdFx0ICBJZiB0aGUgYnVnIGlzIG5vdCBmaXhlZCwgaXQgd2lsbCBsZWFrIGdpZ2FieXRlcyBvZiBtZW1vcnkgYW5kXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDE3CgkJCQkJCQlvdXRwdXQ6IDIzNwoJCQkJCQkJdGhvdWdodHM6IDYyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBITU0gUGF0Y2ggZm9yIEZ1enppbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaW5jbHVkZXMgYWxsIG5lY2Vzc2FyeSBjb21wb25lbnRzLiBTbywgSSYjMzk7bGwgYmUgYWRkaW5nIGBURVNUX0hNTWAgYW5kIGBNU0hWX1JPT1RgIHRvIHRoZSBjb25maWd1cmF0aW9ucy4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoYXQgdGhlIHBhdGNoJiMzOTtzIGNvcmUgcmVsYXRlcyB0byB0aGUgSE1NIHN1YnN5c3RlbSBhbmQgdGhlIE1TSFYgcmVnaW9uIGhhbmRsaW5nLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBhcmVhcyBmb3IgZnV6emluZy4gSSYjMzk7dmUgZ290IGEgbGlzdCBvZiBzeW1ib2xzIHRvIHJldmlldzogYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZGAsIGBobW1fcmFuZ2VfZmF1bHRgLCBgaG1tX2RvX2ZhdWx0YCwgYGhtbV9yZWNvcmRfZmF1bHRgLCBgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZGAsIGBkbWlycm9yX3JlYWRfdW5sb2NrZWRgLCBgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZGAsIGBkbWlycm9yX2ZhdWx0X3VubG9ja2VkYCwgYW5kIGBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2tgLgoKU3BlY2lmaWNhbGx5LCBgaG1tX3JhbmdlX2ZhdWx0YCBpdHNlbGYgaXMgYW4gaW50ZXJlc3RpbmcgcG9pbnQuIFdoaWxlIGl0JiMzOTtzIG5vdCBhIGdlbmVyYWwgaG90LXBhdGggZnVuY3Rpb24gbGlrZSBgaGFuZGxlX21tX2ZhdWx0YCwgaXQmIzM5O3MgY29yZSB0byBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciBITU0gZGV2aWNlcywgc28gaXQmIzM5O3MgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBgaG1tX2RvX2ZhdWx0YCBhbmQgYGhtbV9yZWNvcmRfZmF1bHRgIGFyZSBzdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbW0vaG1tLmNgLiBUaGUgYGRtaXJyb3JfKmAgZnVuY3Rpb25zIGFyZSB3aXRoaW4gYGxpYi90ZXN0X2htbS5jYCwgYW5kIGBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2tgIGlzIGluIGBkcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jYC4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRoZSBsb2NhdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zIGluIG1pbmQgd2hlbiBzZXR0aW5nIHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LgoKVGhlIHBhdGNoJiMzOTtzIGFjdHVhbCBtZWF0IGlzIHRoZSBtb2RpZmljYXRpb24gdG8gdGhlIGNvcmUgSE1NIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSwgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZGAsIGZvciBkcm9wcGluZyB0aGUgbW1hcCBsb2NrIGR1cmluZyBwYWdlIGZhdWx0cy4gVGhpcyBoYXMgZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMsIGFzIGl0IGFpbXMgdG8gaW1wcm92ZSBoYW5kbGluZyB3aXRoIHVzZXJmYXVsdGZkIHJlZ2lvbnMuIEl0IGFsc28gcmVmYWN0b3JzIHRoZSBvcmlnaW5hbCBgaG1tX3JhbmdlX2ZhdWx0YC4gRnVydGhlcm1vcmUsIEkmIzM5O3ZlIGdvdCB0byByZW1lbWJlciB0aGF0IHRoZSBjaGFuZ2VzIHJpcHBsZSB0aHJvdWdoIGB0ZXN0X2htbS5jYCBhbmQgYG1zaHZfcmVnaW9ucy5jYCB0byB1c2UgdGhpcyBuZXcgQVBJLgoKU28sIGluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbXBhY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRyaXZlciBjb2RlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgbG9jayBkcm9wcGluZyBkdXJpbmcgcGFnZSBmYXVsdHMsIHNvIGl0IHdhcnJhbnRzIHNlcmlvdXMgZnV6emluZy4gTm93LCBJJiMzOTtsbCBgc2V0LXJlc3VsdHNgIGFuZCBwcmVwYXJlIGZvciB0aGUgZnV6emluZyBjYW1wYWlnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O01TSFZfUk9PVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2htbV9yYW5nZV9mYXVsdF91bmxvY2tlZCYjMzQ7LAogICAgJiMzNDtobW1fcmFuZ2VfZmF1bHQmIzM0OywKICAgICYjMzQ7aG1tX2RvX2ZhdWx0JiMzNDssCiAgICAmIzM0O2htbV9yZWNvcmRfZmF1bHQmIzM0OywKICAgICYjMzQ7aG1tX3JhbmdlX2ZhdWx0X2xvY2tlZCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX3JlYWRfdW5sb2NrZWQmIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX2ZhdWx0X3VubG9ja2VkJiMzNDssCiAgICAmIzM0O21zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKClgIGluIHRoZSBITU0gc3Vic3lzdGVtIHRvIGFsbG93IGRyb3BwaW5nIHRoZSBtbWFwIGxvY2sgZHVyaW5nIHBhZ2UgZmF1bHRzLCB3aGljaCBpcyB1c2VmdWwgZm9yIHJlZ2lvbnMgbWFuYWdlZCBieSB1c2VyZmF1bHRmZC4gSXQgcmVmYWN0b3JzIHRoZSBjb3JlIGBobW1fcmFuZ2VfZmF1bHQoKWAgbG9naWMgdG8gc3VwcG9ydCB0aGlzIGFuZCB1cGRhdGVzIHRoZSBgdGVzdF9obW1gIG1vZHVsZSBhbmQgYG1zaHZfcmVnaW9uc2AgZHJpdmVyIHRvIHV0aWxpemUgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRyaXZlciBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VEVTVF9ITU0mIzM0OywKICAgICYjMzQ7TVNIVl9ST09UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkJiMzNDssCiAgICAmIzM0O2htbV9yYW5nZV9mYXVsdCYjMzQ7LAogICAgJiMzNDtobW1fZG9fZmF1bHQmIzM0OywKICAgICYjMzQ7aG1tX3JlY29yZF9mYXVsdCYjMzQ7LAogICAgJiMzNDtobW1fcmFuZ2VfZmF1bHRfbG9ja2VkJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfcmVhZF91bmxvY2tlZCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfZmF1bHRfdW5sb2NrZWQmIzM0OywKICAgICYjMzQ7bXNodl9yZWdpb25faG1tX2ZhdWx0X2FuZF9sb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKWAgaW4gdGhlIEhNTSBzdWJzeXN0ZW0gdG8gYWxsb3cgZHJvcHBpbmcgdGhlIG1tYXAgbG9jayBkdXJpbmcgcGFnZSBmYXVsdHMsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgcmVnaW9ucyBtYW5hZ2VkIGJ5IHVzZXJmYXVsdGZkLiBJdCByZWZhY3RvcnMgdGhlIGNvcmUgYGhtbV9yYW5nZV9mYXVsdCgpYCBsb2dpYyB0byBzdXBwb3J0IHRoaXMgYW5kIHVwZGF0ZXMgdGhlIGB0ZXN0X2htbWAgbW9kdWxlIGFuZCBgbXNodl9yZWdpb25zYCBkcml2ZXIgdG8gdXRpbGl6ZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZHJpdmVyIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6MDM6MjcuNjE4MjAzNjM2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTczMzU0MTg5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIk1TSFZfUk9PVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZFwiLFxuICAgIFwiaG1tX3JhbmdlX2ZhdWx0XCIsXG4gICAgXCJobW1fZG9fZmF1bHRcIixcbiAgICBcImhtbV9yZWNvcmRfZmF1bHRcIixcbiAgICBcImhtbV9yYW5nZV9mYXVsdF9sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfcmVhZF91bmxvY2tlZFwiLFxuICAgIFwiZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZFwiLFxuICAgIFwiZG1pcnJvcl9mYXVsdF91bmxvY2tlZFwiLFxuICAgIFwibXNodl9yZWdpb25faG1tX2ZhdWx0X2FuZF9sb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBBUEkgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpYCBpbiB0aGUgSE1NIHN1YnN5c3RlbSB0byBhbGxvdyBkcm9wcGluZyB0aGUgbW1hcCBsb2NrIGR1cmluZyBwYWdlIGZhdWx0cywgd2hpY2ggaXMgdXNlZnVsIGZvciByZWdpb25zIG1hbmFnZWQgYnkgdXNlcmZhdWx0ZmQuIEl0IHJlZmFjdG9ycyB0aGUgY29yZSBgaG1tX3JhbmdlX2ZhdWx0KClgIGxvZ2ljIHRvIHN1cHBvcnQgdGhpcyBhbmQgdXBkYXRlcyB0aGUgYHRlc3RfaG1tYCBtb2R1bGUgYW5kIGBtc2h2X3JlZ2lvbnNgIGRyaXZlciB0byB1dGlsaXplIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkcml2ZXIgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDAyOjAzOjI3LjYxODIwOTc1NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNjQ2NjQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY0Yjc1OTNmNmZlODZjYjZjNTQwZTY0NGE5YjFkMWRjZGY4ODBlNzBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgNyAwMjowMzoyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcXG5pbmRleCA3ZDYxYjdhOGI2NWI3OS4uODQ0MzQzNzEyYWJkZGEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0XFxuQEAgLTIwOCw2ICsyMDgsNjUgQEAgaW52YWxpZGF0ZSgpIGNhbGxiYWNrLiBUaGF0IGxvY2sgbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nXFxuIG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCkgdG8gYXZvaWQgYW55IHJhY2Ugd2l0aCBhIGNvbmN1cnJlbnQgQ1BVIHBhZ2UgdGFibGVcXG4gdXBkYXRlLlxcbiBcXG4rRHJvcHBpbmcgdGhlIG1tYXAgbG9jayBkdXJpbmcgcGFnZSBmYXVsdHNcXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK1NvbWUgVk1BcyBoYXZlIGZhdWx0IGhhbmRsZXJzIHRoYXQgbmVlZCB0byByZWxlYXNlIHRoZSBtbWFwIGxvY2sgd2hpbGVcXG4rc2VydmljaW5nIGEgZmF1bHQgKGZvciBleGFtcGxlLCByZWdpb25zIG1hbmFnZWQgYnkgYGB1c2VyZmF1bHRmZGBgKS5cXG4rYGBobW1fcmFuZ2VfZmF1bHQoKWBgIGNhbm5vdCBiZSB1c2VkIG9uIHN1Y2ggbWFwcGluZ3MgYmVjYXVzZSBpdCBtdXN0IGhvbGQgdGhlXFxuK21tYXAgbG9jayBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjYWxsLiBEcml2ZXJzIHRoYXQgbmVlZCB0byBzdXBwb3J0IHRoZW1cXG4rc2hvdWxkIGNhbGw6OlxcbitcXG4rICBpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTtcXG4rXFxuK1RoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCBgYG1tYXBfcmVhZF9sb2NrYGAgYmVmb3JlIHRoZSBjYWxsLlxcbitgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpYGAgdGFrZXMgdGhlIG1tYXAgcmVhZCBsb2NrIGludGVybmFsbHkgYW5kIGFsbG93c1xcbitgYGhhbmRsZV9tbV9mYXVsdCgpYGAgdG8gZHJvcCBpdCBkdXJpbmcgZmF1bHQgaGFuZGxpbmcuIElmIHRoZSBtbWFwIGxvY2sgaXNcXG4rZHJvcHBlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGAtRUJVU1lgYC4gVGhlIGNhbGxlciBtdXN0IHRoZW4gcmVzdGFydCB0aGVcXG4rd2FsayBmcm9tIGBgcmFuZ2UtXFx1MDAzZXN0YXJ0YGAgd2l0aCBhIGZyZXNoIG5vdGlmaWVyIHNlcXVlbmNlLiBgYC1FSU5UUmBgIGlzXFxuK3JldHVybmVkIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcgZHVyaW5nIHJldHJ5IGhhbmRsaW5nLlxcbitcXG4rQSB0eXBpY2FsIGNhbGxlciBsb29rcyBsaWtlIHRoaXM6OlxcbitcXG4rIGludCBkcml2ZXJfcG9wdWxhdGVfcmFuZ2VfdW5sb2NrZWQoLi4uKVxcbisge1xcbisgICAgICBzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlO1xcbisgICAgICAuLi5cXG4rXFxuKyAgICAgIHJhbmdlLm5vdGlmaWVyID0gXFx1MDAyNmludGVydmFsX3N1YjtcXG4rICAgICAgcmFuZ2Uuc3RhcnQgPSAuLi47XFxuKyAgICAgIHJhbmdlLmVuZCA9IC4uLjtcXG4rICAgICAgcmFuZ2UuaG1tX3BmbnMgPSAuLi47XFxuK1xcbisgICAgICBpZiAoIW1tZ2V0X25vdF96ZXJvKGludGVydmFsX3N1Yi5tbSkpXFxuKyAgICAgICAgICByZXR1cm4gLUVGQVVMVDtcXG4rXFxuKyBhZ2FpbjpcXG4rICAgICAgcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4oXFx1MDAyNmludGVydmFsX3N1Yik7XFxuKyAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZChcXHUwMDI2cmFuZ2UpO1xcbisgICAgICBpZiAocmV0KSB7XFxuKyAgICAgICAgICBpZiAocmV0ID09IC1FQlVTWSlcXG4rICAgICAgICAgICAgICBnb3RvIGFnYWluO1xcbisgICAgICAgICAgZ290byBvdXRfcHV0O1xcbisgICAgICB9XFxuK1xcbisgICAgICB0YWtlX2xvY2soZHJpdmVyLVxcdTAwM2V1cGRhdGUpO1xcbisgICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoXFx1MDAyNmludGVydmFsX3N1YiwgcmFuZ2Uubm90aWZpZXJfc2VxKSkge1xcbisgICAgICAgICAgcmVsZWFzZV9sb2NrKGRyaXZlci1cXHUwMDNldXBkYXRlKTtcXG4rICAgICAgICAgIGdvdG8gYWdhaW47XFxuKyAgICAgIH1cXG4rXFxuKyAgICAgIC8qIFVzZSBwZm5zIGFycmF5IGNvbnRlbnQgdG8gdXBkYXRlIGRldmljZSBwYWdlIHRhYmxlLFxcbisgICAgICAgKiB1bmRlciB0aGUgdXBkYXRlIGxvY2sgKi9cXG4rXFxuKyAgICAgIHJlbGVhc2VfbG9jayhkcml2ZXItXFx1MDAzZXVwZGF0ZSk7XFxuKyAgICAgIHJldCA9IDA7XFxuK1xcbisgb3V0X3B1dDpcXG4rICAgICAgbW1wdXQoaW50ZXJ2YWxfc3ViLm1tKTtcXG4rICAgICAgcmV0dXJuIHJldDtcXG4rIH1cXG4rXFxuIExldmVyYWdlIGRlZmF1bHRfZmxhZ3MgYW5kIHBmbl9mbGFnc19tYXNrXFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jIGIvZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuY1xcbmluZGV4IDZkNjVlNWI0MjE1Mjk1Li4wNDY3NmYwNmM1Yzc0MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jXFxuKysrIGIvZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuY1xcbkBAIC0zODgsMTMgKzM4OCwxMSBAQCBpbnQgbXNodl9yZWdpb25fZ2V0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbilcXG4gICpcXG4gICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIHN0ZXBzOlxcbiAgKiAxLiBSZWFkcyB0aGUgbm90aWZpZXIgc2VxdWVuY2UgZm9yIHRoZSBITU0gcmFuZ2UuXFxuLSAqIDIuIEFjcXVpcmVzIGEgcmVhZCBsb2NrIG9uIHRoZSBtZW1vcnkgbWFwLlxcbi0gKiAzLiBIYW5kbGVzIEhNTSBmYXVsdHMgZm9yIHRoZSBzcGVjaWZpZWQgcmFuZ2UuXFxuLSAqIDQuIFJlbGVhc2VzIHRoZSByZWFkIGxvY2sgb24gdGhlIG1lbW9yeSBtYXAuXFxuLSAqIDUuIElmIHN1Y2Nlc3NmdWwsIGxvY2tzIHRoZSBtZW1vcnkgcmVnaW9uIG11dGV4Llxcbi0gKiA2LiBWZXJpZmllcyBpZiB0aGUgbm90aWZpZXIgc2VxdWVuY2UgaGFzIGNoYW5nZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24uXFxuKyAqIDIuIEhhbmRsZXMgSE1NIGZhdWx0cyBmb3IgdGhlIHNwZWNpZmllZCByYW5nZS5cXG4rICogMy4gSWYgc3VjY2Vzc2Z1bCwgbG9ja3MgdGhlIG1lbW9yeSByZWdpb24gbXV0ZXguXFxuKyAqIDQuIFZlcmlmaWVzIGlmIHRoZSBub3RpZmllciBzZXF1ZW5jZSBoYXMgY2hhbmdlZCBkdXJpbmcgdGhlIG9wZXJhdGlvbi5cXG4gICogICAgSWYgaXQgaGFzLCByZWxlYXNlcyB0aGUgbXV0ZXggYW5kIHJldHVybnMgLUVCVVNZIHRvIG1hdGNoIHdpdGhcXG4tICogICAgaG1tX3JhbmdlX2ZhdWx0KCkgcmV0dXJuIGNvZGUgZm9yIHJlcGVhdGluZy5cXG4rICogICAgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKCkgc28gdGhlIGNhbGxlciByZXRyaWVzIHRoZSByYW5nZSBmYXVsdC5cXG4gICpcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuICAqL1xcbkBAIC00MDQsOSArNDAyLDcgQEAgc3RhdGljIGludCBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2soc3RydWN0IG1zaHZfbWVtX3JlZ2lvbiAqcmVnaW9uLFxcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmFuZ2UtXFx1MDAzZW5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKHJhbmdlLVxcdTAwM2Vub3RpZmllcik7XFxuLVxcdG1tYXBfcmVhZF9sb2NrKHJlZ2lvbi1cXHUwMDNlbXJlZ19tbmkubW0pO1xcbi1cXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHQocmFuZ2UpO1xcbi1cXHRtbWFwX3JlYWRfdW5sb2NrKHJlZ2lvbi1cXHUwMDNlbXJlZ19tbmkubW0pO1xcbitcXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQocmFuZ2UpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9obW0uaCBiL2luY2x1ZGUvbGludXgvaG1tLmhcXG5pbmRleCBkYjc1ZmZjOTQ5YTdhYy4uMWI1ODRlNWEyOTAwMWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9obW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaG1tLmhcXG5AQCAtMTIzLDYgKzEyMyw3IEBAIHN0cnVjdCBobW1fcmFuZ2Uge1xcbiAgKiBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBmb3IgaG93IHRvIHVzZSB0aGUgcmFuZ2UgQVBJLlxcbiAgKi9cXG4gaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XFxuK2ludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xcbiBcXG4gLypcXG4gICogSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCAtIGRlZmF1bHQgdGltZW91dCAobXMpIHdoZW4gd2FpdGluZyBmb3IgYSByYW5nZVxcbmRpZmYgLS1naXQgYS9saWIvdGVzdF9obW0uYyBiL2xpYi90ZXN0X2htbS5jXFxuaW5kZXggNDVjMGNiOTkyMjE4NGEuLmRjYzNhMjNiYjk4M2RjIDEwMDY0NFxcbi0tLSBhL2xpYi90ZXN0X2htbS5jXFxuKysrIGIvbGliL3Rlc3RfaG1tLmNcXG5AQCAtMzg5LDYgKzM4OSw3NiBAQCBzdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cXG4rXFx0XFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHR3aGlsZSAodHJ1ZSkge1xcbitcXHRcXHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyYW5nZS1cXHUwMDNlbm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4ocmFuZ2UtXFx1MDAzZW5vdGlmaWVyKTtcXG4rXFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHJhbmdlKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRpZiAocmV0ID09IC1FQlVTWSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkbWlycm9yLVxcdTAwM2VtdXRleCk7XFxuK1xcdFxcdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS1cXHUwMDNlbm90aWZpZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICByYW5nZS1cXHUwMDNlbm90aWZpZXJfc2VxKSkge1xcbitcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRtaXJyb3ItXFx1MDAzZW11dGV4KTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRtaXJyb3JfZG9fZmF1bHQoZG1pcnJvciwgcmFuZ2UpO1xcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkbWlycm9yLVxcdTAwM2VtdXRleCk7XFxuK291dDpcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBkbWlycm9yX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbitcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuK1xcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgd3JpdGUpXFxuK3tcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBkbWlycm9yLVxcdTAwM2Vub3RpZmllci5tbTtcXG4rXFx0dW5zaWduZWQgbG9uZyBhZGRyO1xcbitcXHR1bnNpZ25lZCBsb25nIHBmbnNbMzJdO1xcbitcXHRzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlID0ge1xcbitcXHRcXHQubm90aWZpZXIgPSBcXHUwMDI2ZG1pcnJvci1cXHUwMDNlbm90aWZpZXIsXFxuK1xcdFxcdC5obW1fcGZucyA9IHBmbnMsXFxuK1xcdFxcdC5wZm5fZmxhZ3NfbWFzayA9IDAsXFxuK1xcdFxcdC5kZWZhdWx0X2ZsYWdzID1cXG4rXFx0XFx0XFx0SE1NX1BGTl9SRVFfRkFVTFQgfCAod3JpdGUgPyBITU1fUEZOX1JFUV9XUklURSA6IDApLFxcbitcXHRcXHQuZGV2X3ByaXZhdGVfb3duZXIgPSBkbWlycm9yLVxcdTAwM2VtZGV2aWNlLFxcbitcXHR9O1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmICghbW1nZXRfbm90X3plcm8obW0pKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIFxcdTAwM2MgZW5kOyBhZGRyID0gcmFuZ2UuZW5kKSB7XFxuK1xcdFxcdHJhbmdlLnN0YXJ0ID0gYWRkcjtcXG4rXFx0XFx0cmFuZ2UuZW5kID0gbWluKGFkZHIgKyAoQVJSQVlfU0laRShwZm5zKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSwgZW5kKTtcXG4rXFxuK1xcdFxcdHJldCA9IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgXFx1MDAyNnJhbmdlKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdG1tcHV0KG1tKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBkbWlycm9yX2ZhdWx0KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgd3JpdGUpXFxuIHtcXG5AQCAtNDg4LDYgKzU1OCw0NyBAQCBzdGF0aWMgaW50IGRtaXJyb3JfcmVhZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGRtaXJyb3JfcmVhZF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcXG4re1xcbitcXHRzdHJ1Y3QgZG1pcnJvcl9ib3VuY2UgYm91bmNlO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNtZC1cXHUwMDNlbnBhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRzdGFydCA9IGNtZC1cXHUwMDNlYWRkcjtcXG4rXFx0ZW5kID0gc3RhcnQgKyBzaXplO1xcbitcXHRpZiAoZW5kIFxcdTAwM2Mgc3RhcnQpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0ID0gZG1pcnJvcl9ib3VuY2VfaW5pdChcXHUwMDI2Ym91bmNlLCBzdGFydCwgc2l6ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHR3aGlsZSAoMSkge1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkbWlycm9yLVxcdTAwM2VtdXRleCk7XFxuK1xcdFxcdHJldCA9IGRtaXJyb3JfZG9fcmVhZChkbWlycm9yLCBzdGFydCwgZW5kLCBcXHUwMDI2Ym91bmNlKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkbWlycm9yLVxcdTAwM2VtdXRleCk7XFxuK1xcdFxcdGlmIChyZXQgIT0gLUVOT0VOVClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRzdGFydCA9IGNtZC1cXHUwMDNlYWRkciArIChib3VuY2UuY3BhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbitcXHRcXHRyZXQgPSBkbWlycm9yX2ZhdWx0X3VubG9ja2VkKGRtaXJyb3IsIHN0YXJ0LCBlbmQsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNtZC1cXHUwMDNlZmF1bHRzKys7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyZXQgPT0gMCkge1xcbitcXHRcXHRpZiAoY29weV90b191c2VyKHU2NF90b191c2VyX3B0cihjbWQtXFx1MDAzZXB0ciksIGJvdW5jZS5wdHIsXFxuK1xcdFxcdFxcdFxcdCBib3VuY2Uuc2l6ZSkpXFxuK1xcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuK1xcdH1cXG4rXFx0Y21kLVxcdTAwM2VjcGFnZXMgPSBib3VuY2UuY3BhZ2VzO1xcbitcXHRkbWlycm9yX2JvdW5jZV9maW5pKFxcdTAwMjZib3VuY2UpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGRtaXJyb3JfZG9fd3JpdGUoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuIFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IGRtaXJyb3JfYm91bmNlICpib3VuY2UpXFxuIHtcXG5AQCAtMTU3Miw2ICsxNjgzLDkgQEAgc3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHRcXHRkbWlycm9yLVxcdTAwM2VmbGFncyA9IGNtZC5ucGFnZXM7XFxuIFxcdFxcdHJldCA9IDA7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRUQ6XFxuK1xcdFxcdHJldCA9IGRtaXJyb3JfcmVhZF91bmxvY2tlZChkbWlycm9yLCBcXHUwMDI2Y21kKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfaG1tX3VhcGkuaCBiL2xpYi90ZXN0X2htbV91YXBpLmhcXG5pbmRleCBmOTRjNmQ0NTczMzgyOC4uZWE5YjBlYzQwNGZiNTUgMTAwNjQ0XFxuLS0tIGEvbGliL3Rlc3RfaG1tX3VhcGkuaFxcbisrKyBiL2xpYi90ZXN0X2htbV91YXBpLmhcXG5AQCAtMzgsNiArMzgsNyBAQCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kIHtcXG4gI2RlZmluZSBITU1fRE1JUlJPUl9DSEVDS19FWENMVVNJVkVcXHRfSU9XUignSCcsIDB4MDYsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXFxuICNkZWZpbmUgSE1NX0RNSVJST1JfUkVMRUFTRVxcdFxcdF9JT1dSKCdIJywgMHgwNywgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcXG4gI2RlZmluZSBITU1fRE1JUlJPUl9GTEFHU1xcdFxcdF9JT1dSKCdIJywgMHgwOCwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcXG4rI2RlZmluZSBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VEXFx0X0lPV1IoJ0gnLCAweDA5LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxcbiBcXG4gI2RlZmluZSBITU1fRE1JUlJPUl9GTEFHX0ZBSUxfQUxMT0NcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAwKVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uY1xcbmluZGV4IDRmM2Y2MjdkMmI0NzcyLi4zMTYxMTY5OTQyMDljOCAxMDA2NDRcXG4tLS0gYS9tbS9obW0uY1xcbisrKyBiL21tL2htbS5jXFxuQEAgLTMyLDkgKzMyLDI3IEBAXFxuIFxcbiBzdHJ1Y3QgaG1tX3ZtYV93YWxrIHtcXG4gXFx0c3RydWN0IGhtbV9yYW5nZVxcdCpyYW5nZTtcXG4rXFx0aW50XFx0XFx0XFx0KmxvY2tlZDtcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGxhc3Q7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRlbmQ7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdHJlcXVpcmVkX2ZhdWx0O1xcbiB9O1xcbiBcXG4rLypcXG4rICogSW50ZXJuYWwgc2VudGluZWwgcmV0dXJuZWQgYnkgd2FsayBjYWxsYmFja3Mgd2hlbiB0aGV5IG5lZWQgYSBwYWdlIGZhdWx0LlxcbisgKiBUaGUgY2FsbGJhY2sgc3RvcmVzIGVuZC9yZXF1aXJlZF9mYXVsdCBpbiBobW1fdm1hX3dhbGs7IHRoZSBvdXRlciBsb29wXFxuKyAqIGNvbnN1bWVzIHRoZSBzZW50aW5lbCBhbmQgbmV2ZXIgcHJvcGFnYXRlcyBpdCB0byB0aGUgY2FsbGVyLlxcbisgKi9cXG4rI2RlZmluZSBITU1fRkFVTFRfUEVORElOR1xcdC1FQUdBSU5cXG4rXFxuKy8qXFxuKyAqIEludGVybmFsIHNlbnRpbmVsIHJldHVybmVkIGJ5IGhtbV9kb19mYXVsdCgpIHdoZW4gaGFuZGxlX21tX2ZhdWx0KClcXG4rICogY29tcGxldGVzIGEgcGFnZSBmYXVsdCB3aXRoIHRoZSBtbWFwIGxvY2sgZHJvcHBlZC4gaG1tX2RvX2ZhdWx0KCkgc2V0c1xcbisgKiAqbG9ja2VkID0gMDsgdGhlIG91dGVyIGxvb3AgY29uc3VtZXMgdGhlIHNlbnRpbmVsIGFuZCBuZXZlciBwcm9wYWdhdGVzIGl0XFxuKyAqIHRvIHRoZSBjYWxsZXIuXFxuKyAqL1xcbisjZGVmaW5lIEhNTV9GQVVMVF9VTkxPQ0tFRFxcdC1FTk9MQ0tcXG4rXFxuIGVudW0ge1xcbiBcXHRITU1fTkVFRF9GQVVMVCA9IDEgXFx1MDAzY1xcdTAwM2MgMCxcXG4gXFx0SE1NX05FRURfV1JJVEVfRkFVTFQgPSAxIFxcdTAwM2NcXHUwMDNjIDEsXFxuQEAgLTYwLDM3ICs3OCwyNSBAQCBzdGF0aWMgaW50IGhtbV9wZm5zX2ZpbGwodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gfVxcbiBcXG4gLypcXG4tICogaG1tX3ZtYV9mYXVsdCgpIC0gZmF1bHQgaW4gYSByYW5nZSBsYWNraW5nIHZhbGlkIHBtZCBvciBwdGUocylcXG4tICogQGFkZHI6IHJhbmdlIHZpcnR1YWwgc3RhcnQgYWRkcmVzcyAoaW5jbHVzaXZlKVxcbi0gKiBAZW5kOiByYW5nZSB2aXJ0dWFsIGVuZCBhZGRyZXNzIChleGNsdXNpdmUpXFxuLSAqIEByZXF1aXJlZF9mYXVsdDogSE1NX05FRURfKiBmbGFnc1xcbi0gKiBAd2FsazogbW1fd2FsayBzdHJ1Y3R1cmVcXG4tICogUmV0dXJuOiAtRUJVU1kgYWZ0ZXIgcGFnZSBmYXVsdCwgb3IgcGFnZSBmYXVsdCBlcnJvclxcbisgKiBobW1fcmVjb3JkX2ZhdWx0KCkgLSByZWNvcmQgYSByYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGZhdWx0ZWQgaW5cXG4gICpcXG4tICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBwbWRfbm9uZSgpIG9yIHB0ZV9ub25lKCkgcmV0dXJucyB0cnVlLFxcbi0gKiBvciB3aGVuZXZlciB0aGVyZSBpcyBubyBwYWdlIGRpcmVjdG9yeSBjb3ZlcmluZyB0aGUgdmlydHVhbCBhZGRyZXNzIHJhbmdlLlxcbisgKiBDYWxsZWQgYnkgdGhlIHdhbGsgY2FsbGJhY2tzIHdoZW4gdGhleSBkaXNjb3ZlciB0aGF0IHBhcnQgb2YgdGhlIHJhbmdlXFxuKyAqIG5lZWRzIGEgcGFnZSBmYXVsdC4gIFRoZSBjYWxsYmFjayByZWNvcmRzIHdoYXQgdG8gZmF1bHQgYW5kIHJldHVybnNcXG4rICogSE1NX0ZBVUxUX1BFTkRJTkc7IHRoZSBvdXRlciBsb29wIGluIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoKSBkcm9wc1xcbisgKiBiYWNrIG91dCBvZiB3YWxrX3BhZ2VfcmFuZ2UoKSBhbmQgaW52b2tlcyBoYW5kbGVfbW1fZmF1bHQoKSBmcm9tIGEgY29udGV4dFxcbisgKiB3aGVyZSBubyBwYWdlLXRhYmxlIG9yIGh1Z2V0bGJfdm1hX2xvY2sgaXMgaGVsZC5cXG4gICovXFxuLXN0YXRpYyBpbnQgaG1tX3ZtYV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi1cXHRcXHRcXHQgdW5zaWduZWQgaW50IHJlcXVpcmVkX2ZhdWx0LCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4rc3RhdGljIGludCBobW1fcmVjb3JkX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuK1xcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmF1bHQsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4ge1xcbiBcXHRzdHJ1Y3QgaG1tX3ZtYV93YWxrICpobW1fdm1hX3dhbGsgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbi1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXFx1MDAzZXZtYTtcXG4tXFx0dW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzID0gRkFVTFRfRkxBR19SRU1PVEU7XFxuIFxcbiBcXHRXQVJOX09OX09OQ0UoIXJlcXVpcmVkX2ZhdWx0KTtcXG4gXFx0aG1tX3ZtYV93YWxrLVxcdTAwM2VsYXN0ID0gYWRkcjtcXG4tXFxuLVxcdGlmIChyZXF1aXJlZF9mYXVsdCBcXHUwMDI2IEhNTV9ORUVEX1dSSVRFX0ZBVUxUKSB7XFxuLVxcdFxcdGlmICghKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9XUklURSkpXFxuLVxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuLVxcdFxcdGZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfV1JJVEU7XFxuLVxcdH1cXG4tXFxuLVxcdGZvciAoOyBhZGRyIFxcdTAwM2MgZW5kOyBhZGRyICs9IFBBR0VfU0laRSlcXG4tXFx0XFx0aWYgKGhhbmRsZV9tbV9mYXVsdCh2bWEsIGFkZHIsIGZhdWx0X2ZsYWdzLCBOVUxMKSBcXHUwMDI2XFxuLVxcdFxcdCAgICBWTV9GQVVMVF9FUlJPUilcXG4tXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdHJldHVybiAtRUJVU1k7XFxuK1xcdGhtbV92bWFfd2Fsay1cXHUwMDNlZW5kID0gZW5kO1xcbitcXHRobW1fdm1hX3dhbGstXFx1MDAzZXJlcXVpcmVkX2ZhdWx0ID0gcmVxdWlyZWRfZmF1bHQ7XFxuK1xcdHJldHVybiBITU1fRkFVTFRfUEVORElORztcXG4gfVxcbiBcXG4gc3RhdGljIHVuc2lnbmVkIGludCBobW1fcHRlX25lZWRfZmF1bHQoY29uc3Qgc3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrLFxcbkBAIC0xNzQsNyArMTgwLDcgQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfaG9sZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRyZXR1cm4gaG1tX3BmbnNfZmlsbChhZGRyLCBlbmQsIHJhbmdlLCBITU1fUEZOX0VSUk9SKTtcXG4gXFx0fVxcbiBcXHRpZiAocmVxdWlyZWRfZmF1bHQpXFxuLVxcdFxcdHJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xcbitcXHRcXHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4gXFx0cmV0dXJuIGhtbV9wZm5zX2ZpbGwoYWRkciwgZW5kLCByYW5nZSwgMCk7XFxuIH1cXG4gXFxuQEAgLTIwOSw3ICsyMTUsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRyZXF1aXJlZF9mYXVsdCA9XFxuIFxcdFxcdGhtbV9yYW5nZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgaG1tX3BmbnMsIG5wYWdlcywgY3B1X2ZsYWdzKTtcXG4gXFx0aWYgKHJlcXVpcmVkX2ZhdWx0KVxcbi1cXHRcXHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4rXFx0XFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuIFxcbiBcXHRwZm4gPSBwbWRfcGZuKHBtZCkgKyAoKGFkZHIgXFx1MDAyNiB+UE1EX01BU0spIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbiBcXHRmb3IgKGkgPSAwOyBhZGRyIFxcdTAwM2MgZW5kOyBhZGRyICs9IFBBR0VfU0laRSwgaSsrLCBwZm4rKykge1xcbkBAIC0zMjgsNyArMzM0LDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gZmF1bHQ6XFxuIFxcdHB0ZV91bm1hcChwdGVwKTtcXG4gXFx0LyogRmF1bHQgYW55IHZpcnR1YWwgYWRkcmVzcyB3ZSB3ZXJlIGFza2VkIHRvIGZhdWx0ICovXFxuLVxcdHJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xcbitcXHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbkBAIC0zNzEsNyArMzc3LDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBucGFnZXMsIDApO1xcbiBcXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcXG4gXFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcXG4tXFx0XFx0XFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuK1xcdFxcdFxcdHJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHR9XFxuQEAgLTUxNyw3ICs1MjMsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19wdWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBucGFnZXMsIGNwdV9mbGFncyk7XFxuIFxcdFxcdGlmIChyZXF1aXJlZF9mYXVsdCkge1xcbiBcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbi1cXHRcXHRcXHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHBmbiA9IHB1ZF9wZm4ocHVkKSArICgoYWRkciBcXHUwMDI2IH5QVURfTUFTSykgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuQEAgLTU2NCwyMSArNTcwLDggQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbiBcXHRyZXF1aXJlZF9mYXVsdCA9XFxuIFxcdFxcdGhtbV9wdGVfbmVlZF9mYXVsdChobW1fdm1hX3dhbGssIHBmbl9yZXFfZmxhZ3MsIGNwdV9mbGFncyk7XFxuIFxcdGlmIChyZXF1aXJlZF9mYXVsdCkge1xcbi1cXHRcXHRpbnQgcmV0O1xcbi1cXG4gXFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4tXFx0XFx0aHVnZXRsYl92bWFfdW5sb2NrX3JlYWQodm1hKTtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogQXZvaWQgZGVhZGxvY2s6IGRyb3AgdGhlIHZtYSBsb2NrIGJlZm9yZSBjYWxsaW5nXFxuLVxcdFxcdCAqIGhtbV92bWFfZmF1bHQoKSwgd2hpY2ggd2lsbCBpdHNlbGYgcG90ZW50aWFsbHkgdGFrZSBhbmRcXG4tXFx0XFx0ICogZHJvcCB0aGUgdm1hIGxvY2suIFRoaXMgaXMgYWxzbyBjb3JyZWN0IGZyb20gYVxcbi1cXHRcXHQgKiBwcm90ZWN0aW9uIHBvaW50IG9mIHZpZXcsIGJlY2F1c2UgdGhlcmUgaXMgbm8gZnVydGhlclxcbi1cXHRcXHQgKiB1c2UgaGVyZSBvZiBlaXRoZXIgcHRlIG9yIHB0bCBhZnRlciBkcm9wcGluZyB0aGUgdm1hXFxuLVxcdFxcdCAqIGxvY2suXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZXQgPSBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xcbi1cXHRcXHRodWdldGxiX3ZtYV9sb2NrX3JlYWQodm1hKTtcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuIFxcdH1cXG4gXFxuIFxcdHBmbiA9IHB0ZV9wZm4oZW50cnkpICsgKChzdGFydCBcXHUwMDI2IH5obWFzaykgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuQEAgLTYzNywyOSArNjMwLDY2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgaG1tX3dhbGtfb3BzID0ge1xcbiBcXHQud2Fsa19sb2NrXFx0PSBQR1dBTEtfUkRMT0NLLFxcbiB9O1xcbiBcXG4tLyoqXFxuLSAqIGhtbV9yYW5nZV9mYXVsdCAtIHRyeSB0byBmYXVsdCBzb21lIGFkZHJlc3MgaW4gYSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2VcXG4tICogQHJhbmdlOlxcdGFyZ3VtZW50IHN0cnVjdHVyZVxcbi0gKlxcbi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczpcXG4rLypcXG4rICogaG1tX2RvX2ZhdWx0IC0gZmF1bHQgaW4gYSByYW5nZSByZWNvcmRlZCBieSBhIHdhbGsgY2FsbGJhY2tcXG4gICpcXG4tICogLUVJTlZBTDpcXHRJbnZhbGlkIGFyZ3VtZW50cyBvciBtbSBvciB2aXJ0dWFsIGFkZHJlc3MgaXMgaW4gYW4gaW52YWxpZCB2bWFcXG4tICpcXHRcXHQoZS5nLiwgZGV2aWNlIGZpbGUgdm1hKS5cXG4tICogLUVOT01FTTpcXHRPdXQgb2YgbWVtb3J5Llxcbi0gKiAtRVBFUk06XFx0SW52YWxpZCBwZXJtaXNzaW9uIChlLmcuLCBhc2tpbmcgZm9yIHdyaXRlIGFuZCByYW5nZSBpcyByZWFkXFxuLSAqXFx0XFx0b25seSkuXFxuLSAqIC1FQlVTWTpcXHRUaGUgcmFuZ2UgaGFzIGJlZW4gaW52YWxpZGF0ZWQgYW5kIHRoZSBjYWxsZXIgbmVlZHMgdG8gd2FpdCBmb3JcXG4tICpcXHRcXHR0aGUgaW52YWxpZGF0aW9uIHRvIGZpbmlzaC5cXG4tICogLUVGQVVMVDogICAgIEEgcGFnZSB3YXMgcmVxdWVzdGVkIHRvIGJlIHZhbGlkIGFuZCBjb3VsZCBub3QgYmUgbWFkZSB2YWxpZFxcbi0gKiAgICAgICAgICAgICAgaWUgaXQgaGFzIG5vIGJhY2tpbmcgVk1BIG9yIGl0IGlzIGlsbGVnYWwgdG8gYWNjZXNzXFxuKyAqIENhbGxlZCBmcm9tIHRoZSBvdXRlciBsb29wIGluIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoKSBhZnRlciBhIGNhbGxiYWNrXFxuKyAqIHJldHVybmVkIEhNTV9GQVVMVF9QRU5ESU5HLiAgQXQgdGhpcyBwb2ludCB3ZSBob2xkIG9ubHkgbW1hcF9sb2NrO1xcbisgKiB0aGUgcGFnZS10YWJsZSBzcGlubG9jayBhbmQgYW55IGh1Z2V0bGJfdm1hX2xvY2sgYWNxdWlyZWQgYnkgdGhlIHdhbGtcXG4rICogZnJhbWV3b3JrIGhhdmUgYWxyZWFkeSBiZWVuIHJlbGVhc2VkIGJ5IHRoZSB1bndpbmQuXFxuICAqXFxuLSAqIFRoaXMgaXMgc2ltaWxhciB0byBnZXRfdXNlcl9wYWdlcygpLCBleGNlcHQgdGhhdCBpdCBjYW4gcmVhZCB0aGUgcGFnZSB0YWJsZXNcXG4tICogd2l0aG91dCBtdXRhdGluZyB0aGVtIChpZSBjYXVzaW5nIGZhdWx0cykuXFxuKyAqIFJldHVybnMgLUVCVVNZIG9uIHN1Y2Nlc3MgKGFsbCBwYWdlcyBmYXVsdGVkLCBjYWxsZXIgc2hvdWxkIHJlLXdhbGspLlxcbisgKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cXG4gICovXFxuLWludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXFxuK3N0YXRpYyBpbnQgaG1tX2RvX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbitcXHRcXHRcXHRzdHJ1Y3QgaG1tX3ZtYV93YWxrICpobW1fdm1hX3dhbGspXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBhZGRyID0gaG1tX3ZtYV93YWxrLVxcdTAwM2VsYXN0O1xcbitcXHR1bnNpZ25lZCBsb25nIGVuZCA9IGhtbV92bWFfd2Fsay1cXHUwMDNlZW5kO1xcbitcXHR1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmF1bHQgPSBobW1fdm1hX3dhbGstXFx1MDAzZXJlcXVpcmVkX2ZhdWx0O1xcbitcXHR1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MgPSBGQVVMVF9GTEFHX1JFTU9URTtcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuK1xcbitcXHRpZiAoaG1tX3ZtYV93YWxrLVxcdTAwM2Vsb2NrZWQpXFxuK1xcdFxcdGZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfQUxMT1dfUkVUUlkgfCBGQVVMVF9GTEFHX0tJTExBQkxFO1xcbitcXG4rXFx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XFxuK1xcdGlmICghdm1hKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGlmIChyZXF1aXJlZF9mYXVsdCBcXHUwMDI2IEhNTV9ORUVEX1dSSVRFX0ZBVUxUKSB7XFxuK1xcdFxcdGlmICghKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9XUklURSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcdFxcdGZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfV1JJVEU7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoOyBhZGRyIFxcdTAwM2MgZW5kOyBhZGRyICs9IFBBR0VfU0laRSkge1xcbitcXHRcXHR2bV9mYXVsdF90IHJldDtcXG4rXFxuK1xcdFxcdHJldCA9IGhhbmRsZV9tbV9mYXVsdCh2bWEsIGFkZHIsIGZhdWx0X2ZsYWdzLCBOVUxMKTtcXG4rXFxuK1xcdFxcdGlmIChyZXQgXFx1MDAyNiAoVk1fRkFVTFRfQ09NUExFVEVEIHwgVk1fRkFVTFRfUkVUUlkpKSB7XFxuK1xcdFxcdFxcdCpobW1fdm1hX3dhbGstXFx1MDAzZWxvY2tlZCA9IDA7XFxuK1xcdFxcdFxcdHJldHVybiBITU1fRkFVTFRfVU5MT0NLRUQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChyZXQgXFx1MDAyNiBWTV9GQVVMVF9FUlJPUikge1xcbitcXHRcXHRcXHRpbnQgZXJyID0gdm1fZmF1bHRfdG9fZXJybm8ocmV0LCAwKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdFxcdEJVRygpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRUJVU1k7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgaW50ICpsb2NrZWQpXFxuIHtcXG4gXFx0c3RydWN0IGhtbV92bWFfd2FsayBobW1fdm1hX3dhbGsgPSB7XFxuIFxcdFxcdC5yYW5nZSA9IHJhbmdlLFxcbitcXHRcXHQubG9ja2VkID0gbG9ja2VkLFxcbiBcXHRcXHQubGFzdCA9IHJhbmdlLVxcdTAwM2VzdGFydCxcXG4gXFx0fTtcXG4gXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSByYW5nZS1cXHUwMDNlbm90aWZpZXItXFx1MDAzZW1tO1xcbkBAIC02NzQsNiArNzA0LDIyIEBAIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXFxuIFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcdFxcdHJldCA9IHdhbGtfcGFnZV9yYW5nZShtbSwgaG1tX3ZtYV93YWxrLmxhc3QsIHJhbmdlLVxcdTAwM2VlbmQsXFxuIFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZobW1fd2Fsa19vcHMsIFxcdTAwMjZobW1fdm1hX3dhbGspO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBXaGVuIEhNTV9GQVVMVF9QRU5ESU5HIGlzIHJldHVybmVkIGEgd2FsayBjYWxsYmFja1xcbitcXHRcXHQgKiByZWNvcmRlZCBhIHJhbmdlIHRoYXQgbmVlZHMgaGFuZGxlX21tX2ZhdWx0KCk7XFxuK1xcdFxcdCAqIGhtbV9kb19mYXVsdCgpIHJ1bnMgdGhlIGZhdWx0IG91dHNpZGUgd2Fsa19wYWdlX3JhbmdlKClcXG4rXFx0XFx0ICogKHNvIG5vIHBhZ2UtdGFibGUgb3IgaHVnZXRsYl92bWFfbG9jayBpcyBoZWxkKSBhbmRcXG4rXFx0XFx0ICogcmV0dXJucyAtRUJVU1kgc28gdGhlIGxvb3AgcmUtd2Fsa3MgYW5kIHBpY2tzIHVwIHRoZVxcbitcXHRcXHQgKiBub3ctcHJlc2VudCBlbnRyaWVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJldCA9PSBITU1fRkFVTFRfUEVORElORykge1xcbitcXHRcXHRcXHRyZXQgPSBobW1fZG9fZmF1bHQobW0sIFxcdTAwMjZobW1fdm1hX3dhbGspO1xcbitcXHRcXHRcXHRpZiAocmV0ID09IEhNTV9GQVVMVF9VTkxPQ0tFRCkge1xcbitcXHRcXHRcXHRcXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBXaGVuIC1FQlVTWSBpcyByZXR1cm5lZCB0aGUgbG9vcCByZXN0YXJ0cyB3aXRoXFxuIFxcdFxcdCAqIGhtbV92bWFfd2Fsay5sYXN0IHNldCB0byBhbiBhZGRyZXNzIHRoYXQgaGFzIG5vdCBiZWVuIHN0b3JlZFxcbkBAIC02ODMsOCArNzI5LDY1IEBAIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXFxuIFxcdH0gd2hpbGUgKHJldCA9PSAtRUJVU1kpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuK1xcbisvKipcXG4rICogaG1tX3JhbmdlX2ZhdWx0IC0gdHJ5IHRvIGZhdWx0IHNvbWUgYWRkcmVzcyBpbiBhIHZpcnR1YWwgYWRkcmVzcyByYW5nZVxcbisgKiBAcmFuZ2U6XFx0YXJndW1lbnQgc3RydWN0dXJlXFxuKyAqXFxuKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOlxcbisgKlxcbisgKiAtRUlOVkFMOlxcdEludmFsaWQgYXJndW1lbnRzIG9yIG1tIG9yIHZpcnR1YWwgYWRkcmVzcyBpcyBpbiBhbiBpbnZhbGlkIHZtYVxcbisgKlxcdFxcdChlLmcuLCBkZXZpY2UgZmlsZSB2bWEpLlxcbisgKiAtRU5PTUVNOlxcdE91dCBvZiBtZW1vcnkuXFxuKyAqIC1FUEVSTTpcXHRJbnZhbGlkIHBlcm1pc3Npb24gKGUuZy4sIGFza2luZyBmb3Igd3JpdGUgYW5kIHJhbmdlIGlzIHJlYWRcXG4rICpcXHRcXHRvbmx5KS5cXG4rICogLUVCVVNZOlxcdFRoZSByYW5nZSBoYXMgYmVlbiBpbnZhbGlkYXRlZCBhbmQgdGhlIGNhbGxlciBuZWVkcyB0byB3YWl0IGZvclxcbisgKlxcdFxcdHRoZSBpbnZhbGlkYXRpb24gdG8gZmluaXNoLlxcbisgKiAtRUZBVUxUOiAgICAgQSBwYWdlIHdhcyByZXF1ZXN0ZWQgdG8gYmUgdmFsaWQgYW5kIGNvdWxkIG5vdCBiZSBtYWRlIHZhbGlkXFxuKyAqICAgICAgICAgICAgICBpZSBpdCBoYXMgbm8gYmFja2luZyBWTUEgb3IgaXQgaXMgaWxsZWdhbCB0byBhY2Nlc3NcXG4rICpcXG4rICogVGhpcyBpcyBzaW1pbGFyIHRvIGdldF91c2VyX3BhZ2VzKCksIGV4Y2VwdCB0aGF0IGl0IGNhbiByZWFkIHRoZSBwYWdlIHRhYmxlc1xcbisgKiB3aXRob3V0IG11dGF0aW5nIHRoZW0gKGllIGNhdXNpbmcgZmF1bHRzKS5cXG4rICpcXG4rICogVGhlIG1tYXAgbG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlciBhbmQgd2lsbCByZW1haW4gaGVsZCBvbiByZXR1cm4uXFxuKyAqIEZvciBhIHZhcmlhbnQgdGhhdCBhbGxvd3MgdGhlIG1tYXAgbG9jayB0byBiZSBkcm9wcGVkIGR1cmluZyBmYXVsdHMgKGUuZy4sXFxuKyAqIGZvciB1c2VyZmF1bHRmZCBzdXBwb3J0KSwgc2VlIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpLlxcbisgKi9cXG4raW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcXG4re1xcbitcXHRyZXR1cm4gaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChyYW5nZSwgTlVMTCk7XFxuK31cXG4gRVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHQpO1xcbiBcXG4rLyoqXFxuKyAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCAtIGZhdWx0IGluIGEgcmFuZ2UsIHBvc3NpYmx5IGRyb3BwaW5nIHRoZSBtbWFwIGxvY2tcXG4rICogQHJhbmdlOlxcdGFyZ3VtZW50IHN0cnVjdHVyZVxcbisgKlxcbisgKiBUaGlzIGlzIHNpbWlsYXIgdG8gaG1tX3JhbmdlX2ZhdWx0KCksIGV4Y2VwdCB0aGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgdGhlXFxuKyAqIG1tYXAgbG9jay4gVGhlIGZ1bmN0aW9uIHRha2VzIHRoZSBtbWFwIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFuZCBhbGxvd3NcXG4rICogaGFuZGxlX21tX2ZhdWx0KCkgdG8gZHJvcCBpdCBkdXJpbmcgZmF1bHRzLiBJZiB0aGUgbG9jayBpcyBkcm9wcGVkLCB0aGVcXG4rICogZnVuY3Rpb24gcmV0dXJucyAtRUJVU1kgYW5kIHRoZSBjYWxsZXIgbXVzdCByZXN0YXJ0IHRoZSB3YWxrIHdpdGggYSBmcmVzaFxcbisgKiBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbigpIHNlcXVlbmNlLlxcbisgKlxcbisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBvbmUgb2YgdGhlIGVycm9yIGNvZGVzIGRvY3VtZW50ZWQgZm9yXFxuKyAqIGhtbV9yYW5nZV9mYXVsdCgpLiAtRUlOVFIgaXMgcmV0dXJuZWQgaWYgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZyBkdXJpbmdcXG4rICogcmV0cnkgaGFuZGxpbmcuXFxuKyAqL1xcbitpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxcbit7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtXFx1MDAzZW5vdGlmaWVyLVxcdTAwM2VtbTtcXG4rXFx0aW50IGxvY2tlZCA9IDE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuK1xcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQocmFuZ2UsIFxcdTAwMjZsb2NrZWQpO1xcbitcXHRpZiAobG9ja2VkKVxcbitcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQpO1xcbitcXG4gLyoqXFxuICAqIGhtbV9kbWFfbWFwX2FsbG9jIC0gQWxsb2NhdGUgSE1NIG1hcCBzdHJ1Y3R1cmVcXG4gICogQGRldjogZGV2aWNlIHRvIGFsbG9jYXRlIHN0cnVjdHVyZSBmb3JcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xcbmluZGV4IDJmMmI5ODc5ZDEwMDUxLi43MTc2NWM0ZDgwZjNlNCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXFxuQEAgLTI5LDYgKzI5LDEwIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL2lvY3RsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdGltZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9ldmVudGZkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyZmF1bHRmZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjcG9sbC5oXFx1MDAzZVxcbiBcXG4gLypcXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbid0IGV4cG9ydGVkXFxuQEAgLTI5NDksNCArMjk1MywxNDkgQEAgVEVTVF9GX1RJTUVPVVQoaG1tLCBiZW5jaG1hcmtfdGhwX21pZ3JhdGlvbiwgMTIwKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dGhwX3Jlc3VsdHMsIFxcdTAwMjZyZWd1bGFyX3Jlc3VsdHMpO1xcbiBcXHR9XFxuIH1cXG4rLypcXG4rICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxcbisgKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKSBwYXRoLiBUaGlzIGV4ZXJjaXNlcyB0aGUgbG9jay1kcm9wIHJldHJ5XFxuKyAqIGxvZ2ljIGluIHRoZSBITU0gZnJhbWV3b3JrLlxcbisgKi9cXG4rc3RydWN0IHVmZmRfdGhyZWFkX2FyZ3Mge1xcbitcXHRpbnQgdWZmZDtcXG4rXFx0aW50IHN0b3BfZmQ7XFxuK1xcdHZvaWQgKnBhZ2VfYnVmZmVyO1xcbitcXHR1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkICp1ZmZkX2hhbmRsZXJfdGhyZWFkKHZvaWQgKmFyZylcXG4re1xcbitcXHRzdHJ1Y3QgdWZmZF90aHJlYWRfYXJncyAqYXJncyA9IGFyZztcXG4rXFx0c3RydWN0IHVmZmRfbXNnIG1zZztcXG4rXFx0c3RydWN0IHVmZmRpb19jb3B5IGNvcHk7XFxuK1xcdHN0cnVjdCBwb2xsZmQgcG9sbGZkWzJdO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cG9sbGZkWzBdLmZkID0gYXJncy1cXHUwMDNldWZmZDtcXG4rXFx0cG9sbGZkWzBdLmV2ZW50cyA9IFBPTExJTjtcXG4rXFx0cG9sbGZkWzFdLmZkID0gYXJncy1cXHUwMDNlc3RvcF9mZDtcXG4rXFx0cG9sbGZkWzFdLmV2ZW50cyA9IFBPTExJTjtcXG4rXFxuK1xcdHdoaWxlICgxKSB7XFxuK1xcdFxcdHJldCA9IHBvbGwocG9sbGZkLCAyLCAtMSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmIChwb2xsZmRbMV0ucmV2ZW50cylcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmICghKHBvbGxmZFswXS5yZXZlbnRzIFxcdTAwMjYgUE9MTElOKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRyZXQgPSByZWFkKGFyZ3MtXFx1MDAzZXVmZmQsIFxcdTAwMjZtc2csIHNpemVvZihtc2cpKTtcXG4rXFx0XFx0aWYgKHJldCAhPSBzaXplb2YobXNnKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRpZiAobXNnLmV2ZW50ICE9IFVGRkRfRVZFTlRfUEFHRUZBVUxUKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qIEZpbGwgdGhlIHBhZ2Ugd2l0aCBhIGtub3duIHBhdHRlcm4gKi9cXG4rXFx0XFx0bWVtc2V0KGFyZ3MtXFx1MDAzZXBhZ2VfYnVmZmVyLCAweEFCLCBhcmdzLVxcdTAwM2VwYWdlX3NpemUpO1xcbitcXG4rXFx0XFx0Y29weS5kc3QgPSBtc2cuYXJnLnBhZ2VmYXVsdC5hZGRyZXNzIFxcdTAwMjYgfihhcmdzLVxcdTAwM2VwYWdlX3NpemUgLSAxKTtcXG4rXFx0XFx0Y29weS5zcmMgPSAodW5zaWduZWQgbG9uZylhcmdzLVxcdTAwM2VwYWdlX2J1ZmZlcjtcXG4rXFx0XFx0Y29weS5sZW4gPSBhcmdzLVxcdTAwM2VwYWdlX3NpemU7XFxuK1xcdFxcdGNvcHkubW9kZSA9IDA7XFxuK1xcdFxcdGNvcHkuY29weSA9IDA7XFxuK1xcbitcXHRcXHRyZXQgPSBpb2N0bChhcmdzLVxcdTAwM2V1ZmZkLCBVRkZESU9fQ09QWSwgXFx1MDAyNmNvcHkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitURVNUX0YoaG1tLCB1c2VyZmF1bHRmZF9yZWFkKVxcbit7XFxuK1xcdHN0cnVjdCBobW1fYnVmZmVyICpidWZmZXI7XFxuK1xcdHN0cnVjdCB1ZmZkX3RocmVhZF9hcmdzIHVmZmRfYXJncztcXG4rXFx0dW5zaWduZWQgbG9uZyBucGFnZXM7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXHR1bnNpZ25lZCBjaGFyICpwdHI7XFxuK1xcdHB0aHJlYWRfdCB0aHJlYWQ7XFxuK1xcdGludCB1ZmZkO1xcbitcXHRpbnQgc3RvcF9mZDtcXG4rXFx0aW50IHJldDtcXG4rXFx0c3RydWN0IHVmZmRpb19hcGkgYXBpO1xcbitcXHRzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHJlZztcXG4rXFx0dWludDY0X3Qgc3RvcCA9IDE7XFxuK1xcdHNzaXplX3QgbndyaXRlO1xcbitcXG4rXFx0bnBhZ2VzID0gNDtcXG4rXFx0c2l6ZSA9IG5wYWdlcyBcXHUwMDNjXFx1MDAzYyBzZWxmLVxcdTAwM2VwYWdlX3NoaWZ0O1xcbitcXG4rXFx0LyogQ3JlYXRlIHVzZXJmYXVsdGZkICovXFxuK1xcdHVmZmQgPSBzeXNjYWxsKF9fTlJfdXNlcmZhdWx0ZmQsIE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0spO1xcbitcXHRpZiAodWZmZCBcXHUwMDNjIDApXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwidXNlcmZhdWx0ZmQgbm90IGF2YWlsYWJsZVxcXCIpO1xcbitcXG4rXFx0YXBpLmFwaSA9IFVGRkRfQVBJO1xcbitcXHRhcGkuZmVhdHVyZXMgPSAwO1xcbitcXHRyZXQgPSBpb2N0bCh1ZmZkLCBVRkZESU9fQVBJLCBcXHUwMDI2YXBpKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuK1xcbitcXHRidWZmZXIgPSBtYWxsb2Moc2l6ZW9mKCpidWZmZXIpKTtcXG4rXFx0QVNTRVJUX05FKGJ1ZmZlciwgTlVMTCk7XFxuK1xcbitcXHRidWZmZXItXFx1MDAzZWZkID0gLTE7XFxuK1xcdGJ1ZmZlci1cXHUwMDNlc2l6ZSA9IHNpemU7XFxuK1xcdGJ1ZmZlci1cXHUwMDNlbWlycm9yID0gbWFsbG9jKHNpemUpO1xcbitcXHRBU1NFUlRfTkUoYnVmZmVyLVxcdTAwM2VtaXJyb3IsIE5VTEwpO1xcbitcXG4rXFx0LyogQ3JlYXRlIGFub255bW91cyBtYXBwaW5nICovXFxuK1xcdGJ1ZmZlci1cXHUwMDNlcHRyID0gbW1hcChOVUxMLCBzaXplLFxcbitcXHRcXHRcXHQgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHRcXHQgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsXFxuK1xcdFxcdFxcdCAgIC0xLCAwKTtcXG4rXFx0QVNTRVJUX05FKGJ1ZmZlci1cXHUwMDNlcHRyLCBNQVBfRkFJTEVEKTtcXG4rXFxuK1xcdC8qIFJlZ2lzdGVyIHRoZSByZWdpb24gd2l0aCB1c2VyZmF1bHRmZCAqL1xcbitcXHRyZWcucmFuZ2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZylidWZmZXItXFx1MDAzZXB0cjtcXG4rXFx0cmVnLnJhbmdlLmxlbiA9IHNpemU7XFxuK1xcdHJlZy5tb2RlID0gVUZGRElPX1JFR0lTVEVSX01PREVfTUlTU0lORztcXG4rXFx0cmV0ID0gaW9jdGwodWZmZCwgVUZGRElPX1JFR0lTVEVSLCBcXHUwMDI2cmVnKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuK1xcbitcXHQvKiBTZXQgdXAgdGhlIGhhbmRsZXIgdGhyZWFkICovXFxuK1xcdHVmZmRfYXJncy51ZmZkID0gdWZmZDtcXG4rXFx0c3RvcF9mZCA9IGV2ZW50ZmQoMCwgRUZEX0NMT0VYRUMpO1xcbitcXHRBU1NFUlRfR0Uoc3RvcF9mZCwgMCk7XFxuK1xcdHVmZmRfYXJncy5zdG9wX2ZkID0gc3RvcF9mZDtcXG4rXFx0dWZmZF9hcmdzLnBhZ2VfYnVmZmVyID0gbWFsbG9jKHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSk7XFxuK1xcdEFTU0VSVF9ORSh1ZmZkX2FyZ3MucGFnZV9idWZmZXIsIE5VTEwpO1xcbitcXHR1ZmZkX2FyZ3MucGFnZV9zaXplID0gc2VsZi1cXHUwMDNlcGFnZV9zaXplO1xcbitcXG4rXFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZCwgTlVMTCwgdWZmZF9oYW5kbGVyX3RocmVhZCwgXFx1MDAyNnVmZmRfYXJncyk7XFxuK1xcdEFTU0VSVF9FUShyZXQsIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlIHRoZSB1bmxvY2tlZCByZWFkIHBhdGggd2hpY2ggYWxsb3dzIHRoZSBtbWFwIGxvY2sgdG8gYmVcXG4rXFx0ICogZHJvcHBlZCBkdXJpbmcgdGhlIGZhdWx0LCBlbmFibGluZyB1c2VyZmF1bHRmZCByZXNvbHV0aW9uLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VELFxcbitcXHRcXHRcXHQgICAgICBidWZmZXIsIG5wYWdlcyk7XFxuK1xcdEFTU0VSVF9FUShyZXQsIDApO1xcbitcXHRBU1NFUlRfRVEoYnVmZmVyLVxcdTAwM2VjcGFnZXMsIG5wYWdlcyk7XFxuK1xcbitcXHQvKiBWZXJpZnkgdGhlIGRldmljZSByZWFkIHRoZSBkYXRhIGZpbGxlZCBieSB0aGUgdWZmZCBoYW5kbGVyICovXFxuK1xcdHB0ciA9IGJ1ZmZlci1cXHUwMDNlbWlycm9yO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2l6ZTsgKytpKVxcbitcXHRcXHRBU1NFUlRfRVEocHRyW2ldLCAodW5zaWduZWQgY2hhcikweEFCKTtcXG4rXFxuK1xcdG53cml0ZSA9IHdyaXRlKHN0b3BfZmQsIFxcdTAwMjZzdG9wLCBzaXplb2Yoc3RvcCkpO1xcbitcXHRBU1NFUlRfRVEobndyaXRlLCBzaXplb2Yoc3RvcCkpO1xcbitcXHRwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcXG4rXFx0Y2xvc2Uoc3RvcF9mZCk7XFxuK1xcdGZyZWUodWZmZF9hcmdzLnBhZ2VfYnVmZmVyKTtcXG4rXFx0Y2xvc2UodWZmZCk7XFxuK1xcdGhtbV9idWZmZXJfZnJlZShidWZmZXIpO1xcbit9XFxuK1xcbiBURVNUX0hBUk5FU1NfTUFJTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjowMzoyOC43MjU2NzQwMzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2MjI3OTI4MTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJNU0hWX1JPT1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImhtbV9yYW5nZV9mYXVsdFwiLFxuICAgIFwiaG1tX2RvX2ZhdWx0XCIsXG4gICAgXCJobW1fcmVjb3JkX2ZhdWx0XCIsXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRfbG9ja2VkXCIsXG4gICAgXCJkbWlycm9yX3JlYWRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcIm1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKWAgaW4gdGhlIEhNTSBzdWJzeXN0ZW0gdG8gYWxsb3cgZHJvcHBpbmcgdGhlIG1tYXAgbG9jayBkdXJpbmcgcGFnZSBmYXVsdHMsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgcmVnaW9ucyBtYW5hZ2VkIGJ5IHVzZXJmYXVsdGZkLiBJdCByZWZhY3RvcnMgdGhlIGNvcmUgYGhtbV9yYW5nZV9mYXVsdCgpYCBsb2dpYyB0byBzdXBwb3J0IHRoaXMgYW5kIHVwZGF0ZXMgdGhlIGB0ZXN0X2htbWAgbW9kdWxlIGFuZCBgbXNodl9yZWdpb25zYCBkcml2ZXIgdG8gdXRpbGl6ZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZHJpdmVyIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY0Yjc1OTNmNmZlODZjYjZjNTQwZTY0NGE5YjFkMWRjZGY4ODBlNzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDAyOjAzOjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0XG5pbmRleCA3ZDYxYjdhOGI2NWI3OS4uODQ0MzQzNzEyYWJkZGEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdFxuQEAgLTIwOCw2ICsyMDgsNjUgQEAgaW52YWxpZGF0ZSgpIGNhbGxiYWNrLiBUaGF0IGxvY2sgbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nXG4gbW11X2ludGVydmFsX3JlYWRfcmV0cnkoKSB0byBhdm9pZCBhbnkgcmFjZSB3aXRoIGEgY29uY3VycmVudCBDUFUgcGFnZSB0YWJsZVxuIHVwZGF0ZS5cbiBcbitEcm9wcGluZyB0aGUgbW1hcCBsb2NrIGR1cmluZyBwYWdlIGZhdWx0c1xuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rU29tZSBWTUFzIGhhdmUgZmF1bHQgaGFuZGxlcnMgdGhhdCBuZWVkIHRvIHJlbGVhc2UgdGhlIG1tYXAgbG9jayB3aGlsZVxuK3NlcnZpY2luZyBhIGZhdWx0IChmb3IgZXhhbXBsZSwgcmVnaW9ucyBtYW5hZ2VkIGJ5IGBgdXNlcmZhdWx0ZmRgYCkuXG4rYGBobW1fcmFuZ2VfZmF1bHQoKWBgIGNhbm5vdCBiZSB1c2VkIG9uIHN1Y2ggbWFwcGluZ3MgYmVjYXVzZSBpdCBtdXN0IGhvbGQgdGhlXG4rbW1hcCBsb2NrIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNhbGwuIERyaXZlcnMgdGhhdCBuZWVkIHRvIHN1cHBvcnQgdGhlbVxuK3Nob3VsZCBjYWxsOjpcbitcbisgIGludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xuK1xuK1RoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCBgYG1tYXBfcmVhZF9sb2NrYGAgYmVmb3JlIHRoZSBjYWxsLlxuK2BgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKClgYCB0YWtlcyB0aGUgbW1hcCByZWFkIGxvY2sgaW50ZXJuYWxseSBhbmQgYWxsb3dzXG4rYGBoYW5kbGVfbW1fZmF1bHQoKWBgIHRvIGRyb3AgaXQgZHVyaW5nIGZhdWx0IGhhbmRsaW5nLiBJZiB0aGUgbW1hcCBsb2NrIGlzXG4rZHJvcHBlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGAtRUJVU1lgYC4gVGhlIGNhbGxlciBtdXN0IHRoZW4gcmVzdGFydCB0aGVcbit3YWxrIGZyb20gYGByYW5nZS1cdTAwM2VzdGFydGBgIHdpdGggYSBmcmVzaCBub3RpZmllciBzZXF1ZW5jZS4gYGAtRUlOVFJgYCBpc1xuK3JldHVybmVkIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcgZHVyaW5nIHJldHJ5IGhhbmRsaW5nLlxuK1xuK0EgdHlwaWNhbCBjYWxsZXIgbG9va3MgbGlrZSB0aGlzOjpcbitcbisgaW50IGRyaXZlcl9wb3B1bGF0ZV9yYW5nZV91bmxvY2tlZCguLi4pXG4rIHtcbisgICAgICBzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlO1xuKyAgICAgIC4uLlxuK1xuKyAgICAgIHJhbmdlLm5vdGlmaWVyID0gXHUwMDI2aW50ZXJ2YWxfc3ViO1xuKyAgICAgIHJhbmdlLnN0YXJ0ID0gLi4uO1xuKyAgICAgIHJhbmdlLmVuZCA9IC4uLjtcbisgICAgICByYW5nZS5obW1fcGZucyA9IC4uLjtcbitcbisgICAgICBpZiAoIW1tZ2V0X25vdF96ZXJvKGludGVydmFsX3N1Yi5tbSkpXG4rICAgICAgICAgIHJldHVybiAtRUZBVUxUO1xuK1xuKyBhZ2FpbjpcbisgICAgICByYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihcdTAwMjZpbnRlcnZhbF9zdWIpO1xuKyAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZChcdTAwMjZyYW5nZSk7XG4rICAgICAgaWYgKHJldCkge1xuKyAgICAgICAgICBpZiAocmV0ID09IC1FQlVTWSlcbisgICAgICAgICAgICAgIGdvdG8gYWdhaW47XG4rICAgICAgICAgIGdvdG8gb3V0X3B1dDtcbisgICAgICB9XG4rXG4rICAgICAgdGFrZV9sb2NrKGRyaXZlci1cdTAwM2V1cGRhdGUpO1xuKyAgICAgIGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShcdTAwMjZpbnRlcnZhbF9zdWIsIHJhbmdlLm5vdGlmaWVyX3NlcSkpIHtcbisgICAgICAgICAgcmVsZWFzZV9sb2NrKGRyaXZlci1cdTAwM2V1cGRhdGUpO1xuKyAgICAgICAgICBnb3RvIGFnYWluO1xuKyAgICAgIH1cbitcbisgICAgICAvKiBVc2UgcGZucyBhcnJheSBjb250ZW50IHRvIHVwZGF0ZSBkZXZpY2UgcGFnZSB0YWJsZSxcbisgICAgICAgKiB1bmRlciB0aGUgdXBkYXRlIGxvY2sgKi9cbitcbisgICAgICByZWxlYXNlX2xvY2soZHJpdmVyLVx1MDAzZXVwZGF0ZSk7XG4rICAgICAgcmV0ID0gMDtcbitcbisgb3V0X3B1dDpcbisgICAgICBtbXB1dChpbnRlcnZhbF9zdWIubW0pO1xuKyAgICAgIHJldHVybiByZXQ7XG4rIH1cbitcbiBMZXZlcmFnZSBkZWZhdWx0X2ZsYWdzIGFuZCBwZm5fZmxhZ3NfbWFza1xuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYyBiL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNcbmluZGV4IDZkNjVlNWI0MjE1Mjk1Li4wNDY3NmYwNmM1Yzc0MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNcbisrKyBiL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNcbkBAIC0zODgsMTMgKzM4OCwxMSBAQCBpbnQgbXNodl9yZWdpb25fZ2V0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbilcbiAgKlxuICAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgKiAxLiBSZWFkcyB0aGUgbm90aWZpZXIgc2VxdWVuY2UgZm9yIHRoZSBITU0gcmFuZ2UuXG4tICogMi4gQWNxdWlyZXMgYSByZWFkIGxvY2sgb24gdGhlIG1lbW9yeSBtYXAuXG4tICogMy4gSGFuZGxlcyBITU0gZmF1bHRzIGZvciB0aGUgc3BlY2lmaWVkIHJhbmdlLlxuLSAqIDQuIFJlbGVhc2VzIHRoZSByZWFkIGxvY2sgb24gdGhlIG1lbW9yeSBtYXAuXG4tICogNS4gSWYgc3VjY2Vzc2Z1bCwgbG9ja3MgdGhlIG1lbW9yeSByZWdpb24gbXV0ZXguXG4tICogNi4gVmVyaWZpZXMgaWYgdGhlIG5vdGlmaWVyIHNlcXVlbmNlIGhhcyBjaGFuZ2VkIGR1cmluZyB0aGUgb3BlcmF0aW9uLlxuKyAqIDIuIEhhbmRsZXMgSE1NIGZhdWx0cyBmb3IgdGhlIHNwZWNpZmllZCByYW5nZS5cbisgKiAzLiBJZiBzdWNjZXNzZnVsLCBsb2NrcyB0aGUgbWVtb3J5IHJlZ2lvbiBtdXRleC5cbisgKiA0LiBWZXJpZmllcyBpZiB0aGUgbm90aWZpZXIgc2VxdWVuY2UgaGFzIGNoYW5nZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24uXG4gICogICAgSWYgaXQgaGFzLCByZWxlYXNlcyB0aGUgbXV0ZXggYW5kIHJldHVybnMgLUVCVVNZIHRvIG1hdGNoIHdpdGhcbi0gKiAgICBobW1fcmFuZ2VfZmF1bHQoKSByZXR1cm4gY29kZSBmb3IgcmVwZWF0aW5nLlxuKyAqICAgIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpIHNvIHRoZSBjYWxsZXIgcmV0cmllcyB0aGUgcmFuZ2UgZmF1bHQuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiAgKi9cbkBAIC00MDQsOSArNDAyLDcgQEAgc3RhdGljIGludCBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2soc3RydWN0IG1zaHZfbWVtX3JlZ2lvbiAqcmVnaW9uLFxuIFx0aW50IHJldDtcbiBcbiBcdHJhbmdlLVx1MDAzZW5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKHJhbmdlLVx1MDAzZW5vdGlmaWVyKTtcbi1cdG1tYXBfcmVhZF9sb2NrKHJlZ2lvbi1cdTAwM2VtcmVnX21uaS5tbSk7XG4tXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHQocmFuZ2UpO1xuLVx0bW1hcF9yZWFkX3VubG9jayhyZWdpb24tXHUwMDNlbXJlZ19tbmkubW0pO1xuK1x0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHJhbmdlKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9obW0uaCBiL2luY2x1ZGUvbGludXgvaG1tLmhcbmluZGV4IGRiNzVmZmM5NDlhN2FjLi4xYjU4NGU1YTI5MDAxZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaG1tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaG1tLmhcbkBAIC0xMjMsNiArMTIzLDcgQEAgc3RydWN0IGhtbV9yYW5nZSB7XG4gICogUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL21tL2htbS5yc3QgZm9yIGhvdyB0byB1c2UgdGhlIHJhbmdlIEFQSS5cbiAgKi9cbiBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTtcbitpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTtcbiBcbiAvKlxuICAqIEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQgLSBkZWZhdWx0IHRpbWVvdXQgKG1zKSB3aGVuIHdhaXRpbmcgZm9yIGEgcmFuZ2VcbmRpZmYgLS1naXQgYS9saWIvdGVzdF9obW0uYyBiL2xpYi90ZXN0X2htbS5jXG5pbmRleCA0NWMwY2I5OTIyMTg0YS4uZGNjM2EyM2JiOTgzZGMgMTAwNjQ0XG4tLS0gYS9saWIvdGVzdF9obW0uY1xuKysrIGIvbGliL3Rlc3RfaG1tLmNcbkBAIC0zODksNiArMzg5LDc2IEBAIHN0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbitcdFx0XHRcdFx0c3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXG4re1xuK1x0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cbitcdFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0d2hpbGUgKHRydWUpIHtcbitcdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcbitcdFx0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0cmFuZ2UtXHUwMDNlbm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4ocmFuZ2UtXHUwMDNlbm90aWZpZXIpO1xuK1x0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQocmFuZ2UpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuK1x0XHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2UtXHUwMDNlbm90aWZpZXIsXG4rXHRcdFx0XHRcdCAgICByYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEpKSB7XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0ID0gZG1pcnJvcl9kb19mYXVsdChkbWlycm9yLCByYW5nZSk7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4rb3V0OlxuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBkbWlycm9yX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuK1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuK1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB3cml0ZSlcbit7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGRtaXJyb3ItXHUwMDNlbm90aWZpZXIubW07XG4rXHR1bnNpZ25lZCBsb25nIGFkZHI7XG4rXHR1bnNpZ25lZCBsb25nIHBmbnNbMzJdO1xuK1x0c3RydWN0IGhtbV9yYW5nZSByYW5nZSA9IHtcbitcdFx0Lm5vdGlmaWVyID0gXHUwMDI2ZG1pcnJvci1cdTAwM2Vub3RpZmllcixcbitcdFx0LmhtbV9wZm5zID0gcGZucyxcbitcdFx0LnBmbl9mbGFnc19tYXNrID0gMCxcbitcdFx0LmRlZmF1bHRfZmxhZ3MgPVxuK1x0XHRcdEhNTV9QRk5fUkVRX0ZBVUxUIHwgKHdyaXRlID8gSE1NX1BGTl9SRVFfV1JJVEUgOiAwKSxcbitcdFx0LmRldl9wcml2YXRlX293bmVyID0gZG1pcnJvci1cdTAwM2VtZGV2aWNlLFxuK1x0fTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKCFtbWdldF9ub3RfemVybyhtbSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0Zm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgXHUwMDNjIGVuZDsgYWRkciA9IHJhbmdlLmVuZCkge1xuK1x0XHRyYW5nZS5zdGFydCA9IGFkZHI7XG4rXHRcdHJhbmdlLmVuZCA9IG1pbihhZGRyICsgKEFSUkFZX1NJWkUocGZucykgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpLCBlbmQpO1xuK1xuK1x0XHRyZXQgPSBkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkKGRtaXJyb3IsIFx1MDAyNnJhbmdlKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdG1tcHV0KG1tKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZG1pcnJvcl9mYXVsdChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHQgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgd3JpdGUpXG4ge1xuQEAgLTQ4OCw2ICs1NTgsNDcgQEAgc3RhdGljIGludCBkbWlycm9yX3JlYWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZG1pcnJvcl9yZWFkX3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuK1x0XHRcdFx0IHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcbit7XG4rXHRzdHJ1Y3QgZG1pcnJvcl9ib3VuY2UgYm91bmNlO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xuK1x0dW5zaWduZWQgbG9uZyBzaXplID0gY21kLVx1MDAzZW5wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbitcdGludCByZXQ7XG4rXG4rXHRzdGFydCA9IGNtZC1cdTAwM2VhZGRyO1xuK1x0ZW5kID0gc3RhcnQgKyBzaXplO1xuK1x0aWYgKGVuZCBcdTAwM2Mgc3RhcnQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0ID0gZG1pcnJvcl9ib3VuY2VfaW5pdChcdTAwMjZib3VuY2UsIHN0YXJ0LCBzaXplKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHR3aGlsZSAoMSkge1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuK1x0XHRyZXQgPSBkbWlycm9yX2RvX3JlYWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgXHUwMDI2Ym91bmNlKTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuK1x0XHRpZiAocmV0ICE9IC1FTk9FTlQpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdHN0YXJ0ID0gY21kLVx1MDAzZWFkZHIgKyAoYm91bmNlLmNwYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4rXHRcdHJldCA9IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgZmFsc2UpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRjbWQtXHUwMDNlZmF1bHRzKys7XG4rXHR9XG4rXG4rXHRpZiAocmV0ID09IDApIHtcbitcdFx0aWYgKGNvcHlfdG9fdXNlcih1NjRfdG9fdXNlcl9wdHIoY21kLVx1MDAzZXB0ciksIGJvdW5jZS5wdHIsXG4rXHRcdFx0XHQgYm91bmNlLnNpemUpKVxuK1x0XHRcdHJldCA9IC1FRkFVTFQ7XG4rXHR9XG4rXHRjbWQtXHUwMDNlY3BhZ2VzID0gYm91bmNlLmNwYWdlcztcbitcdGRtaXJyb3JfYm91bmNlX2ZpbmkoXHUwMDI2Ym91bmNlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZG1pcnJvcl9kb193cml0ZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBkbWlycm9yX2JvdW5jZSAqYm91bmNlKVxuIHtcbkBAIC0xNTcyLDYgKzE2ODMsOSBAQCBzdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdGRtaXJyb3ItXHUwMDNlZmxhZ3MgPSBjbWQubnBhZ2VzO1xuIFx0XHRyZXQgPSAwO1xuIFx0XHRicmVhaztcbitcdGNhc2UgSE1NX0RNSVJST1JfUkVBRF9VTkxPQ0tFRDpcbitcdFx0cmV0ID0gZG1pcnJvcl9yZWFkX3VubG9ja2VkKGRtaXJyb3IsIFx1MDAyNmNtZCk7XG4rXHRcdGJyZWFrO1xuIFxuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfaG1tX3VhcGkuaCBiL2xpYi90ZXN0X2htbV91YXBpLmhcbmluZGV4IGY5NGM2ZDQ1NzMzODI4Li5lYTliMGVjNDA0ZmI1NSAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0X2htbV91YXBpLmhcbisrKyBiL2xpYi90ZXN0X2htbV91YXBpLmhcbkBAIC0zOCw2ICszOCw3IEBAIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQge1xuICNkZWZpbmUgSE1NX0RNSVJST1JfQ0hFQ0tfRVhDTFVTSVZFXHRfSU9XUignSCcsIDB4MDYsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXG4gI2RlZmluZSBITU1fRE1JUlJPUl9SRUxFQVNFXHRcdF9JT1dSKCdIJywgMHgwNywgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX0ZMQUdTXHRcdF9JT1dSKCdIJywgMHgwOCwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbisjZGVmaW5lIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRURcdF9JT1dSKCdIJywgMHgwOSwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbiBcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQ1x0KDFVTEwgXHUwMDNjXHUwMDNjIDApXG4gXG5kaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uY1xuaW5kZXggNGYzZjYyN2QyYjQ3NzIuLjMxNjExNjk5NDIwOWM4IDEwMDY0NFxuLS0tIGEvbW0vaG1tLmNcbisrKyBiL21tL2htbS5jXG5AQCAtMzIsOSArMzIsMjcgQEBcbiBcbiBzdHJ1Y3QgaG1tX3ZtYV93YWxrIHtcbiBcdHN0cnVjdCBobW1fcmFuZ2VcdCpyYW5nZTtcbitcdGludFx0XHRcdCpsb2NrZWQ7XG4gXHR1bnNpZ25lZCBsb25nXHRcdGxhc3Q7XG4rXHR1bnNpZ25lZCBsb25nXHRcdGVuZDtcbitcdHVuc2lnbmVkIGludFx0XHRyZXF1aXJlZF9mYXVsdDtcbiB9O1xuIFxuKy8qXG4rICogSW50ZXJuYWwgc2VudGluZWwgcmV0dXJuZWQgYnkgd2FsayBjYWxsYmFja3Mgd2hlbiB0aGV5IG5lZWQgYSBwYWdlIGZhdWx0LlxuKyAqIFRoZSBjYWxsYmFjayBzdG9yZXMgZW5kL3JlcXVpcmVkX2ZhdWx0IGluIGhtbV92bWFfd2FsazsgdGhlIG91dGVyIGxvb3BcbisgKiBjb25zdW1lcyB0aGUgc2VudGluZWwgYW5kIG5ldmVyIHByb3BhZ2F0ZXMgaXQgdG8gdGhlIGNhbGxlci5cbisgKi9cbisjZGVmaW5lIEhNTV9GQVVMVF9QRU5ESU5HXHQtRUFHQUlOXG4rXG4rLypcbisgKiBJbnRlcm5hbCBzZW50aW5lbCByZXR1cm5lZCBieSBobW1fZG9fZmF1bHQoKSB3aGVuIGhhbmRsZV9tbV9mYXVsdCgpXG4rICogY29tcGxldGVzIGEgcGFnZSBmYXVsdCB3aXRoIHRoZSBtbWFwIGxvY2sgZHJvcHBlZC4gaG1tX2RvX2ZhdWx0KCkgc2V0c1xuKyAqICpsb2NrZWQgPSAwOyB0aGUgb3V0ZXIgbG9vcCBjb25zdW1lcyB0aGUgc2VudGluZWwgYW5kIG5ldmVyIHByb3BhZ2F0ZXMgaXRcbisgKiB0byB0aGUgY2FsbGVyLlxuKyAqL1xuKyNkZWZpbmUgSE1NX0ZBVUxUX1VOTE9DS0VEXHQtRU5PTENLXG4rXG4gZW51bSB7XG4gXHRITU1fTkVFRF9GQVVMVCA9IDEgXHUwMDNjXHUwMDNjIDAsXG4gXHRITU1fTkVFRF9XUklURV9GQVVMVCA9IDEgXHUwMDNjXHUwMDNjIDEsXG5AQCAtNjAsMzcgKzc4LDI1IEBAIHN0YXRpYyBpbnQgaG1tX3BmbnNfZmlsbCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIH1cbiBcbiAvKlxuLSAqIGhtbV92bWFfZmF1bHQoKSAtIGZhdWx0IGluIGEgcmFuZ2UgbGFja2luZyB2YWxpZCBwbWQgb3IgcHRlKHMpXG4tICogQGFkZHI6IHJhbmdlIHZpcnR1YWwgc3RhcnQgYWRkcmVzcyAoaW5jbHVzaXZlKVxuLSAqIEBlbmQ6IHJhbmdlIHZpcnR1YWwgZW5kIGFkZHJlc3MgKGV4Y2x1c2l2ZSlcbi0gKiBAcmVxdWlyZWRfZmF1bHQ6IEhNTV9ORUVEXyogZmxhZ3Ncbi0gKiBAd2FsazogbW1fd2FsayBzdHJ1Y3R1cmVcbi0gKiBSZXR1cm46IC1FQlVTWSBhZnRlciBwYWdlIGZhdWx0LCBvciBwYWdlIGZhdWx0IGVycm9yXG4rICogaG1tX3JlY29yZF9mYXVsdCgpIC0gcmVjb3JkIGEgcmFuZ2UgdGhhdCBuZWVkcyB0byBiZSBmYXVsdGVkIGluXG4gICpcbi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHBtZF9ub25lKCkgb3IgcHRlX25vbmUoKSByZXR1cm5zIHRydWUsXG4tICogb3Igd2hlbmV2ZXIgdGhlcmUgaXMgbm8gcGFnZSBkaXJlY3RvcnkgY292ZXJpbmcgdGhlIHZpcnR1YWwgYWRkcmVzcyByYW5nZS5cbisgKiBDYWxsZWQgYnkgdGhlIHdhbGsgY2FsbGJhY2tzIHdoZW4gdGhleSBkaXNjb3ZlciB0aGF0IHBhcnQgb2YgdGhlIHJhbmdlXG4rICogbmVlZHMgYSBwYWdlIGZhdWx0LiAgVGhlIGNhbGxiYWNrIHJlY29yZHMgd2hhdCB0byBmYXVsdCBhbmQgcmV0dXJuc1xuKyAqIEhNTV9GQVVMVF9QRU5ESU5HOyB0aGUgb3V0ZXIgbG9vcCBpbiBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKCkgZHJvcHNcbisgKiBiYWNrIG91dCBvZiB3YWxrX3BhZ2VfcmFuZ2UoKSBhbmQgaW52b2tlcyBoYW5kbGVfbW1fZmF1bHQoKSBmcm9tIGEgY29udGV4dFxuKyAqIHdoZXJlIG5vIHBhZ2UtdGFibGUgb3IgaHVnZXRsYl92bWFfbG9jayBpcyBoZWxkLlxuICAqL1xuLXN0YXRpYyBpbnQgaG1tX3ZtYV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmF1bHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuK3N0YXRpYyBpbnQgaG1tX3JlY29yZF9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuK1x0XHRcdCAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmF1bHQsXG4rXHRcdFx0ICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIHtcbiBcdHN0cnVjdCBobW1fdm1hX3dhbGsgKmhtbV92bWFfd2FsayA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbi1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay1cdTAwM2V2bWE7XG4tXHR1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MgPSBGQVVMVF9GTEFHX1JFTU9URTtcbiBcbiBcdFdBUk5fT05fT05DRSghcmVxdWlyZWRfZmF1bHQpO1xuIFx0aG1tX3ZtYV93YWxrLVx1MDAzZWxhc3QgPSBhZGRyO1xuLVxuLVx0aWYgKHJlcXVpcmVkX2ZhdWx0IFx1MDAyNiBITU1fTkVFRF9XUklURV9GQVVMVCkge1xuLVx0XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1dSSVRFKSlcbi1cdFx0XHRyZXR1cm4gLUVQRVJNO1xuLVx0XHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFO1xuLVx0fVxuLVxuLVx0Zm9yICg7IGFkZHIgXHUwMDNjIGVuZDsgYWRkciArPSBQQUdFX1NJWkUpXG4tXHRcdGlmIChoYW5kbGVfbW1fZmF1bHQodm1hLCBhZGRyLCBmYXVsdF9mbGFncywgTlVMTCkgXHUwMDI2XG4tXHRcdCAgICBWTV9GQVVMVF9FUlJPUilcbi1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdHJldHVybiAtRUJVU1k7XG4rXHRobW1fdm1hX3dhbGstXHUwMDNlZW5kID0gZW5kO1xuK1x0aG1tX3ZtYV93YWxrLVx1MDAzZXJlcXVpcmVkX2ZhdWx0ID0gcmVxdWlyZWRfZmF1bHQ7XG4rXHRyZXR1cm4gSE1NX0ZBVUxUX1BFTkRJTkc7XG4gfVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgaG1tX3B0ZV9uZWVkX2ZhdWx0KGNvbnN0IHN0cnVjdCBobW1fdm1hX3dhbGsgKmhtbV92bWFfd2FsayxcbkBAIC0xNzQsNyArMTgwLDcgQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfaG9sZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRyZXR1cm4gaG1tX3BmbnNfZmlsbChhZGRyLCBlbmQsIHJhbmdlLCBITU1fUEZOX0VSUk9SKTtcbiBcdH1cbiBcdGlmIChyZXF1aXJlZF9mYXVsdClcbi1cdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4rXHRcdHJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xuIFx0cmV0dXJuIGhtbV9wZm5zX2ZpbGwoYWRkciwgZW5kLCByYW5nZSwgMCk7XG4gfVxuIFxuQEAgLTIwOSw3ICsyMTUsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0cmVxdWlyZWRfZmF1bHQgPVxuIFx0XHRobW1fcmFuZ2VfbmVlZF9mYXVsdChobW1fdm1hX3dhbGssIGhtbV9wZm5zLCBucGFnZXMsIGNwdV9mbGFncyk7XG4gXHRpZiAocmVxdWlyZWRfZmF1bHQpXG4tXHRcdHJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xuK1x0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcbiBcdHBmbiA9IHBtZF9wZm4ocG1kKSArICgoYWRkciBcdTAwMjYgflBNRF9NQVNLKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4gXHRmb3IgKGkgPSAwOyBhZGRyIFx1MDAzYyBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFLCBpKyssIHBmbisrKSB7XG5AQCAtMzI4LDcgKzMzNCw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcHRlKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gZmF1bHQ6XG4gXHRwdGVfdW5tYXAocHRlcCk7XG4gXHQvKiBGYXVsdCBhbnkgdmlydHVhbCBhZGRyZXNzIHdlIHdlcmUgYXNrZWQgdG8gZmF1bHQgKi9cbi1cdHJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xuK1x0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbkBAIC0zNzEsNyArMzc3LDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdFx0XHQgICAgICBucGFnZXMsIDApO1xuIFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG4gXHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG4tXHRcdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4rXHRcdFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdH1cbkBAIC01MTcsNyArNTIzLDcgQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfcHVkKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRcdFx0XHQgICAgICBucGFnZXMsIGNwdV9mbGFncyk7XG4gXHRcdGlmIChyZXF1aXJlZF9mYXVsdCkge1xuIFx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4tXHRcdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4rXHRcdFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4gXHRcdH1cbiBcbiBcdFx0cGZuID0gcHVkX3BmbihwdWQpICsgKChhZGRyIFx1MDAyNiB+UFVEX01BU0spIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbkBAIC01NjQsMjEgKzU3MCw4IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbiBcdHJlcXVpcmVkX2ZhdWx0ID1cbiBcdFx0aG1tX3B0ZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgcGZuX3JlcV9mbGFncywgY3B1X2ZsYWdzKTtcbiBcdGlmIChyZXF1aXJlZF9mYXVsdCkge1xuLVx0XHRpbnQgcmV0O1xuLVxuIFx0XHRzcGluX3VubG9jayhwdGwpO1xuLVx0XHRodWdldGxiX3ZtYV91bmxvY2tfcmVhZCh2bWEpO1xuLVx0XHQvKlxuLVx0XHQgKiBBdm9pZCBkZWFkbG9jazogZHJvcCB0aGUgdm1hIGxvY2sgYmVmb3JlIGNhbGxpbmdcbi1cdFx0ICogaG1tX3ZtYV9mYXVsdCgpLCB3aGljaCB3aWxsIGl0c2VsZiBwb3RlbnRpYWxseSB0YWtlIGFuZFxuLVx0XHQgKiBkcm9wIHRoZSB2bWEgbG9jay4gVGhpcyBpcyBhbHNvIGNvcnJlY3QgZnJvbSBhXG4tXHRcdCAqIHByb3RlY3Rpb24gcG9pbnQgb2YgdmlldywgYmVjYXVzZSB0aGVyZSBpcyBubyBmdXJ0aGVyXG4tXHRcdCAqIHVzZSBoZXJlIG9mIGVpdGhlciBwdGUgb3IgcHRsIGFmdGVyIGRyb3BwaW5nIHRoZSB2bWFcbi1cdFx0ICogbG9jay5cbi1cdFx0ICovXG4tXHRcdHJldCA9IGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4tXHRcdGh1Z2V0bGJfdm1hX2xvY2tfcmVhZCh2bWEpO1xuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcdH1cbiBcbiBcdHBmbiA9IHB0ZV9wZm4oZW50cnkpICsgKChzdGFydCBcdTAwMjYgfmhtYXNrKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5AQCAtNjM3LDI5ICs2MzAsNjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBobW1fd2Fsa19vcHMgPSB7XG4gXHQud2Fsa19sb2NrXHQ9IFBHV0FMS19SRExPQ0ssXG4gfTtcbiBcbi0vKipcbi0gKiBobW1fcmFuZ2VfZmF1bHQgLSB0cnkgdG8gZmF1bHQgc29tZSBhZGRyZXNzIGluIGEgdmlydHVhbCBhZGRyZXNzIHJhbmdlXG4tICogQHJhbmdlOlx0YXJndW1lbnQgc3RydWN0dXJlXG4tICpcbi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczpcbisvKlxuKyAqIGhtbV9kb19mYXVsdCAtIGZhdWx0IGluIGEgcmFuZ2UgcmVjb3JkZWQgYnkgYSB3YWxrIGNhbGxiYWNrXG4gICpcbi0gKiAtRUlOVkFMOlx0SW52YWxpZCBhcmd1bWVudHMgb3IgbW0gb3IgdmlydHVhbCBhZGRyZXNzIGlzIGluIGFuIGludmFsaWQgdm1hXG4tICpcdFx0KGUuZy4sIGRldmljZSBmaWxlIHZtYSkuXG4tICogLUVOT01FTTpcdE91dCBvZiBtZW1vcnkuXG4tICogLUVQRVJNOlx0SW52YWxpZCBwZXJtaXNzaW9uIChlLmcuLCBhc2tpbmcgZm9yIHdyaXRlIGFuZCByYW5nZSBpcyByZWFkXG4tICpcdFx0b25seSkuXG4tICogLUVCVVNZOlx0VGhlIHJhbmdlIGhhcyBiZWVuIGludmFsaWRhdGVkIGFuZCB0aGUgY2FsbGVyIG5lZWRzIHRvIHdhaXQgZm9yXG4tICpcdFx0dGhlIGludmFsaWRhdGlvbiB0byBmaW5pc2guXG4tICogLUVGQVVMVDogICAgIEEgcGFnZSB3YXMgcmVxdWVzdGVkIHRvIGJlIHZhbGlkIGFuZCBjb3VsZCBub3QgYmUgbWFkZSB2YWxpZFxuLSAqICAgICAgICAgICAgICBpZSBpdCBoYXMgbm8gYmFja2luZyBWTUEgb3IgaXQgaXMgaWxsZWdhbCB0byBhY2Nlc3NcbisgKiBDYWxsZWQgZnJvbSB0aGUgb3V0ZXIgbG9vcCBpbiBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKCkgYWZ0ZXIgYSBjYWxsYmFja1xuKyAqIHJldHVybmVkIEhNTV9GQVVMVF9QRU5ESU5HLiAgQXQgdGhpcyBwb2ludCB3ZSBob2xkIG9ubHkgbW1hcF9sb2NrO1xuKyAqIHRoZSBwYWdlLXRhYmxlIHNwaW5sb2NrIGFuZCBhbnkgaHVnZXRsYl92bWFfbG9jayBhY3F1aXJlZCBieSB0aGUgd2Fsa1xuKyAqIGZyYW1ld29yayBoYXZlIGFscmVhZHkgYmVlbiByZWxlYXNlZCBieSB0aGUgdW53aW5kLlxuICAqXG4tICogVGhpcyBpcyBzaW1pbGFyIHRvIGdldF91c2VyX3BhZ2VzKCksIGV4Y2VwdCB0aGF0IGl0IGNhbiByZWFkIHRoZSBwYWdlIHRhYmxlc1xuLSAqIHdpdGhvdXQgbXV0YXRpbmcgdGhlbSAoaWUgY2F1c2luZyBmYXVsdHMpLlxuKyAqIFJldHVybnMgLUVCVVNZIG9uIHN1Y2Nlc3MgKGFsbCBwYWdlcyBmYXVsdGVkLCBjYWxsZXIgc2hvdWxkIHJlLXdhbGspLlxuKyAqIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxuICAqL1xuLWludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXG4rc3RhdGljIGludCBobW1fZG9fZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0c3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGhtbV92bWFfd2Fsay1cdTAwM2VsYXN0O1xuK1x0dW5zaWduZWQgbG9uZyBlbmQgPSBobW1fdm1hX3dhbGstXHUwMDNlZW5kO1xuK1x0dW5zaWduZWQgaW50IHJlcXVpcmVkX2ZhdWx0ID0gaG1tX3ZtYV93YWxrLVx1MDAzZXJlcXVpcmVkX2ZhdWx0O1xuK1x0dW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzID0gRkFVTFRfRkxBR19SRU1PVEU7XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbitcbitcdGlmIChobW1fdm1hX3dhbGstXHUwMDNlbG9ja2VkKVxuK1x0XHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX0FMTE9XX1JFVFJZIHwgRkFVTFRfRkxBR19LSUxMQUJMRTtcbitcbitcdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xuK1x0aWYgKCF2bWEpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0aWYgKHJlcXVpcmVkX2ZhdWx0IFx1MDAyNiBITU1fTkVFRF9XUklURV9GQVVMVCkge1xuK1x0XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1dSSVRFKSlcbitcdFx0XHRyZXR1cm4gLUVQRVJNO1xuK1x0XHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFO1xuK1x0fVxuK1xuK1x0Zm9yICg7IGFkZHIgXHUwMDNjIGVuZDsgYWRkciArPSBQQUdFX1NJWkUpIHtcbitcdFx0dm1fZmF1bHRfdCByZXQ7XG4rXG4rXHRcdHJldCA9IGhhbmRsZV9tbV9mYXVsdCh2bWEsIGFkZHIsIGZhdWx0X2ZsYWdzLCBOVUxMKTtcbitcbitcdFx0aWYgKHJldCBcdTAwMjYgKFZNX0ZBVUxUX0NPTVBMRVRFRCB8IFZNX0ZBVUxUX1JFVFJZKSkge1xuK1x0XHRcdCpobW1fdm1hX3dhbGstXHUwMDNlbG9ja2VkID0gMDtcbitcdFx0XHRyZXR1cm4gSE1NX0ZBVUxUX1VOTE9DS0VEO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChyZXQgXHUwMDI2IFZNX0ZBVUxUX0VSUk9SKSB7XG4rXHRcdFx0aW50IGVyciA9IHZtX2ZhdWx0X3RvX2Vycm5vKHJldCwgMCk7XG4rXG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdFx0QlVHKCk7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAtRUJVU1k7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgaW50ICpsb2NrZWQpXG4ge1xuIFx0c3RydWN0IGhtbV92bWFfd2FsayBobW1fdm1hX3dhbGsgPSB7XG4gXHRcdC5yYW5nZSA9IHJhbmdlLFxuK1x0XHQubG9ja2VkID0gbG9ja2VkLFxuIFx0XHQubGFzdCA9IHJhbmdlLVx1MDAzZXN0YXJ0LFxuIFx0fTtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtXHUwMDNlbm90aWZpZXItXHUwMDNlbW07XG5AQCAtNjc0LDYgKzcwNCwyMiBAQCBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdHJldCA9IHdhbGtfcGFnZV9yYW5nZShtbSwgaG1tX3ZtYV93YWxrLmxhc3QsIHJhbmdlLVx1MDAzZWVuZCxcbiBcdFx0XHRcdCAgICAgIFx1MDAyNmhtbV93YWxrX29wcywgXHUwMDI2aG1tX3ZtYV93YWxrKTtcbitcdFx0LypcbitcdFx0ICogV2hlbiBITU1fRkFVTFRfUEVORElORyBpcyByZXR1cm5lZCBhIHdhbGsgY2FsbGJhY2tcbitcdFx0ICogcmVjb3JkZWQgYSByYW5nZSB0aGF0IG5lZWRzIGhhbmRsZV9tbV9mYXVsdCgpO1xuK1x0XHQgKiBobW1fZG9fZmF1bHQoKSBydW5zIHRoZSBmYXVsdCBvdXRzaWRlIHdhbGtfcGFnZV9yYW5nZSgpXG4rXHRcdCAqIChzbyBubyBwYWdlLXRhYmxlIG9yIGh1Z2V0bGJfdm1hX2xvY2sgaXMgaGVsZCkgYW5kXG4rXHRcdCAqIHJldHVybnMgLUVCVVNZIHNvIHRoZSBsb29wIHJlLXdhbGtzIGFuZCBwaWNrcyB1cCB0aGVcbitcdFx0ICogbm93LXByZXNlbnQgZW50cmllcy5cbitcdFx0ICovXG4rXHRcdGlmIChyZXQgPT0gSE1NX0ZBVUxUX1BFTkRJTkcpIHtcbitcdFx0XHRyZXQgPSBobW1fZG9fZmF1bHQobW0sIFx1MDAyNmhtbV92bWFfd2Fsayk7XG4rXHRcdFx0aWYgKHJldCA9PSBITU1fRkFVTFRfVU5MT0NLRUQpIHtcbitcdFx0XHRcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbitcdFx0XHRcdFx0cmV0dXJuIC1FSU5UUjtcbitcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4rXHRcdFx0fVxuK1x0XHR9XG4gXHRcdC8qXG4gXHRcdCAqIFdoZW4gLUVCVVNZIGlzIHJldHVybmVkIHRoZSBsb29wIHJlc3RhcnRzIHdpdGhcbiBcdFx0ICogaG1tX3ZtYV93YWxrLmxhc3Qgc2V0IHRvIGFuIGFkZHJlc3MgdGhhdCBoYXMgbm90IGJlZW4gc3RvcmVkXG5AQCAtNjgzLDggKzcyOSw2NSBAQCBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxuIFx0fSB3aGlsZSAocmV0ID09IC1FQlVTWSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbitcbisvKipcbisgKiBobW1fcmFuZ2VfZmF1bHQgLSB0cnkgdG8gZmF1bHQgc29tZSBhZGRyZXNzIGluIGEgdmlydHVhbCBhZGRyZXNzIHJhbmdlXG4rICogQHJhbmdlOlx0YXJndW1lbnQgc3RydWN0dXJlXG4rICpcbisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczpcbisgKlxuKyAqIC1FSU5WQUw6XHRJbnZhbGlkIGFyZ3VtZW50cyBvciBtbSBvciB2aXJ0dWFsIGFkZHJlc3MgaXMgaW4gYW4gaW52YWxpZCB2bWFcbisgKlx0XHQoZS5nLiwgZGV2aWNlIGZpbGUgdm1hKS5cbisgKiAtRU5PTUVNOlx0T3V0IG9mIG1lbW9yeS5cbisgKiAtRVBFUk06XHRJbnZhbGlkIHBlcm1pc3Npb24gKGUuZy4sIGFza2luZyBmb3Igd3JpdGUgYW5kIHJhbmdlIGlzIHJlYWRcbisgKlx0XHRvbmx5KS5cbisgKiAtRUJVU1k6XHRUaGUgcmFuZ2UgaGFzIGJlZW4gaW52YWxpZGF0ZWQgYW5kIHRoZSBjYWxsZXIgbmVlZHMgdG8gd2FpdCBmb3JcbisgKlx0XHR0aGUgaW52YWxpZGF0aW9uIHRvIGZpbmlzaC5cbisgKiAtRUZBVUxUOiAgICAgQSBwYWdlIHdhcyByZXF1ZXN0ZWQgdG8gYmUgdmFsaWQgYW5kIGNvdWxkIG5vdCBiZSBtYWRlIHZhbGlkXG4rICogICAgICAgICAgICAgIGllIGl0IGhhcyBubyBiYWNraW5nIFZNQSBvciBpdCBpcyBpbGxlZ2FsIHRvIGFjY2Vzc1xuKyAqXG4rICogVGhpcyBpcyBzaW1pbGFyIHRvIGdldF91c2VyX3BhZ2VzKCksIGV4Y2VwdCB0aGF0IGl0IGNhbiByZWFkIHRoZSBwYWdlIHRhYmxlc1xuKyAqIHdpdGhvdXQgbXV0YXRpbmcgdGhlbSAoaWUgY2F1c2luZyBmYXVsdHMpLlxuKyAqXG4rICogVGhlIG1tYXAgbG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlciBhbmQgd2lsbCByZW1haW4gaGVsZCBvbiByZXR1cm4uXG4rICogRm9yIGEgdmFyaWFudCB0aGF0IGFsbG93cyB0aGUgbW1hcCBsb2NrIHRvIGJlIGRyb3BwZWQgZHVyaW5nIGZhdWx0cyAoZS5nLixcbisgKiBmb3IgdXNlcmZhdWx0ZmQgc3VwcG9ydCksIHNlZSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKS5cbisgKi9cbitpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxuK3tcbitcdHJldHVybiBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHJhbmdlLCBOVUxMKTtcbit9XG4gRVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHQpO1xuIFxuKy8qKlxuKyAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCAtIGZhdWx0IGluIGEgcmFuZ2UsIHBvc3NpYmx5IGRyb3BwaW5nIHRoZSBtbWFwIGxvY2tcbisgKiBAcmFuZ2U6XHRhcmd1bWVudCBzdHJ1Y3R1cmVcbisgKlxuKyAqIFRoaXMgaXMgc2ltaWxhciB0byBobW1fcmFuZ2VfZmF1bHQoKSwgZXhjZXB0IHRoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCB0aGVcbisgKiBtbWFwIGxvY2suIFRoZSBmdW5jdGlvbiB0YWtlcyB0aGUgbW1hcCByZWFkIGxvY2sgaW50ZXJuYWxseSBhbmQgYWxsb3dzXG4rICogaGFuZGxlX21tX2ZhdWx0KCkgdG8gZHJvcCBpdCBkdXJpbmcgZmF1bHRzLiBJZiB0aGUgbG9jayBpcyBkcm9wcGVkLCB0aGVcbisgKiBmdW5jdGlvbiByZXR1cm5zIC1FQlVTWSBhbmQgdGhlIGNhbGxlciBtdXN0IHJlc3RhcnQgdGhlIHdhbGsgd2l0aCBhIGZyZXNoXG4rICogbW11X2ludGVydmFsX3JlYWRfYmVnaW4oKSBzZXF1ZW5jZS5cbisgKlxuKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZXJyb3IgY29kZXMgZG9jdW1lbnRlZCBmb3JcbisgKiBobW1fcmFuZ2VfZmF1bHQoKS4gLUVJTlRSIGlzIHJldHVybmVkIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcgZHVyaW5nXG4rICogcmV0cnkgaGFuZGxpbmcuXG4rICovXG4raW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcbit7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJhbmdlLVx1MDAzZW5vdGlmaWVyLVx1MDAzZW1tO1xuK1x0aW50IGxvY2tlZCA9IDE7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bW1hcF9yZWFkX2xvY2sobW0pO1xuK1x0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChyYW5nZSwgXHUwMDI2bG9ja2VkKTtcbitcdGlmIChsb2NrZWQpXG4rXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rRVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQpO1xuK1xuIC8qKlxuICAqIGhtbV9kbWFfbWFwX2FsbG9jIC0gQWxsb2NhdGUgSE1NIG1hcCBzdHJ1Y3R1cmVcbiAgKiBAZGV2OiBkZXZpY2UgdG8gYWxsb2NhdGUgc3RydWN0dXJlIGZvclxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbmluZGV4IDJmMmI5ODc5ZDEwMDUxLi43MTc2NWM0ZDgwZjNlNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuQEAgLTI5LDYgKzI5LDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvZXZlbnRmZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcmZhdWx0ZmQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3BvbGwuaFx1MDAzZVxuIFxuIC8qXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbid0IGV4cG9ydGVkXG5AQCAtMjk0OSw0ICsyOTUzLDE0OSBAQCBURVNUX0ZfVElNRU9VVChobW0sIGJlbmNobWFya190aHBfbWlncmF0aW9uLCAxMjApXG4gXHRcdFx0XHRcdFx1MDAyNnRocF9yZXN1bHRzLCBcdTAwMjZyZWd1bGFyX3Jlc3VsdHMpO1xuIFx0fVxuIH1cbisvKlxuKyAqIFRlc3QgdGhhdCBITU0gY2FuIGZhdWx0IGluIHBhZ2VzIGJhY2tlZCBieSB1c2VyZmF1bHRmZCB1c2luZyB0aGVcbisgKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKSBwYXRoLiBUaGlzIGV4ZXJjaXNlcyB0aGUgbG9jay1kcm9wIHJldHJ5XG4rICogbG9naWMgaW4gdGhlIEhNTSBmcmFtZXdvcmsuXG4rICovXG4rc3RydWN0IHVmZmRfdGhyZWFkX2FyZ3Mge1xuK1x0aW50IHVmZmQ7XG4rXHRpbnQgc3RvcF9mZDtcbitcdHZvaWQgKnBhZ2VfYnVmZmVyO1xuK1x0dW5zaWduZWQgbG9uZyBwYWdlX3NpemU7XG4rfTtcbitcbitzdGF0aWMgdm9pZCAqdWZmZF9oYW5kbGVyX3RocmVhZCh2b2lkICphcmcpXG4re1xuK1x0c3RydWN0IHVmZmRfdGhyZWFkX2FyZ3MgKmFyZ3MgPSBhcmc7XG4rXHRzdHJ1Y3QgdWZmZF9tc2cgbXNnO1xuK1x0c3RydWN0IHVmZmRpb19jb3B5IGNvcHk7XG4rXHRzdHJ1Y3QgcG9sbGZkIHBvbGxmZFsyXTtcbitcdGludCByZXQ7XG4rXG4rXHRwb2xsZmRbMF0uZmQgPSBhcmdzLVx1MDAzZXVmZmQ7XG4rXHRwb2xsZmRbMF0uZXZlbnRzID0gUE9MTElOO1xuK1x0cG9sbGZkWzFdLmZkID0gYXJncy1cdTAwM2VzdG9wX2ZkO1xuK1x0cG9sbGZkWzFdLmV2ZW50cyA9IFBPTExJTjtcbitcbitcdHdoaWxlICgxKSB7XG4rXHRcdHJldCA9IHBvbGwocG9sbGZkLCAyLCAtMSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRpZiAocG9sbGZkWzFdLnJldmVudHMpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGlmICghKHBvbGxmZFswXS5yZXZlbnRzIFx1MDAyNiBQT0xMSU4pKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRyZXQgPSByZWFkKGFyZ3MtXHUwMDNldWZmZCwgXHUwMDI2bXNnLCBzaXplb2YobXNnKSk7XG4rXHRcdGlmIChyZXQgIT0gc2l6ZW9mKG1zZykpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGlmIChtc2cuZXZlbnQgIT0gVUZGRF9FVkVOVF9QQUdFRkFVTFQpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIEZpbGwgdGhlIHBhZ2Ugd2l0aCBhIGtub3duIHBhdHRlcm4gKi9cbitcdFx0bWVtc2V0KGFyZ3MtXHUwMDNlcGFnZV9idWZmZXIsIDB4QUIsIGFyZ3MtXHUwMDNlcGFnZV9zaXplKTtcbitcbitcdFx0Y29weS5kc3QgPSBtc2cuYXJnLnBhZ2VmYXVsdC5hZGRyZXNzIFx1MDAyNiB+KGFyZ3MtXHUwMDNlcGFnZV9zaXplIC0gMSk7XG4rXHRcdGNvcHkuc3JjID0gKHVuc2lnbmVkIGxvbmcpYXJncy1cdTAwM2VwYWdlX2J1ZmZlcjtcbitcdFx0Y29weS5sZW4gPSBhcmdzLVx1MDAzZXBhZ2Vfc2l6ZTtcbitcdFx0Y29weS5tb2RlID0gMDtcbitcdFx0Y29weS5jb3B5ID0gMDtcbitcbitcdFx0cmV0ID0gaW9jdGwoYXJncy1cdTAwM2V1ZmZkLCBVRkZESU9fQ09QWSwgXHUwMDI2Y29weSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rVEVTVF9GKGhtbSwgdXNlcmZhdWx0ZmRfcmVhZClcbit7XG4rXHRzdHJ1Y3QgaG1tX2J1ZmZlciAqYnVmZmVyO1xuK1x0c3RydWN0IHVmZmRfdGhyZWFkX2FyZ3MgdWZmZF9hcmdzO1xuK1x0dW5zaWduZWQgbG9uZyBucGFnZXM7XG4rXHR1bnNpZ25lZCBsb25nIHNpemU7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXHR1bnNpZ25lZCBjaGFyICpwdHI7XG4rXHRwdGhyZWFkX3QgdGhyZWFkO1xuK1x0aW50IHVmZmQ7XG4rXHRpbnQgc3RvcF9mZDtcbitcdGludCByZXQ7XG4rXHRzdHJ1Y3QgdWZmZGlvX2FwaSBhcGk7XG4rXHRzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHJlZztcbitcdHVpbnQ2NF90IHN0b3AgPSAxO1xuK1x0c3NpemVfdCBud3JpdGU7XG4rXG4rXHRucGFnZXMgPSA0O1xuK1x0c2l6ZSA9IG5wYWdlcyBcdTAwM2NcdTAwM2Mgc2VsZi1cdTAwM2VwYWdlX3NoaWZ0O1xuK1xuK1x0LyogQ3JlYXRlIHVzZXJmYXVsdGZkICovXG4rXHR1ZmZkID0gc3lzY2FsbChfX05SX3VzZXJmYXVsdGZkLCBPX0NMT0VYRUMgfCBPX05PTkJMT0NLKTtcbitcdGlmICh1ZmZkIFx1MDAzYyAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJ1c2VyZmF1bHRmZCBub3QgYXZhaWxhYmxlXCIpO1xuK1xuK1x0YXBpLmFwaSA9IFVGRkRfQVBJO1xuK1x0YXBpLmZlYXR1cmVzID0gMDtcbitcdHJldCA9IGlvY3RsKHVmZmQsIFVGRkRJT19BUEksIFx1MDAyNmFwaSk7XG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbitcbitcdGJ1ZmZlciA9IG1hbGxvYyhzaXplb2YoKmJ1ZmZlcikpO1xuK1x0QVNTRVJUX05FKGJ1ZmZlciwgTlVMTCk7XG4rXG4rXHRidWZmZXItXHUwMDNlZmQgPSAtMTtcbitcdGJ1ZmZlci1cdTAwM2VzaXplID0gc2l6ZTtcbitcdGJ1ZmZlci1cdTAwM2VtaXJyb3IgPSBtYWxsb2Moc2l6ZSk7XG4rXHRBU1NFUlRfTkUoYnVmZmVyLVx1MDAzZW1pcnJvciwgTlVMTCk7XG4rXG4rXHQvKiBDcmVhdGUgYW5vbnltb3VzIG1hcHBpbmcgKi9cbitcdGJ1ZmZlci1cdTAwM2VwdHIgPSBtbWFwKE5VTEwsIHNpemUsXG4rXHRcdFx0ICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0XHQgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsXG4rXHRcdFx0ICAgLTEsIDApO1xuK1x0QVNTRVJUX05FKGJ1ZmZlci1cdTAwM2VwdHIsIE1BUF9GQUlMRUQpO1xuK1xuK1x0LyogUmVnaXN0ZXIgdGhlIHJlZ2lvbiB3aXRoIHVzZXJmYXVsdGZkICovXG4rXHRyZWcucmFuZ2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZylidWZmZXItXHUwMDNlcHRyO1xuK1x0cmVnLnJhbmdlLmxlbiA9IHNpemU7XG4rXHRyZWcubW9kZSA9IFVGRkRJT19SRUdJU1RFUl9NT0RFX01JU1NJTkc7XG4rXHRyZXQgPSBpb2N0bCh1ZmZkLCBVRkZESU9fUkVHSVNURVIsIFx1MDAyNnJlZyk7XG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbitcbitcdC8qIFNldCB1cCB0aGUgaGFuZGxlciB0aHJlYWQgKi9cbitcdHVmZmRfYXJncy51ZmZkID0gdWZmZDtcbitcdHN0b3BfZmQgPSBldmVudGZkKDAsIEVGRF9DTE9FWEVDKTtcbitcdEFTU0VSVF9HRShzdG9wX2ZkLCAwKTtcbitcdHVmZmRfYXJncy5zdG9wX2ZkID0gc3RvcF9mZDtcbitcdHVmZmRfYXJncy5wYWdlX2J1ZmZlciA9IG1hbGxvYyhzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4rXHRBU1NFUlRfTkUodWZmZF9hcmdzLnBhZ2VfYnVmZmVyLCBOVUxMKTtcbitcdHVmZmRfYXJncy5wYWdlX3NpemUgPSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZTtcbitcbitcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgdWZmZF9oYW5kbGVyX3RocmVhZCwgXHUwMDI2dWZmZF9hcmdzKTtcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuK1xuK1x0LypcbitcdCAqIFVzZSB0aGUgdW5sb2NrZWQgcmVhZCBwYXRoIHdoaWNoIGFsbG93cyB0aGUgbW1hcCBsb2NrIHRvIGJlXG4rXHQgKiBkcm9wcGVkIGR1cmluZyB0aGUgZmF1bHQsIGVuYWJsaW5nIHVzZXJmYXVsdGZkIHJlc29sdXRpb24uXG4rXHQgKi9cbitcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VELFxuK1x0XHRcdCAgICAgIGJ1ZmZlciwgbnBhZ2VzKTtcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuK1x0QVNTRVJUX0VRKGJ1ZmZlci1cdTAwM2VjcGFnZXMsIG5wYWdlcyk7XG4rXG4rXHQvKiBWZXJpZnkgdGhlIGRldmljZSByZWFkIHRoZSBkYXRhIGZpbGxlZCBieSB0aGUgdWZmZCBoYW5kbGVyICovXG4rXHRwdHIgPSBidWZmZXItXHUwMDNlbWlycm9yO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2l6ZTsgKytpKVxuK1x0XHRBU1NFUlRfRVEocHRyW2ldLCAodW5zaWduZWQgY2hhcikweEFCKTtcbitcbitcdG53cml0ZSA9IHdyaXRlKHN0b3BfZmQsIFx1MDAyNnN0b3AsIHNpemVvZihzdG9wKSk7XG4rXHRBU1NFUlRfRVEobndyaXRlLCBzaXplb2Yoc3RvcCkpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XG4rXHRjbG9zZShzdG9wX2ZkKTtcbitcdGZyZWUodWZmZF9hcmdzLnBhZ2VfYnVmZmVyKTtcbitcdGNsb3NlKHVmZmQpO1xuK1x0aG1tX2J1ZmZlcl9mcmVlKGJ1ZmZlcik7XG4rfVxuK1xuIFRFU1RfSEFSTkVTU19NQUlOXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjowMzoyOC43MjU2ODMzMjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTE5NDQ5MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhNTSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgSE1NIHBhdGNoLCBhbmQgaXQgc2VlbXMgbGlrZSBhIGZhaXJseSB0YXJnZXRlZCBjaGFuZ2UuIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhbGxvd2luZyB1cyB0byBkcm9wIHRoZSBtbWFwIGxvY2sgZHVyaW5nIHBhZ2UgZmF1bHRzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKClgIGZ1bmN0aW9uIGlzIHRoZSBrZXksIGFuZCBpdCdzIGRlc2lnbmVkIHRvIGJlIGJlbmVmaWNpYWwgZm9yIHJlZ2lvbnMgbWFuYWdlZCBieSBgdXNlcmZhdWx0ZmRgLCB3aGljaCBtYWtlcyBzZW5zZS4gTWluaW1pemluZyBsb2NrIGNvbnRlbnRpb24gZHVyaW5nIGZhdWx0IGhhbmRsaW5nIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcsIGVzcGVjaWFsbHkgaW4gdGhpcyBjb250ZXh0LlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBhIGdvb2QgbnVtYmVyIG9mIGZpbGVzOiBgbW0vaG1tLmNgLCB0aGUgaW5jbHVkZSBmaWxlcywgdGhlIHRlc3QgY29kZSAoYGxpYi90ZXN0X2htbS5jYCksIHRoZSBIeXBlci1WIGRyaXZlciAoYGRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNgKSwgYW5kIGEgc2VsZi10ZXN0LiBUaGlzIGluZGljYXRlcyBhIGdvb2QgbGV2ZWwgb2Ygc2NvcGUgYW5kIGltcGFjdCwgdG91Y2hpbmcgYm90aCBjb3JlIEhNTSBmdW5jdGlvbmFsaXR5IGFuZCB0aGUgcmVsZXZhbnQgdXNlciBzcGFjZSBpbnRlcmZhY2VzIGFuZCBkcml2ZXJzLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgbG9va3Mgc291bmQuIFdlJ3ZlIGdvdCB0aGUgbmV3IGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRgIEFQSSwgYW5kIHRoZSBleGlzdGluZyBgaG1tX3JhbmdlX2ZhdWx0YCBoYXMgYmVlbiByZXdvcmtlZCB0byB1dGlsaXplIGEgY29tbW9uIGludGVybmFsIGZ1bmN0aW9uLiBUaGUgSHlwZXItViBkcml2ZXIgKGBtc2h2X3JlZ2lvbnMuY2ApIGlzIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgQVBJLCBzbyB3ZSBoYXZlIGEgY29uY3JldGUgdXNlIGNhc2UuIEFuZCwgaW1wb3J0YW50bHksIHRoZXJlJ3MgYSBuZXcgYEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRURgIGlvY3RsIGFkZGVkIHRvIHRoZSB0ZXN0IGNvZGUsIHdoaWNoIGdpdmVzIHVzIGEgZGVkaWNhdGVkIG1lY2hhbmlzbSB0byBhY3R1YWxseSAqdGVzdCogdGhpcyBuZXcgdW5sb2NrZWQgZnVuY3Rpb25hbGl0eS5cblxuUmVhY2hhYmxlIGNvZGUgaXMgY3JpdGljYWwuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBjb2RlIGlzIGFjdHVhbGx5ICp1c2VkKi4gYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZGAgaXMgZXhwb3J0ZWQsIGFuZCBpdCdzIGJlaW5nIHVzZWQgYnkgYHRlc3RfaG1tLmNgIChhIHRlc3QgbW9kdWxlLCBnb29kISkgYW5kIGBtc2h2X3JlZ2lvbnMuY2AgKEh5cGVyLVYpLiBTbywgdGhlIHJlYWNoYWJpbGl0eSBzZWVtcyBzb2xpZC4gQnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBidWlsZCBjb25maWcgb3B0aW9ucyB0byB2ZXJpZnkgdGhleSBhcmUgYWN0aXZlLlxuXG5Ob3csIHRvIG1ha2Ugc3VyZSB0aGUgY29kZSBpcyBhY3R1YWxseSAqZW5hYmxlZCogaW4gcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gY2hlY2sgZm9yIGBDT05GSUdfVEVTVF9ITU1gLCBgQ09ORklHX0hZUEVSVmAsIGFuZCBgQ09ORklHX01TSFZgLiBMZXQgbWUgZmlyZSB1cCBteSBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzZXR0aW5ncyBhcmUgZm9yIHRoaXMgY29kZS4gVGhpcyB3aWxsIGNvbmZpcm0gdGhlIHBhdGNoJ3MgaW50ZWdyYXRpb24gaW50byB0aGUgc3RhbmRhcmQga2VybmVsIGJ1aWxkIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjEwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6MDM6MzYuMjQ1MTM2NDY5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MzY5MjAyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yMTg9c2hvdWxkIGNhbGw6OlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMTktXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjIyMDogIGludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMjEtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIyMj1UaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgYGBtbWFwX3JlYWRfbG9ja2BgIGJlZm9yZSB0aGUgY2FsbC5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjIzOmBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKClgYCB0YWtlcyB0aGUgbW1hcCByZWFkIGxvY2sgaW50ZXJuYWxseSBhbmQgYWxsb3dzXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIyNC1gYGhhbmRsZV9tbV9mYXVsdCgpYGAgdG8gZHJvcCBpdCBkdXJpbmcgZmF1bHQgaGFuZGxpbmcuIElmIHRoZSBtbWFwIGxvY2sgaXNcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yMjk9QSB0eXBpY2FsIGNhbGxlciBsb29rcyBsaWtlIHRoaXM6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI0NS0gICAgICByYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihcXHUwMDI2aW50ZXJ2YWxfc3ViKTtcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjQ2OiAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZChcXHUwMDI2cmFuZ2UpO1xcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNDctICAgICAgaWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYz0zNzk9aW50IG1zaHZfcmVnaW9uX2dldChzdHJ1Y3QgbXNodl9tZW1fcmVnaW9uICpyZWdpb24pXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jLTM5NC0gKiAgICBJZiBpdCBoYXMsIHJlbGVhc2VzIHRoZSBtdXRleCBhbmQgcmV0dXJucyAtRUJVU1kgdG8gbWF0Y2ggd2l0aFxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM6Mzk1OiAqICAgIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZCgpIHNvIHRoZSBjYWxsZXIgcmV0cmllcyB0aGUgcmFuZ2UgZmF1bHQuXFxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy0zOTYtICpcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM9Mzk5PXN0YXRpYyBpbnQgbXNodl9yZWdpb25faG1tX2ZhdWx0X2FuZF9sb2NrKHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbixcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtNDA0LVxcdHJhbmdlLVxcdTAwM2Vub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS1cXHUwMDNlbm90aWZpZXIpO1xcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM6NDA1OlxcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZChyYW5nZSk7XFxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy00MDYtXFx0aWYgKHJldClcXG4tLVxcbmluY2x1ZGUvbGludXgvaG1tLmg9MTI1PWludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xcbmluY2x1ZGUvbGludXgvaG1tLmg6MTI2OmludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xcbmluY2x1ZGUvbGludXgvaG1tLmgtMTI3LVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MzkyPXN0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTQwNS1cXHRcXHRyYW5nZS1cXHUwMDNlbm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4ocmFuZ2UtXFx1MDAzZW5vdGlmaWVyKTtcXG5saWIvdGVzdF9obW0uYzo0MDY6XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHJhbmdlKTtcXG5saWIvdGVzdF9obW0uYy00MDctXFx0XFx0aWYgKHJldCkge1xcbi0tXFxubW0vaG1tLmM9Njg4PXN0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgaW50ICpsb2NrZWQpXFxuLS1cXG5tbS9obW0uYy03NTMtICogRm9yIGEgdmFyaWFudCB0aGF0IGFsbG93cyB0aGUgbW1hcCBsb2NrIHRvIGJlIGRyb3BwZWQgZHVyaW5nIGZhdWx0cyAoZS5nLixcXG5tbS9obW0uYzo3NTQ6ICogZm9yIHVzZXJmYXVsdGZkIHN1cHBvcnQpLCBzZWUgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKCkuXFxubW0vaG1tLmMtNzU1LSAqL1xcbi0tXFxubW0vaG1tLmM9NzYwPUVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0KTtcXG4tLVxcbm1tL2htbS5jLTc2Mi0vKipcXG5tbS9obW0uYzo3NjM6ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkIC0gZmF1bHQgaW4gYSByYW5nZSwgcG9zc2libHkgZHJvcHBpbmcgdGhlIG1tYXAgbG9ja1xcbm1tL2htbS5jLTc2NC0gKiBAcmFuZ2U6XFx0YXJndW1lbnQgc3RydWN0dXJlXFxuLS1cXG5tbS9obW0uYy03NzUtICovXFxubW0vaG1tLmM6Nzc2OmludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXFxubW0vaG1tLmMtNzc3LXtcXG4tLVxcbm1tL2htbS5jLTc4OC19XFxubW0vaG1tLmM6Nzg5OkVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKTtcXG5tbS9obW0uYy03OTAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0yOTAxPVRFU1RfRl9USU1FT1VUKGhtbSwgYmVuY2htYXJrX3RocF9taWdyYXRpb24sIDEyMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5NTctICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjI5NTg6ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkKCkgcGF0aC4gVGhpcyBleGVyY2lzZXMgdGhlIGxvY2stZHJvcCByZXRyeVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5NTktICogbG9naWMgaW4gdGhlIEhNTSBmcmFtZXdvcmsuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDAyOjAzOjQ0LjA4MjA2ODgxOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjAzMzk0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFJlbGV2YW50IENvbmZpZ3VyYXRpb24gRmlsZXMqKlxuXG5SaWdodCwgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlciwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiBhZmZhaXJzIHJlZ2FyZGluZyB0aGUgSE1NIHRlc3RpbmcgYW5kIHRoZSBoeXBlcnZpc29yIHJlZ2lvbnMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9mIGBsaWIvdGVzdF9obW0uY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHRlc3QgSE1NIGlzIGNvcnJlY3RseSBjb25maWd1cmVkIGFuZCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb2J2aW91cyByZWQgZmxhZ3MgdGhlcmUuIFRoZW4gSSdsbCBzaGlmdCBnZWFycyBhbmQgY2hlY2sgdGhlIGBkcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jYCBjb25maWcuIEkgd2FudCB0byBtYWtlIGNlcnRhaW4gdGhhdCByZWdpb24gc2V0dGluZ3MsIHBhcnRpY3VsYXJseSB0aG9zZSByZWxhdGVkIHRvIG1lbW9yeSBtYXBwaW5nIG9yIGFkZHJlc3Mgc3BhY2UgYWxsb2NhdGlvbiwgaGF2ZW4ndCBiZWVuIGNvbmZpZ3VyZWQgaW4gYSB3YXkgdGhhdCB3b3VsZCBpbnRlcmZlcmUgd2l0aCB0aGUgSE1NIHRlc3RzLiBJJ20gbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gdGhlc2UgdHdvIGNvbmZpZ3VyYXRpb24gYXJlYXMuIEl0J3MgYSBmdW5kYW1lbnRhbCBzYW5pdHkgY2hlY2sgdG8gcnVsZSBvdXQgb2J2aW91cyBjb25maWd1cmF0aW9uIHByb2JsZW1zIGJlZm9yZSBJIHN0YXJ0IGRlZXBlciBkZWJ1Z2dpbmcgb3IgbWFrZSBjb2RlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjgzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6MDM6NDcuNzQyNDEwODY0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NDkxMDcwODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGVzdF9obW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiTUFJTlRBSU5FUlM9MTE4NTM9RjpcXHRpbmNsdWRlL2xpbnV4L2htbSpcXG5NQUlOVEFJTkVSUzoxMTg1NDpGOlxcdGxpYi90ZXN0X2htbSpcXG5NQUlOVEFJTkVSUy0xMTg1NS1GOlxcdG1tL2htbSpcXG4tLVxcbmxpYi9NYWtlZmlsZT0xMDI9b2JqLSQoQ09ORklHX1RFU1RfTE9DS1VQKSArPSB0ZXN0X2xvY2t1cC5vXFxubGliL01ha2VmaWxlOjEwMzpvYmotJChDT05GSUdfVEVTVF9ITU0pICs9IHRlc3RfaG1tLm9cXG5saWIvTWFrZWZpbGUtMTA0LW9iai0kKENPTkZJR19URVNUX0ZSRUVfUEFHRVMpICs9IHRlc3RfZnJlZV9wYWdlcy5vXFxuLS1cXG5saWIvdGVzdF9obW0uYy0zMi1cXG5saWIvdGVzdF9obW0uYzozMzojaW5jbHVkZSBcXFwidGVzdF9obW1fdWFwaS5oXFxcIlxcbmxpYi90ZXN0X2htbS5jLTM0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGU9MTgxPVRFU1RfRklMRVMgOj0gdGVzdF92bWFsbG9jLnNoXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGU6MTgyOlRFU1RfRklMRVMgKz0gdGVzdF9obW0uc2hcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZS0xODMtVEVTVF9GSUxFUyArPSB2YV9oaWdoX2FkZHJfc3dpdGNoLnNoXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy00MC0gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo0MTojaW5jbHVkZSBcXHUwMDNjbGliL3Rlc3RfaG1tX3VhcGkuaFxcdTAwM2VcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy00Mi0jaW5jbHVkZSBcXHUwMDNjbW0vZ3VwX3Rlc3QuaFxcdTAwM2VcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoPTM0MT1DQVRFR09SWT1cXFwibXJlbWFwXFxcIiBydW5fdGVzdCAuL21yZW1hcF9kb250dW5tYXBcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaC0zNDItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2g6MzQzOkNBVEVHT1JZPVxcXCJobW1cXFwiIHJ1bl90ZXN0IGJhc2ggLi90ZXN0X2htbS5zaCBzbW9rZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoLTM0NC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoLTExLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoOjEyOlRFU1RfTkFNRT1cXFwidGVzdF9obW1cXFwiXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGVzdF9obW0uc2g6MTM6RFJJVkVSPVxcXCJ0ZXN0X2htbVxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaC0xNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6MDM6NTUuMjkxNTMwNjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDg1MjE4NDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiB0aGVzZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBgQ09ORklHX1RFU1RfSE1NYCAtIHRoYXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpdCdzIHRoZSBmbGFnIHRoYXQgY29udHJvbHMgdGhlIGJ1aWxkIGluY2x1c2lvbiBmb3IgYHRlc3RfaG1tLmNgLiBFYXN5IGVub3VnaC4gQnV0IG5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIGtlZXAgdGhlIGNvZGUgb3JnYW5pemVkIGFuZCBhdm9pZCBhbnkgY29uZmlndXJhdGlvbiBjb25mbGljdHMuIFRoYXQgYnJpbmdzIG1lIHRvIHRoZSBuZXh0IGZpbGUgSSBuZWVkIHRvIGNvbnNpZGVyLCB3aGljaCBpcyBgbXNodl9yZWdpb25zLmNgLiBJIGhhdmUgdG8gbm93IGJlZ2luIHRoZSBwcm9jZXNzIHRvIHRoaW5rIHRocm91Z2ggaXRzIGNvbmZpZyBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUzMSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDAyOjA0OjAzLjc3Njc1MzE4NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTExOTgyNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1zaHZfcmVnaW9uc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2h2L01ha2VmaWxlPTE2PW1zaHZfcm9vdC15IDo9IG1zaHZfcm9vdF9tYWluLm8gbXNodl9zeW5pYy5vIG1zaHZfZXZlbnRmZC5vIG1zaHZfaXJxLm8gXFxcXFxcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTc6XFx0ICAgICAgIG1zaHZfcm9vdF9odl9jYWxsLm8gbXNodl9wb3J0aWRfdGFibGUubyBtc2h2X3JlZ2lvbnMub1xcbmRyaXZlcnMvaHYvTWFrZWZpbGUtMTgtbXNodl9yb290LSQoQ09ORklHX0RFQlVHX0ZTKSArPSBtc2h2X2RlYnVnZnMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjowNDoxMS4yODg3NDI2MjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI2MzI0NzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSHlwZXItViBEcml2ZXIgTWFrZWZpbGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgbXNodl9yb290YCBpcyBkZWZpbmVkIG9yIHVzZWQgd2l0aGluIHRoZSBIeXBlci1WIGRyaXZlciBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCBsb2NhdGVkIGluIHRoZSBgZHJpdmVycy9odi9gIGRpcmVjdG9yeS4gVGhhdCBmaWxlIGlzIHVzdWFsbHkgdGhlIGNlbnRyYWwgcG9pbnQgb2YgY29uZmlndXJhdGlvbiBmb3IgdGhhdCBlbnRpcmUgcGFydCBvZiB0aGUga2VybmVsLCBzbyBpdOKAmXMgdGhlIGxvZ2ljYWwgZmlyc3QgcGxhY2UgdG8gbG9vay4gSG9wZWZ1bGx5LCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGRlZmluaXRpb24gb3IgcmVmZXJlbmNlLCBhbmQgSSB3b24ndCBoYXZlIHRvIHRyYWNlIHRocm91Z2ggaW5jbHVkZSBmaWxlcyBvciBjb25kaXRpb25hbCBsb2dpYyB0byBmaW5kIGl0LiBUaW1lIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODYwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6MDQ6MTQuMzE1MDcyNzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNTkwODI1MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXNodl9yb290XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaHYvTWFrZWZpbGU9ND1vYmotJChDT05GSUdfSFlQRVJWX0JBTExPT04pXFx0Kz0gaHZfYmFsbG9vbi5vXFxuZHJpdmVycy9odi9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19NU0hWX1JPT1QpXFx0XFx0Kz0gbXNodl9yb290Lm9cXG5kcml2ZXJzL2h2L01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX01TSFZfVlRMKSAgICAgICAgICArPSBtc2h2X3Z0bC5vXFxuLS1cXG5kcml2ZXJzL2h2L01ha2VmaWxlPTE1PWh2X3V0aWxzLXkgOj0gaHZfdXRpbC5vIGh2X2t2cC5vIGh2X3NuYXBzaG90Lm8gaHZfdXRpbHNfdHJhbnNwb3J0Lm9cXG5kcml2ZXJzL2h2L01ha2VmaWxlOjE2Om1zaHZfcm9vdC15IDo9IG1zaHZfcm9vdF9tYWluLm8gbXNodl9zeW5pYy5vIG1zaHZfZXZlbnRmZC5vIG1zaHZfaXJxLm8gXFxcXFxcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTc6XFx0ICAgICAgIG1zaHZfcm9vdF9odl9jYWxsLm8gbXNodl9wb3J0aWRfdGFibGUubyBtc2h2X3JlZ2lvbnMub1xcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTg6bXNodl9yb290LSQoQ09ORklHX0RFQlVHX0ZTKSArPSBtc2h2X2RlYnVnZnMub1xcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTk6bXNodl9yb290LSQoQ09ORklHX1RSQUNFUE9JTlRTKSArPSBtc2h2X3RyYWNlLm9cXG5kcml2ZXJzL2h2L01ha2VmaWxlLTIwLW1zaHZfdnRsLXkgOj0gbXNodl92dGxfbWFpbi5vXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfZGVidWdmcy5jLTE2LSNpbmNsdWRlIFxcXCJtc2h2LmhcXFwiXFxuZHJpdmVycy9odi9tc2h2X2RlYnVnZnMuYzoxNzojaW5jbHVkZSBcXFwibXNodl9yb290LmhcXFwiXFxuZHJpdmVycy9odi9tc2h2X2RlYnVnZnMuYy0xOC1cXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9ldmVudGZkLmMtMjUtI2luY2x1ZGUgXFxcIm1zaHYuaFxcXCJcXG5kcml2ZXJzL2h2L21zaHZfZXZlbnRmZC5jOjI2OiNpbmNsdWRlIFxcXCJtc2h2X3Jvb3QuaFxcXCJcXG5kcml2ZXJzL2h2L21zaHZfZXZlbnRmZC5jLTI3LVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X2V2ZW50ZmQuaC0xMy0jaW5jbHVkZSBcXFwibXNodi5oXFxcIlxcbmRyaXZlcnMvaHYvbXNodl9ldmVudGZkLmg6MTQ6I2luY2x1ZGUgXFxcIm1zaHZfcm9vdC5oXFxcIlxcbmRyaXZlcnMvaHYvbXNodl9ldmVudGZkLmgtMTUtXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfaXJxLmMtMTQtI2luY2x1ZGUgXFxcIm1zaHYuaFxcXCJcXG5kcml2ZXJzL2h2L21zaHZfaXJxLmM6MTU6I2luY2x1ZGUgXFxcIm1zaHZfcm9vdC5oXFxcIlxcbmRyaXZlcnMvaHYvbXNodl9pcnEuYy0xNi1cXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9wb3J0aWRfdGFibGUuYy04LSNpbmNsdWRlIFxcXCJtc2h2LmhcXFwiXFxuZHJpdmVycy9odi9tc2h2X3BvcnRpZF90YWJsZS5jOjk6I2luY2x1ZGUgXFxcIm1zaHZfcm9vdC5oXFxcIlxcbmRyaXZlcnMvaHYvbXNodl9wb3J0aWRfdGFibGUuYy0xMC1cXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtNC0gKlxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM6NTogKiBNZW1vcnkgcmVnaW9uIG1hbmFnZW1lbnQgZm9yIG1zaHZfcm9vdCBtb2R1bGUuXFxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy02LSAqXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jLTE3LVxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM6MTg6I2luY2x1ZGUgXFxcIm1zaHZfcm9vdC5oXFxcIlxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtMTktXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdC5oPTE4Nz1zdHJ1Y3QgaHZfc3luaWNfcGFnZXMge1xcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3QuaC0xOTItXFxuZHJpdmVycy9odi9tc2h2X3Jvb3QuaDoxOTM6c3RydWN0IG1zaHZfcm9vdCB7XFxuZHJpdmVycy9odi9tc2h2X3Jvb3QuaC0xOTQtXFx0c3BpbmxvY2tfdCBwdF9odF9sb2NrO1xcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3QuaD0zNjE9c3RhdGljIGlubGluZSB2b2lkIG1zaHZfZGVidWdmc192cF9yZW1vdmUoc3RydWN0IG1zaHZfdnAgKnZwKSB7IH1cXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290LmgtMzYzLVxcbmRyaXZlcnMvaHYvbXNodl9yb290Lmg6MzY0OmV4dGVybiBzdHJ1Y3QgbXNodl9yb290IG1zaHZfcm9vdDtcXG5kcml2ZXJzL2h2L21zaHZfcm9vdC5oLTM2NS1leHRlcm4gZW51bSBodl9zY2hlZHVsZXJfdHlwZSBodl9zY2hlZHVsZXJfdHlwZTtcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYy00LSAqXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfaHZfY2FsbC5jOjU6ICogSHlwZXJjYWxsIGhlbHBlciBmdW5jdGlvbnMgdXNlZCBieSB0aGUgbXNodl9yb290IG1vZHVsZS5cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmMtNi0gKlxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfaHZfY2FsbC5jLTE0LVxcbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYzoxNTojaW5jbHVkZSBcXFwibXNodl9yb290LmhcXFwiXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfaHZfY2FsbC5jLTE2LVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfaHZfY2FsbC5jPTU5MT1zdGF0aWMgYm9vbCBtc2h2X3VzZV9vdmVybGF5X2dwZm4odm9pZClcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYy01OTMtXFx0cmV0dXJuIGh2X2wxdmhfcGFydGl0aW9uKCkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmM6NTk0OlxcdCAgICAgICBtc2h2X3Jvb3Qudm1tX2NhcHMudm1tX2Nhbl9wcm92aWRlX292ZXJsYXlfZ3BmbjtcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmMtNTk1LX1cXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy00LSAqXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjU6ICogVGhlIG1haW4gcGFydCBvZiB0aGUgbXNodl9yb290IG1vZHVsZSwgcHJvdmlkaW5nIEFQSXMgdG8gY3JlYXRlXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTYtICogYW5kIG1hbmFnZSBndWVzdCBwYXJ0aXRpb25zLlxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTM1LSNpbmNsdWRlIFxcXCJtc2h2LmhcXFwiXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjM2OiNpbmNsdWRlIFxcXCJtc2h2X3Jvb3QuaFxcXCJcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMzctXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9NDA9TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNaWNyb3NvZnQgSHlwZXItViByb290IHBhcnRpdGlvbiBWTU0gaW50ZXJmYWNlIC9kZXYvbXNodlxcXCIpO1xcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTQ4LVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzo0OTpzdHJ1Y3QgbXNodl9yb290IG1zaHZfcm9vdDtcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtNTAtXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9MTcwPXN0YXRpYyBpbnQgbXNodl9pb2N0bF9wYXNzdGhydV9odmNhbGwoc3RydWN0IG1zaHZfcGFydGl0aW9uICpwYXJ0aXRpb24sXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTc2LVxcdGJvb2wgaXNfYXN5bmM7XFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjE3NzpcXHRzdHJ1Y3QgbXNodl9yb290X2h2Y2FsbCBhcmdzO1xcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0xNzgtXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9MTc2Nj1yZW1vdmVfcGFydGl0aW9uKHN0cnVjdCBtc2h2X3BhcnRpdGlvbiAqcGFydGl0aW9uKVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0xNzY3LXtcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MTc2ODpcXHRzcGluX2xvY2soXFx1MDAyNm1zaHZfcm9vdC5wdF9odF9sb2NrKTtcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTc2OS1cXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZwYXJ0aXRpb24tXFx1MDAzZXB0X2hub2RlKTtcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MTc3MDpcXHRzcGluX3VubG9jayhcXHUwMDI2bXNodl9yb290LnB0X2h0X2xvY2spO1xcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0xNzcxLVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTE4NzU9bXNodl9wYXJ0aXRpb24gKm1zaHZfcGFydGl0aW9uX2ZpbmQodTY0IHBhcnRpdGlvbl9pZClcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0xODc5LVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoxODgwOlxcdGhhc2hfZm9yX2VhY2hfcG9zc2libGVfcmN1KG1zaHZfcm9vdC5wdF9odGFibGUsIHAsIHB0X2hub2RlLFxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0xODgxLVxcdFxcdFxcdFxcdCAgIHBhcnRpdGlvbl9pZClcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYz0xOTEyPWFkZF9wYXJ0aXRpb24oc3RydWN0IG1zaHZfcGFydGl0aW9uICpwYXJ0aXRpb24pXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTE5MTMte1xcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoxOTE0OlxcdHNwaW5fbG9jayhcXHUwMDI2bXNodl9yb290LnB0X2h0X2xvY2spO1xcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0xOTE1LVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoxOTE2OlxcdGhhc2hfYWRkX3JjdShtc2h2X3Jvb3QucHRfaHRhYmxlLCBcXHUwMDI2cGFydGl0aW9uLVxcdTAwM2VwdF9obm9kZSxcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTkxNy1cXHRcXHQgICAgIHBhcnRpdGlvbi1cXHUwMDNlcHRfaWQpO1xcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0xOTE4LVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoxOTE5OlxcdHNwaW5fdW5sb2NrKFxcdTAwMjZtc2h2X3Jvb3QucHRfaHRfbG9jayk7XFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTE5MjAtXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9MjEzMD1tc2h2X2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIxMzQtXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjIxMzU6c3RhdGljIGludCBtc2h2X3Jvb3Rfc2NoZWRfb25saW5lO1xcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMTM2LVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTIxNTM9c3RhdGljIGludCBfX2luaXQgbDF2aF9yZXRyaWV2ZV9zY2hlZHVsZXJfdHlwZShlbnVtIGh2X3NjaGVkdWxlcl90eXBlICpvdXQpXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjE1OS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjE2MDpcXHRpZiAoIW1zaHZfcm9vdC52bW1fY2Fwcy52bW1fZW5hYmxlX2ludGVncmF0ZWRfc2NoZWR1bGVyKVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMTYxLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTIyMDY9c3RhdGljIGludCBfX2luaXQgbXNodl9yZXRyaWV2ZV9zY2hlZHVsZXJfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjIzNS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjIzNjpzdGF0aWMgaW50IG1zaHZfcm9vdF9zY2hlZHVsZXJfaW5pdCh1bnNpZ25lZCBpbnQgY3B1KVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMjM3LXtcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMjUzLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyMjU0OnN0YXRpYyBpbnQgbXNodl9yb290X3NjaGVkdWxlcl9jbGVhbnVwKHVuc2lnbmVkIGludCBjcHUpXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIyNTUte1xcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTIyNzM9cm9vdF9zY2hlZHVsZXJfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjI4OC1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjI4OTpcXHRyZXQgPSBjcHVocF9zZXR1cF9zdGF0ZShDUFVIUF9BUF9PTkxJTkVfRFlOLCBcXFwibXNodl9yb290X3NjaGVkXFxcIixcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjI5MDpcXHRcXHRcXHRcXHRtc2h2X3Jvb3Rfc2NoZWR1bGVyX2luaXQsXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjIyOTE6XFx0XFx0XFx0XFx0bXNodl9yb290X3NjaGVkdWxlcl9jbGVhbnVwKTtcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjI5Mi1cXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMjk3LVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyMjk4OlxcdG1zaHZfcm9vdF9zY2hlZF9vbmxpbmUgPSByZXQ7XFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIyOTktXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9MjMwOT1yb290X3NjaGVkdWxlcl9kZWluaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMzEzLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyMzE0OlxcdGNwdWhwX3JlbW92ZV9zdGF0ZShtc2h2X3Jvb3Rfc2NoZWRfb25saW5lKTtcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjMxNS1cXHRmcmVlX3BlcmNwdShyb290X3NjaGVkdWxlcl9pbnB1dCk7XFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM9MjMxOT1zdGF0aWMgaW50IF9faW5pdCBtc2h2X2luaXRfdm1tX2NhcHMoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIzMjQtXFx0XFx0XFx0XFx0XFx0XFx0SFZfUEFSVElUSU9OX1BST1BFUlRZX1ZNTV9DQVBBQklMSVRJRVMsXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjIzMjU6XFx0XFx0XFx0XFx0XFx0XFx0MCwgXFx1MDAyNm1zaHZfcm9vdC52bW1fY2FwcyxcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjMyNjpcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2YobXNodl9yb290LnZtbV9jYXBzKSk7XFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jLTIzMjctXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiBodl9sMXZoX3BhcnRpdGlvbigpKSB7XFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMjMzMS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmM6MjMzMjpcXHRkZXZfZGJnKGRldiwgXFxcInZtbV9jYXBzID0gJSNsbHhcXFxcblxcXCIsIG1zaHZfcm9vdC52bW1fY2Fwcy5hc191aW50NjRbMF0pO1xcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMzMzLVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTIzMzc9c3RhdGljIGludCBfX2luaXQgbXNodl9wYXJlbnRfcGFydGl0aW9uX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMzg2LVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoyMzg3OlxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZtc2h2X3Jvb3QucHRfaHRfbG9jayk7XFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jOjIzODg6XFx0aGFzaF9pbml0KG1zaHZfcm9vdC5wdF9odGFibGUpO1xcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0yMzg5LVxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3N5bmljLmMtNC0gKlxcbmRyaXZlcnMvaHYvbXNodl9zeW5pYy5jOjU6ICogbXNodl9yb290IG1vZHVsZSdzIG1haW4gaW50ZXJydXB0IGhhbmRsZXIgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25hbGl0eS5cXG5kcml2ZXJzL2h2L21zaHZfc3luaWMuYy02LSAqXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbXNodi5oPTIxMz1zdHJ1Y3QgbXNodl9ncGFwX2FjY2Vzc19iaXRtYXAge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaC0yMjItLyoqXFxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaDoyMjM6ICogc3RydWN0IG1zaHZfcm9vdF9odmNhbGwgLSBhcmd1bWVudHMgZm9yIE1TSFZfUk9PVF9IVkNBTExcXG5pbmNsdWRlL3VhcGkvbGludXgvbXNodi5oLTIyNC0gKiBAY29kZTogSHlwZXJjYWxsIGNvZGUgKEhWQ0FMTF8qKVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaC0yMzUtICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaDoyMzY6c3RydWN0IG1zaHZfcm9vdF9odmNhbGwge1xcbmluY2x1ZGUvdWFwaS9saW51eC9tc2h2LmgtMjM3LVxcdF9fdTE2IGNvZGU7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbXNodi5oLTI1NS0vKiBHZW5lcmljIGh5cGVyY2FsbCAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9tc2h2Lmg6MjU2OiNkZWZpbmUgTVNIVl9ST09UX0hWQ0FMTFxcdFxcdF9JT1dSKE1TSFZfSU9DVEwsIDB4MDcsIHN0cnVjdCBtc2h2X3Jvb3RfaHZjYWxsKVxcbmluY2x1ZGUvdWFwaS9saW51eC9tc2h2LmgtMjU3LVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L21zaHYuaD0zMTA9c3RydWN0IG1zaHZfZ2V0X3NldF92cF9zdGF0ZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbXNodi5oLTMyMy0gKiBEZWZpbmVkIGFib3ZlIGluIHBhcnRpdGlvbiBJT0NUTHMsIGF2b2lkIHJlZGVmaW5pbmcgaXQgaGVyZVxcbmluY2x1ZGUvdWFwaS9saW51eC9tc2h2Lmg6MzI0OiAqICNkZWZpbmUgTVNIVl9ST09UX0hWQ0FMTFxcdFxcdFxcdF9JT1dSKE1TSFZfSU9DVEwsIDB4MDcsIHN0cnVjdCBtc2h2X3Jvb3RfaHZjYWxsKVxcbmluY2x1ZGUvdWFwaS9saW51eC9tc2h2LmgtMzI1LSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjowNDoyMS42NzQxNjQ0NjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzNTIwNjQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIE1TSFYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBDT05GSUdfTVNIVl9ST09UYC4gUmlnaHQsIHRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdGhhdCB0aWVzIGludG8gYG1zaHZfcmVnaW9ucy5jYC4gTXkgbWluZCBpcyByYWNpbmcgdG8gcmVtZW1iZXIgaG93IHRoZXNlIHBpZWNlcyBjb25uZWN0LiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBidWlsZCBzeXN0ZW0gY29uZmlybXMgdGhhdCBgbXNodl9yZWdpb25zLmNgIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19NU0hWX1JPT1RgIGlzIGVuYWJsZWQuIFRoYXQncyBnb29kLCB0aGF0J3Mgd2hhdCBJIGV4cGVjdC4gTm93IEkganVzdCBuZWVkIHRvIHZlcmlmeSB0aGF0IGBDT05GSUdfTVNIVl9ST09UYCBpcyBhY3R1YWxseSBkZWZpbmVkLCBhbmQgdGhlbiBJIGNhbiBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEwMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDAyOjA0OjI2LjIwOTM3NDI4MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAwOTcyMTMxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVNIVl9ST09UXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaHYvS2NvbmZpZz02MD1jb25maWcgSFlQRVJWX1ZNQlVTXFxuLS1cXG5kcml2ZXJzL2h2L0tjb25maWctNjctXFxuZHJpdmVycy9odi9LY29uZmlnOjY4OmNvbmZpZyBNU0hWX1JPT1RcXG5kcml2ZXJzL2h2L0tjb25maWctNjktXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIHJvb3QgcGFydGl0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDAyOjA0OjMzLjIxOTEwOTk3NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTA2MjY5ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBITU0gUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgQ09ORklHX01TSFZfUk9PVGAgc2VlbXMgdG8gYmUgdGhlIGNvbnRyb2xsaW5nIGNvbmZpZyBoZXJlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGZvY3VzZWQgb24gbW9kaWZ5aW5nIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRgIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgYGhtbV9yYW5nZV9mYXVsdGAuIFRoaXMgYGhtbV9yYW5nZV9mYXVsdGAgaXMgYSBjcml0aWNhbCBITU0gZnVuY3Rpb24sIGhlYXZpbHkgdXNlZCBhY3Jvc3MgdmFyaW91cyBkcml2ZXJzIGxpa2Ugbm91dmVhdSBhbmQgYW1kZ3B1IOKAkyBhIHNpZ25pZmljYW50IHBpZWNlIG9mIGNvcmUgSE1NIGZ1bmN0aW9uYWxpdHkuIFRoZSBwYXRjaCByZWZhY3RvcnMgaXQgdG8gdXNlIGEgbG9ja2VkIHZlcnNpb24gKGBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkYCksIHdoaWNoIHRoZW4gbGV2ZXJhZ2VzIGBobW1fZG9fZmF1bHRgIGFuZCBgaG1tX3JlY29yZF9mYXVsdGAuIFRoaXMgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb3JlIEhNTSBjb2RlLCBtZWFuaW5nIGZ1enppbmcgdGhpcyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC5cblxuTGV0J3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBXZSd2ZSBnb3Q6XG5cbiogICBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkYFxuKiAgIGBobW1fcmFuZ2VfZmF1bHRgXG4qICAgYGhtbV9kb19mYXVsdGBcbiogICBgaG1tX3JlY29yZF9mYXVsdGBcbiogICBgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZGBcblxuRm9yIGNvbmZpZyBvcHRpb25zLCB3ZSdsbCBuZWVkIGBURVNUX0hNTWAgYW5kIGBNU0hWX1JPT1RgIHRvIHJlcHJvZHVjZSB0aGUgY2hhbmdlcy4gVGhvdWdoIGBobW1fcmFuZ2VfZmF1bHRgIGlzIHVzZWQgYnkgbXVsdGlwbGUgZHJpdmVycywgZm9jdXNpbmcgb24gYFRFU1RfSE1NYCBvZmZlcnMgYSBjbGVhbmVyIHdheSB0byB0ZXN0IHRoZSBjaGFuZ2VzLlxuXG5JIG5lZWQgdG8gZGlnIGludG8gYHRlc3RfaG1tLmNgIHRvIGlkZW50aWZ5IGFueSBzcGVjaWZpYyBpb2N0bHMgdG8gdGFyZ2V0LiBBaCwgaXQgYWRkcyBgSE1NX0RNSVJST1JfUkVBRF9VTkxPQ0tFRGAuIFRoZSBjb3JyZXNwb25kaW5nIGhhbmRsZXIgaXMgYGRtaXJyb3JfcmVhZF91bmxvY2tlZGAsIGFsb25nIHdpdGggYGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRgIGFuZCBgZG1pcnJvcl9mYXVsdF91bmxvY2tlZGAuXG5cblNvLCB0aGUgZXh0ZW5kZWQgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGJlY29tZXM6XG5cbiogICBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkYFxuKiAgIGBobW1fcmFuZ2VfZmF1bHRgXG4qICAgYGhtbV9kb19mYXVsdGBcbiogICBgZG1pcnJvcl9yZWFkX3VubG9ja2VkYFxuKiAgIGBkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkYFxuKiAgIGBkbWlycm9yX2ZhdWx0X3VubG9ja2VkYFxuKiAgIGBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2tgXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWdzLiBTcGVjaWZpY2FsbHkgYFRFU1RfSE1NYCBhbmQgYE1TSFZfUk9PVGAuXG5cbkkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGF0ZWQgY29uZmlncy4gVHlwaWNhbGx5IGBURVNUX0hNTWAgc2hvdWxkIGFsc28gc2VsZWN0IGBDT05GSUdfSE1NX01JUlJPUmAuIEknbGwgY29uZmlybSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM5OSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjowNDo0MS4zMjUzODYyNjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2OTUxMDUzMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRFU1RfSE1NXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTMzMTg9Y29uZmlnIFRFU1RfTUVNSU5JVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzMyNS1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzI2OmNvbmZpZyBURVNUX0hNTVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjctXFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6MDQ6NDcuMDIwNDk4NTU4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NjU1ODE0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgdGhlIEtjb25maWcgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBkaXZlIHN0cmFpZ2h0IGluLiBUaGUgdGFzayBpcyByZWxhdGVkIHRvIHRoZSBgVEVTVF9ITU1gIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgZmlyc3QgcGxhY2UgSSdkIGNoZWNrIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG9wdGlvbiwgaXRzIGRlcGVuZGVuY2llcywgYW5kIHdoYXQgaXQgY29udHJvbHMgaXMgZ29pbmcgdG8gYmUgYGxpYi9LY29uZmlnLmRlYnVnYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZGV0YWlscyBmb3IgZGVidWctcmVsYXRlZCBmZWF0dXJlcyB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIGlzIGRlZmluZWQgYW5kIGhhbmRsZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IGBURVNUX0hNTWAgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0OTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjowNDo1Mi44ODYwODM3NjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMzE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzI2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzI2OlxcdGNvbmZpZyBURVNUX0hNTVxcbjMzMjc6XFx0XFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG4zMzI4OlxcdFxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4zMzI5OlxcdFxcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcXG4zMzMwOlxcdFxcdHNlbGVjdCBITU1fTUlSUk9SXFxuMzMzMTpcXHRcXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuMzMzMjpcXHRcXHRoZWxwXFxuMzMzMzpcXHRcXHQgIFRoaXMgaXMgYSBwc2V1ZG8gZGV2aWNlIGRyaXZlciBzb2xlbHkgZm9yIHRlc3RpbmcgSE1NLlxcbjMzMzQ6XFx0XFx0ICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBITU0gdGVzdCBtb2R1bGUuXFxuMzMzNTpcXHRcXHQgIERvaW5nIHNvIHdpbGwgYWxsb3cgeW91IHRvIHJ1biB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0L3ZtL2htbS10ZXN0cy5cXG4zMzM2OlxcdFxcbjMzMzc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjMzMzg6XFx0XFxuMzMzOTpcXHRjb25maWcgVEVTVF9GUkVFX1BBR0VTXFxuMzM0MDpcXHRcXHR0cmlzdGF0ZSBcXFwiVGVzdCBmcmVlaW5nIHBhZ2VzXFxcIlxcbjMzNDE6XFx0XFx0aGVscFxcbjMzNDI6XFx0XFx0ICBUZXN0IHRoYXQgYSBtZW1vcnkgbGVhayBkb2VzIG5vdCBvY2N1ciBkdWUgdG8gYSByYWNlIGJldHdlZW5cXG4zMzQzOlxcdFxcdCAgZnJlZWluZyBhIGJsb2NrIG9mIHBhZ2VzIGFuZCBhIHNwZWN1bGF0aXZlIHBhZ2UgcmVmZXJlbmNlLlxcbjMzNDQ6XFx0XFx0ICBMb2FkaW5nIHRoaXMgbW9kdWxlIGlzIHNhZmUgaWYgeW91ciBrZXJuZWwgaGFzIHRoZSBidWcgZml4ZWQuXFxuMzM0NTpcXHRcXHQgIElmIHRoZSBidWcgaXMgbm90IGZpeGVkLCBpdCB3aWxsIGxlYWsgZ2lnYWJ5dGVzIG9mIG1lbW9yeSBhbmRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6MDQ6NTIuODg3NDEzNjU3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODE3MjAyMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhNTSBQYXRjaCBmb3IgRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaW5jbHVkZXMgYWxsIG5lY2Vzc2FyeSBjb21wb25lbnRzLiBTbywgSSdsbCBiZSBhZGRpbmcgYFRFU1RfSE1NYCBhbmQgYE1TSFZfUk9PVGAgdG8gdGhlIGNvbmZpZ3VyYXRpb25zLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhhdCB0aGUgcGF0Y2gncyBjb3JlIHJlbGF0ZXMgdG8gdGhlIEhNTSBzdWJzeXN0ZW0gYW5kIHRoZSBNU0hWIHJlZ2lvbiBoYW5kbGluZy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGZvY3VzIGFyZWFzIGZvciBmdXp6aW5nLiBJJ3ZlIGdvdCBhIGxpc3Qgb2Ygc3ltYm9scyB0byByZXZpZXc6IGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRgLCBgaG1tX3JhbmdlX2ZhdWx0YCwgYGhtbV9kb19mYXVsdGAsIGBobW1fcmVjb3JkX2ZhdWx0YCwgYGhtbV9yYW5nZV9mYXVsdF9sb2NrZWRgLCBgZG1pcnJvcl9yZWFkX3VubG9ja2VkYCwgYGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRgLCBgZG1pcnJvcl9mYXVsdF91bmxvY2tlZGAsIGFuZCBgbXNodl9yZWdpb25faG1tX2ZhdWx0X2FuZF9sb2NrYC5cblxuU3BlY2lmaWNhbGx5LCBgaG1tX3JhbmdlX2ZhdWx0YCBpdHNlbGYgaXMgYW4gaW50ZXJlc3RpbmcgcG9pbnQuIFdoaWxlIGl0J3Mgbm90IGEgZ2VuZXJhbCBob3QtcGF0aCBmdW5jdGlvbiBsaWtlIGBoYW5kbGVfbW1fZmF1bHRgLCBpdCdzIGNvcmUgdG8gcGFnZSBmYXVsdCBoYW5kbGluZyBmb3IgSE1NIGRldmljZXMsIHNvIGl0J3MgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIGBobW1fZG9fZmF1bHRgIGFuZCBgaG1tX3JlY29yZF9mYXVsdGAgYXJlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBtbS9obW0uY2AuIFRoZSBgZG1pcnJvcl8qYCBmdW5jdGlvbnMgYXJlIHdpdGhpbiBgbGliL3Rlc3RfaG1tLmNgLCBhbmQgYG1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9ja2AgaXMgaW4gYGRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNgLiBJJ2xsIG5lZWQgdG8ga2VlcCB0aGUgbG9jYXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiBtaW5kIHdoZW4gc2V0dGluZyB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudC5cblxuVGhlIHBhdGNoJ3MgYWN0dWFsIG1lYXQgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgY29yZSBITU0gbG9naWMuIEl0IGludHJvZHVjZXMgYSBuZXcgQVBJLCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkYCwgZm9yIGRyb3BwaW5nIHRoZSBtbWFwIGxvY2sgZHVyaW5nIHBhZ2UgZmF1bHRzLiBUaGlzIGhhcyBmdW5jdGlvbmFsIGltcGxpY2F0aW9ucywgYXMgaXQgYWltcyB0byBpbXByb3ZlIGhhbmRsaW5nIHdpdGggdXNlcmZhdWx0ZmQgcmVnaW9ucy4gSXQgYWxzbyByZWZhY3RvcnMgdGhlIG9yaWdpbmFsIGBobW1fcmFuZ2VfZmF1bHRgLiBGdXJ0aGVybW9yZSwgSSd2ZSBnb3QgdG8gcmVtZW1iZXIgdGhhdCB0aGUgY2hhbmdlcyByaXBwbGUgdGhyb3VnaCBgdGVzdF9obW0uY2AgYW5kIGBtc2h2X3JlZ2lvbnMuY2AgdG8gdXNlIHRoaXMgbmV3IEFQSS5cblxuU28sIGluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbXBhY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRyaXZlciBjb2RlLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgbG9jayBkcm9wcGluZyBkdXJpbmcgcGFnZSBmYXVsdHMsIHNvIGl0IHdhcnJhbnRzIHNlcmlvdXMgZnV6emluZy4gTm93LCBJJ2xsIGBzZXQtcmVzdWx0c2AgYW5kIHByZXBhcmUgZm9yIHRoZSBmdXp6aW5nIGNhbXBhaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDAxNywiT3V0cHV0VG9rZW5zIjoyMzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjowNTowNC43MDQ2NTc0MzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg4NzU5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJNU0hWX1JPT1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImhtbV9yYW5nZV9mYXVsdFwiLFxuICAgIFwiaG1tX2RvX2ZhdWx0XCIsXG4gICAgXCJobW1fcmVjb3JkX2ZhdWx0XCIsXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRfbG9ja2VkXCIsXG4gICAgXCJkbWlycm9yX3JlYWRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcIm1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKWAgaW4gdGhlIEhNTSBzdWJzeXN0ZW0gdG8gYWxsb3cgZHJvcHBpbmcgdGhlIG1tYXAgbG9jayBkdXJpbmcgcGFnZSBmYXVsdHMsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgcmVnaW9ucyBtYW5hZ2VkIGJ5IHVzZXJmYXVsdGZkLiBJdCByZWZhY3RvcnMgdGhlIGNvcmUgYGhtbV9yYW5nZV9mYXVsdCgpYCBsb2dpYyB0byBzdXBwb3J0IHRoaXMgYW5kIHVwZGF0ZXMgdGhlIGB0ZXN0X2htbWAgbW9kdWxlIGFuZCBgbXNodl9yZWdpb25zYCBkcml2ZXIgdG8gdXRpbGl6ZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZHJpdmVyIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJNU0hWX1JPT1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImhtbV9yYW5nZV9mYXVsdFwiLFxuICAgIFwiaG1tX2RvX2ZhdWx0XCIsXG4gICAgXCJobW1fcmVjb3JkX2ZhdWx0XCIsXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRfbG9ja2VkXCIsXG4gICAgXCJkbWlycm9yX3JlYWRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcIm1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQVBJIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWQoKWAgaW4gdGhlIEhNTSBzdWJzeXN0ZW0gdG8gYWxsb3cgZHJvcHBpbmcgdGhlIG1tYXAgbG9jayBkdXJpbmcgcGFnZSBmYXVsdHMsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgcmVnaW9ucyBtYW5hZ2VkIGJ5IHVzZXJmYXVsdGZkLiBJdCByZWZhY3RvcnMgdGhlIGNvcmUgYGhtbV9yYW5nZV9mYXVsdCgpYCBsb2dpYyB0byBzdXBwb3J0IHRoaXMgYW5kIHVwZGF0ZXMgdGhlIGB0ZXN0X2htbWAgbW9kdWxlIGFuZCBgbXNodl9yZWdpb25zYCBkcml2ZXIgdG8gdXRpbGl6ZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZHJpdmVyIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow9d4p2[1] Phase: Succeeded StartedAt: 2026-07-07 02:05:49 +0000 UTC FinishedAt: 2026-07-07 02:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-07 02:05:49 +0000 UTC FinishedAt: 2026-07-07 02:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2] Phase: Succeeded StartedAt: 2026-07-07 02:05:49 +0000 UTC FinishedAt: 2026-07-07 06:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-07 02:05:49 +0000 UTC FinishedAt: 2026-07-07 06:14:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","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-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-07 02:05:49 +0000 UTC FinishedAt: 2026-07-07 02:06:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-07 02:05:49 +0000 UTC FinishedAt: 2026-07-07 02:06:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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-workflow9d4p2/series-workflow9d4p2-convert-artifact-2154022195/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-07 02:06:55 +0000 UTC FinishedAt: 2026-07-07 02:39:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-07 02:06:55 +0000 UTC FinishedAt: 2026-07-07 02:39:55 +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:*d53c48ed-61de-4ee0-afc1-d9dceb7078bf,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-workflow9d4p2/series-workflow9d4p2-convert-artifact-2154022195/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": "6f708c2c-e2dc-47dd-8cfa-74cb75d178c2", "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-workflow9d4p2/series-workflow9d4p2-build-action-1003089889/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-07 02:06:55 +0000 UTC FinishedAt: 2026-07-07 02:39:45 +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:*d53c48ed-61de-4ee0-afc1-d9dceb7078bf,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-workflow9d4p2/series-workflow9d4p2-convert-artifact-2154022195/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": "6f708c2c-e2dc-47dd-8cfa-74cb75d178c2", "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-workflow9d4p2/series-workflow9d4p2-build-action-1003089889/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-07 02:39:55 +0000 UTC FinishedAt: 2026-07-07 02:39:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-07 02:39:55 +0000 UTC FinishedAt: 2026-07-07 02:39:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-07 02:39:55 +0000 UTC FinishedAt: 2026-07-07 02:40:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-07 02:39:55 +0000 UTC FinishedAt: 2026-07-07 02:40:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","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-workflow9d4p2/series-workflow9d4p2-convert-artifact-284018730/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-07 02:40:15 +0000 UTC FinishedAt: 2026-07-07 02:42:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-07 02:40:15 +0000 UTC FinishedAt: 2026-07-07 02:42:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6f708c2c-e2dc-47dd-8cfa-74cb75d178c2,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-workflow9d4p2/series-workflow9d4p2-build-action-1003089889/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-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-07 02:42:26 +0000 UTC FinishedAt: 2026-07-07 02:42:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-07 02:42:26 +0000 UTC FinishedAt: 2026-07-07 02:42:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-07 02:42:26 +0000 UTC FinishedAt: 2026-07-07 03:09:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-07 02:42:26 +0000 UTC FinishedAt: 2026-07-07 03:09:18 +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:*d53c48ed-61de-4ee0-afc1-d9dceb7078bf,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-workflow9d4p2/series-workflow9d4p2-convert-artifact-284018730/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": "8c2320d9-4729-439d-bdf4-5c132a1e1f9d", "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-workflow9d4p2/series-workflow9d4p2-build-action-2599608142/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-07 02:42:26 +0000 UTC FinishedAt: 2026-07-07 03:08:55 +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:*d53c48ed-61de-4ee0-afc1-d9dceb7078bf,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-workflow9d4p2/series-workflow9d4p2-convert-artifact-284018730/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": "8c2320d9-4729-439d-bdf4-5c132a1e1f9d", "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-workflow9d4p2/series-workflow9d4p2-build-action-2599608142/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-07 03:09:18 +0000 UTC FinishedAt: 2026-07-07 03:09:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-07 03:09:18 +0000 UTC FinishedAt: 2026-07-07 03:09:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-07 03:09:18 +0000 UTC FinishedAt: 2026-07-07 03:11:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-07 03:09:18 +0000 UTC FinishedAt: 2026-07-07 03:11:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8c2320d9-4729-439d-bdf4-5c132a1e1f9d,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-workflow9d4p2/series-workflow9d4p2-build-action-2599608142/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-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-07 03:11:21 +0000 UTC FinishedAt: 2026-07-07 06:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-07 03:11:21 +0000 UTC FinishedAt: 2026-07-07 06:14:21 +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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"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:*6f708c2c-e2dc-47dd-8cfa-74cb75d178c2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8c2320d9-4729-439d-bdf4-5c132a1e1f9d,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-workflow9d4p2/series-workflow9d4p2-build-action-1003089889/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-workflow9d4p2/series-workflow9d4p2-build-action-2599608142/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-07 03:11:21 +0000 UTC FinishedAt: 2026-07-07 03:11:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-07 03:11:21 +0000 UTC FinishedAt: 2026-07-07 03:11:27 +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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"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-workflow9d4p2/series-workflow9d4p2-convert-artifact-3903984319/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-07 03:11:21 +0000 UTC FinishedAt: 2026-07-07 03:11:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-07 03:11:21 +0000 UTC FinishedAt: 2026-07-07 03:11:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-07 03:11:21 +0000 UTC FinishedAt: 2026-07-07 03:11:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-07 03:11:31 +0000 UTC FinishedAt: 2026-07-07 06:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d4p2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"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":["hmm_range_fault_unlocked","hmm_range_fault","hmm_do_fault","hmm_record_fault","hmm_range_fault_locked","dmirror_read_unlocked","dmirror_range_fault_unlocked","dmirror_fault_unlocked","mshv_region_hmm_fault_and_lock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","MSHV_ROOT"],"series_id":"163771b5-7490-4eb7-97c9-b3d52da5a177","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-07 03:11:31 +0000 UTC FinishedAt: 2026-07-07 06:14:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6f708c2c-e2dc-47dd-8cfa-74cb75d178c2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8c2320d9-4729-439d-bdf4-5c132a1e1f9d,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-workflow9d4p2/series-workflow9d4p2-build-action-1003089889/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-workflow9d4p2/series-workflow9d4p2-build-action-2599608142/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-workflow9d4p2/series-workflow9d4p2-convert-artifact-3903984319/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,}