Name: series-workflowtkmjl Phase: Failed StartedAt: 2026-08-31 08:40:17 +0000 UTC FinishedAt: 2026-08-31 09:01:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkmjl[0] Phase: Succeeded StartedAt: 2026-08-31 08:40:17 +0000 UTC FinishedAt: 2026-08-31 09:00:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkmjl[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 08:40:17 +0000 UTC FinishedAt: 2026-08-31 09:00:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhbiB1bnJlYWNoYWJsZSBodWdldGxiIGNoZWNrIGluIHRyeV90b191bm1hcF9vbmUoKS4gU2luY2UgdHJ5X3RvX3VubWFwKCkgZXhwbGljaXRseSByb3V0ZXMgaHVnZXRsYiBmb2xpb3MgdG8gdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lKCksIHRyeV90b191bm1hcF9vbmUoKSBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZvciBub24taHVnZXRsYiBmb2xpb3MuIFJlbW92aW5nIHRoaXMgZGVhZCBicmFuY2ggaXMgYSBwdXJlIGNvZGUgY2xlYW51cCB3aXRoIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZkODBjZjNmMjI3MGYzMjY0YjUxOWZhY2QwNGE0NGYzYTVmN2Q4MTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwODo1OTo0NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IGQxODE5ZmQ2OTkzODAuLjYwNmM4ZWNmMzEzMDIgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuY1xuQEAgLTIyOTksMTEgJiM0MzsyMjk5LDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0Vk1fQlVHX09OX0ZPTElPKCFwdm13LnB0ZSwgZm9saW8pO1xuIFxuIFx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuLVx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuLVx0XHRcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7XG4tXHRcdH1cbiYjNDM7XHRcdHB0ZXZhbCA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcbiYjNDM7XG4gXHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcbiBcdFx0XHRwZm4gPSBwdGVfcGZuKHB0ZXZhbCk7XG4gXHRcdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhbiB1bnJlYWNoYWJsZSBodWdldGxiIGNoZWNrIGluIHRyeV90b191bm1hcF9vbmUoKS4gU2luY2UgdHJ5X3RvX3VubWFwKCkgZXhwbGljaXRseSByb3V0ZXMgaHVnZXRsYiBmb2xpb3MgdG8gdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lKCksIHRyeV90b191bm1hcF9vbmUoKSBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZvciBub24taHVnZXRsYiBmb2xpb3MuIFJlbW92aW5nIHRoaXMgZGVhZCBicmFuY2ggaXMgYSBwdXJlIGNvZGUgY2xlYW51cCB3aXRoIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZkODBjZjNmMjI3MGYzMjY0YjUxOWZhY2QwNGE0NGYzYTVmN2Q4MTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwODo1OTo0NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCBkMTgxOWZkNjk5MzgwLi42MDZjOGVjZjMxMzAyIDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jCkBAIC0yMjk5LDExICYjNDM7MjI5OSw4IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCVZNX0JVR19PTl9GT0xJTyghcHZtdy5wdGUsIGZvbGlvKTsKIAogCQlhZGRyZXNzID0gcHZtdy5hZGRyZXNzOwotCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkgewotCQkJcHRldmFsID0gaHVnZV9wdGVwX2dldChtbSwgYWRkcmVzcywgcHZtdy5wdGUpOwotCQl9IGVsc2UgewotCQkJcHRldmFsID0gcHRlcF9nZXQocHZtdy5wdGUpOwotCQl9CiYjNDM7CQlwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7CiYjNDM7CiAJCWlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHsKIAkJCXBmbiA9IHB0ZV9wZm4ocHRldmFsKTsKIAkJfSBlbHNlIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRpZmYgdGhhdCB0b3VjaGVzIGBtbS9ybWFwLmNgLiBUaGUgY29tbWl0IGlzIGNoYW5naW5nIGB0cnlfdG9fdW5tYXBfb25lYC4gSSBzZWUgdGhlIGtleSBtb2RpZmljYXRpb24gaXMgcmVtb3ZpbmcgdGhpcyBjb25kaXRpb25hbCBibG9jayBhcm91bmQgYHB0ZXZhbGA6IHRoZSBjb2RlIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIEh1Z2VUTEIgZm9saW9zIGFuZCByZWd1bGFyIG9uZXMgd2hlbiBnZXR0aW5nIHRoZSBQVEUgdmFsdWUuIE5vdywgaXQganVzdCBkaXJlY3RseSB1c2VzIGBwdGVwX2dldChwdm13LnB0ZSlgLiBObyBtb3JlIGBodWdlX3B0ZXBfZ2V0YCBpZiBpdCYjMzk7cyBhIEh1Z2VUTEIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZSBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgaXQgaGFzLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHdoZXJlIEkgYW0gcmVhZGluZyB0aGUgZmlsZS4uLiBhaCwgcmlnaHQuIExldCYjMzk7cyBnbyByZWFkIGFyb3VuZCBsaW5lIDIyOTkgaW4gYG1tL3JtYXAuY2AgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJdCBtaWdodCBiZSBvYnZpb3VzLCBidXQgdGhpcyBuZWVkcyB0byBiZSB1bmRlcnN0b29kIHdpdGhpbiB0aGUgbGFyZ2VyIHNjb3BlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBMZXQmIzM5O3MgZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9ybWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyODA6XHRcdFx0XHRcdCAqIGR1ZSB0byBHVVAgb3Igc3BlY3VsYXRpdmUgcmVmZXJlbmNlcy5cbjIyODE6XHRcdFx0XHRcdCAqL1xuMjI4MjpcdFx0XHRcdFx0Z290byB3YWxrX2Fib3J0O1xuMjI4MzpcdFx0XHRcdH1cbjIyODQ6XHRcbjIyODU6XHRcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IFRUVV9TUExJVF9IVUdFX1BNRCkge1xuMjI4NjpcdFx0XHRcdFx0LypcbjIyODc6XHRcdFx0XHRcdCAqIFdlIHRlbXBvcmFyaWx5IGhhdmUgdG8gZHJvcCB0aGUgUFRMIGFuZFxuMjI4ODpcdFx0XHRcdFx0ICogcmVzdGFydCBzbyB3ZSBjYW4gcHJvY2VzcyB0aGUgUFRFLW1hcHBlZCBUSFAuXG4yMjg5Olx0XHRcdFx0XHQgKi9cbjIyOTA6XHRcdFx0XHRcdHNwbGl0X2h1Z2VfcG1kX2xvY2tlZCh2bWEsIHB2bXcuYWRkcmVzcyxcbjIyOTE6XHRcdFx0XHRcdFx0XHQgICAgICBwdm13LnBtZCwgZmFsc2UpO1xuMjI5MjpcdFx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+VFRVX1NQTElUX0hVR0VfUE1EO1xuMjI5MzpcdFx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfcmVzdGFydChcdTAwMjZwdm13KTtcbjIyOTQ6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjI5NTpcdFx0XHRcdH1cbjIyOTY6XHRcdFx0fVxuMjI5NzpcdFxuMjI5ODpcdFx0XHQvKiBVbmV4cGVjdGVkIFBNRC1tYXBwZWQgVEhQPyAqL1xuMjI5OTpcdFx0XHRWTV9CVUdfT05fRk9MSU8oIXB2bXcucHRlLCBmb2xpbyk7XG4yMzAwOlx0XG4yMzAxOlx0XHRcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XG4yMzAyOlx0XHRcdHB0ZXZhbCA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcbjIzMDM6XHRcbjIzMDQ6XHRcdFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xuMjMwNTpcdFx0XHRcdHBmbiA9IHB0ZV9wZm4ocHRldmFsKTtcbjIzMDY6XHRcdFx0fSBlbHNlIHtcbjIzMDc6XHRcdFx0XHQvKlxuMjMwODpcdFx0XHRcdCAqIEhhbmRsZSBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcyxcbjIzMDk6XHRcdFx0XHQgKiB0aGF0IGFjdHVhbGx5IG1hcCBwYWdlcy5cbjIzMTA6XHRcdFx0XHQgKi9cbjIzMTE6XHRcdFx0XHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRldmFsKTtcbjIzMTI6XHRcbjIzMTM6XHRcdFx0XHRwZm4gPSBzb2Z0bGVhZl90b19wZm4oZW50cnkpO1xuMjMxNDpcdFx0XHR9XG4yMzE1Olx0XG4yMzE2Olx0XHRcdHBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBwZm4gLSBmb2xpb19wZm4oZm9saW8pKTtcbjIzMTc6XHRcbjIzMTg6XHRcdFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xuMjMxOTpcdFx0XHRcdG5yX3BhZ2VzID0gZm9saW9fdW5tYXBfcHRlX2JhdGNoKGZvbGlvLCBcdTAwMjZwdm13LCBmbGFncywgcHRldmFsKTtcbjIzMjA6XHRcdFx0XHRlbmRfYWRkciA9IGFkZHJlc3MgJiM0MzsgbnJfcGFnZXMgKiBQQUdFX1NJWkU7XG4yMzIxOlx0XHRcdFx0Zmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBhZGRyZXNzLCBlbmRfYWRkcik7XG4yMzIyOlx0XG4yMzIzOlx0XHRcdFx0LyogTnVrZSB0aGUgcGFnZSB0YWJsZSBlbnRyeS4gKi9cbjIzMjQ6XHRcdFx0XHRwdGV2YWwgPSBnZXRfYW5kX2NsZWFyX3B0ZXMobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBucl9wYWdlcyk7XG4yMzI1Olx0XHRcdFx0LypcbjIzMjY6XHRcdFx0XHQgKiBXZSBjbGVhciB0aGUgUFRFIGJ1dCBkbyBub3QgZmx1c2ggc28gcG90ZW50aWFsbHlcbjIzMjc6XHRcdFx0XHQgKiBhIHJlbW90ZSBDUFUgY291bGQgc3RpbGwgYmUgd3JpdGluZyB0byB0aGUgZm9saW8uXG4yMzI4Olx0XHRcdFx0ICogSWYgdGhlIGVudHJ5IHdhcyBwcmV2aW91c2x5IGNsZWFuIHRoZW4gdGhlXG4yMzI5Olx0XHRcdFx0ICogYXJjaGl0ZWN0dXJlIG11c3QgZ3VhcmFudGVlIHRoYXQgYSBjbGVhci1cdTAwM2VkaXJ0eVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyOTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gb2YgaHVnZSBwYWdlcyAoaHVnZXRsYikgd2l0aGluIHRoZSB1bm1hcHBpbmcgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIHdpdGhpbiBgdHJ5X3RvX3VubWFwX29uZWAgYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlbGV2YW50IGNvZGUgaW4gYG1tL3JtYXAuY2AuIEkmIzM5O2xsIGZvY3VzIG9uIGxpbmVzIDIyMDAgdG8gMjM1MCBpbiB0aGF0IGZpbGUgdG8gY2FwdHVyZSB0aGUgY29yZSBvZiB0aGUgbG9naWMuIFRoaXMgYXJlYSBzaG91bGQgaWxsdW1pbmF0ZSBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBzcGVjaWZpYyBjaGFsbGVuZ2VzIG9mIHVubWFwcGluZyBodWdlIHBhZ2VzLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIChQVEVzKSBhbmQgcG90ZW50aWFsIHJlZmNvdW50IGlzc3Vlcy4gTXkgZXhwZWN0YXRpb24gaXMgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBzY2VuYXJpb3Mg4oCTIHdoZXRoZXIgdGhlIGh1Z2UgcGFnZSBpcyBzaGFyZWQsIHByaXZhdGUsIGRpcnR5LCBjbGVhbiwgZXRjLiDigJMgYW5kIGhvdyB0aGUgdW5tYXBwaW5nIHByb2Nlc3MgZW5zdXJlcyBkYXRhIGludGVncml0eSBhbmQgbWVtb3J5IGNvbnNpc3RlbmN5LiBJIGFudGljaXBhdGUgc2VlaW5nIGRldGFpbHMgYXJvdW5kIGhvdyB0aGUgTU1VIGlzIHVwZGF0ZWQgYW5kIG1lbW9yeSBpcyBmcmVlZCwgYW5kIGhvdyB0aGUgc3lzdGVtIHRha2VzIGFkdmFudGFnZSBvZiB0aGUgaHVnZSBwYWdlIGluZnJhc3RydWN0dXJlIGZvciBlZmZpY2llbnQgb3BlcmF0aW9uLiBJIGhvcGUgdG8gY29tZSBhd2F5IHdpdGggYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjcnVjaWFsIHN0ZXBzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0ga2VlcHMgY29uc2lzdGVuY3kgZHVyaW5nIGh1Z2UgcGFnZSB1bm1hcHBpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9ybWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMDA6XHQgKi9cbjIyMDE6XHRzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuMjIwMjpcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxuMjIwMzpcdHtcbjIyMDQ6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuMjIwNTpcdFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIDApO1xuMjIwNjpcdFx0Ym9vbCByZXQgPSB0cnVlO1xuMjIwNzpcdFx0cHRlX3QgcHRldmFsO1xuMjIwODpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4yMjA5Olx0XHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xuMjIxMDpcdFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xuMjIxMTpcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEsIGVuZF9hZGRyO1xuMjIxMjpcdFx0dW5zaWduZWQgbG9uZyBwZm47XG4yMjEzOlx0XHRpbnQgcHRlcyA9IDA7XG4yMjE0Olx0XG4yMjE1Olx0XHQvKlxuMjIxNjpcdFx0ICogV2hlbiByYWNpbmcgYWdhaW5zdCBlLmcuIHphcF9wdGVfcmFuZ2UoKSBvbiBhbm90aGVyIGNwdSxcbjIyMTc6XHRcdCAqIGluIGJldHdlZW4gaXRzIHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKCkgYW5kIGZvbGlvX3JlbW92ZV9ybWFwXyooKSxcbjIyMTg6XHRcdCAqIHRyeV90b191bm1hcCgpIG1heSByZXR1cm4gYmVmb3JlIGZvbGlvX21hcHBlZCgpIGhhcyBiZWNvbWUgZmFsc2UsXG4yMjE5Olx0XHQgKiBpZiBwYWdlIHRhYmxlIGxvY2tpbmcgaXMgc2tpcHBlZDogdXNlIFRUVV9TWU5DIHRvIHdhaXQgZm9yIHRoYXQuXG4yMjIwOlx0XHQgKi9cbjIyMjE6XHRcdGlmIChmbGFncyBcdTAwMjYgVFRVX1NZTkMpXG4yMjIyOlx0XHRcdHB2bXcuZmxhZ3MgPSBQVk1XX1NZTkM7XG4yMjIzOlx0XG4yMjI0Olx0XHQvKlxuMjIyNTpcdFx0ICogRm9yIFRIUCwgd2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnNlIGNhc2UgaWUgcG1kIGZvciBpbnZhbGlkYXRpb24uXG4yMjI2Olx0XHQgKlxuMjIyNzpcdFx0ICogTm90ZSB0aGF0IHRoZSBmb2xpbyBjYW4gbm90IGJlIGZyZWVkIGluIHRoaXMgZnVuY3Rpb24gYXMgY2FsbCBvZlxuMjIyODpcdFx0ICogdHJ5X3RvX3VubWFwKCkgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIHRoZSBmb2xpby5cbjIyMjk6XHRcdCAqL1xuMjIzMDpcdFx0cmFuZ2UuZW5kID0gdm1hX2FkZHJlc3NfZW5kKFx1MDAyNnB2bXcpO1xuMjIzMTpcdFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS1cdTAwM2V2bV9tbSxcbjIyMzI6XHRcdFx0XHRcdGFkZHJlc3MsIHJhbmdlLmVuZCk7XG4yMjMzOlx0XHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcdTAwMjZyYW5nZSk7XG4yMjM0Olx0XG4yMjM1Olx0XHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbjIyMzY6XHRcdFx0bnJfcGFnZXMgPSAxO1xuMjIzNzpcdFxuMjIzODpcdFx0XHQvKlxuMjIzOTpcdFx0XHQgKiBJZiB0aGUgZm9saW8gaXMgaW4gYW4gbWxvY2soKWQgdm1hLCB3ZSBtdXN0IG5vdCBzd2FwIGl0IG91dC5cbjIyNDA6XHRcdFx0ICovXG4yMjQxOlx0XHRcdGlmICghKGZsYWdzIFx1MDAyNiBUVFVfSUdOT1JFX01MT0NLKSBcdTAwMjZcdTAwMjZcbjIyNDI6XHRcdFx0ICAgICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRCkpIHtcbjIyNDM6XHRcdFx0XHRwdGVzJiM0MzsmIzQzOztcbjIyNDQ6XHRcbjIyNDU6XHRcdFx0XHQvKlxuMjI0NjpcdFx0XHRcdCAqIFNldCAmIzM5O3JldCYjMzk7IHRvIGluZGljYXRlIHRoZSBwYWdlIGNhbm5vdCBiZSB1bm1hcHBlZC5cbjIyNDc6XHRcdFx0XHQgKlxuMjI0ODpcdFx0XHRcdCAqIERvIG5vdCBqdW1wIHRvIHdhbGtfYWJvcnQgaW1tZWRpYXRlbHkgYXMgYWRkaXRpb25hbFxuMjI0OTpcdFx0XHRcdCAqIGl0ZXJhdGlvbiBtaWdodCBiZSByZXF1aXJlZCB0byBkZXRlY3QgZnVsbHkgbWFwcGVkXG4yMjUwOlx0XHRcdFx0ICogZm9saW8gYW4gbWxvY2sgaXQuXG4yMjUxOlx0XHRcdFx0ICovXG4yMjUyOlx0XHRcdFx0cmV0ID0gZmFsc2U7XG4yMjUzOlx0XG4yMjU0Olx0XHRcdFx0LyogT25seSBtbG9jayBmdWxseSBtYXBwZWQgcGFnZXMgKi9cbjIyNTU6XHRcdFx0XHRpZiAocHZtdy5wdGUgXHUwMDI2XHUwMDI2IHB0ZXMgIT0gcHZtdy5ucl9wYWdlcylcbjIyNTY6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjI1NzpcdFxuMjI1ODpcdFx0XHRcdC8qXG4yMjU5Olx0XHRcdFx0ICogQWxsIFBURXMgbXVzdCBiZSBwcm90ZWN0ZWQgYnkgcGFnZSB0YWJsZSBsb2NrIGluXG4yMjYwOlx0XHRcdFx0ICogb3JkZXIgdG8gbWxvY2sgdGhlIHBhZ2UuXG4yMjYxOlx0XHRcdFx0ICpcbjIyNjI6XHRcdFx0XHQgKiBJZiBwYWdlIHRhYmxlIGJvdW5kYXJ5IGhhcyBiZWVuIGNyb3NzLCBjdXJyZW50IHB0bFxuMjI2MzpcdFx0XHRcdCAqIG9ubHkgcHJvdGVjdCBwYXJ0IG9mIHB0ZXMuXG4yMjY0Olx0XHRcdFx0ICovXG4yMjY1Olx0XHRcdFx0aWYgKHB2bXcuZmxhZ3MgXHUwMDI2IFBWTVdfUEdUQUJMRV9DUk9TU0VEKVxuMjI2NjpcdFx0XHRcdFx0Z290byB3YWxrX2RvbmU7XG4yMjY3Olx0XG4yMjY4Olx0XHRcdFx0LyogUmVzdG9yZSB0aGUgbWxvY2sgd2hpY2ggZ290IG1pc3NlZCAqL1xuMjI2OTpcdFx0XHRcdG1sb2NrX3ZtYV9mb2xpbyhmb2xpbywgdm1hKTtcbjIyNzA6XHRcdFx0XHRnb3RvIHdhbGtfZG9uZTtcbjIyNzE6XHRcdFx0fVxuMjI3MjpcdFxuMjI3MzpcdFx0XHRpZiAoIXB2bXcucHRlKSB7XG4yMjc0Olx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfbGF6eWZyZWUoZm9saW8pKSB7XG4yMjc1Olx0XHRcdFx0XHRpZiAodW5tYXBfaHVnZV9wbWRfbG9ja2VkKHZtYSwgcHZtdy5hZGRyZXNzLCBwdm13LnBtZCwgZm9saW8pKVxuMjI3NjpcdFx0XHRcdFx0XHRnb3RvIHdhbGtfZG9uZTtcbjIyNzc6XHRcdFx0XHRcdC8qXG4yMjc4Olx0XHRcdFx0XHQgKiB1bm1hcF9odWdlX3BtZF9sb2NrZWQgaGFzIGVpdGhlciBhbHJlYWR5IG1hcmtlZFxuMjI3OTpcdFx0XHRcdFx0ICogdGhlIGZvbGlvIGFzIHN3YXAtYmFja2VkIG9yIGRlY2lkZWQgdG8gcmV0YWluIGl0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg3NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBodWdldGxiIHdpdGhpbiB0aGUgYHRyeV90b191bm1hcF9vbmVgIGFuZCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGZ1bmN0aW9ucy4gQ2xlYXJseSwgdGhlcmUmIzM5O3MgYSBwcm9ibGVtLCBvciBhdCBsZWFzdCBhIG5lZWQgdG8gaW52ZXN0aWdhdGUsIHJlbGF0ZWQgdG8gSHVnZVRMQiBwYWdlcyB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aG9zZSBmdW5jdGlvbnMgaW4gYG1tL3JtYXAuY2AuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0IHdpdGggSHVnZVRMQiBwYWdlcyDigJMgaXMgdGhlcmUgYSBzcGVjaWZpYyBjb25kaXRpb25hbCBjaGVjaywgYSBkaWZmZXJlbnQgY29kZSBwYXRoLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSB0aGF0JiMzOTtzIGNhdXNpbmcgdGhpcyBiZWhhdmlvcj8KCkkmIzM5O2xsIGFsc28ga2VlcCBhbiBleWUgb24gcmVjZW50IGNvbW1pdHMuIFBlcmhhcHMgYSByZWNlbnQgcGF0Y2ggaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24gb3IgYW4gdW5leHBlY3RlZCBpbnRlcmFjdGlvbiB3aXRoIEh1Z2VUTEIgZnVuY3Rpb25hbGl0eS4gVGhhdCBjb3VsZCBnaXZlIHNvbWUgY29udGV4dCBpbnRvIHRoZSByZWNlbnQgY2hhbmdlcyBpbiB0aGUgYG1tL3JtYXAuY2AgZmlsZS4gU28sIEkgbmVlZCB0byBjaGVjayBmb3IgY2hhbmdlcyBuZWFyIGBtbS9ybWFwLmNgIHJlbGF0ZWQgdG8gaHVnZXRsYi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb190ZXN0X2h1Z2V0bGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9ybWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcm1hcC5jPTE2NDg9dm9pZCBmb2xpb19hZGRfbmV3X2Fub25fcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMTY1My1cbm1tL3JtYXAuYzoxNjU0Olx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XG5tbS9ybWFwLmMtMTY1NS1cdFZNX1dBUk5fT05fRk9MSU8oIWV4Y2x1c2l2ZSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuLS1cbm1tL3JtYXAuYz0yNDQwPXZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxuLS1cbm1tL3JtYXAuYy0yNDQyLVx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcbm1tL3JtYXAuYzoyNDQzOlx0XHQucm1hcF9vbmUgPSBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pID9cbm1tL3JtYXAuYy0yNDQ0LVx0XHRcdFx0dHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lIDogdHJ5X3RvX3VubWFwX29uZSxcbi0tXG5tbS9ybWFwLmM9MjQ2Mj1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTI0OTQtXHRcdFx0XHRhZGRyZXNzLCByYW5nZS5lbmQpO1xubW0vcm1hcC5jOjI0OTU6XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xubW0vcm1hcC5jLTI0OTYtXHRcdC8qXG4tLVxubW0vcm1hcC5jLTI1MzUtXG5tbS9ybWFwLmM6MjUzNjpcdFx0XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSB8fFxubW0vcm1hcC5jLTI1MzctXHRcdFx0XHRcdCFmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbyksIGZvbGlvKTtcbi0tXG5tbS9ybWFwLmMtMjU1MS1cdFx0YWRkcmVzcyA9IHB2bXcuYWRkcmVzcztcbm1tL3JtYXAuYzoyNTUyOlx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbm1tL3JtYXAuYy0yNTUzLVx0XHRcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcbi0tXG5tbS9ybWFwLmMtMjU2NS1cdFx0XHRwZm4gPSBzb2Z0bGVhZl90b19wZm4oZW50cnkpO1xubW0vcm1hcC5jOjI1NjY6XHRcdFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XG5tbS9ybWFwLmMtMjU2Ny1cdFx0fVxuLS1cbm1tL3JtYXAuYy0yNTcyLVxubW0vcm1hcC5jOjI1NzM6XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG5tbS9ybWFwLmMtMjU3NC1cdFx0XHRib29sIGFub24gPSBmb2xpb190ZXN0X2Fub24oZm9saW8pO1xuLS1cbm1tL3JtYXAuYy0yNjYzLVx0XHRcdHB0ZXZhbCA9IHN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShzdWJwYWdlKSk7XG5tbS9ybWFwLmM6MjY2NDpcdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xubW0vcm1hcC5jLTI2NjUtXHRcdFx0XHRodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTtcbi0tXG5tbS9ybWFwLmMtMjY5NC1cdFx0XHRpZiAoYXJjaF91bm1hcF9vbmUobW0sIHZtYSwgYWRkcmVzcywgcHRldmFsKSBcdTAwM2MgMCkge1xubW0vcm1hcC5jOjI2OTU6XHRcdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbm1tL3JtYXAuYy0yNjk2LVx0XHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLFxuLS1cbm1tL3JtYXAuYy0yNzA1LVx0XHRcdC8qIFNlZSBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3B0ZSgpOiBjbGVhciBQVEUgZmlyc3QuICovXG5tbS9ybWFwLmM6MjcwNjpcdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xubW0vcm1hcC5jLTI3MDctXHRcdFx0XHRpZiAoYW5vbl9leGNsdXNpdmUgXHUwMDI2XHUwMDI2XG4tLVxubW0vcm1hcC5jLTI3NTMtXHRcdFx0fVxubW0vcm1hcC5jOjI3NTQ6XHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG5tbS9ybWFwLmMtMjc1NS1cdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHN3cF9wdGUsXG4tLVxubW0vcm1hcC5jLTI3NjYtXG5tbS9ybWFwLmM6Mjc2NzpcdFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpKVxubW0vcm1hcC5jLTI3NjgtXHRcdFx0aHVnZXRsYl9yZW1vdmVfcm1hcChmb2xpbyk7XG4tLVxubW0vcm1hcC5jPTI4NjY9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3JtYXAuYy0yODk3LVxubW0vcm1hcC5jOjI4OTg6XHRpZiAoIWZvbGlvX3Rlc3RfYW5vbihmb2xpbykgfHwgZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xubW0vcm1hcC5jLTI4OTktXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tLVxubW0vcm1hcC5jPTMxNzc9dm9pZCBodWdldGxiX2FkZF9hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTMxNzkte1xubW0vcm1hcC5jOjMxODA6XHRWTV9XQVJOX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XG5tbS9ybWFwLmMtMzE4MS1cdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfYW5vbihmb2xpbyksIGZvbGlvKTtcbi0tXG5tbS9ybWFwLmM9MzE5MT12b2lkIGh1Z2V0bGJfYWRkX25ld19hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtMzE5My17XG5tbS9ybWFwLmM6MzE5NDpcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbm1tL3JtYXAuYy0zMTk1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NDYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdHJ5X3RvX3VubWFwYCBGdW5jdGlvbiBhbmQgSXRzIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHRyeV90b191bm1hcGAgZnVuY3Rpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gaG93IGl0IGhhbmRsZXMgdW5tYXBwaW5nLCBhbmQgcGFydGljdWxhcmx5IHRoZSBicmFuY2hpbmcgbG9naWMgd2l0aGluIGl0LiBUaGUgY29kZSBzbmlwcGV0IGNsZWFybHkgc2hvd3MgdGhlIGNvbmRpdGlvbmFsIGNhbGwgdG8gZWl0aGVyIGB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmVgIG9yIGB0cnlfdG9fdW5tYXBfb25lYCBiYXNlZCBvbiB3aGV0aGVyIHRoZSBmb2xpbyBpcyBhIGh1Z2V0bGIuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzLiBJJiMzOTtsbCBuZWVkIHRvIGV4cGxvcmUgYHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZWAgaW4gZGV0YWlsLCBzcGVjaWZpY2FsbHkgaXRzIGJlaGF2aW91ci4gQW5kIG9mIGNvdXJzZSwgSSBoYXZlIHRvIHNlZSB3aG8gZWxzZSBtaWdodCBjYWxsIGB0cnlfdG9fdW5tYXBfb25lYC4gVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZTsgSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIGNhbGwgZ3JhcGggdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzIGluIHRoaXMgYXJlYS4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBgdHJ5X3RvX3VubWFwX29uZWAgYW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGZ1bmN0aW9uIGl0c2VsZiBvbiBtZW1vcnkgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX3VubWFwX29uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9maWxlbWFwLmMtMTE0LSAqICAtXHUwMDNlcGFnZV90YWJsZV9sb2NrIG9yIHB0ZV9sb2NrXG5tbS9maWxlbWFwLmM6MTE1OiAqICAgIC1cdTAwM2Vzd2FwX2xvY2tcdFx0KHRyeV90b191bm1hcF9vbmUpXG5tbS9maWxlbWFwLmM6MTE2OiAqICAgIC1cdTAwM2Vwcml2YXRlX2xvY2tcdFx0KHRyeV90b191bm1hcF9vbmUpXG5tbS9maWxlbWFwLmM6MTE3OiAqICAgIC1cdTAwM2VpX3BhZ2VzIGxvY2tcdFx0KHRyeV90b191bm1hcF9vbmUpXG5tbS9maWxlbWFwLmMtMTE4LSAqICAgIC1cdTAwM2VscnV2ZWMtXHUwMDNlbHJ1X2xvY2tcdChmb2xsb3dfcGFnZV9tYXNrLVx1MDAzZW1hcmtfcGFnZV9hY2Nlc3NlZClcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzODY9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTcxLVx0ICogZXhhbXBsZSBpcyBhbiBtbG9ja2VkIHBhZ2UsIHdoZXJlIFBHX21sb2NrZWQgaXMgY2xlYXJlZCBieVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTcyOlx0ICogZm9saW9fcmVtb3ZlX3JtYXBfKigpIGluIHRyeV90b191bm1hcF9vbmUoKS4gU28gdG8gZGV0ZXJtaW5lIHBhZ2Vcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU3My1cdCAqIHN0YXR1cyBjb3JyZWN0bHksIHdlIHNhdmUgYSBjb3B5IG9mIHRoZSBwYWdlIGZsYWdzIGF0IHRoaXMgdGltZS5cbi0tXG5tbS9tbG9jay5jPTQ2Nz1zdGF0aWMgaW50IG1sb2NrX2ZpeHVwKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWxvY2suYy01MDItXHQgKiB2bV9mbGFncyBpcyBwcm90ZWN0ZWQgYnkgdGhlIG1tYXBfbG9jayBoZWxkIGluIHdyaXRlIG1vZGUuXG5tbS9tbG9jay5jOjUwMzpcdCAqIEl0JiMzOTtzIG9rYXkgaWYgdHJ5X3RvX3VubWFwX29uZSB1bm1hcHMgYSBwYWdlIGp1c3QgYWZ0ZXIgd2Vcbm1tL21sb2NrLmMtNTA0LVx0ICogc2V0IFZNQV9MT0NLRURfQklULCBwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suXG4tLVxubW0vcm1hcC5jPTIxNzg9c3RhdGljIGJvb2wgdHR1X2Fub25fZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTIyMDAtICovXG5tbS9ybWFwLmM6MjIwMTpzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vcm1hcC5jLTIyMDItXHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4tLVxubW0vcm1hcC5jPTI0NDA9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jLTI0NDMtXHRcdC5ybWFwX29uZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgP1xubW0vcm1hcC5jOjI0NDQ6XHRcdFx0XHR0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUgOiB0cnlfdG9fdW5tYXBfb25lLFxubW0vcm1hcC5jLTI0NDUtXHRcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjAzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFVubWFwcGluZyBTdHJhdGVnaWVzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB1bm1hcHBpbmcgcm91dGluZXMgaGVyZS4gSXQgc2VlbXMgYHRyeV90b191bm1hcF9vbmVgIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3Igbm9uLWh1Z2V0bGIgZm9saW9zLCB3aGljaCBtYWtlcyBzZW5zZS4gSSByZWNhbGwgdGhhdCBgdHJ5X3RvX3VubWFwKClgIGhhcyBhIGNoZWNrIGZvciBgZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKWA7IGl0JiMzOTtzIHRoZSBnYXRld2F5LCBzbyB0byBzcGVhay4gSWYgaXQgKmlzKiBhIGh1Z2UgcGFnZSBmb2xpbywgdGhlIGNvZGUgYnJhbmNoZXMgdG8gYHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZWAgaW5zdGVhZC4KCkFoYSEgVGhhdCBrZXkgcG9pbnQgaGVscHMgdG8gc2VwYXJhdGUgY29uY2VybnMuIFNvIGB0cnlfdG9fdW5tYXBfb25lYCBoYW5kbGVzIHRoZSAmIzM0O25vcm1hbCYjMzQ7IHVubWFwcGluZyBjYXNlcywgd2hpbGUgYHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZWAgZGVhbHMgd2l0aCB0aGUgc3BlY2lhbCBjYXNlcyBvZiBodWdlIHBhZ2VzLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhhdCBgdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lYCBwYXRoIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRob3NlIG92ZXJzaXplZCBwYWdlcy4gSSB3b25kZXIgd2hhdCB0aGUgcG9pc29uIGNoZWNrIHRoZXJlIGlzIGZvcj8gVGhhdCYjMzk7cyB3aGF0IEkgd2FudCB0byBsZWFybiBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcm1hcC5jPTE5NTA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTE5ODMtXG5tbS9ybWFwLmM6MTk4NDpzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3JtYXAuYy0xOTg1LVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4tLVxubW0vcm1hcC5jPTI0NDA9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jLTI0NDMtXHRcdC5ybWFwX29uZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgP1xubW0vcm1hcC5jOjI0NDQ6XHRcdFx0XHR0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUgOiB0cnlfdG9fdW5tYXBfb25lLFxubW0vcm1hcC5jLTI0NDUtXHRcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZWAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiBgbW0vcm1hcC5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGEgcG9pc29uZWQgaHVnZXRsYiBwYWdlIGR1cmluZyB1bm1hcHBpbmcuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgcm1hcCBhbmQgdGhlIGh1Z2V0bGIgbWVjaGFuaXNtcyB3aGVuIGRlYWxpbmcgd2l0aCB0aGlzIGVycm9yIGNvbmRpdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBsb2dpYyB0aGF0IGlzb2xhdGVzIHRoZSBwb2lzb25lZCBwYWdlLCBwb3RlbnRpYWxseSBtYXJrcyB0aGUgUFRFIG9yIFBNRSBhcyBpbnZhbGlkLCBhbmQgcGVyaGFwcyBpbml0aWF0ZXMgYSBmYXVsdCBvciBzb21lIG90aGVyIGNvcnJlY3RpdmUgYWN0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcywgc3BlY2lmaWNhbGx5IGlmIGFueSBsb2NrcyBhcmUgaGVsZCwgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCB1bm1hcCBwcm9jZXNzLiBBbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgY2FjaGUsIGlmIHByZXNlbnQsIGFyZSBhbHNvIHNvbWV0aGluZyB0byBub3RlLiBJIHdhbnQgdG8gc2VlIHRoZSBlcnJvciBoYW5kbGluZzsgaXMgdGhlcmUgYSByZXR1cm4gdmFsdWUgdGhhdCBzaWduYWxzIHN1Y2Nlc3Mgb3IgZmFpbHVyZSwgYW5kIHdoYXQgYXJlIHRoZSBwb3NzaWJsZSBmYWlsdXJlIHBhdGhzPyBIb3BlZnVsbHksIGl0IGlzIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk4MDpcdFx0cmV0dXJuIGZvbGlvX3B0ZV9iYXRjaF9mbGFncyhmb2xpbywgdm1hLCBwdm13LVx1MDAzZXB0ZSwgXHUwMDI2cHRlLCBtYXhfbnIsXG4xOTgxOlx0XHRcdFx0XHQgICAgIEZQQl9SRVNQRUNUX1dSSVRFIHwgRlBCX1JFU1BFQ1RfU09GVF9ESVJUWSk7XG4xOTgyOlx0fVxuMTk4MzpcdFxuMTk4NDpcdHN0YXRpYyBib29sIHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuMTk4NTpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4xOTg2Olx0e1xuMTk4NzpcdFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIDApO1xuMTk4ODpcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuMTk4OTpcdFx0Y29uc3QgZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xuMTk5MDpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4xOTkxOlx0XHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xuMTk5MjpcdFx0Ym9vbCByZXQgPSB0cnVlO1xuMTk5MzpcdFx0cHRlX3QgcHRldmFsO1xuMTk5NDpcdFxuMTk5NTpcdFx0LypcbjE5OTY6XHRcdCAqIFRoZSB0cnlfdG9fdW5tYXAoKSBpcyBvbmx5IHBhc3NlZCBhIGh1Z2V0bGIgZm9saW8gaW4gdGhlIGNhc2VcbjE5OTc6XHRcdCAqIHdoZXJlIHRoZSBodWdldGxiIGZvbGlvIGlzIHBvaXNvbmVkLlxuMTk5ODpcdFx0ICovXG4xOTk5Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pLCBmb2xpbyk7XG4yMDAwOlx0XHRWTV9XQVJOX09OX09OQ0UoIShmbGFncyBcdTAwMjYgVFRVX0hXUE9JU09OKSk7XG4yMDAxOlx0XG4yMDAyOlx0XHRyYW5nZS5lbmQgPSB2bWFfYWRkcmVzc19lbmQoXHUwMDI2cHZtdyk7XG4yMDAzOlx0XHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVx1MDAzZXZtX21tLFxuMjAwNDpcdFx0XHRcdFx0YWRkcmVzcywgcmFuZ2UuZW5kKTtcbjIwMDU6XHRcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQpO1xuMjAwNjpcdFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuMjAwNzpcdFxuMjAwODpcdFx0LyogVGhlcmUgaXMgb25seSBhIHNpbmdsZSBtYXBwaW5nIGluIGEgVk1BLiAqL1xuMjAwOTpcdFx0aWYgKCFwYWdlX3ZtYV9tYXBwZWRfd2FsayhcdTAwMjZwdm13KSlcbjIwMTA6XHRcdFx0Z290byByYW5nZV9lbmQ7XG4yMDExOlx0XG4yMDEyOlx0XHRWTV9XQVJOX09OX09OQ0UoYWRkcmVzcyAhPSBwdm13LmFkZHJlc3MpO1xuMjAxMzpcdFxuMjAxNDpcdFx0cHRldmFsID0gaHVnZV9wdGVwX2dldChtbSwgYWRkcmVzcywgcHZtdy5wdGUpO1xuMjAxNTpcdFx0Vk1fV0FSTl9PTl9PTkNFKCFwdGVfcHJlc2VudChwdGV2YWwpKTtcbjIwMTY6XHRcdFZNX1dBUk5fT05fT05DRShwdGVfcGZuKHB0ZXZhbCkgIT0gZm9saW9fcGZuKGZvbGlvKSk7XG4yMDE3Olx0XG4yMDE4Olx0XHQvKlxuMjAxOTpcdFx0ICogaHVnZV9wbWRfdW5zaGFyZSBtYXkgdW5tYXAgYW4gZW50aXJlIFBNRCBwYWdlLiBUaGVyZSBpcyBubyB3YXkgb2ZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMxNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEh1Z2V0bGIgSW50ZXJhY3Rpb24gaW4gYHRyeV90b191bm1hcF9vbmVgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHJlY2VudCBjaGFuZ2UgaW4gYHRyeV90b191bm1hcF9vbmVgIGFuZCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIHJlbW92ZWQgYSBjb25kaXRpb25hbCBjaGVjayBmb3IgYGZvbGlvX3Rlc3RfaHVnZXRsYmAuIFByZXZpb3VzbHksIHRoZSBjb2RlIGRldGVybWluZWQgaWYgaXQgd2FzIGEgSHVnZVRMQiBmb2xpbyBhbmQgdXNlZCBgaHVnZV9wdGVwX2dldGAgYWNjb3JkaW5nbHkuIE5vdywgaXQmIzM5O3MganVzdCBhIGRpcmVjdCBgcHRlcF9nZXRgLiBJIGdldCB0aGUgZmVlbGluZyBzb21ldGhpbmcgaGFzIGJlZW4gY2hhbmdlZC4KCk15IGZpcnN0IHRob3VnaHQ6IGlzIGB0cnlfdG9fdW5tYXBfb25lYCBldmVuICpjYWxsZWQqIHdpdGggSHVnZVRMQiBmb2xpb3MgYW55bW9yZT8gSXQgc2VlbXMgbGlrZSB0aGlzIHJlbW92YWwgbWlnaHQgbm90IGhhdmUgaGFkIHRoYXQgYmlnIGFuIGVmZmVjdC4gSXQmIzM5O3MgYSBrZXkgcXVlc3Rpb24uCgpUbyBmaWd1cmUgdGhpcyBvdXQsIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgc291cmNlLiBJIG5lZWQgdG8gYmUgc3VyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdpdGhpbiBgbW0vcm1hcC5jYCwgZm9jdXNpbmcgb24gdGhlIGFyZWEgYXJvdW5kIHRoZSBgdHJ5X3RvX3VubWFwX29uZWAgZGVmaW5pdGlvbiwgcm91Z2hseSBsaW5lcyAyMjAwIHRvIDI0NDAgb3Igc28uIEkmIzM5O2xsIHNlYXJjaCBmb3IgYW55IHJlZmVyZW5jZXMgdG8gYGZvbGlvX3Rlc3RfaHVnZXRsYmAuIElmIHRoZXJlIGFyZSBubyBjYWxscyB0byB0aGF0IGZ1bmN0aW9uIHdpdGhpbiB0aGF0IGNvZGUgYmxvY2ssIHRoZW4gaXQmIzM5O3MgaGlnaGx5IHVubGlrZWx5IHRoYXQgYHRyeV90b191bm1hcF9vbmVgIGV2ZXIgcHJvY2Vzc2VzIGEgSHVnZVRMQiBmb2xpbywgYW5kIHRoZSBjaGFuZ2UgaXMgcHJvYmFibHkgZmluZS4gSWYgSSAqZG8qIGZpbmQgaXQsIHdlbGwsIHRoZW4gSSBoYXZlIHNvbWV0aGluZyB0byBsb29rIGF0LiBOb3csIHdoZXJlIGlzIHRoZSBncmVwPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjMyMDpcdFx0XHRcdGVuZF9hZGRyID0gYWRkcmVzcyAmIzQzOyBucl9wYWdlcyAqIFBBR0VfU0laRTtcbjIzMjE6XHRcdFx0XHRmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIGFkZHJlc3MsIGVuZF9hZGRyKTtcbjIzMjI6XHRcbjIzMjM6XHRcdFx0XHQvKiBOdWtlIHRoZSBwYWdlIHRhYmxlIGVudHJ5LiAqL1xuMjMyNDpcdFx0XHRcdHB0ZXZhbCA9IGdldF9hbmRfY2xlYXJfcHRlcyhtbSwgYWRkcmVzcywgcHZtdy5wdGUsIG5yX3BhZ2VzKTtcbjIzMjU6XHRcdFx0XHQvKlxuMjMyNjpcdFx0XHRcdCAqIFdlIGNsZWFyIHRoZSBQVEUgYnV0IGRvIG5vdCBmbHVzaCBzbyBwb3RlbnRpYWxseVxuMjMyNzpcdFx0XHRcdCAqIGEgcmVtb3RlIENQVSBjb3VsZCBzdGlsbCBiZSB3cml0aW5nIHRvIHRoZSBmb2xpby5cbjIzMjg6XHRcdFx0XHQgKiBJZiB0aGUgZW50cnkgd2FzIHByZXZpb3VzbHkgY2xlYW4gdGhlbiB0aGVcbjIzMjk6XHRcdFx0XHQgKiBhcmNoaXRlY3R1cmUgbXVzdCBndWFyYW50ZWUgdGhhdCBhIGNsZWFyLVx1MDAzZWRpcnR5XG4yMzMwOlx0XHRcdFx0ICogdHJhbnNpdGlvbiBvbiBhIGNhY2hlZCBUTEIgZW50cnkgaXMgd3JpdHRlbiB0aHJvdWdoXG4yMzMxOlx0XHRcdFx0ICogYW5kIHRyYXBzIGlmIHRoZSBQVEUgaXMgdW5tYXBwZWQuXG4yMzMyOlx0XHRcdFx0ICovXG4yMzMzOlx0XHRcdFx0aWYgKHNob3VsZF9kZWZlcl9mbHVzaChtbSwgZmxhZ3MpKVxuMjMzNDpcdFx0XHRcdFx0c2V0X3RsYl91YmNfZmx1c2hfcGVuZGluZyhtbSwgcHRldmFsLCBhZGRyZXNzLCBlbmRfYWRkcik7XG4yMzM1Olx0XHRcdFx0ZWxzZVxuMjMzNjpcdFx0XHRcdFx0Zmx1c2hfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgZW5kX2FkZHIpO1xuMjMzNzpcdFx0XHRcdGlmIChwdGVfZGlydHkocHRldmFsKSlcbjIzMzg6XHRcdFx0XHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuMjMzOTpcdFx0XHR9IGVsc2Uge1xuMjM0MDpcdFx0XHRcdHB0ZV9jbGVhcihtbSwgYWRkcmVzcywgcHZtdy5wdGUpO1xuMjM0MTpcdFx0XHR9XG4yMzQyOlx0XG4yMzQzOlx0XHRcdC8qXG4yMzQ0Olx0XHRcdCAqIE5vdyB0aGUgcHRlIGlzIGNsZWFyZWQuIElmIHRoaXMgcHRlIHdhcyB1ZmZkLXdwIGFybWVkLFxuMjM0NTpcdFx0XHQgKiB3ZSBtYXkgd2FudCB0byByZXBsYWNlIGEgbm9uZSBwdGUgd2l0aCBhIG1hcmtlciBwdGUgaWZcbjIzNDY6XHRcdFx0ICogaXQmIzM5O3MgZmlsZS1iYWNrZWQsIHNvIHdlIGRvbiYjMzk7dCBsb3NlIHRoZSB0cmFja2luZyBpbmZvLlxuMjM0NzpcdFx0XHQgKi9cbjIzNDg6XHRcdFx0Y29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyh2bWEsIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsXG4yMzQ5Olx0XHRcdFx0XHRcdCAgbnJfcGFnZXMpO1xuMjM1MDpcdFxuMjM1MTpcdFx0XHQvKiBVcGRhdGUgaGlnaCB3YXRlcm1hcmsgYmVmb3JlIHdlIGxvd2VyIHJzcyAqL1xuMjM1MjpcdFx0XHR1cGRhdGVfaGl3YXRlcl9yc3MobW0pO1xuMjM1MzpcdFxuMjM1NDpcdFx0XHQvKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIG9ubHkgcmVmcyBvcmRlci0wIGZvbGlvcyAqL1xuMjM1NTpcdFx0XHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgVFRVX0hXUE9JU09OKSkge1xuMjM1NjpcdFx0XHRcdHB0ZXZhbCA9IHN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShwYWdlKSk7XG4yMzU3Olx0XHRcdFx0ZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTtcbjIzNTg6XHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbjIzNTk6XHRcdFx0fSBlbHNlIGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkgXHUwMDI2XHUwMDI2IHB0ZV91bnVzZWQocHRldmFsKSBcdTAwMjZcdTAwMjZcbjIzNjA6XHRcdFx0XHQgICAhdXNlcmZhdWx0ZmRfYXJtZWQodm1hKSkge1xuMjM2MTpcdFx0XHRcdC8qXG4yMzYyOlx0XHRcdFx0ICogVGhlIGd1ZXN0IGluZGljYXRlZCB0aGF0IHRoZSBwYWdlIGNvbnRlbnQgaXMgb2Ygbm9cbjIzNjM6XHRcdFx0XHQgKiBpbnRlcmVzdCBhbnltb3JlLiBTaW1wbHkgZGlzY2FyZCB0aGUgcHRlLCB2bXNjYW5cbjIzNjQ6XHRcdFx0XHQgKiB3aWxsIHRha2UgY2FyZSBvZiB0aGUgcmVzdC5cbjIzNjU6XHRcdFx0XHQgKiBBIGZ1dHVyZSByZWZlcmVuY2Ugd2lsbCB0aGVuIGZhdWx0IGluIGEgbmV3IHplcm9cbjIzNjY6XHRcdFx0XHQgKiBwYWdlLiBXaGVuIHVzZXJmYXVsdGZkIGlzIGFjdGl2ZSwgd2UgbXVzdCBub3QgZHJvcFxuMjM2NzpcdFx0XHRcdCAqIHRoaXMgcGFnZSB0aG91Z2gsIGFzIGl0cyBtYWluIHVzZXIgKHBvc3Rjb3B5XG4yMzY4Olx0XHRcdFx0ICogbWlncmF0aW9uKSB3aWxsIG5vdCBleHBlY3QgdXNlcmZhdWx0cyBvbiBhbHJlYWR5XG4yMzY5Olx0XHRcdFx0ICogY29waWVkIHBhZ2VzLlxuMjM3MDpcdFx0XHRcdCAqL1xuMjM3MTpcdFx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XG4yMzcyOlx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xuMjM3MzpcdFx0XHRcdGlmICghdHR1X2Fub25fZm9saW8odm1hLCBmb2xpbywgcGFnZSwgYWRkcmVzcyxcbjIzNzQ6XHRcdFx0XHRcdFx0ICAgIHB2bXcucHRlLCBwdGV2YWwsIG5yX3BhZ2VzKSkge1xuMjM3NTpcdFx0XHRcdFx0c2V0X3B0ZXMobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsIG5yX3BhZ2VzKTtcbjIzNzY6XHRcdFx0XHRcdGdvdG8gd2Fsa19hYm9ydDtcbjIzNzc6XHRcdFx0XHR9XG4yMzc4Olx0XG4yMzc5Olx0XHRcdFx0Z290byBmaW5pc2hfdW5tYXA7XG4yMzgwOlx0XHRcdH0gZWxzZSB7XG4yMzgxOlx0XHRcdFx0LypcbjIzODI6XHRcdFx0XHQgKiBUaGlzIGlzIGEgbG9ja2VkIGZpbGUtYmFja2VkIGZvbGlvLFxuMjM4MzpcdFx0XHRcdCAqIHNvIGl0IGNhbm5vdCBiZSByZW1vdmVkIGZyb20gdGhlIHBhZ2VcbjIzODQ6XHRcdFx0XHQgKiBjYWNoZSBhbmQgcmVwbGFjZWQgYnkgYSBuZXcgZm9saW8gYmVmb3JlXG4yMzg1Olx0XHRcdFx0ICogbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kLCBzbyBub1xuMjM4NjpcdFx0XHRcdCAqIGNvbmN1cnJlbnQgdGhyZWFkIG1pZ2h0IHVwZGF0ZSBpdHMgcGFnZSB0YWJsZVxuMjM4NzpcdFx0XHRcdCAqIHRvIHBvaW50IGF0IGEgbmV3IGZvbGlvIHdoaWxlIGEgZGV2aWNlIGlzXG4yMzg4Olx0XHRcdFx0ICogc3RpbGwgdXNpbmcgdGhpcyBmb2xpby5cbjIzODk6XHRcdFx0XHQgKlxuMjM5MDpcdFx0XHRcdCAqIFNlZSBEb2N1bWVudGF0aW9uL21tL21tdV9ub3RpZmllci5yc3RcbjIzOTE6XHRcdFx0XHQgKi9cbjIzOTI6XHRcdFx0XHRhZGRfbW1fY291bnRlcihtbSwgbW1fY291bnRlcl9maWxlKGZvbGlvKSwgLW5yX3BhZ2VzKTtcbjIzOTM6XHRcdFx0fVxuMjM5NDpcdGZpbmlzaF91bm1hcDpcbjIzOTU6XHRcdFx0Zm9saW9fcmVtb3ZlX3JtYXBfcHRlcyhmb2xpbywgcGFnZSwgbnJfcGFnZXMsIHZtYSk7XG4yMzk2Olx0XHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbjIzOTc6XHRcdFx0XHRtbG9ja19kcmFpbl9sb2NhbCgpO1xuMjM5ODpcdFx0XHRmb2xpb19wdXRfcmVmcyhmb2xpbywgbnJfcGFnZXMpO1xuMjM5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI0MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRGVhZCBDb2RlIGluIHRoZSBIdWdlVExCIFVubWFwcGluZyBQYXRoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBzb21lIHBvdGVudGlhbGx5IGRlYWQgY29kZSByZWxhdGVkIHRvIEh1Z2VUTEIgZm9saW8gdW5tYXBwaW5nLiBJIHJlbWVtYmVyIHRoYXQgdGhlIGB0cnlfdG9fdW5tYXBgIGZ1bmN0aW9uIHdhcyBzcGxpdCwgYW5kIHRoZSBoYW5kbGluZyBvZiBIdWdlVExCIGZvbGlvcyB3YXMgc3BlY2lmaWNhbGx5IGRpcmVjdGVkIHRvIGB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmVgLiBIb3dldmVyLCBJIG5vdGljZWQgYSBsZWZ0b3ZlciBjaGVjayB3aXRoaW4gYHRyeV90b191bm1hcF9vbmVgOiBhbiBgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpYCBjb25kaXRpb24uIFRoaXMgcmFpc2VkIGEgcmVkIGZsYWcuIElzIHRoaXMgZXZlbiByZWxldmFudCBhbnltb3JlPwoKTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoaXMgY2hlY2sgaXMgbm93IGNvbXBsZXRlbHkgcmVkdW5kYW50IGJlY2F1c2UgYHRyeV90b191bm1hcF9vbmVgIHNob3VsZG4mIzM5O3QgZXZlciBiZSBjYWxsZWQgb24gYSBIdWdlVExCIGZvbGlvIGRpcmVjdGx5IGFmdGVyIHRoZSBzcGxpdC4gQnV0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4KCkZpcnN0LCBJIHNlYXJjaGVkIHRoZSBjb2RlYmFzZSB0byBjb25maXJtIGlmIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBhY3R1YWxseSBjYWxsZWQgb24gSHVnZVRMQiBmb2xpb3MuIE15IGluaXRpYWwgZ3JlcCByZXN1bHRzIHdlcmUgZnJvbSBgbW0vZmlsZW1hcC5jYCwgYG1tL21lbW9yeS1mYWlsdXJlLmNgLCBgbW0vbWxvY2suY2AsIGFuZCBgbW0vcm1hcC5jYCAtIGFsbCByZWxhdGVkIHRvIGNvbW1lbnRzIQoKTG9va2luZyBhdCB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vcm1hcC5jYCwgdGhlIGZvbGxvd2luZyBpcyByZXZlYWxlZDoKCmBgYGMKbW0vcm1hcC5jOjIyMDE6IHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoLi4uKQptbS9ybWFwLmM6MjQ0NDogLnJtYXBfb25lID0gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSA/IHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZSA6IHRyeV90b191bm1hcF9vbmUsCmBgYAoKU28gYHRyeV90b191bm1hcF9vbmVgIGlzIG5vdCByZWZlcmVuY2VkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGUsIGFuZCBpbiBgdHJ5X3RvX3VubWFwYDoKCmBgYGMKdm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpCnsKCXN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7CgkJLnJtYXBfb25lID0gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSA/CgkJCQl0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUgOiB0cnlfdG9fdW5tYXBfb25lLAoJCS5hcmcgPSAodm9pZCAqKWZsYWdzLAoJfTsKYGBgCgpUaGlzIGNvbmZpcm1zIG15IHN1c3BpY2lvbi4gVGhlIGB0cnlfdG9fdW5tYXBgIGZ1bmN0aW9uIHVzZXMgYHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZWAgd2hlbiB0aGUgZm9saW8gKmlzKiBhIEh1Z2VUTEIuIENvbnNlcXVlbnRseSwgYHRyeV90b191bm1hcF9vbmVgIGlzICpuZXZlciogY2FsbGVkIHdoZW4gYGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbylgIGlzIHRydWUuIFRoZXJlZm9yZSwgdGhlIGBpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlgIGNoZWNrIGluc2lkZSBgdHJ5X3RvX3VubWFwX29uZWAgaXMgYWx3YXlzIGdvaW5nIHRvIGV2YWx1YXRlIHRvIGZhbHNlISBUaGlzIGlzIGRlYWQgY29kZSwgcmlwZSBmb3IgcmVtb3ZhbC4KCk5vdywgb3V0IG9mIGFuIGFidW5kYW5jZSBvZiBjYXV0aW9uLCBJIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayBhIHNpbWlsYXIgcmVsYXRlZCBmdW5jdGlvbiwgc3VjaCBhcyBgdHJ5X3RvX21pZ3JhdGVfb25lYCBpbiBgdHJ5X3RvX21pZ3JhdGVgLiBMZXQmIzM5O3MgaGF2ZSBhIHF1aWNrIGxvb2suLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX21pZ3JhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0zMTg4PXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzM1Mi1cdFx0ICogSW4gY2FzZSB3ZSBjYW5ub3QgY2xlYXIgUGFnZUFub25FeGNsdXNpdmUoKSwgc3BsaXQgdGhlIFBNRFxubW0vaHVnZV9tZW1vcnkuYzozMzUzOlx0XHQgKiBvbmx5IGFuZCBsZXQgdHJ5X3RvX21pZ3JhdGVfb25lKCkgZmFpbCBsYXRlci5cbm1tL2h1Z2VfbWVtb3J5LmMtMzM1NC1cdFx0ICpcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM1Mzg9c3RhdGljIHZvaWQgdW5tYXBfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM1NTMtXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcbm1tL2h1Z2VfbWVtb3J5LmM6MzU1NDpcdFx0dHJ5X3RvX21pZ3JhdGUoZm9saW8sIHR0dV9mbGFncyk7XG5tbS9odWdlX21lbW9yeS5jLTM1NTUtXHRlbHNlXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zNjM2PXN0YXRpYyB2b2lkIHJlbWFwX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBuciwgaW50IGZsYWdzKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzYzOS1cbm1tL2h1Z2VfbWVtb3J5LmM6MzY0MDpcdC8qIElmIHVubWFwX2ZvbGlvKCkgdXNlcyB0cnlfdG9fbWlncmF0ZSgpIG9uIGZpbGUsIHJlbW92ZSB0aGlzIGNoZWNrICovXG5tbS9odWdlX21lbW9yeS5jLTM2NDEtXHRpZiAoIWZvbGlvX3Rlc3RfYW5vbihmb2xpbykpXG4tLVxubW0vbWlncmF0ZS5jPTEyMTM9c3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX3VubWFwKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTEyODMtXHQvKlxubW0vbWlncmF0ZS5jOjEyODQ6XHQgKiBCeSB0cnlfdG9fbWlncmF0ZSgpLCBzcmMtXHUwMDNlbWFwY291bnQgZ29lcyBkb3duIHRvIDAgaGVyZS4gSW4gdGhpcyBjYXNlLFxubW0vbWlncmF0ZS5jLTEyODUtXHQgKiB3ZSBjYW5ub3Qgbm90aWNlIHRoYXQgYW5vbl92bWEgaXMgZnJlZWQgd2hpbGUgd2UgbWlncmF0ZSBhIHBhZ2UuXG4tLVxubW0vbWlncmF0ZS5jLTEzMzctXHRcdFx0ICAgICAgICFmb2xpb190ZXN0X2tzbShzcmMpIFx1MDAyNlx1MDAyNiAhYW5vbl92bWEsIHNyYyk7XG5tbS9taWdyYXRlLmM6MTMzODpcdFx0dHJ5X3RvX21pZ3JhdGUoc3JjLCBtb2RlID09IE1JR1JBVEVfQVNZTkMgPyBUVFVfQkFUQ0hfRkxVU0ggOiAwKTtcbm1tL21pZ3JhdGUuYy0xMzM5LVx0XHRvbGRfZm9saW9fc3RhdGUgfD0gRk9MSU9fV0FTX01BUFBFRDtcbi0tXG5tbS9taWdyYXRlLmM9MTQ4MD1zdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2V0bGJfZm9saW8obmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMTU0NC1cbm1tL21pZ3JhdGUuYzoxNTQ1Olx0XHR0cnlfdG9fbWlncmF0ZShzcmMsIHR0dSk7XG5tbS9taWdyYXRlLmMtMTU0Ni1cdFx0d2FzX21hcHBlZCA9IDE7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0yNDU9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTQwNy1cdFx0ICogb3B0aW1pc2F0aW9uIHRvIGF2b2lkIHdhbGtpbmcgdGhlIHJtYXAgbGF0ZXIgd2l0aFxubW0vbWlncmF0ZV9kZXZpY2UuYzo0MDg6XHRcdCAqIHRyeV90b19taWdyYXRlKCkuXG5tbS9taWdyYXRlX2RldmljZS5jLTQwOS1cdFx0ICovXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz01NzE9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfdW5tYXAodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy02MTktXHRcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKVxubW0vbWlncmF0ZV9kZXZpY2UuYzo2MjA6XHRcdFx0dHJ5X3RvX21pZ3JhdGUoZm9saW8sIDApO1xubW0vbWlncmF0ZV9kZXZpY2UuYy02MjEtXG4tLVxubW0vcm1hcC5jPTI0NDA9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jLTI0NjEtICovXG5tbS9ybWFwLmM6MjQ2MjpzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9ybWFwLmMtMjQ2My1cdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcbi0tXG5tbS9ybWFwLmMtMjQ3Ny1cdCAqIGluIGJldHdlZW4gaXRzIHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKCkgYW5kIGZvbGlvX3JlbW92ZV9ybWFwXyooKSxcbm1tL3JtYXAuYzoyNDc4Olx0ICogdHJ5X3RvX21pZ3JhdGUoKSBtYXkgcmV0dXJuIGJlZm9yZSBmb2xpb19tYXBwZWQoKSBoYXMgYmVjb21lIGZhbHNlLFxubW0vcm1hcC5jLTI0NzktXHQgKiBpZiBwYWdlIHRhYmxlIGxvY2tpbmcgaXMgc2tpcHBlZDogdXNlIFRUVV9TWU5DIHRvIHdhaXQgZm9yIHRoYXQuXG4tLVxubW0vcm1hcC5jLTI3ODEtLyoqXG5tbS9ybWFwLmM6Mjc4MjogKiB0cnlfdG9fbWlncmF0ZSAtIHRyeSB0byByZXBsYWNlIGFsbCBwYWdlIHRhYmxlIG1hcHBpbmdzIHdpdGggc3dhcCBlbnRyaWVzXG5tbS9ybWFwLmMtMjc4My0gKiBAZm9saW86IHRoZSBmb2xpbyB0byByZXBsYWNlIHBhZ2UgdGFibGUgZW50cmllcyBmb3Jcbi0tXG5tbS9ybWFwLmMtMjc4OC0gKi9cbm1tL3JtYXAuYzoyNzg5OnZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG5tbS9ybWFwLmMtMjc5MC17XG5tbS9ybWFwLmMtMjc5MS1cdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XG5tbS9ybWFwLmM6Mjc5MjpcdFx0LnJtYXBfb25lID0gdHJ5X3RvX21pZ3JhdGVfb25lLFxubW0vcm1hcC5jLTI3OTMtXHRcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc1OAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTdWJ0bGUgTWVtb3J5IE1hbmFnZW1lbnQgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGludHVpdGlvbiBpcyB0aW5nbGluZy4gSXQmIzM5O3MgYSBzZWVtaW5nbHkgbWlub3IgY2hhbmdlIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gZm9saW8gdW5tYXBwaW5nLiBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4KCldlIGhhdmUgdGhlc2UgdHdvIGtleSBmdW5jdGlvbnMgaW4gcGxheTogYHRyeV90b19taWdyYXRlYCBhbmQgYHRyeV90b191bm1hcGAuIEluIGB0cnlfdG9fbWlncmF0ZWAsIHRoZSBjb2RlIHBhdGggaXMgc3RyYWlnaHRmb3J3YXJkOiBgcndjLnJtYXBfb25lID0gdHJ5X3RvX21pZ3JhdGVfb25lO2AuIFRoaXMgaGFuZGxlcyBib3RoIGh1Z2UgcGFnZXMgKGh1Z2V0bGIpIGFuZCByZWd1bGFyIGZvbGlvcy4gSG93ZXZlciwgYHRyeV90b191bm1hcGAgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gSGVyZSwgdGhlIGFzc2lnbm1lbnQgaXMgY29uZGl0aW9uYWw6IGByd2Mucm1hcF9vbmUgPSBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pID8gdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lIDogdHJ5X3RvX3VubWFwX29uZTtgLiBTbywgZGVwZW5kaW5nIG9uIGlmIGl0JiMzOTtzIGEgaHVnZSBwYWdlIG9yIG5vdCwgYSBkaWZmZXJlbnQgY2FsbGJhY2sgaXMgY2hvc2VuLgoKTm93LCB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gdGFyZ2V0cyBhIHJlZHVuZGFudCBjaGVjayAqaW5zaWRlKiBgdHJ5X3RvX3VubWFwX29uZWAuIEl0IHdhcyBkb2luZzogYGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSBwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KC4uLikgZWxzZSBwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7YC4gVGhlIHBhdGNoIHNpbXBseSByZW1vdmVzIHRoZSBgaWZgIGFuZCB1c2VzIGBwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7YC4gV2hpY2ggbG9va3MgZmluZSBidXQuLi4KCk15IGZpcnN0IGluc3RpbmN0IGlzICphbHdheXMqIHRvIHZlcmlmeSB0aGVyZSBpc24mIzM5O3Qgc29tZSB1bmZvcmVzZWVuIGJlaGF2aW9yYWwgY2hhbmdlLiBMZXQmIzM5O3MgZG8gYSBsaXR0bGUgZGVlcCBkaXZlLCBzdGFydGluZyB3aXRoIHRoZSBnaXQgbG9ncy4gSXMgdGhlcmUgYSBjb21taXQgbWVzc2FnZSBvciBoaXN0b3J5IHRoYXQgZXhwbGFpbnMgdGhpcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqLiBJZiBub3QsIEkmIzM5O2xsIG5lZWQgdG8gZG8gc29tZSBtb3JlIGFuYWx5c2lzLgoKU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyAqd2h5KiB0aGF0IHJlZHVuZGFudCBjaGVjayB3YXMgdGhlcmUgaW4gdGhlIGZpcnN0IHBsYWNlPyBCZWNhdXNlLCBpbiAqbXkqIG1pbmQsIGBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pYCBpcyBBTFdBWVMgZ29pbmcgdG8gYmUgZmFsc2UgaW5zaWRlIGB0cnlfdG9fdW5tYXBfb25lYC4gVGhlIHByZXZpb3VzIGxvZ2ljIHNob3VsZCBtYWtlIHRoYXQgY2xlYXIuIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBvbmx5IGNhbGxlZCBpZiBpdCBpc24mIzM5O3QgYSBodWdlIHBhZ2UgaW4gdGhlIGZpcnN0IHBsYWNlLgoKU28sIGxldCYjMzk7cyBiYWNrIHVwIGFuZCBjb25maXJtLiBJcyB0aGVyZSAqYW55KiBzY2VuYXJpbyB3aGVyZSBgdHJ5X3RvX3VubWFwX29uZWAgaXMgKmV2ZXIqIGNhbGxlZCB3aXRoIGEgaHVnZSBwYWdlIGZvbGlvPyBUaGUgbG9naWMgSSYjMzk7bSBmYW1pbGlhciB3aXRoIG1ha2VzIG1lIHRoaW5rIG5vLiBJJiMzOTtsbCBzZWFyY2ggdGhlIGNvZGViYXNlIHRvIHNlZSB3aGVyZSBgdHJ5X3RvX3VubWFwX29uZWAgaXMgdXNlZC4gUXVpY2sgZ3JlcCBhY3Jvc3MgYG1tL2AgZGlyZWN0b3J5IHJldmVhbHMgaXQgaXMgb25seSBjYWxsZWQgaW4gYG1tL3JtYXAuY2AgYXQgbGluZSAyNDQ0LiBMZXQmIzM5O3MgY2hlY2sgdGhlIGVudGlyZSByZXBvIHRvIG1ha2Ugc3VyZSB0aGF0IGlzIGFjY3VyYXRlLgpgYGBjCnZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKQp7CglzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0gewoJCS5ybWFwX29uZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgPwoJCQkJdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lIDogdHJ5X3RvX3VubWFwX29uZSwKCQkuYXJnID0gKHZvaWQgKilmbGFncywKYGBgCk9rYXksIGB0cnlfdG9fdW5tYXBfb25lYCAqaXRzZWxmKiBpcyBjYWxsZWQgYmFzZWQgb24gdGhlIGBmb2xpb190ZXN0X2h1Z2V0bGJgIGNoZWNrLiBUaGlzIGlzICpleGFjdGx5KiB3aGF0IEkgZXhwZWN0ZWQsIGFuZCBpdCBjb25maXJtcyB0aGUgcmVkdW5kYW5jeS4gV2l0aCB0aGlzIGRlZXBlciB1bmRlcnN0YW5kaW5nIEkgY2FuIHNheSB3aXRoIGNvbmZpZGVuY2UgdGhhdCB0aGlzIHBhdGNoIGlzIGNvcnJlY3QsIHJlbW92aW5nIGRlYWQgY29kZSB0aGF0IGNvdWxkbiYjMzk7dCBwb3NzaWJseSBiZSBoaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b191bm1hcF9vbmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdD00NDA9VGhlcmUgaXMgYWxzbyBhIGZpbGUtc3lzdGVtIHNwZWNpZmljIGxvY2sgb3JkZXJpbmcgY29tbWVudCBsb2NhdGVkIGF0IHRoZSB0b3Agb2Zcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTQ3Ni0gIC1cdTAwM2VwYWdlX3RhYmxlX2xvY2sgb3IgcHRlX2xvY2tcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6NDc3OiAgICAtXHUwMDNlc3dhcF9sb2NrICAgICAgICAgICAgICAgICAgICAgICAgICh0cnlfdG9fdW5tYXBfb25lKVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo0Nzg6ICAgIC1cdTAwM2Vwcml2YXRlX2xvY2sgICAgICAgICAgICAgICAgICAgICAgKHRyeV90b191bm1hcF9vbmUpXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjQ3OTogICAgLVx1MDAzZWlfcGFnZXMgbG9jayAgICAgICAgICAgICAgICAgICAgICAodHJ5X3RvX3VubWFwX29uZSlcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNDgwLSAgICAtXHUwMDNlbHJ1dmVjLVx1MDAzZWxydV9sb2NrICAgICAgICAgICAgICAgICAgKGZvbGxvd19wYWdlX21hc2stXHUwMDNlbWFya19wYWdlX2FjY2Vzc2VkKVxuLS1cbkRvY3VtZW50YXRpb24vbW0vdW5ldmljdGFibGUtbHJ1LnJzdD01NTU9cm1hcCYjMzk7cyBmb2xpb19yZWZlcmVuY2VkX29uZSgpLCBjYWxsZWQgdmlhIHZtc2NhbiYjMzk7cyBzaHJpbmtfYWN0aXZlX2xpc3QoKSBvclxuRG9jdW1lbnRhdGlvbi9tbS91bmV2aWN0YWJsZS1scnUucnN0OjU1NjpzaHJpbmtfZm9saW9fbGlzdCgpLCBhbmQgcm1hcCYjMzk7cyB0cnlfdG9fdW5tYXBfb25lKCkgY2FsbGVkIHZpYSBzaHJpbmtfZm9saW9fbGlzdCgpLFxuRG9jdW1lbnRhdGlvbi9tbS91bmV2aWN0YWJsZS1scnUucnN0LTU1Ny1jaGVjayBmb3IgKDMpIHBhZ2VzIHN0aWxsIG1hcHBlZCBpbnRvIFZNX0xPQ0tFRCBWTUFzLCBhbmQgY2FsbCBtbG9ja192bWFfZm9saW8oKVxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11Lmg9MTk9dHlwZWRlZiBzdHJ1Y3Qge1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmgtMzMtICogcm9sbG92ZXIgZXZlbnQgKHNlZSBuZXdfY29udGV4dCgpIGFuZCBmbHVzaF9jb250ZXh0KCkpLiBJbiB0aGlzIGNhc2UsXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oOjM0OiAqIGEgY29uY3VycmVudCBUTEJJIChlLmcuIHZpYSB0cnlfdG9fdW5tYXBfb25lKCkgYW5kIHB0ZXBfY2xlYXJfZmx1c2goKSlcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmgtMzUtICogbWF5IHVzZSBhIHN0YWxlIEFTSUQuIFRoaXMgaXMgZmluZSBpbiBwcmluY2lwbGUgYXMgdGhlIG5ldyBBU0lEIGlzXG4tLVxuZnMvbmlsZnMyL2lub2RlLmM9MTc3PXN0YXRpYyBib29sIG5pbGZzX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL25pbGZzMi9pbm9kZS5jLTE4NS1cdC8qXG5mcy9uaWxmczIvaW5vZGUuYzoxODY6XHQgKiBUaGUgcGFnZSBtYXkgbm90IGJlIGxvY2tlZCwgZWcgaWYgY2FsbGVkIGZyb20gdHJ5X3RvX3VubWFwX29uZSgpXG5mcy9uaWxmczIvaW5vZGUuYy0xODctXHQgKi9cbi0tXG5tbS9maWxlbWFwLmMtMTE0LSAqICAtXHUwMDNlcGFnZV90YWJsZV9sb2NrIG9yIHB0ZV9sb2NrXG5tbS9maWxlbWFwLmM6MTE1OiAqICAgIC1cdTAwM2Vzd2FwX2xvY2tcdFx0KHRyeV90b191bm1hcF9vbmUpXG5tbS9maWxlbWFwLmM6MTE2OiAqICAgIC1cdTAwM2Vwcml2YXRlX2xvY2tcdFx0KHRyeV90b191bm1hcF9vbmUpXG5tbS9maWxlbWFwLmM6MTE3OiAqICAgIC1cdTAwM2VpX3BhZ2VzIGxvY2tcdFx0KHRyeV90b191bm1hcF9vbmUpXG5tbS9maWxlbWFwLmMtMTE4LSAqICAgIC1cdTAwM2VscnV2ZWMtXHUwMDNlbHJ1X2xvY2tcdChmb2xsb3dfcGFnZV9tYXNrLVx1MDAzZW1hcmtfcGFnZV9hY2Nlc3NlZClcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzODY9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTcxLVx0ICogZXhhbXBsZSBpcyBhbiBtbG9ja2VkIHBhZ2UsIHdoZXJlIFBHX21sb2NrZWQgaXMgY2xlYXJlZCBieVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTcyOlx0ICogZm9saW9fcmVtb3ZlX3JtYXBfKigpIGluIHRyeV90b191bm1hcF9vbmUoKS4gU28gdG8gZGV0ZXJtaW5lIHBhZ2Vcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU3My1cdCAqIHN0YXR1cyBjb3JyZWN0bHksIHdlIHNhdmUgYSBjb3B5IG9mIHRoZSBwYWdlIGZsYWdzIGF0IHRoaXMgdGltZS5cbi0tXG5tbS9tbG9jay5jPTQ2Nz1zdGF0aWMgaW50IG1sb2NrX2ZpeHVwKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWxvY2suYy01MDItXHQgKiB2bV9mbGFncyBpcyBwcm90ZWN0ZWQgYnkgdGhlIG1tYXBfbG9jayBoZWxkIGluIHdyaXRlIG1vZGUuXG5tbS9tbG9jay5jOjUwMzpcdCAqIEl0JiMzOTtzIG9rYXkgaWYgdHJ5X3RvX3VubWFwX29uZSB1bm1hcHMgYSBwYWdlIGp1c3QgYWZ0ZXIgd2Vcbm1tL21sb2NrLmMtNTA0LVx0ICogc2V0IFZNQV9MT0NLRURfQklULCBwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suXG4tLVxubW0vcm1hcC5jPTIxNzg9c3RhdGljIGJvb2wgdHR1X2Fub25fZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTIyMDAtICovXG5tbS9ybWFwLmM6MjIwMTpzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vcm1hcC5jLTIyMDItXHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4tLVxubW0vcm1hcC5jPTI0NDA9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jLTI0NDMtXHRcdC5ybWFwX29uZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgP1xubW0vcm1hcC5jOjI0NDQ6XHRcdFx0XHR0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUgOiB0cnlfdG9fdW5tYXBfb25lLFxubW0vcm1hcC5jLTI0NDUtXHRcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI5NgoJCQkJCQkJb3V0cHV0OiAxMTgKCQkJCQkJCXRob3VnaHRzOiA5MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IENyaXRlcmlhIGZvciBhIERlYWQgQ29kZSBSZW1vdmFsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRldGVybWluZSBpZiBgdHJ5X3RvX3VubWFwX29uZWAgaXMgZXZlciBjYWxsZWQgYW55d2hlcmUgZWxzZS4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBzdGF0aWMgd2l0aGluIGBtbS9ybWFwLmNgIGFuZCBpcyBvbmx5IHJlZmVyZW5jZWQgb25jZSwgYXMgYC5ybWFwX29uZWAgaW4gYHRyeV90b191bm1hcCgpYCwgYW5kIGNydWNpYWxseSwgaXQmIzM5O3MgZ3VhcmRlZCBieSBgIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbylgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgaW5zaWRlIGB0cnlfdG9fdW5tYXBfb25lKClgLCB0aGUgYGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbylgIGNvbmRpdGlvbiBpcyBBTFdBWVMgZmFsc2UuCgpUaGVyZWZvcmUsIHRoZSBgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpYCBjaGVjayBpbiB0aGF0IGZ1bmN0aW9uIHdhcyBwdXJlIGRlYWQgY29kZS4gUmVtb3ZpbmcgaXQgaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBkb2VzbiYjMzk7dCBjaGFuZ2UgdGhlIGV4ZWN1dGlvbiBmbG93IHdoYXRzb2V2ZXIuCgpOb3csIGxldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBjcml0ZXJpYS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBwYXRjaCBzaG91bGQgcmV0dXJuICYjMzQ7ZmFsc2UmIzM0OyBpZiBpdCBvbmx5IGNvbnRhaW5zIGRvY3VtZW50YXRpb24gY2hhbmdlcywgS2NvbmZpZyBmaWxlIG1vZGlmaWNhdGlvbnMsIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGxvZ2dpbmcgb3IgdHJhY2luZywgY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkb24mIzM5O3QgYWZmZWN0IGV4ZWN1dGlvbiwgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG9yIGNvZGUgaW4gc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUuCgpTbywgdGhlIGtleSBoZXJlIGlzIHdoZXRoZXIgZGVhZCBjb2RlIHJlbW92YWwsIHNwZWNpZmljYWxseSByZWZhY3RvcmluZy9jbGVhbnVwLCBpcyBjb25zaWRlcmVkICYjMzQ7bm9uLWZ1bmN0aW9uYWwmIzM0OyBhY2NvcmRpbmcgdG8gdGhvc2UgcnVsZXMuIEdpdmVuIHRoYXQgdGhpcyBwYXRjaCByZW1vdmVzIGEgZGVhZCBgaWZgIGJyYW5jaCBmcm9tIGB0cnlfdG9fdW5tYXBfb25lKClgLCB3aGljaCB3YXMgYWx3YXlzIGJ5cGFzc2VkIGFueXdheSBiZWNhdXNlIG9mIHRoZSBsb2dpYyBpbiBgdHJ5X3RvX3VubWFwKClgLCBpdCBzZWVtcyB0aGlzIHBhdGNoIGlzIGEgcHVyZSBjbGVhbnVwIHdpdGggbm8gY2hhbmdlIHRvIHRoZSBjb2RlJiMzOTtzIGZ1bmN0aW9uYWxpdHkgb3IgdGhlIHdheSBpdCBleGVjdXRlcy4gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdhcyBhbHdheXMgcGVyZm9ybWluZyB0aGUgc2FtZSBhY3Rpb24gZHVlIHRvIHRoZSBgZWxzZWAgYnJhbmNoLCBhbmQgdGhlIHBhdGNoIGtlZXBzIHRoYXQgYGVsc2VgIGJyYW5jaC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgdHJ5X3RvX3VubWFwX29uZWAgaXMgaW5kZWVkIHN0YXRpYywgb25seSB1c2VkIGJ5IGB0cnlfdG9fdW5tYXBgLCBhbmQgdGhlIGNvbmRpdGlvbmFsIGBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pYCB3aWxsIGFsd2F5cyBldmFsdWF0ZSB0byBmYWxzZSwgbWVhbmluZyB0aGUgcmVtb3ZlZCBjb2RlIHdhcyBlbnRpcmVseSB1bnJlYWNoYWJsZS4gVGhlIHJlcGxhY2VtZW50IGNvZGUgYHB0ZXZhbCA9IHB0ZXBfZ2V0KHB2bXcucHRlKWAgaXMgaWRlbnRpY2FsIHRvIHdoYXQgdGhlIGBlbHNlYCBicmFuY2ggKmFsd2F5cyogZXhlY3V0ZWQuIE5vIGZ1bmN0aW9uYWwgY2hhbmdlIHdoYXRzb2V2ZXIuCgpUaHVzLCBiYXNlZCBvbiB0aGUgZG9jdW1lbnRlZCBjcml0ZXJpYSBmb3IgJiMzNDtXb3J0aEZ1enppbmcsJiMzNDsgdGhlIGNvcnJlY3QgcmVzdWx0IHNob3VsZCBiZSAmIzM0O2ZhbHNlJiMzNDsgZm9yIHRoaXMgcGF0Y2guIEkmIzM5O2xsIG5vdyBwcm9jZWVkIHdpdGggYSBgc2V0LXJlc3VsdHNgIGNvbW1hbmQsIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYCwgZW1wdHkgbGlzdHMgZm9yIGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AsIGFuZCBJJiMzOTtsbCBpbmNsdWRlIGEgY29uY2lzZSBleHBsYW5hdGlvbiB0aGF0IEkmIzM5O3ZlIGNhcmVmdWxseSBqdXN0aWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhbiB1bnJlYWNoYWJsZSBodWdldGxiIGNoZWNrIGluIHRyeV90b191bm1hcF9vbmUoKS4gU2luY2UgdHJ5X3RvX3VubWFwKCkgZXhwbGljaXRseSByb3V0ZXMgaHVnZXRsYiBmb2xpb3MgdG8gdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lKCksIHRyeV90b191bm1hcF9vbmUoKSBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZvciBub24taHVnZXRsYiBmb2xpb3MuIFJlbW92aW5nIHRoaXMgZGVhZCBicmFuY2ggaXMgYSBwdXJlIGNvZGUgY2xlYW51cCB3aXRoIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhbiB1bnJlYWNoYWJsZSBodWdldGxiIGNoZWNrIGluIHRyeV90b191bm1hcF9vbmUoKS4gU2luY2UgdHJ5X3RvX3VubWFwKCkgZXhwbGljaXRseSByb3V0ZXMgaHVnZXRsYiBmb2xpb3MgdG8gdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lKCksIHRyeV90b191bm1hcF9vbmUoKSBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZvciBub24taHVnZXRsYiBmb2xpb3MuIFJlbW92aW5nIHRoaXMgZGVhZCBicmFuY2ggaXMgYSBwdXJlIGNvZGUgY2xlYW51cCB3aXRoIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjU5OjQ2LjIxNDI2MTI5N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTYzODIxNTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBhbiB1bnJlYWNoYWJsZSBodWdldGxiIGNoZWNrIGluIHRyeV90b191bm1hcF9vbmUoKS4gU2luY2UgdHJ5X3RvX3VubWFwKCkgZXhwbGljaXRseSByb3V0ZXMgaHVnZXRsYiBmb2xpb3MgdG8gdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lKCksIHRyeV90b191bm1hcF9vbmUoKSBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZvciBub24taHVnZXRsYiBmb2xpb3MuIFJlbW92aW5nIHRoaXMgZGVhZCBicmFuY2ggaXMgYSBwdXJlIGNvZGUgY2xlYW51cCB3aXRoIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6NTk6NDYuMjE0MjY5NTg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTE3NTI1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZDgwY2YzZjIyNzBmMzI2NGI1MTlmYWNkMDRhNDRmM2E1ZjdkODExXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDA4OjU5OjQ1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xcbmluZGV4IGQxODE5ZmQ2OTkzODAuLjYwNmM4ZWNmMzEzMDIgMTAwNjQ0XFxuLS0tIGEvbW0vcm1hcC5jXFxuKysrIGIvbW0vcm1hcC5jXFxuQEAgLTIyOTksMTEgKzIyOTksOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRWTV9CVUdfT05fRk9MSU8oIXB2bXcucHRlLCBmb2xpbyk7XFxuIFxcbiBcXHRcXHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xcbi1cXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xcbi1cXHRcXHRcXHRwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSk7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHB0ZXZhbCA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7XFxuK1xcbiBcXHRcXHRpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKSB7XFxuIFxcdFxcdFxcdHBmbiA9IHB0ZV9wZm4ocHRldmFsKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6NTk6NDYuNzI3MDIyMjY2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MDA1MTAzOTIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBhbiB1bnJlYWNoYWJsZSBodWdldGxiIGNoZWNrIGluIHRyeV90b191bm1hcF9vbmUoKS4gU2luY2UgdHJ5X3RvX3VubWFwKCkgZXhwbGljaXRseSByb3V0ZXMgaHVnZXRsYiBmb2xpb3MgdG8gdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lKCksIHRyeV90b191bm1hcF9vbmUoKSBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZvciBub24taHVnZXRsYiBmb2xpb3MuIFJlbW92aW5nIHRoaXMgZGVhZCBicmFuY2ggaXMgYSBwdXJlIGNvZGUgY2xlYW51cCB3aXRoIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmQ4MGNmM2YyMjcwZjMyNjRiNTE5ZmFjZDA0YTQ0ZjNhNWY3ZDgxMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA4OjU5OjQ1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCBkMTgxOWZkNjk5MzgwLi42MDZjOGVjZjMxMzAyIDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4rKysgYi9tbS9ybWFwLmNcbkBAIC0yMjk5LDExICsyMjk5LDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0Vk1fQlVHX09OX0ZPTElPKCFwdm13LnB0ZSwgZm9saW8pO1xuIFxuIFx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuLVx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuLVx0XHRcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7XG4tXHRcdH1cbitcdFx0cHRldmFsID0gcHRlcF9nZXQocHZtdy5wdGUpO1xuK1xuIFx0XHRpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKSB7XG4gXHRcdFx0cGZuID0gcHRlX3BmbihwdGV2YWwpO1xuIFx0XHR9IGVsc2Uge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6NTk6NDYuNzI3MDI1NjE2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM3NzQ5NTQ4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZGlmZiB0aGF0IHRvdWNoZXMgYG1tL3JtYXAuY2AuIFRoZSBjb21taXQgaXMgY2hhbmdpbmcgYHRyeV90b191bm1hcF9vbmVgLiBJIHNlZSB0aGUga2V5IG1vZGlmaWNhdGlvbiBpcyByZW1vdmluZyB0aGlzIGNvbmRpdGlvbmFsIGJsb2NrIGFyb3VuZCBgcHRldmFsYDogdGhlIGNvZGUgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gSHVnZVRMQiBmb2xpb3MgYW5kIHJlZ3VsYXIgb25lcyB3aGVuIGdldHRpbmcgdGhlIFBURSB2YWx1ZS4gTm93LCBpdCBqdXN0IGRpcmVjdGx5IHVzZXMgYHB0ZXBfZ2V0KHB2bXcucHRlKWAuIE5vIG1vcmUgYGh1Z2VfcHRlcF9nZXRgIGlmIGl0J3MgYSBIdWdlVExCLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG1hZGUgYW5kIHdoYXQgaW1wbGljYXRpb25zIGl0IGhhcy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHdoZXJlIEkgYW0gcmVhZGluZyB0aGUgZmlsZS4uLiBhaCwgcmlnaHQuIExldCdzIGdvIHJlYWQgYXJvdW5kIGxpbmUgMjI5OSBpbiBgbW0vcm1hcC5jYCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEl0IG1pZ2h0IGJlIG9idmlvdXMsIGJ1dCB0aGlzIG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2Qgd2l0aGluIHRoZSBsYXJnZXIgc2NvcGUgb2YgbWVtb3J5IG1hbmFnZW1lbnQuIExldCdzIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6MDA6MDAuNTAxOTgzODY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3JtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjgwOlxcdFxcdFxcdFxcdFxcdCAqIGR1ZSB0byBHVVAgb3Igc3BlY3VsYXRpdmUgcmVmZXJlbmNlcy5cXG4yMjgxOlxcdFxcdFxcdFxcdFxcdCAqL1xcbjIyODI6XFx0XFx0XFx0XFx0XFx0Z290byB3YWxrX2Fib3J0O1xcbjIyODM6XFx0XFx0XFx0XFx0fVxcbjIyODQ6XFx0XFxuMjI4NTpcXHRcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBUVFVfU1BMSVRfSFVHRV9QTUQpIHtcXG4yMjg2OlxcdFxcdFxcdFxcdFxcdC8qXFxuMjI4NzpcXHRcXHRcXHRcXHRcXHQgKiBXZSB0ZW1wb3JhcmlseSBoYXZlIHRvIGRyb3AgdGhlIFBUTCBhbmRcXG4yMjg4OlxcdFxcdFxcdFxcdFxcdCAqIHJlc3RhcnQgc28gd2UgY2FuIHByb2Nlc3MgdGhlIFBURS1tYXBwZWQgVEhQLlxcbjIyODk6XFx0XFx0XFx0XFx0XFx0ICovXFxuMjI5MDpcXHRcXHRcXHRcXHRcXHRzcGxpdF9odWdlX3BtZF9sb2NrZWQodm1hLCBwdm13LmFkZHJlc3MsXFxuMjI5MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBwdm13LnBtZCwgZmFsc2UpO1xcbjIyOTI6XFx0XFx0XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gflRUVV9TUExJVF9IVUdFX1BNRDtcXG4yMjkzOlxcdFxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoXFx1MDAyNnB2bXcpO1xcbjIyOTQ6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjI5NTpcXHRcXHRcXHRcXHR9XFxuMjI5NjpcXHRcXHRcXHR9XFxuMjI5NzpcXHRcXG4yMjk4OlxcdFxcdFxcdC8qIFVuZXhwZWN0ZWQgUE1ELW1hcHBlZCBUSFA/ICovXFxuMjI5OTpcXHRcXHRcXHRWTV9CVUdfT05fRk9MSU8oIXB2bXcucHRlLCBmb2xpbyk7XFxuMjMwMDpcXHRcXG4yMzAxOlxcdFxcdFxcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XFxuMjMwMjpcXHRcXHRcXHRwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7XFxuMjMwMzpcXHRcXG4yMzA0OlxcdFxcdFxcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcXG4yMzA1OlxcdFxcdFxcdFxcdHBmbiA9IHB0ZV9wZm4ocHRldmFsKTtcXG4yMzA2OlxcdFxcdFxcdH0gZWxzZSB7XFxuMjMwNzpcXHRcXHRcXHRcXHQvKlxcbjIzMDg6XFx0XFx0XFx0XFx0ICogSGFuZGxlIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLFxcbjIzMDk6XFx0XFx0XFx0XFx0ICogdGhhdCBhY3R1YWxseSBtYXAgcGFnZXMuXFxuMjMxMDpcXHRcXHRcXHRcXHQgKi9cXG4yMzExOlxcdFxcdFxcdFxcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGV2YWwpO1xcbjIzMTI6XFx0XFxuMjMxMzpcXHRcXHRcXHRcXHRwZm4gPSBzb2Z0bGVhZl90b19wZm4oZW50cnkpO1xcbjIzMTQ6XFx0XFx0XFx0fVxcbjIzMTU6XFx0XFxuMjMxNjpcXHRcXHRcXHRwYWdlID0gZm9saW9fcGFnZShmb2xpbywgcGZuIC0gZm9saW9fcGZuKGZvbGlvKSk7XFxuMjMxNzpcXHRcXG4yMzE4OlxcdFxcdFxcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcXG4yMzE5OlxcdFxcdFxcdFxcdG5yX3BhZ2VzID0gZm9saW9fdW5tYXBfcHRlX2JhdGNoKGZvbGlvLCBcXHUwMDI2cHZtdywgZmxhZ3MsIHB0ZXZhbCk7XFxuMjMyMDpcXHRcXHRcXHRcXHRlbmRfYWRkciA9IGFkZHJlc3MgKyBucl9wYWdlcyAqIFBBR0VfU0laRTtcXG4yMzIxOlxcdFxcdFxcdFxcdGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgYWRkcmVzcywgZW5kX2FkZHIpO1xcbjIzMjI6XFx0XFxuMjMyMzpcXHRcXHRcXHRcXHQvKiBOdWtlIHRoZSBwYWdlIHRhYmxlIGVudHJ5LiAqL1xcbjIzMjQ6XFx0XFx0XFx0XFx0cHRldmFsID0gZ2V0X2FuZF9jbGVhcl9wdGVzKG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgbnJfcGFnZXMpO1xcbjIzMjU6XFx0XFx0XFx0XFx0LypcXG4yMzI2OlxcdFxcdFxcdFxcdCAqIFdlIGNsZWFyIHRoZSBQVEUgYnV0IGRvIG5vdCBmbHVzaCBzbyBwb3RlbnRpYWxseVxcbjIzMjc6XFx0XFx0XFx0XFx0ICogYSByZW1vdGUgQ1BVIGNvdWxkIHN0aWxsIGJlIHdyaXRpbmcgdG8gdGhlIGZvbGlvLlxcbjIzMjg6XFx0XFx0XFx0XFx0ICogSWYgdGhlIGVudHJ5IHdhcyBwcmV2aW91c2x5IGNsZWFuIHRoZW4gdGhlXFxuMjMyOTpcXHRcXHRcXHRcXHQgKiBhcmNoaXRlY3R1cmUgbXVzdCBndWFyYW50ZWUgdGhhdCBhIGNsZWFyLVxcdTAwM2VkaXJ0eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTowMDowMC41MDIxMzgyMjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTk5MjA5MDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIG9mIGh1Z2UgcGFnZXMgKGh1Z2V0bGIpIHdpdGhpbiB0aGUgdW5tYXBwaW5nIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCB3aXRoaW4gYHRyeV90b191bm1hcF9vbmVgIGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZWxldmFudCBjb2RlIGluIGBtbS9ybWFwLmNgLiBJJ2xsIGZvY3VzIG9uIGxpbmVzIDIyMDAgdG8gMjM1MCBpbiB0aGF0IGZpbGUgdG8gY2FwdHVyZSB0aGUgY29yZSBvZiB0aGUgbG9naWMuIFRoaXMgYXJlYSBzaG91bGQgaWxsdW1pbmF0ZSBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBzcGVjaWZpYyBjaGFsbGVuZ2VzIG9mIHVubWFwcGluZyBodWdlIHBhZ2VzLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIChQVEVzKSBhbmQgcG90ZW50aWFsIHJlZmNvdW50IGlzc3Vlcy4gTXkgZXhwZWN0YXRpb24gaXMgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBzY2VuYXJpb3Mg4oCTIHdoZXRoZXIgdGhlIGh1Z2UgcGFnZSBpcyBzaGFyZWQsIHByaXZhdGUsIGRpcnR5LCBjbGVhbiwgZXRjLiDigJMgYW5kIGhvdyB0aGUgdW5tYXBwaW5nIHByb2Nlc3MgZW5zdXJlcyBkYXRhIGludGVncml0eSBhbmQgbWVtb3J5IGNvbnNpc3RlbmN5LiBJIGFudGljaXBhdGUgc2VlaW5nIGRldGFpbHMgYXJvdW5kIGhvdyB0aGUgTU1VIGlzIHVwZGF0ZWQgYW5kIG1lbW9yeSBpcyBmcmVlZCwgYW5kIGhvdyB0aGUgc3lzdGVtIHRha2VzIGFkdmFudGFnZSBvZiB0aGUgaHVnZSBwYWdlIGluZnJhc3RydWN0dXJlIGZvciBlZmZpY2llbnQgb3BlcmF0aW9uLiBJIGhvcGUgdG8gY29tZSBhd2F5IHdpdGggYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjcnVjaWFsIHN0ZXBzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0ga2VlcHMgY29uc2lzdGVuY3kgZHVyaW5nIGh1Z2UgcGFnZSB1bm1hcHBpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyOTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjAwOjA1LjEwMTM0OTY1OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Nzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9ybWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjIwMDpcXHQgKi9cXG4yMjAxOlxcdHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuMjIwMjpcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxcbjIyMDM6XFx0e1xcbjIyMDQ6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbjIyMDU6XFx0XFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIDApO1xcbjIyMDY6XFx0XFx0Ym9vbCByZXQgPSB0cnVlO1xcbjIyMDc6XFx0XFx0cHRlX3QgcHRldmFsO1xcbjIyMDg6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuMjIwOTpcXHRcXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xcbjIyMTA6XFx0XFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xcbjIyMTE6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEsIGVuZF9hZGRyO1xcbjIyMTI6XFx0XFx0dW5zaWduZWQgbG9uZyBwZm47XFxuMjIxMzpcXHRcXHRpbnQgcHRlcyA9IDA7XFxuMjIxNDpcXHRcXG4yMjE1OlxcdFxcdC8qXFxuMjIxNjpcXHRcXHQgKiBXaGVuIHJhY2luZyBhZ2FpbnN0IGUuZy4gemFwX3B0ZV9yYW5nZSgpIG9uIGFub3RoZXIgY3B1LFxcbjIyMTc6XFx0XFx0ICogaW4gYmV0d2VlbiBpdHMgcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwoKSBhbmQgZm9saW9fcmVtb3ZlX3JtYXBfKigpLFxcbjIyMTg6XFx0XFx0ICogdHJ5X3RvX3VubWFwKCkgbWF5IHJldHVybiBiZWZvcmUgZm9saW9fbWFwcGVkKCkgaGFzIGJlY29tZSBmYWxzZSxcXG4yMjE5OlxcdFxcdCAqIGlmIHBhZ2UgdGFibGUgbG9ja2luZyBpcyBza2lwcGVkOiB1c2UgVFRVX1NZTkMgdG8gd2FpdCBmb3IgdGhhdC5cXG4yMjIwOlxcdFxcdCAqL1xcbjIyMjE6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgVFRVX1NZTkMpXFxuMjIyMjpcXHRcXHRcXHRwdm13LmZsYWdzID0gUFZNV19TWU5DO1xcbjIyMjM6XFx0XFxuMjIyNDpcXHRcXHQvKlxcbjIyMjU6XFx0XFx0ICogRm9yIFRIUCwgd2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnNlIGNhc2UgaWUgcG1kIGZvciBpbnZhbGlkYXRpb24uXFxuMjIyNjpcXHRcXHQgKlxcbjIyMjc6XFx0XFx0ICogTm90ZSB0aGF0IHRoZSBmb2xpbyBjYW4gbm90IGJlIGZyZWVkIGluIHRoaXMgZnVuY3Rpb24gYXMgY2FsbCBvZlxcbjIyMjg6XFx0XFx0ICogdHJ5X3RvX3VubWFwKCkgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIHRoZSBmb2xpby5cXG4yMjI5OlxcdFxcdCAqL1xcbjIyMzA6XFx0XFx0cmFuZ2UuZW5kID0gdm1hX2FkZHJlc3NfZW5kKFxcdTAwMjZwdm13KTtcXG4yMjMxOlxcdFxcdG1tdV9ub3RpZmllcl9yYW5nZV9pbml0KFxcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVxcdTAwM2V2bV9tbSxcXG4yMjMyOlxcdFxcdFxcdFxcdFxcdGFkZHJlc3MsIHJhbmdlLmVuZCk7XFxuMjIzMzpcXHRcXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcXHUwMDI2cmFuZ2UpO1xcbjIyMzQ6XFx0XFxuMjIzNTpcXHRcXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKSB7XFxuMjIzNjpcXHRcXHRcXHRucl9wYWdlcyA9IDE7XFxuMjIzNzpcXHRcXG4yMjM4OlxcdFxcdFxcdC8qXFxuMjIzOTpcXHRcXHRcXHQgKiBJZiB0aGUgZm9saW8gaXMgaW4gYW4gbWxvY2soKWQgdm1hLCB3ZSBtdXN0IG5vdCBzd2FwIGl0IG91dC5cXG4yMjQwOlxcdFxcdFxcdCAqL1xcbjIyNDE6XFx0XFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBUVFVfSUdOT1JFX01MT0NLKSBcXHUwMDI2XFx1MDAyNlxcbjIyNDI6XFx0XFx0XFx0ICAgICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTE9DS0VEKSkge1xcbjIyNDM6XFx0XFx0XFx0XFx0cHRlcysrO1xcbjIyNDQ6XFx0XFxuMjI0NTpcXHRcXHRcXHRcXHQvKlxcbjIyNDY6XFx0XFx0XFx0XFx0ICogU2V0ICdyZXQnIHRvIGluZGljYXRlIHRoZSBwYWdlIGNhbm5vdCBiZSB1bm1hcHBlZC5cXG4yMjQ3OlxcdFxcdFxcdFxcdCAqXFxuMjI0ODpcXHRcXHRcXHRcXHQgKiBEbyBub3QganVtcCB0byB3YWxrX2Fib3J0IGltbWVkaWF0ZWx5IGFzIGFkZGl0aW9uYWxcXG4yMjQ5OlxcdFxcdFxcdFxcdCAqIGl0ZXJhdGlvbiBtaWdodCBiZSByZXF1aXJlZCB0byBkZXRlY3QgZnVsbHkgbWFwcGVkXFxuMjI1MDpcXHRcXHRcXHRcXHQgKiBmb2xpbyBhbiBtbG9jayBpdC5cXG4yMjUxOlxcdFxcdFxcdFxcdCAqL1xcbjIyNTI6XFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxuMjI1MzpcXHRcXG4yMjU0OlxcdFxcdFxcdFxcdC8qIE9ubHkgbWxvY2sgZnVsbHkgbWFwcGVkIHBhZ2VzICovXFxuMjI1NTpcXHRcXHRcXHRcXHRpZiAocHZtdy5wdGUgXFx1MDAyNlxcdTAwMjYgcHRlcyAhPSBwdm13Lm5yX3BhZ2VzKVxcbjIyNTY6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjI1NzpcXHRcXG4yMjU4OlxcdFxcdFxcdFxcdC8qXFxuMjI1OTpcXHRcXHRcXHRcXHQgKiBBbGwgUFRFcyBtdXN0IGJlIHByb3RlY3RlZCBieSBwYWdlIHRhYmxlIGxvY2sgaW5cXG4yMjYwOlxcdFxcdFxcdFxcdCAqIG9yZGVyIHRvIG1sb2NrIHRoZSBwYWdlLlxcbjIyNjE6XFx0XFx0XFx0XFx0ICpcXG4yMjYyOlxcdFxcdFxcdFxcdCAqIElmIHBhZ2UgdGFibGUgYm91bmRhcnkgaGFzIGJlZW4gY3Jvc3MsIGN1cnJlbnQgcHRsXFxuMjI2MzpcXHRcXHRcXHRcXHQgKiBvbmx5IHByb3RlY3QgcGFydCBvZiBwdGVzLlxcbjIyNjQ6XFx0XFx0XFx0XFx0ICovXFxuMjI2NTpcXHRcXHRcXHRcXHRpZiAocHZtdy5mbGFncyBcXHUwMDI2IFBWTVdfUEdUQUJMRV9DUk9TU0VEKVxcbjIyNjY6XFx0XFx0XFx0XFx0XFx0Z290byB3YWxrX2RvbmU7XFxuMjI2NzpcXHRcXG4yMjY4OlxcdFxcdFxcdFxcdC8qIFJlc3RvcmUgdGhlIG1sb2NrIHdoaWNoIGdvdCBtaXNzZWQgKi9cXG4yMjY5OlxcdFxcdFxcdFxcdG1sb2NrX3ZtYV9mb2xpbyhmb2xpbywgdm1hKTtcXG4yMjcwOlxcdFxcdFxcdFxcdGdvdG8gd2Fsa19kb25lO1xcbjIyNzE6XFx0XFx0XFx0fVxcbjIyNzI6XFx0XFxuMjI3MzpcXHRcXHRcXHRpZiAoIXB2bXcucHRlKSB7XFxuMjI3NDpcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9sYXp5ZnJlZShmb2xpbykpIHtcXG4yMjc1OlxcdFxcdFxcdFxcdFxcdGlmICh1bm1hcF9odWdlX3BtZF9sb2NrZWQodm1hLCBwdm13LmFkZHJlc3MsIHB2bXcucG1kLCBmb2xpbykpXFxuMjI3NjpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIHdhbGtfZG9uZTtcXG4yMjc3OlxcdFxcdFxcdFxcdFxcdC8qXFxuMjI3ODpcXHRcXHRcXHRcXHRcXHQgKiB1bm1hcF9odWdlX3BtZF9sb2NrZWQgaGFzIGVpdGhlciBhbHJlYWR5IG1hcmtlZFxcbjIyNzk6XFx0XFx0XFx0XFx0XFx0ICogdGhlIGZvbGlvIGFzIHN3YXAtYmFja2VkIG9yIGRlY2lkZWQgdG8gcmV0YWluIGl0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjAwOjA1LjEwMTUwOTcxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNTk4Nzc5MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aCBodWdldGxiIHdpdGhpbiB0aGUgYHRyeV90b191bm1hcF9vbmVgIGFuZCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGZ1bmN0aW9ucy4gQ2xlYXJseSwgdGhlcmUncyBhIHByb2JsZW0sIG9yIGF0IGxlYXN0IGEgbmVlZCB0byBpbnZlc3RpZ2F0ZSwgcmVsYXRlZCB0byBIdWdlVExCIHBhZ2VzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhvc2UgZnVuY3Rpb25zIGluIGBtbS9ybWFwLmNgLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0IHdpdGggSHVnZVRMQiBwYWdlcyDigJMgaXMgdGhlcmUgYSBzcGVjaWZpYyBjb25kaXRpb25hbCBjaGVjaywgYSBkaWZmZXJlbnQgY29kZSBwYXRoLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSB0aGF0J3MgY2F1c2luZyB0aGlzIGJlaGF2aW9yP1xuXG5JJ2xsIGFsc28ga2VlcCBhbiBleWUgb24gcmVjZW50IGNvbW1pdHMuIFBlcmhhcHMgYSByZWNlbnQgcGF0Y2ggaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24gb3IgYW4gdW5leHBlY3RlZCBpbnRlcmFjdGlvbiB3aXRoIEh1Z2VUTEIgZnVuY3Rpb25hbGl0eS4gVGhhdCBjb3VsZCBnaXZlIHNvbWUgY29udGV4dCBpbnRvIHRoZSByZWNlbnQgY2hhbmdlcyBpbiB0aGUgYG1tL3JtYXAuY2AgZmlsZS4gU28sIEkgbmVlZCB0byBjaGVjayBmb3IgY2hhbmdlcyBuZWFyIGBtbS9ybWFwLmNgIHJlbGF0ZWQgdG8gaHVnZXRsYi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg3NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6MDA6MDguMTYxMzkxMTU1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTYxNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3Rlc3RfaHVnZXRsYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9ybWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcm1hcC5jPTE2NDg9dm9pZCBmb2xpb19hZGRfbmV3X2Fub25fcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0xNjUzLVxcbm1tL3JtYXAuYzoxNjU0OlxcdFZNX1dBUk5fT05fRk9MSU8oZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSwgZm9saW8pO1xcbm1tL3JtYXAuYy0xNjU1LVxcdFZNX1dBUk5fT05fRk9MSU8oIWV4Y2x1c2l2ZSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuLS1cXG5tbS9ybWFwLmM9MjQ0MD12b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG4tLVxcbm1tL3JtYXAuYy0yNDQyLVxcdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XFxubW0vcm1hcC5jOjI0NDM6XFx0XFx0LnJtYXBfb25lID0gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSA/XFxubW0vcm1hcC5jLTI0NDQtXFx0XFx0XFx0XFx0dHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lIDogdHJ5X3RvX3VubWFwX29uZSxcXG4tLVxcbm1tL3JtYXAuYz0yNDYyPXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yNDk0LVxcdFxcdFxcdFxcdGFkZHJlc3MsIHJhbmdlLmVuZCk7XFxubW0vcm1hcC5jOjI0OTU6XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG5tbS9ybWFwLmMtMjQ5Ni1cXHRcXHQvKlxcbi0tXFxubW0vcm1hcC5jLTI1MzUtXFxubW0vcm1hcC5jOjI1MzY6XFx0XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgfHxcXG5tbS9ybWFwLmMtMjUzNy1cXHRcXHRcXHRcXHRcXHQhZm9saW9fdGVzdF9wbWRfbWFwcGFibGUoZm9saW8pLCBmb2xpbyk7XFxuLS1cXG5tbS9ybWFwLmMtMjU1MS1cXHRcXHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xcbm1tL3JtYXAuYzoyNTUyOlxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxcbm1tL3JtYXAuYy0yNTUzLVxcdFxcdFxcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcXG4tLVxcbm1tL3JtYXAuYy0yNTY1LVxcdFxcdFxcdHBmbiA9IHNvZnRsZWFmX3RvX3BmbihlbnRyeSk7XFxubW0vcm1hcC5jOjI1NjY6XFx0XFx0XFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XFxubW0vcm1hcC5jLTI1NjctXFx0XFx0fVxcbi0tXFxubW0vcm1hcC5jLTI1NzItXFxubW0vcm1hcC5jOjI1NzM6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG5tbS9ybWFwLmMtMjU3NC1cXHRcXHRcXHRib29sIGFub24gPSBmb2xpb190ZXN0X2Fub24oZm9saW8pO1xcbi0tXFxubW0vcm1hcC5jLTI2NjMtXFx0XFx0XFx0cHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KHN1YnBhZ2UpKTtcXG5tbS9ybWFwLmM6MjY2NDpcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xcbm1tL3JtYXAuYy0yNjY1LVxcdFxcdFxcdFxcdGh1Z2V0bGJfY291bnRfc3ViKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgbW0pO1xcbi0tXFxubW0vcm1hcC5jLTI2OTQtXFx0XFx0XFx0aWYgKGFyY2hfdW5tYXBfb25lKG1tLCB2bWEsIGFkZHJlc3MsIHB0ZXZhbCkgXFx1MDAzYyAwKSB7XFxubW0vcm1hcC5jOjI2OTU6XFx0XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXFxubW0vcm1hcC5jLTI2OTYtXFx0XFx0XFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSxcXG4tLVxcbm1tL3JtYXAuYy0yNzA1LVxcdFxcdFxcdC8qIFNlZSBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3B0ZSgpOiBjbGVhciBQVEUgZmlyc3QuICovXFxubW0vcm1hcC5jOjI3MDY6XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG5tbS9ybWFwLmMtMjcwNy1cXHRcXHRcXHRcXHRpZiAoYW5vbl9leGNsdXNpdmUgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL3JtYXAuYy0yNzUzLVxcdFxcdFxcdH1cXG5tbS9ybWFwLmM6Mjc1NDpcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG5tbS9ybWFwLmMtMjc1NS1cXHRcXHRcXHRcXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlLFxcbi0tXFxubW0vcm1hcC5jLTI3NjYtXFxubW0vcm1hcC5jOjI3Njc6XFx0XFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpKVxcbm1tL3JtYXAuYy0yNzY4LVxcdFxcdFxcdGh1Z2V0bGJfcmVtb3ZlX3JtYXAoZm9saW8pO1xcbi0tXFxubW0vcm1hcC5jPTI4NjY9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vcm1hcC5jLTI4OTctXFxubW0vcm1hcC5jOjI4OTg6XFx0aWYgKCFmb2xpb190ZXN0X2Fub24oZm9saW8pIHx8IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG5tbS9ybWFwLmMtMjg5OS1cXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi0tXFxubW0vcm1hcC5jPTMxNzc9dm9pZCBodWdldGxiX2FkZF9hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMzE3OS17XFxubW0vcm1hcC5jOjMxODA6XFx0Vk1fV0FSTl9PTl9GT0xJTyghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSwgZm9saW8pO1xcbm1tL3JtYXAuYy0zMTgxLVxcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfYW5vbihmb2xpbyksIGZvbGlvKTtcXG4tLVxcbm1tL3JtYXAuYz0zMTkxPXZvaWQgaHVnZXRsYl9hZGRfbmV3X2Fub25fcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTMxOTMte1xcbm1tL3JtYXAuYzozMTk0OlxcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcXG5tbS9ybWFwLmMtMzE5NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6MDA6MDguMjIxOTU5MDQyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxOTc5NjYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB0cnlfdG9fdW5tYXBgIEZ1bmN0aW9uIGFuZCBJdHMgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHRyeV90b191bm1hcGAgZnVuY3Rpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gaG93IGl0IGhhbmRsZXMgdW5tYXBwaW5nLCBhbmQgcGFydGljdWxhcmx5IHRoZSBicmFuY2hpbmcgbG9naWMgd2l0aGluIGl0LiBUaGUgY29kZSBzbmlwcGV0IGNsZWFybHkgc2hvd3MgdGhlIGNvbmRpdGlvbmFsIGNhbGwgdG8gZWl0aGVyIGB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmVgIG9yIGB0cnlfdG9fdW5tYXBfb25lYCBiYXNlZCBvbiB3aGV0aGVyIHRoZSBmb2xpbyBpcyBhIGh1Z2V0bGIuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMuIEknbGwgbmVlZCB0byBleHBsb3JlIGB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmVgIGluIGRldGFpbCwgc3BlY2lmaWNhbGx5IGl0cyBiZWhhdmlvdXIuIEFuZCBvZiBjb3Vyc2UsIEkgaGF2ZSB0byBzZWUgd2hvIGVsc2UgbWlnaHQgY2FsbCBgdHJ5X3RvX3VubWFwX29uZWAuIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2U7IEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBjYWxsIGdyYXBoIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBpbiB0aGlzIGFyZWEuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgYHRyeV90b191bm1hcF9vbmVgIGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBmdW5jdGlvbiBpdHNlbGYgb24gbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NDYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6MDA6MTAuNTQxNzU4NjA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDU0OTU5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fdW5tYXBfb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9maWxlbWFwLmMtMTE0LSAqICAtXFx1MDAzZXBhZ2VfdGFibGVfbG9jayBvciBwdGVfbG9ja1xcbm1tL2ZpbGVtYXAuYzoxMTU6ICogICAgLVxcdTAwM2Vzd2FwX2xvY2tcXHRcXHQodHJ5X3RvX3VubWFwX29uZSlcXG5tbS9maWxlbWFwLmM6MTE2OiAqICAgIC1cXHUwMDNlcHJpdmF0ZV9sb2NrXFx0XFx0KHRyeV90b191bm1hcF9vbmUpXFxubW0vZmlsZW1hcC5jOjExNzogKiAgICAtXFx1MDAzZWlfcGFnZXMgbG9ja1xcdFxcdCh0cnlfdG9fdW5tYXBfb25lKVxcbm1tL2ZpbGVtYXAuYy0xMTgtICogICAgLVxcdTAwM2VscnV2ZWMtXFx1MDAzZWxydV9sb2NrXFx0KGZvbGxvd19wYWdlX21hc2stXFx1MDAzZW1hcmtfcGFnZV9hY2Nlc3NlZClcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjM4Nj1pbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU3MS1cXHQgKiBleGFtcGxlIGlzIGFuIG1sb2NrZWQgcGFnZSwgd2hlcmUgUEdfbWxvY2tlZCBpcyBjbGVhcmVkIGJ5XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTcyOlxcdCAqIGZvbGlvX3JlbW92ZV9ybWFwXyooKSBpbiB0cnlfdG9fdW5tYXBfb25lKCkuIFNvIHRvIGRldGVybWluZSBwYWdlXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTczLVxcdCAqIHN0YXR1cyBjb3JyZWN0bHksIHdlIHNhdmUgYSBjb3B5IG9mIHRoZSBwYWdlIGZsYWdzIGF0IHRoaXMgdGltZS5cXG4tLVxcbm1tL21sb2NrLmM9NDY3PXN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21sb2NrLmMtNTAyLVxcdCAqIHZtX2ZsYWdzIGlzIHByb3RlY3RlZCBieSB0aGUgbW1hcF9sb2NrIGhlbGQgaW4gd3JpdGUgbW9kZS5cXG5tbS9tbG9jay5jOjUwMzpcXHQgKiBJdCdzIG9rYXkgaWYgdHJ5X3RvX3VubWFwX29uZSB1bm1hcHMgYSBwYWdlIGp1c3QgYWZ0ZXIgd2VcXG5tbS9tbG9jay5jLTUwNC1cXHQgKiBzZXQgVk1BX0xPQ0tFRF9CSVQsIHBvcHVsYXRlX3ZtYV9wYWdlX3JhbmdlIHdpbGwgYnJpbmcgaXQgYmFjay5cXG4tLVxcbm1tL3JtYXAuYz0yMTc4PXN0YXRpYyBib29sIHR0dV9hbm9uX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTIyMDAtICovXFxubW0vcm1hcC5jOjIyMDE6c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9ybWFwLmMtMjIwMi1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxcbi0tXFxubW0vcm1hcC5jPTI0NDA9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXFxuLS1cXG5tbS9ybWFwLmMtMjQ0My1cXHRcXHQucm1hcF9vbmUgPSBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pID9cXG5tbS9ybWFwLmM6MjQ0NDpcXHRcXHRcXHRcXHR0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUgOiB0cnlfdG9fdW5tYXBfb25lLFxcbm1tL3JtYXAuYy0yNDQ1LVxcdFxcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTowMDoxMC41OTYzMTM0NTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODEyMTk4MTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFVubWFwcGluZyBTdHJhdGVnaWVzKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgdW5tYXBwaW5nIHJvdXRpbmVzIGhlcmUuIEl0IHNlZW1zIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIG5vbi1odWdldGxiIGZvbGlvcywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgcmVjYWxsIHRoYXQgYHRyeV90b191bm1hcCgpYCBoYXMgYSBjaGVjayBmb3IgYGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbylgOyBpdCdzIHRoZSBnYXRld2F5LCBzbyB0byBzcGVhay4gSWYgaXQgKmlzKiBhIGh1Z2UgcGFnZSBmb2xpbywgdGhlIGNvZGUgYnJhbmNoZXMgdG8gYHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZWAgaW5zdGVhZC5cblxuQWhhISBUaGF0IGtleSBwb2ludCBoZWxwcyB0byBzZXBhcmF0ZSBjb25jZXJucy4gU28gYHRyeV90b191bm1hcF9vbmVgIGhhbmRsZXMgdGhlIFwibm9ybWFsXCIgdW5tYXBwaW5nIGNhc2VzLCB3aGlsZSBgdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lYCBkZWFscyB3aXRoIHRoZSBzcGVjaWFsIGNhc2VzIG9mIGh1Z2UgcGFnZXMuIEl0IGxvb2tzIGxpa2UgaXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoYXQgYHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZWAgcGF0aCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgYW5kIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aG9zZSBvdmVyc2l6ZWQgcGFnZXMuIEkgd29uZGVyIHdoYXQgdGhlIHBvaXNvbiBjaGVjayB0aGVyZSBpcyBmb3I/IFRoYXQncyB3aGF0IEkgd2FudCB0byBsZWFybiBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjAzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6MDA6MTguNzE4Mjk4NjE1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg3OTM3NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ybWFwLmM9MTk1MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy0xOTgzLVxcbm1tL3JtYXAuYzoxOTg0OnN0YXRpYyBib29sIHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3JtYXAuYy0xOTg1LVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcXG4tLVxcbm1tL3JtYXAuYz0yNDQwPXZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxcbi0tXFxubW0vcm1hcC5jLTI0NDMtXFx0XFx0LnJtYXBfb25lID0gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSA/XFxubW0vcm1hcC5jOjI0NDQ6XFx0XFx0XFx0XFx0dHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lIDogdHJ5X3RvX3VubWFwX29uZSxcXG5tbS9ybWFwLmMtMjQ0NS1cXHRcXHQuYXJnID0gKHZvaWQgKilmbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6MDA6MTguODc3MDk4OTE5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NTAwODE3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmVgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIGBtbS9ybWFwLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgYSBwb2lzb25lZCBodWdldGxiIHBhZ2UgZHVyaW5nIHVubWFwcGluZy4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIHJtYXAgYW5kIHRoZSBodWdldGxiIG1lY2hhbmlzbXMgd2hlbiBkZWFsaW5nIHdpdGggdGhpcyBlcnJvciBjb25kaXRpb24uIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBsb2dpYyB0aGF0IGlzb2xhdGVzIHRoZSBwb2lzb25lZCBwYWdlLCBwb3RlbnRpYWxseSBtYXJrcyB0aGUgUFRFIG9yIFBNRSBhcyBpbnZhbGlkLCBhbmQgcGVyaGFwcyBpbml0aWF0ZXMgYSBmYXVsdCBvciBzb21lIG90aGVyIGNvcnJlY3RpdmUgYWN0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zLCBzcGVjaWZpY2FsbHkgaWYgYW55IGxvY2tzIGFyZSBoZWxkLCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHVubWFwIHByb2Nlc3MuIEFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcGFnZSBjYWNoZSwgaWYgcHJlc2VudCwgYXJlIGFsc28gc29tZXRoaW5nIHRvIG5vdGUuIEkgd2FudCB0byBzZWUgdGhlIGVycm9yIGhhbmRsaW5nOyBpcyB0aGVyZSBhIHJldHVybiB2YWx1ZSB0aGF0IHNpZ25hbHMgc3VjY2VzcyBvciBmYWlsdXJlLCBhbmQgd2hhdCBhcmUgdGhlIHBvc3NpYmxlIGZhaWx1cmUgcGF0aHM/IEhvcGVmdWxseSwgaXQgaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTowMDoyMy43MjcxODM2MzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3JtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTgwOlxcdFxcdHJldHVybiBmb2xpb19wdGVfYmF0Y2hfZmxhZ3MoZm9saW8sIHZtYSwgcHZtdy1cXHUwMDNlcHRlLCBcXHUwMDI2cHRlLCBtYXhfbnIsXFxuMTk4MTpcXHRcXHRcXHRcXHRcXHQgICAgIEZQQl9SRVNQRUNUX1dSSVRFIHwgRlBCX1JFU1BFQ1RfU09GVF9ESVJUWSk7XFxuMTk4MjpcXHR9XFxuMTk4MzpcXHRcXG4xOTg0OlxcdHN0YXRpYyBib29sIHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbjE5ODU6XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxcbjE5ODY6XFx0e1xcbjE5ODc6XFx0XFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIDApO1xcbjE5ODg6XFx0XFx0Y29uc3QgdW5zaWduZWQgbG9uZyBoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xcbjE5ODk6XFx0XFx0Y29uc3QgZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xcbjE5OTA6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbjE5OTE6XFx0XFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcXG4xOTkyOlxcdFxcdGJvb2wgcmV0ID0gdHJ1ZTtcXG4xOTkzOlxcdFxcdHB0ZV90IHB0ZXZhbDtcXG4xOTk0OlxcdFxcbjE5OTU6XFx0XFx0LypcXG4xOTk2OlxcdFxcdCAqIFRoZSB0cnlfdG9fdW5tYXAoKSBpcyBvbmx5IHBhc3NlZCBhIGh1Z2V0bGIgZm9saW8gaW4gdGhlIGNhc2VcXG4xOTk3OlxcdFxcdCAqIHdoZXJlIHRoZSBodWdldGxiIGZvbGlvIGlzIHBvaXNvbmVkLlxcbjE5OTg6XFx0XFx0ICovXFxuMTk5OTpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pLCBmb2xpbyk7XFxuMjAwMDpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIShmbGFncyBcXHUwMDI2IFRUVV9IV1BPSVNPTikpO1xcbjIwMDE6XFx0XFxuMjAwMjpcXHRcXHRyYW5nZS5lbmQgPSB2bWFfYWRkcmVzc19lbmQoXFx1MDAyNnB2bXcpO1xcbjIwMDM6XFx0XFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXFx1MDAzZXZtX21tLFxcbjIwMDQ6XFx0XFx0XFx0XFx0XFx0YWRkcmVzcywgcmFuZ2UuZW5kKTtcXG4yMDA1OlxcdFxcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFxcdTAwMjZyYW5nZS5zdGFydCwgXFx1MDAyNnJhbmdlLmVuZCk7XFxuMjAwNjpcXHRcXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcXHUwMDI2cmFuZ2UpO1xcbjIwMDc6XFx0XFxuMjAwODpcXHRcXHQvKiBUaGVyZSBpcyBvbmx5IGEgc2luZ2xlIG1hcHBpbmcgaW4gYSBWTUEuICovXFxuMjAwOTpcXHRcXHRpZiAoIXBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSlcXG4yMDEwOlxcdFxcdFxcdGdvdG8gcmFuZ2VfZW5kO1xcbjIwMTE6XFx0XFxuMjAxMjpcXHRcXHRWTV9XQVJOX09OX09OQ0UoYWRkcmVzcyAhPSBwdm13LmFkZHJlc3MpO1xcbjIwMTM6XFx0XFxuMjAxNDpcXHRcXHRwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSk7XFxuMjAxNTpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXB0ZV9wcmVzZW50KHB0ZXZhbCkpO1xcbjIwMTY6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHB0ZV9wZm4ocHRldmFsKSAhPSBmb2xpb19wZm4oZm9saW8pKTtcXG4yMDE3OlxcdFxcbjIwMTg6XFx0XFx0LypcXG4yMDE5OlxcdFxcdCAqIGh1Z2VfcG1kX3Vuc2hhcmUgbWF5IHVubWFwIGFuIGVudGlyZSBQTUQgcGFnZS4gVGhlcmUgaXMgbm8gd2F5IG9mXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjAwOjIzLjcyNzM0Mzk4MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDUxODQ1NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgSHVnZXRsYiBJbnRlcmFjdGlvbiBpbiBgdHJ5X3RvX3VubWFwX29uZWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHJlY2VudCBjaGFuZ2UgaW4gYHRyeV90b191bm1hcF9vbmVgIGFuZCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgcmVtb3ZlZCBhIGNvbmRpdGlvbmFsIGNoZWNrIGZvciBgZm9saW9fdGVzdF9odWdldGxiYC4gUHJldmlvdXNseSwgdGhlIGNvZGUgZGV0ZXJtaW5lZCBpZiBpdCB3YXMgYSBIdWdlVExCIGZvbGlvIGFuZCB1c2VkIGBodWdlX3B0ZXBfZ2V0YCBhY2NvcmRpbmdseS4gTm93LCBpdCdzIGp1c3QgYSBkaXJlY3QgYHB0ZXBfZ2V0YC4gSSBnZXQgdGhlIGZlZWxpbmcgc29tZXRoaW5nIGhhcyBiZWVuIGNoYW5nZWQuXG5cbk15IGZpcnN0IHRob3VnaHQ6IGlzIGB0cnlfdG9fdW5tYXBfb25lYCBldmVuICpjYWxsZWQqIHdpdGggSHVnZVRMQiBmb2xpb3MgYW55bW9yZT8gSXQgc2VlbXMgbGlrZSB0aGlzIHJlbW92YWwgbWlnaHQgbm90IGhhdmUgaGFkIHRoYXQgYmlnIGFuIGVmZmVjdC4gSXQncyBhIGtleSBxdWVzdGlvbi5cblxuVG8gZmlndXJlIHRoaXMgb3V0LCBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgc291cmNlLiBJIG5lZWQgdG8gYmUgc3VyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2l0aGluIGBtbS9ybWFwLmNgLCBmb2N1c2luZyBvbiB0aGUgYXJlYSBhcm91bmQgdGhlIGB0cnlfdG9fdW5tYXBfb25lYCBkZWZpbml0aW9uLCByb3VnaGx5IGxpbmVzIDIyMDAgdG8gMjQ0MCBvciBzby4gSSdsbCBzZWFyY2ggZm9yIGFueSByZWZlcmVuY2VzIHRvIGBmb2xpb190ZXN0X2h1Z2V0bGJgLiBJZiB0aGVyZSBhcmUgbm8gY2FsbHMgdG8gdGhhdCBmdW5jdGlvbiB3aXRoaW4gdGhhdCBjb2RlIGJsb2NrLCB0aGVuIGl0J3MgaGlnaGx5IHVubGlrZWx5IHRoYXQgYHRyeV90b191bm1hcF9vbmVgIGV2ZXIgcHJvY2Vzc2VzIGEgSHVnZVRMQiBmb2xpbywgYW5kIHRoZSBjaGFuZ2UgaXMgcHJvYmFibHkgZmluZS4gSWYgSSAqZG8qIGZpbmQgaXQsIHdlbGwsIHRoZW4gSSBoYXZlIHNvbWV0aGluZyB0byBsb29rIGF0LiBOb3csIHdoZXJlIGlzIHRoZSBncmVwP1xuXG5cbiIsIklucHV0VG9rZW5zIjo5MzE1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6MDA6MjYuNzc5MTkzMDI4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9ybWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMyMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjMyMDpcXHRcXHRcXHRcXHRlbmRfYWRkciA9IGFkZHJlc3MgKyBucl9wYWdlcyAqIFBBR0VfU0laRTtcXG4yMzIxOlxcdFxcdFxcdFxcdGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgYWRkcmVzcywgZW5kX2FkZHIpO1xcbjIzMjI6XFx0XFxuMjMyMzpcXHRcXHRcXHRcXHQvKiBOdWtlIHRoZSBwYWdlIHRhYmxlIGVudHJ5LiAqL1xcbjIzMjQ6XFx0XFx0XFx0XFx0cHRldmFsID0gZ2V0X2FuZF9jbGVhcl9wdGVzKG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgbnJfcGFnZXMpO1xcbjIzMjU6XFx0XFx0XFx0XFx0LypcXG4yMzI2OlxcdFxcdFxcdFxcdCAqIFdlIGNsZWFyIHRoZSBQVEUgYnV0IGRvIG5vdCBmbHVzaCBzbyBwb3RlbnRpYWxseVxcbjIzMjc6XFx0XFx0XFx0XFx0ICogYSByZW1vdGUgQ1BVIGNvdWxkIHN0aWxsIGJlIHdyaXRpbmcgdG8gdGhlIGZvbGlvLlxcbjIzMjg6XFx0XFx0XFx0XFx0ICogSWYgdGhlIGVudHJ5IHdhcyBwcmV2aW91c2x5IGNsZWFuIHRoZW4gdGhlXFxuMjMyOTpcXHRcXHRcXHRcXHQgKiBhcmNoaXRlY3R1cmUgbXVzdCBndWFyYW50ZWUgdGhhdCBhIGNsZWFyLVxcdTAwM2VkaXJ0eVxcbjIzMzA6XFx0XFx0XFx0XFx0ICogdHJhbnNpdGlvbiBvbiBhIGNhY2hlZCBUTEIgZW50cnkgaXMgd3JpdHRlbiB0aHJvdWdoXFxuMjMzMTpcXHRcXHRcXHRcXHQgKiBhbmQgdHJhcHMgaWYgdGhlIFBURSBpcyB1bm1hcHBlZC5cXG4yMzMyOlxcdFxcdFxcdFxcdCAqL1xcbjIzMzM6XFx0XFx0XFx0XFx0aWYgKHNob3VsZF9kZWZlcl9mbHVzaChtbSwgZmxhZ3MpKVxcbjIzMzQ6XFx0XFx0XFx0XFx0XFx0c2V0X3RsYl91YmNfZmx1c2hfcGVuZGluZyhtbSwgcHRldmFsLCBhZGRyZXNzLCBlbmRfYWRkcik7XFxuMjMzNTpcXHRcXHRcXHRcXHRlbHNlXFxuMjMzNjpcXHRcXHRcXHRcXHRcXHRmbHVzaF90bGJfcmFuZ2Uodm1hLCBhZGRyZXNzLCBlbmRfYWRkcik7XFxuMjMzNzpcXHRcXHRcXHRcXHRpZiAocHRlX2RpcnR5KHB0ZXZhbCkpXFxuMjMzODpcXHRcXHRcXHRcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4yMzM5OlxcdFxcdFxcdH0gZWxzZSB7XFxuMjM0MDpcXHRcXHRcXHRcXHRwdGVfY2xlYXIobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcXG4yMzQxOlxcdFxcdFxcdH1cXG4yMzQyOlxcdFxcbjIzNDM6XFx0XFx0XFx0LypcXG4yMzQ0OlxcdFxcdFxcdCAqIE5vdyB0aGUgcHRlIGlzIGNsZWFyZWQuIElmIHRoaXMgcHRlIHdhcyB1ZmZkLXdwIGFybWVkLFxcbjIzNDU6XFx0XFx0XFx0ICogd2UgbWF5IHdhbnQgdG8gcmVwbGFjZSBhIG5vbmUgcHRlIHdpdGggYSBtYXJrZXIgcHRlIGlmXFxuMjM0NjpcXHRcXHRcXHQgKiBpdCdzIGZpbGUtYmFja2VkLCBzbyB3ZSBkb24ndCBsb3NlIHRoZSB0cmFja2luZyBpbmZvLlxcbjIzNDc6XFx0XFx0XFx0ICovXFxuMjM0ODpcXHRcXHRcXHRjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCxcXG4yMzQ5OlxcdFxcdFxcdFxcdFxcdFxcdCAgbnJfcGFnZXMpO1xcbjIzNTA6XFx0XFxuMjM1MTpcXHRcXHRcXHQvKiBVcGRhdGUgaGlnaCB3YXRlcm1hcmsgYmVmb3JlIHdlIGxvd2VyIHJzcyAqL1xcbjIzNTI6XFx0XFx0XFx0dXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTtcXG4yMzUzOlxcdFxcbjIzNTQ6XFx0XFx0XFx0LyogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBvbmx5IHJlZnMgb3JkZXItMCBmb2xpb3MgKi9cXG4yMzU1OlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBUVFVfSFdQT0lTT04pKSB7XFxuMjM1NjpcXHRcXHRcXHRcXHRwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkocGFnZSkpO1xcbjIzNTc6XFx0XFx0XFx0XFx0ZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTtcXG4yMzU4OlxcdFxcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xcbjIzNTk6XFx0XFx0XFx0fSBlbHNlIGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkgXFx1MDAyNlxcdTAwMjYgcHRlX3VudXNlZChwdGV2YWwpIFxcdTAwMjZcXHUwMDI2XFxuMjM2MDpcXHRcXHRcXHRcXHQgICAhdXNlcmZhdWx0ZmRfYXJtZWQodm1hKSkge1xcbjIzNjE6XFx0XFx0XFx0XFx0LypcXG4yMzYyOlxcdFxcdFxcdFxcdCAqIFRoZSBndWVzdCBpbmRpY2F0ZWQgdGhhdCB0aGUgcGFnZSBjb250ZW50IGlzIG9mIG5vXFxuMjM2MzpcXHRcXHRcXHRcXHQgKiBpbnRlcmVzdCBhbnltb3JlLiBTaW1wbHkgZGlzY2FyZCB0aGUgcHRlLCB2bXNjYW5cXG4yMzY0OlxcdFxcdFxcdFxcdCAqIHdpbGwgdGFrZSBjYXJlIG9mIHRoZSByZXN0LlxcbjIzNjU6XFx0XFx0XFx0XFx0ICogQSBmdXR1cmUgcmVmZXJlbmNlIHdpbGwgdGhlbiBmYXVsdCBpbiBhIG5ldyB6ZXJvXFxuMjM2NjpcXHRcXHRcXHRcXHQgKiBwYWdlLiBXaGVuIHVzZXJmYXVsdGZkIGlzIGFjdGl2ZSwgd2UgbXVzdCBub3QgZHJvcFxcbjIzNjc6XFx0XFx0XFx0XFx0ICogdGhpcyBwYWdlIHRob3VnaCwgYXMgaXRzIG1haW4gdXNlciAocG9zdGNvcHlcXG4yMzY4OlxcdFxcdFxcdFxcdCAqIG1pZ3JhdGlvbikgd2lsbCBub3QgZXhwZWN0IHVzZXJmYXVsdHMgb24gYWxyZWFkeVxcbjIzNjk6XFx0XFx0XFx0XFx0ICogY29waWVkIHBhZ2VzLlxcbjIzNzA6XFx0XFx0XFx0XFx0ICovXFxuMjM3MTpcXHRcXHRcXHRcXHRkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpO1xcbjIzNzI6XFx0XFx0XFx0fSBlbHNlIGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XFxuMjM3MzpcXHRcXHRcXHRcXHRpZiAoIXR0dV9hbm9uX2ZvbGlvKHZtYSwgZm9saW8sIHBhZ2UsIGFkZHJlc3MsXFxuMjM3NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgcHZtdy5wdGUsIHB0ZXZhbCwgbnJfcGFnZXMpKSB7XFxuMjM3NTpcXHRcXHRcXHRcXHRcXHRzZXRfcHRlcyhtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCwgbnJfcGFnZXMpO1xcbjIzNzY6XFx0XFx0XFx0XFx0XFx0Z290byB3YWxrX2Fib3J0O1xcbjIzNzc6XFx0XFx0XFx0XFx0fVxcbjIzNzg6XFx0XFxuMjM3OTpcXHRcXHRcXHRcXHRnb3RvIGZpbmlzaF91bm1hcDtcXG4yMzgwOlxcdFxcdFxcdH0gZWxzZSB7XFxuMjM4MTpcXHRcXHRcXHRcXHQvKlxcbjIzODI6XFx0XFx0XFx0XFx0ICogVGhpcyBpcyBhIGxvY2tlZCBmaWxlLWJhY2tlZCBmb2xpbyxcXG4yMzgzOlxcdFxcdFxcdFxcdCAqIHNvIGl0IGNhbm5vdCBiZSByZW1vdmVkIGZyb20gdGhlIHBhZ2VcXG4yMzg0OlxcdFxcdFxcdFxcdCAqIGNhY2hlIGFuZCByZXBsYWNlZCBieSBhIG5ldyBmb2xpbyBiZWZvcmVcXG4yMzg1OlxcdFxcdFxcdFxcdCAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCwgc28gbm9cXG4yMzg2OlxcdFxcdFxcdFxcdCAqIGNvbmN1cnJlbnQgdGhyZWFkIG1pZ2h0IHVwZGF0ZSBpdHMgcGFnZSB0YWJsZVxcbjIzODc6XFx0XFx0XFx0XFx0ICogdG8gcG9pbnQgYXQgYSBuZXcgZm9saW8gd2hpbGUgYSBkZXZpY2UgaXNcXG4yMzg4OlxcdFxcdFxcdFxcdCAqIHN0aWxsIHVzaW5nIHRoaXMgZm9saW8uXFxuMjM4OTpcXHRcXHRcXHRcXHQgKlxcbjIzOTA6XFx0XFx0XFx0XFx0ICogU2VlIERvY3VtZW50YXRpb24vbW0vbW11X25vdGlmaWVyLnJzdFxcbjIzOTE6XFx0XFx0XFx0XFx0ICovXFxuMjM5MjpcXHRcXHRcXHRcXHRhZGRfbW1fY291bnRlcihtbSwgbW1fY291bnRlcl9maWxlKGZvbGlvKSwgLW5yX3BhZ2VzKTtcXG4yMzkzOlxcdFxcdFxcdH1cXG4yMzk0OlxcdGZpbmlzaF91bm1hcDpcXG4yMzk1OlxcdFxcdFxcdGZvbGlvX3JlbW92ZV9ybWFwX3B0ZXMoZm9saW8sIHBhZ2UsIG5yX3BhZ2VzLCB2bWEpO1xcbjIzOTY6XFx0XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9MT0NLRUQpXFxuMjM5NzpcXHRcXHRcXHRcXHRtbG9ja19kcmFpbl9sb2NhbCgpO1xcbjIzOTg6XFx0XFx0XFx0Zm9saW9fcHV0X3JlZnMoZm9saW8sIG5yX3BhZ2VzKTtcXG4yMzk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTowMDoyNi43NzkzOTY2MzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM1NTE0OTA1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRGVhZCBDb2RlIGluIHRoZSBIdWdlVExCIFVubWFwcGluZyBQYXRoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBzb21lIHBvdGVudGlhbGx5IGRlYWQgY29kZSByZWxhdGVkIHRvIEh1Z2VUTEIgZm9saW8gdW5tYXBwaW5nLiBJIHJlbWVtYmVyIHRoYXQgdGhlIGB0cnlfdG9fdW5tYXBgIGZ1bmN0aW9uIHdhcyBzcGxpdCwgYW5kIHRoZSBoYW5kbGluZyBvZiBIdWdlVExCIGZvbGlvcyB3YXMgc3BlY2lmaWNhbGx5IGRpcmVjdGVkIHRvIGB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmVgLiBIb3dldmVyLCBJIG5vdGljZWQgYSBsZWZ0b3ZlciBjaGVjayB3aXRoaW4gYHRyeV90b191bm1hcF9vbmVgOiBhbiBgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpYCBjb25kaXRpb24uIFRoaXMgcmFpc2VkIGEgcmVkIGZsYWcuIElzIHRoaXMgZXZlbiByZWxldmFudCBhbnltb3JlP1xuXG5NeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgdGhpcyBjaGVjayBpcyBub3cgY29tcGxldGVseSByZWR1bmRhbnQgYmVjYXVzZSBgdHJ5X3RvX3VubWFwX29uZWAgc2hvdWxkbid0IGV2ZXIgYmUgY2FsbGVkIG9uIGEgSHVnZVRMQiBmb2xpbyBkaXJlY3RseSBhZnRlciB0aGUgc3BsaXQuIEJ1dCwgSSBuZWVkIHRvIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24uXG5cbkZpcnN0LCBJIHNlYXJjaGVkIHRoZSBjb2RlYmFzZSB0byBjb25maXJtIGlmIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBhY3R1YWxseSBjYWxsZWQgb24gSHVnZVRMQiBmb2xpb3MuIE15IGluaXRpYWwgZ3JlcCByZXN1bHRzIHdlcmUgZnJvbSBgbW0vZmlsZW1hcC5jYCwgYG1tL21lbW9yeS1mYWlsdXJlLmNgLCBgbW0vbWxvY2suY2AsIGFuZCBgbW0vcm1hcC5jYCAtIGFsbCByZWxhdGVkIHRvIGNvbW1lbnRzIVxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9ybWFwLmNgLCB0aGUgZm9sbG93aW5nIGlzIHJldmVhbGVkOlxuXG5gYGBjXG5tbS9ybWFwLmM6MjIwMTogc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZSguLi4pXG5tbS9ybWFwLmM6MjQ0NDogLnJtYXBfb25lID0gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSA/IHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZSA6IHRyeV90b191bm1hcF9vbmUsXG5gYGBcblxuU28gYHRyeV90b191bm1hcF9vbmVgIGlzIG5vdCByZWZlcmVuY2VkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGUsIGFuZCBpbiBgdHJ5X3RvX3VubWFwYDpcblxuYGBgY1xudm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG57XG5cdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XG5cdFx0LnJtYXBfb25lID0gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSA/XG5cdFx0XHRcdHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZSA6IHRyeV90b191bm1hcF9vbmUsXG5cdFx0LmFyZyA9ICh2b2lkICopZmxhZ3MsXG5cdH07XG5gYGBcblxuVGhpcyBjb25maXJtcyBteSBzdXNwaWNpb24uIFRoZSBgdHJ5X3RvX3VubWFwYCBmdW5jdGlvbiB1c2VzIGB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmVgIHdoZW4gdGhlIGZvbGlvICppcyogYSBIdWdlVExCLiBDb25zZXF1ZW50bHksIGB0cnlfdG9fdW5tYXBfb25lYCBpcyAqbmV2ZXIqIGNhbGxlZCB3aGVuIGBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pYCBpcyB0cnVlLiBUaGVyZWZvcmUsIHRoZSBgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpYCBjaGVjayBpbnNpZGUgYHRyeV90b191bm1hcF9vbmVgIGlzIGFsd2F5cyBnb2luZyB0byBldmFsdWF0ZSB0byBmYWxzZSEgVGhpcyBpcyBkZWFkIGNvZGUsIHJpcGUgZm9yIHJlbW92YWwuXG5cbk5vdywgb3V0IG9mIGFuIGFidW5kYW5jZSBvZiBjYXV0aW9uLCBJIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayBhIHNpbWlsYXIgcmVsYXRlZCBmdW5jdGlvbiwgc3VjaCBhcyBgdHJ5X3RvX21pZ3JhdGVfb25lYCBpbiBgdHJ5X3RvX21pZ3JhdGVgLiBMZXQncyBoYXZlIGEgcXVpY2sgbG9vay4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI0MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjAwOjMyLjEzNDU0Nzg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDMyNzA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fbWlncmF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0zMTg4PXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMzUyLVxcdFxcdCAqIEluIGNhc2Ugd2UgY2Fubm90IGNsZWFyIFBhZ2VBbm9uRXhjbHVzaXZlKCksIHNwbGl0IHRoZSBQTURcXG5tbS9odWdlX21lbW9yeS5jOjMzNTM6XFx0XFx0ICogb25seSBhbmQgbGV0IHRyeV90b19taWdyYXRlX29uZSgpIGZhaWwgbGF0ZXIuXFxubW0vaHVnZV9tZW1vcnkuYy0zMzU0LVxcdFxcdCAqXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM1Mzg9c3RhdGljIHZvaWQgdW5tYXBfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzU1My1cXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcXG5tbS9odWdlX21lbW9yeS5jOjM1NTQ6XFx0XFx0dHJ5X3RvX21pZ3JhdGUoZm9saW8sIHR0dV9mbGFncyk7XFxubW0vaHVnZV9tZW1vcnkuYy0zNTU1LVxcdGVsc2VcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzYzNj1zdGF0aWMgdm9pZCByZW1hcF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgbnIsIGludCBmbGFncylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzYzOS1cXG5tbS9odWdlX21lbW9yeS5jOjM2NDA6XFx0LyogSWYgdW5tYXBfZm9saW8oKSB1c2VzIHRyeV90b19taWdyYXRlKCkgb24gZmlsZSwgcmVtb3ZlIHRoaXMgY2hlY2sgKi9cXG5tbS9odWdlX21lbW9yeS5jLTM2NDEtXFx0aWYgKCFmb2xpb190ZXN0X2Fub24oZm9saW8pKVxcbi0tXFxubW0vbWlncmF0ZS5jPTEyMTM9c3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX3VubWFwKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTI4My1cXHQvKlxcbm1tL21pZ3JhdGUuYzoxMjg0OlxcdCAqIEJ5IHRyeV90b19taWdyYXRlKCksIHNyYy1cXHUwMDNlbWFwY291bnQgZ29lcyBkb3duIHRvIDAgaGVyZS4gSW4gdGhpcyBjYXNlLFxcbm1tL21pZ3JhdGUuYy0xMjg1LVxcdCAqIHdlIGNhbm5vdCBub3RpY2UgdGhhdCBhbm9uX3ZtYSBpcyBmcmVlZCB3aGlsZSB3ZSBtaWdyYXRlIGEgcGFnZS5cXG4tLVxcbm1tL21pZ3JhdGUuYy0xMzM3LVxcdFxcdFxcdCAgICAgICAhZm9saW9fdGVzdF9rc20oc3JjKSBcXHUwMDI2XFx1MDAyNiAhYW5vbl92bWEsIHNyYyk7XFxubW0vbWlncmF0ZS5jOjEzMzg6XFx0XFx0dHJ5X3RvX21pZ3JhdGUoc3JjLCBtb2RlID09IE1JR1JBVEVfQVNZTkMgPyBUVFVfQkFUQ0hfRkxVU0ggOiAwKTtcXG5tbS9taWdyYXRlLmMtMTMzOS1cXHRcXHRvbGRfZm9saW9fc3RhdGUgfD0gRk9MSU9fV0FTX01BUFBFRDtcXG4tLVxcbm1tL21pZ3JhdGUuYz0xNDgwPXN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZXRsYl9mb2xpbyhuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE1NDQtXFxubW0vbWlncmF0ZS5jOjE1NDU6XFx0XFx0dHJ5X3RvX21pZ3JhdGUoc3JjLCB0dHUpO1xcbm1tL21pZ3JhdGUuYy0xNTQ2LVxcdFxcdHdhc19tYXBwZWQgPSAxO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0yNDU9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNDA3LVxcdFxcdCAqIG9wdGltaXNhdGlvbiB0byBhdm9pZCB3YWxraW5nIHRoZSBybWFwIGxhdGVyIHdpdGhcXG5tbS9taWdyYXRlX2RldmljZS5jOjQwODpcXHRcXHQgKiB0cnlfdG9fbWlncmF0ZSgpLlxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNDA5LVxcdFxcdCAqL1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz01NzE9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfdW5tYXAodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTYxOS1cXHRcXHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS9taWdyYXRlX2RldmljZS5jOjYyMDpcXHRcXHRcXHR0cnlfdG9fbWlncmF0ZShmb2xpbywgMCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy02MjEtXFxuLS1cXG5tbS9ybWFwLmM9MjQ0MD12b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG4tLVxcbm1tL3JtYXAuYy0yNDYxLSAqL1xcbm1tL3JtYXAuYzoyNDYyOnN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9ybWFwLmMtMjQ2My1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxcbi0tXFxubW0vcm1hcC5jLTI0NzctXFx0ICogaW4gYmV0d2VlbiBpdHMgcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwoKSBhbmQgZm9saW9fcmVtb3ZlX3JtYXBfKigpLFxcbm1tL3JtYXAuYzoyNDc4OlxcdCAqIHRyeV90b19taWdyYXRlKCkgbWF5IHJldHVybiBiZWZvcmUgZm9saW9fbWFwcGVkKCkgaGFzIGJlY29tZSBmYWxzZSxcXG5tbS9ybWFwLmMtMjQ3OS1cXHQgKiBpZiBwYWdlIHRhYmxlIGxvY2tpbmcgaXMgc2tpcHBlZDogdXNlIFRUVV9TWU5DIHRvIHdhaXQgZm9yIHRoYXQuXFxuLS1cXG5tbS9ybWFwLmMtMjc4MS0vKipcXG5tbS9ybWFwLmM6Mjc4MjogKiB0cnlfdG9fbWlncmF0ZSAtIHRyeSB0byByZXBsYWNlIGFsbCBwYWdlIHRhYmxlIG1hcHBpbmdzIHdpdGggc3dhcCBlbnRyaWVzXFxubW0vcm1hcC5jLTI3ODMtICogQGZvbGlvOiB0aGUgZm9saW8gdG8gcmVwbGFjZSBwYWdlIHRhYmxlIGVudHJpZXMgZm9yXFxuLS1cXG5tbS9ybWFwLmMtMjc4OC0gKi9cXG5tbS9ybWFwLmM6Mjc4OTp2b2lkIHRyeV90b19taWdyYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxcbm1tL3JtYXAuYy0yNzkwLXtcXG5tbS9ybWFwLmMtMjc5MS1cXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xcbm1tL3JtYXAuYzoyNzkyOlxcdFxcdC5ybWFwX29uZSA9IHRyeV90b19taWdyYXRlX29uZSxcXG5tbS9ybWFwLmMtMjc5My1cXHRcXHQuYXJnID0gKHZvaWQgKilmbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6MDA6MzIuMTg4ODgyNDQ4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2ODU1MDYwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3VidGxlIE1lbW9yeSBNYW5hZ2VtZW50IE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBleHBlcnQgaW50dWl0aW9uIGlzIHRpbmdsaW5nLiBJdCdzIGEgc2VlbWluZ2x5IG1pbm9yIGNoYW5nZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGZvbGlvIHVubWFwcGluZy4gTGV0J3MgYnJlYWsgaXQgZG93bi5cblxuV2UgaGF2ZSB0aGVzZSB0d28ga2V5IGZ1bmN0aW9ucyBpbiBwbGF5OiBgdHJ5X3RvX21pZ3JhdGVgIGFuZCBgdHJ5X3RvX3VubWFwYC4gSW4gYHRyeV90b19taWdyYXRlYCwgdGhlIGNvZGUgcGF0aCBpcyBzdHJhaWdodGZvcndhcmQ6IGByd2Mucm1hcF9vbmUgPSB0cnlfdG9fbWlncmF0ZV9vbmU7YC4gVGhpcyBoYW5kbGVzIGJvdGggaHVnZSBwYWdlcyAoaHVnZXRsYikgYW5kIHJlZ3VsYXIgZm9saW9zLiBIb3dldmVyLCBgdHJ5X3RvX3VubWFwYCBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBIZXJlLCB0aGUgYXNzaWdubWVudCBpcyBjb25kaXRpb25hbDogYHJ3Yy5ybWFwX29uZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgPyB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUgOiB0cnlfdG9fdW5tYXBfb25lO2AuIFNvLCBkZXBlbmRpbmcgb24gaWYgaXQncyBhIGh1Z2UgcGFnZSBvciBub3QsIGEgZGlmZmVyZW50IGNhbGxiYWNrIGlzIGNob3Nlbi5cblxuTm93LCB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gdGFyZ2V0cyBhIHJlZHVuZGFudCBjaGVjayAqaW5zaWRlKiBgdHJ5X3RvX3VubWFwX29uZWAuIEl0IHdhcyBkb2luZzogYGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSBwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KC4uLikgZWxzZSBwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7YC4gVGhlIHBhdGNoIHNpbXBseSByZW1vdmVzIHRoZSBgaWZgIGFuZCB1c2VzIGBwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7YC4gV2hpY2ggbG9va3MgZmluZSBidXQuLi5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgKmFsd2F5cyogdG8gdmVyaWZ5IHRoZXJlIGlzbid0IHNvbWUgdW5mb3Jlc2VlbiBiZWhhdmlvcmFsIGNoYW5nZS4gTGV0J3MgZG8gYSBsaXR0bGUgZGVlcCBkaXZlLCBzdGFydGluZyB3aXRoIHRoZSBnaXQgbG9ncy4gSXMgdGhlcmUgYSBjb21taXQgbWVzc2FnZSBvciBoaXN0b3J5IHRoYXQgZXhwbGFpbnMgdGhpcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqLiBJZiBub3QsIEknbGwgbmVlZCB0byBkbyBzb21lIG1vcmUgYW5hbHlzaXMuXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgKndoeSogdGhhdCByZWR1bmRhbnQgY2hlY2sgd2FzIHRoZXJlIGluIHRoZSBmaXJzdCBwbGFjZT8gQmVjYXVzZSwgaW4gKm15KiBtaW5kLCBgZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKWAgaXMgQUxXQVlTIGdvaW5nIHRvIGJlIGZhbHNlIGluc2lkZSBgdHJ5X3RvX3VubWFwX29uZWAuIFRoZSBwcmV2aW91cyBsb2dpYyBzaG91bGQgbWFrZSB0aGF0IGNsZWFyLiBgdHJ5X3RvX3VubWFwX29uZWAgaXMgb25seSBjYWxsZWQgaWYgaXQgaXNuJ3QgYSBodWdlIHBhZ2UgaW4gdGhlIGZpcnN0IHBsYWNlLlxuXG5TbywgbGV0J3MgYmFjayB1cCBhbmQgY29uZmlybS4gSXMgdGhlcmUgKmFueSogc2NlbmFyaW8gd2hlcmUgYHRyeV90b191bm1hcF9vbmVgIGlzICpldmVyKiBjYWxsZWQgd2l0aCBhIGh1Z2UgcGFnZSBmb2xpbz8gVGhlIGxvZ2ljIEknbSBmYW1pbGlhciB3aXRoIG1ha2VzIG1lIHRoaW5rIG5vLiBJJ2xsIHNlYXJjaCB0aGUgY29kZWJhc2UgdG8gc2VlIHdoZXJlIGB0cnlfdG9fdW5tYXBfb25lYCBpcyB1c2VkLiBRdWljayBncmVwIGFjcm9zcyBgbW0vYCBkaXJlY3RvcnkgcmV2ZWFscyBpdCBpcyBvbmx5IGNhbGxlZCBpbiBgbW0vcm1hcC5jYCBhdCBsaW5lIDI0NDQuIExldCdzIGNoZWNrIHRoZSBlbnRpcmUgcmVwbyB0byBtYWtlIHN1cmUgdGhhdCBpcyBhY2N1cmF0ZS5cbmBgYGNcbnZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxue1xuXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xuXHRcdC5ybWFwX29uZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgP1xuXHRcdFx0XHR0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUgOiB0cnlfdG9fdW5tYXBfb25lLFxuXHRcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxuYGBgXG5Pa2F5LCBgdHJ5X3RvX3VubWFwX29uZWAgKml0c2VsZiogaXMgY2FsbGVkIGJhc2VkIG9uIHRoZSBgZm9saW9fdGVzdF9odWdldGxiYCBjaGVjay4gVGhpcyBpcyAqZXhhY3RseSogd2hhdCBJIGV4cGVjdGVkLCBhbmQgaXQgY29uZmlybXMgdGhlIHJlZHVuZGFuY3kuIFdpdGggdGhpcyBkZWVwZXIgdW5kZXJzdGFuZGluZyBJIGNhbiBzYXkgd2l0aCBjb25maWRlbmNlIHRoYXQgdGhpcyBwYXRjaCBpcyBjb3JyZWN0LCByZW1vdmluZyBkZWFkIGNvZGUgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBoaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzU4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjAwOjM4Ljg3NDM5MTkxNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NTUyNjU2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fdW5tYXBfb25lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9NDQwPVRoZXJlIGlzIGFsc28gYSBmaWxlLXN5c3RlbSBzcGVjaWZpYyBsb2NrIG9yZGVyaW5nIGNvbW1lbnQgbG9jYXRlZCBhdCB0aGUgdG9wIG9mXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTQ3Ni0gIC1cXHUwMDNlcGFnZV90YWJsZV9sb2NrIG9yIHB0ZV9sb2NrXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo0Nzc6ICAgIC1cXHUwMDNlc3dhcF9sb2NrICAgICAgICAgICAgICAgICAgICAgICAgICh0cnlfdG9fdW5tYXBfb25lKVxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6NDc4OiAgICAtXFx1MDAzZXByaXZhdGVfbG9jayAgICAgICAgICAgICAgICAgICAgICAodHJ5X3RvX3VubWFwX29uZSlcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjQ3OTogICAgLVxcdTAwM2VpX3BhZ2VzIGxvY2sgICAgICAgICAgICAgICAgICAgICAgKHRyeV90b191bm1hcF9vbmUpXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC00ODAtICAgIC1cXHUwMDNlbHJ1dmVjLVxcdTAwM2VscnVfbG9jayAgICAgICAgICAgICAgICAgIChmb2xsb3dfcGFnZV9tYXNrLVxcdTAwM2VtYXJrX3BhZ2VfYWNjZXNzZWQpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3VuZXZpY3RhYmxlLWxydS5yc3Q9NTU1PXJtYXAncyBmb2xpb19yZWZlcmVuY2VkX29uZSgpLCBjYWxsZWQgdmlhIHZtc2NhbidzIHNocmlua19hY3RpdmVfbGlzdCgpIG9yXFxuRG9jdW1lbnRhdGlvbi9tbS91bmV2aWN0YWJsZS1scnUucnN0OjU1NjpzaHJpbmtfZm9saW9fbGlzdCgpLCBhbmQgcm1hcCdzIHRyeV90b191bm1hcF9vbmUoKSBjYWxsZWQgdmlhIHNocmlua19mb2xpb19saXN0KCksXFxuRG9jdW1lbnRhdGlvbi9tbS91bmV2aWN0YWJsZS1scnUucnN0LTU1Ny1jaGVjayBmb3IgKDMpIHBhZ2VzIHN0aWxsIG1hcHBlZCBpbnRvIFZNX0xPQ0tFRCBWTUFzLCBhbmQgY2FsbCBtbG9ja192bWFfZm9saW8oKVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaD0xOT10eXBlZGVmIHN0cnVjdCB7XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oLTMzLSAqIHJvbGxvdmVyIGV2ZW50IChzZWUgbmV3X2NvbnRleHQoKSBhbmQgZmx1c2hfY29udGV4dCgpKS4gSW4gdGhpcyBjYXNlLFxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11Lmg6MzQ6ICogYSBjb25jdXJyZW50IFRMQkkgKGUuZy4gdmlhIHRyeV90b191bm1hcF9vbmUoKSBhbmQgcHRlcF9jbGVhcl9mbHVzaCgpKVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmgtMzUtICogbWF5IHVzZSBhIHN0YWxlIEFTSUQuIFRoaXMgaXMgZmluZSBpbiBwcmluY2lwbGUgYXMgdGhlIG5ldyBBU0lEIGlzXFxuLS1cXG5mcy9uaWxmczIvaW5vZGUuYz0xNzc9c3RhdGljIGJvb2wgbmlsZnNfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9uaWxmczIvaW5vZGUuYy0xODUtXFx0LypcXG5mcy9uaWxmczIvaW5vZGUuYzoxODY6XFx0ICogVGhlIHBhZ2UgbWF5IG5vdCBiZSBsb2NrZWQsIGVnIGlmIGNhbGxlZCBmcm9tIHRyeV90b191bm1hcF9vbmUoKVxcbmZzL25pbGZzMi9pbm9kZS5jLTE4Ny1cXHQgKi9cXG4tLVxcbm1tL2ZpbGVtYXAuYy0xMTQtICogIC1cXHUwMDNlcGFnZV90YWJsZV9sb2NrIG9yIHB0ZV9sb2NrXFxubW0vZmlsZW1hcC5jOjExNTogKiAgICAtXFx1MDAzZXN3YXBfbG9ja1xcdFxcdCh0cnlfdG9fdW5tYXBfb25lKVxcbm1tL2ZpbGVtYXAuYzoxMTY6ICogICAgLVxcdTAwM2Vwcml2YXRlX2xvY2tcXHRcXHQodHJ5X3RvX3VubWFwX29uZSlcXG5tbS9maWxlbWFwLmM6MTE3OiAqICAgIC1cXHUwMDNlaV9wYWdlcyBsb2NrXFx0XFx0KHRyeV90b191bm1hcF9vbmUpXFxubW0vZmlsZW1hcC5jLTExOC0gKiAgICAtXFx1MDAzZWxydXZlYy1cXHUwMDNlbHJ1X2xvY2tcXHQoZm9sbG93X3BhZ2VfbWFzay1cXHUwMDNlbWFya19wYWdlX2FjY2Vzc2VkKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzg2PWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTcxLVxcdCAqIGV4YW1wbGUgaXMgYW4gbWxvY2tlZCBwYWdlLCB3aGVyZSBQR19tbG9ja2VkIGlzIGNsZWFyZWQgYnlcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI1NzI6XFx0ICogZm9saW9fcmVtb3ZlX3JtYXBfKigpIGluIHRyeV90b191bm1hcF9vbmUoKS4gU28gdG8gZGV0ZXJtaW5lIHBhZ2VcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1NzMtXFx0ICogc3RhdHVzIGNvcnJlY3RseSwgd2Ugc2F2ZSBhIGNvcHkgb2YgdGhlIHBhZ2UgZmxhZ3MgYXQgdGhpcyB0aW1lLlxcbi0tXFxubW0vbWxvY2suYz00Njc9c3RhdGljIGludCBtbG9ja19maXh1cChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWxvY2suYy01MDItXFx0ICogdm1fZmxhZ3MgaXMgcHJvdGVjdGVkIGJ5IHRoZSBtbWFwX2xvY2sgaGVsZCBpbiB3cml0ZSBtb2RlLlxcbm1tL21sb2NrLmM6NTAzOlxcdCAqIEl0J3Mgb2theSBpZiB0cnlfdG9fdW5tYXBfb25lIHVubWFwcyBhIHBhZ2UganVzdCBhZnRlciB3ZVxcbm1tL21sb2NrLmMtNTA0LVxcdCAqIHNldCBWTUFfTE9DS0VEX0JJVCwgcG9wdWxhdGVfdm1hX3BhZ2VfcmFuZ2Ugd2lsbCBicmluZyBpdCBiYWNrLlxcbi0tXFxubW0vcm1hcC5jPTIxNzg9c3RhdGljIGJvb2wgdHR1X2Fub25fZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9ybWFwLmMtMjIwMC0gKi9cXG5tbS9ybWFwLmM6MjIwMTpzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL3JtYXAuYy0yMjAyLVxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXFxuLS1cXG5tbS9ybWFwLmM9MjQ0MD12b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG4tLVxcbm1tL3JtYXAuYy0yNDQzLVxcdFxcdC5ybWFwX29uZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgP1xcbm1tL3JtYXAuYzoyNDQ0OlxcdFxcdFxcdFxcdHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZSA6IHRyeV90b191bm1hcF9vbmUsXFxubW0vcm1hcC5jLTI0NDUtXFx0XFx0LmFyZyA9ICh2b2lkICopZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjAwOjQwLjcxOTkyNDU0MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDU4MTExNTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgXCJXb3J0aEZ1enppbmdcIiBDcml0ZXJpYSBmb3IgYSBEZWFkIENvZGUgUmVtb3ZhbCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZGV0ZXJtaW5lIGlmIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBldmVyIGNhbGxlZCBhbnl3aGVyZSBlbHNlLiBJdCBzZWVtcyBsaWtlIGl0J3Mgc3RhdGljIHdpdGhpbiBgbW0vcm1hcC5jYCBhbmQgaXMgb25seSByZWZlcmVuY2VkIG9uY2UsIGFzIGAucm1hcF9vbmVgIGluIGB0cnlfdG9fdW5tYXAoKWAsIGFuZCBjcnVjaWFsbHksIGl0J3MgZ3VhcmRlZCBieSBgIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbylgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgaW5zaWRlIGB0cnlfdG9fdW5tYXBfb25lKClgLCB0aGUgYGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbylgIGNvbmRpdGlvbiBpcyBBTFdBWVMgZmFsc2UuXG5cblRoZXJlZm9yZSwgdGhlIGBpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlgIGNoZWNrIGluIHRoYXQgZnVuY3Rpb24gd2FzIHB1cmUgZGVhZCBjb2RlLiBSZW1vdmluZyBpdCBoYXMgbm8gZnVuY3Rpb25hbCBpbXBhY3QgYW5kIGRvZXNuJ3QgY2hhbmdlIHRoZSBleGVjdXRpb24gZmxvdyB3aGF0c29ldmVyLlxuXG5Ob3csIGxldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgXCJXb3J0aEZ1enppbmdcIiBjcml0ZXJpYS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBwYXRjaCBzaG91bGQgcmV0dXJuIFwiZmFsc2VcIiBpZiBpdCBvbmx5IGNvbnRhaW5zIGRvY3VtZW50YXRpb24gY2hhbmdlcywgS2NvbmZpZyBmaWxlIG1vZGlmaWNhdGlvbnMsIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGxvZ2dpbmcgb3IgdHJhY2luZywgY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkb24ndCBhZmZlY3QgZXhlY3V0aW9uLCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgb3IgY29kZSBpbiBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZS5cblxuU28sIHRoZSBrZXkgaGVyZSBpcyB3aGV0aGVyIGRlYWQgY29kZSByZW1vdmFsLCBzcGVjaWZpY2FsbHkgcmVmYWN0b3JpbmcvY2xlYW51cCwgaXMgY29uc2lkZXJlZCBcIm5vbi1mdW5jdGlvbmFsXCIgYWNjb3JkaW5nIHRvIHRob3NlIHJ1bGVzLiBHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggcmVtb3ZlcyBhIGRlYWQgYGlmYCBicmFuY2ggZnJvbSBgdHJ5X3RvX3VubWFwX29uZSgpYCwgd2hpY2ggd2FzIGFsd2F5cyBieXBhc3NlZCBhbnl3YXkgYmVjYXVzZSBvZiB0aGUgbG9naWMgaW4gYHRyeV90b191bm1hcCgpYCwgaXQgc2VlbXMgdGhpcyBwYXRjaCBpcyBhIHB1cmUgY2xlYW51cCB3aXRoIG5vIGNoYW5nZSB0byB0aGUgY29kZSdzIGZ1bmN0aW9uYWxpdHkgb3IgdGhlIHdheSBpdCBleGVjdXRlcy4gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdhcyBhbHdheXMgcGVyZm9ybWluZyB0aGUgc2FtZSBhY3Rpb24gZHVlIHRvIHRoZSBgZWxzZWAgYnJhbmNoLCBhbmQgdGhlIHBhdGNoIGtlZXBzIHRoYXQgYGVsc2VgIGJyYW5jaC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkndmUgY29uZmlybWVkIHRoYXQgYHRyeV90b191bm1hcF9vbmVgIGlzIGluZGVlZCBzdGF0aWMsIG9ubHkgdXNlZCBieSBgdHJ5X3RvX3VubWFwYCwgYW5kIHRoZSBjb25kaXRpb25hbCBgZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKWAgd2lsbCBhbHdheXMgZXZhbHVhdGUgdG8gZmFsc2UsIG1lYW5pbmcgdGhlIHJlbW92ZWQgY29kZSB3YXMgZW50aXJlbHkgdW5yZWFjaGFibGUuIFRoZSByZXBsYWNlbWVudCBjb2RlIGBwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSlgIGlzIGlkZW50aWNhbCB0byB3aGF0IHRoZSBgZWxzZWAgYnJhbmNoICphbHdheXMqIGV4ZWN1dGVkLiBObyBmdW5jdGlvbmFsIGNoYW5nZSB3aGF0c29ldmVyLlxuXG5UaHVzLCBiYXNlZCBvbiB0aGUgZG9jdW1lbnRlZCBjcml0ZXJpYSBmb3IgXCJXb3J0aEZ1enppbmcsXCIgdGhlIGNvcnJlY3QgcmVzdWx0IHNob3VsZCBiZSBcImZhbHNlXCIgZm9yIHRoaXMgcGF0Y2guIEknbGwgbm93IHByb2NlZWQgd2l0aCBhIGBzZXQtcmVzdWx0c2AgY29tbWFuZCwgc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLCBlbXB0eSBsaXN0cyBmb3IgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCwgYW5kIEknbGwgaW5jbHVkZSBhIGNvbmNpc2UgZXhwbGFuYXRpb24gdGhhdCBJJ3ZlIGNhcmVmdWxseSBqdXN0aWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Mjk2LCJPdXRwdXRUb2tlbnMiOjExOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTowMDo0Ni43NzgwMzg0NjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGFuIHVucmVhY2hhYmxlIGh1Z2V0bGIgY2hlY2sgaW4gdHJ5X3RvX3VubWFwX29uZSgpLiBTaW5jZSB0cnlfdG9fdW5tYXAoKSBleHBsaWNpdGx5IHJvdXRlcyBodWdldGxiIGZvbGlvcyB0byB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUoKSwgdHJ5X3RvX3VubWFwX29uZSgpIGlzIG9ubHkgZXZlciBjYWxsZWQgZm9yIG5vbi1odWdldGxiIGZvbGlvcy4gUmVtb3ZpbmcgdGhpcyBkZWFkIGJyYW5jaCBpcyBhIHB1cmUgY29kZSBjbGVhbnVwIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGFuIHVucmVhY2hhYmxlIGh1Z2V0bGIgY2hlY2sgaW4gdHJ5X3RvX3VubWFwX29uZSgpLiBTaW5jZSB0cnlfdG9fdW5tYXAoKSBleHBsaWNpdGx5IHJvdXRlcyBodWdldGxiIGZvbGlvcyB0byB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUoKSwgdHJ5X3RvX3VubWFwX29uZSgpIGlzIG9ubHkgZXZlciBjYWxsZWQgZm9yIG5vbi1odWdldGxiIGZvbGlvcy4gUmVtb3ZpbmcgdGhpcyBkZWFkIGJyYW5jaCBpcyBhIHB1cmUgY29kZSBjbGVhbnVwIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTowMDo0Ni43NzgwNjMzMjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowtkmjl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 08:40:17 +0000 UTC FinishedAt: 2026-08-31 09:00:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhbiB1bnJlYWNoYWJsZSBodWdldGxiIGNoZWNrIGluIHRyeV90b191bm1hcF9vbmUoKS4gU2luY2UgdHJ5X3RvX3VubWFwKCkgZXhwbGljaXRseSByb3V0ZXMgaHVnZXRsYiBmb2xpb3MgdG8gdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lKCksIHRyeV90b191bm1hcF9vbmUoKSBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZvciBub24taHVnZXRsYiBmb2xpb3MuIFJlbW92aW5nIHRoaXMgZGVhZCBicmFuY2ggaXMgYSBwdXJlIGNvZGUgY2xlYW51cCB3aXRoIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZkODBjZjNmMjI3MGYzMjY0YjUxOWZhY2QwNGE0NGYzYTVmN2Q4MTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwODo1OTo0NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IGQxODE5ZmQ2OTkzODAuLjYwNmM4ZWNmMzEzMDIgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuY1xuQEAgLTIyOTksMTEgJiM0MzsyMjk5LDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0Vk1fQlVHX09OX0ZPTElPKCFwdm13LnB0ZSwgZm9saW8pO1xuIFxuIFx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuLVx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuLVx0XHRcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7XG4tXHRcdH1cbiYjNDM7XHRcdHB0ZXZhbCA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcbiYjNDM7XG4gXHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcbiBcdFx0XHRwZm4gPSBwdGVfcGZuKHB0ZXZhbCk7XG4gXHRcdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhbiB1bnJlYWNoYWJsZSBodWdldGxiIGNoZWNrIGluIHRyeV90b191bm1hcF9vbmUoKS4gU2luY2UgdHJ5X3RvX3VubWFwKCkgZXhwbGljaXRseSByb3V0ZXMgaHVnZXRsYiBmb2xpb3MgdG8gdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lKCksIHRyeV90b191bm1hcF9vbmUoKSBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZvciBub24taHVnZXRsYiBmb2xpb3MuIFJlbW92aW5nIHRoaXMgZGVhZCBicmFuY2ggaXMgYSBwdXJlIGNvZGUgY2xlYW51cCB3aXRoIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZkODBjZjNmMjI3MGYzMjY0YjUxOWZhY2QwNGE0NGYzYTVmN2Q4MTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwODo1OTo0NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCBkMTgxOWZkNjk5MzgwLi42MDZjOGVjZjMxMzAyIDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jCkBAIC0yMjk5LDExICYjNDM7MjI5OSw4IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCVZNX0JVR19PTl9GT0xJTyghcHZtdy5wdGUsIGZvbGlvKTsKIAogCQlhZGRyZXNzID0gcHZtdy5hZGRyZXNzOwotCQlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkgewotCQkJcHRldmFsID0gaHVnZV9wdGVwX2dldChtbSwgYWRkcmVzcywgcHZtdy5wdGUpOwotCQl9IGVsc2UgewotCQkJcHRldmFsID0gcHRlcF9nZXQocHZtdy5wdGUpOwotCQl9CiYjNDM7CQlwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7CiYjNDM7CiAJCWlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHsKIAkJCXBmbiA9IHB0ZV9wZm4ocHRldmFsKTsKIAkJfSBlbHNlIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRpZmYgdGhhdCB0b3VjaGVzIGBtbS9ybWFwLmNgLiBUaGUgY29tbWl0IGlzIGNoYW5naW5nIGB0cnlfdG9fdW5tYXBfb25lYC4gSSBzZWUgdGhlIGtleSBtb2RpZmljYXRpb24gaXMgcmVtb3ZpbmcgdGhpcyBjb25kaXRpb25hbCBibG9jayBhcm91bmQgYHB0ZXZhbGA6IHRoZSBjb2RlIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIEh1Z2VUTEIgZm9saW9zIGFuZCByZWd1bGFyIG9uZXMgd2hlbiBnZXR0aW5nIHRoZSBQVEUgdmFsdWUuIE5vdywgaXQganVzdCBkaXJlY3RseSB1c2VzIGBwdGVwX2dldChwdm13LnB0ZSlgLiBObyBtb3JlIGBodWdlX3B0ZXBfZ2V0YCBpZiBpdCYjMzk7cyBhIEh1Z2VUTEIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZSBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgaXQgaGFzLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHdoZXJlIEkgYW0gcmVhZGluZyB0aGUgZmlsZS4uLiBhaCwgcmlnaHQuIExldCYjMzk7cyBnbyByZWFkIGFyb3VuZCBsaW5lIDIyOTkgaW4gYG1tL3JtYXAuY2AgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJdCBtaWdodCBiZSBvYnZpb3VzLCBidXQgdGhpcyBuZWVkcyB0byBiZSB1bmRlcnN0b29kIHdpdGhpbiB0aGUgbGFyZ2VyIHNjb3BlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBMZXQmIzM5O3MgZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9ybWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyODA6XHRcdFx0XHRcdCAqIGR1ZSB0byBHVVAgb3Igc3BlY3VsYXRpdmUgcmVmZXJlbmNlcy5cbjIyODE6XHRcdFx0XHRcdCAqL1xuMjI4MjpcdFx0XHRcdFx0Z290byB3YWxrX2Fib3J0O1xuMjI4MzpcdFx0XHRcdH1cbjIyODQ6XHRcbjIyODU6XHRcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IFRUVV9TUExJVF9IVUdFX1BNRCkge1xuMjI4NjpcdFx0XHRcdFx0LypcbjIyODc6XHRcdFx0XHRcdCAqIFdlIHRlbXBvcmFyaWx5IGhhdmUgdG8gZHJvcCB0aGUgUFRMIGFuZFxuMjI4ODpcdFx0XHRcdFx0ICogcmVzdGFydCBzbyB3ZSBjYW4gcHJvY2VzcyB0aGUgUFRFLW1hcHBlZCBUSFAuXG4yMjg5Olx0XHRcdFx0XHQgKi9cbjIyOTA6XHRcdFx0XHRcdHNwbGl0X2h1Z2VfcG1kX2xvY2tlZCh2bWEsIHB2bXcuYWRkcmVzcyxcbjIyOTE6XHRcdFx0XHRcdFx0XHQgICAgICBwdm13LnBtZCwgZmFsc2UpO1xuMjI5MjpcdFx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+VFRVX1NQTElUX0hVR0VfUE1EO1xuMjI5MzpcdFx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfcmVzdGFydChcdTAwMjZwdm13KTtcbjIyOTQ6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjI5NTpcdFx0XHRcdH1cbjIyOTY6XHRcdFx0fVxuMjI5NzpcdFxuMjI5ODpcdFx0XHQvKiBVbmV4cGVjdGVkIFBNRC1tYXBwZWQgVEhQPyAqL1xuMjI5OTpcdFx0XHRWTV9CVUdfT05fRk9MSU8oIXB2bXcucHRlLCBmb2xpbyk7XG4yMzAwOlx0XG4yMzAxOlx0XHRcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XG4yMzAyOlx0XHRcdHB0ZXZhbCA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcbjIzMDM6XHRcbjIzMDQ6XHRcdFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xuMjMwNTpcdFx0XHRcdHBmbiA9IHB0ZV9wZm4ocHRldmFsKTtcbjIzMDY6XHRcdFx0fSBlbHNlIHtcbjIzMDc6XHRcdFx0XHQvKlxuMjMwODpcdFx0XHRcdCAqIEhhbmRsZSBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcyxcbjIzMDk6XHRcdFx0XHQgKiB0aGF0IGFjdHVhbGx5IG1hcCBwYWdlcy5cbjIzMTA6XHRcdFx0XHQgKi9cbjIzMTE6XHRcdFx0XHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRldmFsKTtcbjIzMTI6XHRcbjIzMTM6XHRcdFx0XHRwZm4gPSBzb2Z0bGVhZl90b19wZm4oZW50cnkpO1xuMjMxNDpcdFx0XHR9XG4yMzE1Olx0XG4yMzE2Olx0XHRcdHBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBwZm4gLSBmb2xpb19wZm4oZm9saW8pKTtcbjIzMTc6XHRcbjIzMTg6XHRcdFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xuMjMxOTpcdFx0XHRcdG5yX3BhZ2VzID0gZm9saW9fdW5tYXBfcHRlX2JhdGNoKGZvbGlvLCBcdTAwMjZwdm13LCBmbGFncywgcHRldmFsKTtcbjIzMjA6XHRcdFx0XHRlbmRfYWRkciA9IGFkZHJlc3MgJiM0MzsgbnJfcGFnZXMgKiBQQUdFX1NJWkU7XG4yMzIxOlx0XHRcdFx0Zmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBhZGRyZXNzLCBlbmRfYWRkcik7XG4yMzIyOlx0XG4yMzIzOlx0XHRcdFx0LyogTnVrZSB0aGUgcGFnZSB0YWJsZSBlbnRyeS4gKi9cbjIzMjQ6XHRcdFx0XHRwdGV2YWwgPSBnZXRfYW5kX2NsZWFyX3B0ZXMobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBucl9wYWdlcyk7XG4yMzI1Olx0XHRcdFx0LypcbjIzMjY6XHRcdFx0XHQgKiBXZSBjbGVhciB0aGUgUFRFIGJ1dCBkbyBub3QgZmx1c2ggc28gcG90ZW50aWFsbHlcbjIzMjc6XHRcdFx0XHQgKiBhIHJlbW90ZSBDUFUgY291bGQgc3RpbGwgYmUgd3JpdGluZyB0byB0aGUgZm9saW8uXG4yMzI4Olx0XHRcdFx0ICogSWYgdGhlIGVudHJ5IHdhcyBwcmV2aW91c2x5IGNsZWFuIHRoZW4gdGhlXG4yMzI5Olx0XHRcdFx0ICogYXJjaGl0ZWN0dXJlIG11c3QgZ3VhcmFudGVlIHRoYXQgYSBjbGVhci1cdTAwM2VkaXJ0eVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyOTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gb2YgaHVnZSBwYWdlcyAoaHVnZXRsYikgd2l0aGluIHRoZSB1bm1hcHBpbmcgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIHdpdGhpbiBgdHJ5X3RvX3VubWFwX29uZWAgYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlbGV2YW50IGNvZGUgaW4gYG1tL3JtYXAuY2AuIEkmIzM5O2xsIGZvY3VzIG9uIGxpbmVzIDIyMDAgdG8gMjM1MCBpbiB0aGF0IGZpbGUgdG8gY2FwdHVyZSB0aGUgY29yZSBvZiB0aGUgbG9naWMuIFRoaXMgYXJlYSBzaG91bGQgaWxsdW1pbmF0ZSBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBzcGVjaWZpYyBjaGFsbGVuZ2VzIG9mIHVubWFwcGluZyBodWdlIHBhZ2VzLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIChQVEVzKSBhbmQgcG90ZW50aWFsIHJlZmNvdW50IGlzc3Vlcy4gTXkgZXhwZWN0YXRpb24gaXMgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBzY2VuYXJpb3Mg4oCTIHdoZXRoZXIgdGhlIGh1Z2UgcGFnZSBpcyBzaGFyZWQsIHByaXZhdGUsIGRpcnR5LCBjbGVhbiwgZXRjLiDigJMgYW5kIGhvdyB0aGUgdW5tYXBwaW5nIHByb2Nlc3MgZW5zdXJlcyBkYXRhIGludGVncml0eSBhbmQgbWVtb3J5IGNvbnNpc3RlbmN5LiBJIGFudGljaXBhdGUgc2VlaW5nIGRldGFpbHMgYXJvdW5kIGhvdyB0aGUgTU1VIGlzIHVwZGF0ZWQgYW5kIG1lbW9yeSBpcyBmcmVlZCwgYW5kIGhvdyB0aGUgc3lzdGVtIHRha2VzIGFkdmFudGFnZSBvZiB0aGUgaHVnZSBwYWdlIGluZnJhc3RydWN0dXJlIGZvciBlZmZpY2llbnQgb3BlcmF0aW9uLiBJIGhvcGUgdG8gY29tZSBhd2F5IHdpdGggYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjcnVjaWFsIHN0ZXBzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0ga2VlcHMgY29uc2lzdGVuY3kgZHVyaW5nIGh1Z2UgcGFnZSB1bm1hcHBpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9ybWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMDA6XHQgKi9cbjIyMDE6XHRzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuMjIwMjpcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxuMjIwMzpcdHtcbjIyMDQ6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuMjIwNTpcdFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIDApO1xuMjIwNjpcdFx0Ym9vbCByZXQgPSB0cnVlO1xuMjIwNzpcdFx0cHRlX3QgcHRldmFsO1xuMjIwODpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4yMjA5Olx0XHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xuMjIxMDpcdFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xuMjIxMTpcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEsIGVuZF9hZGRyO1xuMjIxMjpcdFx0dW5zaWduZWQgbG9uZyBwZm47XG4yMjEzOlx0XHRpbnQgcHRlcyA9IDA7XG4yMjE0Olx0XG4yMjE1Olx0XHQvKlxuMjIxNjpcdFx0ICogV2hlbiByYWNpbmcgYWdhaW5zdCBlLmcuIHphcF9wdGVfcmFuZ2UoKSBvbiBhbm90aGVyIGNwdSxcbjIyMTc6XHRcdCAqIGluIGJldHdlZW4gaXRzIHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKCkgYW5kIGZvbGlvX3JlbW92ZV9ybWFwXyooKSxcbjIyMTg6XHRcdCAqIHRyeV90b191bm1hcCgpIG1heSByZXR1cm4gYmVmb3JlIGZvbGlvX21hcHBlZCgpIGhhcyBiZWNvbWUgZmFsc2UsXG4yMjE5Olx0XHQgKiBpZiBwYWdlIHRhYmxlIGxvY2tpbmcgaXMgc2tpcHBlZDogdXNlIFRUVV9TWU5DIHRvIHdhaXQgZm9yIHRoYXQuXG4yMjIwOlx0XHQgKi9cbjIyMjE6XHRcdGlmIChmbGFncyBcdTAwMjYgVFRVX1NZTkMpXG4yMjIyOlx0XHRcdHB2bXcuZmxhZ3MgPSBQVk1XX1NZTkM7XG4yMjIzOlx0XG4yMjI0Olx0XHQvKlxuMjIyNTpcdFx0ICogRm9yIFRIUCwgd2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnNlIGNhc2UgaWUgcG1kIGZvciBpbnZhbGlkYXRpb24uXG4yMjI2Olx0XHQgKlxuMjIyNzpcdFx0ICogTm90ZSB0aGF0IHRoZSBmb2xpbyBjYW4gbm90IGJlIGZyZWVkIGluIHRoaXMgZnVuY3Rpb24gYXMgY2FsbCBvZlxuMjIyODpcdFx0ICogdHJ5X3RvX3VubWFwKCkgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIHRoZSBmb2xpby5cbjIyMjk6XHRcdCAqL1xuMjIzMDpcdFx0cmFuZ2UuZW5kID0gdm1hX2FkZHJlc3NfZW5kKFx1MDAyNnB2bXcpO1xuMjIzMTpcdFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS1cdTAwM2V2bV9tbSxcbjIyMzI6XHRcdFx0XHRcdGFkZHJlc3MsIHJhbmdlLmVuZCk7XG4yMjMzOlx0XHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcdTAwMjZyYW5nZSk7XG4yMjM0Olx0XG4yMjM1Olx0XHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbjIyMzY6XHRcdFx0bnJfcGFnZXMgPSAxO1xuMjIzNzpcdFxuMjIzODpcdFx0XHQvKlxuMjIzOTpcdFx0XHQgKiBJZiB0aGUgZm9saW8gaXMgaW4gYW4gbWxvY2soKWQgdm1hLCB3ZSBtdXN0IG5vdCBzd2FwIGl0IG91dC5cbjIyNDA6XHRcdFx0ICovXG4yMjQxOlx0XHRcdGlmICghKGZsYWdzIFx1MDAyNiBUVFVfSUdOT1JFX01MT0NLKSBcdTAwMjZcdTAwMjZcbjIyNDI6XHRcdFx0ICAgICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRCkpIHtcbjIyNDM6XHRcdFx0XHRwdGVzJiM0MzsmIzQzOztcbjIyNDQ6XHRcbjIyNDU6XHRcdFx0XHQvKlxuMjI0NjpcdFx0XHRcdCAqIFNldCAmIzM5O3JldCYjMzk7IHRvIGluZGljYXRlIHRoZSBwYWdlIGNhbm5vdCBiZSB1bm1hcHBlZC5cbjIyNDc6XHRcdFx0XHQgKlxuMjI0ODpcdFx0XHRcdCAqIERvIG5vdCBqdW1wIHRvIHdhbGtfYWJvcnQgaW1tZWRpYXRlbHkgYXMgYWRkaXRpb25hbFxuMjI0OTpcdFx0XHRcdCAqIGl0ZXJhdGlvbiBtaWdodCBiZSByZXF1aXJlZCB0byBkZXRlY3QgZnVsbHkgbWFwcGVkXG4yMjUwOlx0XHRcdFx0ICogZm9saW8gYW4gbWxvY2sgaXQuXG4yMjUxOlx0XHRcdFx0ICovXG4yMjUyOlx0XHRcdFx0cmV0ID0gZmFsc2U7XG4yMjUzOlx0XG4yMjU0Olx0XHRcdFx0LyogT25seSBtbG9jayBmdWxseSBtYXBwZWQgcGFnZXMgKi9cbjIyNTU6XHRcdFx0XHRpZiAocHZtdy5wdGUgXHUwMDI2XHUwMDI2IHB0ZXMgIT0gcHZtdy5ucl9wYWdlcylcbjIyNTY6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjI1NzpcdFxuMjI1ODpcdFx0XHRcdC8qXG4yMjU5Olx0XHRcdFx0ICogQWxsIFBURXMgbXVzdCBiZSBwcm90ZWN0ZWQgYnkgcGFnZSB0YWJsZSBsb2NrIGluXG4yMjYwOlx0XHRcdFx0ICogb3JkZXIgdG8gbWxvY2sgdGhlIHBhZ2UuXG4yMjYxOlx0XHRcdFx0ICpcbjIyNjI6XHRcdFx0XHQgKiBJZiBwYWdlIHRhYmxlIGJvdW5kYXJ5IGhhcyBiZWVuIGNyb3NzLCBjdXJyZW50IHB0bFxuMjI2MzpcdFx0XHRcdCAqIG9ubHkgcHJvdGVjdCBwYXJ0IG9mIHB0ZXMuXG4yMjY0Olx0XHRcdFx0ICovXG4yMjY1Olx0XHRcdFx0aWYgKHB2bXcuZmxhZ3MgXHUwMDI2IFBWTVdfUEdUQUJMRV9DUk9TU0VEKVxuMjI2NjpcdFx0XHRcdFx0Z290byB3YWxrX2RvbmU7XG4yMjY3Olx0XG4yMjY4Olx0XHRcdFx0LyogUmVzdG9yZSB0aGUgbWxvY2sgd2hpY2ggZ290IG1pc3NlZCAqL1xuMjI2OTpcdFx0XHRcdG1sb2NrX3ZtYV9mb2xpbyhmb2xpbywgdm1hKTtcbjIyNzA6XHRcdFx0XHRnb3RvIHdhbGtfZG9uZTtcbjIyNzE6XHRcdFx0fVxuMjI3MjpcdFxuMjI3MzpcdFx0XHRpZiAoIXB2bXcucHRlKSB7XG4yMjc0Olx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfbGF6eWZyZWUoZm9saW8pKSB7XG4yMjc1Olx0XHRcdFx0XHRpZiAodW5tYXBfaHVnZV9wbWRfbG9ja2VkKHZtYSwgcHZtdy5hZGRyZXNzLCBwdm13LnBtZCwgZm9saW8pKVxuMjI3NjpcdFx0XHRcdFx0XHRnb3RvIHdhbGtfZG9uZTtcbjIyNzc6XHRcdFx0XHRcdC8qXG4yMjc4Olx0XHRcdFx0XHQgKiB1bm1hcF9odWdlX3BtZF9sb2NrZWQgaGFzIGVpdGhlciBhbHJlYWR5IG1hcmtlZFxuMjI3OTpcdFx0XHRcdFx0ICogdGhlIGZvbGlvIGFzIHN3YXAtYmFja2VkIG9yIGRlY2lkZWQgdG8gcmV0YWluIGl0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg3NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBodWdldGxiIHdpdGhpbiB0aGUgYHRyeV90b191bm1hcF9vbmVgIGFuZCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGZ1bmN0aW9ucy4gQ2xlYXJseSwgdGhlcmUmIzM5O3MgYSBwcm9ibGVtLCBvciBhdCBsZWFzdCBhIG5lZWQgdG8gaW52ZXN0aWdhdGUsIHJlbGF0ZWQgdG8gSHVnZVRMQiBwYWdlcyB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aG9zZSBmdW5jdGlvbnMgaW4gYG1tL3JtYXAuY2AuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0IHdpdGggSHVnZVRMQiBwYWdlcyDigJMgaXMgdGhlcmUgYSBzcGVjaWZpYyBjb25kaXRpb25hbCBjaGVjaywgYSBkaWZmZXJlbnQgY29kZSBwYXRoLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSB0aGF0JiMzOTtzIGNhdXNpbmcgdGhpcyBiZWhhdmlvcj8KCkkmIzM5O2xsIGFsc28ga2VlcCBhbiBleWUgb24gcmVjZW50IGNvbW1pdHMuIFBlcmhhcHMgYSByZWNlbnQgcGF0Y2ggaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24gb3IgYW4gdW5leHBlY3RlZCBpbnRlcmFjdGlvbiB3aXRoIEh1Z2VUTEIgZnVuY3Rpb25hbGl0eS4gVGhhdCBjb3VsZCBnaXZlIHNvbWUgY29udGV4dCBpbnRvIHRoZSByZWNlbnQgY2hhbmdlcyBpbiB0aGUgYG1tL3JtYXAuY2AgZmlsZS4gU28sIEkgbmVlZCB0byBjaGVjayBmb3IgY2hhbmdlcyBuZWFyIGBtbS9ybWFwLmNgIHJlbGF0ZWQgdG8gaHVnZXRsYi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb190ZXN0X2h1Z2V0bGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9ybWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcm1hcC5jPTE2NDg9dm9pZCBmb2xpb19hZGRfbmV3X2Fub25fcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMTY1My1cbm1tL3JtYXAuYzoxNjU0Olx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XG5tbS9ybWFwLmMtMTY1NS1cdFZNX1dBUk5fT05fRk9MSU8oIWV4Y2x1c2l2ZSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuLS1cbm1tL3JtYXAuYz0yNDQwPXZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxuLS1cbm1tL3JtYXAuYy0yNDQyLVx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcbm1tL3JtYXAuYzoyNDQzOlx0XHQucm1hcF9vbmUgPSBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pID9cbm1tL3JtYXAuYy0yNDQ0LVx0XHRcdFx0dHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lIDogdHJ5X3RvX3VubWFwX29uZSxcbi0tXG5tbS9ybWFwLmM9MjQ2Mj1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTI0OTQtXHRcdFx0XHRhZGRyZXNzLCByYW5nZS5lbmQpO1xubW0vcm1hcC5jOjI0OTU6XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xubW0vcm1hcC5jLTI0OTYtXHRcdC8qXG4tLVxubW0vcm1hcC5jLTI1MzUtXG5tbS9ybWFwLmM6MjUzNjpcdFx0XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSB8fFxubW0vcm1hcC5jLTI1MzctXHRcdFx0XHRcdCFmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbyksIGZvbGlvKTtcbi0tXG5tbS9ybWFwLmMtMjU1MS1cdFx0YWRkcmVzcyA9IHB2bXcuYWRkcmVzcztcbm1tL3JtYXAuYzoyNTUyOlx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbm1tL3JtYXAuYy0yNTUzLVx0XHRcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcbi0tXG5tbS9ybWFwLmMtMjU2NS1cdFx0XHRwZm4gPSBzb2Z0bGVhZl90b19wZm4oZW50cnkpO1xubW0vcm1hcC5jOjI1NjY6XHRcdFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XG5tbS9ybWFwLmMtMjU2Ny1cdFx0fVxuLS1cbm1tL3JtYXAuYy0yNTcyLVxubW0vcm1hcC5jOjI1NzM6XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG5tbS9ybWFwLmMtMjU3NC1cdFx0XHRib29sIGFub24gPSBmb2xpb190ZXN0X2Fub24oZm9saW8pO1xuLS1cbm1tL3JtYXAuYy0yNjYzLVx0XHRcdHB0ZXZhbCA9IHN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShzdWJwYWdlKSk7XG5tbS9ybWFwLmM6MjY2NDpcdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xubW0vcm1hcC5jLTI2NjUtXHRcdFx0XHRodWdldGxiX2NvdW50X3N1Yihmb2xpb19ucl9wYWdlcyhmb2xpbyksIG1tKTtcbi0tXG5tbS9ybWFwLmMtMjY5NC1cdFx0XHRpZiAoYXJjaF91bm1hcF9vbmUobW0sIHZtYSwgYWRkcmVzcywgcHRldmFsKSBcdTAwM2MgMCkge1xubW0vcm1hcC5jOjI2OTU6XHRcdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbm1tL3JtYXAuYy0yNjk2LVx0XHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLFxuLS1cbm1tL3JtYXAuYy0yNzA1LVx0XHRcdC8qIFNlZSBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3B0ZSgpOiBjbGVhciBQVEUgZmlyc3QuICovXG5tbS9ybWFwLmM6MjcwNjpcdFx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xubW0vcm1hcC5jLTI3MDctXHRcdFx0XHRpZiAoYW5vbl9leGNsdXNpdmUgXHUwMDI2XHUwMDI2XG4tLVxubW0vcm1hcC5jLTI3NTMtXHRcdFx0fVxubW0vcm1hcC5jOjI3NTQ6XHRcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG5tbS9ybWFwLmMtMjc1NS1cdFx0XHRcdHNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHN3cF9wdGUsXG4tLVxubW0vcm1hcC5jLTI3NjYtXG5tbS9ybWFwLmM6Mjc2NzpcdFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpKVxubW0vcm1hcC5jLTI3NjgtXHRcdFx0aHVnZXRsYl9yZW1vdmVfcm1hcChmb2xpbyk7XG4tLVxubW0vcm1hcC5jPTI4NjY9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3JtYXAuYy0yODk3LVxubW0vcm1hcC5jOjI4OTg6XHRpZiAoIWZvbGlvX3Rlc3RfYW5vbihmb2xpbykgfHwgZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xubW0vcm1hcC5jLTI4OTktXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tLVxubW0vcm1hcC5jPTMxNzc9dm9pZCBodWdldGxiX2FkZF9hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTMxNzkte1xubW0vcm1hcC5jOjMxODA6XHRWTV9XQVJOX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XG5tbS9ybWFwLmMtMzE4MS1cdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfYW5vbihmb2xpbyksIGZvbGlvKTtcbi0tXG5tbS9ybWFwLmM9MzE5MT12b2lkIGh1Z2V0bGJfYWRkX25ld19hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtMzE5My17XG5tbS9ybWFwLmM6MzE5NDpcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbm1tL3JtYXAuYy0zMTk1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NDYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdHJ5X3RvX3VubWFwYCBGdW5jdGlvbiBhbmQgSXRzIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHRyeV90b191bm1hcGAgZnVuY3Rpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gaG93IGl0IGhhbmRsZXMgdW5tYXBwaW5nLCBhbmQgcGFydGljdWxhcmx5IHRoZSBicmFuY2hpbmcgbG9naWMgd2l0aGluIGl0LiBUaGUgY29kZSBzbmlwcGV0IGNsZWFybHkgc2hvd3MgdGhlIGNvbmRpdGlvbmFsIGNhbGwgdG8gZWl0aGVyIGB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmVgIG9yIGB0cnlfdG9fdW5tYXBfb25lYCBiYXNlZCBvbiB3aGV0aGVyIHRoZSBmb2xpbyBpcyBhIGh1Z2V0bGIuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzLiBJJiMzOTtsbCBuZWVkIHRvIGV4cGxvcmUgYHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZWAgaW4gZGV0YWlsLCBzcGVjaWZpY2FsbHkgaXRzIGJlaGF2aW91ci4gQW5kIG9mIGNvdXJzZSwgSSBoYXZlIHRvIHNlZSB3aG8gZWxzZSBtaWdodCBjYWxsIGB0cnlfdG9fdW5tYXBfb25lYC4gVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZTsgSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIGNhbGwgZ3JhcGggdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzIGluIHRoaXMgYXJlYS4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBgdHJ5X3RvX3VubWFwX29uZWAgYW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGZ1bmN0aW9uIGl0c2VsZiBvbiBtZW1vcnkgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX3VubWFwX29uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9maWxlbWFwLmMtMTE0LSAqICAtXHUwMDNlcGFnZV90YWJsZV9sb2NrIG9yIHB0ZV9sb2NrXG5tbS9maWxlbWFwLmM6MTE1OiAqICAgIC1cdTAwM2Vzd2FwX2xvY2tcdFx0KHRyeV90b191bm1hcF9vbmUpXG5tbS9maWxlbWFwLmM6MTE2OiAqICAgIC1cdTAwM2Vwcml2YXRlX2xvY2tcdFx0KHRyeV90b191bm1hcF9vbmUpXG5tbS9maWxlbWFwLmM6MTE3OiAqICAgIC1cdTAwM2VpX3BhZ2VzIGxvY2tcdFx0KHRyeV90b191bm1hcF9vbmUpXG5tbS9maWxlbWFwLmMtMTE4LSAqICAgIC1cdTAwM2VscnV2ZWMtXHUwMDNlbHJ1X2xvY2tcdChmb2xsb3dfcGFnZV9tYXNrLVx1MDAzZW1hcmtfcGFnZV9hY2Nlc3NlZClcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzODY9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTcxLVx0ICogZXhhbXBsZSBpcyBhbiBtbG9ja2VkIHBhZ2UsIHdoZXJlIFBHX21sb2NrZWQgaXMgY2xlYXJlZCBieVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTcyOlx0ICogZm9saW9fcmVtb3ZlX3JtYXBfKigpIGluIHRyeV90b191bm1hcF9vbmUoKS4gU28gdG8gZGV0ZXJtaW5lIHBhZ2Vcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU3My1cdCAqIHN0YXR1cyBjb3JyZWN0bHksIHdlIHNhdmUgYSBjb3B5IG9mIHRoZSBwYWdlIGZsYWdzIGF0IHRoaXMgdGltZS5cbi0tXG5tbS9tbG9jay5jPTQ2Nz1zdGF0aWMgaW50IG1sb2NrX2ZpeHVwKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWxvY2suYy01MDItXHQgKiB2bV9mbGFncyBpcyBwcm90ZWN0ZWQgYnkgdGhlIG1tYXBfbG9jayBoZWxkIGluIHdyaXRlIG1vZGUuXG5tbS9tbG9jay5jOjUwMzpcdCAqIEl0JiMzOTtzIG9rYXkgaWYgdHJ5X3RvX3VubWFwX29uZSB1bm1hcHMgYSBwYWdlIGp1c3QgYWZ0ZXIgd2Vcbm1tL21sb2NrLmMtNTA0LVx0ICogc2V0IFZNQV9MT0NLRURfQklULCBwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suXG4tLVxubW0vcm1hcC5jPTIxNzg9c3RhdGljIGJvb2wgdHR1X2Fub25fZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTIyMDAtICovXG5tbS9ybWFwLmM6MjIwMTpzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vcm1hcC5jLTIyMDItXHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4tLVxubW0vcm1hcC5jPTI0NDA9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jLTI0NDMtXHRcdC5ybWFwX29uZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgP1xubW0vcm1hcC5jOjI0NDQ6XHRcdFx0XHR0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUgOiB0cnlfdG9fdW5tYXBfb25lLFxubW0vcm1hcC5jLTI0NDUtXHRcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjAzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFVubWFwcGluZyBTdHJhdGVnaWVzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB1bm1hcHBpbmcgcm91dGluZXMgaGVyZS4gSXQgc2VlbXMgYHRyeV90b191bm1hcF9vbmVgIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3Igbm9uLWh1Z2V0bGIgZm9saW9zLCB3aGljaCBtYWtlcyBzZW5zZS4gSSByZWNhbGwgdGhhdCBgdHJ5X3RvX3VubWFwKClgIGhhcyBhIGNoZWNrIGZvciBgZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKWA7IGl0JiMzOTtzIHRoZSBnYXRld2F5LCBzbyB0byBzcGVhay4gSWYgaXQgKmlzKiBhIGh1Z2UgcGFnZSBmb2xpbywgdGhlIGNvZGUgYnJhbmNoZXMgdG8gYHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZWAgaW5zdGVhZC4KCkFoYSEgVGhhdCBrZXkgcG9pbnQgaGVscHMgdG8gc2VwYXJhdGUgY29uY2VybnMuIFNvIGB0cnlfdG9fdW5tYXBfb25lYCBoYW5kbGVzIHRoZSAmIzM0O25vcm1hbCYjMzQ7IHVubWFwcGluZyBjYXNlcywgd2hpbGUgYHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZWAgZGVhbHMgd2l0aCB0aGUgc3BlY2lhbCBjYXNlcyBvZiBodWdlIHBhZ2VzLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhhdCBgdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lYCBwYXRoIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRob3NlIG92ZXJzaXplZCBwYWdlcy4gSSB3b25kZXIgd2hhdCB0aGUgcG9pc29uIGNoZWNrIHRoZXJlIGlzIGZvcj8gVGhhdCYjMzk7cyB3aGF0IEkgd2FudCB0byBsZWFybiBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcm1hcC5jPTE5NTA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTE5ODMtXG5tbS9ybWFwLmM6MTk4NDpzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3JtYXAuYy0xOTg1LVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4tLVxubW0vcm1hcC5jPTI0NDA9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jLTI0NDMtXHRcdC5ybWFwX29uZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgP1xubW0vcm1hcC5jOjI0NDQ6XHRcdFx0XHR0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUgOiB0cnlfdG9fdW5tYXBfb25lLFxubW0vcm1hcC5jLTI0NDUtXHRcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZWAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiBgbW0vcm1hcC5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGEgcG9pc29uZWQgaHVnZXRsYiBwYWdlIGR1cmluZyB1bm1hcHBpbmcuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgcm1hcCBhbmQgdGhlIGh1Z2V0bGIgbWVjaGFuaXNtcyB3aGVuIGRlYWxpbmcgd2l0aCB0aGlzIGVycm9yIGNvbmRpdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBsb2dpYyB0aGF0IGlzb2xhdGVzIHRoZSBwb2lzb25lZCBwYWdlLCBwb3RlbnRpYWxseSBtYXJrcyB0aGUgUFRFIG9yIFBNRSBhcyBpbnZhbGlkLCBhbmQgcGVyaGFwcyBpbml0aWF0ZXMgYSBmYXVsdCBvciBzb21lIG90aGVyIGNvcnJlY3RpdmUgYWN0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcywgc3BlY2lmaWNhbGx5IGlmIGFueSBsb2NrcyBhcmUgaGVsZCwgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCB1bm1hcCBwcm9jZXNzLiBBbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgY2FjaGUsIGlmIHByZXNlbnQsIGFyZSBhbHNvIHNvbWV0aGluZyB0byBub3RlLiBJIHdhbnQgdG8gc2VlIHRoZSBlcnJvciBoYW5kbGluZzsgaXMgdGhlcmUgYSByZXR1cm4gdmFsdWUgdGhhdCBzaWduYWxzIHN1Y2Nlc3Mgb3IgZmFpbHVyZSwgYW5kIHdoYXQgYXJlIHRoZSBwb3NzaWJsZSBmYWlsdXJlIHBhdGhzPyBIb3BlZnVsbHksIGl0IGlzIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk4MDpcdFx0cmV0dXJuIGZvbGlvX3B0ZV9iYXRjaF9mbGFncyhmb2xpbywgdm1hLCBwdm13LVx1MDAzZXB0ZSwgXHUwMDI2cHRlLCBtYXhfbnIsXG4xOTgxOlx0XHRcdFx0XHQgICAgIEZQQl9SRVNQRUNUX1dSSVRFIHwgRlBCX1JFU1BFQ1RfU09GVF9ESVJUWSk7XG4xOTgyOlx0fVxuMTk4MzpcdFxuMTk4NDpcdHN0YXRpYyBib29sIHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuMTk4NTpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4xOTg2Olx0e1xuMTk4NzpcdFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIDApO1xuMTk4ODpcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xuMTk4OTpcdFx0Y29uc3QgZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xuMTk5MDpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4xOTkxOlx0XHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xuMTk5MjpcdFx0Ym9vbCByZXQgPSB0cnVlO1xuMTk5MzpcdFx0cHRlX3QgcHRldmFsO1xuMTk5NDpcdFxuMTk5NTpcdFx0LypcbjE5OTY6XHRcdCAqIFRoZSB0cnlfdG9fdW5tYXAoKSBpcyBvbmx5IHBhc3NlZCBhIGh1Z2V0bGIgZm9saW8gaW4gdGhlIGNhc2VcbjE5OTc6XHRcdCAqIHdoZXJlIHRoZSBodWdldGxiIGZvbGlvIGlzIHBvaXNvbmVkLlxuMTk5ODpcdFx0ICovXG4xOTk5Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pLCBmb2xpbyk7XG4yMDAwOlx0XHRWTV9XQVJOX09OX09OQ0UoIShmbGFncyBcdTAwMjYgVFRVX0hXUE9JU09OKSk7XG4yMDAxOlx0XG4yMDAyOlx0XHRyYW5nZS5lbmQgPSB2bWFfYWRkcmVzc19lbmQoXHUwMDI2cHZtdyk7XG4yMDAzOlx0XHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVx1MDAzZXZtX21tLFxuMjAwNDpcdFx0XHRcdFx0YWRkcmVzcywgcmFuZ2UuZW5kKTtcbjIwMDU6XHRcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQpO1xuMjAwNjpcdFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuMjAwNzpcdFxuMjAwODpcdFx0LyogVGhlcmUgaXMgb25seSBhIHNpbmdsZSBtYXBwaW5nIGluIGEgVk1BLiAqL1xuMjAwOTpcdFx0aWYgKCFwYWdlX3ZtYV9tYXBwZWRfd2FsayhcdTAwMjZwdm13KSlcbjIwMTA6XHRcdFx0Z290byByYW5nZV9lbmQ7XG4yMDExOlx0XG4yMDEyOlx0XHRWTV9XQVJOX09OX09OQ0UoYWRkcmVzcyAhPSBwdm13LmFkZHJlc3MpO1xuMjAxMzpcdFxuMjAxNDpcdFx0cHRldmFsID0gaHVnZV9wdGVwX2dldChtbSwgYWRkcmVzcywgcHZtdy5wdGUpO1xuMjAxNTpcdFx0Vk1fV0FSTl9PTl9PTkNFKCFwdGVfcHJlc2VudChwdGV2YWwpKTtcbjIwMTY6XHRcdFZNX1dBUk5fT05fT05DRShwdGVfcGZuKHB0ZXZhbCkgIT0gZm9saW9fcGZuKGZvbGlvKSk7XG4yMDE3Olx0XG4yMDE4Olx0XHQvKlxuMjAxOTpcdFx0ICogaHVnZV9wbWRfdW5zaGFyZSBtYXkgdW5tYXAgYW4gZW50aXJlIFBNRCBwYWdlLiBUaGVyZSBpcyBubyB3YXkgb2ZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMxNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEh1Z2V0bGIgSW50ZXJhY3Rpb24gaW4gYHRyeV90b191bm1hcF9vbmVgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHJlY2VudCBjaGFuZ2UgaW4gYHRyeV90b191bm1hcF9vbmVgIGFuZCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIHJlbW92ZWQgYSBjb25kaXRpb25hbCBjaGVjayBmb3IgYGZvbGlvX3Rlc3RfaHVnZXRsYmAuIFByZXZpb3VzbHksIHRoZSBjb2RlIGRldGVybWluZWQgaWYgaXQgd2FzIGEgSHVnZVRMQiBmb2xpbyBhbmQgdXNlZCBgaHVnZV9wdGVwX2dldGAgYWNjb3JkaW5nbHkuIE5vdywgaXQmIzM5O3MganVzdCBhIGRpcmVjdCBgcHRlcF9nZXRgLiBJIGdldCB0aGUgZmVlbGluZyBzb21ldGhpbmcgaGFzIGJlZW4gY2hhbmdlZC4KCk15IGZpcnN0IHRob3VnaHQ6IGlzIGB0cnlfdG9fdW5tYXBfb25lYCBldmVuICpjYWxsZWQqIHdpdGggSHVnZVRMQiBmb2xpb3MgYW55bW9yZT8gSXQgc2VlbXMgbGlrZSB0aGlzIHJlbW92YWwgbWlnaHQgbm90IGhhdmUgaGFkIHRoYXQgYmlnIGFuIGVmZmVjdC4gSXQmIzM5O3MgYSBrZXkgcXVlc3Rpb24uCgpUbyBmaWd1cmUgdGhpcyBvdXQsIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgc291cmNlLiBJIG5lZWQgdG8gYmUgc3VyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdpdGhpbiBgbW0vcm1hcC5jYCwgZm9jdXNpbmcgb24gdGhlIGFyZWEgYXJvdW5kIHRoZSBgdHJ5X3RvX3VubWFwX29uZWAgZGVmaW5pdGlvbiwgcm91Z2hseSBsaW5lcyAyMjAwIHRvIDI0NDAgb3Igc28uIEkmIzM5O2xsIHNlYXJjaCBmb3IgYW55IHJlZmVyZW5jZXMgdG8gYGZvbGlvX3Rlc3RfaHVnZXRsYmAuIElmIHRoZXJlIGFyZSBubyBjYWxscyB0byB0aGF0IGZ1bmN0aW9uIHdpdGhpbiB0aGF0IGNvZGUgYmxvY2ssIHRoZW4gaXQmIzM5O3MgaGlnaGx5IHVubGlrZWx5IHRoYXQgYHRyeV90b191bm1hcF9vbmVgIGV2ZXIgcHJvY2Vzc2VzIGEgSHVnZVRMQiBmb2xpbywgYW5kIHRoZSBjaGFuZ2UgaXMgcHJvYmFibHkgZmluZS4gSWYgSSAqZG8qIGZpbmQgaXQsIHdlbGwsIHRoZW4gSSBoYXZlIHNvbWV0aGluZyB0byBsb29rIGF0LiBOb3csIHdoZXJlIGlzIHRoZSBncmVwPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjMyMDpcdFx0XHRcdGVuZF9hZGRyID0gYWRkcmVzcyAmIzQzOyBucl9wYWdlcyAqIFBBR0VfU0laRTtcbjIzMjE6XHRcdFx0XHRmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIGFkZHJlc3MsIGVuZF9hZGRyKTtcbjIzMjI6XHRcbjIzMjM6XHRcdFx0XHQvKiBOdWtlIHRoZSBwYWdlIHRhYmxlIGVudHJ5LiAqL1xuMjMyNDpcdFx0XHRcdHB0ZXZhbCA9IGdldF9hbmRfY2xlYXJfcHRlcyhtbSwgYWRkcmVzcywgcHZtdy5wdGUsIG5yX3BhZ2VzKTtcbjIzMjU6XHRcdFx0XHQvKlxuMjMyNjpcdFx0XHRcdCAqIFdlIGNsZWFyIHRoZSBQVEUgYnV0IGRvIG5vdCBmbHVzaCBzbyBwb3RlbnRpYWxseVxuMjMyNzpcdFx0XHRcdCAqIGEgcmVtb3RlIENQVSBjb3VsZCBzdGlsbCBiZSB3cml0aW5nIHRvIHRoZSBmb2xpby5cbjIzMjg6XHRcdFx0XHQgKiBJZiB0aGUgZW50cnkgd2FzIHByZXZpb3VzbHkgY2xlYW4gdGhlbiB0aGVcbjIzMjk6XHRcdFx0XHQgKiBhcmNoaXRlY3R1cmUgbXVzdCBndWFyYW50ZWUgdGhhdCBhIGNsZWFyLVx1MDAzZWRpcnR5XG4yMzMwOlx0XHRcdFx0ICogdHJhbnNpdGlvbiBvbiBhIGNhY2hlZCBUTEIgZW50cnkgaXMgd3JpdHRlbiB0aHJvdWdoXG4yMzMxOlx0XHRcdFx0ICogYW5kIHRyYXBzIGlmIHRoZSBQVEUgaXMgdW5tYXBwZWQuXG4yMzMyOlx0XHRcdFx0ICovXG4yMzMzOlx0XHRcdFx0aWYgKHNob3VsZF9kZWZlcl9mbHVzaChtbSwgZmxhZ3MpKVxuMjMzNDpcdFx0XHRcdFx0c2V0X3RsYl91YmNfZmx1c2hfcGVuZGluZyhtbSwgcHRldmFsLCBhZGRyZXNzLCBlbmRfYWRkcik7XG4yMzM1Olx0XHRcdFx0ZWxzZVxuMjMzNjpcdFx0XHRcdFx0Zmx1c2hfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgZW5kX2FkZHIpO1xuMjMzNzpcdFx0XHRcdGlmIChwdGVfZGlydHkocHRldmFsKSlcbjIzMzg6XHRcdFx0XHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuMjMzOTpcdFx0XHR9IGVsc2Uge1xuMjM0MDpcdFx0XHRcdHB0ZV9jbGVhcihtbSwgYWRkcmVzcywgcHZtdy5wdGUpO1xuMjM0MTpcdFx0XHR9XG4yMzQyOlx0XG4yMzQzOlx0XHRcdC8qXG4yMzQ0Olx0XHRcdCAqIE5vdyB0aGUgcHRlIGlzIGNsZWFyZWQuIElmIHRoaXMgcHRlIHdhcyB1ZmZkLXdwIGFybWVkLFxuMjM0NTpcdFx0XHQgKiB3ZSBtYXkgd2FudCB0byByZXBsYWNlIGEgbm9uZSBwdGUgd2l0aCBhIG1hcmtlciBwdGUgaWZcbjIzNDY6XHRcdFx0ICogaXQmIzM5O3MgZmlsZS1iYWNrZWQsIHNvIHdlIGRvbiYjMzk7dCBsb3NlIHRoZSB0cmFja2luZyBpbmZvLlxuMjM0NzpcdFx0XHQgKi9cbjIzNDg6XHRcdFx0Y29uZF9pbnN0YWxsX3VmZmRfd3BfcHRlcyh2bWEsIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsXG4yMzQ5Olx0XHRcdFx0XHRcdCAgbnJfcGFnZXMpO1xuMjM1MDpcdFxuMjM1MTpcdFx0XHQvKiBVcGRhdGUgaGlnaCB3YXRlcm1hcmsgYmVmb3JlIHdlIGxvd2VyIHJzcyAqL1xuMjM1MjpcdFx0XHR1cGRhdGVfaGl3YXRlcl9yc3MobW0pO1xuMjM1MzpcdFxuMjM1NDpcdFx0XHQvKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIG9ubHkgcmVmcyBvcmRlci0wIGZvbGlvcyAqL1xuMjM1NTpcdFx0XHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgVFRVX0hXUE9JU09OKSkge1xuMjM1NjpcdFx0XHRcdHB0ZXZhbCA9IHN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShwYWdlKSk7XG4yMzU3Olx0XHRcdFx0ZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTtcbjIzNTg6XHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbjIzNTk6XHRcdFx0fSBlbHNlIGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkgXHUwMDI2XHUwMDI2IHB0ZV91bnVzZWQocHRldmFsKSBcdTAwMjZcdTAwMjZcbjIzNjA6XHRcdFx0XHQgICAhdXNlcmZhdWx0ZmRfYXJtZWQodm1hKSkge1xuMjM2MTpcdFx0XHRcdC8qXG4yMzYyOlx0XHRcdFx0ICogVGhlIGd1ZXN0IGluZGljYXRlZCB0aGF0IHRoZSBwYWdlIGNvbnRlbnQgaXMgb2Ygbm9cbjIzNjM6XHRcdFx0XHQgKiBpbnRlcmVzdCBhbnltb3JlLiBTaW1wbHkgZGlzY2FyZCB0aGUgcHRlLCB2bXNjYW5cbjIzNjQ6XHRcdFx0XHQgKiB3aWxsIHRha2UgY2FyZSBvZiB0aGUgcmVzdC5cbjIzNjU6XHRcdFx0XHQgKiBBIGZ1dHVyZSByZWZlcmVuY2Ugd2lsbCB0aGVuIGZhdWx0IGluIGEgbmV3IHplcm9cbjIzNjY6XHRcdFx0XHQgKiBwYWdlLiBXaGVuIHVzZXJmYXVsdGZkIGlzIGFjdGl2ZSwgd2UgbXVzdCBub3QgZHJvcFxuMjM2NzpcdFx0XHRcdCAqIHRoaXMgcGFnZSB0aG91Z2gsIGFzIGl0cyBtYWluIHVzZXIgKHBvc3Rjb3B5XG4yMzY4Olx0XHRcdFx0ICogbWlncmF0aW9uKSB3aWxsIG5vdCBleHBlY3QgdXNlcmZhdWx0cyBvbiBhbHJlYWR5XG4yMzY5Olx0XHRcdFx0ICogY29waWVkIHBhZ2VzLlxuMjM3MDpcdFx0XHRcdCAqL1xuMjM3MTpcdFx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKGZvbGlvKSk7XG4yMzcyOlx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xuMjM3MzpcdFx0XHRcdGlmICghdHR1X2Fub25fZm9saW8odm1hLCBmb2xpbywgcGFnZSwgYWRkcmVzcyxcbjIzNzQ6XHRcdFx0XHRcdFx0ICAgIHB2bXcucHRlLCBwdGV2YWwsIG5yX3BhZ2VzKSkge1xuMjM3NTpcdFx0XHRcdFx0c2V0X3B0ZXMobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwsIG5yX3BhZ2VzKTtcbjIzNzY6XHRcdFx0XHRcdGdvdG8gd2Fsa19hYm9ydDtcbjIzNzc6XHRcdFx0XHR9XG4yMzc4Olx0XG4yMzc5Olx0XHRcdFx0Z290byBmaW5pc2hfdW5tYXA7XG4yMzgwOlx0XHRcdH0gZWxzZSB7XG4yMzgxOlx0XHRcdFx0LypcbjIzODI6XHRcdFx0XHQgKiBUaGlzIGlzIGEgbG9ja2VkIGZpbGUtYmFja2VkIGZvbGlvLFxuMjM4MzpcdFx0XHRcdCAqIHNvIGl0IGNhbm5vdCBiZSByZW1vdmVkIGZyb20gdGhlIHBhZ2VcbjIzODQ6XHRcdFx0XHQgKiBjYWNoZSBhbmQgcmVwbGFjZWQgYnkgYSBuZXcgZm9saW8gYmVmb3JlXG4yMzg1Olx0XHRcdFx0ICogbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kLCBzbyBub1xuMjM4NjpcdFx0XHRcdCAqIGNvbmN1cnJlbnQgdGhyZWFkIG1pZ2h0IHVwZGF0ZSBpdHMgcGFnZSB0YWJsZVxuMjM4NzpcdFx0XHRcdCAqIHRvIHBvaW50IGF0IGEgbmV3IGZvbGlvIHdoaWxlIGEgZGV2aWNlIGlzXG4yMzg4Olx0XHRcdFx0ICogc3RpbGwgdXNpbmcgdGhpcyBmb2xpby5cbjIzODk6XHRcdFx0XHQgKlxuMjM5MDpcdFx0XHRcdCAqIFNlZSBEb2N1bWVudGF0aW9uL21tL21tdV9ub3RpZmllci5yc3RcbjIzOTE6XHRcdFx0XHQgKi9cbjIzOTI6XHRcdFx0XHRhZGRfbW1fY291bnRlcihtbSwgbW1fY291bnRlcl9maWxlKGZvbGlvKSwgLW5yX3BhZ2VzKTtcbjIzOTM6XHRcdFx0fVxuMjM5NDpcdGZpbmlzaF91bm1hcDpcbjIzOTU6XHRcdFx0Zm9saW9fcmVtb3ZlX3JtYXBfcHRlcyhmb2xpbywgcGFnZSwgbnJfcGFnZXMsIHZtYSk7XG4yMzk2Olx0XHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbjIzOTc6XHRcdFx0XHRtbG9ja19kcmFpbl9sb2NhbCgpO1xuMjM5ODpcdFx0XHRmb2xpb19wdXRfcmVmcyhmb2xpbywgbnJfcGFnZXMpO1xuMjM5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI0MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRGVhZCBDb2RlIGluIHRoZSBIdWdlVExCIFVubWFwcGluZyBQYXRoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBzb21lIHBvdGVudGlhbGx5IGRlYWQgY29kZSByZWxhdGVkIHRvIEh1Z2VUTEIgZm9saW8gdW5tYXBwaW5nLiBJIHJlbWVtYmVyIHRoYXQgdGhlIGB0cnlfdG9fdW5tYXBgIGZ1bmN0aW9uIHdhcyBzcGxpdCwgYW5kIHRoZSBoYW5kbGluZyBvZiBIdWdlVExCIGZvbGlvcyB3YXMgc3BlY2lmaWNhbGx5IGRpcmVjdGVkIHRvIGB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmVgLiBIb3dldmVyLCBJIG5vdGljZWQgYSBsZWZ0b3ZlciBjaGVjayB3aXRoaW4gYHRyeV90b191bm1hcF9vbmVgOiBhbiBgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpYCBjb25kaXRpb24uIFRoaXMgcmFpc2VkIGEgcmVkIGZsYWcuIElzIHRoaXMgZXZlbiByZWxldmFudCBhbnltb3JlPwoKTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoaXMgY2hlY2sgaXMgbm93IGNvbXBsZXRlbHkgcmVkdW5kYW50IGJlY2F1c2UgYHRyeV90b191bm1hcF9vbmVgIHNob3VsZG4mIzM5O3QgZXZlciBiZSBjYWxsZWQgb24gYSBIdWdlVExCIGZvbGlvIGRpcmVjdGx5IGFmdGVyIHRoZSBzcGxpdC4gQnV0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4KCkZpcnN0LCBJIHNlYXJjaGVkIHRoZSBjb2RlYmFzZSB0byBjb25maXJtIGlmIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBhY3R1YWxseSBjYWxsZWQgb24gSHVnZVRMQiBmb2xpb3MuIE15IGluaXRpYWwgZ3JlcCByZXN1bHRzIHdlcmUgZnJvbSBgbW0vZmlsZW1hcC5jYCwgYG1tL21lbW9yeS1mYWlsdXJlLmNgLCBgbW0vbWxvY2suY2AsIGFuZCBgbW0vcm1hcC5jYCAtIGFsbCByZWxhdGVkIHRvIGNvbW1lbnRzIQoKTG9va2luZyBhdCB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vcm1hcC5jYCwgdGhlIGZvbGxvd2luZyBpcyByZXZlYWxlZDoKCmBgYGMKbW0vcm1hcC5jOjIyMDE6IHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoLi4uKQptbS9ybWFwLmM6MjQ0NDogLnJtYXBfb25lID0gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSA/IHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZSA6IHRyeV90b191bm1hcF9vbmUsCmBgYAoKU28gYHRyeV90b191bm1hcF9vbmVgIGlzIG5vdCByZWZlcmVuY2VkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGUsIGFuZCBpbiBgdHJ5X3RvX3VubWFwYDoKCmBgYGMKdm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpCnsKCXN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7CgkJLnJtYXBfb25lID0gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSA/CgkJCQl0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUgOiB0cnlfdG9fdW5tYXBfb25lLAoJCS5hcmcgPSAodm9pZCAqKWZsYWdzLAoJfTsKYGBgCgpUaGlzIGNvbmZpcm1zIG15IHN1c3BpY2lvbi4gVGhlIGB0cnlfdG9fdW5tYXBgIGZ1bmN0aW9uIHVzZXMgYHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZWAgd2hlbiB0aGUgZm9saW8gKmlzKiBhIEh1Z2VUTEIuIENvbnNlcXVlbnRseSwgYHRyeV90b191bm1hcF9vbmVgIGlzICpuZXZlciogY2FsbGVkIHdoZW4gYGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbylgIGlzIHRydWUuIFRoZXJlZm9yZSwgdGhlIGBpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlgIGNoZWNrIGluc2lkZSBgdHJ5X3RvX3VubWFwX29uZWAgaXMgYWx3YXlzIGdvaW5nIHRvIGV2YWx1YXRlIHRvIGZhbHNlISBUaGlzIGlzIGRlYWQgY29kZSwgcmlwZSBmb3IgcmVtb3ZhbC4KCk5vdywgb3V0IG9mIGFuIGFidW5kYW5jZSBvZiBjYXV0aW9uLCBJIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayBhIHNpbWlsYXIgcmVsYXRlZCBmdW5jdGlvbiwgc3VjaCBhcyBgdHJ5X3RvX21pZ3JhdGVfb25lYCBpbiBgdHJ5X3RvX21pZ3JhdGVgLiBMZXQmIzM5O3MgaGF2ZSBhIHF1aWNrIGxvb2suLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX21pZ3JhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0zMTg4PXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzM1Mi1cdFx0ICogSW4gY2FzZSB3ZSBjYW5ub3QgY2xlYXIgUGFnZUFub25FeGNsdXNpdmUoKSwgc3BsaXQgdGhlIFBNRFxubW0vaHVnZV9tZW1vcnkuYzozMzUzOlx0XHQgKiBvbmx5IGFuZCBsZXQgdHJ5X3RvX21pZ3JhdGVfb25lKCkgZmFpbCBsYXRlci5cbm1tL2h1Z2VfbWVtb3J5LmMtMzM1NC1cdFx0ICpcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM1Mzg9c3RhdGljIHZvaWQgdW5tYXBfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM1NTMtXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcbm1tL2h1Z2VfbWVtb3J5LmM6MzU1NDpcdFx0dHJ5X3RvX21pZ3JhdGUoZm9saW8sIHR0dV9mbGFncyk7XG5tbS9odWdlX21lbW9yeS5jLTM1NTUtXHRlbHNlXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zNjM2PXN0YXRpYyB2b2lkIHJlbWFwX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBuciwgaW50IGZsYWdzKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzYzOS1cbm1tL2h1Z2VfbWVtb3J5LmM6MzY0MDpcdC8qIElmIHVubWFwX2ZvbGlvKCkgdXNlcyB0cnlfdG9fbWlncmF0ZSgpIG9uIGZpbGUsIHJlbW92ZSB0aGlzIGNoZWNrICovXG5tbS9odWdlX21lbW9yeS5jLTM2NDEtXHRpZiAoIWZvbGlvX3Rlc3RfYW5vbihmb2xpbykpXG4tLVxubW0vbWlncmF0ZS5jPTEyMTM9c3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX3VubWFwKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTEyODMtXHQvKlxubW0vbWlncmF0ZS5jOjEyODQ6XHQgKiBCeSB0cnlfdG9fbWlncmF0ZSgpLCBzcmMtXHUwMDNlbWFwY291bnQgZ29lcyBkb3duIHRvIDAgaGVyZS4gSW4gdGhpcyBjYXNlLFxubW0vbWlncmF0ZS5jLTEyODUtXHQgKiB3ZSBjYW5ub3Qgbm90aWNlIHRoYXQgYW5vbl92bWEgaXMgZnJlZWQgd2hpbGUgd2UgbWlncmF0ZSBhIHBhZ2UuXG4tLVxubW0vbWlncmF0ZS5jLTEzMzctXHRcdFx0ICAgICAgICFmb2xpb190ZXN0X2tzbShzcmMpIFx1MDAyNlx1MDAyNiAhYW5vbl92bWEsIHNyYyk7XG5tbS9taWdyYXRlLmM6MTMzODpcdFx0dHJ5X3RvX21pZ3JhdGUoc3JjLCBtb2RlID09IE1JR1JBVEVfQVNZTkMgPyBUVFVfQkFUQ0hfRkxVU0ggOiAwKTtcbm1tL21pZ3JhdGUuYy0xMzM5LVx0XHRvbGRfZm9saW9fc3RhdGUgfD0gRk9MSU9fV0FTX01BUFBFRDtcbi0tXG5tbS9taWdyYXRlLmM9MTQ4MD1zdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2V0bGJfZm9saW8obmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMTU0NC1cbm1tL21pZ3JhdGUuYzoxNTQ1Olx0XHR0cnlfdG9fbWlncmF0ZShzcmMsIHR0dSk7XG5tbS9taWdyYXRlLmMtMTU0Ni1cdFx0d2FzX21hcHBlZCA9IDE7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0yNDU9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTQwNy1cdFx0ICogb3B0aW1pc2F0aW9uIHRvIGF2b2lkIHdhbGtpbmcgdGhlIHJtYXAgbGF0ZXIgd2l0aFxubW0vbWlncmF0ZV9kZXZpY2UuYzo0MDg6XHRcdCAqIHRyeV90b19taWdyYXRlKCkuXG5tbS9taWdyYXRlX2RldmljZS5jLTQwOS1cdFx0ICovXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz01NzE9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfdW5tYXAodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy02MTktXHRcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKVxubW0vbWlncmF0ZV9kZXZpY2UuYzo2MjA6XHRcdFx0dHJ5X3RvX21pZ3JhdGUoZm9saW8sIDApO1xubW0vbWlncmF0ZV9kZXZpY2UuYy02MjEtXG4tLVxubW0vcm1hcC5jPTI0NDA9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jLTI0NjEtICovXG5tbS9ybWFwLmM6MjQ2MjpzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9ybWFwLmMtMjQ2My1cdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcbi0tXG5tbS9ybWFwLmMtMjQ3Ny1cdCAqIGluIGJldHdlZW4gaXRzIHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKCkgYW5kIGZvbGlvX3JlbW92ZV9ybWFwXyooKSxcbm1tL3JtYXAuYzoyNDc4Olx0ICogdHJ5X3RvX21pZ3JhdGUoKSBtYXkgcmV0dXJuIGJlZm9yZSBmb2xpb19tYXBwZWQoKSBoYXMgYmVjb21lIGZhbHNlLFxubW0vcm1hcC5jLTI0NzktXHQgKiBpZiBwYWdlIHRhYmxlIGxvY2tpbmcgaXMgc2tpcHBlZDogdXNlIFRUVV9TWU5DIHRvIHdhaXQgZm9yIHRoYXQuXG4tLVxubW0vcm1hcC5jLTI3ODEtLyoqXG5tbS9ybWFwLmM6Mjc4MjogKiB0cnlfdG9fbWlncmF0ZSAtIHRyeSB0byByZXBsYWNlIGFsbCBwYWdlIHRhYmxlIG1hcHBpbmdzIHdpdGggc3dhcCBlbnRyaWVzXG5tbS9ybWFwLmMtMjc4My0gKiBAZm9saW86IHRoZSBmb2xpbyB0byByZXBsYWNlIHBhZ2UgdGFibGUgZW50cmllcyBmb3Jcbi0tXG5tbS9ybWFwLmMtMjc4OC0gKi9cbm1tL3JtYXAuYzoyNzg5OnZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG5tbS9ybWFwLmMtMjc5MC17XG5tbS9ybWFwLmMtMjc5MS1cdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XG5tbS9ybWFwLmM6Mjc5MjpcdFx0LnJtYXBfb25lID0gdHJ5X3RvX21pZ3JhdGVfb25lLFxubW0vcm1hcC5jLTI3OTMtXHRcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc1OAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTdWJ0bGUgTWVtb3J5IE1hbmFnZW1lbnQgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGludHVpdGlvbiBpcyB0aW5nbGluZy4gSXQmIzM5O3MgYSBzZWVtaW5nbHkgbWlub3IgY2hhbmdlIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gZm9saW8gdW5tYXBwaW5nLiBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4KCldlIGhhdmUgdGhlc2UgdHdvIGtleSBmdW5jdGlvbnMgaW4gcGxheTogYHRyeV90b19taWdyYXRlYCBhbmQgYHRyeV90b191bm1hcGAuIEluIGB0cnlfdG9fbWlncmF0ZWAsIHRoZSBjb2RlIHBhdGggaXMgc3RyYWlnaHRmb3J3YXJkOiBgcndjLnJtYXBfb25lID0gdHJ5X3RvX21pZ3JhdGVfb25lO2AuIFRoaXMgaGFuZGxlcyBib3RoIGh1Z2UgcGFnZXMgKGh1Z2V0bGIpIGFuZCByZWd1bGFyIGZvbGlvcy4gSG93ZXZlciwgYHRyeV90b191bm1hcGAgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gSGVyZSwgdGhlIGFzc2lnbm1lbnQgaXMgY29uZGl0aW9uYWw6IGByd2Mucm1hcF9vbmUgPSBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pID8gdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lIDogdHJ5X3RvX3VubWFwX29uZTtgLiBTbywgZGVwZW5kaW5nIG9uIGlmIGl0JiMzOTtzIGEgaHVnZSBwYWdlIG9yIG5vdCwgYSBkaWZmZXJlbnQgY2FsbGJhY2sgaXMgY2hvc2VuLgoKTm93LCB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gdGFyZ2V0cyBhIHJlZHVuZGFudCBjaGVjayAqaW5zaWRlKiBgdHJ5X3RvX3VubWFwX29uZWAuIEl0IHdhcyBkb2luZzogYGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSBwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KC4uLikgZWxzZSBwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7YC4gVGhlIHBhdGNoIHNpbXBseSByZW1vdmVzIHRoZSBgaWZgIGFuZCB1c2VzIGBwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7YC4gV2hpY2ggbG9va3MgZmluZSBidXQuLi4KCk15IGZpcnN0IGluc3RpbmN0IGlzICphbHdheXMqIHRvIHZlcmlmeSB0aGVyZSBpc24mIzM5O3Qgc29tZSB1bmZvcmVzZWVuIGJlaGF2aW9yYWwgY2hhbmdlLiBMZXQmIzM5O3MgZG8gYSBsaXR0bGUgZGVlcCBkaXZlLCBzdGFydGluZyB3aXRoIHRoZSBnaXQgbG9ncy4gSXMgdGhlcmUgYSBjb21taXQgbWVzc2FnZSBvciBoaXN0b3J5IHRoYXQgZXhwbGFpbnMgdGhpcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqLiBJZiBub3QsIEkmIzM5O2xsIG5lZWQgdG8gZG8gc29tZSBtb3JlIGFuYWx5c2lzLgoKU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyAqd2h5KiB0aGF0IHJlZHVuZGFudCBjaGVjayB3YXMgdGhlcmUgaW4gdGhlIGZpcnN0IHBsYWNlPyBCZWNhdXNlLCBpbiAqbXkqIG1pbmQsIGBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pYCBpcyBBTFdBWVMgZ29pbmcgdG8gYmUgZmFsc2UgaW5zaWRlIGB0cnlfdG9fdW5tYXBfb25lYC4gVGhlIHByZXZpb3VzIGxvZ2ljIHNob3VsZCBtYWtlIHRoYXQgY2xlYXIuIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBvbmx5IGNhbGxlZCBpZiBpdCBpc24mIzM5O3QgYSBodWdlIHBhZ2UgaW4gdGhlIGZpcnN0IHBsYWNlLgoKU28sIGxldCYjMzk7cyBiYWNrIHVwIGFuZCBjb25maXJtLiBJcyB0aGVyZSAqYW55KiBzY2VuYXJpbyB3aGVyZSBgdHJ5X3RvX3VubWFwX29uZWAgaXMgKmV2ZXIqIGNhbGxlZCB3aXRoIGEgaHVnZSBwYWdlIGZvbGlvPyBUaGUgbG9naWMgSSYjMzk7bSBmYW1pbGlhciB3aXRoIG1ha2VzIG1lIHRoaW5rIG5vLiBJJiMzOTtsbCBzZWFyY2ggdGhlIGNvZGViYXNlIHRvIHNlZSB3aGVyZSBgdHJ5X3RvX3VubWFwX29uZWAgaXMgdXNlZC4gUXVpY2sgZ3JlcCBhY3Jvc3MgYG1tL2AgZGlyZWN0b3J5IHJldmVhbHMgaXQgaXMgb25seSBjYWxsZWQgaW4gYG1tL3JtYXAuY2AgYXQgbGluZSAyNDQ0LiBMZXQmIzM5O3MgY2hlY2sgdGhlIGVudGlyZSByZXBvIHRvIG1ha2Ugc3VyZSB0aGF0IGlzIGFjY3VyYXRlLgpgYGBjCnZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKQp7CglzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0gewoJCS5ybWFwX29uZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgPwoJCQkJdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lIDogdHJ5X3RvX3VubWFwX29uZSwKCQkuYXJnID0gKHZvaWQgKilmbGFncywKYGBgCk9rYXksIGB0cnlfdG9fdW5tYXBfb25lYCAqaXRzZWxmKiBpcyBjYWxsZWQgYmFzZWQgb24gdGhlIGBmb2xpb190ZXN0X2h1Z2V0bGJgIGNoZWNrLiBUaGlzIGlzICpleGFjdGx5KiB3aGF0IEkgZXhwZWN0ZWQsIGFuZCBpdCBjb25maXJtcyB0aGUgcmVkdW5kYW5jeS4gV2l0aCB0aGlzIGRlZXBlciB1bmRlcnN0YW5kaW5nIEkgY2FuIHNheSB3aXRoIGNvbmZpZGVuY2UgdGhhdCB0aGlzIHBhdGNoIGlzIGNvcnJlY3QsIHJlbW92aW5nIGRlYWQgY29kZSB0aGF0IGNvdWxkbiYjMzk7dCBwb3NzaWJseSBiZSBoaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b191bm1hcF9vbmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdD00NDA9VGhlcmUgaXMgYWxzbyBhIGZpbGUtc3lzdGVtIHNwZWNpZmljIGxvY2sgb3JkZXJpbmcgY29tbWVudCBsb2NhdGVkIGF0IHRoZSB0b3Agb2Zcbi0tXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTQ3Ni0gIC1cdTAwM2VwYWdlX3RhYmxlX2xvY2sgb3IgcHRlX2xvY2tcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6NDc3OiAgICAtXHUwMDNlc3dhcF9sb2NrICAgICAgICAgICAgICAgICAgICAgICAgICh0cnlfdG9fdW5tYXBfb25lKVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo0Nzg6ICAgIC1cdTAwM2Vwcml2YXRlX2xvY2sgICAgICAgICAgICAgICAgICAgICAgKHRyeV90b191bm1hcF9vbmUpXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjQ3OTogICAgLVx1MDAzZWlfcGFnZXMgbG9jayAgICAgICAgICAgICAgICAgICAgICAodHJ5X3RvX3VubWFwX29uZSlcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNDgwLSAgICAtXHUwMDNlbHJ1dmVjLVx1MDAzZWxydV9sb2NrICAgICAgICAgICAgICAgICAgKGZvbGxvd19wYWdlX21hc2stXHUwMDNlbWFya19wYWdlX2FjY2Vzc2VkKVxuLS1cbkRvY3VtZW50YXRpb24vbW0vdW5ldmljdGFibGUtbHJ1LnJzdD01NTU9cm1hcCYjMzk7cyBmb2xpb19yZWZlcmVuY2VkX29uZSgpLCBjYWxsZWQgdmlhIHZtc2NhbiYjMzk7cyBzaHJpbmtfYWN0aXZlX2xpc3QoKSBvclxuRG9jdW1lbnRhdGlvbi9tbS91bmV2aWN0YWJsZS1scnUucnN0OjU1NjpzaHJpbmtfZm9saW9fbGlzdCgpLCBhbmQgcm1hcCYjMzk7cyB0cnlfdG9fdW5tYXBfb25lKCkgY2FsbGVkIHZpYSBzaHJpbmtfZm9saW9fbGlzdCgpLFxuRG9jdW1lbnRhdGlvbi9tbS91bmV2aWN0YWJsZS1scnUucnN0LTU1Ny1jaGVjayBmb3IgKDMpIHBhZ2VzIHN0aWxsIG1hcHBlZCBpbnRvIFZNX0xPQ0tFRCBWTUFzLCBhbmQgY2FsbCBtbG9ja192bWFfZm9saW8oKVxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11Lmg9MTk9dHlwZWRlZiBzdHJ1Y3Qge1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmgtMzMtICogcm9sbG92ZXIgZXZlbnQgKHNlZSBuZXdfY29udGV4dCgpIGFuZCBmbHVzaF9jb250ZXh0KCkpLiBJbiB0aGlzIGNhc2UsXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oOjM0OiAqIGEgY29uY3VycmVudCBUTEJJIChlLmcuIHZpYSB0cnlfdG9fdW5tYXBfb25lKCkgYW5kIHB0ZXBfY2xlYXJfZmx1c2goKSlcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmgtMzUtICogbWF5IHVzZSBhIHN0YWxlIEFTSUQuIFRoaXMgaXMgZmluZSBpbiBwcmluY2lwbGUgYXMgdGhlIG5ldyBBU0lEIGlzXG4tLVxuZnMvbmlsZnMyL2lub2RlLmM9MTc3PXN0YXRpYyBib29sIG5pbGZzX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL25pbGZzMi9pbm9kZS5jLTE4NS1cdC8qXG5mcy9uaWxmczIvaW5vZGUuYzoxODY6XHQgKiBUaGUgcGFnZSBtYXkgbm90IGJlIGxvY2tlZCwgZWcgaWYgY2FsbGVkIGZyb20gdHJ5X3RvX3VubWFwX29uZSgpXG5mcy9uaWxmczIvaW5vZGUuYy0xODctXHQgKi9cbi0tXG5tbS9maWxlbWFwLmMtMTE0LSAqICAtXHUwMDNlcGFnZV90YWJsZV9sb2NrIG9yIHB0ZV9sb2NrXG5tbS9maWxlbWFwLmM6MTE1OiAqICAgIC1cdTAwM2Vzd2FwX2xvY2tcdFx0KHRyeV90b191bm1hcF9vbmUpXG5tbS9maWxlbWFwLmM6MTE2OiAqICAgIC1cdTAwM2Vwcml2YXRlX2xvY2tcdFx0KHRyeV90b191bm1hcF9vbmUpXG5tbS9maWxlbWFwLmM6MTE3OiAqICAgIC1cdTAwM2VpX3BhZ2VzIGxvY2tcdFx0KHRyeV90b191bm1hcF9vbmUpXG5tbS9maWxlbWFwLmMtMTE4LSAqICAgIC1cdTAwM2VscnV2ZWMtXHUwMDNlbHJ1X2xvY2tcdChmb2xsb3dfcGFnZV9tYXNrLVx1MDAzZW1hcmtfcGFnZV9hY2Nlc3NlZClcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzODY9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTcxLVx0ICogZXhhbXBsZSBpcyBhbiBtbG9ja2VkIHBhZ2UsIHdoZXJlIFBHX21sb2NrZWQgaXMgY2xlYXJlZCBieVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTcyOlx0ICogZm9saW9fcmVtb3ZlX3JtYXBfKigpIGluIHRyeV90b191bm1hcF9vbmUoKS4gU28gdG8gZGV0ZXJtaW5lIHBhZ2Vcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU3My1cdCAqIHN0YXR1cyBjb3JyZWN0bHksIHdlIHNhdmUgYSBjb3B5IG9mIHRoZSBwYWdlIGZsYWdzIGF0IHRoaXMgdGltZS5cbi0tXG5tbS9tbG9jay5jPTQ2Nz1zdGF0aWMgaW50IG1sb2NrX2ZpeHVwKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWxvY2suYy01MDItXHQgKiB2bV9mbGFncyBpcyBwcm90ZWN0ZWQgYnkgdGhlIG1tYXBfbG9jayBoZWxkIGluIHdyaXRlIG1vZGUuXG5tbS9tbG9jay5jOjUwMzpcdCAqIEl0JiMzOTtzIG9rYXkgaWYgdHJ5X3RvX3VubWFwX29uZSB1bm1hcHMgYSBwYWdlIGp1c3QgYWZ0ZXIgd2Vcbm1tL21sb2NrLmMtNTA0LVx0ICogc2V0IFZNQV9MT0NLRURfQklULCBwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suXG4tLVxubW0vcm1hcC5jPTIxNzg9c3RhdGljIGJvb2wgdHR1X2Fub25fZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTIyMDAtICovXG5tbS9ybWFwLmM6MjIwMTpzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vcm1hcC5jLTIyMDItXHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4tLVxubW0vcm1hcC5jPTI0NDA9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jLTI0NDMtXHRcdC5ybWFwX29uZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgP1xubW0vcm1hcC5jOjI0NDQ6XHRcdFx0XHR0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUgOiB0cnlfdG9fdW5tYXBfb25lLFxubW0vcm1hcC5jLTI0NDUtXHRcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI5NgoJCQkJCQkJb3V0cHV0OiAxMTgKCQkJCQkJCXRob3VnaHRzOiA5MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IENyaXRlcmlhIGZvciBhIERlYWQgQ29kZSBSZW1vdmFsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRldGVybWluZSBpZiBgdHJ5X3RvX3VubWFwX29uZWAgaXMgZXZlciBjYWxsZWQgYW55d2hlcmUgZWxzZS4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBzdGF0aWMgd2l0aGluIGBtbS9ybWFwLmNgIGFuZCBpcyBvbmx5IHJlZmVyZW5jZWQgb25jZSwgYXMgYC5ybWFwX29uZWAgaW4gYHRyeV90b191bm1hcCgpYCwgYW5kIGNydWNpYWxseSwgaXQmIzM5O3MgZ3VhcmRlZCBieSBgIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbylgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgaW5zaWRlIGB0cnlfdG9fdW5tYXBfb25lKClgLCB0aGUgYGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbylgIGNvbmRpdGlvbiBpcyBBTFdBWVMgZmFsc2UuCgpUaGVyZWZvcmUsIHRoZSBgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpYCBjaGVjayBpbiB0aGF0IGZ1bmN0aW9uIHdhcyBwdXJlIGRlYWQgY29kZS4gUmVtb3ZpbmcgaXQgaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBkb2VzbiYjMzk7dCBjaGFuZ2UgdGhlIGV4ZWN1dGlvbiBmbG93IHdoYXRzb2V2ZXIuCgpOb3csIGxldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBjcml0ZXJpYS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBwYXRjaCBzaG91bGQgcmV0dXJuICYjMzQ7ZmFsc2UmIzM0OyBpZiBpdCBvbmx5IGNvbnRhaW5zIGRvY3VtZW50YXRpb24gY2hhbmdlcywgS2NvbmZpZyBmaWxlIG1vZGlmaWNhdGlvbnMsIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGxvZ2dpbmcgb3IgdHJhY2luZywgY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkb24mIzM5O3QgYWZmZWN0IGV4ZWN1dGlvbiwgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG9yIGNvZGUgaW4gc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUuCgpTbywgdGhlIGtleSBoZXJlIGlzIHdoZXRoZXIgZGVhZCBjb2RlIHJlbW92YWwsIHNwZWNpZmljYWxseSByZWZhY3RvcmluZy9jbGVhbnVwLCBpcyBjb25zaWRlcmVkICYjMzQ7bm9uLWZ1bmN0aW9uYWwmIzM0OyBhY2NvcmRpbmcgdG8gdGhvc2UgcnVsZXMuIEdpdmVuIHRoYXQgdGhpcyBwYXRjaCByZW1vdmVzIGEgZGVhZCBgaWZgIGJyYW5jaCBmcm9tIGB0cnlfdG9fdW5tYXBfb25lKClgLCB3aGljaCB3YXMgYWx3YXlzIGJ5cGFzc2VkIGFueXdheSBiZWNhdXNlIG9mIHRoZSBsb2dpYyBpbiBgdHJ5X3RvX3VubWFwKClgLCBpdCBzZWVtcyB0aGlzIHBhdGNoIGlzIGEgcHVyZSBjbGVhbnVwIHdpdGggbm8gY2hhbmdlIHRvIHRoZSBjb2RlJiMzOTtzIGZ1bmN0aW9uYWxpdHkgb3IgdGhlIHdheSBpdCBleGVjdXRlcy4gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdhcyBhbHdheXMgcGVyZm9ybWluZyB0aGUgc2FtZSBhY3Rpb24gZHVlIHRvIHRoZSBgZWxzZWAgYnJhbmNoLCBhbmQgdGhlIHBhdGNoIGtlZXBzIHRoYXQgYGVsc2VgIGJyYW5jaC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgdHJ5X3RvX3VubWFwX29uZWAgaXMgaW5kZWVkIHN0YXRpYywgb25seSB1c2VkIGJ5IGB0cnlfdG9fdW5tYXBgLCBhbmQgdGhlIGNvbmRpdGlvbmFsIGBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pYCB3aWxsIGFsd2F5cyBldmFsdWF0ZSB0byBmYWxzZSwgbWVhbmluZyB0aGUgcmVtb3ZlZCBjb2RlIHdhcyBlbnRpcmVseSB1bnJlYWNoYWJsZS4gVGhlIHJlcGxhY2VtZW50IGNvZGUgYHB0ZXZhbCA9IHB0ZXBfZ2V0KHB2bXcucHRlKWAgaXMgaWRlbnRpY2FsIHRvIHdoYXQgdGhlIGBlbHNlYCBicmFuY2ggKmFsd2F5cyogZXhlY3V0ZWQuIE5vIGZ1bmN0aW9uYWwgY2hhbmdlIHdoYXRzb2V2ZXIuCgpUaHVzLCBiYXNlZCBvbiB0aGUgZG9jdW1lbnRlZCBjcml0ZXJpYSBmb3IgJiMzNDtXb3J0aEZ1enppbmcsJiMzNDsgdGhlIGNvcnJlY3QgcmVzdWx0IHNob3VsZCBiZSAmIzM0O2ZhbHNlJiMzNDsgZm9yIHRoaXMgcGF0Y2guIEkmIzM5O2xsIG5vdyBwcm9jZWVkIHdpdGggYSBgc2V0LXJlc3VsdHNgIGNvbW1hbmQsIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYCwgZW1wdHkgbGlzdHMgZm9yIGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AsIGFuZCBJJiMzOTtsbCBpbmNsdWRlIGEgY29uY2lzZSBleHBsYW5hdGlvbiB0aGF0IEkmIzM5O3ZlIGNhcmVmdWxseSBqdXN0aWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhbiB1bnJlYWNoYWJsZSBodWdldGxiIGNoZWNrIGluIHRyeV90b191bm1hcF9vbmUoKS4gU2luY2UgdHJ5X3RvX3VubWFwKCkgZXhwbGljaXRseSByb3V0ZXMgaHVnZXRsYiBmb2xpb3MgdG8gdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lKCksIHRyeV90b191bm1hcF9vbmUoKSBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZvciBub24taHVnZXRsYiBmb2xpb3MuIFJlbW92aW5nIHRoaXMgZGVhZCBicmFuY2ggaXMgYSBwdXJlIGNvZGUgY2xlYW51cCB3aXRoIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhbiB1bnJlYWNoYWJsZSBodWdldGxiIGNoZWNrIGluIHRyeV90b191bm1hcF9vbmUoKS4gU2luY2UgdHJ5X3RvX3VubWFwKCkgZXhwbGljaXRseSByb3V0ZXMgaHVnZXRsYiBmb2xpb3MgdG8gdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lKCksIHRyeV90b191bm1hcF9vbmUoKSBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZvciBub24taHVnZXRsYiBmb2xpb3MuIFJlbW92aW5nIHRoaXMgZGVhZCBicmFuY2ggaXMgYSBwdXJlIGNvZGUgY2xlYW51cCB3aXRoIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjU5OjQ2LjIxNDI2MTI5N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTYzODIxNTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBhbiB1bnJlYWNoYWJsZSBodWdldGxiIGNoZWNrIGluIHRyeV90b191bm1hcF9vbmUoKS4gU2luY2UgdHJ5X3RvX3VubWFwKCkgZXhwbGljaXRseSByb3V0ZXMgaHVnZXRsYiBmb2xpb3MgdG8gdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lKCksIHRyeV90b191bm1hcF9vbmUoKSBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZvciBub24taHVnZXRsYiBmb2xpb3MuIFJlbW92aW5nIHRoaXMgZGVhZCBicmFuY2ggaXMgYSBwdXJlIGNvZGUgY2xlYW51cCB3aXRoIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6NTk6NDYuMjE0MjY5NTg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTE3NTI1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZDgwY2YzZjIyNzBmMzI2NGI1MTlmYWNkMDRhNDRmM2E1ZjdkODExXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDA4OjU5OjQ1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xcbmluZGV4IGQxODE5ZmQ2OTkzODAuLjYwNmM4ZWNmMzEzMDIgMTAwNjQ0XFxuLS0tIGEvbW0vcm1hcC5jXFxuKysrIGIvbW0vcm1hcC5jXFxuQEAgLTIyOTksMTEgKzIyOTksOCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRWTV9CVUdfT05fRk9MSU8oIXB2bXcucHRlLCBmb2xpbyk7XFxuIFxcbiBcXHRcXHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xcbi1cXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xcbi1cXHRcXHRcXHRwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSk7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHB0ZXZhbCA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7XFxuK1xcbiBcXHRcXHRpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKSB7XFxuIFxcdFxcdFxcdHBmbiA9IHB0ZV9wZm4ocHRldmFsKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6NTk6NDYuNzI3MDIyMjY2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MDA1MTAzOTIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBhbiB1bnJlYWNoYWJsZSBodWdldGxiIGNoZWNrIGluIHRyeV90b191bm1hcF9vbmUoKS4gU2luY2UgdHJ5X3RvX3VubWFwKCkgZXhwbGljaXRseSByb3V0ZXMgaHVnZXRsYiBmb2xpb3MgdG8gdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lKCksIHRyeV90b191bm1hcF9vbmUoKSBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZvciBub24taHVnZXRsYiBmb2xpb3MuIFJlbW92aW5nIHRoaXMgZGVhZCBicmFuY2ggaXMgYSBwdXJlIGNvZGUgY2xlYW51cCB3aXRoIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmQ4MGNmM2YyMjcwZjMyNjRiNTE5ZmFjZDA0YTQ0ZjNhNWY3ZDgxMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA4OjU5OjQ1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCBkMTgxOWZkNjk5MzgwLi42MDZjOGVjZjMxMzAyIDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4rKysgYi9tbS9ybWFwLmNcbkBAIC0yMjk5LDExICsyMjk5LDggQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0Vk1fQlVHX09OX0ZPTElPKCFwdm13LnB0ZSwgZm9saW8pO1xuIFxuIFx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuLVx0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuLVx0XHRcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7XG4tXHRcdH1cbitcdFx0cHRldmFsID0gcHRlcF9nZXQocHZtdy5wdGUpO1xuK1xuIFx0XHRpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKSB7XG4gXHRcdFx0cGZuID0gcHRlX3BmbihwdGV2YWwpO1xuIFx0XHR9IGVsc2Uge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6NTk6NDYuNzI3MDI1NjE2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM3NzQ5NTQ4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZGlmZiB0aGF0IHRvdWNoZXMgYG1tL3JtYXAuY2AuIFRoZSBjb21taXQgaXMgY2hhbmdpbmcgYHRyeV90b191bm1hcF9vbmVgLiBJIHNlZSB0aGUga2V5IG1vZGlmaWNhdGlvbiBpcyByZW1vdmluZyB0aGlzIGNvbmRpdGlvbmFsIGJsb2NrIGFyb3VuZCBgcHRldmFsYDogdGhlIGNvZGUgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gSHVnZVRMQiBmb2xpb3MgYW5kIHJlZ3VsYXIgb25lcyB3aGVuIGdldHRpbmcgdGhlIFBURSB2YWx1ZS4gTm93LCBpdCBqdXN0IGRpcmVjdGx5IHVzZXMgYHB0ZXBfZ2V0KHB2bXcucHRlKWAuIE5vIG1vcmUgYGh1Z2VfcHRlcF9nZXRgIGlmIGl0J3MgYSBIdWdlVExCLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG1hZGUgYW5kIHdoYXQgaW1wbGljYXRpb25zIGl0IGhhcy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHdoZXJlIEkgYW0gcmVhZGluZyB0aGUgZmlsZS4uLiBhaCwgcmlnaHQuIExldCdzIGdvIHJlYWQgYXJvdW5kIGxpbmUgMjI5OSBpbiBgbW0vcm1hcC5jYCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEl0IG1pZ2h0IGJlIG9idmlvdXMsIGJ1dCB0aGlzIG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2Qgd2l0aGluIHRoZSBsYXJnZXIgc2NvcGUgb2YgbWVtb3J5IG1hbmFnZW1lbnQuIExldCdzIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6MDA6MDAuNTAxOTgzODY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3JtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjgwOlxcdFxcdFxcdFxcdFxcdCAqIGR1ZSB0byBHVVAgb3Igc3BlY3VsYXRpdmUgcmVmZXJlbmNlcy5cXG4yMjgxOlxcdFxcdFxcdFxcdFxcdCAqL1xcbjIyODI6XFx0XFx0XFx0XFx0XFx0Z290byB3YWxrX2Fib3J0O1xcbjIyODM6XFx0XFx0XFx0XFx0fVxcbjIyODQ6XFx0XFxuMjI4NTpcXHRcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBUVFVfU1BMSVRfSFVHRV9QTUQpIHtcXG4yMjg2OlxcdFxcdFxcdFxcdFxcdC8qXFxuMjI4NzpcXHRcXHRcXHRcXHRcXHQgKiBXZSB0ZW1wb3JhcmlseSBoYXZlIHRvIGRyb3AgdGhlIFBUTCBhbmRcXG4yMjg4OlxcdFxcdFxcdFxcdFxcdCAqIHJlc3RhcnQgc28gd2UgY2FuIHByb2Nlc3MgdGhlIFBURS1tYXBwZWQgVEhQLlxcbjIyODk6XFx0XFx0XFx0XFx0XFx0ICovXFxuMjI5MDpcXHRcXHRcXHRcXHRcXHRzcGxpdF9odWdlX3BtZF9sb2NrZWQodm1hLCBwdm13LmFkZHJlc3MsXFxuMjI5MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBwdm13LnBtZCwgZmFsc2UpO1xcbjIyOTI6XFx0XFx0XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gflRUVV9TUExJVF9IVUdFX1BNRDtcXG4yMjkzOlxcdFxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoXFx1MDAyNnB2bXcpO1xcbjIyOTQ6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjI5NTpcXHRcXHRcXHRcXHR9XFxuMjI5NjpcXHRcXHRcXHR9XFxuMjI5NzpcXHRcXG4yMjk4OlxcdFxcdFxcdC8qIFVuZXhwZWN0ZWQgUE1ELW1hcHBlZCBUSFA/ICovXFxuMjI5OTpcXHRcXHRcXHRWTV9CVUdfT05fRk9MSU8oIXB2bXcucHRlLCBmb2xpbyk7XFxuMjMwMDpcXHRcXG4yMzAxOlxcdFxcdFxcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XFxuMjMwMjpcXHRcXHRcXHRwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7XFxuMjMwMzpcXHRcXG4yMzA0OlxcdFxcdFxcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcXG4yMzA1OlxcdFxcdFxcdFxcdHBmbiA9IHB0ZV9wZm4ocHRldmFsKTtcXG4yMzA2OlxcdFxcdFxcdH0gZWxzZSB7XFxuMjMwNzpcXHRcXHRcXHRcXHQvKlxcbjIzMDg6XFx0XFx0XFx0XFx0ICogSGFuZGxlIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLFxcbjIzMDk6XFx0XFx0XFx0XFx0ICogdGhhdCBhY3R1YWxseSBtYXAgcGFnZXMuXFxuMjMxMDpcXHRcXHRcXHRcXHQgKi9cXG4yMzExOlxcdFxcdFxcdFxcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGV2YWwpO1xcbjIzMTI6XFx0XFxuMjMxMzpcXHRcXHRcXHRcXHRwZm4gPSBzb2Z0bGVhZl90b19wZm4oZW50cnkpO1xcbjIzMTQ6XFx0XFx0XFx0fVxcbjIzMTU6XFx0XFxuMjMxNjpcXHRcXHRcXHRwYWdlID0gZm9saW9fcGFnZShmb2xpbywgcGZuIC0gZm9saW9fcGZuKGZvbGlvKSk7XFxuMjMxNzpcXHRcXG4yMzE4OlxcdFxcdFxcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcXG4yMzE5OlxcdFxcdFxcdFxcdG5yX3BhZ2VzID0gZm9saW9fdW5tYXBfcHRlX2JhdGNoKGZvbGlvLCBcXHUwMDI2cHZtdywgZmxhZ3MsIHB0ZXZhbCk7XFxuMjMyMDpcXHRcXHRcXHRcXHRlbmRfYWRkciA9IGFkZHJlc3MgKyBucl9wYWdlcyAqIFBBR0VfU0laRTtcXG4yMzIxOlxcdFxcdFxcdFxcdGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgYWRkcmVzcywgZW5kX2FkZHIpO1xcbjIzMjI6XFx0XFxuMjMyMzpcXHRcXHRcXHRcXHQvKiBOdWtlIHRoZSBwYWdlIHRhYmxlIGVudHJ5LiAqL1xcbjIzMjQ6XFx0XFx0XFx0XFx0cHRldmFsID0gZ2V0X2FuZF9jbGVhcl9wdGVzKG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgbnJfcGFnZXMpO1xcbjIzMjU6XFx0XFx0XFx0XFx0LypcXG4yMzI2OlxcdFxcdFxcdFxcdCAqIFdlIGNsZWFyIHRoZSBQVEUgYnV0IGRvIG5vdCBmbHVzaCBzbyBwb3RlbnRpYWxseVxcbjIzMjc6XFx0XFx0XFx0XFx0ICogYSByZW1vdGUgQ1BVIGNvdWxkIHN0aWxsIGJlIHdyaXRpbmcgdG8gdGhlIGZvbGlvLlxcbjIzMjg6XFx0XFx0XFx0XFx0ICogSWYgdGhlIGVudHJ5IHdhcyBwcmV2aW91c2x5IGNsZWFuIHRoZW4gdGhlXFxuMjMyOTpcXHRcXHRcXHRcXHQgKiBhcmNoaXRlY3R1cmUgbXVzdCBndWFyYW50ZWUgdGhhdCBhIGNsZWFyLVxcdTAwM2VkaXJ0eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTowMDowMC41MDIxMzgyMjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTk5MjA5MDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIG9mIGh1Z2UgcGFnZXMgKGh1Z2V0bGIpIHdpdGhpbiB0aGUgdW5tYXBwaW5nIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCB3aXRoaW4gYHRyeV90b191bm1hcF9vbmVgIGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZWxldmFudCBjb2RlIGluIGBtbS9ybWFwLmNgLiBJJ2xsIGZvY3VzIG9uIGxpbmVzIDIyMDAgdG8gMjM1MCBpbiB0aGF0IGZpbGUgdG8gY2FwdHVyZSB0aGUgY29yZSBvZiB0aGUgbG9naWMuIFRoaXMgYXJlYSBzaG91bGQgaWxsdW1pbmF0ZSBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBzcGVjaWZpYyBjaGFsbGVuZ2VzIG9mIHVubWFwcGluZyBodWdlIHBhZ2VzLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIChQVEVzKSBhbmQgcG90ZW50aWFsIHJlZmNvdW50IGlzc3Vlcy4gTXkgZXhwZWN0YXRpb24gaXMgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBzY2VuYXJpb3Mg4oCTIHdoZXRoZXIgdGhlIGh1Z2UgcGFnZSBpcyBzaGFyZWQsIHByaXZhdGUsIGRpcnR5LCBjbGVhbiwgZXRjLiDigJMgYW5kIGhvdyB0aGUgdW5tYXBwaW5nIHByb2Nlc3MgZW5zdXJlcyBkYXRhIGludGVncml0eSBhbmQgbWVtb3J5IGNvbnNpc3RlbmN5LiBJIGFudGljaXBhdGUgc2VlaW5nIGRldGFpbHMgYXJvdW5kIGhvdyB0aGUgTU1VIGlzIHVwZGF0ZWQgYW5kIG1lbW9yeSBpcyBmcmVlZCwgYW5kIGhvdyB0aGUgc3lzdGVtIHRha2VzIGFkdmFudGFnZSBvZiB0aGUgaHVnZSBwYWdlIGluZnJhc3RydWN0dXJlIGZvciBlZmZpY2llbnQgb3BlcmF0aW9uLiBJIGhvcGUgdG8gY29tZSBhd2F5IHdpdGggYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjcnVjaWFsIHN0ZXBzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0ga2VlcHMgY29uc2lzdGVuY3kgZHVyaW5nIGh1Z2UgcGFnZSB1bm1hcHBpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyOTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjAwOjA1LjEwMTM0OTY1OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Nzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9ybWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjIwMDpcXHQgKi9cXG4yMjAxOlxcdHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuMjIwMjpcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxcbjIyMDM6XFx0e1xcbjIyMDQ6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbjIyMDU6XFx0XFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIDApO1xcbjIyMDY6XFx0XFx0Ym9vbCByZXQgPSB0cnVlO1xcbjIyMDc6XFx0XFx0cHRlX3QgcHRldmFsO1xcbjIyMDg6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuMjIwOTpcXHRcXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xcbjIyMTA6XFx0XFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xcbjIyMTE6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEsIGVuZF9hZGRyO1xcbjIyMTI6XFx0XFx0dW5zaWduZWQgbG9uZyBwZm47XFxuMjIxMzpcXHRcXHRpbnQgcHRlcyA9IDA7XFxuMjIxNDpcXHRcXG4yMjE1OlxcdFxcdC8qXFxuMjIxNjpcXHRcXHQgKiBXaGVuIHJhY2luZyBhZ2FpbnN0IGUuZy4gemFwX3B0ZV9yYW5nZSgpIG9uIGFub3RoZXIgY3B1LFxcbjIyMTc6XFx0XFx0ICogaW4gYmV0d2VlbiBpdHMgcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwoKSBhbmQgZm9saW9fcmVtb3ZlX3JtYXBfKigpLFxcbjIyMTg6XFx0XFx0ICogdHJ5X3RvX3VubWFwKCkgbWF5IHJldHVybiBiZWZvcmUgZm9saW9fbWFwcGVkKCkgaGFzIGJlY29tZSBmYWxzZSxcXG4yMjE5OlxcdFxcdCAqIGlmIHBhZ2UgdGFibGUgbG9ja2luZyBpcyBza2lwcGVkOiB1c2UgVFRVX1NZTkMgdG8gd2FpdCBmb3IgdGhhdC5cXG4yMjIwOlxcdFxcdCAqL1xcbjIyMjE6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgVFRVX1NZTkMpXFxuMjIyMjpcXHRcXHRcXHRwdm13LmZsYWdzID0gUFZNV19TWU5DO1xcbjIyMjM6XFx0XFxuMjIyNDpcXHRcXHQvKlxcbjIyMjU6XFx0XFx0ICogRm9yIFRIUCwgd2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnNlIGNhc2UgaWUgcG1kIGZvciBpbnZhbGlkYXRpb24uXFxuMjIyNjpcXHRcXHQgKlxcbjIyMjc6XFx0XFx0ICogTm90ZSB0aGF0IHRoZSBmb2xpbyBjYW4gbm90IGJlIGZyZWVkIGluIHRoaXMgZnVuY3Rpb24gYXMgY2FsbCBvZlxcbjIyMjg6XFx0XFx0ICogdHJ5X3RvX3VubWFwKCkgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIHRoZSBmb2xpby5cXG4yMjI5OlxcdFxcdCAqL1xcbjIyMzA6XFx0XFx0cmFuZ2UuZW5kID0gdm1hX2FkZHJlc3NfZW5kKFxcdTAwMjZwdm13KTtcXG4yMjMxOlxcdFxcdG1tdV9ub3RpZmllcl9yYW5nZV9pbml0KFxcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVxcdTAwM2V2bV9tbSxcXG4yMjMyOlxcdFxcdFxcdFxcdFxcdGFkZHJlc3MsIHJhbmdlLmVuZCk7XFxuMjIzMzpcXHRcXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcXHUwMDI2cmFuZ2UpO1xcbjIyMzQ6XFx0XFxuMjIzNTpcXHRcXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKSB7XFxuMjIzNjpcXHRcXHRcXHRucl9wYWdlcyA9IDE7XFxuMjIzNzpcXHRcXG4yMjM4OlxcdFxcdFxcdC8qXFxuMjIzOTpcXHRcXHRcXHQgKiBJZiB0aGUgZm9saW8gaXMgaW4gYW4gbWxvY2soKWQgdm1hLCB3ZSBtdXN0IG5vdCBzd2FwIGl0IG91dC5cXG4yMjQwOlxcdFxcdFxcdCAqL1xcbjIyNDE6XFx0XFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBUVFVfSUdOT1JFX01MT0NLKSBcXHUwMDI2XFx1MDAyNlxcbjIyNDI6XFx0XFx0XFx0ICAgICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTE9DS0VEKSkge1xcbjIyNDM6XFx0XFx0XFx0XFx0cHRlcysrO1xcbjIyNDQ6XFx0XFxuMjI0NTpcXHRcXHRcXHRcXHQvKlxcbjIyNDY6XFx0XFx0XFx0XFx0ICogU2V0ICdyZXQnIHRvIGluZGljYXRlIHRoZSBwYWdlIGNhbm5vdCBiZSB1bm1hcHBlZC5cXG4yMjQ3OlxcdFxcdFxcdFxcdCAqXFxuMjI0ODpcXHRcXHRcXHRcXHQgKiBEbyBub3QganVtcCB0byB3YWxrX2Fib3J0IGltbWVkaWF0ZWx5IGFzIGFkZGl0aW9uYWxcXG4yMjQ5OlxcdFxcdFxcdFxcdCAqIGl0ZXJhdGlvbiBtaWdodCBiZSByZXF1aXJlZCB0byBkZXRlY3QgZnVsbHkgbWFwcGVkXFxuMjI1MDpcXHRcXHRcXHRcXHQgKiBmb2xpbyBhbiBtbG9jayBpdC5cXG4yMjUxOlxcdFxcdFxcdFxcdCAqL1xcbjIyNTI6XFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxuMjI1MzpcXHRcXG4yMjU0OlxcdFxcdFxcdFxcdC8qIE9ubHkgbWxvY2sgZnVsbHkgbWFwcGVkIHBhZ2VzICovXFxuMjI1NTpcXHRcXHRcXHRcXHRpZiAocHZtdy5wdGUgXFx1MDAyNlxcdTAwMjYgcHRlcyAhPSBwdm13Lm5yX3BhZ2VzKVxcbjIyNTY6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjI1NzpcXHRcXG4yMjU4OlxcdFxcdFxcdFxcdC8qXFxuMjI1OTpcXHRcXHRcXHRcXHQgKiBBbGwgUFRFcyBtdXN0IGJlIHByb3RlY3RlZCBieSBwYWdlIHRhYmxlIGxvY2sgaW5cXG4yMjYwOlxcdFxcdFxcdFxcdCAqIG9yZGVyIHRvIG1sb2NrIHRoZSBwYWdlLlxcbjIyNjE6XFx0XFx0XFx0XFx0ICpcXG4yMjYyOlxcdFxcdFxcdFxcdCAqIElmIHBhZ2UgdGFibGUgYm91bmRhcnkgaGFzIGJlZW4gY3Jvc3MsIGN1cnJlbnQgcHRsXFxuMjI2MzpcXHRcXHRcXHRcXHQgKiBvbmx5IHByb3RlY3QgcGFydCBvZiBwdGVzLlxcbjIyNjQ6XFx0XFx0XFx0XFx0ICovXFxuMjI2NTpcXHRcXHRcXHRcXHRpZiAocHZtdy5mbGFncyBcXHUwMDI2IFBWTVdfUEdUQUJMRV9DUk9TU0VEKVxcbjIyNjY6XFx0XFx0XFx0XFx0XFx0Z290byB3YWxrX2RvbmU7XFxuMjI2NzpcXHRcXG4yMjY4OlxcdFxcdFxcdFxcdC8qIFJlc3RvcmUgdGhlIG1sb2NrIHdoaWNoIGdvdCBtaXNzZWQgKi9cXG4yMjY5OlxcdFxcdFxcdFxcdG1sb2NrX3ZtYV9mb2xpbyhmb2xpbywgdm1hKTtcXG4yMjcwOlxcdFxcdFxcdFxcdGdvdG8gd2Fsa19kb25lO1xcbjIyNzE6XFx0XFx0XFx0fVxcbjIyNzI6XFx0XFxuMjI3MzpcXHRcXHRcXHRpZiAoIXB2bXcucHRlKSB7XFxuMjI3NDpcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9sYXp5ZnJlZShmb2xpbykpIHtcXG4yMjc1OlxcdFxcdFxcdFxcdFxcdGlmICh1bm1hcF9odWdlX3BtZF9sb2NrZWQodm1hLCBwdm13LmFkZHJlc3MsIHB2bXcucG1kLCBmb2xpbykpXFxuMjI3NjpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIHdhbGtfZG9uZTtcXG4yMjc3OlxcdFxcdFxcdFxcdFxcdC8qXFxuMjI3ODpcXHRcXHRcXHRcXHRcXHQgKiB1bm1hcF9odWdlX3BtZF9sb2NrZWQgaGFzIGVpdGhlciBhbHJlYWR5IG1hcmtlZFxcbjIyNzk6XFx0XFx0XFx0XFx0XFx0ICogdGhlIGZvbGlvIGFzIHN3YXAtYmFja2VkIG9yIGRlY2lkZWQgdG8gcmV0YWluIGl0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjAwOjA1LjEwMTUwOTcxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNTk4Nzc5MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aCBodWdldGxiIHdpdGhpbiB0aGUgYHRyeV90b191bm1hcF9vbmVgIGFuZCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGZ1bmN0aW9ucy4gQ2xlYXJseSwgdGhlcmUncyBhIHByb2JsZW0sIG9yIGF0IGxlYXN0IGEgbmVlZCB0byBpbnZlc3RpZ2F0ZSwgcmVsYXRlZCB0byBIdWdlVExCIHBhZ2VzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhvc2UgZnVuY3Rpb25zIGluIGBtbS9ybWFwLmNgLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0IHdpdGggSHVnZVRMQiBwYWdlcyDigJMgaXMgdGhlcmUgYSBzcGVjaWZpYyBjb25kaXRpb25hbCBjaGVjaywgYSBkaWZmZXJlbnQgY29kZSBwYXRoLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSB0aGF0J3MgY2F1c2luZyB0aGlzIGJlaGF2aW9yP1xuXG5JJ2xsIGFsc28ga2VlcCBhbiBleWUgb24gcmVjZW50IGNvbW1pdHMuIFBlcmhhcHMgYSByZWNlbnQgcGF0Y2ggaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24gb3IgYW4gdW5leHBlY3RlZCBpbnRlcmFjdGlvbiB3aXRoIEh1Z2VUTEIgZnVuY3Rpb25hbGl0eS4gVGhhdCBjb3VsZCBnaXZlIHNvbWUgY29udGV4dCBpbnRvIHRoZSByZWNlbnQgY2hhbmdlcyBpbiB0aGUgYG1tL3JtYXAuY2AgZmlsZS4gU28sIEkgbmVlZCB0byBjaGVjayBmb3IgY2hhbmdlcyBuZWFyIGBtbS9ybWFwLmNgIHJlbGF0ZWQgdG8gaHVnZXRsYi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg3NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6MDA6MDguMTYxMzkxMTU1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTYxNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3Rlc3RfaHVnZXRsYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9ybWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcm1hcC5jPTE2NDg9dm9pZCBmb2xpb19hZGRfbmV3X2Fub25fcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0xNjUzLVxcbm1tL3JtYXAuYzoxNjU0OlxcdFZNX1dBUk5fT05fRk9MSU8oZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSwgZm9saW8pO1xcbm1tL3JtYXAuYy0xNjU1LVxcdFZNX1dBUk5fT05fRk9MSU8oIWV4Y2x1c2l2ZSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuLS1cXG5tbS9ybWFwLmM9MjQ0MD12b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG4tLVxcbm1tL3JtYXAuYy0yNDQyLVxcdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XFxubW0vcm1hcC5jOjI0NDM6XFx0XFx0LnJtYXBfb25lID0gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSA/XFxubW0vcm1hcC5jLTI0NDQtXFx0XFx0XFx0XFx0dHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lIDogdHJ5X3RvX3VubWFwX29uZSxcXG4tLVxcbm1tL3JtYXAuYz0yNDYyPXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yNDk0LVxcdFxcdFxcdFxcdGFkZHJlc3MsIHJhbmdlLmVuZCk7XFxubW0vcm1hcC5jOjI0OTU6XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG5tbS9ybWFwLmMtMjQ5Ni1cXHRcXHQvKlxcbi0tXFxubW0vcm1hcC5jLTI1MzUtXFxubW0vcm1hcC5jOjI1MzY6XFx0XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgfHxcXG5tbS9ybWFwLmMtMjUzNy1cXHRcXHRcXHRcXHRcXHQhZm9saW9fdGVzdF9wbWRfbWFwcGFibGUoZm9saW8pLCBmb2xpbyk7XFxuLS1cXG5tbS9ybWFwLmMtMjU1MS1cXHRcXHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xcbm1tL3JtYXAuYzoyNTUyOlxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxcbm1tL3JtYXAuYy0yNTUzLVxcdFxcdFxcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcXG4tLVxcbm1tL3JtYXAuYy0yNTY1LVxcdFxcdFxcdHBmbiA9IHNvZnRsZWFmX3RvX3BmbihlbnRyeSk7XFxubW0vcm1hcC5jOjI1NjY6XFx0XFx0XFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XFxubW0vcm1hcC5jLTI1NjctXFx0XFx0fVxcbi0tXFxubW0vcm1hcC5jLTI1NzItXFxubW0vcm1hcC5jOjI1NzM6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG5tbS9ybWFwLmMtMjU3NC1cXHRcXHRcXHRib29sIGFub24gPSBmb2xpb190ZXN0X2Fub24oZm9saW8pO1xcbi0tXFxubW0vcm1hcC5jLTI2NjMtXFx0XFx0XFx0cHRldmFsID0gc3dwX2VudHJ5X3RvX3B0ZShtYWtlX2h3cG9pc29uX2VudHJ5KHN1YnBhZ2UpKTtcXG5tbS9ybWFwLmM6MjY2NDpcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xcbm1tL3JtYXAuYy0yNjY1LVxcdFxcdFxcdFxcdGh1Z2V0bGJfY291bnRfc3ViKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgbW0pO1xcbi0tXFxubW0vcm1hcC5jLTI2OTQtXFx0XFx0XFx0aWYgKGFyY2hfdW5tYXBfb25lKG1tLCB2bWEsIGFkZHJlc3MsIHB0ZXZhbCkgXFx1MDAzYyAwKSB7XFxubW0vcm1hcC5jOjI2OTU6XFx0XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXFxubW0vcm1hcC5jLTI2OTYtXFx0XFx0XFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSxcXG4tLVxcbm1tL3JtYXAuYy0yNzA1LVxcdFxcdFxcdC8qIFNlZSBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3B0ZSgpOiBjbGVhciBQVEUgZmlyc3QuICovXFxubW0vcm1hcC5jOjI3MDY6XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG5tbS9ybWFwLmMtMjcwNy1cXHRcXHRcXHRcXHRpZiAoYW5vbl9leGNsdXNpdmUgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL3JtYXAuYy0yNzUzLVxcdFxcdFxcdH1cXG5tbS9ybWFwLmM6Mjc1NDpcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG5tbS9ybWFwLmMtMjc1NS1cXHRcXHRcXHRcXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBzd3BfcHRlLFxcbi0tXFxubW0vcm1hcC5jLTI3NjYtXFxubW0vcm1hcC5jOjI3Njc6XFx0XFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpKVxcbm1tL3JtYXAuYy0yNzY4LVxcdFxcdFxcdGh1Z2V0bGJfcmVtb3ZlX3JtYXAoZm9saW8pO1xcbi0tXFxubW0vcm1hcC5jPTI4NjY9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vcm1hcC5jLTI4OTctXFxubW0vcm1hcC5jOjI4OTg6XFx0aWYgKCFmb2xpb190ZXN0X2Fub24oZm9saW8pIHx8IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG5tbS9ybWFwLmMtMjg5OS1cXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi0tXFxubW0vcm1hcC5jPTMxNzc9dm9pZCBodWdldGxiX2FkZF9hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMzE3OS17XFxubW0vcm1hcC5jOjMxODA6XFx0Vk1fV0FSTl9PTl9GT0xJTyghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSwgZm9saW8pO1xcbm1tL3JtYXAuYy0zMTgxLVxcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfYW5vbihmb2xpbyksIGZvbGlvKTtcXG4tLVxcbm1tL3JtYXAuYz0zMTkxPXZvaWQgaHVnZXRsYl9hZGRfbmV3X2Fub25fcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTMxOTMte1xcbm1tL3JtYXAuYzozMTk0OlxcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcXG5tbS9ybWFwLmMtMzE5NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6MDA6MDguMjIxOTU5MDQyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxOTc5NjYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB0cnlfdG9fdW5tYXBgIEZ1bmN0aW9uIGFuZCBJdHMgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHRyeV90b191bm1hcGAgZnVuY3Rpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gaG93IGl0IGhhbmRsZXMgdW5tYXBwaW5nLCBhbmQgcGFydGljdWxhcmx5IHRoZSBicmFuY2hpbmcgbG9naWMgd2l0aGluIGl0LiBUaGUgY29kZSBzbmlwcGV0IGNsZWFybHkgc2hvd3MgdGhlIGNvbmRpdGlvbmFsIGNhbGwgdG8gZWl0aGVyIGB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmVgIG9yIGB0cnlfdG9fdW5tYXBfb25lYCBiYXNlZCBvbiB3aGV0aGVyIHRoZSBmb2xpbyBpcyBhIGh1Z2V0bGIuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMuIEknbGwgbmVlZCB0byBleHBsb3JlIGB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmVgIGluIGRldGFpbCwgc3BlY2lmaWNhbGx5IGl0cyBiZWhhdmlvdXIuIEFuZCBvZiBjb3Vyc2UsIEkgaGF2ZSB0byBzZWUgd2hvIGVsc2UgbWlnaHQgY2FsbCBgdHJ5X3RvX3VubWFwX29uZWAuIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2U7IEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBjYWxsIGdyYXBoIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBpbiB0aGlzIGFyZWEuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgYHRyeV90b191bm1hcF9vbmVgIGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBmdW5jdGlvbiBpdHNlbGYgb24gbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NDYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6MDA6MTAuNTQxNzU4NjA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDU0OTU5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fdW5tYXBfb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9maWxlbWFwLmMtMTE0LSAqICAtXFx1MDAzZXBhZ2VfdGFibGVfbG9jayBvciBwdGVfbG9ja1xcbm1tL2ZpbGVtYXAuYzoxMTU6ICogICAgLVxcdTAwM2Vzd2FwX2xvY2tcXHRcXHQodHJ5X3RvX3VubWFwX29uZSlcXG5tbS9maWxlbWFwLmM6MTE2OiAqICAgIC1cXHUwMDNlcHJpdmF0ZV9sb2NrXFx0XFx0KHRyeV90b191bm1hcF9vbmUpXFxubW0vZmlsZW1hcC5jOjExNzogKiAgICAtXFx1MDAzZWlfcGFnZXMgbG9ja1xcdFxcdCh0cnlfdG9fdW5tYXBfb25lKVxcbm1tL2ZpbGVtYXAuYy0xMTgtICogICAgLVxcdTAwM2VscnV2ZWMtXFx1MDAzZWxydV9sb2NrXFx0KGZvbGxvd19wYWdlX21hc2stXFx1MDAzZW1hcmtfcGFnZV9hY2Nlc3NlZClcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjM4Nj1pbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU3MS1cXHQgKiBleGFtcGxlIGlzIGFuIG1sb2NrZWQgcGFnZSwgd2hlcmUgUEdfbWxvY2tlZCBpcyBjbGVhcmVkIGJ5XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTcyOlxcdCAqIGZvbGlvX3JlbW92ZV9ybWFwXyooKSBpbiB0cnlfdG9fdW5tYXBfb25lKCkuIFNvIHRvIGRldGVybWluZSBwYWdlXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTczLVxcdCAqIHN0YXR1cyBjb3JyZWN0bHksIHdlIHNhdmUgYSBjb3B5IG9mIHRoZSBwYWdlIGZsYWdzIGF0IHRoaXMgdGltZS5cXG4tLVxcbm1tL21sb2NrLmM9NDY3PXN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21sb2NrLmMtNTAyLVxcdCAqIHZtX2ZsYWdzIGlzIHByb3RlY3RlZCBieSB0aGUgbW1hcF9sb2NrIGhlbGQgaW4gd3JpdGUgbW9kZS5cXG5tbS9tbG9jay5jOjUwMzpcXHQgKiBJdCdzIG9rYXkgaWYgdHJ5X3RvX3VubWFwX29uZSB1bm1hcHMgYSBwYWdlIGp1c3QgYWZ0ZXIgd2VcXG5tbS9tbG9jay5jLTUwNC1cXHQgKiBzZXQgVk1BX0xPQ0tFRF9CSVQsIHBvcHVsYXRlX3ZtYV9wYWdlX3JhbmdlIHdpbGwgYnJpbmcgaXQgYmFjay5cXG4tLVxcbm1tL3JtYXAuYz0yMTc4PXN0YXRpYyBib29sIHR0dV9hbm9uX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTIyMDAtICovXFxubW0vcm1hcC5jOjIyMDE6c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9ybWFwLmMtMjIwMi1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxcbi0tXFxubW0vcm1hcC5jPTI0NDA9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXFxuLS1cXG5tbS9ybWFwLmMtMjQ0My1cXHRcXHQucm1hcF9vbmUgPSBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pID9cXG5tbS9ybWFwLmM6MjQ0NDpcXHRcXHRcXHRcXHR0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUgOiB0cnlfdG9fdW5tYXBfb25lLFxcbm1tL3JtYXAuYy0yNDQ1LVxcdFxcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTowMDoxMC41OTYzMTM0NTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODEyMTk4MTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFVubWFwcGluZyBTdHJhdGVnaWVzKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgdW5tYXBwaW5nIHJvdXRpbmVzIGhlcmUuIEl0IHNlZW1zIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIG5vbi1odWdldGxiIGZvbGlvcywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgcmVjYWxsIHRoYXQgYHRyeV90b191bm1hcCgpYCBoYXMgYSBjaGVjayBmb3IgYGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbylgOyBpdCdzIHRoZSBnYXRld2F5LCBzbyB0byBzcGVhay4gSWYgaXQgKmlzKiBhIGh1Z2UgcGFnZSBmb2xpbywgdGhlIGNvZGUgYnJhbmNoZXMgdG8gYHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZWAgaW5zdGVhZC5cblxuQWhhISBUaGF0IGtleSBwb2ludCBoZWxwcyB0byBzZXBhcmF0ZSBjb25jZXJucy4gU28gYHRyeV90b191bm1hcF9vbmVgIGhhbmRsZXMgdGhlIFwibm9ybWFsXCIgdW5tYXBwaW5nIGNhc2VzLCB3aGlsZSBgdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lYCBkZWFscyB3aXRoIHRoZSBzcGVjaWFsIGNhc2VzIG9mIGh1Z2UgcGFnZXMuIEl0IGxvb2tzIGxpa2UgaXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoYXQgYHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZWAgcGF0aCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgYW5kIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aG9zZSBvdmVyc2l6ZWQgcGFnZXMuIEkgd29uZGVyIHdoYXQgdGhlIHBvaXNvbiBjaGVjayB0aGVyZSBpcyBmb3I/IFRoYXQncyB3aGF0IEkgd2FudCB0byBsZWFybiBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjAzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6MDA6MTguNzE4Mjk4NjE1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg3OTM3NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ybWFwLmM9MTk1MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy0xOTgzLVxcbm1tL3JtYXAuYzoxOTg0OnN0YXRpYyBib29sIHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3JtYXAuYy0xOTg1LVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcXG4tLVxcbm1tL3JtYXAuYz0yNDQwPXZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxcbi0tXFxubW0vcm1hcC5jLTI0NDMtXFx0XFx0LnJtYXBfb25lID0gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSA/XFxubW0vcm1hcC5jOjI0NDQ6XFx0XFx0XFx0XFx0dHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lIDogdHJ5X3RvX3VubWFwX29uZSxcXG5tbS9ybWFwLmMtMjQ0NS1cXHRcXHQuYXJnID0gKHZvaWQgKilmbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6MDA6MTguODc3MDk4OTE5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NTAwODE3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmVgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIGBtbS9ybWFwLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgYSBwb2lzb25lZCBodWdldGxiIHBhZ2UgZHVyaW5nIHVubWFwcGluZy4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIHJtYXAgYW5kIHRoZSBodWdldGxiIG1lY2hhbmlzbXMgd2hlbiBkZWFsaW5nIHdpdGggdGhpcyBlcnJvciBjb25kaXRpb24uIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBsb2dpYyB0aGF0IGlzb2xhdGVzIHRoZSBwb2lzb25lZCBwYWdlLCBwb3RlbnRpYWxseSBtYXJrcyB0aGUgUFRFIG9yIFBNRSBhcyBpbnZhbGlkLCBhbmQgcGVyaGFwcyBpbml0aWF0ZXMgYSBmYXVsdCBvciBzb21lIG90aGVyIGNvcnJlY3RpdmUgYWN0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zLCBzcGVjaWZpY2FsbHkgaWYgYW55IGxvY2tzIGFyZSBoZWxkLCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHVubWFwIHByb2Nlc3MuIEFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcGFnZSBjYWNoZSwgaWYgcHJlc2VudCwgYXJlIGFsc28gc29tZXRoaW5nIHRvIG5vdGUuIEkgd2FudCB0byBzZWUgdGhlIGVycm9yIGhhbmRsaW5nOyBpcyB0aGVyZSBhIHJldHVybiB2YWx1ZSB0aGF0IHNpZ25hbHMgc3VjY2VzcyBvciBmYWlsdXJlLCBhbmQgd2hhdCBhcmUgdGhlIHBvc3NpYmxlIGZhaWx1cmUgcGF0aHM/IEhvcGVmdWxseSwgaXQgaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTowMDoyMy43MjcxODM2MzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3JtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTgwOlxcdFxcdHJldHVybiBmb2xpb19wdGVfYmF0Y2hfZmxhZ3MoZm9saW8sIHZtYSwgcHZtdy1cXHUwMDNlcHRlLCBcXHUwMDI2cHRlLCBtYXhfbnIsXFxuMTk4MTpcXHRcXHRcXHRcXHRcXHQgICAgIEZQQl9SRVNQRUNUX1dSSVRFIHwgRlBCX1JFU1BFQ1RfU09GVF9ESVJUWSk7XFxuMTk4MjpcXHR9XFxuMTk4MzpcXHRcXG4xOTg0OlxcdHN0YXRpYyBib29sIHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbjE5ODU6XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxcbjE5ODY6XFx0e1xcbjE5ODc6XFx0XFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHJlc3MsIDApO1xcbjE5ODg6XFx0XFx0Y29uc3QgdW5zaWduZWQgbG9uZyBoc3ogPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpO1xcbjE5ODk6XFx0XFx0Y29uc3QgZW51bSB0dHVfZmxhZ3MgZmxhZ3MgPSAoZW51bSB0dHVfZmxhZ3MpKGxvbmcpYXJnO1xcbjE5OTA6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbjE5OTE6XFx0XFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcXG4xOTkyOlxcdFxcdGJvb2wgcmV0ID0gdHJ1ZTtcXG4xOTkzOlxcdFxcdHB0ZV90IHB0ZXZhbDtcXG4xOTk0OlxcdFxcbjE5OTU6XFx0XFx0LypcXG4xOTk2OlxcdFxcdCAqIFRoZSB0cnlfdG9fdW5tYXAoKSBpcyBvbmx5IHBhc3NlZCBhIGh1Z2V0bGIgZm9saW8gaW4gdGhlIGNhc2VcXG4xOTk3OlxcdFxcdCAqIHdoZXJlIHRoZSBodWdldGxiIGZvbGlvIGlzIHBvaXNvbmVkLlxcbjE5OTg6XFx0XFx0ICovXFxuMTk5OTpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pLCBmb2xpbyk7XFxuMjAwMDpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIShmbGFncyBcXHUwMDI2IFRUVV9IV1BPSVNPTikpO1xcbjIwMDE6XFx0XFxuMjAwMjpcXHRcXHRyYW5nZS5lbmQgPSB2bWFfYWRkcmVzc19lbmQoXFx1MDAyNnB2bXcpO1xcbjIwMDM6XFx0XFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXFx1MDAzZXZtX21tLFxcbjIwMDQ6XFx0XFx0XFx0XFx0XFx0YWRkcmVzcywgcmFuZ2UuZW5kKTtcXG4yMDA1OlxcdFxcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFxcdTAwMjZyYW5nZS5zdGFydCwgXFx1MDAyNnJhbmdlLmVuZCk7XFxuMjAwNjpcXHRcXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcXHUwMDI2cmFuZ2UpO1xcbjIwMDc6XFx0XFxuMjAwODpcXHRcXHQvKiBUaGVyZSBpcyBvbmx5IGEgc2luZ2xlIG1hcHBpbmcgaW4gYSBWTUEuICovXFxuMjAwOTpcXHRcXHRpZiAoIXBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSlcXG4yMDEwOlxcdFxcdFxcdGdvdG8gcmFuZ2VfZW5kO1xcbjIwMTE6XFx0XFxuMjAxMjpcXHRcXHRWTV9XQVJOX09OX09OQ0UoYWRkcmVzcyAhPSBwdm13LmFkZHJlc3MpO1xcbjIwMTM6XFx0XFxuMjAxNDpcXHRcXHRwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSk7XFxuMjAxNTpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXB0ZV9wcmVzZW50KHB0ZXZhbCkpO1xcbjIwMTY6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHB0ZV9wZm4ocHRldmFsKSAhPSBmb2xpb19wZm4oZm9saW8pKTtcXG4yMDE3OlxcdFxcbjIwMTg6XFx0XFx0LypcXG4yMDE5OlxcdFxcdCAqIGh1Z2VfcG1kX3Vuc2hhcmUgbWF5IHVubWFwIGFuIGVudGlyZSBQTUQgcGFnZS4gVGhlcmUgaXMgbm8gd2F5IG9mXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjAwOjIzLjcyNzM0Mzk4MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDUxODQ1NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgSHVnZXRsYiBJbnRlcmFjdGlvbiBpbiBgdHJ5X3RvX3VubWFwX29uZWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHJlY2VudCBjaGFuZ2UgaW4gYHRyeV90b191bm1hcF9vbmVgIGFuZCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgcmVtb3ZlZCBhIGNvbmRpdGlvbmFsIGNoZWNrIGZvciBgZm9saW9fdGVzdF9odWdldGxiYC4gUHJldmlvdXNseSwgdGhlIGNvZGUgZGV0ZXJtaW5lZCBpZiBpdCB3YXMgYSBIdWdlVExCIGZvbGlvIGFuZCB1c2VkIGBodWdlX3B0ZXBfZ2V0YCBhY2NvcmRpbmdseS4gTm93LCBpdCdzIGp1c3QgYSBkaXJlY3QgYHB0ZXBfZ2V0YC4gSSBnZXQgdGhlIGZlZWxpbmcgc29tZXRoaW5nIGhhcyBiZWVuIGNoYW5nZWQuXG5cbk15IGZpcnN0IHRob3VnaHQ6IGlzIGB0cnlfdG9fdW5tYXBfb25lYCBldmVuICpjYWxsZWQqIHdpdGggSHVnZVRMQiBmb2xpb3MgYW55bW9yZT8gSXQgc2VlbXMgbGlrZSB0aGlzIHJlbW92YWwgbWlnaHQgbm90IGhhdmUgaGFkIHRoYXQgYmlnIGFuIGVmZmVjdC4gSXQncyBhIGtleSBxdWVzdGlvbi5cblxuVG8gZmlndXJlIHRoaXMgb3V0LCBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgc291cmNlLiBJIG5lZWQgdG8gYmUgc3VyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2l0aGluIGBtbS9ybWFwLmNgLCBmb2N1c2luZyBvbiB0aGUgYXJlYSBhcm91bmQgdGhlIGB0cnlfdG9fdW5tYXBfb25lYCBkZWZpbml0aW9uLCByb3VnaGx5IGxpbmVzIDIyMDAgdG8gMjQ0MCBvciBzby4gSSdsbCBzZWFyY2ggZm9yIGFueSByZWZlcmVuY2VzIHRvIGBmb2xpb190ZXN0X2h1Z2V0bGJgLiBJZiB0aGVyZSBhcmUgbm8gY2FsbHMgdG8gdGhhdCBmdW5jdGlvbiB3aXRoaW4gdGhhdCBjb2RlIGJsb2NrLCB0aGVuIGl0J3MgaGlnaGx5IHVubGlrZWx5IHRoYXQgYHRyeV90b191bm1hcF9vbmVgIGV2ZXIgcHJvY2Vzc2VzIGEgSHVnZVRMQiBmb2xpbywgYW5kIHRoZSBjaGFuZ2UgaXMgcHJvYmFibHkgZmluZS4gSWYgSSAqZG8qIGZpbmQgaXQsIHdlbGwsIHRoZW4gSSBoYXZlIHNvbWV0aGluZyB0byBsb29rIGF0LiBOb3csIHdoZXJlIGlzIHRoZSBncmVwP1xuXG5cbiIsIklucHV0VG9rZW5zIjo5MzE1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6MDA6MjYuNzc5MTkzMDI4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9ybWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMyMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjMyMDpcXHRcXHRcXHRcXHRlbmRfYWRkciA9IGFkZHJlc3MgKyBucl9wYWdlcyAqIFBBR0VfU0laRTtcXG4yMzIxOlxcdFxcdFxcdFxcdGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgYWRkcmVzcywgZW5kX2FkZHIpO1xcbjIzMjI6XFx0XFxuMjMyMzpcXHRcXHRcXHRcXHQvKiBOdWtlIHRoZSBwYWdlIHRhYmxlIGVudHJ5LiAqL1xcbjIzMjQ6XFx0XFx0XFx0XFx0cHRldmFsID0gZ2V0X2FuZF9jbGVhcl9wdGVzKG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgbnJfcGFnZXMpO1xcbjIzMjU6XFx0XFx0XFx0XFx0LypcXG4yMzI2OlxcdFxcdFxcdFxcdCAqIFdlIGNsZWFyIHRoZSBQVEUgYnV0IGRvIG5vdCBmbHVzaCBzbyBwb3RlbnRpYWxseVxcbjIzMjc6XFx0XFx0XFx0XFx0ICogYSByZW1vdGUgQ1BVIGNvdWxkIHN0aWxsIGJlIHdyaXRpbmcgdG8gdGhlIGZvbGlvLlxcbjIzMjg6XFx0XFx0XFx0XFx0ICogSWYgdGhlIGVudHJ5IHdhcyBwcmV2aW91c2x5IGNsZWFuIHRoZW4gdGhlXFxuMjMyOTpcXHRcXHRcXHRcXHQgKiBhcmNoaXRlY3R1cmUgbXVzdCBndWFyYW50ZWUgdGhhdCBhIGNsZWFyLVxcdTAwM2VkaXJ0eVxcbjIzMzA6XFx0XFx0XFx0XFx0ICogdHJhbnNpdGlvbiBvbiBhIGNhY2hlZCBUTEIgZW50cnkgaXMgd3JpdHRlbiB0aHJvdWdoXFxuMjMzMTpcXHRcXHRcXHRcXHQgKiBhbmQgdHJhcHMgaWYgdGhlIFBURSBpcyB1bm1hcHBlZC5cXG4yMzMyOlxcdFxcdFxcdFxcdCAqL1xcbjIzMzM6XFx0XFx0XFx0XFx0aWYgKHNob3VsZF9kZWZlcl9mbHVzaChtbSwgZmxhZ3MpKVxcbjIzMzQ6XFx0XFx0XFx0XFx0XFx0c2V0X3RsYl91YmNfZmx1c2hfcGVuZGluZyhtbSwgcHRldmFsLCBhZGRyZXNzLCBlbmRfYWRkcik7XFxuMjMzNTpcXHRcXHRcXHRcXHRlbHNlXFxuMjMzNjpcXHRcXHRcXHRcXHRcXHRmbHVzaF90bGJfcmFuZ2Uodm1hLCBhZGRyZXNzLCBlbmRfYWRkcik7XFxuMjMzNzpcXHRcXHRcXHRcXHRpZiAocHRlX2RpcnR5KHB0ZXZhbCkpXFxuMjMzODpcXHRcXHRcXHRcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4yMzM5OlxcdFxcdFxcdH0gZWxzZSB7XFxuMjM0MDpcXHRcXHRcXHRcXHRwdGVfY2xlYXIobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcXG4yMzQxOlxcdFxcdFxcdH1cXG4yMzQyOlxcdFxcbjIzNDM6XFx0XFx0XFx0LypcXG4yMzQ0OlxcdFxcdFxcdCAqIE5vdyB0aGUgcHRlIGlzIGNsZWFyZWQuIElmIHRoaXMgcHRlIHdhcyB1ZmZkLXdwIGFybWVkLFxcbjIzNDU6XFx0XFx0XFx0ICogd2UgbWF5IHdhbnQgdG8gcmVwbGFjZSBhIG5vbmUgcHRlIHdpdGggYSBtYXJrZXIgcHRlIGlmXFxuMjM0NjpcXHRcXHRcXHQgKiBpdCdzIGZpbGUtYmFja2VkLCBzbyB3ZSBkb24ndCBsb3NlIHRoZSB0cmFja2luZyBpbmZvLlxcbjIzNDc6XFx0XFx0XFx0ICovXFxuMjM0ODpcXHRcXHRcXHRjb25kX2luc3RhbGxfdWZmZF93cF9wdGVzKHZtYSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCxcXG4yMzQ5OlxcdFxcdFxcdFxcdFxcdFxcdCAgbnJfcGFnZXMpO1xcbjIzNTA6XFx0XFxuMjM1MTpcXHRcXHRcXHQvKiBVcGRhdGUgaGlnaCB3YXRlcm1hcmsgYmVmb3JlIHdlIGxvd2VyIHJzcyAqL1xcbjIzNTI6XFx0XFx0XFx0dXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTtcXG4yMzUzOlxcdFxcbjIzNTQ6XFx0XFx0XFx0LyogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBvbmx5IHJlZnMgb3JkZXItMCBmb2xpb3MgKi9cXG4yMzU1OlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBUVFVfSFdQT0lTT04pKSB7XFxuMjM1NjpcXHRcXHRcXHRcXHRwdGV2YWwgPSBzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkocGFnZSkpO1xcbjIzNTc6XFx0XFx0XFx0XFx0ZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIoZm9saW8pKTtcXG4yMzU4OlxcdFxcdFxcdFxcdHNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpO1xcbjIzNTk6XFx0XFx0XFx0fSBlbHNlIGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkgXFx1MDAyNlxcdTAwMjYgcHRlX3VudXNlZChwdGV2YWwpIFxcdTAwMjZcXHUwMDI2XFxuMjM2MDpcXHRcXHRcXHRcXHQgICAhdXNlcmZhdWx0ZmRfYXJtZWQodm1hKSkge1xcbjIzNjE6XFx0XFx0XFx0XFx0LypcXG4yMzYyOlxcdFxcdFxcdFxcdCAqIFRoZSBndWVzdCBpbmRpY2F0ZWQgdGhhdCB0aGUgcGFnZSBjb250ZW50IGlzIG9mIG5vXFxuMjM2MzpcXHRcXHRcXHRcXHQgKiBpbnRlcmVzdCBhbnltb3JlLiBTaW1wbHkgZGlzY2FyZCB0aGUgcHRlLCB2bXNjYW5cXG4yMzY0OlxcdFxcdFxcdFxcdCAqIHdpbGwgdGFrZSBjYXJlIG9mIHRoZSByZXN0LlxcbjIzNjU6XFx0XFx0XFx0XFx0ICogQSBmdXR1cmUgcmVmZXJlbmNlIHdpbGwgdGhlbiBmYXVsdCBpbiBhIG5ldyB6ZXJvXFxuMjM2NjpcXHRcXHRcXHRcXHQgKiBwYWdlLiBXaGVuIHVzZXJmYXVsdGZkIGlzIGFjdGl2ZSwgd2UgbXVzdCBub3QgZHJvcFxcbjIzNjc6XFx0XFx0XFx0XFx0ICogdGhpcyBwYWdlIHRob3VnaCwgYXMgaXRzIG1haW4gdXNlciAocG9zdGNvcHlcXG4yMzY4OlxcdFxcdFxcdFxcdCAqIG1pZ3JhdGlvbikgd2lsbCBub3QgZXhwZWN0IHVzZXJmYXVsdHMgb24gYWxyZWFkeVxcbjIzNjk6XFx0XFx0XFx0XFx0ICogY29waWVkIHBhZ2VzLlxcbjIzNzA6XFx0XFx0XFx0XFx0ICovXFxuMjM3MTpcXHRcXHRcXHRcXHRkZWNfbW1fY291bnRlcihtbSwgbW1fY291bnRlcihmb2xpbykpO1xcbjIzNzI6XFx0XFx0XFx0fSBlbHNlIGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XFxuMjM3MzpcXHRcXHRcXHRcXHRpZiAoIXR0dV9hbm9uX2ZvbGlvKHZtYSwgZm9saW8sIHBhZ2UsIGFkZHJlc3MsXFxuMjM3NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgcHZtdy5wdGUsIHB0ZXZhbCwgbnJfcGFnZXMpKSB7XFxuMjM3NTpcXHRcXHRcXHRcXHRcXHRzZXRfcHRlcyhtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCwgbnJfcGFnZXMpO1xcbjIzNzY6XFx0XFx0XFx0XFx0XFx0Z290byB3YWxrX2Fib3J0O1xcbjIzNzc6XFx0XFx0XFx0XFx0fVxcbjIzNzg6XFx0XFxuMjM3OTpcXHRcXHRcXHRcXHRnb3RvIGZpbmlzaF91bm1hcDtcXG4yMzgwOlxcdFxcdFxcdH0gZWxzZSB7XFxuMjM4MTpcXHRcXHRcXHRcXHQvKlxcbjIzODI6XFx0XFx0XFx0XFx0ICogVGhpcyBpcyBhIGxvY2tlZCBmaWxlLWJhY2tlZCBmb2xpbyxcXG4yMzgzOlxcdFxcdFxcdFxcdCAqIHNvIGl0IGNhbm5vdCBiZSByZW1vdmVkIGZyb20gdGhlIHBhZ2VcXG4yMzg0OlxcdFxcdFxcdFxcdCAqIGNhY2hlIGFuZCByZXBsYWNlZCBieSBhIG5ldyBmb2xpbyBiZWZvcmVcXG4yMzg1OlxcdFxcdFxcdFxcdCAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCwgc28gbm9cXG4yMzg2OlxcdFxcdFxcdFxcdCAqIGNvbmN1cnJlbnQgdGhyZWFkIG1pZ2h0IHVwZGF0ZSBpdHMgcGFnZSB0YWJsZVxcbjIzODc6XFx0XFx0XFx0XFx0ICogdG8gcG9pbnQgYXQgYSBuZXcgZm9saW8gd2hpbGUgYSBkZXZpY2UgaXNcXG4yMzg4OlxcdFxcdFxcdFxcdCAqIHN0aWxsIHVzaW5nIHRoaXMgZm9saW8uXFxuMjM4OTpcXHRcXHRcXHRcXHQgKlxcbjIzOTA6XFx0XFx0XFx0XFx0ICogU2VlIERvY3VtZW50YXRpb24vbW0vbW11X25vdGlmaWVyLnJzdFxcbjIzOTE6XFx0XFx0XFx0XFx0ICovXFxuMjM5MjpcXHRcXHRcXHRcXHRhZGRfbW1fY291bnRlcihtbSwgbW1fY291bnRlcl9maWxlKGZvbGlvKSwgLW5yX3BhZ2VzKTtcXG4yMzkzOlxcdFxcdFxcdH1cXG4yMzk0OlxcdGZpbmlzaF91bm1hcDpcXG4yMzk1OlxcdFxcdFxcdGZvbGlvX3JlbW92ZV9ybWFwX3B0ZXMoZm9saW8sIHBhZ2UsIG5yX3BhZ2VzLCB2bWEpO1xcbjIzOTY6XFx0XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9MT0NLRUQpXFxuMjM5NzpcXHRcXHRcXHRcXHRtbG9ja19kcmFpbl9sb2NhbCgpO1xcbjIzOTg6XFx0XFx0XFx0Zm9saW9fcHV0X3JlZnMoZm9saW8sIG5yX3BhZ2VzKTtcXG4yMzk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTowMDoyNi43NzkzOTY2MzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM1NTE0OTA1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRGVhZCBDb2RlIGluIHRoZSBIdWdlVExCIFVubWFwcGluZyBQYXRoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBzb21lIHBvdGVudGlhbGx5IGRlYWQgY29kZSByZWxhdGVkIHRvIEh1Z2VUTEIgZm9saW8gdW5tYXBwaW5nLiBJIHJlbWVtYmVyIHRoYXQgdGhlIGB0cnlfdG9fdW5tYXBgIGZ1bmN0aW9uIHdhcyBzcGxpdCwgYW5kIHRoZSBoYW5kbGluZyBvZiBIdWdlVExCIGZvbGlvcyB3YXMgc3BlY2lmaWNhbGx5IGRpcmVjdGVkIHRvIGB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmVgLiBIb3dldmVyLCBJIG5vdGljZWQgYSBsZWZ0b3ZlciBjaGVjayB3aXRoaW4gYHRyeV90b191bm1hcF9vbmVgOiBhbiBgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpYCBjb25kaXRpb24uIFRoaXMgcmFpc2VkIGEgcmVkIGZsYWcuIElzIHRoaXMgZXZlbiByZWxldmFudCBhbnltb3JlP1xuXG5NeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgdGhpcyBjaGVjayBpcyBub3cgY29tcGxldGVseSByZWR1bmRhbnQgYmVjYXVzZSBgdHJ5X3RvX3VubWFwX29uZWAgc2hvdWxkbid0IGV2ZXIgYmUgY2FsbGVkIG9uIGEgSHVnZVRMQiBmb2xpbyBkaXJlY3RseSBhZnRlciB0aGUgc3BsaXQuIEJ1dCwgSSBuZWVkIHRvIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24uXG5cbkZpcnN0LCBJIHNlYXJjaGVkIHRoZSBjb2RlYmFzZSB0byBjb25maXJtIGlmIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBhY3R1YWxseSBjYWxsZWQgb24gSHVnZVRMQiBmb2xpb3MuIE15IGluaXRpYWwgZ3JlcCByZXN1bHRzIHdlcmUgZnJvbSBgbW0vZmlsZW1hcC5jYCwgYG1tL21lbW9yeS1mYWlsdXJlLmNgLCBgbW0vbWxvY2suY2AsIGFuZCBgbW0vcm1hcC5jYCAtIGFsbCByZWxhdGVkIHRvIGNvbW1lbnRzIVxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9ybWFwLmNgLCB0aGUgZm9sbG93aW5nIGlzIHJldmVhbGVkOlxuXG5gYGBjXG5tbS9ybWFwLmM6MjIwMTogc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZSguLi4pXG5tbS9ybWFwLmM6MjQ0NDogLnJtYXBfb25lID0gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSA/IHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZSA6IHRyeV90b191bm1hcF9vbmUsXG5gYGBcblxuU28gYHRyeV90b191bm1hcF9vbmVgIGlzIG5vdCByZWZlcmVuY2VkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGUsIGFuZCBpbiBgdHJ5X3RvX3VubWFwYDpcblxuYGBgY1xudm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG57XG5cdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XG5cdFx0LnJtYXBfb25lID0gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSA/XG5cdFx0XHRcdHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZSA6IHRyeV90b191bm1hcF9vbmUsXG5cdFx0LmFyZyA9ICh2b2lkICopZmxhZ3MsXG5cdH07XG5gYGBcblxuVGhpcyBjb25maXJtcyBteSBzdXNwaWNpb24uIFRoZSBgdHJ5X3RvX3VubWFwYCBmdW5jdGlvbiB1c2VzIGB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmVgIHdoZW4gdGhlIGZvbGlvICppcyogYSBIdWdlVExCLiBDb25zZXF1ZW50bHksIGB0cnlfdG9fdW5tYXBfb25lYCBpcyAqbmV2ZXIqIGNhbGxlZCB3aGVuIGBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pYCBpcyB0cnVlLiBUaGVyZWZvcmUsIHRoZSBgaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpYCBjaGVjayBpbnNpZGUgYHRyeV90b191bm1hcF9vbmVgIGlzIGFsd2F5cyBnb2luZyB0byBldmFsdWF0ZSB0byBmYWxzZSEgVGhpcyBpcyBkZWFkIGNvZGUsIHJpcGUgZm9yIHJlbW92YWwuXG5cbk5vdywgb3V0IG9mIGFuIGFidW5kYW5jZSBvZiBjYXV0aW9uLCBJIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayBhIHNpbWlsYXIgcmVsYXRlZCBmdW5jdGlvbiwgc3VjaCBhcyBgdHJ5X3RvX21pZ3JhdGVfb25lYCBpbiBgdHJ5X3RvX21pZ3JhdGVgLiBMZXQncyBoYXZlIGEgcXVpY2sgbG9vay4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI0MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjAwOjMyLjEzNDU0Nzg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDMyNzA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fbWlncmF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0zMTg4PXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMzUyLVxcdFxcdCAqIEluIGNhc2Ugd2UgY2Fubm90IGNsZWFyIFBhZ2VBbm9uRXhjbHVzaXZlKCksIHNwbGl0IHRoZSBQTURcXG5tbS9odWdlX21lbW9yeS5jOjMzNTM6XFx0XFx0ICogb25seSBhbmQgbGV0IHRyeV90b19taWdyYXRlX29uZSgpIGZhaWwgbGF0ZXIuXFxubW0vaHVnZV9tZW1vcnkuYy0zMzU0LVxcdFxcdCAqXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM1Mzg9c3RhdGljIHZvaWQgdW5tYXBfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzU1My1cXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcXG5tbS9odWdlX21lbW9yeS5jOjM1NTQ6XFx0XFx0dHJ5X3RvX21pZ3JhdGUoZm9saW8sIHR0dV9mbGFncyk7XFxubW0vaHVnZV9tZW1vcnkuYy0zNTU1LVxcdGVsc2VcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzYzNj1zdGF0aWMgdm9pZCByZW1hcF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgbnIsIGludCBmbGFncylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzYzOS1cXG5tbS9odWdlX21lbW9yeS5jOjM2NDA6XFx0LyogSWYgdW5tYXBfZm9saW8oKSB1c2VzIHRyeV90b19taWdyYXRlKCkgb24gZmlsZSwgcmVtb3ZlIHRoaXMgY2hlY2sgKi9cXG5tbS9odWdlX21lbW9yeS5jLTM2NDEtXFx0aWYgKCFmb2xpb190ZXN0X2Fub24oZm9saW8pKVxcbi0tXFxubW0vbWlncmF0ZS5jPTEyMTM9c3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX3VubWFwKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTI4My1cXHQvKlxcbm1tL21pZ3JhdGUuYzoxMjg0OlxcdCAqIEJ5IHRyeV90b19taWdyYXRlKCksIHNyYy1cXHUwMDNlbWFwY291bnQgZ29lcyBkb3duIHRvIDAgaGVyZS4gSW4gdGhpcyBjYXNlLFxcbm1tL21pZ3JhdGUuYy0xMjg1LVxcdCAqIHdlIGNhbm5vdCBub3RpY2UgdGhhdCBhbm9uX3ZtYSBpcyBmcmVlZCB3aGlsZSB3ZSBtaWdyYXRlIGEgcGFnZS5cXG4tLVxcbm1tL21pZ3JhdGUuYy0xMzM3LVxcdFxcdFxcdCAgICAgICAhZm9saW9fdGVzdF9rc20oc3JjKSBcXHUwMDI2XFx1MDAyNiAhYW5vbl92bWEsIHNyYyk7XFxubW0vbWlncmF0ZS5jOjEzMzg6XFx0XFx0dHJ5X3RvX21pZ3JhdGUoc3JjLCBtb2RlID09IE1JR1JBVEVfQVNZTkMgPyBUVFVfQkFUQ0hfRkxVU0ggOiAwKTtcXG5tbS9taWdyYXRlLmMtMTMzOS1cXHRcXHRvbGRfZm9saW9fc3RhdGUgfD0gRk9MSU9fV0FTX01BUFBFRDtcXG4tLVxcbm1tL21pZ3JhdGUuYz0xNDgwPXN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZXRsYl9mb2xpbyhuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE1NDQtXFxubW0vbWlncmF0ZS5jOjE1NDU6XFx0XFx0dHJ5X3RvX21pZ3JhdGUoc3JjLCB0dHUpO1xcbm1tL21pZ3JhdGUuYy0xNTQ2LVxcdFxcdHdhc19tYXBwZWQgPSAxO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0yNDU9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNDA3LVxcdFxcdCAqIG9wdGltaXNhdGlvbiB0byBhdm9pZCB3YWxraW5nIHRoZSBybWFwIGxhdGVyIHdpdGhcXG5tbS9taWdyYXRlX2RldmljZS5jOjQwODpcXHRcXHQgKiB0cnlfdG9fbWlncmF0ZSgpLlxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNDA5LVxcdFxcdCAqL1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz01NzE9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfdW5tYXAodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTYxOS1cXHRcXHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS9taWdyYXRlX2RldmljZS5jOjYyMDpcXHRcXHRcXHR0cnlfdG9fbWlncmF0ZShmb2xpbywgMCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy02MjEtXFxuLS1cXG5tbS9ybWFwLmM9MjQ0MD12b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG4tLVxcbm1tL3JtYXAuYy0yNDYxLSAqL1xcbm1tL3JtYXAuYzoyNDYyOnN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9ybWFwLmMtMjQ2My1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxcbi0tXFxubW0vcm1hcC5jLTI0NzctXFx0ICogaW4gYmV0d2VlbiBpdHMgcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwoKSBhbmQgZm9saW9fcmVtb3ZlX3JtYXBfKigpLFxcbm1tL3JtYXAuYzoyNDc4OlxcdCAqIHRyeV90b19taWdyYXRlKCkgbWF5IHJldHVybiBiZWZvcmUgZm9saW9fbWFwcGVkKCkgaGFzIGJlY29tZSBmYWxzZSxcXG5tbS9ybWFwLmMtMjQ3OS1cXHQgKiBpZiBwYWdlIHRhYmxlIGxvY2tpbmcgaXMgc2tpcHBlZDogdXNlIFRUVV9TWU5DIHRvIHdhaXQgZm9yIHRoYXQuXFxuLS1cXG5tbS9ybWFwLmMtMjc4MS0vKipcXG5tbS9ybWFwLmM6Mjc4MjogKiB0cnlfdG9fbWlncmF0ZSAtIHRyeSB0byByZXBsYWNlIGFsbCBwYWdlIHRhYmxlIG1hcHBpbmdzIHdpdGggc3dhcCBlbnRyaWVzXFxubW0vcm1hcC5jLTI3ODMtICogQGZvbGlvOiB0aGUgZm9saW8gdG8gcmVwbGFjZSBwYWdlIHRhYmxlIGVudHJpZXMgZm9yXFxuLS1cXG5tbS9ybWFwLmMtMjc4OC0gKi9cXG5tbS9ybWFwLmM6Mjc4OTp2b2lkIHRyeV90b19taWdyYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxcbm1tL3JtYXAuYy0yNzkwLXtcXG5tbS9ybWFwLmMtMjc5MS1cXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xcbm1tL3JtYXAuYzoyNzkyOlxcdFxcdC5ybWFwX29uZSA9IHRyeV90b19taWdyYXRlX29uZSxcXG5tbS9ybWFwLmMtMjc5My1cXHRcXHQuYXJnID0gKHZvaWQgKilmbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6MDA6MzIuMTg4ODgyNDQ4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2ODU1MDYwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3VidGxlIE1lbW9yeSBNYW5hZ2VtZW50IE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBleHBlcnQgaW50dWl0aW9uIGlzIHRpbmdsaW5nLiBJdCdzIGEgc2VlbWluZ2x5IG1pbm9yIGNoYW5nZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGZvbGlvIHVubWFwcGluZy4gTGV0J3MgYnJlYWsgaXQgZG93bi5cblxuV2UgaGF2ZSB0aGVzZSB0d28ga2V5IGZ1bmN0aW9ucyBpbiBwbGF5OiBgdHJ5X3RvX21pZ3JhdGVgIGFuZCBgdHJ5X3RvX3VubWFwYC4gSW4gYHRyeV90b19taWdyYXRlYCwgdGhlIGNvZGUgcGF0aCBpcyBzdHJhaWdodGZvcndhcmQ6IGByd2Mucm1hcF9vbmUgPSB0cnlfdG9fbWlncmF0ZV9vbmU7YC4gVGhpcyBoYW5kbGVzIGJvdGggaHVnZSBwYWdlcyAoaHVnZXRsYikgYW5kIHJlZ3VsYXIgZm9saW9zLiBIb3dldmVyLCBgdHJ5X3RvX3VubWFwYCBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBIZXJlLCB0aGUgYXNzaWdubWVudCBpcyBjb25kaXRpb25hbDogYHJ3Yy5ybWFwX29uZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgPyB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUgOiB0cnlfdG9fdW5tYXBfb25lO2AuIFNvLCBkZXBlbmRpbmcgb24gaWYgaXQncyBhIGh1Z2UgcGFnZSBvciBub3QsIGEgZGlmZmVyZW50IGNhbGxiYWNrIGlzIGNob3Nlbi5cblxuTm93LCB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gdGFyZ2V0cyBhIHJlZHVuZGFudCBjaGVjayAqaW5zaWRlKiBgdHJ5X3RvX3VubWFwX29uZWAuIEl0IHdhcyBkb2luZzogYGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSBwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KC4uLikgZWxzZSBwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7YC4gVGhlIHBhdGNoIHNpbXBseSByZW1vdmVzIHRoZSBgaWZgIGFuZCB1c2VzIGBwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7YC4gV2hpY2ggbG9va3MgZmluZSBidXQuLi5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgKmFsd2F5cyogdG8gdmVyaWZ5IHRoZXJlIGlzbid0IHNvbWUgdW5mb3Jlc2VlbiBiZWhhdmlvcmFsIGNoYW5nZS4gTGV0J3MgZG8gYSBsaXR0bGUgZGVlcCBkaXZlLCBzdGFydGluZyB3aXRoIHRoZSBnaXQgbG9ncy4gSXMgdGhlcmUgYSBjb21taXQgbWVzc2FnZSBvciBoaXN0b3J5IHRoYXQgZXhwbGFpbnMgdGhpcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqLiBJZiBub3QsIEknbGwgbmVlZCB0byBkbyBzb21lIG1vcmUgYW5hbHlzaXMuXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgKndoeSogdGhhdCByZWR1bmRhbnQgY2hlY2sgd2FzIHRoZXJlIGluIHRoZSBmaXJzdCBwbGFjZT8gQmVjYXVzZSwgaW4gKm15KiBtaW5kLCBgZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKWAgaXMgQUxXQVlTIGdvaW5nIHRvIGJlIGZhbHNlIGluc2lkZSBgdHJ5X3RvX3VubWFwX29uZWAuIFRoZSBwcmV2aW91cyBsb2dpYyBzaG91bGQgbWFrZSB0aGF0IGNsZWFyLiBgdHJ5X3RvX3VubWFwX29uZWAgaXMgb25seSBjYWxsZWQgaWYgaXQgaXNuJ3QgYSBodWdlIHBhZ2UgaW4gdGhlIGZpcnN0IHBsYWNlLlxuXG5TbywgbGV0J3MgYmFjayB1cCBhbmQgY29uZmlybS4gSXMgdGhlcmUgKmFueSogc2NlbmFyaW8gd2hlcmUgYHRyeV90b191bm1hcF9vbmVgIGlzICpldmVyKiBjYWxsZWQgd2l0aCBhIGh1Z2UgcGFnZSBmb2xpbz8gVGhlIGxvZ2ljIEknbSBmYW1pbGlhciB3aXRoIG1ha2VzIG1lIHRoaW5rIG5vLiBJJ2xsIHNlYXJjaCB0aGUgY29kZWJhc2UgdG8gc2VlIHdoZXJlIGB0cnlfdG9fdW5tYXBfb25lYCBpcyB1c2VkLiBRdWljayBncmVwIGFjcm9zcyBgbW0vYCBkaXJlY3RvcnkgcmV2ZWFscyBpdCBpcyBvbmx5IGNhbGxlZCBpbiBgbW0vcm1hcC5jYCBhdCBsaW5lIDI0NDQuIExldCdzIGNoZWNrIHRoZSBlbnRpcmUgcmVwbyB0byBtYWtlIHN1cmUgdGhhdCBpcyBhY2N1cmF0ZS5cbmBgYGNcbnZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxue1xuXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xuXHRcdC5ybWFwX29uZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgP1xuXHRcdFx0XHR0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUgOiB0cnlfdG9fdW5tYXBfb25lLFxuXHRcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxuYGBgXG5Pa2F5LCBgdHJ5X3RvX3VubWFwX29uZWAgKml0c2VsZiogaXMgY2FsbGVkIGJhc2VkIG9uIHRoZSBgZm9saW9fdGVzdF9odWdldGxiYCBjaGVjay4gVGhpcyBpcyAqZXhhY3RseSogd2hhdCBJIGV4cGVjdGVkLCBhbmQgaXQgY29uZmlybXMgdGhlIHJlZHVuZGFuY3kuIFdpdGggdGhpcyBkZWVwZXIgdW5kZXJzdGFuZGluZyBJIGNhbiBzYXkgd2l0aCBjb25maWRlbmNlIHRoYXQgdGhpcyBwYXRjaCBpcyBjb3JyZWN0LCByZW1vdmluZyBkZWFkIGNvZGUgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBoaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzU4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjAwOjM4Ljg3NDM5MTkxNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NTUyNjU2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fdW5tYXBfb25lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9NDQwPVRoZXJlIGlzIGFsc28gYSBmaWxlLXN5c3RlbSBzcGVjaWZpYyBsb2NrIG9yZGVyaW5nIGNvbW1lbnQgbG9jYXRlZCBhdCB0aGUgdG9wIG9mXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTQ3Ni0gIC1cXHUwMDNlcGFnZV90YWJsZV9sb2NrIG9yIHB0ZV9sb2NrXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo0Nzc6ICAgIC1cXHUwMDNlc3dhcF9sb2NrICAgICAgICAgICAgICAgICAgICAgICAgICh0cnlfdG9fdW5tYXBfb25lKVxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6NDc4OiAgICAtXFx1MDAzZXByaXZhdGVfbG9jayAgICAgICAgICAgICAgICAgICAgICAodHJ5X3RvX3VubWFwX29uZSlcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjQ3OTogICAgLVxcdTAwM2VpX3BhZ2VzIGxvY2sgICAgICAgICAgICAgICAgICAgICAgKHRyeV90b191bm1hcF9vbmUpXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC00ODAtICAgIC1cXHUwMDNlbHJ1dmVjLVxcdTAwM2VscnVfbG9jayAgICAgICAgICAgICAgICAgIChmb2xsb3dfcGFnZV9tYXNrLVxcdTAwM2VtYXJrX3BhZ2VfYWNjZXNzZWQpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3VuZXZpY3RhYmxlLWxydS5yc3Q9NTU1PXJtYXAncyBmb2xpb19yZWZlcmVuY2VkX29uZSgpLCBjYWxsZWQgdmlhIHZtc2NhbidzIHNocmlua19hY3RpdmVfbGlzdCgpIG9yXFxuRG9jdW1lbnRhdGlvbi9tbS91bmV2aWN0YWJsZS1scnUucnN0OjU1NjpzaHJpbmtfZm9saW9fbGlzdCgpLCBhbmQgcm1hcCdzIHRyeV90b191bm1hcF9vbmUoKSBjYWxsZWQgdmlhIHNocmlua19mb2xpb19saXN0KCksXFxuRG9jdW1lbnRhdGlvbi9tbS91bmV2aWN0YWJsZS1scnUucnN0LTU1Ny1jaGVjayBmb3IgKDMpIHBhZ2VzIHN0aWxsIG1hcHBlZCBpbnRvIFZNX0xPQ0tFRCBWTUFzLCBhbmQgY2FsbCBtbG9ja192bWFfZm9saW8oKVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaD0xOT10eXBlZGVmIHN0cnVjdCB7XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oLTMzLSAqIHJvbGxvdmVyIGV2ZW50IChzZWUgbmV3X2NvbnRleHQoKSBhbmQgZmx1c2hfY29udGV4dCgpKS4gSW4gdGhpcyBjYXNlLFxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11Lmg6MzQ6ICogYSBjb25jdXJyZW50IFRMQkkgKGUuZy4gdmlhIHRyeV90b191bm1hcF9vbmUoKSBhbmQgcHRlcF9jbGVhcl9mbHVzaCgpKVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmgtMzUtICogbWF5IHVzZSBhIHN0YWxlIEFTSUQuIFRoaXMgaXMgZmluZSBpbiBwcmluY2lwbGUgYXMgdGhlIG5ldyBBU0lEIGlzXFxuLS1cXG5mcy9uaWxmczIvaW5vZGUuYz0xNzc9c3RhdGljIGJvb2wgbmlsZnNfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9uaWxmczIvaW5vZGUuYy0xODUtXFx0LypcXG5mcy9uaWxmczIvaW5vZGUuYzoxODY6XFx0ICogVGhlIHBhZ2UgbWF5IG5vdCBiZSBsb2NrZWQsIGVnIGlmIGNhbGxlZCBmcm9tIHRyeV90b191bm1hcF9vbmUoKVxcbmZzL25pbGZzMi9pbm9kZS5jLTE4Ny1cXHQgKi9cXG4tLVxcbm1tL2ZpbGVtYXAuYy0xMTQtICogIC1cXHUwMDNlcGFnZV90YWJsZV9sb2NrIG9yIHB0ZV9sb2NrXFxubW0vZmlsZW1hcC5jOjExNTogKiAgICAtXFx1MDAzZXN3YXBfbG9ja1xcdFxcdCh0cnlfdG9fdW5tYXBfb25lKVxcbm1tL2ZpbGVtYXAuYzoxMTY6ICogICAgLVxcdTAwM2Vwcml2YXRlX2xvY2tcXHRcXHQodHJ5X3RvX3VubWFwX29uZSlcXG5tbS9maWxlbWFwLmM6MTE3OiAqICAgIC1cXHUwMDNlaV9wYWdlcyBsb2NrXFx0XFx0KHRyeV90b191bm1hcF9vbmUpXFxubW0vZmlsZW1hcC5jLTExOC0gKiAgICAtXFx1MDAzZWxydXZlYy1cXHUwMDNlbHJ1X2xvY2tcXHQoZm9sbG93X3BhZ2VfbWFzay1cXHUwMDNlbWFya19wYWdlX2FjY2Vzc2VkKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzg2PWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTcxLVxcdCAqIGV4YW1wbGUgaXMgYW4gbWxvY2tlZCBwYWdlLCB3aGVyZSBQR19tbG9ja2VkIGlzIGNsZWFyZWQgYnlcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI1NzI6XFx0ICogZm9saW9fcmVtb3ZlX3JtYXBfKigpIGluIHRyeV90b191bm1hcF9vbmUoKS4gU28gdG8gZGV0ZXJtaW5lIHBhZ2VcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1NzMtXFx0ICogc3RhdHVzIGNvcnJlY3RseSwgd2Ugc2F2ZSBhIGNvcHkgb2YgdGhlIHBhZ2UgZmxhZ3MgYXQgdGhpcyB0aW1lLlxcbi0tXFxubW0vbWxvY2suYz00Njc9c3RhdGljIGludCBtbG9ja19maXh1cChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWxvY2suYy01MDItXFx0ICogdm1fZmxhZ3MgaXMgcHJvdGVjdGVkIGJ5IHRoZSBtbWFwX2xvY2sgaGVsZCBpbiB3cml0ZSBtb2RlLlxcbm1tL21sb2NrLmM6NTAzOlxcdCAqIEl0J3Mgb2theSBpZiB0cnlfdG9fdW5tYXBfb25lIHVubWFwcyBhIHBhZ2UganVzdCBhZnRlciB3ZVxcbm1tL21sb2NrLmMtNTA0LVxcdCAqIHNldCBWTUFfTE9DS0VEX0JJVCwgcG9wdWxhdGVfdm1hX3BhZ2VfcmFuZ2Ugd2lsbCBicmluZyBpdCBiYWNrLlxcbi0tXFxubW0vcm1hcC5jPTIxNzg9c3RhdGljIGJvb2wgdHR1X2Fub25fZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9ybWFwLmMtMjIwMC0gKi9cXG5tbS9ybWFwLmM6MjIwMTpzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL3JtYXAuYy0yMjAyLVxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXFxuLS1cXG5tbS9ybWFwLmM9MjQ0MD12b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG4tLVxcbm1tL3JtYXAuYy0yNDQzLVxcdFxcdC5ybWFwX29uZSA9IGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgP1xcbm1tL3JtYXAuYzoyNDQ0OlxcdFxcdFxcdFxcdHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZSA6IHRyeV90b191bm1hcF9vbmUsXFxubW0vcm1hcC5jLTI0NDUtXFx0XFx0LmFyZyA9ICh2b2lkICopZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjAwOjQwLjcxOTkyNDU0MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDU4MTExNTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgXCJXb3J0aEZ1enppbmdcIiBDcml0ZXJpYSBmb3IgYSBEZWFkIENvZGUgUmVtb3ZhbCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZGV0ZXJtaW5lIGlmIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBldmVyIGNhbGxlZCBhbnl3aGVyZSBlbHNlLiBJdCBzZWVtcyBsaWtlIGl0J3Mgc3RhdGljIHdpdGhpbiBgbW0vcm1hcC5jYCBhbmQgaXMgb25seSByZWZlcmVuY2VkIG9uY2UsIGFzIGAucm1hcF9vbmVgIGluIGB0cnlfdG9fdW5tYXAoKWAsIGFuZCBjcnVjaWFsbHksIGl0J3MgZ3VhcmRlZCBieSBgIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbylgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgaW5zaWRlIGB0cnlfdG9fdW5tYXBfb25lKClgLCB0aGUgYGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbylgIGNvbmRpdGlvbiBpcyBBTFdBWVMgZmFsc2UuXG5cblRoZXJlZm9yZSwgdGhlIGBpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlgIGNoZWNrIGluIHRoYXQgZnVuY3Rpb24gd2FzIHB1cmUgZGVhZCBjb2RlLiBSZW1vdmluZyBpdCBoYXMgbm8gZnVuY3Rpb25hbCBpbXBhY3QgYW5kIGRvZXNuJ3QgY2hhbmdlIHRoZSBleGVjdXRpb24gZmxvdyB3aGF0c29ldmVyLlxuXG5Ob3csIGxldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgXCJXb3J0aEZ1enppbmdcIiBjcml0ZXJpYS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBwYXRjaCBzaG91bGQgcmV0dXJuIFwiZmFsc2VcIiBpZiBpdCBvbmx5IGNvbnRhaW5zIGRvY3VtZW50YXRpb24gY2hhbmdlcywgS2NvbmZpZyBmaWxlIG1vZGlmaWNhdGlvbnMsIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGxvZ2dpbmcgb3IgdHJhY2luZywgY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkb24ndCBhZmZlY3QgZXhlY3V0aW9uLCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgb3IgY29kZSBpbiBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZS5cblxuU28sIHRoZSBrZXkgaGVyZSBpcyB3aGV0aGVyIGRlYWQgY29kZSByZW1vdmFsLCBzcGVjaWZpY2FsbHkgcmVmYWN0b3JpbmcvY2xlYW51cCwgaXMgY29uc2lkZXJlZCBcIm5vbi1mdW5jdGlvbmFsXCIgYWNjb3JkaW5nIHRvIHRob3NlIHJ1bGVzLiBHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggcmVtb3ZlcyBhIGRlYWQgYGlmYCBicmFuY2ggZnJvbSBgdHJ5X3RvX3VubWFwX29uZSgpYCwgd2hpY2ggd2FzIGFsd2F5cyBieXBhc3NlZCBhbnl3YXkgYmVjYXVzZSBvZiB0aGUgbG9naWMgaW4gYHRyeV90b191bm1hcCgpYCwgaXQgc2VlbXMgdGhpcyBwYXRjaCBpcyBhIHB1cmUgY2xlYW51cCB3aXRoIG5vIGNoYW5nZSB0byB0aGUgY29kZSdzIGZ1bmN0aW9uYWxpdHkgb3IgdGhlIHdheSBpdCBleGVjdXRlcy4gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdhcyBhbHdheXMgcGVyZm9ybWluZyB0aGUgc2FtZSBhY3Rpb24gZHVlIHRvIHRoZSBgZWxzZWAgYnJhbmNoLCBhbmQgdGhlIHBhdGNoIGtlZXBzIHRoYXQgYGVsc2VgIGJyYW5jaC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkndmUgY29uZmlybWVkIHRoYXQgYHRyeV90b191bm1hcF9vbmVgIGlzIGluZGVlZCBzdGF0aWMsIG9ubHkgdXNlZCBieSBgdHJ5X3RvX3VubWFwYCwgYW5kIHRoZSBjb25kaXRpb25hbCBgZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKWAgd2lsbCBhbHdheXMgZXZhbHVhdGUgdG8gZmFsc2UsIG1lYW5pbmcgdGhlIHJlbW92ZWQgY29kZSB3YXMgZW50aXJlbHkgdW5yZWFjaGFibGUuIFRoZSByZXBsYWNlbWVudCBjb2RlIGBwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSlgIGlzIGlkZW50aWNhbCB0byB3aGF0IHRoZSBgZWxzZWAgYnJhbmNoICphbHdheXMqIGV4ZWN1dGVkLiBObyBmdW5jdGlvbmFsIGNoYW5nZSB3aGF0c29ldmVyLlxuXG5UaHVzLCBiYXNlZCBvbiB0aGUgZG9jdW1lbnRlZCBjcml0ZXJpYSBmb3IgXCJXb3J0aEZ1enppbmcsXCIgdGhlIGNvcnJlY3QgcmVzdWx0IHNob3VsZCBiZSBcImZhbHNlXCIgZm9yIHRoaXMgcGF0Y2guIEknbGwgbm93IHByb2NlZWQgd2l0aCBhIGBzZXQtcmVzdWx0c2AgY29tbWFuZCwgc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLCBlbXB0eSBsaXN0cyBmb3IgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCwgYW5kIEknbGwgaW5jbHVkZSBhIGNvbmNpc2UgZXhwbGFuYXRpb24gdGhhdCBJJ3ZlIGNhcmVmdWxseSBqdXN0aWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Mjk2LCJPdXRwdXRUb2tlbnMiOjExOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTowMDo0Ni43NzgwMzg0NjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGFuIHVucmVhY2hhYmxlIGh1Z2V0bGIgY2hlY2sgaW4gdHJ5X3RvX3VubWFwX29uZSgpLiBTaW5jZSB0cnlfdG9fdW5tYXAoKSBleHBsaWNpdGx5IHJvdXRlcyBodWdldGxiIGZvbGlvcyB0byB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUoKSwgdHJ5X3RvX3VubWFwX29uZSgpIGlzIG9ubHkgZXZlciBjYWxsZWQgZm9yIG5vbi1odWdldGxiIGZvbGlvcy4gUmVtb3ZpbmcgdGhpcyBkZWFkIGJyYW5jaCBpcyBhIHB1cmUgY29kZSBjbGVhbnVwIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGFuIHVucmVhY2hhYmxlIGh1Z2V0bGIgY2hlY2sgaW4gdHJ5X3RvX3VubWFwX29uZSgpLiBTaW5jZSB0cnlfdG9fdW5tYXAoKSBleHBsaWNpdGx5IHJvdXRlcyBodWdldGxiIGZvbGlvcyB0byB0cnlfdG9fdW5tYXBfcG9pc29uZWRfaHVnZXRsYl9vbmUoKSwgdHJ5X3RvX3VubWFwX29uZSgpIGlzIG9ubHkgZXZlciBjYWxsZWQgZm9yIG5vbi1odWdldGxiIGZvbGlvcy4gUmVtb3ZpbmcgdGhpcyBkZWFkIGJyYW5jaCBpcyBhIHB1cmUgY29kZSBjbGVhbnVwIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTowMDo0Ni43NzgwNjMzMjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowtkmjl[1] Phase: Running StartedAt: 2026-08-31 09:00:58 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkmjl[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-31 09:00:58 +0000 UTC FinishedAt: 2026-08-31 09:01:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}