ZGlmZiAtLWdpdCBhLy5naXRodWIvRlVORElORy55bWwgYi8uZ2l0aHViL0ZVTkRJTkcueW1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWQzODRlLi4wMDAwMDAwCi0tLSBhLy5naXRodWIvRlVORElORy55bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1wYXRyZW9uOiBob3Jlbm1hcgpkaWZmIC0tZ2l0IGEvLnRyYXZpcy55bWwgYi8udHJhdmlzLnltbAppbmRleCAwZmUyYWJiLi4zNDVlZGZiIDEwMDY0NAotLS0gYS8udHJhdmlzLnltbAorKysgYi8udHJhdmlzLnltbApAQCAtOSw4ICs5LDggQEAKICAgLSBsbHZtLXRvb2xjaGFpbi10cnVzdHkKICAgLSBsbHZtLXRvb2xjaGFpbi10cnVzdHktMy45CiAgIC0gbGx2bS10b29sY2hhaW4tdHJ1c3R5LTQuMAotICAtIGxsdm0tdG9vbGNoYWluLXhlbmlhbC01LjAKLSAgLSBsbHZtLXRvb2xjaGFpbi14ZW5pYWwtNi4wCisgIC0gbGx2bS10b29sY2hhaW4tdHJ1c3R5LTUuMAorICAtIGxsdm0tdG9vbGNoYWluLXRydXN0eS02LjAKIAogbWF0cml4OgogICBpbmNsdWRlOgpAQCAtNjAsNyArNjAsNiBAQAogICAgICAgZW52OiBDT01QSUxFUj0nY2xhbmcrKy00LjAnCiAKICAgICAtIG9zOiBsaW51eAotICAgICAgZGlzdDogeGVuaWFsCiAgICAgICBjb21waWxlcjogY2xhbmcKICAgICAgIGFkZG9uczoKICAgICAgICAgICBhcHQ6CkBAIC02OSw3ICs2OCw2IEBACiAgICAgICBlbnY6IENPTVBJTEVSPSdjbGFuZysrLTUuMCcKIAogICAgIC0gb3M6IGxpbnV4Ci0gICAgICBkaXN0OiB4ZW5pYWwKICAgICAgIGNvbXBpbGVyOiBjbGFuZwogICAgICAgYWRkb25zOgogICAgICAgICAgIGFwdDoKQEAgLTE1NSw3ICsxNTMsNiBAQAogICAgICAgZW52OiBDT01QSUxFUj0nY2xhbmcrKy00LjAnIENQUDE0PTEKIAogICAgIC0gb3M6IGxpbnV4Ci0gICAgICBkaXN0OiB4ZW5pYWwKICAgICAgIGNvbXBpbGVyOiBjbGFuZwogICAgICAgYWRkb25zOgogICAgICAgICAgIGFwdDoKQEAgLTE2NCw3ICsxNjEsNiBAQAogICAgICAgZW52OiBDT01QSUxFUj0nY2xhbmcrKy01LjAnIENQUDE0PTEKIAogICAgIC0gb3M6IGxpbnV4Ci0gICAgICBkaXN0OiB4ZW5pYWwKICAgICAgIGNvbXBpbGVyOiBjbGFuZwogICAgICAgYWRkb25zOgogICAgICAgICAgIGFwdDoKQEAgLTI1OSw3ICsyNTUsNiBAQAogICAgICAgZW52OiBDT01QSUxFUj0nZysrLTcnIEVYQU1QTEVTPTEgQ09WRVJBR0U9MSBFWFRSQVM9MSBDUFAxNz0xCiAKICAgICAtIG9zOiBsaW51eAotICAgICAgZGlzdDogeGVuaWFsCiAgICAgICBjb21waWxlcjogY2xhbmcKICAgICAgIGFkZG9uczoKICAgICAgICAgICBhcHQ6CkBAIC0yNjgsNyArMjYzLDYgQEAKICAgICAgIGVudjogQ09NUElMRVI9J2NsYW5nKystNi4wJyBDUFAxNz0xCiAKICAgICAtIG9zOiBsaW51eAotICAgICAgZGlzdDogeGVuaWFsCiAgICAgICBjb21waWxlcjogY2xhbmcKICAgICAgIGFkZG9uczoKICAgICAgICAgICBhcHQ6CkBAIC0yODIsNyArMjc2LDcgQEAKICAgICAgICAgLSAiMy43IgogICAgICAgZGlzdDogeGVuaWFsCiAgICAgICBpbnN0YWxsOgotICAgICAgICAtIHBpcCBpbnN0YWxsIGNvbmFuLXBhY2thZ2UtdG9vbHMKKyAgICAgICAgLSBwaXAgaW5zdGFsbCBjb25hbj09MS4xMC4yIGNvbmFuLXBhY2thZ2UtdG9vbHMKICAgICAgIGVudjoKICAgICAgICAgLSBDT05BTl9HQ0NfVkVSU0lPTlM9OAogICAgICAgICAtIENPTkFOX0RPQ0tFUl9JTUFHRT1jb25hbmlvL2djYzgKQEAgLTMwNywxOSArMzAxLDEwIEBACiAgICMgUmVnZW5lcmF0ZSBzaW5nbGUgaGVhZGVyIGZpbGUsIHNvIGl0IGlzIHRlc3RlZCBpbiB0aGUgZXhhbXBsZXMuLi4KICAgLSBweXRob24gc2NyaXB0cy9nZW5lcmF0ZVNpbmdsZUhlYWRlci5weQogCi0gIC0gfAotICAgIGlmIFtbICR7Q1BQMTd9IC1lcSAxIF1dOyB0aGVuCi0gICAgICBleHBvcnQgQ1BQX1NUQU5EQVJEPTE3Ci0gICAgZWxpZiBbWyAke0NQUDE0fSAtZXEgMSBdXTsgdGhlbgotICAgICAgZXhwb3J0IENQUF9TVEFOREFSRD0xNAotICAgIGVsc2UKLSAgICAgIGV4cG9ydCBDUFBfU1RBTkRBUkQ9MTEKLSAgICBmaQotCiAgICAgIyBVc2UgRGVidWcgYnVpbGRzIGZvciBydW5uaW5nIFZhbGdyaW5kIGFuZCBidWlsZGluZyBleGFtcGxlcwotICAtIGNtYWtlIC1ILiAtQkJ1aWxkLURlYnVnIC1EQ01BS0VfQlVJTERfVFlQRT1EZWJ1ZyAtV2RldiAtRENBVENIX1VTRV9WQUxHUklORD0ke1ZBTEdSSU5EfSAtRENBVENIX0JVSUxEX0VYQU1QTEVTPSR7RVhBTVBMRVN9IC1EQ0FUQ0hfRU5BQkxFX0NPVkVSQUdFPSR7Q09WRVJBR0V9IC1EQ0FUQ0hfQlVJTERfRVhUUkFfVEVTVFM9JHtFWFRSQVN9IC1EQ01BS0VfQ1hYX1NUQU5EQVJEPSR7Q1BQX1NUQU5EQVJEfSAtRENNQUtFX0NYWF9TVEFOREFSRF9SRVFVSVJFRD1PbiAtRENNQUtFX0NYWF9FWFRFTlNJT05TPU9GRgorICAtIGNtYWtlIC1ILiAtQkJ1aWxkLURlYnVnIC1EQ01BS0VfQlVJTERfVFlQRT1EZWJ1ZyAtV2RldiAtRFVTRV9DUFAxND0ke0NQUDE0fSAtRFVTRV9DUFAxNz0ke0NQUDE3fSAtRENBVENIX1VTRV9WQUxHUklORD0ke1ZBTEdSSU5EfSAtRENBVENIX0JVSUxEX0VYQU1QTEVTPSR7RVhBTVBMRVN9IC1EQ0FUQ0hfRU5BQkxFX0NPVkVSQUdFPSR7Q09WRVJBR0V9IC1EQ0FUQ0hfQlVJTERfRVhUUkFfVEVTVFM9JHtFWFRSQVN9CiAgICAgIyBEb24ndCBib3RoZXIgd2l0aCByZWxlYXNlIGJ1aWxkIGZvciBjb3ZlcmFnZSBidWlsZAotICAtIGNtYWtlIC1ILiAtQkJ1aWxkLVJlbGVhc2UgLURDTUFLRV9CVUlMRF9UWVBFPVJlbGVhc2UgLVdkZXYgLURDTUFLRV9DWFhfU1RBTkRBUkQ9JHtDUFBfU1RBTkRBUkR9IC1EQ01BS0VfQ1hYX1NUQU5EQVJEX1JFUVVJUkVEPU9uIC1EQ01BS0VfQ1hYX0VYVEVOU0lPTlM9T0ZGCisgIC0gY21ha2UgLUguIC1CQnVpbGQtUmVsZWFzZSAtRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSAtV2RldiAtRFVTRV9DUFAxND0ke0NQUDE0fSAtRFVTRV9DUFAxNz0ke0NQUDE3fQogCiAKIHNjcmlwdDoKZGlmZiAtLWdpdCBhL0FuZHJvaWQuYnAgYi9BbmRyb2lkLmJwCmluZGV4IDk5YTIzMWUuLjQ4NTJjZjAgMTAwNjQ0Ci0tLSBhL0FuZHJvaWQuYnAKKysrIGIvQW5kcm9pZC5icApAQCAtMTIsMzggKzEyLDYgQEAKIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCi1wYWNrYWdlIHsKLSAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsiZXh0ZXJuYWxfY2F0Y2gyX2xpY2Vuc2UiXSwKLX0KLQotLy8gQWRkZWQgYXV0b21hdGljYWxseSBieSBhIGxhcmdlLXNjYWxlLWNoYW5nZSB0aGF0IHRvb2sgdGhlIGFwcHJvYWNoIG9mCi0vLyAnYXBwbHkgZXZlcnkgbGljZW5zZSBmb3VuZCB0byBldmVyeSB0YXJnZXQnLiBXaGlsZSB0aGlzIG1ha2VzIHN1cmUgd2UgcmVzcGVjdAotLy8gZXZlcnkgbGljZW5zZSByZXN0cmljdGlvbiwgaXQgbWF5IG5vdCBiZSBlbnRpcmVseSBjb3JyZWN0LgotLy8KLS8vIGUuZy4gR1BMIGluIGFuIE1JVCBwcm9qZWN0IG1pZ2h0IG9ubHkgYXBwbHkgdG8gdGhlIGNvbnRyaWIvIGRpcmVjdG9yeS4KLS8vCi0vLyBQbGVhc2UgY29uc2lkZXIgc3BsaXR0aW5nIHRoZSBzaW5nbGUgbGljZW5zZSBiZWxvdyBpbnRvIG11bHRpcGxlIGxpY2Vuc2VzLAotLy8gdGFraW5nIGNhcmUgbm90IHRvIGxvc2UgYW55IGxpY2Vuc2Vfa2luZCBpbmZvcm1hdGlvbiwgYW5kIG92ZXJyaWRpbmcgdGhlCi0vLyBkZWZhdWx0IGxpY2Vuc2UgdXNpbmcgdGhlICdsaWNlbnNlczogWy4uLl0nIHByb3BlcnR5IG9uIHRhcmdldHMgYXMgbmVlZGVkLgotLy8KLS8vIEZvciB1bnVzZWQgZmlsZXMsIGNvbnNpZGVyIGNyZWF0aW5nIGEgJ2ZpbGVHcm91cCcgd2l0aCAiLy92aXNpYmlsaXR5OnByaXZhdGUiCi0vLyB0byBhdHRhY2ggdGhlIGxpY2Vuc2UgdG8sIGFuZCBpbmNsdWRpbmcgYSBjb21tZW50IHdoZXRoZXIgdGhlIGZpbGVzIG1heSBiZQotLy8gdXNlZCBpbiB0aGUgY3VycmVudCBwcm9qZWN0LgotLy8gU2VlOiBodHRwOi8vZ28vYW5kcm9pZC1saWNlbnNlLWZhcQotbGljZW5zZSB7Ci0gICAgbmFtZTogImV4dGVybmFsX2NhdGNoMl9saWNlbnNlIiwKLSAgICB2aXNpYmlsaXR5OiBbIjpfX3N1YnBhY2thZ2VzX18iXSwKLSAgICBsaWNlbnNlX2tpbmRzOiBbCi0gICAgICAgICJTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1CU0QiLAotICAgICAgICAiU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQlNMLTEuMCIsCi0gICAgICAgICJTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1HUEwiLAotICAgICAgICAiU1BEWC1saWNlbnNlLWlkZW50aWZpZXItTUlUIiwKLSAgICBdLAotICAgIGxpY2Vuc2VfdGV4dDogWwotICAgICAgICAiTElDRU5TRS50eHQiLAotICAgIF0sCi19Ci0KIGNjX2RlZmF1bHRzIHsKICAgICBuYW1lOiAibGliY2F0Y2gyLWRlZmF1bHRzIiwKICAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKQEAgLTEwMyw3ICs3MSw2IEBACiAgICAgZXhjbHVkZV9zcmNzOiBbCiAgICAgICAgICJwcm9qZWN0cy9TZWxmVGVzdC9Db21waWxlVGltZVBlcmZUZXN0cy8qKi8qLmNwcCIsCiAgICAgXSwKLSAgICBzaGFyZWRfbGliczogWyJsaWJsb2ciXSwKIH0KIAogLy8gVXBzdHJlYW0gY29uZmlnOiBFeGNlcHRpb25zIGFyZSBlbmFibGVkLgpkaWZmIC0tZ2l0IGEvQ01ha2VMaXN0cy50eHQgYi9DTWFrZUxpc3RzLnR4dAppbmRleCBhZDA0ZGVjLi5lMjMyOWM2IDEwMDY0NAotLS0gYS9DTWFrZUxpc3RzLnR4dAorKysgYi9DTWFrZUxpc3RzLnR4dApAQCAtNiwxNSArNiw3IEBACiAgIHNldChOT1RfU1VCUFJPSkVDVCBPTikKIGVuZGlmKCkKIAotIyBDYXRjaDIncyBidWlsZCBicmVha3MgaWYgZG9uZSBpbi10cmVlLiBZb3UgcHJvYmFibHkgc2hvdWxkIG5vdCBidWlsZAotIyB0aGluZ3MgaW4gdHJlZSBhbnl3YXksIGJ1dCB3ZSBjYW4gYWxsb3cgcHJvamVjdHMgdGhhdCBpbmNsdWRlIENhdGNoMgotIyBhcyBhIHN1YnByb2plY3QgdG8gYnVpbGQgaW4tdHJlZSBhcyBsb25nIGFzIGl0IGlzIG5vdCBpbiBvdXIgdHJlZS4KLWlmIChDTUFLRV9CSU5BUllfRElSIFNUUkVRVUFMIENNQUtFX0NVUlJFTlRfU09VUkNFX0RJUikKLSAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJCdWlsZGluZyBpbi1zb3VyY2UgaXMgbm90IHN1cHBvcnRlZCEgQ3JlYXRlIGEgYnVpbGQgZGlyIGFuZCByZW1vdmUgJHtDTUFLRV9TT1VSQ0VfRElSfS9DTWFrZUNhY2hlLnR4dCIpCi1lbmRpZigpCi0KLQotcHJvamVjdChDYXRjaDIgTEFOR1VBR0VTIENYWCBWRVJTSU9OIDIuMTEuMikKK3Byb2plY3QoQ2F0Y2gyIExBTkdVQUdFUyBDWFggVkVSU0lPTiAyLjcuMikKIAogIyBQcm92aWRlIHBhdGggZm9yIHNjcmlwdHMKIGxpc3QoQVBQRU5EIENNQUtFX01PRFVMRV9QQVRIICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NNYWtlIikKQEAgLTk2LDEwICs4OCw2IEBACiAgICAgJDxJTlNUQUxMX0lOVEVSRkFDRToke0NNQUtFX0lOU1RBTExfSU5DTFVERURJUn0+CiApCiAKLWlmIChBTkRST0lEKQotICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhDYXRjaDIgSU5URVJGQUNFIGxvZykKLWVuZGlmKCkKLQogIyBwcm92aWRlIGEgbmFtZXNwYWNlZCBhbGlhcyBmb3IgY2xpZW50cyB0byAnbGluaycgYWdhaW5zdCBpZiBjYXRjaCBpcyBpbmNsdWRlZCBhcyBhIHN1Yi1wcm9qZWN0CiBhZGRfbGlicmFyeShDYXRjaDI6OkNhdGNoMiBBTElBUyBDYXRjaDIpCiAKQEAgLTE0NCwxMSArMTMyLDkgQEAKICAgICAjCiAgICAgIyBDTWFrZSBkb2VzIG5vdCBwcm92aWRlIGEgZGlyZWN0IGN1c3RvbWl6YXRpb24gcG9pbnQgZm9yIHRoaXMgaW4KICAgICAjIGB3cml0ZV9iYXNpY19wYWNrYWdlX3ZlcnNpb25fZmlsZWAsIGJ1dCBpdCBjYW4gYmUgYWNjb21wbGlzaGVkCi0gICAgIyBpbmRpcmVjdGx5IGJ5IHRlbXBvcmFyaWx5IHJlZGVmaW5pbmcgYENNQUtFX1NJWkVPRl9WT0lEX1BgIHRvIGFuCi0gICAgIyBlbXB0eSBzdHJpbmcuIE5vdGUgdGhhdCBqdXN0IHVuZGVmaW5pbmcgdGhlIHZhcmlhYmxlIGNvdWxkIGJlCi0gICAgIyBpbnN1ZmZpY2llbnQgaW4gY2FzZXMgd2hlcmUgdGhlIHZhcmlhYmxlIHdhcyBhbHJlYWR5IGluIENNYWtlIGNhY2hlCisgICAgIyBpbmRpcmVjdGx5IGJ5IHRlbXBvcmFyaWx5IHVuZGVmaW5pbmcgYENNQUtFX1NJWkVPRl9WT0lEX1BgLgogICAgIHNldChDQVRDSDJfQ01BS0VfU0laRU9GX1ZPSURfUCAke0NNQUtFX1NJWkVPRl9WT0lEX1B9KQotICAgIHNldChDTUFLRV9TSVpFT0ZfVk9JRF9QICIiKQorICAgIHVuc2V0KENNQUtFX1NJWkVPRl9WT0lEX1ApCiAgICAgd3JpdGVfYmFzaWNfcGFja2FnZV92ZXJzaW9uX2ZpbGUoCiAgICAgICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0NhdGNoMkNvbmZpZ1ZlcnNpb24uY21ha2UiCiAgICAgICBDT01QQVRJQklMSVRZCmRpZmYgLS1naXQgYS9NRVRBREFUQSBiL01FVEFEQVRBCmluZGV4IDEyMWNlNzYuLjUwZTlhZmEgMTAwNjQ0Ci0tLSBhL01FVEFEQVRBCisrKyBiL01FVEFEQVRBCkBAIC05LDEyICs5LDExIEBACiAgICAgdHlwZTogR0lUCiAgICAgdmFsdWU6ICJodHRwczovL2dpdGh1Yi5jb20vY2F0Y2hvcmcvQ2F0Y2gyLmdpdCIKICAgfQotICB2ZXJzaW9uOiAidjIuMTEuMiIKLSAgIyB3b3VsZCBiZSBOT1RJQ0Ugc2F2ZSBmb3Igc2NyaXB0cy91cGRhdGVEb2N1bWVudFRvQy5weQotICBsaWNlbnNlX3R5cGU6IFJFU1RSSUNURUQKKyAgdmVyc2lvbjogInYyLjcuMiIKKyAgbGljZW5zZV90eXBlOiBOT1RJQ0UKICAgbGFzdF91cGdyYWRlX2RhdGUgewotICAgIHllYXI6IDIwMjAKLSAgICBtb250aDogMwotICAgIGRheTogMTkKKyAgICB5ZWFyOiAyMDE5CisgICAgbW9udGg6IDUKKyAgICBkYXk6IDIKICAgfQogfQpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCmluZGV4IDMxNjdkMjQuLjUzNWFjNmUgMTAwNjQ0Ci0tLSBhL1JFQURNRS5tZAorKysgYi9SRUFETUUubWQKQEAgLTUsMTEgKzUsMTEgQEAKIFshW0J1aWxkIFN0YXR1c10oaHR0cHM6Ly90cmF2aXMtY2kub3JnL2NhdGNob3JnL0NhdGNoMi5zdmc/YnJhbmNoPW1hc3RlcildKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9jYXRjaG9yZy9DYXRjaDIpCiBbIVtCdWlsZCBzdGF0dXNdKGh0dHBzOi8vY2kuYXBwdmV5b3IuY29tL2FwaS9wcm9qZWN0cy9zdGF0dXMvZ2l0aHViL2NhdGNob3JnL0NhdGNoMj9zdmc9dHJ1ZSldKGh0dHBzOi8vY2kuYXBwdmV5b3IuY29tL3Byb2plY3QvY2F0Y2hvcmcvY2F0Y2gyKQogWyFbY29kZWNvdl0oaHR0cHM6Ly9jb2RlY292LmlvL2doL2NhdGNob3JnL0NhdGNoMi9icmFuY2gvbWFzdGVyL2dyYXBoL2JhZGdlLnN2ZyldKGh0dHBzOi8vY29kZWNvdi5pby9naC9jYXRjaG9yZy9DYXRjaDIpCi1bIVtUcnkgb25saW5lXShodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL3RyeS1vbmxpbmUtYmx1ZS5zdmcpXShodHRwczovL3dhbmRib3gub3JnL3Blcm1saW5rL1pJNVNZYjdKRTFVSmhBS1ApCitbIVtUcnkgb25saW5lXShodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL3RyeS1vbmxpbmUtYmx1ZS5zdmcpXShodHRwczovL3dhbmRib3gub3JnL3Blcm1saW5rL3JzRXNOTzlNMGZsYjVObFEpCiBbIVtKb2luIHRoZSBjaGF0IGluIERpc2NvcmQ6IGh0dHBzOi8vZGlzY29yZC5nZy80Q1dTOXpEXShodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL0Rpc2NvcmQtQ2hhdCEtYnJpZ2h0Z3JlZW4uc3ZnKV0oaHR0cHM6Ly9kaXNjb3JkLmdnLzRDV1M5ekQpCiAKIAotPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NhdGNob3JnL0NhdGNoMi9yZWxlYXNlcy9kb3dubG9hZC92Mi4xMS4yL2NhdGNoLmhwcCI+VGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBzaW5nbGUgaGVhZGVyIGNhbiBiZSBkb3dubG9hZGVkIGRpcmVjdGx5IHVzaW5nIHRoaXMgbGluazwvYT4KKzxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jYXRjaG9yZy9DYXRjaDIvcmVsZWFzZXMvZG93bmxvYWQvdjIuNy4yL2NhdGNoLmhwcCI+VGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBzaW5nbGUgaGVhZGVyIGNhbiBiZSBkb3dubG9hZGVkIGRpcmVjdGx5IHVzaW5nIHRoaXMgbGluazwvYT4KIAogIyMgQ2F0Y2gyIGlzIHJlbGVhc2VkIQogCkBAIC0xOSw4ICsxOSw5IEBACiAKICMjIFdoYXQncyB0aGUgQ2F0Y2g/CiAKLUNhdGNoMiBpcyBhIG11bHRpLXBhcmFkaWdtIHRlc3QgZnJhbWV3b3JrIGZvciBDKysuIHdoaWNoIGFsc28gc3VwcG9ydHMKLU9iamVjdGl2ZS1DIChhbmQgbWF5YmUgQykuCitDYXRjaDIgc3RhbmRzIGZvciBDKysgQXV0b21hdGVkIFRlc3QgQ2FzZXMgaW4gYSBIZWFkZXIgYW5kIGlzIGEKK211bHRpLXBhcmFkaWdtIHRlc3QgZnJhbWV3b3JrIGZvciBDKysuIHdoaWNoIGFsc28gc3VwcG9ydHMgT2JqZWN0aXZlLUMKKyhhbmQgbWF5YmUgQykuCiBJdCBpcyBwcmltYXJpbHkgZGlzdHJpYnV0ZWQgYXMgYSBzaW5nbGUgaGVhZGVyIGZpbGUsIGFsdGhvdWdoIGNlcnRhaW4KIGV4dGVuc2lvbnMgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCBoZWFkZXJzLgogCmRpZmYgLS1naXQgYS9hcHB2ZXlvci55bWwgYi9hcHB2ZXlvci55bWwKaW5kZXggZGZkNDQzMS4uNTNmNWIzOSAxMDA2NDQKLS0tIGEvYXBwdmV5b3IueW1sCisrKyBiL2FwcHZleW9yLnltbApAQCAtMSwxMSArMSw2IEBACiAjIHZlcnNpb24gc3RyaW5nIGZvcm1hdCAtLSBUaGlzIHdpbGwgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIgYW55d2F5CiB2ZXJzaW9uOiAie2J1aWxkfSIKIAotIyBXZSBuZWVkIGEgbW9yZSB1cCB0byBkYXRlIHBpcCBiZWNhdXNlIFB5dGhvbiAyLjcgaXMgRU9MIHNvb24KLWluaXQ6Ci0gIC0gc2V0IFBBVEg9QzpcUHl0aG9uMzVcU2NyaXB0czslUEFUSCUKLQotCiBicmFuY2hlczoKICAgZXhjZXB0OgogICAgIC0gL2Rldi10cmF2aXMuKy8KQEAgLTY3LDcgKzYyLDcgQEAKIAogCiBpbnN0YWxsOgotICAtIHBzOiBpZiAoKCRlbnY6Q09ORklHVVJBVElPTikgLWVxICJEZWJ1ZyIgLUFuZCAoJGVudjpjb3ZlcmFnZSkgLWVxICIxIiApIHsgcGlwIC0tZGlzYWJsZS1waXAtdmVyc2lvbi1jaGVjayBpbnN0YWxsIGNvZGVjb3YgfQorICAtIHBzOiBpZiAoKCRlbnY6Q09ORklHVVJBVElPTikgLWVxICJEZWJ1ZyIgLUFuZCAoJGVudjpjb3ZlcmFnZSkgLWVxICIxIiApIHsgcHl0aG9uIC1tIHBpcCAtLWRpc2FibGUtcGlwLXZlcnNpb24tY2hlY2sgaW5zdGFsbCBjb2RlY292IH0KICAgLSBwczogaWYgKCgkZW52OkNPTkZJR1VSQVRJT04pIC1lcSAiRGVidWciIC1BbmQgKCRlbnY6Y292ZXJhZ2UpIC1lcSAiMSIgKSB7IC5cbWlzY1xpbnN0YWxsT3BlbkNwcENvdmVyYWdlLnBzMSB9CiAKICMgV2luMzIgYW5kIHg2NCBhcmUgQ01ha2UtY29tcGF0aWJsZSBzb2x1dGlvbiBwbGF0Zm9ybSBuYW1lcy4KZGlmZiAtLWdpdCBhL2FydHdvcmsvY2F0Y2gyLWMtbG9nby5wbmcgYi9hcnR3b3JrL2NhdGNoMi1jLWxvZ28ucG5nCmluZGV4IGIxMDY2YjguLmJhYjQwMGYgMTAwNjQ0Ci0tLSBhL2FydHdvcmsvY2F0Y2gyLWMtbG9nby5wbmcKKysrIGIvYXJ0d29yay9jYXRjaDItYy1sb2dvLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcnR3b3JrL2NhdGNoMi1oYW5kLWxvZ28ucG5nIGIvYXJ0d29yay9jYXRjaDItaGFuZC1sb2dvLnBuZwppbmRleCBhYjg1N2VhLi41YTVlMTQyIDEwMDY0NAotLS0gYS9hcnR3b3JrL2NhdGNoMi1oYW5kLWxvZ28ucG5nCisrKyBiL2FydHdvcmsvY2F0Y2gyLWhhbmQtbG9nby5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXJ0d29yay9jYXRjaDItbG9nby1zbWFsbC5wbmcgYi9hcnR3b3JrL2NhdGNoMi1sb2dvLXNtYWxsLnBuZwppbmRleCA3NDJlODFlLi5mMjExOGJlIDEwMDY0NAotLS0gYS9hcnR3b3JrL2NhdGNoMi1sb2dvLXNtYWxsLnBuZworKysgYi9hcnR3b3JrL2NhdGNoMi1sb2dvLXNtYWxsLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2RlY292LnltbCBiL2NvZGVjb3YueW1sCmluZGV4IDc1ODA5ZWUuLjk0ZDg4ZDggMTAwNjQ0Ci0tLSBhL2NvZGVjb3YueW1sCisrKyBiL2NvZGVjb3YueW1sCkBAIC0xNCw3ICsxNCw2IEBACiAgICAgLSAiKiovY2F0Y2hfcmVwb3J0ZXJfdGFwLmhwcCIKICAgICAtICIqKi9jYXRjaF9yZXBvcnRlcl9hdXRvbWFrZS5ocHAiCiAgICAgLSAiKiovY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwIgotICAgIC0gIioqL2NhdGNoX3JlcG9ydGVyX3NvbmFycXViZS5ocHAiCiAgICAgLSAiKiovZXh0ZXJuYWwvY2xhcmEuaHBwIgogCiAKZGlmZiAtLWdpdCBhL2NvbmFuZmlsZS5weSBiL2NvbmFuZmlsZS5weQppbmRleCA4ZDQwN2JhLi5hN2NlYmI5IDEwMDY0NAotLS0gYS9jb25hbmZpbGUucHkKKysrIGIvY29uYW5maWxlLnB5CkBAIC0xOCw3ICsxOCw3IEBACiAgICAgICAgIGNtYWtlLmRlZmluaXRpb25zWyJCVUlMRF9URVNUSU5HIl0gPSAiT0ZGIgogICAgICAgICBjbWFrZS5kZWZpbml0aW9uc1siQ0FUQ0hfSU5TVEFMTF9ET0NTIl0gPSAiT0ZGIgogICAgICAgICBjbWFrZS5kZWZpbml0aW9uc1siQ0FUQ0hfSU5TVEFMTF9IRUxQRVJTIl0gPSAiT04iCi0gICAgICAgIGNtYWtlLmNvbmZpZ3VyZShidWlsZF9mb2xkZXI9J2J1aWxkJykKKyAgICAgICAgY21ha2UuY29uZmlndXJlKCkKICAgICAgICAgY21ha2UuaW5zdGFsbCgpCiAKICAgICAgICAgc2VsZi5jb3B5KHBhdHRlcm49IkxJQ0VOU0UudHh0IiwgZHN0PSJsaWNlbnNlcyIpCmRpZmYgLS1naXQgYS9jb250cmliL0NhdGNoQWRkVGVzdHMuY21ha2UgYi9jb250cmliL0NhdGNoQWRkVGVzdHMuY21ha2UKaW5kZXggMTU2ZDU1Zi4uY2E1ZWJjMSAxMDA2NDQKLS0tIGEvY29udHJpYi9DYXRjaEFkZFRlc3RzLmNtYWtlCisrKyBiL2NvbnRyaWIvQ2F0Y2hBZGRUZXN0cy5jbWFrZQpAQCAtMjIsNiArMjIsMzkgQEAKICAgc2V0KHNjcmlwdCAiJHtzY3JpcHR9JHtOQU1FfSgke19hcmdzfSlcbiIgUEFSRU5UX1NDT1BFKQogZW5kZnVuY3Rpb24oKQogCittYWNybyhfYWRkX2NhdGNoX3Rlc3RfbGFiZWxzIExJTkUpCisgICMgY29udmVydCB0byBsaXN0IG9mIHRhZ3MKKyAgc3RyaW5nKFJFUExBQ0UgIl1bIiAiXVxcO1siIHRhZ3MgJHtsaW5lfSkKKworICBhZGRfY29tbWFuZCgKKyAgICBzZXRfdGVzdHNfcHJvcGVydGllcyAiJHtwcmVmaXh9JHt0ZXN0fSR7c3VmZml4fSIKKyAgICAgIFBST1BFUlRJRVMKKyAgICAgICAgTEFCRUxTICIke3RhZ3N9IgorICApCitlbmRtYWNybygpCisKK21hY3JvKF9hZGRfY2F0Y2hfdGVzdCBMSU5FKQorICBzZXQodGVzdCAke2xpbmV9KQorICAjIHVzZSBlc2NhcGUgY29tbWFzIHRvIGhhbmRsZSBwcm9wZXJseSB0ZXN0IGNhc2VzIHdpdGggY29tbWFucyBpbnNpZGUgdGhlIG5hbWUKKyAgc3RyaW5nKFJFUExBQ0UgIiwiICJcXCwiIHRlc3RfbmFtZSAke3Rlc3R9KQorICAjIC4uLmFuZCBhZGQgdG8gc2NyaXB0CisgIGFkZF9jb21tYW5kKAorICAgIGFkZF90ZXN0ICIke3ByZWZpeH0ke3Rlc3R9JHtzdWZmaXh9IgorICAgICAgJHtURVNUX0VYRUNVVE9SfQorICAgICAgICIke1RFU1RfRVhFQ1VUQUJMRX0iCisgICAgICAgIiR7dGVzdF9uYW1lfSIKKyAgICAgICAke2V4dHJhX2FyZ3N9CisgICAgICkKKworICBhZGRfY29tbWFuZCgKKyAgICBzZXRfdGVzdHNfcHJvcGVydGllcyAiJHtwcmVmaXh9JHt0ZXN0fSR7c3VmZml4fSIKKyAgICAgIFBST1BFUlRJRVMKKyAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIiR7VEVTVF9XT1JLSU5HX0RJUn0iCisgICAgICAgICR7cHJvcGVydGllc30KKyAgKQorICBsaXN0KEFQUEVORCB0ZXN0cyAiJHtwcmVmaXh9JHt0ZXN0fSR7c3VmZml4fSIpCitlbmRtYWNybygpCisKICMgUnVuIHRlc3QgZXhlY3V0YWJsZSB0byBnZXQgbGlzdCBvZiBhdmFpbGFibGUgdGVzdHMKIGlmKE5PVCBFWElTVFMgIiR7VEVTVF9FWEVDVVRBQkxFfSIpCiAgIG1lc3NhZ2UoRkFUQUxfRVJST1IKQEAgLTI5LDcgKzYyLDcgQEAKICAgKQogZW5kaWYoKQogZXhlY3V0ZV9wcm9jZXNzKAotICBDT01NQU5EICR7VEVTVF9FWEVDVVRPUn0gIiR7VEVTVF9FWEVDVVRBQkxFfSIgJHtzcGVjfSAtLWxpc3QtdGVzdC1uYW1lcy1vbmx5CisgIENPTU1BTkQgJHtURVNUX0VYRUNVVE9SfSAiJHtURVNUX0VYRUNVVEFCTEV9IiAke3NwZWN9IC0tbGlzdC10ZXN0cwogICBPVVRQVVRfVkFSSUFCTEUgb3V0cHV0CiAgIFJFU1VMVF9WQVJJQUJMRSByZXN1bHQKICkKQEAgLTQ3LDMwICs4MCwyMiBAQAogZW5kaWYoKQogCiBzdHJpbmcoUkVQTEFDRSAiXG4iICI7IiBvdXRwdXQgIiR7b3V0cHV0fSIpCitzZXQodGVzdCkKK3NldCh0YWdzX3JlZ2V4ICIoXFxbKFteXFxbXSopXFxdKSskIikKIAogIyBQYXJzZSBvdXRwdXQKIGZvcmVhY2gobGluZSAke291dHB1dH0pCi0gIHNldCh0ZXN0ICR7bGluZX0pCi0gICMgRXNjYXBlIGNoYXJhY3RlcnMgaW4gdGVzdCBjYXNlIG5hbWVzIHRoYXQgd291bGQgYmUgcGFyc2VkIGJ5IENhdGNoMgotICBzZXQodGVzdF9uYW1lICR7dGVzdH0pCi0gIGZvcmVhY2goY2hhciAsIFsgXSkKLSAgICBzdHJpbmcoUkVQTEFDRSAke2NoYXJ9ICJcXCR7Y2hhcn0iIHRlc3RfbmFtZSAke3Rlc3RfbmFtZX0pCi0gIGVuZGZvcmVhY2goY2hhcikKLSAgIyAuLi5hbmQgYWRkIHRvIHNjcmlwdAotICBhZGRfY29tbWFuZChhZGRfdGVzdAotICAgICIke3ByZWZpeH0ke3Rlc3R9JHtzdWZmaXh9IgotICAgICR7VEVTVF9FWEVDVVRPUn0KLSAgICAiJHtURVNUX0VYRUNVVEFCTEV9IgotICAgICIke3Rlc3RfbmFtZX0iCi0gICAgJHtleHRyYV9hcmdzfQotICApCi0gIGFkZF9jb21tYW5kKHNldF90ZXN0c19wcm9wZXJ0aWVzCi0gICAgIiR7cHJlZml4fSR7dGVzdH0ke3N1ZmZpeH0iCi0gICAgUFJPUEVSVElFUwotICAgIFdPUktJTkdfRElSRUNUT1JZICIke1RFU1RfV09SS0lOR19ESVJ9IgotICAgICR7cHJvcGVydGllc30KLSAgKQotICBsaXN0KEFQUEVORCB0ZXN0cyAiJHtwcmVmaXh9JHt0ZXN0fSR7c3VmZml4fSIpCisgICMgbGluZXMgd2l0aG91dCBsZWFkaW5nIHdoaXRlc3BhY2VzIGFyZSBjYXRjaCBvdXRwdXQgbm90IHRlc3RzCisgIGlmKCR7bGluZX0gTUFUQ0hFUyAiXlsgXHRdKyIpCisgICAgIyBzdHJpcCBsZWFkaW5nIHNwYWNlcyBhbmQgdGFicworICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeWyBcdF0rIiAiIiBsaW5lICR7bGluZX0pCisKKyAgICBpZigke2xpbmV9IE1BVENIRVMgIiR7dGFnc19yZWdleH0iKQorICAgICAgX2FkZF9jYXRjaF90ZXN0X2xhYmVscygke2xpbmV9KQorICAgIGVsc2UoKQorICAgICAgX2FkZF9jYXRjaF90ZXN0KCR7bGluZX0pCisgICAgZW5kaWYoKQorICBlbmRpZigpCiBlbmRmb3JlYWNoKCkKIAogIyBDcmVhdGUgYSBsaXN0IG9mIGFsbCBkaXNjb3ZlcmVkIHRlc3RzLCB3aGljaCB1c2VycyBtYXkgdXNlIHRvIGUuZy4gc2V0CmRpZmYgLS1naXQgYS9kb2NzL1JlYWRtZS5tZCBiL2RvY3MvUmVhZG1lLm1kCmluZGV4IDBiYmIxMDQuLjcyMTg4MGEgMTAwNjQ0Ci0tLSBhL2RvY3MvUmVhZG1lLm1kCisrKyBiL2RvY3MvUmVhZG1lLm1kCkBAIC0xNCw3ICsxNCw2IEBACiAqIFtFdmVudCBMaXN0ZW5lcnNdKGV2ZW50LWxpc3RlbmVycy5tZCN0b3ApCiAqIFtEYXRhIEdlbmVyYXRvcnNdKGdlbmVyYXRvcnMubWQjdG9wKQogKiBbT3RoZXIgbWFjcm9zXShvdGhlci1tYWNyb3MubWQjdG9wKQotKiBbTWljcm8gYmVuY2htYXJraW5nXShiZW5jaG1hcmtzLm1kI3RvcCkKIAogRmluZSB0dW5pbmc6CiAqIFtTdXBwbHlpbmcgeW91ciBvd24gbWFpbigpXShvd24tbWFpbi5tZCN0b3ApCkBAIC0zNSw3ICszNCw2IEBACiBPdGhlcjoKICogW1doeSBDYXRjaD9dKHdoeS1jYXRjaC5tZCN0b3ApCiAqIFtPcGVuIFNvdXJjZSBQcm9qZWN0cyB1c2luZyBDYXRjaF0ob3BlbnNvdXJjZS11c2Vycy5tZCN0b3ApCi0qIFtDb21tZXJjaWFsIFByb2plY3RzIHVzaW5nIENhdGNoXShjb21tZXJjaWFsLXVzZXJzLm1kI3RvcCkKICogW0NvbnRyaWJ1dGluZ10oY29udHJpYnV0aW5nLm1kI3RvcCkKICogW1JlbGVhc2UgTm90ZXNdKHJlbGVhc2Utbm90ZXMubWQjdG9wKQogKiBbRGVwcmVjYXRpb25zIGFuZCBpbmNvbWluZyBjaGFuZ2VzXShkZXByZWNhdGlvbnMubWQjdG9wKQpkaWZmIC0tZ2l0IGEvZG9jcy9hc3NlcnRpb25zLm1kIGIvZG9jcy9hc3NlcnRpb25zLm1kCmluZGV4IDY4MmViNmUuLjA3ZDI0ODQgMTAwNjQ0Ci0tLSBhL2RvY3MvYXNzZXJ0aW9ucy5tZAorKysgYi9kb2NzL2Fzc2VydGlvbnMubWQKQEAgLTEzNiw3ICsxMzYsNyBAQAogKiAqKlJFUVVJUkVfVEhST1dTX01BVENIRVMoKiogX2V4cHJlc3Npb25fLCBfZXhjZXB0aW9uIHR5cGVfLCBfbWF0Y2hlciBmb3IgZ2l2ZW4gZXhjZXB0aW9uIHR5cGVfICoqKSoqIGFuZAogKiAqKkNIRUNLX1RIUk9XU19NQVRDSEVTKCoqIF9leHByZXNzaW9uXywgX2V4Y2VwdGlvbiB0eXBlXywgX21hdGNoZXIgZm9yIGdpdmVuIGV4Y2VwdGlvbiB0eXBlXyAqKikqKgogCi1FeHBlY3RzIHRoYXQgZXhjZXB0aW9uIG9mIF9leGNlcHRpb24gdHlwZV8gaXMgdGhyb3duIGFuZCBpdCBtYXRjaGVzIHByb3ZpZGVkIG1hdGNoZXIgKHNlZSB0aGUgW2RvY3VtZW50YXRpb24gZm9yIE1hdGNoZXJzXShtYXRjaGVycy5tZCN0b3ApKS4KK0V4cGVjdHMgdGhhdCBleGNlcHRpb24gb2YgX2V4Y2VwdGlvbiB0eXBlXyBpcyB0aHJvd24gYW5kIGl0IG1hdGNoZXMgcHJvdmlkZWQgbWF0Y2hlciAoc2VlIG5leHQgc2VjdGlvbiBmb3IgTWF0Y2hlcnMpLgogCiAKIF9QbGVhc2Ugbm90ZSB0aGF0IHRoZSBgVEhST1dgIGZhbWlseSBvZiBhc3NlcnRpb25zIGV4cGVjdHMgdG8gYmUgcGFzc2VkIGEgc2luZ2xlIGV4cHJlc3Npb24sIG5vdCBhIHN0YXRlbWVudCBvciBzZXJpZXMgb2Ygc3RhdGVtZW50cy4gSWYgeW91IHdhbnQgdG8gY2hlY2sgYSBtb3JlIGNvbXBsaWNhdGVkIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMsIHlvdSBjYW4gdXNlIGEgQysrMTEgbGFtYmRhIGZ1bmN0aW9uLl8KZGlmZiAtLWdpdCBhL2RvY3MvYmVuY2htYXJrcy5tZCBiL2RvY3MvYmVuY2htYXJrcy5tZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQxODM5Zi4uMDAwMDAwMAotLS0gYS9kb2NzL2JlbmNobWFya3MubWQKKysrIC9kZXYvbnVsbApAQCAtMSwyNTQgKzAsMCBAQAotPGEgaWQ9InRvcCI+PC9hPgotIyBBdXRob3JpbmcgYmVuY2htYXJrcwotCi0+IFtJbnRyb2R1Y2VkXShodHRwczovL2dpdGh1Yi5jb20vY2F0Y2hvcmcvQ2F0Y2gyL2lzc3Vlcy8xNjE2KSBpbiBDYXRjaCAyLjkuMC4KLQotX05vdGUgdGhhdCBiZW5jaG1hcmtpbmcgc3VwcG9ydCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCB0byBlbmFibGUgaXQsCi15b3UgbmVlZCB0byBkZWZpbmUgYENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HYC4gRm9yIG1vcmUgZGV0YWlscywKLXNlZSB0aGUgW2NvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIGRvY3VtZW50YXRpb25dKGNvbmZpZ3VyYXRpb24ubWQjdG9wKS5fCi0KLVdyaXRpbmcgYmVuY2htYXJrcyBpcyBub3QgZWFzeS4gQ2F0Y2ggc2ltcGxpZmllcyBjZXJ0YWluIGFzcGVjdHMgYnV0IHlvdSdsbAotYWx3YXlzIG5lZWQgdG8gdGFrZSBjYXJlIGFib3V0IHZhcmlvdXMgYXNwZWN0cy4gVW5kZXJzdGFuZGluZyBhIGZldyB0aGluZ3MgYWJvdXQKLXRoZSB3YXkgQ2F0Y2ggcnVucyB5b3VyIGNvZGUgd2lsbCBiZSB2ZXJ5IGhlbHBmdWwgd2hlbiB3cml0aW5nIHlvdXIgYmVuY2htYXJrcy4KLQotRmlyc3Qgb2ZmLCBsZXQncyBnbyBvdmVyIHNvbWUgdGVybWlub2xvZ3kgdGhhdCB3aWxsIGJlIHVzZWQgdGhyb3VnaG91dCB0aGlzCi1ndWlkZS4KLQotLSAqVXNlciBjb2RlKjogdXNlciBjb2RlIGlzIHRoZSBjb2RlIHRoYXQgdGhlIHVzZXIgcHJvdmlkZXMgdG8gYmUgbWVhc3VyZWQuCi0tICpSdW4qOiBvbmUgcnVuIGlzIG9uZSBleGVjdXRpb24gb2YgdGhlIHVzZXIgY29kZS4KLS0gKlNhbXBsZSo6IG9uZSBzYW1wbGUgaXMgb25lIGRhdGEgcG9pbnQgb2J0YWluZWQgYnkgbWVhc3VyaW5nIHRoZSB0aW1lIGl0IHRha2VzCi0gIHRvIHBlcmZvcm0gYSBjZXJ0YWluIG51bWJlciBvZiBydW5zLiBPbmUgc2FtcGxlIGNhbiBjb25zaXN0IG9mIG1vcmUgdGhhbiBvbmUKLSAgcnVuIGlmIHRoZSBjbG9jayBhdmFpbGFibGUgZG9lcyBub3QgaGF2ZSBlbm91Z2ggcmVzb2x1dGlvbiB0byBhY2N1cmF0ZWx5Ci0gIG1lYXN1cmUgYSBzaW5nbGUgcnVuLiBBbGwgc2FtcGxlcyBmb3IgYSBnaXZlbiBiZW5jaG1hcmsgZXhlY3V0aW9uIGFyZSBvYnRhaW5lZAotICB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBydW5zLgotCi0jIyBFeGVjdXRpb24gcHJvY2VkdXJlCi0KLU5vdyBJIGNhbiBleHBsYWluIGhvdyBhIGJlbmNobWFyayBpcyBleGVjdXRlZCBpbiBDYXRjaC4gVGhlcmUgYXJlIHRocmVlIG1haW4KLXN0ZXBzLCB0aG91Z2ggdGhlIGZpcnN0IGRvZXMgbm90IG5lZWQgdG8gYmUgcmVwZWF0ZWQgZm9yIGV2ZXJ5IGJlbmNobWFyay4KLQotMS4gKkVudmlyb25tZW50YWwgcHJvYmUqOiBiZWZvcmUgYW55IGJlbmNobWFya3MgY2FuIGJlIGV4ZWN1dGVkLCB0aGUgY2xvY2sncwotcmVzb2x1dGlvbiBpcyBlc3RpbWF0ZWQuIEEgZmV3IG90aGVyIGVudmlyb25tZW50YWwgYXJ0aWZhY3RzIGFyZSBhbHNvIGVzdGltYXRlZAotYXQgdGhpcyBwb2ludCwgbGlrZSB0aGUgY29zdCBvZiBjYWxsaW5nIHRoZSBjbG9jayBmdW5jdGlvbiwgYnV0IHRoZXkgYWxtb3N0Ci1uZXZlciBoYXZlIGFueSBpbXBhY3QgaW4gdGhlIHJlc3VsdHMuCi0KLTIuICpFc3RpbWF0aW9uKjogdGhlIHVzZXIgY29kZSBpcyBleGVjdXRlZCBhIGZldyB0aW1lcyB0byBvYnRhaW4gYW4gZXN0aW1hdGUgb2YKLXRoZSBhbW91bnQgb2YgcnVucyB0aGF0IHNob3VsZCBiZSBpbiBlYWNoIHNhbXBsZS4gVGhpcyBhbHNvIGhhcyB0aGUgcG90ZW50aWFsCi1lZmZlY3Qgb2YgYnJpbmdpbmcgcmVsZXZhbnQgY29kZSBhbmQgZGF0YSBpbnRvIHRoZSBjYWNoZXMgYmVmb3JlIHRoZSBhY3R1YWwKLW1lYXN1cmVtZW50IHN0YXJ0cy4KLQotMy4gKk1lYXN1cmVtZW50KjogYWxsIHRoZSBzYW1wbGVzIGFyZSBjb2xsZWN0ZWQgc2VxdWVudGlhbGx5IGJ5IHBlcmZvcm1pbmcgdGhlCi1udW1iZXIgb2YgcnVucyBlc3RpbWF0ZWQgaW4gdGhlIHByZXZpb3VzIHN0ZXAgZm9yIGVhY2ggc2FtcGxlLgotCi1UaGlzIGFscmVhZHkgZ2l2ZXMgdXMgb25lIGltcG9ydGFudCBydWxlIGZvciB3cml0aW5nIGJlbmNobWFya3MgZm9yIENhdGNoOiB0aGUKLWJlbmNobWFya3MgbXVzdCBiZSByZXBlYXRhYmxlLiBUaGUgdXNlciBjb2RlIHdpbGwgYmUgZXhlY3V0ZWQgc2V2ZXJhbCB0aW1lcywgYW5kCi10aGUgbnVtYmVyIG9mIHRpbWVzIGl0IHdpbGwgYmUgZXhlY3V0ZWQgZHVyaW5nIHRoZSBlc3RpbWF0aW9uIHN0ZXAgY2Fubm90IGJlCi1rbm93biBiZWZvcmVoYW5kIHNpbmNlIGl0IGRlcGVuZHMgb24gdGhlIHRpbWUgaXQgdGFrZXMgdG8gZXhlY3V0ZSB0aGUgY29kZS4KLVVzZXIgY29kZSB0aGF0IGNhbm5vdCBiZSBleGVjdXRlZCByZXBlYXRlZGx5IHdpbGwgbGVhZCB0byBib2d1cyByZXN1bHRzIG9yCi1jcmFzaGVzLgotCi0jIyBCZW5jaG1hcmsgc3BlY2lmaWNhdGlvbgotCi1CZW5jaG1hcmtzIGNhbiBiZSBzcGVjaWZpZWQgYW55d2hlcmUgaW5zaWRlIGEgQ2F0Y2ggdGVzdCBjYXNlLgotVGhlcmUgaXMgYSBzaW1wbGUgYW5kIGEgc2xpZ2h0bHkgbW9yZSBhZHZhbmNlZCB2ZXJzaW9uIG9mIHRoZSBgQkVOQ0hNQVJLYCBtYWNyby4KLQotTGV0J3MgaGF2ZSBhIGxvb2sgaG93IGEgbmFpdmUgRmlib25hY2NpIGltcGxlbWVudGF0aW9uIGNvdWxkIGJlIGJlbmNobWFya2VkOgotYGBgYysrCi1zdGQ6OnVpbnQ2NF90IEZpYm9uYWNjaShzdGQ6OnVpbnQ2NF90IG51bWJlcikgewotICAgIHJldHVybiBudW1iZXIgPCAyID8gMSA6IEZpYm9uYWNjaShudW1iZXIgLSAxKSArIEZpYm9uYWNjaShudW1iZXIgLSAyKTsKLX0KLWBgYAotTm93IHRoZSBtb3N0IHN0cmFpZ2h0IGZvcndhcmQgd2F5IHRvIGJlbmNobWFyayB0aGlzIGZ1bmN0aW9uLCBpcyBqdXN0IGFkZGluZyBhIGBCRU5DSE1BUktgIG1hY3JvIHRvIG91ciB0ZXN0IGNhc2U6Ci1gYGBjKysKLVRFU1RfQ0FTRSgiRmlib25hY2NpIikgewotICAgIENIRUNLKEZpYm9uYWNjaSgwKSA9PSAxKTsKLSAgICAvLyBzb21lIG1vcmUgYXNzZXJ0cy4uCi0gICAgQ0hFQ0soRmlib25hY2NpKDUpID09IDgpOwotICAgIC8vIHNvbWUgbW9yZSBhc3NlcnRzLi4KLQotICAgIC8vIG5vdyBsZXQncyBiZW5jaG1hcms6Ci0gICAgQkVOQ0hNQVJLKCJGaWJvbmFjY2kgMjAiKSB7Ci0gICAgICAgIHJldHVybiBGaWJvbmFjY2koMjApOwotICAgIH07Ci0KLSAgICBCRU5DSE1BUksoIkZpYm9uYWNjaSAyNSIpIHsKLSAgICAgICAgcmV0dXJuIEZpYm9uYWNjaSgyNSk7Ci0gICAgfTsKLQotICAgIEJFTkNITUFSSygiRmlib25hY2NpIDMwIikgewotICAgICAgICByZXR1cm4gRmlib25hY2NpKDMwKTsKLSAgICB9OwotCi0gICAgQkVOQ0hNQVJLKCJGaWJvbmFjY2kgMzUiKSB7Ci0gICAgICAgIHJldHVybiBGaWJvbmFjY2koMzUpOwotICAgIH07Ci19Ci1gYGAKLVRoZXJlJ3MgYSBmZXcgdGhpbmdzIHRvIG5vdGU6Ci0tIEFzIGBCRU5DSE1BUktgIGV4cGFuZHMgdG8gYSBsYW1iZGEgZXhwcmVzc2lvbiBpdCBpcyBuZWNlc3NhcnkgdG8gYWRkIGEgc2VtaWNvbG9uIGFmdGVyCi0gdGhlIGNsb3NpbmcgYnJhY2UgKGFzIG9wcG9zZWQgdG8gdGhlIGZpcnN0IGV4cGVyaW1lbnRhbCB2ZXJzaW9uKS4KLS0gVGhlIGByZXR1cm5gIGlzIGEgaGFuZHkgd2F5IHRvIGF2b2lkIHRoZSBjb21waWxlciBvcHRpbWl6aW5nIGF3YXkgdGhlIGJlbmNobWFyayBjb2RlLgotCi1SdW5uaW5nIHRoaXMgYWxyZWFkeSBydW5zIHRoZSBiZW5jaG1hcmtzIGFuZCBvdXRwdXRzIHNvbWV0aGluZyBzaW1pbGFyIHRvOgotYGBgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1GaWJvbmFjY2kKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUM6XHBhdGhcdG9cQ2F0Y2gyXEJlbmNobWFyay50ZXN0cy5jcHAoMTApCi0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi1iZW5jaG1hcmsgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVzICAgICAgIGl0ZXJhdGlvbnMgICAgZXN0aW1hdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuICAgICAgICAgIGxvdyBtZWFuICAgICAgaGlnaCBtZWFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQgZGV2ICAgICAgIGxvdyBzdGQgZGV2ICAgaGlnaCBzdGQgZGV2Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1GaWJvbmFjY2kgMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMCAgICAgICA0MTY0MzkgICA4My4yODc4IG1zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiBucyAgICAgICAgIDIgbnMgICAgICAgICAyIG5zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCBucyAgICAgICAgIDAgbnMgICAgICAgICAwIG5zCi0KLUZpYm9uYWNjaSAyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwICAgICAgIDQwMDc3NiAgIDgwLjE1NTIgbXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIG5zICAgICAgICAgMyBucyAgICAgICAgIDMgbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIG5zICAgICAgICAgMCBucyAgICAgICAgIDAgbnMKLQotRmlib25hY2NpIDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAgICAgICAgMzk2ODczICAgNzkuMzc0NiBtcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcgbnMgICAgICAgIDE3IG5zICAgICAgICAxNyBucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgbnMgICAgICAgICAwIG5zICAgICAgICAgMCBucwotCi1GaWJvbmFjY2kgMzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMCAgICAgICAxNDUxNjkgICA4Ny4xMDE0IG1zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2OCBucyAgICAgICA0NjQgbnMgICAgICAgNDczIG5zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMSBucyAgICAgICAgMTUgbnMgICAgICAgIDM0IG5zCi1gYGAKLQotIyMjIEFkdmFuY2VkIGJlbmNobWFya2luZwotVGhlIHNpbXBsZXN0IHVzZSBjYXNlIHNob3duIGFib3ZlLCB0YWtlcyBubyBhcmd1bWVudHMgYW5kIGp1c3QgcnVucyB0aGUgdXNlciBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgbWVhc3VyZWQuCi1Ib3dldmVyLCBpZiB1c2luZyB0aGUgYEJFTkNITUFSS19BRFZBTkNFRGAgbWFjcm8gYW5kIGFkZGluZyBhIGBDYXRjaDo6QmVuY2htYXJrOjpDaHJvbm9tZXRlcmAgYXJndW1lbnQgYWZ0ZXIKLXRoZSBtYWNybywgc29tZSBhZHZhbmNlZCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLiBUaGUgY29udGVudHMgb2YgdGhlIHNpbXBsZSBiZW5jaG1hcmtzIGFyZSBpbnZva2VkIG9uY2UgcGVyIHJ1biwKLXdoaWxlIHRoZSBibG9ja3Mgb2YgdGhlIGFkdmFuY2VkIGJlbmNobWFya3MgYXJlIGludm9rZWQgZXhhY3RseSB0d2ljZToKLW9uY2UgZHVyaW5nIHRoZSBlc3RpbWF0aW9uIHBoYXNlLCBhbmQgYW5vdGhlciB0aW1lIGR1cmluZyB0aGUgZXhlY3V0aW9uIHBoYXNlLgotCi1gYGBjKysKLUJFTkNITUFSSygic2ltcGxlIil7IHJldHVybiBsb25nX2NvbXB1dGF0aW9uKCk7IH07Ci0KLUJFTkNITUFSS19BRFZBTkNFRCgiYWR2YW5jZWQiKShDYXRjaDo6QmVuY2htYXJrOjpDaHJvbm9tZXRlciBtZXRlcikgewotICAgIHNldF91cCgpOwotICAgIG1ldGVyLm1lYXN1cmUoW10geyByZXR1cm4gbG9uZ19jb21wdXRhdGlvbigpOyB9KTsKLX07Ci1gYGAKLQotVGhlc2UgYWR2YW5jZWQgYmVuY2htYXJrcyBubyBsb25nZXIgY29uc2lzdCBlbnRpcmVseSBvZiB1c2VyIGNvZGUgdG8gYmUgbWVhc3VyZWQuCi1JbiB0aGVzZSBjYXNlcywgdGhlIGNvZGUgdG8gYmUgbWVhc3VyZWQgaXMgcHJvdmlkZWQgdmlhIHRoZQotYENhdGNoOjpCZW5jaG1hcms6OkNocm9ub21ldGVyOjptZWFzdXJlYCBtZW1iZXIgZnVuY3Rpb24uIFRoaXMgYWxsb3dzIHlvdSB0byBzZXQgdXAgYW55Ci1raW5kIG9mIHN0YXRlIHRoYXQgbWlnaHQgYmUgcmVxdWlyZWQgZm9yIHRoZSBiZW5jaG1hcmsgYnV0IGlzIG5vdCB0byBiZSBpbmNsdWRlZAotaW4gdGhlIG1lYXN1cmVtZW50cywgbGlrZSBtYWtpbmcgYSB2ZWN0b3Igb2YgcmFuZG9tIGludGVnZXJzIHRvIGZlZWQgdG8gYQotc29ydGluZyBhbGdvcml0aG0uCi0KLUEgc2luZ2xlIGNhbGwgdG8gYENhdGNoOjpCZW5jaG1hcms6OkNocm9ub21ldGVyOjptZWFzdXJlYCBwZXJmb3JtcyB0aGUgYWN0dWFsIG1lYXN1cmVtZW50cwotYnkgaW52b2tpbmcgdGhlIGNhbGxhYmxlIG9iamVjdCBwYXNzZWQgaW4gYXMgbWFueSB0aW1lcyBhcyBuZWNlc3NhcnkuIEFueXRoaW5nCi10aGF0IG5lZWRzIHRvIGJlIGRvbmUgb3V0c2lkZSB0aGUgbWVhc3VyZW1lbnQgY2FuIGJlIGRvbmUgb3V0c2lkZSB0aGUgY2FsbCB0bwotYG1lYXN1cmVgLgotCi1UaGUgY2FsbGFibGUgb2JqZWN0IHBhc3NlZCBpbiB0byBgbWVhc3VyZWAgY2FuIG9wdGlvbmFsbHkgYWNjZXB0IGFuIGBpbnRgCi1wYXJhbWV0ZXIuCi0KLWBgYGMrKwotbWV0ZXIubWVhc3VyZShbXShpbnQgaSkgeyByZXR1cm4gbG9uZ19jb21wdXRhdGlvbihpKTsgfSk7Ci1gYGAKLQotSWYgaXQgYWNjZXB0cyBhbiBgaW50YCBwYXJhbWV0ZXIsIHRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgZWFjaCBydW4gd2lsbCBiZSBwYXNzZWQKLWluLCBzdGFydGluZyB3aXRoIDAuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIG1lYXN1cmUgc29tZSBtdXRhdGluZyBjb2RlLAotZm9yIGV4YW1wbGUuIFRoZSBudW1iZXIgb2YgcnVucyBjYW4gYmUga25vd24gYmVmb3JlaGFuZCBieSBjYWxsaW5nCi1gQ2F0Y2g6OkJlbmNobWFyazo6Q2hyb25vbWV0ZXI6OnJ1bnNgOyB3aXRoIHRoaXMgb25lIGNhbiBzZXQgdXAgYSBkaWZmZXJlbnQgaW5zdGFuY2UgdG8gYmUKLW11dGF0ZWQgYnkgZWFjaCBydW4uCi0KLWBgYGMrKwotc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHYobWV0ZXIucnVucygpKTsKLXN0ZDo6ZmlsbCh2LmJlZ2luKCksIHYuZW5kKCksIHRlc3Rfc3RyaW5nKCkpOwotbWV0ZXIubWVhc3VyZShbJnZdKGludCBpKSB7IGluX3BsYWNlX2VzY2FwZSh2W2ldKTsgfSk7Ci1gYGAKLQotTm90ZSB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBzaW1wbHkgdXNlIHRoZSBzYW1lIGluc3RhbmNlIGZvciBkaWZmZXJlbnQgcnVucwotYW5kIHJlc2V0dGluZyBpdCBiZXR3ZWVuIGVhY2ggcnVuIHNpbmNlIHRoYXQgd291bGQgcG9sbHV0ZSB0aGUgbWVhc3VyZW1lbnRzIHdpdGgKLXRoZSByZXNldHRpbmcgY29kZS4KLQotSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBqdXN0IHByb3ZpZGUgYW4gYXJndW1lbnQgbmFtZSB0byB0aGUgc2ltcGxlIGBCRU5DSE1BUktgIG1hY3JvIHRvIGdldAotdGhlIHNhbWUgc2VtYW50aWNzIGFzIHByb3ZpZGluZyBhIGNhbGxhYmxlIHRvIGBtZXRlci5tZWFzdXJlYCB3aXRoIGBpbnRgIGFyZ3VtZW50OgotCi1gYGBjKysKLUJFTkNITUFSSygiaW5kZXhlZCIsIGkpeyByZXR1cm4gbG9uZ19jb21wdXRhdGlvbihpKTsgfTsKLWBgYAotCi0jIyMgQ29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycwotCi1BbGwgb2YgdGhlc2UgdG9vbHMgZ2l2ZSB5b3UgYSBsb3QgbWlsZWFnZSwgYnV0IHRoZXJlIGFyZSB0d28gdGhpbmdzIHRoYXQgc3RpbGwKLW5lZWQgc3BlY2lhbCBoYW5kbGluZzogY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycy4gVGhlIHByb2JsZW0gaXMgdGhhdCBpZiB5b3UKLXVzZSBhdXRvbWF0aWMgb2JqZWN0cyB0aGV5IGdldCBkZXN0cm95ZWQgYnkgdGhlIGVuZCBvZiB0aGUgc2NvcGUsIHNvIHlvdSBlbmQgdXAKLW1lYXN1cmluZyB0aGUgdGltZSBmb3IgY29uc3RydWN0aW9uIGFuZCBkZXN0cnVjdGlvbiB0b2dldGhlci4gQW5kIGlmIHlvdSB1c2UKLWR5bmFtaWMgYWxsb2NhdGlvbiBpbnN0ZWFkLCB5b3UgZW5kIHVwIGluY2x1ZGluZyB0aGUgdGltZSB0byBhbGxvY2F0ZSBtZW1vcnkgaW4KLXRoZSBtZWFzdXJlbWVudHMuCi0KLVRvIHNvbHZlIHRoaXMgY29udW5kcnVtLCBDYXRjaCBwcm92aWRlcyBjbGFzcyB0ZW1wbGF0ZXMgdGhhdCBsZXQgeW91IG1hbnVhbGx5Ci1jb25zdHJ1Y3QgYW5kIGRlc3Ryb3kgb2JqZWN0cyB3aXRob3V0IGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgaW4gYSB3YXkgdGhhdCBsZXRzCi15b3UgbWVhc3VyZSBjb25zdHJ1Y3Rpb24gYW5kIGRlc3RydWN0aW9uIHNlcGFyYXRlbHkuCi0KLWBgYGMrKwotQkVOQ0hNQVJLX0FEVkFOQ0VEKCJjb25zdHJ1Y3QiKShDYXRjaDo6QmVuY2htYXJrOjpDaHJvbm9tZXRlciBtZXRlcikgewotICAgIHN0ZDo6dmVjdG9yPENhdGNoOjpCZW5jaG1hcms6OnN0b3JhZ2VfZm9yPHN0ZDo6c3RyaW5nPj4gc3RvcmFnZShtZXRlci5ydW5zKCkpOwotICAgIG1ldGVyLm1lYXN1cmUoWyZdKGludCBpKSB7IHN0b3JhZ2VbaV0uY29uc3RydWN0KCJ0aGluZyIpOyB9KTsKLX07Ci0KLUJFTkNITUFSS19BRFZBTkNFRCgiZGVzdHJveSIpKENhdGNoOjpCZW5jaG1hcms6OkNocm9ub21ldGVyIG1ldGVyKSB7Ci0gICAgc3RkOjp2ZWN0b3I8Q2F0Y2g6OkJlbmNobWFyazo6ZGVzdHJ1Y3RhYmxlX29iamVjdDxzdGQ6OnN0cmluZz4+IHN0b3JhZ2UobWV0ZXIucnVucygpKTsKLSAgICBmb3IoYXV0byYmIG8gOiBzdG9yYWdlKQotICAgICAgICBvLmNvbnN0cnVjdCgidGhpbmciKTsKLSAgICBtZXRlci5tZWFzdXJlKFsmXShpbnQgaSkgeyBzdG9yYWdlW2ldLmRlc3RydWN0KCk7IH0pOwotfTsKLWBgYAotCi1gQ2F0Y2g6OkJlbmNobWFyazo6c3RvcmFnZV9mb3I8VD5gIG9iamVjdHMgYXJlIGp1c3QgcGllY2VzIG9mIHJhdyBzdG9yYWdlIHN1aXRhYmxlIGZvciBgVGAKLW9iamVjdHMuIFlvdSBjYW4gdXNlIHRoZSBgQ2F0Y2g6OkJlbmNobWFyazo6c3RvcmFnZV9mb3I6OmNvbnN0cnVjdGAgbWVtYmVyIGZ1bmN0aW9uIHRvIGNhbGwgYSBjb25zdHJ1Y3RvciBhbmQKLWNyZWF0ZSBhbiBvYmplY3QgaW4gdGhhdCBzdG9yYWdlLiBTbyBpZiB5b3Ugd2FudCB0byBtZWFzdXJlIHRoZSB0aW1lIGl0IHRha2VzCi1mb3IgYSBjZXJ0YWluIGNvbnN0cnVjdG9yIHRvIHJ1biwgeW91IGNhbiBqdXN0IG1lYXN1cmUgdGhlIHRpbWUgaXQgdGFrZXMgdG8gcnVuCi10aGlzIGZ1bmN0aW9uLgotCi1XaGVuIHRoZSBsaWZldGltZSBvZiBhIGBDYXRjaDo6QmVuY2htYXJrOjpzdG9yYWdlX2ZvcjxUPmAgb2JqZWN0IGVuZHMsIGlmIGFuIGFjdHVhbCBvYmplY3Qgd2FzCi1jb25zdHJ1Y3RlZCB0aGVyZSBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZGVzdHJveWVkLCBzbyBub3RoaW5nIGxlYWtzLgotCi1JZiB5b3Ugd2FudCB0byBtZWFzdXJlIGEgZGVzdHJ1Y3RvciwgdGhvdWdoLCB3ZSBuZWVkIHRvIHVzZQotYENhdGNoOjpCZW5jaG1hcms6OmRlc3RydWN0YWJsZV9vYmplY3Q8VD5gLiBUaGVzZSBvYmplY3RzIGFyZSBzaW1pbGFyIHRvCi1gQ2F0Y2g6OkJlbmNobWFyazo6c3RvcmFnZV9mb3I8VD5gIGluIHRoYXQgY29uc3RydWN0aW9uIG9mIHRoZSBgVGAgb2JqZWN0IGlzIG1hbnVhbCwgYnV0Ci1pdCBkb2VzIG5vdCBkZXN0cm95IGFueXRoaW5nIGF1dG9tYXRpY2FsbHkuIEluc3RlYWQsIHlvdSBhcmUgcmVxdWlyZWQgdG8gY2FsbAotdGhlIGBDYXRjaDo6QmVuY2htYXJrOjpkZXN0cnVjdGFibGVfb2JqZWN0OjpkZXN0cnVjdGAgbWVtYmVyIGZ1bmN0aW9uLCB3aGljaCBpcyB3aGF0IHlvdQotY2FuIHVzZSB0byBtZWFzdXJlIHRoZSBkZXN0cnVjdGlvbiB0aW1lLgotCi0jIyMgVGhlIG9wdGltaXplcgotCi1Tb21ldGltZXMgdGhlIG9wdGltaXplciB3aWxsIG9wdGltaXplIGF3YXkgdGhlIHZlcnkgY29kZSB0aGF0IHlvdSB3YW50IHRvCi1tZWFzdXJlLiBUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIHVzZSByZXN1bHRzIHRoYXQgd2lsbCBwcmV2ZW50IHRoZSBvcHRpbWlzZXIKLWZyb20gcmVtb3ZpbmcgdGhlbS4gWW91IGNhbiB1c2UgdGhlIGB2b2xhdGlsZWAga2V5d29yZCwgb3IgeW91IGNhbiBvdXRwdXQgdGhlCi12YWx1ZSB0byBzdGFuZGFyZCBvdXRwdXQgb3IgdG8gYSBmaWxlLCBib3RoIG9mIHdoaWNoIGZvcmNlIHRoZSBwcm9ncmFtIHRvCi1hY3R1YWxseSBnZW5lcmF0ZSB0aGUgdmFsdWUgc29tZWhvdy4KLQotQ2F0Y2ggYWRkcyBhIHRoaXJkIG9wdGlvbi4gVGhlIHZhbHVlcyByZXR1cm5lZCBieSBhbnkgZnVuY3Rpb24gcHJvdmlkZWQgYXMgdXNlcgotY29kZSBhcmUgZ3VhcmFudGVlZCB0byBiZSBldmFsdWF0ZWQgYW5kIG5vdCBvcHRpbWlzZWQgb3V0LiBUaGlzIG1lYW5zIHRoYXQgaWYKLXlvdXIgdXNlciBjb2RlIGNvbnNpc3RzIG9mIGNvbXB1dGluZyBhIGNlcnRhaW4gdmFsdWUsIHlvdSBkb24ndCBuZWVkIHRvIGJvdGhlcgotd2l0aCB1c2luZyBgdm9sYXRpbGVgIG9yIGZvcmNpbmcgb3V0cHV0LiBKdXN0IGByZXR1cm5gIGl0IGZyb20gdGhlIGZ1bmN0aW9uLgotVGhhdCBoZWxwcyB3aXRoIGtlZXBpbmcgdGhlIGNvZGUgaW4gYSBuYXR1cmFsIGZhc2hpb24uCi0KLUhlcmUncyBhbiBleGFtcGxlOgotCi1gYGBjKysKLS8vIG1heSBtZWFzdXJlIG5vdGhpbmcgYXQgYWxsIGJ5IHNraXBwaW5nIHRoZSBsb25nIGNhbGN1bGF0aW9uIHNpbmNlIGl0cwotLy8gcmVzdWx0IGlzIG5vdCB1c2VkCi1CRU5DSE1BUksoIm5vIHJldHVybiIpeyBsb25nX2NhbGN1bGF0aW9uKCk7IH07Ci0KLS8vIHRoZSByZXN1bHQgb2YgbG9uZ19jYWxjdWxhdGlvbigpIGlzIGd1YXJhbnRlZWQgdG8gYmUgY29tcHV0ZWQgc29tZWhvdwotQkVOQ0hNQVJLKCJ3aXRoIHJldHVybiIpeyByZXR1cm4gbG9uZ19jYWxjdWxhdGlvbigpOyB9OwotYGBgCi0KLUhvd2V2ZXIsIHRoZXJlJ3Mgbm8gb3RoZXIgZm9ybSBvZiBjb250cm9sIG92ZXIgdGhlIG9wdGltaXplciB3aGF0c29ldmVyLiBJdCBpcwotdXAgdG8geW91IHRvIHdyaXRlIGEgYmVuY2htYXJrIHRoYXQgYWN0dWFsbHkgbWVhc3VyZXMgd2hhdCB5b3Ugd2FudCBhbmQgZG9lc24ndAotanVzdCBtZWFzdXJlIHRoZSB0aW1lIHRvIGRvIGEgd2hvbGUgYnVuY2ggb2Ygbm90aGluZy4KLQotVG8gc3VtIHVwLCB0aGVyZSBhcmUgdHdvIHNpbXBsZSBydWxlczogd2hhdGV2ZXIgeW91IHdvdWxkIGRvIGluIGhhbmR3cml0dGVuIGNvZGUKLXRvIGNvbnRyb2wgb3B0aW1pemF0aW9uIHN0aWxsIHdvcmtzIGluIENhdGNoOyBhbmQgQ2F0Y2ggbWFrZXMgcmV0dXJuIHZhbHVlcwotZnJvbSB1c2VyIGNvZGUgaW50byBvYnNlcnZhYmxlIGVmZmVjdHMgdGhhdCBjYW4ndCBiZSBvcHRpbWl6ZWQgYXdheS4KLQotPGk+QWRhcHRlZCBmcm9tIG5vbml1cycgZG9jdW1lbnRhdGlvbi48L2k+CmRpZmYgLS1naXQgYS9kb2NzL2NpLWFuZC1taXNjLm1kIGIvZG9jcy9jaS1hbmQtbWlzYy5tZAppbmRleCA0MGI3Y2VjLi44YzMzMDg3IDEwMDY0NAotLS0gYS9kb2NzL2NpLWFuZC1taXNjLm1kCisrKyBiL2RvY3MvY2ktYW5kLW1pc2MubWQKQEAgLTEyLDcgKzEyLDcgQEAKIAogIyMgQ29udGludW91cyBJbnRlZ3JhdGlvbiBzeXN0ZW1zCiAKLVByb2JhYmx5IHRoZSBtb3N0IGltcG9ydGFudCBhc3BlY3QgdG8gdXNpbmcgQ2F0Y2ggd2l0aCBhIGJ1aWxkIHNlcnZlciBpcyB0aGUgdXNlIG9mIGRpZmZlcmVudCByZXBvcnRlcnMuIENhdGNoIGNvbWVzIGJ1bmRsZWQgd2l0aCB0aHJlZSByZXBvcnRlcnMgdGhhdCBzaG91bGQgY292ZXIgdGhlIG1ham9yaXR5IG9mIGJ1aWxkIHNlcnZlcnMgb3V0IHRoZXJlIC0gYWx0aG91Z2ggYWRkaW5nIG1vcmUgZm9yIGJldHRlciBpbnRlZ3JhdGlvbiB3aXRoIHNvbWUgaXMgYWx3YXlzIGEgcG9zc2liaWxpdHkgKGN1cnJlbnRseSB3ZSBhbHNvIG9mZmVyIFRlYW1DaXR5LCBUQVAsIEF1dG9tYWtlIGFuZCBTb25hclF1YmUgcmVwb3J0ZXJzKS4KK1Byb2JhYmx5IHRoZSBtb3N0IGltcG9ydGFudCBhc3BlY3QgdG8gdXNpbmcgQ2F0Y2ggd2l0aCBhIGJ1aWxkIHNlcnZlciBpcyB0aGUgdXNlIG9mIGRpZmZlcmVudCByZXBvcnRlcnMuIENhdGNoIGNvbWVzIGJ1bmRsZWQgd2l0aCB0aHJlZSByZXBvcnRlcnMgdGhhdCBzaG91bGQgY292ZXIgdGhlIG1ham9yaXR5IG9mIGJ1aWxkIHNlcnZlcnMgb3V0IHRoZXJlIC0gYWx0aG91Z2ggYWRkaW5nIG1vcmUgZm9yIGJldHRlciBpbnRlZ3JhdGlvbiB3aXRoIHNvbWUgaXMgYWx3YXlzIGEgcG9zc2liaWxpdHkgKGN1cnJlbnRseSB3ZSBhbHNvIG9mZmVyIFRlYW1DaXR5LCBUQVAgYW5kIEF1dG9tYWtlIHJlcG9ydGVycykuCiAKIFR3byBvZiB0aGVzZSByZXBvcnRlcnMgYXJlIGJ1aWx0IGluIChYTUwgYW5kIEpVbml0KSBhbmQgdGhlIHRoaXJkIChUZWFtQ2l0eSkgaXMgaW5jbHVkZWQgYXMgYSBzZXBhcmF0ZSBoZWFkZXIuIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgb3RoZXIgdHdvIG1heSBiZSBzcGxpdCBvdXQgaW4gdGhlIGZ1dHVyZSB0b28gLSBhcyB0aGF0IHdvdWxkIG1ha2UgdGhlIGNvcmUgb2YgQ2F0Y2ggc21hbGxlciBmb3IgdGhvc2UgdGhhdCBkb24ndCBuZWVkIHRoZW0uCiAKQEAgLTY1LDEwICs2NSw2IEBACiAKIEJlY2F1c2Ugb2YgdGhlIGluY3JlbWVudGFsIG5hdHVyZSBvZiBDYXRjaCdzIHRlc3Qgc3VpdGVzIGFuZCBhYmlsaXR5IHRvIHJ1biBzcGVjaWZpYyB0ZXN0cywgb3VyIGltcGxlbWVudGF0aW9uIG9mIFRBUCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSBudW1iZXIgb2YgdGVzdHMgaW4gYSBzdWl0ZSBsYXN0LgogCi0jIyMgU29uYXJRdWJlIFJlcG9ydGVyCi1gYGAtciBzb25hcnF1YmVgYGAKLVtTb25hclF1YmUgR2VuZXJpYyBUZXN0IERhdGFdKGh0dHBzOi8vZG9jcy5zb25hcnF1YmUub3JnL2xhdGVzdC9hbmFseXNpcy9nZW5lcmljLXRlc3QvKSBYTUwgZm9ybWF0IGZvciB0ZXN0cyBtZXRyaWNzLgotCiAjIyBMb3ctbGV2ZWwgdG9vbHMKIAogIyMjIFByZWNvbXBpbGVkIGhlYWRlcnMgKFBDSHMpCmRpZmYgLS1naXQgYS9kb2NzL2NvbW1hbmQtbGluZS5tZCBiL2RvY3MvY29tbWFuZC1saW5lLm1kCmluZGV4IDUxZWViMmYuLmY2OGM4NGMgMTAwNjQ0Ci0tLSBhL2RvY3MvY29tbWFuZC1saW5lLm1kCisrKyBiL2RvY3MvY29tbWFuZC1saW5lLm1kCkBAIC0yMCwxMSArMjAsNyBAQAogW1NwZWNpZnkgYSBzZWVkIGZvciB0aGUgUmFuZG9tIE51bWJlciBHZW5lcmF0b3JdKCNzcGVjaWZ5LWEtc2VlZC1mb3ItdGhlLXJhbmRvbS1udW1iZXItZ2VuZXJhdG9yKTxicj4KIFtJZGVudGlmeSBmcmFtZXdvcmsgYW5kIHZlcnNpb24gYWNjb3JkaW5nIHRvIHRoZSBsaWJJZGVudGlmeSBzdGFuZGFyZF0oI2lkZW50aWZ5LWZyYW1ld29yay1hbmQtdmVyc2lvbi1hY2NvcmRpbmctdG8tdGhlLWxpYmlkZW50aWZ5LXN0YW5kYXJkKTxicj4KIFtXYWl0IGZvciBrZXkgYmVmb3JlIGNvbnRpbnVpbmddKCN3YWl0LWZvci1rZXktYmVmb3JlLWNvbnRpbnVpbmcpPGJyPgotW1NwZWNpZnkgdGhlIG51bWJlciBvZiBiZW5jaG1hcmsgc2FtcGxlcyB0byBjb2xsZWN0XSgjc3BlY2lmeS10aGUtbnVtYmVyLW9mLWJlbmNobWFyay1zYW1wbGVzLXRvLWNvbGxlY3QpPGJyPgotW1NwZWNpZnkgdGhlIG51bWJlciBvZiByZXNhbXBsZXMgZm9yIGJvb3RzdHJhcHBpbmddKCNzcGVjaWZ5LXRoZS1udW1iZXItb2YtcmVzYW1wbGVzLWZvci1ib290c3RyYXBwaW5nKTxicj4KLVtTcGVjaWZ5IHRoZSBjb25maWRlbmNlLWludGVydmFsIGZvciBib290c3RyYXBwaW5nXSgjc3BlY2lmeS10aGUtY29uZmlkZW5jZS1pbnRlcnZhbC1mb3ItYm9vdHN0cmFwcGluZyk8YnI+Ci1bRGlzYWJsZSBzdGF0aXN0aWNhbCBhbmFseXNpcyBvZiBjb2xsZWN0ZWQgYmVuY2htYXJrIHNhbXBsZXNdKCNkaXNhYmxlLXN0YXRpc3RpY2FsLWFuYWx5c2lzLW9mLWNvbGxlY3RlZC1iZW5jaG1hcmstc2FtcGxlcyk8YnI+Ci1bU3BlY2lmeSB0aGUgYW1vdW50IG9mIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHNwZW50IG9uIHdhcm1pbmcgdXAgZWFjaCB0ZXN0XSgjc3BlY2lmeS10aGUtYW1vdW50LW9mLXRpbWUtaW4tbWlsbGlzZWNvbmRzLXNwZW50LW9uLXdhcm1pbmctdXAtZWFjaC10ZXN0KTxicj4KK1tTcGVjaWZ5IG11bHRpcGxlcyBvZiBjbG9jayByZXNvbHV0aW9uIHRvIHJ1biBiZW5jaG1hcmtzIGZvcl0oI3NwZWNpZnktbXVsdGlwbGVzLW9mLWNsb2NrLXJlc29sdXRpb24tdG8tcnVuLWJlbmNobWFya3MtZm9yKTxicj4KIFtVc2FnZV0oI3VzYWdlKTxicj4KIFtTcGVjaWZ5IHRoZSBzZWN0aW9uIHRvIHJ1bl0oI3NwZWNpZnktdGhlLXNlY3Rpb24tdG8tcnVuKTxicj4KIFtGaWxlbmFtZXMgYXMgdGFnc10oI2ZpbGVuYW1lcy1hcy10YWdzKTxicj4KQEAgLTYxLDExICs1Nyw3IEBACiA8YSBocmVmPSIjcm5nLXNlZWQiPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAgICAgLS1ybmctc2VlZGA8L2E+PGJyIC8+CiA8YSBocmVmPSIjbGliaWRlbnRpZnkiPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAgICAgLS1saWJpZGVudGlmeWA8L2E+PGJyIC8+CiA8YSBocmVmPSIjd2FpdC1mb3Ita2V5cHJlc3MiPiAgICAgICAgICAgICAgICAgICAgICAgICAgIGAgICAgLS13YWl0LWZvci1rZXlwcmVzc2A8L2E+PGJyIC8+Ci08YSBocmVmPSIjYmVuY2htYXJrLXNhbXBsZXMiPiAgICAgICAgICAgICAgICAgICAgICAgICAgIGAgICAgLS1iZW5jaG1hcmstc2FtcGxlc2A8L2E+PGJyIC8+Ci08YSBocmVmPSIjYmVuY2htYXJrLXJlc2FtcGxlcyI+ICAgICAgICAgICAgICAgICAgICAgICAgIGAgICAgLS1iZW5jaG1hcmstcmVzYW1wbGVzYDwvYT48YnIgLz4KLTxhIGhyZWY9IiNiZW5jaG1hcmstY29uZmlkZW5jZS1pbnRlcnZhbCI+ICAgICAgICAgICAgICAgYCAgICAtLWJlbmNobWFyay1jb25maWRlbmNlLWludGVydmFsYDwvYT48YnIgLz4KLTxhIGhyZWY9IiNiZW5jaG1hcmstbm8tYW5hbHlzaXMiPiAgICAgICAgICAgICAgICAgICAgICAgYCAgICAtLWJlbmNobWFyay1uby1hbmFseXNpc2A8L2E+PGJyIC8+Ci08YSBocmVmPSIjYmVuY2htYXJrLXdhcm11cC10aW1lIj4gICAgICAgICAgICAgICAgICAgICAgIGAgICAgLS1iZW5jaG1hcmstd2FybXVwLXRpbWVgPC9hPjxiciAvPgorPGEgaHJlZj0iI2JlbmNobWFyay1yZXNvbHV0aW9uLW11bHRpcGxlIj4gICAgICAgICAgICAgICBgICAgIC0tYmVuY2htYXJrLXJlc29sdXRpb24tbXVsdGlwbGVgPC9hPjxiciAvPgogPGEgaHJlZj0iI3VzZS1jb2xvdXIiPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgICAgIC0tdXNlLWNvbG91cmA8L2E+PGJyIC8+CiAKIDwvYnI+CkBAIC0xMDEsNyArOTMsNiBAQAogfipwcml2YXRlKiAgICAgICAgICAgICAgTWF0Y2hlcyBhbGwgdGVzdHMgZXhjZXB0IHRob3NlIHRoYXQgY29udGFpbiAncHJpdmF0ZScKIGEqIH5hYiogYWJjICAgICAgICAgICAgIE1hdGNoZXMgYWxsIHRlc3RzIHRoYXQgc3RhcnQgd2l0aCAnYScsIGV4Y2VwdCB0aG9zZSB0aGF0CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCB3aXRoICdhYicsIGV4Y2VwdCAnYWJjJywgd2hpY2ggaXMgaW5jbHVkZWQKLS0jIFsjc29tZWZpbGVdICAgICAgICAgIE1hdGNoZXMgYWxsIHRlc3RzIGZyb20gdGhlIGZpbGUgJ3NvbWVmaWxlLmNwcCcKIDwvcHJlPgogCiBOYW1lcyB3aXRoaW4gc3F1YXJlIGJyYWNrZXRzIGFyZSBpbnRlcnByZXRlZCBhcyB0YWdzLgpAQCAtMjQ1LDcgKzIzNiw3IEBACiAKIAogIyMjIGRlY2wKLURlY2xhcmF0aW9uIG9yZGVyICh0aGlzIGlzIHRoZSBkZWZhdWx0IG9yZGVyIGlmIG5vIC0tb3JkZXIgYXJndW1lbnQgaXMgcHJvdmlkZWQpLiBUaGUgb3JkZXIgdGhlIHRlc3RzIHdlcmUgb3JpZ2luYWxseSBkZWNsYXJlZCBpbi4gTm90ZSB0aGF0IG9yZGVyaW5nIGJldHdlZW4gZmlsZXMgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4KK0RlY2xhcmF0aW9uIG9yZGVyLiBUaGUgb3JkZXIgdGhlIHRlc3RzIHdlcmUgb3JpZ2luYWxseSBkZWNsYXJlZCBpbi4gTm90ZSB0aGF0IG9yZGVyaW5nIGJldHdlZW4gZmlsZXMgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4KIAogIyMjIGxleAogTGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkLiBUZXN0cyBhcmUgc29ydGVkLCBhbHBoYS1udW1lcmljYWxseSwgYnkgbmFtZS4KQEAgLTI1OSw3ICsyNTAsNyBAQAogCiBTZXRzIGEgc2VlZCBmb3IgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHVzaW5nIGBgYHN0ZDo6c3JhbmQoKWBgYC4gCiBJZiBhIG51bWJlciBpcyBwcm92aWRlZCB0aGlzIGlzIHVzZWQgZGlyZWN0bHkgYXMgdGhlIHNlZWQgc28gdGhlIHJhbmRvbSBwYXR0ZXJuIGlzIHJlcGVhdGFibGUuCi1BbHRlcm5hdGl2ZWx5IGlmIHRoZSBrZXl3b3JkIGBgYHRpbWVgYGAgaXMgcHJvdmlkZWQgdGhlbiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgYGBgc3RkOjp0aW1lKDApYGBgIGlzIHVzZWQgYW5kIHNvIHRoZSBwYXR0ZXJuIGJlY29tZXMgdW5wcmVkaWN0YWJsZS4gSW4gc29tZSBjYXNlcywgeW91IG1pZ2h0IG5lZWQgdG8gcGFzcyB0aGUga2V5d29yZCBgYGB0aW1lYGBgIGluIGRvdWJsZSBxdW90ZXMgaW5zdGVhZCBvZiBzaW5nbGUgcXVvdGVzLgorQWx0ZXJuYXRpdmVseSBpZiB0aGUga2V5d29yZCBgYGB0aW1lYGBgIGlzIHByb3ZpZGVkIHRoZW4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGBgYHN0ZDo6dGltZSgwKWBgYCBpcyB1c2VkIGFuZCBzbyB0aGUgcGF0dGVybiBiZWNvbWVzIHVucHJlZGljdGFibGUuCiAKIEluIGVpdGhlciBjYXNlIHRoZSBhY3R1YWwgdmFsdWUgZm9yIHRoZSBzZWVkIGlzIHByaW50ZWQgYXMgcGFydCBvZiBDYXRjaCdzIG91dHB1dCBzbyBpZiBhbiBpc3N1ZSBpcyBkaXNjb3ZlcmVkIHRoYXQgaXMgc2Vuc2l0aXZlIHRvIHRlc3Qgb3JkZXJpbmcgdGhlIG9yZGVyaW5nIGNhbiBiZSByZXByb2R1Y2VkIC0gZXZlbiBpZiBpdCB3YXMgb3JpZ2luYWxseSBzZWVkZWQgZnJvbSBgYGBzdGQ6OnRpbWUoMClgYGAuCiAKQEAgLTI3MSw2MSArMjYyLDE4IEBACiAKIDxhIGlkPSJ3YWl0LWZvci1rZXlwcmVzcyI+PC9hPgogIyMgV2FpdCBmb3Iga2V5IGJlZm9yZSBjb250aW51aW5nCi08cHJlPi0td2FpdC1mb3Ita2V5cHJlc3MgJmx0O25ldmVyfHN0YXJ0fGV4aXR8Ym90aCZndDs8L3ByZT4KKzxwcmU+LS13YWl0LWZvci1rZXlwcmVzcyAmbHQ7c3RhcnR8ZXhpdHxib3RoJmd0OzwvcHJlPgogCiBXaWxsIGNhdXNlIHRoZSBleGVjdXRhYmxlIHRvIHByaW50IGEgbWVzc2FnZSBhbmQgd2FpdCB1bnRpbCB0aGUgcmV0dXJuLyBlbnRlciBrZXkgaXMgcHJlc3NlZCBiZWZvcmUgY29udGludWluZyAtCiBlaXRoZXIgYmVmb3JlIHJ1bm5pbmcgYW55IHRlc3RzLCBhZnRlciBydW5uaW5nIGFsbCB0ZXN0cyAtIG9yIGJvdGgsIGRlcGVuZGluZyBvbiB0aGUgYXJndW1lbnQuCiAKLTxhIGlkPSJiZW5jaG1hcmstc2FtcGxlcyI+PC9hPgotIyMgU3BlY2lmeSB0aGUgbnVtYmVyIG9mIGJlbmNobWFyayBzYW1wbGVzIHRvIGNvbGxlY3QKLTxwcmU+LS1iZW5jaG1hcmstc2FtcGxlcyAmbHQ7IyBvZiBzYW1wbGVzJmd0OzwvcHJlPgorPGEgaWQ9ImJlbmNobWFyay1yZXNvbHV0aW9uLW11bHRpcGxlIj48L2E+CisjIyBTcGVjaWZ5IG11bHRpcGxlcyBvZiBjbG9jayByZXNvbHV0aW9uIHRvIHJ1biBiZW5jaG1hcmtzIGZvcgorPHByZT4tLWJlbmNobWFyay1yZXNvbHV0aW9uLW11bHRpcGxlICZsdDttdWx0aXBsaWVyJmd0OzwvcHJlPgogCi0+IFtJbnRyb2R1Y2VkXShodHRwczovL2dpdGh1Yi5jb20vY2F0Y2hvcmcvQ2F0Y2gyL2lzc3Vlcy8xNjE2KSBpbiBDYXRjaCAyLjkuMC4KLQotV2hlbiBydW5uaW5nIGJlbmNobWFya3MgYSBudW1iZXIgb2YgInNhbXBsZXMiIGlzIGNvbGxlY3RlZC4gVGhpcyBpcyB0aGUgYmFzZSBkYXRhIGZvciBsYXRlciBzdGF0aXN0aWNhbCBhbmFseXNpcy4KLVBlciBzYW1wbGUgYSBjbG9jayByZXNvbHV0aW9uIGRlcGVuZGVudCBudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiB0aGUgdXNlciBjb2RlIGlzIHJ1biwgd2hpY2ggaXMgaW5kZXBlbmRlbnQgb2YgdGhlIG51bWJlciBvZiBzYW1wbGVzLiBEZWZhdWx0cyB0byAxMDAuCi0KLTxhIGlkPSJiZW5jaG1hcmstcmVzYW1wbGVzIj48L2E+Ci0jIyBTcGVjaWZ5IHRoZSBudW1iZXIgb2YgcmVzYW1wbGVzIGZvciBib290c3RyYXBwaW5nCi08cHJlPi0tYmVuY2htYXJrLXJlc2FtcGxlcyAmbHQ7IyBvZiByZXNhbXBsZXMmZ3Q7PC9wcmU+Ci0KLT4gW0ludHJvZHVjZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jYXRjaG9yZy9DYXRjaDIvaXNzdWVzLzE2MTYpIGluIENhdGNoIDIuOS4wLgotCi1BZnRlciB0aGUgbWVhc3VyZW1lbnRzIGFyZSBwZXJmb3JtZWQsIHN0YXRpc3RpY2FsIFtib290c3RyYXBwaW5nXSBpcyBwZXJmb3JtZWQKLW9uIHRoZSBzYW1wbGVzLiBUaGUgbnVtYmVyIG9mIHJlc2FtcGxlcyBmb3IgdGhhdCBib290c3RyYXBwaW5nIGlzIGNvbmZpZ3VyYWJsZQotYnV0IGRlZmF1bHRzIHRvIDEwMDAwMC4gRHVlIHRvIHRoZSBib290c3RyYXBwaW5nIGl0IGlzIHBvc3NpYmxlIHRvIGdpdmUKLWVzdGltYXRlcyBmb3IgdGhlIG1lYW4gYW5kIHN0YW5kYXJkIGRldmlhdGlvbi4gVGhlIGVzdGltYXRlcyBjb21lIHdpdGggYSBsb3dlcgotYm91bmQgYW5kIGFuIHVwcGVyIGJvdW5kLCBhbmQgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgKHdoaWNoIGlzIGNvbmZpZ3VyYWJsZSBidXQKLWRlZmF1bHRzIHRvIDk1JSkuCi0KLSBbYm9vdHN0cmFwcGluZ106IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQm9vdHN0cmFwcGluZ18lMjhzdGF0aXN0aWNzJTI5Ci0KLTxhIGlkPSJiZW5jaG1hcmstY29uZmlkZW5jZS1pbnRlcnZhbCI+PC9hPgotIyMgU3BlY2lmeSB0aGUgY29uZmlkZW5jZS1pbnRlcnZhbCBmb3IgYm9vdHN0cmFwcGluZwotPHByZT4tLWJlbmNobWFyay1jb25maWRlbmNlLWludGVydmFsICZsdDtjb25maWRlbmNlLWludGVydmFsJmd0OzwvcHJlPgotCi0+IFtJbnRyb2R1Y2VkXShodHRwczovL2dpdGh1Yi5jb20vY2F0Y2hvcmcvQ2F0Y2gyL2lzc3Vlcy8xNjE2KSBpbiBDYXRjaCAyLjkuMC4KLQotVGhlIGNvbmZpZGVuY2UtaW50ZXJ2YWwgaXMgdXNlZCBmb3Igc3RhdGlzdGljYWwgYm9vdHN0cmFwcGluZyBvbiB0aGUgc2FtcGxlcyB0bwotY2FsY3VsYXRlIHRoZSB1cHBlciBhbmQgbG93ZXIgYm91bmRzIG9mIG1lYW4gYW5kIHN0YW5kYXJkIGRldmlhdGlvbi4KLU11c3QgYmUgYmV0d2VlbiAwIGFuZCAxIGFuZCBkZWZhdWx0cyB0byAwLjk1LgotCi08YSBpZD0iYmVuY2htYXJrLW5vLWFuYWx5c2lzIj48L2E+Ci0jIyBEaXNhYmxlIHN0YXRpc3RpY2FsIGFuYWx5c2lzIG9mIGNvbGxlY3RlZCBiZW5jaG1hcmsgc2FtcGxlcwotPHByZT4tLWJlbmNobWFyay1uby1hbmFseXNpczwvcHJlPgotCi0+IFtJbnRyb2R1Y2VkXShodHRwczovL2dpdGh1Yi5jb20vY2F0Y2hvcmcvQ2F0Y2gyL2lzc3Vlcy8xNjE2KSBpbiBDYXRjaCAyLjkuMC4KLQotV2hlbiB0aGlzIGZsYWcgaXMgc3BlY2lmaWVkIG5vIGJvb3RzdHJhcHBpbmcgb3IgYW55IG90aGVyIHN0YXRpc3RpY2FsIGFuYWx5c2lzIGlzIHBlcmZvcm1lZC4KLUluc3RlYWQgdGhlIHVzZXIgY29kZSBpcyBvbmx5IG1lYXN1cmVkIGFuZCB0aGUgcGxhaW4gbWVhbiBmcm9tIHRoZSBzYW1wbGVzIGlzIHJlcG9ydGVkLgotCi08YSBpZD0iYmVuY2htYXJrLXdhcm11cC10aW1lIj48L2E+Ci0jIyBTcGVjaWZ5IHRoZSBhbW91bnQgb2YgdGltZSBpbiBtaWxsaXNlY29uZHMgc3BlbnQgb24gd2FybWluZyB1cCBlYWNoIHRlc3QKLTxwcmU+LS1iZW5jaG1hcmstd2FybXVwLXRpbWU8L3ByZT4KLQotPiBbSW50cm9kdWNlZF0oaHR0cHM6Ly9naXRodWIuY29tL2NhdGNob3JnL0NhdGNoMi9wdWxsLzE4NDQpIGluIENhdGNoIDIuMTEuMi4KLQotQ29uZmlndXJlIHRoZSBhbW91bnQgb2YgdGltZSBzcGVudCB3YXJtaW5nIHVwIGVhY2ggdGVzdC4KK1doZW4gcnVubmluZyBiZW5jaG1hcmtzIHRoZSBjbG9jayByZXNvbHV0aW9uIGlzIGVzdGltYXRlZC4gQmVuY2htYXJrcyBhcmUgdGhlbiBydW4gZm9yIGV4cG9uZW50aWFsbHkgaW5jcmVhc2luZworbnVtYmVycyBvZiBpdGVyYXRpb25zIHVudGlsIHNvbWUgbXVsdGlwbGUgb2YgdGhlIGVzdGltYXRlZCByZXNvbHV0aW9uIGlzIGV4Y2VlZC4gQnkgZGVmYXVsdCB0aGF0IG11bHRpcGxlIGlzIDEwMCwgYnV0IAoraXQgY2FuIGJlIG92ZXJyaWRkZW4gaGVyZS4KIAogPGEgaWQ9InVzYWdlIj48L2E+CiAjIyBVc2FnZQpkaWZmIC0tZ2l0IGEvZG9jcy9jb21tZXJjaWFsLXVzZXJzLm1kIGIvZG9jcy9jb21tZXJjaWFsLXVzZXJzLm1kCmluZGV4IDdkMmU4N2QuLjRmOThmNzUgMTAwNjQ0Ci0tLSBhL2RvY3MvY29tbWVyY2lhbC11c2Vycy5tZAorKysgYi9kb2NzL2NvbW1lcmNpYWwtdXNlcnMubWQKQEAgLTE3LDYgKzE3LDMgQEAKICAtIE5BU0EKICAtIFtJbnNjb3BpeCBJbmMuXShodHRwczovL3d3dy5pbnNjb3BpeC5jb20vKQogIC0gW01ha2ltb10oaHR0cHM6Ly9tYWtpbW8ucGwvKQotIC0gW1VYM0RdKGh0dHBzOi8vdXgzZC5pbykKLSAtIFtLaW5nXShodHRwczovL2tpbmcuY29tKQotIApkaWZmIC0tZ2l0IGEvZG9jcy9jb25maWd1cmF0aW9uLm1kIGIvZG9jcy9jb25maWd1cmF0aW9uLm1kCmluZGV4IDk0MDM1NmEuLmMwMWQ3ZjUgMTAwNjQ0Ci0tLSBhL2RvY3MvY29uZmlndXJhdGlvbi5tZAorKysgYi9kb2NzL2NvbmZpZ3VyYXRpb24ubWQKQEAgLTE2LDcgKzE2LDYgQEAKIFtXaW5kb3dzIGhlYWRlciBjbHV0dGVyXSgjd2luZG93cy1oZWFkZXItY2x1dHRlcik8YnI+CiBbRW5hYmxpbmcgc3RyaW5naWZpY2F0aW9uXSgjZW5hYmxpbmctc3RyaW5naWZpY2F0aW9uKTxicj4KIFtEaXNhYmxpbmcgZXhjZXB0aW9uc10oI2Rpc2FibGluZy1leGNlcHRpb25zKTxicj4KLVtPdmVycmlkaW5nIENhdGNoJ3MgZGVidWcgYnJlYWsgKGAtYmApXSgjb3ZlcnJpZGluZy1jYXRjaHMtZGVidWctYnJlYWstLWIpPGJyPgogCiBDYXRjaCBpcyBkZXNpZ25lZCB0byAianVzdCB3b3JrIiBhcyBtdWNoIGFzIHBvc3NpYmxlLiBGb3IgbW9zdCBwZW9wbGUgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBuZWVkZWQgaXMgdGVsbGluZyBDYXRjaCB3aGljaCBzb3VyY2UgZmlsZSBzaG91bGQgaG9zdCBhbGwgdGhlIGltcGxlbWVudGF0aW9uIGNvZGUgKGBgYENBVENIX0NPTkZJR19NQUlOYGBgKS4KIApAQCAtMTI4LDEyICsxMjcsOCBAQAogIyMgQysrMTcgdG9nZ2xlcwogCiAgICAgQ0FUQ0hfQ09ORklHX0NQUDE3X1VOQ0FVR0hUX0VYQ0VQVElPTlMgIC8vIFVzZSBzdGQ6OnVuY2F1Z2h0X2V4Y2VwdGlvbnMgaW5zdGVhZCBvZiBzdGQ6OnVuY2F1Z2h0X2V4Y2VwdGlvbgotICAgIENBVENIX0NPTkZJR19DUFAxN19TVFJJTkdfVklFVyAgICAgICAgICAvLyBPdmVycmlkZSBzdGQ6OnN0cmluZ192aWV3IHN1cHBvcnQgZGV0ZWN0aW9uKENhdGNoIHByb3ZpZGVzIGEgU3RyaW5nTWFrZXIgc3BlY2lhbGl6YXRpb24gYnkgZGVmYXVsdCkKLSAgICBDQVRDSF9DT05GSUdfQ1BQMTdfVkFSSUFOVCAgICAgICAgICAgICAgLy8gT3ZlcnJpZGUgc3RkOjp2YXJpYW50IHN1cHBvcnQgZGV0ZWN0aW9uIChjaGVja2VkIGJ5IENBVENIX0NPTkZJR19FTkFCTEVfVkFSSUFOVF9TVFJJTkdNQUtFUikKLSAgICBDQVRDSF9DT05GSUdfQ1BQMTdfT1BUSU9OQUwgICAgICAgICAgICAgLy8gT3ZlcnJpZGUgc3RkOjpvcHRpb25hbCBzdXBwb3J0IGRldGVjdGlvbiAoY2hlY2tlZCBieSBDQVRDSF9DT05GSUdfRU5BQkxFX09QVElPTkFMX1NUUklOR01BS0VSKQotICAgIENBVENIX0NPTkZJR19DUFAxN19CWVRFICAgICAgICAgICAgICAgICAvLyBPdmVycmlkZSBzdGQ6OmJ5dGUgc3VwcG9ydCBkZXRlY3Rpb24gKENhdGNoIHByb3ZpZGVzIGEgU3RyaW5nTWFrZXIgc3BlY2lhbGl6YXRpb24gYnkgZGVmYXVsdCkKLQotPiBgQ0FUQ0hfQ09ORklHX0NQUDE3X1NUUklOR19WSUVXYCB3YXMgW2ludHJvZHVjZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jYXRjaG9yZy9DYXRjaDIvaXNzdWVzLzEzNzYpIGluIENhdGNoIDIuNC4xLgorICAgIENBVENIX0NPTkZJR19DUFAxN19TVFJJTkdfVklFVyAgICAgICAgICAvLyBQcm92aWRlIFN0cmluZ01ha2VyIHNwZWNpYWxpemF0aW9uIGZvciBzdGQ6OnN0cmluZ192aWV3CisgICAgQ0FUQ0hfQ09ORklHX0NQUDE3X1ZBUklBTlQgICAgICAgICAgICAgIC8vIE92ZXJyaWRlIEMrKzE3IGRldGVjdGlvbiBmb3IgQ0FUQ0hfQ09ORklHX0VOQUJMRV9WQVJJQU5UX1NUUklOR01BS0VSCiAKIENhdGNoIGNvbnRhaW5zIGJhc2ljIGNvbXBpbGVyL3N0YW5kYXJkIGRldGVjdGlvbiBhbmQgYXR0ZW1wdHMgdG8gdXNlCiBzb21lIEMrKzE3IGZlYXR1cmVzIHdoZW5ldmVyIGFwcHJvcHJpYXRlLiBUaGlzIGF1dG9tYXRpYyBkZXRlY3Rpb24KQEAgLTE1NCwxMiArMTQ5LDYgQEAKICAgICBDQVRDSF9DT05GSUdfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgLy8gRGlzYWJsZXMgYXNzZXJ0aW9ucyBhbmQgdGVzdCBjYXNlIHJlZ2lzdHJhdGlvbgogICAgIENBVENIX0NPTkZJR19XQ0hBUiAgICAgICAgICAgICAgICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB3Y2hhcnRfdAogICAgIENBVENIX0NPTkZJR19FWFBFUklNRU5UQUxfUkVESVJFQ1QgICAgICAvLyBFbmFibGVzIHRoZSBuZXcgKGV4cGVyaW1lbnRhbCkgd2F5IG9mIGNhcHR1cmluZyBzdGRvdXQvc3RkZXJyCi0gICAgQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcgICAgICAgIC8vIEVuYWJsZXMgdGhlIGludGVncmF0ZWQgYmVuY2htYXJraW5nIGZlYXR1cmVzIChoYXMgYSBzaWduaWZpY2FudCBlZmZlY3Qgb24gY29tcGlsYXRpb24gc3BlZWQpCi0gICAgQ0FUQ0hfQ09ORklHX1VTRV9BU1lOQyAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIHBhcmFsbGVsIHN0YXRpc3RpY2FsIHByb2Nlc3Npbmcgb2Ygc2FtcGxlcyBkdXJpbmcgYmVuY2htYXJraW5nCi0gICAgQ0FUQ0hfQ09ORklHX0FORFJPSURfTE9HV1JJVEUgICAgICAgICAgIC8vIFVzZSBhbmRyb2lkJ3MgbG9nZ2luZyBzeXN0ZW0gZm9yIGRlYnVnIG91dHB1dAotICAgIENBVENIX0NPTkZJR19HTE9CQUxfTkVYVEFGVEVSICAgICAgICAgICAvLyBVc2UgbmV4dGFmdGVyeyxmLGx9IGluc3RlYWQgb2Ygc3RkOjpuZXh0YWZ0ZXIKLQotPiBbYENBVENIX0NPTkZJR19BTkRST0lEX0xPR1dSSVRFYF0oaHR0cHM6Ly9naXRodWIuY29tL2NhdGNob3JnL0NhdGNoMi9pc3N1ZXMvMTc0MykgYW5kIFtgQ0FUQ0hfQ09ORklHX0dMT0JBTF9ORVhUQUZURVJgXShodHRwczovL2dpdGh1Yi5jb20vY2F0Y2hvcmcvQ2F0Y2gyL3B1bGwvMTczOSkgd2VyZSBpbnRyb2R1Y2VkIGluIENhdGNoIDIuMTAuMAogCiBDdXJyZW50bHkgQ2F0Y2ggZW5hYmxlcyBgQ0FUQ0hfQ09ORklHX1dJTkRPV1NfU0VIYCBvbmx5IHdoZW4gY29tcGlsZWQgd2l0aCBNU1ZDLCBiZWNhdXNlIHNvbWUgdmVyc2lvbnMgb2YgTWluR1cgZG8gbm90IGhhdmUgdGhlIG5lY2Vzc2FyeSBXaW4zMiBBUEkgc3VwcG9ydC4KIApAQCAtMjE4LDE0ICsyMDcsOSBAQAogICAgIENBVENIX0NPTkZJR19FTkFCTEVfT1BUSU9OQUxfU1RSSU5HTUFLRVIgLy8gUHJvdmlkZSBTdHJpbmdNYWtlciBzcGVjaWFsaXphdGlvbiBmb3Igc3RkOjpvcHRpb25hbCAob24gQysrMTcpCiAgICAgQ0FUQ0hfQ09ORklHX0VOQUJMRV9BTExfU1RSSU5HTUFLRVJTICAgICAvLyBEZWZpbmVzIGFsbCBvZiB0aGUgYWJvdmUKIAotPiBgQ0FUQ0hfQ09ORklHX0VOQUJMRV9WQVJJQU5UX1NUUklOR01BS0VSYCB3YXMgW2ludHJvZHVjZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jYXRjaG9yZy9DYXRjaDIvaXNzdWVzLzEzODApIGluIENhdGNoIDIuNC4xLgotCi0+IGBDQVRDSF9DT05GSUdfRU5BQkxFX09QVElPTkFMX1NUUklOR01BS0VSYCB3YXMgW2ludHJvZHVjZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jYXRjaG9yZy9DYXRjaDIvaXNzdWVzLzE1MTApIGluIENhdGNoIDIuNi4wLgogCiAjIyBEaXNhYmxpbmcgZXhjZXB0aW9ucwogCi0+IEludHJvZHVjZWQgaW4gQ2F0Y2ggMi40LjAuCi0KIEJ5IGRlZmF1bHQsIENhdGNoMiB1c2VzIGV4Y2VwdGlvbnMgdG8gc2lnbmFsIGVycm9ycyBhbmQgdG8gYWJvcnQgdGVzdHMKIHdoZW4gYW4gYXNzZXJ0aW9uIGZyb20gdGhlIGBSRVFVSVJFYCBmYW1pbHkgb2YgYXNzZXJ0aW9ucyBmYWlscy4gV2UgYWxzbwogcHJvdmlkZSBhbiBleHBlcmltZW50YWwgc3VwcG9ydCBmb3IgZGlzYWJsaW5nIGV4Y2VwdGlvbnMuIENhdGNoMiBzaG91bGQKQEAgLTI1OCwxOCArMjQyLDYgQEAKIH0KIGBgYAogCi0jIyBPdmVycmlkaW5nIENhdGNoJ3MgZGVidWcgYnJlYWsgKGAtYmApCi0KLT4gW0ludHJvZHVjZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jYXRjaG9yZy9DYXRjaDIvcHVsbC8xODQ2KSBpbiBDYXRjaCAyLjExLjIuCi0KLVlvdSBjYW4gb3ZlcnJpZGUgQ2F0Y2gyJ3MgYnJlYWstaW50by1kZWJ1Z2dlciBjb2RlIGJ5IGRlZmluaW5nIHRoZQotYENBVENIX0JSRUFLX0lOVE9fREVCVUdHRVIoKWAgbWFjcm8uIFRoaXMgY2FuIGJlIHVzZWQgaWYgZS5nLiBDYXRjaDIgZG9lcwotbm90IGtub3cgeW91ciBwbGF0Zm9ybSwgb3IgeW91ciBwbGF0Zm9ybSBpcyBtaXNkZXRlY3RlZC4KLQotVGhlIG1hY3JvIHdpbGwgYmUgdXNlZCBhcyBpcywgdGhhdCBpcywgYENBVENIX0JSRUFLX0lOVE9fREVCVUdHRVIoKTtgCi1tdXN0IGNvbXBpbGUgYW5kIG11c3QgYnJlYWsgaW50byBkZWJ1Z2dlci4KLQotCiAtLS0KIAogW0hvbWVdKFJlYWRtZS5tZCN0b3ApCmRpZmYgLS1naXQgYS9kb2NzL2NvbnRyaWJ1dGluZy5tZCBiL2RvY3MvY29udHJpYnV0aW5nLm1kCmluZGV4IDU0MjliZjkuLmI5NWVkZjggMTAwNjQ0Ci0tLSBhL2RvY3MvY29udHJpYnV0aW5nLm1kCisrKyBiL2RvY3MvY29udHJpYnV0aW5nLm1kCkBAIC0xLDEzICsxLDYgQEAKIDxhIGlkPSJ0b3AiPjwvYT4KICMgQ29udHJpYnV0aW5nIHRvIENhdGNoCiAKLSoqQ29udGVudHMqKjxicj4KLVtCcmFuY2hlc10oI2JyYW5jaGVzKTxicj4KLVtEaXJlY3Rvcnkgc3RydWN0dXJlXSgjZGlyZWN0b3J5LXN0cnVjdHVyZSk8YnI+Ci1bVGVzdGluZyB5b3VyIGNoYW5nZXNdKCN0ZXN0aW5nLXlvdXItY2hhbmdlcyk8YnI+Ci1bRG9jdW1lbnRpbmcgeW91ciBjb2RlXSgjZG9jdW1lbnRpbmcteW91ci1jb2RlKTxicj4KLVtDb2RlIGNvbnN0cnVjdHMgdG8gd2F0Y2ggb3V0IGZvcl0oI2NvZGUtY29uc3RydWN0cy10by13YXRjaC1vdXQtZm9yKTxicj4KLQogU28geW91IHdhbnQgdG8gY29udHJpYnV0ZSBzb21ldGhpbmcgdG8gQ2F0Y2g/IFRoYXQncyBncmVhdCEgV2hldGhlciBpdCdzIGEgYnVnIGZpeCwgYSBuZXcgZmVhdHVyZSwgc3VwcG9ydCBmb3IKIGFkZGl0aW9uYWwgY29tcGlsZXJzIC0gb3IganVzdCBhIGZpeCB0byB0aGUgZG9jdW1lbnRhdGlvbiAtIGFsbCBjb250cmlidXRpb25zIGFyZSB2ZXJ5IHdlbGNvbWUgYW5kIHZlcnkgbXVjaCBhcHByZWNpYXRlZC4KIE9mIGNvdXJzZSBzbyBhcmUgYnVnIHJlcG9ydHMgYW5kIG90aGVyIGNvbW1lbnRzIGFuZCBxdWVzdGlvbnMuCkBAIC03MCwxMCArNjMsNiBAQAogJCBjZCBkZWJ1Zy1idWlsZAogJCBjdGVzdCAtaiAyIC0tb3V0cHV0LW9uLWZhaWx1cmUKIGBgYAotX19Ob3RlOl9fIFdoZW4gcnVubmluZyB5b3VyIHRlc3RzIHdpdGggbXVsdGktY29uZmlndXJhdGlvbiBnZW5lcmF0b3JzIGxpa2UKLVZpc3VhbCBTdHVkaW8sIHlvdSBtaWdodCBnZXQgZXJyb3JzICJUZXN0IG5vdCBhdmFpbGFibGUgd2l0aG91dCBjb25maWd1cmF0aW9uLiIKLVlvdSB0aGVuIGhhdmUgdG8gcGljayBvbmUgY29uZmlndXJhdGlvbiAoZS5nLiBgIC1DIERlYnVnYCkgaW4gdGhlIGBjdGVzdGAgY2FsbC4KLQogSWYgeW91IGFkZGVkIG5ldyB0ZXN0cywgYXBwcm92YWwgdGVzdHMgYXJlIHZlcnkgbGlrZWx5IHRvIGZhaWwuIElmIHRoZXkKIGRvIG5vdCwgaXQgbWVhbnMgdGhhdCB5b3VyIGNoYW5nZXMgd2VyZW4ndCBydW4gYXMgcGFydCBvZiB0aGVtLiBUaGlzCiBfbWlnaHRfIGJlIGludGVudGlvbmFsLCBidXQgdXN1YWxseSBpcyBub3QuCkBAIC04Niw1OSArNzUsNiBAQAogaW50ZW50aW9uYWwuCiAKIAotIyMgRG9jdW1lbnRpbmcgeW91ciBjb2RlCi0KLUlmIHlvdSBoYXZlIGFkZGVkIG5ldyBmZWF0dXJlIHRvIENhdGNoMiwgaXQgbmVlZHMgZG9jdW1lbnRhdGlvbiwgc28gdGhhdAotb3RoZXIgcGVvcGxlIGNhbiB1c2UgaXQgYXMgd2VsbC4gVGhpcyBzZWN0aW9uIGNvbGxlY3RzIHNvbWUgdGVjaG5pY2FsCi1pbmZvcm1hdGlvbiB0aGF0IHlvdSB3aWxsIG5lZWQgZm9yIHVwZGF0aW5nIENhdGNoMidzIGRvY3VtZW50YXRpb24sIGFuZAotcG9zc2libHkgc29tZSBnZW5lcmljIGFkdmlzZSBhcyB3ZWxsLgotCi1GaXJzdCwgdGhlIHRlY2huaWNhbGl0aWVzOgotCi0qIFdlIGludHJvZHVjZWQgdmVyc2lvbiB0YWdzIHRvIHRoZSBkb2N1bWVudGF0aW9uLCB3aGljaCBzaG93IHVzZXJzIGluCi13aGljaCB2ZXJzaW9uIGEgc3BlY2lmaWMgZmVhdHVyZSB3YXMgaW50cm9kdWNlZC4gVGhpcyBtZWFucyB0aGF0IG5ld2x5Ci13cml0dGVuIGRvY3VtZW50YXRpb24gc2hvdWxkIGJlIHRhZ2dlZCB3aXRoIGEgcGxhY2Vob2xkZXIsIHRoYXQgd2lsbAotYmUgcmVwbGFjZWQgd2l0aCB0aGUgYWN0dWFsIHZlcnNpb24gdXBvbiByZWxlYXNlLiBUaGVyZSBhcmUgMiBzdHlsZXMKLW9mIHBsYWNlaG9sZGVycyB1c2VkIHRocm91Z2ggdGhlIGRvY3VtZW50YXRpb24sIHlvdSBzaG91bGQgcGljayBvbmUgdGhhdAotZml0cyB5b3VyIHRleHQgYmV0dGVyIChpZiBpbiBkb3VidCwgdGFrZSBhIGxvb2sgYXQgdGhlIGV4aXN0aW5nIHZlcnNpb24KLXRhZ3MgZm9yIG90aGVyIGZlYXR1cmVzKS4KLSAgKiBgPiBbSW50cm9kdWNlZF0obGluay10by1pc3N1ZS1vci1QUikgaW4gQ2F0Y2ggWC5ZLlpgIC0gdGhpcwotICBwbGFjZWhvbGRlciBpcyB1c3VhbGx5IHVzZWQgYWZ0ZXIgYSBzZWN0aW9uIGhlYWRpbmcKLSAgKiBgPiBYIChZIGFuZCBaKSB3YXMgW2ludHJvZHVjZWRdKGxpbmstdG8taXNzdWUtb3ItUFIpIGluIENhdGNoIFguWS5aYAotICAtIHRoaXMgcGxhY2Vob2xkZXIgaXMgdXNlZCB3aGVuIHlvdSBuZWVkIHRvIHRhZyBhIHN1YnBhcnQgb2Ygc29tZXRoaW5nLAotICBlLmcuIGxpc3QKLSogQ3Jvc3NsaW5rcyB0byBkaWZmZXJlbnQgcGFnZXMgc2hvdWxkIHRhcmdldCB0aGUgYHRvcGAgYW5jaG9yLCBsaWtlIHRoaXMKLWBbbGluayB0byBjb250cmlidXRpbmddKGNvbnRyaWJ1dGluZy5tZCN0b3ApYC4KLSogSWYgeW91IGhhdmUgaW50cm9kdWNlZCBhIG5ldyBkb2N1bWVudCwgdGhlcmUgaXMgYSBzaW1wbGUgdGVtcGxhdGUgeW91Ci1zaG91bGQgdXNlLiBJdCBwcm92aWRlcyB5b3Ugd2l0aCB0aGUgdG9wIGFuY2hvciBtZW50aW9uZWQgYWJvdmUsIGFuZCBhbHNvCi13aXRoIGEgYmFja2xpbmsgdG8gdGhlIHRvcCBvZiB0aGUgZG9jdW1lbnRhdGlvbjoKLWBgYG1hcmtkb3duCi08YSBpZD0idG9wIj48L2E+Ci0jIENvb2wgZmVhdHVyZQotCi1UZXh0IHRoYXQgZXhwbGFpbnMgaG93IHRvIHVzZSB0aGUgY29vbCBmZWF0dXJlLgotCi0KLS0tLQotCi1bSG9tZV0oUmVhZG1lLm1kI3RvcCkKLWBgYAotKiBGb3IgcGFnZXMgd2l0aCBtb3JlIHRoYW4gNCBzdWJoZWFkaW5ncywgd2UgcHJvdmlkZSBhIHRhYmxlIG9mIGNvbnRlbnRzCi0oVG9DKSBhdCB0aGUgdG9wIG9mIHRoZSBwYWdlLiBCZWNhdXNlIEdpdEh1YiBtYXJrZG93biBkb2VzIG5vdCBzdXBwb3J0Ci1hdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBUb0MsIGl0IGhhcyB0byBiZSBoYW5kbGVkIHNlbWktbWFudWFsbHkuIFRodXMsCi1pZiB5b3UndmUgYWRkZWQgYSBuZXcgc3ViaGVhZGluZyB0byBzb21lIHBhZ2UsIHlvdSBzaG91bGQgYWRkIGl0IHRvIHRoZQotVG9DLiBUaGlzIGNhbiBiZSBkb25lIGVpdGhlciBtYW51YWxseSwgb3IgYnkgcnVubmluZyB0aGUKLWB1cGRhdGVEb2N1bWVudFRvQy5weWAgc2NyaXB0IGluIHRoZSBgc2NyaXB0cy9gIGZvbGRlci4KLQotCi1Ob3csIGZvciB0aGUgZ2VuZXJpYyB0aXBzOgotICAqIFVzYWdlIGV4YW1wbGVzIGFyZSBnb29kCi0gICogRG9uJ3QgYmUgYWZyYWlkIHRvIGludHJvZHVjZSBuZXcgcGFnZXMKLSAgKiBUcnkgdG8gYmUgcmVhc29uYWJseSBjb25zaXN0ZW50IHdpdGggdGhlIHN1cnJvdW5kaW5nIGRvY3VtZW50YXRpb24KLQotCi0KLQogIyMgQ29kZSBjb25zdHJ1Y3RzIHRvIHdhdGNoIG91dCBmb3IKIAogVGhpcyBzZWN0aW9uIGlzIGEgKHNhZGx5IGluY29tcGxldGUpIGxpc3Rpbmcgb2YgdmFyaW91cyBjb25zdHJ1Y3RzIHRoYXQKZGlmZiAtLWdpdCBhL2RvY3MvZGVwcmVjYXRpb25zLm1kIGIvZG9jcy9kZXByZWNhdGlvbnMubWQKaW5kZXggMzkxOTRlZC4uMDQ4OWUxZiAxMDA2NDQKLS0tIGEvZG9jcy9kZXByZWNhdGlvbnMubWQKKysrIGIvZG9jcy9kZXByZWNhdGlvbnMubWQKQEAgLTM5LDM5ICszOSw2IEBACiBCZWNhdXNlIGl0IGlzbid0IGFjdHVhbGx5IHVzZWQgbm9yIGRvY3VtZW50ZWQsIGFuZCBicmluZ3MgY29tcGxpY2F0aW9ucwogdG8gQ2F0Y2gyJ3MgaW50ZXJuYWxzLCBkZXNjcmlwdGlvbiBzdXBwb3J0IHdpbGwgYmUgcmVtb3ZlZC4KIAotIyMjIFNvdXJjZUxpbmVJbmZvOjplbXB0eSgpCi0KLVRoZXJlIHNob3VsZCBiZSBubyByZWFzb24gdG8gZXZlciBoYXZlIGFuIGVtcHR5IGBTb3VyY2VMaW5lSW5mb2AsIHNvIHRoZQotbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZC4KLQotCi0jIyMgQ29tcG9zaW5nIGx2YWx1ZXMgb2YgYWxyZWFkeSBjb21wb3NlZCBtYXRjaGVycwotCi1CZWNhdXNlIGEgc2lnbmlmaWNhbnQgYnVnIGluIHRoaXMgdXNlIGNhc2UgaGFzIHBlcnNpc3RlZCBmb3IgMisgeWVhcnMKLXdpdGhvdXQgYSBidWcgcmVwb3J0LCBhbmQgdG8gc2ltcGxpZnkgdGhlIGltcGxlbWVudGF0aW9uLCBjb2RlIHRoYXQKLWNvbXBvc2VzIGx2YWx1ZXMgb2YgY29tcG9zZWQgbWF0Y2hlcnMgd2lsbCBub3QgY29tcGlsZS4gVGhhdCBpcywKLXRoaXMgY29kZSB3aWxsIG5vIGxvbmdlciB3b3JrOgotCi1gYGBjcHAKLSAgICAgICAgICAgIGF1dG8gbTEgPSBDb250YWlucygic3RyaW5nIik7Ci0gICAgICAgICAgICBhdXRvIG0yID0gQ29udGFpbnMoInJhbmRvbSIpOwotICAgICAgICAgICAgYXV0byBjb21wb3NlZDEgPSBtMSB8fCBtMjsKLSAgICAgICAgICAgIGF1dG8gbTMgPSBDb250YWlucygiZGlmZmVyZW50Iik7Ci0gICAgICAgICAgICBhdXRvIGNvbXBvc2VkMiA9IGNvbXBvc2VkMSB8fCBtMzsKLSAgICAgICAgICAgIFJFUVVJUkVfVEhBVChmb28oKSwgIWNvbXBvc2VkMSk7Ci0gICAgICAgICAgICBSRVFVSVJFX1RIQVQoZm9vKCksIGNvbXBvc2VkMik7Ci1gYGAKLQotSW5zdGVhZCB5b3Ugd2lsbCBoYXZlIHRvIHdyaXRlIHRoaXM6Ci0KLWBgYGNwcAotICAgICAgICAgICAgYXV0byBtMSA9IENvbnRhaW5zKCJzdHJpbmciKTsKLSAgICAgICAgICAgIGF1dG8gbTIgPSBDb250YWlucygicmFuZG9tIik7Ci0gICAgICAgICAgICBhdXRvIG0zID0gQ29udGFpbnMoImRpZmZlcmVudCIpOwotICAgICAgICAgICAgUkVRVUlSRV9USEFUKGZvbygpLCAhKG0xIHx8IG0yKSk7Ci0gICAgICAgICAgICBSRVFVSVJFX1RIQVQoZm9vKCksIG0xIHx8IG0yIHx8IG0zKTsKLWBgYAotCiAKICMjIFBsYW5uZWQgY2hhbmdlcwogCkBAIC0xMjEsMTcgKzg4LDYgQEAKIFRoZSBBUEkgZm9yIENhdGNoMidzIGNvbnNvbGUgY29sb3VyIHdpbGwgYmUgY2hhbmdlZCB0byB0YWtlIGFuIGV4dHJhCiBhcmd1bWVudCwgdGhlIHN0cmVhbSB0byB3aGljaCB0aGUgY29sb3VyIGNvZGUgc2hvdWxkIGJlIGFwcGxpZWQuCiAKLQotIyMjIFR5cGUgZXJhc3VyZSBpbiB0aGUgYFByZWRpY2F0ZU1hdGNoZXJgCi0KLUN1cnJlbnRseSwgdGhlIGBQcmVkaWNhdGVNYXRjaGVyYCB1c2VzIGBzdGQ6OmZ1bmN0aW9uYCBmb3IgdHlwZSBlcmFzdXJlLAotc28gdGhhdCB0eXBlIG9mIHRoZSBtYXRjaGVyIGlzIGFsd2F5cyBgUHJlZGljYXRlTWF0Y2hlcjxUPmAsIHJlZ2FyZGxlc3MKLW9mIHRoZSB0eXBlIG9mIHRoZSBwcmVkaWNhdGUuIEJlY2F1c2Ugb2YgdGhlIGhpZ2ggY29tcGlsYXRpb24gb3ZlcmhlYWQKLW9mIGBzdGQ6OmZ1bmN0aW9uYCwgYW5kIHRoZSBmYWN0IHRoYXQgdGhlIHR5cGUgZXJhc3VyZSBpcyB1c2VkIG9ubHkgcmFyZWx5LAotYFByZWRpY2F0ZU1hdGNoZXJgIHdpbGwgbm8gbG9uZ2VyIGJlIHR5cGUgZXJhc2VkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQsCi10aGUgcHJlZGljYXRlIHR5cGUgd2lsbCBiZSBtYWRlIHBhcnQgb2YgdGhlIFByZWRpY2F0ZU1hdGNoZXIncyB0eXBlLgotCi0KIC0tLQogCiBbSG9tZV0oUmVhZG1lLm1kI3RvcCkKZGlmZiAtLWdpdCBhL2RvY3MvZ2VuZXJhdG9ycy5tZCBiL2RvY3MvZ2VuZXJhdG9ycy5tZAppbmRleCA1NWZmMGJhLi41N2ZkZjQ0IDEwMDY0NAotLS0gYS9kb2NzL2dlbmVyYXRvcnMubWQKKysrIGIvZG9jcy9nZW5lcmF0b3JzLm1kCkBAIC0xLDggKzEsNiBAQAogPGEgaWQ9InRvcCI+PC9hPgogIyBEYXRhIEdlbmVyYXRvcnMKIAotPiBJbnRyb2R1Y2VkIGluIENhdGNoIDIuNi4wLgotCiBEYXRhIGdlbmVyYXRvcnMgKGFsc28ga25vd24gYXMgX2RhdGEgZHJpdmVuL3BhcmFtZXRyaXplZCB0ZXN0IGNhc2VzXykKIGxldCB5b3UgcmV1c2UgdGhlIHNhbWUgc2V0IG9mIGFzc2VydGlvbnMgYWNyb3NzIGRpZmZlcmVudCBpbnB1dCB2YWx1ZXMuCiBJbiBDYXRjaDIsIHRoaXMgbWVhbnMgdGhhdCB0aGV5IHJlc3BlY3QgdGhlIG9yZGVyaW5nIGFuZCBuZXN0aW5nCkBAIC0zNiw4ICszNCw4IEBACiAqIGBHRU5FUkFURWAgbWFjcm8sICB0aGF0IHNlcnZlcyB0byBpbnRlZ3JhdGUgZ2VuZXJhdG9yIGV4cHJlc3Npb24gd2l0aAogYSB0ZXN0IGNhc2UsCiAqIDIgZnVuZGFtZW50YWwgZ2VuZXJhdG9ycwotICAqIGBTaW5nbGVWYWx1ZUdlbmVyYXRvcjxUPmAgLS0gY29udGFpbnMgb25seSBzaW5nbGUgZWxlbWVudAotICAqIGBGaXhlZFZhbHVlc0dlbmVyYXRvcjxUPmAgLS0gY29udGFpbnMgbXVsdGlwbGUgZWxlbWVudHMKKyAgKiBgVmFsdWVHZW5lcmF0b3I8VD5gIC0tIGNvbnRhaW5zIG9ubHkgc2luZ2xlIGVsZW1lbnQKKyAgKiBgVmFsdWVzR2VuZXJhdG9yPFQ+YCAtLSBjb250YWlucyBtdWx0aXBsZSBlbGVtZW50cwogKiA1IGdlbmVyaWMgZ2VuZXJhdG9ycyB0aGF0IG1vZGlmeSBvdGhlciBnZW5lcmF0b3JzCiAgICogYEZpbHRlckdlbmVyYXRvcjxULCBQcmVkaWNhdGU+YCAtLSBmaWx0ZXJzIG91dCBlbGVtZW50cyBmcm9tIGEgZ2VuZXJhdG9yCiAgIGZvciB3aGljaCB0aGUgcHJlZGljYXRlIHJldHVybnMgImZhbHNlIgpAQCAtNDYsMjIgKzQ0LDE2IEBACiAgICogYE1hcEdlbmVyYXRvcjxULCBVLCBGdW5jPmAgLS0gcmV0dXJucyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGBGdW5jYAogICBvbiBlbGVtZW50cyBmcm9tIGEgZGlmZmVyZW50IGdlbmVyYXRvcgogICAqIGBDaHVua0dlbmVyYXRvcjxUPmAgLS0gcmV0dXJucyBjaHVua3MgKGluc2lkZSBgc3RkOjp2ZWN0b3JgKSBvZiBuIGVsZW1lbnRzIGZyb20gYSBnZW5lcmF0b3IKLSogNCBzcGVjaWZpYyBwdXJwb3NlIGdlbmVyYXRvcnMKKyogMyBzcGVjaWZpYyBwdXJwb3NlIGdlbmVyYXRvcnMKICAgKiBgUmFuZG9tSW50ZWdlckdlbmVyYXRvcjxJbnRlZ3JhbD5gIC0tIGdlbmVyYXRlcyByYW5kb20gSW50ZWdyYWxzIGZyb20gcmFuZ2UKICAgKiBgUmFuZG9tRmxvYXRHZW5lcmF0b3I8RmxvYXQ+YCAtLSBnZW5lcmF0ZXMgcmFuZG9tIEZsb2F0cyBmcm9tIHJhbmdlCi0gICogYFJhbmdlR2VuZXJhdG9yPFQ+YCAtLSBnZW5lcmF0ZXMgYWxsIHZhbHVlcyBpbnNpZGUgYW4gYXJpdGhtZXRpYyByYW5nZQotICAqIGBJdGVyYXRvckdlbmVyYXRvcjxUPmAgLS0gY29waWVzIGFuZCByZXR1cm5zIHZhbHVlcyBmcm9tIGFuIGl0ZXJhdG9yIHJhbmdlCi0KLT4gYENodW5rR2VuZXJhdG9yPFQ+YCwgYFJhbmRvbUludGVnZXJHZW5lcmF0b3I8SW50ZWdyYWw+YCwgYFJhbmRvbUZsb2F0R2VuZXJhdG9yPEZsb2F0PmAgYW5kIGBSYW5nZUdlbmVyYXRvcjxUPmAgd2VyZSBpbnRyb2R1Y2VkIGluIENhdGNoIDIuNy4wLgotCi0+IGBJdGVyYXRvckdlbmVyYXRvcjxUPmAgd2FzIGludHJvZHVjZWQgaW4gQ2F0Y2ggMi4xMC4wLgorICAqIGBSYW5nZUdlbmVyYXRvcjxUPmAgLS0gZ2VuZXJhdGVzIGFsbCB2YWx1ZXMgaW5zaWRlIGEgc3BlY2lmaWMgcmFuZ2UKIAogVGhlIGdlbmVyYXRvcnMgYWxzbyBoYXZlIGFzc29jaWF0ZWQgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGluZmVyIHRoZWlyCiB0eXBlLCBtYWtpbmcgdGhlaXIgdXNhZ2UgbXVjaCBuaWNlci4gVGhlc2UgYXJlCiAKLSogYHZhbHVlKFQmJilgIGZvciBgU2luZ2xlVmFsdWVHZW5lcmF0b3I8VD5gCi0qIGB2YWx1ZXMoc3RkOjppbml0aWFsaXplcl9saXN0PFQ+KWAgZm9yIGBGaXhlZFZhbHVlc0dlbmVyYXRvcjxUPmAKLSogYHRhYmxlPFRzLi4uPihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjp0dXBsZTxUcy4uLj4+KWAgZm9yIGBGaXhlZFZhbHVlc0dlbmVyYXRvcjxzdGQ6OnR1cGxlPFRzLi4uPj5gCisqIGB2YWx1ZShUJiYpYCBmb3IgYFZhbHVlR2VuZXJhdG9yPFQ+YAorKiBgdmFsdWVzKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPilgIGZvciBgVmFsdWVzR2VuZXJhdG9yPFQ+YAogKiBgZmlsdGVyKHByZWRpY2F0ZSwgR2VuZXJhdG9yV3JhcHBlcjxUPiYmKWAgZm9yIGBGaWx0ZXJHZW5lcmF0b3I8VCwgUHJlZGljYXRlPmAKICogYHRha2UoY291bnQsIEdlbmVyYXRvcldyYXBwZXI8VD4mJilgIGZvciBgVGFrZUdlbmVyYXRvcjxUPmAKICogYHJlcGVhdChyZXBlYXRzLCBHZW5lcmF0b3JXcmFwcGVyPFQ+JiYpYCBmb3IgYFJlcGVhdEdlbmVyYXRvcjxUPmAKQEAgLTY5LDE2ICs2MSw5IEBACiAqIGBtYXA8VD4oZnVuYywgR2VuZXJhdG9yV3JhcHBlcjxVPiYmKWAgZm9yIGBNYXBHZW5lcmF0b3I8VCwgVSwgRnVuYz5gIChtYXAgYFVgIHRvIGBUYCkKICogYGNodW5rKGNodW5rLXNpemUsIEdlbmVyYXRvcldyYXBwZXI8VD4mJilgIGZvciBgQ2h1bmtHZW5lcmF0b3I8VD5gCiAqIGByYW5kb20oSW50ZWdlck9yRmxvYXQgYSwgSW50ZWdlck9yRmxvYXQgYilgIGZvciBgUmFuZG9tSW50ZWdlckdlbmVyYXRvcmAgb3IgYFJhbmRvbUZsb2F0R2VuZXJhdG9yYAotKiBgcmFuZ2UoQXJpdGhlbXRpYyBzdGFydCwgQXJpdGhtZXRpYyBlbmQpYCBmb3IgYFJhbmdlR2VuZXJhdG9yPEFyaXRobWV0aWM+YCB3aXRoIGEgc3RlcCBzaXplIG9mIGAxYAotKiBgcmFuZ2UoQXJpdGhtZXRpYyBzdGFydCwgQXJpdGhtZXRpYyBlbmQsIEFyaXRobWV0aWMgc3RlcClgIGZvciBgUmFuZ2VHZW5lcmF0b3I8QXJpdGhtZXRpYz5gIHdpdGggYSBjdXN0b20gc3RlcCBzaXplCi0qIGBmcm9tX3JhbmdlKElucHV0SXRlcmF0b3IgZnJvbSwgSW5wdXRJdGVyYXRvciB0bylgIGZvciBgSXRlcmF0b3JHZW5lcmF0b3I8VD5gCi0qIGBmcm9tX3JhbmdlKENvbnRhaW5lciBjb25zdCYpYCBmb3IgYEl0ZXJhdG9yR2VuZXJhdG9yPFQ+YAorKiBgcmFuZ2Uoc3RhcnQsIGVuZClgIGZvciBgUmFuZ2VHZW5lcmF0b3I8VD5gIHdpdGggYSBzdGVwIHNpemUgb2YgYDFgCisqIGByYW5nZShzdGFydCwgZW5kLCBzdGVwKWAgZm9yIGBSYW5nZUdlbmVyYXRvcjxUPmAgd2l0aCBhIGN1c3RvbSBzdGVwIHNpemUKIAotPiBgY2h1bmsoKWAsIGByYW5kb20oKWAgYW5kIGJvdGggYHJhbmdlKClgIGZ1bmN0aW9ucyB3ZXJlIGludHJvZHVjZWQgaW4gQ2F0Y2ggMi43LjAuCi0KLT4gYGZyb21fcmFuZ2VgIGhhcyBiZWVuIGludHJvZHVjZWQgaW4gQ2F0Y2ggMi4xMC4wCi0KLT4gYHJhbmdlKClgIGZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzIGhhcyBiZWVuIGludHJvZHVjZWQgaW4gQ2F0Y2ggMi4xMS4wCiAKIEFuZCBjYW4gYmUgdXNlZCBhcyBzaG93biBpbiB0aGUgZXhhbXBsZSBiZWxvdyB0byBjcmVhdGUgYSBnZW5lcmF0b3IKIHRoYXQgcmV0dXJucyAxMDAgb2RkIHJhbmRvbSBudW1iZXI6CkBAIC05OSw3ICs4NCw3IEBACiBvbmUgbW9yZSBwdXJwb3NlLCBhbmQgdGhhdCBpcyB0byBwcm92aWRlIHNpbXBsZSB3YXkgb2YgZ2VuZXJhdGluZyB0cml2aWFsCiBnZW5lcmF0b3JzLCBhcyBzZWVuIGluIHRoZSBmaXJzdCBleGFtcGxlIG9uIHRoaXMgcGFnZSwgd2hlcmUgd2UgdXNlZCBpdAogYXMgYGF1dG8gaSA9IEdFTkVSQVRFKDEsIDIsIDMpO2AuIFRoaXMgdXNhZ2UgY29udmVydGVkIGVhY2ggb2YgdGhlIHRocmVlCi1saXRlcmFscyBpbnRvIGEgc2luZ2xlIGBTaW5nbGVWYWx1ZUdlbmVyYXRvcjxpbnQ+YCBhbmQgdGhlbiBwbGFjZWQgdGhlbSBhbGwgaW4KK2xpdGVyYWxzIGludG8gYSBzaW5nbGUgYFZhbHVlR2VuZXJhdG9yPGludD5gIGFuZCB0aGVuIHBsYWNlZCB0aGVtIGFsbCBpbgogYSBzcGVjaWFsIGdlbmVyYXRvciB0aGF0IGNvbmNhdGVuYXRlcyBvdGhlciBnZW5lcmF0b3JzLiBJdCBjYW4gYWxzbyBiZQogdXNlZCB3aXRoIG90aGVyIGdlbmVyYXRvcnMgYXMgYXJndW1lbnRzLCBzdWNoIGFzIGBhdXRvIGkgPSBHRU5FUkFURSgwLCAyLAogdGFrZSgxMDAsIHJhbmRvbSgzMDAsIDMwMDApKSk7YC4gVGhpcyBpcyB1c2VmdWwgZS5nLiBpZiB5b3Uga25vdyB0aGF0CkBAIC0xMTEsOCArOTYsNiBAQAogdmFyaWFibGVzIGluc2lkZSB0aGUgZ2VuZXJhdG9yIGV4cHJlc3Npb24sIG1ha2Ugc3VyZSB5b3UgdGhvdWdodCB0aHJvdWdoCiB0aGUgbGlmZXRpbWUgaW1wbGljYXRpb25zIGFuZCB1c2UgYEdFTkVSQVRFX0NPUFlgIG9yIGBHRU5FUkFURV9SRUZgLioqCiAKLT4gYEdFTkVSQVRFX0NPUFlgIGFuZCBgR0VORVJBVEVfUkVGYCB3ZXJlIGludHJvZHVjZWQgaW4gQ2F0Y2ggMi43LjEuCi0KIFlvdSBjYW4gYWxzbyBvdmVycmlkZSB0aGUgaW5mZXJyZWQgdHlwZSBieSB1c2luZyBgYXM8dHlwZT5gIGFzIHRoZSBmaXJzdAogYXJndW1lbnQgdG8gdGhlIG1hY3JvLiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiBkZWFsaW5nIHdpdGggc3RyaW5nIGxpdGVyYWxzLAogaWYgeW91IHdhbnQgdGhlbSB0byBjb21lIG91dCBhcyBgc3RkOjpzdHJpbmdgOgpkaWZmIC0tZ2l0IGEvZG9jcy9saW1pdGF0aW9ucy5tZCBiL2RvY3MvbGltaXRhdGlvbnMubWQKaW5kZXggNjU0ODNiOC4uYjk1Y2Q4NyAxMDA2NDQKLS0tIGEvZG9jcy9saW1pdGF0aW9ucy5tZAorKysgYi9kb2NzL2xpbWl0YXRpb25zLm1kCkBAIC00NSwxNSArNDUsNiBAQAogbW9yZSBzZWN0aW9ucyBpbiB0aGF0IHRlc3QgY2FzZSBhbmQgbXVzdCBydW4gdGhlIHRlc3QgY2FzZSBhZ2Fpbi4KIAogCi0jIyMgTWluR1cvQ3lnV2luIGNvbXBpbGF0aW9uIChsaW5raW5nKSBpcyBleHRyZW1lbHkgc2xvdwotCi1Db21waWxpbmcgQ2F0Y2gyIHdpdGggTWluR1cgY2FuIGJlIGV4Y2VlZGluZ2x5IHNsb3csIGVzcGVjaWFsbHkgZHVyaW5nCi10aGUgbGlua2luZyBzdGVwLiBBcyBmYXIgYXMgd2UgY2FuIHRlbGwsIHRoaXMgaXMgY2F1c2VkIGJ5IGRlZmljaWVuY2llcwotaW4gaXRzIGRlZmF1bHQgbGlua2VyLiBJZiB5b3UgY2FuIHRlbGwgTWluR1cgdG8gaW5zdGVhZCB1c2UgbGxkLCB2aWEKLWAtZnVzZS1sZD1sbGRgLCB0aGUgbGluayB0aW1lIHNob3VsZCBkcm9wIGRvd24gdG8gcmVhc29uYWJsZSBsZW5ndGgKLWFnYWluLgotCi0KICMjIEZlYXR1cmVzCiBUaGlzIHNlY3Rpb24gb3V0bGluZXMgc29tZSBtaXNzaW5nIGZlYXR1cmVzLCB3aGF0IGlzIHRoZWlyIHN0YXR1cyBhbmQgdGhlaXIgcG9zc2libGUgd29ya2Fyb3VuZHMuCiAKZGlmZiAtLWdpdCBhL2RvY3MvbG9nZ2luZy5tZCBiL2RvY3MvbG9nZ2luZy5tZAppbmRleCA0NzZiMWUwLi43YjVjNmM0IDEwMDY0NAotLS0gYS9kb2NzL2xvZ2dpbmcubWQKKysrIGIvZG9jcy9sb2dnaW5nLm1kCkBAIC0zMCw4ICszMCw2IEBACiAKICMjIExvZ2dpbmcgd2l0aG91dCBsb2NhbCBzY29wZQogCi0+IFtJbnRyb2R1Y2VkXShodHRwczovL2dpdGh1Yi5jb20vY2F0Y2hvcmcvQ2F0Y2gyL2lzc3Vlcy8xNTIyKSBpbiBDYXRjaCAyLjcuMC4KLQogYFVOU0NPUEVEX0lORk9gIGlzIHNpbWlsYXIgdG8gYElORk9gIHdpdGggdHdvIGtleSBkaWZmZXJlbmNlczoKIAogLSBMaWZldGltZSBvZiBhbiB1bnNjb3BlZCBtZXNzYWdlIGlzIG5vdCB0aWVkIHRvIGl0cyBvd24gc2NvcGUuCkBAIC0xMDYsOCArMTA0LDYgQEAKIAogKipVTlNDT1BFRF9JTkZPKCoqIF9tZXNzYWdlIGV4cHJlc3Npb25fICoqKSoqCiAKLT4gW0ludHJvZHVjZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jYXRjaG9yZy9DYXRjaDIvaXNzdWVzLzE1MjIpIGluIENhdGNoIDIuNy4wLgotCiBTaW1pbGFyIHRvIGBJTkZPYCwgYnV0IG1lc3NhZ2VzIGFyZSBub3QgbGltaXRlZCB0byB0aGVpciBvd24gc2NvcGU6IFRoZXkgYXJlIHJlbW92ZWQgZnJvbSB0aGUgYnVmZmVyIGFmdGVyIGVhY2ggYXNzZXJ0aW9uLCBzZWN0aW9uIG9yIHRlc3QgY2FzZSwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgogCiAqKldBUk4oKiogX21lc3NhZ2UgZXhwcmVzc2lvbl8gKiopKioKZGlmZiAtLWdpdCBhL2RvY3MvbWF0Y2hlcnMubWQgYi9kb2NzL21hdGNoZXJzLm1kCmluZGV4IGJkYjdkYWMuLjEzYzdkMGMgMTAwNjQ0Ci0tLSBhL2RvY3MvbWF0Y2hlcnMubWQKKysrIGIvZG9jcy9tYXRjaGVycy5tZApAQCAtMTIsNTcgKzEyLDMxIEBACiB3aGljaCBjb25zaXN0cyBvZiBlaXRoZXIgYSBzaW5nbGUgbWF0Y2hlciBvciBvbmUgb3IgbW9yZSBtYXRjaGVycyBjb21iaW5lZCB1c2luZyBgJiZgLCBgfHxgIG9yIGAhYCBvcGVyYXRvcnMuCiAKIEZvciBleGFtcGxlLCB0byBhc3NlcnQgdGhhdCBhIHN0cmluZyBlbmRzIHdpdGggYSBjZXJ0YWluIHN1YnN0cmluZzoKLQorIAogIGBgYGMrKwogdXNpbmcgQ2F0Y2g6Ok1hdGNoZXJzOjpFbmRzV2l0aDsgLy8gb3IgQ2F0Y2g6OkVuZHNXaXRoCiBzdGQ6OnN0cmluZyBzdHIgPSBnZXRTdHJpbmdGcm9tU29tZXdoZXJlKCk7Ci1SRVFVSVJFX1RIQVQoIHN0ciwgRW5kc1dpdGgoICJhcyBhIHNlcnZpY2UiICkgKTsKLWBgYAorUkVRVUlSRV9USEFUKCBzdHIsIEVuZHNXaXRoKCAiYXMgYSBzZXJ2aWNlIiApICk7IAorIGBgYAogCiBUaGUgbWF0Y2hlciBvYmplY3RzIGNhbiB0YWtlIG11bHRpcGxlIGFyZ3VtZW50cywgYWxsb3dpbmcgbW9yZSBmaW5lIHR1bmluZy4KIFRoZSBidWlsdC1pbiBzdHJpbmcgbWF0Y2hlcnMsIGZvciBleGFtcGxlLCB0YWtlIGEgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZnlpbmcgd2hldGhlciB0aGUgY29tcGFyaXNvbiBpcwogY2FzZSBzZW5zaXRpdmUgb3Igbm90OgogCiBgYGBjKysKLVJFUVVJUkVfVEhBVCggc3RyLCBFbmRzV2l0aCggImFzIGEgc2VydmljZSIsIENhdGNoOjpDYXNlU2Vuc2l0aXZlOjpObyApICk7CitSRVFVSVJFX1RIQVQoIHN0ciwgRW5kc1dpdGgoICJhcyBhIHNlcnZpY2UiLCBDYXRjaDo6Q2FzZVNlbnNpdGl2ZTo6Tm8gKSApOyAKICBgYGAKIAogQW5kIG1hdGNoZXJzIGNhbiBiZSBjb21iaW5lZDoKIAogYGBgYysrCi1SRVFVSVJFX1RIQVQoIHN0ciwKLSAgICBFbmRzV2l0aCggImFzIGEgc2VydmljZSIgKSB8fAotICAgIChTdGFydHNXaXRoKCAiQmlnIGRhdGEiICkgJiYgIUNvbnRhaW5zKCAid2ViIHNjYWxlIiApICkgKTsKK1JFUVVJUkVfVEhBVCggc3RyLCAKKyAgICBFbmRzV2l0aCggImFzIGEgc2VydmljZSIgKSB8fCAKKyAgICAoU3RhcnRzV2l0aCggIkJpZyBkYXRhIiApICYmICFDb250YWlucyggIndlYiBzY2FsZSIgKSApICk7IAogYGBgCiAKLV9UaGUgY29tYmluaW5nIG9wZXJhdG9ycyBkbyBub3QgdGFrZSBvd25lcnNoaXAgb2YgdGhlIG1hdGNoZXIgb2JqZWN0cy4KLVRoaXMgbWVhbnMgdGhhdCBpZiB5b3Ugc3RvcmUgdGhlIGNvbWJpbmVkIG9iamVjdCwgeW91IGhhdmUgdG8gZW5zdXJlIHRoYXQKLXRoZSBtYXRjaGVyIG9iamVjdHMgb3V0bGl2ZSBpdHMgbGFzdCB1c2UuIFdoYXQgdGhpcyBtZWFucyBpcyB0aGF0IGNvZGUKLWxpa2UgdGhpcyBsZWFkcyB0byBhIHVzZS1hZnRlci1mcmVlIGFuZCAoaG9wZWZ1bGx5KSBhIGNyYXNoOl8KLQotYGBgY3BwCi1URVNUX0NBU0UoIkJ1Z3MsIGJ1Z3MsIGJ1Z3MiLCAiW0J1Z10iKXsKLSAgICBzdGQ6OnN0cmluZyBzdHIgPSAiQnVncyBhcyBhIHNlcnZpY2UiOwotCi0gICAgYXV0byBtYXRjaF9leHByZXNzaW9uID0gQ2F0Y2g6OkVuZHNXaXRoKCAiYXMgYSBzZXJ2aWNlIiApIHx8Ci0gICAgICAgIChDYXRjaDo6U3RhcnRzV2l0aCggIkJpZyBkYXRhIiApICYmICFDYXRjaDo6Q29udGFpbnMoICJ3ZWIgc2NhbGUiICkgKTsKLSAgICBSRVFVSVJFX1RIQVQoc3RyLCBtYXRjaF9leHByZXNzaW9uKTsKLX0KLWBgYAotCi0KICMjIEJ1aWx0IGluIG1hdGNoZXJzCi1DYXRjaDIgcHJvdmlkZXMgc29tZSBtYXRjaGVycyBieSBkZWZhdWx0LiBUaGV5IGNhbiBiZSBmb3VuZCBpbiB0aGUKLWBDYXRjaDo6TWF0Y2hlcnM6OmZvb2AgbmFtZXNwYWNlIGFuZCBhcmUgaW1wb3J0ZWQgaW50byB0aGUgYENhdGNoYAotbmFtZXNwYWNlIGFzIHdlbGwuCi0KLVRoZXJlIGFyZSB0d28gcGFydHMgdG8gZWFjaCBvZiB0aGUgYnVpbHQtaW4gbWF0Y2hlcnMsIHRoZSBtYXRjaGVyCi10eXBlIGl0c2VsZiBhbmQgYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBwcm92aWRlcyB0ZW1wbGF0ZSBhcmd1bWVudAotZGVkdWN0aW9uIHdoZW4gY3JlYXRpbmcgdGVtcGxhdGVkIG1hdGNoZXJzLiBBcyBhbiBleGFtcGxlLCB0aGUgbWF0Y2hlcgotZm9yIGNoZWNraW5nIHRoYXQgdHdvIGluc3RhbmNlcyBvZiBgc3RkOjp2ZWN0b3JgIGFyZSBpZGVudGljYWwgaXMKLWBFcXVhbHNNYXRjaGVyPFQ+YCwgYnV0IHRoZSB1c2VyIGlzIGV4cGVjdGVkIHRvIHVzZSB0aGUgYEVxdWFsc2AKLWhlbHBlciBmdW5jdGlvbiBpbnN0ZWFkLgotCitDYXRjaCBjdXJyZW50bHkgcHJvdmlkZXMgc29tZSBtYXRjaGVycywgdGhleSBhcmUgaW4gdGhlIGBDYXRjaDo6TWF0Y2hlcnNgIGFuZCBgQ2F0Y2hgIG5hbWVzcGFjZXMuCiAKICMjIyBTdHJpbmcgbWF0Y2hlcnMKIFRoZSBzdHJpbmcgbWF0Y2hlcnMgYXJlIGBTdGFydHNXaXRoYCwgYEVuZHNXaXRoYCwgYENvbnRhaW5zYCwgYEVxdWFsc2AgYW5kIGBNYXRjaGVzYC4gVGhlIGZpcnN0IGZvdXIgbWF0Y2ggYSBsaXRlcmFsIChzdWIpc3RyaW5nIGFnYWluc3QgYSByZXN1bHQsIHdoaWxlIGBNYXRjaGVzYCB0YWtlcyBhbmQgbWF0Y2hlcyBhbiBFQ01BU2NyaXB0IHJlZ2V4LiBEbyBub3RlIHRoYXQgYE1hdGNoZXNgIG1hdGNoZXMgdGhlIHN0cmluZyBhcyBhIHdob2xlLCBtZWFuaW5nIHRoYXQgImFiYyIgd2lsbCBub3QgbWF0Y2ggYWdhaW5zdCAiYWJjZCIsIGJ1dCAiYWJjLioiIHdpbGwuCkBAIC03MSw0MiArNDUsMTMgQEAKIAogCiAjIyMgVmVjdG9yIG1hdGNoZXJzCi1DYXRjaDIgY3VycmVudGx5IHByb3ZpZGVzIDUgYnVpbHQtaW4gbWF0Y2hlcnMgdGhhdCB3b3JrIG9uIGBzdGQ6OnZlY3RvcmAuCi1UaGVzZSBhcmUKLQotICogYENvbnRhaW5zYCB3aGljaCBjaGVja3Mgd2hldGhlciBhIHNwZWNpZmllZCB2ZWN0b3IgaXMgcHJlc2VudCBpbiB0aGUgcmVzdWx0Ci0gKiBgVmVjdG9yQ29udGFpbnNgIHdoaWNoIGNoZWNrcyB3aGV0aGVyIGEgc3BlY2lmaWVkIGVsZW1lbnQgaXMgcHJlc2VudCBpbiB0aGUgcmVzdWx0Ci0gKiBgRXF1YWxzYCB3aGljaCBjaGVja3Mgd2hldGhlciB0aGUgcmVzdWx0IGlzIGV4YWN0bHkgZXF1YWwgKG9yZGVyIG1hdHRlcnMpIHRvIGEgc3BlY2lmaWMgdmVjdG9yCi0gKiBgVW5vcmRlcmVkRXF1YWxzYCB3aGljaCBjaGVja3Mgd2hldGhlciB0aGUgcmVzdWx0IGlzIGVxdWFsIHRvIGEgc3BlY2lmaWMgdmVjdG9yIHVuZGVyIGEgcGVybXV0YXRpb24KLSAqIGBBcHByb3hgIHdoaWNoIGNoZWNrcyB3aGV0aGVyIHRoZSByZXN1bHQgaXMgImFwcHJveC1lcXVhbCIgKG9yZGVyIG1hdHRlcnMsIGJ1dCBjb21wYXJpc29uIGlzIGRvbmUgdmlhIGBBcHByb3hgKSB0byBhIHNwZWNpZmljIHZlY3RvcgotPiBBcHByb3ggbWF0Y2hlciB3YXMgW2ludHJvZHVjZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jYXRjaG9yZy9DYXRjaDIvaXNzdWVzLzE0OTkpIGluIENhdGNoIDIuNy4yLgotCitUaGUgdmVjdG9yIG1hdGNoZXJzIGFyZSBgQ29udGFpbnNgLCBgVmVjdG9yQ29udGFpbnNgIGFuZCBgRXF1YWxzYC4gYFZlY3RvckNvbnRhaW5zYCBsb29rcyBmb3IgYSBzaW5nbGUgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCB2ZWN0b3IsIGBDb250YWluc2AgbG9va3MgZm9yIGEgc2V0ICh2ZWN0b3IpIG9mIGVsZW1lbnRzIGluc2lkZSB0aGUgbWF0Y2hlZCB2ZWN0b3IuCiAKICMjIyBGbG9hdGluZyBwb2ludCBtYXRjaGVycwotQ2F0Y2gyIHByb3ZpZGVzIDMgbWF0Y2hlcnMgZm9yIHdvcmtpbmcgd2l0aCBmbG9hdGluZyBwb2ludCBudW1iZXJzLiBUaGVzZQotYXJlIGBXaXRoaW5BYnNNYXRjaGVyYCwgYFdpdGhpblVscHNNYXRjaGVyYCBhbmQgYFdpdGhpblJlbE1hdGNoZXJgLgorVGhlIGZsb2F0aW5nIHBvaW50IG1hdGNoZXJzIGFyZSBgV2l0aGluVUxQYCBhbmQgYFdpdGhpbkFic2AuIGBXaXRoaW5BYnNgIGFjY2VwdHMgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyB0aGF0IGFyZSB3aXRoaW4gYSBjZXJ0YWluIG1hcmdpbiBvZiB0YXJnZXQuIGBXaXRoaW5VTFBgIHBlcmZvcm1zIGFuIFtVTFBdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaXRfaW5fdGhlX2xhc3RfcGxhY2UpLWJhc2VkIGNvbXBhcmlzb24gb2YgdHdvIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgYW5kIGFjY2VwdHMgdGhlbSBpZiB0aGV5IGFyZSBsZXNzIHRoYW4gY2VydGFpbiBudW1iZXIgb2YgVUxQcyBhcGFydC4KIAotVGhlIGBXaXRoaW5BYnNNYXRjaGVyYCBtYXRjaGVyIGFjY2VwdHMgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyB0aGF0IGFyZQotd2l0aGluIGEgY2VydGFpbiBkaXN0YW5jZSBvZiB0YXJnZXQuIEl0IHNob3VsZCBiZSBjb25zdHJ1Y3RlZCB3aXRoIHRoZQotYFdpdGhpbkFicyhkb3VibGUgdGFyZ2V0LCBkb3VibGUgbWFyZ2luKWAgaGVscGVyLgorRG8gbm90ZSB0aGF0IFVMUC1iYXNlZCBjaGVja3Mgb25seSBtYWtlIHNlbnNlIHdoZW4gYm90aCBjb21wYXJlZCBudW1iZXJzIGFyZSBvZiB0aGUgc2FtZSB0eXBlIGFuZCBgV2l0aGluVUxQYCB3aWxsIHVzZSB0eXBlIG9mIGl0cyBhcmd1bWVudCBhcyB0aGUgdGFyZ2V0IHR5cGUuIFRoaXMgbWVhbnMgdGhhdCBgV2l0aGluVUxQKDEuZiwgMSlgIHdpbGwgZXhwZWN0IHRvIGNvbXBhcmUgYGZsb2F0YHMsIGJ1dCBgV2l0aGluVUxQKDEuLCAxKWAgd2lsbCBleHBlY3QgdG8gY29tcGFyZSBgZG91YmxlYHMuCiAKLVRoZSBgV2l0aGluVWxwc01hdGNoZXJgIG1hdGNoZXIgYWNjZXB0cyBmbG9hdGluZyBwb2ludCBudW1iZXJzIHRoYXQgYXJlCi13aXRoaW4gYSBjZXJ0YWluIG51bWJlciBvZiBbVUxQc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVW5pdF9pbl90aGVfbGFzdF9wbGFjZSkKLW9mIHRoZSB0YXJnZXQuIEJlY2F1c2UgVUxQIGNvbXBhcmlzb25zIG5lZWQgdG8gYmUgZG9uZSBkaWZmZXJlbnRseSBmb3IKLWBmbG9hdGBzIGFuZCBmb3IgYGRvdWJsZWBzLCB0aGVyZSBhcmUgdHdvIG92ZXJsb2FkcyBvZiB0aGUgaGVscGVycyBmb3IKLXRoaXMgbWF0Y2hlciwgYFdpdGhpblVMUChmbG9hdCB0YXJnZXQsIGludDY0X3QgVUxQcylgLCBhbmQKLWBXaXRoaW5VTFAoZG91YmxlIHRhcmdldCwgaW50NjRfdCBVTFBzKWAuCi0KLVRoZSBgV2l0aGluUmVsTWF0Y2hlcmAgbWF0Y2hlciBhY2NlcHRzIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgdGhhdCBhcmUKLV9hcHByb3hpbWF0ZWx5IGVxdWFsXyB3aXRoIHRoZSB0YXJnZXQgbnVtYmVyIHdpdGggc29tZSBzcGVjaWZpYyB0b2xlcmFuY2UuCi1JbiBvdGhlciB3b3JkcywgaXQgY2hlY2tzIHRoYXQgYHxsaHMgLSByaHN8IDw9IGVwc2lsb24gKiBtYXgofGxoc3wsIHxyaHN8KWAsCi13aXRoIHNwZWNpYWwgY2FzaW5nIGZvciBgSU5GSU5JVFlgIGFuZCBgTmFOYC4gVGhlcmUgYXJlIF80XyBvdmVybG9hZHMgb2YKLXRoZSBoZWxwZXJzIGZvciB0aGlzIG1hdGNoZXIsIGBXaXRoaW5SZWwoZG91YmxlIHRhcmdldCwgZG91YmxlIG1hcmdpbilgLAotYFdpdGhpblJlbChmbG9hdCB0YXJnZXQsIGZsb2F0IG1hcmdpbilgLCBgV2l0aGluUmVsKGRvdWJsZSB0YXJnZXQpYCwgYW5kCi1gV2l0aGluUmVsKGZsb2F0IHRhcmdldClgLiBUaGUgbGF0dGVyIHR3byBwcm92aWRlIGEgZGVmYXVsdCBlcHNpbG9uIG9mCi1tYWNoaW5lIGVwc2lsb24gKiAxMDAuCi0KLT4gYFdpdGhpblJlbGAgbWF0Y2hlciB3YXMgaW50cm9kdWNlZCBpbiBDYXRjaCAyLjEwLjAKIAogIyMjIEdlbmVyaWMgbWF0Y2hlcnMKIENhdGNoIGFsc28gYWltcyB0byBwcm92aWRlIGEgc2V0IG9mIGdlbmVyaWMgbWF0Y2hlcnMuIEN1cnJlbnRseSB0aGlzIHNldApAQCAtMTI3LDI5ICs3MiwxMyBAQAogdXNlZCBvbmx5IGR1cmluZyByZXBvcnRpbmcgb2YgdGhlIHJlc3VsdC4KIAogCi0jIyMgRXhjZXB0aW9uIG1hdGNoZXJzCi1DYXRjaDIgYWxzbyBwcm92aWRlcyBhbiBleGNlcHRpb24gbWF0Y2hlciB0aGF0IGNhbiBiZSB1c2VkIHRvIHZlcmlmeQotdGhhdCBhbiBleGNlcHRpb24ncyBtZXNzYWdlIGV4YWN0bHkgbWF0Y2hlcyBkZXNpcmVkIHN0cmluZy4gVGhlIG1hdGNoZXIKLWlzIGBFeGNlcHRpb25NZXNzYWdlTWF0Y2hlcmAsIGFuZCB3ZSBhbHNvIHByb3ZpZGUgYSBoZWxwZXIgZnVuY3Rpb24KLWBNZXNzYWdlYC4KLQotVGhlIG1hdGNoZWQgZXhjZXB0aW9uIG11c3QgcHVibGljbHkgZGVyaXZlIGZyb20gYHN0ZDo6ZXhjZXB0aW9uYCBhbmQKLXRoZSBtZXNzYWdlIG1hdGNoaW5nIGlzIGRvbmUgX2V4YWN0bHlfLCBpbmNsdWRpbmcgY2FzZS4KLQotPiBgRXhjZXB0aW9uTWVzc2FnZU1hdGNoZXJgIHdhcyBpbnRyb2R1Y2VkIGluIENhdGNoIDIuMTAuMAotCi1FeGFtcGxlIHVzZToKLWBgYGNwcAotUkVRVUlSRV9USFJPV1NfTUFUQ0hFUyh0aHJvd3NEZXJpdmVkRXhjZXB0aW9uKCksICBEZXJpdmVkRXhjZXB0aW9uLCAgTWVzc2FnZSgiRGVyaXZlZEV4Y2VwdGlvbjo6d2hhdCIpKTsKLWBgYAotCiAjIyBDdXN0b20gbWF0Y2hlcnMKIEl0J3MgZWFzeSB0byBwcm92aWRlIHlvdXIgb3duIG1hdGNoZXJzIHRvIGV4dGVuZCBDYXRjaCBvciBqdXN0IHRvIHdvcmsgd2l0aCB5b3VyIG93biB0eXBlcy4KIAotWW91IG5lZWQgdG8gcHJvdmlkZSB0d28gdGhpbmdzOgorWW91IG5lZWQgdG8gcHJvdmlkZSB0d28gdGhpbmdzOiAKIDEuIEEgbWF0Y2hlciBjbGFzcywgZGVyaXZlZCBmcm9tIGBDYXRjaDo6TWF0Y2hlckJhc2U8VD5gIC0gd2hlcmUgYFRgIGlzIHRoZSB0eXBlIGJlaW5nIHRlc3RlZC4KIFRoZSBjb25zdHJ1Y3RvciB0YWtlcyBhbmQgc3RvcmVzIGFueSBhcmd1bWVudHMgbmVlZGVkIChlLmcuIHNvbWV0aGluZyB0byBjb21wYXJlIGFnYWluc3QpIGFuZCB5b3UgbXVzdAotb3ZlcnJpZGUgdHdvIG1ldGhvZHM6IGBtYXRjaCgpYCBhbmQgYGRlc2NyaWJlKClgLgorb3ZlcnJpZGUgdHdvIG1ldGhvZHM6IGBtYXRjaCgpYCBhbmQgYGRlc2NyaWJlKClgLiAKIDIuIEEgc2ltcGxlIGJ1aWxkZXIgZnVuY3Rpb24uIFRoaXMgaXMgd2hhdCBpcyBhY3R1YWxseSBjYWxsZWQgZnJvbSB0aGUgdGVzdCBjb2RlIGFuZCBhbGxvd3Mgb3ZlcmxvYWRpbmcuCiAKIEhlcmUncyBhbiBleGFtcGxlIGZvciBhc3NlcnRpbmcgdGhhdCBhbiBpbnRlZ2VyIGZhbGxzIHdpdGhpbiBhIGdpdmVuIHJhbmdlCkBAIC0xOTQsNyArMTIzLDcgQEAKIGBgYAogCiBSdW5uaW5nIHRoaXMgdGVzdCBnaXZlcyB0aGUgZm9sbG93aW5nIGluIHRoZSBjb25zb2xlOgotCisgCiBgYGAKIC8qKi9UZXN0RmlsZS5jcHA6MTIzOiBGQUlMRUQ6CiAgIENIRUNLX1RIQVQoIDEwMCwgSXNCZXR3ZWVuKCAxLCAxMCApICkKZGlmZiAtLWdpdCBhL2RvY3Mvb3BlbnNvdXJjZS11c2Vycy5tZCBiL2RvY3Mvb3BlbnNvdXJjZS11c2Vycy5tZAppbmRleCAzNmMwZGI2Li40ODliYmRjIDEwMDY0NAotLS0gYS9kb2NzL29wZW5zb3VyY2UtdXNlcnMubWQKKysrIGIvZG9jcy9vcGVuc291cmNlLXVzZXJzLm1kCkBAIC0yMyw5ICsyMyw2IEBACiAjIyMgW0F6bXFdKGh0dHBzOi8vZ2l0aHViLmNvbS96ZXJvbXEvYXptcSkKIEJvb3N0IEFzaW8gc3R5bGUgYmluZGluZ3MgZm9yIFplcm9NUS4KIAotIyMjIFtDYXRhY2x5c206IERhcmsgRGF5cyBBaGVhZF0oaHR0cHM6Ly9naXRodWIuY29tL0NsZXZlclJhdmVuL0NhdGFjbHlzbS1EREEpCi1Qb3N0LWFwb2NhbHlwdGljIHN1cnZpdmFsIFJQRy4KLQogIyMjIFtDaGFrcmFDb3JlXShodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L0NoYWtyYUNvcmUpCiBUaGUgY29yZSBwYXJ0IG9mIHRoZSBDaGFrcmEgSmF2YVNjcmlwdCBlbmdpbmUgdGhhdCBwb3dlcnMgTWljcm9zb2Z0IEVkZ2UuCiAKQEAgLTUzLDYgKzUwLDkgQEAKICMjIyBbSW5qYV0oaHR0cHM6Ly9naXRodWIuY29tL3BhbnRvci9pbmphKQogQSBoZWFkZXItb25seSB0ZW1wbGF0ZSBlbmdpbmUgZm9yIG1vZGVybiBDKysuCiAKKyMjIyBbSlNPTiBmb3IgTW9kZXJuIEMrK10oaHR0cHM6Ly9naXRodWIuY29tL25sb2htYW5uL2pzb24pCitBLCBzaW5nbGUtaGVhZGVyLCBKU09OIHBhcnNpbmcgbGlicmFyeSB0aGF0IHRha2VzIGFkdmFudGFnZSBvZiB3aGF0IEMrKyBoYXMgdG8gb2ZmZXIuCisKICMjIyBbbGliY2x1b25dKGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJiZXJnZXIvbGliY2x1b24pCiBBIHNpbmdsZS1oZWFkZXItb25seSBsaWJyYXJ5IHdyaXR0ZW4gaW4gQysrMTQgdG8gZ2x1ZSBkaXN0cmlidXRlZCBzb2Z0d2FyZSBjb21wb25lbnRzIChVRFAsIFRDUCwgc2hhcmVkIG1lbW9yeSkgc3VwcG9ydGluZyBuYXRpdmVseSBQcm90b2J1ZiwgTENNL1pDTSwgTXNnUGFjaywgYW5kIEpTT04gZm9yIGR5bmFtaWMgbWVzc2FnZSB0cmFuc2Zvcm1hdGlvbnMgaW4tYmV0d2Vlbi4gCiAKQEAgLTExMiw5ICsxMTIsNiBAQAogIyMjIFtTdGFuZGFyZGVzZV0oaHR0cHM6Ly9naXRodWIuY29tL2Zvb25hdGhhbi9zdGFuZGFyZGVzZSkKIFN0YW5kYXJkZXNlIGFpbXMgdG8gYmUgYSBuZXh0Z2VuIERveHlnZW4uCiAKLSMjIyBbUG9wSGVhZF0oaHR0cHM6Ly9naXRodWIuY29tL1NQQy1Tb21lLVBvbGlzaC1Db2RlcnMvUG9wSGVhZCkKLUEgMkQsIFpvbWJpZSwgUlBHIGdhbWUgd2hpY2ggaXMgYmVpbmcgbWFkZSBvbiBvdXIgb3duIGVuZ2luZS4KLQogLS0tCiAKIFtIb21lXShSZWFkbWUubWQjdG9wKQpkaWZmIC0tZ2l0IGEvZG9jcy9vdGhlci1tYWNyb3MubWQgYi9kb2NzL290aGVyLW1hY3Jvcy5tZAppbmRleCA5OTQxMTVmLi4zNDUyMzRkIDEwMDY0NAotLS0gYS9kb2NzL290aGVyLW1hY3Jvcy5tZAorKysgYi9kb2NzL290aGVyLW1hY3Jvcy5tZApAQCAtNTksOCArNTksNiBAQAogCiAqIGBTVEFUSUNfUkVRVUlSRWAKIAotPiBbSW50cm9kdWNlZF0oaHR0cHM6Ly9naXRodWIuY29tL2NhdGNob3JnL0NhdGNoMi9pc3N1ZXMvMTM2MikgaW4gQ2F0Y2ggMi40LjIuCi0KIGBTVEFUSUNfUkVRVUlSRSggZXhwciApYCBpcyBhIG1hY3JvIHRoYXQgY2FuIGJlIHVzZWQgdGhlIHNhbWUgd2F5IGFzIGEKIGBzdGF0aWNfYXNzZXJ0YCwgYnV0IGFsc28gcmVnaXN0ZXJzIHRoZSBzdWNjZXNzIHdpdGggQ2F0Y2gyLCBzbyBpdCBpcwogcmVwb3J0ZWQgYXMgYSBzdWNjZXNzIGF0IHJ1bnRpbWUuIFRoZSB3aG9sZSBjaGVjayBjYW4gYWxzbyBiZSBkZWZlcnJlZApAQCAtMTM0LDggKzEzMiw2IEBACiAKICogYERZTkFNSUNfU0VDVElPTmAKIAotPiBJbnRyb2R1Y2VkIGluIENhdGNoIDIuMy4wLgotCiBgRFlOQU1JQ19TRUNUSU9OYCBpcyBhIGBTRUNUSU9OYCB3aGVyZSB0aGUgdXNlciBjYW4gdXNlIGBvcGVyYXRvcjw8YCB0bwogY3JlYXRlIHRoZSBmaW5hbCBuYW1lIGZvciB0aGF0IHNlY3Rpb24uIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aXRoIGUuZy4KIGdlbmVyYXRvcnMsIG9yIHdoZW4gY3JlYXRpbmcgYSBgU0VDVElPTmAgZHluYW1pY2FsbHksIHdpdGhpbiBhIGxvb3AuCmRpZmYgLS1naXQgYS9kb2NzL3JlbGVhc2Utbm90ZXMubWQgYi9kb2NzL3JlbGVhc2Utbm90ZXMubWQKaW5kZXggMGMwMjMwOC4uYzVmOTJkMiAxMDA2NDQKLS0tIGEvZG9jcy9yZWxlYXNlLW5vdGVzLm1kCisrKyBiL2RvY3MvcmVsZWFzZS1ub3Rlcy5tZApAQCAtMiwxNiArMiw2IEBACiAKICMgUmVsZWFzZSBub3RlcwogKipDb250ZW50cyoqPGJyPgotWzIuMTEuMl0oIzIxMTIpPGJyPgotWzIuMTEuMV0oIzIxMTEpPGJyPgotWzIuMTEuMF0oIzIxMTApPGJyPgotWzIuMTAuMl0oIzIxMDIpPGJyPgotWzIuMTAuMV0oIzIxMDEpPGJyPgotWzIuMTAuMF0oIzIxMDApPGJyPgotWzIuOS4yXSgjMjkyKTxicj4KLVsyLjkuMV0oIzI5MSk8YnI+Ci1bMi45LjBdKCMyOTApPGJyPgotWzIuOC4wXSgjMjgwKTxicj4KIFsyLjcuMl0oIzI3Mik8YnI+CiBbMi43LjFdKCMyNzEpPGJyPgogWzIuNy4wXSgjMjcwKTxicj4KQEAgLTM0LDIwOSArMjQsNiBAQAogW0V2ZW4gT2xkZXIgdmVyc2lvbnNdKCNldmVuLW9sZGVyLXZlcnNpb25zKTxicj4KIAogCi0jIyAyLjExLjIKLQotIyMjIEltcHJvdmVtZW50cwotKiBHQ0MgYW5kIENsYW5nIG5vdyBpc3N1ZSB3YXJuaW5ncyBmb3Igc3VzcGljaW91cyBjb2RlIGluIGFzc2VydGlvbnMgKCMxODgwKQotICAqIEUuZy4gYFJFUVVJUkUoIGludCAhPSB1bnNpZ25lZCBpbnQgKWAgd2lsbCBub3cgaXNzdWUgbWl4ZWQgc2lnbmVkbmVzcyBjb21wYXJpc29uIHdhcm5pbmcKLSAgKiBUaGlzIGhhcyBhbHdheXMgd29ya2VkIG9uIE1TVkMsIGJ1dCBpdCBub3cgYWxzbyB3b3JrcyBmb3IgR0NDIGFuZCBjdXJyZW50IENsYW5nIHZlcnNpb25zCi0qIENvbG9yaXphdGlvbiBvZiAiVGVzdCBmaWx0ZXJzIiBvdXRwdXQgc2hvdWxkIGJlIG1vcmUgcm9idXN0IG5vdwotKiBgLS13YWl0LWZvci1rZXlwcmVzc2Agbm93IGFsc28gYWNjZXB0cyBgbmV2ZXJgIGFzIGFuIG9wdGlvbiAoIzE4NjYpCi0qIFJlcG9ydGVycyBubyBsb25nZXIgcm91bmQtb2ZmIG5hbm9zZWNvbmRzIHdoZW4gcmVwb3J0aW5nIGJlbmNobWFya2luZyByZXN1bHRzICgjMTg3NikKLSogQ2F0Y2gyJ3MgZGVidWcgYnJlYWsgbm93IHN1cHBvcnRzIGlPUyB3aGlsZSB1c2luZyBUaHVtYiBpbnN0cnVjdGlvbiBzZXQgKCMxODYyKQotKiBJdCBpcyBub3cgcG9zc2libGUgdG8gY3VzdG9taXplIGJlbmNobWFyaydzIHdhcm0tdXAgdGltZSB3aGVuIHJ1bm5pbmcgdGhlIHRlc3QgYmluYXJ5ICgjMTg0NCkKLSAgKiBgLS1iZW5jaG1hcmstd2FybXVwLXRpbWUge21zfWAKLSogVXNlciBjYW4gbm93IHNwZWNpZnkgaG93IENhdGNoMiBzaG91bGQgYnJlYWsgaW50byBkZWJ1Z2dlciAoIzE4NDYpCi0KLSMjIyBGaXhlcwotKiBGaXhlcyBtaXNzaW5nIGA8cmFuZG9tPmAgaW5jbHVkZSBpbiBiZW5jaG1hcmtpbmcgKCMxODMxKQotKiBGaXhlZCBtaXNzaW5nIGA8aXRlcmF0b3I+YCBpbmNsdWRlIGluIGJlbmNobWFya2luZyAoIzE4NzQpCi0qIEhpZGRlbiB0ZXN0IGNhc2VzIGFyZSBub3cgYWxzbyB0YWdnZWQgd2l0aCBgWyFoaWRlXWAgYXMgcGVyIGRvY3VtZW50YXRpb24gKCMxODQ3KQotKiBEZXRlY3Rpb24gb2Ygd2hldGhlciBsaWJjIHByb3ZpZGVzIGBzdGQ6Om5leHRhZnRlcmAgaGFzIGJlZW4gaW1wcm92ZWQgKCMxODU0KQotKiBEZXRlY3Rpb24gb2YgYHdtYWluYCBubyBsb25nZXIgaW5jb3JyZWN0bHkgbG9va3MgZm9yIGBXSU4zMmAgbWFjcm8gKCMxODQ5KQotICAqIE5vdyBpdCBqdXN0IGRldGVjdHMgV2luZG93cyBwbGF0Zm9ybQotKiBDb21wb3NpbmcgYWxyZWFkeS1jb21wb3NlZCBtYXRjaGVycyBubyBsb25nZXIgbW9kaWZpZXMgdGhlIHBhcnRpYWxseS1jb21wb3NlZCBtYXRjaGVyIGV4cHJlc3Npb24KLSAgKiBUaGlzIGJ1ZyBoYXMgYmVlbiBwcmVzZW50IGZvciB0aGUgbGFzdCB+MiB5ZWFycyBhbmQgbm9ib2R5IHJlcG9ydGVkIGl0Ci0KLQotIyMgMi4xMS4xCi0KLSMjIyBJbXByb3ZlbWVudHMKLSogQnJlYWtpbmcgaW50byBkZWJ1Z2dlciBpcyBzdXBwb3J0ZWQgb24gaU9TICgjMTgxNykKLSogYGdvb2dsZS1idWlsZC11c2luZy1uYW1lc3BhY2VgIGNsYW5nLXRpZHkgd2FybmluZyBpcyBzdXBwcmVzc2VkICgjMTc5OSkKLQotIyMjIEZpeGVzCi0qIENsYW5nIG9uIFdpbmRvd3MgaXMgbm8gbG9uZ2VyIGFzc3VtZWQgdG8gaW1wbGVtZW50IE1TVkMncyB0cmFkaXRpb25hbCBwcmVwcm9jZXNzb3IgKCMxODA2KQotKiBgT2JqZWN0U3RvcmFnZWAgbm93IGJlaGF2ZXMgcHJvcGVybHkgaW4gYGNvbnN0YCBjb250ZXh0cyAoIzE4MjApCi0qIGBHRU5FUkFURV9DT1BZKGEsIGIpYCBub3cgY29tcGlsZXMgcHJvcGVybHkgKCMxODA5LCAjMTgxNSkKLSogU29tZSBtb3JlIGNsZWFudXBzIGluIHRoZSBiZW5jaG1hcmtpbmcgc3VwcG9ydAotCi0KLSMjIDIuMTEuMAotCi0jIyMgSW1wcm92ZW1lbnRzCi0qIEpVbml0IHJlcG9ydGVyIG91dHB1dCBub3cgY29udGFpbnMgbW9yZSBkZXRhaWxzIGluIGNhc2Ugb2YgZmFpbHVyZSAoIzEzNDcsICMxNzE5KQotKiBBZGRlZCBTb25hclF1YmUgVGVzdCBEYXRhIHJlcG9ydGVyICgjMTczOCkKLSAgKiBJdCBpcyBpbiBhIHNlcGFyYXRlIGhlYWRlciwganVzdCBsaWtlIHRoZSBUQVAsIEF1dG9tYWtlLCBhbmQgVGVhbUNpdHkgcmVwb3J0ZXJzCi0qIGByYW5nZWAgZ2VuZXJhdG9yIG5vdyBhbGxvd3MgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyAoIzE3NzYpCi0qIFJld29ya2VkIHBhcnQgb2YgaW50ZXJuYWxzIHRvIGluY3JlYXNlIHRocm91Z2hwdXQKLQotCi0jIyMgRml4ZXMKLSogVGhlIHNpbmdsZSBoZWFkZXIgdmVyc2lvbiBzaG91bGQgY29udGFpbiBmdWxsIGJlbmNobWFya2luZyBzdXBwb3J0ICgjMTgwMCkKLSogYFsuZm9vXWAgaXMgbm93IHByb3Blcmx5IHBhcnNlZCBhcyBgWy5dW2Zvb11gIHdoZW4gdXNlZCBvbiB0aGUgY29tbWFuZCBsaW5lICgjMTc5OCkKLSogRml4ZWQgY29tcGlsYXRpb24gb2YgYmVuY2htYXJraW5nIG9uIHBsYXRmb3JtcyB3aGVyZSBgc3RlYWR5X2Nsb2NrOjpwZXJpb2RgIGlzIG5vdCBgc3RkOjpuYW5vYCAoIzE3OTQpCi0KLQotCi0jIyAyLjEwLjIKLQotIyMjIEltcHJvdmVtZW50cwotKiBDYXRjaDIgd2lsbCBub3cgY29tcGlsZSBvbiBwbGF0Zm9ybSB3aGVyZSBgSU5GSU5JVFlgIGlzIGRvdWJsZSAoIzE3ODIpCi0KLQotIyMjIEZpeGVzCi0qIFdhcm5pbmcgc3VwcHJlc3NlZCBkdXJpbmcgbGlzdGVuZXIgcmVnaXN0cmF0aW9uIHdpbGwgbm8gbG9uZ2VyIGxlYWsKLQotCi0KLSMjIDIuMTAuMQotCi0jIyMgSW1wcm92ZW1lbnRzCi0qIENhdGNoMiBub3cgZ3VhcmRzIGl0c2VsZiBhZ2FpbnN0IGBtaW5gIGFuZCBgbWF4YCBtYWNyb3MgZnJvbSBgd2luZG93cy5oYCAoIzE3NzIpCi0qIFRlbXBsYXRlZCB0ZXN0cyB3aWxsIG5vdyBjb21waWxlIHdpdGggSUNDICgjMTc0OCkKLSogYFdpdGhpblVMUGAgbWF0Y2hlciBub3cgdXNlcyBzY2llbnRpZmljIG5vdGF0aW9uIGZvciBzdHJpbmdpZmljYXRpb24gKCMxNzYwKQotCi0KLSMjIyBGaXhlcwotKiBUZW1wbGF0ZWQgdGVzdHMgbm8gbG9uZ2VyIHRyaWdnZXIgYC1XdW51c2VkLXRlbXBsYXRlc2AgKCMxNzYyKQotKiBTdXBwcmVzc2VkIGNsYW5nLWFuYWx5emVyIGZhbHNlIHBvc2l0aXZlIGluIGNvbnRleHQgZ2V0dGVyICgjMTIzMCwgIzE3MzUpCi0KLQotIyMjIE1pc2NlbGxhbmVvdXMKLSogQ01ha2Ugbm8gbG9uZ2VyIHByb2hpYml0cyBpbi10cmVlIGJ1aWxkIHdoZW4gQ2F0Y2gyIGlzIHVzZWQgYXMgYSBzdWJwcm9qZWN0ICgjMTc3MywgIzE3NzQpCi0KLQotCi0jIyAyLjEwLjAKLQotIyMjIEZpeGVzCi0qIGBURU1QTEFURV9MSVNUX1RFU1RfQ0FTRWAgbm93IHByb3Blcmx5IGhhbmRsZXMgbm9uLWNvcHlhYmxlIGFuZCBub24tbW92YWJsZSB0eXBlcyAoIzE3MjkpCi0qIEZpeGVkIGNvbXBpbGF0aW9uIGVycm9yIG9uIFNvbGFyaXMgY2F1c2VkIGJ5IGEgc3lzdGVtIGhlYWRlciBkZWZpbmluZyBtYWNybyBgVFRgICgjMTcyMiwgIzE3MjMpCi0qIGBSRUdJU1RFUl9FTlVNYCB3aWxsIG5vdyBmYWlsIGF0IGNvbXBpbGF0aW9uIHRpbWUgaWYgdGhlIHJlZ2lzdGVyZWQgZW51bSBpcyB0b28gbGFyZ2UKLSogUmVtb3ZlZCB1c2Ugb2YgYHN0ZDo6aXNfc2FtZV92YCBpbiBDKysxNyBtb2RlICgjMTc1NykKLSogRml4ZWQgcGFyc2luZyBvZiBlc2NhcGVkIHNwZWNpYWwgY2hhcmFjdGVycyB3aGVuIHJlYWRpbmcgdGVzdCBzcGVjcyBmcm9tIGEgZmlsZSAoIzE3NjcsICMxNzY5KQotCi0KLSMjIyBJbXByb3ZlbWVudHMKLSogVHJhaWxpbmcgYW5kIGxlYWRpbmcgd2hpdGVzcGFjZSBpbiB0ZXN0L3NlY3Rpb24gc3BlY3MgYXJlIG5vdyBpZ25vcmVkLgotKiBXcml0aW5nIHRvIEFuZHJvaWQgZGVidWcgbG9nIG5vdyB1c2VzIGBfX2FuZHJvaWRfbG9nX3dyaXRlYCBpbnN0ZWFkIG9mIGBfX2FuZHJvaWRfbG9nX3ByaW50YAotKiBBbmRyb2lkIGxvZ2dpbmcgc3VwcG9ydCBjYW4gbm93IGJlIHR1cm5lZCBvbi9vZmYgYXQgY29tcGlsZSB0aW1lICgjMTc0MykKLSAgKiBUaGUgdG9nZ2xlIGlzIGBDQVRDSF9DT05GSUdfQU5EUk9JRF9MT0dXUklURWAKLSogQWRkZWQgYSBnZW5lcmF0b3IgdGhhdCByZXR1cm5zIGVsZW1lbnRzIG9mIGEgcmFuZ2UKLSAgKiBVc2UgdmlhIGBmcm9tX3JhbmdlKGZyb20sIHRvKWAgb3IgYGZyb21fcmFuZ2UoY29udGFpbmVyKWAKLSogQWRkZWQgc3VwcG9ydCBmb3IgQ1JUcyB0aGF0IGRvIG5vdCBwcm92aWRlIGBzdGQ6Om5leHRhZnRlcmAgKCMxNzM5KQotICAqIFRoZXkgbXVzdCBzdGlsbCBwcm92aWRlIGdsb2JhbCBgbmV4dGFmdGVye2YsbCx9YAotICAqIEVuYWJsZWQgdmlhIGBDQVRDSF9DT05GSUdfR0xPQkFMX05FWFRBRlRFUmAKLSogU3BlY2lhbCBjYXNlZCBgQXBwcm94KGluZilgIG5vdCB0byBtYXRjaCBub24taW5maW5pdGUgdmFsdWVzCi0gICogVmVyeSBzdHJpY3RseSBzcGVha2luZyB0aGlzIG1pZ2h0IGJlIGEgYnJlYWtpbmcgY2hhbmdlLCBidXQgaXQgc2hvdWxkIG1hdGNoIHVzZXIgZXhwZWN0YXRpb25zIGJldHRlcgotKiBUaGUgb3V0cHV0IG9mIGJlbmNobWFya2luZyB0aHJvdWdoIHRoZSBDb25zb2xlIHJlcG9ydGVyIHdoZW4gYC0tYmVuY2htYXJrLW5vLWFuYWx5c2lzYCBpcyBzZXQgaXMgbm93IG11Y2ggc2ltcGxlciAoIzE3NjgpCi0qIEFkZGVkIGEgbWF0Y2hlciB0aGF0IGNhbiBiZSB1c2VkIGZvciBjaGVja2luZyBhbiBleGNlcHRpb25zIG1lc3NhZ2UgKCMxNjQ5LCAjMTcyOCkKLSAgKiBUaGUgbWF0Y2hlciBoZWxwZXIgZnVuY3Rpb24gaXMgY2FsbGVkIGBNZXNzYWdlYAotICAqIFRoZSBleGNlcHRpb24gbXVzdCBwdWJsaWNseSBkZXJpdmUgZnJvbSBgc3RkOjpleGNlcHRpb25gCi0gICogVGhlIG1hdGNoaW5nIGlzIGRvbmUgZXhhY3RseSwgaW5jbHVkaW5nIGNhc2UgYW5kIHdoaXRlc3BhY2UKLSogQWRkZWQgYSBtYXRjaGVyIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGNoZWNraW5nIHJlbGF0aXZlIGVxdWFsaXR5IG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgKCMxNzQ2KQotICAqIFVubGlrZSBgQXBwcm94YCwgaXQgY29uc2lkZXJzIGJvdGggc2lkZXMgd2hlbiBkZXRlcm1pbmluZyB0aGUgYWxsb3dlZCBtYXJnaW4KLSAgKiBTcGVjaWFsIGNhc2VzIGBOYU5gIGFuZCBgSU5GSU5JVFlgIHRvIG1hdGNoIHVzZXIgZXhwZWN0YXRpb25zCi0gICogVGhlIG1hdGNoZXIgaGVscGVyIGZ1bmN0aW9uIGlzIGNhbGxlZCBgV2l0aGluUmVsYAotKiBUaGUgVUxQIG1hdGNoZXIgbm93IGFsbG93cyBmb3IgYW55IHBvc3NpYmxlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byBudW1iZXJzCi0qIFRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMgbm93IHVzZSBDYXRjaC1nbG9iYWwgaW5zdGFuY2Ugb2YgUk5HICgjMTczNCwgIzE3MzYpCi0gICogVGhpcyBtZWFucyB0aGF0IG5lc3RlZCByYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMgYWN0dWFsbHkgZ2VuZXJhdGUgZGlmZmVyZW50IG51bWJlcnMKLQotCi0jIyMgTWlzY2VsbGFuZW91cwotKiBJbi1yZXBvIFBOR3MgaGF2ZSBiZWVuIG9wdGltaXplZCB0byBsb3dlciBvdmVyaGVhZCBvZiB1c2luZyBDYXRjaDIgdmlhIGdpdCBjbG9uZQotKiBDYXRjaDIgbm93IHVzZXMgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVVJCRyBjb25jZXB0Ci0gICogSW4gdGhlIGZ1dHVyZSB3ZSBhbHNvIHBsYW4gdG8gdXNlIG91ciBvd24gaW1wbGVtZW50YXRpb24gb2YgdGhlIGRpc3RyaWJ1dGlvbnMgZnJvbSBgPHJhbmRvbT5gIHRvIHByb3ZpZGUgY3Jvc3MtcGxhdGZvcm0gcmVwZWF0YWJpbGl0eSBvZiByYW5kb20gcmVzdWx0cwotCi0KLQotIyMgMi45LjIKLQotIyMjIEZpeGVzCi0qIGBDaHVua0dlbmVyYXRvcmAgY2FuIG5vdyBiZSB1c2VkIHdpdGggY2h1bmtzIG9mIHNpemUgMCAoIzE2NzEpCi0qIE5lc3RlZCBzdWJzZWN0aW9ucyBhcmUgbm93IHJ1biBwcm9wZXJseSB3aGVuIHNwZWNpZmljIHNlY3Rpb24gaXMgcnVuIHZpYSB0aGUgYC1jYCBhcmd1bWVudCAoIzE2NzAsICMxNjczKQotKiBDYXRjaDIgbm93IGNvbnNpc3RlbnRseSB1c2VzIGBfV0lOMzJgIHRvIGRldGVjdCBXaW5kb3dzIHBsYXRmb3JtICgjMTY3NikKLSogYFRFTVBMQVRFX0xJU1RfVEVTVF9DQVNFYCBub3cgc3VwcG9ydCBub24tZGVmYXVsdCBjb25zdHJ1Y3RpYmxlIHR5cGUgbGlzdHMgKCMxNjk3KQotKiBGaXhlZCBhIGNyYXNoIGluIHRoZSBYTUxSZXBvcnRlciB3aGVuIGEgYmVuY2htYXJrIHRocm93cyBleGNlcHRpb24gZHVyaW5nIHdhcm11cCAoIzE3MDYpCi0qIEZpeGVkIGEgcG9zc2libGUgaW5maW5pdGUgbG9vcCBpbiBDb21wYWN0UmVwb3J0ZXIgKCMxNzE1KQotKiBGaXhlZCBgLXcgTm9UZXN0c2AgcmV0dXJuaW5nIDAgZXZlbiB3aGVuIG5vIHRlc3RzIHdlcmUgbWF0Y2hlZCAoIzE0NDksICMxNjgzLCAjMTY4NCkKLSogRml4ZWQgbWF0Y2hlciBjb21waWxhdGlvbiB1bmRlciBPYmotQysrICgjMTY2MSkKLQotIyMjIEltcHJvdmVtZW50cwotKiBgUmVwZWF0R2VuZXJhdG9yYCBhbmQgYEZpeGVkVmFsdWVzR2VuZXJhdG9yYCBub3cgZmFpbCB0byBjb21waWxlIHdoZW4gdXNlZCB3aXRoIGBib29sYCAoIzE2OTIpCi0gICogUHJldmlvdXNseSB0aGV5IHdvdWxkIGZhaWwgYXQgcnVudGltZS4KLSogQ2F0Y2gyIG5vdyBzdXBwb3J0cyBBbmRyb2lkJ3MgZGVidWcgbG9nZ2luZyBmb3IgaXRzIGRlYnVnIG91dHB1dCAoIzE3MTApCi0qIENhdGNoMiBub3cgZGV0ZWN0cyBhbmQgY29uZmlndXJlcyBpdHNlbGYgZm9yIHRoZSBSVFggcGxhdGZvcm0gKCMxNjkzKQotICAqIFlvdSBzdGlsbCBuZWVkIHRvIHBhc3MgYC0tYmVuY2htYXJrLW5vLWFuYWx5c2lzYCBpZiB5b3UgYXJlIHVzaW5nIGJlbmNobWFya2luZyB1bmRlciBSVFgKLSogUmVtb3ZlZCBhICJzdG9yYWdlIGNsYXNzIGlzIG5vdCBmaXJzdCIgd2FybmluZyB3aGVuIGNvbXBpbGluZyBDYXRjaDIgd2l0aCBQR0kgY29tcGlsZXIgKCMxNzE3KQotCi0jIyMgTWlzY2VsbGFuZW91cwotKiBEb2N1bWVudGF0aW9uIG5vdyBjb250YWlucyBpbmRpY2F0aW9uIHdoZW4gYSBzcGVjaWZpYyBmZWF0dXJlIHdhcyBpbnRyb2R1Y2VkICgjMTY5NSkKLSAgKiBUaGVzZSBzdGFydCB3aXRoIENhdGNoMiB2Mi4zLjAsIChhIGJpdCBvdmVyIGEgeWVhciBhZ28pLgotICAqIGBkb2NzL2NvbnRyaWJ1dGluZy5tZGAgaGFzIGJlZW4gdXBkYXRlZCB0byBwcm92aWRlIGNvbnRyaWJ1dG9ycyBndWlkYW5jZSBvbiBob3cgdG8gYWRkIHRoZXNlIHRvIG5ld2x5IHdyaXR0ZW4gZG9jdW1lbnRhdGlvbgotKiBWYXJpb3VzIG90aGVyIGRvY3VtZW50YXRpb24gaW1wcm92ZW1lbnRzCi0gICogVG9DIGZpeGVzCi0gICogRG9jdW1lbnRlZCBgLS1vcmRlcmAgYW5kIGAtLXJuZy1zZWVkYCBjb21tYW5kIGxpbmUgb3B0aW9ucwotICAqIEJlbmNobWFya2luZyBkb2N1bWVudGF0aW9uIG5vdyBjbGVhcmx5IHN0YXRlcyB0aGF0IGl0IHJlcXVpcmVzIG9wdC1pbgotICAqIERvY3VtZW50ZWQgYENBVENIX0NPTkZJR19DUFAxN19PUFRJT05BTGAgYW5kIGBDQVRDSF9DT05GSUdfQ1BQMTdfQllURWAgbWFjcm9zCi0gICogUHJvcGVybHkgZG9jdW1lbnRlZCBidWlsdC1pbiB2ZWN0b3IgbWF0Y2hlcnMKLSAgKiBJbXByb3ZlZCBgKl9USFJPV1NfTUFUQ0hFU2AgZG9jdW1lbnRhdGlvbiBhIGJpdAotKiBDTWFrZSBjb25maWcgZmlsZSBpcyBub3cgYXJjaC1pbmRlcGVuZGVudCBldmVuIGlmIGBDTUFLRV9TSVpFT0ZfVk9JRF9QYCBpcyBpbiBDTWFrZSBjYWNoZSAoIzE2NjApCi0qIGBDYXRjaEFkZFRlc3RzYCBub3cgcHJvcGVybHkgZXNjYXBlcyBgW2AgYW5kIGBdYCBpbiB0ZXN0IG5hbWVzICgjMTYzNCwgIzE2OTgpCi0qIFJldmVydGVkIGBDYXRjaEFkZFRlc3RzYCBhZGRpbmcgdGFncyBhcyBDVGVzdCBsYWJlbHMgKCMxNjU4KQotICAqIFRoZSBzY3JpcHQgYnJva2Ugd2hlbiB0ZXN0IG5hbWVzIHdlcmUgdG9vIGxvbmcKLSAgKiBPdmVyd3JpdGluZyBgTEFCRUxTYCBjYXVzZWQgdHJvdWJsZSBmb3IgdXNlcnMgd2hvIHNldCB0aGVtIG1hbnVhbGx5Ci0gICogQ01ha2UgZG9lcyBub3QgbGV0IHVzZXJzIGFwcGVuZCB0byBgTEFCRUxTYCBpZiB0aGUgdGVzdCBuYW1lIGhhcyBzcGFjZXMKLQotCi0jIyAyLjkuMQotCi0jIyMgRml4ZXMKLSogRml4IGJlbmNobWFya2luZyBjb21waWxhdGlvbiBmYWlsdXJlIGluIGZpbGVzIHdpdGhvdXQgYENBVENIX0NPTkZJR19FWFRFUk5BTF9JTlRFUkZBQ0VTYCAob3IgaW1wbGVtZW50YXRpb24pCi0KLSMjIDIuOS4wCi0KLSMjIyBJbXByb3ZlbWVudHMKLSogVGhlIGV4cGVyaW1lbnRhbCBiZW5jaG1hcmtpbmcgc3VwcG9ydCBoYXMgYmVlbiByZXBsYWNlZCBieSBpbnRlZ3JhdGluZyBOb25pdXMgY29kZSAoIzE2MTYpCi0gICogVGhpcyBwcm92aWRlcyBhIG11Y2ggbW9yZSBmZWF0dXJlZnVsbCBtaWNyby1iZW5jaG1hcmtpbmcgc3VwcG9ydC4KLSAgKiBEdWUgdG8gdGhlIGNvbXBpbGF0aW9uIGNvc3QsIGl0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KLSAgKiBBcyBmYXIgYXMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaXMgY29uY2VybmVkLCB0aGlzIGZlYXR1cmUgaXMgc3RpbGwgY29uc2lkZXJlZCBleHBlcmltZW50YWwgaW4gdGhhdCB3ZSBtaWdodCBjaGFuZ2UgdGhlIGludGVyZmFjZSBiYXNlZCBvbiB1c2VyIGZlZWRiYWNrLgotKiBgV2l0aGluVUxQYCBtYXRjaGVyIG5vdyBzaG93cyB0aGUgYWNjZXB0YWJsZSByYW5nZSAoIzE1ODEpCi0qIFRlbXBsYXRlIHRlc3QgY2FzZXMgbm93IHN1cHBvcnQgdHlwZSBsaXN0cyAoIzE2MjcpCi0KLQotIyMgMi44LjAKLQotIyMjIEltcHJvdmVtZW50cwotKiBUZW1wbGF0ZWQgdGVzdCBjYXNlcyBubyBsb25nZXIgY2hlY2sgd2hldGhlciB0aGUgcHJvdmlkZWQgdHlwZXMgYXJlIHVuaXF1ZSAoIzE2MjgpCi0gICogVGhpcyBhbGxvd3MgeW91IHRvIGUuZy4gdGVzdCBvdmVyIGB1aW50MzJfdGAsIGB1aW50NjRfdGAsIGFuZCBgc2l6ZV90YCB3aXRob3V0IGNvbXBpbGF0aW9uIGZhaWxpbmcKLSogVGhlIHByZWNpc2lvbiBvZiBmbG9hdGluZyBwb2ludCBzdHJpbmdpZmljYXRpb24gY2FuIGJlIG1vZGlmaWVkIGJ5IHVzZXIgKCMxNjEyLCAjMTYxNCkKLSogV2Ugbm93IHByb3ZpZGUgYFJFR0lTVEVSX0VOVU1gIGNvbnZlbmllbmNlIG1hY3JvIGZvciBnZW5lcmF0aW5nIGBTdHJpbmdNYWtlcmAgc3BlY2lhbGl6YXRpb25zIGZvciBlbnVtcwotICAqIFNlZSB0aGUgIlN0cmluZyBjb252ZXJzaW9uIiBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzCi0qIEFkZGVkIG5ldyBzZXQgb2YgbWFjcm9zIGZvciB0ZW1wbGF0ZSB0ZXN0IGNhc2VzIHRoYXQgZW5hYmxlcyB0aGUgdXNlIG9mIE5UVFBzICgjMTUzMSwgIzE2MDkpCi0gICogU2VlICJUZXN0IGNhc2VzIGFuZCBzZWN0aW9ucyIgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscwotCi0jIyMgRml4ZXMKLSogYFVOU0NPUEVEX0lORk9gIG1hY3JvIG5vdyBoYXMgYSBwcmVmaXhlZC9kaXNhYmxlZC9wcmVmaXhlZCtkaXNhYmxlZCB2ZXJzaW9ucyAoIzE2MTEpCi0qIFJlcG9ydGluZyBlcnJvcnMgYXQgc3RhcnR1cCBzaG91bGQgbm8gbG9uZ2VyIGNhdXNlIGEgc2VnZmF1bHQgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzICgjMTYyNikKLQotCi0jIyMgTWlzY2VsbGFuZW91cwotKiBDTWFrZSB3aWxsIG5vdyBwcmV2ZW50IHlvdSBmcm9tIGF0dGVtcHRpbmcgaW4tdHJlZSBidWlsZCAoIzE2MzYsICMxNjM4KQotICAqIFByZXZpb3VzbHkgaXQgd291bGQgYnJlYWsgd2l0aCBhbiBvYnNjdXJlIGVycm9yIG1lc3NhZ2UgZHVyaW5nIHRoZSBidWlsZCBzdGVwCi0KLQogIyMgMi43LjIKIAogIyMjIEltcHJvdmVtZW50cwpAQCAtMjYyLDcgKzQ5LDcgQEAKIAogIyMjIEltcHJvdmVtZW50cwogKiBSZXBvcnRlcnMgbm93IHByaW50IG91dCB0aGUgZmlsdGVycyBhcHBsaWVkIHRvIHRlc3QgY2FzZXMgKCMxNTUwLCAjMTU4NSkKLSogQWRkZWQgYEdFTkVSQVRFX0NPUFlgIGFuZCBgR0VORVJBVEVfUkVGYCBtYWNyb3MgdGhhdCBjYW4gdXNlIHZhcmlhYmxlcyBpbnNpZGUgdGhlIGdlbmVyYXRvciBleHByZXNzaW9uCisqIEFkZGVkIGBHRU5FUkFURV9DT1BZYCBhbmQgYEdFTkVSQVRFX1ZBUmAgbWFjcm9zIHRoYXQgY2FuIHVzZSB2YXJpYWJsZXMgaW5zaWRlIHRoZSBnZW5lcmF0b3IgZXhwcmVzc2lvbgogICAqIEJlY2F1c2Ugb2YgdGhlIHNpZ25pZmljYW50IGRhbmdlciBvZiBsaWZldGltZSBpc3N1ZXMsIHRoZSBkZWZhdWx0IGBHRU5FUkFURWAgbWFjcm8gc3RpbGwgZG9lcyBub3QgYWxsb3cgdmFyaWFibGVzCiAqIFRoZSBgbWFwYCBnZW5lcmF0b3IgaGVscGVyIG5vdyBkZWR1Y2VzIHRoZSBtYXBwZWQgcmV0dXJuIHR5cGUgKCMxNTc2KQogCmRpZmYgLS1naXQgYS9kb2NzL3JlbGVhc2UtcHJvY2Vzcy5tZCBiL2RvY3MvcmVsZWFzZS1wcm9jZXNzLm1kCmluZGV4IDEzMGE4OTIuLjdmYTVmN2UgMTAwNjQ0Ci0tLSBhL2RvY3MvcmVsZWFzZS1wcm9jZXNzLm1kCisrKyBiL2RvY3MvcmVsZWFzZS1wcm9jZXNzLm1kCkBAIC00Miw4ICs0Miw4IEBACiBkZXNjcmlwdGlvbiBzaG91bGQgY29udGFpbiB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhlIGN1cnJlbnQgcmVsZWFzZS4KIFNpbmdsZSBoZWFkZXIgdmVyc2lvbiBvZiBgY2F0Y2guaHBwYCAqbmVlZHMqIHRvIGJlIGF0dGFjaGVkIGFzIGEgYmluYXJ5LAogYXMgdGhhdCBpcyB3aGVyZSB0aGUgb2ZmaWNpYWwgZG93bmxvYWQgbGluayBsaW5rcyB0by4gUHJlZmVyYWJseQotaXQgc2hvdWxkIHVzZSBsaW51eCBsaW5lIGVuZGluZ3MuIEFsbCBub24tYnVuZGxlZCByZXBvcnRlcnMgKEF1dG9tYWtlLCBUQVAsCi1UZWFtQ2l0eSwgU29uYXJRdWJlKSBzaG91bGQgYWxzbyBiZSBhdHRhY2hlZCBhcyBiaW5hcmllcywgYXMgdGhleSBtaWdodCBiZQoraXQgc2hvdWxkIHVzZSBsaW51eCBsaW5lIGVuZGluZ3MuIEFsbCBub24tYnVuZGxlZCByZXBvcnRlcnMgKEF1dG9tYWtlLAorVEFQLCBUZWFtQ2l0eSkgc2hvdWxkIGFsc28gYmUgYXR0YWNoZWQgYXMgYmluYXJpZXMsIGFzIHRoZXkgbWlnaHQgYmUKIGRlcGVuZGVudCBvbiBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIHNpbmdsZS1pbmNsdWRlIGhlYWRlci4KIAogU2luY2UgMi41LjAsIHRoZSByZWxlYXNlIHRhZyBhbmQgdGhlICJiaW5hcmllcyIgKGhlYWRlcnMpIHNob3VsZCBiZSBQR1AKQEAgLTY3LDcgKzY3LDYgQEAKICQgZ3BnMiAtLWFybW9yIC0tb3V0cHV0IGNhdGNoX3JlcG9ydGVyX2F1dG9tYWtlLmhwcC5hc2MgLS1kZXRhY2gtc2lnIGNhdGNoX3JlcG9ydGVyX2F1dG9tYWtlLmhwcAogJCBncGcyIC0tYXJtb3IgLS1vdXRwdXQgY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwLmFzYyAtLWRldGFjaC1zaWcgY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwCiAkIGdwZzIgLS1hcm1vciAtLW91dHB1dCBjYXRjaF9yZXBvcnRlcl90YXAuaHBwLmFzYyAtLWRldGFjaC1zaWcgY2F0Y2hfcmVwb3J0ZXJfdGFwLmhwcAotJCBncGcyIC0tYXJtb3IgLS1vdXRwdXQgY2F0Y2hfcmVwb3J0ZXJfc29uYXJxdWJlLmhwcC5hc2MgLS1kZXRhY2gtc2lnIGNhdGNoX3JlcG9ydGVyX3NvbmFycXViZS5ocHAKIGBgYAogCiBfR1BHIGRvZXMgbm90IHN1cHBvcnQgc2lnbmluZyBtdWx0aXBsZSBmaWxlcyBpbiBzaW5nbGUgaW52b2NhdGlvbi5fCmRpZmYgLS1naXQgYS9kb2NzL3JlcG9ydGVycy5tZCBiL2RvY3MvcmVwb3J0ZXJzLm1kCmluZGV4IGEzM2U1NWIuLjMyYjM0MTkgMTAwNjQ0Ci0tLSBhL2RvY3MvcmVwb3J0ZXJzLm1kCisrKyBiL2RvY3MvcmVwb3J0ZXJzLm1kCkBAIC0yOSw3ICsyOSw2IEBACiBVc2UgdGhpcyB3aGVuIGJ1aWxkaW5nIGFzIHBhcnQgb2YgYSBUZWFtQ2l0eSBidWlsZCB0byBzZWUgcmVzdWx0cyBhcyB0aGV5IGhhcHBlbiAoW2NvZGUgZXhhbXBsZV0oLi4vZXhhbXBsZXMvMjA3LVJwdC1UZWFtQ2l0eVJlcG9ydGVyLmNwcCkpLgogKiBgdGFwYCB3cml0ZXMgaW4gdGhlIFRBUCAoW1Rlc3QgQW55dGhpbmcgUHJvdG9jb2xdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Rlc3RfQW55dGhpbmdfUHJvdG9jb2wpKSBmb3JtYXQuCiAqIGBhdXRvbWFrZWAgd3JpdGVzIGluIGEgZm9ybWF0IHRoYXQgY29ycmVzcG9uZCB0byBbYXV0b21ha2UgIC50cnNdKGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b21ha2UvbWFudWFsL2h0bWxfbm9kZS9Mb2ctZmlsZXMtZ2VuZXJhdGlvbi1hbmQtdGVzdC1yZXN1bHRzLXJlY29yZGluZy5odG1sKSBmaWxlcwotKiBgc29uYXJxdWJlYCB3cml0ZXMgdGhlIFtTb25hclF1YmUgR2VuZXJpYyBUZXN0IERhdGFdKGh0dHBzOi8vZG9jcy5zb25hcnF1YmUub3JnL2xhdGVzdC9hbmFseXNpcy9nZW5lcmljLXRlc3QvKSBYTUwgZm9ybWF0LgogCiBZb3Ugc2VlIHdoYXQgcmVwb3J0ZXJzIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgY29tbWFuZCBsaW5lIGJ5IHJ1bm5pbmcgd2l0aCBgLS1saXN0LXJlcG9ydGVyc2AuCiAKZGlmZiAtLWdpdCBhL2RvY3Mvc2xvdy1jb21waWxlcy5tZCBiL2RvY3Mvc2xvdy1jb21waWxlcy5tZAppbmRleCAyMzBmNTMzLi4wODUzYjY2IDEwMDY0NAotLS0gYS9kb2NzL3Nsb3ctY29tcGlsZXMubWQKKysrIGIvZG9jcy9zbG93LWNvbXBpbGVzLm1kCkBAIC0yMiw3ICsyMiw3IEBACiAKIEJlY2F1c2UgQ2F0Y2ggaXMgaW1wbGVtZW50ZWQgKmVudGlyZWx5KiBpbiBoZWFkZXJzIHlvdSBtaWdodCB0aGluayB0aGF0IHRoZSB3aG9sZSBvZiBDYXRjaCBtdXN0IGJlIGNvbXBpbGVkIGludG8gZXZlcnkgdHJhbnNsYXRpb24gdW5pdCB0aGF0IHVzZXMgaXQhIEFjdHVhbGx5IGl0J3Mgbm90IHF1aXRlIGFzIGJhZCBhcyB0aGF0LiBDYXRjaCBtaXRpZ2F0ZXMgdGhpcyBzaXR1YXRpb24gYnkgZWZmZWN0aXZlbHkgbWFpbnRhaW5pbmcgdGhlIHRyYWRpdGlvbmFsIHNlcGFyYXRpb24gYmV0d2VlbiB0aGUgaW1wbGVtZW50YXRpb24gY29kZSBhbmQgZGVjbGFyYXRpb25zLiBJbnRlcm5hbGx5IHRoZSBpbXBsZW1lbnRhdGlvbiBjb2RlIGlzIHByb3RlY3RlZCBieSBgYGAjaWZkZWZgYGBzIGFuZCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGludG8gb25seSBvbmUgdHJhbnNsYXRpb24gdW5pdC4gVGhpcyB0cmFuc2xhdGlvbiB1bml0IGlzIHRoYXQgb25lIHRoYXQgYGBgI2RlZmluZWBgYHMgYGBgQ0FUQ0hfQ09ORklHX01BSU5gYGAgb3IgYGBgQ0FUQ0hfQ09ORklHX1JVTk5FUmBgYC4gTGV0J3MgY2FsbCB0aGlzIHRoZSBtYWluIHNvdXJjZSBmaWxlLgogCi1BcyBhIHJlc3VsdCB0aGUgbWFpbiBzb3VyY2UgZmlsZSAqZG9lcyogY29tcGlsZSB0aGUgd2hvbGUgb2YgQ2F0Y2ggZXZlcnkgdGltZSEgU28gaXQgbWFrZXMgc2Vuc2UgdG8gZGVkaWNhdGUgdGhpcyBmaWxlIHRvICpvbmx5KiBgYGAjZGVmaW5lYGBgLWluZyB0aGUgaWRlbnRpZmllciBhbmQgYGBgI2luY2x1ZGVgYGAtaW5nIENhdGNoIChhbmQgaW1wbGVtZW50aW5nIHRoZSBydW5uZXIgY29kZSwgaWYgeW91J3JlIGRvaW5nIHRoYXQpLiBLZWVwIGFsbCB5b3VyIHRlc3QgY2FzZXMgaW4gb3RoZXIgZmlsZXMuIFRoaXMgd2F5IHlvdSB3b24ndCBwYXkgdGhlIHJlY29tcGlsYXRpb24gY29zdCBmb3IgdGhlIHdob2xlIG9mIENhdGNoLgorQXMgYSByZXN1bHQgdGhlIG1haW4gc291cmNlIGZpbGUgKmRvZXMqIGNvbXBpbGUgdGhlIHdob2xlIG9mIENhdGNoIGV2ZXJ5IHRpbWUhIFNvIGl0IG1ha2VzIHNlbnNlIHRvIGRlZGljYXRlIHRoaXMgZmlsZSB0byAqb25seSogYGBgI2RlZmluZWBgYC1pbmcgdGhlIGlkZW50aWZpZXIgYW5kIGBgYCNpbmNsdWRlYGBgLWluZyBDYXRjaCAoYW5kIGltcGxlbWVudGluZyB0aGUgcnVubmVyIGNvZGUsIGlmIHlvdSdyZSBkb2luZyB0aGF0KS4gS2VlcCBhbGwgeW91ciB0ZXN0IGNhc2VzIGluIG90aGVyIGZpbGVzLiBUaGlzIHdheSB5b3Ugd29uJ3QgcGF5IHRoZSByZWNvbXBpbGF0aW9uIGNvc3QgZm9yIHRoZSB3aG9sZSBvZiBDYXRjaCAKIAogIyMgUHJhY3RpY2FsIGV4YW1wbGUKIEFzc3VtZSB5b3UgaGF2ZSB0aGUgYEZhY3RvcmlhbGAgZnVuY3Rpb24gZnJvbSB0aGUgW3R1dG9yaWFsXSh0dXRvcmlhbC5tZCN0b3ApIGluIGBmYWN0b3JpYWwuY3BwYCAod2l0aCBmb3J3YXJkIGRlY2xhcmF0aW9uIGluIGBmYWN0b3JpYWwuaGApIGFuZCB3YW50IHRvIHRlc3QgaXQgYW5kIGtlZXAgdGhlIGNvbXBpbGUgdGltZXMgZG93biB3aGVuIGFkZGluZyBuZXcgdGVzdHMuIFRoZW4geW91IHNob3VsZCBoYXZlIDIgZmlsZXMsIGB0ZXN0cy1tYWluLmNwcGAgYW5kIGB0ZXN0cy1mYWN0b3JpYWwuY3BwYDoKQEAgLTUxLDE1ICs1MSwxNCBAQAogCiBgYGAKICQgZysrIHRlc3RzLW1haW4uY3BwIC1jCi0kIGcrKyBmYWN0b3JpYWwuY3BwIC1jCi0kIGcrKyB0ZXN0cy1tYWluLm8gZmFjdG9yaWFsLm8gdGVzdHMtZmFjdG9yaWFsLmNwcCAtbyB0ZXN0cyAmJiAuL3Rlc3RzIC1yIGNvbXBhY3QKKyQgZysrIHRlc3RzLW1haW4ubyB0ZXN0cy1mYWN0b3JpYWwuY3BwIC1vIHRlc3RzICYmIC4vdGVzdHMgLXIgY29tcGFjdAogUGFzc2VkIDEgdGVzdCBjYXNlIHdpdGggNCBhc3NlcnRpb25zLgogYGBgCiAKIE5vdywgdGhlIG5leHQgdGltZSB3ZSBjaGFuZ2UgdGhlIGZpbGUgYHRlc3RzLWZhY3RvcmlhbC5jcHBgIChzYXkgd2UgYWRkIGBSRVFVSVJFKCBGYWN0b3JpYWwoMCkgPT0gMSlgKSwgaXQgaXMgZW5vdWdoIHRvIHJlY29tcGlsZSB0aGUgdGVzdHMgaW5zdGVhZCBvZiByZWNvbXBpbGluZyBtYWluIGFzIHdlbGw6CiAKIGBgYAotJCBnKysgdGVzdHMtbWFpbi5vIGZhY3RvcmlhbC5vIHRlc3RzLWZhY3RvcmlhbC5jcHAgLW8gdGVzdHMgJiYgLi90ZXN0cyAtciBjb21wYWN0CiskIGcrKyB0ZXN0cy1tYWluLm8gdGVzdHMtZmFjdG9yaWFsLmNwcCAtbyB0ZXN0cyAmJiAuL3Rlc3RzIC1yIGNvbXBhY3QKIHRlc3RzLWZhY3RvcmlhbC5jcHA6MTE6IGZhaWxlZDogRmFjdG9yaWFsKDApID09IDEgZm9yOiAwID09IDEKIEZhaWxlZCAxIHRlc3QgY2FzZSwgZmFpbGVkIDEgYXNzZXJ0aW9uLgogYGBgCmRpZmYgLS1naXQgYS9kb2NzL3Rlc3QtY2FzZXMtYW5kLXNlY3Rpb25zLm1kIGIvZG9jcy90ZXN0LWNhc2VzLWFuZC1zZWN0aW9ucy5tZAppbmRleCA1M2Y5ZTE1Li42MmE4MDVmIDEwMDY0NAotLS0gYS9kb2NzL3Rlc3QtY2FzZXMtYW5kLXNlY3Rpb25zLm1kCisrKyBiL2RvY3MvdGVzdC1jYXNlcy1hbmQtc2VjdGlvbnMubWQKQEAgLTYsNyArNiw2IEBACiBbVGFnIGFsaWFzZXNdKCN0YWctYWxpYXNlcyk8YnI+CiBbQkRELXN0eWxlIHRlc3QgY2FzZXNdKCNiZGQtc3R5bGUtdGVzdC1jYXNlcyk8YnI+CiBbVHlwZSBwYXJhbWV0cmlzZWQgdGVzdCBjYXNlc10oI3R5cGUtcGFyYW1ldHJpc2VkLXRlc3QtY2FzZXMpPGJyPgotW1NpZ25hdHVyZSBiYXNlZCBwYXJhbWV0cmlzZWQgdGVzdCBjYXNlc10oI3NpZ25hdHVyZS1iYXNlZC1wYXJhbWV0cmlzZWQtdGVzdC1jYXNlcyk8YnI+CiAKIFdoaWxlIENhdGNoIGZ1bGx5IHN1cHBvcnRzIHRoZSB0cmFkaXRpb25hbCwgeFVuaXQsIHN0eWxlIG9mIGNsYXNzLWJhc2VkIGZpeHR1cmVzIGNvbnRhaW5pbmcgdGVzdCBjYXNlIG1ldGhvZHMgdGhpcyBpcyBub3QgdGhlIHByZWZlcnJlZCBzdHlsZS4KIApAQCAtODQsMTMgKzgzLDEwIEBACiAKIFRoZXNlIG1hY3JvcyBtYXAgb250byBgYGBTRUNUSU9OYGBgcyBleGNlcHQgdGhhdCB0aGUgc2VjdGlvbiBuYW1lcyBhcmUgdGhlIF9zb21ldGhpbmdfcyBwcmVmaXhlZCBieSAiZ2l2ZW46ICIsICJ3aGVuOiAiIG9yICJ0aGVuOiAiIHJlc3BlY3RpdmVseS4KIAotKiAqKkFORF9HSVZFTigqKiBfc29tZXRoaW5nXyAqKikqKgogKiAqKkFORF9XSEVOKCoqIF9zb21ldGhpbmdfICoqKSoqCiAqICoqQU5EX1RIRU4oKiogX3NvbWV0aGluZ18gKiopKioKIAotU2ltaWxhciB0byBgYGBHSVZFTmBgYCwgYGBgV0hFTmBgYCBhbmQgYGBgVEhFTmBgYCBleGNlcHQgdGhhdCB0aGUgcHJlZml4ZXMgc3RhcnQgd2l0aCAiYW5kICIuIFRoZXNlIGFyZSB1c2VkIHRvIGNoYWluIGBgYEdJVkVOYGBgcywgYGBgV0hFTmBgYHMgYW5kIGBgYFRIRU5gYGBzIHRvZ2V0aGVyLgotCi0+IGBBTkRfR0lWRU5gIHdhcyBbaW50cm9kdWNlZF0oaHR0cHM6Ly9naXRodWIuY29tL2NhdGNob3JnL0NhdGNoMi9pc3N1ZXMvMTM2MCkgaW4gQ2F0Y2ggMi40LjAuCitTaW1pbGFyIHRvIGBgYFdIRU5gYGAgYW5kIGBgYFRIRU5gYGAgZXhjZXB0IHRoYXQgdGhlIHByZWZpeGVzIHN0YXJ0IHdpdGggImFuZCAiLiBUaGVzZSBhcmUgdXNlZCB0byBjaGFpbiBgYGBXSEVOYGBgcyBhbmQgYGBgVEhFTmBgYHMgdG9nZXRoZXIuCiAKIFdoZW4gYW55IG9mIHRoZXNlIG1hY3JvcyBhcmUgdXNlZCB0aGUgY29uc29sZSByZXBvcnRlciByZWNvZ25pc2VzIHRoZW0gYW5kIGZvcm1hdHMgdGhlIHRlc3QgY2FzZSBoZWFkZXIgc3VjaCB0aGF0IHRoZSBHaXZlbnMsIFdoZW5zIGFuZCBUaGVucyBhcmUgYWxpZ25lZCB0byBhaWQgcmVhZGFiaWxpdHkuCiAKQEAgLTk5LDEzICs5NSwxMSBAQAogIyMgVHlwZSBwYXJhbWV0cmlzZWQgdGVzdCBjYXNlcwogCiBJbiBhZGRpdGlvbiB0byBgVEVTVF9DQVNFYHMsIENhdGNoMiBhbHNvIHN1cHBvcnRzIHRlc3QgY2FzZXMgcGFyYW1ldHJpc2VkCi1ieSB0eXBlcywgaW4gdGhlIGZvcm0gb2YgYFRFTVBMQVRFX1RFU1RfQ0FTRWAsCi1gVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VgIGFuZCBgVEVNUExBVEVfTElTVF9URVNUX0NBU0VgLgorYnkgdHlwZXMsIGluIHRoZSBmb3JtIG9mIGBURU1QTEFURV9URVNUX0NBU0VgIGFuZAorYFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFYC4KIAogKiAqKlRFTVBMQVRFX1RFU1RfQ0FTRSgqKiBfdGVzdCBuYW1lXyAsIF90YWdzXywgIF90eXBlMV8sIF90eXBlMl8sIC4uLiwgX3R5cGVuXyAqKikqKgogCi0+IFtJbnRyb2R1Y2VkXShodHRwczovL2dpdGh1Yi5jb20vY2F0Y2hvcmcvQ2F0Y2gyL2lzc3Vlcy8xNDM3KSBpbiBDYXRjaCAyLjUuMC4KLQogX3Rlc3QgbmFtZV8gYW5kIF90YWdfIGFyZSBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZXkgYXJlIGluIGBURVNUX0NBU0VgLAogd2l0aCB0aGUgZGlmZmVyZW5jZSB0aGF0IHRoZSB0YWcgc3RyaW5nIG11c3QgYmUgcHJvdmlkZWQgKGhvd2V2ZXIsIGl0CiBjYW4gYmUgZW1wdHkpLiBfdHlwZTFfIHRocm91Z2ggX3R5cGVuXyBpcyB0aGUgbGlzdCBvZiB0eXBlcyBmb3Igd2hpY2gKQEAgLTE1Niw4ICsxNTAsNiBAQAogCiAqICoqVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoKiogX3Rlc3QgbmFtZV8gLCBfdGFnc18sIChfdGVtcGxhdGUtdHlwZTFfLCBfdGVtcGxhdGUtdHlwZTJfLCAuLi4sIF90ZW1wbGF0ZS10eXBlbl8pLCAoX3RlbXBsYXRlLWFyZzFfLCBfdGVtcGxhdGUtYXJnMl8sIC4uLiwgX3RlbXBsYXRlLWFyZ21fKSAqKikqKgogCi0+IFtJbnRyb2R1Y2VkXShodHRwczovL2dpdGh1Yi5jb20vY2F0Y2hvcmcvQ2F0Y2gyL2lzc3Vlcy8xNDY4KSBpbiBDYXRjaCAyLjYuMC4KLQogX3RlbXBsYXRlLXR5cGUxXyB0aHJvdWdoIF90ZW1wbGF0ZS10eXBlbl8gaXMgbGlzdCBvZiB0ZW1wbGF0ZSB0ZW1wbGF0ZQogdHlwZXMgd2hpY2ggc2hvdWxkIGJlIGNvbWJpbmVkIHdpdGggZWFjaCBvZiBfdGVtcGxhdGUtYXJnMV8gdGhyb3VnaAogIF90ZW1wbGF0ZS1hcmdtXywgcmVzdWx0aW5nIGluIF9uICogbV8gdGVzdCBjYXNlcy4gSW5zaWRlIHRoZSB0ZXN0IGNhc2UsCkBAIC0xOTksNzcgKzE5MSw2IEBACiBpbiBzaW5nbGUgYFRFTVBMQVRFX1RFU1RfQ0FTRWAgb3IgYFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFYCwgdGhlIGxpbWl0CiBpcyB2ZXJ5IGhpZ2ggYW5kIHNob3VsZCBub3QgYmUgZW5jb3VudGVyZWQgaW4gcHJhY3RpY2UuXwogCi0qICoqVEVNUExBVEVfTElTVF9URVNUX0NBU0UoKiogX3Rlc3QgbmFtZV8sIF90YWdzXywgX3R5cGUgbGlzdF8gKiopKioKLQotPiBbSW50cm9kdWNlZF0oaHR0cHM6Ly9naXRodWIuY29tL2NhdGNob3JnL0NhdGNoMi9pc3N1ZXMvMTYyNykgaW4gQ2F0Y2ggMi45LjAuCi0KLV90eXBlIGxpc3RfIGlzIGEgZ2VuZXJpYyBsaXN0IG9mIHR5cGVzIG9uIHdoaWNoIHRlc3QgY2FzZSBzaG91bGQgYmUgaW5zdGFudGlhdGVkLgotTGlzdCBjYW4gYmUgYHN0ZDo6dHVwbGVgLCBgYm9vc3Q6Om1wbDo6bGlzdGAsIGBib29zdDo6bXAxMTo6bXBfbGlzdGAgb3IgYW55dGhpbmcgd2l0aAotYHRlbXBsYXRlIDx0eXBlbmFtZS4uLj5gIHNpZ25hdHVyZS4KLQotVGhpcyBhbGxvd3MgeW91IHRvIHJldXNlIHRoZSBfdHlwZSBsaXN0XyBpbiBtdWx0aXBsZSB0ZXN0IGNhc2VzLgotCi1FeGFtcGxlOgotYGBgY3BwCi11c2luZyBNeVR5cGVzID0gc3RkOjp0dXBsZTxpbnQsIGNoYXIsIGZsb2F0PjsKLVRFTVBMQVRFX0xJU1RfVEVTVF9DQVNFKCJUZW1wbGF0ZSB0ZXN0IGNhc2Ugd2l0aCB0ZXN0IHR5cGVzIHNwZWNpZmllZCBpbnNpZGUgc3RkOjp0dXBsZSIsICJbdGVtcGxhdGVdW2xpc3RdIiwgTXlUeXBlcykKLXsKLSAgICBSRVFVSVJFKHNpemVvZihUZXN0VHlwZSkgPiAwKTsKLX0KLWBgYAotCi0KLSMjIFNpZ25hdHVyZSBiYXNlZCBwYXJhbWV0cmlzZWQgdGVzdCBjYXNlcwotCi0+IFtJbnRyb2R1Y2VkXShodHRwczovL2dpdGh1Yi5jb20vY2F0Y2hvcmcvQ2F0Y2gyL2lzc3Vlcy8xNjA5KSBpbiBDYXRjaCAyLjguMC4KLQotSW4gYWRkaXRpb24gdG8gW3R5cGUgcGFyYW1ldHJpc2VkIHRlc3QgY2FzZXNdKCN0eXBlLXBhcmFtZXRyaXNlZC10ZXN0LWNhc2VzKSBDYXRjaDIgYWxzbyBzdXBwb3J0cwotc2lnbmF0dXJlIGJhc2UgcGFyYW1ldHJpc2VkIHRlc3QgY2FzZXMsIGluIGZvcm0gb2YgYFRFTVBMQVRFX1RFU1RfQ0FTRV9TSUdgIGFuZCBgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfU0lHYC4KLVRoZXNlIHRlc3QgY2FzZXMgaGF2ZSBzaW1pbGFyIHN5bnRheCBsaWtlIFt0eXBlIHBhcmFtZXRyaXNlZCB0ZXN0IGNhc2VzXSgjdHlwZS1wYXJhbWV0cmlzZWQtdGVzdC1jYXNlcyksIHdpdGggb25lCi1hZGRpdGlvbmFsIHBvc2l0aW9uYWwgYXJndW1lbnQgd2hpY2ggc3BlY2lmaWVzIHRoZSBzaWduYXR1cmUuCi0KLSMjIyBTaWduYXR1cmUKLVNpZ25hdHVyZSBoYXMgc29tZSBzdHJpY3QgcnVsZXMgZm9yIHRoZXNlIHRlc3RzIGNhc2VzIHRvIHdvcmsgcHJvcGVybHk6Ci0qIHNpZ25hdHVyZSB3aXRoIG11bHRpcGxlIHRlbXBsYXRlIHBhcmFtZXRlcnMgZS5nLiBgdHlwZW5hbWUgVCwgc2l6ZV90IFNgIG11c3QgaGF2ZSB0aGlzIGZvcm1hdCBpbiB0ZXN0IGNhc2UgZGVjbGFyYXRpb24KLSAgYCgodHlwZW5hbWUgVCwgc2l6ZV90IFMpLCBULCBTKWAKLSogc2lnbmF0dXJlIHdpdGggdmFyaWFkaWMgdGVtcGxhdGUgYXJndW1lbnRzIGUuZy4gYHR5cGVuYW1lIFQsIHNpemVfdCBTLCB0eXBlbmFtZS4uLlRzYCBtdXN0IGhhdmUgdGhpcyBmb3JtYXQgaW4gdGVzdCBjYXNlIGRlY2xhcmF0aW9uCi0gIGAoKHR5cGVuYW1lIFQsIHNpemVfdCBTLCB0eXBlbmFtZS4uLlRzKSwgVCwgUywgVHMuLi4pYAotKiBzaWduYXR1cmUgd2l0aCBzaW5nbGUgbm9uIHR5cGUgdGVtcGxhdGUgcGFyYW1ldGVyIGUuZy4gYGludCBWYCBtdXN0IGhhdmUgdGhpcyBmb3JtYXQgaW4gdGVzdCBjYXNlIGRlY2xhcmF0aW9uIGAoKGludCBWKSwgVilgCi0qIHNpZ25hdHVyZSB3aXRoIHNpbmdsZSB0eXBlIHRlbXBsYXRlIHBhcmFtZXRlciBlLmcuIGB0eXBlbmFtZSBUYCBzaG91bGQgbm90IGJlIHVzZWQgYXMgaXQgaXMgaW4gZmFjdCBgVEVNUExBVEVfVEVTVF9DQVNFYAotCi1DdXJyZW50bHkgQ2F0Y2gyIHN1cHBvcnQgdXAgdG8gMTEgdGVtcGxhdGUgcGFyYW1ldGVycyBpbiBzaWduYXR1cmUKLQotIyMjIEV4YW1wbGVzCi0KLSogKipURU1QTEFURV9URVNUX0NBU0VfU0lHKCoqIF90ZXN0IG5hbWVfICwgX3RhZ3NfLCAgX3NpZ25hdHVyZV8sIF90eXBlMV8sIF90eXBlMl8sIC4uLiwgX3R5cGVuXyAqKikqKgotCi1JbnNpZGUgYFRFTVBMQVRFX1RFU1RfQ0FTRV9TSUdgIHRlc3QgY2FzZSB5b3UgY2FuIHVzZSB0aGUgbmFtZXMgb2YgdGVtcGxhdGUgcGFyYW1ldGVycyBhcyBkZWZpbmVkIGluIF9zaWduYXR1cmVfLiAKLQotYGBgY3BwCi1URU1QTEFURV9URVNUX0NBU0VfU0lHKCJUZW1wbGF0ZVRlc3RTaWc6IGFycmF5cyBjYW4gYmUgY3JlYXRlZCBmcm9tIE5UVFAgYXJndW1lbnRzIiwgIlt2ZWN0b3JdW3RlbXBsYXRlXVtudHRwXSIsCi0gICgodHlwZW5hbWUgVCwgaW50IFYpLCBULCBWKSwgKGludCw1KSwgKGZsb2F0LDQpLCAoc3RkOjpzdHJpbmcsMTUpLCAoKHN0ZDo6dHVwbGU8aW50LCBmbG9hdD4pLCA2KSkgewotCi0gICAgc3RkOjphcnJheTxULCBWPiB2OwotICAgIFJFUVVJUkUodi5zaXplKCkgPiAxKTsKLX0KLWBgYAotCi0qICoqVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfU0lHKCoqIF90ZXN0IG5hbWVfICwgX3RhZ3NfLCBfc2lnbmF0dXJlXywgKF90ZW1wbGF0ZS10eXBlMV8sIF90ZW1wbGF0ZS10eXBlMl8sIC4uLiwgX3RlbXBsYXRlLXR5cGVuXyksIChfdGVtcGxhdGUtYXJnMV8sIF90ZW1wbGF0ZS1hcmcyXywgLi4uLCBfdGVtcGxhdGUtYXJnbV8pICoqKSoqCi0KLWBgYGNwcAotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgUz4KLXN0cnVjdCBCYXIgewotICAgIHNpemVfdCBzaXplKCkgeyByZXR1cm4gUzsgfQotfTsKLQotVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfU0lHKCJBIFRlbXBsYXRlIHByb2R1Y3QgdGVzdCBjYXNlIHdpdGggYXJyYXkgc2lnbmF0dXJlIiwgIlt0ZW1wbGF0ZV1bcHJvZHVjdF1bbnR0cF0iLCAoKHR5cGVuYW1lIFQsIHNpemVfdCBTKSwgVCwgUyksIChzdGQ6OmFycmF5LCBCYXIpLCAoKGludCwgOSksIChmbG9hdCwgNDIpKSkgewotICAgIFRlc3RUeXBlIHg7Ci0gICAgUkVRVUlSRSh4LnNpemUoKSA+IDApOwotfQotYGBgCi0KLQogLS0tCiAKIFtIb21lXShSZWFkbWUubWQjdG9wKQpkaWZmIC0tZ2l0IGEvZG9jcy90ZXN0LWZpeHR1cmVzLm1kIGIvZG9jcy90ZXN0LWZpeHR1cmVzLm1kCmluZGV4IDgzMmJiYTEuLjZiMjljZTYgMTAwNjQ0Ci0tLSBhL2RvY3MvdGVzdC1maXh0dXJlcy5tZAorKysgYi9kb2NzL3Rlc3QtZml4dHVyZXMubWQKQEAgLTEsOCArMSw2IEBACiA8YSBpZD0idG9wIj48L2E+CiAjIFRlc3QgZml4dHVyZXMKIAotIyMgRGVmaW5pbmcgdGVzdCBmaXh0dXJlcwotCiBBbHRob3VnaCBDYXRjaCBhbGxvd3MgeW91IHRvIGdyb3VwIHRlc3RzIHRvZ2V0aGVyIGFzIHNlY3Rpb25zIHdpdGhpbiBhIHRlc3QgY2FzZSwgaXQgY2FuIHN0aWxsIGJlIGNvbnZlbmllbnQsIHNvbWV0aW1lcywgdG8gZ3JvdXAgdGhlbSB1c2luZyBhIG1vcmUgdHJhZGl0aW9uYWwgdGVzdCBmaXh0dXJlLiBDYXRjaCBmdWxseSBzdXBwb3J0cyB0aGlzIHRvby4gWW91IGRlZmluZSB0aGUgdGVzdCBmaXh0dXJlIGFzIGEgc2ltcGxlIHN0cnVjdHVyZToKIAogYGBgYysrCkBAIC04Niw1OCArODQsNiBAQAogaW4gc2luZ2xlIGBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EYCBvciBgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EYCwKIHRoZSBsaW1pdCBpcyB2ZXJ5IGhpZ2ggYW5kIHNob3VsZCBub3QgYmUgZW5jb3VudGVyZWQgaW4gcHJhY3RpY2UuXwogCi0jIyBTaWduYXR1cmUtYmFzZWQgcGFyYW1ldHJpc2VkIHRlc3QgZml4dHVyZXMKLQotPiBbSW50cm9kdWNlZF0oaHR0cHM6Ly9naXRodWIuY29tL2NhdGNob3JnL0NhdGNoMi9pc3N1ZXMvMTYwOSkgaW4gQ2F0Y2ggMi44LjAuCi0KLUNhdGNoMiBhbHNvIHByb3ZpZGVzIGBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJR2AgYW5kIGBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHYCB0byBzdXBwb3J0Ci1maXh0dXJlcyB1c2luZyBub24tdHlwZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLiBUaGVzZSB0ZXN0IGNhc2VzIHdvcmsgc2ltaWxhciB0byBgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRGAgYW5kIGBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RgLAotd2l0aCBhZGRpdGlvbmFsIHBvc2l0aW9uYWwgYXJndW1lbnQgZm9yIFtzaWduYXR1cmVdKHRlc3QtY2FzZXMtYW5kLXNlY3Rpb25zLm1kI3NpZ25hdHVyZS1iYXNlZC1wYXJhbWV0cmlzZWQtdGVzdC1jYXNlcykuCi0KLUV4YW1wbGU6Ci1gYGBjcHAKLXRlbXBsYXRlIDxpbnQgVj4KLXN0cnVjdCBOdHRwX0ZpeHR1cmV7Ci0gICAgaW50IHZhbHVlID0gVjsKLX07Ci0KLVRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKE50dHBfRml4dHVyZSwgIkEgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyIsICJbY2xhc3NdW3RlbXBsYXRlXVtudHRwXSIsKChpbnQgViksIFYpLCAxLCAzLCA2KSB7Ci0gICAgUkVRVUlSRShOdHRwX0ZpeHR1cmU8Vj46OnZhbHVlID4gMCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgVGVtcGxhdGVfRml4dHVyZV8yIHsKLSAgICBUZW1wbGF0ZV9GaXh0dXJlXzIoKSB7fQotCi0gICAgVCBtX2E7Ci19OwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgc2l6ZV90IFY+Ci1zdHJ1Y3QgVGVtcGxhdGVfRm9vXzIgewotICAgIHNpemVfdCBzaXplKCkgeyByZXR1cm4gVjsgfQotfTsKLQotVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyhUZW1wbGF0ZV9GaXh0dXJlXzIsICJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyIsICJbY2xhc3NdW3RlbXBsYXRlXVtwcm9kdWN0XVtudHRwXSIsICgodHlwZW5hbWUgVCwgc2l6ZV90IFMpLCBULCBTKSwoc3RkOjphcnJheSwgVGVtcGxhdGVfRm9vXzIpLCAoKGludCwyKSwgKGZsb2F0LDYpKSkKLXsKLSAgICBSRVFVSVJFKFRlbXBsYXRlX0ZpeHR1cmVfMjxUZXN0VHlwZT57fS5tX2Euc2l6ZSgpID49IDIpOwotfQotYGBgCi0KLSMjIFRlbXBsYXRlIGZpeHR1cmVzIHdpdGggdHlwZXMgc3BlY2lmaWVkIGluIHRlbXBsYXRlIHR5cGUgbGlzdHMKLQotQ2F0Y2gyIGFsc28gcHJvdmlkZXMgYFRFTVBMQVRFX0xJU1RfVEVTVF9DQVNFX01FVEhPRGAgdG8gc3VwcG9ydCB0ZW1wbGF0ZSBmaXh0dXJlcyB3aXRoIHR5cGVzIHNwZWNpZmllZCBpbgotdGVtcGxhdGUgdHlwZSBsaXN0cyBsaWtlIGBzdGQ6OnR1cGxlYCwgYGJvb3N0OjptcGw6Omxpc3RgIG9yIGBib29zdDo6bXAxMTo6bXBfbGlzdGAuIFRoaXMgdGVzdCBjYXNlIHdvcmtzIHRoZSBzYW1lIGFzIGBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EYCwKLW9ubHkgZGlmZmVyZW5jZSBpcyB0aGUgc291cmNlIG9mIHR5cGVzLiBUaGlzIGFsbG93cyB5b3UgdG8gcmV1c2UgdGhlIHRlbXBsYXRlIHR5cGUgbGlzdCBpbiBtdWx0aXBsZSB0ZXN0IGNhc2VzLgotCi1FeGFtcGxlOgotYGBgY3BwCi11c2luZyBNeVR5cGVzID0gc3RkOjp0dXBsZTxpbnQsIGNoYXIsIGRvdWJsZT47Ci1URU1QTEFURV9MSVNUX1RFU1RfQ0FTRV9NRVRIT0QoVGVtcGxhdGVfRml4dHVyZSwgIlRlbXBsYXRlIHRlc3QgY2FzZSBtZXRob2Qgd2l0aCB0ZXN0IHR5cGVzIHNwZWNpZmllZCBpbnNpZGUgc3RkOjp0dXBsZSIsICJbY2xhc3NdW3RlbXBsYXRlXVtsaXN0XSIsIE15VHlwZXMpCi17Ci0gICAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZTxUZXN0VHlwZT46Om1fYSA9PSAxICk7Ci19Ci1gYGAKLQogLS0tCiAKIFtIb21lXShSZWFkbWUubWQjdG9wKQpkaWZmIC0tZ2l0IGEvZG9jcy90b3N0cmluZy5tZCBiL2RvY3MvdG9zdHJpbmcubWQKaW5kZXggMTU2Yzg5NS4uOTMzZjJlNiAxMDA2NDQKLS0tIGEvZG9jcy90b3N0cmluZy5tZAorKysgYi9kb2NzL3Rvc3RyaW5nLm1kCkBAIC02LDkgKzYsNiBAQAogW0NhdGNoOjpTdHJpbmdNYWtlciBzcGVjaWFsaXNhdGlvbl0oI2NhdGNoc3RyaW5nbWFrZXItc3BlY2lhbGlzYXRpb24pPGJyPgogW0NhdGNoOjppc19yYW5nZSBzcGVjaWFsaXNhdGlvbl0oI2NhdGNoaXNfcmFuZ2Utc3BlY2lhbGlzYXRpb24pPGJyPgogW0V4Y2VwdGlvbnNdKCNleGNlcHRpb25zKTxicj4KLVtFbnVtc10oI2VudW1zKTxicj4KLVtGbG9hdGluZyBwb2ludCBwcmVjaXNpb25dKCNmbG9hdGluZy1wb2ludC1wcmVjaXNpb24pPGJyPgotCiAKIENhdGNoIG5lZWRzIHRvIGJlIGFibGUgdG8gY29udmVydCB0eXBlcyB5b3UgdXNlIGluIGFzc2VydGlvbnMgYW5kIGxvZ2dpbmcgZXhwcmVzc2lvbnMgaW50byBzdHJpbmdzIChmb3IgbG9nZ2luZyBhbmQgcmVwb3J0aW5nIHB1cnBvc2VzKS4KIE1vc3QgYnVpbHQtaW4gb3Igc3RkIHR5cGVzIGFyZSBzdXBwb3J0ZWQgb3V0IG9mIHRoZSBib3ggYnV0IHRoZXJlIGFyZSB0d28gd2F5cyB0aGF0IHlvdSBjYW4gdGVsbCBDYXRjaCBob3cgdG8gY29udmVydCB5b3VyIG93biB0eXBlcyAob3Igb3RoZXIsIHRoaXJkLXBhcnR5IHR5cGVzKSBpbnRvIHN0cmluZ3MuCkBAIC0xNyw3ICsxNCw3IEBACiAKIFRoaXMgaXMgdGhlIHN0YW5kYXJkIHdheSBvZiBwcm92aWRpbmcgc3RyaW5nIGNvbnZlcnNpb25zIGluIEMrKyAtIGFuZCB0aGUgY2hhbmNlcyBhcmUgeW91IG1heSBhbHJlYWR5IHByb3ZpZGUgdGhpcyBmb3IgeW91ciBvd24gcHVycG9zZXMuIElmIHlvdSdyZSBub3QgZmFtaWxpYXIgd2l0aCB0aGlzIGlkaW9tIGl0IGludm9sdmVzIHdyaXRpbmcgYSBmcmVlIGZ1bmN0aW9uIG9mIHRoZSBmb3JtOgogCi1gYGBjcHAKK2BgYAogc3RkOjpvc3RyZWFtJiBvcGVyYXRvciA8PCAoIHN0ZDo6b3N0cmVhbSYgb3MsIFQgY29uc3QmIHZhbHVlICkgewogICAgIG9zIDw8IGNvbnZlcnRNeVR5cGVUb1N0cmluZyggdmFsdWUgKTsKICAgICByZXR1cm4gb3M7CkBAIC0zMSw3ICsyOCw3IEBACiAjIyBDYXRjaDo6U3RyaW5nTWFrZXIgc3BlY2lhbGlzYXRpb24KIElmIHlvdSBkb24ndCB3YW50IHRvIHByb3ZpZGUgYW4gYGBgb3BlcmF0b3IgPDxgYGAgb3ZlcmxvYWQsIG9yIHlvdSB3YW50IHRvIGNvbnZlcnQgeW91ciB0eXBlIGRpZmZlcmVudGx5IGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB5b3UgY2FuIHByb3ZpZGUgYSBzcGVjaWFsaXphdGlvbiBmb3IgYENhdGNoOjpTdHJpbmdNYWtlcjxUPmA6CiAKLWBgYGNwcAorYGBgCiBuYW1lc3BhY2UgQ2F0Y2ggewogICAgIHRlbXBsYXRlPD4KICAgICBzdHJ1Y3QgU3RyaW5nTWFrZXI8VD4gewpAQCAtNjMsNzAgKzYwLDEyIEBACiAKIEJ5IGRlZmF1bHQgYWxsIGV4Y2VwdGlvbnMgZGVyaXZpbmcgZnJvbSBgc3RkOjpleGNlcHRpb25gIHdpbGwgYmUgdHJhbnNsYXRlZCB0byBzdHJpbmdzIGJ5IGNhbGxpbmcgdGhlIGB3aGF0KClgIG1ldGhvZC4gRm9yIGV4Y2VwdGlvbiB0eXBlcyB0aGF0IGRvIG5vdCBkZXJpdmUgZnJvbSBgc3RkOjpleGNlcHRpb25gIC0gb3IgaWYgYHdoYXQoKWAgZG9lcyBub3QgcmV0dXJuIGEgc3VpdGFibGUgc3RyaW5nIC0gdXNlIGBDQVRDSF9UUkFOU0xBVEVfRVhDRVBUSU9OYC4gVGhpcyBkZWZpbmVzIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB5b3VyIGV4Y2VwdGlvbiB0eXBlLCBieSByZWZlcmVuY2UsIGFuZCByZXR1cm5zIGEgc3RyaW5nLiBJdCBjYW4gYXBwZWFyIGFueXdoZXJlIGluIHRoZSBjb2RlIC0gaXQgZG9lc24ndCBoYXZlIHRvIGJlIGluIHRoZSBzYW1lIHRyYW5zbGF0aW9uIHVuaXQuIEZvciBleGFtcGxlOgogCi1gYGBjcHAKK2BgYAogQ0FUQ0hfVFJBTlNMQVRFX0VYQ0VQVElPTiggTXlUeXBlJiBleCApIHsKICAgICByZXR1cm4gZXgubWVzc2FnZSgpOwogfQogYGBgCiAKLSMjIEVudW1zCi0KLT4gSW50cm9kdWNlZCBpbiBDYXRjaCAyLjguMC4KLQotRW51bXMgdGhhdCBhbHJlYWR5IGhhdmUgYSBgPDxgIG92ZXJsb2FkIGZvciBgc3RkOjpvc3RyZWFtYCB3aWxsIGNvbnZlcnQgdG8gc3RyaW5ncyBhcyBleHBlY3RlZC4KLUlmIHlvdSBvbmx5IG5lZWQgdG8gY29udmVydCBlbnVtcyB0byBzdHJpbmdzIGZvciB0ZXN0IHJlcG9ydGluZyBwdXJwb3NlcyB5b3UgY2FuIHByb3ZpZGUgYSBgU3RyaW5nTWFrZXJgIHNwZWNpYWxpc2F0aW9ucyBhcyBhbnkgb3RoZXIgdHlwZS4KLUhvd2V2ZXIsIGFzIGEgY29udmVuaWVuY2UsIENhdGNoIHByb3ZpZGVzIHRoZSBgUkVHSVNURVJfRU5VTWAgaGVscGVyIG1hY3JvIHRoYXQgd2lsbCBnZW5lcmF0ZSB0aGUgYFN0cmluZ01ha2VyYCBzcGVjaWFsaWF0aW9uIGZvciB5b3Ugd2l0aCBtaW5pbWFsIGNvZGUuCi1TaW1wbHkgcHJvdmlkZSBpdCB0aGUgKHF1YWxpZmllZCkgZW51bSBuYW1lLCBmb2xsb3dlZCBieSBhbGwgdGhlIGVudW0gdmFsdWVzLCBhbmQgeW91J3JlIGRvbmUhCi0KLUUuZy4KLQotYGBgY3BwCi1lbnVtIGNsYXNzIEZydWl0cyB7IEJhbmFuYSwgQXBwbGUsIE1hbmdvIH07Ci0KLUNBVENIX1JFR0lTVEVSX0VOVU0oIEZydWl0cywgRnJ1aXRzOjpCYW5hbmEsIEZydWl0czo6QXBwbGUsIEZydWl0czo6TWFuZ28gKQotCi1URVNUX0NBU0UoKSB7Ci0gICAgUkVRVUlSRSggRnJ1aXRzOjpNYW5nbyA9PSBGcnVpdHM6OkFwcGxlICk7Ci19Ci1gYGAKLQotLi4uIG9yIGlmIHRoZSBlbnVtIGlzIGluIGEgbmFtZXNwYWNlOgotYGBgY3BwCi1uYW1lc3BhY2UgQmlrZXNoZWQgewotICAgIGVudW0gY2xhc3MgQ29sb3VycyB7IFJlZCwgR3JlZW4sIEJsdWUgfTsKLX0KLQotLy8gSW1wb3J0YW50ITogVGhpcyBtYWNybyBtdXN0IGFwcGVhciBhdCB0b3AgbGV2ZWwgc2NvcGUgLSBub3QgaW5zaWRlIGEgbmFtZXNwYWNlCi0vLyBZb3UgY2FuIGZ1bGx5IHF1YWxpZnkgdGhlIG5hbWVzLCBvciB1c2UgYSB1c2luZyBpZiB5b3UgcHJlZmVyCi1DQVRDSF9SRUdJU1RFUl9FTlVNKCBCaWtlc2hlZDo6Q29sb3VycywKLSAgICBCaWtlc2hlZDo6Q29sb3Vyczo6UmVkLAotICAgIEJpa2VzaGVkOjpDb2xvdXJzOjpHcmVlbiwKLSAgICBCaWtlc2hlZDo6Q29sb3Vyczo6Qmx1ZSApCi0KLVRFU1RfQ0FTRSgpIHsKLSAgICBSRVFVSVJFKCBCaWtlc2hlZDo6Q29sb3Vyczo6UmVkID09IEJpa2VzaGVkOjpDb2xvdXJzOjpCbHVlICk7Ci19Ci1gYGAKLQotIyMgRmxvYXRpbmcgcG9pbnQgcHJlY2lzaW9uCi0KLT4gW0ludHJvZHVjZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jYXRjaG9yZy9DYXRjaDIvaXNzdWVzLzE2MTQpIGluIENhdGNoIDIuOC4wLgotCi1DYXRjaCBwcm92aWRlcyBhIGJ1aWx0LWluIGBTdHJpbmdNYWtlcmAgc3BlY2lhbGl6YXRpb24gZm9yIGJvdGggYGZsb2F0YAotYW5kIGBkb3VibGVgLiBCeSBkZWZhdWx0LCBpdCB1c2VzIHdoYXQgd2UgdGhpbmsgaXMgYSByZWFzb25hYmxlIHByZWNpc2lvbiwKLWJ1dCB5b3UgY2FuIGN1c3RvbWl6ZSBpdCBieSBtb2RpZnlpbmcgdGhlIGBwcmVjaXNpb25gIHN0YXRpYyB2YXJpYWJsZQotaW5zaWRlIHRoZSBgU3RyaW5nTWFrZXJgIHNwZWNpYWxpemF0aW9uLCBsaWtlIHNvOgotCi1gYGBjcHAKLSAgICAgICAgQ2F0Y2g6OlN0cmluZ01ha2VyPGZsb2F0Pjo6cHJlY2lzaW9uID0gMTU7Ci0gICAgICAgIGNvbnN0IGZsb2F0IHRlc3RGbG9hdDEgPSAxLjEyMzQ1Njc4OTAxMjM0NTY3ODk5ZjsKLSAgICAgICAgY29uc3QgZmxvYXQgdGVzdEZsb2F0MiA9IDEuMTIzNDU2Nzg5OTEyMzQ1Njc4OTlmOwotICAgICAgICBSRVFVSVJFKHRlc3RGbG9hdDEgPT0gdGVzdEZsb2F0Mik7Ci1gYGAKLQotVGhpcyBhc3NlcnRpb24gd2lsbCBmYWlsIGFuZCBwcmludCBvdXQgdGhlIGB0ZXN0RmxvYXQxYCBhbmQgYHRlc3RGbG9hdDJgCi10byAxNSBkZWNpbWFsIHBsYWNlcy4KLQogLS0tCiAKIFtIb21lXShSZWFkbWUubWQjdG9wKQpkaWZmIC0tZ2l0IGEvZG9jcy90dXRvcmlhbC5tZCBiL2RvY3MvdHV0b3JpYWwubWQKaW5kZXggMWYwYjhmZi4uZTQ1Zjk2NyAxMDA2NDQKLS0tIGEvZG9jcy90dXRvcmlhbC5tZAorKysgYi9kb2NzL3R1dG9yaWFsLm1kCkBAIC0xMDYsNyArMTA2LDcgQEAKIEFsdGhvdWdoIHRoaXMgd2FzIGEgc2ltcGxlIHRlc3QgaXQncyBiZWVuIGVub3VnaCB0byBkZW1vbnN0cmF0ZSBhIGZldyB0aGluZ3MgYWJvdXQgaG93IENhdGNoIGlzIHVzZWQuIExldCdzIHRha2UgYSBtb21lbnQgdG8gY29uc2lkZXIgdGhvc2UgYmVmb3JlIHdlIG1vdmUgb24uCiAKIDEuIEFsbCB3ZSBkaWQgd2FzIGBgYCNkZWZpbmVgYGAgb25lIGlkZW50aWZpZXIgYW5kIGBgYCNpbmNsdWRlYGBgIG9uZSBoZWFkZXIgYW5kIHdlIGdvdCBldmVyeXRoaW5nIC0gZXZlbiBhbiBpbXBsZW1lbnRhdGlvbiBvZiBgYGBtYWluKClgYGAgdGhhdCB3aWxsIFtyZXNwb25kIHRvIGNvbW1hbmQgbGluZSBhcmd1bWVudHNdKGNvbW1hbmQtbGluZS5tZCN0b3ApLiBZb3UgY2FuIG9ubHkgdXNlIHRoYXQgYGBgI2RlZmluZWBgYCBpbiBvbmUgaW1wbGVtZW50YXRpb24gZmlsZSwgZm9yIChob3BlZnVsbHkpIG9idmlvdXMgcmVhc29ucy4gT25jZSB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIGZpbGUgd2l0aCB1bml0IHRlc3RzIGluIHlvdSdsbCBqdXN0IGBgYCNpbmNsdWRlICJjYXRjaC5ocHAiYGBgIGFuZCBnby4gVXN1YWxseSBpdCdzIGEgZ29vZCBpZGVhIHRvIGhhdmUgYSBkZWRpY2F0ZWQgaW1wbGVtZW50YXRpb24gZmlsZSB0aGF0IGp1c3QgaGFzIGBgYCNkZWZpbmUgQ0FUQ0hfQ09ORklHX01BSU5gYGAgYW5kIGBgYCNpbmNsdWRlICJjYXRjaC5ocHAiYGBgLiBZb3UgY2FuIGFsc28gcHJvdmlkZSB5b3VyIG93biBpbXBsZW1lbnRhdGlvbiBvZiBtYWluIGFuZCBkcml2ZSBDYXRjaCB5b3Vyc2VsZiAoc2VlIFtTdXBwbHlpbmcteW91ci1vd24tbWFpbigpXShvd24tbWFpbi5tZCN0b3ApKS4KLTIuIFdlIGludHJvZHVjZSB0ZXN0IGNhc2VzIHdpdGggdGhlIGBgYFRFU1RfQ0FTRWBgYCBtYWNyby4gVGhpcyBtYWNybyB0YWtlcyBvbmUgb3IgdHdvIGFyZ3VtZW50cyAtIGEgZnJlZSBmb3JtIHRlc3QgbmFtZSBhbmQsIG9wdGlvbmFsbHksIG9uZSBvciBtb3JlIHRhZ3MgKGZvciBtb3JlIHNlZSA8YSBocmVmPSIjdGVzdC1jYXNlcy1hbmQtc2VjdGlvbnMiPlRlc3QgY2FzZXMgYW5kIFNlY3Rpb25zPC9hPikuIFRoZSB0ZXN0IG5hbWUgbXVzdCBiZSB1bmlxdWUuIFlvdSBjYW4gcnVuIHNldHMgb2YgdGVzdHMgYnkgc3BlY2lmeWluZyBhIHdpbGRjYXJkZWQgdGVzdCBuYW1lIG9yIGEgdGFnIGV4cHJlc3Npb24uIFNlZSB0aGUgW2NvbW1hbmQgbGluZSBkb2NzXShjb21tYW5kLWxpbmUubWQjdG9wKSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBydW5uaW5nIHRlc3RzLgorMi4gV2UgaW50cm9kdWNlIHRlc3QgY2FzZXMgd2l0aCB0aGUgYGBgVEVTVF9DQVNFYGBgIG1hY3JvLiBUaGlzIG1hY3JvIHRha2VzIG9uZSBvciB0d28gYXJndW1lbnRzIC0gYSBmcmVlIGZvcm0gdGVzdCBuYW1lIGFuZCwgb3B0aW9uYWxseSwgb25lIG9yIG1vcmUgdGFncyAoZm9yIG1vcmUgc2VlIDxhIGhyZWY9IiN0ZXN0LWNhc2VzLWFuZC1zZWN0aW9ucyI+VGVzdCBjYXNlcyBhbmQgU2VjdGlvbnM8L2E+LCApLiBUaGUgdGVzdCBuYW1lIG11c3QgYmUgdW5pcXVlLiBZb3UgY2FuIHJ1biBzZXRzIG9mIHRlc3RzIGJ5IHNwZWNpZnlpbmcgYSB3aWxkY2FyZGVkIHRlc3QgbmFtZSBvciBhIHRhZyBleHByZXNzaW9uLiBTZWUgdGhlIFtjb21tYW5kIGxpbmUgZG9jc10oY29tbWFuZC1saW5lLm1kI3RvcCkgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcnVubmluZyB0ZXN0cy4KIDMuIFRoZSBuYW1lIGFuZCB0YWdzIGFyZ3VtZW50cyBhcmUganVzdCBzdHJpbmdzLiBXZSBoYXZlbid0IGhhZCB0byBkZWNsYXJlIGEgZnVuY3Rpb24gb3IgbWV0aG9kIC0gb3IgZXhwbGljaXRseSByZWdpc3RlciB0aGUgdGVzdCBjYXNlIGFueXdoZXJlLiBCZWhpbmQgdGhlIHNjZW5lcyBhIGZ1bmN0aW9uIHdpdGggYSBnZW5lcmF0ZWQgbmFtZSBpcyBkZWZpbmVkIGZvciB5b3UsIGFuZCBhdXRvbWF0aWNhbGx5IHJlZ2lzdGVyZWQgdXNpbmcgc3RhdGljIHJlZ2lzdHJ5IGNsYXNzZXMuIEJ5IGFic3RyYWN0aW5nIHRoZSBmdW5jdGlvbiBuYW1lIGF3YXkgd2UgY2FuIG5hbWUgb3VyIHRlc3RzIHdpdGhvdXQgdGhlIGNvbnN0cmFpbnRzIG9mIGlkZW50aWZpZXIgbmFtZXMuCiA0LiBXZSB3cml0ZSBvdXIgaW5kaXZpZHVhbCB0ZXN0IGFzc2VydGlvbnMgdXNpbmcgdGhlIGBgYFJFUVVJUkVgYGAgbWFjcm8uIFJhdGhlciB0aGFuIGEgc2VwYXJhdGUgbWFjcm8gZm9yIGVhY2ggdHlwZSBvZiBjb25kaXRpb24gd2UgZXhwcmVzcyB0aGUgY29uZGl0aW9uIG5hdHVyYWxseSB1c2luZyBDL0MrKyBzeW50YXguIEJlaGluZCB0aGUgc2NlbmVzIGEgc2ltcGxlIHNldCBvZiBleHByZXNzaW9uIHRlbXBsYXRlcyBjYXB0dXJlcyB0aGUgbGVmdC1oYW5kLXNpZGUgYW5kIHJpZ2h0LWhhbmQtc2lkZSBvZiB0aGUgZXhwcmVzc2lvbiBzbyB3ZSBjYW4gZGlzcGxheSB0aGUgdmFsdWVzIGluIG91ciB0ZXN0IHJlcG9ydC4gQXMgd2UnbGwgc2VlIGxhdGVyIHRoZXJlIF9hcmVfIG90aGVyIGFzc2VydGlvbiBtYWNyb3MgLSBidXQgYmVjYXVzZSBvZiB0aGlzIHRlY2huaXF1ZSB0aGUgbnVtYmVyIG9mIHRoZW0gaXMgZHJhc3RpY2FsbHkgcmVkdWNlZC4KIApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvMjEwLUV2dC1FdmVudExpc3RlbmVycy5jcHAgYi9leGFtcGxlcy8yMTAtRXZ0LUV2ZW50TGlzdGVuZXJzLmNwcAppbmRleCAwNDRhMjllLi4yZDVmZGIyIDEwMDY0NAotLS0gYS9leGFtcGxlcy8yMTAtRXZ0LUV2ZW50TGlzdGVuZXJzLmNwcAorKysgYi9leGFtcGxlcy8yMTAtRXZ0LUV2ZW50TGlzdGVuZXJzLmNwcApAQCAtMjQsNyArMjQsNyBAQAogdGVtcGxhdGU8IHR5cGVuYW1lIFQgPgogc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KCBzdGQ6Om9zdHJlYW0mIG9zLCBzdGQ6OnZlY3RvcjxUPiBjb25zdCYgdiApIHsKICAgICBvcyA8PCAieyAiOwotICAgIGZvciAoIGNvbnN0IGF1dG8mIHggOiB2ICkKKyAgICBmb3IgKCBhdXRvIHggOiB2ICkKICAgICAgICAgb3MgPDwgeCA8PCAiLCAiOwogICAgIHJldHVybiBvcyA8PCAifSI7CiB9CkBAIC01Nyw3ICs1Nyw3IEBACiAKIHZvaWQgcHJpbnQoIHN0ZDo6b3N0cmVhbSYgb3MsIGludCBjb25zdCBsZXZlbCwgc3RkOjpzdHJpbmcgY29uc3QmIHRpdGxlLCBzdGQ6OnZlY3RvcjxDYXRjaDo6TWVzc2FnZUluZm8+IGNvbnN0JiB2ICkgewogICAgIG9zIDw8IHdzKGxldmVsICApIDw8IHRpdGxlIDw8ICI6XG4iOwotICAgIGZvciAoIGNvbnN0IGF1dG8mIHggOiB2ICkKKyAgICBmb3IgKCBhdXRvIHggOiB2ICkKICAgICB7CiAgICAgICAgIG9zIDw8IHdzKGxldmVsKzEpIDw8ICJ7XG4iOwogICAgICAgICBwcmludCggb3MsIGxldmVsKzIsIHggKTsKQEAgLTMwMCw3ICszMDAsNyBAQAogc3RydWN0IE15TGlzdGVuZXIgOiBDYXRjaDo6VGVzdEV2ZW50TGlzdGVuZXJCYXNlIHsKIAogICAgIHVzaW5nIFRlc3RFdmVudExpc3RlbmVyQmFzZTo6VGVzdEV2ZW50TGlzdGVuZXJCYXNlOyAvLyBpbmhlcml0IGNvbnN0cnVjdG9yCi0KKyAgICAKICAgICAvLyBHZXQgcmlkIG9mIFd3ZWFrLXRhYmxlcwogICAgIH5NeUxpc3RlbmVyKCk7CiAKZGlmZiAtLWdpdCBhL2V4YW1wbGVzLzIzMS1DZmctT3V0cHV0U3RyZWFtcy5jcHAgYi9leGFtcGxlcy8yMzEtQ2ZnLU91dHB1dFN0cmVhbXMuY3BwCmluZGV4IDhjNjVjYzQuLmVmYTk5OTcgMTAwNjQ0Ci0tLSBhL2V4YW1wbGVzLzIzMS1DZmctT3V0cHV0U3RyZWFtcy5jcHAKKysrIGIvZXhhbXBsZXMvMjMxLUNmZy1PdXRwdXRTdHJlYW1zLmNwcApAQCAtMTAsMTMgKzEwLDEyIEBACiAjZGVmaW5lIENBVENIX0NPTkZJR19NQUlOCiAjaW5jbHVkZSA8Y2F0Y2gyL2NhdGNoLmhwcD4KIAotCiBjbGFzcyBvdXRfYnVmZiA6IHB1YmxpYyBzdGQ6OnN0cmluZ2J1ZiB7CiAgICAgc3RkOjpGSUxFKiBtX3N0cmVhbTsKIHB1YmxpYzoKLSAgICBvdXRfYnVmZihzdGQ6OkZJTEUqIHN0cmVhbSk6bV9zdHJlYW0oc3RyZWFtKSB7fQotICAgIH5vdXRfYnVmZigpOwotICAgIGludCBzeW5jKCkgb3ZlcnJpZGUgeworICAgIG91dF9idWZmKHN0ZDo6RklMRSogc3RyZWFtKSA6bV9zdHJlYW0oc3RyZWFtKSB7fQorICAgIH5vdXRfYnVmZigpIHsgcHVic3luYygpOyB9CisgICAgaW50IHN5bmMoKSB7CiAgICAgICAgIGludCByZXQgPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGNoYXIgYyA6IHN0cigpKSB7CiAgICAgICAgICAgICBpZiAocHV0YyhjLCBtX3N0cmVhbSkgPT0gRU9GKSB7CkBAIC0zMCwxMiArMjksNiBAQAogICAgIH0KIH07CiAKLW91dF9idWZmOjp+b3V0X2J1ZmYoKSB7IHB1YnN5bmMoKTsgfQotCi0jaWYgZGVmaW5lZChfX2NsYW5nX18pCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdleGl0LXRpbWUtZGVzdHJ1Y3RvcnMiIC8vIHN0YXRpYyB2YXJpYWJsZXMgaW4gY291dC9jZXJyL2Nsb2cKLSNlbmRpZgotCiBuYW1lc3BhY2UgQ2F0Y2ggewogICAgIHN0ZDo6b3N0cmVhbSYgY291dCgpIHsKICAgICAgICAgc3RhdGljIHN0ZDo6b3N0cmVhbSByZXQobmV3IG91dF9idWZmKHN0ZG91dCkpOwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvMzAxLUdlbi1NYXBUeXBlQ29udmVyc2lvbi5jcHAgYi9leGFtcGxlcy8zMDEtR2VuLU1hcFR5cGVDb252ZXJzaW9uLmNwcAppbmRleCA4ODc3Mjk3Li5iNjM3N2U5IDEwMDY0NAotLS0gYS9leGFtcGxlcy8zMDEtR2VuLU1hcFR5cGVDb252ZXJzaW9uLmNwcAorKysgYi9leGFtcGxlcy8zMDEtR2VuLU1hcFR5cGVDb252ZXJzaW9uLmNwcApAQCAtMjIsMTcgKzIyLDE1IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGQ6OnN0cmluZyBjb25zdCYgZ2V0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjpzdHJpbmcgY29uc3QmIGdldCgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIG1fbGluZTsKKyAgICB9CiAgICAgCiAgICAgYm9vbCBuZXh0KCkgb3ZlcnJpZGUgewogICAgICAgICByZXR1cm4gISFzdGQ6OmdldGxpbmUobV9zdHJlYW0sIG1fbGluZSk7CiAgICAgfQogfTsKIAotc3RkOjpzdHJpbmcgY29uc3QmIExpbmVHZW5lcmF0b3I6OmdldCgpIGNvbnN0IHsKLSAgICByZXR1cm4gbV9saW5lOwotfQotCiAvLyBUaGlzIGhlbHBlciBmdW5jdGlvbiBwcm92aWRlcyBhIG5pY2VyIFVYIHdoZW4gaW5zdGFudGlhdGluZyB0aGUgZ2VuZXJhdG9yCiAvLyBOb3RpY2UgdGhhdCBpdCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIEdlbmVyYXRvcldyYXBwZXI8c3RkOjpzdHJpbmc+LCB3aGljaAogLy8gaXMgYSB2YWx1ZS13cmFwcGVyIGFyb3VuZCBzdGQ6OnVuaXF1ZV9wdHI8SUdlbmVyYXRvcjxzdGQ6OnN0cmluZz4+LgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jYXRjaC5ocHAgYi9pbmNsdWRlL2NhdGNoLmhwcAppbmRleCA2MzNkOTFhLi41NjY3ZGVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NhdGNoLmhwcAorKysgYi9pbmNsdWRlL2NhdGNoLmhwcApAQCAtMTAsNyArMTAsNyBAQAogI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfSFBQX0lOQ0xVREVECiAKICNkZWZpbmUgQ0FUQ0hfVkVSU0lPTl9NQUpPUiAyCi0jZGVmaW5lIENBVENIX1ZFUlNJT05fTUlOT1IgMTEKKyNkZWZpbmUgQ0FUQ0hfVkVSU0lPTl9NSU5PUiA3CiAjZGVmaW5lIENBVENIX1ZFUlNJT05fUEFUQ0ggMgogCiAjaWZkZWYgX19jbGFuZ19fCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiaW50ZXJuYWwvY2F0Y2hfdGVzdF9yZWdpc3RyeS5oIgogI2luY2x1ZGUgImludGVybmFsL2NhdGNoX2NhcHR1cmUuaHBwIgogI2luY2x1ZGUgImludGVybmFsL2NhdGNoX3NlY3Rpb24uaCIKKyNpbmNsdWRlICJpbnRlcm5hbC9jYXRjaF9iZW5jaG1hcmsuaCIKICNpbmNsdWRlICJpbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgImludGVybmFsL2NhdGNoX2FwcHJveC5oIgogI2luY2x1ZGUgImludGVybmFsL2NhdGNoX2NvbXBpbGVyX2NhcGFiaWxpdGllcy5oIgpAQCAtNzQsMTUgKzc1LDEwIEBACiAjaW5jbHVkZSAiaW50ZXJuYWwvY2F0Y2hfb2JqYy5ocHAiCiAjZW5kaWYKIAotLy8gQmVuY2htYXJraW5nIG5lZWRzIHRoZSBleHRlcm5hbGx5LWZhY2luZyBwYXJ0cyBvZiByZXBvcnRlcnMgdG8gd29yawotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VYVEVSTkFMX0lOVEVSRkFDRVMpIHx8IGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcpCisjaWZkZWYgQ0FUQ0hfQ09ORklHX0VYVEVSTkFMX0lOVEVSRkFDRVMKICNpbmNsdWRlICJpbnRlcm5hbC9jYXRjaF9leHRlcm5hbF9pbnRlcmZhY2VzLmgiCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcpCi0jaW5jbHVkZSAiaW50ZXJuYWwvYmVuY2htYXJrL2NhdGNoX2JlbmNobWFya2luZ19hbGwuaHBwIgotI2VuZGlmCi0KICNlbmRpZiAvLyAhIENBVENIX0NPTkZJR19JTVBMX09OTFkKIAogI2lmZGVmIENBVENIX0lNUEwKQEAgLTkzLDcgKzg5LDYgQEAKICNpbmNsdWRlICJpbnRlcm5hbC9jYXRjaF9kZWZhdWx0X21haW4uaHBwIgogI2VuZGlmCiAKLQogI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19JTVBMX09OTFkpCiAKICNpZmRlZiBDTEFSQV9DT05GSUdfTUFJTl9OT1RfREVGSU5FRApAQCAtMTM3LDcgKzEzMiw2IEBACiAjZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX0RJU0FCTEVfTUFUQ0hFUlMKIAogI2RlZmluZSBDQVRDSF9JTkZPKCBtc2cgKSBJTlRFUk5BTF9DQVRDSF9JTkZPKCAiQ0FUQ0hfSU5GTyIsIG1zZyApCi0jZGVmaW5lIENBVENIX1VOU0NPUEVEX0lORk8oIG1zZyApIElOVEVSTkFMX0NBVENIX1VOU0NPUEVEX0lORk8oICJDQVRDSF9VTlNDT1BFRF9JTkZPIiwgbXNnICkKICNkZWZpbmUgQ0FUQ0hfV0FSTiggbXNnICkgSU5URVJOQUxfQ0FUQ0hfTVNHKCAiQ0FUQ0hfV0FSTiIsIENhdGNoOjpSZXN1bHRXYXM6Oldhcm5pbmcsIENhdGNoOjpSZXN1bHREaXNwb3NpdGlvbjo6Q29udGludWVPbkZhaWx1cmUsIG1zZyApCiAjZGVmaW5lIENBVENIX0NBUFRVUkUoIC4uLiApIElOVEVSTkFMX0NBVENIX0NBUFRVUkUoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKGNhcHR1cmVyKSwgIkNBVENIX0NBUFRVUkUiLF9fVkFfQVJHU19fICkKIApAQCAtMTU1LDIyICsxNDksMTQgQEAKIAogI2lmbmRlZiBDQVRDSF9DT05GSUdfVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IKICNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIF9fVkFfQVJHU19fICkKLSNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX1NJRyggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX1NJRyggX19WQV9BUkdTX18gKQogI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIENBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9TSUcoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX1NJRyggX19WQV9BUkdTX18gKQogI2RlZmluZSBDQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkKLSNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkKICNlbHNlCiAjZGVmaW5lIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIF9fVkFfQVJHU19fICkgKQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0VfU0lHKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9TSUcoIF9fVkFfQVJHU19fICkgKQogI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApICkKLSNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9TSUcoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApICkKICNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoIF9fVkFfQVJHU19fICkgKQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9TSUcoIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfU0lHKCBfX1ZBX0FSR1NfXyApICkKICNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkgKQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApICkKICNlbmRpZgogCiAKQEAgLTE5MywxMyArMTc5LDYgQEAKICNkZWZpbmUgQ0FUQ0hfVEhFTiggZGVzYyApICAgICAgSU5URVJOQUxfQ0FUQ0hfRFlOQU1JQ19TRUNUSU9OKCAiICAgICBUaGVuOiAiIDw8IGRlc2MgKQogI2RlZmluZSBDQVRDSF9BTkRfVEhFTiggZGVzYyApICBJTlRFUk5BTF9DQVRDSF9EWU5BTUlDX1NFQ1RJT04oICIgICAgICBBbmQ6ICIgPDwgZGVzYyApCiAKLSNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HKQotI2RlZmluZSBDQVRDSF9CRU5DSE1BUksoLi4uKSBcCi0gICAgSU5URVJOQUxfQ0FUQ0hfQkVOQ0hNQVJLKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKF9fX19DX0FfVF9DX0hfX19fQl9FX05fQ19IX19fXyksIElOVEVSTkFMX0NBVENIX0dFVF8xX0FSRyhfX1ZBX0FSR1NfXywsKSwgSU5URVJOQUxfQ0FUQ0hfR0VUXzJfQVJHKF9fVkFfQVJHU19fLCwpKQotI2RlZmluZSBDQVRDSF9CRU5DSE1BUktfQURWQU5DRUQobmFtZSkgXAotICAgIElOVEVSTkFMX0NBVENIX0JFTkNITUFSS19BRFZBTkNFRChJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRShfX19fQ19BX1RfQ19IX19fX0JfRV9OX0NfSF9fX18pLCBuYW1lKQotI2VuZGlmIC8vIENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HCi0KIC8vIElmIENBVENIX0NPTkZJR19QUkVGSVhfQUxMIGlzIG5vdCBkZWZpbmVkIHRoZW4gdGhlIENBVENIXyBwcmVmaXggaXMgbm90IHJlcXVpcmVkCiAjZWxzZQogCkBAIC0yNTMsMjYgKzIzMiwxNCBAQAogCiAjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgogI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKQotI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0VfU0lHKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfU0lHKCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCi0jZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkKICNkZWZpbmUgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApCi0jZGVmaW5lIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX1NJRyggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfU0lHKCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQotI2RlZmluZSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQotI2RlZmluZSBURU1QTEFURV9MSVNUX1RFU1RfQ0FTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfTElTVF9URVNUX0NBU0UoX19WQV9BUkdTX18pCi0jZGVmaW5lIFRFTVBMQVRFX0xJU1RfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9MSVNUX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQogI2Vsc2UKICNkZWZpbmUgVEVNUExBVEVfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKSApCi0jZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRV9TSUcoIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX1NJRyggX19WQV9BUkdTX18gKSApCiAjZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkgKQotI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkgKQogI2RlZmluZSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKSApCi0jZGVmaW5lIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX1NJRyggLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9TSUcoIF9fVkFfQVJHU19fICkgKQogI2RlZmluZSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKSApCi0jZGVmaW5lIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkgKQotI2RlZmluZSBURU1QTEFURV9MSVNUX1RFU1RfQ0FTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9MSVNUX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKSApCi0jZGVmaW5lIFRFTVBMQVRFX0xJU1RfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX0xJU1RfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApICkKICNlbmRpZgogCiAKQEAgLTI5OSwxMyArMjY2LDYgQEAKICNkZWZpbmUgVEhFTiggZGVzYyApICAgICAgSU5URVJOQUxfQ0FUQ0hfRFlOQU1JQ19TRUNUSU9OKCAiICAgICBUaGVuOiAiIDw8IGRlc2MgKQogI2RlZmluZSBBTkRfVEhFTiggZGVzYyApICBJTlRFUk5BTF9DQVRDSF9EWU5BTUlDX1NFQ1RJT04oICIgICAgICBBbmQ6ICIgPDwgZGVzYyApCiAKLSNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HKQotI2RlZmluZSBCRU5DSE1BUksoLi4uKSBcCi0gICAgSU5URVJOQUxfQ0FUQ0hfQkVOQ0hNQVJLKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKF9fX19DX0FfVF9DX0hfX19fQl9FX05fQ19IX19fXyksIElOVEVSTkFMX0NBVENIX0dFVF8xX0FSRyhfX1ZBX0FSR1NfXywsKSwgSU5URVJOQUxfQ0FUQ0hfR0VUXzJfQVJHKF9fVkFfQVJHU19fLCwpKQotI2RlZmluZSBCRU5DSE1BUktfQURWQU5DRUQobmFtZSkgXAotICAgIElOVEVSTkFMX0NBVENIX0JFTkNITUFSS19BRFZBTkNFRChJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRShfX19fQ19BX1RfQ19IX19fX0JfRV9OX0NfSF9fX18pLCBuYW1lKQotI2VuZGlmIC8vIENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HCi0KIHVzaW5nIENhdGNoOjpEZXRhaWw6OkFwcHJveDsKIAogI2Vsc2UgLy8gQ0FUQ0hfQ09ORklHX0RJU0FCTEUKQEAgLTM0NSwxMCArMzA1LDkgQEAKICNkZWZpbmUgQ0FUQ0hfUkVRVUlSRV9USEFUKCBhcmcsIG1hdGNoZXIgKSAodm9pZCkoMCkKICNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRElTQUJMRV9NQVRDSEVSUwogCi0jZGVmaW5lIENBVENIX0lORk8oIG1zZyApICAgICAgICAgICh2b2lkKSgwKQotI2RlZmluZSBDQVRDSF9VTlNDT1BFRF9JTkZPKCBtc2cgKSAodm9pZCkoMCkKLSNkZWZpbmUgQ0FUQ0hfV0FSTiggbXNnICkgICAgICAgICAgKHZvaWQpKDApCi0jZGVmaW5lIENBVENIX0NBUFRVUkUoIG1zZyApICAgICAgICh2b2lkKSgwKQorI2RlZmluZSBDQVRDSF9JTkZPKCBtc2cgKSAgICAodm9pZCkoMCkKKyNkZWZpbmUgQ0FUQ0hfV0FSTiggbXNnICkgICAgKHZvaWQpKDApCisjZGVmaW5lIENBVENIX0NBUFRVUkUoIG1zZyApICh2b2lkKSgwKQogCiAjZGVmaW5lIENBVENIX1RFU1RfQ0FTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVTVENBU0VfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9TX1RfX19fICkpCiAjZGVmaW5lIENBVENIX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVTVENBU0VfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9TX1RfX19fICkpCkBAIC0zNjMsMjMgKzMyMiwxNSBAQAogI2RlZmluZSBDQVRDSF9BTk9OX1RFU1RfQ0FTRSgpIElOVEVSTkFMX0NBVENIX1RFU1RDQVNFX05PX1JFR0lTVFJBVElPTihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfU19UX19fXyApKQogCiAjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgotI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9OT19SRUdJU1RSQVRJT04oX19WQV9BUkdTX18pCi0jZGVmaW5lIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9TSUcoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9TSUdfTk9fUkVHSVNUUkFUSU9OKF9fVkFfQVJHU19fKQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OKGNsYXNzTmFtZSwgX19WQV9BUkdTX18pCi0jZGVmaW5lIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHX05PX1JFR0lTVFJBVElPTihjbGFzc05hbWUsIF9fVkFfQVJHU19fICkKKyNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApICkKKyNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX05PX1JFR0lTVFJBVElPTihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgY2xhc3NOYW1lICkKICNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoIC4uLiApIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9TSUcoIC4uLiApIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKQogI2RlZmluZSBDQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCi0jZGVmaW5lIENBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcoIGNsYXNzTmFtZSwgLi4uICkgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCiAjZWxzZQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTihfX1ZBX0FSR1NfXykgKQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0VfU0lHKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9TSUdfTk9fUkVHSVNUUkFUSU9OKF9fVkFfQVJHU19fKSApCi0jZGVmaW5lIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX05PX1JFR0lTVFJBVElPTihjbGFzc05hbWUsIF9fVkFfQVJHU19fICkgKQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHX05PX1JFR0lTVFJBVElPTihjbGFzc05hbWUsIF9fVkFfQVJHU19fICkgKQorI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSApICkKKyNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBjbGFzc05hbWUgKSApCiAjZGVmaW5lIENBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCAuLi4gKSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIF9fVkFfQVJHU19fICkKLSNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfU0lHKCAuLi4gKSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIF9fVkFfQVJHU19fICkKICNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIC4uLiApIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQogI2VuZGlmCiAKIC8vICJCREQtc3R5bGUiIGNvbnZlbmllbmNlIHdyYXBwZXJzCkBAIC00MzEsNyArMzgyLDYgQEAKICNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRElTQUJMRV9NQVRDSEVSUwogCiAjZGVmaW5lIElORk8oIG1zZyApICh2b2lkKSgwKQotI2RlZmluZSBVTlNDT1BFRF9JTkZPKCBtc2cgKSAodm9pZCkoMCkKICNkZWZpbmUgV0FSTiggbXNnICkgKHZvaWQpKDApCiAjZGVmaW5lIENBUFRVUkUoIG1zZyApICh2b2lkKSgwKQogCkBAIC00NDcsMjMgKzM5NywxNSBAQAogI2RlZmluZSBBTk9OX1RFU1RfQ0FTRSgpIElOVEVSTkFMX0NBVENIX1RFU1RDQVNFX05PX1JFR0lTVFJBVElPTihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfU19UX19fXyApKQogCiAjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgotI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9OT19SRUdJU1RSQVRJT04oX19WQV9BUkdTX18pCi0jZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRV9TSUcoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9TSUdfTk9fUkVHSVNUUkFUSU9OKF9fVkFfQVJHU19fKQotI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OKGNsYXNzTmFtZSwgX19WQV9BUkdTX18pCi0jZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHX05PX1JFR0lTVFJBVElPTihjbGFzc05hbWUsIF9fVkFfQVJHU19fICkKKyNkZWZpbmUgVEVNUExBVEVfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApICkKKyNkZWZpbmUgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX05PX1JFR0lTVFJBVElPTihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgY2xhc3NOYW1lICkKICNkZWZpbmUgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoIC4uLiApIFRFTVBMQVRFX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKQotI2RlZmluZSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9TSUcoIC4uLiApIFRFTVBMQVRFX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKQogI2RlZmluZSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCi0jZGVmaW5lIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcoIGNsYXNzTmFtZSwgLi4uICkgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCiAjZWxzZQotI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTihfX1ZBX0FSR1NfXykgKQotI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0VfU0lHKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9TSUdfTk9fUkVHSVNUUkFUSU9OKF9fVkFfQVJHU19fKSApCi0jZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX05PX1JFR0lTVFJBVElPTihjbGFzc05hbWUsIF9fVkFfQVJHU19fICkgKQotI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHX05PX1JFR0lTVFJBVElPTihjbGFzc05hbWUsIF9fVkFfQVJHU19fICkgKQorI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSApICkKKyNkZWZpbmUgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBjbGFzc05hbWUgKSApCiAjZGVmaW5lIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCAuLi4gKSBURU1QTEFURV9URVNUX0NBU0UoIF9fVkFfQVJHU19fICkKLSNkZWZpbmUgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfU0lHKCAuLi4gKSBURU1QTEFURV9URVNUX0NBU0UoIF9fVkFfQVJHU19fICkKICNkZWZpbmUgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQotI2RlZmluZSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIC4uLiApIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQogI2VuZGlmCiAKICNkZWZpbmUgU1RBVElDX1JFUVVJUkUoIC4uLiApICAgICAgICh2b2lkKSgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvY2F0Y2hfYmVuY2htYXJrLmhwcCBiL2luY2x1ZGUvaW50ZXJuYWwvYmVuY2htYXJrL2NhdGNoX2JlbmNobWFyay5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjOGRkZTAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvY2F0Y2hfYmVuY2htYXJrLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogIENyZWF0ZWQgYnkgSm9hY2hpbSBvbiAxNi8wNC8yMDE5LgotICogIEFkYXB0ZWQgZnJvbSBkb25hdGVkIG5vbml1cyBjb2RlLgotICoKLSAqICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0gKiAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKi8KLQotIC8vIEJlbmNobWFyawotI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfQkVOQ0hNQVJLX0hQUF9JTkNMVURFRAotI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfQkVOQ0hNQVJLX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSAiLi4vY2F0Y2hfY29uZmlnLmhwcCIKLSNpbmNsdWRlICIuLi9jYXRjaF9jb250ZXh0LmgiCi0jaW5jbHVkZSAiLi4vY2F0Y2hfaW50ZXJmYWNlc19yZXBvcnRlci5oIgotI2luY2x1ZGUgIi4uL2NhdGNoX3Rlc3RfcmVnaXN0cnkuaCIKLQotI2luY2x1ZGUgImNhdGNoX2Nocm9ub21ldGVyLmhwcCIKLSNpbmNsdWRlICJjYXRjaF9jbG9jay5ocHAiCi0jaW5jbHVkZSAiY2F0Y2hfZW52aXJvbm1lbnQuaHBwIgotI2luY2x1ZGUgImNhdGNoX2V4ZWN1dGlvbl9wbGFuLmhwcCIKLSNpbmNsdWRlICJkZXRhaWwvY2F0Y2hfZXN0aW1hdGVfY2xvY2suaHBwIgotI2luY2x1ZGUgImRldGFpbC9jYXRjaF9jb21wbGV0ZV9pbnZva2UuaHBwIgotI2luY2x1ZGUgImRldGFpbC9jYXRjaF9hbmFseXNlLmhwcCIKLSNpbmNsdWRlICJkZXRhaWwvY2F0Y2hfYmVuY2htYXJrX2Z1bmN0aW9uLmhwcCIKLSNpbmNsdWRlICJkZXRhaWwvY2F0Y2hfcnVuX2Zvcl9hdF9sZWFzdC5ocHAiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPGNtYXRoPgotCi1uYW1lc3BhY2UgQ2F0Y2ggewotICAgIG5hbWVzcGFjZSBCZW5jaG1hcmsgewotICAgICAgICBzdHJ1Y3QgQmVuY2htYXJrIHsKLSAgICAgICAgICAgIEJlbmNobWFyayhzdGQ6OnN0cmluZyAmJm5hbWUpCi0gICAgICAgICAgICAgICAgOiBuYW1lKHN0ZDo6bW92ZShuYW1lKSkge30KLQotICAgICAgICAgICAgdGVtcGxhdGUgPGNsYXNzIEZVTj4KLSAgICAgICAgICAgIEJlbmNobWFyayhzdGQ6OnN0cmluZyAmJm5hbWUsIEZVTiAmJmZ1bmMpCi0gICAgICAgICAgICAgICAgOiBmdW4oc3RkOjptb3ZlKGZ1bmMpKSwgbmFtZShzdGQ6Om1vdmUobmFtZSkpIHt9Ci0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbG9jaz4KLSAgICAgICAgICAgIEV4ZWN1dGlvblBsYW48RmxvYXREdXJhdGlvbjxDbG9jaz4+IHByZXBhcmUoY29uc3QgSUNvbmZpZyAmY2ZnLCBFbnZpcm9ubWVudDxGbG9hdER1cmF0aW9uPENsb2NrPj4gZW52KSBjb25zdCB7Ci0gICAgICAgICAgICAgICAgYXV0byBtaW5fdGltZSA9IGVudi5jbG9ja19yZXNvbHV0aW9uLm1lYW4gKiBEZXRhaWw6Om1pbmltdW1fdGlja3M7Ci0gICAgICAgICAgICAgICAgYXV0byBydW5fdGltZSA9IHN0ZDo6bWF4KG1pbl90aW1lLCBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxkZWNsdHlwZShtaW5fdGltZSk+KGNmZy5iZW5jaG1hcmtXYXJtdXBUaW1lKCkpKTsKLSAgICAgICAgICAgICAgICBhdXRvJiYgdGVzdCA9IERldGFpbDo6cnVuX2Zvcl9hdF9sZWFzdDxDbG9jaz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8Q2xvY2tEdXJhdGlvbjxDbG9jaz4+KHJ1bl90aW1lKSwgMSwgZnVuKTsKLSAgICAgICAgICAgICAgICBpbnQgbmV3X2l0ZXJzID0gc3RhdGljX2Nhc3Q8aW50PihzdGQ6OmNlaWwobWluX3RpbWUgKiB0ZXN0Lml0ZXJhdGlvbnMgLyB0ZXN0LmVsYXBzZWQpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyBuZXdfaXRlcnMsIHRlc3QuZWxhcHNlZCAvIHRlc3QuaXRlcmF0aW9ucyAqIG5ld19pdGVycyAqIGNmZy5iZW5jaG1hcmtTYW1wbGVzKCksIGZ1biwgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8RmxvYXREdXJhdGlvbjxDbG9jaz4+KGNmZy5iZW5jaG1hcmtXYXJtdXBUaW1lKCkpLCBEZXRhaWw6Ondhcm11cF9pdGVyYXRpb25zIH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbG9jayA9IGRlZmF1bHRfY2xvY2s+Ci0gICAgICAgICAgICB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICBJQ29uZmlnUHRyIGNmZyA9IGdldEN1cnJlbnRDb250ZXh0KCkuZ2V0Q29uZmlnKCk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGVudiA9IERldGFpbDo6bWVhc3VyZV9lbnZpcm9ubWVudDxDbG9jaz4oKTsKLQotICAgICAgICAgICAgICAgIGdldFJlc3VsdENhcHR1cmUoKS5iZW5jaG1hcmtQcmVwYXJpbmcobmFtZSk7Ci0gICAgICAgICAgICAgICAgQ0FUQ0hfVFJZewotICAgICAgICAgICAgICAgICAgICBhdXRvIHBsYW4gPSB1c2VyX2NvZGUoWyZdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVwYXJlPENsb2NrPigqY2ZnLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICBCZW5jaG1hcmtJbmZvIGluZm8gewotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBsYW4uZXN0aW1hdGVkX2R1cmF0aW9uLmNvdW50KCksCi0gICAgICAgICAgICAgICAgICAgICAgICBwbGFuLml0ZXJhdGlvbnNfcGVyX3NhbXBsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNmZy0+YmVuY2htYXJrU2FtcGxlcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgY2ZnLT5iZW5jaG1hcmtSZXNhbXBsZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudi5jbG9ja19yZXNvbHV0aW9uLm1lYW4uY291bnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudi5jbG9ja19jb3N0Lm1lYW4uY291bnQoKQotICAgICAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgICAgIGdldFJlc3VsdENhcHR1cmUoKS5iZW5jaG1hcmtTdGFydGluZyhpbmZvKTsKLQotICAgICAgICAgICAgICAgICAgICBhdXRvIHNhbXBsZXMgPSB1c2VyX2NvZGUoWyZdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGFuLnRlbXBsYXRlIHJ1bjxDbG9jaz4oKmNmZywgZW52KTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXV0byBhbmFseXNpcyA9IERldGFpbDo6YW5hbHlzZSgqY2ZnLCBlbnYsIHNhbXBsZXMuYmVnaW4oKSwgc2FtcGxlcy5lbmQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIEJlbmNobWFya1N0YXRzPEZsb2F0RHVyYXRpb248Q2xvY2s+PiBzdGF0c3sgaW5mbywgYW5hbHlzaXMuc2FtcGxlcywgYW5hbHlzaXMubWVhbiwgYW5hbHlzaXMuc3RhbmRhcmRfZGV2aWF0aW9uLCBhbmFseXNpcy5vdXRsaWVycywgYW5hbHlzaXMub3V0bGllcl92YXJpYW5jZSB9OwotICAgICAgICAgICAgICAgICAgICBnZXRSZXN1bHRDYXB0dXJlKCkuYmVuY2htYXJrRW5kZWQoc3RhdHMpOwotCi0gICAgICAgICAgICAgICAgfSBDQVRDSF9DQVRDSF9BTEx7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGVBY3RpdmVFeGNlcHRpb24oKSAhPSBEZXRhaWw6OmJlbmNobWFya0Vycm9yTXNnKSAvLyBiZW5jaG1hcmsgZXJyb3JzIGhhdmUgYmVlbiByZXBvcnRlZCwgb3RoZXJ3aXNlIHJldGhyb3cuCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnJldGhyb3dfZXhjZXB0aW9uKHN0ZDo6Y3VycmVudF9leGNlcHRpb24oKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBzZXRzIGxhbWJkYSB0byBiZSB1c2VkIGluIGZ1biAqYW5kKiBleGVjdXRlcyBiZW5jaG1hcmshCi0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuLAotICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFEZXRhaWw6OmlzX3JlbGF0ZWQ8RnVuLCBCZW5jaG1hcms+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+Ci0gICAgICAgICAgICAgICAgQmVuY2htYXJrICYgb3BlcmF0b3I9KEZ1biBmdW5jKSB7Ci0gICAgICAgICAgICAgICAgZnVuID0gRGV0YWlsOjpCZW5jaG1hcmtGdW5jdGlvbihmdW5jKTsKLSAgICAgICAgICAgICAgICBydW4oKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIERldGFpbDo6QmVuY2htYXJrRnVuY3Rpb24gZnVuOwotICAgICAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKLSAgICAgICAgfTsKLSAgICB9Ci19IC8vIG5hbWVzcGFjZSBDYXRjaAotCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX0dFVF8xX0FSRyhhcmcxLCBhcmcyLCAuLi4pIGFyZzEKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfR0VUXzJfQVJHKGFyZzEsIGFyZzIsIC4uLikgYXJnMgotCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX0JFTkNITUFSSyhCZW5jaG1hcmtOYW1lLCBuYW1lLCBiZW5jaG1hcmtJbmRleClcCi0gICAgaWYoIENhdGNoOjpCZW5jaG1hcms6OkJlbmNobWFyayBCZW5jaG1hcmtOYW1le25hbWV9ICkgXAotICAgICAgICBCZW5jaG1hcmtOYW1lID0gWyZdKGludCBiZW5jaG1hcmtJbmRleCkKLQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9CRU5DSE1BUktfQURWQU5DRUQoQmVuY2htYXJrTmFtZSwgbmFtZSlcCi0gICAgaWYoIENhdGNoOjpCZW5jaG1hcms6OkJlbmNobWFyayBCZW5jaG1hcmtOYW1le25hbWV9ICkgXAotICAgICAgICBCZW5jaG1hcmtOYW1lID0gWyZdCi0KLSNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfQkVOQ0hNQVJLX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvY2F0Y2hfYmVuY2htYXJraW5nX2FsbC5ocHAgYi9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9jYXRjaF9iZW5jaG1hcmtpbmdfYWxsLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcxN2Y4OS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9jYXRjaF9iZW5jaG1hcmtpbmdfYWxsLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qCi0gKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICovIAotCi0KLS8vIEEgcHJveHkgaGVhZGVyIHRoYXQgaW5jbHVkZXMgYWxsIG9mIHRoZSBiZW5jaG1hcmtpbmcgaGVhZGVycyB0byBhbGxvdwotLy8gY29uY2lzZSBpbmNsdWRlIG9mIHRoZSBiZW5jaG1hcmtpbmcgZmVhdHVyZXMuIFlvdSBzaG91bGQgcHJlZmVyIHRoZQotLy8gaW5kaXZpZHVhbCBpbmNsdWRlcyBpbiBzdGFuZGFyZCB1c2UuCi0KLSNpbmNsdWRlICJjYXRjaF9iZW5jaG1hcmsuaHBwIgotI2luY2x1ZGUgImNhdGNoX2Nocm9ub21ldGVyLmhwcCIKLSNpbmNsdWRlICJjYXRjaF9jbG9jay5ocHAiCi0jaW5jbHVkZSAiY2F0Y2hfY29uc3RydWN0b3IuaHBwIgotI2luY2x1ZGUgImNhdGNoX2Vudmlyb25tZW50LmhwcCIKLSNpbmNsdWRlICJjYXRjaF9lc3RpbWF0ZS5ocHAiCi0jaW5jbHVkZSAiY2F0Y2hfZXhlY3V0aW9uX3BsYW4uaHBwIgotI2luY2x1ZGUgImNhdGNoX29wdGltaXplci5ocHAiCi0jaW5jbHVkZSAiY2F0Y2hfb3V0bGllcl9jbGFzc2lmaWNhdGlvbi5ocHAiCi0jaW5jbHVkZSAiY2F0Y2hfc2FtcGxlX2FuYWx5c2lzLmhwcCIKLSNpbmNsdWRlICJkZXRhaWwvY2F0Y2hfYW5hbHlzZS5ocHAiCi0jaW5jbHVkZSAiZGV0YWlsL2NhdGNoX2JlbmNobWFya19mdW5jdGlvbi5ocHAiCi0jaW5jbHVkZSAiZGV0YWlsL2NhdGNoX2NvbXBsZXRlX2ludm9rZS5ocHAiCi0jaW5jbHVkZSAiZGV0YWlsL2NhdGNoX2VzdGltYXRlX2Nsb2NrLmhwcCIKLSNpbmNsdWRlICJkZXRhaWwvY2F0Y2hfbWVhc3VyZS5ocHAiCi0jaW5jbHVkZSAiZGV0YWlsL2NhdGNoX3JlcGVhdC5ocHAiCi0jaW5jbHVkZSAiZGV0YWlsL2NhdGNoX3J1bl9mb3JfYXRfbGVhc3QuaHBwIgotI2luY2x1ZGUgImRldGFpbC9jYXRjaF9zdGF0cy5ocHAiCi0jaW5jbHVkZSAiZGV0YWlsL2NhdGNoX3RpbWluZy5ocHAiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9jYXRjaF9jaHJvbm9tZXRlci5ocHAgYi9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9jYXRjaF9jaHJvbm9tZXRlci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMjIwMTcuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvY2F0Y2hfY2hyb25vbWV0ZXIuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqICBDcmVhdGVkIGJ5IEpvYWNoaW0gb24gMTYvMDQvMjAxOS4KLSAqICBBZGFwdGVkIGZyb20gZG9uYXRlZCBub25pdXMgY29kZS4KLSAqCi0gKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICovCi0KLS8vIFVzZXItZmFjaW5nIGNocm9ub21ldGVyCi0KLSNpZm5kZWYgVFdPQkxVRUNVQkVTX0NBVENIX0NIUk9OT01FVEVSX0hQUF9JTkNMVURFRAotI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfQ0hST05PTUVURVJfSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlICJjYXRjaF9jbG9jay5ocHAiCi0jaW5jbHVkZSAiY2F0Y2hfb3B0aW1pemVyLmhwcCIKLSNpbmNsdWRlICJkZXRhaWwvY2F0Y2hfY29tcGxldGVfaW52b2tlLmhwcCIKLSNpbmNsdWRlICIuLi9jYXRjaF9tZXRhLmhwcCIKLQotbmFtZXNwYWNlIENhdGNoIHsKLSAgICBuYW1lc3BhY2UgQmVuY2htYXJrIHsKLSAgICAgICAgbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgICAgICAgICBzdHJ1Y3QgQ2hyb25vbWV0ZXJDb25jZXB0IHsKLSAgICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7Ci0gICAgICAgICAgICAgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpID0gMDsKLSAgICAgICAgICAgICAgICB2aXJ0dWFsIH5DaHJvbm9tZXRlckNvbmNlcHQoKSA9IGRlZmF1bHQ7Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsb2NrPgotICAgICAgICAgICAgc3RydWN0IENocm9ub21ldGVyTW9kZWwgZmluYWwgOiBwdWJsaWMgQ2hyb25vbWV0ZXJDb25jZXB0IHsKLSAgICAgICAgICAgICAgICB2b2lkIHN0YXJ0KCkgb3ZlcnJpZGUgeyBzdGFydGVkID0gQ2xvY2s6Om5vdygpOyB9Ci0gICAgICAgICAgICAgICAgdm9pZCBmaW5pc2goKSBvdmVycmlkZSB7IGZpbmlzaGVkID0gQ2xvY2s6Om5vdygpOyB9Ci0KLSAgICAgICAgICAgICAgICBDbG9ja0R1cmF0aW9uPENsb2NrPiBlbGFwc2VkKCkgY29uc3QgeyByZXR1cm4gZmluaXNoZWQgLSBzdGFydGVkOyB9Ci0KLSAgICAgICAgICAgICAgICBUaW1lUG9pbnQ8Q2xvY2s+IHN0YXJ0ZWQ7Ci0gICAgICAgICAgICAgICAgVGltZVBvaW50PENsb2NrPiBmaW5pc2hlZDsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0gLy8gbmFtZXNwYWNlIERldGFpbAotCi0gICAgICAgIHN0cnVjdCBDaHJvbm9tZXRlciB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW4+Ci0gICAgICAgICAgICB2b2lkIG1lYXN1cmUoRnVuJiYgZnVuKSB7IG1lYXN1cmUoc3RkOjpmb3J3YXJkPEZ1bj4oZnVuKSwgaXNfY2FsbGFibGU8RnVuKGludCk+KCkpOyB9Ci0KLSAgICAgICAgICAgIGludCBydW5zKCkgY29uc3QgeyByZXR1cm4gazsgfQotCi0gICAgICAgICAgICBDaHJvbm9tZXRlcihEZXRhaWw6OkNocm9ub21ldGVyQ29uY2VwdCYgbWV0ZXIsIGludCBrKQotICAgICAgICAgICAgICAgIDogaW1wbCgmbWV0ZXIpCi0gICAgICAgICAgICAgICAgLCBrKGspIHt9Ci0KLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW4+Ci0gICAgICAgICAgICB2b2lkIG1lYXN1cmUoRnVuJiYgZnVuLCBzdGQ6OmZhbHNlX3R5cGUpIHsKLSAgICAgICAgICAgICAgICBtZWFzdXJlKFsmZnVuXShpbnQpIHsgcmV0dXJuIGZ1bigpOyB9LCBzdGQ6OnRydWVfdHlwZSgpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bj4KLSAgICAgICAgICAgIHZvaWQgbWVhc3VyZShGdW4mJiBmdW4sIHN0ZDo6dHJ1ZV90eXBlKSB7Ci0gICAgICAgICAgICAgICAgRGV0YWlsOjpvcHRpbWl6ZXJfYmFycmllcigpOwotICAgICAgICAgICAgICAgIGltcGwtPnN0YXJ0KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrOyArK2kpIGludm9rZV9kZW9wdGltaXplZChmdW4sIGkpOwotICAgICAgICAgICAgICAgIGltcGwtPmZpbmlzaCgpOwotICAgICAgICAgICAgICAgIERldGFpbDo6b3B0aW1pemVyX2JhcnJpZXIoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgRGV0YWlsOjpDaHJvbm9tZXRlckNvbmNlcHQqIGltcGw7Ci0gICAgICAgICAgICBpbnQgazsKLSAgICAgICAgfTsKLSAgICB9IC8vIG5hbWVzcGFjZSBCZW5jaG1hcmsKLX0gLy8gbmFtZXNwYWNlIENhdGNoCi0KLSNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfQ0hST05PTUVURVJfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9jYXRjaF9jbG9jay5ocHAgYi9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9jYXRjaF9jbG9jay5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYTNlODYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvY2F0Y2hfY2xvY2suaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqICBDcmVhdGVkIGJ5IEpvYWNoaW0gb24gMTYvMDQvMjAxOS4KLSAqICBBZGFwdGVkIGZyb20gZG9uYXRlZCBub25pdXMgY29kZS4KLSAqCi0gKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICovCi0KLS8vIENsb2NrcwotCi0jaWZuZGVmIFRXT0JMVUVDVUJFU19DQVRDSF9DTE9DS19IUFBfSU5DTFVERUQKLSNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX0NMT0NLX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8Y2hyb25vPgotI2luY2x1ZGUgPHJhdGlvPgotCi1uYW1lc3BhY2UgQ2F0Y2ggewotICAgIG5hbWVzcGFjZSBCZW5jaG1hcmsgewotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xvY2s+Ci0gICAgICAgIHVzaW5nIENsb2NrRHVyYXRpb24gPSB0eXBlbmFtZSBDbG9jazo6ZHVyYXRpb247Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbG9jaz4KLSAgICAgICAgdXNpbmcgRmxvYXREdXJhdGlvbiA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGUsIHR5cGVuYW1lIENsb2NrOjpwZXJpb2Q+OwotCi0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbG9jaz4KLSAgICAgICAgdXNpbmcgVGltZVBvaW50ID0gdHlwZW5hbWUgQ2xvY2s6OnRpbWVfcG9pbnQ7Ci0KLSAgICAgICAgdXNpbmcgZGVmYXVsdF9jbG9jayA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s7Ci0KLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsb2NrPgotICAgICAgICBzdHJ1Y3Qgbm93IHsKLSAgICAgICAgICAgIFRpbWVQb2ludDxDbG9jaz4gb3BlcmF0b3IoKSgpIGNvbnN0IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ2xvY2s6Om5vdygpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIHVzaW5nIGZwX3NlY29uZHMgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlLCBzdGQ6OnJhdGlvPDE+PjsKLSAgICB9IC8vIG5hbWVzcGFjZSBCZW5jaG1hcmsKLX0gLy8gbmFtZXNwYWNlIENhdGNoCi0KLSNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfQ0xPQ0tfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9jYXRjaF9jb25zdHJ1Y3Rvci5ocHAgYi9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9jYXRjaF9jb25zdHJ1Y3Rvci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYzA0MDQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvY2F0Y2hfY29uc3RydWN0b3IuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqICBDcmVhdGVkIGJ5IEpvYWNoaW0gb24gMTYvMDQvMjAxOS4KLSAqICBBZGFwdGVkIGZyb20gZG9uYXRlZCBub25pdXMgY29kZS4KLSAqCi0gKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICovCi0KLS8vIENvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yIGhlbHBlcnMKLQotI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfQ09OU1RSVUNUT1JfSFBQX0lOQ0xVREVECi0jZGVmaW5lIFRXT0JMVUVDVUJFU19DQVRDSF9DT05TVFJVQ1RPUl9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgotCi1uYW1lc3BhY2UgQ2F0Y2ggewotICAgIG5hbWVzcGFjZSBCZW5jaG1hcmsgewotICAgICAgICBuYW1lc3BhY2UgRGV0YWlsIHsKLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBib29sIERlc3RydWN0PgotICAgICAgICAgICAgc3RydWN0IE9iamVjdFN0b3JhZ2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1c2luZyBUU3RvcmFnZSA9IHR5cGVuYW1lIHN0ZDo6YWxpZ25lZF9zdG9yYWdlPHNpemVvZihUKSwgc3RkOjphbGlnbm1lbnRfb2Y8VD46OnZhbHVlPjo6dHlwZTsKLQotICAgICAgICAgICAgICAgIE9iamVjdFN0b3JhZ2UoKSA6IGRhdGEoKSB7fQotCi0gICAgICAgICAgICAgICAgT2JqZWN0U3RvcmFnZShjb25zdCBPYmplY3RTdG9yYWdlJiBvdGhlcikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG5ldygmZGF0YSkgVChvdGhlci5zdG9yZWRfb2JqZWN0KCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIE9iamVjdFN0b3JhZ2UoT2JqZWN0U3RvcmFnZSYmIG90aGVyKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3KCZkYXRhKSBUKHN0ZDo6bW92ZShvdGhlci5zdG9yZWRfb2JqZWN0KCkpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB+T2JqZWN0U3RvcmFnZSgpIHsgZGVzdHJ1Y3Rfb25fZXhpdDxUPigpOyB9Ci0KLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KLSAgICAgICAgICAgICAgICB2b2lkIGNvbnN0cnVjdChBcmdzJiYuLi4gYXJncykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG5ldyAoJmRhdGEpIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA8Ym9vbCBBbGxvd01hbnVhbERlc3RydWN0aW9uID0gIURlc3RydWN0PgotICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPEFsbG93TWFudWFsRGVzdHJ1Y3Rpb24+Ojp0eXBlIGRlc3RydWN0KCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0b3JlZF9vYmplY3QoKS5+VCgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IgYmVuY2htYXJrLCBkZXN0cnVjdCB0aGUgdW5kZXJseWluZyBvYmplY3QKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICAgICAgICAgICAgICB2b2lkIGRlc3RydWN0X29uX2V4aXQodHlwZW5hbWUgc3RkOjplbmFibGVfaWY8RGVzdHJ1Y3QsIFU+Ojp0eXBlKiA9IDApIHsgZGVzdHJ1Y3Q8dHJ1ZT4oKTsgfQotICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgZG9uJ3QKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICAgICAgICAgICAgICB2b2lkIGRlc3RydWN0X29uX2V4aXQodHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IURlc3RydWN0LCBVPjo6dHlwZSogPSAwKSB7IH0KLQotICAgICAgICAgICAgICAgIFQmIHN0b3JlZF9vYmplY3QoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHZvaWQqPigmZGF0YSkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFQgY29uc3QmIHN0b3JlZF9vYmplY3QoKSBjb25zdCB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHZvaWQqPigmZGF0YSkpOwotICAgICAgICAgICAgICAgIH0KLQotCi0gICAgICAgICAgICAgICAgVFN0b3JhZ2UgZGF0YTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICAgICAgdXNpbmcgc3RvcmFnZV9mb3IgPSBEZXRhaWw6Ok9iamVjdFN0b3JhZ2U8VCwgdHJ1ZT47Ci0KLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHVzaW5nIGRlc3RydWN0YWJsZV9vYmplY3QgPSBEZXRhaWw6Ok9iamVjdFN0b3JhZ2U8VCwgZmFsc2U+OwotICAgIH0KLX0KLQotI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9DT05TVFJVQ1RPUl9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvYmVuY2htYXJrL2NhdGNoX2Vudmlyb25tZW50LmhwcCBiL2luY2x1ZGUvaW50ZXJuYWwvYmVuY2htYXJrL2NhdGNoX2Vudmlyb25tZW50LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU5NTEyNC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9jYXRjaF9lbnZpcm9ubWVudC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKgotICogIENyZWF0ZWQgYnkgSm9hY2hpbSBvbiAxNi8wNC8yMDE5LgotICogIEFkYXB0ZWQgZnJvbSBkb25hdGVkIG5vbml1cyBjb2RlLgotICoKLSAqICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0gKiAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKi8KLQotLy8gRW52aXJvbm1lbnQgaW5mb3JtYXRpb24KLQotI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfRU5WSVJPTk1FTlRfSFBQX0lOQ0xVREVECi0jZGVmaW5lIFRXT0JMVUVDVUJFU19DQVRDSF9FTlZJUk9OTUVOVF9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgImNhdGNoX2Nsb2NrLmhwcCIKLSNpbmNsdWRlICJjYXRjaF9vdXRsaWVyX2NsYXNzaWZpY2F0aW9uLmhwcCIKLQotbmFtZXNwYWNlIENhdGNoIHsKLSAgICBuYW1lc3BhY2UgQmVuY2htYXJrIHsKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIER1cmF0aW9uPgotICAgICAgICBzdHJ1Y3QgRW52aXJvbm1lbnRFc3RpbWF0ZSB7Ci0gICAgICAgICAgICBEdXJhdGlvbiBtZWFuOwotICAgICAgICAgICAgT3V0bGllckNsYXNzaWZpY2F0aW9uIG91dGxpZXJzOwotCi0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRHVyYXRpb24yPgotICAgICAgICAgICAgb3BlcmF0b3IgRW52aXJvbm1lbnRFc3RpbWF0ZTxEdXJhdGlvbjI+KCkgY29uc3QgewotICAgICAgICAgICAgICAgIHJldHVybiB7IG1lYW4sIG91dGxpZXJzIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbG9jaz4KLSAgICAgICAgc3RydWN0IEVudmlyb25tZW50IHsKLSAgICAgICAgICAgIHVzaW5nIGNsb2NrX3R5cGUgPSBDbG9jazsKLSAgICAgICAgICAgIEVudmlyb25tZW50RXN0aW1hdGU8RmxvYXREdXJhdGlvbjxDbG9jaz4+IGNsb2NrX3Jlc29sdXRpb247Ci0gICAgICAgICAgICBFbnZpcm9ubWVudEVzdGltYXRlPEZsb2F0RHVyYXRpb248Q2xvY2s+PiBjbG9ja19jb3N0OwotICAgICAgICB9OwotICAgIH0gLy8gbmFtZXNwYWNlIEJlbmNobWFyawotfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKLQotI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9FTlZJUk9OTUVOVF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvYmVuY2htYXJrL2NhdGNoX2VzdGltYXRlLmhwcCBiL2luY2x1ZGUvaW50ZXJuYWwvYmVuY2htYXJrL2NhdGNoX2VzdGltYXRlLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNjOTEzYy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9jYXRjaF9lc3RpbWF0ZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKgotICogIENyZWF0ZWQgYnkgSm9hY2hpbSBvbiAxNi8wNC8yMDE5LgotICogIEFkYXB0ZWQgZnJvbSBkb25hdGVkIG5vbml1cyBjb2RlLgotICoKLSAqICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0gKiAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKi8KLQotIC8vIFN0YXRpc3RpY3MgZXN0aW1hdGVzCi0KLSNpZm5kZWYgVFdPQkxVRUNVQkVTX0NBVENIX0VTVElNQVRFX0hQUF9JTkNMVURFRAotI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfRVNUSU1BVEVfSFBQX0lOQ0xVREVECi0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgbmFtZXNwYWNlIEJlbmNobWFyayB7Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBEdXJhdGlvbj4KLSAgICAgICAgc3RydWN0IEVzdGltYXRlIHsKLSAgICAgICAgICAgIER1cmF0aW9uIHBvaW50OwotICAgICAgICAgICAgRHVyYXRpb24gbG93ZXJfYm91bmQ7Ci0gICAgICAgICAgICBEdXJhdGlvbiB1cHBlcl9ib3VuZDsKLSAgICAgICAgICAgIGRvdWJsZSBjb25maWRlbmNlX2ludGVydmFsOwotCi0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRHVyYXRpb24yPgotICAgICAgICAgICAgb3BlcmF0b3IgRXN0aW1hdGU8RHVyYXRpb24yPigpIGNvbnN0IHsKLSAgICAgICAgICAgICAgICByZXR1cm4geyBwb2ludCwgbG93ZXJfYm91bmQsIHVwcGVyX2JvdW5kLCBjb25maWRlbmNlX2ludGVydmFsIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgfSAvLyBuYW1lc3BhY2UgQmVuY2htYXJrCi19IC8vIG5hbWVzcGFjZSBDYXRjaAotCi0jZW5kaWYgLy8gVFdPQkxVRUNVQkVTX0NBVENIX0VTVElNQVRFX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvY2F0Y2hfZXhlY3V0aW9uX3BsYW4uaHBwIGIvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvY2F0Y2hfZXhlY3V0aW9uX3BsYW4uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTZjODNhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvYmVuY2htYXJrL2NhdGNoX2V4ZWN1dGlvbl9wbGFuLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiAgQ3JlYXRlZCBieSBKb2FjaGltIG9uIDE2LzA0LzIwMTkuCi0gKiAgQWRhcHRlZCBmcm9tIGRvbmF0ZWQgbm9uaXVzIGNvZGUuCi0gKgotICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLSAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqLwotCi0gLy8gRXhlY3V0aW9uIHBsYW4KLQotI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfRVhFQ1VUSU9OX1BMQU5fSFBQX0lOQ0xVREVECi0jZGVmaW5lIFRXT0JMVUVDVUJFU19DQVRDSF9FWEVDVVRJT05fUExBTl9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgIi4uL2NhdGNoX2NvbmZpZy5ocHAiCi0jaW5jbHVkZSAiY2F0Y2hfY2xvY2suaHBwIgotI2luY2x1ZGUgImNhdGNoX2Vudmlyb25tZW50LmhwcCIKLSNpbmNsdWRlICJkZXRhaWwvY2F0Y2hfYmVuY2htYXJrX2Z1bmN0aW9uLmhwcCIKLSNpbmNsdWRlICJkZXRhaWwvY2F0Y2hfcmVwZWF0LmhwcCIKLSNpbmNsdWRlICJkZXRhaWwvY2F0Y2hfcnVuX2Zvcl9hdF9sZWFzdC5ocHAiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgbmFtZXNwYWNlIEJlbmNobWFyayB7Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBEdXJhdGlvbj4KLSAgICAgICAgc3RydWN0IEV4ZWN1dGlvblBsYW4gewotICAgICAgICAgICAgaW50IGl0ZXJhdGlvbnNfcGVyX3NhbXBsZTsKLSAgICAgICAgICAgIER1cmF0aW9uIGVzdGltYXRlZF9kdXJhdGlvbjsKLSAgICAgICAgICAgIERldGFpbDo6QmVuY2htYXJrRnVuY3Rpb24gYmVuY2htYXJrOwotICAgICAgICAgICAgRHVyYXRpb24gd2FybXVwX3RpbWU7Ci0gICAgICAgICAgICBpbnQgd2FybXVwX2l0ZXJhdGlvbnM7Ci0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBEdXJhdGlvbjI+Ci0gICAgICAgICAgICBvcGVyYXRvciBFeGVjdXRpb25QbGFuPER1cmF0aW9uMj4oKSBjb25zdCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgaXRlcmF0aW9uc19wZXJfc2FtcGxlLCBlc3RpbWF0ZWRfZHVyYXRpb24sIGJlbmNobWFyaywgd2FybXVwX3RpbWUsIHdhcm11cF9pdGVyYXRpb25zIH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbG9jaz4KLSAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEZsb2F0RHVyYXRpb248Q2xvY2s+PiBydW4oY29uc3QgSUNvbmZpZyAmY2ZnLCBFbnZpcm9ubWVudDxGbG9hdER1cmF0aW9uPENsb2NrPj4gZW52KSBjb25zdCB7Ci0gICAgICAgICAgICAgICAgLy8gd2FybXVwIGEgYml0Ci0gICAgICAgICAgICAgICAgRGV0YWlsOjpydW5fZm9yX2F0X2xlYXN0PENsb2NrPihzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxDbG9ja0R1cmF0aW9uPENsb2NrPj4od2FybXVwX3RpbWUpLCB3YXJtdXBfaXRlcmF0aW9ucywgRGV0YWlsOjpyZXBlYXQobm93PENsb2NrPnt9KSk7Ci0KLSAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxGbG9hdER1cmF0aW9uPENsb2NrPj4gdGltZXM7Ci0gICAgICAgICAgICAgICAgdGltZXMucmVzZXJ2ZShjZmcuYmVuY2htYXJrU2FtcGxlcygpKTsKLSAgICAgICAgICAgICAgICBzdGQ6OmdlbmVyYXRlX24oc3RkOjpiYWNrX2luc2VydGVyKHRpbWVzKSwgY2ZnLmJlbmNobWFya1NhbXBsZXMoKSwgW3RoaXMsIGVudl0gewotICAgICAgICAgICAgICAgICAgICBEZXRhaWw6OkNocm9ub21ldGVyTW9kZWw8Q2xvY2s+IG1vZGVsOwotICAgICAgICAgICAgICAgICAgICB0aGlzLT5iZW5jaG1hcmsoQ2hyb25vbWV0ZXIobW9kZWwsIGl0ZXJhdGlvbnNfcGVyX3NhbXBsZSkpOwotICAgICAgICAgICAgICAgICAgICBhdXRvIHNhbXBsZV90aW1lID0gbW9kZWwuZWxhcHNlZCgpIC0gZW52LmNsb2NrX2Nvc3QubWVhbjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNhbXBsZV90aW1lIDwgRmxvYXREdXJhdGlvbjxDbG9jaz46Onplcm8oKSkgc2FtcGxlX3RpbWUgPSBGbG9hdER1cmF0aW9uPENsb2NrPjo6emVybygpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2FtcGxlX3RpbWUgLyBpdGVyYXRpb25zX3Blcl9zYW1wbGU7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVzOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0gLy8gbmFtZXNwYWNlIEJlbmNobWFyawotfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKLQotI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9FWEVDVVRJT05fUExBTl9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvYmVuY2htYXJrL2NhdGNoX29wdGltaXplci5ocHAgYi9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9jYXRjaF9vcHRpbWl6ZXIuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGE3YzZkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvYmVuY2htYXJrL2NhdGNoX29wdGltaXplci5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgotICogIENyZWF0ZWQgYnkgSm9hY2hpbSBvbiAxNi8wNC8yMDE5LgotICogIEFkYXB0ZWQgZnJvbSBkb25hdGVkIG5vbml1cyBjb2RlLgotICoKLSAqICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0gKiAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKi8KLQotIC8vIEhpbnRpbmcgdGhlIG9wdGltaXplcgotCi0jaWZuZGVmIFRXT0JMVUVDVUJFU19DQVRDSF9PUFRJTUlaRVJfSFBQX0lOQ0xVREVECi0jZGVmaW5lIFRXT0JMVUVDVUJFU19DQVRDSF9PUFRJTUlaRVJfSFBQX0lOQ0xVREVECi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotIyAgIGluY2x1ZGUgPGF0b21pYz4gLy8gYXRvbWljX3RocmVhZF9mZW5jZQotI2VuZGlmCi0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgbmFtZXNwYWNlIEJlbmNobWFyayB7Ci0jaWYgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX2NsYW5nX18pCi0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgICAgICBpbmxpbmUgdm9pZCBrZWVwX21lbW9yeShUKiBwKSB7Ci0gICAgICAgICAgICBhc20gdm9sYXRpbGUoIiIgOiA6ICJnIihwKSA6ICJtZW1vcnkiKTsKLSAgICAgICAgfQotICAgICAgICBpbmxpbmUgdm9pZCBrZWVwX21lbW9yeSgpIHsKLSAgICAgICAgICAgIGFzbSB2b2xhdGlsZSgiIiA6IDogOiAibWVtb3J5Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBuYW1lc3BhY2UgRGV0YWlsIHsKLSAgICAgICAgICAgIGlubGluZSB2b2lkIG9wdGltaXplcl9iYXJyaWVyKCkgeyBrZWVwX21lbW9yeSgpOyB9Ci0gICAgICAgIH0gLy8gbmFtZXNwYWNlIERldGFpbAotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKLQotI3ByYWdtYSBvcHRpbWl6ZSgiIiwgb2ZmKQotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICAgICAgaW5saW5lIHZvaWQga2VlcF9tZW1vcnkoVCogcCkgewotICAgICAgICAgICAgLy8gdGhhbmtzIEBtaWxsZW5pdW1idWcKLSAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGNoYXIgdm9sYXRpbGUqPihwKSA9ICpyZWludGVycHJldF9jYXN0PGNoYXIgY29uc3Qgdm9sYXRpbGUqPihwKTsKLSAgICAgICAgfQotICAgICAgICAvLyBUT0RPIGVxdWl2YWxlbnQga2VlcF9tZW1vcnkoKQotI3ByYWdtYSBvcHRpbWl6ZSgiIiwgb24pCi0KLSAgICAgICAgbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgICAgICAgICBpbmxpbmUgdm9pZCBvcHRpbWl6ZXJfYmFycmllcigpIHsKLSAgICAgICAgICAgICAgICBzdGQ6OmF0b21pY190aHJlYWRfZmVuY2Uoc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gLy8gbmFtZXNwYWNlIERldGFpbAotCi0jZW5kaWYKLQotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICAgICAgaW5saW5lIHZvaWQgZGVvcHRpbWl6ZV92YWx1ZShUJiYgeCkgewotICAgICAgICAgICAga2VlcF9tZW1vcnkoJngpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZuLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICBpbmxpbmUgYXV0byBpbnZva2VfZGVvcHRpbWl6ZWQoRm4mJiBmbiwgQXJncyYmLi4uIGFyZ3MpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8dm9pZCwgZGVjbHR5cGUoZm4oYXJncy4uLikpPjo6dmFsdWU+Ojp0eXBlIHsKLSAgICAgICAgICAgIGRlb3B0aW1pemVfdmFsdWUoc3RkOjpmb3J3YXJkPEZuPihmbikgKHN0ZDo6Zm9yd2FyZDxBcmdzLi4uPihhcmdzLi4uKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZuLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICBpbmxpbmUgYXV0byBpbnZva2VfZGVvcHRpbWl6ZWQoRm4mJiBmbiwgQXJncyYmLi4uIGFyZ3MpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTx2b2lkLCBkZWNsdHlwZShmbihhcmdzLi4uKSk+Ojp2YWx1ZT46OnR5cGUgewotICAgICAgICAgICAgc3RkOjpmb3J3YXJkPEZuPihmbikgKHN0ZDo6Zm9yd2FyZDxBcmdzLi4uPihhcmdzLi4uKSk7Ci0gICAgICAgIH0KLSAgICB9IC8vIG5hbWVzcGFjZSBCZW5jaG1hcmsKLX0gLy8gbmFtZXNwYWNlIENhdGNoCi0KLSNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfT1BUSU1JWkVSX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvY2F0Y2hfb3V0bGllcl9jbGFzc2lmaWNhdGlvbi5ocHAgYi9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9jYXRjaF9vdXRsaWVyX2NsYXNzaWZpY2F0aW9uLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZhMGFkZi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9jYXRjaF9vdXRsaWVyX2NsYXNzaWZpY2F0aW9uLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qCi0gKiAgQ3JlYXRlZCBieSBKb2FjaGltIG9uIDE2LzA0LzIwMTkuCi0gKiAgQWRhcHRlZCBmcm9tIGRvbmF0ZWQgbm9uaXVzIGNvZGUuCi0gKgotICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLSAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqLwotCi0vLyBPdXRsaWVyIGluZm9ybWF0aW9uCi0jaWZuZGVmIFRXT0JMVUVDVUJFU19DQVRDSF9PVVRMSUVSU19IUFBfSU5DTFVERUQKLSNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX09VVExJRVJTX0hQUF9JTkNMVURFRAotCi1uYW1lc3BhY2UgQ2F0Y2ggewotICAgIG5hbWVzcGFjZSBCZW5jaG1hcmsgewotICAgICAgICBzdHJ1Y3QgT3V0bGllckNsYXNzaWZpY2F0aW9uIHsKLSAgICAgICAgICAgIGludCBzYW1wbGVzX3NlZW4gPSAwOwotICAgICAgICAgICAgaW50IGxvd19zZXZlcmUgPSAwOyAgICAgLy8gbW9yZSB0aGFuIDMgdGltZXMgSVFSIGJlbG93IFExCi0gICAgICAgICAgICBpbnQgbG93X21pbGQgPSAwOyAgICAgICAvLyAxLjUgdG8gMyB0aW1lcyBJUVIgYmVsb3cgUTEKLSAgICAgICAgICAgIGludCBoaWdoX21pbGQgPSAwOyAgICAgIC8vIDEuNSB0byAzIHRpbWVzIElRUiBhYm92ZSBRMwotICAgICAgICAgICAgaW50IGhpZ2hfc2V2ZXJlID0gMDsgICAgLy8gbW9yZSB0aGFuIDMgdGltZXMgSVFSIGFib3ZlIFEzCi0KLSAgICAgICAgICAgIGludCB0b3RhbCgpIGNvbnN0IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbG93X3NldmVyZSArIGxvd19taWxkICsgaGlnaF9taWxkICsgaGlnaF9zZXZlcmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgfSAvLyBuYW1lc3BhY2UgQmVuY2htYXJrCi19IC8vIG5hbWVzcGFjZSBDYXRjaAotCi0jZW5kaWYgLy8gVFdPQkxVRUNVQkVTX0NBVENIX09VVExJRVJTX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvY2F0Y2hfc2FtcGxlX2FuYWx5c2lzLmhwcCBiL2luY2x1ZGUvaW50ZXJuYWwvYmVuY2htYXJrL2NhdGNoX3NhbXBsZV9hbmFseXNpcy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NTBkMGIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvY2F0Y2hfc2FtcGxlX2FuYWx5c2lzLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiAgQ3JlYXRlZCBieSBKb2FjaGltIG9uIDE2LzA0LzIwMTkuCi0gKiAgQWRhcHRlZCBmcm9tIGRvbmF0ZWQgbm9uaXVzIGNvZGUuCi0gKgotICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLSAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqLwotCi0vLyBCZW5jaG1hcmsgcmVzdWx0cwotCi0jaWZuZGVmIFRXT0JMVUVDVUJFU19DQVRDSF9CRU5DSE1BUktfUkVTVUxUU19IUFBfSU5DTFVERUQKLSNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX0JFTkNITUFSS19SRVNVTFRTX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSAiY2F0Y2hfY2xvY2suaHBwIgotI2luY2x1ZGUgImNhdGNoX2VzdGltYXRlLmhwcCIKLSNpbmNsdWRlICJjYXRjaF9vdXRsaWVyX2NsYXNzaWZpY2F0aW9uLmhwcCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPGl0ZXJhdG9yPgotCi1uYW1lc3BhY2UgQ2F0Y2ggewotICAgIG5hbWVzcGFjZSBCZW5jaG1hcmsgewotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRHVyYXRpb24+Ci0gICAgICAgIHN0cnVjdCBTYW1wbGVBbmFseXNpcyB7Ci0gICAgICAgICAgICBzdGQ6OnZlY3RvcjxEdXJhdGlvbj4gc2FtcGxlczsKLSAgICAgICAgICAgIEVzdGltYXRlPER1cmF0aW9uPiBtZWFuOwotICAgICAgICAgICAgRXN0aW1hdGU8RHVyYXRpb24+IHN0YW5kYXJkX2RldmlhdGlvbjsKLSAgICAgICAgICAgIE91dGxpZXJDbGFzc2lmaWNhdGlvbiBvdXRsaWVyczsKLSAgICAgICAgICAgIGRvdWJsZSBvdXRsaWVyX3ZhcmlhbmNlOwotCi0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRHVyYXRpb24yPgotICAgICAgICAgICAgb3BlcmF0b3IgU2FtcGxlQW5hbHlzaXM8RHVyYXRpb24yPigpIGNvbnN0IHsKLSAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxEdXJhdGlvbjI+IHNhbXBsZXMyOwotICAgICAgICAgICAgICAgIHNhbXBsZXMyLnJlc2VydmUoc2FtcGxlcy5zaXplKCkpOwotICAgICAgICAgICAgICAgIHN0ZDo6dHJhbnNmb3JtKHNhbXBsZXMuYmVnaW4oKSwgc2FtcGxlcy5lbmQoKSwgc3RkOjpiYWNrX2luc2VydGVyKHNhbXBsZXMyKSwgW10oRHVyYXRpb24gZCkgeyByZXR1cm4gRHVyYXRpb24yKGQpOyB9KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoc2FtcGxlczIpLAotICAgICAgICAgICAgICAgICAgICBtZWFuLAotICAgICAgICAgICAgICAgICAgICBzdGFuZGFyZF9kZXZpYXRpb24sCi0gICAgICAgICAgICAgICAgICAgIG91dGxpZXJzLAotICAgICAgICAgICAgICAgICAgICBvdXRsaWVyX3ZhcmlhbmNlLAotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgfSAvLyBuYW1lc3BhY2UgQmVuY2htYXJrCi19IC8vIG5hbWVzcGFjZSBDYXRjaAotCi0jZW5kaWYgLy8gVFdPQkxVRUNVQkVTX0NBVENIX0JFTkNITUFSS19SRVNVTFRTX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX2FuYWx5c2UuaHBwIGIvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX2FuYWx5c2UuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2JlY2JlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvYmVuY2htYXJrL2RldGFpbC9jYXRjaF9hbmFseXNlLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiAgQ3JlYXRlZCBieSBKb2FjaGltIG9uIDE2LzA0LzIwMTkuCi0gKiAgQWRhcHRlZCBmcm9tIGRvbmF0ZWQgbm9uaXVzIGNvZGUuCi0gKgotICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLSAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqLwotCi0gLy8gUnVuIGFuZCBhbmFseXNlIG9uZSBiZW5jaG1hcmsKLQotI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfREVUQUlMX0FOQUxZU0VfSFBQX0lOQ0xVREVECi0jZGVmaW5lIFRXT0JMVUVDVUJFU19DQVRDSF9ERVRBSUxfQU5BTFlTRV9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgIi4uL2NhdGNoX2Nsb2NrLmhwcCIKLSNpbmNsdWRlICIuLi9jYXRjaF9zYW1wbGVfYW5hbHlzaXMuaHBwIgotI2luY2x1ZGUgImNhdGNoX3N0YXRzLmhwcCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgbmFtZXNwYWNlIEJlbmNobWFyayB7Ci0gICAgICAgIG5hbWVzcGFjZSBEZXRhaWwgewotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIER1cmF0aW9uLCB0eXBlbmFtZSBJdGVyYXRvcj4KLSAgICAgICAgICAgIFNhbXBsZUFuYWx5c2lzPER1cmF0aW9uPiBhbmFseXNlKGNvbnN0IElDb25maWcgJmNmZywgRW52aXJvbm1lbnQ8RHVyYXRpb24+LCBJdGVyYXRvciBmaXJzdCwgSXRlcmF0b3IgbGFzdCkgewotICAgICAgICAgICAgICAgIGlmICghY2ZnLmJlbmNobWFya05vQW5hbHlzaXMoKSkgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjxkb3VibGU+IHNhbXBsZXM7Ci0gICAgICAgICAgICAgICAgICAgIHNhbXBsZXMucmVzZXJ2ZShsYXN0IC0gZmlyc3QpOwotICAgICAgICAgICAgICAgICAgICBzdGQ6OnRyYW5zZm9ybShmaXJzdCwgbGFzdCwgc3RkOjpiYWNrX2luc2VydGVyKHNhbXBsZXMpLCBbXShEdXJhdGlvbiBkKSB7IHJldHVybiBkLmNvdW50KCk7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gYW5hbHlzaXMgPSBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6OmFuYWx5c2Vfc2FtcGxlcyhjZmcuYmVuY2htYXJrQ29uZmlkZW5jZUludGVydmFsKCksIGNmZy5iZW5jaG1hcmtSZXNhbXBsZXMoKSwgc2FtcGxlcy5iZWdpbigpLCBzYW1wbGVzLmVuZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBvdXRsaWVycyA9IENhdGNoOjpCZW5jaG1hcms6OkRldGFpbDo6Y2xhc3NpZnlfb3V0bGllcnMoc2FtcGxlcy5iZWdpbigpLCBzYW1wbGVzLmVuZCgpKTsKLQotICAgICAgICAgICAgICAgICAgICBhdXRvIHdyYXBfZXN0aW1hdGUgPSBbXShFc3RpbWF0ZTxkb3VibGU+IGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFc3RpbWF0ZTxEdXJhdGlvbj4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1cmF0aW9uKGUucG9pbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEdXJhdGlvbihlLmxvd2VyX2JvdW5kKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHVyYXRpb24oZS51cHBlcl9ib3VuZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuY29uZmlkZW5jZV9pbnRlcnZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPER1cmF0aW9uPiBzYW1wbGVzMjsKLSAgICAgICAgICAgICAgICAgICAgc2FtcGxlczIucmVzZXJ2ZShzYW1wbGVzLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dHJhbnNmb3JtKHNhbXBsZXMuYmVnaW4oKSwgc2FtcGxlcy5lbmQoKSwgc3RkOjpiYWNrX2luc2VydGVyKHNhbXBsZXMyKSwgW10oZG91YmxlIGQpIHsgcmV0dXJuIER1cmF0aW9uKGQpOyB9KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bW92ZShzYW1wbGVzMiksCi0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwX2VzdGltYXRlKGFuYWx5c2lzLm1lYW4pLAotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcF9lc3RpbWF0ZShhbmFseXNpcy5zdGFuZGFyZF9kZXZpYXRpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGllcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmFseXNpcy5vdXRsaWVyX3ZhcmlhbmNlLAotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPER1cmF0aW9uPiBzYW1wbGVzOyAKLSAgICAgICAgICAgICAgICAgICAgc2FtcGxlcy5yZXNlcnZlKGxhc3QgLSBmaXJzdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgRHVyYXRpb24gbWVhbiA9IER1cmF0aW9uKDApOwotICAgICAgICAgICAgICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IGZpcnN0OyBpdCA8IGxhc3Q7ICsraXQsICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcy5wdXNoX2JhY2soRHVyYXRpb24oKml0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZWFuICs9IER1cmF0aW9uKCppdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbWVhbiAvPSBpOwotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoc2FtcGxlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICBFc3RpbWF0ZTxEdXJhdGlvbj57bWVhbiwgbWVhbiwgbWVhbiwgMC4wfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEVzdGltYXRlPER1cmF0aW9uPntEdXJhdGlvbigwKSwgRHVyYXRpb24oMCksIER1cmF0aW9uKDApLCAwLjB9LAotICAgICAgICAgICAgICAgICAgICAgICAgT3V0bGllckNsYXNzaWZpY2F0aW9ue30sCi0gICAgICAgICAgICAgICAgICAgICAgICAwLjAKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gLy8gbmFtZXNwYWNlIERldGFpbAotICAgIH0gLy8gbmFtZXNwYWNlIEJlbmNobWFyawotfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKLQotI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9ERVRBSUxfQU5BTFlTRV9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvYmVuY2htYXJrL2RldGFpbC9jYXRjaF9iZW5jaG1hcmtfZnVuY3Rpb24uaHBwIGIvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX2JlbmNobWFya19mdW5jdGlvbi5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwYzdmMWQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX2JlbmNobWFya19mdW5jdGlvbi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotICAgIC8qCi0gKiAgQ3JlYXRlZCBieSBKb2FjaGltIG9uIDE2LzA0LzIwMTkuCi0gKiAgQWRhcHRlZCBmcm9tIGRvbmF0ZWQgbm9uaXVzIGNvZGUuCi0gKgotICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLSAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqLwotCi0gLy8gRHVtYiBzdGQ6OmZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIGZvciBjb25zaXN0ZW50IGNhbGwgb3ZlcmhlYWQKLQotI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfREVUQUlMX0JFTkNITUFSS19GVU5DVElPTl9IUFBfSU5DTFVERUQKLSNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX0RFVEFJTF9CRU5DSE1BUktfRlVOQ1RJT05fSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlICIuLi9jYXRjaF9jaHJvbm9tZXRlci5ocHAiCi0jaW5jbHVkZSAiY2F0Y2hfY29tcGxldGVfaW52b2tlLmhwcCIKLSNpbmNsdWRlICIuLi8uLi9jYXRjaF9tZXRhLmhwcCIKLQotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgbmFtZXNwYWNlIEJlbmNobWFyayB7Ci0gICAgICAgIG5hbWVzcGFjZSBEZXRhaWwgewotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgICAgICAgICB1c2luZyBEZWNheSA9IHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU7Ci0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLSAgICAgICAgICAgIHN0cnVjdCBpc19yZWxhdGVkCi0gICAgICAgICAgICAgICAgOiBzdGQ6OmlzX3NhbWU8RGVjYXk8VD4sIERlY2F5PFU+PiB7fTsKLQotICAgICAgICAgICAgLy8vIFdlIG5lZWQgdG8gcmVpbnZlbnQgc3RkOjpmdW5jdGlvbiBiZWNhdXNlIGV2ZXJ5IHBpZWNlIG9mIGNvZGUgdGhhdCBtaWdodCBhZGQgb3ZlcmhlYWQKLSAgICAgICAgICAgIC8vLyBpbiBhIG1lYXN1cmVtZW50IGNvbnRleHQgbmVlZHMgdG8gaGF2ZSBjb25zaXN0ZW50IHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBzbyB0aGF0IHdlCi0gICAgICAgICAgICAvLy8gY2FuIGFjY291bnQgZm9yIGl0IGluIHRoZSBtZWFzdXJlbWVudC4KLSAgICAgICAgICAgIC8vLyBJbXBsZW1lbnRhdGlvbnMgb2Ygc3RkOjpmdW5jdGlvbiB3aXRoIG9wdGltaXphdGlvbnMgdGhhdCBhcmVuJ3QgYWx3YXlzIGFwcGxpY2FibGUsIGxpa2UKLSAgICAgICAgICAgIC8vLyBzbWFsbCBidWZmZXIgb3B0aW1pemF0aW9ucywgYXJlIG5vdCB1bmNvbW1vbi4KLSAgICAgICAgICAgIC8vLyBUaGlzIGlzIGVmZmVjdGl2ZWx5IGFuIGltcGxlbWVudGF0aW9uIG9mIHN0ZDo6ZnVuY3Rpb24gd2l0aG91dCBhbnkgc3VjaCBvcHRpbWl6YXRpb25zOwotICAgICAgICAgICAgLy8vIGl0IG1heSBiZSBzbG93LCBidXQgaXQgaXMgY29uc2lzdGVudGx5IHNsb3cuCi0gICAgICAgICAgICBzdHJ1Y3QgQmVuY2htYXJrRnVuY3Rpb24gewotICAgICAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgY2FsbGFibGUgewotICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChDaHJvbm9tZXRlciBtZXRlcikgY29uc3QgPSAwOwotICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIGNhbGxhYmxlKiBjbG9uZSgpIGNvbnN0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgdmlydHVhbCB+Y2FsbGFibGUoKSA9IGRlZmF1bHQ7Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuPgotICAgICAgICAgICAgICAgIHN0cnVjdCBtb2RlbCA6IHB1YmxpYyBjYWxsYWJsZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1vZGVsKEZ1biYmIGZ1bikgOiBmdW4oc3RkOjptb3ZlKGZ1bikpIHt9Ci0gICAgICAgICAgICAgICAgICAgIG1vZGVsKEZ1biBjb25zdCYgZnVuKSA6IGZ1bihmdW4pIHt9Ci0KLSAgICAgICAgICAgICAgICAgICAgbW9kZWw8RnVuPiogY2xvbmUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBuZXcgbW9kZWw8RnVuPigqdGhpcyk7IH0KLQotICAgICAgICAgICAgICAgICAgICB2b2lkIGNhbGwoQ2hyb25vbWV0ZXIgbWV0ZXIpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGwobWV0ZXIsIGlzX2NhbGxhYmxlPEZ1bihDaHJvbm9tZXRlcik+KCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHZvaWQgY2FsbChDaHJvbm9tZXRlciBtZXRlciwgc3RkOjp0cnVlX3R5cGUpIGNvbnN0IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bihtZXRlcik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdm9pZCBjYWxsKENocm9ub21ldGVyIG1ldGVyLCBzdGQ6OmZhbHNlX3R5cGUpIGNvbnN0IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGVyLm1lYXN1cmUoZnVuKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIEZ1biBmdW47Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIHN0cnVjdCBkb19ub3RoaW5nIHsgdm9pZCBvcGVyYXRvcigpKCkgY29uc3Qge30gfTsKLQotICAgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgICAgICAgICAgICAgIEJlbmNobWFya0Z1bmN0aW9uKG1vZGVsPFQ+KiBjKSA6IGYoYykge30KLQotICAgICAgICAgICAgcHVibGljOgotICAgICAgICAgICAgICAgIEJlbmNobWFya0Z1bmN0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgOiBmKG5ldyBtb2RlbDxkb19ub3RoaW5nPnsge30gfSkge30KLQotICAgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW4sCi0gICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFpc19yZWxhdGVkPEZ1biwgQmVuY2htYXJrRnVuY3Rpb24+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+Ci0gICAgICAgICAgICAgICAgICAgIEJlbmNobWFya0Z1bmN0aW9uKEZ1biYmIGZ1bikKLSAgICAgICAgICAgICAgICAgICAgOiBmKG5ldyBtb2RlbDx0eXBlbmFtZSBzdGQ6OmRlY2F5PEZ1bj46OnR5cGU+KHN0ZDo6Zm9yd2FyZDxGdW4+KGZ1bikpKSB7fQotCi0gICAgICAgICAgICAgICAgQmVuY2htYXJrRnVuY3Rpb24oQmVuY2htYXJrRnVuY3Rpb24mJiB0aGF0KQotICAgICAgICAgICAgICAgICAgICA6IGYoc3RkOjptb3ZlKHRoYXQuZikpIHt9Ci0KLSAgICAgICAgICAgICAgICBCZW5jaG1hcmtGdW5jdGlvbihCZW5jaG1hcmtGdW5jdGlvbiBjb25zdCYgdGhhdCkKLSAgICAgICAgICAgICAgICAgICAgOiBmKHRoYXQuZi0+Y2xvbmUoKSkge30KLQotICAgICAgICAgICAgICAgIEJlbmNobWFya0Z1bmN0aW9uJiBvcGVyYXRvcj0oQmVuY2htYXJrRnVuY3Rpb24mJiB0aGF0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGYgPSBzdGQ6Om1vdmUodGhhdC5mKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEJlbmNobWFya0Z1bmN0aW9uJiBvcGVyYXRvcj0oQmVuY2htYXJrRnVuY3Rpb24gY29uc3QmIHRoYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgZi5yZXNldCh0aGF0LmYtPmNsb25lKCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcigpKENocm9ub21ldGVyIG1ldGVyKSBjb25zdCB7IGYtPmNhbGwobWV0ZXIpOyB9Ci0KLSAgICAgICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGNhbGxhYmxlPiBmOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfSAvLyBuYW1lc3BhY2UgRGV0YWlsCi0gICAgfSAvLyBuYW1lc3BhY2UgQmVuY2htYXJrCi19IC8vIG5hbWVzcGFjZSBDYXRjaAotCi0jZW5kaWYgLy8gVFdPQkxVRUNVQkVTX0NBVENIX0RFVEFJTF9CRU5DSE1BUktfRlVOQ1RJT05fSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9kZXRhaWwvY2F0Y2hfY29tcGxldGVfaW52b2tlLmhwcCBiL2luY2x1ZGUvaW50ZXJuYWwvYmVuY2htYXJrL2RldGFpbC9jYXRjaF9jb21wbGV0ZV9pbnZva2UuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmViMmFjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvYmVuY2htYXJrL2RldGFpbC9jYXRjaF9jb21wbGV0ZV9pbnZva2UuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqICBDcmVhdGVkIGJ5IEpvYWNoaW0gb24gMTYvMDQvMjAxOS4KLSAqICBBZGFwdGVkIGZyb20gZG9uYXRlZCBub25pdXMgY29kZS4KLSAqCi0gKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICovCi0KLS8vIEludm9rZSB3aXRoIGEgc3BlY2lhbCBjYXNlIGZvciB2b2lkCi0KLSNpZm5kZWYgVFdPQkxVRUNVQkVTX0NBVENIX0RFVEFJTF9DT01QTEVURV9JTlZPS0VfSFBQX0lOQ0xVREVECi0jZGVmaW5lIFRXT0JMVUVDVUJFU19DQVRDSF9ERVRBSUxfQ09NUExFVEVfSU5WT0tFX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSAiLi4vLi4vY2F0Y2hfZW5mb3JjZS5oIgotCi0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotbmFtZXNwYWNlIENhdGNoIHsKLSAgICBuYW1lc3BhY2UgQmVuY2htYXJrIHsKLSAgICAgICAgbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICAgICAgICAgIHN0cnVjdCBDb21wbGV0ZVR5cGUgeyB1c2luZyB0eXBlID0gVDsgfTsKLSAgICAgICAgICAgIHRlbXBsYXRlIDw+Ci0gICAgICAgICAgICBzdHJ1Y3QgQ29tcGxldGVUeXBlPHZvaWQ+IHsgc3RydWN0IHR5cGUge307IH07Ci0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgICAgICAgICAgdXNpbmcgQ29tcGxldGVUeXBlX3QgPSB0eXBlbmFtZSBDb21wbGV0ZVR5cGU8VD46OnR5cGU7Ci0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBSZXN1bHQ+Ci0gICAgICAgICAgICBzdHJ1Y3QgQ29tcGxldGVJbnZva2VyIHsKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICAgICAgICAgIHN0YXRpYyBSZXN1bHQgaW52b2tlKEZ1biYmIGZ1biwgQXJncyYmLi4uIGFyZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6Zm9yd2FyZDxGdW4+KGZ1bikoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgdGVtcGxhdGUgPD4KLSAgICAgICAgICAgIHN0cnVjdCBDb21wbGV0ZUludm9rZXI8dm9pZD4gewotICAgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW4sIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAgICAgICAgICAgc3RhdGljIENvbXBsZXRlVHlwZV90PHZvaWQ+IGludm9rZShGdW4mJiBmdW4sIEFyZ3MmJi4uLiBhcmdzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxGdW4+KGZ1bikoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2lnPgotICAgICAgICAgICAgdXNpbmcgUmVzdWx0T2ZfdCA9IHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPFNpZz46OnR5cGU7Ci0KLSAgICAgICAgICAgIC8vIGludm9rZSBhbmQgbm90IHJldHVybiB2b2lkIDooCi0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICAgICAgQ29tcGxldGVUeXBlX3Q8UmVzdWx0T2ZfdDxGdW4oQXJncy4uLik+PiBjb21wbGV0ZV9pbnZva2UoRnVuJiYgZnVuLCBBcmdzJiYuLi4gYXJncykgewotICAgICAgICAgICAgICAgIHJldHVybiBDb21wbGV0ZUludm9rZXI8UmVzdWx0T2ZfdDxGdW4oQXJncy4uLik+Pjo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW4+KGZ1biksIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGJlbmNobWFya0Vycm9yTXNnID0gImEgYmVuY2htYXJrIGZhaWxlZCB0byBydW4gc3VjY2Vzc2Z1bGx5IjsKLSAgICAgICAgfSAvLyBuYW1lc3BhY2UgRGV0YWlsCi0KLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bj4KLSAgICAgICAgRGV0YWlsOjpDb21wbGV0ZVR5cGVfdDxEZXRhaWw6OlJlc3VsdE9mX3Q8RnVuKCk+PiB1c2VyX2NvZGUoRnVuJiYgZnVuKSB7Ci0gICAgICAgICAgICBDQVRDSF9UUll7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIERldGFpbDo6Y29tcGxldGVfaW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW4+KGZ1bikpOwotICAgICAgICAgICAgfSBDQVRDSF9DQVRDSF9BTEx7Ci0gICAgICAgICAgICAgICAgZ2V0UmVzdWx0Q2FwdHVyZSgpLmJlbmNobWFya0ZhaWxlZCh0cmFuc2xhdGVBY3RpdmVFeGNlcHRpb24oKSk7Ci0gICAgICAgICAgICAgICAgQ0FUQ0hfUlVOVElNRV9FUlJPUihEZXRhaWw6OmJlbmNobWFya0Vycm9yTXNnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gLy8gbmFtZXNwYWNlIEJlbmNobWFyawotfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKLQotI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9ERVRBSUxfQ09NUExFVEVfSU5WT0tFX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX2VzdGltYXRlX2Nsb2NrLmhwcCBiL2luY2x1ZGUvaW50ZXJuYWwvYmVuY2htYXJrL2RldGFpbC9jYXRjaF9lc3RpbWF0ZV9jbG9jay5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1NWM1ODIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX2VzdGltYXRlX2Nsb2NrLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKgotICogIENyZWF0ZWQgYnkgSm9hY2hpbSBvbiAxNi8wNC8yMDE5LgotICogIEFkYXB0ZWQgZnJvbSBkb25hdGVkIG5vbml1cyBjb2RlLgotICoKLSAqICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0gKiAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKi8KLQotIC8vIEVudmlyb25tZW50IG1lYXN1cmVtZW50Ci0KLSNpZm5kZWYgVFdPQkxVRUNVQkVTX0NBVENIX0RFVEFJTF9FU1RJTUFURV9DTE9DS19IUFBfSU5DTFVERUQKLSNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX0RFVEFJTF9FU1RJTUFURV9DTE9DS19IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgIi4uL2NhdGNoX2Nsb2NrLmhwcCIKLSNpbmNsdWRlICIuLi9jYXRjaF9lbnZpcm9ubWVudC5ocHAiCi0jaW5jbHVkZSAiY2F0Y2hfc3RhdHMuaHBwIgotI2luY2x1ZGUgImNhdGNoX21lYXN1cmUuaHBwIgotI2luY2x1ZGUgImNhdGNoX3J1bl9mb3JfYXRfbGVhc3QuaHBwIgotI2luY2x1ZGUgIi4uL2NhdGNoX2Nsb2NrLmhwcCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KLSNpbmNsdWRlIDx0dXBsZT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8Y21hdGg+Ci0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgbmFtZXNwYWNlIEJlbmNobWFyayB7Ci0gICAgICAgIG5hbWVzcGFjZSBEZXRhaWwgewotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsb2NrPgotICAgICAgICAgICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiByZXNvbHV0aW9uKGludCBrKSB7Ci0gICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VGltZVBvaW50PENsb2NrPj4gdGltZXM7Ci0gICAgICAgICAgICAgICAgdGltZXMucmVzZXJ2ZShrICsgMSk7Ci0gICAgICAgICAgICAgICAgc3RkOjpnZW5lcmF0ZV9uKHN0ZDo6YmFja19pbnNlcnRlcih0aW1lcyksIGsgKyAxLCBub3c8Q2xvY2s+e30pOwotCi0gICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiBkZWx0YXM7Ci0gICAgICAgICAgICAgICAgZGVsdGFzLnJlc2VydmUoayk7Ci0gICAgICAgICAgICAgICAgc3RkOjp0cmFuc2Zvcm0oc3RkOjpuZXh0KHRpbWVzLmJlZ2luKCkpLCB0aW1lcy5lbmQoKSwgdGltZXMuYmVnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpiYWNrX2luc2VydGVyKGRlbHRhcyksCi0gICAgICAgICAgICAgICAgICAgIFtdKFRpbWVQb2ludDxDbG9jaz4gYSwgVGltZVBvaW50PENsb2NrPiBiKSB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KChhIC0gYikuY291bnQoKSk7IH0pOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGRlbHRhczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgYXV0byB3YXJtdXBfaXRlcmF0aW9ucyA9IDEwMDAwOwotICAgICAgICAgICAgY29uc3QgYXV0byB3YXJtdXBfdGltZSA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTAwKTsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8gbWluaW11bV90aWNrcyA9IDEwMDA7Ci0gICAgICAgICAgICBjb25zdCBhdXRvIHdhcm11cF9zZWVkID0gMTAwMDA7Ci0gICAgICAgICAgICBjb25zdCBhdXRvIGNsb2NrX3Jlc29sdXRpb25fZXN0aW1hdGlvbl90aW1lID0gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyg1MDApOwotICAgICAgICAgICAgY29uc3QgYXV0byBjbG9ja19jb3N0X2VzdGltYXRpb25fdGltZV9saW1pdCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDEpOwotICAgICAgICAgICAgY29uc3QgYXV0byBjbG9ja19jb3N0X2VzdGltYXRpb25fdGlja19saW1pdCA9IDEwMDAwMDsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8gY2xvY2tfY29zdF9lc3RpbWF0aW9uX3RpbWUgPSBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEwKTsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8gY2xvY2tfY29zdF9lc3RpbWF0aW9uX2l0ZXJhdGlvbnMgPSAxMDAwMDsKLQotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsb2NrPgotICAgICAgICAgICAgaW50IHdhcm11cCgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcnVuX2Zvcl9hdF9sZWFzdDxDbG9jaz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8Q2xvY2tEdXJhdGlvbjxDbG9jaz4+KHdhcm11cF90aW1lKSwgd2FybXVwX3NlZWQsICZyZXNvbHV0aW9uPENsb2NrPikKLSAgICAgICAgICAgICAgICAgICAgLml0ZXJhdGlvbnM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xvY2s+Ci0gICAgICAgICAgICBFbnZpcm9ubWVudEVzdGltYXRlPEZsb2F0RHVyYXRpb248Q2xvY2s+PiBlc3RpbWF0ZV9jbG9ja19yZXNvbHV0aW9uKGludCBpdGVyYXRpb25zKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByID0gcnVuX2Zvcl9hdF9sZWFzdDxDbG9jaz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8Q2xvY2tEdXJhdGlvbjxDbG9jaz4+KGNsb2NrX3Jlc29sdXRpb25fZXN0aW1hdGlvbl90aW1lKSwgaXRlcmF0aW9ucywgJnJlc29sdXRpb248Q2xvY2s+KQotICAgICAgICAgICAgICAgICAgICAucmVzdWx0OwotICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIEZsb2F0RHVyYXRpb248Q2xvY2s+KG1lYW4oci5iZWdpbigpLCByLmVuZCgpKSksCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5X291dGxpZXJzKHIuYmVnaW4oKSwgci5lbmQoKSksCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbG9jaz4KLSAgICAgICAgICAgIEVudmlyb25tZW50RXN0aW1hdGU8RmxvYXREdXJhdGlvbjxDbG9jaz4+IGVzdGltYXRlX2Nsb2NrX2Nvc3QoRmxvYXREdXJhdGlvbjxDbG9jaz4gcmVzb2x1dGlvbikgewotICAgICAgICAgICAgICAgIGF1dG8gdGltZV9saW1pdCA9IHN0ZDo6bWluKHJlc29sdXRpb24gKiBjbG9ja19jb3N0X2VzdGltYXRpb25fdGlja19saW1pdCwgRmxvYXREdXJhdGlvbjxDbG9jaz4oY2xvY2tfY29zdF9lc3RpbWF0aW9uX3RpbWVfbGltaXQpKTsKLSAgICAgICAgICAgICAgICBhdXRvIHRpbWVfY2xvY2sgPSBbXShpbnQgaykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGV0YWlsOjptZWFzdXJlPENsb2NrPihba10gewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2xhdGlsZSBhdXRvIGlnbm9yZWQgPSBDbG9jazo6bm93KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpaWdub3JlZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSkuZWxhcHNlZDsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIHRpbWVfY2xvY2soMSk7Ci0gICAgICAgICAgICAgICAgaW50IGl0ZXJzID0gY2xvY2tfY29zdF9lc3RpbWF0aW9uX2l0ZXJhdGlvbnM7Ci0gICAgICAgICAgICAgICAgYXV0byYmIHIgPSBydW5fZm9yX2F0X2xlYXN0PENsb2NrPihzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxDbG9ja0R1cmF0aW9uPENsb2NrPj4oY2xvY2tfY29zdF9lc3RpbWF0aW9uX3RpbWUpLCBpdGVycywgdGltZV9jbG9jayk7Ci0gICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiB0aW1lczsKLSAgICAgICAgICAgICAgICBpbnQgbnNhbXBsZXMgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6Y2VpbCh0aW1lX2xpbWl0IC8gci5lbGFwc2VkKSk7Ci0gICAgICAgICAgICAgICAgdGltZXMucmVzZXJ2ZShuc2FtcGxlcyk7Ci0gICAgICAgICAgICAgICAgc3RkOjpnZW5lcmF0ZV9uKHN0ZDo6YmFja19pbnNlcnRlcih0aW1lcyksIG5zYW1wbGVzLCBbdGltZV9jbG9jaywgJnJdIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oKHRpbWVfY2xvY2soci5pdGVyYXRpb25zKSAvIHIuaXRlcmF0aW9ucykuY291bnQoKSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgRmxvYXREdXJhdGlvbjxDbG9jaz4obWVhbih0aW1lcy5iZWdpbigpLCB0aW1lcy5lbmQoKSkpLAotICAgICAgICAgICAgICAgICAgICBjbGFzc2lmeV9vdXRsaWVycyh0aW1lcy5iZWdpbigpLCB0aW1lcy5lbmQoKSksCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsb2NrPgotICAgICAgICAgICAgRW52aXJvbm1lbnQ8RmxvYXREdXJhdGlvbjxDbG9jaz4+IG1lYXN1cmVfZW52aXJvbm1lbnQoKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGljIEVudmlyb25tZW50PEZsb2F0RHVyYXRpb248Q2xvY2s+PiogZW52ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBpZiAoZW52KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAqZW52OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGF1dG8gaXRlcnMgPSBEZXRhaWw6Ondhcm11cDxDbG9jaz4oKTsKLSAgICAgICAgICAgICAgICBhdXRvIHJlc29sdXRpb24gPSBEZXRhaWw6OmVzdGltYXRlX2Nsb2NrX3Jlc29sdXRpb248Q2xvY2s+KGl0ZXJzKTsKLSAgICAgICAgICAgICAgICBhdXRvIGNvc3QgPSBEZXRhaWw6OmVzdGltYXRlX2Nsb2NrX2Nvc3Q8Q2xvY2s+KHJlc29sdXRpb24ubWVhbik7Ci0KLSAgICAgICAgICAgICAgICBlbnYgPSBuZXcgRW52aXJvbm1lbnQ8RmxvYXREdXJhdGlvbjxDbG9jaz4+eyByZXNvbHV0aW9uLCBjb3N0IH07Ci0gICAgICAgICAgICAgICAgcmV0dXJuICplbnY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gLy8gbmFtZXNwYWNlIERldGFpbAotICAgIH0gLy8gbmFtZXNwYWNlIEJlbmNobWFyawotfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKLQotI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9ERVRBSUxfRVNUSU1BVEVfQ0xPQ0tfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9kZXRhaWwvY2F0Y2hfbWVhc3VyZS5ocHAgYi9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9kZXRhaWwvY2F0Y2hfbWVhc3VyZS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyZWQyODAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX21lYXN1cmUuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqICBDcmVhdGVkIGJ5IEpvYWNoaW0gb24gMTYvMDQvMjAxOS4KLSAqICBBZGFwdGVkIGZyb20gZG9uYXRlZCBub25pdXMgY29kZS4KLSAqCi0gKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICovCi0KLS8vIE1lYXN1cmUKLQotI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfREVUQUlMX01FQVNVUkVfSFBQX0lOQ0xVREVECi0jZGVmaW5lIFRXT0JMVUVDVUJFU19DQVRDSF9ERVRBSUxfTUVBU1VSRV9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgIi4uL2NhdGNoX2Nsb2NrLmhwcCIKLSNpbmNsdWRlICJjYXRjaF9jb21wbGV0ZV9pbnZva2UuaHBwIgotI2luY2x1ZGUgImNhdGNoX3RpbWluZy5ocHAiCi0KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi1uYW1lc3BhY2UgQ2F0Y2ggewotICAgIG5hbWVzcGFjZSBCZW5jaG1hcmsgewotICAgICAgICBuYW1lc3BhY2UgRGV0YWlsIHsKLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbG9jaywgdHlwZW5hbWUgRnVuLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICAgICAgVGltaW5nT2Y8Q2xvY2ssIEZ1bihBcmdzLi4uKT4gbWVhc3VyZShGdW4mJiBmdW4sIEFyZ3MmJi4uLiBhcmdzKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzdGFydCA9IENsb2NrOjpub3coKTsKLSAgICAgICAgICAgICAgICBhdXRvJiYgciA9IERldGFpbDo6Y29tcGxldGVfaW52b2tlKGZ1biwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAgICAgICAgICAgICBhdXRvIGVuZCA9IENsb2NrOjpub3coKTsKLSAgICAgICAgICAgICAgICBhdXRvIGRlbHRhID0gZW5kIC0gc3RhcnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGVsdGEsIHN0ZDo6Zm9yd2FyZDxkZWNsdHlwZShyKT4ociksIDEgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSAvLyBuYW1lc3BhY2UgRGV0YWlsCi0gICAgfSAvLyBuYW1lc3BhY2UgQmVuY2htYXJrCi19IC8vIG5hbWVzcGFjZSBDYXRjaAotCi0jZW5kaWYgLy8gVFdPQkxVRUNVQkVTX0NBVENIX0RFVEFJTF9NRUFTVVJFX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX3JlcGVhdC5ocHAgYi9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9kZXRhaWwvY2F0Y2hfcmVwZWF0LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIyNDA3OS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9kZXRhaWwvY2F0Y2hfcmVwZWF0LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiAgQ3JlYXRlZCBieSBKb2FjaGltIG9uIDE2LzA0LzIwMTkuCi0gKiAgQWRhcHRlZCBmcm9tIGRvbmF0ZWQgbm9uaXVzIGNvZGUuCi0gKgotICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLSAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqLwotCi0vLyByZXBlYXQgYWxnb3JpdGhtCi0KLSNpZm5kZWYgVFdPQkxVRUNVQkVTX0NBVENIX0RFVEFJTF9SRVBFQVRfSFBQX0lOQ0xVREVECi0jZGVmaW5lIFRXT0JMVUVDVUJFU19DQVRDSF9ERVRBSUxfUkVQRUFUX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotbmFtZXNwYWNlIENhdGNoIHsKLSAgICBuYW1lc3BhY2UgQmVuY2htYXJrIHsKLSAgICAgICAgbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuPgotICAgICAgICAgICAgc3RydWN0IHJlcGVhdGVyIHsKLSAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yKCkoaW50IGspIGNvbnN0IHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEZ1biBmdW47Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bj4KLSAgICAgICAgICAgIHJlcGVhdGVyPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8RnVuPjo6dHlwZT4gcmVwZWF0KEZ1biYmIGZ1bikgewotICAgICAgICAgICAgICAgIHJldHVybiB7IHN0ZDo6Zm9yd2FyZDxGdW4+KGZ1bikgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSAvLyBuYW1lc3BhY2UgRGV0YWlsCi0gICAgfSAvLyBuYW1lc3BhY2UgQmVuY2htYXJrCi19IC8vIG5hbWVzcGFjZSBDYXRjaAotCi0jZW5kaWYgLy8gVFdPQkxVRUNVQkVTX0NBVENIX0RFVEFJTF9SRVBFQVRfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9kZXRhaWwvY2F0Y2hfcnVuX2Zvcl9hdF9sZWFzdC5ocHAgYi9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9kZXRhaWwvY2F0Y2hfcnVuX2Zvcl9hdF9sZWFzdC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0MWM2YjQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX3J1bl9mb3JfYXRfbGVhc3QuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqICBDcmVhdGVkIGJ5IEpvYWNoaW0gb24gMTYvMDQvMjAxOS4KLSAqICBBZGFwdGVkIGZyb20gZG9uYXRlZCBub25pdXMgY29kZS4KLSAqCi0gKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICovCi0KLS8vIFJ1biBhIGZ1bmN0aW9uIGZvciBhIG1pbmltdW0gYW1vdW50IG9mIHRpbWUKLQotI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfUlVOX0ZPUl9BVF9MRUFTVF9IUFBfSU5DTFVERUQKLSNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX1JVTl9GT1JfQVRfTEVBU1RfSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlICIuLi9jYXRjaF9jbG9jay5ocHAiCi0jaW5jbHVkZSAiLi4vY2F0Y2hfY2hyb25vbWV0ZXIuaHBwIgotI2luY2x1ZGUgImNhdGNoX21lYXN1cmUuaHBwIgotI2luY2x1ZGUgImNhdGNoX2NvbXBsZXRlX2ludm9rZS5ocHAiCi0jaW5jbHVkZSAiY2F0Y2hfdGltaW5nLmhwcCIKLSNpbmNsdWRlICIuLi8uLi9jYXRjaF9tZXRhLmhwcCIKLQotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgbmFtZXNwYWNlIEJlbmNobWFyayB7Ci0gICAgICAgIG5hbWVzcGFjZSBEZXRhaWwgewotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsb2NrLCB0eXBlbmFtZSBGdW4+Ci0gICAgICAgICAgICBUaW1pbmdPZjxDbG9jaywgRnVuKGludCk+IG1lYXN1cmVfb25lKEZ1biYmIGZ1biwgaW50IGl0ZXJzLCBzdGQ6OmZhbHNlX3R5cGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRGV0YWlsOjptZWFzdXJlPENsb2NrPihmdW4sIGl0ZXJzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbG9jaywgdHlwZW5hbWUgRnVuPgotICAgICAgICAgICAgVGltaW5nT2Y8Q2xvY2ssIEZ1bihDaHJvbm9tZXRlcik+IG1lYXN1cmVfb25lKEZ1biYmIGZ1biwgaW50IGl0ZXJzLCBzdGQ6OnRydWVfdHlwZSkgewotICAgICAgICAgICAgICAgIERldGFpbDo6Q2hyb25vbWV0ZXJNb2RlbDxDbG9jaz4gbWV0ZXI7Ci0gICAgICAgICAgICAgICAgYXV0byYmIHJlc3VsdCA9IERldGFpbDo6Y29tcGxldGVfaW52b2tlKGZ1biwgQ2hyb25vbWV0ZXIobWV0ZXIsIGl0ZXJzKSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4geyBtZXRlci5lbGFwc2VkKCksIHN0ZDo6bW92ZShyZXN1bHQpLCBpdGVycyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xvY2ssIHR5cGVuYW1lIEZ1bj4KLSAgICAgICAgICAgIHVzaW5nIHJ1bl9mb3JfYXRfbGVhc3RfYXJndW1lbnRfdCA9IHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8aXNfY2FsbGFibGU8RnVuKENocm9ub21ldGVyKT46OnZhbHVlLCBDaHJvbm9tZXRlciwgaW50Pjo6dHlwZTsKLQotICAgICAgICAgICAgc3RydWN0IG9wdGltaXplZF9hd2F5X2Vycm9yIDogc3RkOjpleGNlcHRpb24gewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCBub2V4Y2VwdCBvdmVycmlkZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAiY291bGQgbm90IG1lYXN1cmUgYmVuY2htYXJrLCBtYXliZSBpdCB3YXMgb3B0aW1pemVkIGF3YXkiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbG9jaywgdHlwZW5hbWUgRnVuPgotICAgICAgICAgICAgVGltaW5nT2Y8Q2xvY2ssIEZ1bihydW5fZm9yX2F0X2xlYXN0X2FyZ3VtZW50X3Q8Q2xvY2ssIEZ1bj4pPiBydW5fZm9yX2F0X2xlYXN0KENsb2NrRHVyYXRpb248Q2xvY2s+IGhvd19sb25nLCBpbnQgc2VlZCwgRnVuJiYgZnVuKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpdGVycyA9IHNlZWQ7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGl0ZXJzIDwgKDEgPDwgMzApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8mJiBUaW1pbmcgPSBtZWFzdXJlX29uZTxDbG9jaz4oZnVuLCBpdGVycywgaXNfY2FsbGFibGU8RnVuKENocm9ub21ldGVyKT4oKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKFRpbWluZy5lbGFwc2VkID49IGhvd19sb25nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBUaW1pbmcuZWxhcHNlZCwgc3RkOjptb3ZlKFRpbWluZy5yZXN1bHQpLCBpdGVycyB9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGl0ZXJzICo9IDI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRocm93IG9wdGltaXplZF9hd2F5X2Vycm9ye307Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gLy8gbmFtZXNwYWNlIERldGFpbAotICAgIH0gLy8gbmFtZXNwYWNlIEJlbmNobWFyawotfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKLQotI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9SVU5fRk9SX0FUX0xFQVNUX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX3N0YXRzLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvYmVuY2htYXJrL2RldGFpbC9jYXRjaF9zdGF0cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4NWI3NDAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX3N0YXRzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi0vKgotICogIENyZWF0ZWQgYnkgTWFydGluIG9uIDE1LzA2LzIwMTkuCi0gKiAgQWRhcHRlZCBmcm9tIGRvbmF0ZWQgbm9uaXVzIGNvZGUuCi0gKgotICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLSAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqLwotCi0vLyBTdGF0aXN0aWNhbCBhbmFseXNpcyB0b29scwotCi0jaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORykKLQotI2luY2x1ZGUgImNhdGNoX3N0YXRzLmhwcCIKLQotI2luY2x1ZGUgIi4uLy4uL2NhdGNoX2NvbXBpbGVyX2NhcGFiaWxpdGllcy5oIgotCi0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxyYW5kb20+Ci0KLQotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX1VTRV9BU1lOQykKLSNpbmNsdWRlIDxmdXR1cmU+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIHsKLSAgICBkb3VibGUgZXJmX2ludihkb3VibGUgeCkgewotICAgICAgICAvLyBDb2RlIGFjY29tcGFueWluZyB0aGUgYXJ0aWNsZSAiQXBwcm94aW1hdGluZyB0aGUgZXJmaW52IGZ1bmN0aW9uIiBpbiBHUFUgQ29tcHV0aW5nIEdlbXMsIFZvbHVtZSAyCi0gICAgICAgIGRvdWJsZSB3LCBwOwotCi0gICAgICAgIHcgPSAtbG9nKCgxLjAgLSB4KSAqICgxLjAgKyB4KSk7Ci0KLSAgICAgICAgaWYgKHcgPCA2LjI1MDAwMCkgewotICAgICAgICAgICAgdyA9IHcgLSAzLjEyNTAwMDsKLSAgICAgICAgICAgIHAgPSAtMy42NDQ0MTIwNjQwMTc4MTk2OTk2ZS0yMTsKLSAgICAgICAgICAgIHAgPSAtMS42ODUwNTkxMzgxODIwMTY1ODllLTE5ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gMS4yODU4NDgwNzE1MjU2NDAwMTY3ZS0xOCArIHAgKiB3OwotICAgICAgICAgICAgcCA9IDEuMTE1Nzg3NzY3ODAyNTE4MDk2ZS0xNyArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC0xLjMzMzE3MTY2Mjg1NDYyMDkwNmUtMTYgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAyLjA5NzI3Njc4NzU5Njg1NjE2MzdlLTE3ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gNi42Mzc2MzgxMzQzNTgzMjM4MzI1ZS0xNSArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC00LjA1NDU2NjI3Mjk3NTIwNjg2MzllLTE0ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gLTguMTUxOTM0MTk3NjA1NDcyMTUyMmUtMTQgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAyLjYzMzUwOTMxNTMwODIzMjI5NzdlLTEyICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gLTEuMjk3NTEzMzI1MzQ1MzUzMjQ5OGUtMTEgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAtNS40MTU0MTIwNTQyOTQ2Mjc5MzE3ZS0xMSArIHAgKiB3OwotICAgICAgICAgICAgcCA9IDEuMDUxMjEyMjczMzIxNTMyMjg1ZS0wOSArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC00LjExMjYzMzk4MDM0Njk4MzY5NzZlLTA5ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gLTIuOTA3MDM2OTk1Nzg4MjAwNTA4NmUtMDggKyBwICogdzsKLSAgICAgICAgICAgIHAgPSA0LjIzNDc4Nzc4Mjc5MzI0MDM1MThlLTA3ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gLTEuMzY1NDY5MjAwMDgzNDY3ODY0NWUtMDYgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAtMS4zODgyNTIzMzYyNzg2NDY4NzE5ZS0wNSArIHAgKiB3OwotICAgICAgICAgICAgcCA9IDAuMDAwMTg2NzM0MjA4MDM0MDU3MTM1MiArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC0wLjAwMDc0MDcwMjUzNDE2NjI2Njk3NTEyICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gLTAuMDA2MDMzNjcwODcxNDMwMTQ5MDUzMyArIHAgKiB3OwotICAgICAgICAgICAgcCA9IDAuMjQwMTU4MTgyNDI1NTg5NjE2OTMgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAxLjY1MzY1NDU2MjY4MzEwMjczNTYgKyBwICogdzsKLSAgICAgICAgfSBlbHNlIGlmICh3IDwgMTYuMDAwMDAwKSB7Ci0gICAgICAgICAgICB3ID0gc3FydCh3KSAtIDMuMjUwMDAwOwotICAgICAgICAgICAgcCA9IDIuMjEzNzM3NjkyMTc3NTc4NzA0OWUtMDk7Ci0gICAgICAgICAgICBwID0gOS4wNzU2NTYxOTM4ODg1MzkwOTc5ZS0wOCArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC0yLjc1MTc0MDYyOTcwNjQ1NDU0MjhlLTA3ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gMS44MjM5NjI5MjE0Mzg5MjI3NzU1ZS0wOCArIHAgKiB3OwotICAgICAgICAgICAgcCA9IDEuNTAyNzQwMzk2ODkwOTgyNzYyN2UtMDYgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAtNC4wMTM4Njc1MjY5ODE1NDU5NjllLTA2ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gMi45MjM0NDQ5MDg5OTU1NDQ2MDQ0ZS0wNiArIHAgKiB3OwotICAgICAgICAgICAgcCA9IDEuMjQ3NTMwNDQ4MTY3MTc3ODcyM2UtMDUgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAtNC43MzE4MjI5MDA5MDU1NzMzOTgxZS0wNSArIHAgKiB3OwotICAgICAgICAgICAgcCA9IDYuODI4NDg1MTQ1OTU3MzE3NTQ0OGUtMDUgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAyLjQwMzExMTAzODcwOTc4OTM5OTllLTA1ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gLTAuMDAwMzU1MDM3NTIwMzYyODQ3NDc5NiArIHAgKiB3OwotICAgICAgICAgICAgcCA9IDAuMDAwOTUzMjg5Mzc5NzM3MzgwNDk3MDMgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAtMC4wMDE2ODgyNzU1NTYwMjM1MDQ3MzEzICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gMC4wMDI0OTE0NDIwOTYxMDc4NTA4MDY2ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gLTAuMDAzNzUxMjA4NTA3NTY5MjQxMjEwNyArIHAgKiB3OwotICAgICAgICAgICAgcCA9IDAuMDA1MzcwOTE0NTUzNTkwMDYzNjE3ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gMS4wMDUyNTg5Njc2OTQxNTkyMzM0ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gMy4wODM4ODU2MTA0OTIyMjA3NjM1ICsgcCAqIHc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3ID0gc3FydCh3KSAtIDUuMDAwMDAwOwotICAgICAgICAgICAgcCA9IC0yLjcxMDk5MjA2MTY0Mzg1NzMyNDNlLTExOwotICAgICAgICAgICAgcCA9IC0yLjU1NTY0MTgxNjk5NjUyNTIwNTVlLTEwICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gMS41MDc2NTcyNjkzNTAwNTQ4MDgzZS0wOSArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC0zLjc4OTQ2NTQ0MDEyNjczNjk5MzdlLTA5ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gNy42MTU3MDEyMDgwNzgzMzkzODA0ZS0wOSArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC0xLjQ5NjAwMjY2MjcxNDkyNDA0NzhlLTA4ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gMi45MTQ3OTUzNDUwOTAxMDgwODI2ZS0wOCArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC02Ljc3MTE5OTc3NTg0NTIzMzk0OThlLTA4ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gMi4yOTAwNDgyMjI4MDI2NjU0NzE3ZS0wNyArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC05LjkyOTgyNzI5NDIzMTcwMDI1MzllLTA3ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gNC41MjYwNjI1OTcyMjMxNTM3MDM5ZS0wNiArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC0xLjk2ODE3NzgxMDU1MzE2NzA1NjdlLTA1ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gNy41OTk1Mjc3MDMwMDE3NzYxMTM5ZS0wNSArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC0wLjAwMDIxNTAzMDExOTMwMDQ0NDc3MzQ3ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gLTAuMDAwMTM4NzE5MzE4MzM2MjMxMjIwMjYgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAxLjAxMDMwMDQ2NDg2NDUzNDM5NzcgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSA0Ljg0OTkwNjQwMTQwODU4NDQyMjEgKyBwICogdzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcCAqIHg7Ci0gICAgfQotCi0gICAgZG91YmxlIHN0YW5kYXJkX2RldmlhdGlvbihzdGQ6OnZlY3Rvcjxkb3VibGU+OjppdGVyYXRvciBmaXJzdCwgc3RkOjp2ZWN0b3I8ZG91YmxlPjo6aXRlcmF0b3IgbGFzdCkgewotICAgICAgICBhdXRvIG0gPSBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6Om1lYW4oZmlyc3QsIGxhc3QpOwotICAgICAgICBkb3VibGUgdmFyaWFuY2UgPSBzdGQ6OmFjY3VtdWxhdGUoZmlyc3QsIGxhc3QsIDAuLCBbbV0oZG91YmxlIGEsIGRvdWJsZSBiKSB7Ci0gICAgICAgICAgICBkb3VibGUgZGlmZiA9IGIgLSBtOwotICAgICAgICAgICAgcmV0dXJuIGEgKyBkaWZmICogZGlmZjsKLSAgICAgICAgICAgIH0pIC8gKGxhc3QgLSBmaXJzdCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpzcXJ0KHZhcmlhbmNlKTsKLSAgICB9Ci0KLX0KLQotbmFtZXNwYWNlIENhdGNoIHsKLSAgICBuYW1lc3BhY2UgQmVuY2htYXJrIHsKLSAgICAgICAgbmFtZXNwYWNlIERldGFpbCB7Ci0KLSAgICAgICAgICAgIGRvdWJsZSB3ZWlnaHRlZF9hdmVyYWdlX3F1YW50aWxlKGludCBrLCBpbnQgcSwgc3RkOjp2ZWN0b3I8ZG91YmxlPjo6aXRlcmF0b3IgZmlyc3QsIHN0ZDo6dmVjdG9yPGRvdWJsZT46Oml0ZXJhdG9yIGxhc3QpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNvdW50ID0gbGFzdCAtIGZpcnN0OwotICAgICAgICAgICAgICAgIGRvdWJsZSBpZHggPSAoY291bnQgLSAxKSAqIGsgLyBzdGF0aWNfY2FzdDxkb3VibGU+KHEpOwotICAgICAgICAgICAgICAgIGludCBqID0gc3RhdGljX2Nhc3Q8aW50PihpZHgpOwotICAgICAgICAgICAgICAgIGRvdWJsZSBnID0gaWR4IC0gajsKLSAgICAgICAgICAgICAgICBzdGQ6Om50aF9lbGVtZW50KGZpcnN0LCBmaXJzdCArIGosIGxhc3QpOwotICAgICAgICAgICAgICAgIGF1dG8geGogPSBmaXJzdFtqXTsKLSAgICAgICAgICAgICAgICBpZiAoZyA9PSAwKSByZXR1cm4geGo7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIHhqMSA9ICpzdGQ6Om1pbl9lbGVtZW50KGZpcnN0ICsgKGogKyAxKSwgbGFzdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHhqICsgZyAqICh4ajEgLSB4aik7Ci0gICAgICAgICAgICB9Ci0KLQotICAgICAgICAgICAgZG91YmxlIGVyZmNfaW52KGRvdWJsZSB4KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVyZl9pbnYoMS4wIC0geCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRvdWJsZSBub3JtYWxfcXVhbnRpbGUoZG91YmxlIHApIHsKLSAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIFJPT1RfVFdPID0gc3RkOjpzcXJ0KDIuMCk7Ci0KLSAgICAgICAgICAgICAgICBkb3VibGUgcmVzdWx0ID0gMC4wOwotICAgICAgICAgICAgICAgIGFzc2VydChwID49IDAgJiYgcCA8PSAxKTsKLSAgICAgICAgICAgICAgICBpZiAocCA8IDAgfHwgcCA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXN1bHQgPSAtZXJmY19pbnYoMi4wICogcCk7Ci0gICAgICAgICAgICAgICAgLy8gcmVzdWx0ICo9IG5vcm1hbCBkaXN0cmlidXRpb24gc3RhbmRhcmQgZGV2aWF0aW9uICgxLjApICogc3FydCgyKQotICAgICAgICAgICAgICAgIHJlc3VsdCAqPSAvKnNkICogKi8gUk9PVF9UV087Ci0gICAgICAgICAgICAgICAgLy8gcmVzdWx0ICs9IG5vcm1hbCBkaXN0dHJpYnV0aW9uIG1lYW4gKDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotCi0gICAgICAgICAgICBkb3VibGUgb3V0bGllcl92YXJpYW5jZShFc3RpbWF0ZTxkb3VibGU+IG1lYW4sIEVzdGltYXRlPGRvdWJsZT4gc3RkZGV2LCBpbnQgbikgewotICAgICAgICAgICAgICAgIGRvdWJsZSBzYiA9IHN0ZGRldi5wb2ludDsKLSAgICAgICAgICAgICAgICBkb3VibGUgbW4gPSBtZWFuLnBvaW50IC8gbjsKLSAgICAgICAgICAgICAgICBkb3VibGUgbWdfbWluID0gbW4gLyAyLjsKLSAgICAgICAgICAgICAgICBkb3VibGUgc2cgPSBzdGQ6Om1pbihtZ19taW4gLyA0Liwgc2IgLyBzdGQ6OnNxcnQobikpOwotICAgICAgICAgICAgICAgIGRvdWJsZSBzZzIgPSBzZyAqIHNnOwotICAgICAgICAgICAgICAgIGRvdWJsZSBzYjIgPSBzYiAqIHNiOwotCi0gICAgICAgICAgICAgICAgYXV0byBjX21heCA9IFtuLCBtbiwgc2IyLCBzZzJdKGRvdWJsZSB4KSAtPiBkb3VibGUgewotICAgICAgICAgICAgICAgICAgICBkb3VibGUgayA9IG1uIC0geDsKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIGQgPSBrICogazsKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIG5kID0gbiAqIGQ7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZSBrMCA9IC1uICogbmQ7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZSBrMSA9IHNiMiAtIG4gKiBzZzIgKyBuZDsKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRldCA9IGsxICogazEgLSA0ICogc2cyICogazA7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW50KSgtMi4gKiBrMCAvIChrMSArIHN0ZDo6c3FydChkZXQpKSk7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIGF1dG8gdmFyX291dCA9IFtuLCBzYjIsIHNnMl0oZG91YmxlIGMpIHsKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIG5jID0gbiAtIGM7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAobmMgLyBuKSAqIChzYjIgLSBuYyAqIHNnMik7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1pbih2YXJfb3V0KDEpLCB2YXJfb3V0KHN0ZDo6bWluKGNfbWF4KDAuKSwgY19tYXgobWdfbWluKSkpKSAvIHNiMjsKLSAgICAgICAgICAgIH0KLQotCi0gICAgICAgICAgICBib290c3RyYXBfYW5hbHlzaXMgYW5hbHlzZV9zYW1wbGVzKGRvdWJsZSBjb25maWRlbmNlX2xldmVsLCBpbnQgbl9yZXNhbXBsZXMsIHN0ZDo6dmVjdG9yPGRvdWJsZT46Oml0ZXJhdG9yIGZpcnN0LCBzdGQ6OnZlY3Rvcjxkb3VibGU+OjppdGVyYXRvciBsYXN0KSB7Ci0gICAgICAgICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1RBUlRfV0FSTklOR1NfU1VQUFJFU1NJT04KLSAgICAgICAgICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTCi0gICAgICAgICAgICAgICAgc3RhdGljIHN0ZDo6cmFuZG9tX2RldmljZSBlbnRyb3B5OwotICAgICAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX1NUT1BfV0FSTklOR1NfU1VQUFJFU1NJT04KLQotICAgICAgICAgICAgICAgIGF1dG8gbiA9IHN0YXRpY19jYXN0PGludD4obGFzdCAtIGZpcnN0KTsgLy8gc2VyaW91c2x5LCBvbmUgY2FuJ3QgdXNlIGludGVncmFsIHR5cGVzIHdpdGhvdXQgaGVsbCBpbiBDKysKLQotICAgICAgICAgICAgICAgIGF1dG8gbWVhbiA9ICZEZXRhaWw6Om1lYW48c3RkOjp2ZWN0b3I8ZG91YmxlPjo6aXRlcmF0b3I+OwotICAgICAgICAgICAgICAgIGF1dG8gc3RkZGV2ID0gJnN0YW5kYXJkX2RldmlhdGlvbjsKLQotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX1VTRV9BU1lOQykKLSAgICAgICAgICAgICAgICBhdXRvIEVzdGltYXRlID0gWz1dKGRvdWJsZSgqZikoc3RkOjp2ZWN0b3I8ZG91YmxlPjo6aXRlcmF0b3IsIHN0ZDo6dmVjdG9yPGRvdWJsZT46Oml0ZXJhdG9yKSkgewotICAgICAgICAgICAgICAgICAgICBhdXRvIHNlZWQgPSBlbnRyb3B5KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OmFzeW5jKHN0ZDo6bGF1bmNoOjphc3luYywgWz1dIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bXQxOTkzNyBybmcoc2VlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc2FtcGxlZCA9IHJlc2FtcGxlKHJuZywgbl9yZXNhbXBsZXMsIGZpcnN0LCBsYXN0LCBmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBib290c3RyYXAoY29uZmlkZW5jZV9sZXZlbCwgZmlyc3QsIGxhc3QsIHJlc2FtcGxlZCwgZik7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICBhdXRvIG1lYW5fZnV0dXJlID0gRXN0aW1hdGUobWVhbik7Ci0gICAgICAgICAgICAgICAgYXV0byBzdGRkZXZfZnV0dXJlID0gRXN0aW1hdGUoc3RkZGV2KTsKLQotICAgICAgICAgICAgICAgIGF1dG8gbWVhbl9lc3RpbWF0ZSA9IG1lYW5fZnV0dXJlLmdldCgpOwotICAgICAgICAgICAgICAgIGF1dG8gc3RkZGV2X2VzdGltYXRlID0gc3RkZGV2X2Z1dHVyZS5nZXQoKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgYXV0byBFc3RpbWF0ZSA9IFs9XShkb3VibGUoKmYpKHN0ZDo6dmVjdG9yPGRvdWJsZT46Oml0ZXJhdG9yLCBzdGQ6OnZlY3Rvcjxkb3VibGU+OjppdGVyYXRvcikpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBzZWVkID0gZW50cm9weSgpOwotICAgICAgICAgICAgICAgICAgICBzdGQ6Om10MTk5Mzcgcm5nKHNlZWQpOwotICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc2FtcGxlZCA9IHJlc2FtcGxlKHJuZywgbl9yZXNhbXBsZXMsIGZpcnN0LCBsYXN0LCBmKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvb3RzdHJhcChjb25maWRlbmNlX2xldmVsLCBmaXJzdCwgbGFzdCwgcmVzYW1wbGVkLCBmKTsKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgYXV0byBtZWFuX2VzdGltYXRlID0gRXN0aW1hdGUobWVhbik7Ci0gICAgICAgICAgICAgICAgYXV0byBzdGRkZXZfZXN0aW1hdGUgPSBFc3RpbWF0ZShzdGRkZXYpOwotI2VuZGlmIC8vIENBVENIX1VTRV9BU1lOQwotCi0gICAgICAgICAgICAgICAgZG91YmxlIG91dGxpZXJfdmFyaWFuY2UgPSBEZXRhaWw6Om91dGxpZXJfdmFyaWFuY2UobWVhbl9lc3RpbWF0ZSwgc3RkZGV2X2VzdGltYXRlLCBuKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB7IG1lYW5fZXN0aW1hdGUsIHN0ZGRldl9lc3RpbWF0ZSwgb3V0bGllcl92YXJpYW5jZSB9OwotICAgICAgICAgICAgfQotICAgICAgICB9IC8vIG5hbWVzcGFjZSBEZXRhaWwKLSAgICB9IC8vIG5hbWVzcGFjZSBCZW5jaG1hcmsKLX0gLy8gbmFtZXNwYWNlIENhdGNoCi0KLSNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX3N0YXRzLmhwcCBiL2luY2x1ZGUvaW50ZXJuYWwvYmVuY2htYXJrL2RldGFpbC9jYXRjaF9zdGF0cy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYTQ2MGQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX3N0YXRzLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKgotICogIENyZWF0ZWQgYnkgSm9hY2hpbSBvbiAxNi8wNC8yMDE5LgotICogIEFkYXB0ZWQgZnJvbSBkb25hdGVkIG5vbml1cyBjb2RlLgotICoKLSAqICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0gKiAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKi8KLQotLy8gU3RhdGlzdGljYWwgYW5hbHlzaXMgdG9vbHMKLQotI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfREVUQUlMX0FOQUxZU0lTX0hQUF9JTkNMVURFRAotI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfREVUQUlMX0FOQUxZU0lTX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSAiLi4vY2F0Y2hfY2xvY2suaHBwIgotI2luY2x1ZGUgIi4uL2NhdGNoX2VzdGltYXRlLmhwcCIKLSNpbmNsdWRlICIuLi9jYXRjaF9vdXRsaWVyX2NsYXNzaWZpY2F0aW9uLmhwcCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KLSNpbmNsdWRlIDxudW1lcmljPgotI2luY2x1ZGUgPHR1cGxlPgotI2luY2x1ZGUgPGNtYXRoPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDxyYW5kb20+Ci0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgbmFtZXNwYWNlIEJlbmNobWFyayB7Ci0gICAgICAgIG5hbWVzcGFjZSBEZXRhaWwgewotICAgICAgICAgICAgdXNpbmcgc2FtcGxlID0gc3RkOjp2ZWN0b3I8ZG91YmxlPjsKLQotICAgICAgICAgICAgZG91YmxlIHdlaWdodGVkX2F2ZXJhZ2VfcXVhbnRpbGUoaW50IGssIGludCBxLCBzdGQ6OnZlY3Rvcjxkb3VibGU+OjppdGVyYXRvciBmaXJzdCwgc3RkOjp2ZWN0b3I8ZG91YmxlPjo6aXRlcmF0b3IgbGFzdCk7Ci0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyYXRvcj4KLSAgICAgICAgICAgIE91dGxpZXJDbGFzc2lmaWNhdGlvbiBjbGFzc2lmeV9vdXRsaWVycyhJdGVyYXRvciBmaXJzdCwgSXRlcmF0b3IgbGFzdCkgewotICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGRvdWJsZT4gY29weShmaXJzdCwgbGFzdCk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIHExID0gd2VpZ2h0ZWRfYXZlcmFnZV9xdWFudGlsZSgxLCA0LCBjb3B5LmJlZ2luKCksIGNvcHkuZW5kKCkpOwotICAgICAgICAgICAgICAgIGF1dG8gcTMgPSB3ZWlnaHRlZF9hdmVyYWdlX3F1YW50aWxlKDMsIDQsIGNvcHkuYmVnaW4oKSwgY29weS5lbmQoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byBpcXIgPSBxMyAtIHExOwotICAgICAgICAgICAgICAgIGF1dG8gbG9zID0gcTEgLSAoaXFyICogMy4pOwotICAgICAgICAgICAgICAgIGF1dG8gbG9tID0gcTEgLSAoaXFyICogMS41KTsKLSAgICAgICAgICAgICAgICBhdXRvIGhpbSA9IHEzICsgKGlxciAqIDEuNSk7Ci0gICAgICAgICAgICAgICAgYXV0byBoaXMgPSBxMyArIChpcXIgKiAzLik7Ci0KLSAgICAgICAgICAgICAgICBPdXRsaWVyQ2xhc3NpZmljYXRpb24gbzsKLSAgICAgICAgICAgICAgICBmb3IgKDsgZmlyc3QgIT0gbGFzdDsgKytmaXJzdCkgewotICAgICAgICAgICAgICAgICAgICBhdXRvJiYgdCA9ICpmaXJzdDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHQgPCBsb3MpICsrby5sb3dfc2V2ZXJlOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0IDwgbG9tKSArK28ubG93X21pbGQ7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHQgPiBoaXMpICsrby5oaWdoX3NldmVyZTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodCA+IGhpbSkgKytvLmhpZ2hfbWlsZDsKLSAgICAgICAgICAgICAgICAgICAgKytvLnNhbXBsZXNfc2VlbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG87Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyYXRvcj4KLSAgICAgICAgICAgIGRvdWJsZSBtZWFuKEl0ZXJhdG9yIGZpcnN0LCBJdGVyYXRvciBsYXN0KSB7Ci0gICAgICAgICAgICAgICAgYXV0byBjb3VudCA9IGxhc3QgLSBmaXJzdDsKLSAgICAgICAgICAgICAgICBkb3VibGUgc3VtID0gc3RkOjphY2N1bXVsYXRlKGZpcnN0LCBsYXN0LCAwLik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN1bSAvIGNvdW50OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVVJuZywgdHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIEVzdGltYXRvcj4KLSAgICAgICAgICAgIHNhbXBsZSByZXNhbXBsZShVUm5nJiBybmcsIGludCByZXNhbXBsZXMsIEl0ZXJhdG9yIGZpcnN0LCBJdGVyYXRvciBsYXN0LCBFc3RpbWF0b3ImIGVzdGltYXRvcikgewotICAgICAgICAgICAgICAgIGF1dG8gbiA9IGxhc3QgLSBmaXJzdDsKLSAgICAgICAgICAgICAgICBzdGQ6OnVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxkZWNsdHlwZShuKT4gZGlzdCgwLCBuIC0gMSk7Ci0KLSAgICAgICAgICAgICAgICBzYW1wbGUgb3V0OwotICAgICAgICAgICAgICAgIG91dC5yZXNlcnZlKHJlc2FtcGxlcyk7Ci0gICAgICAgICAgICAgICAgc3RkOjpnZW5lcmF0ZV9uKHN0ZDo6YmFja19pbnNlcnRlcihvdXQpLCByZXNhbXBsZXMsIFtuLCBmaXJzdCwgJmVzdGltYXRvciwgJmRpc3QsICZybmddIHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiByZXNhbXBsZWQ7Ci0gICAgICAgICAgICAgICAgICAgIHJlc2FtcGxlZC5yZXNlcnZlKG4pOwotICAgICAgICAgICAgICAgICAgICBzdGQ6OmdlbmVyYXRlX24oc3RkOjpiYWNrX2luc2VydGVyKHJlc2FtcGxlZCksIG4sIFtmaXJzdCwgJmRpc3QsICZybmddIHsgcmV0dXJuIGZpcnN0W2Rpc3Qocm5nKV07IH0pOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXN0aW1hdG9yKHJlc2FtcGxlZC5iZWdpbigpLCByZXNhbXBsZWQuZW5kKCkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHN0ZDo6c29ydChvdXQuYmVnaW4oKSwgb3V0LmVuZCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gb3V0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRXN0aW1hdG9yLCB0eXBlbmFtZSBJdGVyYXRvcj4KLSAgICAgICAgICAgIHNhbXBsZSBqYWNra25pZmUoRXN0aW1hdG9yJiYgZXN0aW1hdG9yLCBJdGVyYXRvciBmaXJzdCwgSXRlcmF0b3IgbGFzdCkgewotICAgICAgICAgICAgICAgIGF1dG8gbiA9IGxhc3QgLSBmaXJzdDsKLSAgICAgICAgICAgICAgICBhdXRvIHNlY29uZCA9IHN0ZDo6bmV4dChmaXJzdCk7Ci0gICAgICAgICAgICAgICAgc2FtcGxlIHJlc3VsdHM7Ci0gICAgICAgICAgICAgICAgcmVzdWx0cy5yZXNlcnZlKG4pOwotCi0gICAgICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gZmlyc3Q7IGl0ICE9IGxhc3Q7ICsraXQpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjppdGVyX3N3YXAoaXQsIGZpcnN0KTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoX2JhY2soZXN0aW1hdG9yKHNlY29uZCwgbGFzdCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbmxpbmUgZG91YmxlIG5vcm1hbF9jZGYoZG91YmxlIHgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjplcmZjKC14IC8gc3RkOjpzcXJ0KDIuMCkpIC8gMi4wOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkb3VibGUgZXJmY19pbnYoZG91YmxlIHgpOwotCi0gICAgICAgICAgICBkb3VibGUgbm9ybWFsX3F1YW50aWxlKGRvdWJsZSBwKTsKLQotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBFc3RpbWF0b3I+Ci0gICAgICAgICAgICBFc3RpbWF0ZTxkb3VibGU+IGJvb3RzdHJhcChkb3VibGUgY29uZmlkZW5jZV9sZXZlbCwgSXRlcmF0b3IgZmlyc3QsIEl0ZXJhdG9yIGxhc3QsIHNhbXBsZSBjb25zdCYgcmVzYW1wbGUsIEVzdGltYXRvciYmIGVzdGltYXRvcikgewotICAgICAgICAgICAgICAgIGF1dG8gbl9zYW1wbGVzID0gbGFzdCAtIGZpcnN0OwotCi0gICAgICAgICAgICAgICAgZG91YmxlIHBvaW50ID0gZXN0aW1hdG9yKGZpcnN0LCBsYXN0KTsKLSAgICAgICAgICAgICAgICAvLyBEZWdlbmVyYXRlIGNhc2Ugd2l0aCBhIHNpbmdsZSBzYW1wbGUKLSAgICAgICAgICAgICAgICBpZiAobl9zYW1wbGVzID09IDEpIHJldHVybiB7IHBvaW50LCBwb2ludCwgcG9pbnQsIGNvbmZpZGVuY2VfbGV2ZWwgfTsKLQotICAgICAgICAgICAgICAgIHNhbXBsZSBqYWNrID0gamFja2tuaWZlKGVzdGltYXRvciwgZmlyc3QsIGxhc3QpOwotICAgICAgICAgICAgICAgIGRvdWJsZSBqYWNrX21lYW4gPSBtZWFuKGphY2suYmVnaW4oKSwgamFjay5lbmQoKSk7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHN1bV9zcXVhcmVzLCBzdW1fY3ViZXM7Ci0gICAgICAgICAgICAgICAgc3RkOjp0aWUoc3VtX3NxdWFyZXMsIHN1bV9jdWJlcykgPSBzdGQ6OmFjY3VtdWxhdGUoamFjay5iZWdpbigpLCBqYWNrLmVuZCgpLCBzdGQ6Om1ha2VfcGFpcigwLiwgMC4pLCBbamFja19tZWFuXShzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+IHNxY2IsIGRvdWJsZSB4KSAtPiBzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+IHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkID0gamFja19tZWFuIC0geDsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkMiA9IGQgKiBkOwotICAgICAgICAgICAgICAgICAgICBhdXRvIGQzID0gZDIgKiBkOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBzcWNiLmZpcnN0ICsgZDIsIHNxY2Iuc2Vjb25kICsgZDMgfTsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIGRvdWJsZSBhY2NlbCA9IHN1bV9jdWJlcyAvICg2ICogc3RkOjpwb3coc3VtX3NxdWFyZXMsIDEuNSkpOwotICAgICAgICAgICAgICAgIGludCBuID0gc3RhdGljX2Nhc3Q8aW50PihyZXNhbXBsZS5zaXplKCkpOwotICAgICAgICAgICAgICAgIGRvdWJsZSBwcm9iX24gPSBzdGQ6OmNvdW50X2lmKHJlc2FtcGxlLmJlZ2luKCksIHJlc2FtcGxlLmVuZCgpLCBbcG9pbnRdKGRvdWJsZSB4KSB7IHJldHVybiB4IDwgcG9pbnQ7IH0pIC8gKGRvdWJsZSluOwotICAgICAgICAgICAgICAgIC8vIGRlZ2VuZXJhdGUgY2FzZSB3aXRoIHVuaWZvcm0gc2FtcGxlcwotICAgICAgICAgICAgICAgIGlmIChwcm9iX24gPT0gMCkgcmV0dXJuIHsgcG9pbnQsIHBvaW50LCBwb2ludCwgY29uZmlkZW5jZV9sZXZlbCB9OwotCi0gICAgICAgICAgICAgICAgZG91YmxlIGJpYXMgPSBub3JtYWxfcXVhbnRpbGUocHJvYl9uKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgejEgPSBub3JtYWxfcXVhbnRpbGUoKDEuIC0gY29uZmlkZW5jZV9sZXZlbCkgLyAyLik7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGN1bW4gPSBbbl0oZG91YmxlIHgpIC0+IGludCB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Omxyb3VuZChub3JtYWxfY2RmKHgpICogbik7IH07Ci0gICAgICAgICAgICAgICAgYXV0byBhID0gW2JpYXMsIGFjY2VsXShkb3VibGUgYikgeyByZXR1cm4gYmlhcyArIGIgLyAoMS4gLSBhY2NlbCAqIGIpOyB9OwotICAgICAgICAgICAgICAgIGRvdWJsZSBiMSA9IGJpYXMgKyB6MTsKLSAgICAgICAgICAgICAgICBkb3VibGUgYjIgPSBiaWFzIC0gejE7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGExID0gYShiMSk7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGEyID0gYShiMik7Ci0gICAgICAgICAgICAgICAgYXV0byBsbyA9IHN0ZDo6bWF4KGN1bW4oYTEpLCAwKTsKLSAgICAgICAgICAgICAgICBhdXRvIGhpID0gc3RkOjptaW4oY3VtbihhMiksIG4gLSAxKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB7IHBvaW50LCByZXNhbXBsZVtsb10sIHJlc2FtcGxlW2hpXSwgY29uZmlkZW5jZV9sZXZlbCB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkb3VibGUgb3V0bGllcl92YXJpYW5jZShFc3RpbWF0ZTxkb3VibGU+IG1lYW4sIEVzdGltYXRlPGRvdWJsZT4gc3RkZGV2LCBpbnQgbik7Ci0KLSAgICAgICAgICAgIHN0cnVjdCBib290c3RyYXBfYW5hbHlzaXMgewotICAgICAgICAgICAgICAgIEVzdGltYXRlPGRvdWJsZT4gbWVhbjsKLSAgICAgICAgICAgICAgICBFc3RpbWF0ZTxkb3VibGU+IHN0YW5kYXJkX2RldmlhdGlvbjsKLSAgICAgICAgICAgICAgICBkb3VibGUgb3V0bGllcl92YXJpYW5jZTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGJvb3RzdHJhcF9hbmFseXNpcyBhbmFseXNlX3NhbXBsZXMoZG91YmxlIGNvbmZpZGVuY2VfbGV2ZWwsIGludCBuX3Jlc2FtcGxlcywgc3RkOjp2ZWN0b3I8ZG91YmxlPjo6aXRlcmF0b3IgZmlyc3QsIHN0ZDo6dmVjdG9yPGRvdWJsZT46Oml0ZXJhdG9yIGxhc3QpOwotICAgICAgICB9IC8vIG5hbWVzcGFjZSBEZXRhaWwKLSAgICB9IC8vIG5hbWVzcGFjZSBCZW5jaG1hcmsKLX0gLy8gbmFtZXNwYWNlIENhdGNoCi0KLSNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfREVUQUlMX0FOQUxZU0lTX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX3RpbWluZy5ocHAgYi9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9kZXRhaWwvY2F0Y2hfdGltaW5nLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDczY2I3NC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2JlbmNobWFyay9kZXRhaWwvY2F0Y2hfdGltaW5nLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiAgQ3JlYXRlZCBieSBKb2FjaGltIG9uIDE2LzA0LzIwMTkuCi0gKiAgQWRhcHRlZCBmcm9tIGRvbmF0ZWQgbm9uaXVzIGNvZGUuCi0gKgotICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLSAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqLwotCi0vLyBUaW1pbmcKLQotI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfREVUQUlMX1RJTUlOR19IUFBfSU5DTFVERUQKLSNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX0RFVEFJTF9USU1JTkdfSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlICIuLi9jYXRjaF9jbG9jay5ocHAiCi0jaW5jbHVkZSAiY2F0Y2hfY29tcGxldGVfaW52b2tlLmhwcCIKLQotI2luY2x1ZGUgPHR1cGxlPgotI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgotCi1uYW1lc3BhY2UgQ2F0Y2ggewotICAgIG5hbWVzcGFjZSBCZW5jaG1hcmsgewotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRHVyYXRpb24sIHR5cGVuYW1lIFJlc3VsdD4KLSAgICAgICAgc3RydWN0IFRpbWluZyB7Ci0gICAgICAgICAgICBEdXJhdGlvbiBlbGFwc2VkOwotICAgICAgICAgICAgUmVzdWx0IHJlc3VsdDsKLSAgICAgICAgICAgIGludCBpdGVyYXRpb25zOwotICAgICAgICB9OwotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xvY2ssIHR5cGVuYW1lIFNpZz4KLSAgICAgICAgdXNpbmcgVGltaW5nT2YgPSBUaW1pbmc8Q2xvY2tEdXJhdGlvbjxDbG9jaz4sIERldGFpbDo6Q29tcGxldGVUeXBlX3Q8RGV0YWlsOjpSZXN1bHRPZl90PFNpZz4+PjsKLSAgICB9IC8vIG5hbWVzcGFjZSBCZW5jaG1hcmsKLX0gLy8gbmFtZXNwYWNlIENhdGNoCi0KLSNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfREVUQUlMX1RJTUlOR19IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfYXBwcm94LmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfYXBwcm94LmNwcAppbmRleCAzMmI1ZTA0Li5kYTdlNDAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2FwcHJveC5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9hcHByb3guY3BwCkBAIC01Miw4ICs1Miw3IEBACiAgICAgYm9vbCBBcHByb3g6OmVxdWFsaXR5Q29tcGFyaXNvbkltcGwoY29uc3QgZG91YmxlIG90aGVyKSBjb25zdCB7CiAgICAgICAgIC8vIEZpcnN0IHRyeSB3aXRoIGZpeGVkIG1hcmdpbiwgdGhlbiBjb21wdXRlIG1hcmdpbiBiYXNlZCBvbiBlcHNpbG9uLCBzY2FsZSBhbmQgQXBwcm94J3MgdmFsdWUKICAgICAgICAgLy8gVGhhbmtzIHRvIFJpY2hhcmQgSGFycmlzIGZvciBoaXMgaGVscCByZWZpbmluZyB0aGUgc2NhbGVkIG1hcmdpbiB2YWx1ZQotICAgICAgICByZXR1cm4gbWFyZ2luQ29tcGFyaXNvbihtX3ZhbHVlLCBvdGhlciwgbV9tYXJnaW4pCi0gICAgICAgICAgICB8fCBtYXJnaW5Db21wYXJpc29uKG1fdmFsdWUsIG90aGVyLCBtX2Vwc2lsb24gKiAobV9zY2FsZSArIHN0ZDo6ZmFicyhzdGQ6OmlzaW5mKG1fdmFsdWUpPyAwIDogbV92YWx1ZSkpKTsKKyAgICAgICAgcmV0dXJuIG1hcmdpbkNvbXBhcmlzb24obV92YWx1ZSwgb3RoZXIsIG1fbWFyZ2luKSB8fCBtYXJnaW5Db21wYXJpc29uKG1fdmFsdWUsIG90aGVyLCBtX2Vwc2lsb24gKiAobV9zY2FsZSArIHN0ZDo6ZmFicyhtX3ZhbHVlKSkpOwogICAgIH0KIAogICAgIHZvaWQgQXBwcm94OjpzZXRNYXJnaW4oZG91YmxlIG5ld01hcmdpbikgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9hc3NlcnRpb25yZXN1bHQuY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9hc3NlcnRpb25yZXN1bHQuY3BwCmluZGV4IDYwOGE5YWQuLjRjZTA3MTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfYXNzZXJ0aW9ucmVzdWx0LmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2Fzc2VydGlvbnJlc3VsdC5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICB9CiAKICAgICBib29sIEFzc2VydGlvblJlc3VsdDo6aGFzRXhwcmVzc2lvbigpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuICFtX2luZm8uY2FwdHVyZWRFeHByZXNzaW9uLmVtcHR5KCk7CisgICAgICAgIHJldHVybiBtX2luZm8uY2FwdHVyZWRFeHByZXNzaW9uWzBdICE9IDA7CiAgICAgfQogCiAgICAgYm9vbCBBc3NlcnRpb25SZXN1bHQ6Omhhc01lc3NhZ2UoKSBjb25zdCB7CkBAIC01MywyMiArNTMsMTYgQEAKICAgICB9CiAKICAgICBzdGQ6OnN0cmluZyBBc3NlcnRpb25SZXN1bHQ6OmdldEV4cHJlc3Npb24oKSBjb25zdCB7Ci0gICAgICAgIC8vIFBvc3NpYmx5IG92ZXJhbGxvY2F0aW5nIGJ5IDMgY2hhcmFjdGVycyBzaG91bGQgYmUgYmFzaWNhbGx5IGZyZWUKLSAgICAgICAgc3RkOjpzdHJpbmcgZXhwcjsgZXhwci5yZXNlcnZlKG1faW5mby5jYXB0dXJlZEV4cHJlc3Npb24uc2l6ZSgpICsgMyk7Ci0gICAgICAgIGlmIChpc0ZhbHNlVGVzdChtX2luZm8ucmVzdWx0RGlzcG9zaXRpb24pKSB7Ci0gICAgICAgICAgICBleHByICs9ICIhKCI7Ci0gICAgICAgIH0KLSAgICAgICAgZXhwciArPSBtX2luZm8uY2FwdHVyZWRFeHByZXNzaW9uOwotICAgICAgICBpZiAoaXNGYWxzZVRlc3QobV9pbmZvLnJlc3VsdERpc3Bvc2l0aW9uKSkgewotICAgICAgICAgICAgZXhwciArPSAnKSc7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgICAgIGlmKCBpc0ZhbHNlVGVzdCggbV9pbmZvLnJlc3VsdERpc3Bvc2l0aW9uICkgKQorICAgICAgICAgICAgcmV0dXJuICIhKCIgKyBtX2luZm8uY2FwdHVyZWRFeHByZXNzaW9uICsgIikiOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gbV9pbmZvLmNhcHR1cmVkRXhwcmVzc2lvbjsKICAgICB9CiAKICAgICBzdGQ6OnN0cmluZyBBc3NlcnRpb25SZXN1bHQ6OmdldEV4cHJlc3Npb25Jbk1hY3JvKCkgY29uc3QgewogICAgICAgICBzdGQ6OnN0cmluZyBleHByOwotICAgICAgICBpZiggbV9pbmZvLm1hY3JvTmFtZS5lbXB0eSgpICkKLSAgICAgICAgICAgIGV4cHIgPSBzdGF0aWNfY2FzdDxzdGQ6OnN0cmluZz4obV9pbmZvLmNhcHR1cmVkRXhwcmVzc2lvbik7CisgICAgICAgIGlmKCBtX2luZm8ubWFjcm9OYW1lWzBdID09IDAgKQorICAgICAgICAgICAgZXhwciA9IG1faW5mby5jYXB0dXJlZEV4cHJlc3Npb247CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZXhwci5yZXNlcnZlKCBtX2luZm8ubWFjcm9OYW1lLnNpemUoKSArIG1faW5mby5jYXB0dXJlZEV4cHJlc3Npb24uc2l6ZSgpICsgNCApOwogICAgICAgICAgICAgZXhwciArPSBtX2luZm8ubWFjcm9OYW1lOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9iZW5jaG1hcmsuY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9iZW5jaG1hcmsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MjQxOGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2JlbmNobWFyay5jcHAKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBDcmVhdGVkIGJ5IFBoaWwgb24gMDQvMDcvMjAxNy4KKyAqICBDb3B5cmlnaHQgMjAxNyBUd28gQmx1ZSBDdWJlcyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKyAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKyAqLworCisjaW5jbHVkZSAiY2F0Y2hfYmVuY2htYXJrLmgiCisjaW5jbHVkZSAiY2F0Y2hfY2FwdHVyZS5ocHAiCisjaW5jbHVkZSAiY2F0Y2hfaW50ZXJmYWNlc19yZXBvcnRlci5oIgorI2luY2x1ZGUgImNhdGNoX2NvbnRleHQuaCIKKworbmFtZXNwYWNlIENhdGNoIHsKKworICAgIGF1dG8gQmVuY2htYXJrTG9vcGVyOjpnZXRSZXNvbHV0aW9uKCkgLT4gdWludDY0X3QgeworICAgICAgICByZXR1cm4gZ2V0RXN0aW1hdGVkQ2xvY2tSZXNvbHV0aW9uKCkgKiBnZXRDdXJyZW50Q29udGV4dCgpLmdldENvbmZpZygpLT5iZW5jaG1hcmtSZXNvbHV0aW9uTXVsdGlwbGUoKTsKKyAgICB9CisKKyAgICB2b2lkIEJlbmNobWFya0xvb3Blcjo6cmVwb3J0U3RhcnQoKSB7CisgICAgICAgIGdldFJlc3VsdENhcHR1cmUoKS5iZW5jaG1hcmtTdGFydGluZyggeyBtX25hbWUgfSApOworICAgIH0KKyAgICBhdXRvIEJlbmNobWFya0xvb3Blcjo6bmVlZHNNb3JlSXRlcmF0aW9ucygpIC0+IGJvb2wgeworICAgICAgICBhdXRvIGVsYXBzZWQgPSBtX3RpbWVyLmdldEVsYXBzZWROYW5vc2Vjb25kcygpOworCisgICAgICAgIC8vIEV4cG9uZW50aWFsbHkgaW5jcmVhc2luZyBpdGVyYXRpb25zIHVudGlsIHdlJ3JlIGNvbmZpZGVudCBpbiBvdXIgdGltZXIgcmVzb2x1dGlvbgorICAgICAgICBpZiggZWxhcHNlZCA8IG1fcmVzb2x1dGlvbiApIHsKKyAgICAgICAgICAgIG1faXRlcmF0aW9uc1RvUnVuICo9IDEwOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBnZXRSZXN1bHRDYXB0dXJlKCkuYmVuY2htYXJrRW5kZWQoIHsgeyBtX25hbWUgfSwgbV9jb3VudCwgZWxhcHNlZCB9ICk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKK30gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9iZW5jaG1hcmsuaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfYmVuY2htYXJrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU0NjcxMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfYmVuY2htYXJrLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqICBDcmVhdGVkIGJ5IFBoaWwgb24gMDQvMDcvMjAxNy4KKyAqICBDb3B5cmlnaHQgMjAxNyBUd28gQmx1ZSBDdWJlcyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKyAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKyAqLworI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfQkVOQ0hNQVJLX0hfSU5DTFVERUQKKyNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX0JFTkNITUFSS19IX0lOQ0xVREVECisKKyNpbmNsdWRlICJjYXRjaF9zdHJpbmdyZWYuaCIKKyNpbmNsdWRlICJjYXRjaF90aW1lci5oIgorCisjaW5jbHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBDYXRjaCB7CisKKyAgICBjbGFzcyBCZW5jaG1hcmtMb29wZXIgeworCisgICAgICAgIHN0ZDo6c3RyaW5nIG1fbmFtZTsKKyAgICAgICAgc3RkOjpzaXplX3QgbV9jb3VudCA9IDA7CisgICAgICAgIHN0ZDo6c2l6ZV90IG1faXRlcmF0aW9uc1RvUnVuID0gMTsKKyAgICAgICAgdWludDY0X3QgbV9yZXNvbHV0aW9uOworICAgICAgICBUaW1lciBtX3RpbWVyOworCisgICAgICAgIHN0YXRpYyBhdXRvIGdldFJlc29sdXRpb24oKSAtPiB1aW50NjRfdDsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIEtlZXAgbW9zdCBvZiB0aGlzIGlubGluZSBhcyBpdCdzIG9uIHRoZSBjb2RlIHBhdGggdGhhdCBpcyBiZWluZyB0aW1lZAorICAgICAgICBCZW5jaG1hcmtMb29wZXIoIFN0cmluZ1JlZiBuYW1lICkKKyAgICAgICAgOiAgIG1fbmFtZSggbmFtZSApLAorICAgICAgICAgICAgbV9yZXNvbHV0aW9uKCBnZXRSZXNvbHV0aW9uKCkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXBvcnRTdGFydCgpOworICAgICAgICAgICAgbV90aW1lci5zdGFydCgpOworICAgICAgICB9CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIHsKKyAgICAgICAgICAgIGlmKCBtX2NvdW50IDwgbV9pdGVyYXRpb25zVG9SdW4gKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIG5lZWRzTW9yZUl0ZXJhdGlvbnMoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgaW5jcmVtZW50KCkgeworICAgICAgICAgICAgKyttX2NvdW50OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCByZXBvcnRTdGFydCgpOworICAgICAgICBhdXRvIG5lZWRzTW9yZUl0ZXJhdGlvbnMoKSAtPiBib29sOworICAgIH07CisKK30gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaAorCisjZGVmaW5lIEJFTkNITUFSSyggbmFtZSApIFwKKyAgICBmb3IoIENhdGNoOjpCZW5jaG1hcmtMb29wZXIgbG9vcGVyKCBuYW1lICk7IGxvb3BlcjsgbG9vcGVyLmluY3JlbWVudCgpICkKKworI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9CRU5DSE1BUktfSF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jYXB0dXJlLmhwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY2FwdHVyZS5ocHAKaW5kZXggNmIyZjc3Mi4uNTFmYTAzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jYXB0dXJlLmhwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NhcHR1cmUuaHBwCkBAIC00MSwxNyArNDEsMTUgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVTVCggbWFjcm9OYW1lLCByZXN1bHREaXNwb3NpdGlvbiwgLi4uICkgXAogICAgIGRvIHsgXAotICAgICAgICAvKiBUaGUgZXhwcmVzc2lvbiBzaG91bGQgbm90IGJlIGV2YWx1YXRlZCwgYnV0IHdhcm5pbmdzIHNob3VsZCBob3BlZnVsbHkgYmUgY2hlY2tlZCAqLyBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX0lHTk9SRV9CVVRfV0FSTihfX1ZBX0FSR1NfXyk7IFwKICAgICAgICAgQ2F0Y2g6OkFzc2VydGlvbkhhbmRsZXIgY2F0Y2hBc3NlcnRpb25IYW5kbGVyKCBtYWNyb05hbWUjI19jYXRjaF9zciwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIENBVENIX0lOVEVSTkFMX1NUUklOR0lGWShfX1ZBX0FSR1NfXyksIHJlc3VsdERpc3Bvc2l0aW9uICk7IFwKICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVFJZIHsgXAotICAgICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1RBUlRfV0FSTklOR1NfU1VQUFJFU1NJT04gXAogICAgICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfUEFSRU5USEVTRVNfV0FSTklOR1MgXAogICAgICAgICAgICAgY2F0Y2hBc3NlcnRpb25IYW5kbGVyLmhhbmRsZUV4cHIoIENhdGNoOjpEZWNvbXBvc2VyKCkgPD0gX19WQV9BUkdTX18gKTsgXAotICAgICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1RPUF9XQVJOSU5HU19TVVBQUkVTU0lPTiBcCisgICAgICAgICAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX1BBUkVOVEhFU0VTX1dBUk5JTkdTIFwKICAgICAgICAgfSBJTlRFUk5BTF9DQVRDSF9DQVRDSCggY2F0Y2hBc3NlcnRpb25IYW5kbGVyICkgXAogICAgICAgICBJTlRFUk5BTF9DQVRDSF9SRUFDVCggY2F0Y2hBc3NlcnRpb25IYW5kbGVyICkgXAotICAgIH0gd2hpbGUoIGZhbHNlICkKKyAgICB9IHdoaWxlKCAodm9pZCkwLCAoZmFsc2UpICYmIHN0YXRpY19jYXN0PGJvb2w+KCAhIShfX1ZBX0FSR1NfXykgKSApIC8vIHRoZSBleHByZXNzaW9uIGhlcmUgaXMgbmV2ZXIgZXZhbHVhdGVkIGF0IHJ1bnRpbWUgYnV0IGl0IGZvcmNlcyB0aGUgY29tcGlsZXIgdG8gZ2l2ZSBpdCBhIGxvb2sKKyAgICAvLyBUaGUgZG91YmxlIG5lZ2F0aW9uIHNpbGVuY2VzIE1TVkMncyBDNDgwMCB3YXJuaW5nLCB0aGUgc3RhdGljX2Nhc3QgZm9yY2VzIHNob3J0LWNpcmN1aXQgZXZhbHVhdGlvbiBpZiB0aGUgdHlwZSBoYXMgb3ZlcmxvYWRlZCAmJi4KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9JRiggbWFjcm9OYW1lLCByZXN1bHREaXNwb3NpdGlvbiwgLi4uICkgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jYXB0dXJlX21hdGNoZXJzLmggYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NhcHR1cmVfbWF0Y2hlcnMuaAppbmRleCA1Mzg2ZTVlLi4wY2VkMDFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NhcHR1cmVfbWF0Y2hlcnMuaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NhcHR1cmVfbWF0Y2hlcnMuaApAQCAtMTAsNyArMTAsNiBAQAogCiAjaW5jbHVkZSAiY2F0Y2hfY2FwdHVyZS5ocHAiCiAjaW5jbHVkZSAiY2F0Y2hfbWF0Y2hlcnMuaCIKLSNpbmNsdWRlICJjYXRjaF9tYXRjaGVyc19leGNlcHRpb24uaHBwIgogI2luY2x1ZGUgImNhdGNoX21hdGNoZXJzX2Zsb2F0aW5nLmgiCiAjaW5jbHVkZSAiY2F0Y2hfbWF0Y2hlcnNfZ2VuZXJpYy5ocHAiCiAjaW5jbHVkZSAiY2F0Y2hfbWF0Y2hlcnNfc3RyaW5nLmgiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbW1hbmRsaW5lLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29tbWFuZGxpbmUuY3BwCmluZGV4IGE0MDEwODUuLjY2NzU5ZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29tbWFuZGxpbmUuY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29tbWFuZGxpbmUuY3BwCkBAIC00OSwxNCArNDksOSBAQAogICAgICAgICAgICAgICAgICAgICBpZiggIWxpbmUuZW1wdHkoKSAmJiAhc3RhcnRzV2l0aCggbGluZSwgJyMnICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiggIXN0YXJ0c1dpdGgoIGxpbmUsICciJyApICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gJyInICsgbGluZSArICciJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy50ZXN0c09yVGFncy5wdXNoX2JhY2soIGxpbmUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy50ZXN0c09yVGFncy5lbXBsYWNlX2JhY2soICIsIiApOworICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnRlc3RzT3JUYWdzLnB1c2hfYmFjayggbGluZSArICcsJyApOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vUmVtb3ZlIGNvbW1hIGluIHRoZSBlbmQKLSAgICAgICAgICAgICAgICBpZighY29uZmlnLnRlc3RzT3JUYWdzLmVtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy50ZXN0c09yVGFncy5lcmFzZSggY29uZmlnLnRlc3RzT3JUYWdzLmVuZCgpLTEgKTsKLQogICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZXJSZXN1bHQ6Om9rKCBQYXJzZVJlc3VsdFR5cGU6Ok1hdGNoZWQgKTsKICAgICAgICAgICAgIH07CiAgICAgICAgIGF1dG8gY29uc3Qgc2V0VGVzdE9yZGVyID0gWyZdKCBzdGQ6OnN0cmluZyBjb25zdCYgb3JkZXIgKSB7CkBAIC05MSwxNiArODYsMTQgQEAKICAgICAgICAgICAgIH07CiAgICAgICAgIGF1dG8gY29uc3Qgc2V0V2FpdEZvcktleXByZXNzID0gWyZdKCBzdGQ6OnN0cmluZyBjb25zdCYga2V5cHJlc3MgKSB7CiAgICAgICAgICAgICAgICAgYXV0byBrZXlwcmVzc0xjID0gdG9Mb3dlcigga2V5cHJlc3MgKTsKLSAgICAgICAgICAgICAgICBpZiAoa2V5cHJlc3NMYyA9PSAibmV2ZXIiKQotICAgICAgICAgICAgICAgICAgICBjb25maWcud2FpdEZvcktleXByZXNzID0gV2FpdEZvcktleXByZXNzOjpOZXZlcjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmKCBrZXlwcmVzc0xjID09ICJzdGFydCIgKQorICAgICAgICAgICAgICAgIGlmKCBrZXlwcmVzc0xjID09ICJzdGFydCIgKQogICAgICAgICAgICAgICAgICAgICBjb25maWcud2FpdEZvcktleXByZXNzID0gV2FpdEZvcktleXByZXNzOjpCZWZvcmVTdGFydDsKICAgICAgICAgICAgICAgICBlbHNlIGlmKCBrZXlwcmVzc0xjID09ICJleGl0IiApCiAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy53YWl0Rm9yS2V5cHJlc3MgPSBXYWl0Rm9yS2V5cHJlc3M6OkJlZm9yZUV4aXQ7CiAgICAgICAgICAgICAgICAgZWxzZSBpZigga2V5cHJlc3NMYyA9PSAiYm90aCIgKQogICAgICAgICAgICAgICAgICAgICBjb25maWcud2FpdEZvcktleXByZXNzID0gV2FpdEZvcktleXByZXNzOjpCZWZvcmVTdGFydEFuZEV4aXQ7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VyUmVzdWx0OjpydW50aW1lRXJyb3IoICJrZXlwcmVzcyBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZjogbmV2ZXIsIHN0YXJ0LCBleGl0IG9yIGJvdGguICciICsga2V5cHJlc3MgKyAiJyBub3QgcmVjb2duaXNlZCIgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlclJlc3VsdDo6cnVudGltZUVycm9yKCAia2V5cHJlc3MgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2Y6IHN0YXJ0LCBleGl0IG9yIGJvdGguICciICsga2V5cHJlc3MgKyAiJyBub3QgcmVjb2duaXNlZCIgKTsKICAgICAgICAgICAgIHJldHVybiBQYXJzZXJSZXN1bHQ6Om9rKCBQYXJzZVJlc3VsdFR5cGU6Ok1hdGNoZWQgKTsKICAgICAgICAgICAgIH07CiAgICAgICAgIGF1dG8gY29uc3Qgc2V0VmVyYm9zaXR5ID0gWyZdKCBzdGQ6OnN0cmluZyBjb25zdCYgdmVyYm9zaXR5ICkgewpAQCAtMjAwLDI0ICsxOTMsMTMgQEAKICAgICAgICAgICAgIHwgT3B0KCBjb25maWcubGliSWRlbnRpZnkgKQogICAgICAgICAgICAgICAgIFsiLS1saWJpZGVudGlmeSJdCiAgICAgICAgICAgICAgICAgKCAicmVwb3J0IG5hbWUgYW5kIHZlcnNpb24gYWNjb3JkaW5nIHRvIGxpYmlkZW50aWZ5IHN0YW5kYXJkIiApCi0gICAgICAgICAgICB8IE9wdCggc2V0V2FpdEZvcktleXByZXNzLCAibmV2ZXJ8c3RhcnR8ZXhpdHxib3RoIiApCisgICAgICAgICAgICB8IE9wdCggc2V0V2FpdEZvcktleXByZXNzLCAic3RhcnR8ZXhpdHxib3RoIiApCiAgICAgICAgICAgICAgICAgWyItLXdhaXQtZm9yLWtleXByZXNzIl0KICAgICAgICAgICAgICAgICAoICJ3YWl0cyBmb3IgYSBrZXlwcmVzcyBiZWZvcmUgZXhpdGluZyIgKQotICAgICAgICAgICAgfCBPcHQoIGNvbmZpZy5iZW5jaG1hcmtTYW1wbGVzLCAic2FtcGxlcyIgKQotICAgICAgICAgICAgICAgIFsiLS1iZW5jaG1hcmstc2FtcGxlcyJdCi0gICAgICAgICAgICAgICAgKCAibnVtYmVyIG9mIHNhbXBsZXMgdG8gY29sbGVjdCAoZGVmYXVsdDogMTAwKSIgKQotICAgICAgICAgICAgfCBPcHQoIGNvbmZpZy5iZW5jaG1hcmtSZXNhbXBsZXMsICJyZXNhbXBsZXMiICkKLSAgICAgICAgICAgICAgICBbIi0tYmVuY2htYXJrLXJlc2FtcGxlcyJdCi0gICAgICAgICAgICAgICAgKCAibnVtYmVyIG9mIHJlc2FtcGxlcyBmb3IgdGhlIGJvb3RzdHJhcCAoZGVmYXVsdDogMTAwMDAwKSIgKQotICAgICAgICAgICAgfCBPcHQoIGNvbmZpZy5iZW5jaG1hcmtDb25maWRlbmNlSW50ZXJ2YWwsICJjb25maWRlbmNlIGludGVydmFsIiApCi0gICAgICAgICAgICAgICAgWyItLWJlbmNobWFyay1jb25maWRlbmNlLWludGVydmFsIl0KLSAgICAgICAgICAgICAgICAoICJjb25maWRlbmNlIGludGVydmFsIGZvciB0aGUgYm9vdHN0cmFwIChiZXR3ZWVuIDAgYW5kIDEsIGRlZmF1bHQ6IDAuOTUpIiApCi0gICAgICAgICAgICB8IE9wdCggY29uZmlnLmJlbmNobWFya05vQW5hbHlzaXMgKQotICAgICAgICAgICAgICAgIFsiLS1iZW5jaG1hcmstbm8tYW5hbHlzaXMiXQotICAgICAgICAgICAgICAgICggInBlcmZvcm0gb25seSBtZWFzdXJlbWVudHM7IGRvIG5vdCBwZXJmb3JtIGFueSBhbmFseXNpcyIgKQotICAgICAgICAgICAgfCBPcHQoIGNvbmZpZy5iZW5jaG1hcmtXYXJtdXBUaW1lLCAiYmVuY2htYXJrV2FybXVwVGltZSIgKQotICAgICAgICAgICAgICAgIFsiLS1iZW5jaG1hcmstd2FybXVwLXRpbWUiXQotICAgICAgICAgICAgICAgICggImFtb3VudCBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyBzcGVudCBvbiB3YXJtaW5nIHVwIGVhY2ggdGVzdCAoZGVmYXVsdDogMTAwKSIgKQorICAgICAgICAgICAgfCBPcHQoIGNvbmZpZy5iZW5jaG1hcmtSZXNvbHV0aW9uTXVsdGlwbGUsICJtdWx0aXBsaWVyIiApCisgICAgICAgICAgICAgICAgWyItLWJlbmNobWFyay1yZXNvbHV0aW9uLW11bHRpcGxlIl0KKyAgICAgICAgICAgICAgICAoICJtdWx0aXBsZSBvZiBjbG9jayByZXNvbHV0aW9uIHRvIHJ1biBiZW5jaG1hcmtzIiApCisKICAgICAgICAgICAgIHwgQXJnKCBjb25maWcudGVzdHNPclRhZ3MsICJ0ZXN0IG5hbWV8cGF0dGVybnx0YWdzIiApCiAgICAgICAgICAgICAgICAgKCAid2hpY2ggdGVzdCBvciB0ZXN0cyB0byB1c2UiICk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29tbW9uLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29tbW9uLmNwcAppbmRleCA3OTBhY2JlLi5iMmZjYTRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbW1vbi5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb21tb24uY3BwCkBAIC0xNSw2ICsxNSw5IEBACiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKKyAgICBib29sIFNvdXJjZUxpbmVJbmZvOjplbXB0eSgpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICAgICAgcmV0dXJuIGZpbGVbMF0gPT0gJ1wwJzsKKyAgICB9CiAgICAgYm9vbCBTb3VyY2VMaW5lSW5mbzo6b3BlcmF0b3IgPT0gKCBTb3VyY2VMaW5lSW5mbyBjb25zdCYgb3RoZXIgKSBjb25zdCBub2V4Y2VwdCB7CiAgICAgICAgIHJldHVybiBsaW5lID09IG90aGVyLmxpbmUgJiYgKGZpbGUgPT0gb3RoZXIuZmlsZSB8fCBzdGQ6OnN0cmNtcChmaWxlLCBvdGhlci5maWxlKSA9PSAwKTsKICAgICB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbW1vbi5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb21tb24uaAppbmRleCA1ZTA5N2ZiLi5lNDc0NTYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29tbW9uLmgKQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgU291cmNlTGluZUluZm8oIFNvdXJjZUxpbmVJbmZvJiYgKSAgICAgICAgICAgICAgbm9leGNlcHQgPSBkZWZhdWx0OwogICAgICAgICBTb3VyY2VMaW5lSW5mbyYgb3BlcmF0b3IgPSAoIFNvdXJjZUxpbmVJbmZvJiYgKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CiAKLSAgICAgICAgYm9vbCBlbXB0eSgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIGZpbGVbMF0gPT0gJ1wwJzsgfQorICAgICAgICBib29sIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQ7CiAgICAgICAgIGJvb2wgb3BlcmF0b3IgPT0gKCBTb3VyY2VMaW5lSW5mbyBjb25zdCYgb3RoZXIgKSBjb25zdCBub2V4Y2VwdDsKICAgICAgICAgYm9vbCBvcGVyYXRvciA8ICggU291cmNlTGluZUluZm8gY29uc3QmIG90aGVyICkgY29uc3Qgbm9leGNlcHQ7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29tcGlsZXJfY2FwYWJpbGl0aWVzLmggYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbXBpbGVyX2NhcGFiaWxpdGllcy5oCmluZGV4IDBlYTc2MTMuLjAxMmJmNDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29tcGlsZXJfY2FwYWJpbGl0aWVzLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb21waWxlcl9jYXBhYmlsaXRpZXMuaApAQCAtNDMsMzkgKzQzLDI2IEBACiAjICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NQUDE3X1VOQ0FVR0hUX0VYQ0VQVElPTlMKICNlbmRpZgogCi0vLyBXZSBoYXZlIHRvIGF2b2lkIGJvdGggSUNDIGFuZCBDbGFuZywgYmVjYXVzZSB0aGV5IHRyeSB0byBtYXNrIHRoZW1zZWx2ZXMKLS8vIGFzIGdjYywgYW5kIHdlIHdhbnQgb25seSBHQ0MgaW4gdGhpcyBibG9jawotI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fY2xhbmdfXykgJiYgIWRlZmluZWQoX19JQ0MpCi0jICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTiBfUHJhZ21hKCAiR0NDIGRpYWdub3N0aWMgcHVzaCIgKQotIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1RPUF9XQVJOSU5HU19TVVBQUkVTU0lPTiAgX1ByYWdtYSggIkdDQyBkaWFnbm9zdGljIHBvcCIgKQorI2lmZGVmIF9fY2xhbmdfXwogCi0jICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9JR05PUkVfQlVUX1dBUk4oLi4uKSAodm9pZClfX2J1aWx0aW5fY29uc3RhbnRfcChfX1ZBX0FSR1NfXykKKyMgICAgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAorICAgICAgICAgICAgX1ByYWdtYSggImNsYW5nIGRpYWdub3N0aWMgcHVzaCIgKSBcCisgICAgICAgICAgICBfUHJhZ21hKCAiY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdleGl0LXRpbWUtZGVzdHJ1Y3RvcnNcIiIgKSBcCisgICAgICAgICAgICBfUHJhZ21hKCAiY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdnbG9iYWwtY29uc3RydWN0b3JzXCIiKQorIyAgICAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTIFwKKyAgICAgICAgICAgIF9QcmFnbWEoICJjbGFuZyBkaWFnbm9zdGljIHBvcCIgKQogCi0jZW5kaWYKKyMgICAgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1BBUkVOVEhFU0VTX1dBUk5JTkdTIFwKKyAgICAgICAgICAgIF9QcmFnbWEoICJjbGFuZyBkaWFnbm9zdGljIHB1c2giICkgXAorICAgICAgICAgICAgX1ByYWdtYSggImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XcGFyZW50aGVzZXNcIiIgKQorIyAgICAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19QQVJFTlRIRVNFU19XQVJOSU5HUyBcCisgICAgICAgICAgICBfUHJhZ21hKCAiY2xhbmcgZGlhZ25vc3RpYyBwb3AiICkKIAotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotCi0jICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTiBfUHJhZ21hKCAiY2xhbmcgZGlhZ25vc3RpYyBwdXNoIiApCi0jICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9TVE9QX1dBUk5JTkdTX1NVUFBSRVNTSU9OICBfUHJhZ21hKCAiY2xhbmcgZGlhZ25vc3RpYyBwb3AiICkKLQotIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfSUdOT1JFX0JVVF9XQVJOKC4uLikgKHZvaWQpX19idWlsdGluX2NvbnN0YW50X3AoX19WQV9BUkdTX18pCi0KLQotIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyBcCi0gICAgICAgICBfUHJhZ21hKCAiY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdleGl0LXRpbWUtZGVzdHJ1Y3RvcnNcIiIgKSBcCi0gICAgICAgICBfUHJhZ21hKCAiY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdnbG9iYWwtY29uc3RydWN0b3JzXCIiKQotCi0jICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19QQVJFTlRIRVNFU19XQVJOSU5HUyBcCi0gICAgICAgICBfUHJhZ21hKCAiY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdwYXJlbnRoZXNlc1wiIiApCi0KLSMgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1VOVVNFRF9XQVJOSU5HUyBcCi0gICAgICAgICBfUHJhZ21hKCAiY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bnVzZWQtdmFyaWFibGVcIiIgKQotCi0jICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19aRVJPX1ZBUklBRElDX1dBUk5JTkdTIFwKLSAgICAgICAgIF9QcmFnbWEoICJjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV2dudS16ZXJvLXZhcmlhZGljLW1hY3JvLWFyZ3VtZW50c1wiIiApCi0KLSMgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1VOVVNFRF9URU1QTEFURV9XQVJOSU5HUyBcCi0gICAgICAgICBfUHJhZ21hKCAiY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bnVzZWQtdGVtcGxhdGVcIiIgKQorIyAgICAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfVU5VU0VEX1dBUk5JTkdTIFwKKyAgICAgICAgICAgIF9QcmFnbWEoICJjbGFuZyBkaWFnbm9zdGljIHB1c2giICkgXAorICAgICAgICAgICAgX1ByYWdtYSggImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XdW51c2VkLXZhcmlhYmxlXCIiICkKKyMgICAgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1VOU1VQUFJFU1NfVU5VU0VEX1dBUk5JTkdTIFwKKyAgICAgICAgICAgIF9QcmFnbWEoICJjbGFuZyBkaWFnbm9zdGljIHBvcCIgKQogCiAjZW5kaWYgLy8gX19jbGFuZ19fCiAKQEAgLTEwMSw3ICs4OCw2IEBACiAvLyBBbmRyb2lkIHNvbWVob3cgc3RpbGwgZG9lcyBub3Qgc3VwcG9ydCBzdGQ6OnRvX3N0cmluZwogI2lmIGRlZmluZWQoX19BTkRST0lEX18pCiAjICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfTk9fQ1BQMTFfVE9fU1RSSU5HCi0jICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfQU5EUk9JRF9MT0dXUklURQogI2VuZGlmCiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC0xMjMsMjQgKzEwOSwyMCBAQAogLy8gUmVxdWlyZWQgZm9yIHNvbWUgdmVyc2lvbnMgb2YgQ3lnd2luIHRvIGRlY2xhcmUgZ2V0dGltZW9mZGF5CiAvLyBzZWU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzY5MDE4MDMvZ2V0dGltZW9mZGF5LW5vdC1kZWNsYXJlZC1pbi10aGlzLXNjb3BlLWN5Z3dpbgogIyAgIGRlZmluZSBfQlNEX1NPVVJDRQotLy8gc29tZSB2ZXJzaW9ucyBvZiBjeWd3aW4gKG1vc3QpIGRvIG5vdCBzdXBwb3J0IHN0ZDo6dG9fc3RyaW5nLiBVc2UgdGhlIGxpYnN0ZCBjaGVjay4KKy8vIHNvbWUgdmVyc2lvbnMgb2YgY3lnd2luIChtb3N0KSBkbyBub3Qgc3VwcG9ydCBzdGQ6OnRvX3N0cmluZy4gVXNlIHRoZSBsaWJzdGQgY2hlY2suIAogLy8gaHR0cHM6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy00LjguMi9saWJzdGRjKysvYXBpL2EwMTA1M19zb3VyY2UuaHRtbCBsaW5lIDI4MTItMjgxMwogIyBpZiAhKChfX2NwbHVzcGx1cyA+PSAyMDExMDNMKSAmJiBkZWZpbmVkKF9HTElCQ1hYX1VTRV9DOTkpIFwKLSAgICAgICAgICAgJiYgIWRlZmluZWQoX0dMSUJDWFhfSEFWRV9CUk9LRU5fVlNXUFJJTlRGKSkKKwkgICAgICAgJiYgIWRlZmluZWQoX0dMSUJDWFhfSEFWRV9CUk9LRU5fVlNXUFJJTlRGKSkKIAotIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX05PX0NQUDExX1RPX1NUUklORworIwlkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX05PX0NQUDExX1RPX1NUUklORwogCiAjIGVuZGlmCiAjZW5kaWYgLy8gX19DWUdXSU5fXwogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8gVmlzdWFsIEMrKwotI2lmIGRlZmluZWQoX01TQ19WRVIpCisjaWZkZWYgX01TQ19WRVIKIAotIyAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1NUQVJUX1dBUk5JTkdTX1NVUFBSRVNTSU9OIF9fcHJhZ21hKCB3YXJuaW5nKHB1c2gpICkKLSMgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9TVE9QX1dBUk5JTkdTX1NVUFBSRVNTSU9OICBfX3ByYWdtYSggd2FybmluZyhwb3ApICkKLQotIyAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0lHTk9SRV9CVVRfV0FSTiguLi4pICh2b2lkKXNpemVvZihfX1ZBX0FSR1NfXykKIAogIyAgaWYgX01TQ19WRVIgPj0gMTkwMCAvLyBWaXN1YWwgU3R1ZGlvIDIwMTUgb3IgbmV3ZXIKICMgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19DUFAxN19VTkNBVUdIVF9FWENFUFRJT05TCkBAIC0xNTcsMTkgKzEzOSwxMiBAQAogLy8gTVNWQyB0cmFkaXRpb25hbCBwcmVwcm9jZXNzb3IgbmVlZHMgc29tZSB3b3JrYXJvdW5kIGZvciBfX1ZBX0FSR1NfXwogLy8gX01TVkNfVFJBRElUSU9OQUwgPT0gMCBtZWFucyBuZXcgY29uZm9ybWFudCBwcmVwcm9jZXNzb3IKIC8vIF9NU1ZDX1RSQURJVElPTkFMID09IDEgbWVhbnMgb2xkIHRyYWRpdGlvbmFsIG5vbi1jb25mb3JtYW50IHByZXByb2Nlc3NvcgotIyAgaWYgIWRlZmluZWQoX19jbGFuZ19fKSAvLyBIYW5kbGUgQ2xhbmcgbWFzcXVlcmFkaW5nIGZvciBtc3ZjCi0jICAgIGlmICFkZWZpbmVkKF9NU1ZDX1RSQURJVElPTkFMKSB8fCAoZGVmaW5lZChfTVNWQ19UUkFESVRJT05BTCkgJiYgX01TVkNfVFJBRElUSU9OQUwpCi0jICAgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgotIyAgICBlbmRpZiAvLyBNU1ZDX1RSQURJVElPTkFMCi0jICBlbmRpZiAvLyBfX2NsYW5nX18KKyMgIGlmICFkZWZpbmVkKF9NU1ZDX1RSQURJVElPTkFMKSB8fCAoZGVmaW5lZChfTVNWQ19UUkFESVRJT05BTCkgJiYgX01TVkNfVFJBRElUSU9OQUwpCisjICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IKKyMgIGVuZGlmCiAKICNlbmRpZiAvLyBfTVNDX1ZFUgogCi0jaWYgZGVmaW5lZChfUkVFTlRSQU5UKSB8fCBkZWZpbmVkKF9NU0NfVkVSKQotLy8gRW5hYmxlIGFzeW5jIHByb2Nlc3NpbmcsIGFzIC1wdGhyZWFkIGlzIHNwZWNpZmllZCBvciBubyBhZGRpdGlvbmFsIGxpbmtpbmcgaXMgcmVxdWlyZWQKLSMgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19VU0VfQVNZTkMKLSNlbmRpZiAvLyBfTVNDX1ZFUgotCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8gQ2hlY2sgaWYgd2UgYXJlIGNvbXBpbGVkIHdpdGggLWZuby1leGNlcHRpb25zIG9yIGVxdWl2YWxlbnQKICNpZiBkZWZpbmVkKF9fRVhDRVBUSU9OUykgfHwgZGVmaW5lZChfX2NwcF9leGNlcHRpb25zKSB8fCBkZWZpbmVkKF9DUFBVTldJTkQpCkBAIC0xOTksNTUgKzE3NCw0MSBAQAogICAgICNkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NPVU5URVIKICNlbmRpZgogCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gQ2hlY2sgaWYgc3RyaW5nX3ZpZXcgaXMgYXZhaWxhYmxlIGFuZCB1c2FibGUKKy8vIFRoZSBjaGVjayBpcyBzcGxpdCBhcGFydCB0byB3b3JrIGFyb3VuZCB2MTQwIChWUzIwMTUpIHByZXByb2Nlc3NvciBpc3N1ZS4uLgorI2lmIGRlZmluZWQoX19oYXNfaW5jbHVkZSkKKyNpZiBfX2hhc19pbmNsdWRlKDxzdHJpbmdfdmlldz4pICYmIGRlZmluZWQoQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUikKKyMgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19DUFAxN19TVFJJTkdfVklFVworI2VuZGlmCisjZW5kaWYKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotLy8gUlRYIGlzIGEgc3BlY2lhbCB2ZXJzaW9uIG9mIFdpbmRvd3MgdGhhdCBpcyByZWFsIHRpbWUuCi0vLyBUaGlzIG1lYW5zIHRoYXQgaXQgaXMgZGV0ZWN0ZWQgYXMgV2luZG93cywgYnV0IGRvZXMgbm90IHByb3ZpZGUKLS8vIHRoZSBzYW1lIHNldCBvZiBjYXBhYmlsaXRpZXMgYXMgcmVhbCBXaW5kb3dzIGRvZXMuCi0jaWYgZGVmaW5lZChVTkRFUl9SVFNTKSB8fCBkZWZpbmVkKFJUWDY0X0JVSUxEKQotICAgICNkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX05PX1dJTkRPV1NfU0VICi0gICAgI2RlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfTk9fQVNZTkMKLSAgICAjZGVmaW5lIENBVENIX0NPTkZJR19DT0xPVVJfTk9ORQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxKQotI2RlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfR0xPQkFMX05FWFRBRlRFUgotI2VuZGlmCi0KLS8vIFZhcmlvdXMgc3RkbGliIHN1cHBvcnQgY2hlY2tzIHRoYXQgcmVxdWlyZSBfX2hhc19pbmNsdWRlCisvLyBDaGVjayBpZiBvcHRpb25hbCBpcyBhdmFpbGFibGUgYW5kIHVzYWJsZQogI2lmIGRlZmluZWQoX19oYXNfaW5jbHVkZSkKLSAgLy8gQ2hlY2sgaWYgc3RyaW5nX3ZpZXcgaXMgYXZhaWxhYmxlIGFuZCB1c2FibGUKLSAgI2lmIF9faGFzX2luY2x1ZGUoPHN0cmluZ192aWV3PikgJiYgZGVmaW5lZChDQVRDSF9DUFAxN19PUl9HUkVBVEVSKQotICAjICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfQ1BQMTdfU1RSSU5HX1ZJRVcKLSAgI2VuZGlmCisjICBpZiBfX2hhc19pbmNsdWRlKDxvcHRpb25hbD4pICYmIGRlZmluZWQoQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUikKKyMgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19DUFAxN19PUFRJT05BTAorIyAgZW5kaWYgLy8gX19oYXNfaW5jbHVkZSg8b3B0aW9uYWw+KSAmJiBkZWZpbmVkKENBVENIX0NQUDE3X09SX0dSRUFURVIpCisjZW5kaWYgLy8gX19oYXNfaW5jbHVkZQogCi0gIC8vIENoZWNrIGlmIG9wdGlvbmFsIGlzIGF2YWlsYWJsZSBhbmQgdXNhYmxlCi0gICMgIGlmIF9faGFzX2luY2x1ZGUoPG9wdGlvbmFsPikgJiYgZGVmaW5lZChDQVRDSF9DUFAxN19PUl9HUkVBVEVSKQotICAjICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfQ1BQMTdfT1BUSU9OQUwKLSAgIyAgZW5kaWYgLy8gX19oYXNfaW5jbHVkZSg8b3B0aW9uYWw+KSAmJiBkZWZpbmVkKENBVENIX0NQUDE3X09SX0dSRUFURVIpCi0KLSAgLy8gQ2hlY2sgaWYgYnl0ZSBpcyBhdmFpbGFibGUgYW5kIHVzYWJsZQotICAjICBpZiBfX2hhc19pbmNsdWRlKDxjc3RkZGVmPikgJiYgZGVmaW5lZChDQVRDSF9DUFAxN19PUl9HUkVBVEVSKQotICAjICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfQ1BQMTdfQllURQotICAjICBlbmRpZiAvLyBfX2hhc19pbmNsdWRlKDxjc3RkZGVmPikgJiYgZGVmaW5lZChDQVRDSF9DUFAxN19PUl9HUkVBVEVSKQotCi0gIC8vIENoZWNrIGlmIHZhcmlhbnQgaXMgYXZhaWxhYmxlIGFuZCB1c2FibGUKLSAgIyAgaWYgX19oYXNfaW5jbHVkZSg8dmFyaWFudD4pICYmIGRlZmluZWQoQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUikKLSAgIyAgICBpZiBkZWZpbmVkKF9fY2xhbmdfXykgJiYgKF9fY2xhbmdfbWFqb3JfXyA8IDgpCi0gICAgICAgICAvLyB3b3JrIGFyb3VuZCBjbGFuZyBidWcgd2l0aCBsaWJzdGRjKysgaHR0cHM6Ly9idWdzLmxsdm0ub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTg1MgotICAgICAgICAgLy8gZml4IHNob3VsZCBiZSBpbiBjbGFuZyA4LCB3b3JrYXJvdW5kIGluIGxpYnN0ZGMrKyA4LjIKLSAgIyAgICAgIGluY2x1ZGUgPGNpc282NDY+Ci0gICMgICAgICBpZiBkZWZpbmVkKF9fR0xJQkNYWF9fKSAmJiBkZWZpbmVkKF9HTElCQ1hYX1JFTEVBU0UpICYmIChfR0xJQkNYWF9SRUxFQVNFIDwgOSkKLSAgIyAgICAgICAgZGVmaW5lIENBVENIX0NPTkZJR19OT19DUFAxN19WQVJJQU5UCi0gICMgICAgICBlbHNlCi0gICMgICAgICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfQ1BQMTdfVkFSSUFOVAotICAjICAgICAgZW5kaWYgLy8gZGVmaW5lZChfX0dMSUJDWFhfXykgJiYgZGVmaW5lZChfR0xJQkNYWF9SRUxFQVNFKSAmJiAoX0dMSUJDWFhfUkVMRUFTRSA8IDkpCi0gICMgICAgZWxzZQotICAjICAgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19DUFAxN19WQVJJQU5UCi0gICMgICAgZW5kaWYgLy8gZGVmaW5lZChfX2NsYW5nX18pICYmIChfX2NsYW5nX21ham9yX18gPCA4KQotICAjICBlbmRpZiAvLyBfX2hhc19pbmNsdWRlKDx2YXJpYW50PikgJiYgZGVmaW5lZChDQVRDSF9DUFAxN19PUl9HUkVBVEVSKQotI2VuZGlmIC8vIGRlZmluZWQoX19oYXNfaW5jbHVkZSkKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBDaGVjayBpZiB2YXJpYW50IGlzIGF2YWlsYWJsZSBhbmQgdXNhYmxlCisjaWYgZGVmaW5lZChfX2hhc19pbmNsdWRlKQorIyAgaWYgX19oYXNfaW5jbHVkZSg8dmFyaWFudD4pICYmIGRlZmluZWQoQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUikKKyMgICAgaWYgZGVmaW5lZChfX2NsYW5nX18pICYmIChfX2NsYW5nX21ham9yX18gPCA4KQorICAgICAgIC8vIHdvcmsgYXJvdW5kIGNsYW5nIGJ1ZyB3aXRoIGxpYnN0ZGMrKyBodHRwczovL2J1Z3MubGx2bS5vcmcvc2hvd19idWcuY2dpP2lkPTMxODUyCisgICAgICAgLy8gZml4IHNob3VsZCBiZSBpbiBjbGFuZyA4LCB3b3JrYXJvdW5kIGluIGxpYnN0ZGMrKyA4LjIKKyMgICAgICBpbmNsdWRlIDxjaXNvNjQ2PgorIyAgICAgIGlmIGRlZmluZWQoX19HTElCQ1hYX18pICYmIGRlZmluZWQoX0dMSUJDWFhfUkVMRUFTRSkgJiYgKF9HTElCQ1hYX1JFTEVBU0UgPCA5KQorIyAgICAgICAgZGVmaW5lIENBVENIX0NPTkZJR19OT19DUFAxN19WQVJJQU5UCisjICAgICAgZWxzZQorIyAgICAgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19DUFAxN19WQVJJQU5UCisjICAgICAgZW5kaWYgLy8gZGVmaW5lZChfX0dMSUJDWFhfXykgJiYgZGVmaW5lZChfR0xJQkNYWF9SRUxFQVNFKSAmJiAoX0dMSUJDWFhfUkVMRUFTRSA8IDkpCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NQUDE3X1ZBUklBTlQKKyMgICAgZW5kaWYgLy8gZGVmaW5lZChfX2NsYW5nX18pICYmIChfX2NsYW5nX21ham9yX18gPCA4KQorIyAgZW5kaWYgLy8gX19oYXNfaW5jbHVkZSg8dmFyaWFudD4pICYmIGRlZmluZWQoQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUikKKyNlbmRpZiAvLyBfX2hhc19pbmNsdWRlCiAKIAogI2lmIGRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NPVU5URVIpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19OT19DT1VOVEVSKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfQ09VTlRFUikKQEAgLTI4NSwxMSArMjQ2LDYgQEAKICMgIGRlZmluZSBDQVRDSF9DT05GSUdfQ1BQMTdfVkFSSUFOVAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENBVENIX0lOVEVSTkFMX0NPTkZJR19DUFAxN19CWVRFKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfTk9fQ1BQMTdfQllURSkgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX0NQUDE3X0JZVEUpCi0jICBkZWZpbmUgQ0FUQ0hfQ09ORklHX0NQUDE3X0JZVEUKLSNlbmRpZgotCi0KICNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19FWFBFUklNRU5UQUxfUkVESVJFQ1QpCiAjICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX05FV19DQVBUVVJFCiAjZW5kaWYKQEAgLTMwNiw1NCArMjYyLDE3IEBACiAjICBkZWZpbmUgQ0FUQ0hfQ09ORklHX1BPTFlGSUxMX0lTTkFOCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX1VTRV9BU1lOQykgICYmICFkZWZpbmVkKENBVENIX0lOVEVSTkFMX0NPTkZJR19OT19BU1lOQykgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX05PX1VTRV9BU1lOQykgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX1VTRV9BU1lOQykKLSMgIGRlZmluZSBDQVRDSF9DT05GSUdfVVNFX0FTWU5DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0FORFJPSURfTE9HV1JJVEUpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19OT19BTkRST0lEX0xPR1dSSVRFKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfQU5EUk9JRF9MT0dXUklURSkKLSMgIGRlZmluZSBDQVRDSF9DT05GSUdfQU5EUk9JRF9MT0dXUklURQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENBVENIX0lOVEVSTkFMX0NPTkZJR19HTE9CQUxfTkVYVEFGVEVSKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfTk9fR0xPQkFMX05FWFRBRlRFUikgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX0dMT0JBTF9ORVhUQUZURVIpCi0jICBkZWZpbmUgQ0FUQ0hfQ09ORklHX0dMT0JBTF9ORVhUQUZURVIKLSNlbmRpZgotCi0KLS8vIEV2ZW4gaWYgd2UgZG8gbm90IHRoaW5rIHRoZSBjb21waWxlciBoYXMgdGhhdCB3YXJuaW5nLCB3ZSBzdGlsbCBoYXZlCi0vLyB0byBwcm92aWRlIGEgbWFjcm8gdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgY29kZS4KLSNpZiAhZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTikKLSMgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1RBUlRfV0FSTklOR1NfU1VQUFJFU1NJT04KLSNlbmRpZgotI2lmICFkZWZpbmVkKENBVENIX0lOVEVSTkFMX1NUT1BfV0FSTklOR1NfU1VQUFJFU1NJT04pCi0jICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1NUT1BfV0FSTklOR1NfU1VQUFJFU1NJT04KLSNlbmRpZgogI2lmICFkZWZpbmVkKENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1BBUkVOVEhFU0VTX1dBUk5JTkdTKQogIyAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19QQVJFTlRIRVNFU19XQVJOSU5HUworIyAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX1BBUkVOVEhFU0VTX1dBUk5JTkdTCiAjZW5kaWYKICNpZiAhZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTKQogIyAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTCisjICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1VOU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUwogI2VuZGlmCiAjaWYgIWRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfVU5VU0VEX1dBUk5JTkdTKQogIyAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19VTlVTRURfV0FSTklOR1MKLSNlbmRpZgotI2lmICFkZWZpbmVkKENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1pFUk9fVkFSSUFESUNfV0FSTklOR1MpCi0jICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1pFUk9fVkFSSUFESUNfV0FSTklOR1MKLSNlbmRpZgotCi0vLyBUaGUgZ29hbCBvZiB0aGlzIG1hY3JvIGlzIHRvIGF2b2lkIGV2YWx1YXRpb24gb2YgdGhlIGFyZ3VtZW50cywgYnV0Ci0vLyBzdGlsbCBoYXZlIHRoZSBjb21waWxlciB3YXJuIG9uIHByb2JsZW1zIGluc2lkZS4uLgotI2lmICFkZWZpbmVkKENBVENIX0lOVEVSTkFMX0lHTk9SRV9CVVRfV0FSTikKLSMgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfSUdOT1JFX0JVVF9XQVJOKC4uLikKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoX19hcHBsZV9idWlsZF92ZXJzaW9uX18pICYmIChfX2NsYW5nX21ham9yX18gPCAxMCkKLSMgICB1bmRlZiBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19VTlVTRURfVEVNUExBVEVfV0FSTklOR1MKLSNlbGlmIGRlZmluZWQoX19jbGFuZ19fKSAmJiAoX19jbGFuZ19tYWpvcl9fIDwgNSkKLSMgICB1bmRlZiBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19VTlVTRURfVEVNUExBVEVfV0FSTklOR1MKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfVU5VU0VEX1RFTVBMQVRFX1dBUk5JTkdTKQotIyAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19VTlVTRURfVEVNUExBVEVfV0FSTklOR1MKKyMgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19VTlVTRURfV0FSTklOR1MKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfRElTQUJMRV9FWENFUFRJT05TKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb25maWcuY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb25maWcuY3BwCmluZGV4IDIxY2Q2MjkuLmQ5ZWU5MTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29uZmlnLmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbmZpZy5jcHAKQEAgLTE1LDIzICsxNSwxMSBAQAogICAgIDogICBtX2RhdGEoIGRhdGEgKSwKICAgICAgICAgbV9zdHJlYW0oIG9wZW5TdHJlYW0oKSApCiAgICAgewotICAgICAgICAvLyBXZSBuZWVkIHRvIHRyaW0gZmlsdGVyIHNwZWNzIHRvIGF2b2lkIHRyb3VibGUgd2l0aCBzdXBlcmZsdW91cwotICAgICAgICAvLyB3aGl0ZXNwYWNlIChlc3AuIGltcG9ydGFudCBmb3IgYmRkIG1hY3JvcywgYXMgdGhvc2UgYXJlIG1hbnVhbGx5Ci0gICAgICAgIC8vIGFsaWduZWQgd2l0aCB3aGl0ZXNwYWNlKS4KLQotICAgICAgICBmb3IgKGF1dG8mIGVsZW0gOiBtX2RhdGEudGVzdHNPclRhZ3MpIHsKLSAgICAgICAgICAgIGVsZW0gPSB0cmltKGVsZW0pOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbSA6IG1fZGF0YS5zZWN0aW9uc1RvUnVuKSB7Ci0gICAgICAgICAgICBlbGVtID0gdHJpbShlbGVtKTsKLSAgICAgICAgfQotCiAgICAgICAgIFRlc3RTcGVjUGFyc2VyIHBhcnNlcihJVGFnQWxpYXNSZWdpc3RyeTo6Z2V0KCkpOwotICAgICAgICBpZiAoIW1fZGF0YS50ZXN0c09yVGFncy5lbXB0eSgpKSB7CisgICAgICAgIGlmICghZGF0YS50ZXN0c09yVGFncy5lbXB0eSgpKSB7CiAgICAgICAgICAgICBtX2hhc1Rlc3RGaWx0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvciAoYXV0byBjb25zdCYgdGVzdE9yVGFncyA6IG1fZGF0YS50ZXN0c09yVGFncykgewotICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZSh0ZXN0T3JUYWdzKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciggYXV0byBjb25zdCYgdGVzdE9yVGFncyA6IGRhdGEudGVzdHNPclRhZ3MgKQorICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZSggdGVzdE9yVGFncyApOwogICAgICAgICB9CiAgICAgICAgIG1fdGVzdFNwZWMgPSBwYXJzZXIudGVzdFNwZWMoKTsKICAgICB9CkBAIC02NiwxOCArNTQsMTMgQEAKICAgICBTaG93RHVyYXRpb25zOjpPck5vdCBDb25maWc6OnNob3dEdXJhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuc2hvd0R1cmF0aW9uczsgfQogICAgIFJ1blRlc3RzOjpJbldoYXRPcmRlciBDb25maWc6OnJ1bk9yZGVyKCkgY29uc3QgICAgIHsgcmV0dXJuIG1fZGF0YS5ydW5PcmRlcjsgfQogICAgIHVuc2lnbmVkIGludCBDb25maWc6OnJuZ1NlZWQoKSBjb25zdCAgICAgICAgICAgICAgIHsgcmV0dXJuIG1fZGF0YS5ybmdTZWVkOyB9CisgICAgaW50IENvbmZpZzo6YmVuY2htYXJrUmVzb2x1dGlvbk11bHRpcGxlKCkgY29uc3QgICAgeyByZXR1cm4gbV9kYXRhLmJlbmNobWFya1Jlc29sdXRpb25NdWx0aXBsZTsgfQogICAgIFVzZUNvbG91cjo6WWVzT3JObyBDb25maWc6OnVzZUNvbG91cigpIGNvbnN0ICAgICAgIHsgcmV0dXJuIG1fZGF0YS51c2VDb2xvdXI7IH0KICAgICBib29sIENvbmZpZzo6c2hvdWxkRGVidWdCcmVhaygpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVybiBtX2RhdGEuc2hvdWxkRGVidWdCcmVhazsgfQogICAgIGludCBDb25maWc6OmFib3J0QWZ0ZXIoKSBjb25zdCAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG1fZGF0YS5hYm9ydEFmdGVyOyB9CiAgICAgYm9vbCBDb25maWc6OnNob3dJbnZpc2libGVzKCkgY29uc3QgICAgICAgICAgICAgICAgeyByZXR1cm4gbV9kYXRhLnNob3dJbnZpc2libGVzOyB9CiAgICAgVmVyYm9zaXR5IENvbmZpZzo6dmVyYm9zaXR5KCkgY29uc3QgICAgICAgICAgICAgICAgeyByZXR1cm4gbV9kYXRhLnZlcmJvc2l0eTsgfQogCi0gICAgYm9vbCBDb25maWc6OmJlbmNobWFya05vQW5hbHlzaXMoKSBjb25zdCAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBtX2RhdGEuYmVuY2htYXJrTm9BbmFseXNpczsgfQotICAgIGludCBDb25maWc6OmJlbmNobWFya1NhbXBsZXMoKSBjb25zdCAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbV9kYXRhLmJlbmNobWFya1NhbXBsZXM7IH0KLSAgICBkb3VibGUgQ29uZmlnOjpiZW5jaG1hcmtDb25maWRlbmNlSW50ZXJ2YWwoKSBjb25zdCAgICAgICAgICAgIHsgcmV0dXJuIG1fZGF0YS5iZW5jaG1hcmtDb25maWRlbmNlSW50ZXJ2YWw7IH0KLSAgICB1bnNpZ25lZCBpbnQgQ29uZmlnOjpiZW5jaG1hcmtSZXNhbXBsZXMoKSBjb25zdCAgICAgICAgICAgICAgIHsgcmV0dXJuIG1fZGF0YS5iZW5jaG1hcmtSZXNhbXBsZXM7IH0KLSAgICBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIENvbmZpZzo6YmVuY2htYXJrV2FybXVwVGltZSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMobV9kYXRhLmJlbmNobWFya1dhcm11cFRpbWUpOyB9Ci0KICAgICBJU3RyZWFtIGNvbnN0KiBDb25maWc6Om9wZW5TdHJlYW0oKSB7CiAgICAgICAgIHJldHVybiBDYXRjaDo6bWFrZVN0cmVhbShtX2RhdGEub3V0cHV0RmlsZW5hbWUpOwogICAgIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29uZmlnLmhwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29uZmlnLmhwcAppbmRleCA2NGQyYzAzLi5hOTg1MDIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbmZpZy5ocHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb25maWcuaHBwCkBAIC00MiwxMiArNDIsNyBAQAogCiAgICAgICAgIGludCBhYm9ydEFmdGVyID0gLTE7CiAgICAgICAgIHVuc2lnbmVkIGludCBybmdTZWVkID0gMDsKLQotICAgICAgICBib29sIGJlbmNobWFya05vQW5hbHlzaXMgPSBmYWxzZTsKLSAgICAgICAgdW5zaWduZWQgaW50IGJlbmNobWFya1NhbXBsZXMgPSAxMDA7Ci0gICAgICAgIGRvdWJsZSBiZW5jaG1hcmtDb25maWRlbmNlSW50ZXJ2YWwgPSAwLjk1OwotICAgICAgICB1bnNpZ25lZCBpbnQgYmVuY2htYXJrUmVzYW1wbGVzID0gMTAwMDAwOwotICAgICAgICBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjpyZXAgYmVuY2htYXJrV2FybXVwVGltZSA9IDEwMDsKKyAgICAgICAgaW50IGJlbmNobWFya1Jlc29sdXRpb25NdWx0aXBsZSA9IDEwMDsKIAogICAgICAgICBWZXJib3NpdHkgdmVyYm9zaXR5ID0gVmVyYm9zaXR5OjpOb3JtYWw7CiAgICAgICAgIFdhcm5BYm91dDo6V2hhdCB3YXJuaW5ncyA9IFdhcm5BYm91dDo6Tm90aGluZzsKQEAgLTEwNSwxNiArMTAwLDEyIEBACiAgICAgICAgIFNob3dEdXJhdGlvbnM6Ok9yTm90IHNob3dEdXJhdGlvbnMoKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAgUnVuVGVzdHM6OkluV2hhdE9yZGVyIHJ1bk9yZGVyKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIHVuc2lnbmVkIGludCBybmdTZWVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgICAgIGludCBiZW5jaG1hcmtSZXNvbHV0aW9uTXVsdGlwbGUoKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAgVXNlQ29sb3VyOjpZZXNPck5vIHVzZUNvbG91cigpIGNvbnN0IG92ZXJyaWRlOwogICAgICAgICBib29sIHNob3VsZERlYnVnQnJlYWsoKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAgaW50IGFib3J0QWZ0ZXIoKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAgYm9vbCBzaG93SW52aXNpYmxlcygpIGNvbnN0IG92ZXJyaWRlOwogICAgICAgICBWZXJib3NpdHkgdmVyYm9zaXR5KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgICAgIGJvb2wgYmVuY2htYXJrTm9BbmFseXNpcygpIGNvbnN0IG92ZXJyaWRlOwotICAgICAgICBpbnQgYmVuY2htYXJrU2FtcGxlcygpIGNvbnN0IG92ZXJyaWRlOwotICAgICAgICBkb3VibGUgYmVuY2htYXJrQ29uZmlkZW5jZUludGVydmFsKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgICAgIHVuc2lnbmVkIGludCBiZW5jaG1hcmtSZXNhbXBsZXMoKSBjb25zdCBvdmVycmlkZTsKLSAgICAgICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBiZW5jaG1hcmtXYXJtdXBUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBwcml2YXRlOgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbnNvbGVfY29sb3VyLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29uc29sZV9jb2xvdXIuY3BwCmluZGV4IGRlMGZmZjQuLjBhMTNhMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29uc29sZV9jb2xvdXIuY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29uc29sZV9jb2xvdXIuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAgICAgICAgIH07CiAKICAgICAgICAgc3RydWN0IE5vQ29sb3VySW1wbCA6IElDb2xvdXJJbXBsIHsKLSAgICAgICAgICAgIHZvaWQgdXNlKCBDb2xvdXI6OkNvZGUgKSBvdmVycmlkZSB7fQorICAgICAgICAgICAgdm9pZCB1c2UoIENvbG91cjo6Q29kZSApIHt9CiAKICAgICAgICAgICAgIHN0YXRpYyBJQ29sb3VySW1wbCogaW5zdGFuY2UoKSB7CiAgICAgICAgICAgICAgICAgc3RhdGljIE5vQ29sb3VySW1wbCBzX2luc3RhbmNlOwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAKICAgICBib29sIHVzZUNvbG91ck9uUGxhdGZvcm0oKSB7CiAgICAgICAgIHJldHVybgotI2lmIGRlZmluZWQoQ0FUQ0hfUExBVEZPUk1fTUFDKSB8fCBkZWZpbmVkKENBVENIX1BMQVRGT1JNX0lQSE9ORSkKKyNpZmRlZiBDQVRDSF9QTEFURk9STV9NQUMKICAgICAgICAgICAgICFpc0RlYnVnZ2VyQWN0aXZlKCkgJiYKICNlbmRpZgogI2lmICEoZGVmaW5lZChfX0RKR1BQX18pICYmIGRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSkKQEAgLTIwOCwxMyArMjA4LDEzIEBACiBuYW1lc3BhY2UgQ2F0Y2ggewogCiAgICAgQ29sb3VyOjpDb2xvdXIoIENvZGUgX2NvbG91ckNvZGUgKSB7IHVzZSggX2NvbG91ckNvZGUgKTsgfQotICAgIENvbG91cjo6Q29sb3VyKCBDb2xvdXImJiBvdGhlciApIG5vZXhjZXB0IHsKLSAgICAgICAgbV9tb3ZlZCA9IG90aGVyLm1fbW92ZWQ7Ci0gICAgICAgIG90aGVyLm1fbW92ZWQgPSB0cnVlOworICAgIENvbG91cjo6Q29sb3VyKCBDb2xvdXImJiByaHMgKSBub2V4Y2VwdCB7CisgICAgICAgIG1fbW92ZWQgPSByaHMubV9tb3ZlZDsKKyAgICAgICAgcmhzLm1fbW92ZWQgPSB0cnVlOwogICAgIH0KLSAgICBDb2xvdXImIENvbG91cjo6b3BlcmF0b3I9KCBDb2xvdXImJiBvdGhlciApIG5vZXhjZXB0IHsKLSAgICAgICAgbV9tb3ZlZCA9IG90aGVyLm1fbW92ZWQ7Ci0gICAgICAgIG90aGVyLm1fbW92ZWQgID0gdHJ1ZTsKKyAgICBDb2xvdXImIENvbG91cjo6b3BlcmF0b3I9KCBDb2xvdXImJiByaHMgKSBub2V4Y2VwdCB7CisgICAgICAgIG1fbW92ZWQgPSByaHMubV9tb3ZlZDsKKyAgICAgICAgcmhzLm1fbW92ZWQgID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIApAQCAtMjIyLDEzICsyMjIsNyBAQAogCiAgICAgdm9pZCBDb2xvdXI6OnVzZSggQ29kZSBfY29sb3VyQ29kZSApIHsKICAgICAgICAgc3RhdGljIElDb2xvdXJJbXBsKiBpbXBsID0gcGxhdGZvcm1Db2xvdXJJbnN0YW5jZSgpOwotICAgICAgICAvLyBTdHJpY3RseSBzcGVha2luZywgdGhpcyBjYW5ub3QgcG9zc2libHkgaGFwcGVuLgotICAgICAgICAvLyBIb3dldmVyLCB1bmRlciBzb21lIGNvbmRpdGlvbnMgaXQgZG9lcyBoYXBwZW4gKHNlZSAjMTYyNiksCi0gICAgICAgIC8vIGFuZCB0aGlzIGNoYW5nZSBpcyBzbWFsbCBlbm91Z2ggdGhhdCB3ZSBjYW4gbGV0IHByYWN0aWNhbGl0eQotICAgICAgICAvLyB0cml1bXBoIG92ZXIgcHVyaXR5IGluIHRoaXMgY2FzZS4KLSAgICAgICAgaWYgKGltcGwgIT0gbnVsbHB0cikgewotICAgICAgICAgICAgaW1wbC0+dXNlKCBfY29sb3VyQ29kZSApOwotICAgICAgICB9CisgICAgICAgIGltcGwtPnVzZSggX2NvbG91ckNvZGUgKTsKICAgICB9CiAKICAgICBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yIDw8ICggc3RkOjpvc3RyZWFtJiBvcywgQ29sb3VyIGNvbnN0JiApIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29udGV4dC5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbnRleHQuY3BwCmluZGV4IGU0NDRhNmIuLjUyZmNhMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29udGV4dC5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb250ZXh0LmNwcApAQCAtNyw3ICs3LDYgQEAKICAqLwogI2luY2x1ZGUgImNhdGNoX2NvbnRleHQuaCIKICNpbmNsdWRlICJjYXRjaF9jb21tb24uaCIKLSNpbmNsdWRlICJjYXRjaF9yYW5kb21fbnVtYmVyX2dlbmVyYXRvci5oIgogCiBuYW1lc3BhY2UgQ2F0Y2ggewogCkBAIC02MCwxMSArNTksNCBAQAogICAgIElDb250ZXh0Ojp+SUNvbnRleHQoKSA9IGRlZmF1bHQ7CiAgICAgSU11dGFibGVDb250ZXh0Ojp+SU11dGFibGVDb250ZXh0KCkgPSBkZWZhdWx0OwogICAgIENvbnRleHQ6On5Db250ZXh0KCkgPSBkZWZhdWx0OwotCi0KLSAgICBTaW1wbGVQY2czMiYgcm5nKCkgewotICAgICAgICBzdGF0aWMgU2ltcGxlUGNnMzIgc19ybmc7Ci0gICAgICAgIHJldHVybiBzX3JuZzsKLSAgICB9Ci0KIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29udGV4dC5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb250ZXh0LmgKaW5kZXggYzU3OWMzOS4uM2QzYzZiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb250ZXh0LmgKQEAgLTQ2LDcgKzQ2LDYgQEAKICAgICB7CiAgICAgICAgIGlmKCAhSU11dGFibGVDb250ZXh0OjpjdXJyZW50Q29udGV4dCApCiAgICAgICAgICAgICBJTXV0YWJsZUNvbnRleHQ6OmNyZWF0ZUNvbnRleHQoKTsKLSAgICAgICAgLy8gTk9MSU5UTkVYVExJTkUoY2xhbmctYW5hbHl6ZXItY29yZS51bmluaXRpYWxpemVkLlVuZGVmUmV0dXJuKQogICAgICAgICByZXR1cm4gKklNdXRhYmxlQ29udGV4dDo6Y3VycmVudENvbnRleHQ7CiAgICAgfQogCkBAIC01Niw5ICs1NSw2IEBACiAgICAgfQogCiAgICAgdm9pZCBjbGVhblVwQ29udGV4dCgpOwotCi0gICAgY2xhc3MgU2ltcGxlUGNnMzI7Ci0gICAgU2ltcGxlUGNnMzImIHJuZygpOwogfQogCiAjZW5kaWYgLy8gVFdPQkxVRUNVQkVTX0NBVENIX0NPTlRFWFRfSF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9kZWJ1Z19jb25zb2xlLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZGVidWdfY29uc29sZS5jcHAKaW5kZXggYTM0MWQ4MS4uNWQyNWY2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9kZWJ1Z19jb25zb2xlLmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2RlYnVnX2NvbnNvbGUuY3BwCkBAIC03LDIxICs3LDExIEBACiAgKi8KIAogI2luY2x1ZGUgImNhdGNoX2RlYnVnX2NvbnNvbGUuaCIKLSNpbmNsdWRlICJjYXRjaF9jb21waWxlcl9jYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJjYXRjaF9zdHJlYW0uaCIKICNpbmNsdWRlICJjYXRjaF9wbGF0Zm9ybS5oIgogI2luY2x1ZGUgImNhdGNoX3dpbmRvd3NfaF9wcm94eS5oIgogCi0jaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfQU5EUk9JRF9MT0dXUklURSkKLSNpbmNsdWRlIDxhbmRyb2lkL2xvZy5oPgotCi0gICAgbmFtZXNwYWNlIENhdGNoIHsKLSAgICAgICAgdm9pZCB3cml0ZVRvRGVidWdDb25zb2xlKCBzdGQ6OnN0cmluZyBjb25zdCYgdGV4dCApIHsKLSAgICAgICAgICAgIF9fYW5kcm9pZF9sb2dfd3JpdGUoIEFORFJPSURfTE9HX0RFQlVHLCAiQ2F0Y2giLCB0ZXh0LmNfc3RyKCkgKTsKLSAgICAgICAgfQotICAgIH0KLQotI2VsaWYgZGVmaW5lZChDQVRDSF9QTEFURk9STV9XSU5ET1dTKQorI2lmZGVmIENBVENIX1BMQVRGT1JNX1dJTkRPV1MKIAogICAgIG5hbWVzcGFjZSBDYXRjaCB7CiAgICAgICAgIHZvaWQgd3JpdGVUb0RlYnVnQ29uc29sZSggc3RkOjpzdHJpbmcgY29uc3QmIHRleHQgKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2RlYnVnZ2VyLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZGVidWdnZXIuY3BwCmluZGV4IGZjNzhjMzYuLmYwNDkwMGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZGVidWdnZXIuY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZGVidWdnZXIuY3BwCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSAiY2F0Y2hfc3RyZWFtLmgiCiAjaW5jbHVkZSAiY2F0Y2hfcGxhdGZvcm0uaCIKIAotI2lmIGRlZmluZWQoQ0FUQ0hfUExBVEZPUk1fTUFDKSB8fCBkZWZpbmVkKENBVENIX1BMQVRGT1JNX0lQSE9ORSkKKyNpZmRlZiBDQVRDSF9QTEFURk9STV9NQUMKIAogIyAgaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjICBpbmNsdWRlIDxzdGRib29sLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2RlYnVnZ2VyLmggYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2RlYnVnZ2VyLmgKaW5kZXggNzdkYjhhZS4uZGIzZmY2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9kZWJ1Z2dlci5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZGVidWdnZXIuaApAQCAtMTksMTkgKzE5LDYgQEAKIAogICAgICNkZWZpbmUgQ0FUQ0hfVFJBUCgpIF9fYXNtX18oImludCAkM1xuIiA6IDogKSAvKiBOT0xJTlQgKi8KIAotI2VsaWYgZGVmaW5lZChDQVRDSF9QTEFURk9STV9JUEhPTkUpCi0KLSAgICAvLyB1c2UgaW5saW5lIGFzc2VtYmxlcgotICAgICNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCi0gICAgICAgICNkZWZpbmUgQ0FUQ0hfVFJBUCgpICBfX2FzbV9fKCJpbnQgJDMiKQotICAgICNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pCi0gICAgICAgICNkZWZpbmUgQ0FUQ0hfVFJBUCgpICBfX2FzbV9fKCIuaW5zdCAweGQ0MjAwMDAwIikKLSAgICAjZWxpZiBkZWZpbmVkKF9fYXJtX18pICYmICFkZWZpbmVkKF9fdGh1bWJfXykKLSAgICAgICAgI2RlZmluZSBDQVRDSF9UUkFQKCkgIF9fYXNtX18oIi5pbnN0IDB4ZTdmMDAxZjAiKQotICAgICNlbGlmIGRlZmluZWQoX19hcm1fXykgJiYgIGRlZmluZWQoX190aHVtYl9fKQotICAgICAgICAjZGVmaW5lIENBVENIX1RSQVAoKSAgX19hc21fXygiLmluc3QgMHhkZTAxIikKLSAgICAjZW5kaWYKLQogI2VsaWYgZGVmaW5lZChDQVRDSF9QTEFURk9STV9MSU5VWCkKICAgICAvLyBJZiB3ZSBjYW4gdXNlIGlubGluZSBhc3NlbWJsZXIsIGRvIGl0IGJlY2F1c2UgdGhpcyBhbGxvd3MgdXMgdG8gYnJlYWsKICAgICAvLyBkaXJlY3RseSBhdCB0aGUgbG9jYXRpb24gb2YgdGhlIGZhaWxpbmcgY2hlY2sgaW5zdGVhZCBvZiBicmVha2luZyBpbnNpZGUKQEAgLTUwLDEyICszNywxMCBAQAogICAgICNkZWZpbmUgQ0FUQ0hfVFJBUCgpIERlYnVnQnJlYWsoKQogI2VuZGlmCiAKLSNpZm5kZWYgQ0FUQ0hfQlJFQUtfSU5UT19ERUJVR0dFUgotICAgICNpZmRlZiBDQVRDSF9UUkFQCi0gICAgICAgICNkZWZpbmUgQ0FUQ0hfQlJFQUtfSU5UT19ERUJVR0dFUigpIFtdeyBpZiggQ2F0Y2g6OmlzRGVidWdnZXJBY3RpdmUoKSApIHsgQ0FUQ0hfVFJBUCgpOyB9IH0oKQotICAgICNlbHNlCi0gICAgICAgICNkZWZpbmUgQ0FUQ0hfQlJFQUtfSU5UT19ERUJVR0dFUigpIFtde30oKQotICAgICNlbmRpZgorI2lmZGVmIENBVENIX1RSQVAKKyAgICAjZGVmaW5lIENBVENIX0JSRUFLX0lOVE9fREVCVUdHRVIoKSBbXXsgaWYoIENhdGNoOjppc0RlYnVnZ2VyQWN0aXZlKCkgKSB7IENBVENIX1RSQVAoKTsgfSB9KCkKKyNlbHNlCisgICAgI2RlZmluZSBDQVRDSF9CUkVBS19JTlRPX0RFQlVHR0VSKCkgW117fSgpCiAjZW5kaWYKIAogI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9ERUJVR0dFUl9IX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2RlZmF1bHRfbWFpbi5ocHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2RlZmF1bHRfbWFpbi5ocHAKaW5kZXggYWFiNWNiYS4uMTdhZDA5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9kZWZhdWx0X21haW4uaHBwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZGVmYXVsdF9tYWluLmhwcApAQCAtOSwxMSArOSwxMCBAQAogI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfREVGQVVMVF9NQUlOX0hQUF9JTkNMVURFRAogCiAjaW5jbHVkZSAiY2F0Y2hfc2Vzc2lvbi5oIgotI2luY2x1ZGUgImNhdGNoX3BsYXRmb3JtLmgiCiAKICNpZm5kZWYgX19PQkpDX18KIAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX1dDSEFSKSAmJiBkZWZpbmVkKENBVENIX1BMQVRGT1JNX1dJTkRPV1MpICYmIGRlZmluZWQoX1VOSUNPREUpICYmICFkZWZpbmVkKERPX05PVF9VU0VfV01BSU4pCisjaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfV0NIQVIpICYmIGRlZmluZWQoV0lOMzIpICYmIGRlZmluZWQoX1VOSUNPREUpICYmICFkZWZpbmVkKERPX05PVF9VU0VfV01BSU4pCiAvLyBTdGFuZGFyZCBDL0MrKyBXaW4zMiBVbmljb2RlIHdtYWluIGVudHJ5IHBvaW50CiBleHRlcm4gIkMiIGludCB3bWFpbiAoaW50IGFyZ2MsIHdjaGFyX3QgKiBhcmd2W10sIHdjaGFyX3QgKiBbXSkgewogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZW5mb3JjZS5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2VuZm9yY2UuY3BwCmluZGV4IDkwM2Q0M2IuLmY0ZGIxYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZW5mb3JjZS5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9lbmZvcmNlLmNwcApAQCAtNyw5ICs3LDYgQEAKIAogI2luY2x1ZGUgImNhdGNoX2VuZm9yY2UuaCIKIAotI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KLQotCiBuYW1lc3BhY2UgQ2F0Y2ggewogI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUykgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OU19DVVNUT01fSEFORExFUikKICAgICBbW25vcmV0dXJuXV0KQEAgLTE5LDIyICsxNiw0IEBACiAgICAgICAgIHN0ZDo6dGVybWluYXRlKCk7CiAgICAgfQogI2VuZGlmCi0KLSAgICBbW25vcmV0dXJuXV0KLSAgICB2b2lkIHRocm93X2xvZ2ljX2Vycm9yKHN0ZDo6c3RyaW5nIGNvbnN0JiBtc2cpIHsKLSAgICAgICAgdGhyb3dfZXhjZXB0aW9uKHN0ZDo6bG9naWNfZXJyb3IobXNnKSk7Ci0gICAgfQotCi0gICAgW1tub3JldHVybl1dCi0gICAgdm9pZCB0aHJvd19kb21haW5fZXJyb3Ioc3RkOjpzdHJpbmcgY29uc3QmIG1zZykgewotICAgICAgICB0aHJvd19leGNlcHRpb24oc3RkOjpkb21haW5fZXJyb3IobXNnKSk7Ci0gICAgfQotCi0gICAgW1tub3JldHVybl1dCi0gICAgdm9pZCB0aHJvd19ydW50aW1lX2Vycm9yKHN0ZDo6c3RyaW5nIGNvbnN0JiBtc2cpIHsKLSAgICAgICAgdGhyb3dfZXhjZXB0aW9uKHN0ZDo6cnVudGltZV9lcnJvcihtc2cpKTsKLSAgICB9Ci0KLQotCiB9IC8vIG5hbWVzcGFjZSBDYXRjaDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZW5mb3JjZS5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9lbmZvcmNlLmgKaW5kZXggMDQ4NDcyNC4uMDA2OTQwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9lbmZvcmNlLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9lbmZvcmNlLmgKQEAgLTExLDcgKzExLDggQEAKICNpbmNsdWRlICJjYXRjaF9jb21waWxlcl9jYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJjYXRjaF9zdHJlYW0uaCIKIAotI2luY2x1ZGUgPGV4Y2VwdGlvbj4KKworI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KIAogbmFtZXNwYWNlIENhdGNoIHsKICNpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfRElTQUJMRV9FWENFUFRJT05TKQpAQCAtMjQsMzAgKzI1LDE4IEBACiAgICAgW1tub3JldHVybl1dCiAgICAgdm9pZCB0aHJvd19leGNlcHRpb24oc3RkOjpleGNlcHRpb24gY29uc3QmIGUpOwogI2VuZGlmCi0KLSAgICBbW25vcmV0dXJuXV0KLSAgICB2b2lkIHRocm93X2xvZ2ljX2Vycm9yKHN0ZDo6c3RyaW5nIGNvbnN0JiBtc2cpOwotICAgIFtbbm9yZXR1cm5dXQotICAgIHZvaWQgdGhyb3dfZG9tYWluX2Vycm9yKHN0ZDo6c3RyaW5nIGNvbnN0JiBtc2cpOwotICAgIFtbbm9yZXR1cm5dXQotICAgIHZvaWQgdGhyb3dfcnVudGltZV9lcnJvcihzdGQ6OnN0cmluZyBjb25zdCYgbXNnKTsKLQogfSAvLyBuYW1lc3BhY2UgQ2F0Y2g7CiAKLSNkZWZpbmUgQ0FUQ0hfTUFLRV9NU0coLi4uKSBcCi0gICAgKENhdGNoOjpSZXVzYWJsZVN0cmluZ1N0cmVhbSgpIDw8IF9fVkFfQVJHU19fKS5zdHIoKQotCi0jZGVmaW5lIENBVENIX0lOVEVSTkFMX0VSUk9SKC4uLikgXAotICAgIENhdGNoOjp0aHJvd19sb2dpY19lcnJvcihDQVRDSF9NQUtFX01TRyggQ0FUQ0hfSU5URVJOQUxfTElORUlORk8gPDwgIjogSW50ZXJuYWwgQ2F0Y2gyIGVycm9yOiAiIDw8IF9fVkFfQVJHU19fKSkKLQotI2RlZmluZSBDQVRDSF9FUlJPUiguLi4pIFwKLSAgICBDYXRjaDo6dGhyb3dfZG9tYWluX2Vycm9yKENBVENIX01BS0VfTVNHKCBfX1ZBX0FSR1NfXyApKQotCi0jZGVmaW5lIENBVENIX1JVTlRJTUVfRVJST1IoLi4uKSBcCi0gICAgQ2F0Y2g6OnRocm93X3J1bnRpbWVfZXJyb3IoQ0FUQ0hfTUFLRV9NU0coIF9fVkFfQVJHU19fICkpCi0KLSNkZWZpbmUgQ0FUQ0hfRU5GT1JDRSggY29uZGl0aW9uLCAuLi4gKSBcCi0gICAgZG97IGlmKCAhKGNvbmRpdGlvbikgKSBDQVRDSF9FUlJPUiggX19WQV9BUkdTX18gKTsgfSB3aGlsZShmYWxzZSkKKyNkZWZpbmUgQ0FUQ0hfUFJFUEFSRV9FWENFUFRJT04oIHR5cGUsIG1zZyApIFwKKyAgICB0eXBlKCAoIENhdGNoOjpSZXVzYWJsZVN0cmluZ1N0cmVhbSgpIDw8IG1zZyApLnN0cigpICkKKyNkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfRVJST1IoIG1zZyApIFwKKyAgICBDYXRjaDo6dGhyb3dfZXhjZXB0aW9uKENBVENIX1BSRVBBUkVfRVhDRVBUSU9OKCBzdGQ6OmxvZ2ljX2Vycm9yLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTyA8PCAiOiBJbnRlcm5hbCBDYXRjaCBlcnJvcjogIiA8PCBtc2cpKQorI2RlZmluZSBDQVRDSF9FUlJPUiggbXNnICkgXAorICAgIENhdGNoOjp0aHJvd19leGNlcHRpb24oQ0FUQ0hfUFJFUEFSRV9FWENFUFRJT04oIHN0ZDo6ZG9tYWluX2Vycm9yLCBtc2cgKSkKKyNkZWZpbmUgQ0FUQ0hfUlVOVElNRV9FUlJPUiggbXNnICkgXAorICAgIENhdGNoOjp0aHJvd19leGNlcHRpb24oQ0FUQ0hfUFJFUEFSRV9FWENFUFRJT04oIHN0ZDo6cnVudGltZV9lcnJvciwgbXNnICkpCisjZGVmaW5lIENBVENIX0VORk9SQ0UoIGNvbmRpdGlvbiwgbXNnICkgXAorICAgIGRveyBpZiggIShjb25kaXRpb24pICkgQ0FUQ0hfRVJST1IoIG1zZyApOyB9IHdoaWxlKGZhbHNlKQogCiAKICNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfRU5GT1JDRV9IX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2VudW1fdmFsdWVzX3JlZ2lzdHJ5LmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZW51bV92YWx1ZXNfcmVnaXN0cnkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjNmOWQ2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZW51bV92YWx1ZXNfcmVnaXN0cnkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqICBDcmVhdGVkIGJ5IFBoaWwgb24gNC80LzIwMTkuCi0gKiAgQ29weXJpZ2h0IDIwMTkgVHdvIEJsdWUgQ3ViZXMgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0gKiAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKi8KLSNpbmNsdWRlICJjYXRjaF9lbnVtX3ZhbHVlc19yZWdpc3RyeS5oIgotI2luY2x1ZGUgImNhdGNoX3N0cmluZ19tYW5pcC5oIgotI2luY2x1ZGUgImNhdGNoX3N0cmVhbS5oIgotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0KLSAgICBJTXV0YWJsZUVudW1WYWx1ZXNSZWdpc3RyeTo6fklNdXRhYmxlRW51bVZhbHVlc1JlZ2lzdHJ5KCkge30KLQotICAgIG5hbWVzcGFjZSBEZXRhaWwgewotCi0gICAgICAgIG5hbWVzcGFjZSB7Ci0gICAgICAgICAgICAvLyBFeHRyYWN0cyB0aGUgYWN0dWFsIG5hbWUgcGFydCBvZiBhbiBlbnVtIGluc3RhbmNlCi0gICAgICAgICAgICAvLyBJbiBvdGhlciB3b3JkcywgaXQgcmV0dXJucyB0aGUgQmx1ZSBwYXJ0IG9mIEJpa2VzaGVkOjpDb2xvdXI6OkJsdWUKLSAgICAgICAgICAgIFN0cmluZ1JlZiBleHRyYWN0SW5zdGFuY2VOYW1lKFN0cmluZ1JlZiBlbnVtSW5zdGFuY2UpIHsKLSAgICAgICAgICAgICAgICAvLyBGaW5kIGxhc3Qgb2NjdXJlbmNlIG9mICI6IgotICAgICAgICAgICAgICAgIHNpemVfdCBuYW1lX3N0YXJ0ID0gZW51bUluc3RhbmNlLnNpemUoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAobmFtZV9zdGFydCA+IDAgJiYgZW51bUluc3RhbmNlW25hbWVfc3RhcnQgLSAxXSAhPSAnOicpIHsKLSAgICAgICAgICAgICAgICAgICAgLS1uYW1lX3N0YXJ0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZW51bUluc3RhbmNlLnN1YnN0cihuYW1lX3N0YXJ0LCBlbnVtSW5zdGFuY2Uuc2l6ZSgpIC0gbmFtZV9zdGFydCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBzdGQ6OnZlY3RvcjxTdHJpbmdSZWY+IHBhcnNlRW51bXMoIFN0cmluZ1JlZiBlbnVtcyApIHsKLSAgICAgICAgICAgIGF1dG8gZW51bVZhbHVlcyA9IHNwbGl0U3RyaW5nUmVmKCBlbnVtcywgJywnICk7Ci0gICAgICAgICAgICBzdGQ6OnZlY3RvcjxTdHJpbmdSZWY+IHBhcnNlZDsKLSAgICAgICAgICAgIHBhcnNlZC5yZXNlcnZlKCBlbnVtVmFsdWVzLnNpemUoKSApOwotICAgICAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiBlbnVtVmFsdWUgOiBlbnVtVmFsdWVzICkgewotICAgICAgICAgICAgICAgIHBhcnNlZC5wdXNoX2JhY2sodHJpbShleHRyYWN0SW5zdGFuY2VOYW1lKGVudW1WYWx1ZSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBFbnVtSW5mbzo6fkVudW1JbmZvKCkge30KLQotICAgICAgICBTdHJpbmdSZWYgRW51bUluZm86Omxvb2t1cCggaW50IHZhbHVlICkgY29uc3QgewotICAgICAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiB2YWx1ZVRvTmFtZSA6IG1fdmFsdWVzICkgewotICAgICAgICAgICAgICAgIGlmKCB2YWx1ZVRvTmFtZS5maXJzdCA9PSB2YWx1ZSApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVRvTmFtZS5zZWNvbmQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gInsqKiB1bmV4cGVjdGVkIGVudW0gdmFsdWUgKip9Il9zcjsKLSAgICAgICAgfQotCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnVtSW5mbz4gbWFrZUVudW1JbmZvKCBTdHJpbmdSZWYgZW51bU5hbWUsIFN0cmluZ1JlZiBhbGxWYWx1ZU5hbWVzLCBzdGQ6OnZlY3RvcjxpbnQ+IGNvbnN0JiB2YWx1ZXMgKSB7Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RW51bUluZm8+IGVudW1JbmZvKCBuZXcgRW51bUluZm8gKTsKLSAgICAgICAgICAgIGVudW1JbmZvLT5tX25hbWUgPSBlbnVtTmFtZTsKLSAgICAgICAgICAgIGVudW1JbmZvLT5tX3ZhbHVlcy5yZXNlcnZlKCB2YWx1ZXMuc2l6ZSgpICk7Ci0KLSAgICAgICAgICAgIGNvbnN0IGF1dG8gdmFsdWVOYW1lcyA9IENhdGNoOjpEZXRhaWw6OnBhcnNlRW51bXMoIGFsbFZhbHVlTmFtZXMgKTsKLSAgICAgICAgICAgIGFzc2VydCggdmFsdWVOYW1lcy5zaXplKCkgPT0gdmFsdWVzLnNpemUoKSApOwotICAgICAgICAgICAgc3RkOjpzaXplX3QgaSA9IDA7Ci0gICAgICAgICAgICBmb3IoIGF1dG8gdmFsdWUgOiB2YWx1ZXMgKQotICAgICAgICAgICAgICAgIGVudW1JbmZvLT5tX3ZhbHVlcy5lbXBsYWNlX2JhY2sodmFsdWUsIHZhbHVlTmFtZXNbaSsrXSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBlbnVtSW5mbzsKLSAgICAgICAgfQotCi0gICAgICAgIEVudW1JbmZvIGNvbnN0JiBFbnVtVmFsdWVzUmVnaXN0cnk6OnJlZ2lzdGVyRW51bSggU3RyaW5nUmVmIGVudW1OYW1lLCBTdHJpbmdSZWYgYWxsVmFsdWVOYW1lcywgc3RkOjp2ZWN0b3I8aW50PiBjb25zdCYgdmFsdWVzICkgewotICAgICAgICAgICAgbV9lbnVtSW5mb3MucHVzaF9iYWNrKG1ha2VFbnVtSW5mbyhlbnVtTmFtZSwgYWxsVmFsdWVOYW1lcywgdmFsdWVzKSk7Ci0gICAgICAgICAgICByZXR1cm4gKm1fZW51bUluZm9zLmJhY2soKTsKLSAgICAgICAgfQotCi0gICAgfSAvLyBEZXRhaWwKLX0gLy8gQ2F0Y2gKLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9lbnVtX3ZhbHVlc19yZWdpc3RyeS5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9lbnVtX3ZhbHVlc19yZWdpc3RyeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTI1MmZiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZW51bV92YWx1ZXNfcmVnaXN0cnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiAgQ3JlYXRlZCBieSBQaGlsIG9uIDQvNC8yMDE5LgotICogIENvcHlyaWdodCAyMDE5IFR3byBCbHVlIEN1YmVzIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICovCi0jaWZuZGVmIFRXT0JMVUVDVUJFU19DQVRDSF9FTlVNVkFMVUVTUkVHSVNUUllfSF9JTkNMVURFRAotI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfRU5VTVZBTFVFU1JFR0lTVFJZX0hfSU5DTFVERUQKLQotI2luY2x1ZGUgImNhdGNoX2ludGVyZmFjZXNfZW51bV92YWx1ZXNfcmVnaXN0cnkuaCIKLQotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0KLSAgICBuYW1lc3BhY2UgRGV0YWlsIHsKLQotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RW51bUluZm8+IG1ha2VFbnVtSW5mbyggU3RyaW5nUmVmIGVudW1OYW1lLCBTdHJpbmdSZWYgYWxsVmFsdWVOYW1lcywgc3RkOjp2ZWN0b3I8aW50PiBjb25zdCYgdmFsdWVzICk7Ci0KLSAgICAgICAgY2xhc3MgRW51bVZhbHVlc1JlZ2lzdHJ5IDogcHVibGljIElNdXRhYmxlRW51bVZhbHVlc1JlZ2lzdHJ5IHsKLQotICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEVudW1JbmZvPj4gbV9lbnVtSW5mb3M7Ci0KLSAgICAgICAgICAgIEVudW1JbmZvIGNvbnN0JiByZWdpc3RlckVudW0oIFN0cmluZ1JlZiBlbnVtTmFtZSwgU3RyaW5nUmVmIGFsbEVudW1zLCBzdGQ6OnZlY3RvcjxpbnQ+IGNvbnN0JiB2YWx1ZXMpIG92ZXJyaWRlOwotICAgICAgICB9OwotCi0gICAgICAgIHN0ZDo6dmVjdG9yPFN0cmluZ1JlZj4gcGFyc2VFbnVtcyggU3RyaW5nUmVmIGVudW1zICk7Ci0KLSAgICB9IC8vIERldGFpbAotCi19IC8vIENhdGNoCi0KLSNlbmRpZiAvL1RXT0JMVUVDVUJFU19DQVRDSF9FTlVNVkFMVUVTUkVHSVNUUllfSF9JTkNMVURFRApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZmF0YWxfY29uZGl0aW9uLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZmF0YWxfY29uZGl0aW9uLmNwcAppbmRleCAxZWI2YmI4Li5jZWEyNzFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ZhdGFsX2NvbmRpdGlvbi5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9mYXRhbF9jb25kaXRpb24uY3BwCkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgCiAgICAgLy8gMzJrYiBmb3IgdGhlIGFsdGVybmF0ZSBzdGFjayBzZWVtcyB0byBiZSBzdWZmaWNpZW50LiBIb3dldmVyLCB0aGlzIHZhbHVlCiAgICAgLy8gaXMgZXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZCwgc28gdGhhdCdzIG5vdCBndWFyYW50ZWVkLgotICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpzaXplX3Qgc2lnU3RhY2tTaXplID0gMzI3NjggPj0gTUlOU0lHU1RLU1ogPyAzMjc2OCA6IE1JTlNJR1NUS1NaOworICAgIGNvbnN0ZXhwciBzdGF0aWMgc3RkOjpzaXplX3Qgc2lnU3RhY2tTaXplID0gMzI3NjggPj0gTUlOU0lHU1RLU1ogPyAzMjc2OCA6IE1JTlNJR1NUS1NaOwogCiAgICAgc3RhdGljIFNpZ25hbERlZnMgc2lnbmFsRGVmc1tdID0gewogICAgICAgICB7IFNJR0lOVCwgICJTSUdJTlQgLSBUZXJtaW5hbCBpbnRlcnJ1cHQgc2lnbmFsIiB9LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9nZW5lcmF0b3JzLmhwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZ2VuZXJhdG9ycy5ocHAKaW5kZXggZDBmYmU4Yi4uOGYwNmI4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9nZW5lcmF0b3JzLmhwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2dlbmVyYXRvcnMuaHBwCkBAIC01Nyw2ICs1Nyw3IEBACiAgICAgY2xhc3MgU2luZ2xlVmFsdWVHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSUdlbmVyYXRvcjxUPiB7CiAgICAgICAgIFQgbV92YWx1ZTsKICAgICBwdWJsaWM6CisgICAgICAgIFNpbmdsZVZhbHVlR2VuZXJhdG9yKFQgY29uc3QmIHZhbHVlKSA6IG1fdmFsdWUoIHZhbHVlICkge30KICAgICAgICAgU2luZ2xlVmFsdWVHZW5lcmF0b3IoVCYmIHZhbHVlKSA6IG1fdmFsdWUoc3RkOjptb3ZlKHZhbHVlKSkge30KIAogICAgICAgICBUIGNvbnN0JiBnZXQoKSBjb25zdCBvdmVycmlkZSB7CkBAIC02OSw5ICs3MCw2IEBACiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIGNsYXNzIEZpeGVkVmFsdWVzR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIElHZW5lcmF0b3I8VD4gewotICAgICAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX3NhbWU8VCwgYm9vbD46OnZhbHVlLAotICAgICAgICAgICAgIkZpeGVkVmFsdWVzR2VuZXJhdG9yIGRvZXMgbm90IHN1cHBvcnQgYm9vbHMgYmVjYXVzZSBvZiBzdGQ6OnZlY3Rvcjxib29sPiIKLSAgICAgICAgICAgICJzcGVjaWFsaXphdGlvbiwgdXNlIFNpbmdsZVZhbHVlIEdlbmVyYXRvciBpbnN0ZWFkLiIpOwogICAgICAgICBzdGQ6OnZlY3RvcjxUPiBtX3ZhbHVlczsKICAgICAgICAgc2l6ZV90IG1faWR4ID0gMDsKICAgICBwdWJsaWM6CkBAIC0xMTksMjEgKzExNywyMSBAQAogICAgICAgICAgICAgbV9nZW5lcmF0b3JzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoZ2VuZXJhdG9yKSk7CiAgICAgICAgIH0KICAgICAgICAgdm9pZCBwb3B1bGF0ZShUJiYgdmFsKSB7Ci0gICAgICAgICAgICBtX2dlbmVyYXRvcnMuZW1wbGFjZV9iYWNrKHZhbHVlKHN0ZDo6Zm9yd2FyZDxUPih2YWwpKSk7CisgICAgICAgICAgICBtX2dlbmVyYXRvcnMuZW1wbGFjZV9iYWNrKHZhbHVlKHN0ZDo6bW92ZSh2YWwpKSk7CiAgICAgICAgIH0KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KICAgICAgICAgdm9pZCBwb3B1bGF0ZShVJiYgdmFsKSB7Ci0gICAgICAgICAgICBwb3B1bGF0ZShUKHN0ZDo6Zm9yd2FyZDxVPih2YWwpKSk7CisgICAgICAgICAgICBwb3B1bGF0ZShUKHN0ZDo6bW92ZSh2YWwpKSk7CiAgICAgICAgIH0KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUuLi4gR3M+Ci0gICAgICAgIHZvaWQgcG9wdWxhdGUoVSYmIHZhbHVlT3JHZW5lcmF0b3IsIEdzICYmLi4uIG1vcmVHZW5lcmF0b3JzKSB7CisgICAgICAgIHZvaWQgcG9wdWxhdGUoVSYmIHZhbHVlT3JHZW5lcmF0b3IsIEdzLi4uIG1vcmVHZW5lcmF0b3JzKSB7CiAgICAgICAgICAgICBwb3B1bGF0ZShzdGQ6OmZvcndhcmQ8VT4odmFsdWVPckdlbmVyYXRvcikpOwogICAgICAgICAgICAgcG9wdWxhdGUoc3RkOjpmb3J3YXJkPEdzPihtb3JlR2VuZXJhdG9ycykuLi4pOwogICAgICAgICB9CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBHcz4KLSAgICAgICAgR2VuZXJhdG9ycyhHcyAmJi4uLiBtb3JlR2VuZXJhdG9ycykgeworICAgICAgICBHZW5lcmF0b3JzKEdzLi4uIG1vcmVHZW5lcmF0b3JzKSB7CiAgICAgICAgICAgICBtX2dlbmVyYXRvcnMucmVzZXJ2ZShzaXplb2YuLi4oR3MpKTsKICAgICAgICAgICAgIHBvcHVsYXRlKHN0ZDo6Zm9yd2FyZDxHcz4obW9yZUdlbmVyYXRvcnMpLi4uKTsKICAgICAgICAgfQpAQCAtMTY1LDcgKzE2Myw3IEBACiAgICAgc3RydWN0IGFzIHt9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gR3M+Ci0gICAgYXV0byBtYWtlR2VuZXJhdG9ycyggR2VuZXJhdG9yV3JhcHBlcjxUPiYmIGdlbmVyYXRvciwgR3MgJiYuLi4gbW9yZUdlbmVyYXRvcnMgKSAtPiBHZW5lcmF0b3JzPFQ+IHsKKyAgICBhdXRvIG1ha2VHZW5lcmF0b3JzKCBHZW5lcmF0b3JXcmFwcGVyPFQ+JiYgZ2VuZXJhdG9yLCBHcy4uLiBtb3JlR2VuZXJhdG9ycyApIC0+IEdlbmVyYXRvcnM8VD4gewogICAgICAgICByZXR1cm4gR2VuZXJhdG9yczxUPihzdGQ6Om1vdmUoZ2VuZXJhdG9yKSwgc3RkOjpmb3J3YXJkPEdzPihtb3JlR2VuZXJhdG9ycykuLi4pOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMTczLDExICsxNzEsMTEgQEAKICAgICAgICAgcmV0dXJuIEdlbmVyYXRvcnM8VD4oc3RkOjptb3ZlKGdlbmVyYXRvcikpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBHcz4KLSAgICBhdXRvIG1ha2VHZW5lcmF0b3JzKCBUJiYgdmFsLCBHcyAmJi4uLiBtb3JlR2VuZXJhdG9ycyApIC0+IEdlbmVyYXRvcnM8VD4geworICAgIGF1dG8gbWFrZUdlbmVyYXRvcnMoIFQmJiB2YWwsIEdzLi4uIG1vcmVHZW5lcmF0b3JzICkgLT4gR2VuZXJhdG9yczxUPiB7CiAgICAgICAgIHJldHVybiBtYWtlR2VuZXJhdG9ycyggdmFsdWUoIHN0ZDo6Zm9yd2FyZDxUPiggdmFsICkgKSwgc3RkOjpmb3J3YXJkPEdzPiggbW9yZUdlbmVyYXRvcnMgKS4uLiApOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZS4uLiBHcz4KLSAgICBhdXRvIG1ha2VHZW5lcmF0b3JzKCBhczxUPiwgVSYmIHZhbCwgR3MgJiYuLi4gbW9yZUdlbmVyYXRvcnMgKSAtPiBHZW5lcmF0b3JzPFQ+IHsKKyAgICBhdXRvIG1ha2VHZW5lcmF0b3JzKCBhczxUPiwgVSYmIHZhbCwgR3MuLi4gbW9yZUdlbmVyYXRvcnMgKSAtPiBHZW5lcmF0b3JzPFQ+IHsKICAgICAgICAgcmV0dXJuIG1ha2VHZW5lcmF0b3JzKCB2YWx1ZSggVCggc3RkOjpmb3J3YXJkPFU+KCB2YWwgKSApICksIHN0ZDo6Zm9yd2FyZDxHcz4oIG1vcmVHZW5lcmF0b3JzICkuLi4gKTsKICAgICB9CiAKQEAgLTIwMywxMCArMjAxLDEwIEBACiB9IC8vIG5hbWVzcGFjZSBDYXRjaAogCiAjZGVmaW5lIEdFTkVSQVRFKCAuLi4gKSBcCi0gICAgQ2F0Y2g6OkdlbmVyYXRvcnM6OmdlbmVyYXRlKCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgWyBdeyB1c2luZyBuYW1lc3BhY2UgQ2F0Y2g6OkdlbmVyYXRvcnM7IHJldHVybiBtYWtlR2VuZXJhdG9ycyggX19WQV9BUkdTX18gKTsgfSApIC8vTk9MSU5UKGdvb2dsZS1idWlsZC11c2luZy1uYW1lc3BhY2UpCisgICAgQ2F0Y2g6OkdlbmVyYXRvcnM6OmdlbmVyYXRlKCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgWyBdeyB1c2luZyBuYW1lc3BhY2UgQ2F0Y2g6OkdlbmVyYXRvcnM7IHJldHVybiBtYWtlR2VuZXJhdG9ycyggX19WQV9BUkdTX18gKTsgfSApCiAjZGVmaW5lIEdFTkVSQVRFX0NPUFkoIC4uLiApIFwKLSAgICBDYXRjaDo6R2VuZXJhdG9yczo6Z2VuZXJhdGUoIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBbPV17IHVzaW5nIG5hbWVzcGFjZSBDYXRjaDo6R2VuZXJhdG9yczsgcmV0dXJuIG1ha2VHZW5lcmF0b3JzKCBfX1ZBX0FSR1NfXyApOyB9ICkgLy9OT0xJTlQoZ29vZ2xlLWJ1aWxkLXVzaW5nLW5hbWVzcGFjZSkKKyAgICBDYXRjaDo6R2VuZXJhdG9yczo6Z2VuZXJhdGUoIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBbPV17IHVzaW5nIG5hbWVzcGFjZSBDYXRjaDo6R2VuZXJhdG9yczsgcmV0dXJuIG1ha2VHZW5lcmF0b3JzKCBfX1ZBX0FSR1NfXyApOyB9ICkKICNkZWZpbmUgR0VORVJBVEVfUkVGKCAuLi4gKSBcCi0gICAgQ2F0Y2g6OkdlbmVyYXRvcnM6OmdlbmVyYXRlKCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgWyZdeyB1c2luZyBuYW1lc3BhY2UgQ2F0Y2g6OkdlbmVyYXRvcnM7IHJldHVybiBtYWtlR2VuZXJhdG9ycyggX19WQV9BUkdTX18gKTsgfSApIC8vTk9MSU5UKGdvb2dsZS1idWlsZC11c2luZy1uYW1lc3BhY2UpCisgICAgQ2F0Y2g6OkdlbmVyYXRvcnM6OmdlbmVyYXRlKCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgWyZdeyB1c2luZyBuYW1lc3BhY2UgQ2F0Y2g6OkdlbmVyYXRvcnM7IHJldHVybiBtYWtlR2VuZXJhdG9ycyggX19WQV9BUkdTX18gKTsgfSApCiAKICNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfR0VORVJBVE9SU19IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZ2VuZXJhdG9yc19nZW5lcmljLmhwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZ2VuZXJhdG9yc19nZW5lcmljLmhwcAppbmRleCBjMzQxMDE0Li4yOTAzYmE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2dlbmVyYXRvcnNfZ2VuZXJpYy5ocHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9nZW5lcmF0b3JzX2dlbmVyaWMuaHBwCkBAIC04LDcgKzgsNiBAQAogI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfR0VORVJBVE9SU19HRU5FUklDX0hQUF9JTkNMVURFRAogCiAjaW5jbHVkZSAiY2F0Y2hfZ2VuZXJhdG9ycy5ocHAiCi0jaW5jbHVkZSAiY2F0Y2hfbWV0YS5ocHAiCiAKIG5hbWVzcGFjZSBDYXRjaCB7CiBuYW1lc3BhY2UgR2VuZXJhdG9ycyB7CkBAIC05Miw5ICs5MSw2IEBACiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgICBjbGFzcyBSZXBlYXRHZW5lcmF0b3IgOiBwdWJsaWMgSUdlbmVyYXRvcjxUPiB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfc2FtZTxULCBib29sPjo6dmFsdWUsCi0gICAgICAgICAgICAiUmVwZWF0R2VuZXJhdG9yIGN1cnJlbnRseSBkb2VzIG5vdCBzdXBwb3J0IGJvb2xzIgotICAgICAgICAgICAgImJlY2F1c2Ugb2Ygc3RkOjp2ZWN0b3I8Ym9vbD4gc3BlY2lhbGl6YXRpb24iKTsKICAgICAgICAgR2VuZXJhdG9yV3JhcHBlcjxUPiBtX2dlbmVyYXRvcjsKICAgICAgICAgbXV0YWJsZSBzdGQ6OnZlY3RvcjxUPiBtX3JldHVybmVkOwogICAgICAgICBzaXplX3QgbV90YXJnZXRfcmVwZWF0czsKQEAgLTE3Myw3ICsxNjksMTggQEAKICAgICAgICAgfQogICAgIH07CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVCA9IEZ1bmN0aW9uUmV0dXJuVHlwZTxGdW5jLCBVPj4KKyNpZiBkZWZpbmVkKF9fY3BwX2xpYl9pc19pbnZvY2FibGUpICYmIF9fY3BwX2xpYl9pc19pbnZvY2FibGUgPj0gMjAxNzAzCisgICAgLy8gc3RkOjpyZXN1bHRfb2YgaXMgZGVwcmVjYXRlZCBpbiBDKysxNyBhbmQgcmVtb3ZlZCBpbiBDKysyMC4gSGVuY2UsIGl0IGlzCisgICAgLy8gcmVwbGFjZWQgd2l0aCBzdGQ6Omludm9rZV9yZXN1bHQgaGVyZS4gQWxzbyAqX3QgZm9ybWF0IGlzIHByZWZlcnJlZCBvdmVyCisgICAgLy8gdHlwZW5hbWUgKjo6dHlwZSBmb3JtYXQuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIFU+CisgICAgdXNpbmcgTWFwRnVuY3Rpb25SZXR1cm5UeXBlID0gc3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8c3RkOjpyZW1vdmVfY3ZfdDxzdGQ6Omludm9rZV9yZXN1bHRfdDxGdW5jLCBVPj4+OworI2Vsc2UKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVT4KKyAgICB1c2luZyBNYXBGdW5jdGlvblJldHVyblR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8dHlwZW5hbWUgc3RkOjpyZW1vdmVfY3Y8dHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8RnVuYyhVKT46OnR5cGU+Ojp0eXBlPjo6dHlwZTsKKyNlbmRpZgorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFQgPSBNYXBGdW5jdGlvblJldHVyblR5cGU8RnVuYywgVT4+CiAgICAgR2VuZXJhdG9yV3JhcHBlcjxUPiBtYXAoRnVuYyYmIGZ1bmN0aW9uLCBHZW5lcmF0b3JXcmFwcGVyPFU+JiYgZ2VuZXJhdG9yKSB7CiAgICAgICAgIHJldHVybiBHZW5lcmF0b3JXcmFwcGVyPFQ+KAogICAgICAgICAgICAgcGY6Om1ha2VfdW5pcXVlPE1hcEdlbmVyYXRvcjxULCBVLCBGdW5jPj4oc3RkOjpmb3J3YXJkPEZ1bmM+KGZ1bmN0aW9uKSwgc3RkOjptb3ZlKGdlbmVyYXRvcikpCkBAIC0xOTgsMTQgKzIwNSwxMiBAQAogICAgICAgICAgICAgbV9jaHVua19zaXplKHNpemUpLCBtX2dlbmVyYXRvcihzdGQ6Om1vdmUoZ2VuZXJhdG9yKSkKICAgICAgICAgewogICAgICAgICAgICAgbV9jaHVuay5yZXNlcnZlKG1fY2h1bmtfc2l6ZSk7Ci0gICAgICAgICAgICBpZiAobV9jaHVua19zaXplICE9IDApIHsKLSAgICAgICAgICAgICAgICBtX2NodW5rLnB1c2hfYmFjayhtX2dlbmVyYXRvci5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBtX2NodW5rX3NpemU7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ2VuZXJhdG9yLm5leHQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgQ2F0Y2g6OnRocm93X2V4Y2VwdGlvbihHZW5lcmF0b3JFeGNlcHRpb24oIk5vdCBlbm91Z2ggdmFsdWVzIHRvIGluaXRpYWxpemUgdGhlIGZpcnN0IGNodW5rIikpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1fY2h1bmsucHVzaF9iYWNrKG1fZ2VuZXJhdG9yLmdldCgpKTsKKyAgICAgICAgICAgIG1fY2h1bmsucHVzaF9iYWNrKG1fZ2VuZXJhdG9yLmdldCgpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbV9jaHVua19zaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fZ2VuZXJhdG9yLm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgICBDYXRjaDo6dGhyb3dfZXhjZXB0aW9uKEdlbmVyYXRvckV4Y2VwdGlvbigiTm90IGVub3VnaCB2YWx1ZXMgdG8gaW5pdGlhbGl6ZSB0aGUgZmlyc3QgY2h1bmsiKSk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fY2h1bmsucHVzaF9iYWNrKG1fZ2VuZXJhdG9yLmdldCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBzdGQ6OnZlY3RvcjxUPiBjb25zdCYgZ2V0KCkgY29uc3Qgb3ZlcnJpZGUgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9nZW5lcmF0b3JzX3NwZWNpZmljLmhwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZ2VuZXJhdG9yc19zcGVjaWZpYy5ocHAKaW5kZXggZGVlOGU3MS4uN2FhZTA2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9nZW5lcmF0b3JzX3NwZWNpZmljLmhwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2dlbmVyYXRvcnNfc3BlY2lmaWMuaHBwCkBAIC0xMCw3ICsxMCw2IEBACiAjaW5jbHVkZSAiY2F0Y2hfY29udGV4dC5oIgogI2luY2x1ZGUgImNhdGNoX2dlbmVyYXRvcnMuaHBwIgogI2luY2x1ZGUgImNhdGNoX2ludGVyZmFjZXNfY29uZmlnLmgiCi0jaW5jbHVkZSAiY2F0Y2hfcmFuZG9tX251bWJlcl9nZW5lcmF0b3IuaCIKIAogI2luY2x1ZGUgPHJhbmRvbT4KIApAQCAtMTksMTMgKzE4LDE0IEBACiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBGbG9hdD4KIGNsYXNzIFJhbmRvbUZsb2F0aW5nR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIElHZW5lcmF0b3I8RmxvYXQ+IHsKLSAgICBDYXRjaDo6U2ltcGxlUGNnMzImIG1fcm5nOworICAgIC8vIEZJWE1FOiBXaGF0IGlzIHRoZSByaWdodCBzZWVkPworICAgIHN0ZDo6bWluc3RkX3JhbmQgbV9yYW5kOwogICAgIHN0ZDo6dW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbjxGbG9hdD4gbV9kaXN0OwogICAgIEZsb2F0IG1fY3VycmVudF9udW1iZXI7CiBwdWJsaWM6CiAKICAgICBSYW5kb21GbG9hdGluZ0dlbmVyYXRvcihGbG9hdCBhLCBGbG9hdCBiKToKLSAgICAgICAgbV9ybmcocm5nKCkpLAorICAgICAgICBtX3JhbmQoZ2V0Q3VycmVudENvbnRleHQoKS5nZXRDb25maWcoKS0+cm5nU2VlZCgpKSwKICAgICAgICAgbV9kaXN0KGEsIGIpIHsKICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZD4obmV4dCgpKTsKICAgICB9CkBAIC0zNCwyMCArMzQsMjAgQEAKICAgICAgICAgcmV0dXJuIG1fY3VycmVudF9udW1iZXI7CiAgICAgfQogICAgIGJvb2wgbmV4dCgpIG92ZXJyaWRlIHsKLSAgICAgICAgbV9jdXJyZW50X251bWJlciA9IG1fZGlzdChtX3JuZyk7CisgICAgICAgIG1fY3VycmVudF9udW1iZXIgPSBtX2Rpc3QobV9yYW5kKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEludGVnZXI+CiBjbGFzcyBSYW5kb21JbnRlZ2VyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIElHZW5lcmF0b3I8SW50ZWdlcj4gewotICAgIENhdGNoOjpTaW1wbGVQY2czMiYgbV9ybmc7CisgICAgc3RkOjptaW5zdGRfcmFuZCBtX3JhbmQ7CiAgICAgc3RkOjp1bmlmb3JtX2ludF9kaXN0cmlidXRpb248SW50ZWdlcj4gbV9kaXN0OwogICAgIEludGVnZXIgbV9jdXJyZW50X251bWJlcjsKIHB1YmxpYzoKIAogICAgIFJhbmRvbUludGVnZXJHZW5lcmF0b3IoSW50ZWdlciBhLCBJbnRlZ2VyIGIpOgotICAgICAgICBtX3JuZyhybmcoKSksCisgICAgICAgIG1fcmFuZChnZXRDdXJyZW50Q29udGV4dCgpLmdldENvbmZpZygpLT5ybmdTZWVkKCkpLAogICAgICAgICBtX2Rpc3QoYSwgYikgewogICAgICAgICBzdGF0aWNfY2FzdDx2b2lkPihuZXh0KCkpOwogICAgIH0KQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgcmV0dXJuIG1fY3VycmVudF9udW1iZXI7CiAgICAgfQogICAgIGJvb2wgbmV4dCgpIG92ZXJyaWRlIHsKLSAgICAgICAgbV9jdXJyZW50X251bWJlciA9IG1fZGlzdChtX3JuZyk7CisgICAgICAgIG1fY3VycmVudF9udW1iZXIgPSBtX2Rpc3QobV9yYW5kKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogfTsKQEAgLTExNyw3ICsxMTcsNyBAQAogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIEdlbmVyYXRvcldyYXBwZXI8VD4gcmFuZ2UoVCBjb25zdCYgc3RhcnQsIFQgY29uc3QmIGVuZCwgVCBjb25zdCYgc3RlcCkgewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFQsIGJvb2w+Ojp2YWx1ZSwgIlR5cGUgbXVzdCBiZSBudW1lcmljIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFQsIGJvb2w+Ojp2YWx1ZSwgIlR5cGUgbXVzdCBiZSBhbiBpbnRlZ2VyIik7CiAgICAgcmV0dXJuIEdlbmVyYXRvcldyYXBwZXI8VD4ocGY6Om1ha2VfdW5pcXVlPFJhbmdlR2VuZXJhdG9yPFQ+PihzdGFydCwgZW5kLCBzdGVwKSk7CiB9CiAKQEAgLTEyOCw0NiArMTI4LDYgQEAKIH0KIAogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIEl0ZXJhdG9yR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIElHZW5lcmF0b3I8VD4gewotICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfc2FtZTxULCBib29sPjo6dmFsdWUsCi0gICAgICAgICJJdGVyYXRvckdlbmVyYXRvciBjdXJyZW50bHkgZG9lcyBub3Qgc3VwcG9ydCBib29scyIKLSAgICAgICAgImJlY2F1c2Ugb2Ygc3RkOjp2ZWN0b3I8Ym9vbD4gc3BlY2lhbGl6YXRpb24iKTsKLQotICAgIHN0ZDo6dmVjdG9yPFQ+IG1fZWxlbXM7Ci0gICAgc2l6ZV90IG1fY3VycmVudCA9IDA7Ci1wdWJsaWM6Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIElucHV0SXRlcmF0b3IsIHR5cGVuYW1lIElucHV0U2VudGluZWw+Ci0gICAgSXRlcmF0b3JHZW5lcmF0b3IoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRTZW50aW5lbCBsYXN0KTptX2VsZW1zKGZpcnN0LCBsYXN0KSB7Ci0gICAgICAgIGlmIChtX2VsZW1zLmVtcHR5KCkpIHsKLSAgICAgICAgICAgIENhdGNoOjp0aHJvd19leGNlcHRpb24oR2VuZXJhdG9yRXhjZXB0aW9uKCJJdGVyYXRvckdlbmVyYXRvciByZWNlaXZlZCBubyB2YWxpZCB2YWx1ZXMiKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBUIGNvbnN0JiBnZXQoKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgICAgIHJldHVybiBtX2VsZW1zW21fY3VycmVudF07Ci0gICAgfQotCi0gICAgYm9vbCBuZXh0KCkgb3ZlcnJpZGUgewotICAgICAgICArK21fY3VycmVudDsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudCAhPSBtX2VsZW1zLnNpemUoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSW5wdXRJdGVyYXRvciwKLSAgICAgICAgICB0eXBlbmFtZSBJbnB1dFNlbnRpbmVsLAotICAgICAgICAgIHR5cGVuYW1lIFJlc3VsdFR5cGUgPSB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxJbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4KLUdlbmVyYXRvcldyYXBwZXI8UmVzdWx0VHlwZT4gZnJvbV9yYW5nZShJbnB1dEl0ZXJhdG9yIGZyb20sIElucHV0U2VudGluZWwgdG8pIHsKLSAgICByZXR1cm4gR2VuZXJhdG9yV3JhcHBlcjxSZXN1bHRUeXBlPihwZjo6bWFrZV91bmlxdWU8SXRlcmF0b3JHZW5lcmF0b3I8UmVzdWx0VHlwZT4+KGZyb20sIHRvKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250YWluZXIsCi0gICAgICAgICAgdHlwZW5hbWUgUmVzdWx0VHlwZSA9IHR5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVfdHlwZT4KLUdlbmVyYXRvcldyYXBwZXI8UmVzdWx0VHlwZT4gZnJvbV9yYW5nZShDb250YWluZXIgY29uc3QmIGNudCkgewotICAgIHJldHVybiBHZW5lcmF0b3JXcmFwcGVyPFJlc3VsdFR5cGU+KHBmOjptYWtlX3VuaXF1ZTxJdGVyYXRvckdlbmVyYXRvcjxSZXN1bHRUeXBlPj4oY250LmJlZ2luKCksIGNudC5lbmQoKSkpOwotfQotCi0KIH0gLy8gbmFtZXNwYWNlIEdlbmVyYXRvcnMKIH0gLy8gbmFtZXNwYWNlIENhdGNoCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19jYXB0dXJlLmggYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfY2FwdHVyZS5oCmluZGV4IDhjMjVjOGMuLjM2ZjI3YTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19jYXB0dXJlLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2NhcHR1cmUuaApAQCAtOSw3ICs5LDYgQEAKICNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX0lOVEVSRkFDRVNfQ0FQVFVSRV9IX0lOQ0xVREVECiAKICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8Y2hyb25vPgogCiAjaW5jbHVkZSAiY2F0Y2hfc3RyaW5ncmVmLmgiCiAjaW5jbHVkZSAiY2F0Y2hfcmVzdWx0X3R5cGUuaCIKQEAgLTIzLDE4ICsyMiwxNCBAQAogICAgIHN0cnVjdCBNZXNzYWdlSW5mbzsKICAgICBzdHJ1Y3QgTWVzc2FnZUJ1aWxkZXI7CiAgICAgc3RydWN0IENvdW50czsKKyAgICBzdHJ1Y3QgQmVuY2htYXJrSW5mbzsKKyAgICBzdHJ1Y3QgQmVuY2htYXJrU3RhdHM7CiAgICAgc3RydWN0IEFzc2VydGlvblJlYWN0aW9uOwogICAgIHN0cnVjdCBTb3VyY2VMaW5lSW5mbzsKIAogICAgIHN0cnVjdCBJVHJhbnNpZW50RXhwcmVzc2lvbjsKICAgICBzdHJ1Y3QgSUdlbmVyYXRvclRyYWNrZXI7CiAKLSNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HKQotICAgIHN0cnVjdCBCZW5jaG1hcmtJbmZvOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBEdXJhdGlvbiA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGUsIHN0ZDo6bmFubz4+Ci0gICAgc3RydWN0IEJlbmNobWFya1N0YXRzOwotI2VuZGlmIC8vIENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HCi0KICAgICBzdHJ1Y3QgSVJlc3VsdENhcHR1cmUgewogCiAgICAgICAgIHZpcnR1YWwgfklSZXN1bHRDYXB0dXJlKCk7CkBAIC00NiwxMiArNDEsOCBAQAogCiAgICAgICAgIHZpcnR1YWwgYXV0byBhY3F1aXJlR2VuZXJhdG9yVHJhY2tlciggU291cmNlTGluZUluZm8gY29uc3QmIGxpbmVJbmZvICkgLT4gSUdlbmVyYXRvclRyYWNrZXImID0gMDsKIAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcpCi0gICAgICAgIHZpcnR1YWwgdm9pZCBiZW5jaG1hcmtQcmVwYXJpbmcoIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lICkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgYmVuY2htYXJrU3RhcnRpbmcoIEJlbmNobWFya0luZm8gY29uc3QmIGluZm8gKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBiZW5jaG1hcmtFbmRlZCggQmVuY2htYXJrU3RhdHM8PiBjb25zdCYgc3RhdHMgKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBiZW5jaG1hcmtGYWlsZWQoIHN0ZDo6c3RyaW5nIGNvbnN0JiBlcnJvciApID0gMDsKLSNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORworICAgICAgICB2aXJ0dWFsIHZvaWQgYmVuY2htYXJrRW5kZWQoIEJlbmNobWFya1N0YXRzIGNvbnN0JiBzdGF0cyApID0gMDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcHVzaFNjb3BlZE1lc3NhZ2UoIE1lc3NhZ2VJbmZvIGNvbnN0JiBtZXNzYWdlICkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcG9wU2NvcGVkTWVzc2FnZSggTWVzc2FnZUluZm8gY29uc3QmIG1lc3NhZ2UgKSA9IDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfY29uZmlnLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19jb25maWcuY3BwCmluZGV4IDY2MTdkYTYuLmI2ZjVkYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19jb25maWcuY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19jb25maWcuY3BwCkBAIC0xLDQgKzEsNCBAQAotI2luY2x1ZGUgImNhdGNoX2ludGVyZmFjZXNfY29uZmlnLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19jb25maWcuaCIKIAogbmFtZXNwYWNlIENhdGNoIHsKICAgICBJQ29uZmlnOjp+SUNvbmZpZygpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19jb25maWcuaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19jb25maWcuaAppbmRleCA4ZmI5ODZiLi4zNDFiYjc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfY29uZmlnLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2NvbmZpZy5oCkBAIC05LDkgKzksNyBAQAogI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfSU5URVJGQUNFU19DT05GSUdfSF9JTkNMVURFRAogCiAjaW5jbHVkZSAiY2F0Y2hfY29tbW9uLmgiCi0jaW5jbHVkZSAiY2F0Y2hfb3B0aW9uLmhwcCIKIAotI2luY2x1ZGUgPGNocm9ubz4KICNpbmNsdWRlIDxpb3Nmd2Q+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KQEAgLTUyLDcgKzUwLDcgQEAKICAgICAgICAgQmVmb3JlRXhpdCA9IDIsCiAgICAgICAgIEJlZm9yZVN0YXJ0QW5kRXhpdCA9IEJlZm9yZVN0YXJ0IHwgQmVmb3JlRXhpdAogICAgIH07IH07Ci0gICAgCisKICAgICBjbGFzcyBUZXN0U3BlYzsKIAogICAgIHN0cnVjdCBJQ29uZmlnIDogTm9uQ29weWFibGUgewpAQCAtNzQsMTUgKzcyLDEwIEBACiAgICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBnZXRUZXN0c09yVGFncygpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBSdW5UZXN0czo6SW5XaGF0T3JkZXIgcnVuT3JkZXIoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IHJuZ1NlZWQoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgaW50IGJlbmNobWFya1Jlc29sdXRpb25NdWx0aXBsZSgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBVc2VDb2xvdXI6Olllc09yTm8gdXNlQ29sb3VyKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgZ2V0U2VjdGlvbnNUb1J1bigpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBWZXJib3NpdHkgdmVyYm9zaXR5KCkgY29uc3QgPSAwOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBiZW5jaG1hcmtOb0FuYWx5c2lzKCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIGludCBiZW5jaG1hcmtTYW1wbGVzKCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIGRvdWJsZSBiZW5jaG1hcmtDb25maWRlbmNlSW50ZXJ2YWwoKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGJlbmNobWFya1Jlc2FtcGxlcygpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIGJlbmNobWFya1dhcm11cFRpbWUoKSBjb25zdCA9IDA7CiAgICAgfTsKIAogICAgIHVzaW5nIElDb25maWdQdHIgPSBzdGQ6OnNoYXJlZF9wdHI8SUNvbmZpZyBjb25zdD47CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfZW51bV92YWx1ZXNfcmVnaXN0cnkuaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19lbnVtX3ZhbHVlc19yZWdpc3RyeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTU5MmM5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19lbnVtX3ZhbHVlc19yZWdpc3RyeS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqICBDcmVhdGVkIGJ5IFBoaWwgb24gNC80LzIwMTkuCi0gKiAgQ29weXJpZ2h0IDIwMTkgVHdvIEJsdWUgQ3ViZXMgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0gKiAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKi8KLSNpZm5kZWYgVFdPQkxVRUNVQkVTX0NBVENIX0lOVEVSRkFDRVNFTlVNVkFMVUVTUkVHSVNUUllfSF9JTkNMVURFRAotI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfSU5URVJGQUNFU0VOVU1WQUxVRVNSRUdJU1RSWV9IX0lOQ0xVREVECi0KLSNpbmNsdWRlICJjYXRjaF9zdHJpbmdyZWYuaCIKLQotI2luY2x1ZGUgPHZlY3Rvcj4KLQotbmFtZXNwYWNlIENhdGNoIHsKLQotICAgIG5hbWVzcGFjZSBEZXRhaWwgewotICAgICAgICBzdHJ1Y3QgRW51bUluZm8gewotICAgICAgICAgICAgU3RyaW5nUmVmIG1fbmFtZTsKLSAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxpbnQsIFN0cmluZ1JlZj4+IG1fdmFsdWVzOwotCi0gICAgICAgICAgICB+RW51bUluZm8oKTsKLQotICAgICAgICAgICAgU3RyaW5nUmVmIGxvb2t1cCggaW50IHZhbHVlICkgY29uc3Q7Ci0gICAgICAgIH07Ci0gICAgfSAvLyBuYW1lc3BhY2UgRGV0YWlsCi0KLSAgICBzdHJ1Y3QgSU11dGFibGVFbnVtVmFsdWVzUmVnaXN0cnkgewotICAgICAgICB2aXJ0dWFsIH5JTXV0YWJsZUVudW1WYWx1ZXNSZWdpc3RyeSgpOwotCi0gICAgICAgIHZpcnR1YWwgRGV0YWlsOjpFbnVtSW5mbyBjb25zdCYgcmVnaXN0ZXJFbnVtKCBTdHJpbmdSZWYgZW51bU5hbWUsIFN0cmluZ1JlZiBhbGxFbnVtcywgc3RkOjp2ZWN0b3I8aW50PiBjb25zdCYgdmFsdWVzICkgPSAwOwotCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEU+Ci0gICAgICAgIERldGFpbDo6RW51bUluZm8gY29uc3QmIHJlZ2lzdGVyRW51bSggU3RyaW5nUmVmIGVudW1OYW1lLCBTdHJpbmdSZWYgYWxsRW51bXMsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxFPiB2YWx1ZXMgKSB7Ci0gICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihpbnQpID49IHNpemVvZihFKSwgIkNhbm5vdCBzZXJpYWxpemUgZW51bSB0byBpbnQiKTsKLSAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGludD4gaW50VmFsdWVzOwotICAgICAgICAgICAgaW50VmFsdWVzLnJlc2VydmUoIHZhbHVlcy5zaXplKCkgKTsKLSAgICAgICAgICAgIGZvciggYXV0byBlbnVtVmFsdWUgOiB2YWx1ZXMgKQotICAgICAgICAgICAgICAgIGludFZhbHVlcy5wdXNoX2JhY2soIHN0YXRpY19jYXN0PGludD4oIGVudW1WYWx1ZSApICk7Ci0gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXJFbnVtKCBlbnVtTmFtZSwgYWxsRW51bXMsIGludFZhbHVlcyApOwotICAgICAgICB9Ci0gICAgfTsKLQotfSAvLyBDYXRjaAotCi0jZW5kaWYgLy9UV09CTFVFQ1VCRVNfQ0FUQ0hfSU5URVJGQUNFU0VOVU1WQUxVRVNSRUdJU1RSWV9IX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfZXhjZXB0aW9uLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19leGNlcHRpb24uY3BwCmluZGV4IDcwNWQ4YzguLjg0OTRhMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19leGNlcHRpb24uY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19leGNlcHRpb24uY3BwCkBAIC0xLDQgKzEsNCBAQAotI2luY2x1ZGUgImNhdGNoX2ludGVyZmFjZXNfZXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19leGNlcHRpb24uaCIKIAogbmFtZXNwYWNlIENhdGNoIHsKICAgICBJRXhjZXB0aW9uVHJhbnNsYXRvcjo6fklFeGNlcHRpb25UcmFuc2xhdG9yKCkgPSBkZWZhdWx0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2V4Y2VwdGlvbi5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2V4Y2VwdGlvbi5oCmluZGV4IGE3MjM3NzIuLjczZWY5OTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19leGNlcHRpb24uaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfZXhjZXB0aW9uLmgKQEAgLTc1LDEwICs3NSw5IEBACiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RSQU5TTEFURV9FWENFUFRJT04yKCB0cmFuc2xhdG9yTmFtZSwgc2lnbmF0dXJlICkgXAogICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB0cmFuc2xhdG9yTmFtZSggc2lnbmF0dXJlICk7IFwKLSAgICBDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTiBcCiAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyBcCiAgICAgbmFtZXNwYWNleyBDYXRjaDo6RXhjZXB0aW9uVHJhbnNsYXRvclJlZ2lzdHJhciBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggY2F0Y2hfaW50ZXJuYWxfRXhjZXB0aW9uUmVnaXN0cmFyICkoICZ0cmFuc2xhdG9yTmFtZSApOyB9IFwKLSAgICBDQVRDSF9JTlRFUk5BTF9TVE9QX1dBUk5JTkdTX1NVUFBSRVNTSU9OIFwKKyAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAogICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB0cmFuc2xhdG9yTmFtZSggc2lnbmF0dXJlICkKIAogI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9UUkFOU0xBVEVfRVhDRVBUSU9OKCBzaWduYXR1cmUgKSBJTlRFUk5BTF9DQVRDSF9UUkFOU0xBVEVfRVhDRVBUSU9OMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIGNhdGNoX2ludGVybmFsX0V4Y2VwdGlvblRyYW5zbGF0b3IgKSwgc2lnbmF0dXJlICkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19yZWdpc3RyeV9odWIuY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3JlZ2lzdHJ5X2h1Yi5jcHAKaW5kZXggN2EyMmQ2NC4uYmQ1YjgwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3JlZ2lzdHJ5X2h1Yi5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3JlZ2lzdHJ5X2h1Yi5jcHAKQEAgLTEsNCArMSw0IEBACi0jaW5jbHVkZSAiY2F0Y2hfaW50ZXJmYWNlc19yZWdpc3RyeV9odWIuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3JlZ2lzdHJ5X2h1Yi5oIgogCiBuYW1lc3BhY2UgQ2F0Y2ggewogICAgIElSZWdpc3RyeUh1Yjo6fklSZWdpc3RyeUh1YigpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19yZWdpc3RyeV9odWIuaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19yZWdpc3RyeV9odWIuaAppbmRleCAxOWZmYmYyLi44ZTFkYTYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfcmVnaXN0cnlfaHViLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3JlZ2lzdHJ5X2h1Yi5oCkBAIC0yMiw4ICsyMiw2IEBACiAgICAgc3RydWN0IElSZXBvcnRlclJlZ2lzdHJ5OwogICAgIHN0cnVjdCBJUmVwb3J0ZXJGYWN0b3J5OwogICAgIHN0cnVjdCBJVGFnQWxpYXNSZWdpc3RyeTsKLSAgICBzdHJ1Y3QgSU11dGFibGVFbnVtVmFsdWVzUmVnaXN0cnk7Ci0KICAgICBjbGFzcyBTdGFydHVwRXhjZXB0aW9uUmVnaXN0cnk7CiAKICAgICB1c2luZyBJUmVwb3J0ZXJGYWN0b3J5UHRyID0gc3RkOjpzaGFyZWRfcHRyPElSZXBvcnRlckZhY3Rvcnk+OwpAQCAtMzQsNiArMzIsNyBAQAogICAgICAgICB2aXJ0dWFsIElSZXBvcnRlclJlZ2lzdHJ5IGNvbnN0JiBnZXRSZXBvcnRlclJlZ2lzdHJ5KCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIElUZXN0Q2FzZVJlZ2lzdHJ5IGNvbnN0JiBnZXRUZXN0Q2FzZVJlZ2lzdHJ5KCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIElUYWdBbGlhc1JlZ2lzdHJ5IGNvbnN0JiBnZXRUYWdBbGlhc1JlZ2lzdHJ5KCkgY29uc3QgPSAwOworCiAgICAgICAgIHZpcnR1YWwgSUV4Y2VwdGlvblRyYW5zbGF0b3JSZWdpc3RyeSBjb25zdCYgZ2V0RXhjZXB0aW9uVHJhbnNsYXRvclJlZ2lzdHJ5KCkgY29uc3QgPSAwOwogCiAKQEAgLTQ4LDcgKzQ3LDYgQEAKICAgICAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyVHJhbnNsYXRvciggY29uc3QgSUV4Y2VwdGlvblRyYW5zbGF0b3IqIHRyYW5zbGF0b3IgKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclRhZ0FsaWFzKCBzdGQ6OnN0cmluZyBjb25zdCYgYWxpYXMsIHN0ZDo6c3RyaW5nIGNvbnN0JiB0YWcsIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBsaW5lSW5mbyApID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyU3RhcnR1cEV4Y2VwdGlvbigpIG5vZXhjZXB0ID0gMDsKLSAgICAgICAgdmlydHVhbCBJTXV0YWJsZUVudW1WYWx1ZXNSZWdpc3RyeSYgZ2V0TXV0YWJsZUVudW1WYWx1ZXNSZWdpc3RyeSgpID0gMDsKICAgICB9OwogCiAgICAgSVJlZ2lzdHJ5SHViIGNvbnN0JiBnZXRSZWdpc3RyeUh1YigpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3JlcG9ydGVyLmggYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfcmVwb3J0ZXIuaAppbmRleCA3NTFlZjJjLi5lNWZiZjhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfcmVwb3J0ZXIuaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfcmVwb3J0ZXIuaApAQCAtMTgsMTggKzE4LDEyIEBACiAjaW5jbHVkZSAiY2F0Y2hfb3B0aW9uLmhwcCIKICNpbmNsdWRlICJjYXRjaF9zdHJpbmdyZWYuaCIKIAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcpCi0jaW5jbHVkZSAiYmVuY2htYXJrL2NhdGNoX2VzdGltYXRlLmhwcCIKLSNpbmNsdWRlICJiZW5jaG1hcmsvY2F0Y2hfb3V0bGllcl9jbGFzc2lmaWNhdGlvbi5ocHAiCi0jZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcKLQogCiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPGlvc2Z3ZD4KICNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxhbGdvcml0aG0+CiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKQEAgLTE2NSw0MyArMTU5LDE0IEBACiAgICAgICAgIGJvb2wgYWJvcnRpbmc7CiAgICAgfTsKIAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcpCiAgICAgc3RydWN0IEJlbmNobWFya0luZm8gewogICAgICAgICBzdGQ6OnN0cmluZyBuYW1lOwotICAgICAgICBkb3VibGUgZXN0aW1hdGVkRHVyYXRpb247Ci0gICAgICAgIGludCBpdGVyYXRpb25zOwotICAgICAgICBpbnQgc2FtcGxlczsKLSAgICAgICAgdW5zaWduZWQgaW50IHJlc2FtcGxlczsKLSAgICAgICAgZG91YmxlIGNsb2NrUmVzb2x1dGlvbjsKLSAgICAgICAgZG91YmxlIGNsb2NrQ29zdDsKICAgICB9OwotCi0gICAgdGVtcGxhdGUgPGNsYXNzIER1cmF0aW9uPgogICAgIHN0cnVjdCBCZW5jaG1hcmtTdGF0cyB7CiAgICAgICAgIEJlbmNobWFya0luZm8gaW5mbzsKLQotICAgICAgICBzdGQ6OnZlY3RvcjxEdXJhdGlvbj4gc2FtcGxlczsKLSAgICAgICAgQmVuY2htYXJrOjpFc3RpbWF0ZTxEdXJhdGlvbj4gbWVhbjsKLSAgICAgICAgQmVuY2htYXJrOjpFc3RpbWF0ZTxEdXJhdGlvbj4gc3RhbmRhcmREZXZpYXRpb247Ci0gICAgICAgIEJlbmNobWFyazo6T3V0bGllckNsYXNzaWZpY2F0aW9uIG91dGxpZXJzOwotICAgICAgICBkb3VibGUgb3V0bGllclZhcmlhbmNlOwotCi0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBEdXJhdGlvbjI+Ci0gICAgICAgIG9wZXJhdG9yIEJlbmNobWFya1N0YXRzPER1cmF0aW9uMj4oKSBjb25zdCB7Ci0gICAgICAgICAgICBzdGQ6OnZlY3RvcjxEdXJhdGlvbjI+IHNhbXBsZXMyOwotICAgICAgICAgICAgc2FtcGxlczIucmVzZXJ2ZShzYW1wbGVzLnNpemUoKSk7Ci0gICAgICAgICAgICBzdGQ6OnRyYW5zZm9ybShzYW1wbGVzLmJlZ2luKCksIHNhbXBsZXMuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlcihzYW1wbGVzMiksIFtdKER1cmF0aW9uIGQpIHsgcmV0dXJuIER1cmF0aW9uMihkKTsgfSk7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIGluZm8sCi0gICAgICAgICAgICAgICAgc3RkOjptb3ZlKHNhbXBsZXMyKSwKLSAgICAgICAgICAgICAgICBtZWFuLAotICAgICAgICAgICAgICAgIHN0YW5kYXJkRGV2aWF0aW9uLAotICAgICAgICAgICAgICAgIG91dGxpZXJzLAotICAgICAgICAgICAgICAgIG91dGxpZXJWYXJpYW5jZSwKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KKyAgICAgICAgc3RkOjpzaXplX3QgaXRlcmF0aW9uczsKKyAgICAgICAgdWludDY0X3QgZWxhcHNlZFRpbWVJbk5hbm9zZWNvbmRzOwogICAgIH07Ci0jZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcKIAogICAgIHN0cnVjdCBJU3RyZWFtaW5nUmVwb3J0ZXIgewogICAgICAgICB2aXJ0dWFsIH5JU3RyZWFtaW5nUmVwb3J0ZXIoKSA9IGRlZmF1bHQ7CkBAIC0yMTQsMjYgKzE3OSwyMyBAQAogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBub01hdGNoaW5nVGVzdENhc2VzKCBzdGQ6OnN0cmluZyBjb25zdCYgc3BlYyApID0gMDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0SW52YWxpZEFyZ3VtZW50cyhzdGQ6OnN0cmluZyBjb25zdCYpIHt9Ci0gICAgICAgIAogICAgICAgICB2aXJ0dWFsIHZvaWQgdGVzdFJ1blN0YXJ0aW5nKCBUZXN0UnVuSW5mbyBjb25zdCYgdGVzdFJ1bkluZm8gKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB0ZXN0R3JvdXBTdGFydGluZyggR3JvdXBJbmZvIGNvbnN0JiBncm91cEluZm8gKSA9IDA7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHRlc3RDYXNlU3RhcnRpbmcoIFRlc3RDYXNlSW5mbyBjb25zdCYgdGVzdEluZm8gKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZWN0aW9uU3RhcnRpbmcoIFNlY3Rpb25JbmZvIGNvbnN0JiBzZWN0aW9uSW5mbyApID0gMDsKIAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcpCi0gICAgICAgIHZpcnR1YWwgdm9pZCBiZW5jaG1hcmtQcmVwYXJpbmcoIHN0ZDo6c3RyaW5nIGNvbnN0JiApIHt9CisgICAgICAgIC8vICoqKiBleHBlcmltZW50YWwgKioqCiAgICAgICAgIHZpcnR1YWwgdm9pZCBiZW5jaG1hcmtTdGFydGluZyggQmVuY2htYXJrSW5mbyBjb25zdCYgKSB7fQotICAgICAgICB2aXJ0dWFsIHZvaWQgYmVuY2htYXJrRW5kZWQoIEJlbmNobWFya1N0YXRzPD4gY29uc3QmICkge30KLSAgICAgICAgdmlydHVhbCB2b2lkIGJlbmNobWFya0ZhaWxlZCggc3RkOjpzdHJpbmcgY29uc3QmICkge30KLSNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBhc3NlcnRpb25TdGFydGluZyggQXNzZXJ0aW9uSW5mbyBjb25zdCYgYXNzZXJ0aW9uSW5mbyApID0gMDsKIAogICAgICAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBpZiB0aGUgbWVzc2FnZXMgYnVmZmVyIHNob3VsZCBiZSBjbGVhcmVkOgogICAgICAgICB2aXJ0dWFsIGJvb2wgYXNzZXJ0aW9uRW5kZWQoIEFzc2VydGlvblN0YXRzIGNvbnN0JiBhc3NlcnRpb25TdGF0cyApID0gMDsKIAorICAgICAgICAvLyAqKiogZXhwZXJpbWVudGFsICoqKgorICAgICAgICB2aXJ0dWFsIHZvaWQgYmVuY2htYXJrRW5kZWQoIEJlbmNobWFya1N0YXRzIGNvbnN0JiApIHt9CisKICAgICAgICAgdmlydHVhbCB2b2lkIHNlY3Rpb25FbmRlZCggU2VjdGlvblN0YXRzIGNvbnN0JiBzZWN0aW9uU3RhdHMgKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB0ZXN0Q2FzZUVuZGVkKCBUZXN0Q2FzZVN0YXRzIGNvbnN0JiB0ZXN0Q2FzZVN0YXRzICkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdGVzdEdyb3VwRW5kZWQoIFRlc3RHcm91cFN0YXRzIGNvbnN0JiB0ZXN0R3JvdXBTdGF0cyApID0gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19ydW5uZXIuY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3J1bm5lci5jcHAKaW5kZXggOGQ0MTlhMS4uMmIwNTJlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3J1bm5lci5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3J1bm5lci5jcHAKQEAgLTEsNCArMSw0IEBACi0jaW5jbHVkZSAiY2F0Y2hfaW50ZXJmYWNlc19ydW5uZXIuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3J1bm5lci5oIgogCiBuYW1lc3BhY2UgQ2F0Y2ggewogICAgIElSdW5uZXI6On5JUnVubmVyKCkgPSBkZWZhdWx0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3Rlc3RjYXNlLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc190ZXN0Y2FzZS5jcHAKaW5kZXggOWIzNWUwMy4uMzVjM2RiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3Rlc3RjYXNlLmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfdGVzdGNhc2UuY3BwCkBAIC0xLDQgKzEsNCBAQAotI2luY2x1ZGUgImNhdGNoX2ludGVyZmFjZXNfdGVzdGNhc2UuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3Rlc3RjYXNlLmgiCiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAgICAgSVRlc3RJbnZva2VyOjp+SVRlc3RJbnZva2VyKCkgPSBkZWZhdWx0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3Rlc3RjYXNlLmggYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfdGVzdGNhc2UuaAppbmRleCAyNDkyYzA3Li5mNTdjYzhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfdGVzdGNhc2UuaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfdGVzdGNhc2UuaApAQCAtMjgsNyArMjgsNiBAQAogICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPFRlc3RDYXNlPiBjb25zdCYgZ2V0QWxsVGVzdHNTb3J0ZWQoIElDb25maWcgY29uc3QmIGNvbmZpZyApIGNvbnN0ID0gMDsKICAgICB9OwogCi0gICAgYm9vbCBpc1Rocm93U2FmZSggVGVzdENhc2UgY29uc3QmIHRlc3RDYXNlLCBJQ29uZmlnIGNvbnN0JiBjb25maWcgKTsKICAgICBib29sIG1hdGNoVGVzdCggVGVzdENhc2UgY29uc3QmIHRlc3RDYXNlLCBUZXN0U3BlYyBjb25zdCYgdGVzdFNwZWMsIElDb25maWcgY29uc3QmIGNvbmZpZyApOwogICAgIHN0ZDo6dmVjdG9yPFRlc3RDYXNlPiBmaWx0ZXJUZXN0cyggc3RkOjp2ZWN0b3I8VGVzdENhc2U+IGNvbnN0JiB0ZXN0Q2FzZXMsIFRlc3RTcGVjIGNvbnN0JiB0ZXN0U3BlYywgSUNvbmZpZyBjb25zdCYgY29uZmlnICk7CiAgICAgc3RkOjp2ZWN0b3I8VGVzdENhc2U+IGNvbnN0JiBnZXRBbGxUZXN0Q2FzZXNTb3J0ZWQoIElDb25maWcgY29uc3QmIGNvbmZpZyApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9saXN0LmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbGlzdC5jcHAKaW5kZXggOWY3NDhlNC4uZTFkOTkyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9saXN0LmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2xpc3QuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiBuYW1lc3BhY2UgQ2F0Y2ggewogCiAgICAgc3RkOjpzaXplX3QgbGlzdFRlc3RzKCBDb25maWcgY29uc3QmIGNvbmZpZyApIHsKLSAgICAgICAgVGVzdFNwZWMgY29uc3QmIHRlc3RTcGVjID0gY29uZmlnLnRlc3RTcGVjKCk7CisgICAgICAgIFRlc3RTcGVjIHRlc3RTcGVjID0gY29uZmlnLnRlc3RTcGVjKCk7CiAgICAgICAgIGlmKCBjb25maWcuaGFzVGVzdEZpbHRlcnMoKSApCiAgICAgICAgICAgICBDYXRjaDo6Y291dCgpIDw8ICJNYXRjaGluZyB0ZXN0IGNhc2VzOlxuIjsKICAgICAgICAgZWxzZSB7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgfQogCiAgICAgc3RkOjpzaXplX3QgbGlzdFRlc3RzTmFtZXNPbmx5KCBDb25maWcgY29uc3QmIGNvbmZpZyApIHsKLSAgICAgICAgVGVzdFNwZWMgY29uc3QmIHRlc3RTcGVjID0gY29uZmlnLnRlc3RTcGVjKCk7CisgICAgICAgIFRlc3RTcGVjIHRlc3RTcGVjID0gY29uZmlnLnRlc3RTcGVjKCk7CiAgICAgICAgIHN0ZDo6c2l6ZV90IG1hdGNoZWRUZXN0cyA9IDA7CiAgICAgICAgIHN0ZDo6dmVjdG9yPFRlc3RDYXNlPiBtYXRjaGVkVGVzdENhc2VzID0gZmlsdGVyVGVzdHMoIGdldEFsbFRlc3RDYXNlc1NvcnRlZCggY29uZmlnICksIHRlc3RTcGVjLCBjb25maWcgKTsKICAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiB0ZXN0Q2FzZUluZm8gOiBtYXRjaGVkVGVzdENhc2VzICkgewpAQCAtODQsMjMgKzg0LDE0IEBACiAgICAgfQogCiAgICAgc3RkOjpzdHJpbmcgVGFnSW5mbzo6YWxsKCkgY29uc3QgewotICAgICAgICBzaXplX3Qgc2l6ZSA9IDA7Ci0gICAgICAgIGZvciAoYXV0byBjb25zdCYgc3BlbGxpbmcgOiBzcGVsbGluZ3MpIHsKLSAgICAgICAgICAgIC8vIEFkZCAyIGZvciB0aGUgYnJhY2tlcwotICAgICAgICAgICAgc2l6ZSArPSBzcGVsbGluZy5zaXplKCkgKyAyOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RkOjpzdHJpbmcgb3V0OyBvdXQucmVzZXJ2ZShzaXplKTsKLSAgICAgICAgZm9yIChhdXRvIGNvbnN0JiBzcGVsbGluZyA6IHNwZWxsaW5ncykgewotICAgICAgICAgICAgb3V0ICs9ICdbJzsKLSAgICAgICAgICAgIG91dCArPSBzcGVsbGluZzsKLSAgICAgICAgICAgIG91dCArPSAnXSc7Ci0gICAgICAgIH0KKyAgICAgICAgc3RkOjpzdHJpbmcgb3V0OworICAgICAgICBmb3IoIGF1dG8gY29uc3QmIHNwZWxsaW5nIDogc3BlbGxpbmdzICkKKyAgICAgICAgICAgIG91dCArPSAiWyIgKyBzcGVsbGluZyArICJdIjsKICAgICAgICAgcmV0dXJuIG91dDsKICAgICB9CiAKICAgICBzdGQ6OnNpemVfdCBsaXN0VGFncyggQ29uZmlnIGNvbnN0JiBjb25maWcgKSB7Ci0gICAgICAgIFRlc3RTcGVjIGNvbnN0JiB0ZXN0U3BlYyA9IGNvbmZpZy50ZXN0U3BlYygpOworICAgICAgICBUZXN0U3BlYyB0ZXN0U3BlYyA9IGNvbmZpZy50ZXN0U3BlYygpOwogICAgICAgICBpZiggY29uZmlnLmhhc1Rlc3RGaWx0ZXJzKCkgKQogICAgICAgICAgICAgQ2F0Y2g6OmNvdXQoKSA8PCAiVGFncyBmb3IgbWF0Y2hpbmcgdGVzdCBjYXNlczpcbiI7CiAgICAgICAgIGVsc2UgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tYXRjaGVycy5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tYXRjaGVycy5oCmluZGV4IDUxOGE2ZTAuLmFlYmQ0YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnMuaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21hdGNoZXJzLmgKQEAgLTQ0LDE1ICs0NCw2IEBACiAgICAgICAgICAgICB2aXJ0dWFsIGJvb2wgbWF0Y2goIE9iamVjdFQgY29uc3QmIGFyZyApIGNvbnN0ID0gMDsKICAgICAgICAgfTsKIAotI2lmIGRlZmluZWQoX19PQkpDX18pCi0gICAgICAgIC8vIEhhY2sgdG8gZml4IENhdGNoIEdIIGlzc3VlICMxNjYxLiBDb3VsZCB1c2UgaWQgZm9yIGdlbmVyaWMgT2JqZWN0IHN1cHBvcnQuCi0gICAgICAgIC8vIHVzZSBvZiBjb25zdCBmb3IgT2JqZWN0IHBvaW50ZXJzIGlzIHZlcnkgdW5jb21tb24gYW5kIHVuZGVyIEFSQyBpdCBjYXVzZXMgc29tZSBraW5kIG9mIHNpZ25hdHVyZSBtaXNtYXRjaCB0aGF0IGJyZWFrcyBjb21waWxhdGlvbgotICAgICAgICB0ZW1wbGF0ZTw+Ci0gICAgICAgIHN0cnVjdCBNYXRjaGVyTWV0aG9kPE5TU3RyaW5nKj4gewotICAgICAgICAgICAgdmlydHVhbCBib29sIG1hdGNoKCBOU1N0cmluZyogYXJnICkgY29uc3QgPSAwOwotICAgICAgICB9OwotI2VuZGlmCi0KICNpZmRlZiBfX2NsYW5nX18KICMgICAgcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiAjZW5kaWYKQEAgLTkxLDEwICs4Miw5IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBNYXRjaEFsbE9mPEFyZ1Q+IG9wZXJhdG9yICYmICggTWF0Y2hlckJhc2U8QXJnVD4gY29uc3QmIG90aGVyICkgewotICAgICAgICAgICAgICAgIGF1dG8gY29weSgqdGhpcyk7Ci0gICAgICAgICAgICAgICAgY29weS5tX21hdGNoZXJzLnB1c2hfYmFjayggJm90aGVyICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgICAgICAgICBNYXRjaEFsbE9mPEFyZ1Q+JiBvcGVyYXRvciAmJiAoIE1hdGNoZXJCYXNlPEFyZ1Q+IGNvbnN0JiBvdGhlciApIHsKKyAgICAgICAgICAgICAgICBtX21hdGNoZXJzLnB1c2hfYmFjayggJm90aGVyICk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxNYXRjaGVyQmFzZTxBcmdUPiBjb25zdCo+IG1fbWF0Y2hlcnM7CkBAIC0xMjUsMTAgKzExNSw5IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBNYXRjaEFueU9mPEFyZ1Q+IG9wZXJhdG9yIHx8ICggTWF0Y2hlckJhc2U8QXJnVD4gY29uc3QmIG90aGVyICkgewotICAgICAgICAgICAgICAgIGF1dG8gY29weSgqdGhpcyk7Ci0gICAgICAgICAgICAgICAgY29weS5tX21hdGNoZXJzLnB1c2hfYmFjayggJm90aGVyICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgICAgICAgICBNYXRjaEFueU9mPEFyZ1Q+JiBvcGVyYXRvciB8fCAoIE1hdGNoZXJCYXNlPEFyZ1Q+IGNvbnN0JiBvdGhlciApIHsKKyAgICAgICAgICAgICAgICBtX21hdGNoZXJzLnB1c2hfYmFjayggJm90aGVyICk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxNYXRjaGVyQmFzZTxBcmdUPiBjb25zdCo+IG1fbWF0Y2hlcnM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21hdGNoZXJzX2V4Y2VwdGlvbi5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21hdGNoZXJzX2V4Y2VwdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxODgxMGUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tYXRjaGVyc19leGNlcHRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoKLSAqICBDcmVhdGVkIGJ5IE1hcnRpbiBIb8WZZcWIb3Zza8O9IG9uIDEzLzEwLzIwMTkuCi0gKgotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotICogZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKi8KLQotI2luY2x1ZGUgImNhdGNoX21hdGNoZXJzX2V4Y2VwdGlvbi5ocHAiCi0KLQotbmFtZXNwYWNlIENhdGNoIHsKLW5hbWVzcGFjZSBNYXRjaGVycyB7Ci1uYW1lc3BhY2UgRXhjZXB0aW9uIHsKLQotYm9vbCBFeGNlcHRpb25NZXNzYWdlTWF0Y2hlcjo6bWF0Y2goc3RkOjpleGNlcHRpb24gY29uc3QmIGV4KSBjb25zdCB7Ci0gICAgcmV0dXJuIGV4LndoYXQoKSA9PSBtX21lc3NhZ2U7Ci19Ci0KLXN0ZDo6c3RyaW5nIEV4Y2VwdGlvbk1lc3NhZ2VNYXRjaGVyOjpkZXNjcmliZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gImV4Y2VwdGlvbiBtZXNzYWdlIG1hdGNoZXMgXCIiICsgbV9tZXNzYWdlICsgIlwiIjsKLX0KLQotfQotRXhjZXB0aW9uOjpFeGNlcHRpb25NZXNzYWdlTWF0Y2hlciBNZXNzYWdlKHN0ZDo6c3RyaW5nIGNvbnN0JiBtZXNzYWdlKSB7Ci0gICAgcmV0dXJuIEV4Y2VwdGlvbjo6RXhjZXB0aW9uTWVzc2FnZU1hdGNoZXIobWVzc2FnZSk7Ci19Ci0KLS8vIG5hbWVzcGFjZSBFeGNlcHRpb24KLX0gLy8gbmFtZXNwYWNlIE1hdGNoZXJzCi19IC8vIG5hbWVzcGFjZSBDYXRjaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tYXRjaGVyc19leGNlcHRpb24uaHBwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tYXRjaGVyc19leGNlcHRpb24uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODBiMzYwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnNfZXhjZXB0aW9uLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiAgQ3JlYXRlZCBieSBNYXJ0aW4gSG/FmWXFiG92c2vDvSBvbiAxMy8xMC8yMDE5LgotICoKLSAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLSAqIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICovCi0jaWZuZGVmIFRXT0JMVUVDVUJFU19DQVRDSF9NQVRDSEVSU19FWENFUFRJT05fSFBQX0lOQ0xVREVECi0jZGVmaW5lIFRXT0JMVUVDVUJFU19DQVRDSF9NQVRDSEVSU19FWENFUFRJT05fSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlICJjYXRjaF9tYXRjaGVycy5oIgotCi1uYW1lc3BhY2UgQ2F0Y2ggewotbmFtZXNwYWNlIE1hdGNoZXJzIHsKLW5hbWVzcGFjZSBFeGNlcHRpb24gewotCi1jbGFzcyBFeGNlcHRpb25NZXNzYWdlTWF0Y2hlciA6IHB1YmxpYyBNYXRjaGVyQmFzZTxzdGQ6OmV4Y2VwdGlvbj4gewotICAgIHN0ZDo6c3RyaW5nIG1fbWVzc2FnZTsKLXB1YmxpYzoKLQotICAgIEV4Y2VwdGlvbk1lc3NhZ2VNYXRjaGVyKHN0ZDo6c3RyaW5nIGNvbnN0JiBtZXNzYWdlKToKLSAgICAgICAgbV9tZXNzYWdlKG1lc3NhZ2UpCi0gICAge30KLQotICAgIGJvb2wgbWF0Y2goc3RkOjpleGNlcHRpb24gY29uc3QmIGV4KSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6c3RyaW5nIGRlc2NyaWJlKCkgY29uc3Qgb3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBFeGNlcHRpb24KLQotRXhjZXB0aW9uOjpFeGNlcHRpb25NZXNzYWdlTWF0Y2hlciBNZXNzYWdlKHN0ZDo6c3RyaW5nIGNvbnN0JiBtZXNzYWdlKTsKLQotfSAvLyBuYW1lc3BhY2UgTWF0Y2hlcnMKLX0gLy8gbmFtZXNwYWNlIENhdGNoCi0KLSNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfTUFUQ0hFUlNfRVhDRVBUSU9OX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tYXRjaGVyc19mbG9hdGluZy5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21hdGNoZXJzX2Zsb2F0aW5nLmNwcAppbmRleCBiY2NhMDcyLi45YmMwODJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21hdGNoZXJzX2Zsb2F0aW5nLmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21hdGNoZXJzX2Zsb2F0aW5nLmNwcApAQCAtMTEsMTAyICsxMSw3NSBAQAogI2luY2x1ZGUgImNhdGNoX3RvX3N0cmluZy5ocHAiCiAjaW5jbHVkZSAiY2F0Y2hfdG9zdHJpbmcuaCIKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjbWF0aD4KICNpbmNsdWRlIDxjc3RkbGliPgogI2luY2x1ZGUgPGNzdGRpbnQ+CiAjaW5jbHVkZSA8Y3N0cmluZz4KLSNpbmNsdWRlIDxzc3RyZWFtPgotI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgotI2luY2x1ZGUgPGlvbWFuaXA+Ci0jaW5jbHVkZSA8bGltaXRzPgorCituYW1lc3BhY2UgQ2F0Y2ggeworbmFtZXNwYWNlIE1hdGNoZXJzIHsKK25hbWVzcGFjZSBGbG9hdGluZyB7CitlbnVtIGNsYXNzIEZsb2F0aW5nUG9pbnRLaW5kIDogdWludDhfdCB7CisgICAgRmxvYXQsCisgICAgRG91YmxlCit9OworfQorfQorfQorCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBDb252ZXJ0ZXI7CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQ29udmVydGVyPGZsb2F0PiB7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZmxvYXQpID09IHNpemVvZihpbnQzMl90KSwgIkltcG9ydGFudCBVTFAgbWF0Y2hlciBhc3N1bXB0aW9uIHZpb2xhdGVkIik7CisgICAgQ29udmVydGVyKGZsb2F0IGYpIHsKKyAgICAgICAgc3RkOjptZW1jcHkoJmksICZmLCBzaXplb2YoZikpOworICAgIH0KKyAgICBpbnQzMl90IGk7Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IENvbnZlcnRlcjxkb3VibGU+IHsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkb3VibGUpID09IHNpemVvZihpbnQ2NF90KSwgIkltcG9ydGFudCBVTFAgbWF0Y2hlciBhc3N1bXB0aW9uIHZpb2xhdGVkIik7CisgICAgQ29udmVydGVyKGRvdWJsZSBkKSB7CisgICAgICAgIHN0ZDo6bWVtY3B5KCZpLCAmZCwgc2l6ZW9mKGQpKTsKKyAgICB9CisgICAgaW50NjRfdCBpOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CithdXRvIGNvbnZlcnQoVCB0KSAtPiBDb252ZXJ0ZXI8VD4geworICAgIHJldHVybiBDb252ZXJ0ZXI8VD4odCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBGUD4KK2Jvb2wgYWxtb3N0RXF1YWxVbHBzKEZQIGxocywgRlAgcmhzLCBpbnQgbWF4VWxwRGlmZikgeworICAgIC8vIENvbXBhcmlzb24gd2l0aCBOYU4gc2hvdWxkIGFsd2F5cyBiZSBmYWxzZS4KKyAgICAvLyBUaGlzIHdheSB3ZSBjYW4gcnVsZSBpdCBvdXQgYmVmb3JlIGdldHRpbmcgaW50byB0aGUgdWdseSBkZXRhaWxzCisgICAgaWYgKENhdGNoOjppc25hbihsaHMpIHx8IENhdGNoOjppc25hbihyaHMpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBhdXRvIGxjID0gY29udmVydChsaHMpOworICAgIGF1dG8gcmMgPSBjb252ZXJ0KHJocyk7CisKKyAgICBpZiAoKGxjLmkgPCAwKSAhPSAocmMuaSA8IDApKSB7CisgICAgICAgIC8vIFBvdGVudGlhbGx5IHdlIGNhbiBoYXZlICswIGFuZCAtMAorICAgICAgICByZXR1cm4gbGhzID09IHJoczsKKyAgICB9CisKKyAgICBhdXRvIHVscERpZmYgPSBzdGQ6OmFicyhsYy5pIC0gcmMuaSk7CisgICAgcmV0dXJuIHVscERpZmYgPD0gbWF4VWxwRGlmZjsKK30KKworfQogCiAKIG5hbWVzcGFjZSBDYXRjaCB7Ci1uYW1lc3BhY2UgewotCi0gICAgaW50MzJfdCBjb252ZXJ0KGZsb2F0IGYpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZmxvYXQpID09IHNpemVvZihpbnQzMl90KSwgIkltcG9ydGFudCBVTFAgbWF0Y2hlciBhc3N1bXB0aW9uIHZpb2xhdGVkIik7Ci0gICAgICAgIGludDMyX3QgaTsKLSAgICAgICAgc3RkOjptZW1jcHkoJmksICZmLCBzaXplb2YoZikpOwotICAgICAgICByZXR1cm4gaTsKLSAgICB9Ci0KLSAgICBpbnQ2NF90IGNvbnZlcnQoZG91YmxlIGQpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZG91YmxlKSA9PSBzaXplb2YoaW50NjRfdCksICJJbXBvcnRhbnQgVUxQIG1hdGNoZXIgYXNzdW1wdGlvbiB2aW9sYXRlZCIpOwotICAgICAgICBpbnQ2NF90IGk7Ci0gICAgICAgIHN0ZDo6bWVtY3B5KCZpLCAmZCwgc2l6ZW9mKGQpKTsKLSAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZQPgotICAgIGJvb2wgYWxtb3N0RXF1YWxVbHBzKEZQIGxocywgRlAgcmhzLCB1aW50NjRfdCBtYXhVbHBEaWZmKSB7Ci0gICAgICAgIC8vIENvbXBhcmlzb24gd2l0aCBOYU4gc2hvdWxkIGFsd2F5cyBiZSBmYWxzZS4KLSAgICAgICAgLy8gVGhpcyB3YXkgd2UgY2FuIHJ1bGUgaXQgb3V0IGJlZm9yZSBnZXR0aW5nIGludG8gdGhlIHVnbHkgZGV0YWlscwotICAgICAgICBpZiAoQ2F0Y2g6OmlzbmFuKGxocykgfHwgQ2F0Y2g6OmlzbmFuKHJocykpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gbGMgPSBjb252ZXJ0KGxocyk7Ci0gICAgICAgIGF1dG8gcmMgPSBjb252ZXJ0KHJocyk7Ci0KLSAgICAgICAgaWYgKChsYyA8IDApICE9IChyYyA8IDApKSB7Ci0gICAgICAgICAgICAvLyBQb3RlbnRpYWxseSB3ZSBjYW4gaGF2ZSArMCBhbmQgLTAKLSAgICAgICAgICAgIHJldHVybiBsaHMgPT0gcmhzOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byB1bHBEaWZmID0gc3RkOjphYnMobGMgLSByYyk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4odWxwRGlmZikgPD0gbWF4VWxwRGlmZjsKLSAgICB9Ci0KLSNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19HTE9CQUxfTkVYVEFGVEVSKQotCi0gICAgZmxvYXQgbmV4dGFmdGVyKGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgcmV0dXJuIDo6bmV4dGFmdGVyZih4LCB5KTsKLSAgICB9Ci0KLSAgICBkb3VibGUgbmV4dGFmdGVyKGRvdWJsZSB4LCBkb3VibGUgeSkgewotICAgICAgICByZXR1cm4gOjpuZXh0YWZ0ZXIoeCwgeSk7Ci0gICAgfQotCi0jZW5kaWYgLy8gXl5eIENBVENIX0NPTkZJR19HTE9CQUxfTkVYVEFGVEVSIF5eXgotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRlA+Ci1GUCBzdGVwKEZQIHN0YXJ0LCBGUCBkaXJlY3Rpb24sIHVpbnQ2NF90IHN0ZXBzKSB7Ci0gICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IHN0ZXBzOyArK2kpIHsKLSNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19HTE9CQUxfTkVYVEFGVEVSKQotICAgICAgICBzdGFydCA9IENhdGNoOjpuZXh0YWZ0ZXIoc3RhcnQsIGRpcmVjdGlvbik7Ci0jZWxzZQotICAgICAgICBzdGFydCA9IHN0ZDo6bmV4dGFmdGVyKHN0YXJ0LCBkaXJlY3Rpb24pOwotI2VuZGlmCi0gICAgfQotICAgIHJldHVybiBzdGFydDsKLX0KLQotLy8gUGVyZm9ybXMgZXF1aXZhbGVudCBjaGVjayBvZiBzdGQ6OmZhYnMobGhzIC0gcmhzKSA8PSBtYXJnaW4KLS8vIEJ1dCB3aXRob3V0IHRoZSBzdWJ0cmFjdGlvbiB0byBhbGxvdyBmb3IgSU5GSU5JVFkgaW4gY29tcGFyaXNvbgotYm9vbCBtYXJnaW5Db21wYXJpc29uKGRvdWJsZSBsaHMsIGRvdWJsZSByaHMsIGRvdWJsZSBtYXJnaW4pIHsKLSAgICByZXR1cm4gKGxocyArIG1hcmdpbiA+PSByaHMpICYmIChyaHMgKyBtYXJnaW4gPj0gbGhzKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEZsb2F0aW5nUG9pbnQ+Ci12b2lkIHdyaXRlKHN0ZDo6b3N0cmVhbSYgb3V0LCBGbG9hdGluZ1BvaW50IG51bSkgewotICAgIG91dCA8PCBzdGQ6OnNjaWVudGlmaWMKLSAgICAgICAgPDwgc3RkOjpzZXRwcmVjaXNpb24oc3RkOjpudW1lcmljX2xpbWl0czxGbG9hdGluZ1BvaW50Pjo6bWF4X2RpZ2l0czEwIC0gMSkKLSAgICAgICAgPDwgbnVtOwotfQotCi19IC8vIGVuZCBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KIG5hbWVzcGFjZSBNYXRjaGVycyB7CiBuYW1lc3BhY2UgRmxvYXRpbmcgewotCi0gICAgZW51bSBjbGFzcyBGbG9hdGluZ1BvaW50S2luZCA6IHVpbnQ4X3QgewotICAgICAgICBGbG9hdCwKLSAgICAgICAgRG91YmxlCi0gICAgfTsKLQotCiAgICAgV2l0aGluQWJzTWF0Y2hlcjo6V2l0aGluQWJzTWF0Y2hlcihkb3VibGUgdGFyZ2V0LCBkb3VibGUgbWFyZ2luKQogICAgICAgICA6bV90YXJnZXR7IHRhcmdldCB9LCBtX21hcmdpbnsgbWFyZ2luIH0gewogICAgICAgICBDQVRDSF9FTkZPUkNFKG1hcmdpbiA+PSAwLCAiSW52YWxpZCBtYXJnaW46ICIgPDwgbWFyZ2luIDw8ICcuJwpAQCAtMTI0LDExICs5NywxMCBAQAogICAgIH0KIAogCi0gICAgV2l0aGluVWxwc01hdGNoZXI6OldpdGhpblVscHNNYXRjaGVyKGRvdWJsZSB0YXJnZXQsIHVpbnQ2NF90IHVscHMsIEZsb2F0aW5nUG9pbnRLaW5kIGJhc2VUeXBlKQorICAgIFdpdGhpblVscHNNYXRjaGVyOjpXaXRoaW5VbHBzTWF0Y2hlcihkb3VibGUgdGFyZ2V0LCBpbnQgdWxwcywgRmxvYXRpbmdQb2ludEtpbmQgYmFzZVR5cGUpCiAgICAgICAgIDptX3RhcmdldHsgdGFyZ2V0IH0sIG1fdWxwc3sgdWxwcyB9LCBtX3R5cGV7IGJhc2VUeXBlIH0gewotICAgICAgICBDQVRDSF9FTkZPUkNFKG1fdHlwZSA9PSBGbG9hdGluZ1BvaW50S2luZDo6RG91YmxlCi0gICAgICAgICAgICAgICAgICAgfHwgbV91bHBzIDwgKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgpKCksCi0gICAgICAgICAgICAiUHJvdmlkZWQgVUxQIGlzIGltcG9zc2libHkgbGFyZ2UgZm9yIGEgZmxvYXQgY29tcGFyaXNvbi4iKTsKKyAgICAgICAgQ0FUQ0hfRU5GT1JDRSh1bHBzID49IDAsICJJbnZhbGlkIFVMUCBzZXR0aW5nOiAiIDw8IHVscHMgPDwgJy4nCisgICAgICAgICAgICA8PCAiIFVMUHMgaGF2ZSB0byBiZSBub24tbmVnYXRpdmUuIik7CiAgICAgfQogCiAjaWYgZGVmaW5lZChfX2NsYW5nX18pCkBAIC0xNTMsNjEgKzEyNSwxOCBAQAogI2VuZGlmCiAKICAgICBzdGQ6OnN0cmluZyBXaXRoaW5VbHBzTWF0Y2hlcjo6ZGVzY3JpYmUoKSBjb25zdCB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHJldDsKLQotICAgICAgICByZXQgPDwgImlzIHdpdGhpbiAiIDw8IG1fdWxwcyA8PCAiIFVMUHMgb2YgIjsKLQotICAgICAgICBpZiAobV90eXBlID09IEZsb2F0aW5nUG9pbnRLaW5kOjpGbG9hdCkgewotICAgICAgICAgICAgd3JpdGUocmV0LCBzdGF0aWNfY2FzdDxmbG9hdD4obV90YXJnZXQpKTsKLSAgICAgICAgICAgIHJldCA8PCAnZic7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3cml0ZShyZXQsIG1fdGFyZ2V0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldCA8PCAiIChbIjsKLSAgICAgICAgaWYgKG1fdHlwZSA9PSBGbG9hdGluZ1BvaW50S2luZDo6RG91YmxlKSB7Ci0gICAgICAgICAgICB3cml0ZShyZXQsIHN0ZXAobV90YXJnZXQsIHN0YXRpY19jYXN0PGRvdWJsZT4oLUlORklOSVRZKSwgbV91bHBzKSk7Ci0gICAgICAgICAgICByZXQgPDwgIiwgIjsKLSAgICAgICAgICAgIHdyaXRlKHJldCwgc3RlcChtX3RhcmdldCwgc3RhdGljX2Nhc3Q8ZG91YmxlPiggSU5GSU5JVFkpLCBtX3VscHMpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gY2FzdCBJTkZJTklUWSB0byBmbG9hdCBiZWNhdXNlIG9mIE1pbkdXLCBzZWUgIzE3ODIKLSAgICAgICAgICAgIHdyaXRlKHJldCwgc3RlcChzdGF0aWNfY2FzdDxmbG9hdD4obV90YXJnZXQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oLUlORklOSVRZKSwgbV91bHBzKSk7Ci0gICAgICAgICAgICByZXQgPDwgIiwgIjsKLSAgICAgICAgICAgIHdyaXRlKHJldCwgc3RlcChzdGF0aWNfY2FzdDxmbG9hdD4obV90YXJnZXQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oIElORklOSVRZKSwgbV91bHBzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0IDw8ICJdKSI7Ci0KLSAgICAgICAgcmV0dXJuIHJldC5zdHIoKTsKLSAgICB9Ci0KLSAgICBXaXRoaW5SZWxNYXRjaGVyOjpXaXRoaW5SZWxNYXRjaGVyKGRvdWJsZSB0YXJnZXQsIGRvdWJsZSBlcHNpbG9uKToKLSAgICAgICAgbV90YXJnZXQodGFyZ2V0KSwKLSAgICAgICAgbV9lcHNpbG9uKGVwc2lsb24pewotICAgICAgICBDQVRDSF9FTkZPUkNFKG1fZXBzaWxvbiA+PSAwLiwgIlJlbGF0aXZlIGNvbXBhcmlzb24gd2l0aCBlcHNpbG9uIDwgIDAgZG9lcyBub3QgbWFrZSBzZW5zZS4iKTsKLSAgICAgICAgQ0FUQ0hfRU5GT1JDRShtX2Vwc2lsb24gIDwgMS4sICJSZWxhdGl2ZSBjb21wYXJpc29uIHdpdGggZXBzaWxvbiA+PSAxIGRvZXMgbm90IG1ha2Ugc2Vuc2UuIik7Ci0gICAgfQotCi0gICAgYm9vbCBXaXRoaW5SZWxNYXRjaGVyOjptYXRjaChkb3VibGUgY29uc3QmIG1hdGNoZWUpIGNvbnN0IHsKLSAgICAgICAgY29uc3QgYXV0byByZWxNYXJnaW4gPSBtX2Vwc2lsb24gKiAoc3RkOjptYXgpKHN0ZDo6ZmFicyhtYXRjaGVlKSwgc3RkOjpmYWJzKG1fdGFyZ2V0KSk7Ci0gICAgICAgIHJldHVybiBtYXJnaW5Db21wYXJpc29uKG1hdGNoZWUsIG1fdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzaW5mKHJlbE1hcmdpbik/IDAgOiByZWxNYXJnaW4pOwotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIFdpdGhpblJlbE1hdGNoZXI6OmRlc2NyaWJlKCkgY29uc3QgewotICAgICAgICBDYXRjaDo6UmV1c2FibGVTdHJpbmdTdHJlYW0gc3N0cjsKLSAgICAgICAgc3N0ciA8PCAiYW5kICIgPDwgbV90YXJnZXQgPDwgIiBhcmUgd2l0aGluICIgPDwgbV9lcHNpbG9uICogMTAwLiA8PCAiJSBvZiBlYWNoIG90aGVyIjsKLSAgICAgICAgcmV0dXJuIHNzdHIuc3RyKCk7CisgICAgICAgIHJldHVybiAiaXMgd2l0aGluICIgKyBDYXRjaDo6dG9fc3RyaW5nKG1fdWxwcykgKyAiIFVMUHMgb2YgIiArIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KG1fdGFyZ2V0KSArICgobV90eXBlID09IEZsb2F0aW5nUG9pbnRLaW5kOjpGbG9hdCk/ICJmIiA6ICIiKTsKICAgICB9CiAKIH0vLyBuYW1lc3BhY2UgRmxvYXRpbmcKIAogCiAKLUZsb2F0aW5nOjpXaXRoaW5VbHBzTWF0Y2hlciBXaXRoaW5VTFAoZG91YmxlIHRhcmdldCwgdWludDY0X3QgbWF4VWxwRGlmZikgeworRmxvYXRpbmc6OldpdGhpblVscHNNYXRjaGVyIFdpdGhpblVMUChkb3VibGUgdGFyZ2V0LCBpbnQgbWF4VWxwRGlmZikgewogICAgIHJldHVybiBGbG9hdGluZzo6V2l0aGluVWxwc01hdGNoZXIodGFyZ2V0LCBtYXhVbHBEaWZmLCBGbG9hdGluZzo6RmxvYXRpbmdQb2ludEtpbmQ6OkRvdWJsZSk7CiB9CiAKLUZsb2F0aW5nOjpXaXRoaW5VbHBzTWF0Y2hlciBXaXRoaW5VTFAoZmxvYXQgdGFyZ2V0LCB1aW50NjRfdCBtYXhVbHBEaWZmKSB7CitGbG9hdGluZzo6V2l0aGluVWxwc01hdGNoZXIgV2l0aGluVUxQKGZsb2F0IHRhcmdldCwgaW50IG1heFVscERpZmYpIHsKICAgICByZXR1cm4gRmxvYXRpbmc6OldpdGhpblVscHNNYXRjaGVyKHRhcmdldCwgbWF4VWxwRGlmZiwgRmxvYXRpbmc6OkZsb2F0aW5nUG9pbnRLaW5kOjpGbG9hdCk7CiB9CiAKQEAgLTIxNSwyMyArMTQ0LDYgQEAKICAgICByZXR1cm4gRmxvYXRpbmc6OldpdGhpbkFic01hdGNoZXIodGFyZ2V0LCBtYXJnaW4pOwogfQogCi1GbG9hdGluZzo6V2l0aGluUmVsTWF0Y2hlciBXaXRoaW5SZWwoZG91YmxlIHRhcmdldCwgZG91YmxlIGVwcykgewotICAgIHJldHVybiBGbG9hdGluZzo6V2l0aGluUmVsTWF0Y2hlcih0YXJnZXQsIGVwcyk7Ci19Ci0KLUZsb2F0aW5nOjpXaXRoaW5SZWxNYXRjaGVyIFdpdGhpblJlbChkb3VibGUgdGFyZ2V0KSB7Ci0gICAgcmV0dXJuIEZsb2F0aW5nOjpXaXRoaW5SZWxNYXRjaGVyKHRhcmdldCwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjplcHNpbG9uKCkgKiAxMDApOwotfQotCi1GbG9hdGluZzo6V2l0aGluUmVsTWF0Y2hlciBXaXRoaW5SZWwoZmxvYXQgdGFyZ2V0LCBmbG9hdCBlcHMpIHsKLSAgICByZXR1cm4gRmxvYXRpbmc6OldpdGhpblJlbE1hdGNoZXIodGFyZ2V0LCBlcHMpOwotfQotCi1GbG9hdGluZzo6V2l0aGluUmVsTWF0Y2hlciBXaXRoaW5SZWwoZmxvYXQgdGFyZ2V0KSB7Ci0gICAgcmV0dXJuIEZsb2F0aW5nOjpXaXRoaW5SZWxNYXRjaGVyKHRhcmdldCwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmVwc2lsb24oKSAqIDEwMCk7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgTWF0Y2hlcnMKIH0gLy8gbmFtZXNwYWNlIENhdGNoCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnNfZmxvYXRpbmcuaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnNfZmxvYXRpbmcuaAppbmRleCAwZjJmZjQ5Li5lZTA3NzUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21hdGNoZXJzX2Zsb2F0aW5nLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tYXRjaGVyc19mbG9hdGluZy5oCkBAIC05LDYgKzksOSBAQAogCiAjaW5jbHVkZSAiY2F0Y2hfbWF0Y2hlcnMuaCIKIAorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1ZGUgPGNtYXRoPgorCiBuYW1lc3BhY2UgQ2F0Y2ggewogbmFtZXNwYWNlIE1hdGNoZXJzIHsKIApAQCAtMjYsNDMgKzI5LDIzIEBACiAgICAgICAgIH07CiAKICAgICAgICAgc3RydWN0IFdpdGhpblVscHNNYXRjaGVyIDogTWF0Y2hlckJhc2U8ZG91YmxlPiB7Ci0gICAgICAgICAgICBXaXRoaW5VbHBzTWF0Y2hlcihkb3VibGUgdGFyZ2V0LCB1aW50NjRfdCB1bHBzLCBGbG9hdGluZ1BvaW50S2luZCBiYXNlVHlwZSk7CisgICAgICAgICAgICBXaXRoaW5VbHBzTWF0Y2hlcihkb3VibGUgdGFyZ2V0LCBpbnQgdWxwcywgRmxvYXRpbmdQb2ludEtpbmQgYmFzZVR5cGUpOwogICAgICAgICAgICAgYm9vbCBtYXRjaChkb3VibGUgY29uc3QmIG1hdGNoZWUpIGNvbnN0IG92ZXJyaWRlOwogICAgICAgICAgICAgc3RkOjpzdHJpbmcgZGVzY3JpYmUoKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIGRvdWJsZSBtX3RhcmdldDsKLSAgICAgICAgICAgIHVpbnQ2NF90IG1fdWxwczsKKyAgICAgICAgICAgIGludCBtX3VscHM7CiAgICAgICAgICAgICBGbG9hdGluZ1BvaW50S2luZCBtX3R5cGU7CiAgICAgICAgIH07CiAKLSAgICAgICAgLy8gR2l2ZW4gSUVFRS03NTQgZm9ybWF0IGZvciBmbG9hdHMgYW5kIGRvdWJsZXMsIHdlIGNhbiBhc3N1bWUKLSAgICAgICAgLy8gdGhhdCBmbG9hdCAtPiBkb3VibGUgcHJvbW90aW9uIGlzIGxvc3NsZXNzLiBHaXZlbiB0aGlzLCB3ZSBjYW4KLSAgICAgICAgLy8gYXNzdW1lIHRoYXQgaWYgd2UgZG8gdGhlIHN0YW5kYXJkIHJlbGF0aXZlIGNvbXBhcmlzb24gb2YKLSAgICAgICAgLy8gfGxocyAtIHJoc3wgPD0gZXBzaWxvbiAqIG1heChmYWJzKGxocyksIGZhYnMocmhzKSksIHRoZW4gd2UgZ2V0Ci0gICAgICAgIC8vIHRoZSBzYW1lIHJlc3VsdCBpZiB3ZSBkbyB0aGlzIGZvciBmbG9hdHMsIGFzIGlmIHdlIGRvIHRoaXMgZm9yCi0gICAgICAgIC8vIGRvdWJsZXMgdGhhdCB3ZXJlIHByb21vdGVkIGZyb20gZmxvYXRzLgotICAgICAgICBzdHJ1Y3QgV2l0aGluUmVsTWF0Y2hlciA6IE1hdGNoZXJCYXNlPGRvdWJsZT4gewotICAgICAgICAgICAgV2l0aGluUmVsTWF0Y2hlcihkb3VibGUgdGFyZ2V0LCBkb3VibGUgZXBzaWxvbik7Ci0gICAgICAgICAgICBib29sIG1hdGNoKGRvdWJsZSBjb25zdCYgbWF0Y2hlZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyBkZXNjcmliZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgZG91YmxlIG1fdGFyZ2V0OwotICAgICAgICAgICAgZG91YmxlIG1fZXBzaWxvbjsKLSAgICAgICAgfTsKIAogICAgIH0gLy8gbmFtZXNwYWNlIEZsb2F0aW5nCiAKICAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBjcmVhdGUgdGhlIGFjdHVhbCBtYXRjaGVyIG9iamVjdHMuCiAgICAgLy8gVGhpcyBhbGxvd3MgdGhlIHR5cGVzIHRvIGJlIGluZmVycmVkCi0gICAgRmxvYXRpbmc6OldpdGhpblVscHNNYXRjaGVyIFdpdGhpblVMUChkb3VibGUgdGFyZ2V0LCB1aW50NjRfdCBtYXhVbHBEaWZmKTsKLSAgICBGbG9hdGluZzo6V2l0aGluVWxwc01hdGNoZXIgV2l0aGluVUxQKGZsb2F0IHRhcmdldCwgdWludDY0X3QgbWF4VWxwRGlmZik7CisgICAgRmxvYXRpbmc6OldpdGhpblVscHNNYXRjaGVyIFdpdGhpblVMUChkb3VibGUgdGFyZ2V0LCBpbnQgbWF4VWxwRGlmZik7CisgICAgRmxvYXRpbmc6OldpdGhpblVscHNNYXRjaGVyIFdpdGhpblVMUChmbG9hdCB0YXJnZXQsIGludCBtYXhVbHBEaWZmKTsKICAgICBGbG9hdGluZzo6V2l0aGluQWJzTWF0Y2hlciBXaXRoaW5BYnMoZG91YmxlIHRhcmdldCwgZG91YmxlIG1hcmdpbik7Ci0gICAgRmxvYXRpbmc6OldpdGhpblJlbE1hdGNoZXIgV2l0aGluUmVsKGRvdWJsZSB0YXJnZXQsIGRvdWJsZSBlcHMpOwotICAgIC8vIGRlZmF1bHRzIGVwc2lsb24gdG8gMTAwKm51bWVyaWNfbGltaXRzPGRvdWJsZT46OmVwc2lsb24oKQotICAgIEZsb2F0aW5nOjpXaXRoaW5SZWxNYXRjaGVyIFdpdGhpblJlbChkb3VibGUgdGFyZ2V0KTsKLSAgICBGbG9hdGluZzo6V2l0aGluUmVsTWF0Y2hlciBXaXRoaW5SZWwoZmxvYXQgdGFyZ2V0LCBmbG9hdCBlcHMpOwotICAgIC8vIGRlZmF1bHRzIGVwc2lsb24gdG8gMTAwKm51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigpCi0gICAgRmxvYXRpbmc6OldpdGhpblJlbE1hdGNoZXIgV2l0aGluUmVsKGZsb2F0IHRhcmdldCk7CiAKIH0gLy8gbmFtZXNwYWNlIE1hdGNoZXJzCiB9IC8vIG5hbWVzcGFjZSBDYXRjaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tZXNzYWdlLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbWVzc2FnZS5jcHAKaW5kZXggNjRjODE3Yi4uZmE3ZTg3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tZXNzYWdlLmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21lc3NhZ2UuY3BwCkBAIC05LDcgKzksNiBAQAogI2luY2x1ZGUgImNhdGNoX21lc3NhZ2UuaCIKICNpbmNsdWRlICJjYXRjaF9pbnRlcmZhY2VzX2NhcHR1cmUuaCIKICNpbmNsdWRlICJjYXRjaF91bmNhdWdodF9leGNlcHRpb25zLmgiCi0jaW5jbHVkZSAiY2F0Y2hfZW5mb3JjZS5oIgogCiAjaW5jbHVkZSA8Y2Fzc2VydD4KICNpbmNsdWRlIDxzdGFjaz4KQEAgLTc3LDE1ICs3Niw2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbmFtZXMuc3Vic3RyKHN0YXJ0LCBlbmQgLSBzdGFydCArIDEpOwogICAgICAgICB9OwotICAgICAgICBhdXRvIHNraXBxID0gWyZdIChzaXplX3Qgc3RhcnQsIGNoYXIgcXVvdGUpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byBpID0gc3RhcnQgKyAxOyBpIDwgbmFtZXMuc2l6ZSgpIDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWVzW2ldID09IHF1b3RlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgICAgICBpZiAobmFtZXNbaV0gPT0gJ1xcJykKLSAgICAgICAgICAgICAgICAgICAgKytpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfRVJST1IoIkNBUFRVUkUgcGFyc2luZyBlbmNvdW50ZXJlZCB1bm1hdGNoZWQgcXVvdGUiKTsKLSAgICAgICAgfTsKIAogICAgICAgICBzaXplX3Qgc3RhcnQgPSAwOwogICAgICAgICBzdGQ6OnN0YWNrPGNoYXI+IG9wZW5pbmdzOwpAQCAtMTA2LDIyICs5NiwxOCBAQAogLy8gICAgICAgICAgIGNhc2UgJz4nOgogICAgICAgICAgICAgICAgIG9wZW5pbmdzLnBvcCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnIic6Ci0gICAgICAgICAgICBjYXNlICdcJyc6Ci0gICAgICAgICAgICAgICAgcG9zID0gc2tpcHEocG9zLCBjKTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgJywnOgotICAgICAgICAgICAgICAgIGlmIChzdGFydCAhPSBwb3MgJiYgb3BlbmluZ3MuZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGlmIChzdGFydCAhPSBwb3MgJiYgb3BlbmluZ3Muc2l6ZSgpID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgbV9tZXNzYWdlcy5lbXBsYWNlX2JhY2sobWFjcm9OYW1lLCBsaW5lSW5mbywgcmVzdWx0VHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbWVzc2FnZXMuYmFjaygpLm1lc3NhZ2UgPSBzdGF0aWNfY2FzdDxzdGQ6OnN0cmluZz4odHJpbW1lZChzdGFydCwgcG9zKSk7CisgICAgICAgICAgICAgICAgICAgIG1fbWVzc2FnZXMuYmFjaygpLm1lc3NhZ2UgPSB0cmltbWVkKHN0YXJ0LCBwb3MpOwogICAgICAgICAgICAgICAgICAgICBtX21lc3NhZ2VzLmJhY2soKS5tZXNzYWdlICs9ICIgOj0gIjsKICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBwb3M7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGFzc2VydChvcGVuaW5ncy5lbXB0eSgpICYmICJNaXNtYXRjaGVkIG9wZW5pbmdzIik7CisgICAgICAgIGFzc2VydChvcGVuaW5ncy5zaXplKCkgPT0gMCAmJiAiTWlzbWF0Y2hlZCBvcGVuaW5ncyIpOwogICAgICAgICBtX21lc3NhZ2VzLmVtcGxhY2VfYmFjayhtYWNyb05hbWUsIGxpbmVJbmZvLCByZXN1bHRUeXBlKTsKLSAgICAgICAgbV9tZXNzYWdlcy5iYWNrKCkubWVzc2FnZSA9IHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nPih0cmltbWVkKHN0YXJ0LCBuYW1lcy5zaXplKCkgLSAxKSk7CisgICAgICAgIG1fbWVzc2FnZXMuYmFjaygpLm1lc3NhZ2UgPSB0cmltbWVkKHN0YXJ0LCBuYW1lcy5zaXplKCkgLSAxKTsKICAgICAgICAgbV9tZXNzYWdlcy5iYWNrKCkubWVzc2FnZSArPSAiIDo9ICI7CiAgICAgfQogICAgIENhcHR1cmVyOjp+Q2FwdHVyZXIoKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21ldGEuaHBwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tZXRhLmhwcAppbmRleCA0ZWNhN2VmLi4zNTA4YTQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21ldGEuaHBwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbWV0YS5ocHAKQEAgLTEyLDM5ICsxMiw2NiBAQAogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogCiBuYW1lc3BhY2UgQ2F0Y2ggewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IGFsd2F5c19mYWxzZSA6IHN0ZDo6ZmFsc2VfdHlwZSB7fTsKK3RlbXBsYXRlPCB0eXBlbmFtZS4uLiA+CitzdHJ1Y3QgVHlwZUxpc3Qge307CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWU+IHN0cnVjdCB0cnVlX2dpdmVuIDogc3RkOjp0cnVlX3R5cGUge307Ci0gICAgc3RydWN0IGlzX2NhbGxhYmxlX3Rlc3RlciB7Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW4sIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAgIHRydWVfZ2l2ZW48ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPEZ1bj4oKShzdGQ6OmRlY2x2YWw8QXJncz4oKS4uLikpPiBzdGF0aWMgdGVzdChpbnQpOwotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+Ci0gICAgICAgIHN0ZDo6ZmFsc2VfdHlwZSBzdGF0aWMgdGVzdCguLi4pOwordGVtcGxhdGU8IHR5cGVuYW1lLi4uID4KK3N0cnVjdCBhcHBlbmQ7CisKK3RlbXBsYXRlPCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgTDEKKyAgICAsIHR5cGVuYW1lLi4uRTEKKyAgICAsIHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBMMgorICAgICwgdHlwZW5hbWUuLi5FMgorPgorc3RydWN0IGFwcGVuZDwgTDE8RTEuLi4+LCBMMjxFMi4uLj4gPiB7CisgICAgdXNpbmcgdHlwZSA9IEwxPEUxLi4uLCBFMi4uLj47Cit9OworCit0ZW1wbGF0ZTwgdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzIEwxCisgICAgLCB0eXBlbmFtZS4uLkUxCisgICAgLCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgTDIKKyAgICAsIHR5cGVuYW1lLi4uRTIKKyAgICAsIHR5cGVuYW1lLi4uUmVzdAorPgorc3RydWN0IGFwcGVuZDwgTDE8RTEuLi4+LCBMMjxFMi4uLj4sIFJlc3QuLi4+IHsKKyAgICB1c2luZyB0eXBlID0gdHlwZW5hbWUgYXBwZW5kPCBMMTxFMS4uLiwgRTIuLi4+LCBSZXN0Li4uID46OnR5cGU7Cit9OworCit0ZW1wbGF0ZTwgdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzCisgICAgLCB0eXBlbmFtZS4uLgorPgorc3RydWN0IHJld3JhcDsKKwordGVtcGxhdGU8IHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBDb250YWluZXIKKyAgICAsIHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBMaXN0CisgICAgLCB0eXBlbmFtZS4uLmVsZW1zCis+CitzdHJ1Y3QgcmV3cmFwPENvbnRhaW5lciwgTGlzdDxlbGVtcy4uLj4+IHsKKyAgICB1c2luZyB0eXBlID0gVHlwZUxpc3Q8IENvbnRhaW5lcjwgZWxlbXMuLi4gPiA+OworfTsKKwordGVtcGxhdGU8IHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBDb250YWluZXIKKyAgICAsIHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBMaXN0CisgICAgLCBjbGFzcy4uLkVsZW1zCisgICAgLCB0eXBlbmFtZS4uLkVsZW1lbnRzPgorICAgIHN0cnVjdCByZXdyYXA8Q29udGFpbmVyLCBMaXN0PEVsZW1zLi4uPiwgRWxlbWVudHMuLi4+IHsKKyAgICB1c2luZyB0eXBlID0gdHlwZW5hbWUgYXBwZW5kPFR5cGVMaXN0PENvbnRhaW5lcjxFbGVtcy4uLj4+LCB0eXBlbmFtZSByZXdyYXA8Q29udGFpbmVyLCBFbGVtZW50cy4uLj46OnR5cGU+Ojp0eXBlOworfTsKKwordGVtcGxhdGU8IHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcy4uLkNvbnRhaW5lcnMgPgorc3RydWN0IGNvbWJpbmUgeworICAgIHRlbXBsYXRlPCB0eXBlbmFtZS4uLlR5cGVzID4KKyAgICBzdHJ1Y3Qgd2l0aF90eXBlcyB7CisgICAgICAgIHRlbXBsYXRlPCB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+IGNsYXNzIEZpbmFsID4KKyAgICAgICAgc3RydWN0IGludG8geworICAgICAgICAgICAgdXNpbmcgdHlwZSA9IHR5cGVuYW1lIGFwcGVuZDxGaW5hbDw+LCB0eXBlbmFtZSByZXdyYXA8Q29udGFpbmVycywgVHlwZXMuLi4+Ojp0eXBlLi4uPjo6dHlwZTsKKyAgICAgICAgfTsKICAgICB9OworfTsKIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBpc19jYWxsYWJsZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW4sIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgc3RydWN0IGlzX2NhbGxhYmxlPEZ1bihBcmdzLi4uKT4gOiBkZWNsdHlwZShpc19jYWxsYWJsZV90ZXN0ZXI6OnRlc3Q8RnVuLCBBcmdzLi4uPigwKSkge307Ci0KLQotI2lmIGRlZmluZWQoX19jcHBfbGliX2lzX2ludm9jYWJsZSkgJiYgX19jcHBfbGliX2lzX2ludm9jYWJsZSA+PSAyMDE3MDMKLSAgICAvLyBzdGQ6OnJlc3VsdF9vZiBpcyBkZXByZWNhdGVkIGluIEMrKzE3IGFuZCByZW1vdmVkIGluIEMrKzIwLiBIZW5jZSwgaXQgaXMKLSAgICAvLyByZXBsYWNlZCB3aXRoIHN0ZDo6aW52b2tlX3Jlc3VsdCBoZXJlLiBBbHNvICpfdCBmb3JtYXQgaXMgcHJlZmVycmVkIG92ZXIKLSAgICAvLyB0eXBlbmFtZSAqOjp0eXBlIGZvcm1hdC4KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVT4KLSAgICB1c2luZyBGdW5jdGlvblJldHVyblR5cGUgPSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxzdGQ6OnJlbW92ZV9jdl90PHN0ZDo6aW52b2tlX3Jlc3VsdF90PEZ1bmMsIFU+Pj47Ci0jZWxzZQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBVPgotICAgIHVzaW5nIEZ1bmN0aW9uUmV0dXJuVHlwZSA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jdjx0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxGdW5jKFUpPjo6dHlwZT46OnR5cGU+Ojp0eXBlOwotI2VuZGlmCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IGFsd2F5c19mYWxzZSA6IHN0ZDo6ZmFsc2VfdHlwZSB7fTsKIAogfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKIAotbmFtZXNwYWNlIG1wbF97Ci0gICAgc3RydWN0IG5hOwotfQotCiAjZW5kaWYgLy8gVFdPQkxVRUNVQkVTX0NBVENIX01FVEFfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX29iamMuaHBwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9vYmpjLmhwcAppbmRleCBhMWM4ZTA3Li5mOTI3ZTBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX29iamMuaHBwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfb2JqYy5ocHAKQEAgLTExNiw3ICsxMTYsNyBAQAogICAgICAgICAgICAgICAgICAgICBhcmNTYWZlUmVsZWFzZSggbV9zdWJzdHIgKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBib29sIG1hdGNoKCBOU1N0cmluZyogc3RyICkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICAgICAgICAgIGJvb2wgbWF0Y2goIE5TU3RyaW5nKiBjb25zdCYgc3RyICkgY29uc3Qgb3ZlcnJpZGUgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgIHN0cnVjdCBFcXVhbHMgOiBTdHJpbmdIb2xkZXIgewogICAgICAgICAgICAgICAgIEVxdWFscyggTlNTdHJpbmcqIHN1YnN0ciApIDogU3RyaW5nSG9sZGVyKCBzdWJzdHIgKXt9CiAKLSAgICAgICAgICAgICAgICBib29sIG1hdGNoKCBOU1N0cmluZyogc3RyICkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICAgICAgICAgIGJvb2wgbWF0Y2goIE5TU3RyaW5nKiBjb25zdCYgc3RyICkgY29uc3Qgb3ZlcnJpZGUgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gIChzdHIgIT0gbmlsIHx8IG1fc3Vic3RyID09IG5pbCApICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0ciBpc0VxdWFsVG9TdHJpbmc6bV9zdWJzdHJdOwogICAgICAgICAgICAgICAgIH0KQEAgLTEzOSw3ICsxMzksNyBAQAogICAgICAgICAgICAgc3RydWN0IENvbnRhaW5zIDogU3RyaW5nSG9sZGVyIHsKICAgICAgICAgICAgICAgICBDb250YWlucyggTlNTdHJpbmcqIHN1YnN0ciApIDogU3RyaW5nSG9sZGVyKCBzdWJzdHIgKXt9CiAKLSAgICAgICAgICAgICAgICBib29sIG1hdGNoKCBOU1N0cmluZyogc3RyICkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICAgICAgICAgIGJvb2wgbWF0Y2goIE5TU3RyaW5nKiBjb25zdCYgc3RyICkgY29uc3Qgb3ZlcnJpZGUgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gIChzdHIgIT0gbmlsIHx8IG1fc3Vic3RyID09IG5pbCApICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0ciByYW5nZU9mU3RyaW5nOm1fc3Vic3RyXS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kOwogICAgICAgICAgICAgICAgIH0KQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgICAgICAgICAgc3RydWN0IFN0YXJ0c1dpdGggOiBTdHJpbmdIb2xkZXIgewogICAgICAgICAgICAgICAgIFN0YXJ0c1dpdGgoIE5TU3RyaW5nKiBzdWJzdHIgKSA6IFN0cmluZ0hvbGRlciggc3Vic3RyICl7fQogCi0gICAgICAgICAgICAgICAgYm9vbCBtYXRjaCggTlNTdHJpbmcqIHN0ciApIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgICAgICAgICBib29sIG1hdGNoKCBOU1N0cmluZyogY29uc3QmIHN0ciApIGNvbnN0IG92ZXJyaWRlIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICAoc3RyICE9IG5pbCB8fCBtX3N1YnN0ciA9PSBuaWwgKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHIgcmFuZ2VPZlN0cmluZzptX3N1YnN0cl0ubG9jYXRpb24gPT0gMDsKICAgICAgICAgICAgICAgICB9CkBAIC0xNjQsNyArMTY0LDcgQEAKICAgICAgICAgICAgIHN0cnVjdCBFbmRzV2l0aCA6IFN0cmluZ0hvbGRlciB7CiAgICAgICAgICAgICAgICAgRW5kc1dpdGgoIE5TU3RyaW5nKiBzdWJzdHIgKSA6IFN0cmluZ0hvbGRlciggc3Vic3RyICl7fQogCi0gICAgICAgICAgICAgICAgYm9vbCBtYXRjaCggTlNTdHJpbmcqIHN0ciApIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgICAgICAgICBib29sIG1hdGNoKCBOU1N0cmluZyogY29uc3QmIHN0ciApIGNvbnN0IG92ZXJyaWRlIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICAoc3RyICE9IG5pbCB8fCBtX3N1YnN0ciA9PSBuaWwgKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHIgcmFuZ2VPZlN0cmluZzptX3N1YnN0cl0ubG9jYXRpb24gPT0gW3N0ciBsZW5ndGhdIC0gW21fc3Vic3RyIGxlbmd0aF07CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9wcmVwcm9jZXNzb3IuaHBwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9wcmVwcm9jZXNzb3IuaHBwCmluZGV4IGYxYmQwOTAuLmZhZjQxZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfcHJlcHJvY2Vzc29yLmhwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3ByZXByb2Nlc3Nvci5ocHAKQEAgLTY4LDE2OSArNjgsMjIgQEAKICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfU1RSSU5HSVpFX1dJVEhPVVRfUEFSRU5TKHBhcmFtKSAoSU5URVJOQUxfQ0FUQ0hfU1RSSU5HSVpFKElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMocGFyYW0pKSArIDEpCiAjZW5kaWYKIAotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9NQUtFX05BTUVTUEFDRTIoLi4uKSBuc18jI19fVkFfQVJHU19fCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX01BS0VfTkFNRVNQQUNFKG5hbWUpIElOVEVSTkFMX0NBVENIX01BS0VfTkFNRVNQQUNFMihuYW1lKQotCiAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoLi4uKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkQxKElOVEVSTkFMX0NBVENIX0RFRiBfX1ZBX0FSR1NfXykKIAorI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9VTklRVUVfTkFNRTIoTmFtZSwgLi4uKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9VTklRVUVfTkFNRTMoTmFtZSwgX19WQV9BUkdTX18pCiAjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9NQUtFX1RZUEVfTElTVDIoLi4uKSBkZWNsdHlwZShnZXRfd3JhcHBlcjxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TX0dFTihfX1ZBX0FSR1NfXyk+KCkpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX01BS0VfVFlQRV9MSVNUKC4uLikgSU5URVJOQUxfQ0FUQ0hfTUFLRV9UWVBFX0xJU1QyKElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoX19WQV9BUkdTX18pKQorI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9VTklRVUVfTkFNRTMoTmFtZSwuLi4pIE5hbWUgIiAtICIgI19fVkFfQVJHU19fCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1VOSVFVRV9OQU1FKE5hbWUsLi4uKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9VTklRVUVfTkFNRTIoTmFtZSwgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhfX1ZBX0FSR1NfXykpCiAjZWxzZQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9NQUtFX1RZUEVfTElTVDIoLi4uKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoZGVjbHR5cGUoZ2V0X3dyYXBwZXI8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU19HRU4oX19WQV9BUkdTX18pPigpKSkKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfTUFLRV9UWVBFX0xJU1QoLi4uKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoSU5URVJOQUxfQ0FUQ0hfTUFLRV9UWVBFX0xJU1QyKElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoX19WQV9BUkdTX18pKSkKKy8vIE1TVkMgaXMgYWRkaW5nIGV4dHJhIHNwYWNlIGFuZCBuZWVkcyBtb3JlIGNhbGxzIHRvIHByb3Blcmx5IHJlbW92ZSAoKQorI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9VTklRVUVfTkFNRTMoTmFtZSwuLi4pIE5hbWUgIiAtIiAjX19WQV9BUkdTX18KKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVU5JUVVFX05BTUUxKE5hbWUsIC4uLikgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVU5JUVVFX05BTUUyKE5hbWUsIF9fVkFfQVJHU19fKQorI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9VTklRVUVfTkFNRShOYW1lLCAuLi4pIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1VOSVFVRV9OQU1FMShOYW1lLCBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhfX1ZBX0FSR1NfXykpKQogI2VuZGlmCiAKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfTUFLRV9UWVBFX0xJU1RTX0ZST01fVFlQRVMoLi4uKVwKLSAgICBDQVRDSF9SRUNfTElTVChJTlRFUk5BTF9DQVRDSF9NQUtFX1RZUEVfTElTVCxfX1ZBX0FSR1NfXykKKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfTUFLRV9UWVBFX0xJU1QodHlwZXMpIENhdGNoOjpUeXBlTGlzdDxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHR5cGVzKT4KIAotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzFfQVJHKF8wKSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKF8wKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzJfQVJHKF8wLCBfMSkgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhfMCksIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfMV9BUkcoXzEpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfM19BUkcoXzAsIF8xLCBfMikgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhfMCksIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfMl9BUkcoXzEsIF8yKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzRfQVJHKF8wLCBfMSwgXzIsIF8zKSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKF8wKSwgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU18zX0FSRyhfMSwgXzIsIF8zKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzVfQVJHKF8wLCBfMSwgXzIsIF8zLCBfNCkgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhfMCksIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfNF9BUkcoXzEsIF8yLCBfMywgXzQpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfNl9BUkcoXzAsIF8xLCBfMiwgXzMsIF80LCBfNSkgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhfMCksIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfNV9BUkcoXzEsIF8yLCBfMywgXzQsIF81KQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzdfQVJHKF8wLCBfMSwgXzIsIF8zLCBfNCwgXzUsIF82KSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKF8wKSwgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU182X0FSRyhfMSwgXzIsIF80LCBfNSwgXzYpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfOF9BUkcoXzAsIF8xLCBfMiwgXzMsIF80LCBfNSwgXzYsIF83KSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKF8wKSwgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU183X0FSRyhfMSwgXzIsIF8zLCBfNCwgXzUsIF82LCBfNykKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU185X0FSRyhfMCwgXzEsIF8yLCBfMywgXzQsIF81LCBfNiwgXzcsIF84KSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKF8wKSwgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU184X0FSRyhfMSwgXzIsIF8zLCBfNCwgXzUsIF82LCBfNywgXzgpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfMTBfQVJHKF8wLCBfMSwgXzIsIF8zLCBfNCwgXzUsIF82LCBfNywgXzgsIF85KSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKF8wKSwgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU185X0FSRyhfMSwgXzIsIF8zLCBfNCwgXzUsIF82LCBfNywgXzgsIF85KQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzExX0FSRyhfMCwgXzEsIF8yLCBfMywgXzQsIF81LCBfNiwgXzcsIF84LCBfOSwgXzEwKSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKF8wKSwgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU18xMF9BUkcoXzEsIF8yLCBfMywgXzQsIF81LCBfNiwgXzcsIF84LCBfOSwgXzEwKQotCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX1ZBX05BUkdTX0lNUEwoXzAsIF8xLCBfMiwgXzMsIF80LCBfNSwgXzYsIF83LCBfOCwgXzksIF8xMCwgTiwgLi4uKSBOCi0KLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVFlQRV9HRU5cCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4+IHN0cnVjdCBUeXBlTGlzdCB7fTtcCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi5Ucz5cCi0gICAgY29uc3RleHByIGF1dG8gZ2V0X3dyYXBwZXIoKSBub2V4Y2VwdCAtPiBUeXBlTGlzdDxUcy4uLj4geyByZXR1cm4ge307IH1cCi0gICAgdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzLi4uPiBzdHJ1Y3QgVGVtcGxhdGVUeXBlTGlzdHt9O1wKLSAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MuLi5Dcz5cCi0gICAgY29uc3RleHByIGF1dG8gZ2V0X3dyYXBwZXIoKSBub2V4Y2VwdCAtPiBUZW1wbGF0ZVR5cGVMaXN0PENzLi4uPiB7IHJldHVybiB7fTsgfVwKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj5cCi0gICAgc3RydWN0IGFwcGVuZDtcCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4+XAotICAgIHN0cnVjdCByZXdyYXA7XAotICAgIHRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcywgdHlwZW5hbWUuLi4+XAotICAgIHN0cnVjdCBjcmVhdGU7XAotICAgIHRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcywgdHlwZW5hbWU+XAotICAgIHN0cnVjdCBjb252ZXJ0O1wKLSAgICBcCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gXAotICAgIHN0cnVjdCBhcHBlbmQ8VD4geyB1c2luZyB0eXBlID0gVDsgfTtcCi0gICAgdGVtcGxhdGU8IHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBMMSwgdHlwZW5hbWUuLi5FMSwgdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzIEwyLCB0eXBlbmFtZS4uLkUyLCB0eXBlbmFtZS4uLlJlc3Q+XAotICAgIHN0cnVjdCBhcHBlbmQ8TDE8RTEuLi4+LCBMMjxFMi4uLj4sIFJlc3QuLi4+IHsgdXNpbmcgdHlwZSA9IHR5cGVuYW1lIGFwcGVuZDxMMTxFMS4uLixFMi4uLj4sIFJlc3QuLi4+Ojp0eXBlOyB9O1wKLSAgICB0ZW1wbGF0ZTwgdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzIEwxLCB0eXBlbmFtZS4uLkUxLCB0eXBlbmFtZS4uLlJlc3Q+XAotICAgIHN0cnVjdCBhcHBlbmQ8TDE8RTEuLi4+LCBUeXBlTGlzdDxtcGxfOjpuYT4sIFJlc3QuLi4+IHsgdXNpbmcgdHlwZSA9IEwxPEUxLi4uPjsgfTtcCi0gICAgXAotICAgIHRlbXBsYXRlPCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgQ29udGFpbmVyLCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgTGlzdCwgdHlwZW5hbWUuLi5lbGVtcz5cCi0gICAgc3RydWN0IHJld3JhcDxUZW1wbGF0ZVR5cGVMaXN0PENvbnRhaW5lcj4sIExpc3Q8ZWxlbXMuLi4+PiB7IHVzaW5nIHR5cGUgPSBUeXBlTGlzdDxDb250YWluZXI8ZWxlbXMuLi4+PjsgfTtcCi0gICAgdGVtcGxhdGU8IHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBDb250YWluZXIsIHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBMaXN0LCBjbGFzcy4uLkVsZW1zLCB0eXBlbmFtZS4uLkVsZW1lbnRzPlwKLSAgICBzdHJ1Y3QgcmV3cmFwPFRlbXBsYXRlVHlwZUxpc3Q8Q29udGFpbmVyPiwgTGlzdDxFbGVtcy4uLj4sIEVsZW1lbnRzLi4uPiB7IHVzaW5nIHR5cGUgPSB0eXBlbmFtZSBhcHBlbmQ8VHlwZUxpc3Q8Q29udGFpbmVyPEVsZW1zLi4uPj4sIHR5cGVuYW1lIHJld3JhcDxUZW1wbGF0ZVR5cGVMaXN0PENvbnRhaW5lcj4sIEVsZW1lbnRzLi4uPjo6dHlwZT46OnR5cGU7IH07XAotICAgIFwKLSAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+IGNsYXNzIEZpbmFsLCB0ZW1wbGF0ZTwgdHlwZW5hbWUuLi4+IGNsYXNzLi4uQ29udGFpbmVycywgdHlwZW5hbWUuLi5UeXBlcz5cCi0gICAgc3RydWN0IGNyZWF0ZTxGaW5hbCwgVGVtcGxhdGVUeXBlTGlzdDxDb250YWluZXJzLi4uPiwgVHlwZUxpc3Q8VHlwZXMuLi4+PiB7IHVzaW5nIHR5cGUgPSB0eXBlbmFtZSBhcHBlbmQ8RmluYWw8PiwgdHlwZW5hbWUgcmV3cmFwPFRlbXBsYXRlVHlwZUxpc3Q8Q29udGFpbmVycz4sIFR5cGVzLi4uPjo6dHlwZS4uLj46OnR5cGU7IH07XAotICAgIHRlbXBsYXRlPHRlbXBsYXRlIDx0eXBlbmFtZS4uLj4gY2xhc3MgRmluYWwsIHRlbXBsYXRlIDx0eXBlbmFtZS4uLj4gY2xhc3MgTGlzdCwgdHlwZW5hbWUuLi5Ucz5cCi0gICAgc3RydWN0IGNvbnZlcnQ8RmluYWwsIExpc3Q8VHMuLi4+PiB7IHVzaW5nIHR5cGUgPSB0eXBlbmFtZSBhcHBlbmQ8RmluYWw8PixUeXBlTGlzdDxUcz4uLi4+Ojp0eXBlOyB9OwotCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX05UVFBfMShzaWduYXR1cmUsIC4uLilcCi0gICAgdGVtcGxhdGU8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhzaWduYXR1cmUpPiBzdHJ1Y3QgTnR0cHt9O1wKLSAgICB0ZW1wbGF0ZTxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHNpZ25hdHVyZSk+XAotICAgIGNvbnN0ZXhwciBhdXRvIGdldF93cmFwcGVyKCkgbm9leGNlcHQgLT4gTnR0cDxfX1ZBX0FSR1NfXz4geyByZXR1cm4ge307IH0gXAotICAgIHRlbXBsYXRlPHRlbXBsYXRlPElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoc2lnbmF0dXJlKT4gY2xhc3MuLi4+IHN0cnVjdCBOdHRwVGVtcGxhdGVUeXBlTGlzdHt9O1wKLSAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHNpZ25hdHVyZSk+IGNsYXNzLi4uQ3M+XAotICAgIGNvbnN0ZXhwciBhdXRvIGdldF93cmFwcGVyKCkgbm9leGNlcHQgLT4gTnR0cFRlbXBsYXRlVHlwZUxpc3Q8Q3MuLi4+IHsgcmV0dXJuIHt9OyB9IFwKLSAgICBcCi0gICAgdGVtcGxhdGU8IHRlbXBsYXRlPElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoc2lnbmF0dXJlKT4gY2xhc3MgQ29udGFpbmVyLCB0ZW1wbGF0ZTxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHNpZ25hdHVyZSk+IGNsYXNzIExpc3QsIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoc2lnbmF0dXJlKT5cCi0gICAgc3RydWN0IHJld3JhcDxOdHRwVGVtcGxhdGVUeXBlTGlzdDxDb250YWluZXI+LCBMaXN0PF9fVkFfQVJHU19fPj4geyB1c2luZyB0eXBlID0gVHlwZUxpc3Q8Q29udGFpbmVyPF9fVkFfQVJHU19fPj47IH07XAotICAgIHRlbXBsYXRlPCB0ZW1wbGF0ZTxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHNpZ25hdHVyZSk+IGNsYXNzIENvbnRhaW5lciwgdGVtcGxhdGU8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhzaWduYXR1cmUpPiBjbGFzcyBMaXN0LCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHNpZ25hdHVyZSksIHR5cGVuYW1lLi4uRWxlbWVudHM+XAotICAgIHN0cnVjdCByZXdyYXA8TnR0cFRlbXBsYXRlVHlwZUxpc3Q8Q29udGFpbmVyPiwgTGlzdDxfX1ZBX0FSR1NfXz4sIEVsZW1lbnRzLi4uPiB7IHVzaW5nIHR5cGUgPSB0eXBlbmFtZSBhcHBlbmQ8VHlwZUxpc3Q8Q29udGFpbmVyPF9fVkFfQVJHU19fPj4sIHR5cGVuYW1lIHJld3JhcDxOdHRwVGVtcGxhdGVUeXBlTGlzdDxDb250YWluZXI+LCBFbGVtZW50cy4uLj46OnR5cGU+Ojp0eXBlOyB9O1wKLSAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+IGNsYXNzIEZpbmFsLCB0ZW1wbGF0ZTxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHNpZ25hdHVyZSk+IGNsYXNzLi4uQ29udGFpbmVycywgdHlwZW5hbWUuLi5UeXBlcz5cCi0gICAgc3RydWN0IGNyZWF0ZTxGaW5hbCwgTnR0cFRlbXBsYXRlVHlwZUxpc3Q8Q29udGFpbmVycy4uLj4sIFR5cGVMaXN0PFR5cGVzLi4uPj4geyB1c2luZyB0eXBlID0gdHlwZW5hbWUgYXBwZW5kPEZpbmFsPD4sIHR5cGVuYW1lIHJld3JhcDxOdHRwVGVtcGxhdGVUeXBlTGlzdDxDb250YWluZXJzPiwgVHlwZXMuLi4+Ojp0eXBlLi4uPjo6dHlwZTsgfTsKLQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUMChUZXN0TmFtZSkKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVDEoVGVzdE5hbWUsIHNpZ25hdHVyZSlcCi0gICAgdGVtcGxhdGU8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhzaWduYXR1cmUpPlwKLSAgICBzdGF0aWMgdm9pZCBUZXN0TmFtZSgpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfWChUZXN0TmFtZSwgc2lnbmF0dXJlLCAuLi4pXAotICAgIHRlbXBsYXRlPElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoc2lnbmF0dXJlKT5cCi0gICAgc3RhdGljIHZvaWQgVGVzdE5hbWUoKQotCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVDAoVGVzdE5hbWUpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVDEoVGVzdE5hbWUsIHNpZ25hdHVyZSlcCi0gICAgdGVtcGxhdGU8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhzaWduYXR1cmUpPlwKLSAgICBzdGF0aWMgdm9pZCBUZXN0TmFtZSgpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9YKFRlc3ROYW1lLCBzaWduYXR1cmUsLi4uKVwKLSAgICB0ZW1wbGF0ZTxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHNpZ25hdHVyZSk+XAotICAgIHN0YXRpYyB2b2lkIFRlc3ROYW1lKCkKLQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSMChUZXN0RnVuYywgc2lnbmF0dXJlKVwKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPlwKLSAgICB2b2lkIHJlZ190ZXN0KFR5cGVMaXN0PFR5cGU+LCBDYXRjaDo6TmFtZUFuZFRhZ3MgbmFtZUFuZFRhZ3MpXAotICAgIHtcCi0gICAgICAgIENhdGNoOjpBdXRvUmVnKCBDYXRjaDo6bWFrZVRlc3RJbnZva2VyKCZUZXN0RnVuYzxUeXBlPiksIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDYXRjaDo6U3RyaW5nUmVmKCksIG5hbWVBbmRUYWdzKTtcCi0gICAgfQotCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVIoVGVzdEZ1bmMsIHNpZ25hdHVyZSwgLi4uKVwKLSAgICB0ZW1wbGF0ZTxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHNpZ25hdHVyZSk+XAotICAgIHZvaWQgcmVnX3Rlc3QoTnR0cDxfX1ZBX0FSR1NfXz4sIENhdGNoOjpOYW1lQW5kVGFncyBuYW1lQW5kVGFncylcCi0gICAge1wKLSAgICAgICAgQ2F0Y2g6OkF1dG9SZWcoIENhdGNoOjptYWtlVGVzdEludm9rZXIoJlRlc3RGdW5jPF9fVkFfQVJHU19fPiksIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDYXRjaDo6U3RyaW5nUmVmKCksIG5hbWVBbmRUYWdzKTtcCi0gICAgfQotCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVJfTUVUSE9EMChUZXN0TmFtZSwgc2lnbmF0dXJlLCAuLi4pXAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+XAotICAgIHZvaWQgcmVnX3Rlc3QoVHlwZUxpc3Q8VHlwZT4sIENhdGNoOjpTdHJpbmdSZWYgY2xhc3NOYW1lLCBDYXRjaDo6TmFtZUFuZFRhZ3MgbmFtZUFuZFRhZ3MpXAotICAgIHtcCi0gICAgICAgIENhdGNoOjpBdXRvUmVnKCBDYXRjaDo6bWFrZVRlc3RJbnZva2VyKCZUZXN0TmFtZTxUeXBlPjo6dGVzdCksIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBjbGFzc05hbWUsIG5hbWVBbmRUYWdzKTtcCi0gICAgfQotCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVJfTUVUSE9EKFRlc3ROYW1lLCBzaWduYXR1cmUsIC4uLilcCi0gICAgdGVtcGxhdGU8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhzaWduYXR1cmUpPlwKLSAgICB2b2lkIHJlZ190ZXN0KE50dHA8X19WQV9BUkdTX18+LCBDYXRjaDo6U3RyaW5nUmVmIGNsYXNzTmFtZSwgQ2F0Y2g6Ok5hbWVBbmRUYWdzIG5hbWVBbmRUYWdzKVwKLSAgICB7XAotICAgICAgICBDYXRjaDo6QXV0b1JlZyggQ2F0Y2g6Om1ha2VUZXN0SW52b2tlcigmVGVzdE5hbWU8X19WQV9BUkdTX18+Ojp0ZXN0KSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIGNsYXNzTmFtZSwgbmFtZUFuZFRhZ3MpO1wKLSAgICB9Ci0KLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9NRVRIT0QwKFRlc3ROYW1lLCBDbGFzc05hbWUpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EMShUZXN0TmFtZSwgQ2xhc3NOYW1lLCBzaWduYXR1cmUpXAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiBcCi0gICAgc3RydWN0IFRlc3ROYW1lIDogSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhDbGFzc05hbWUpPFRlc3RUeXBlPiB7IFwKLSAgICAgICAgdm9pZCB0ZXN0KCk7XAotICAgIH0KLQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRF9YKFRlc3ROYW1lLCBDbGFzc05hbWUsIHNpZ25hdHVyZSwgLi4uKVwKLSAgICB0ZW1wbGF0ZTxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHNpZ25hdHVyZSk+IFwKLSAgICBzdHJ1Y3QgVGVzdE5hbWUgOiBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKENsYXNzTmFtZSk8X19WQV9BUkdTX18+IHsgXAotICAgICAgICB2b2lkIHRlc3QoKTtcCi0gICAgfQotCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0QwKFRlc3ROYW1lKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EMShUZXN0TmFtZSwgc2lnbmF0dXJlKVwKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gXAotICAgIHZvaWQgSU5URVJOQUxfQ0FUQ0hfTUFLRV9OQU1FU1BBQ0UoVGVzdE5hbWUpOjpUZXN0TmFtZTxUZXN0VHlwZT46OnRlc3QoKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EX1goVGVzdE5hbWUsIHNpZ25hdHVyZSwgLi4uKVwKLSAgICB0ZW1wbGF0ZTxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHNpZ25hdHVyZSk+IFwKLSAgICB2b2lkIElOVEVSTkFMX0NBVENIX01BS0VfTkFNRVNQQUNFKFRlc3ROYW1lKTo6VGVzdE5hbWU8X19WQV9BUkdTX18+Ojp0ZXN0KCkKLQotI2lmbmRlZiBDQVRDSF9DT05GSUdfVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfTlRUUF8wCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX05UVFBfR0VOKC4uLikgSU5URVJOQUxfQ0FUQ0hfVkFfTkFSR1NfSU1QTChfX1ZBX0FSR1NfXywgSU5URVJOQUxfQ0FUQ0hfTlRUUF8xKF9fVkFfQVJHU19fKSwgSU5URVJOQUxfQ0FUQ0hfTlRUUF8xKF9fVkFfQVJHU19fKSwgSU5URVJOQUxfQ0FUQ0hfTlRUUF8xKF9fVkFfQVJHU19fKSwgSU5URVJOQUxfQ0FUQ0hfTlRUUF8xKF9fVkFfQVJHU19fKSwgSU5URVJOQUxfQ0FUQ0hfTlRUUF8xKF9fVkFfQVJHU19fKSwgSU5URVJOQUxfQ0FUQ0hfTlRUUF8xKCBfX1ZBX0FSR1NfXyksIElOVEVSTkFMX0NBVENIX05UVFBfMSggX19WQV9BUkdTX18pLCBJTlRFUk5BTF9DQVRDSF9OVFRQXzEoIF9fVkFfQVJHU19fKSwgSU5URVJOQUxfQ0FUQ0hfTlRUUF8xKCBfX1ZBX0FSR1NfXyksSU5URVJOQUxfQ0FUQ0hfTlRUUF8xKCBfX1ZBX0FSR1NfXyksIElOVEVSTkFMX0NBVENIX05UVFBfMCkKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRChUZXN0TmFtZSwgLi4uKSBJTlRFUk5BTF9DQVRDSF9WQV9OQVJHU19JTVBMKCAiZHVtbXkiLCBfX1ZBX0FSR1NfXywgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRF9YLElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0RfWCwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0RfWCwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EX1gsSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRF9YLElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0RfWCwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRDEsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0QwKShUZXN0TmFtZSwgX19WQV9BUkdTX18pCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EKFRlc3ROYW1lLCBDbGFzc05hbWUsIC4uLikgSU5URVJOQUxfQ0FUQ0hfVkFfTkFSR1NfSU1QTCggImR1bW15IiwgX19WQV9BUkdTX18sIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EX1gsSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9NRVRIT0RfWCwgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9NRVRIT0RfWCwgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9NRVRIT0RfWCwgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9NRVRIT0RfWCwgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9NRVRIT0RfWCwgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9NRVRIT0RfWCxJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRF9YLElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EX1gsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EMSwgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9NRVRIT0QwKShUZXN0TmFtZSwgQ2xhc3NOYW1lLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdfTUVUSE9EX0dFTihUZXN0TmFtZSwgLi4uKSBJTlRFUk5BTF9DQVRDSF9WQV9OQVJHU19JTVBMKCAiZHVtbXkiLCBfX1ZBX0FSR1NfXywgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUl9NRVRIT0QsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVJfTUVUSE9ELCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSX01FVEhPRCwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUl9NRVRIT0QsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVJfTUVUSE9ELCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSX01FVEhPRCwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUl9NRVRIT0QsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVJfTUVUSE9ELCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSX01FVEhPRCwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUl9NRVRIT0QwLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSX01FVEhPRDApKFRlc3ROYW1lLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdfR0VOKFRlc3RGdW5jLCAuLi4pIElOVEVSTkFMX0NBVENIX1ZBX05BUkdTX0lNUEwoICJkdW1teSIsIF9fVkFfQVJHU19fLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSMCwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUjApKFRlc3RGdW5jLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUKFRlc3ROYW1lLCAuLi4pIElOVEVSTkFMX0NBVENIX1ZBX05BUkdTX0lNUEwoICJkdW1teSIsIF9fVkFfQVJHU19fLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfWCwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfWCwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfWCwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX1gsSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX1gsSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUMSwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUMCkoVGVzdE5hbWUsIF9fVkFfQVJHU19fKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUKFRlc3ROYW1lLCAuLi4pIElOVEVSTkFMX0NBVENIX1ZBX05BUkdTX0lNUEwoICJkdW1teSIsIF9fVkFfQVJHU19fLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX1gsSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX1gsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfWCwgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9YLElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfWCxJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX1gsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1QxLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUMCkoVGVzdE5hbWUsIF9fVkFfQVJHU19fKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TX0dFTiguLi4pIElOVEVSTkFMX0NBVENIX1ZBX05BUkdTX0lNUEwoX19WQV9BUkdTX18sIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfMTFfQVJHLElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfMTBfQVJHLElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfOV9BUkcsSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU184X0FSRyxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzdfQVJHLElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfNl9BUkcsSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU181X0FSRyxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzRfQVJHLElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfM19BUkcsSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU18yX0FSRyxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzFfQVJHKShfX1ZBX0FSR1NfXykKLSNlbHNlCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX05UVFBfMChzaWduYXR1cmUpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX05UVFBfR0VOKC4uLikgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKElOVEVSTkFMX0NBVENIX1ZBX05BUkdTX0lNUEwoX19WQV9BUkdTX18sIElOVEVSTkFMX0NBVENIX05UVFBfMSwgSU5URVJOQUxfQ0FUQ0hfTlRUUF8xLCBJTlRFUk5BTF9DQVRDSF9OVFRQXzEsIElOVEVSTkFMX0NBVENIX05UVFBfMSwgSU5URVJOQUxfQ0FUQ0hfTlRUUF8xLCBJTlRFUk5BTF9DQVRDSF9OVFRQXzEsIElOVEVSTkFMX0NBVENIX05UVFBfMSwgSU5URVJOQUxfQ0FUQ0hfTlRUUF8xLCBJTlRFUk5BTF9DQVRDSF9OVFRQXzEsSU5URVJOQUxfQ0FUQ0hfTlRUUF8xLCBJTlRFUk5BTF9DQVRDSF9OVFRQXzApKCBfX1ZBX0FSR1NfXykpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0QoVGVzdE5hbWUsIC4uLikgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKElOVEVSTkFMX0NBVENIX1ZBX05BUkdTX0lNUEwoICJkdW1teSIsIF9fVkFfQVJHU19fLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EX1gsSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0RfWCwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0RfWCxJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EX1gsSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EMSwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRDApKFRlc3ROYW1lLCBfX1ZBX0FSR1NfXykpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EKFRlc3ROYW1lLCBDbGFzc05hbWUsIC4uLikgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKElOVEVSTkFMX0NBVENIX1ZBX05BUkdTX0lNUEwoICJkdW1teSIsIF9fVkFfQVJHU19fLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRF9YLElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EX1gsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EX1gsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EX1gsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EX1gsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EX1gsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EX1gsSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9NRVRIT0RfWCxJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRF9YLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRDEsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EMCkoVGVzdE5hbWUsIENsYXNzTmFtZSwgX19WQV9BUkdTX18pKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR19NRVRIT0RfR0VOKFRlc3ROYW1lLCAuLi4pIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyhJTlRFUk5BTF9DQVRDSF9WQV9OQVJHU19JTVBMKCAiZHVtbXkiLCBfX1ZBX0FSR1NfXywgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUl9NRVRIT0QsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVJfTUVUSE9ELCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSX01FVEhPRCwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUl9NRVRIT0QsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVJfTUVUSE9ELCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSX01FVEhPRCwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUl9NRVRIT0QsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVJfTUVUSE9ELCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSX01FVEhPRCwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUl9NRVRIT0QwLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSX01FVEhPRDApKFRlc3ROYW1lLCBfX1ZBX0FSR1NfXykpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX05UVFBfUkVHX0dFTihUZXN0RnVuYywgLi4uKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoSU5URVJOQUxfQ0FUQ0hfVkFfTkFSR1NfSU1QTCggImR1bW15IiwgX19WQV9BUkdTX18sIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVIsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVIsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVIsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVIsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVIsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVIsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVIsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVIsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVIsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVIwLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSMCkoVGVzdEZ1bmMsIF9fVkFfQVJHU19fKSkKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUKFRlc3ROYW1lLCAuLi4pIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyhJTlRFUk5BTF9DQVRDSF9WQV9OQVJHU19JTVBMKCAiZHVtbXkiLCBfX1ZBX0FSR1NfXywgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfWCwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfWCwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9YLElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9YLElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVDEsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVDApKFRlc3ROYW1lLCBfX1ZBX0FSR1NfXykpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1QoVGVzdE5hbWUsIC4uLikgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKElOVEVSTkFMX0NBVENIX1ZBX05BUkdTX0lNUEwoICJkdW1teSIsIF9fVkFfQVJHU19fLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX1gsSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX1gsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfWCwgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9YLElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfWCxJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX1gsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1QxLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUMCkoVGVzdE5hbWUsIF9fVkFfQVJHU19fKSkKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU19HRU4oLi4uKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoSU5URVJOQUxfQ0FUQ0hfVkFfTkFSR1NfSU1QTChfX1ZBX0FSR1NfXywgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU18xMV9BUkcsSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU18xMF9BUkcsSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU185X0FSRyxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzhfQVJHLElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfN19BUkcsSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU182X0FSRyxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzVfQVJHLElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfNF9BUkcsSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU18zX0FSRyxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzJfQVJHLElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfMV9BUkcpKF9fVkFfQVJHU19fKSkKLSNlbmRpZgorI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9NQUtFX1RZUEVfTElTVFNfRlJPTV9UWVBFUyh0eXBlcylcCisgICAgQ0FUQ0hfUkVDX0xJU1QoSU5URVJOQUxfQ0FUQ0hfTUFLRV9UWVBFX0xJU1QsSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyh0eXBlcykpCiAKICNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfUFJFUFJPQ0VTU09SX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9yYW5kb21fbnVtYmVyX2dlbmVyYXRvci5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLmNwcAppbmRleCAxZWYwOGQ0Li5lYzhhNWViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLmNwcApAQCAtNyw2NyArNywyMyBAQAogCiAjaW5jbHVkZSAiY2F0Y2hfcmFuZG9tX251bWJlcl9nZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjYXRjaF9jb250ZXh0LmgiCi0jaW5jbHVkZSAiY2F0Y2hfcnVuX2NvbnRleHQuaCIKICNpbmNsdWRlICJjYXRjaF9pbnRlcmZhY2VzX2NvbmZpZy5oIgogCiBuYW1lc3BhY2UgQ2F0Y2ggewogCi1uYW1lc3BhY2UgewotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNwcmFnbWEgd2FybmluZyhwdXNoKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDE0NikgLy8gd2UgbmVnYXRlIHVpbnQzMiBkdXJpbmcgdGhlIHJvdGF0ZQotI2VuZGlmCi0gICAgICAgIC8vIFNhZmUgcm90ciBpbXBsZW1lbnRhdGlvbiB0aGFua3MgdG8gSm9obiBSZWdlaHIKLSAgICAgICAgdWludDMyX3Qgcm90YXRlX3JpZ2h0KHVpbnQzMl90IHZhbCwgdWludDMyX3QgY291bnQpIHsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IG1hc2sgPSAzMTsKLSAgICAgICAgICAgIGNvdW50ICY9IG1hc2s7Ci0gICAgICAgICAgICByZXR1cm4gKHZhbCA+PiBjb3VudCkgfCAodmFsIDw8ICgtY291bnQgJiBtYXNrKSk7Ci0gICAgICAgIH0KLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5pbmcocG9wKQotI2VuZGlmCi0KLX0KLQotCi0gICAgU2ltcGxlUGNnMzI6OlNpbXBsZVBjZzMyKHJlc3VsdF90eXBlIHNlZWRfKSB7Ci0gICAgICAgIHNlZWQoc2VlZF8pOworICAgIHN0ZDo6bXQxOTkzNyYgcm5nKCkgeworICAgICAgICBzdGF0aWMgc3RkOjptdDE5OTM3IHNfcm5nOworICAgICAgICByZXR1cm4gc19ybmc7CiAgICAgfQogCi0KLSAgICB2b2lkIFNpbXBsZVBjZzMyOjpzZWVkKHJlc3VsdF90eXBlIHNlZWRfKSB7Ci0gICAgICAgIG1fc3RhdGUgPSAwOwotICAgICAgICAoKnRoaXMpKCk7Ci0gICAgICAgIG1fc3RhdGUgKz0gc2VlZF87Ci0gICAgICAgICgqdGhpcykoKTsKLSAgICB9Ci0KLSAgICB2b2lkIFNpbXBsZVBjZzMyOjpkaXNjYXJkKHVpbnQ2NF90IHNraXApIHsKLSAgICAgICAgLy8gV2UgY291bGQgaW1wbGVtZW50IHRoaXMgdG8gcnVuIGluIE8obG9nIG4pIHN0ZXBzLCBidXQgdGhpcwotICAgICAgICAvLyBzaG91bGQgc3VmZmljZSBmb3Igb3VyIHVzZSBjYXNlLgotICAgICAgICBmb3IgKHVpbnQ2NF90IHMgPSAwOyBzIDwgc2tpcDsgKytzKSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDx2b2lkPigoKnRoaXMpKCkpOworICAgIHZvaWQgc2VlZFJuZyggSUNvbmZpZyBjb25zdCYgY29uZmlnICkgeworICAgICAgICBpZiggY29uZmlnLnJuZ1NlZWQoKSAhPSAwICkgeworICAgICAgICAgICAgc3RkOjpzcmFuZCggY29uZmlnLnJuZ1NlZWQoKSApOworICAgICAgICAgICAgcm5nKCkuc2VlZCggY29uZmlnLnJuZ1NlZWQoKSApOwogICAgICAgICB9CiAgICAgfQogCi0gICAgU2ltcGxlUGNnMzI6OnJlc3VsdF90eXBlIFNpbXBsZVBjZzMyOjpvcGVyYXRvcigpKCkgewotICAgICAgICAvLyBwcmVwYXJlIHRoZSBvdXRwdXQgdmFsdWUKLSAgICAgICAgY29uc3QgdWludDMyX3QgeG9yc2hpZnRlZCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PigoKG1fc3RhdGUgPj4gMTh1KSBeIG1fc3RhdGUpID4+IDI3dSk7Ci0gICAgICAgIGNvbnN0IGF1dG8gb3V0cHV0ID0gcm90YXRlX3JpZ2h0KHhvcnNoaWZ0ZWQsIG1fc3RhdGUgPj4gNTl1KTsKLQotICAgICAgICAvLyBhZHZhbmNlIHN0YXRlCi0gICAgICAgIG1fc3RhdGUgPSBtX3N0YXRlICogNjM2NDEzNjIyMzg0Njc5MzAwNVVMTCArIHNfaW5jOwotCi0gICAgICAgIHJldHVybiBvdXRwdXQ7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KFNpbXBsZVBjZzMyIGNvbnN0JiBsaHMsIFNpbXBsZVBjZzMyIGNvbnN0JiByaHMpIHsKLSAgICAgICAgcmV0dXJuIGxocy5tX3N0YXRlID09IHJocy5tX3N0YXRlOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVQY2czMiBjb25zdCYgbGhzLCBTaW1wbGVQY2czMiBjb25zdCYgcmhzKSB7Ci0gICAgICAgIHJldHVybiBsaHMubV9zdGF0ZSAhPSByaHMubV9zdGF0ZTsKKyAgICB1bnNpZ25lZCBpbnQgcm5nU2VlZCgpIHsKKyAgICAgICAgcmV0dXJuIGdldEN1cnJlbnRDb250ZXh0KCkuZ2V0Q29uZmlnKCktPnJuZ1NlZWQoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLmggYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLmgKaW5kZXggNzlkNjI3OS4uODE3Yjc4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9yYW5kb21fbnVtYmVyX2dlbmVyYXRvci5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfcmFuZG9tX251bWJlcl9nZW5lcmF0b3IuaApAQCAtNyw1MiArNywxNyBAQAogI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfUkFORE9NX05VTUJFUl9HRU5FUkFUT1JfSF9JTkNMVURFRAogI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfUkFORE9NX05VTUJFUl9HRU5FUkFUT1JfSF9JTkNMVURFRAogCi0jaW5jbHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8cmFuZG9tPgogCiBuYW1lc3BhY2UgQ2F0Y2ggewogCi0gICAgLy8gVGhpcyBpcyBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBDKysxMSBVbmlmb3JtIFJhbmRvbSBOdW1iZXIKLSAgICAvLyBHZW5lcmF0b3IuIEl0IGRvZXMgbm90IHByb3ZpZGUgYWxsIG9wZXJhdG9ycywgYmVjYXVzZSBDYXRjaDIKLSAgICAvLyBkb2VzIG5vdCB1c2UgaXQsIGJ1dCBpdCBzaG91bGQgYmVoYXZlIGFzIGV4cGVjdGVkIGluc2lkZSBzdGRsaWIncwotICAgIC8vIGRpc3RyaWJ1dGlvbnMuCi0gICAgLy8gVGhlIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBQQ0cgZmFtaWx5IChodHRwOi8vcGNnLXJhbmRvbS5vcmcpCi0gICAgY2xhc3MgU2ltcGxlUGNnMzIgewotICAgICAgICB1c2luZyBzdGF0ZV90eXBlID0gc3RkOjp1aW50NjRfdDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHVzaW5nIHJlc3VsdF90eXBlID0gc3RkOjp1aW50MzJfdDsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciByZXN1bHRfdHlwZSAobWluKSgpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgcmVzdWx0X3R5cGUgKG1heCkoKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cmVzdWx0X3R5cGU+KC0xKTsKLSAgICAgICAgfQorICAgIHN0cnVjdCBJQ29uZmlnOwogCi0gICAgICAgIC8vIFByb3ZpZGUgc29tZSBkZWZhdWx0IGluaXRpYWwgc3RhdGUgZm9yIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yCi0gICAgICAgIFNpbXBsZVBjZzMyKCk6U2ltcGxlUGNnMzIoMHhlZDc0M2NjNFUpIHt9CisgICAgc3RkOjptdDE5OTM3JiBybmcoKTsKKyAgICB2b2lkIHNlZWRSbmcoIElDb25maWcgY29uc3QmIGNvbmZpZyApOworICAgIHVuc2lnbmVkIGludCBybmdTZWVkKCk7CiAKLSAgICAgICAgZXhwbGljaXQgU2ltcGxlUGNnMzIocmVzdWx0X3R5cGUgc2VlZF8pOwotCi0gICAgICAgIHZvaWQgc2VlZChyZXN1bHRfdHlwZSBzZWVkXyk7Ci0gICAgICAgIHZvaWQgZGlzY2FyZCh1aW50NjRfdCBza2lwKTsKLQotICAgICAgICByZXN1bHRfdHlwZSBvcGVyYXRvcigpKCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KFNpbXBsZVBjZzMyIGNvbnN0JiBsaHMsIFNpbXBsZVBjZzMyIGNvbnN0JiByaHMpOwotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KFNpbXBsZVBjZzMyIGNvbnN0JiBsaHMsIFNpbXBsZVBjZzMyIGNvbnN0JiByaHMpOwotCi0gICAgICAgIC8vIEluIHRoZW9yeSB3ZSBhbHNvIG5lZWQgb3BlcmF0b3I8PCBhbmQgb3BlcmF0b3I+PgotICAgICAgICAvLyBJbiBwcmFjdGljZSB3ZSBkbyBub3QgdXNlIHRoZW0sIHNvIHdlIHdpbGwgc2tpcCB0aGVtIGZvciBub3cKLQotCi0gICAgICAgIHN0ZDo6dWludDY0X3QgbV9zdGF0ZTsKLSAgICAgICAgLy8gVGhpcyBwYXJ0IG9mIHRoZSBzdGF0ZSBkZXRlcm1pbmVzIHdoaWNoICJzdHJlYW0iIG9mIHRoZSBudW1iZXJzCi0gICAgICAgIC8vIGlzIGNob3NlbiAtLSB3ZSB0YWtlIGl0IGFzIGEgY29uc3RhbnQgZm9yIENhdGNoMiwgc28gd2Ugb25seQotICAgICAgICAvLyBuZWVkIHRvIGRlYWwgd2l0aCBzZWVkaW5nIHRoZSBtYWluIHN0YXRlLgotICAgICAgICAvLyBQaWNrZWQgYnkgcmVhZGluZyA4IGJ5dGVzIGZyb20gYC9kZXYvcmFuZG9tYCA6LSkKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6dWludDY0X3Qgc19pbmMgPSAoMHgxM2VkMGNjNTNmOTM5NDc2VUxMIDw8IDFVTEwpIHwgMVVMTDsKLSAgICB9OwotCi19IC8vIGVuZCBuYW1lc3BhY2UgQ2F0Y2gKK30KIAogI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9SQU5ET01fTlVNQkVSX0dFTkVSQVRPUl9IX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3JlZ2lzdHJ5X2h1Yi5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3JlZ2lzdHJ5X2h1Yi5jcHAKaW5kZXggOGEzYzdhOS4uYTUwNjIzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9yZWdpc3RyeV9odWIuY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfcmVnaXN0cnlfaHViLmNwcApAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgImNhdGNoX3RhZ19hbGlhc19yZWdpc3RyeS5oIgogI2luY2x1ZGUgImNhdGNoX3N0YXJ0dXBfZXhjZXB0aW9uX3JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiY2F0Y2hfc2luZ2xldG9ucy5ocHAiCi0jaW5jbHVkZSAiY2F0Y2hfZW51bV92YWx1ZXNfcmVnaXN0cnkuaCIKIAogbmFtZXNwYWNlIENhdGNoIHsKIApAQCAtNjEsOSArNjAsNiBAQAogICAgICAgICAgICAgdm9pZCByZWdpc3RlclN0YXJ0dXBFeGNlcHRpb24oKSBub2V4Y2VwdCBvdmVycmlkZSB7CiAgICAgICAgICAgICAgICAgbV9leGNlcHRpb25SZWdpc3RyeS5hZGQoc3RkOjpjdXJyZW50X2V4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIElNdXRhYmxlRW51bVZhbHVlc1JlZ2lzdHJ5JiBnZXRNdXRhYmxlRW51bVZhbHVlc1JlZ2lzdHJ5KCkgb3ZlcnJpZGUgewotICAgICAgICAgICAgICAgIHJldHVybiBtX2VudW1WYWx1ZXNSZWdpc3RyeTsKLSAgICAgICAgICAgIH0KIAogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgVGVzdFJlZ2lzdHJ5IG1fdGVzdENhc2VSZWdpc3RyeTsKQEAgLTcxLDcgKzY3LDYgQEAKICAgICAgICAgICAgIEV4Y2VwdGlvblRyYW5zbGF0b3JSZWdpc3RyeSBtX2V4Y2VwdGlvblRyYW5zbGF0b3JSZWdpc3RyeTsKICAgICAgICAgICAgIFRhZ0FsaWFzUmVnaXN0cnkgbV90YWdBbGlhc1JlZ2lzdHJ5OwogICAgICAgICAgICAgU3RhcnR1cEV4Y2VwdGlvblJlZ2lzdHJ5IG1fZXhjZXB0aW9uUmVnaXN0cnk7Ci0gICAgICAgICAgICBEZXRhaWw6OkVudW1WYWx1ZXNSZWdpc3RyeSBtX2VudW1WYWx1ZXNSZWdpc3RyeTsKICAgICAgICAgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfcmVwb3J0ZXJfcmVnaXN0cmFycy5ocHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3JlcG9ydGVyX3JlZ2lzdHJhcnMuaHBwCmluZGV4IGExOTUwNTMuLjY2MGY1NTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfcmVwb3J0ZXJfcmVnaXN0cmFycy5ocHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9yZXBvcnRlcl9yZWdpc3RyYXJzLmhwcApAQCAtNTgsMTYgKzU4LDE0IEBACiAjaWYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEUpCiAKICNkZWZpbmUgQ0FUQ0hfUkVHSVNURVJfUkVQT1JURVIoIG5hbWUsIHJlcG9ydGVyVHlwZSApIFwKLSAgICBDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTiAgICAgICAgIFwKICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTICAgICAgICAgIFwKICAgICBuYW1lc3BhY2V7IENhdGNoOjpSZXBvcnRlclJlZ2lzdHJhcjxyZXBvcnRlclR5cGU+IGNhdGNoX2ludGVybmFsX1JlZ2lzdHJhckZvciMjcmVwb3J0ZXJUeXBlKCBuYW1lICk7IH0gXAotICAgIENBVENIX0lOVEVSTkFMX1NUT1BfV0FSTklOR1NfU1VQUFJFU1NJT04KKyAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MKIAogI2RlZmluZSBDQVRDSF9SRUdJU1RFUl9MSVNURU5FUiggbGlzdGVuZXJUeXBlICkgXAotICAgIENBVENIX0lOVEVSTkFMX1NUQVJUX1dBUk5JTkdTX1NVUFBSRVNTSU9OICAgXAotICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgICAgXAotICAgIG5hbWVzcGFjZXsgQ2F0Y2g6Okxpc3RlbmVyUmVnaXN0cmFyPGxpc3RlbmVyVHlwZT4gY2F0Y2hfaW50ZXJuYWxfUmVnaXN0cmFyRm9yIyNsaXN0ZW5lclR5cGU7IH0gXAotICAgIENBVENIX0lOVEVSTkFMX1NUT1BfV0FSTklOR1NfU1VQUFJFU1NJT04KKyAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyAgIFwKKyAgICAgbmFtZXNwYWNleyBDYXRjaDo6TGlzdGVuZXJSZWdpc3RyYXI8bGlzdGVuZXJUeXBlPiBjYXRjaF9pbnRlcm5hbF9SZWdpc3RyYXJGb3IjI2xpc3RlbmVyVHlwZTsgfSBcCisgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MKICNlbHNlIC8vIENBVENIX0NPTkZJR19ESVNBQkxFCiAKICNkZWZpbmUgQ0FUQ0hfUkVHSVNURVJfUkVQT1JURVIobmFtZSwgcmVwb3J0ZXJUeXBlKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9ydW5fY29udGV4dC5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3J1bl9jb250ZXh0LmNwcAppbmRleCAyZWI4NGZiLi5iYzNhNTE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3J1bl9jb250ZXh0LmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3J1bl9jb250ZXh0LmNwcApAQCAtMjMwLDIxICsyMzAsMTIgQEAKIAogICAgICAgICBtX3VuZmluaXNoZWRTZWN0aW9ucy5wdXNoX2JhY2soZW5kSW5mbyk7CiAgICAgfQotCi0jaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORykKLSAgICB2b2lkIFJ1bkNvbnRleHQ6OmJlbmNobWFya1ByZXBhcmluZyhzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSkgewotCQltX3JlcG9ydGVyLT5iZW5jaG1hcmtQcmVwYXJpbmcobmFtZSk7Ci0JfQogICAgIHZvaWQgUnVuQ29udGV4dDo6YmVuY2htYXJrU3RhcnRpbmcoIEJlbmNobWFya0luZm8gY29uc3QmIGluZm8gKSB7CiAgICAgICAgIG1fcmVwb3J0ZXItPmJlbmNobWFya1N0YXJ0aW5nKCBpbmZvICk7CiAgICAgfQotICAgIHZvaWQgUnVuQ29udGV4dDo6YmVuY2htYXJrRW5kZWQoIEJlbmNobWFya1N0YXRzPD4gY29uc3QmIHN0YXRzICkgeworICAgIHZvaWQgUnVuQ29udGV4dDo6YmVuY2htYXJrRW5kZWQoIEJlbmNobWFya1N0YXRzIGNvbnN0JiBzdGF0cyApIHsKICAgICAgICAgbV9yZXBvcnRlci0+YmVuY2htYXJrRW5kZWQoIHN0YXRzICk7CiAgICAgfQotCXZvaWQgUnVuQ29udGV4dDo6YmVuY2htYXJrRmFpbGVkKHN0ZDo6c3RyaW5nIGNvbnN0ICYgZXJyb3IpIHsKLQkJbV9yZXBvcnRlci0+YmVuY2htYXJrRmFpbGVkKGVycm9yKTsKLQl9Ci0jZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcKIAogICAgIHZvaWQgUnVuQ29udGV4dDo6cHVzaFNjb3BlZE1lc3NhZ2UoTWVzc2FnZUluZm8gY29uc3QgJiBtZXNzYWdlKSB7CiAgICAgICAgIG1fbWVzc2FnZXMucHVzaF9iYWNrKG1lc3NhZ2UpOwpAQCAtMjc5LDcgKzI3MCw3IEBACiAgICAgICAgIC8vIERvbid0IHJlYnVpbGQgdGhlIHJlc3VsdCAtLSB0aGUgc3RyaW5naWZpY2F0aW9uIGl0c2VsZiBjYW4gY2F1c2UgbW9yZSBmYXRhbCBlcnJvcnMKICAgICAgICAgLy8gSW5zdGVhZCwgZmFrZSBhIHJlc3VsdCBkYXRhLgogICAgICAgICBBc3NlcnRpb25SZXN1bHREYXRhIHRlbXBSZXN1bHQoIFJlc3VsdFdhczo6RmF0YWxFcnJvckNvbmRpdGlvbiwgeyBmYWxzZSB9ICk7Ci0gICAgICAgIHRlbXBSZXN1bHQubWVzc2FnZSA9IHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nPihtZXNzYWdlKTsKKyAgICAgICAgdGVtcFJlc3VsdC5tZXNzYWdlID0gbWVzc2FnZTsKICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0IHJlc3VsdChtX2xhc3RBc3NlcnRpb25JbmZvLCB0ZW1wUmVzdWx0KTsKIAogICAgICAgICBhc3NlcnRpb25FbmRlZChyZXN1bHQpOwpAQCAtNDQyLDcgKzQzMyw3IEBACiAgICAgICAgIG1fbGFzdEFzc2VydGlvbkluZm8gPSBpbmZvOwogCiAgICAgICAgIEFzc2VydGlvblJlc3VsdERhdGEgZGF0YSggcmVzdWx0VHlwZSwgTGF6eUV4cHJlc3Npb24oIGZhbHNlICkgKTsKLSAgICAgICAgZGF0YS5tZXNzYWdlID0gc3RhdGljX2Nhc3Q8c3RkOjpzdHJpbmc+KG1lc3NhZ2UpOworICAgICAgICBkYXRhLm1lc3NhZ2UgPSBtZXNzYWdlOwogICAgICAgICBBc3NlcnRpb25SZXN1bHQgYXNzZXJ0aW9uUmVzdWx0eyBtX2xhc3RBc3NlcnRpb25JbmZvLCBkYXRhIH07CiAgICAgICAgIGFzc2VydGlvbkVuZGVkKCBhc3NlcnRpb25SZXN1bHQgKTsKICAgICAgICAgaWYoICFhc3NlcnRpb25SZXN1bHQuaXNPaygpICkKQEAgLTUwNiwxNiArNDk3LDQgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfRVJST1IoIk5vIHJlc3VsdCBjYXB0dXJlIGluc3RhbmNlIik7CiAgICAgfQotCi0gICAgdm9pZCBzZWVkUm5nKElDb25maWcgY29uc3QmIGNvbmZpZykgewotICAgICAgICBpZiAoY29uZmlnLnJuZ1NlZWQoKSAhPSAwKSB7Ci0gICAgICAgICAgICBzdGQ6OnNyYW5kKGNvbmZpZy5ybmdTZWVkKCkpOwotICAgICAgICAgICAgcm5nKCkuc2VlZChjb25maWcucm5nU2VlZCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCBybmdTZWVkKCkgewotICAgICAgICByZXR1cm4gZ2V0Q3VycmVudENvbnRleHQoKS5nZXRDb25maWcoKS0+cm5nU2VlZCgpOwotICAgIH0KLQogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9ydW5fY29udGV4dC5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9ydW5fY29udGV4dC5oCmluZGV4IDJhOGU3MmQuLmM1MzBhN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfcnVuX2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3J1bl9jb250ZXh0LmgKQEAgLTgyLDEyICs4Miw4IEBACiAKICAgICAgICAgYXV0byBhY3F1aXJlR2VuZXJhdG9yVHJhY2tlciggU291cmNlTGluZUluZm8gY29uc3QmIGxpbmVJbmZvICkgLT4gSUdlbmVyYXRvclRyYWNrZXImIG92ZXJyaWRlOwogCi0jaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORykKLSAgICAgICAgdm9pZCBiZW5jaG1hcmtQcmVwYXJpbmcoIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lICkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgYmVuY2htYXJrU3RhcnRpbmcoIEJlbmNobWFya0luZm8gY29uc3QmIGluZm8gKSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBiZW5jaG1hcmtFbmRlZCggQmVuY2htYXJrU3RhdHM8PiBjb25zdCYgc3RhdHMgKSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBiZW5jaG1hcmtGYWlsZWQoIHN0ZDo6c3RyaW5nIGNvbnN0JiBlcnJvciApIG92ZXJyaWRlOwotI2VuZGlmIC8vIENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HCisgICAgICAgIHZvaWQgYmVuY2htYXJrRW5kZWQoIEJlbmNobWFya1N0YXRzIGNvbnN0JiBzdGF0cyApIG92ZXJyaWRlOwogCiAgICAgICAgIHZvaWQgcHVzaFNjb3BlZE1lc3NhZ2UoIE1lc3NhZ2VJbmZvIGNvbnN0JiBtZXNzYWdlICkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgcG9wU2NvcGVkTWVzc2FnZSggTWVzc2FnZUluZm8gY29uc3QmIG1lc3NhZ2UgKSBvdmVycmlkZTsKQEAgLTE1MSw4ICsxNDcsNiBAQAogICAgICAgICBib29sIG1faW5jbHVkZVN1Y2Nlc3NmdWxSZXN1bHRzOwogICAgIH07CiAKLSAgICB2b2lkIHNlZWRSbmcoSUNvbmZpZyBjb25zdCYgY29uZmlnKTsKLSAgICB1bnNpZ25lZCBpbnQgcm5nU2VlZCgpOwogfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCiAKICNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfUlVOTkVSX0lNUExfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3NlY3Rpb24uaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc2VjdGlvbi5oCmluZGV4IGNjMmIzMjMuLjAwYzI1NGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc2VjdGlvbi5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc2VjdGlvbi5oCkBAIC0zNywxNSArMzcsMTMgQEAKIH0gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaAogCiAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1NFQ1RJT04oIC4uLiApIFwKLSAgICBDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTiBcCiAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfVU5VU0VEX1dBUk5JTkdTIFwKICAgICBpZiggQ2F0Y2g6OlNlY3Rpb24gY29uc3QmIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBjYXRjaF9pbnRlcm5hbF9TZWN0aW9uICkgPSBDYXRjaDo6U2VjdGlvbkluZm8oIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBfX1ZBX0FSR1NfXyApICkgXAotICAgIENBVENIX0lOVEVSTkFMX1NUT1BfV0FSTklOR1NfU1VQUFJFU1NJT04KKyAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX1VOVVNFRF9XQVJOSU5HUwogCiAjZGVmaW5lIElOVEVSTkFMX0NBVENIX0RZTkFNSUNfU0VDVElPTiggLi4uICkgXAotICAgIENBVENIX0lOVEVSTkFMX1NUQVJUX1dBUk5JTkdTX1NVUFBSRVNTSU9OIFwKICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19VTlVTRURfV0FSTklOR1MgXAogICAgIGlmKCBDYXRjaDo6U2VjdGlvbiBjb25zdCYgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIGNhdGNoX2ludGVybmFsX1NlY3Rpb24gKSA9IENhdGNoOjpTZWN0aW9uSW5mbyggQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIChDYXRjaDo6UmV1c2FibGVTdHJpbmdTdHJlYW0oKSA8PCBfX1ZBX0FSR1NfXykuc3RyKCkgKSApIFwKLSAgICBDQVRDSF9JTlRFUk5BTF9TVE9QX1dBUk5JTkdTX1NVUFBSRVNTSU9OCisgICAgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19VTlVTRURfV0FSTklOR1MKIAogI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9TRUNUSU9OX0hfSU5DTFVERUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc2Vzc2lvbi5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Nlc3Npb24uY3BwCmluZGV4IDI0ZWJlNGQuLjM4Yjc0ZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc2Vzc2lvbi5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zZXNzaW9uLmNwcApAQCAtMjUsOCArMjUsNiBAQAogCiAjaW5jbHVkZSA8Y3N0ZGxpYj4KICNpbmNsdWRlIDxpb21hbmlwPgotI2luY2x1ZGUgPHNldD4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KIAogbmFtZXNwYWNlIENhdGNoIHsKIApAQCAtNjAsNjEgKzU4LDQ2IEBACiAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICB9CiAKLSAgICAgICAgY2xhc3MgVGVzdEdyb3VwIHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgZXhwbGljaXQgVGVzdEdyb3VwKHN0ZDo6c2hhcmVkX3B0cjxDb25maWc+IGNvbnN0JiBjb25maWcpCi0gICAgICAgICAgICA6IG1fY29uZmlne2NvbmZpZ30KLSAgICAgICAgICAgICwgbV9jb250ZXh0e2NvbmZpZywgbWFrZVJlcG9ydGVyKGNvbmZpZyl9Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXV0byBjb25zdCYgYWxsVGVzdENhc2VzID0gZ2V0QWxsVGVzdENhc2VzU29ydGVkKCptX2NvbmZpZyk7Ci0gICAgICAgICAgICAgICAgbV9tYXRjaGVzID0gbV9jb25maWctPnRlc3RTcGVjKCkubWF0Y2hlc0J5RmlsdGVyKGFsbFRlc3RDYXNlcywgKm1fY29uZmlnKTsKLSAgICAgICAgICAgICAgICBhdXRvIGNvbnN0JiBpbnZhbGlkQXJncyA9IG1fY29uZmlnLT50ZXN0U3BlYygpLmdldEludmFsaWRBcmdzKCk7CiAKLSAgICAgICAgICAgICAgICBpZiAobV9tYXRjaGVzLmVtcHR5KCkgJiYgaW52YWxpZEFyZ3MuZW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gY29uc3QmIHRlc3QgOiBhbGxUZXN0Q2FzZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRlc3QuaXNIaWRkZW4oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Rlc3RzLmVtcGxhY2UoJnRlc3QpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byBjb25zdCYgbWF0Y2ggOiBtX21hdGNoZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3Rlc3RzLmluc2VydChtYXRjaC50ZXN0cy5iZWdpbigpLCBtYXRjaC50ZXN0cy5lbmQoKSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBDYXRjaDo6VG90YWxzIHJ1blRlc3RzKHN0ZDo6c2hhcmVkX3B0cjxDb25maWc+IGNvbnN0JiBjb25maWcpIHsKKyAgICAgICAgICAgIGF1dG8gcmVwb3J0ZXIgPSBtYWtlUmVwb3J0ZXIoY29uZmlnKTsKKworICAgICAgICAgICAgUnVuQ29udGV4dCBjb250ZXh0KGNvbmZpZywgc3RkOjptb3ZlKHJlcG9ydGVyKSk7CisKKyAgICAgICAgICAgIFRvdGFscyB0b3RhbHM7CisKKyAgICAgICAgICAgIGNvbnRleHQudGVzdEdyb3VwU3RhcnRpbmcoY29uZmlnLT5uYW1lKCksIDEsIDEpOworCisgICAgICAgICAgICBUZXN0U3BlYyB0ZXN0U3BlYyA9IGNvbmZpZy0+dGVzdFNwZWMoKTsKKworICAgICAgICAgICAgYXV0byBjb25zdCYgYWxsVGVzdENhc2VzID0gZ2V0QWxsVGVzdENhc2VzU29ydGVkKCpjb25maWcpOworICAgICAgICAgICAgZm9yIChhdXRvIGNvbnN0JiB0ZXN0Q2FzZSA6IGFsbFRlc3RDYXNlcykgeworICAgICAgICAgICAgICAgIGJvb2wgbWF0Y2hpbmcgPSAoIXRlc3RTcGVjLmhhc0ZpbHRlcnMoKSAmJiAhdGVzdENhc2UuaXNIaWRkZW4oKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0U3BlYy5oYXNGaWx0ZXJzKCkgJiYgbWF0Y2hUZXN0KHRlc3RDYXNlLCB0ZXN0U3BlYywgKmNvbmZpZykpOworCisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LmFib3J0aW5nKCkgJiYgbWF0Y2hpbmcpCisgICAgICAgICAgICAgICAgICAgIHRvdGFscyArPSBjb250ZXh0LnJ1blRlc3QodGVzdENhc2UpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnRlcigpLnNraXBUZXN0KHRlc3RDYXNlKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgVG90YWxzIGV4ZWN1dGUoKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBjb25zdCYgaW52YWxpZEFyZ3MgPSBtX2NvbmZpZy0+dGVzdFNwZWMoKS5nZXRJbnZhbGlkQXJncygpOwotICAgICAgICAgICAgICAgIFRvdGFscyB0b3RhbHM7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LnRlc3RHcm91cFN0YXJ0aW5nKG1fY29uZmlnLT5uYW1lKCksIDEsIDEpOwotICAgICAgICAgICAgICAgIGZvciAoYXV0byBjb25zdCYgdGVzdENhc2UgOiBtX3Rlc3RzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9jb250ZXh0LmFib3J0aW5nKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbHMgKz0gbV9jb250ZXh0LnJ1blRlc3QoKnRlc3RDYXNlKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbV9jb250ZXh0LnJlcG9ydGVyKCkuc2tpcFRlc3QoKnRlc3RDYXNlKTsKKyAgICAgICAgICAgIGlmIChjb25maWctPndhcm5BYm91dE5vVGVzdHMoKSAmJiB0b3RhbHMudGVzdENhc2VzLnRvdGFsKCkgPT0gMCkgeworICAgICAgICAgICAgICAgIFJldXNhYmxlU3RyaW5nU3RyZWFtIHRlc3RDb25maWc7CisKKyAgICAgICAgICAgICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGlucHV0IDogY29uZmlnLT5nZXRUZXN0c09yVGFncygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3QpIHsgdGVzdENvbmZpZyA8PCAnICc7IH0KKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgdGVzdENvbmZpZyA8PCBpbnB1dDsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8gY29uc3QmIG1hdGNoIDogbV9tYXRjaGVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaC50ZXN0cy5lbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2NvbnRleHQucmVwb3J0ZXIoKS5ub01hdGNoaW5nVGVzdENhc2VzKG1hdGNoLm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxzLmVycm9yID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWludmFsaWRBcmdzLmVtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvIGNvbnN0JiBpbnZhbGlkQXJnOiBpbnZhbGlkQXJncykKLSAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbnRleHQucmVwb3J0ZXIoKS5yZXBvcnRJbnZhbGlkQXJndW1lbnRzKGludmFsaWRBcmcpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1fY29udGV4dC50ZXN0R3JvdXBFbmRlZChtX2NvbmZpZy0+bmFtZSgpLCB0b3RhbHMsIDEsIDEpOwotICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbHM7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnRlcigpLm5vTWF0Y2hpbmdUZXN0Q2FzZXModGVzdENvbmZpZy5zdHIoKSk7CisgICAgICAgICAgICAgICAgdG90YWxzLmVycm9yID0gLTE7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIHVzaW5nIFRlc3RzID0gc3RkOjpzZXQ8VGVzdENhc2UgY29uc3QqPjsKLQotICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPENvbmZpZz4gbV9jb25maWc7Ci0gICAgICAgICAgICBSdW5Db250ZXh0IG1fY29udGV4dDsKLSAgICAgICAgICAgIFRlc3RzIG1fdGVzdHM7Ci0gICAgICAgICAgICBUZXN0U3BlYzo6TWF0Y2hlcyBtX21hdGNoZXM7Ci0gICAgICAgIH07CisgICAgICAgICAgICBjb250ZXh0LnRlc3RHcm91cEVuZGVkKGNvbmZpZy0+bmFtZSgpLCB0b3RhbHMsIDEsIDEpOworICAgICAgICAgICAgcmV0dXJuIHRvdGFsczsKKyAgICAgICAgfQogCiAgICAgICAgIHZvaWQgYXBwbHlGaWxlbmFtZXNBc1RhZ3MoQ2F0Y2g6OklDb25maWcgY29uc3QmIGNvbmZpZykgewogICAgICAgICAgICAgYXV0byYgdGVzdHMgPSBjb25zdF9jYXN0PHN0ZDo6dmVjdG9yPFRlc3RDYXNlPiY+KGdldEFsbFRlc3RDYXNlc1NvcnRlZChjb25maWcpKTsKQEAgLTE1MSw5ICsxMzQsNiBAQAogI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMpCiAgICAgICAgIGNvbnN0IGF1dG8mIGV4Y2VwdGlvbnMgPSBnZXRSZWdpc3RyeUh1YigpLmdldFN0YXJ0dXBFeGNlcHRpb25SZWdpc3RyeSgpLmdldEV4Y2VwdGlvbnMoKTsKICAgICAgICAgaWYgKCAhZXhjZXB0aW9ucy5lbXB0eSgpICkgewotICAgICAgICAgICAgY29uZmlnKCk7Ci0gICAgICAgICAgICBnZXRDdXJyZW50TXV0YWJsZUNvbnRleHQoKS5zZXRDb25maWcobV9jb25maWcpOwotCiAgICAgICAgICAgICBtX3N0YXJ0dXBFeGNlcHRpb25zID0gdHJ1ZTsKICAgICAgICAgICAgIENvbG91ciBjb2xvdXJHdWFyZCggQ29sb3VyOjpSZWQgKTsKICAgICAgICAgICAgIENhdGNoOjpjZXJyKCkgPDwgIkVycm9ycyBvY2N1cnJlZCBkdXJpbmcgc3RhcnR1cCEiIDw8ICdcbic7CkBAIC0xODMsNyArMTYzLDcgQEAKICAgICB9CiAgICAgdm9pZCBTZXNzaW9uOjpsaWJJZGVudGlmeSgpIHsKICAgICAgICAgQ2F0Y2g6OmNvdXQoKQotICAgICAgICAgICAgICAgIDw8IHN0ZDo6bGVmdCA8PCBzdGQ6OnNldHcoMTYpIDw8ICJkZXNjcmlwdGlvbjogIiA8PCAiQSBDYXRjaDIgdGVzdCBleGVjdXRhYmxlXG4iCisgICAgICAgICAgICAgICAgPDwgc3RkOjpsZWZ0IDw8IHN0ZDo6c2V0dygxNikgPDwgImRlc2NyaXB0aW9uOiAiIDw8ICJBIENhdGNoIHRlc3QgZXhlY3V0YWJsZVxuIgogICAgICAgICAgICAgICAgIDw8IHN0ZDo6bGVmdCA8PCBzdGQ6OnNldHcoMTYpIDw8ICJjYXRlZ29yeTogIiA8PCAidGVzdGZyYW1ld29ya1xuIgogICAgICAgICAgICAgICAgIDw8IHN0ZDo6bGVmdCA8PCBzdGQ6OnNldHcoMTYpIDw8ICJmcmFtZXdvcms6ICIgPDwgIkNhdGNoIFRlc3RcbiIKICAgICAgICAgICAgICAgICA8PCBzdGQ6OmxlZnQgPDwgc3RkOjpzZXR3KDE2KSA8PCAidmVyc2lvbjogIiA8PCBsaWJyYXJ5VmVyc2lvbigpIDw8IHN0ZDo6ZW5kbDsKQEAgLTIxNCwxNyArMTk0LDE3IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX1dDSEFSKSAmJiBkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChVTklDT0RFKQorI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX1dDSEFSKSAmJiBkZWZpbmVkKFdJTjMyKSAmJiBkZWZpbmVkKFVOSUNPREUpCiAgICAgaW50IFNlc3Npb246OmFwcGx5Q29tbWFuZExpbmUoIGludCBhcmdjLCB3Y2hhcl90IGNvbnN0ICogY29uc3QgKiBhcmd2ICkgewogCiAgICAgICAgIGNoYXIgKip1dGY4QXJndiA9IG5ldyBjaGFyICpbIGFyZ2MgXTsKIAogICAgICAgICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBhcmdjOyArK2kgKSB7Ci0gICAgICAgICAgICBpbnQgYnVmU2l6ZSA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoIENQX1VURjgsIDAsIGFyZ3ZbaV0sIC0xLCBudWxscHRyLCAwLCBudWxscHRyLCBudWxscHRyICk7CisgICAgICAgICAgICBpbnQgYnVmU2l6ZSA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoIENQX1VURjgsIDAsIGFyZ3ZbaV0sIC0xLCBOVUxMLCAwLCBOVUxMLCBOVUxMICk7CiAKICAgICAgICAgICAgIHV0ZjhBcmd2WyBpIF0gPSBuZXcgY2hhclsgYnVmU2l6ZSBdOwogCi0gICAgICAgICAgICBXaWRlQ2hhclRvTXVsdGlCeXRlKCBDUF9VVEY4LCAwLCBhcmd2W2ldLCAtMSwgdXRmOEFyZ3ZbaV0sIGJ1ZlNpemUsIG51bGxwdHIsIG51bGxwdHIgKTsKKyAgICAgICAgICAgIFdpZGVDaGFyVG9NdWx0aUJ5dGUoIENQX1VURjgsIDAsIGFyZ3ZbaV0sIC0xLCB1dGY4QXJndltpXSwgYnVmU2l6ZSwgTlVMTCwgTlVMTCApOwogICAgICAgICB9CiAKICAgICAgICAgaW50IHJldHVybkNvZGUgPSBhcHBseUNvbW1hbmRMaW5lKCBhcmdjLCB1dGY4QXJndiApOwpAQCAtMjkxLDEyICsyNzEsNyBAQAogICAgICAgICAgICAgaWYoIE9wdGlvbjxzdGQ6OnNpemVfdD4gbGlzdGVkID0gbGlzdCggbV9jb25maWcgKSApCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oICpsaXN0ZWQgKTsKIAotICAgICAgICAgICAgVGVzdEdyb3VwIHRlc3RzIHsgbV9jb25maWcgfTsKLSAgICAgICAgICAgIGF1dG8gY29uc3QgdG90YWxzID0gdGVzdHMuZXhlY3V0ZSgpOwotCi0gICAgICAgICAgICBpZiggbV9jb25maWctPndhcm5BYm91dE5vVGVzdHMoKSAmJiB0b3RhbHMuZXJyb3IgPT0gLTEgKQotICAgICAgICAgICAgICAgIHJldHVybiAyOwotCisgICAgICAgICAgICBhdXRvIHRvdGFscyA9IHJ1blRlc3RzKCBtX2NvbmZpZyApOwogICAgICAgICAgICAgLy8gTm90ZSB0aGF0IG9uIHVuaWNlcyBvbmx5IHRoZSBsb3dlciA4IGJpdHMgYXJlIHVzdWFsbHkgdXNlZCwgY2xhbXBpbmcKICAgICAgICAgICAgIC8vIHRoZSByZXR1cm4gdmFsdWUgdG8gMjU1IHByZXZlbnRzIGZhbHNlIG5lZ2F0aXZlIHdoZW4gc29tZSBtdWx0aXBsZQogICAgICAgICAgICAgLy8gb2YgMjU2IHRlc3RzIGhhcyBmYWlsZWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc2Vzc2lvbi5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zZXNzaW9uLmgKaW5kZXggNGU4M2Q1Mi4uYWY4MjBkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zZXNzaW9uLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zZXNzaW9uLmgKQEAgLTI2LDcgKzI2LDcgQEAKICAgICAgICAgdm9pZCBsaWJJZGVudGlmeSgpOwogCiAgICAgICAgIGludCBhcHBseUNvbW1hbmRMaW5lKCBpbnQgYXJnYywgY2hhciBjb25zdCAqIGNvbnN0ICogYXJndiApOwotICAgICNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19XQ0hBUikgJiYgZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoVU5JQ09ERSkKKyAgICAjaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfV0NIQVIpICYmIGRlZmluZWQoV0lOMzIpICYmIGRlZmluZWQoVU5JQ09ERSkKICAgICAgICAgaW50IGFwcGx5Q29tbWFuZExpbmUoIGludCBhcmdjLCB3Y2hhcl90IGNvbnN0ICogY29uc3QgKiBhcmd2ICk7CiAgICAgI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3RyZWFtLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3RyZWFtLmNwcAppbmRleCAzZTkwN2M2Li5iYTJkMmJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3N0cmVhbS5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zdHJlYW0uY3BwCkBAIC0yNSw3ICsyNSw3IEBACiAKICAgICBDYXRjaDo6SVN0cmVhbTo6fklTdHJlYW0oKSA9IGRlZmF1bHQ7CiAKLSAgICBuYW1lc3BhY2UgRGV0YWlsIHsgbmFtZXNwYWNlIHsKKyAgICBuYW1lc3BhY2UgZGV0YWlsIHsgbmFtZXNwYWNlIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgV3JpdGVyRiwgc3RkOjpzaXplX3QgYnVmZmVyU2l6ZT0yNTY+CiAgICAgICAgIGNsYXNzIFN0cmVhbUJ1ZkltcGwgOiBwdWJsaWMgc3RkOjpzdHJlYW1idWYgewogICAgICAgICAgICAgY2hhciBkYXRhW2J1ZmZlclNpemVdOwpAQCAtMTI0LDE1ICsxMjQsMTUgQEAKIAogICAgIGF1dG8gbWFrZVN0cmVhbSggU3RyaW5nUmVmIGNvbnN0ICZmaWxlbmFtZSApIC0+IElTdHJlYW0gY29uc3QqIHsKICAgICAgICAgaWYoIGZpbGVuYW1lLmVtcHR5KCkgKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBEZXRhaWw6OkNvdXRTdHJlYW0oKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgZGV0YWlsOjpDb3V0U3RyZWFtKCk7CiAgICAgICAgIGVsc2UgaWYoIGZpbGVuYW1lWzBdID09ICclJyApIHsKICAgICAgICAgICAgIGlmKCBmaWxlbmFtZSA9PSAiJWRlYnVnIiApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEZXRhaWw6OkRlYnVnT3V0U3RyZWFtKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBkZXRhaWw6OkRlYnVnT3V0U3RyZWFtKCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgQ0FUQ0hfRVJST1IoICJVbnJlY29nbmlzZWQgc3RyZWFtOiAnIiA8PCBmaWxlbmFtZSA8PCAiJyIgKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbmV3IERldGFpbDo6RmlsZVN0cmVhbSggZmlsZW5hbWUgKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgZGV0YWlsOjpGaWxlU3RyZWFtKCBmaWxlbmFtZSApOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3N0cmVhbS5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zdHJlYW0uaAppbmRleCA5OTk4NDljLi4yYjQxYWRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3N0cmVhbS5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3RyZWFtLmgKQEAgLTksOCArOSw2IEBACiAjaWZuZGVmIFRXT0JMVUVDVUJFU19DQVRDSF9TVFJFQU1fSF9JTkNMVURFRAogI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfU1RSRUFNX0hfSU5DTFVERUQKIAotI2luY2x1ZGUgImNhdGNoX2NvbW1vbi5oIgotCiAjaW5jbHVkZSA8aW9zZndkPgogI2luY2x1ZGUgPGNzdGRkZWY+CiAjaW5jbHVkZSA8b3N0cmVhbT4KQEAgLTMwLDcgKzI4LDcgQEAKIAogICAgIGF1dG8gbWFrZVN0cmVhbSggU3RyaW5nUmVmIGNvbnN0ICZmaWxlbmFtZSApIC0+IElTdHJlYW0gY29uc3QqOwogCi0gICAgY2xhc3MgUmV1c2FibGVTdHJpbmdTdHJlYW0gOiBOb25Db3B5YWJsZSB7CisgICAgY2xhc3MgUmV1c2FibGVTdHJpbmdTdHJlYW0gewogICAgICAgICBzdGQ6OnNpemVfdCBtX2luZGV4OwogICAgICAgICBzdGQ6Om9zdHJlYW0qIG1fb3NzOwogICAgIHB1YmxpYzoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3RyaW5nX21hbmlwLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3RyaW5nX21hbmlwLmNwcAppbmRleCA2NWJlMzRkLi45MDRkMTAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3N0cmluZ19tYW5pcC5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zdHJpbmdfbWFuaXAuY3BwCkBAIC02LDEzICs2LDExIEBACiAgKi8KIAogI2luY2x1ZGUgImNhdGNoX3N0cmluZ19tYW5pcC5oIgotI2luY2x1ZGUgImNhdGNoX3N0cmluZ3JlZi5oIgogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPG9zdHJlYW0+CiAjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDxjY3R5cGU+Ci0jaW5jbHVkZSA8dmVjdG9yPgogCiBuYW1lc3BhY2UgQ2F0Y2ggewogCkBAIC01MywxOCArNTEsNiBAQAogICAgICAgICByZXR1cm4gc3RhcnQgIT0gc3RkOjpzdHJpbmc6Om5wb3MgPyBzdHIuc3Vic3RyKCBzdGFydCwgMStlbmQtc3RhcnQgKSA6IHN0ZDo6c3RyaW5nKCk7CiAgICAgfQogCi0gICAgU3RyaW5nUmVmIHRyaW0oU3RyaW5nUmVmIHJlZikgewotICAgICAgICBjb25zdCBhdXRvIGlzX3dzID0gW10oY2hhciBjKSB7Ci0gICAgICAgICAgICByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdccic7Ci0gICAgICAgIH07Ci0gICAgICAgIHNpemVfdCByZWFsX2JlZ2luID0gMDsKLSAgICAgICAgd2hpbGUgKHJlYWxfYmVnaW4gPCByZWYuc2l6ZSgpICYmIGlzX3dzKHJlZltyZWFsX2JlZ2luXSkpIHsgKytyZWFsX2JlZ2luOyB9Ci0gICAgICAgIHNpemVfdCByZWFsX2VuZCA9IHJlZi5zaXplKCk7Ci0gICAgICAgIHdoaWxlIChyZWFsX2VuZCA+IHJlYWxfYmVnaW4gJiYgaXNfd3MocmVmW3JlYWxfZW5kIC0gMV0pKSB7IC0tcmVhbF9lbmQ7IH0KLQotICAgICAgICByZXR1cm4gcmVmLnN1YnN0cihyZWFsX2JlZ2luLCByZWFsX2VuZCAtIHJlYWxfYmVnaW4pOwotICAgIH0KLQogICAgIGJvb2wgcmVwbGFjZUluUGxhY2UoIHN0ZDo6c3RyaW5nJiBzdHIsIHN0ZDo6c3RyaW5nIGNvbnN0JiByZXBsYWNlVGhpcywgc3RkOjpzdHJpbmcgY29uc3QmIHdpdGhUaGlzICkgewogICAgICAgICBib29sIHJlcGxhY2VkID0gZmFsc2U7CiAgICAgICAgIHN0ZDo6c2l6ZV90IGkgPSBzdHIuZmluZCggcmVwbGFjZVRoaXMgKTsKQEAgLTc5LDIxICs2NSw2IEBACiAgICAgICAgIHJldHVybiByZXBsYWNlZDsKICAgICB9CiAKLSAgICBzdGQ6OnZlY3RvcjxTdHJpbmdSZWY+IHNwbGl0U3RyaW5nUmVmKCBTdHJpbmdSZWYgc3RyLCBjaGFyIGRlbGltaXRlciApIHsKLSAgICAgICAgc3RkOjp2ZWN0b3I8U3RyaW5nUmVmPiBzdWJTdHJpbmdzOwotICAgICAgICBzdGQ6OnNpemVfdCBzdGFydCA9IDA7Ci0gICAgICAgIGZvcihzdGQ6OnNpemVfdCBwb3MgPSAwOyBwb3MgPCBzdHIuc2l6ZSgpOyArK3BvcyApIHsKLSAgICAgICAgICAgIGlmKCBzdHJbcG9zXSA9PSBkZWxpbWl0ZXIgKSB7Ci0gICAgICAgICAgICAgICAgaWYoIHBvcyAtIHN0YXJ0ID4gMSApCi0gICAgICAgICAgICAgICAgICAgIHN1YlN0cmluZ3MucHVzaF9iYWNrKCBzdHIuc3Vic3RyKCBzdGFydCwgcG9zLXN0YXJ0ICkgKTsKLSAgICAgICAgICAgICAgICBzdGFydCA9IHBvcysxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmKCBzdGFydCA8IHN0ci5zaXplKCkgKQotICAgICAgICAgICAgc3ViU3RyaW5ncy5wdXNoX2JhY2soIHN0ci5zdWJzdHIoIHN0YXJ0LCBzdHIuc2l6ZSgpLXN0YXJ0ICkgKTsKLSAgICAgICAgcmV0dXJuIHN1YlN0cmluZ3M7Ci0gICAgfQotCiAgICAgcGx1cmFsaXNlOjpwbHVyYWxpc2UoIHN0ZDo6c2l6ZV90IGNvdW50LCBzdGQ6OnN0cmluZyBjb25zdCYgbGFiZWwgKQogICAgIDogICBtX2NvdW50KCBjb3VudCApLAogICAgICAgICBtX2xhYmVsKCBsYWJlbCApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3N0cmluZ19tYW5pcC5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zdHJpbmdfbWFuaXAuaAppbmRleCBjZGI3YmU1Li42MjkyY2Q1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3N0cmluZ19tYW5pcC5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3RyaW5nX21hbmlwLmgKQEAgLTcsMTEgKzcsOCBAQAogI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfU1RSSU5HX01BTklQX0hfSU5DTFVERUQKICNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX1NUUklOR19NQU5JUF9IX0lOQ0xVREVECiAKLSNpbmNsdWRlICJjYXRjaF9zdHJpbmdyZWYuaCIKLQogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDxpb3Nmd2Q+Ci0jaW5jbHVkZSA8dmVjdG9yPgogCiBuYW1lc3BhY2UgQ2F0Y2ggewogCkBAIC0yMiwxMyArMTksNyBAQAogICAgIGJvb2wgY29udGFpbnMoIHN0ZDo6c3RyaW5nIGNvbnN0JiBzLCBzdGQ6OnN0cmluZyBjb25zdCYgaW5maXggKTsKICAgICB2b2lkIHRvTG93ZXJJblBsYWNlKCBzdGQ6OnN0cmluZyYgcyApOwogICAgIHN0ZDo6c3RyaW5nIHRvTG93ZXIoIHN0ZDo6c3RyaW5nIGNvbnN0JiBzICk7Ci0gICAgLy8hIFJldHVybnMgYSBuZXcgc3RyaW5nIHdpdGhvdXQgd2hpdGVzcGFjZSBhdCB0aGUgc3RhcnQvZW5kCiAgICAgc3RkOjpzdHJpbmcgdHJpbSggc3RkOjpzdHJpbmcgY29uc3QmIHN0ciApOwotICAgIC8vISBSZXR1cm5zIGEgc3Vic3RyaW5nIG9mIHRoZSBvcmlnaW5hbCByZWYgd2l0aG91dCB3aGl0ZXNwYWNlLiBCZXdhcmUgbGlmZXRpbWVzIQotICAgIFN0cmluZ1JlZiB0cmltKFN0cmluZ1JlZiByZWYpOwotCi0gICAgLy8gISEhIEJlIGF3YXJlLCByZXR1cm5zIHJlZnMgaW50byBvcmlnaW5hbCBzdHJpbmcgLSBtYWtlIHN1cmUgb3JpZ2luYWwgc3RyaW5nIG91dGxpdmVzIHRoZW0KLSAgICBzdGQ6OnZlY3RvcjxTdHJpbmdSZWY+IHNwbGl0U3RyaW5nUmVmKCBTdHJpbmdSZWYgc3RyLCBjaGFyIGRlbGltaXRlciApOwogICAgIGJvb2wgcmVwbGFjZUluUGxhY2UoIHN0ZDo6c3RyaW5nJiBzdHIsIHN0ZDo6c3RyaW5nIGNvbnN0JiByZXBsYWNlVGhpcywgc3RkOjpzdHJpbmcgY29uc3QmIHdpdGhUaGlzICk7CiAKICAgICBzdHJ1Y3QgcGx1cmFsaXNlIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3RyaW5ncmVmLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3RyaW5ncmVmLmNwcAppbmRleCAyMTVmZWVmLi45ZTkwOTVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3N0cmluZ3JlZi5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zdHJpbmdyZWYuY3BwCkBAIC01LDQ2ICs1LDEyMyBAQAogICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQogICovCiAKLSNpbmNsdWRlICJjYXRjaF9lbmZvcmNlLmgiCisKKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKyMgICAgcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorIyAgICBwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2V4aXQtdGltZS1kZXN0cnVjdG9ycyIKKyNlbmRpZgorCiAjaW5jbHVkZSAiY2F0Y2hfc3RyaW5ncmVmLmgiCiAKLSNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8b3N0cmVhbT4KICNpbmNsdWRlIDxjc3RyaW5nPgogI2luY2x1ZGUgPGNzdGRpbnQ+CiAKK25hbWVzcGFjZSB7CisgICAgY29uc3QgdWludDMyX3QgYnl0ZV8yX2xlYWQgPSAweEMwOworICAgIGNvbnN0IHVpbnQzMl90IGJ5dGVfM19sZWFkID0gMHhFMDsKKyAgICBjb25zdCB1aW50MzJfdCBieXRlXzRfbGVhZCA9IDB4RjA7Cit9CisKIG5hbWVzcGFjZSBDYXRjaCB7CiAgICAgU3RyaW5nUmVmOjpTdHJpbmdSZWYoIGNoYXIgY29uc3QqIHJhd0NoYXJzICkgbm9leGNlcHQKICAgICA6IFN0cmluZ1JlZiggcmF3Q2hhcnMsIHN0YXRpY19jYXN0PFN0cmluZ1JlZjo6c2l6ZV90eXBlPihzdGQ6OnN0cmxlbihyYXdDaGFycykgKSApCiAgICAge30KIAorICAgIFN0cmluZ1JlZjo6b3BlcmF0b3Igc3RkOjpzdHJpbmcoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZyggbV9zdGFydCwgbV9zaXplICk7CisgICAgfQorCisgICAgdm9pZCBTdHJpbmdSZWY6OnN3YXAoIFN0cmluZ1JlZiYgb3RoZXIgKSBub2V4Y2VwdCB7CisgICAgICAgIHN0ZDo6c3dhcCggbV9zdGFydCwgb3RoZXIubV9zdGFydCApOworICAgICAgICBzdGQ6OnN3YXAoIG1fc2l6ZSwgb3RoZXIubV9zaXplICk7CisgICAgICAgIHN0ZDo6c3dhcCggbV9kYXRhLCBvdGhlci5tX2RhdGEgKTsKKyAgICB9CisKICAgICBhdXRvIFN0cmluZ1JlZjo6Y19zdHIoKSBjb25zdCAtPiBjaGFyIGNvbnN0KiB7Ci0gICAgICAgIENBVENIX0VORk9SQ0UoaXNOdWxsVGVybWluYXRlZCgpLCAiQ2FsbGVkIFN0cmluZ1JlZjo6Y19zdHIoKSBvbiBhIG5vbi1udWxsLXRlcm1pbmF0ZWQgaW5zdGFuY2UiKTsKKyAgICAgICAgaWYoIGlzU3Vic3RyaW5nKCkgKQorICAgICAgICAgICBjb25zdF9jYXN0PFN0cmluZ1JlZio+KCB0aGlzICktPnRha2VPd25lcnNoaXAoKTsKICAgICAgICAgcmV0dXJuIG1fc3RhcnQ7CiAgICAgfQotICAgIGF1dG8gU3RyaW5nUmVmOjpkYXRhKCkgY29uc3Qgbm9leGNlcHQgLT4gY2hhciBjb25zdCogeworICAgIGF1dG8gU3RyaW5nUmVmOjpjdXJyZW50RGF0YSgpIGNvbnN0IG5vZXhjZXB0IC0+IGNoYXIgY29uc3QqIHsKICAgICAgICAgcmV0dXJuIG1fc3RhcnQ7CiAgICAgfQogCi0gICAgYXV0byBTdHJpbmdSZWY6OnN1YnN0ciggc2l6ZV90eXBlIHN0YXJ0LCBzaXplX3R5cGUgc2l6ZSApIGNvbnN0IG5vZXhjZXB0IC0+IFN0cmluZ1JlZiB7Ci0gICAgICAgIGlmIChzdGFydCA8IG1fc2l6ZSkgewotICAgICAgICAgICAgcmV0dXJuIFN0cmluZ1JlZihtX3N0YXJ0ICsgc3RhcnQsIChzdGQ6Om1pbikobV9zaXplIC0gc3RhcnQsIHNpemUpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmdSZWYoKTsKKyAgICBhdXRvIFN0cmluZ1JlZjo6aXNPd25lZCgpIGNvbnN0IG5vZXhjZXB0IC0+IGJvb2wgeworICAgICAgICByZXR1cm4gbV9kYXRhICE9IG51bGxwdHI7CisgICAgfQorICAgIGF1dG8gU3RyaW5nUmVmOjppc1N1YnN0cmluZygpIGNvbnN0IG5vZXhjZXB0IC0+IGJvb2wgeworICAgICAgICByZXR1cm4gbV9zdGFydFttX3NpemVdICE9ICdcMCc7CisgICAgfQorCisgICAgdm9pZCBTdHJpbmdSZWY6OnRha2VPd25lcnNoaXAoKSB7CisgICAgICAgIGlmKCAhaXNPd25lZCgpICkgeworICAgICAgICAgICAgbV9kYXRhID0gbmV3IGNoYXJbbV9zaXplKzFdOworICAgICAgICAgICAgbWVtY3B5KCBtX2RhdGEsIG1fc3RhcnQsIG1fc2l6ZSApOworICAgICAgICAgICAgbV9kYXRhW21fc2l6ZV0gPSAnXDAnOworICAgICAgICAgICAgbV9zdGFydCA9IG1fZGF0YTsKICAgICAgICAgfQogICAgIH0KKyAgICBhdXRvIFN0cmluZ1JlZjo6c3Vic3RyKCBzaXplX3R5cGUgc3RhcnQsIHNpemVfdHlwZSBzaXplICkgY29uc3Qgbm9leGNlcHQgLT4gU3RyaW5nUmVmIHsKKyAgICAgICAgaWYoIHN0YXJ0IDwgbV9zaXplICkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmdSZWYoIG1fc3RhcnQrc3RhcnQsIHNpemUgKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZ1JlZigpOworICAgIH0KICAgICBhdXRvIFN0cmluZ1JlZjo6b3BlcmF0b3IgPT0gKCBTdHJpbmdSZWYgY29uc3QmIG90aGVyICkgY29uc3Qgbm9leGNlcHQgLT4gYm9vbCB7Ci0gICAgICAgIHJldHVybiBtX3NpemUgPT0gb3RoZXIubV9zaXplCi0gICAgICAgICAgICAmJiAoc3RkOjptZW1jbXAoIG1fc3RhcnQsIG90aGVyLm1fc3RhcnQsIG1fc2l6ZSApID09IDApOworICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNpemUoKSA9PSBvdGhlci5zaXplKCkgJiYKKyAgICAgICAgICAgIChzdGQ6OnN0cm5jbXAoIG1fc3RhcnQsIG90aGVyLm1fc3RhcnQsIHNpemUoKSApID09IDApOworICAgIH0KKyAgICBhdXRvIFN0cmluZ1JlZjo6b3BlcmF0b3IgIT0gKCBTdHJpbmdSZWYgY29uc3QmIG90aGVyICkgY29uc3Qgbm9leGNlcHQgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PSggb3RoZXIgKTsKKyAgICB9CisKKyAgICBhdXRvIFN0cmluZ1JlZjo6b3BlcmF0b3JbXShzaXplX3R5cGUgaW5kZXgpIGNvbnN0IG5vZXhjZXB0IC0+IGNoYXIgeworICAgICAgICByZXR1cm4gbV9zdGFydFtpbmRleF07CisgICAgfQorCisgICAgYXV0byBTdHJpbmdSZWY6Om51bWJlck9mQ2hhcmFjdGVycygpIGNvbnN0IG5vZXhjZXB0IC0+IHNpemVfdHlwZSB7CisgICAgICAgIHNpemVfdHlwZSBub0NoYXJzID0gbV9zaXplOworICAgICAgICAvLyBNYWtlIGFkanVzdG1lbnRzIGZvciB1ZnQgZW5jb2RpbmdzCisgICAgICAgIGZvciggc2l6ZV90eXBlIGk9MDsgaSA8IG1fc2l6ZTsgKytpICkgeworICAgICAgICAgICAgY2hhciBjID0gbV9zdGFydFtpXTsKKyAgICAgICAgICAgIGlmKCAoIGMgJiBieXRlXzJfbGVhZCApID09IGJ5dGVfMl9sZWFkICkgeworICAgICAgICAgICAgICAgIG5vQ2hhcnMtLTsKKyAgICAgICAgICAgICAgICBpZiAoKCBjICYgYnl0ZV8zX2xlYWQgKSA9PSBieXRlXzNfbGVhZCApCisgICAgICAgICAgICAgICAgICAgIG5vQ2hhcnMtLTsKKyAgICAgICAgICAgICAgICBpZiggKCBjICYgYnl0ZV80X2xlYWQgKSA9PSBieXRlXzRfbGVhZCApCisgICAgICAgICAgICAgICAgICAgIG5vQ2hhcnMtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbm9DaGFyczsKKyAgICB9CisKKyAgICBhdXRvIG9wZXJhdG9yICsgKCBTdHJpbmdSZWYgY29uc3QmIGxocywgU3RyaW5nUmVmIGNvbnN0JiByaHMgKSAtPiBzdGQ6OnN0cmluZyB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHN0cjsKKyAgICAgICAgc3RyLnJlc2VydmUoIGxocy5zaXplKCkgKyByaHMuc2l6ZSgpICk7CisgICAgICAgIHN0ciArPSBsaHM7CisgICAgICAgIHN0ciArPSByaHM7CisgICAgICAgIHJldHVybiBzdHI7CisgICAgfQorICAgIGF1dG8gb3BlcmF0b3IgKyAoIFN0cmluZ1JlZiBjb25zdCYgbGhzLCBjb25zdCBjaGFyKiByaHMgKSAtPiBzdGQ6OnN0cmluZyB7CisgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZyggbGhzICkgKyBzdGQ6OnN0cmluZyggcmhzICk7CisgICAgfQorICAgIGF1dG8gb3BlcmF0b3IgKyAoIGNoYXIgY29uc3QqIGxocywgU3RyaW5nUmVmIGNvbnN0JiByaHMgKSAtPiBzdGQ6OnN0cmluZyB7CisgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZyggbGhzICkgKyBzdGQ6OnN0cmluZyggcmhzICk7CiAgICAgfQogCiAgICAgYXV0byBvcGVyYXRvciA8PCAoIHN0ZDo6b3N0cmVhbSYgb3MsIFN0cmluZ1JlZiBjb25zdCYgc3RyICkgLT4gc3RkOjpvc3RyZWFtJiB7Ci0gICAgICAgIHJldHVybiBvcy53cml0ZShzdHIuZGF0YSgpLCBzdHIuc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIG9zLndyaXRlKHN0ci5jdXJyZW50RGF0YSgpLCBzdHIuc2l6ZSgpKTsKICAgICB9CiAKICAgICBhdXRvIG9wZXJhdG9yKz0oIHN0ZDo6c3RyaW5nJiBsaHMsIFN0cmluZ1JlZiBjb25zdCYgcmhzICkgLT4gc3RkOjpzdHJpbmcmIHsKLSAgICAgICAgbGhzLmFwcGVuZChyaHMuZGF0YSgpLCByaHMuc2l6ZSgpKTsKKyAgICAgICAgbGhzLmFwcGVuZChyaHMuY3VycmVudERhdGEoKSwgcmhzLnNpemUoKSk7CiAgICAgICAgIHJldHVybiBsaHM7CiAgICAgfQogCiB9IC8vIG5hbWVzcGFjZSBDYXRjaAorCisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjICAgIHByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3N0cmluZ3JlZi5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zdHJpbmdyZWYuaAppbmRleCBkYzJlNzQ4Li42NGY1OTViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3N0cmluZ3JlZi5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3RyaW5ncmVmLmgKQEAgLTEwLDMwICsxMCw1MyBAQAogI2luY2x1ZGUgPGNzdGRkZWY+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPGlvc2Z3ZD4KLSNpbmNsdWRlIDxjYXNzZXJ0PgogCiBuYW1lc3BhY2UgQ2F0Y2ggewogCiAgICAgLy8vIEEgbm9uLW93bmluZyBzdHJpbmcgY2xhc3MgKHNpbWlsYXIgdG8gdGhlIGZvcnRoY29taW5nIHN0ZDo6c3RyaW5nX3ZpZXcpCiAgICAgLy8vIE5vdGUgdGhhdCwgYmVjYXVzZSBhIFN0cmluZ1JlZiBtYXkgYmUgYSBzdWJzdHJpbmcgb2YgYW5vdGhlciBzdHJpbmcsCi0gICAgLy8vIGl0IG1heSBub3QgYmUgbnVsbCB0ZXJtaW5hdGVkLgorICAgIC8vLyBpdCBtYXkgbm90IGJlIG51bGwgdGVybWluYXRlZC4gY19zdHIoKSBtdXN0IHJldHVybiBhIG51bGwgdGVybWluYXRlZAorICAgIC8vLyBzdHJpbmcsIGhvd2V2ZXIsIGFuZCBzbyB0aGUgU3RyaW5nUmVmIHdpbGwgaW50ZXJuYWxseSB0YWtlIG93bmVyc2hpcAorICAgIC8vLyAodGFraW5nIGEgY29weSksIGlmIG5lY2Vzc2FyeS4gSW4gdGhlb3J5IHRoaXMgb3duZXJzaGlwIGlzIG5vdCBleHRlcm5hbGx5CisgICAgLy8vIHZpc2libGUgLSBidXQgaXQgZG9lcyBtZWFuIChzdWJzdHJpbmcpIFN0cmluZ1JlZnMgc2hvdWxkIG5vdCBiZSBzaGFyZWQgYmV0d2VlbgorICAgIC8vLyB0aHJlYWRzLgogICAgIGNsYXNzIFN0cmluZ1JlZiB7CiAgICAgcHVibGljOgogICAgICAgICB1c2luZyBzaXplX3R5cGUgPSBzdGQ6OnNpemVfdDsKLSAgICAgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBjb25zdCBjaGFyKjsKIAogICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBzdHJ1Y3QgU3RyaW5nUmVmVGVzdEFjY2VzczsKKworICAgICAgICBjaGFyIGNvbnN0KiBtX3N0YXJ0OworICAgICAgICBzaXplX3R5cGUgbV9zaXplOworCisgICAgICAgIGNoYXIqIG1fZGF0YSA9IG51bGxwdHI7CisKKyAgICAgICAgdm9pZCB0YWtlT3duZXJzaGlwKCk7CisKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyIGNvbnN0KiBjb25zdCBzX2VtcHR5ID0gIiI7CiAKLSAgICAgICAgY2hhciBjb25zdCogbV9zdGFydCA9IHNfZW1wdHk7Ci0gICAgICAgIHNpemVfdHlwZSBtX3NpemUgPSAwOworICAgIHB1YmxpYzogLy8gY29uc3RydWN0aW9uLyBhc3NpZ25tZW50CisgICAgICAgIFN0cmluZ1JlZigpIG5vZXhjZXB0CisgICAgICAgIDogICBTdHJpbmdSZWYoIHNfZW1wdHksIDAgKQorICAgICAgICB7fQogCi0gICAgcHVibGljOiAvLyBjb25zdHJ1Y3Rpb24KLSAgICAgICAgY29uc3RleHByIFN0cmluZ1JlZigpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgICAgICAgU3RyaW5nUmVmKCBTdHJpbmdSZWYgY29uc3QmIG90aGVyICkgbm9leGNlcHQKKyAgICAgICAgOiAgIG1fc3RhcnQoIG90aGVyLm1fc3RhcnQgKSwKKyAgICAgICAgICAgIG1fc2l6ZSggb3RoZXIubV9zaXplICkKKyAgICAgICAge30KKworICAgICAgICBTdHJpbmdSZWYoIFN0cmluZ1JlZiYmIG90aGVyICkgbm9leGNlcHQKKyAgICAgICAgOiAgIG1fc3RhcnQoIG90aGVyLm1fc3RhcnQgKSwKKyAgICAgICAgICAgIG1fc2l6ZSggb3RoZXIubV9zaXplICksCisgICAgICAgICAgICBtX2RhdGEoIG90aGVyLm1fZGF0YSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG90aGVyLm1fZGF0YSA9IG51bGxwdHI7CisgICAgICAgIH0KIAogICAgICAgICBTdHJpbmdSZWYoIGNoYXIgY29uc3QqIHJhd0NoYXJzICkgbm9leGNlcHQ7CiAKLSAgICAgICAgY29uc3RleHByIFN0cmluZ1JlZiggY2hhciBjb25zdCogcmF3Q2hhcnMsIHNpemVfdHlwZSBzaXplICkgbm9leGNlcHQKKyAgICAgICAgU3RyaW5nUmVmKCBjaGFyIGNvbnN0KiByYXdDaGFycywgc2l6ZV90eXBlIHNpemUgKSBub2V4Y2VwdAogICAgICAgICA6ICAgbV9zdGFydCggcmF3Q2hhcnMgKSwKICAgICAgICAgICAgIG1fc2l6ZSggc2l6ZSApCiAgICAgICAgIHt9CkBAIC00Myw2MSArNjYsNjYgQEAKICAgICAgICAgICAgIG1fc2l6ZSggc3RkU3RyaW5nLnNpemUoKSApCiAgICAgICAgIHt9CiAKLSAgICAgICAgZXhwbGljaXQgb3BlcmF0b3Igc3RkOjpzdHJpbmcoKSBjb25zdCB7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcobV9zdGFydCwgbV9zaXplKTsKKyAgICAgICAgflN0cmluZ1JlZigpIG5vZXhjZXB0IHsKKyAgICAgICAgICAgIGRlbGV0ZVtdIG1fZGF0YTsKICAgICAgICAgfQogCisgICAgICAgIGF1dG8gb3BlcmF0b3IgPSAoIFN0cmluZ1JlZiBjb25zdCAmb3RoZXIgKSBub2V4Y2VwdCAtPiBTdHJpbmdSZWYmIHsKKyAgICAgICAgICAgIGRlbGV0ZVtdIG1fZGF0YTsKKyAgICAgICAgICAgIG1fZGF0YSA9IG51bGxwdHI7CisgICAgICAgICAgICBtX3N0YXJ0ID0gb3RoZXIubV9zdGFydDsKKyAgICAgICAgICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIG9wZXJhdG9yIHN0ZDo6c3RyaW5nKCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBzd2FwKCBTdHJpbmdSZWYmIG90aGVyICkgbm9leGNlcHQ7CisKICAgICBwdWJsaWM6IC8vIG9wZXJhdG9ycwogICAgICAgICBhdXRvIG9wZXJhdG9yID09ICggU3RyaW5nUmVmIGNvbnN0JiBvdGhlciApIGNvbnN0IG5vZXhjZXB0IC0+IGJvb2w7Ci0gICAgICAgIGF1dG8gb3BlcmF0b3IgIT0gKFN0cmluZ1JlZiBjb25zdCYgb3RoZXIpIGNvbnN0IG5vZXhjZXB0IC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgICAgICB9CisgICAgICAgIGF1dG8gb3BlcmF0b3IgIT0gKCBTdHJpbmdSZWYgY29uc3QmIG90aGVyICkgY29uc3Qgbm9leGNlcHQgLT4gYm9vbDsKIAotICAgICAgICBhdXRvIG9wZXJhdG9yW10gKCBzaXplX3R5cGUgaW5kZXggKSBjb25zdCBub2V4Y2VwdCAtPiBjaGFyIHsKLSAgICAgICAgICAgIGFzc2VydChpbmRleCA8IG1fc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdGFydFtpbmRleF07Ci0gICAgICAgIH0KKyAgICAgICAgYXV0byBvcGVyYXRvcltdICggc2l6ZV90eXBlIGluZGV4ICkgY29uc3Qgbm9leGNlcHQgLT4gY2hhcjsKIAogICAgIHB1YmxpYzogLy8gbmFtZWQgcXVlcmllcwotICAgICAgICBjb25zdGV4cHIgYXV0byBlbXB0eSgpIGNvbnN0IG5vZXhjZXB0IC0+IGJvb2wgeworICAgICAgICBhdXRvIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQgLT4gYm9vbCB7CiAgICAgICAgICAgICByZXR1cm4gbV9zaXplID09IDA7CiAgICAgICAgIH0KLSAgICAgICAgY29uc3RleHByIGF1dG8gc2l6ZSgpIGNvbnN0IG5vZXhjZXB0IC0+IHNpemVfdHlwZSB7CisgICAgICAgIGF1dG8gc2l6ZSgpIGNvbnN0IG5vZXhjZXB0IC0+IHNpemVfdHlwZSB7CiAgICAgICAgICAgICByZXR1cm4gbV9zaXplOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gUmV0dXJucyB0aGUgY3VycmVudCBzdGFydCBwb2ludGVyLiBJZiB0aGUgU3RyaW5nUmVmIGlzIG5vdAotICAgICAgICAvLyBudWxsLXRlcm1pbmF0ZWQsIHRocm93cyBzdGQ6OmRvbWFpbl9leGNlcHRpb24KKyAgICAgICAgYXV0byBudW1iZXJPZkNoYXJhY3RlcnMoKSBjb25zdCBub2V4Y2VwdCAtPiBzaXplX3R5cGU7CiAgICAgICAgIGF1dG8gY19zdHIoKSBjb25zdCAtPiBjaGFyIGNvbnN0KjsKIAogICAgIHB1YmxpYzogLy8gc3Vic3RyaW5ncyBhbmQgc2VhcmNoZXMKLSAgICAgICAgLy8gUmV0dXJucyBhIHN1YnN0cmluZyBvZiBbc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoKS4KLSAgICAgICAgLy8gSWYgc3RhcnQgKyBsZW5ndGggPiBzaXplKCksIHRoZW4gdGhlIHN1YnN0cmluZyBpcyBbc3RhcnQsIHNpemUoKSkuCi0gICAgICAgIC8vIElmIHN0YXJ0ID4gc2l6ZSgpLCB0aGVuIHRoZSBzdWJzdHJpbmcgaXMgZW1wdHkuCi0gICAgICAgIGF1dG8gc3Vic3RyKCBzaXplX3R5cGUgc3RhcnQsIHNpemVfdHlwZSBsZW5ndGggKSBjb25zdCBub2V4Y2VwdCAtPiBTdHJpbmdSZWY7CisgICAgICAgIGF1dG8gc3Vic3RyKCBzaXplX3R5cGUgc3RhcnQsIHNpemVfdHlwZSBzaXplICkgY29uc3Qgbm9leGNlcHQgLT4gU3RyaW5nUmVmOwogCi0gICAgICAgIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhcnQgcG9pbnRlci4gTWF5IG5vdCBiZSBudWxsLXRlcm1pbmF0ZWQuCi0gICAgICAgIGF1dG8gZGF0YSgpIGNvbnN0IG5vZXhjZXB0IC0+IGNoYXIgY29uc3QqOworICAgICAgICAvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXJ0IHBvaW50ZXIuCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgcG9pbnRlciBjYW4gY2hhbmdlIHdoZW4gaWYgdGhlIFN0cmluZ1JlZiBpcyBhIHN1YnN0cmluZworICAgICAgICBhdXRvIGN1cnJlbnREYXRhKCkgY29uc3Qgbm9leGNlcHQgLT4gY2hhciBjb25zdCo7CiAKLSAgICAgICAgY29uc3RleHByIGF1dG8gaXNOdWxsVGVybWluYXRlZCgpIGNvbnN0IG5vZXhjZXB0IC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuIG1fc3RhcnRbbV9zaXplXSA9PSAnXDAnOwotICAgICAgICB9Ci0KLSAgICBwdWJsaWM6IC8vIGl0ZXJhdG9ycwotICAgICAgICBjb25zdGV4cHIgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9Ci0gICAgICAgIGNvbnN0ZXhwciBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0ICsgbV9zaXplOyB9CisgICAgcHJpdmF0ZTogLy8gb3duZXJzaGlwIHF1ZXJpZXMgLSBtYXkgbm90IGJlIGNvbnNpc3RlbnQgYmV0d2VlbiBjYWxscworICAgICAgICBhdXRvIGlzT3duZWQoKSBjb25zdCBub2V4Y2VwdCAtPiBib29sOworICAgICAgICBhdXRvIGlzU3Vic3RyaW5nKCkgY29uc3Qgbm9leGNlcHQgLT4gYm9vbDsKICAgICB9OwogCisgICAgYXV0byBvcGVyYXRvciArICggU3RyaW5nUmVmIGNvbnN0JiBsaHMsIFN0cmluZ1JlZiBjb25zdCYgcmhzICkgLT4gc3RkOjpzdHJpbmc7CisgICAgYXV0byBvcGVyYXRvciArICggU3RyaW5nUmVmIGNvbnN0JiBsaHMsIGNoYXIgY29uc3QqIHJocyApIC0+IHN0ZDo6c3RyaW5nOworICAgIGF1dG8gb3BlcmF0b3IgKyAoIGNoYXIgY29uc3QqIGxocywgU3RyaW5nUmVmIGNvbnN0JiByaHMgKSAtPiBzdGQ6OnN0cmluZzsKKwogICAgIGF1dG8gb3BlcmF0b3IgKz0gKCBzdGQ6OnN0cmluZyYgbGhzLCBTdHJpbmdSZWYgY29uc3QmIHNyICkgLT4gc3RkOjpzdHJpbmcmOwogICAgIGF1dG8gb3BlcmF0b3IgPDwgKCBzdGQ6Om9zdHJlYW0mIG9zLCBTdHJpbmdSZWYgY29uc3QmIHNyICkgLT4gc3RkOjpvc3RyZWFtJjsKIAogCi0gICAgY29uc3RleHByIGF1dG8gb3BlcmF0b3IgIiIgX3NyKCBjaGFyIGNvbnN0KiByYXdDaGFycywgc3RkOjpzaXplX3Qgc2l6ZSApIG5vZXhjZXB0IC0+IFN0cmluZ1JlZiB7CisgICAgaW5saW5lIGF1dG8gb3BlcmF0b3IgIiIgX3NyKCBjaGFyIGNvbnN0KiByYXdDaGFycywgc3RkOjpzaXplX3Qgc2l6ZSApIG5vZXhjZXB0IC0+IFN0cmluZ1JlZiB7CiAgICAgICAgIHJldHVybiBTdHJpbmdSZWYoIHJhd0NoYXJzLCBzaXplICk7CiAgICAgfQorCiB9IC8vIG5hbWVzcGFjZSBDYXRjaAogCi1jb25zdGV4cHIgYXV0byBvcGVyYXRvciAiIiBfY2F0Y2hfc3IoIGNoYXIgY29uc3QqIHJhd0NoYXJzLCBzdGQ6OnNpemVfdCBzaXplICkgbm9leGNlcHQgLT4gQ2F0Y2g6OlN0cmluZ1JlZiB7CitpbmxpbmUgYXV0byBvcGVyYXRvciAiIiBfY2F0Y2hfc3IoIGNoYXIgY29uc3QqIHJhd0NoYXJzLCBzdGQ6OnNpemVfdCBzaXplICkgbm9leGNlcHQgLT4gQ2F0Y2g6OlN0cmluZ1JlZiB7CiAgICAgcmV0dXJuIENhdGNoOjpTdHJpbmdSZWYoIHJhd0NoYXJzLCBzaXplICk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGFnX2FsaWFzX2F1dG9yZWdpc3RyYXIuaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGFnX2FsaWFzX2F1dG9yZWdpc3RyYXIuaAppbmRleCBlYmJhOGUyLi4zMmE1NzM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3RhZ19hbGlhc19hdXRvcmVnaXN0cmFyLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90YWdfYWxpYXNfYXV0b3JlZ2lzdHJhci5oCkBAIC0xOCw5ICsxOCw4IEBACiB9IC8vIGVuZCBuYW1lc3BhY2UgQ2F0Y2gKIAogI2RlZmluZSBDQVRDSF9SRUdJU1RFUl9UQUdfQUxJQVMoIGFsaWFzLCBzcGVjICkgXAotICAgIENBVENIX0lOVEVSTkFMX1NUQVJUX1dBUk5JTkdTX1NVUFBSRVNTSU9OIFwKICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTIFwKICAgICBuYW1lc3BhY2V7IENhdGNoOjpSZWdpc3RyYXJGb3JUYWdBbGlhc2VzIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBBdXRvUmVnaXN0ZXJUYWdBbGlhcyApKCBhbGlhcywgc3BlYywgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8gKTsgfSBcCi0gICAgQ0FUQ0hfSU5URVJOQUxfU1RPUF9XQVJOSU5HU19TVVBQUkVTU0lPTgorICAgIENBVENIX0lOVEVSTkFMX1VOU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUwogCiAjZW5kaWYgLy8gVFdPQkxVRUNVQkVTX0NBVENIX1RBR19BTElBU19BVVRPUkVHSVNUUkFSX0hfSU5DTFVERUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9jYXNlX2luZm8uY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfaW5mby5jcHAKaW5kZXggY2VlOTcyZi4uNGJhYTlkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfaW5mby5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfaW5mby5jcHAKQEAgLTU5LDcgKzU5LDggQEAKICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRhZ3M7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGRlc2MsIHRhZzsKICAgICAgICAgYm9vbCBpblRhZyA9IGZhbHNlOwotICAgICAgICBmb3IgKGNoYXIgYyA6IG5hbWVBbmRUYWdzLnRhZ3MpIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgX2Rlc2NPclRhZ3MgPSBuYW1lQW5kVGFncy50YWdzOworICAgICAgICBmb3IgKGNoYXIgYyA6IF9kZXNjT3JUYWdzKSB7CiAgICAgICAgICAgICBpZiggIWluVGFnICkgewogICAgICAgICAgICAgICAgIGlmKCBjID09ICdbJyApCiAgICAgICAgICAgICAgICAgICAgIGluVGFnID0gdHJ1ZTsKQEAgLTg5LDExICs5MCwxMCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmKCBpc0hpZGRlbiApIHsKLSAgICAgICAgICAgIC8vIEFkZCBhbGwgImhpZGRlbiIgdGFncyB0byBtYWtlIHRoZW0gYmVoYXZlIGlkZW50aWNhbGx5Ci0gICAgICAgICAgICB0YWdzLmluc2VydCggdGFncy5lbmQoKSwgeyAiLiIsICIhaGlkZSIgfSApOworICAgICAgICAgICAgdGFncy5wdXNoX2JhY2soICIuIiApOwogICAgICAgICB9CiAKLSAgICAgICAgVGVzdENhc2VJbmZvIGluZm8oIHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nPihuYW1lQW5kVGFncy5uYW1lKSwgX2NsYXNzTmFtZSwgZGVzYywgdGFncywgX2xpbmVJbmZvICk7CisgICAgICAgIFRlc3RDYXNlSW5mbyBpbmZvKCBuYW1lQW5kVGFncy5uYW1lLCBfY2xhc3NOYW1lLCBkZXNjLCB0YWdzLCBfbGluZUluZm8gKTsKICAgICAgICAgcmV0dXJuIFRlc3RDYXNlKCBfdGVzdENhc2UsIHN0ZDo6bW92ZShpbmZvKSApOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfcmVnaXN0cnlfaW1wbC5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV9yZWdpc3RyeV9pbXBsLmNwcAppbmRleCBiMjU0Y2EwLi5hODVkMGVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV9yZWdpc3RyeV9pbXBsLmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV9yZWdpc3RyeV9pbXBsLmNwcApAQCAtMTEsNyArMTEsNiBAQAogI2luY2x1ZGUgImNhdGNoX2VuZm9yY2UuaCIKICNpbmNsdWRlICJjYXRjaF9pbnRlcmZhY2VzX3JlZ2lzdHJ5X2h1Yi5oIgogI2luY2x1ZGUgImNhdGNoX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiY2F0Y2hfcnVuX2NvbnRleHQuaCIKICNpbmNsdWRlICJjYXRjaF9zdHJpbmdfbWFuaXAuaCIKICNpbmNsdWRlICJjYXRjaF90ZXN0X2Nhc2VfaW5mby5oIgogCkBAIC0zNywxMyArMzYsOCBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzb3J0ZWQ7CiAgICAgfQotCi0gICAgYm9vbCBpc1Rocm93U2FmZSggVGVzdENhc2UgY29uc3QmIHRlc3RDYXNlLCBJQ29uZmlnIGNvbnN0JiBjb25maWcgKSB7Ci0gICAgICAgIHJldHVybiAhdGVzdENhc2UudGhyb3dzKCkgfHwgY29uZmlnLmFsbG93VGhyb3dzKCk7Ci0gICAgfQotCiAgICAgYm9vbCBtYXRjaFRlc3QoIFRlc3RDYXNlIGNvbnN0JiB0ZXN0Q2FzZSwgVGVzdFNwZWMgY29uc3QmIHRlc3RTcGVjLCBJQ29uZmlnIGNvbnN0JiBjb25maWcgKSB7Ci0gICAgICAgIHJldHVybiB0ZXN0U3BlYy5tYXRjaGVzKCB0ZXN0Q2FzZSApICYmIGlzVGhyb3dTYWZlKCB0ZXN0Q2FzZSwgY29uZmlnICk7CisgICAgICAgIHJldHVybiB0ZXN0U3BlYy5tYXRjaGVzKCB0ZXN0Q2FzZSApICYmICggY29uZmlnLmFsbG93VGhyb3dzKCkgfHwgIXRlc3RDYXNlLnRocm93cygpICk7CiAgICAgfQogCiAgICAgdm9pZCBlbmZvcmNlTm9EdXBsaWNhdGVUZXN0Q2FzZXMoIHN0ZDo6dmVjdG9yPFRlc3RDYXNlPiBjb25zdCYgZnVuY3Rpb25zICkgewpAQCAtMTA2LDcgKzEwMCw3IEBACiAgICAgfQogCiAgICAgc3RkOjpzdHJpbmcgZXh0cmFjdENsYXNzTmFtZSggU3RyaW5nUmVmIGNvbnN0JiBjbGFzc09yUXVhbGlmaWVkTWV0aG9kTmFtZSApIHsKLSAgICAgICAgc3RkOjpzdHJpbmcgY2xhc3NOYW1lKGNsYXNzT3JRdWFsaWZpZWRNZXRob2ROYW1lKTsKKyAgICAgICAgc3RkOjpzdHJpbmcgY2xhc3NOYW1lID0gY2xhc3NPclF1YWxpZmllZE1ldGhvZE5hbWU7CiAgICAgICAgIGlmKCBzdGFydHNXaXRoKCBjbGFzc05hbWUsICcmJyApICkKICAgICAgICAgewogICAgICAgICAgICAgc3RkOjpzaXplX3QgbGFzdENvbG9ucyA9IGNsYXNzTmFtZS5yZmluZCggIjo6IiApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfcmVnaXN0cnlfaW1wbC5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfcmVnaXN0cnlfaW1wbC5oCmluZGV4IDM1OWFjM2UuLjhkYzViMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9jYXNlX3JlZ2lzdHJ5X2ltcGwuaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV9yZWdpc3RyeV9pbXBsLmgKQEAgLTIzLDggKzIzLDYgQEAKICAgICBzdHJ1Y3QgSUNvbmZpZzsKIAogICAgIHN0ZDo6dmVjdG9yPFRlc3RDYXNlPiBzb3J0VGVzdHMoIElDb25maWcgY29uc3QmIGNvbmZpZywgc3RkOjp2ZWN0b3I8VGVzdENhc2U+IGNvbnN0JiB1bnNvcnRlZFRlc3RDYXNlcyApOwotCi0gICAgYm9vbCBpc1Rocm93U2FmZSggVGVzdENhc2UgY29uc3QmIHRlc3RDYXNlLCBJQ29uZmlnIGNvbnN0JiBjb25maWcgKTsKICAgICBib29sIG1hdGNoVGVzdCggVGVzdENhc2UgY29uc3QmIHRlc3RDYXNlLCBUZXN0U3BlYyBjb25zdCYgdGVzdFNwZWMsIElDb25maWcgY29uc3QmIGNvbmZpZyApOwogCiAgICAgdm9pZCBlbmZvcmNlTm9EdXBsaWNhdGVUZXN0Q2FzZXMoIHN0ZDo6dmVjdG9yPFRlc3RDYXNlPiBjb25zdCYgZnVuY3Rpb25zICk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV90cmFja2VyLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9jYXNlX3RyYWNrZXIuY3BwCmluZGV4IDFmYzgyMGIuLjFlZjgzMGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9jYXNlX3RyYWNrZXIuY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9jYXNlX3RyYWNrZXIuY3BwCkBAIC04LDcgKzgsNiBAQAogI2luY2x1ZGUgImNhdGNoX3Rlc3RfY2FzZV90cmFja2VyLmgiCiAKICNpbmNsdWRlICJjYXRjaF9lbmZvcmNlLmgiCi0jaW5jbHVkZSAiY2F0Y2hfc3RyaW5nX21hbmlwLmgiCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y2Fzc2VydD4KQEAgLTE0MCw3ICsxMzksNyBAQAogICAgICAgICAgICAgICAgIG1fcnVuU3RhdGUgPSBDb21wbGV0ZWRTdWNjZXNzZnVsbHk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEV4ZWN1dGluZ0NoaWxkcmVuOgotICAgICAgICAgICAgICAgIGlmKCBzdGQ6OmFsbF9vZihtX2NoaWxkcmVuLmJlZ2luKCksIG1fY2hpbGRyZW4uZW5kKCksIFtdKElUcmFja2VyUHRyIGNvbnN0JiB0KXsgcmV0dXJuIHQtPmlzQ29tcGxldGUoKTsgfSkgKQorICAgICAgICAgICAgICAgIGlmKCBtX2NoaWxkcmVuLmVtcHR5KCkgfHwgbV9jaGlsZHJlbi5iYWNrKCktPmlzQ29tcGxldGUoKSApCiAgICAgICAgICAgICAgICAgICAgIG1fcnVuU3RhdGUgPSBDb21wbGV0ZWRTdWNjZXNzZnVsbHk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTE3NSw4ICsxNzQsNyBAQAogICAgIH0KIAogICAgIFNlY3Rpb25UcmFja2VyOjpTZWN0aW9uVHJhY2tlciggTmFtZUFuZExvY2F0aW9uIGNvbnN0JiBuYW1lQW5kTG9jYXRpb24sIFRyYWNrZXJDb250ZXh0JiBjdHgsIElUcmFja2VyKiBwYXJlbnQgKQotICAgIDogICBUcmFja2VyQmFzZSggbmFtZUFuZExvY2F0aW9uLCBjdHgsIHBhcmVudCApLAotICAgICAgICBtX3RyaW1tZWRfbmFtZSh0cmltKG5hbWVBbmRMb2NhdGlvbi5uYW1lKSkKKyAgICA6ICAgVHJhY2tlckJhc2UoIG5hbWVBbmRMb2NhdGlvbiwgY3R4LCBwYXJlbnQgKQogICAgIHsKICAgICAgICAgaWYoIHBhcmVudCApIHsKICAgICAgICAgICAgIHdoaWxlKCAhcGFyZW50LT5pc1NlY3Rpb25UcmFja2VyKCkgKQpAQCAtMTkwLDExICsxODgsMTIgQEAKICAgICBib29sIFNlY3Rpb25UcmFja2VyOjppc0NvbXBsZXRlKCkgY29uc3QgewogICAgICAgICBib29sIGNvbXBsZXRlID0gdHJ1ZTsKIAotICAgICAgICBpZiAoKG1fZmlsdGVycy5lbXB0eSgpIHx8IG1fZmlsdGVyc1swXSA9PSAiIikKLSAgICAgICAgICAgIHx8IHN0ZDo6ZmluZChtX2ZpbHRlcnMuYmVnaW4oKSwgbV9maWx0ZXJzLmVuZCgpLCBtX3RyaW1tZWRfbmFtZSkgIT0gbV9maWx0ZXJzLmVuZCgpKSB7CisgICAgICAgIGlmICgobV9maWx0ZXJzLmVtcHR5KCkgfHwgbV9maWx0ZXJzWzBdID09ICIiKSB8fAorICAgICAgICAgICAgIHN0ZDo6ZmluZChtX2ZpbHRlcnMuYmVnaW4oKSwgbV9maWx0ZXJzLmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICBtX25hbWVBbmRMb2NhdGlvbi5uYW1lKSAhPSBtX2ZpbHRlcnMuZW5kKCkpCiAgICAgICAgICAgICBjb21wbGV0ZSA9IFRyYWNrZXJCYXNlOjppc0NvbXBsZXRlKCk7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvbXBsZXRlOworCiAgICAgfQogCiAgICAgYm9vbCBTZWN0aW9uVHJhY2tlcjo6aXNTZWN0aW9uVHJhY2tlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTIxOCwyMSArMjE3LDIwIEBACiAgICAgfQogCiAgICAgdm9pZCBTZWN0aW9uVHJhY2tlcjo6dHJ5T3BlbigpIHsKLSAgICAgICAgaWYoICFpc0NvbXBsZXRlKCkgKQorICAgICAgICBpZiggIWlzQ29tcGxldGUoKSAmJiAobV9maWx0ZXJzLmVtcHR5KCkgfHwgbV9maWx0ZXJzWzBdLmVtcHR5KCkgfHwgIG1fZmlsdGVyc1swXSA9PSBtX25hbWVBbmRMb2NhdGlvbi5uYW1lICkgKQogICAgICAgICAgICAgb3BlbigpOwogICAgIH0KIAogICAgIHZvaWQgU2VjdGlvblRyYWNrZXI6OmFkZEluaXRpYWxGaWx0ZXJzKCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGZpbHRlcnMgKSB7CiAgICAgICAgIGlmKCAhZmlsdGVycy5lbXB0eSgpICkgewotICAgICAgICAgICAgbV9maWx0ZXJzLnJlc2VydmUoIG1fZmlsdGVycy5zaXplKCkgKyBmaWx0ZXJzLnNpemUoKSArIDIgKTsKLSAgICAgICAgICAgIG1fZmlsdGVycy5lbXBsYWNlX2JhY2soIiIpOyAvLyBSb290IC0gc2hvdWxkIG5ldmVyIGJlIGNvbnN1bHRlZAotICAgICAgICAgICAgbV9maWx0ZXJzLmVtcGxhY2VfYmFjaygiIik7IC8vIFRlc3QgQ2FzZSAtIG5vdCBhIHNlY3Rpb24gZmlsdGVyCisgICAgICAgICAgICBtX2ZpbHRlcnMucHVzaF9iYWNrKCIiKTsgLy8gUm9vdCAtIHNob3VsZCBuZXZlciBiZSBjb25zdWx0ZWQKKyAgICAgICAgICAgIG1fZmlsdGVycy5wdXNoX2JhY2soIiIpOyAvLyBUZXN0IENhc2UgLSBub3QgYSBzZWN0aW9uIGZpbHRlcgogICAgICAgICAgICAgbV9maWx0ZXJzLmluc2VydCggbV9maWx0ZXJzLmVuZCgpLCBmaWx0ZXJzLmJlZ2luKCksIGZpbHRlcnMuZW5kKCkgKTsKICAgICAgICAgfQogICAgIH0KICAgICB2b2lkIFNlY3Rpb25UcmFja2VyOjphZGROZXh0RmlsdGVycyggc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBmaWx0ZXJzICkgewogICAgICAgICBpZiggZmlsdGVycy5zaXplKCkgPiAxICkKLSAgICAgICAgICAgIG1fZmlsdGVycy5pbnNlcnQoIG1fZmlsdGVycy5lbmQoKSwgZmlsdGVycy5iZWdpbigpKzEsIGZpbHRlcnMuZW5kKCkgKTsKKyAgICAgICAgICAgIG1fZmlsdGVycy5pbnNlcnQoIG1fZmlsdGVycy5lbmQoKSwgKytmaWx0ZXJzLmJlZ2luKCksIGZpbHRlcnMuZW5kKCkgKTsKICAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RDYXNlVHJhY2tpbmcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9jYXNlX3RyYWNrZXIuaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9jYXNlX3RyYWNrZXIuaAppbmRleCA1NjNkYmVmLi45N2I2M2I4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV90cmFja2VyLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfdHJhY2tlci5oCkBAIC0xMzMsNyArMTMzLDYgQEAKIAogICAgIGNsYXNzIFNlY3Rpb25UcmFja2VyIDogcHVibGljIFRyYWNrZXJCYXNlIHsKICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1fZmlsdGVyczsKLSAgICAgICAgc3RkOjpzdHJpbmcgbV90cmltbWVkX25hbWU7CiAgICAgcHVibGljOgogICAgICAgICBTZWN0aW9uVHJhY2tlciggTmFtZUFuZExvY2F0aW9uIGNvbnN0JiBuYW1lQW5kTG9jYXRpb24sIFRyYWNrZXJDb250ZXh0JiBjdHgsIElUcmFja2VyKiBwYXJlbnQgKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X3JlZ2lzdHJ5LmggYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfcmVnaXN0cnkuaAppbmRleCBjOTYyNGZjLi4wZTdiNTNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfcmVnaXN0cnkuaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfcmVnaXN0cnkuaApAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgImNhdGNoX2ludGVyZmFjZXNfdGVzdGNhc2UuaCIKICNpbmNsdWRlICJjYXRjaF9jb21waWxlcl9jYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJjYXRjaF9zdHJpbmdyZWYuaCIKKyNpbmNsdWRlICJjYXRjaF90eXBlX3RyYWl0cy5ocHAiCiAjaW5jbHVkZSAiY2F0Y2hfcHJlcHJvY2Vzc29yLmhwcCIKICNpbmNsdWRlICJjYXRjaF9tZXRhLmhwcCIKIApAQCAtNTksNzAgKzYwLDM4IEBACiAgICAgICAgICAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIHZvaWQgVGVzdE5hbWU6OnRlc3QoKQotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTl8yKCBUZXN0TmFtZSwgVGVzdEZ1bmMsIE5hbWUsIFRhZ3MsIFNpZ25hdHVyZSwgLi4uICkgIFwKLSAgICAgICAgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUKFRlc3RGdW5jLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFNpZ25hdHVyZSkpCi0gICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX05PX1JFR0lTVFJBVElPTl8yKCBUZXN0TmFtZUNsYXNzLCBUZXN0TmFtZSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBTaWduYXR1cmUsIC4uLiApICAgIFwKKyAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9OT19SRUdJU1RSQVRJT04oIFRlc3ROYW1lLCAuLi4gKSAgXAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXRpYyB2b2lkIFRlc3ROYW1lKCkKKyAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OKCBUZXN0TmFtZSwgQ2xhc3NOYW1lLCAuLi4gKSAgICBcCiAgICAgICAgIG5hbWVzcGFjZXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgbmFtZXNwYWNlIElOVEVSTkFMX0NBVENIX01BS0VfTkFNRVNQQUNFKFRlc3ROYW1lKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRChUZXN0TmFtZSwgQ2xhc3NOYW1lLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFNpZ25hdHVyZSkpO1wKKyAgICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzdHJ1Y3QgVGVzdE5hbWUgOiBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKENsYXNzTmFtZSA8VGVzdFR5cGU+KSB7ICAgICBcCisgICAgICAgICAgICAgICAgdm9pZCB0ZXN0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EKFRlc3ROYW1lLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFNpZ25hdHVyZSkpCi0KLSAgICAjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgotICAgICAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9OT19SRUdJU1RSQVRJT04oTmFtZSwgVGFncywgLi4uKSBcCi0gICAgICAgICAgICBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTk9fUkVHSVNUUkFUSU9OXzIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19GX1VfTl9DX19fXyApLCBOYW1lLCBUYWdzLCB0eXBlbmFtZSBUZXN0VHlwZSwgX19WQV9BUkdTX18gKQotICAgICNlbHNlCi0gICAgICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTihOYW1lLCBUYWdzLCAuLi4pIFwKLSAgICAgICAgICAgIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTl8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgTmFtZSwgVGFncywgdHlwZW5hbWUgVGVzdFR5cGUsIF9fVkFfQVJHU19fICkgKQotICAgICNlbmRpZgotCi0gICAgI2lmbmRlZiBDQVRDSF9DT05GSUdfVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IKLSAgICAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfU0lHX05PX1JFR0lTVFJBVElPTihOYW1lLCBUYWdzLCBTaWduYXR1cmUsIC4uLikgXAotICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTl8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgTmFtZSwgVGFncywgU2lnbmF0dXJlLCBfX1ZBX0FSR1NfXyApCi0gICAgI2Vsc2UKLSAgICAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfU0lHX05PX1JFR0lTVFJBVElPTihOYW1lLCBUYWdzLCBTaWduYXR1cmUsIC4uLikgXAotICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTk9fUkVHSVNUUkFUSU9OXzIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19GX1VfTl9DX19fXyApLCBOYW1lLCBUYWdzLCBTaWduYXR1cmUsIF9fVkFfQVJHU19fICkgKQotICAgICNlbmRpZgotCi0gICAgI2lmbmRlZiBDQVRDSF9DT05GSUdfVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IKLSAgICAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX05PX1JFR0lTVFJBVElPTiggQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLC4uLiApIFwKLSAgICAgICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OXzIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0NfTF9BX1NfU19fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICkgLCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIHR5cGVuYW1lIFQsIF9fVkFfQVJHU19fICkKLSAgICAjZWxzZQotICAgICAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OKCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsLi4uICkgXAotICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX05PX1JFR0lTVFJBVElPTl8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19DX0xfQV9TX1NfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApICwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCB0eXBlbmFtZSBULCBfX1ZBX0FSR1NfXyApICkKLSAgICAjZW5kaWYKLQotICAgICNpZm5kZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCi0gICAgICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9TSUdfTk9fUkVHSVNUUkFUSU9OKCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIFNpZ25hdHVyZSwgLi4uICkgXAotICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9OT19SRUdJU1RSQVRJT05fMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fQ19MX0FfU19TX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSAsIENsYXNzTmFtZSwgTmFtZSwgVGFncywgU2lnbmF0dXJlLCBfX1ZBX0FSR1NfXyApCi0gICAgI2Vsc2UKLSAgICAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJR19OT19SRUdJU1RSQVRJT04oIENsYXNzTmFtZSwgTmFtZSwgVGFncywgU2lnbmF0dXJlLCAuLi4gKSBcCi0gICAgICAgICAgICBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OXzIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0NfTF9BX1NfU19fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICkgLCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIFNpZ25hdHVyZSwgX19WQV9BUkdTX18gKSApCi0gICAgI2VuZGlmCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB2b2lkIFRlc3ROYW1lOjp0ZXN0KCkKICNlbmRpZgogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVTVENBU0UyKCBUZXN0TmFtZSwgLi4uICkgXAogICAgICAgICBzdGF0aWMgdm9pZCBUZXN0TmFtZSgpOyBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NUQVJUX1dBUk5JTkdTX1NVUFBSRVNTSU9OIFwKICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyBcCiAgICAgICAgIG5hbWVzcGFjZXsgQ2F0Y2g6OkF1dG9SZWcgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIGF1dG9SZWdpc3RyYXIgKSggQ2F0Y2g6Om1ha2VUZXN0SW52b2tlciggJlRlc3ROYW1lICksIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDYXRjaDo6U3RyaW5nUmVmKCksIENhdGNoOjpOYW1lQW5kVGFnc3sgX19WQV9BUkdTX18gfSApOyB9IC8qIE5PTElOVCAqLyBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NUT1BfV0FSTklOR1NfU1VQUFJFU1NJT04gXAorICAgICAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAogICAgICAgICBzdGF0aWMgdm9pZCBUZXN0TmFtZSgpCiAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URVNUQ0FTRSggLi4uICkgXAogICAgICAgICBJTlRFUk5BTF9DQVRDSF9URVNUQ0FTRTIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9TX1RfX19fICksIF9fVkFfQVJHU19fICkKIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX01FVEhPRF9BU19URVNUX0NBU0UoIFF1YWxpZmllZE1ldGhvZCwgLi4uICkgXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTiBcCiAgICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAogICAgICAgICBuYW1lc3BhY2V7IENhdGNoOjpBdXRvUmVnIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBhdXRvUmVnaXN0cmFyICkoIENhdGNoOjptYWtlVGVzdEludm9rZXIoICZRdWFsaWZpZWRNZXRob2QgKSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sICImIiAjUXVhbGlmaWVkTWV0aG9kLCBDYXRjaDo6TmFtZUFuZFRhZ3N7IF9fVkFfQVJHU19fIH0gKTsgfSAvKiBOT0xJTlQgKi8gXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVE9QX1dBUk5JTkdTX1NVUFBSRVNTSU9OCisgICAgICAgIENBVENIX0lOVEVSTkFMX1VOU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUwogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVTVF9DQVNFX01FVEhPRDIoIFRlc3ROYW1lLCBDbGFzc05hbWUsIC4uLiApXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTiBcCiAgICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAogICAgICAgICBuYW1lc3BhY2V7IFwKICAgICAgICAgICAgIHN0cnVjdCBUZXN0TmFtZSA6IElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoQ2xhc3NOYW1lKSB7IFwKQEAgLTEzMCw3NyArOTksNjYgQEAKICAgICAgICAgICAgIH07IFwKICAgICAgICAgICAgIENhdGNoOjpBdXRvUmVnIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBhdXRvUmVnaXN0cmFyICkgKCBDYXRjaDo6bWFrZVRlc3RJbnZva2VyKCAmVGVzdE5hbWU6OnRlc3QgKSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sICNDbGFzc05hbWUsIENhdGNoOjpOYW1lQW5kVGFnc3sgX19WQV9BUkdTX18gfSApOyAvKiBOT0xJTlQgKi8gXAogICAgICAgICB9IFwKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1RPUF9XQVJOSU5HU19TVVBQUkVTU0lPTiBcCisgICAgICAgIENBVENIX0lOVEVSTkFMX1VOU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyBcCiAgICAgICAgIHZvaWQgVGVzdE5hbWU6OnRlc3QoKQogICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVTVF9DQVNFX01FVEhPRCggQ2xhc3NOYW1lLCAuLi4gKSBcCiAgICAgICAgIElOVEVSTkFMX0NBVENIX1RFU1RfQ0FTRV9NRVRIT0QyKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfU19UX19fXyApLCBDbGFzc05hbWUsIF9fVkFfQVJHU19fICkKIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1JFR0lTVEVSX1RFU1RDQVNFKCBGdW5jdGlvbiwgLi4uICkgXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTiBcCiAgICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAogICAgICAgICBDYXRjaDo6QXV0b1JlZyBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggYXV0b1JlZ2lzdHJhciApKCBDYXRjaDo6bWFrZVRlc3RJbnZva2VyKCBGdW5jdGlvbiApLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ2F0Y2g6OlN0cmluZ1JlZigpLCBDYXRjaDo6TmFtZUFuZFRhZ3N7IF9fVkFfQVJHU19fIH0gKTsgLyogTk9MSU5UICovIFwKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1RPUF9XQVJOSU5HU19TVVBQUkVTU0lPTgorICAgICAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MKIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV8yKFRlc3ROYW1lLCBUZXN0RnVuYywgTmFtZSwgVGFncywgU2lnbmF0dXJlLCAuLi4gKVwKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1RBUlRfV0FSTklOR1NfU1VQUFJFU1NJT04gXAorICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFXzIoVGVzdE5hbWUsIFRlc3RGdW5jLCBOYW1lLCBUYWdzLCAuLi4gKVwKICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1pFUk9fVkFSSUFESUNfV0FSTklOR1MgXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19VTlVTRURfVEVNUExBVEVfV0FSTklOR1MgXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUKFRlc3RGdW5jLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFNpZ25hdHVyZSkpO1wKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGVzdFR5cGU+IFwKKyAgICAgICAgc3RhdGljIHZvaWQgVGVzdEZ1bmMoKTtcCiAgICAgICAgIG5hbWVzcGFjZSB7XAotICAgICAgICBuYW1lc3BhY2UgSU5URVJOQUxfQ0FUQ0hfTUFLRV9OQU1FU1BBQ0UoVGVzdE5hbWUpe1wKLSAgICAgICAgICAgIElOVEVSTkFMX0NBVENIX1RZUEVfR0VOXAotICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfTlRUUF9HRU4oSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhTaWduYXR1cmUpKVwKLSAgICAgICAgICAgIElOVEVSTkFMX0NBVENIX05UVFBfUkVHX0dFTihUZXN0RnVuYyxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFNpZ25hdHVyZSkpXAogICAgICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi5UeXBlcz4gXAogICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1le1wKLSAgICAgICAgICAgICAgICBUZXN0TmFtZSgpe1wKLSAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBjaGFyIGNvbnN0KiB0bXBsX3R5cGVzW10gPSB7Q0FUQ0hfUkVDX0xJU1QoSU5URVJOQUxfQ0FUQ0hfU1RSSU5HSVpFX1dJVEhPVVRfUEFSRU5TLCBfX1ZBX0FSR1NfXyl9O1wKKyAgICAgICAgICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLlRzPiBcCisgICAgICAgICAgICAgICAgVGVzdE5hbWUoVHMuLi5uYW1lcyl7XAorICAgICAgICAgICAgICAgICAgICBDQVRDSF9JTlRFUk5BTF9DSEVDS19VTklRVUVfVFlQRVMoQ0FUQ0hfUkVDX0xJU1QoSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUywgX19WQV9BUkdTX18pKSBcCiAgICAgICAgICAgICAgICAgICAgIHVzaW5nIGV4cGFuZGVyID0gaW50W107XAotICAgICAgICAgICAgICAgICAgICAodm9pZClleHBhbmRlcnsocmVnX3Rlc3QoVHlwZXN7fSwgQ2F0Y2g6Ok5hbWVBbmRUYWdzeyBOYW1lICIgLSAiICsgc3RkOjpzdHJpbmcodG1wbF90eXBlc1tpbmRleF0pLCBUYWdzIH0gKSwgaW5kZXgrKywgMCkuLi4gfTsvKiBOT0xJTlQgKi8gXAorICAgICAgICAgICAgICAgICAgICAodm9pZClleHBhbmRlcnsoQ2F0Y2g6OkF1dG9SZWcoIENhdGNoOjptYWtlVGVzdEludm9rZXIoICZUZXN0RnVuYzxUeXBlcz4gKSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIENhdGNoOjpTdHJpbmdSZWYoKSwgQ2F0Y2g6Ok5hbWVBbmRUYWdzeyBuYW1lcywgVGFncyB9ICksIDApLi4uIH07LyogTk9MSU5UICovIFwKICAgICAgICAgICAgICAgICB9XAogICAgICAgICAgICAgfTtcCi0gICAgICAgICAgICBzdGF0aWMgaW50IElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBnbG9iYWxSZWdpc3RyYXIgKSA9IFtdKCl7XAotICAgICAgICAgICAgVGVzdE5hbWU8SU5URVJOQUxfQ0FUQ0hfTUFLRV9UWVBFX0xJU1RTX0ZST01fVFlQRVMoX19WQV9BUkdTX18pPigpO1wKKyAgICAgICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1JFR0lTVFJZX0lOSVRJQVRFKFRlc3ROYW1lLCBOYW1lLCBfX1ZBX0FSR1NfXykgXAorICAgICAgICB9XAorICAgICAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gXAorICAgICAgICBzdGF0aWMgdm9pZCBUZXN0RnVuYygpCisKKyNpZiBkZWZpbmVkKENBVENIX0NQUDE3X09SX0dSRUFURVIpCisjZGVmaW5lIENBVENIX0lOVEVSTkFMX0NIRUNLX1VOSVFVRV9UWVBFUyguLi4pIHN0YXRpY19hc3NlcnQoQ2F0Y2g6OmlzX3VuaXF1ZTxfX1ZBX0FSR1NfXz4sIkR1cGxpY2F0ZSB0eXBlIGRldGVjdGVkIGluIGRlY2xhcmF0aW9uIG9mIHRlbXBsYXRlIHRlc3QgY2FzZSIpOworI2Vsc2UKKyNkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ0hFQ0tfVU5JUVVFX1RZUEVTKC4uLikgc3RhdGljX2Fzc2VydChDYXRjaDo6aXNfdW5pcXVlPF9fVkFfQVJHU19fPjo6dmFsdWUsIkR1cGxpY2F0ZSB0eXBlIGRldGVjdGVkIGluIGRlY2xhcmF0aW9uIG9mIHRlbXBsYXRlIHRlc3QgY2FzZSIpOworI2VuZGlmCisKKyNpZm5kZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCisgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0UoTmFtZSwgVGFncywgLi4uKSBcCisgICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgTmFtZSwgVGFncywgX19WQV9BUkdTX18gKQorI2Vsc2UKKyAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRShOYW1lLCBUYWdzLCAuLi4pIFwKKyAgICAgICAgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0ZfVV9OX0NfX19fICksIE5hbWUsIFRhZ3MsIF9fVkFfQVJHU19fICkgKQorI2VuZGlmCisKKyAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1JFR0lTVFJZX0lOSVRJQVRFKFRlc3ROYW1lLCBOYW1lLCAuLi4pXAorICAgICAgICBzdGF0aWMgaW50IElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBnbG9iYWxSZWdpc3RyYXIgKSA9IFtdKCl7XAorICAgICAgICAgICAgVGVzdE5hbWU8Q0FUQ0hfUkVDX0xJU1QoSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUywgX19WQV9BUkdTX18pPihDQVRDSF9SRUNfTElTVF9VRChJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9VTklRVUVfTkFNRSxOYW1lLCBfX1ZBX0FSR1NfXykpO1wKICAgICAgICAgICAgIHJldHVybiAwO1wKLSAgICAgICAgfSgpO1wKLSAgICAgICAgfVwKLSAgICAgICAgfVwKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1RPUF9XQVJOSU5HU19TVVBQUkVTU0lPTiBcCi0gICAgICAgIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVChUZXN0RnVuYyxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFNpZ25hdHVyZSkpCisgICAgICAgIH0oKTsKIAotI2lmbmRlZiBDQVRDSF9DT05GSUdfVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IKLSAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRShOYW1lLCBUYWdzLCAuLi4pIFwKLSAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFXzIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19GX1VfTl9DX19fXyApLCBOYW1lLCBUYWdzLCB0eXBlbmFtZSBUZXN0VHlwZSwgX19WQV9BUkdTX18gKQotI2Vsc2UKLSAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRShOYW1lLCBUYWdzLCAuLi4pIFwKLSAgICAgICAgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0ZfVV9OX0NfX19fICksIE5hbWUsIFRhZ3MsIHR5cGVuYW1lIFRlc3RUeXBlLCBfX1ZBX0FSR1NfXyApICkKLSNlbmRpZgotCi0jaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX1NJRyhOYW1lLCBUYWdzLCBTaWduYXR1cmUsIC4uLikgXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0ZfVV9OX0NfX19fICksIE5hbWUsIFRhZ3MsIFNpZ25hdHVyZSwgX19WQV9BUkdTX18gKQotI2Vsc2UKLSAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9TSUcoTmFtZSwgVGFncywgU2lnbmF0dXJlLCAuLi4pIFwKLSAgICAgICAgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0ZfVV9OX0NfX19fICksIE5hbWUsIFRhZ3MsIFNpZ25hdHVyZSwgX19WQV9BUkdTX18gKSApCi0jZW5kaWYKLQotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UyKFRlc3ROYW1lLCBUZXN0RnVuY05hbWUsIE5hbWUsIFRhZ3MsIFNpZ25hdHVyZSwgVG1wbFR5cGVzLCBUeXBlc0xpc3QpIFwKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1RBUlRfV0FSTklOR1NfU1VQUFJFU1NJT04gICAgICAgICAgICAgICAgICAgICAgXAorICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UyKFRlc3ROYW1lLCBUZXN0RnVuY05hbWUsIE5hbWUsIFRhZ3MsIFRtcGxUeXBlcywgVHlwZXNMaXN0KSBcCiAgICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19aRVJPX1ZBUklBRElDX1dBUk5JTkdTICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfVU5VU0VEX1RFTVBMQVRFX1dBUk5JTkdTICAgICAgICAgICAgICBcCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiBzdGF0aWMgdm9pZCBUZXN0RnVuY05hbWUoKTsgICAgICAgXAotICAgICAgICBuYW1lc3BhY2Uge1wKLSAgICAgICAgbmFtZXNwYWNlIElOVEVSTkFMX0NBVENIX01BS0VfTkFNRVNQQUNFKFRlc3ROYW1lKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIElOVEVSTkFMX0NBVENIX1RZUEVfR0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBJTlRFUk5BTF9DQVRDSF9OVFRQX0dFTihJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFNpZ25hdHVyZSkpICAgICAgICAgXAorICAgICAgICBuYW1lc3BhY2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBzdHJ1Y3QgVGVzdE5hbWUgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHZvaWQgcmVnX3Rlc3RzKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUZXN0TmFtZSgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX0NIRUNLX1VOSVFVRV9UWVBFUyhUeXBlcy4uLikgICAgICAgXAogICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgdXNpbmcgZXhwYW5kZXIgPSBpbnRbXTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBjaGFyIGNvbnN0KiB0bXBsX3R5cGVzW10gPSB7Q0FUQ0hfUkVDX0xJU1QoSU5URVJOQUxfQ0FUQ0hfU1RSSU5HSVpFX1dJVEhPVVRfUEFSRU5TLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFRtcGxUeXBlcykpfTtcCkBAIC0yMTAsMTI1ICsxNjgsNjUgQEAKICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgc3RhdGljIGludCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggZ2xvYmFsUmVnaXN0cmFyICkgPSBbXSgpeyBcCi0gICAgICAgICAgICAgICAgdXNpbmcgVGVzdEluaXQgPSB0eXBlbmFtZSBjcmVhdGU8VGVzdE5hbWUsIGRlY2x0eXBlKGdldF93cmFwcGVyPElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoVG1wbFR5cGVzKT4oKSksIFR5cGVMaXN0PElOVEVSTkFMX0NBVENIX01BS0VfVFlQRV9MSVNUU19GUk9NX1RZUEVTKElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoVHlwZXNMaXN0KSk+Pjo6dHlwZTsgXAotICAgICAgICAgICAgICAgIFRlc3RJbml0IHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB0LnJlZ190ZXN0cygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdXNpbmcgVGVzdEluaXQgPSBDYXRjaDo6Y29tYmluZTxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFRtcGxUeXBlcyk+IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OndpdGhfdHlwZXM8SU5URVJOQUxfQ0FUQ0hfTUFLRV9UWVBFX0xJU1RTX0ZST01fVFlQRVMoVHlwZXNMaXN0KT46OmludG88VGVzdE5hbWU+Ojp0eXBlOyBcCisgICAgICAgICAgICAgICAgVGVzdEluaXQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIH0oKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1RPUF9XQVJOSU5HU19TVVBQUkVTU0lPTiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGVzdFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIHN0YXRpYyB2b2lkIFRlc3RGdW5jTmFtZSgpCiAKICNpZm5kZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCiAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRShOYW1lLCBUYWdzLCAuLi4pXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRTIoSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0ZfVV9OX0NfX19fICksIE5hbWUsIFRhZ3MsIHR5cGVuYW1lIFQsX19WQV9BUkdTX18pCisgICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFMihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSxOYW1lLFRhZ3MsX19WQV9BUkdTX18pCiAjZWxzZQogICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoTmFtZSwgVGFncywgLi4uKVwKLSAgICAgICAgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRTIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19GX1VfTl9DX19fXyApLCBOYW1lLCBUYWdzLCB0eXBlbmFtZSBULCBfX1ZBX0FSR1NfXyApICkKKyAgICAgICAgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRTIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19GX1VfTl9DX19fXyApLCBOYW1lLCBUYWdzLCBfX1ZBX0FSR1NfXyApICkKICNlbmRpZgogCi0jaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfU0lHKE5hbWUsIFRhZ3MsIFNpZ25hdHVyZSwgLi4uKVwKLSAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UyKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19GX1VfTl9DX19fXyApLCBOYW1lLCBUYWdzLCBTaWduYXR1cmUsIF9fVkFfQVJHU19fKQotI2Vsc2UKLSAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX1NJRyhOYW1lLCBUYWdzLCBTaWduYXR1cmUsIC4uLilcCi0gICAgICAgIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UyKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgTmFtZSwgVGFncywgU2lnbmF0dXJlLCBfX1ZBX0FSR1NfXyApICkKLSNlbmRpZgotCi0gICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9MSVNUX1RFU1RfQ0FTRV8yKFRlc3ROYW1lLCBUZXN0RnVuYywgTmFtZSwgVGFncywgVG1wbExpc3QpXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTiBcCisgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EXzIoIFRlc3ROYW1lQ2xhc3MsIFRlc3ROYW1lLCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIC4uLiApIFwKICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1VOVVNFRF9URU1QTEFURV9XQVJOSU5HUyBcCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiBzdGF0aWMgdm9pZCBUZXN0RnVuYygpOyAgICAgICBcCi0gICAgICAgIG5hbWVzcGFjZSB7XAotICAgICAgICBuYW1lc3BhY2UgSU5URVJOQUxfQ0FUQ0hfTUFLRV9OQU1FU1BBQ0UoVGVzdE5hbWUpe1wKLSAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVFlQRV9HRU5cCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHN0cnVjdCBUZXN0TmFtZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB2b2lkIHJlZ190ZXN0cygpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaW50IGluZGV4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdXNpbmcgZXhwYW5kZXIgPSBpbnRbXTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKHZvaWQpZXhwYW5kZXJ7KENhdGNoOjpBdXRvUmVnKCBDYXRjaDo6bWFrZVRlc3RJbnZva2VyKCAmVGVzdEZ1bmM8VHlwZXM+ICksIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDYXRjaDo6U3RyaW5nUmVmKCksIENhdGNoOjpOYW1lQW5kVGFnc3sgTmFtZSAiIC0gIiArIHN0ZDo6c3RyaW5nKElOVEVSTkFMX0NBVENIX1NUUklOR0laRShUbXBsTGlzdCkpICsgIiAtICIgKyBzdGQ6OnRvX3N0cmluZyhpbmRleCksIFRhZ3MgfSApLCBpbmRleCsrLCAwKS4uLiB9Oy8qIE5PTElOVCAqL1wKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfTtcCi0gICAgICAgIHN0YXRpYyBpbnQgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIGdsb2JhbFJlZ2lzdHJhciApID0gW10oKXsgXAotICAgICAgICAgICAgICAgIHVzaW5nIFRlc3RJbml0ID0gdHlwZW5hbWUgY29udmVydDxUZXN0TmFtZSwgVG1wbExpc3Q+Ojp0eXBlOyBcCi0gICAgICAgICAgICAgICAgVGVzdEluaXQgdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHQucmVnX3Rlc3RzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9fVwKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1RPUF9XQVJOSU5HU19TVVBQUkVTU0lPTiAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc3RhdGljIHZvaWQgVGVzdEZ1bmMoKQotCi0gICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9MSVNUX1RFU1RfQ0FTRShOYW1lLCBUYWdzLCBUbXBsTGlzdCkgXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9MSVNUX1RFU1RfQ0FTRV8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgTmFtZSwgVGFncywgVG1wbExpc3QgKQotCi0KLSAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfMiggVGVzdE5hbWVDbGFzcywgVGVzdE5hbWUsIENsYXNzTmFtZSwgTmFtZSwgVGFncywgU2lnbmF0dXJlLCAuLi4gKSBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NUQVJUX1dBUk5JTkdTX1NVUFBSRVNTSU9OIFwKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1pFUk9fVkFSSUFESUNfV0FSTklOR1MgXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19VTlVTRURfVEVNUExBVEVfV0FSTklOR1MgXAotICAgICAgICBuYW1lc3BhY2Uge1wKLSAgICAgICAgbmFtZXNwYWNlIElOVEVSTkFMX0NBVENIX01BS0VfTkFNRVNQQUNFKFRlc3ROYW1lKXsgXAotICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVFlQRV9HRU5cCi0gICAgICAgICAgICBJTlRFUk5BTF9DQVRDSF9OVFRQX0dFTihJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFNpZ25hdHVyZSkpXAotICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9NRVRIT0QoVGVzdE5hbWUsIENsYXNzTmFtZSwgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhTaWduYXR1cmUpKTtcCi0gICAgICAgICAgICBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR19NRVRIT0RfR0VOKFRlc3ROYW1lLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFNpZ25hdHVyZSkpXAorICAgICAgICBuYW1lc3BhY2V7IFwKKyAgICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiBcCisgICAgICAgICAgICBzdHJ1Y3QgVGVzdE5hbWUgOiBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKENsYXNzTmFtZSA8VGVzdFR5cGU+KSB7IFwKKyAgICAgICAgICAgICAgICB2b2lkIHRlc3QoKTtcCisgICAgICAgICAgICB9O1wKICAgICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uVHlwZXM+IFwKICAgICAgICAgICAgIHN0cnVjdCBUZXN0TmFtZUNsYXNze1wKLSAgICAgICAgICAgICAgICBUZXN0TmFtZUNsYXNzKCl7XAotICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGNoYXIgY29uc3QqIHRtcGxfdHlwZXNbXSA9IHtDQVRDSF9SRUNfTElTVChJTlRFUk5BTF9DQVRDSF9TVFJJTkdJWkVfV0lUSE9VVF9QQVJFTlMsIF9fVkFfQVJHU19fKX07XAorICAgICAgICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uVHM+IFwKKyAgICAgICAgICAgICAgICBUZXN0TmFtZUNsYXNzKFRzLi4ubmFtZXMpe1wKKyAgICAgICAgICAgICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfQ0hFQ0tfVU5JUVVFX1RZUEVTKENBVENIX1JFQ19MSVNUKElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMsIF9fVkFfQVJHU19fKSkgXAogICAgICAgICAgICAgICAgICAgICB1c2luZyBleHBhbmRlciA9IGludFtdO1wKLSAgICAgICAgICAgICAgICAgICAgKHZvaWQpZXhwYW5kZXJ7KHJlZ190ZXN0KFR5cGVze30sICNDbGFzc05hbWUsIENhdGNoOjpOYW1lQW5kVGFnc3sgTmFtZSAiIC0gIiArIHN0ZDo6c3RyaW5nKHRtcGxfdHlwZXNbaW5kZXhdKSwgVGFncyB9ICksIGluZGV4KyssIDApLi4uIH07LyogTk9MSU5UICovIFwKKyAgICAgICAgICAgICAgICAgICAgKHZvaWQpZXhwYW5kZXJ7KENhdGNoOjpBdXRvUmVnKCBDYXRjaDo6bWFrZVRlc3RJbnZva2VyKCAmVGVzdE5hbWU8VHlwZXM+Ojp0ZXN0ICksIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCAjQ2xhc3NOYW1lLCBDYXRjaDo6TmFtZUFuZFRhZ3N7IG5hbWVzLCBUYWdzIH0gKSwgMCkuLi4gfTsvKiBOT0xJTlQgKi8gXAogICAgICAgICAgICAgICAgIH1cCiAgICAgICAgICAgICB9O1wKLSAgICAgICAgICAgIHN0YXRpYyBpbnQgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIGdsb2JhbFJlZ2lzdHJhciApID0gW10oKXtcCi0gICAgICAgICAgICAgICAgVGVzdE5hbWVDbGFzczxJTlRFUk5BTF9DQVRDSF9NQUtFX1RZUEVfTElTVFNfRlJPTV9UWVBFUyhfX1ZBX0FSR1NfXyk+KCk7XAotICAgICAgICAgICAgICAgIHJldHVybiAwO1wKLSAgICAgICAgfSgpO1wKKyAgICAgICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1JFR0lTVFJZX0lOSVRJQVRFKFRlc3ROYW1lQ2xhc3MsIE5hbWUsIF9fVkFfQVJHU19fKVwKICAgICAgICAgfVwKLSAgICAgICAgfVwKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1RPUF9XQVJOSU5HU19TVVBQUkVTU0lPTiBcCi0gICAgICAgIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0QoVGVzdE5hbWUsIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoU2lnbmF0dXJlKSkKKyAgICAgICAgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTXAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gXAorICAgICAgICB2b2lkIFRlc3ROYW1lPFRlc3RUeXBlPjo6dGVzdCgpCiAKICNpZm5kZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCiAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsLi4uICkgXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EXzIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0NfTF9BX1NfU19fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICkgLCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIHR5cGVuYW1lIFQsIF9fVkFfQVJHU19fICkKKyAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19DX0xfQV9TX1NfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApICwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBfX1ZBX0FSR1NfXyApCiAjZWxzZQogICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLC4uLiApIFwKLSAgICAgICAgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EXzIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0NfTF9BX1NfU19fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICkgLCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIHR5cGVuYW1lIFQsIF9fVkFfQVJHU19fICkgKQorICAgICAgICBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fQ19MX0FfU19TX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSAsIENsYXNzTmFtZSwgTmFtZSwgVGFncywgX19WQV9BUkdTX18gKSApCiAjZW5kaWYKIAotI2lmbmRlZiBDQVRDSF9DT05GSUdfVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IKLSAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIFNpZ25hdHVyZSwgLi4uICkgXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EXzIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0NfTF9BX1NfU19fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICkgLCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIFNpZ25hdHVyZSwgX19WQV9BUkdTX18gKQotI2Vsc2UKLSAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIFNpZ25hdHVyZSwgLi4uICkgXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fQ19MX0FfU19TX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSAsIENsYXNzTmFtZSwgTmFtZSwgVGFncywgU2lnbmF0dXJlLCBfX1ZBX0FSR1NfXyApICkKLSNlbmRpZgotCi0gICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfMihUZXN0TmFtZUNsYXNzLCBUZXN0TmFtZSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBTaWduYXR1cmUsIFRtcGxUeXBlcywgVHlwZXNMaXN0KVwKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1RBUlRfV0FSTklOR1NfU1VQUFJFU1NJT04gXAorICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EXzIoVGVzdE5hbWVDbGFzcywgVGVzdE5hbWUsIENsYXNzTmFtZSwgTmFtZSwgVGFncywgVG1wbFR5cGVzLCBUeXBlc0xpc3QpXAogICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTIFwKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfWkVST19WQVJJQURJQ19XQVJOSU5HUyBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1VOVVNFRF9URU1QTEFURV9XQVJOSU5HUyBcCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiBcCiAgICAgICAgICAgICBzdHJ1Y3QgVGVzdE5hbWUgOiBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKENsYXNzTmFtZSA8VGVzdFR5cGU+KSB7IFwKICAgICAgICAgICAgICAgICB2b2lkIHRlc3QoKTtcCiAgICAgICAgICAgICB9O1wKICAgICAgICAgbmFtZXNwYWNlIHtcCi0gICAgICAgIG5hbWVzcGFjZSBJTlRFUk5BTF9DQVRDSF9NQUtFX05BTUVTUEFDRShUZXN0TmFtZUNsYXNzKSB7XAotICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVFlQRV9HRU4gICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBJTlRFUk5BTF9DQVRDSF9OVFRQX0dFTihJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFNpZ25hdHVyZSkpXAogICAgICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi5UeXBlcz5cCiAgICAgICAgICAgICBzdHJ1Y3QgVGVzdE5hbWVDbGFzc3tcCi0gICAgICAgICAgICAgICAgdm9pZCByZWdfdGVzdHMoKXtcCisgICAgICAgICAgICAgICAgVGVzdE5hbWVDbGFzcygpe1wKKyAgICAgICAgICAgICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfQ0hFQ0tfVU5JUVVFX1RZUEVTKFR5cGVzLi4uKVwKICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gMDtcCiAgICAgICAgICAgICAgICAgICAgIHVzaW5nIGV4cGFuZGVyID0gaW50W107XAogICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgY2hhciBjb25zdCogdG1wbF90eXBlc1tdID0ge0NBVENIX1JFQ19MSVNUKElOVEVSTkFMX0NBVENIX1NUUklOR0laRV9XSVRIT1VUX1BBUkVOUywgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhUbXBsVHlwZXMpKX07XApAQCAtMzM4LDY1ICsyMzYsMjIgQEAKICAgICAgICAgICAgICAgICB9XAogICAgICAgICAgICAgfTtcCiAgICAgICAgICAgICBzdGF0aWMgaW50IElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBnbG9iYWxSZWdpc3RyYXIgKSA9IFtdKCl7XAotICAgICAgICAgICAgICAgIHVzaW5nIFRlc3RJbml0ID0gdHlwZW5hbWUgY3JlYXRlPFRlc3ROYW1lQ2xhc3MsIGRlY2x0eXBlKGdldF93cmFwcGVyPElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoVG1wbFR5cGVzKT4oKSksIFR5cGVMaXN0PElOVEVSTkFMX0NBVENIX01BS0VfVFlQRV9MSVNUU19GUk9NX1RZUEVTKElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoVHlwZXNMaXN0KSk+Pjo6dHlwZTtcCi0gICAgICAgICAgICAgICAgVGVzdEluaXQgdDtcCi0gICAgICAgICAgICAgICAgdC5yZWdfdGVzdHMoKTtcCisgICAgICAgICAgICAgICAgdXNpbmcgVGVzdEluaXQgPSBDYXRjaDo6Y29tYmluZTxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFRtcGxUeXBlcyk+XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6d2l0aF90eXBlczxJTlRFUk5BTF9DQVRDSF9NQUtFX1RZUEVfTElTVFNfRlJPTV9UWVBFUyhUeXBlc0xpc3QpPjo6aW50bzxUZXN0TmFtZUNsYXNzPjo6dHlwZTtcCisgICAgICAgICAgICAgICAgVGVzdEluaXQoKTtcCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XAogICAgICAgICAgICAgfSgpOyBcCiAgICAgICAgIH1cCi0gICAgICAgIH1cCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NUT1BfV0FSTklOR1NfU1VQUFJFU1NJT04gXAorICAgICAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gXAogICAgICAgICB2b2lkIFRlc3ROYW1lPFRlc3RUeXBlPjo6dGVzdCgpCiAKICNpZm5kZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCiAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QoIENsYXNzTmFtZSwgTmFtZSwgVGFncywgLi4uIClcCi0gICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCB0eXBlbmFtZSBULCBfX1ZBX0FSR1NfXyApCisgICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBfX1ZBX0FSR1NfXyApCiAjZWxzZQogICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIC4uLiApXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCB0eXBlbmFtZSBULF9fVkFfQVJHU19fICkgKQorICAgICAgICBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBfX1ZBX0FSR1NfXyApICkKICNlbmRpZgogCi0jaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyggQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBTaWduYXR1cmUsIC4uLiApXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0ZfVV9OX0NfX19fICksIENsYXNzTmFtZSwgTmFtZSwgVGFncywgU2lnbmF0dXJlLCBfX1ZBX0FSR1NfXyApCi0jZWxzZQotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyggQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBTaWduYXR1cmUsIC4uLiApXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBTaWduYXR1cmUsX19WQV9BUkdTX18gKSApCi0jZW5kaWYKLQotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfTElTVF9URVNUX0NBU0VfTUVUSE9EXzIoIFRlc3ROYW1lQ2xhc3MsIFRlc3ROYW1lLCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIFRtcGxMaXN0KSBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NUQVJUX1dBUk5JTkdTX1NVUFBSRVNTSU9OIFwKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1VOVVNFRF9URU1QTEFURV9XQVJOSU5HUyBcCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiBcCi0gICAgICAgIHN0cnVjdCBUZXN0TmFtZSA6IElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoQ2xhc3NOYW1lIDxUZXN0VHlwZT4pIHsgXAotICAgICAgICAgICAgdm9pZCB0ZXN0KCk7XAotICAgICAgICB9O1wKLSAgICAgICAgbmFtZXNwYWNlIHtcCi0gICAgICAgIG5hbWVzcGFjZSBJTlRFUk5BTF9DQVRDSF9NQUtFX05BTUVTUEFDRShUZXN0TmFtZSl7IFwKLSAgICAgICAgICAgIElOVEVSTkFMX0NBVENIX1RZUEVfR0VOXAotICAgICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi5UeXBlcz5cCi0gICAgICAgICAgICBzdHJ1Y3QgVGVzdE5hbWVDbGFzc3tcCi0gICAgICAgICAgICAgICAgdm9pZCByZWdfdGVzdHMoKXtcCi0gICAgICAgICAgICAgICAgICAgIGludCBpbmRleCA9IDA7XAotICAgICAgICAgICAgICAgICAgICB1c2luZyBleHBhbmRlciA9IGludFtdO1wKLSAgICAgICAgICAgICAgICAgICAgKHZvaWQpZXhwYW5kZXJ7KENhdGNoOjpBdXRvUmVnKCBDYXRjaDo6bWFrZVRlc3RJbnZva2VyKCAmVGVzdE5hbWU8VHlwZXM+Ojp0ZXN0ICksIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCAjQ2xhc3NOYW1lLCBDYXRjaDo6TmFtZUFuZFRhZ3N7IE5hbWUgIiAtICIgKyBzdGQ6OnN0cmluZyhJTlRFUk5BTF9DQVRDSF9TVFJJTkdJWkUoVG1wbExpc3QpKSArICIgLSAiICsgc3RkOjp0b19zdHJpbmcoaW5kZXgpLCBUYWdzIH0gKSwgaW5kZXgrKywgMCkuLi4gfTsvKiBOT0xJTlQgKi8gXAotICAgICAgICAgICAgICAgIH1cCi0gICAgICAgICAgICB9O1wKLSAgICAgICAgICAgIHN0YXRpYyBpbnQgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIGdsb2JhbFJlZ2lzdHJhciApID0gW10oKXtcCi0gICAgICAgICAgICAgICAgdXNpbmcgVGVzdEluaXQgPSB0eXBlbmFtZSBjb252ZXJ0PFRlc3ROYW1lQ2xhc3MsIFRtcGxMaXN0Pjo6dHlwZTtcCi0gICAgICAgICAgICAgICAgVGVzdEluaXQgdDtcCi0gICAgICAgICAgICAgICAgdC5yZWdfdGVzdHMoKTtcCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7XAotICAgICAgICAgICAgfSgpOyBcCi0gICAgICAgIH19XAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVE9QX1dBUk5JTkdTX1NVUFBSRVNTSU9OIFwKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGVzdFR5cGU+IFwKLSAgICAgICAgdm9pZCBUZXN0TmFtZTxUZXN0VHlwZT46OnRlc3QoKQotCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX0xJU1RfVEVTVF9DQVNFX01FVEhPRChDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIFRtcGxMaXN0KSBcCi0gICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX0xJU1RfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBUbXBsTGlzdCApCi0KLQogI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9URVNUX1JFR0lTVFJZX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X3NwZWMuY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X3NwZWMuY3BwCmluZGV4IDY1ZDM0ZDAuLmQ5YzE0OWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9zcGVjLmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3Rfc3BlYy5jcHAKQEAgLTcsNyArNyw2IEBACiAKICNpbmNsdWRlICJjYXRjaF90ZXN0X3NwZWMuaCIKICNpbmNsdWRlICJjYXRjaF9zdHJpbmdfbWFuaXAuaCIKLSNpbmNsdWRlICJjYXRjaF9pbnRlcmZhY2VzX2NvbmZpZy5oIgogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHN0cmluZz4KQEAgLTE2LDg0ICsxNSw0NSBAQAogCiBuYW1lc3BhY2UgQ2F0Y2ggewogCi0gICAgVGVzdFNwZWM6OlBhdHRlcm46OlBhdHRlcm4oIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lICkKLSAgICA6IG1fbmFtZSggbmFtZSApCi0gICAge30KLQogICAgIFRlc3RTcGVjOjpQYXR0ZXJuOjp+UGF0dGVybigpID0gZGVmYXVsdDsKKyAgICBUZXN0U3BlYzo6TmFtZVBhdHRlcm46On5OYW1lUGF0dGVybigpID0gZGVmYXVsdDsKKyAgICBUZXN0U3BlYzo6VGFnUGF0dGVybjo6flRhZ1BhdHRlcm4oKSA9IGRlZmF1bHQ7CisgICAgVGVzdFNwZWM6OkV4Y2x1ZGVkUGF0dGVybjo6fkV4Y2x1ZGVkUGF0dGVybigpID0gZGVmYXVsdDsKIAotICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBUZXN0U3BlYzo6UGF0dGVybjo6bmFtZSgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fbmFtZTsKLSAgICB9Ci0KLQotICAgIFRlc3RTcGVjOjpOYW1lUGF0dGVybjo6TmFtZVBhdHRlcm4oIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLCBzdGQ6OnN0cmluZyBjb25zdCYgZmlsdGVyU3RyaW5nICkKLSAgICA6IFBhdHRlcm4oIGZpbHRlclN0cmluZyApCi0gICAgLCBtX3dpbGRjYXJkUGF0dGVybiggdG9Mb3dlciggbmFtZSApLCBDYXNlU2Vuc2l0aXZlOjpObyApCisgICAgVGVzdFNwZWM6Ok5hbWVQYXR0ZXJuOjpOYW1lUGF0dGVybiggc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgKQorICAgIDogbV93aWxkY2FyZFBhdHRlcm4oIHRvTG93ZXIoIG5hbWUgKSwgQ2FzZVNlbnNpdGl2ZTo6Tm8gKQogICAgIHt9Ci0KICAgICBib29sIFRlc3RTcGVjOjpOYW1lUGF0dGVybjo6bWF0Y2hlcyggVGVzdENhc2VJbmZvIGNvbnN0JiB0ZXN0Q2FzZSApIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fd2lsZGNhcmRQYXR0ZXJuLm1hdGNoZXMoIHRlc3RDYXNlLm5hbWUgKTsKKyAgICAgICAgcmV0dXJuIG1fd2lsZGNhcmRQYXR0ZXJuLm1hdGNoZXMoIHRvTG93ZXIoIHRlc3RDYXNlLm5hbWUgKSApOwogICAgIH0KIAotCi0gICAgVGVzdFNwZWM6OlRhZ1BhdHRlcm46OlRhZ1BhdHRlcm4oIHN0ZDo6c3RyaW5nIGNvbnN0JiB0YWcsIHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWx0ZXJTdHJpbmcgKQotICAgIDogUGF0dGVybiggZmlsdGVyU3RyaW5nICkKLSAgICAsIG1fdGFnKCB0b0xvd2VyKCB0YWcgKSApCi0gICAge30KLQorICAgIFRlc3RTcGVjOjpUYWdQYXR0ZXJuOjpUYWdQYXR0ZXJuKCBzdGQ6OnN0cmluZyBjb25zdCYgdGFnICkgOiBtX3RhZyggdG9Mb3dlciggdGFnICkgKSB7fQogICAgIGJvb2wgVGVzdFNwZWM6OlRhZ1BhdHRlcm46Om1hdGNoZXMoIFRlc3RDYXNlSW5mbyBjb25zdCYgdGVzdENhc2UgKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBzdGQ6OmZpbmQoYmVnaW4odGVzdENhc2UubGNhc2VUYWdzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQodGVzdENhc2UubGNhc2VUYWdzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RhZykgIT0gZW5kKHRlc3RDYXNlLmxjYXNlVGFncyk7CiAgICAgfQogCi0KLSAgICBUZXN0U3BlYzo6RXhjbHVkZWRQYXR0ZXJuOjpFeGNsdWRlZFBhdHRlcm4oIFBhdHRlcm5QdHIgY29uc3QmIHVuZGVybHlpbmdQYXR0ZXJuICkKLSAgICA6IFBhdHRlcm4oIHVuZGVybHlpbmdQYXR0ZXJuLT5uYW1lKCkgKQotICAgICwgbV91bmRlcmx5aW5nUGF0dGVybiggdW5kZXJseWluZ1BhdHRlcm4gKQotICAgIHt9Ci0KLSAgICBib29sIFRlc3RTcGVjOjpFeGNsdWRlZFBhdHRlcm46Om1hdGNoZXMoIFRlc3RDYXNlSW5mbyBjb25zdCYgdGVzdENhc2UgKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAhbV91bmRlcmx5aW5nUGF0dGVybi0+bWF0Y2hlcyggdGVzdENhc2UgKTsKLSAgICB9Ci0KKyAgICBUZXN0U3BlYzo6RXhjbHVkZWRQYXR0ZXJuOjpFeGNsdWRlZFBhdHRlcm4oIFBhdHRlcm5QdHIgY29uc3QmIHVuZGVybHlpbmdQYXR0ZXJuICkgOiBtX3VuZGVybHlpbmdQYXR0ZXJuKCB1bmRlcmx5aW5nUGF0dGVybiApIHt9CisgICAgYm9vbCBUZXN0U3BlYzo6RXhjbHVkZWRQYXR0ZXJuOjptYXRjaGVzKCBUZXN0Q2FzZUluZm8gY29uc3QmIHRlc3RDYXNlICkgY29uc3QgeyByZXR1cm4gIW1fdW5kZXJseWluZ1BhdHRlcm4tPm1hdGNoZXMoIHRlc3RDYXNlICk7IH0KIAogICAgIGJvb2wgVGVzdFNwZWM6OkZpbHRlcjo6bWF0Y2hlcyggVGVzdENhc2VJbmZvIGNvbnN0JiB0ZXN0Q2FzZSApIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6YWxsX29mKCBtX3BhdHRlcm5zLmJlZ2luKCksIG1fcGF0dGVybnMuZW5kKCksIFsmXSggUGF0dGVyblB0ciBjb25zdCYgcCApeyByZXR1cm4gcC0+bWF0Y2hlcyggdGVzdENhc2UgKTsgfSApOworICAgICAgICAvLyBBbGwgcGF0dGVybnMgaW4gYSBmaWx0ZXIgbXVzdCBtYXRjaCBmb3IgdGhlIGZpbHRlciB0byBiZSBhIG1hdGNoCisgICAgICAgIGZvciggYXV0byBjb25zdCYgcGF0dGVybiA6IG1fcGF0dGVybnMgKSB7CisgICAgICAgICAgICBpZiggIXBhdHRlcm4tPm1hdGNoZXMoIHRlc3RDYXNlICkgKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBzdGQ6OnN0cmluZyBUZXN0U3BlYzo6RmlsdGVyOjpuYW1lKCkgY29uc3QgewotICAgICAgICBzdGQ6OnN0cmluZyBuYW1lOwotICAgICAgICBmb3IoIGF1dG8gY29uc3QmIHAgOiBtX3BhdHRlcm5zICkKLSAgICAgICAgICAgIG5hbWUgKz0gcC0+bmFtZSgpOwotICAgICAgICByZXR1cm4gbmFtZTsKLSAgICB9Ci0KLQogICAgIGJvb2wgVGVzdFNwZWM6Omhhc0ZpbHRlcnMoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiAhbV9maWx0ZXJzLmVtcHR5KCk7CiAgICAgfQotCiAgICAgYm9vbCBUZXN0U3BlYzo6bWF0Y2hlcyggVGVzdENhc2VJbmZvIGNvbnN0JiB0ZXN0Q2FzZSApIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6YW55X29mKCBtX2ZpbHRlcnMuYmVnaW4oKSwgbV9maWx0ZXJzLmVuZCgpLCBbJl0oIEZpbHRlciBjb25zdCYgZiApeyByZXR1cm4gZi5tYXRjaGVzKCB0ZXN0Q2FzZSApOyB9ICk7CisgICAgICAgIC8vIEEgVGVzdFNwZWMgbWF0Y2hlcyBpZiBhbnkgZmlsdGVyIG1hdGNoZXMKKyAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiBmaWx0ZXIgOiBtX2ZpbHRlcnMgKQorICAgICAgICAgICAgaWYoIGZpbHRlci5tYXRjaGVzKCB0ZXN0Q2FzZSApICkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAgIFRlc3RTcGVjOjpNYXRjaGVzIFRlc3RTcGVjOjptYXRjaGVzQnlGaWx0ZXIoIHN0ZDo6dmVjdG9yPFRlc3RDYXNlPiBjb25zdCYgdGVzdENhc2VzLCBJQ29uZmlnIGNvbnN0JiBjb25maWcgKSBjb25zdAotICAgIHsKLSAgICAgICAgTWF0Y2hlcyBtYXRjaGVzKCBtX2ZpbHRlcnMuc2l6ZSgpICk7Ci0gICAgICAgIHN0ZDo6dHJhbnNmb3JtKCBtX2ZpbHRlcnMuYmVnaW4oKSwgbV9maWx0ZXJzLmVuZCgpLCBtYXRjaGVzLmJlZ2luKCksIFsmXSggRmlsdGVyIGNvbnN0JiBmaWx0ZXIgKXsKLSAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRlc3RDYXNlIGNvbnN0Kj4gY3VycmVudE1hdGNoZXM7Ci0gICAgICAgICAgICBmb3IoIGF1dG8gY29uc3QmIHRlc3QgOiB0ZXN0Q2FzZXMgKQotICAgICAgICAgICAgICAgIGlmKCBpc1Rocm93U2FmZSggdGVzdCwgY29uZmlnICkgJiYgZmlsdGVyLm1hdGNoZXMoIHRlc3QgKSApCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNYXRjaGVzLmVtcGxhY2VfYmFjayggJnRlc3QgKTsKLSAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaHsgZmlsdGVyLm5hbWUoKSwgY3VycmVudE1hdGNoZXMgfTsKLSAgICAgICAgfSApOwotICAgICAgICByZXR1cm4gbWF0Y2hlczsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgVGVzdFNwZWM6OnZlY3RvclN0cmluZ3MmIFRlc3RTcGVjOjpnZXRJbnZhbGlkQXJncygpIGNvbnN0ewotICAgICAgICByZXR1cm4gIChtX2ludmFsaWRBcmdzKTsKLSAgICB9Ci0KIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9zcGVjLmggYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3Rfc3BlYy5oCmluZGV4IDJlNTQ2NDYuLmQyNTY1MTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9zcGVjLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X3NwZWMuaApAQCAtMjIsMjMgKzIyLDE3IEBACiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKLSAgICBzdHJ1Y3QgSUNvbmZpZzsKLQogICAgIGNsYXNzIFRlc3RTcGVjIHsKLSAgICAgICAgY2xhc3MgUGF0dGVybiB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIGV4cGxpY2l0IFBhdHRlcm4oIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lICk7CisgICAgICAgIHN0cnVjdCBQYXR0ZXJuIHsKICAgICAgICAgICAgIHZpcnR1YWwgflBhdHRlcm4oKTsKICAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBtYXRjaGVzKCBUZXN0Q2FzZUluZm8gY29uc3QmIHRlc3RDYXNlICkgY29uc3QgPSAwOwotICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUoKSBjb25zdDsKLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0IG1fbmFtZTsKICAgICAgICAgfTsKICAgICAgICAgdXNpbmcgUGF0dGVyblB0ciA9IHN0ZDo6c2hhcmVkX3B0cjxQYXR0ZXJuPjsKIAogICAgICAgICBjbGFzcyBOYW1lUGF0dGVybiA6IHB1YmxpYyBQYXR0ZXJuIHsKICAgICAgICAgcHVibGljOgotICAgICAgICAgICAgZXhwbGljaXQgTmFtZVBhdHRlcm4oIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLCBzdGQ6OnN0cmluZyBjb25zdCYgZmlsdGVyU3RyaW5nICk7CisgICAgICAgICAgICBOYW1lUGF0dGVybiggc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgKTsKKyAgICAgICAgICAgIHZpcnR1YWwgfk5hbWVQYXR0ZXJuKCk7CiAgICAgICAgICAgICBib29sIG1hdGNoZXMoIFRlc3RDYXNlSW5mbyBjb25zdCYgdGVzdENhc2UgKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIFdpbGRjYXJkUGF0dGVybiBtX3dpbGRjYXJkUGF0dGVybjsKQEAgLTQ2LDcgKzQwLDggQEAKIAogICAgICAgICBjbGFzcyBUYWdQYXR0ZXJuIDogcHVibGljIFBhdHRlcm4gewogICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBleHBsaWNpdCBUYWdQYXR0ZXJuKCBzdGQ6OnN0cmluZyBjb25zdCYgdGFnLCBzdGQ6OnN0cmluZyBjb25zdCYgZmlsdGVyU3RyaW5nICk7CisgICAgICAgICAgICBUYWdQYXR0ZXJuKCBzdGQ6OnN0cmluZyBjb25zdCYgdGFnICk7CisgICAgICAgICAgICB2aXJ0dWFsIH5UYWdQYXR0ZXJuKCk7CiAgICAgICAgICAgICBib29sIG1hdGNoZXMoIFRlc3RDYXNlSW5mbyBjb25zdCYgdGVzdENhc2UgKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG1fdGFnOwpAQCAtNTQsNyArNDksOCBAQAogCiAgICAgICAgIGNsYXNzIEV4Y2x1ZGVkUGF0dGVybiA6IHB1YmxpYyBQYXR0ZXJuIHsKICAgICAgICAgcHVibGljOgotICAgICAgICAgICAgZXhwbGljaXQgRXhjbHVkZWRQYXR0ZXJuKCBQYXR0ZXJuUHRyIGNvbnN0JiB1bmRlcmx5aW5nUGF0dGVybiApOworICAgICAgICAgICAgRXhjbHVkZWRQYXR0ZXJuKCBQYXR0ZXJuUHRyIGNvbnN0JiB1bmRlcmx5aW5nUGF0dGVybiApOworICAgICAgICAgICAgdmlydHVhbCB+RXhjbHVkZWRQYXR0ZXJuKCk7CiAgICAgICAgICAgICBib29sIG1hdGNoZXMoIFRlc3RDYXNlSW5mbyBjb25zdCYgdGVzdENhc2UgKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIFBhdHRlcm5QdHIgbV91bmRlcmx5aW5nUGF0dGVybjsKQEAgLTY0LDI1ICs2MCwxNSBAQAogICAgICAgICAgICAgc3RkOjp2ZWN0b3I8UGF0dGVyblB0cj4gbV9wYXR0ZXJuczsKIAogICAgICAgICAgICAgYm9vbCBtYXRjaGVzKCBUZXN0Q2FzZUluZm8gY29uc3QmIHRlc3RDYXNlICkgY29uc3Q7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyBuYW1lKCkgY29uc3Q7CiAgICAgICAgIH07CiAKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0cnVjdCBGaWx0ZXJNYXRjaCB7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyBuYW1lOwotICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VGVzdENhc2UgY29uc3QqPiB0ZXN0czsKLSAgICAgICAgfTsKLSAgICAgICAgdXNpbmcgTWF0Y2hlcyA9IHN0ZDo6dmVjdG9yPEZpbHRlck1hdGNoPjsKLSAgICAgICAgdXNpbmcgdmVjdG9yU3RyaW5ncyA9IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjsKLQogICAgICAgICBib29sIGhhc0ZpbHRlcnMoKSBjb25zdDsKICAgICAgICAgYm9vbCBtYXRjaGVzKCBUZXN0Q2FzZUluZm8gY29uc3QmIHRlc3RDYXNlICkgY29uc3Q7Ci0gICAgICAgIE1hdGNoZXMgbWF0Y2hlc0J5RmlsdGVyKCBzdGQ6OnZlY3RvcjxUZXN0Q2FzZT4gY29uc3QmIHRlc3RDYXNlcywgSUNvbmZpZyBjb25zdCYgY29uZmlnICkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IHZlY3RvclN0cmluZ3MgJiBnZXRJbnZhbGlkQXJncygpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RkOjp2ZWN0b3I8RmlsdGVyPiBtX2ZpbHRlcnM7Ci0gICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtX2ludmFsaWRBcmdzOworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBUZXN0U3BlY1BhcnNlcjsKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X3NwZWNfcGFyc2VyLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9zcGVjX3BhcnNlci5jcHAKaW5kZXggZGFkMTVjMC4uNjFjOWU0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X3NwZWNfcGFyc2VyLmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3Rfc3BlY19wYXJzZXIuY3BwCkBAIC03LDcgKzcsNiBAQAogCiAjaW5jbHVkZSAiY2F0Y2hfdGVzdF9zcGVjX3BhcnNlci5oIgogCi0KIG5hbWVzcGFjZSBDYXRjaCB7CiAKICAgICBUZXN0U3BlY1BhcnNlcjo6VGVzdFNwZWNQYXJzZXIoIElUYWdBbGlhc1JlZ2lzdHJ5IGNvbnN0JiB0YWdBbGlhc2VzICkgOiBtX3RhZ0FsaWFzZXMoICZ0YWdBbGlhc2VzICkge30KQEAgLTE1LDEzNiArMTQsNjQgQEAKICAgICBUZXN0U3BlY1BhcnNlciYgVGVzdFNwZWNQYXJzZXI6OnBhcnNlKCBzdGQ6OnN0cmluZyBjb25zdCYgYXJnICkgewogICAgICAgICBtX21vZGUgPSBOb25lOwogICAgICAgICBtX2V4Y2x1c2lvbiA9IGZhbHNlOworICAgICAgICBtX3N0YXJ0ID0gc3RkOjpzdHJpbmc6Om5wb3M7CiAgICAgICAgIG1fYXJnID0gbV90YWdBbGlhc2VzLT5leHBhbmRBbGlhc2VzKCBhcmcgKTsKICAgICAgICAgbV9lc2NhcGVDaGFycy5jbGVhcigpOwotICAgICAgICBtX3N1YnN0cmluZy5yZXNlcnZlKG1fYXJnLnNpemUoKSk7Ci0gICAgICAgIG1fcGF0dGVybk5hbWUucmVzZXJ2ZShtX2FyZy5zaXplKCkpOwotICAgICAgICBtX3JlYWxQYXR0ZXJuUG9zID0gMDsKLQogICAgICAgICBmb3IoIG1fcG9zID0gMDsgbV9wb3MgPCBtX2FyZy5zaXplKCk7ICsrbV9wb3MgKQotICAgICAgICAgIC8vaWYgdmlzaXRDaGFyIGZhaWxzCi0gICAgICAgICAgIGlmKCAhdmlzaXRDaGFyKCBtX2FyZ1ttX3Bvc10gKSApewotICAgICAgICAgICAgICAgbV90ZXN0U3BlYy5tX2ludmFsaWRBcmdzLnB1c2hfYmFjayhhcmcpOwotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgIH0KLSAgICAgICAgZW5kTW9kZSgpOworICAgICAgICAgICAgdmlzaXRDaGFyKCBtX2FyZ1ttX3Bvc10gKTsKKyAgICAgICAgaWYoIG1fbW9kZSA9PSBOYW1lICkKKyAgICAgICAgICAgIGFkZFBhdHRlcm48VGVzdFNwZWM6Ok5hbWVQYXR0ZXJuPigpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogICAgIFRlc3RTcGVjIFRlc3RTcGVjUGFyc2VyOjp0ZXN0U3BlYygpIHsKICAgICAgICAgYWRkRmlsdGVyKCk7CiAgICAgICAgIHJldHVybiBtX3Rlc3RTcGVjOwogICAgIH0KLSAgICBib29sIFRlc3RTcGVjUGFyc2VyOjp2aXNpdENoYXIoIGNoYXIgYyApIHsKLSAgICAgICAgaWYoIChtX21vZGUgIT0gRXNjYXBlZE5hbWUpICYmIChjID09ICdcXCcpICkgewotICAgICAgICAgICAgZXNjYXBlKCk7Ci0gICAgICAgICAgICBhZGRDaGFyVG9QYXR0ZXJuKGMpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH1lbHNlIGlmKChtX21vZGUgIT0gRXNjYXBlZE5hbWUpICYmIChjID09ICcsJykgKSAgewotICAgICAgICAgICAgcmV0dXJuIHNlcGFyYXRlKCk7Ci0gICAgICAgIH0KIAotICAgICAgICBzd2l0Y2goIG1fbW9kZSApIHsKLSAgICAgICAgY2FzZSBOb25lOgotICAgICAgICAgICAgaWYoIHByb2Nlc3NOb25lQ2hhciggYyApICkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5hbWU6Ci0gICAgICAgICAgICBwcm9jZXNzTmFtZUNoYXIoIGMgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVzY2FwZWROYW1lOgotICAgICAgICAgICAgZW5kTW9kZSgpOwotICAgICAgICAgICAgYWRkQ2hhclRvUGF0dGVybihjKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICBjYXNlIFRhZzoKLSAgICAgICAgY2FzZSBRdW90ZWROYW1lOgotICAgICAgICAgICAgaWYoIHByb2Nlc3NPdGhlckNoYXIoIGMgKSApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBicmVhazsKKyAgICB2b2lkIFRlc3RTcGVjUGFyc2VyOjp2aXNpdENoYXIoIGNoYXIgYyApIHsKKyAgICAgICAgaWYoIG1fbW9kZSA9PSBOb25lICkgeworICAgICAgICAgICAgc3dpdGNoKCBjICkgeworICAgICAgICAgICAgY2FzZSAnICc6IHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgJ34nOiBtX2V4Y2x1c2lvbiA9IHRydWU7IHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgJ1snOiByZXR1cm4gc3RhcnROZXdNb2RlKCBUYWcsICsrbV9wb3MgKTsKKyAgICAgICAgICAgIGNhc2UgJyInOiByZXR1cm4gc3RhcnROZXdNb2RlKCBRdW90ZWROYW1lLCArK21fcG9zICk7CisgICAgICAgICAgICBjYXNlICdcXCc6IHJldHVybiBlc2NhcGUoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6IHN0YXJ0TmV3TW9kZSggTmFtZSwgbV9wb3MgKTsgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBtX3N1YnN0cmluZyArPSBjOwotICAgICAgICBpZiggIWlzQ29udHJvbENoYXIoIGMgKSApIHsKLSAgICAgICAgICAgIG1fcGF0dGVybk5hbWUgKz0gYzsKLSAgICAgICAgICAgIG1fcmVhbFBhdHRlcm5Qb3MrKzsKKyAgICAgICAgaWYoIG1fbW9kZSA9PSBOYW1lICkgeworICAgICAgICAgICAgaWYoIGMgPT0gJywnICkgeworICAgICAgICAgICAgICAgIGFkZFBhdHRlcm48VGVzdFNwZWM6Ok5hbWVQYXR0ZXJuPigpOworICAgICAgICAgICAgICAgIGFkZEZpbHRlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggYyA9PSAnWycgKSB7CisgICAgICAgICAgICAgICAgaWYoIHN1YlN0cmluZygpID09ICJleGNsdWRlOiIgKQorICAgICAgICAgICAgICAgICAgICBtX2V4Y2x1c2lvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBhZGRQYXR0ZXJuPFRlc3RTcGVjOjpOYW1lUGF0dGVybj4oKTsKKyAgICAgICAgICAgICAgICBzdGFydE5ld01vZGUoIFRhZywgKyttX3BvcyApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggYyA9PSAnXFwnICkKKyAgICAgICAgICAgICAgICBlc2NhcGUoKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiggbV9tb2RlID09IEVzY2FwZWROYW1lICkKKyAgICAgICAgICAgIG1fbW9kZSA9IE5hbWU7CisgICAgICAgIGVsc2UgaWYoIG1fbW9kZSA9PSBRdW90ZWROYW1lICYmIGMgPT0gJyInICkKKyAgICAgICAgICAgIGFkZFBhdHRlcm48VGVzdFNwZWM6Ok5hbWVQYXR0ZXJuPigpOworICAgICAgICBlbHNlIGlmKCBtX21vZGUgPT0gVGFnICYmIGMgPT0gJ10nICkKKyAgICAgICAgICAgIGFkZFBhdHRlcm48VGVzdFNwZWM6OlRhZ1BhdHRlcm4+KCk7CiAgICAgfQotICAgIC8vIFR3byBvZiB0aGUgcHJvY2Vzc2luZyBtZXRob2RzIHJldHVybiB0cnVlIHRvIHNpZ25hbCB0aGUgY2FsbGVyIHRvIHJldHVybgotICAgIC8vIHdpdGhvdXQgYWRkaW5nIHRoZSBnaXZlbiBjaGFyYWN0ZXIgdG8gdGhlIGN1cnJlbnQgcGF0dGVybiBzdHJpbmdzCi0gICAgYm9vbCBUZXN0U3BlY1BhcnNlcjo6cHJvY2Vzc05vbmVDaGFyKCBjaGFyIGMgKSB7Ci0gICAgICAgIHN3aXRjaCggYyApIHsKLSAgICAgICAgY2FzZSAnICc6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSAnfic6Ci0gICAgICAgICAgICBtX2V4Y2x1c2lvbiA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgJ1snOgotICAgICAgICAgICAgc3RhcnROZXdNb2RlKCBUYWcgKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSAnIic6Ci0gICAgICAgICAgICBzdGFydE5ld01vZGUoIFF1b3RlZE5hbWUgKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN0YXJ0TmV3TW9kZSggTmFtZSApOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIHZvaWQgVGVzdFNwZWNQYXJzZXI6OnByb2Nlc3NOYW1lQ2hhciggY2hhciBjICkgewotICAgICAgICBpZiggYyA9PSAnWycgKSB7Ci0gICAgICAgICAgICBpZiggbV9zdWJzdHJpbmcgPT0gImV4Y2x1ZGU6IiApCi0gICAgICAgICAgICAgICAgbV9leGNsdXNpb24gPSB0cnVlOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVuZE1vZGUoKTsKLSAgICAgICAgICAgIHN0YXJ0TmV3TW9kZSggVGFnICk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYm9vbCBUZXN0U3BlY1BhcnNlcjo6cHJvY2Vzc090aGVyQ2hhciggY2hhciBjICkgewotICAgICAgICBpZiggIWlzQ29udHJvbENoYXIoIGMgKSApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1fc3Vic3RyaW5nICs9IGM7Ci0gICAgICAgIGVuZE1vZGUoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHZvaWQgVGVzdFNwZWNQYXJzZXI6OnN0YXJ0TmV3TW9kZSggTW9kZSBtb2RlICkgeworICAgIHZvaWQgVGVzdFNwZWNQYXJzZXI6OnN0YXJ0TmV3TW9kZSggTW9kZSBtb2RlLCBzdGQ6OnNpemVfdCBzdGFydCApIHsKICAgICAgICAgbV9tb2RlID0gbW9kZTsKLSAgICB9Ci0gICAgdm9pZCBUZXN0U3BlY1BhcnNlcjo6ZW5kTW9kZSgpIHsKLSAgICAgICAgc3dpdGNoKCBtX21vZGUgKSB7Ci0gICAgICAgIGNhc2UgTmFtZToKLSAgICAgICAgY2FzZSBRdW90ZWROYW1lOgotICAgICAgICAgICAgcmV0dXJuIGFkZE5hbWVQYXR0ZXJuKCk7Ci0gICAgICAgIGNhc2UgVGFnOgotICAgICAgICAgICAgcmV0dXJuIGFkZFRhZ1BhdHRlcm4oKTsKLSAgICAgICAgY2FzZSBFc2NhcGVkTmFtZToKLSAgICAgICAgICAgIHJldmVydEJhY2tUb0xhc3RNb2RlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgTm9uZToKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBzdGFydE5ld01vZGUoIE5vbmUgKTsKLSAgICAgICAgfQorICAgICAgICBtX3N0YXJ0ID0gc3RhcnQ7CiAgICAgfQogICAgIHZvaWQgVGVzdFNwZWNQYXJzZXI6OmVzY2FwZSgpIHsKLSAgICAgICAgc2F2ZUxhc3RNb2RlKCk7CisgICAgICAgIGlmKCBtX21vZGUgPT0gTm9uZSApCisgICAgICAgICAgICBtX3N0YXJ0ID0gbV9wb3M7CiAgICAgICAgIG1fbW9kZSA9IEVzY2FwZWROYW1lOwotICAgICAgICBtX2VzY2FwZUNoYXJzLnB1c2hfYmFjayhtX3JlYWxQYXR0ZXJuUG9zKTsKKyAgICAgICAgbV9lc2NhcGVDaGFycy5wdXNoX2JhY2soIG1fcG9zICk7CiAgICAgfQotICAgIGJvb2wgVGVzdFNwZWNQYXJzZXI6OmlzQ29udHJvbENoYXIoIGNoYXIgYyApIGNvbnN0IHsKLSAgICAgICAgc3dpdGNoKCBtX21vZGUgKSB7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNhc2UgTm9uZToKLSAgICAgICAgICAgICAgICByZXR1cm4gYyA9PSAnfic7Ci0gICAgICAgICAgICBjYXNlIE5hbWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGMgPT0gJ1snOwotICAgICAgICAgICAgY2FzZSBFc2NhcGVkTmFtZToKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGNhc2UgUXVvdGVkTmFtZToKLSAgICAgICAgICAgICAgICByZXR1cm4gYyA9PSAnIic7Ci0gICAgICAgICAgICBjYXNlIFRhZzoKLSAgICAgICAgICAgICAgICByZXR1cm4gYyA9PSAnWycgfHwgYyA9PSAnXSc7Ci0gICAgICAgIH0KLSAgICB9CisgICAgc3RkOjpzdHJpbmcgVGVzdFNwZWNQYXJzZXI6OnN1YlN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fYXJnLnN1YnN0ciggbV9zdGFydCwgbV9wb3MgLSBtX3N0YXJ0ICk7IH0KIAogICAgIHZvaWQgVGVzdFNwZWNQYXJzZXI6OmFkZEZpbHRlcigpIHsKICAgICAgICAgaWYoICFtX2N1cnJlbnRGaWx0ZXIubV9wYXR0ZXJucy5lbXB0eSgpICkgewpAQCAtMTUzLDg0ICs4MCw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIFRlc3RTcGVjUGFyc2VyOjpzYXZlTGFzdE1vZGUoKSB7Ci0gICAgICBsYXN0TW9kZSA9IG1fbW9kZTsKLSAgICB9Ci0KLSAgICB2b2lkIFRlc3RTcGVjUGFyc2VyOjpyZXZlcnRCYWNrVG9MYXN0TW9kZSgpIHsKLSAgICAgIG1fbW9kZSA9IGxhc3RNb2RlOwotICAgIH0KLQotICAgIGJvb2wgVGVzdFNwZWNQYXJzZXI6OnNlcGFyYXRlKCkgewotICAgICAgaWYoIChtX21vZGU9PVF1b3RlZE5hbWUpIHx8IChtX21vZGU9PVRhZykgKXsKLSAgICAgICAgIC8vaW52YWxpZCBhcmd1bWVudCwgc2lnbmFsIGZhaWx1cmUgdG8gcHJldmlvdXMgc2NvcGUuCi0gICAgICAgICBtX21vZGUgPSBOb25lOwotICAgICAgICAgbV9wb3MgPSBtX2FyZy5zaXplKCk7Ci0gICAgICAgICBtX3N1YnN0cmluZy5jbGVhcigpOwotICAgICAgICAgbV9wYXR0ZXJuTmFtZS5jbGVhcigpOwotICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZW5kTW9kZSgpOwotICAgICAgYWRkRmlsdGVyKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsgLy9zdWNjZXNzCi0gICAgfQotCi0gICAgc3RkOjpzdHJpbmcgVGVzdFNwZWNQYXJzZXI6OnByZXByb2Nlc3NQYXR0ZXJuKCkgewotICAgICAgICBzdGQ6OnN0cmluZyB0b2tlbiA9IG1fcGF0dGVybk5hbWU7Ci0gICAgICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBtX2VzY2FwZUNoYXJzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgdG9rZW4gPSB0b2tlbi5zdWJzdHIoMCwgbV9lc2NhcGVDaGFyc1tpXSAtIGkpICsgdG9rZW4uc3Vic3RyKG1fZXNjYXBlQ2hhcnNbaV0gLSBpICsgMSk7Ci0gICAgICAgIG1fZXNjYXBlQ2hhcnMuY2xlYXIoKTsKLSAgICAgICAgaWYgKHN0YXJ0c1dpdGgodG9rZW4sICJleGNsdWRlOiIpKSB7Ci0gICAgICAgICAgICBtX2V4Y2x1c2lvbiA9IHRydWU7Ci0gICAgICAgICAgICB0b2tlbiA9IHRva2VuLnN1YnN0cig4KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fcGF0dGVybk5hbWUuY2xlYXIoKTsKLQotICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgfQotCi0gICAgdm9pZCBUZXN0U3BlY1BhcnNlcjo6YWRkTmFtZVBhdHRlcm4oKSB7Ci0gICAgICAgIGF1dG8gdG9rZW4gPSBwcmVwcm9jZXNzUGF0dGVybigpOwotCi0gICAgICAgIGlmICghdG9rZW4uZW1wdHkoKSkgewotICAgICAgICAgICAgVGVzdFNwZWM6OlBhdHRlcm5QdHIgcGF0dGVybiA9IHN0ZDo6bWFrZV9zaGFyZWQ8VGVzdFNwZWM6Ok5hbWVQYXR0ZXJuPih0b2tlbiwgbV9zdWJzdHJpbmcpOwotICAgICAgICAgICAgaWYgKG1fZXhjbHVzaW9uKQotICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBzdGQ6Om1ha2Vfc2hhcmVkPFRlc3RTcGVjOjpFeGNsdWRlZFBhdHRlcm4+KHBhdHRlcm4pOwotICAgICAgICAgICAgbV9jdXJyZW50RmlsdGVyLm1fcGF0dGVybnMucHVzaF9iYWNrKHBhdHRlcm4pOwotICAgICAgICB9Ci0gICAgICAgIG1fc3Vic3RyaW5nLmNsZWFyKCk7Ci0gICAgICAgIG1fZXhjbHVzaW9uID0gZmFsc2U7Ci0gICAgICAgIG1fbW9kZSA9IE5vbmU7Ci0gICAgfQotCi0gICAgdm9pZCBUZXN0U3BlY1BhcnNlcjo6YWRkVGFnUGF0dGVybigpIHsKLSAgICAgICAgYXV0byB0b2tlbiA9IHByZXByb2Nlc3NQYXR0ZXJuKCk7Ci0KLSAgICAgICAgaWYgKCF0b2tlbi5lbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgdGFnIHBhdHRlcm4gaXMgdGhlICJoaWRlIGFuZCB0YWciIHNob3J0aGFuZCAoZS5nLiBbLmZvb10pCi0gICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIGNyZWF0ZSBhIHNlcGFyYXRlIGhpZGUgdGFnIGFuZCBzaG9ydGVuIHRoZSByZWFsIG9uZQotICAgICAgICAgICAgaWYgKHRva2VuLnNpemUoKSA+IDEgJiYgdG9rZW5bMF0gPT0gJy4nKSB7Ci0gICAgICAgICAgICAgICAgdG9rZW4uZXJhc2UodG9rZW4uYmVnaW4oKSk7Ci0gICAgICAgICAgICAgICAgVGVzdFNwZWM6OlBhdHRlcm5QdHIgcGF0dGVybiA9IHN0ZDo6bWFrZV9zaGFyZWQ8VGVzdFNwZWM6OlRhZ1BhdHRlcm4+KCIuIiwgbV9zdWJzdHJpbmcpOwotICAgICAgICAgICAgICAgIGlmIChtX2V4Y2x1c2lvbikgewotICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gc3RkOjptYWtlX3NoYXJlZDxUZXN0U3BlYzo6RXhjbHVkZWRQYXR0ZXJuPihwYXR0ZXJuKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50RmlsdGVyLm1fcGF0dGVybnMucHVzaF9iYWNrKHBhdHRlcm4pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBUZXN0U3BlYzo6UGF0dGVyblB0ciBwYXR0ZXJuID0gc3RkOjptYWtlX3NoYXJlZDxUZXN0U3BlYzo6VGFnUGF0dGVybj4odG9rZW4sIG1fc3Vic3RyaW5nKTsKLQotICAgICAgICAgICAgaWYgKG1fZXhjbHVzaW9uKSB7Ci0gICAgICAgICAgICAgICAgcGF0dGVybiA9IHN0ZDo6bWFrZV9zaGFyZWQ8VGVzdFNwZWM6OkV4Y2x1ZGVkUGF0dGVybj4ocGF0dGVybik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2N1cnJlbnRGaWx0ZXIubV9wYXR0ZXJucy5wdXNoX2JhY2socGF0dGVybik7Ci0gICAgICAgIH0KLSAgICAgICAgbV9zdWJzdHJpbmcuY2xlYXIoKTsKLSAgICAgICAgbV9leGNsdXNpb24gPSBmYWxzZTsKLSAgICAgICAgbV9tb2RlID0gTm9uZTsKLSAgICB9Ci0KICAgICBUZXN0U3BlYyBwYXJzZVRlc3RTcGVjKCBzdGQ6OnN0cmluZyBjb25zdCYgYXJnICkgewogICAgICAgICByZXR1cm4gVGVzdFNwZWNQYXJzZXIoIElUYWdBbGlhc1JlZ2lzdHJ5OjpnZXQoKSApLnBhcnNlKCBhcmcgKS50ZXN0U3BlYygpOwogICAgIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9zcGVjX3BhcnNlci5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X3NwZWNfcGFyc2VyLmgKaW5kZXggMjUwZDdjMS4uNzljZTg4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X3NwZWNfcGFyc2VyLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X3NwZWNfcGFyc2VyLmgKQEAgLTIyLDEzICsyMiw5IEBACiAgICAgY2xhc3MgVGVzdFNwZWNQYXJzZXIgewogICAgICAgICBlbnVtIE1vZGV7IE5vbmUsIE5hbWUsIFF1b3RlZE5hbWUsIFRhZywgRXNjYXBlZE5hbWUgfTsKICAgICAgICAgTW9kZSBtX21vZGUgPSBOb25lOwotICAgICAgICBNb2RlIGxhc3RNb2RlID0gTm9uZTsKICAgICAgICAgYm9vbCBtX2V4Y2x1c2lvbiA9IGZhbHNlOwotICAgICAgICBzdGQ6OnNpemVfdCBtX3BvcyA9IDA7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG1fcmVhbFBhdHRlcm5Qb3MgPSAwOworICAgICAgICBzdGQ6OnNpemVfdCBtX3N0YXJ0ID0gc3RkOjpzdHJpbmc6Om5wb3MsIG1fcG9zID0gMDsKICAgICAgICAgc3RkOjpzdHJpbmcgbV9hcmc7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIG1fc3Vic3RyaW5nOwotICAgICAgICBzdGQ6OnN0cmluZyBtX3BhdHRlcm5OYW1lOwogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNpemVfdD4gbV9lc2NhcGVDaGFyczsKICAgICAgICAgVGVzdFNwZWM6OkZpbHRlciBtX2N1cnJlbnRGaWx0ZXI7CiAgICAgICAgIFRlc3RTcGVjIG1fdGVzdFNwZWM7CkBAIC00MSwzMiArMzcsMzIgQEAKICAgICAgICAgVGVzdFNwZWMgdGVzdFNwZWMoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wgdmlzaXRDaGFyKCBjaGFyIGMgKTsKLSAgICAgICAgdm9pZCBzdGFydE5ld01vZGUoIE1vZGUgbW9kZSApOwotICAgICAgICBib29sIHByb2Nlc3NOb25lQ2hhciggY2hhciBjICk7Ci0gICAgICAgIHZvaWQgcHJvY2Vzc05hbWVDaGFyKCBjaGFyIGMgKTsKLSAgICAgICAgYm9vbCBwcm9jZXNzT3RoZXJDaGFyKCBjaGFyIGMgKTsKLSAgICAgICAgdm9pZCBlbmRNb2RlKCk7CisgICAgICAgIHZvaWQgdmlzaXRDaGFyKCBjaGFyIGMgKTsKKyAgICAgICAgdm9pZCBzdGFydE5ld01vZGUoIE1vZGUgbW9kZSwgc3RkOjpzaXplX3Qgc3RhcnQgKTsKICAgICAgICAgdm9pZCBlc2NhcGUoKTsKLSAgICAgICAgYm9vbCBpc0NvbnRyb2xDaGFyKCBjaGFyIGMgKSBjb25zdDsKLSAgICAgICAgdm9pZCBzYXZlTGFzdE1vZGUoKTsKLSAgICAgICAgdm9pZCByZXZlcnRCYWNrVG9MYXN0TW9kZSgpOwotICAgICAgICB2b2lkIGFkZEZpbHRlcigpOwotICAgICAgICBib29sIHNlcGFyYXRlKCk7CisgICAgICAgIHN0ZDo6c3RyaW5nIHN1YlN0cmluZygpIGNvbnN0OwogCi0gICAgICAgIC8vIEhhbmRsZXMgY29tbW9uIHByZXByb2Nlc3Npbmcgb2YgdGhlIHBhdHRlcm4gZm9yIG5hbWUvdGFnIHBhdHRlcm5zCi0gICAgICAgIHN0ZDo6c3RyaW5nIHByZXByb2Nlc3NQYXR0ZXJuKCk7Ci0gICAgICAgIC8vIEFkZHMgdGhlIGN1cnJlbnQgcGF0dGVybiBhcyBhIHRlc3QgbmFtZQotICAgICAgICB2b2lkIGFkZE5hbWVQYXR0ZXJuKCk7Ci0gICAgICAgIC8vIEFkZHMgdGhlIGN1cnJlbnQgcGF0dGVybiBhcyBhIHRhZwotICAgICAgICB2b2lkIGFkZFRhZ1BhdHRlcm4oKTsKLQotICAgICAgICBpbmxpbmUgdm9pZCBhZGRDaGFyVG9QYXR0ZXJuKGNoYXIgYykgewotICAgICAgICAgICAgbV9zdWJzdHJpbmcgKz0gYzsKLSAgICAgICAgICAgIG1fcGF0dGVybk5hbWUgKz0gYzsKLSAgICAgICAgICAgIG1fcmVhbFBhdHRlcm5Qb3MrKzsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAgICAgdm9pZCBhZGRQYXR0ZXJuKCkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdG9rZW4gPSBzdWJTdHJpbmcoKTsKKyAgICAgICAgICAgIGZvciggc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBtX2VzY2FwZUNoYXJzLnNpemUoKTsgKytpICkKKyAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2VuLnN1YnN0ciggMCwgbV9lc2NhcGVDaGFyc1tpXS1tX3N0YXJ0LWkgKSArIHRva2VuLnN1YnN0ciggbV9lc2NhcGVDaGFyc1tpXS1tX3N0YXJ0LWkrMSApOworICAgICAgICAgICAgbV9lc2NhcGVDaGFycy5jbGVhcigpOworICAgICAgICAgICAgaWYoIHN0YXJ0c1dpdGgoIHRva2VuLCAiZXhjbHVkZToiICkgKSB7CisgICAgICAgICAgICAgICAgbV9leGNsdXNpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW4uc3Vic3RyKCA4ICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiggIXRva2VuLmVtcHR5KCkgKSB7CisgICAgICAgICAgICAgICAgVGVzdFNwZWM6OlBhdHRlcm5QdHIgcGF0dGVybiA9IHN0ZDo6bWFrZV9zaGFyZWQ8VD4oIHRva2VuICk7CisgICAgICAgICAgICAgICAgaWYoIG1fZXhjbHVzaW9uICkKKyAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IHN0ZDo6bWFrZV9zaGFyZWQ8VGVzdFNwZWM6OkV4Y2x1ZGVkUGF0dGVybj4oIHBhdHRlcm4gKTsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRGaWx0ZXIubV9wYXR0ZXJucy5wdXNoX2JhY2soIHBhdHRlcm4gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fZXhjbHVzaW9uID0gZmFsc2U7CisgICAgICAgICAgICBtX21vZGUgPSBOb25lOwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBhZGRGaWx0ZXIoKTsKICAgICB9OwogICAgIFRlc3RTcGVjIHBhcnNlVGVzdFNwZWMoIHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcgKTsKIApAQCAtNzYsNCArNzIsNCBAQAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAogI2VuZGlmCiAKLSNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfVEVTVF9TUEVDX1BBUlNFUl9IUFBfSU5DTFVERUQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisjZW5kaWYgLy8gVFdPQkxVRUNVQkVTX0NBVENIX1RFU1RfU1BFQ19QQVJTRVJfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rvc3RyaW5nLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdG9zdHJpbmcuY3BwCmluZGV4IGEyODljMzQuLmI4NTdkM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdG9zdHJpbmcuY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdG9zdHJpbmcuY3BwCkBAIC0zOCwxMSArMzgsMTMgQEAKICAgICAgICAgICAgIGVudW0gQXJjaCB7IEJpZywgTGl0dGxlIH07CiAKICAgICAgICAgICAgIHN0YXRpYyBBcmNoIHdoaWNoKCkgewotICAgICAgICAgICAgICAgIGludCBvbmUgPSAxOwotICAgICAgICAgICAgICAgIC8vIElmIHRoZSBsb3dlc3QgYnl0ZSB3ZSByZWFkIGlzIG5vbi16ZXJvLCB3ZSBjYW4gYXNzdW1lCi0gICAgICAgICAgICAgICAgLy8gdGhhdCBsaXR0bGUgZW5kaWFuIGZvcm1hdCBpcyB1c2VkLgotICAgICAgICAgICAgICAgIGF1dG8gdmFsdWUgPSAqcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJm9uZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID8gTGl0dGxlIDogQmlnOworICAgICAgICAgICAgICAgIHVuaW9uIF97CisgICAgICAgICAgICAgICAgICAgIGludCBhc0ludDsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBhc0NoYXJbc2l6ZW9mIChpbnQpXTsKKyAgICAgICAgICAgICAgICB9IHU7CisKKyAgICAgICAgICAgICAgICB1LmFzSW50ID0gMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKCB1LmFzQ2hhcltzaXplb2YoaW50KS0xXSA9PSAxICkgPyBCaWcgOiBMaXR0bGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAgICAgfQpAQCAtMTY4LDEyICsxNzAsNiBAQAogfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19DUFAxN19CWVRFKQotI2luY2x1ZGUgPGNzdGRkZWY+Ci1zdGQ6OnN0cmluZyBTdHJpbmdNYWtlcjxzdGQ6OmJ5dGU+Ojpjb252ZXJ0KHN0ZDo6Ynl0ZSB2YWx1ZSkgewotICAgIHJldHVybiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShzdGQ6OnRvX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25nPih2YWx1ZSkpOwotfQotI2VuZGlmIC8vIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0NQUDE3X0JZVEUpCiAKIHN0ZDo6c3RyaW5nIFN0cmluZ01ha2VyPGludD46OmNvbnZlcnQoaW50IHZhbHVlKSB7CiAgICAgcmV0dXJuIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4odmFsdWUpKTsKQEAgLTIzOCwxNiArMjM0LDExIEBACiAgICAgcmV0dXJuICJudWxscHRyIjsKIH0KIAotaW50IFN0cmluZ01ha2VyPGZsb2F0Pjo6cHJlY2lzaW9uID0gNTsKLQogc3RkOjpzdHJpbmcgU3RyaW5nTWFrZXI8ZmxvYXQ+Ojpjb252ZXJ0KGZsb2F0IHZhbHVlKSB7Ci0gICAgcmV0dXJuIGZwVG9TdHJpbmcodmFsdWUsIHByZWNpc2lvbikgKyAnZic7CisgICAgcmV0dXJuIGZwVG9TdHJpbmcodmFsdWUsIDUpICsgJ2YnOwogfQotCi1pbnQgU3RyaW5nTWFrZXI8ZG91YmxlPjo6cHJlY2lzaW9uID0gMTA7Ci0KIHN0ZDo6c3RyaW5nIFN0cmluZ01ha2VyPGRvdWJsZT46OmNvbnZlcnQoZG91YmxlIHZhbHVlKSB7Ci0gICAgcmV0dXJuIGZwVG9TdHJpbmcodmFsdWUsIHByZWNpc2lvbik7CisgICAgcmV0dXJuIGZwVG9TdHJpbmcodmFsdWUsIDEwKTsKIH0KIAogc3RkOjpzdHJpbmcgcmF0aW9fc3RyaW5nPHN0ZDo6YXR0bz46OnN5bWJvbCgpIHsgcmV0dXJuICJhIjsgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90b3N0cmluZy5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90b3N0cmluZy5oCmluZGV4IDY0MGZjOGMuLjEzYTQzYjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdG9zdHJpbmcuaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rvc3RyaW5nLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSAiY2F0Y2hfY29tcGlsZXJfY2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVkZSAiY2F0Y2hfc3RyZWFtLmgiCi0jaW5jbHVkZSAiY2F0Y2hfaW50ZXJmYWNlc19lbnVtX3ZhbHVlc19yZWdpc3RyeS5oIgogCiAjaWZkZWYgQ0FUQ0hfQ09ORklHX0NQUDE3X1NUUklOR19WSUVXCiAjaW5jbHVkZSA8c3RyaW5nX3ZpZXc+CkBAIC00NCw5ICs0Myw5IEBACiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICAgICAgY2xhc3MgSXNTdHJlYW1JbnNlcnRhYmxlIHsKLSAgICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0cmVhbSwgdHlwZW5hbWUgVT4KKyAgICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNTLCB0eXBlbmFtZSBUVD4KICAgICAgICAgICAgIHN0YXRpYyBhdXRvIHRlc3QoaW50KQotICAgICAgICAgICAgICAgIC0+IGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxTdHJlYW0mPigpIDw8IHN0ZDo6ZGVjbHZhbDxVPigpLCBzdGQ6OnRydWVfdHlwZSgpKTsKKyAgICAgICAgICAgICAgICAtPiBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8U1MmPigpIDw8IHN0ZDo6ZGVjbHZhbDxUVD4oKSwgc3RkOjp0cnVlX3R5cGUoKSk7CiAKICAgICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZT4KICAgICAgICAgICAgIHN0YXRpYyBhdXRvIHRlc3QoLi4uKS0+c3RkOjpmYWxzZV90eXBlOwpAQCAtMjEwLDEyICsyMDksNiBAQAogICAgICAgICB9CiAgICAgfTsKIAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0NQUDE3X0JZVEUpCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTdHJpbmdNYWtlcjxzdGQ6OmJ5dGU+IHsKLSAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnZlcnQoc3RkOjpieXRlIHZhbHVlKTsKLSAgICB9OwotI2VuZGlmIC8vIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0NQUDE3X0JZVEUpCiAgICAgdGVtcGxhdGU8PgogICAgIHN0cnVjdCBTdHJpbmdNYWtlcjxpbnQ+IHsKICAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnZlcnQoaW50IHZhbHVlKTsKQEAgLTI2NywxMyArMjYwLDEwIEBACiAgICAgdGVtcGxhdGU8PgogICAgIHN0cnVjdCBTdHJpbmdNYWtlcjxmbG9hdD4gewogICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgY29udmVydChmbG9hdCB2YWx1ZSk7Ci0gICAgICAgIHN0YXRpYyBpbnQgcHJlY2lzaW9uOwogICAgIH07Ci0KICAgICB0ZW1wbGF0ZTw+CiAgICAgc3RydWN0IFN0cmluZ01ha2VyPGRvdWJsZT4gewogICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgY29udmVydChkb3VibGUgdmFsdWUpOwotICAgICAgICBzdGF0aWMgaW50IHByZWNpc2lvbjsKICAgICB9OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CkBAIC02NDksMTcgKzYzOSw2IEBACiB9CiAjZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX0VOQUJMRV9DSFJPTk9fU1RSSU5HTUFLRVIKIAotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9SRUdJU1RFUl9FTlVNKCBlbnVtTmFtZSwgLi4uICkgXAotbmFtZXNwYWNlIENhdGNoIHsgXAotICAgIHRlbXBsYXRlPD4gc3RydWN0IFN0cmluZ01ha2VyPGVudW1OYW1lPiB7IFwKLSAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnZlcnQoIGVudW1OYW1lIHZhbHVlICkgeyBcCi0gICAgICAgICAgICBzdGF0aWMgY29uc3QgYXV0byYgZW51bUluZm8gPSA6OkNhdGNoOjpnZXRNdXRhYmxlUmVnaXN0cnlIdWIoKS5nZXRNdXRhYmxlRW51bVZhbHVlc1JlZ2lzdHJ5KCkucmVnaXN0ZXJFbnVtKCAjZW51bU5hbWUsICNfX1ZBX0FSR1NfXywgeyBfX1ZBX0FSR1NfXyB9ICk7IFwKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzdGQ6OnN0cmluZz4oZW51bUluZm8ubG9va3VwKCBzdGF0aWNfY2FzdDxpbnQ+KCB2YWx1ZSApICkpOyBcCi0gICAgICAgIH0gXAotICAgIH07IFwKLX0KLQotI2RlZmluZSBDQVRDSF9SRUdJU1RFUl9FTlVNKCBlbnVtTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfUkVHSVNURVJfRU5VTSggZW51bU5hbWUsIF9fVkFfQVJHU19fICkKIAogI2lmZGVmIF9NU0NfVkVSCiAjcHJhZ21hIHdhcm5pbmcocG9wKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90eXBlX3RyYWl0cy5ocHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3R5cGVfdHJhaXRzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWRiMWVjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90eXBlX3RyYWl0cy5ocHAKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqICBDcmVhdGVkIGJ5IEpvemVmIG9uIDEyLzExLzIwMTguCisgKiAgQ29weXJpZ2h0IDIwMTcgVHdvIEJsdWUgQ3ViZXMgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisgKiAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisgKi8KKworI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfVFlQRV9UUkFJVFNfSFBQX0lOQ0xVREVECisjZGVmaW5lIFRXT0JMVUVDVUJFU19DQVRDSF9UWVBFX1RSQUlUU19IUFBfSU5DTFVERUQKKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCituYW1lc3BhY2UgQ2F0Y2h7CisKKyNpZmRlZiBDQVRDSF9DUFAxN19PUl9HUkVBVEVSCisJdGVtcGxhdGUgPHR5cGVuYW1lLi4uPgorCWlubGluZSBjb25zdGV4cHIgYXV0byBpc191bmlxdWUgPSBzdGQ6OnRydWVfdHlwZXt9OworCisJdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFJlc3Q+CisJaW5saW5lIGNvbnN0ZXhwciBhdXRvIGlzX3VuaXF1ZTxULCBSZXN0Li4uPiA9IHN0ZDo6Ym9vbF9jb25zdGFudDwKKwkJKCFzdGQ6OmlzX3NhbWVfdjxULCBSZXN0PiAmJiAuLi4pICYmIGlzX3VuaXF1ZTxSZXN0Li4uPgorCT57fTsKKyNlbHNlCisKK3RlbXBsYXRlIDx0eXBlbmFtZS4uLj4KK3N0cnVjdCBpc191bmlxdWUgOiBzdGQ6OnRydWVfdHlwZXt9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZS4uLiBSZXN0Pgorc3RydWN0IGlzX3VuaXF1ZTxUMCwgVDEsIFJlc3QuLi4+IDogc3RkOjppbnRlZ3JhbF9jb25zdGFudAorPGJvb2wsCisgICAgICFzdGQ6OmlzX3NhbWU8VDAsIFQxPjo6dmFsdWUgCisgICAgICYmIGlzX3VuaXF1ZTxUMCwgUmVzdC4uLj46OnZhbHVlIAorICAgICAmJiBpc191bmlxdWU8VDEsIFJlc3QuLi4+Ojp2YWx1ZQorPnt9OworCisjZW5kaWYKK30KKworI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9UWVBFX1RSQUlUU19IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdmVyc2lvbi5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3ZlcnNpb24uY3BwCmluZGV4IDE0M2EzNTAuLjVmNDkxN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdmVyc2lvbi5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF92ZXJzaW9uLmNwcApAQCAtMzcsNyArMzcsNyBAQAogICAgIH0KIAogICAgIFZlcnNpb24gY29uc3QmIGxpYnJhcnlWZXJzaW9uKCkgewotICAgICAgICBzdGF0aWMgVmVyc2lvbiB2ZXJzaW9uKCAyLCAxMSwgMiwgIiIsIDAgKTsKKyAgICAgICAgc3RhdGljIFZlcnNpb24gdmVyc2lvbiggMiwgNywgMiwgIiIsIDAgKTsKICAgICAgICAgcmV0dXJuIHZlcnNpb247CiAgICAgfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3dpbGRjYXJkX3BhdHRlcm4uY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF93aWxkY2FyZF9wYXR0ZXJuLmNwcAppbmRleCA5NWU1ZDNmLi45YmYyMGYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3dpbGRjYXJkX3BhdHRlcm4uY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfd2lsZGNhcmRfcGF0dGVybi5jcHAKQEAgLTksMTIgKzksMTQgQEAKICNpbmNsdWRlICJjYXRjaF9lbmZvcmNlLmgiCiAjaW5jbHVkZSAiY2F0Y2hfc3RyaW5nX21hbmlwLmgiCiAKKyNpbmNsdWRlIDxzc3RyZWFtPgorCiBuYW1lc3BhY2UgQ2F0Y2ggewogCiAgICAgV2lsZGNhcmRQYXR0ZXJuOjpXaWxkY2FyZFBhdHRlcm4oIHN0ZDo6c3RyaW5nIGNvbnN0JiBwYXR0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXNlU2Vuc2l0aXZlOjpDaG9pY2UgY2FzZVNlbnNpdGl2aXR5ICkKICAgICA6ICAgbV9jYXNlU2Vuc2l0aXZpdHkoIGNhc2VTZW5zaXRpdml0eSApLAotICAgICAgICBtX3BhdHRlcm4oIG5vcm1hbGlzZVN0cmluZyggcGF0dGVybiApICkKKyAgICAgICAgbV9wYXR0ZXJuKCBhZGp1c3RDYXNlKCBwYXR0ZXJuICkgKQogICAgIHsKICAgICAgICAgaWYoIHN0YXJ0c1dpdGgoIG1fcGF0dGVybiwgJyonICkgKSB7CiAgICAgICAgICAgICBtX3BhdHRlcm4gPSBtX3BhdHRlcm4uc3Vic3RyKCAxICk7CkBAIC0yOSwxOSArMzEsMTkgQEAKICAgICBib29sIFdpbGRjYXJkUGF0dGVybjo6bWF0Y2hlcyggc3RkOjpzdHJpbmcgY29uc3QmIHN0ciApIGNvbnN0IHsKICAgICAgICAgc3dpdGNoKCBtX3dpbGRjYXJkICkgewogICAgICAgICAgICAgY2FzZSBOb1dpbGRjYXJkOgotICAgICAgICAgICAgICAgIHJldHVybiBtX3BhdHRlcm4gPT0gbm9ybWFsaXNlU3RyaW5nKCBzdHIgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9wYXR0ZXJuID09IGFkanVzdENhc2UoIHN0ciApOwogICAgICAgICAgICAgY2FzZSBXaWxkY2FyZEF0U3RhcnQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVuZHNXaXRoKCBub3JtYWxpc2VTdHJpbmcoIHN0ciApLCBtX3BhdHRlcm4gKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW5kc1dpdGgoIGFkanVzdENhc2UoIHN0ciApLCBtX3BhdHRlcm4gKTsKICAgICAgICAgICAgIGNhc2UgV2lsZGNhcmRBdEVuZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRzV2l0aCggbm9ybWFsaXNlU3RyaW5nKCBzdHIgKSwgbV9wYXR0ZXJuICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0c1dpdGgoIGFkanVzdENhc2UoIHN0ciApLCBtX3BhdHRlcm4gKTsKICAgICAgICAgICAgIGNhc2UgV2lsZGNhcmRBdEJvdGhFbmRzOgotICAgICAgICAgICAgICAgIHJldHVybiBjb250YWlucyggbm9ybWFsaXNlU3RyaW5nKCBzdHIgKSwgbV9wYXR0ZXJuICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKCBhZGp1c3RDYXNlKCBzdHIgKSwgbV9wYXR0ZXJuICk7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX0VSUk9SKCAiVW5rbm93biBlbnVtIiApOwogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RkOjpzdHJpbmcgV2lsZGNhcmRQYXR0ZXJuOjpub3JtYWxpc2VTdHJpbmcoIHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIgKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiB0cmltKCBtX2Nhc2VTZW5zaXRpdml0eSA9PSBDYXNlU2Vuc2l0aXZlOjpObyA/IHRvTG93ZXIoIHN0ciApIDogc3RyICk7CisgICAgc3RkOjpzdHJpbmcgV2lsZGNhcmRQYXR0ZXJuOjphZGp1c3RDYXNlKCBzdGQ6OnN0cmluZyBjb25zdCYgc3RyICkgY29uc3QgeworICAgICAgICByZXR1cm4gbV9jYXNlU2Vuc2l0aXZpdHkgPT0gQ2FzZVNlbnNpdGl2ZTo6Tm8gPyB0b0xvd2VyKCBzdHIgKSA6IHN0cjsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3dpbGRjYXJkX3BhdHRlcm4uaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfd2lsZGNhcmRfcGF0dGVybi5oCmluZGV4IDVkNTA4ZjcuLjRkYWU3MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfd2lsZGNhcmRfcGF0dGVybi5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfd2lsZGNhcmRfcGF0dGVybi5oCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgICAgIHZpcnR1YWwgYm9vbCBtYXRjaGVzKCBzdGQ6OnN0cmluZyBjb25zdCYgc3RyICkgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICBzdGQ6OnN0cmluZyBub3JtYWxpc2VTdHJpbmcoIHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIgKSBjb25zdDsKKyAgICAgICAgc3RkOjpzdHJpbmcgYWRqdXN0Q2FzZSggc3RkOjpzdHJpbmcgY29uc3QmIHN0ciApIGNvbnN0OwogICAgICAgICBDYXNlU2Vuc2l0aXZlOjpDaG9pY2UgbV9jYXNlU2Vuc2l0aXZpdHk7CiAgICAgICAgIFdpbGRjYXJkUG9zaXRpb24gbV93aWxkY2FyZCA9IE5vV2lsZGNhcmQ7CiAgICAgICAgIHN0ZDo6c3RyaW5nIG1fcGF0dGVybjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfeG1sd3JpdGVyLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfeG1sd3JpdGVyLmNwcAppbmRleCAzMGYzYjBmLi41MzU0ZWZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3htbHdyaXRlci5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF94bWx3cml0ZXIuY3BwCkBAIC0xMCw3ICsxMCw4IEBACiAjaW5jbHVkZSAiY2F0Y2hfZW5mb3JjZS5oIgogCiAjaW5jbHVkZSA8aW9tYW5pcD4KLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKwordXNpbmcgdWNoYXIgPSB1bnNpZ25lZCBjaGFyOwogCiBuYW1lc3BhY2UgQ2F0Y2ggewogCkBAIC01MCwzMSArNTEsOCBAQAogICAgICAgICBvcy5mbGFncyhmKTsKICAgICB9CiAKLSAgICBib29sIHNob3VsZE5ld2xpbmUoWG1sRm9ybWF0dGluZyBmbXQpIHsKLSAgICAgICAgcmV0dXJuICEhKHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPFhtbEZvcm1hdHRpbmc+Ojp0eXBlPihmbXQgJiBYbWxGb3JtYXR0aW5nOjpOZXdsaW5lKSk7Ci0gICAgfQotCi0gICAgYm9vbCBzaG91bGRJbmRlbnQoWG1sRm9ybWF0dGluZyBmbXQpIHsKLSAgICAgICAgcmV0dXJuICEhKHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPFhtbEZvcm1hdHRpbmc+Ojp0eXBlPihmbXQgJiBYbWxGb3JtYXR0aW5nOjpJbmRlbnQpKTsKLSAgICB9Ci0KIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi0gICAgWG1sRm9ybWF0dGluZyBvcGVyYXRvciB8IChYbWxGb3JtYXR0aW5nIGxocywgWG1sRm9ybWF0dGluZyByaHMpIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFhtbEZvcm1hdHRpbmc+KAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGU8WG1sRm9ybWF0dGluZz46OnR5cGU+KGxocykgfAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGU8WG1sRm9ybWF0dGluZz46OnR5cGU+KHJocykKLSAgICAgICAgKTsKLSAgICB9Ci0KLSAgICBYbWxGb3JtYXR0aW5nIG9wZXJhdG9yICYgKFhtbEZvcm1hdHRpbmcgbGhzLCBYbWxGb3JtYXR0aW5nIHJocykgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8WG1sRm9ybWF0dGluZz4oCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxYbWxGb3JtYXR0aW5nPjo6dHlwZT4obGhzKSAmCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxYbWxGb3JtYXR0aW5nPjo6dHlwZT4ocmhzKQotICAgICAgICApOwotICAgIH0KLQotCiAgICAgWG1sRW5jb2RlOjpYbWxFbmNvZGUoIHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIsIEZvcldoYXQgZm9yV2hhdCApCiAgICAgOiAgIG1fc3RyKCBzdHIgKSwKICAgICAgICAgbV9mb3JXaGF0KCBmb3JXaGF0ICkKQEAgLTg1LDcgKzYzLDcgQEAKICAgICAgICAgLy8gKHNlZTogaHR0cDovL3d3dy53My5vcmcvVFIveG1sLyNzeW50YXgpCiAKICAgICAgICAgZm9yKCBzdGQ6OnNpemVfdCBpZHggPSAwOyBpZHggPCBtX3N0ci5zaXplKCk7ICsrIGlkeCApIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IG1fc3RyW2lkeF07CisgICAgICAgICAgICB1Y2hhciBjID0gbV9zdHJbaWR4XTsKICAgICAgICAgICAgIHN3aXRjaCAoYykgewogICAgICAgICAgICAgY2FzZSAnPCc6ICAgb3MgPDwgIiZsdDsiOyBicmVhazsKICAgICAgICAgICAgIGNhc2UgJyYnOiAgIG9zIDw8ICImYW1wOyI7IGJyZWFrOwpAQCAtMTQ1LDcgKzEyMyw3IEBACiAgICAgICAgICAgICAgICAgYm9vbCB2YWxpZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsdWUgPSBoZWFkZXJWYWx1ZShjKTsKICAgICAgICAgICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IG4gPSAxOyBuIDwgZW5jQnl0ZXM7ICsrbikgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG5jID0gbV9zdHJbaWR4ICsgbl07CisgICAgICAgICAgICAgICAgICAgIHVjaGFyIG5jID0gbV9zdHJbaWR4ICsgbl07CiAgICAgICAgICAgICAgICAgICAgIHZhbGlkICY9ICgobmMgJiAweEMwKSA9PSAweDgwKTsKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAodmFsdWUgPDwgNikgfCAobmMgJiAweDNGKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xNzksMTcgKzE1NywxMyBAQAogICAgICAgICByZXR1cm4gb3M7CiAgICAgfQogCi0gICAgWG1sV3JpdGVyOjpTY29wZWRFbGVtZW50OjpTY29wZWRFbGVtZW50KCBYbWxXcml0ZXIqIHdyaXRlciwgWG1sRm9ybWF0dGluZyBmbXQgKQotICAgIDogICBtX3dyaXRlciggd3JpdGVyICksCi0gICAgICAgIG1fZm10KGZtdCkKKyAgICBYbWxXcml0ZXI6OlNjb3BlZEVsZW1lbnQ6OlNjb3BlZEVsZW1lbnQoIFhtbFdyaXRlciogd3JpdGVyICkKKyAgICA6ICAgbV93cml0ZXIoIHdyaXRlciApCiAgICAge30KIAogICAgIFhtbFdyaXRlcjo6U2NvcGVkRWxlbWVudDo6U2NvcGVkRWxlbWVudCggU2NvcGVkRWxlbWVudCYmIG90aGVyICkgbm9leGNlcHQKLSAgICA6ICAgbV93cml0ZXIoIG90aGVyLm1fd3JpdGVyICksCi0gICAgICAgIG1fZm10KG90aGVyLm1fZm10KQotICAgIHsKKyAgICA6ICAgbV93cml0ZXIoIG90aGVyLm1fd3JpdGVyICl7CiAgICAgICAgIG90aGVyLm1fd3JpdGVyID0gbnVsbHB0cjsKLSAgICAgICAgb3RoZXIubV9mbXQgPSBYbWxGb3JtYXR0aW5nOjpOb25lOwogICAgIH0KICAgICBYbWxXcml0ZXI6OlNjb3BlZEVsZW1lbnQmIFhtbFdyaXRlcjo6U2NvcGVkRWxlbWVudDo6b3BlcmF0b3I9KCBTY29wZWRFbGVtZW50JiYgb3RoZXIgKSBub2V4Y2VwdCB7CiAgICAgICAgIGlmICggbV93cml0ZXIgKSB7CkBAIC0xOTcsMjAgKzE3MSwxNyBAQAogICAgICAgICB9CiAgICAgICAgIG1fd3JpdGVyID0gb3RoZXIubV93cml0ZXI7CiAgICAgICAgIG90aGVyLm1fd3JpdGVyID0gbnVsbHB0cjsKLSAgICAgICAgbV9mbXQgPSBvdGhlci5tX2ZtdDsKLSAgICAgICAgb3RoZXIubV9mbXQgPSBYbWxGb3JtYXR0aW5nOjpOb25lOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCiAKICAgICBYbWxXcml0ZXI6OlNjb3BlZEVsZW1lbnQ6On5TY29wZWRFbGVtZW50KCkgewotICAgICAgICBpZiAobV93cml0ZXIpIHsKLSAgICAgICAgICAgIG1fd3JpdGVyLT5lbmRFbGVtZW50KG1fZm10KTsKLSAgICAgICAgfQorICAgICAgICBpZiggbV93cml0ZXIgKQorICAgICAgICAgICAgbV93cml0ZXItPmVuZEVsZW1lbnQoKTsKICAgICB9CiAKLSAgICBYbWxXcml0ZXI6OlNjb3BlZEVsZW1lbnQmIFhtbFdyaXRlcjo6U2NvcGVkRWxlbWVudDo6d3JpdGVUZXh0KCBzdGQ6OnN0cmluZyBjb25zdCYgdGV4dCwgWG1sRm9ybWF0dGluZyBmbXQgKSB7Ci0gICAgICAgIG1fd3JpdGVyLT53cml0ZVRleHQoIHRleHQsIGZtdCApOworICAgIFhtbFdyaXRlcjo6U2NvcGVkRWxlbWVudCYgWG1sV3JpdGVyOjpTY29wZWRFbGVtZW50Ojp3cml0ZVRleHQoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0ZXh0LCBib29sIGluZGVudCApIHsKKyAgICAgICAgbV93cml0ZXItPndyaXRlVGV4dCggdGV4dCwgaW5kZW50ICk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKQEAgLTIyMCw0NyArMTkxLDM3IEBACiAgICAgfQogCiAgICAgWG1sV3JpdGVyOjp+WG1sV3JpdGVyKCkgewotICAgICAgICB3aGlsZSAoIW1fdGFncy5lbXB0eSgpKSB7CisgICAgICAgIHdoaWxlKCAhbV90YWdzLmVtcHR5KCkgKQogICAgICAgICAgICAgZW5kRWxlbWVudCgpOwotICAgICAgICB9Ci0gICAgICAgIG5ld2xpbmVJZk5lY2Vzc2FyeSgpOwogICAgIH0KIAotICAgIFhtbFdyaXRlciYgWG1sV3JpdGVyOjpzdGFydEVsZW1lbnQoIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLCBYbWxGb3JtYXR0aW5nIGZtdCApIHsKKyAgICBYbWxXcml0ZXImIFhtbFdyaXRlcjo6c3RhcnRFbGVtZW50KCBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSApIHsKICAgICAgICAgZW5zdXJlVGFnQ2xvc2VkKCk7CiAgICAgICAgIG5ld2xpbmVJZk5lY2Vzc2FyeSgpOwotICAgICAgICBpZiAoc2hvdWxkSW5kZW50KGZtdCkpIHsKLSAgICAgICAgICAgIG1fb3MgPDwgbV9pbmRlbnQ7Ci0gICAgICAgICAgICBtX2luZGVudCArPSAiICAiOwotICAgICAgICB9Ci0gICAgICAgIG1fb3MgPDwgJzwnIDw8IG5hbWU7CisgICAgICAgIG1fb3MgPDwgbV9pbmRlbnQgPDwgJzwnIDw8IG5hbWU7CiAgICAgICAgIG1fdGFncy5wdXNoX2JhY2soIG5hbWUgKTsKKyAgICAgICAgbV9pbmRlbnQgKz0gIiAgIjsKICAgICAgICAgbV90YWdJc09wZW4gPSB0cnVlOwotICAgICAgICBhcHBseUZvcm1hdHRpbmcoZm10KTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIFhtbFdyaXRlcjo6U2NvcGVkRWxlbWVudCBYbWxXcml0ZXI6OnNjb3BlZEVsZW1lbnQoIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLCBYbWxGb3JtYXR0aW5nIGZtdCApIHsKLSAgICAgICAgU2NvcGVkRWxlbWVudCBzY29wZWQoIHRoaXMsIGZtdCApOwotICAgICAgICBzdGFydEVsZW1lbnQoIG5hbWUsIGZtdCApOworICAgIFhtbFdyaXRlcjo6U2NvcGVkRWxlbWVudCBYbWxXcml0ZXI6OnNjb3BlZEVsZW1lbnQoIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lICkgeworICAgICAgICBTY29wZWRFbGVtZW50IHNjb3BlZCggdGhpcyApOworICAgICAgICBzdGFydEVsZW1lbnQoIG5hbWUgKTsKICAgICAgICAgcmV0dXJuIHNjb3BlZDsKICAgICB9CiAKLSAgICBYbWxXcml0ZXImIFhtbFdyaXRlcjo6ZW5kRWxlbWVudChYbWxGb3JtYXR0aW5nIGZtdCkgewotICAgICAgICBtX2luZGVudCA9IG1faW5kZW50LnN1YnN0cigwLCBtX2luZGVudC5zaXplKCkgLSAyKTsKLQorICAgIFhtbFdyaXRlciYgWG1sV3JpdGVyOjplbmRFbGVtZW50KCkgeworICAgICAgICBuZXdsaW5lSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgbV9pbmRlbnQgPSBtX2luZGVudC5zdWJzdHIoIDAsIG1faW5kZW50LnNpemUoKS0yICk7CiAgICAgICAgIGlmKCBtX3RhZ0lzT3BlbiApIHsKICAgICAgICAgICAgIG1fb3MgPDwgIi8+IjsKICAgICAgICAgICAgIG1fdGFnSXNPcGVuID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBuZXdsaW5lSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRJbmRlbnQoZm10KSkgewotICAgICAgICAgICAgICAgIG1fb3MgPDwgbV9pbmRlbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX29zIDw8ICI8LyIgPDwgbV90YWdzLmJhY2soKSA8PCAiPiI7CiAgICAgICAgIH0KLSAgICAgICAgbV9vcyA8PCBzdGQ6OmZsdXNoOwotICAgICAgICBhcHBseUZvcm1hdHRpbmcoZm10KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX29zIDw8IG1faW5kZW50IDw8ICI8LyIgPDwgbV90YWdzLmJhY2soKSA8PCAiPiI7CisgICAgICAgIH0KKyAgICAgICAgbV9vcyA8PCBzdGQ6OmVuZGw7CiAgICAgICAgIG1fdGFncy5wb3BfYmFjaygpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtMjc2LDI2ICsyMzcsMjIgQEAKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIFhtbFdyaXRlciYgWG1sV3JpdGVyOjp3cml0ZVRleHQoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0ZXh0LCBYbWxGb3JtYXR0aW5nIGZtdCkgeworICAgIFhtbFdyaXRlciYgWG1sV3JpdGVyOjp3cml0ZVRleHQoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0ZXh0LCBib29sIGluZGVudCApIHsKICAgICAgICAgaWYoICF0ZXh0LmVtcHR5KCkgKXsKICAgICAgICAgICAgIGJvb2wgdGFnV2FzT3BlbiA9IG1fdGFnSXNPcGVuOwogICAgICAgICAgICAgZW5zdXJlVGFnQ2xvc2VkKCk7Ci0gICAgICAgICAgICBpZiAodGFnV2FzT3BlbiAmJiBzaG91bGRJbmRlbnQoZm10KSkgeworICAgICAgICAgICAgaWYoIHRhZ1dhc09wZW4gJiYgaW5kZW50ICkKICAgICAgICAgICAgICAgICBtX29zIDw8IG1faW5kZW50OwotICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9vcyA8PCBYbWxFbmNvZGUoIHRleHQgKTsKLSAgICAgICAgICAgIGFwcGx5Rm9ybWF0dGluZyhmbXQpOworICAgICAgICAgICAgbV9uZWVkc05ld2xpbmUgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICBYbWxXcml0ZXImIFhtbFdyaXRlcjo6d3JpdGVDb21tZW50KCBzdGQ6OnN0cmluZyBjb25zdCYgdGV4dCwgWG1sRm9ybWF0dGluZyBmbXQpIHsKKyAgICBYbWxXcml0ZXImIFhtbFdyaXRlcjo6d3JpdGVDb21tZW50KCBzdGQ6OnN0cmluZyBjb25zdCYgdGV4dCApIHsKICAgICAgICAgZW5zdXJlVGFnQ2xvc2VkKCk7Ci0gICAgICAgIGlmIChzaG91bGRJbmRlbnQoZm10KSkgewotICAgICAgICAgICAgbV9vcyA8PCBtX2luZGVudDsKLSAgICAgICAgfQotICAgICAgICBtX29zIDw8ICI8IS0tIiA8PCB0ZXh0IDw8ICItLT4iOwotICAgICAgICBhcHBseUZvcm1hdHRpbmcoZm10KTsKKyAgICAgICAgbV9vcyA8PCBtX2luZGVudCA8PCAiPCEtLSIgPDwgdGV4dCA8PCAiLS0+IjsKKyAgICAgICAgbV9uZWVkc05ld2xpbmUgPSB0cnVlOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCkBAIC0zMTEsMTYgKzI2OCwxMSBAQAogCiAgICAgdm9pZCBYbWxXcml0ZXI6OmVuc3VyZVRhZ0Nsb3NlZCgpIHsKICAgICAgICAgaWYoIG1fdGFnSXNPcGVuICkgewotICAgICAgICAgICAgbV9vcyA8PCAnPicgPDwgc3RkOjpmbHVzaDsKLSAgICAgICAgICAgIG5ld2xpbmVJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgbV9vcyA8PCAiPiIgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgbV90YWdJc09wZW4gPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgWG1sV3JpdGVyOjphcHBseUZvcm1hdHRpbmcoWG1sRm9ybWF0dGluZyBmbXQpIHsKLSAgICAgICAgbV9uZWVkc05ld2xpbmUgPSBzaG91bGROZXdsaW5lKGZtdCk7Ci0gICAgfQotCiAgICAgdm9pZCBYbWxXcml0ZXI6OndyaXRlRGVjbGFyYXRpb24oKSB7CiAgICAgICAgIG1fb3MgPDwgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PlxuIjsKICAgICB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3htbHdyaXRlci5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF94bWx3cml0ZXIuaAppbmRleCBmNTUxYjIzLi5jNGIxYzAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3htbHdyaXRlci5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfeG1sd3JpdGVyLmgKQEAgLTE0LDE0ICsxNCw2IEBACiAjaW5jbHVkZSA8dmVjdG9yPgogCiBuYW1lc3BhY2UgQ2F0Y2ggewotICAgIGVudW0gY2xhc3MgWG1sRm9ybWF0dGluZyB7Ci0gICAgICAgIE5vbmUgPSAweDAwLAotICAgICAgICBJbmRlbnQgPSAweDAxLAotICAgICAgICBOZXdsaW5lID0gMHgwMiwKLSAgICB9OwotCi0gICAgWG1sRm9ybWF0dGluZyBvcGVyYXRvciB8IChYbWxGb3JtYXR0aW5nIGxocywgWG1sRm9ybWF0dGluZyByaHMpOwotICAgIFhtbEZvcm1hdHRpbmcgb3BlcmF0b3IgJiAoWG1sRm9ybWF0dGluZyBsaHMsIFhtbEZvcm1hdHRpbmcgcmhzKTsKIAogICAgIGNsYXNzIFhtbEVuY29kZSB7CiAgICAgcHVibGljOgpAQCAtNDMsMTQgKzM1LDE0IEBACiAKICAgICAgICAgY2xhc3MgU2NvcGVkRWxlbWVudCB7CiAgICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIFNjb3BlZEVsZW1lbnQoIFhtbFdyaXRlciogd3JpdGVyLCBYbWxGb3JtYXR0aW5nIGZtdCApOworICAgICAgICAgICAgU2NvcGVkRWxlbWVudCggWG1sV3JpdGVyKiB3cml0ZXIgKTsKIAogICAgICAgICAgICAgU2NvcGVkRWxlbWVudCggU2NvcGVkRWxlbWVudCYmIG90aGVyICkgbm9leGNlcHQ7CiAgICAgICAgICAgICBTY29wZWRFbGVtZW50JiBvcGVyYXRvcj0oIFNjb3BlZEVsZW1lbnQmJiBvdGhlciApIG5vZXhjZXB0OwogCiAgICAgICAgICAgICB+U2NvcGVkRWxlbWVudCgpOwogCi0gICAgICAgICAgICBTY29wZWRFbGVtZW50JiB3cml0ZVRleHQoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0ZXh0LCBYbWxGb3JtYXR0aW5nIGZtdCA9IFhtbEZvcm1hdHRpbmc6Ok5ld2xpbmUgfCBYbWxGb3JtYXR0aW5nOjpJbmRlbnQgKTsKKyAgICAgICAgICAgIFNjb3BlZEVsZW1lbnQmIHdyaXRlVGV4dCggc3RkOjpzdHJpbmcgY29uc3QmIHRleHQsIGJvb2wgaW5kZW50ID0gdHJ1ZSApOwogCiAgICAgICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgICAgICAgICAgU2NvcGVkRWxlbWVudCYgd3JpdGVBdHRyaWJ1dGUoIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLCBUIGNvbnN0JiBhdHRyaWJ1dGUgKSB7CkBAIC02MCw3ICs1Miw2IEBACiAKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIG11dGFibGUgWG1sV3JpdGVyKiBtX3dyaXRlciA9IG51bGxwdHI7Ci0gICAgICAgICAgICBYbWxGb3JtYXR0aW5nIG1fZm10OwogICAgICAgICB9OwogCiAgICAgICAgIFhtbFdyaXRlciggc3RkOjpvc3RyZWFtJiBvcyA9IENhdGNoOjpjb3V0KCkgKTsKQEAgLTY5LDExICs2MCwxMSBAQAogICAgICAgICBYbWxXcml0ZXIoIFhtbFdyaXRlciBjb25zdCYgKSA9IGRlbGV0ZTsKICAgICAgICAgWG1sV3JpdGVyJiBvcGVyYXRvcj0oIFhtbFdyaXRlciBjb25zdCYgKSA9IGRlbGV0ZTsKIAotICAgICAgICBYbWxXcml0ZXImIHN0YXJ0RWxlbWVudCggc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUsIFhtbEZvcm1hdHRpbmcgZm10ID0gWG1sRm9ybWF0dGluZzo6TmV3bGluZSB8IFhtbEZvcm1hdHRpbmc6OkluZGVudCk7CisgICAgICAgIFhtbFdyaXRlciYgc3RhcnRFbGVtZW50KCBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSApOwogCi0gICAgICAgIFNjb3BlZEVsZW1lbnQgc2NvcGVkRWxlbWVudCggc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUsIFhtbEZvcm1hdHRpbmcgZm10ID0gWG1sRm9ybWF0dGluZzo6TmV3bGluZSB8IFhtbEZvcm1hdHRpbmc6OkluZGVudCk7CisgICAgICAgIFNjb3BlZEVsZW1lbnQgc2NvcGVkRWxlbWVudCggc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgKTsKIAotICAgICAgICBYbWxXcml0ZXImIGVuZEVsZW1lbnQoWG1sRm9ybWF0dGluZyBmbXQgPSBYbWxGb3JtYXR0aW5nOjpOZXdsaW5lIHwgWG1sRm9ybWF0dGluZzo6SW5kZW50KTsKKyAgICAgICAgWG1sV3JpdGVyJiBlbmRFbGVtZW50KCk7CiAKICAgICAgICAgWG1sV3JpdGVyJiB3cml0ZUF0dHJpYnV0ZSggc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUsIHN0ZDo6c3RyaW5nIGNvbnN0JiBhdHRyaWJ1dGUgKTsKIApAQCAtODYsOSArNzcsOSBAQAogICAgICAgICAgICAgcmV0dXJuIHdyaXRlQXR0cmlidXRlKCBuYW1lLCByc3Muc3RyKCkgKTsKICAgICAgICAgfQogCi0gICAgICAgIFhtbFdyaXRlciYgd3JpdGVUZXh0KCBzdGQ6OnN0cmluZyBjb25zdCYgdGV4dCwgWG1sRm9ybWF0dGluZyBmbXQgPSBYbWxGb3JtYXR0aW5nOjpOZXdsaW5lIHwgWG1sRm9ybWF0dGluZzo6SW5kZW50KTsKKyAgICAgICAgWG1sV3JpdGVyJiB3cml0ZVRleHQoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0ZXh0LCBib29sIGluZGVudCA9IHRydWUgKTsKIAotICAgICAgICBYbWxXcml0ZXImIHdyaXRlQ29tbWVudChzdGQ6OnN0cmluZyBjb25zdCYgdGV4dCwgWG1sRm9ybWF0dGluZyBmbXQgPSBYbWxGb3JtYXR0aW5nOjpOZXdsaW5lIHwgWG1sRm9ybWF0dGluZzo6SW5kZW50KTsKKyAgICAgICAgWG1sV3JpdGVyJiB3cml0ZUNvbW1lbnQoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0ZXh0ICk7CiAKICAgICAgICAgdm9pZCB3cml0ZVN0eWxlc2hlZXRSZWYoIHN0ZDo6c3RyaW5nIGNvbnN0JiB1cmwgKTsKIApAQCAtOTgsOCArODksNiBAQAogCiAgICAgcHJpdmF0ZToKIAotICAgICAgICB2b2lkIGFwcGx5Rm9ybWF0dGluZyhYbWxGb3JtYXR0aW5nIGZtdCk7Ci0KICAgICAgICAgdm9pZCB3cml0ZURlY2xhcmF0aW9uKCk7CiAKICAgICAgICAgdm9pZCBuZXdsaW5lSWZOZWNlc3NhcnkoKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2Jhc2VzLmhwcCBiL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2Jhc2VzLmhwcAppbmRleCA2NmE4OTFmLi5hOWIwNjQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9iYXNlcy5ocHAKKysrIGIvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfYmFzZXMuaHBwCkBAIC01MSw4ICs1MSw2IEBACiAKICAgICAgICAgdm9pZCBub01hdGNoaW5nVGVzdENhc2VzKHN0ZDo6c3RyaW5nIGNvbnN0Jikgb3ZlcnJpZGUge30KIAotICAgICAgICB2b2lkIHJlcG9ydEludmFsaWRBcmd1bWVudHMoc3RkOjpzdHJpbmcgY29uc3QmKSBvdmVycmlkZSB7fQotICAgICAgICAKICAgICAgICAgdm9pZCB0ZXN0UnVuU3RhcnRpbmcoVGVzdFJ1bkluZm8gY29uc3QmIF90ZXN0UnVuSW5mbykgb3ZlcnJpZGUgewogICAgICAgICAgICAgY3VycmVudFRlc3RSdW5JbmZvID0gX3Rlc3RSdW5JbmZvOwogICAgICAgICB9CkBAIC0yNzksNCArMjc3LDQgQEAKIAogfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCiAKLSNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfUkVQT1JURVJfQkFTRVNfSFBQX0lOQ0xVREVEClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9SRVBPUlRFUl9CQVNFU19IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2NvbXBhY3QuY3BwIGIvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfY29tcGFjdC5jcHAKaW5kZXggMDE3ZjUyMS4uNjVmNzAyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfY29tcGFjdC5jcHAKKysrIGIvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfY29tcGFjdC5jcHAKQEAgLTgsNyArOCw3IEBACiAjaW5jbHVkZSAiY2F0Y2hfcmVwb3J0ZXJfY29tcGFjdC5oIgogCiAjaW5jbHVkZSAiLi4vaW50ZXJuYWwvY2F0Y2hfcmVwb3J0ZXJfcmVnaXN0cmFycy5ocHAiCi0jaW5jbHVkZSAiLi4vaW50ZXJuYWwvY2F0Y2hfY29uc29sZV9jb2xvdXIuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC9jYXRjaF9jb25zb2xlX2NvbG91ci5oIgogCiBuYW1lc3BhY2UgewogCkBAIC0yMDksMjUgKzIwOSwyNCBAQAogICAgICAgICBpZiAoaXRNZXNzYWdlID09IG1lc3NhZ2VzLmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGNvbnN0IGF1dG8gaXRFbmQgPSBtZXNzYWdlcy5jZW5kKCk7Ci0gICAgICAgIGNvbnN0IGF1dG8gTiA9IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihzdGQ6OmRpc3RhbmNlKGl0TWVzc2FnZSwgaXRFbmQpKTsKKyAgICAgICAgLy8gdXNpbmcgbWVzc2FnZXMuZW5kKCkgZGlyZWN0bHkgeWllbGRzIChvciBhdXRvKSBjb21waWxhdGlvbiBlcnJvcjoKKyAgICAgICAgc3RkOjp2ZWN0b3I8TWVzc2FnZUluZm8+Ojpjb25zdF9pdGVyYXRvciBpdEVuZCA9IG1lc3NhZ2VzLmVuZCgpOworICAgICAgICBjb25zdCBzdGQ6OnNpemVfdCBOID0gc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KHN0ZDo6ZGlzdGFuY2UoaXRNZXNzYWdlLCBpdEVuZCkpOwogCiAgICAgICAgIHsKICAgICAgICAgICAgIENvbG91ciBjb2xvdXJHdWFyZChjb2xvdXIpOwogICAgICAgICAgICAgc3RyZWFtIDw8ICIgd2l0aCAiIDw8IHBsdXJhbGlzZShOLCAibWVzc2FnZSIpIDw8ICc6JzsKICAgICAgICAgfQogCi0gICAgICAgIHdoaWxlIChpdE1lc3NhZ2UgIT0gaXRFbmQpIHsKKyAgICAgICAgZm9yICg7IGl0TWVzc2FnZSAhPSBpdEVuZDsgKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGlzIGFzc2VydGlvbiBpcyBhIHdhcm5pbmcgaWdub3JlIGFueSBJTkZPIG1lc3NhZ2VzCiAgICAgICAgICAgICBpZiAocHJpbnRJbmZvTWVzc2FnZXMgfHwgaXRNZXNzYWdlLT50eXBlICE9IFJlc3VsdFdhczo6SW5mbykgewotICAgICAgICAgICAgICAgIHByaW50TWVzc2FnZSgpOwotICAgICAgICAgICAgICAgIGlmIChpdE1lc3NhZ2UgIT0gaXRFbmQpIHsKKyAgICAgICAgICAgICAgICBzdHJlYW0gPDwgIiAnIiA8PCBpdE1lc3NhZ2UtPm1lc3NhZ2UgPDwgJ1wnJzsKKyAgICAgICAgICAgICAgICBpZiAoKytpdE1lc3NhZ2UgIT0gaXRFbmQpIHsKICAgICAgICAgICAgICAgICAgICAgQ29sb3VyIGNvbG91ckd1YXJkKGRpbUNvbG91cigpKTsKICAgICAgICAgICAgICAgICAgICAgc3RyZWFtIDw8ICIgYW5kIjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICArK2l0TWVzc2FnZTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfY29uc29sZS5jcHAgYi9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9jb25zb2xlLmNwcAppbmRleCA3MDZmOTNmLi41M2I5NzdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9jb25zb2xlLmNwcAorKysgYi9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9jb25zb2xlLmNwcApAQCAtOSw3ICs5LDcgQEAKICNpbmNsdWRlICJjYXRjaF9yZXBvcnRlcl9jb25zb2xlLmgiCiAKICNpbmNsdWRlICIuLi9pbnRlcm5hbC9jYXRjaF9yZXBvcnRlcl9yZWdpc3RyYXJzLmhwcCIKLSNpbmNsdWRlICIuLi9pbnRlcm5hbC9jYXRjaF9jb25zb2xlX2NvbG91ci5oIgorI2luY2x1ZGUgImludGVybmFsL2NhdGNoX2NvbnNvbGVfY29sb3VyLmgiCiAjaW5jbHVkZSAiLi4vaW50ZXJuYWwvY2F0Y2hfdmVyc2lvbi5oIgogI2luY2x1ZGUgIi4uL2ludGVybmFsL2NhdGNoX3RleHQuaCIKICNpbmNsdWRlICIuLi9pbnRlcm5hbC9jYXRjaF9zdHJpbmdyZWYuaCIKQEAgLTIwLDE2ICsyMCwxMCBAQAogI2lmIGRlZmluZWQoX01TQ19WRVIpCiAjcHJhZ21hIHdhcm5pbmcocHVzaCkKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQwNjEpIC8vIE5vdCBhbGwgbGFiZWxzIGFyZSBFWFBMSUNJVExZIGhhbmRsZWQgaW4gc3dpdGNoCi0gLy8gTm90ZSB0aGF0IDQwNjIgKG5vdCBhbGwgbGFiZWxzIGFyZSBoYW5kbGVkIGFuZCBkZWZhdWx0IGlzIG1pc3NpbmcpIGlzIGVuYWJsZWQKKyAvLyBOb3RlIHRoYXQgNDA2MiAobm90IGFsbCBsYWJlbHMgYXJlIGhhbmRsZWQKKyAvLyBhbmQgZGVmYXVsdCBpcyBtaXNzaW5nKSBpcyBlbmFibGVkCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotIyAgcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotLy8gRm9yIHNpbXBsaWNpdHksIGJlbmNobWFya2luZy1vbmx5IGhlbHBlcnMgYXJlIGFsd2F5cyBlbmFibGVkCi0jICBwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKLSNlbmRpZgotCi0KIAogbmFtZXNwYWNlIENhdGNoIHsKIApAQCAtMjEwLDExICsyMDQsMTEgQEAKICAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qgc19uYW5vc2Vjb25kc0luQVNlY29uZCA9IDEwMDAgKiBzX25hbm9zZWNvbmRzSW5BTWlsbGlzZWNvbmQ7CiAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IHNfbmFub3NlY29uZHNJbkFNaW51dGUgPSA2MCAqIHNfbmFub3NlY29uZHNJbkFTZWNvbmQ7CiAKLSAgICBkb3VibGUgbV9pbk5hbm9zZWNvbmRzOworICAgIHVpbnQ2NF90IG1faW5OYW5vc2Vjb25kczsKICAgICBVbml0IG1fdW5pdHM7CiAKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBEdXJhdGlvbihkb3VibGUgaW5OYW5vc2Vjb25kcywgVW5pdCB1bml0cyA9IFVuaXQ6OkF1dG8pCisgICAgZXhwbGljaXQgRHVyYXRpb24odWludDY0X3QgaW5OYW5vc2Vjb25kcywgVW5pdCB1bml0cyA9IFVuaXQ6OkF1dG8pCiAgICAgICAgIDogbV9pbk5hbm9zZWNvbmRzKGluTmFub3NlY29uZHMpLAogICAgICAgICBtX3VuaXRzKHVuaXRzKSB7CiAgICAgICAgIGlmIChtX3VuaXRzID09IFVuaXQ6OkF1dG8pIHsKQEAgLTI0Myw3ICsyMzcsNyBAQAogICAgICAgICBjYXNlIFVuaXQ6Ok1pbnV0ZXM6CiAgICAgICAgICAgICByZXR1cm4gbV9pbk5hbm9zZWNvbmRzIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihzX25hbm9zZWNvbmRzSW5BTWludXRlKTsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBtX2luTmFub3NlY29uZHM7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2luTmFub3NlY29uZHMpOwogICAgICAgICB9CiAgICAgfQogICAgIGF1dG8gdW5pdHNBc1N0cmluZygpIGNvbnN0IC0+IHN0ZDo6c3RyaW5nIHsKQEAgLTI2NCw3ICsyNTgsNyBAQAogCiAgICAgfQogICAgIGZyaWVuZCBhdXRvIG9wZXJhdG9yIDw8IChzdGQ6Om9zdHJlYW0mIG9zLCBEdXJhdGlvbiBjb25zdCYgZHVyYXRpb24pIC0+IHN0ZDo6b3N0cmVhbSYgewotICAgICAgICByZXR1cm4gb3MgPDwgZHVyYXRpb24udmFsdWUoKSA8PCAnICcgPDwgZHVyYXRpb24udW5pdHNBc1N0cmluZygpOworICAgICAgICByZXR1cm4gb3MgPDwgZHVyYXRpb24udmFsdWUoKSA8PCAiICIgPDwgZHVyYXRpb24udW5pdHNBc1N0cmluZygpOwogICAgIH0KIH07CiB9IC8vIGVuZCBhbm9uIG5hbWVzcGFjZQpAQCAtMjg5LDE2ICsyODMsMTAgQEAKICAgICAgICAgaWYgKCFtX2lzT3BlbikgewogICAgICAgICAgICAgbV9pc09wZW4gPSB0cnVlOwogICAgICAgICAgICAgKnRoaXMgPDwgUm93QnJlYWsoKTsKLQotCQkJQ29sdW1ucyBoZWFkZXJDb2xzOwotCQkJU3BhY2VyIHNwYWNlcigyKTsKLQkJCWZvciAoYXV0byBjb25zdCYgaW5mbyA6IG1fY29sdW1uSW5mb3MpIHsKLQkJCQloZWFkZXJDb2xzICs9IENvbHVtbihpbmZvLm5hbWUpLndpZHRoKHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihpbmZvLndpZHRoIC0gMikpOwotCQkJCWhlYWRlckNvbHMgKz0gc3BhY2VyOwotCQkJfQotCQkJbV9vcyA8PCBoZWFkZXJDb2xzIDw8ICdcbic7Ci0KLSAgICAgICAgICAgIG1fb3MgPDwgQ2F0Y2g6OmdldExpbmVPZkNoYXJzPCctJz4oKSA8PCAnXG4nOworICAgICAgICAgICAgZm9yIChhdXRvIGNvbnN0JiBpbmZvIDogbV9jb2x1bW5JbmZvcykKKyAgICAgICAgICAgICAgICAqdGhpcyA8PCBpbmZvLm5hbWUgPDwgQ29sdW1uQnJlYWsoKTsKKyAgICAgICAgICAgICp0aGlzIDw8IFJvd0JyZWFrKCk7CisgICAgICAgICAgICBtX29zIDw8IENhdGNoOjpnZXRMaW5lT2ZDaGFyczwnLSc+KCkgPDwgIlxuIjsKICAgICAgICAgfQogICAgIH0KICAgICB2b2lkIGNsb3NlKCkgewpAQCAtMzE3LDI5ICszMDUsMzAgQEAKIAogICAgIGZyaWVuZCBUYWJsZVByaW50ZXImIG9wZXJhdG9yIDw8IChUYWJsZVByaW50ZXImIHRwLCBDb2x1bW5CcmVhaykgewogICAgICAgICBhdXRvIGNvbFN0ciA9IHRwLm1fb3NzLnN0cigpOwotICAgICAgICBjb25zdCBhdXRvIHN0clNpemUgPSBjb2xTdHIuc2l6ZSgpOworICAgICAgICAvLyBUaGlzIHRha2VzIGFjY291bnQgb2YgdXRmOCBlbmNvZGluZ3MKKyAgICAgICAgYXV0byBzdHJTaXplID0gQ2F0Y2g6OlN0cmluZ1JlZihjb2xTdHIpLm51bWJlck9mQ2hhcmFjdGVycygpOwogICAgICAgICB0cC5tX29zcy5zdHIoIiIpOwogICAgICAgICB0cC5vcGVuKCk7CiAgICAgICAgIGlmICh0cC5tX2N1cnJlbnRDb2x1bW4gPT0gc3RhdGljX2Nhc3Q8aW50Pih0cC5tX2NvbHVtbkluZm9zLnNpemUoKSAtIDEpKSB7CiAgICAgICAgICAgICB0cC5tX2N1cnJlbnRDb2x1bW4gPSAtMTsKLSAgICAgICAgICAgIHRwLm1fb3MgPDwgJ1xuJzsKKyAgICAgICAgICAgIHRwLm1fb3MgPDwgIlxuIjsKICAgICAgICAgfQogICAgICAgICB0cC5tX2N1cnJlbnRDb2x1bW4rKzsKIAogICAgICAgICBhdXRvIGNvbEluZm8gPSB0cC5tX2NvbHVtbkluZm9zW3RwLm1fY3VycmVudENvbHVtbl07Ci0gICAgICAgIGF1dG8gcGFkZGluZyA9IChzdHJTaXplICsgMSA8IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90Pihjb2xJbmZvLndpZHRoKSkKLSAgICAgICAgICAgID8gc3RkOjpzdHJpbmcoY29sSW5mby53aWR0aCAtIChzdHJTaXplICsgMSksICcgJykKKyAgICAgICAgYXV0byBwYWRkaW5nID0gKHN0clNpemUgKyAyIDwgc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KGNvbEluZm8ud2lkdGgpKQorICAgICAgICAgICAgPyBzdGQ6OnN0cmluZyhjb2xJbmZvLndpZHRoIC0gKHN0clNpemUgKyAyKSwgJyAnKQogICAgICAgICAgICAgOiBzdGQ6OnN0cmluZygpOwogICAgICAgICBpZiAoY29sSW5mby5qdXN0aWZpY2F0aW9uID09IENvbHVtbkluZm86OkxlZnQpCi0gICAgICAgICAgICB0cC5tX29zIDw8IGNvbFN0ciA8PCBwYWRkaW5nIDw8ICcgJzsKKyAgICAgICAgICAgIHRwLm1fb3MgPDwgY29sU3RyIDw8IHBhZGRpbmcgPDwgIiAiOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0cC5tX29zIDw8IHBhZGRpbmcgPDwgY29sU3RyIDw8ICcgJzsKKyAgICAgICAgICAgIHRwLm1fb3MgPDwgcGFkZGluZyA8PCBjb2xTdHIgPDwgIiAiOwogICAgICAgICByZXR1cm4gdHA7CiAgICAgfQogCiAgICAgZnJpZW5kIFRhYmxlUHJpbnRlciYgb3BlcmF0b3IgPDwgKFRhYmxlUHJpbnRlciYgdHAsIFJvd0JyZWFrKSB7CiAgICAgICAgIGlmICh0cC5tX2N1cnJlbnRDb2x1bW4gPiAwKSB7Ci0gICAgICAgICAgICB0cC5tX29zIDw8ICdcbic7CisgICAgICAgICAgICB0cC5tX29zIDw8ICJcbiI7CiAgICAgICAgICAgICB0cC5tX2N1cnJlbnRDb2x1bW4gPSAtMTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHA7CkBAIC0zNDksMjYgKzMzOCwxMiBAQAogQ29uc29sZVJlcG9ydGVyOjpDb25zb2xlUmVwb3J0ZXIoUmVwb3J0ZXJDb25maWcgY29uc3QmIGNvbmZpZykKICAgICA6IFN0cmVhbWluZ1JlcG9ydGVyQmFzZShjb25maWcpLAogICAgIG1fdGFibGVQcmludGVyKG5ldyBUYWJsZVByaW50ZXIoY29uZmlnLnN0cmVhbSgpLAotICAgICAgICBbJmNvbmZpZ10oKSAtPiBzdGQ6OnZlY3RvcjxDb2x1bW5JbmZvPiB7Ci0gICAgICAgIGlmIChjb25maWcuZnVsbENvbmZpZygpLT5iZW5jaG1hcmtOb0FuYWx5c2lzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybnsKLSAgICAgICAgICAgICAgICB7ICJiZW5jaG1hcmsgbmFtZSIsIENBVENIX0NPTkZJR19DT05TT0xFX1dJRFRIIC0gNDMsIENvbHVtbkluZm86OkxlZnQgfSwKLSAgICAgICAgICAgICAgICB7ICIgICAgIHNhbXBsZXMiLCAxNCwgQ29sdW1uSW5mbzo6UmlnaHQgfSwKLSAgICAgICAgICAgICAgICB7ICIgIGl0ZXJhdGlvbnMiLCAxNCwgQ29sdW1uSW5mbzo6UmlnaHQgfSwKLSAgICAgICAgICAgICAgICB7ICIgICAgICAgIG1lYW4iLCAxNCwgQ29sdW1uSW5mbzo6UmlnaHQgfQotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybnsKLSAgICAgICAgICAgICAgICB7ICJiZW5jaG1hcmsgbmFtZSIsIENBVENIX0NPTkZJR19DT05TT0xFX1dJRFRIIC0gMzIsIENvbHVtbkluZm86OkxlZnQgfSwKLSAgICAgICAgICAgICAgICB7ICJzYW1wbGVzICAgICAgbWVhbiAgICAgICBzdGQgZGV2IiwgMTQsIENvbHVtbkluZm86OlJpZ2h0IH0sCi0gICAgICAgICAgICAgICAgeyAiaXRlcmF0aW9ucyAgIGxvdyBtZWFuICAgbG93IHN0ZCBkZXYiLCAxNCwgQ29sdW1uSW5mbzo6UmlnaHQgfSwKLSAgICAgICAgICAgICAgICB7ICJlc3RpbWF0ZWQgICAgaGlnaCBtZWFuICBoaWdoIHN0ZCBkZXYiLCAxNCwgQ29sdW1uSW5mbzo6UmlnaHQgfQotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotICAgIH0oKSkpIHt9CisgICAgeworICAgICAgICB7ICJiZW5jaG1hcmsgbmFtZSIsIENBVENIX0NPTkZJR19DT05TT0xFX1dJRFRIIC0gMzIsIENvbHVtbkluZm86OkxlZnQgfSwKKyAgICAgICAgeyAiaXRlcnMiLCA4LCBDb2x1bW5JbmZvOjpSaWdodCB9LAorICAgICAgICB7ICJlbGFwc2VkIG5zIiwgMTQsIENvbHVtbkluZm86OlJpZ2h0IH0sCisgICAgICAgIHsgImF2ZXJhZ2UiLCAxNCwgQ29sdW1uSW5mbzo6UmlnaHQgfQorICAgIH0pKSB7fQogQ29uc29sZVJlcG9ydGVyOjp+Q29uc29sZVJlcG9ydGVyKCkgPSBkZWZhdWx0OwogCiBzdGQ6OnN0cmluZyBDb25zb2xlUmVwb3J0ZXI6OmdldERlc2NyaXB0aW9uKCkgewpAQCAtMzc5LDEwICszNTQsNiBAQAogICAgIHN0cmVhbSA8PCAiTm8gdGVzdCBjYXNlcyBtYXRjaGVkICciIDw8IHNwZWMgPDwgJ1wnJyA8PCBzdGQ6OmVuZGw7CiB9CiAKLXZvaWQgQ29uc29sZVJlcG9ydGVyOjpyZXBvcnRJbnZhbGlkQXJndW1lbnRzKHN0ZDo6c3RyaW5nIGNvbnN0JmFyZyl7Ci0gICAgc3RyZWFtIDw8ICJJbnZhbGlkIEZpbHRlcjogIiA8PCBhcmcgPDwgc3RkOjplbmRsOwotfQotCiB2b2lkIENvbnNvbGVSZXBvcnRlcjo6YXNzZXJ0aW9uU3RhcnRpbmcoQXNzZXJ0aW9uSW5mbyBjb25zdCYpIHt9CiAKIGJvb2wgQ29uc29sZVJlcG9ydGVyOjphc3NlcnRpb25FbmRlZChBc3NlcnRpb25TdGF0cyBjb25zdCYgX2Fzc2VydGlvblN0YXRzKSB7CkBAIC00MDMsNyArMzc0LDYgQEAKIH0KIAogdm9pZCBDb25zb2xlUmVwb3J0ZXI6OnNlY3Rpb25TdGFydGluZyhTZWN0aW9uSW5mbyBjb25zdCYgX3NlY3Rpb25JbmZvKSB7Ci0gICAgbV90YWJsZVByaW50ZXItPmNsb3NlKCk7CiAgICAgbV9oZWFkZXJQcmludGVkID0gZmFsc2U7CiAgICAgU3RyZWFtaW5nUmVwb3J0ZXJCYXNlOjpzZWN0aW9uU3RhcnRpbmcoX3NlY3Rpb25JbmZvKTsKIH0KQEAgLTQyNyw1MyArMzk3LDI5IEBACiAgICAgU3RyZWFtaW5nUmVwb3J0ZXJCYXNlOjpzZWN0aW9uRW5kZWQoX3NlY3Rpb25TdGF0cyk7CiB9CiAKLSNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HKQotdm9pZCBDb25zb2xlUmVwb3J0ZXI6OmJlbmNobWFya1ByZXBhcmluZyhzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSkgewotCWxhenlQcmludFdpdGhvdXRDbG9zaW5nQmVuY2htYXJrVGFibGUoKTsKLQotCWF1dG8gbmFtZUNvbCA9IENvbHVtbihuYW1lKS53aWR0aChzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4obV90YWJsZVByaW50ZXItPmNvbHVtbkluZm9zKClbMF0ud2lkdGggLSAyKSk7Ci0KLQlib29sIGZpcnN0TGluZSA9IHRydWU7Ci0JZm9yIChhdXRvIGxpbmUgOiBuYW1lQ29sKSB7Ci0JCWlmICghZmlyc3RMaW5lKQotCQkJKCptX3RhYmxlUHJpbnRlcikgPDwgQ29sdW1uQnJlYWsoKSA8PCBDb2x1bW5CcmVhaygpIDw8IENvbHVtbkJyZWFrKCk7Ci0JCWVsc2UKLQkJCWZpcnN0TGluZSA9IGZhbHNlOwotCi0JCSgqbV90YWJsZVByaW50ZXIpIDw8IGxpbmUgPDwgQ29sdW1uQnJlYWsoKTsKLQl9Ci19CiAKIHZvaWQgQ29uc29sZVJlcG9ydGVyOjpiZW5jaG1hcmtTdGFydGluZyhCZW5jaG1hcmtJbmZvIGNvbnN0JiBpbmZvKSB7Ci0gICAgKCptX3RhYmxlUHJpbnRlcikgPDwgaW5mby5zYW1wbGVzIDw8IENvbHVtbkJyZWFrKCkKLSAgICAgICAgPDwgaW5mby5pdGVyYXRpb25zIDw8IENvbHVtbkJyZWFrKCk7Ci0gICAgaWYgKCFtX2NvbmZpZy0+YmVuY2htYXJrTm9BbmFseXNpcygpKQotICAgICAgICAoKm1fdGFibGVQcmludGVyKSA8PCBEdXJhdGlvbihpbmZvLmVzdGltYXRlZER1cmF0aW9uKSA8PCBDb2x1bW5CcmVhaygpOwotfQotdm9pZCBDb25zb2xlUmVwb3J0ZXI6OmJlbmNobWFya0VuZGVkKEJlbmNobWFya1N0YXRzPD4gY29uc3QmIHN0YXRzKSB7Ci0gICAgaWYgKG1fY29uZmlnLT5iZW5jaG1hcmtOb0FuYWx5c2lzKCkpCi0gICAgewotICAgICAgICAoKm1fdGFibGVQcmludGVyKSA8PCBEdXJhdGlvbihzdGF0cy5tZWFuLnBvaW50LmNvdW50KCkpIDw8IENvbHVtbkJyZWFrKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgICgqbV90YWJsZVByaW50ZXIpIDw8IENvbHVtbkJyZWFrKCkKLSAgICAgICAgICAgIDw8IER1cmF0aW9uKHN0YXRzLm1lYW4ucG9pbnQuY291bnQoKSkgPDwgQ29sdW1uQnJlYWsoKQotICAgICAgICAgICAgPDwgRHVyYXRpb24oc3RhdHMubWVhbi5sb3dlcl9ib3VuZC5jb3VudCgpKSA8PCBDb2x1bW5CcmVhaygpCi0gICAgICAgICAgICA8PCBEdXJhdGlvbihzdGF0cy5tZWFuLnVwcGVyX2JvdW5kLmNvdW50KCkpIDw8IENvbHVtbkJyZWFrKCkgPDwgQ29sdW1uQnJlYWsoKQotICAgICAgICAgICAgPDwgRHVyYXRpb24oc3RhdHMuc3RhbmRhcmREZXZpYXRpb24ucG9pbnQuY291bnQoKSkgPDwgQ29sdW1uQnJlYWsoKQotICAgICAgICAgICAgPDwgRHVyYXRpb24oc3RhdHMuc3RhbmRhcmREZXZpYXRpb24ubG93ZXJfYm91bmQuY291bnQoKSkgPDwgQ29sdW1uQnJlYWsoKQotICAgICAgICAgICAgPDwgRHVyYXRpb24oc3RhdHMuc3RhbmRhcmREZXZpYXRpb24udXBwZXJfYm91bmQuY291bnQoKSkgPDwgQ29sdW1uQnJlYWsoKSA8PCBDb2x1bW5CcmVhaygpIDw8IENvbHVtbkJyZWFrKCkgPDwgQ29sdW1uQnJlYWsoKSA8PCBDb2x1bW5CcmVhaygpOwotICAgIH0KLX0KKyAgICBsYXp5UHJpbnRXaXRob3V0Q2xvc2luZ0JlbmNobWFya1RhYmxlKCk7CiAKLXZvaWQgQ29uc29sZVJlcG9ydGVyOjpiZW5jaG1hcmtGYWlsZWQoc3RkOjpzdHJpbmcgY29uc3QmIGVycm9yKSB7Ci0JQ29sb3VyIGNvbG91cihDb2xvdXI6OlJlZCk7Ci0gICAgKCptX3RhYmxlUHJpbnRlcikKLSAgICAgICAgPDwgIkJlbmNobWFyayBmYWlsZWQgKCIgPDwgZXJyb3IgPDwgJyknCi0gICAgICAgIDw8IENvbHVtbkJyZWFrKCkgPDwgUm93QnJlYWsoKTsKKyAgICBhdXRvIG5hbWVDb2wgPSBDb2x1bW4oIGluZm8ubmFtZSApLndpZHRoKCBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oIG1fdGFibGVQcmludGVyLT5jb2x1bW5JbmZvcygpWzBdLndpZHRoIC0gMiApICk7CisKKyAgICBib29sIGZpcnN0TGluZSA9IHRydWU7CisgICAgZm9yIChhdXRvIGxpbmUgOiBuYW1lQ29sKSB7CisgICAgICAgIGlmICghZmlyc3RMaW5lKQorICAgICAgICAgICAgKCptX3RhYmxlUHJpbnRlcikgPDwgQ29sdW1uQnJlYWsoKSA8PCBDb2x1bW5CcmVhaygpIDw8IENvbHVtbkJyZWFrKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZpcnN0TGluZSA9IGZhbHNlOworCisgICAgICAgICgqbV90YWJsZVByaW50ZXIpIDw8IGxpbmUgPDwgQ29sdW1uQnJlYWsoKTsKKyAgICB9CiB9Ci0jZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcKK3ZvaWQgQ29uc29sZVJlcG9ydGVyOjpiZW5jaG1hcmtFbmRlZChCZW5jaG1hcmtTdGF0cyBjb25zdCYgc3RhdHMpIHsKKyAgICBEdXJhdGlvbiBhdmVyYWdlKHN0YXRzLmVsYXBzZWRUaW1lSW5OYW5vc2Vjb25kcyAvIHN0YXRzLml0ZXJhdGlvbnMpOworICAgICgqbV90YWJsZVByaW50ZXIpCisgICAgICAgIDw8IHN0YXRzLml0ZXJhdGlvbnMgPDwgQ29sdW1uQnJlYWsoKQorICAgICAgICA8PCBzdGF0cy5lbGFwc2VkVGltZUluTmFub3NlY29uZHMgPDwgQ29sdW1uQnJlYWsoKQorICAgICAgICA8PCBhdmVyYWdlIDw8IENvbHVtbkJyZWFrKCk7Cit9CiAKIHZvaWQgQ29uc29sZVJlcG9ydGVyOjp0ZXN0Q2FzZUVuZGVkKFRlc3RDYXNlU3RhdHMgY29uc3QmIF90ZXN0Q2FzZVN0YXRzKSB7CiAgICAgbV90YWJsZVByaW50ZXItPmNsb3NlKCk7CkBAIC01NTIsMTAgKzQ5OCwxMSBAQAogCiAgICAgU291cmNlTGluZUluZm8gbGluZUluZm8gPSBtX3NlY3Rpb25TdGFjay5iYWNrKCkubGluZUluZm87CiAKLQotICAgIHN0cmVhbSA8PCBnZXRMaW5lT2ZDaGFyczwnLSc+KCkgPDwgJ1xuJzsKLSAgICBDb2xvdXIgY29sb3VyR3VhcmQoQ29sb3VyOjpGaWxlTmFtZSk7Ci0gICAgc3RyZWFtIDw8IGxpbmVJbmZvIDw8ICdcbic7CisgICAgaWYgKCFsaW5lSW5mby5lbXB0eSgpKSB7CisgICAgICAgIHN0cmVhbSA8PCBnZXRMaW5lT2ZDaGFyczwnLSc+KCkgPDwgJ1xuJzsKKyAgICAgICAgQ29sb3VyIGNvbG91ckd1YXJkKENvbG91cjo6RmlsZU5hbWUpOworICAgICAgICBzdHJlYW0gPDwgbGluZUluZm8gPDwgJ1xuJzsKKyAgICB9CiAgICAgc3RyZWFtIDw8IGdldExpbmVPZkNoYXJzPCcuJz4oKSA8PCAnXG4nIDw8IHN0ZDo6ZW5kbDsKIH0KIApAQCAtNjgwLDEwICs2MjcsOCBAQAogfQogCiB2b2lkIENvbnNvbGVSZXBvcnRlcjo6cHJpbnRUZXN0RmlsdGVycygpIHsKLSAgICBpZiAobV9jb25maWctPnRlc3RTcGVjKCkuaGFzRmlsdGVycygpKSB7Ci0gICAgICAgIENvbG91ciBndWFyZChDb2xvdXI6OkJyaWdodFllbGxvdyk7Ci0gICAgICAgIHN0cmVhbSA8PCAiRmlsdGVyczogIiA8PCBzZXJpYWxpemVGaWx0ZXJzKG1fY29uZmlnLT5nZXRUZXN0c09yVGFncygpKSA8PCAnXG4nOwotICAgIH0KKyAgICBpZiAobV9jb25maWctPnRlc3RTcGVjKCkuaGFzRmlsdGVycygpKQorICAgICAgICBzdHJlYW0gPDwgQ29sb3VyKENvbG91cjo6QnJpZ2h0WWVsbG93KSA8PCAiRmlsdGVyczogIiA8PCBzZXJpYWxpemVGaWx0ZXJzKCBtX2NvbmZpZy0+Z2V0VGVzdHNPclRhZ3MoKSApIDw8ICdcbic7CiB9CiAKIENBVENIX1JFR0lTVEVSX1JFUE9SVEVSKCJjb25zb2xlIiwgQ29uc29sZVJlcG9ydGVyKQpAQCAtNjkzLDcgKzYzOCwzIEBACiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKICNwcmFnbWEgd2FybmluZyhwb3ApCiAjZW5kaWYKLQotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotIyAgcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2NvbnNvbGUuaCBiL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2NvbnNvbGUuaAppbmRleCA0MzAyNGRhLi5lZmZhNThkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9jb25zb2xlLmgKKysrIGIvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfY29uc29sZS5oCkBAIC0zMiw4ICszMiw2IEBACiAKICAgICAgICAgdm9pZCBub01hdGNoaW5nVGVzdENhc2VzKHN0ZDo6c3RyaW5nIGNvbnN0JiBzcGVjKSBvdmVycmlkZTsKIAotICAgICAgICB2b2lkIHJlcG9ydEludmFsaWRBcmd1bWVudHMoc3RkOjpzdHJpbmcgY29uc3QmYXJnKSBvdmVycmlkZTsKLQogICAgICAgICB2b2lkIGFzc2VydGlvblN0YXJ0aW5nKEFzc2VydGlvbkluZm8gY29uc3QmKSBvdmVycmlkZTsKIAogICAgICAgICBib29sIGFzc2VydGlvbkVuZGVkKEFzc2VydGlvblN0YXRzIGNvbnN0JiBfYXNzZXJ0aW9uU3RhdHMpIG92ZXJyaWRlOwpAQCAtNDEsMTIgKzM5LDkgQEAKICAgICAgICAgdm9pZCBzZWN0aW9uU3RhcnRpbmcoU2VjdGlvbkluZm8gY29uc3QmIF9zZWN0aW9uSW5mbykgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgc2VjdGlvbkVuZGVkKFNlY3Rpb25TdGF0cyBjb25zdCYgX3NlY3Rpb25TdGF0cykgb3ZlcnJpZGU7CiAKLSNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HKQotICAgICAgICB2b2lkIGJlbmNobWFya1ByZXBhcmluZyhzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSkgb3ZlcnJpZGU7CisKICAgICAgICAgdm9pZCBiZW5jaG1hcmtTdGFydGluZyhCZW5jaG1hcmtJbmZvIGNvbnN0JiBpbmZvKSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBiZW5jaG1hcmtFbmRlZChCZW5jaG1hcmtTdGF0czw+IGNvbnN0JiBzdGF0cykgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgYmVuY2htYXJrRmFpbGVkKHN0ZDo6c3RyaW5nIGNvbnN0JiBlcnJvcikgb3ZlcnJpZGU7Ci0jZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcKKyAgICAgICAgdm9pZCBiZW5jaG1hcmtFbmRlZChCZW5jaG1hcmtTdGF0cyBjb25zdCYgc3RhdHMpIG92ZXJyaWRlOwogCiAgICAgICAgIHZvaWQgdGVzdENhc2VFbmRlZChUZXN0Q2FzZVN0YXRzIGNvbnN0JiBfdGVzdENhc2VTdGF0cykgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgdGVzdEdyb3VwRW5kZWQoVGVzdEdyb3VwU3RhdHMgY29uc3QmIF90ZXN0R3JvdXBTdGF0cykgb3ZlcnJpZGU7CkBAIC04Niw0ICs4MSw0IEBACiAjcHJhZ21hIHdhcm5pbmcocG9wKQogI2VuZGlmCiAKLSNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfUkVQT1JURVJfQ09OU09MRV9IX0lOQ0xVREVEClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9SRVBPUlRFUl9DT05TT0xFX0hfSU5DTFVERUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2p1bml0LmNwcCBiL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2p1bml0LmNwcAppbmRleCA3NDE2YTUyLi5lODM3NTg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9qdW5pdC5jcHAKKysrIGIvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfanVuaXQuY3BwCkBAIC0xMiw3ICsxMiw2IEBACiAKICNpbmNsdWRlICIuLi9pbnRlcm5hbC9jYXRjaF90b3N0cmluZy5oIgogI2luY2x1ZGUgIi4uL2ludGVybmFsL2NhdGNoX3JlcG9ydGVyX3JlZ2lzdHJhcnMuaHBwIgotI2luY2x1ZGUgIi4uL2ludGVybmFsL2NhdGNoX3RleHQuaCIKIAogI2luY2x1ZGUgPGNhc3NlcnQ+CiAjaW5jbHVkZSA8c3N0cmVhbT4KQEAgLTE0Nyw4ICsxNDYsOCBAQAogICAgICAgICBmb3IoIGF1dG8gY29uc3QmIGNoaWxkIDogZ3JvdXBOb2RlLmNoaWxkcmVuICkKICAgICAgICAgICAgIHdyaXRlVGVzdENhc2UoICpjaGlsZCApOwogCi0gICAgICAgIHhtbC5zY29wZWRFbGVtZW50KCAic3lzdGVtLW91dCIgKS53cml0ZVRleHQoIHRyaW0oIHN0ZE91dEZvclN1aXRlICksIFhtbEZvcm1hdHRpbmc6Ok5ld2xpbmUgKTsKLSAgICAgICAgeG1sLnNjb3BlZEVsZW1lbnQoICJzeXN0ZW0tZXJyIiApLndyaXRlVGV4dCggdHJpbSggc3RkRXJyRm9yU3VpdGUgKSwgWG1sRm9ybWF0dGluZzo6TmV3bGluZSApOworICAgICAgICB4bWwuc2NvcGVkRWxlbWVudCggInN5c3RlbS1vdXQiICkud3JpdGVUZXh0KCB0cmltKCBzdGRPdXRGb3JTdWl0ZSApLCBmYWxzZSApOworICAgICAgICB4bWwuc2NvcGVkRWxlbWVudCggInN5c3RlbS1lcnIiICkud3JpdGVUZXh0KCB0cmltKCBzdGRFcnJGb3JTdWl0ZSApLCBmYWxzZSApOwogICAgIH0KIAogICAgIHZvaWQgSnVuaXRSZXBvcnRlcjo6d3JpdGVUZXN0Q2FzZSggVGVzdENhc2VOb2RlIGNvbnN0JiB0ZXN0Q2FzZU5vZGUgKSB7CkBAIC0xOTcsOSArMTk2LDkgQEAKICAgICAgICAgICAgIHdyaXRlQXNzZXJ0aW9ucyggc2VjdGlvbk5vZGUgKTsKIAogICAgICAgICAgICAgaWYoICFzZWN0aW9uTm9kZS5zdGRPdXQuZW1wdHkoKSApCi0gICAgICAgICAgICAgICAgeG1sLnNjb3BlZEVsZW1lbnQoICJzeXN0ZW0tb3V0IiApLndyaXRlVGV4dCggdHJpbSggc2VjdGlvbk5vZGUuc3RkT3V0ICksIFhtbEZvcm1hdHRpbmc6Ok5ld2xpbmUgKTsKKyAgICAgICAgICAgICAgICB4bWwuc2NvcGVkRWxlbWVudCggInN5c3RlbS1vdXQiICkud3JpdGVUZXh0KCB0cmltKCBzZWN0aW9uTm9kZS5zdGRPdXQgKSwgZmFsc2UgKTsKICAgICAgICAgICAgIGlmKCAhc2VjdGlvbk5vZGUuc3RkRXJyLmVtcHR5KCkgKQotICAgICAgICAgICAgICAgIHhtbC5zY29wZWRFbGVtZW50KCAic3lzdGVtLWVyciIgKS53cml0ZVRleHQoIHRyaW0oIHNlY3Rpb25Ob2RlLnN0ZEVyciApLCBYbWxGb3JtYXR0aW5nOjpOZXdsaW5lICk7CisgICAgICAgICAgICAgICAgeG1sLnNjb3BlZEVsZW1lbnQoICJzeXN0ZW0tZXJyIiApLndyaXRlVGV4dCggdHJpbSggc2VjdGlvbk5vZGUuc3RkRXJyICksIGZhbHNlICk7CiAgICAgICAgIH0KICAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiBjaGlsZE5vZGUgOiBzZWN0aW9uTm9kZS5jaGlsZFNlY3Rpb25zICkKICAgICAgICAgICAgIGlmKCBjbGFzc05hbWUuZW1wdHkoKSApCkBAIC0yMjMsNyArMjIyLDExIEBACiAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lID0gImVycm9yIjsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRXYXM6OkV4cGxpY2l0RmFpbHVyZToKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudE5hbWUgPSAiZmFpbHVyZSI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0V2FzOjpFeHByZXNzaW9uRmFpbGVkOgorICAgICAgICAgICAgICAgICAgICBlbGVtZW50TmFtZSA9ICJmYWlsdXJlIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRXYXM6OkRpZG50VGhyb3dFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lID0gImZhaWx1cmUiOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI0MSwyNSArMjQ0LDEwIEBACiAKICAgICAgICAgICAgIFhtbFdyaXRlcjo6U2NvcGVkRWxlbWVudCBlID0geG1sLnNjb3BlZEVsZW1lbnQoIGVsZW1lbnROYW1lICk7CiAKLSAgICAgICAgICAgIHhtbC53cml0ZUF0dHJpYnV0ZSggIm1lc3NhZ2UiLCByZXN1bHQuZ2V0RXhwcmVzc2lvbigpICk7CisgICAgICAgICAgICB4bWwud3JpdGVBdHRyaWJ1dGUoICJtZXNzYWdlIiwgcmVzdWx0LmdldEV4cGFuZGVkRXhwcmVzc2lvbigpICk7CiAgICAgICAgICAgICB4bWwud3JpdGVBdHRyaWJ1dGUoICJ0eXBlIiwgcmVzdWx0LmdldFRlc3RNYWNyb05hbWUoKSApOwogCiAgICAgICAgICAgICBSZXVzYWJsZVN0cmluZ1N0cmVhbSByc3M7Ci0gICAgICAgICAgICBpZiAoc3RhdHMudG90YWxzLmFzc2VydGlvbnMudG90YWwoKSA+IDApIHsKLSAgICAgICAgICAgICAgICByc3MgPDwgIkZBSUxFRCIgPDwgIjpcbiI7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeHByZXNzaW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcnNzIDw8ICIgICI7Ci0gICAgICAgICAgICAgICAgICAgIHJzcyA8PCByZXN1bHQuZ2V0RXhwcmVzc2lvbkluTWFjcm8oKTsKLSAgICAgICAgICAgICAgICAgICAgcnNzIDw8ICdcbic7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhwYW5kZWRFeHByZXNzaW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcnNzIDw8ICJ3aXRoIGV4cGFuc2lvbjpcbiI7Ci0gICAgICAgICAgICAgICAgICAgIHJzcyA8PCBDb2x1bW4ocmVzdWx0LmdldEV4cGFuZGVkRXhwcmVzc2lvbigpKS5pbmRlbnQoMikgPDwgJ1xuJzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJzcyA8PCAnXG4nOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBpZiggIXJlc3VsdC5nZXRNZXNzYWdlKCkuZW1wdHkoKSApCiAgICAgICAgICAgICAgICAgcnNzIDw8IHJlc3VsdC5nZXRNZXNzYWdlKCkgPDwgJ1xuJzsKICAgICAgICAgICAgIGZvciggYXV0byBjb25zdCYgbXNnIDogc3RhdHMuaW5mb01lc3NhZ2VzICkKQEAgLTI2Nyw3ICsyNTUsNyBAQAogICAgICAgICAgICAgICAgICAgICByc3MgPDwgbXNnLm1lc3NhZ2UgPDwgJ1xuJzsKIAogICAgICAgICAgICAgcnNzIDw8ICJhdCAiIDw8IHJlc3VsdC5nZXRTb3VyY2VJbmZvKCk7Ci0gICAgICAgICAgICB4bWwud3JpdGVUZXh0KCByc3Muc3RyKCksIFhtbEZvcm1hdHRpbmc6Ok5ld2xpbmUgKTsKKyAgICAgICAgICAgIHhtbC53cml0ZVRleHQoIHJzcy5zdHIoKSwgZmFsc2UgKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfbGlzdGVuaW5nLmNwcCBiL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2xpc3RlbmluZy5jcHAKaW5kZXggOTFlNmIzOS4uOWRkYWUyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfbGlzdGVuaW5nLmNwcAorKysgYi9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9saXN0ZW5pbmcuY3BwCkBAIC00MSw0MiArNDEsMjAgQEAKICAgICAgICAgfQogICAgICAgICBtX3JlcG9ydGVyLT5ub01hdGNoaW5nVGVzdENhc2VzKCBzcGVjICk7CiAgICAgfQotICAgIAotICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OnJlcG9ydEludmFsaWRBcmd1bWVudHMoc3RkOjpzdHJpbmcgY29uc3QmYXJnKXsKLSAgICAgICAgZm9yICggYXV0byBjb25zdCYgbGlzdGVuZXIgOiBtX2xpc3RlbmVycyApIHsKLSAgICAgICAgICAgIGxpc3RlbmVyLT5yZXBvcnRJbnZhbGlkQXJndW1lbnRzKCBhcmcgKTsKLSAgICAgICAgfQotICAgICAgICBtX3JlcG9ydGVyLT5yZXBvcnRJbnZhbGlkQXJndW1lbnRzKCBhcmcgKTsKLSAgICB9ICAgIAogCi0jaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORykKLSAgICB2b2lkIExpc3RlbmluZ1JlcG9ydGVyOjpiZW5jaG1hcmtQcmVwYXJpbmcoIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lICkgewotCQlmb3IgKGF1dG8gY29uc3QmIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMpIHsKLQkJCWxpc3RlbmVyLT5iZW5jaG1hcmtQcmVwYXJpbmcobmFtZSk7Ci0JCX0KLQkJbV9yZXBvcnRlci0+YmVuY2htYXJrUHJlcGFyaW5nKG5hbWUpOwotCX0KICAgICB2b2lkIExpc3RlbmluZ1JlcG9ydGVyOjpiZW5jaG1hcmtTdGFydGluZyggQmVuY2htYXJrSW5mbyBjb25zdCYgYmVuY2htYXJrSW5mbyApIHsKICAgICAgICAgZm9yICggYXV0byBjb25zdCYgbGlzdGVuZXIgOiBtX2xpc3RlbmVycyApIHsKICAgICAgICAgICAgIGxpc3RlbmVyLT5iZW5jaG1hcmtTdGFydGluZyggYmVuY2htYXJrSW5mbyApOwogICAgICAgICB9CiAgICAgICAgIG1fcmVwb3J0ZXItPmJlbmNobWFya1N0YXJ0aW5nKCBiZW5jaG1hcmtJbmZvICk7CiAgICAgfQotICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OmJlbmNobWFya0VuZGVkKCBCZW5jaG1hcmtTdGF0czw+IGNvbnN0JiBiZW5jaG1hcmtTdGF0cyApIHsKKyAgICB2b2lkIExpc3RlbmluZ1JlcG9ydGVyOjpiZW5jaG1hcmtFbmRlZCggQmVuY2htYXJrU3RhdHMgY29uc3QmIGJlbmNobWFya1N0YXRzICkgewogICAgICAgICBmb3IgKCBhdXRvIGNvbnN0JiBsaXN0ZW5lciA6IG1fbGlzdGVuZXJzICkgewogICAgICAgICAgICAgbGlzdGVuZXItPmJlbmNobWFya0VuZGVkKCBiZW5jaG1hcmtTdGF0cyApOwogICAgICAgICB9CiAgICAgICAgIG1fcmVwb3J0ZXItPmJlbmNobWFya0VuZGVkKCBiZW5jaG1hcmtTdGF0cyApOwogICAgIH0KIAotCXZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OmJlbmNobWFya0ZhaWxlZCggc3RkOjpzdHJpbmcgY29uc3QmIGVycm9yICkgewotCQlmb3IgKGF1dG8gY29uc3QmIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMpIHsKLQkJCWxpc3RlbmVyLT5iZW5jaG1hcmtGYWlsZWQoZXJyb3IpOwotCQl9Ci0JCW1fcmVwb3J0ZXItPmJlbmNobWFya0ZhaWxlZChlcnJvcik7Ci0JfQotI2VuZGlmIC8vIENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HCi0KICAgICB2b2lkIExpc3RlbmluZ1JlcG9ydGVyOjp0ZXN0UnVuU3RhcnRpbmcoIFRlc3RSdW5JbmZvIGNvbnN0JiB0ZXN0UnVuSW5mbyApIHsKICAgICAgICAgZm9yICggYXV0byBjb25zdCYgbGlzdGVuZXIgOiBtX2xpc3RlbmVycyApIHsKICAgICAgICAgICAgIGxpc3RlbmVyLT50ZXN0UnVuU3RhcnRpbmcoIHRlc3RSdW5JbmZvICk7CkBAIC0xNjEsNCArMTM5LDQgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi19IC8vIGVuZCBuYW1lc3BhY2UgQ2F0Y2gKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9IC8vIGVuZCBuYW1lc3BhY2UgQ2F0Y2gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2xpc3RlbmluZy5oIGIvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfbGlzdGVuaW5nLmgKaW5kZXggYmZhYTMwOC4uZGRkZDdhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfbGlzdGVuaW5nLmgKKysrIGIvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfbGlzdGVuaW5nLmgKQEAgLTI4LDE3ICsyOCwxMSBAQAogICAgICAgICBSZXBvcnRlclByZWZlcmVuY2VzIGdldFByZWZlcmVuY2VzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICAgICAgdm9pZCBub01hdGNoaW5nVGVzdENhc2VzKCBzdGQ6OnN0cmluZyBjb25zdCYgc3BlYyApIG92ZXJyaWRlOwotICAgICAgICAKLSAgICAgICAgdm9pZCByZXBvcnRJbnZhbGlkQXJndW1lbnRzKHN0ZDo6c3RyaW5nIGNvbnN0JmFyZykgb3ZlcnJpZGU7Ci0gICAgICAgIAorCiAgICAgICAgIHN0YXRpYyBzdGQ6OnNldDxWZXJib3NpdHk+IGdldFN1cHBvcnRlZFZlcmJvc2l0aWVzKCk7CiAKLSNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HKQotICAgICAgICB2b2lkIGJlbmNobWFya1ByZXBhcmluZyhzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgYmVuY2htYXJrU3RhcnRpbmcoIEJlbmNobWFya0luZm8gY29uc3QmIGJlbmNobWFya0luZm8gKSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBiZW5jaG1hcmtFbmRlZCggQmVuY2htYXJrU3RhdHM8PiBjb25zdCYgYmVuY2htYXJrU3RhdHMgKSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBiZW5jaG1hcmtGYWlsZWQoc3RkOjpzdHJpbmcgY29uc3QmKSBvdmVycmlkZTsKLSNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORworICAgICAgICB2b2lkIGJlbmNobWFya0VuZGVkKCBCZW5jaG1hcmtTdGF0cyBjb25zdCYgYmVuY2htYXJrU3RhdHMgKSBvdmVycmlkZTsKIAogICAgICAgICB2b2lkIHRlc3RSdW5TdGFydGluZyggVGVzdFJ1bkluZm8gY29uc3QmIHRlc3RSdW5JbmZvICkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgdGVzdEdyb3VwU3RhcnRpbmcoIEdyb3VwSW5mbyBjb25zdCYgZ3JvdXBJbmZvICkgb3ZlcnJpZGU7CkBAIC02MCw0ICs1NCw0IEBACiAKIH0gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaAogCi0jZW5kaWYgLy8gVFdPQkxVRUNVQkVTX0NBVENIX01VTFRJX1JFUE9SVEVSX0hfSU5DTFVERUQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisjZW5kaWYgLy8gVFdPQkxVRUNVQkVTX0NBVENIX01VTFRJX1JFUE9SVEVSX0hfSU5DTFVERUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX3NvbmFycXViZS5ocHAgYi9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9zb25hcnF1YmUuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjdkOTI5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX3NvbmFycXViZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyoKLSAqICBDcmVhdGVkIGJ5IERhbmllbCBHYXJjaWEgb24gMjAxOC0xMi0wNC4KLSAqICBDb3B5cmlnaHQgU29jaWFsIFBvaW50IFNMLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0gKiAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKi8KLSNpZm5kZWYgQ0FUQ0hfUkVQT1JURVJfU09OQVJRVUJFX0hQUF9JTkNMVURFRAotI2RlZmluZSBDQVRDSF9SRVBPUlRFUl9TT05BUlFVQkVfSFBQX0lOQ0xVREVECi0KLQotLy8gRG9uJ3QgI2luY2x1ZGUgYW55IENhdGNoIGhlYWRlcnMgaGVyZSAtIHdlIGNhbiBhc3N1bWUgdGhleSBhcmUgYWxyZWFkeQotLy8gaW5jbHVkZWQgYmVmb3JlIHRoaXMgaGVhZGVyLgotLy8gVGhpcyBpcyBub3QgZ29vZCBwcmFjdGljZSBpbiBnZW5lcmFsIGJ1dCBpcyBuZWNlc3NhcnkgaW4gdGhpcyBjYXNlIHNvIHRoaXMKLS8vIGZpbGUgY2FuIGJlIGRpc3RyaWJ1dGVkIGFzIGEgc2luZ2xlIGhlYWRlciB0aGF0IHdvcmtzIHdpdGggdGhlIG1haW4KLS8vIENhdGNoIHNpbmdsZSBoZWFkZXIuCi0KLSNpbmNsdWRlIDxtYXA+Ci0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0KLSAgICBzdHJ1Y3QgU29uYXJRdWJlUmVwb3J0ZXIgOiBDdW11bGF0aXZlUmVwb3J0ZXJCYXNlPFNvbmFyUXViZVJlcG9ydGVyPiB7Ci0KLSAgICAgICAgU29uYXJRdWJlUmVwb3J0ZXIoUmVwb3J0ZXJDb25maWcgY29uc3QmIGNvbmZpZykKLSAgICAgICAgOiBDdW11bGF0aXZlUmVwb3J0ZXJCYXNlKGNvbmZpZykKLSAgICAgICAgLCB4bWwoY29uZmlnLnN0cmVhbSgpKSB7Ci0gICAgICAgICAgICBtX3JlcG9ydGVyUHJlZnMuc2hvdWxkUmVkaXJlY3RTdGRPdXQgPSB0cnVlOwotICAgICAgICAgICAgbV9yZXBvcnRlclByZWZzLnNob3VsZFJlcG9ydEFsbEFzc2VydGlvbnMgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgflNvbmFyUXViZVJlcG9ydGVyKCkgb3ZlcnJpZGU7Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewotICAgICAgICAgICAgcmV0dXJuICJSZXBvcnRzIHRlc3QgcmVzdWx0cyBpbiB0aGUgR2VuZXJpYyBUZXN0IERhdGEgU29uYXJRdWJlIFhNTCBmb3JtYXQiOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6c2V0PFZlcmJvc2l0eT4gZ2V0U3VwcG9ydGVkVmVyYm9zaXRpZXMoKSB7Ci0gICAgICAgICAgICByZXR1cm4geyBWZXJib3NpdHk6Ok5vcm1hbCB9OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBub01hdGNoaW5nVGVzdENhc2VzKHN0ZDo6c3RyaW5nIGNvbnN0JiAvKnNwZWMqLykgb3ZlcnJpZGUge30KLQotICAgICAgICB2b2lkIHRlc3RSdW5TdGFydGluZyhUZXN0UnVuSW5mbyBjb25zdCYgdGVzdFJ1bkluZm8pIG92ZXJyaWRlIHsKLSAgICAgICAgICAgIEN1bXVsYXRpdmVSZXBvcnRlckJhc2U6OnRlc3RSdW5TdGFydGluZyh0ZXN0UnVuSW5mbyk7Ci0gICAgICAgICAgICB4bWwuc3RhcnRFbGVtZW50KCJ0ZXN0RXhlY3V0aW9ucyIpOwotICAgICAgICAgICAgeG1sLndyaXRlQXR0cmlidXRlKCJ2ZXJzaW9uIiwgIjEiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdGVzdEdyb3VwRW5kZWQoVGVzdEdyb3VwU3RhdHMgY29uc3QmIHRlc3RHcm91cFN0YXRzKSBvdmVycmlkZSB7Ci0gICAgICAgICAgICBDdW11bGF0aXZlUmVwb3J0ZXJCYXNlOjp0ZXN0R3JvdXBFbmRlZCh0ZXN0R3JvdXBTdGF0cyk7Ci0gICAgICAgICAgICB3cml0ZUdyb3VwKCptX3Rlc3RHcm91cHMuYmFjaygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdGVzdFJ1bkVuZGVkQ3VtdWxhdGl2ZSgpIG92ZXJyaWRlIHsKLSAgICAgICAgICAgIHhtbC5lbmRFbGVtZW50KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHdyaXRlR3JvdXAoVGVzdEdyb3VwTm9kZSBjb25zdCYgZ3JvdXBOb2RlKSB7Ci0gICAgICAgICAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgVGVzdEdyb3VwTm9kZTo6Q2hpbGROb2Rlcz4gdGVzdHNQZXJGaWxlOwotICAgICAgICAgICAgZm9yKGF1dG8gY29uc3QmIGNoaWxkIDogZ3JvdXBOb2RlLmNoaWxkcmVuKQotICAgICAgICAgICAgICAgIHRlc3RzUGVyRmlsZVtjaGlsZC0+dmFsdWUudGVzdEluZm8ubGluZUluZm8uZmlsZV0ucHVzaF9iYWNrKGNoaWxkKTsKLQotICAgICAgICAgICAgZm9yKGF1dG8gY29uc3QmIGt2IDogdGVzdHNQZXJGaWxlKQotICAgICAgICAgICAgICAgIHdyaXRlVGVzdEZpbGUoa3YuZmlyc3QuY19zdHIoKSwga3Yuc2Vjb25kKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3JpdGVUZXN0RmlsZShjb25zdCBjaGFyKiBmaWxlbmFtZSwgVGVzdEdyb3VwTm9kZTo6Q2hpbGROb2RlcyBjb25zdCYgdGVzdENhc2VOb2RlcykgewotICAgICAgICAgICAgWG1sV3JpdGVyOjpTY29wZWRFbGVtZW50IGUgPSB4bWwuc2NvcGVkRWxlbWVudCgiZmlsZSIpOwotICAgICAgICAgICAgeG1sLndyaXRlQXR0cmlidXRlKCJwYXRoIiwgZmlsZW5hbWUpOwotCi0gICAgICAgICAgICBmb3IoYXV0byBjb25zdCYgY2hpbGQgOiB0ZXN0Q2FzZU5vZGVzKQotICAgICAgICAgICAgICAgIHdyaXRlVGVzdENhc2UoKmNoaWxkKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3JpdGVUZXN0Q2FzZShUZXN0Q2FzZU5vZGUgY29uc3QmIHRlc3RDYXNlTm9kZSkgewotICAgICAgICAgICAgLy8gQWxsIHRlc3QgY2FzZXMgaGF2ZSBleGFjdGx5IG9uZSBzZWN0aW9uIC0gd2hpY2ggcmVwcmVzZW50cyB0aGUKLSAgICAgICAgICAgIC8vIHRlc3QgY2FzZSBpdHNlbGYuIFRoYXQgc2VjdGlvbiBtYXkgaGF2ZSAwLW4gbmVzdGVkIHNlY3Rpb25zCi0gICAgICAgICAgICBhc3NlcnQodGVzdENhc2VOb2RlLmNoaWxkcmVuLnNpemUoKSA9PSAxKTsKLSAgICAgICAgICAgIFNlY3Rpb25Ob2RlIGNvbnN0JiByb290U2VjdGlvbiA9ICp0ZXN0Q2FzZU5vZGUuY2hpbGRyZW4uZnJvbnQoKTsKLSAgICAgICAgICAgIHdyaXRlU2VjdGlvbigiIiwgcm9vdFNlY3Rpb24sIHRlc3RDYXNlTm9kZS52YWx1ZS50ZXN0SW5mby5va1RvRmFpbCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3JpdGVTZWN0aW9uKHN0ZDo6c3RyaW5nIGNvbnN0JiByb290TmFtZSwgU2VjdGlvbk5vZGUgY29uc3QmIHNlY3Rpb25Ob2RlLCBib29sIG9rVG9GYWlsKSB7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyBuYW1lID0gdHJpbShzZWN0aW9uTm9kZS5zdGF0cy5zZWN0aW9uSW5mby5uYW1lKTsKLSAgICAgICAgICAgIGlmKCFyb290TmFtZS5lbXB0eSgpKQotICAgICAgICAgICAgICAgIG5hbWUgPSByb290TmFtZSArICcvJyArIG5hbWU7Ci0KLSAgICAgICAgICAgIGlmKCFzZWN0aW9uTm9kZS5hc3NlcnRpb25zLmVtcHR5KCkgfHwgIXNlY3Rpb25Ob2RlLnN0ZE91dC5lbXB0eSgpIHx8ICFzZWN0aW9uTm9kZS5zdGRFcnIuZW1wdHkoKSkgewotICAgICAgICAgICAgICAgIFhtbFdyaXRlcjo6U2NvcGVkRWxlbWVudCBlID0geG1sLnNjb3BlZEVsZW1lbnQoInRlc3RDYXNlIik7Ci0gICAgICAgICAgICAgICAgeG1sLndyaXRlQXR0cmlidXRlKCJuYW1lIiwgbmFtZSk7Ci0gICAgICAgICAgICAgICAgeG1sLndyaXRlQXR0cmlidXRlKCJkdXJhdGlvbiIsIHN0YXRpY19jYXN0PGxvbmc+KHNlY3Rpb25Ob2RlLnN0YXRzLmR1cmF0aW9uSW5TZWNvbmRzICogMTAwMCkpOwotCi0gICAgICAgICAgICAgICAgd3JpdGVBc3NlcnRpb25zKHNlY3Rpb25Ob2RlLCBva1RvRmFpbCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvcihhdXRvIGNvbnN0JiBjaGlsZE5vZGUgOiBzZWN0aW9uTm9kZS5jaGlsZFNlY3Rpb25zKQotICAgICAgICAgICAgICAgIHdyaXRlU2VjdGlvbihuYW1lLCAqY2hpbGROb2RlLCBva1RvRmFpbCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHdyaXRlQXNzZXJ0aW9ucyhTZWN0aW9uTm9kZSBjb25zdCYgc2VjdGlvbk5vZGUsIGJvb2wgb2tUb0ZhaWwpIHsKLSAgICAgICAgICAgIGZvcihhdXRvIGNvbnN0JiBhc3NlcnRpb24gOiBzZWN0aW9uTm9kZS5hc3NlcnRpb25zKQotICAgICAgICAgICAgICAgIHdyaXRlQXNzZXJ0aW9uKCBhc3NlcnRpb24sIG9rVG9GYWlsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3JpdGVBc3NlcnRpb24oQXNzZXJ0aW9uU3RhdHMgY29uc3QmIHN0YXRzLCBib29sIG9rVG9GYWlsKSB7Ci0gICAgICAgICAgICBBc3NlcnRpb25SZXN1bHQgY29uc3QmIHJlc3VsdCA9IHN0YXRzLmFzc2VydGlvblJlc3VsdDsKLSAgICAgICAgICAgIGlmKCFyZXN1bHQuaXNPaygpKSB7Ci0gICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZWxlbWVudE5hbWU7Ci0gICAgICAgICAgICAgICAgaWYob2tUb0ZhaWwpIHsKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudE5hbWUgPSAic2tpcHBlZCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2gocmVzdWx0LmdldFJlc3VsdFR5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRXYXM6OlRocmV3RXhjZXB0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRXYXM6OkZhdGFsRXJyb3JDb25kaXRpb246Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudE5hbWUgPSAiZXJyb3IiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRXYXM6OkV4cGxpY2l0RmFpbHVyZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50TmFtZSA9ICJmYWlsdXJlIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0V2FzOjpFeHByZXNzaW9uRmFpbGVkOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lID0gImZhaWx1cmUiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRXYXM6OkRpZG50VGhyb3dFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudE5hbWUgPSAiZmFpbHVyZSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgbmV2ZXIgc2VlIHRoZXNlIGhlcmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFdhczo6SW5mbzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0V2FzOjpXYXJuaW5nOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRXYXM6Ok9rOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRXYXM6OlVua25vd246Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFdhczo6RmFpbHVyZUJpdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0V2FzOjpFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudE5hbWUgPSAiaW50ZXJuYWxFcnJvciI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBYbWxXcml0ZXI6OlNjb3BlZEVsZW1lbnQgZSA9IHhtbC5zY29wZWRFbGVtZW50KGVsZW1lbnROYW1lKTsKLQotICAgICAgICAgICAgICAgIFJldXNhYmxlU3RyaW5nU3RyZWFtIG1lc3NhZ2VSc3M7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZVJzcyA8PCByZXN1bHQuZ2V0VGVzdE1hY3JvTmFtZSgpIDw8ICIoIiA8PCByZXN1bHQuZ2V0RXhwcmVzc2lvbigpIDw8ICIpIjsKLSAgICAgICAgICAgICAgICB4bWwud3JpdGVBdHRyaWJ1dGUoIm1lc3NhZ2UiLCBtZXNzYWdlUnNzLnN0cigpKTsKLQotICAgICAgICAgICAgICAgIFJldXNhYmxlU3RyaW5nU3RyZWFtIHRleHRSc3M7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRzLnRvdGFscy5hc3NlcnRpb25zLnRvdGFsKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHRSc3MgPDwgIkZBSUxFRDpcbiI7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhwcmVzc2lvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UnNzIDw8ICJcdCIgPDwgcmVzdWx0LmdldEV4cHJlc3Npb25Jbk1hY3JvKCkgPDwgIlxuIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4cGFuZGVkRXhwcmVzc2lvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UnNzIDw8ICJ3aXRoIGV4cGFuc2lvbjpcblx0IiA8PCByZXN1bHQuZ2V0RXhwYW5kZWRFeHByZXNzaW9uKCkgPDwgIlxuIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmKCFyZXN1bHQuZ2V0TWVzc2FnZSgpLmVtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHRleHRSc3MgPDwgcmVzdWx0LmdldE1lc3NhZ2UoKSA8PCAiXG4iOwotCi0gICAgICAgICAgICAgICAgZm9yKGF1dG8gY29uc3QmIG1zZyA6IHN0YXRzLmluZm9NZXNzYWdlcykKLSAgICAgICAgICAgICAgICAgICAgaWYobXNnLnR5cGUgPT0gUmVzdWx0V2FzOjpJbmZvKQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJzcyA8PCBtc2cubWVzc2FnZSA8PCAiXG4iOwotCi0gICAgICAgICAgICAgICAgdGV4dFJzcyA8PCAiYXQgIiA8PCByZXN1bHQuZ2V0U291cmNlSW5mbygpOwotICAgICAgICAgICAgICAgIHhtbC53cml0ZVRleHQodGV4dFJzcy5zdHIoKSwgWG1sRm9ybWF0dGluZzo6TmV3bGluZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFhtbFdyaXRlciB4bWw7Ci0gICAgfTsKLQotI2lmZGVmIENBVENIX0lNUEwKLSAgICBTb25hclF1YmVSZXBvcnRlcjo6flNvbmFyUXViZVJlcG9ydGVyKCkge30KLSNlbmRpZgotCi0gICAgQ0FUQ0hfUkVHSVNURVJfUkVQT1JURVIoICJzb25hcnF1YmUiLCBTb25hclF1YmVSZXBvcnRlciApCi0KLX0gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaAotCi0jZW5kaWYgLy8gQ0FUQ0hfUkVQT1JURVJfU09OQVJRVUJFX0hQUF9JTkNMVURFRApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX3RlYW1jaXR5LmhwcCBiL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX3RlYW1jaXR5LmhwcAppbmRleCA0N2I3ZTRhLi5lY2EyODg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl90ZWFtY2l0eS5ocHAKKysrIGIvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwCkBAIC0xODMsNyArMTgzLDggQEAKIAogICAgICAgICAgICAgU291cmNlTGluZUluZm8gbGluZUluZm8gPSBtX3NlY3Rpb25TdGFjay5mcm9udCgpLmxpbmVJbmZvOwogCi0gICAgICAgICAgICBvcyA8PCBsaW5lSW5mbyA8PCAiXG4iOworICAgICAgICAgICAgaWYoICFsaW5lSW5mby5lbXB0eSgpICkKKyAgICAgICAgICAgICAgICBvcyA8PCBsaW5lSW5mbyA8PCAiXG4iOwogICAgICAgICAgICAgb3MgPDwgZ2V0TGluZU9mQ2hhcnM8Jy4nPigpIDw8ICJcblxuIjsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl94bWwuY3BwIGIvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfeG1sLmNwcAppbmRleCAwZmI3OGJlLi5jNzU3MmQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl94bWwuY3BwCisrKyBiL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX3htbC5jcHAKQEAgLTE5Myw5ICsxOTMsOSBAQAogICAgICAgICAgICAgZS53cml0ZUF0dHJpYnV0ZSggImR1cmF0aW9uSW5TZWNvbmRzIiwgbV90ZXN0Q2FzZVRpbWVyLmdldEVsYXBzZWRTZWNvbmRzKCkgKTsKIAogICAgICAgICBpZiggIXRlc3RDYXNlU3RhdHMuc3RkT3V0LmVtcHR5KCkgKQotICAgICAgICAgICAgbV94bWwuc2NvcGVkRWxlbWVudCggIlN0ZE91dCIgKS53cml0ZVRleHQoIHRyaW0oIHRlc3RDYXNlU3RhdHMuc3RkT3V0ICksIFhtbEZvcm1hdHRpbmc6Ok5ld2xpbmUgKTsKKyAgICAgICAgICAgIG1feG1sLnNjb3BlZEVsZW1lbnQoICJTdGRPdXQiICkud3JpdGVUZXh0KCB0cmltKCB0ZXN0Q2FzZVN0YXRzLnN0ZE91dCApLCBmYWxzZSApOwogICAgICAgICBpZiggIXRlc3RDYXNlU3RhdHMuc3RkRXJyLmVtcHR5KCkgKQotICAgICAgICAgICAgbV94bWwuc2NvcGVkRWxlbWVudCggIlN0ZEVyciIgKS53cml0ZVRleHQoIHRyaW0oIHRlc3RDYXNlU3RhdHMuc3RkRXJyICksIFhtbEZvcm1hdHRpbmc6Ok5ld2xpbmUgKTsKKyAgICAgICAgICAgIG1feG1sLnNjb3BlZEVsZW1lbnQoICJTdGRFcnIiICkud3JpdGVUZXh0KCB0cmltKCB0ZXN0Q2FzZVN0YXRzLnN0ZEVyciApLCBmYWxzZSApOwogCiAgICAgICAgIG1feG1sLmVuZEVsZW1lbnQoKTsKICAgICB9CkBAIC0yMTksNTEgKzIxOSw2IEBACiAgICAgICAgIG1feG1sLmVuZEVsZW1lbnQoKTsKICAgICB9CiAKLSNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HKQotICAgIHZvaWQgWG1sUmVwb3J0ZXI6OmJlbmNobWFya1ByZXBhcmluZyhzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSkgewotICAgICAgICBtX3htbC5zdGFydEVsZW1lbnQoIkJlbmNobWFya1Jlc3VsdHMiKQotICAgICAgICAgICAgLndyaXRlQXR0cmlidXRlKCJuYW1lIiwgbmFtZSk7Ci0gICAgfQotCi0gICAgdm9pZCBYbWxSZXBvcnRlcjo6YmVuY2htYXJrU3RhcnRpbmcoQmVuY2htYXJrSW5mbyBjb25zdCAmaW5mbykgewotICAgICAgICBtX3htbC53cml0ZUF0dHJpYnV0ZSgic2FtcGxlcyIsIGluZm8uc2FtcGxlcykKLSAgICAgICAgICAgIC53cml0ZUF0dHJpYnV0ZSgicmVzYW1wbGVzIiwgaW5mby5yZXNhbXBsZXMpCi0gICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoIml0ZXJhdGlvbnMiLCBpbmZvLml0ZXJhdGlvbnMpCi0gICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoImNsb2NrUmVzb2x1dGlvbiIsIGluZm8uY2xvY2tSZXNvbHV0aW9uKQotICAgICAgICAgICAgLndyaXRlQXR0cmlidXRlKCJlc3RpbWF0ZWREdXJhdGlvbiIsIGluZm8uZXN0aW1hdGVkRHVyYXRpb24pCi0gICAgICAgICAgICAud3JpdGVDb21tZW50KCJBbGwgdmFsdWVzIGluIG5hbm8gc2Vjb25kcyIpOwotICAgIH0KLQotICAgIHZvaWQgWG1sUmVwb3J0ZXI6OmJlbmNobWFya0VuZGVkKEJlbmNobWFya1N0YXRzPD4gY29uc3QmIGJlbmNobWFya1N0YXRzKSB7Ci0gICAgICAgIG1feG1sLnN0YXJ0RWxlbWVudCgibWVhbiIpCi0gICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoInZhbHVlIiwgYmVuY2htYXJrU3RhdHMubWVhbi5wb2ludC5jb3VudCgpKQotICAgICAgICAgICAgLndyaXRlQXR0cmlidXRlKCJsb3dlckJvdW5kIiwgYmVuY2htYXJrU3RhdHMubWVhbi5sb3dlcl9ib3VuZC5jb3VudCgpKQotICAgICAgICAgICAgLndyaXRlQXR0cmlidXRlKCJ1cHBlckJvdW5kIiwgYmVuY2htYXJrU3RhdHMubWVhbi51cHBlcl9ib3VuZC5jb3VudCgpKQotICAgICAgICAgICAgLndyaXRlQXR0cmlidXRlKCJjaSIsIGJlbmNobWFya1N0YXRzLm1lYW4uY29uZmlkZW5jZV9pbnRlcnZhbCk7Ci0gICAgICAgIG1feG1sLmVuZEVsZW1lbnQoKTsKLSAgICAgICAgbV94bWwuc3RhcnRFbGVtZW50KCJzdGFuZGFyZERldmlhdGlvbiIpCi0gICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoInZhbHVlIiwgYmVuY2htYXJrU3RhdHMuc3RhbmRhcmREZXZpYXRpb24ucG9pbnQuY291bnQoKSkKLSAgICAgICAgICAgIC53cml0ZUF0dHJpYnV0ZSgibG93ZXJCb3VuZCIsIGJlbmNobWFya1N0YXRzLnN0YW5kYXJkRGV2aWF0aW9uLmxvd2VyX2JvdW5kLmNvdW50KCkpCi0gICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoInVwcGVyQm91bmQiLCBiZW5jaG1hcmtTdGF0cy5zdGFuZGFyZERldmlhdGlvbi51cHBlcl9ib3VuZC5jb3VudCgpKQotICAgICAgICAgICAgLndyaXRlQXR0cmlidXRlKCJjaSIsIGJlbmNobWFya1N0YXRzLnN0YW5kYXJkRGV2aWF0aW9uLmNvbmZpZGVuY2VfaW50ZXJ2YWwpOwotICAgICAgICBtX3htbC5lbmRFbGVtZW50KCk7Ci0gICAgICAgIG1feG1sLnN0YXJ0RWxlbWVudCgib3V0bGllcnMiKQotICAgICAgICAgICAgLndyaXRlQXR0cmlidXRlKCJ2YXJpYW5jZSIsIGJlbmNobWFya1N0YXRzLm91dGxpZXJWYXJpYW5jZSkKLSAgICAgICAgICAgIC53cml0ZUF0dHJpYnV0ZSgibG93TWlsZCIsIGJlbmNobWFya1N0YXRzLm91dGxpZXJzLmxvd19taWxkKQotICAgICAgICAgICAgLndyaXRlQXR0cmlidXRlKCJsb3dTZXZlcmUiLCBiZW5jaG1hcmtTdGF0cy5vdXRsaWVycy5sb3dfc2V2ZXJlKQotICAgICAgICAgICAgLndyaXRlQXR0cmlidXRlKCJoaWdoTWlsZCIsIGJlbmNobWFya1N0YXRzLm91dGxpZXJzLmhpZ2hfbWlsZCkKLSAgICAgICAgICAgIC53cml0ZUF0dHJpYnV0ZSgiaGlnaFNldmVyZSIsIGJlbmNobWFya1N0YXRzLm91dGxpZXJzLmhpZ2hfc2V2ZXJlKTsKLSAgICAgICAgbV94bWwuZW5kRWxlbWVudCgpOwotICAgICAgICBtX3htbC5lbmRFbGVtZW50KCk7Ci0gICAgfQotCi0gICAgdm9pZCBYbWxSZXBvcnRlcjo6YmVuY2htYXJrRmFpbGVkKHN0ZDo6c3RyaW5nIGNvbnN0ICZlcnJvcikgewotICAgICAgICBtX3htbC5zY29wZWRFbGVtZW50KCJmYWlsZWQiKS4KLSAgICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCJtZXNzYWdlIiwgZXJyb3IpOwotICAgICAgICBtX3htbC5lbmRFbGVtZW50KCk7Ci0gICAgfQotI2VuZGlmIC8vIENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HCi0KICAgICBDQVRDSF9SRUdJU1RFUl9SRVBPUlRFUiggInhtbCIsIFhtbFJlcG9ydGVyICkKIAogfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl94bWwuaCBiL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX3htbC5oCmluZGV4IDViNmJhMzEuLjc5MjZmOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX3htbC5oCisrKyBiL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX3htbC5oCkBAIC01MCwxMyArNTAsNiBAQAogCiAgICAgICAgIHZvaWQgdGVzdFJ1bkVuZGVkKFRlc3RSdW5TdGF0cyBjb25zdCYgdGVzdFJ1blN0YXRzKSBvdmVycmlkZTsKIAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcpCi0gICAgICAgIHZvaWQgYmVuY2htYXJrUHJlcGFyaW5nKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lKSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBiZW5jaG1hcmtTdGFydGluZyhCZW5jaG1hcmtJbmZvIGNvbnN0Jikgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgYmVuY2htYXJrRW5kZWQoQmVuY2htYXJrU3RhdHM8PiBjb25zdCYpIG92ZXJyaWRlOwotICAgICAgICB2b2lkIGJlbmNobWFya0ZhaWxlZChzdGQ6OnN0cmluZyBjb25zdCYpIG92ZXJyaWRlOwotI2VuZGlmIC8vIENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HCi0KICAgICBwcml2YXRlOgogICAgICAgICBUaW1lciBtX3Rlc3RDYXNlVGltZXI7CiAgICAgICAgIFhtbFdyaXRlciBtX3htbDsKZGlmZiAtLWdpdCBhL21pc2MvYXBwdmV5b3JNZXJnZUNvdmVyYWdlU2NyaXB0LnB5IGIvbWlzYy9hcHB2ZXlvck1lcmdlQ292ZXJhZ2VTY3JpcHQucHkKaW5kZXggOTNhNDdmZi4uYTc0ZTZlMCAxMDA2NDQKLS0tIGEvbWlzYy9hcHB2ZXlvck1lcmdlQ292ZXJhZ2VTY3JpcHQucHkKKysrIGIvbWlzYy9hcHB2ZXlvck1lcmdlQ292ZXJhZ2VTY3JpcHQucHkKQEAgLTQsNiArNCw2IEBACiBpbXBvcnQgc3VicHJvY2VzcwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGNvdl9maWxlcyA9IGxpc3QoZ2xvYi5nbG9iKCdwcm9qZWN0cy9jb3YtcmVwb3J0Ki5iaW4nKSkKKyAgICBjb3ZfZmlsZXMgPSBsaXN0KGdsb2IuZ2xvYignY292LXJlcG9ydCouYmluJykpCiAgICAgYmFzZV9jbWQgPSBbJ09wZW5DcHBDb3ZlcmFnZScsICctLXF1aWV0JywgJy0tZXhwb3J0X3R5cGU9Y29iZXJ0dXJhOmNvYmVydHVyYS54bWwnXSArIFsnLS1pbnB1dF9jb3ZlcmFnZT17fScuZm9ybWF0KGYpIGZvciBmIGluIGNvdl9maWxlc10KLSAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoYmFzZV9jbWQpCisgICAgc3VicHJvY2Vzcy5jYWxsKGJhc2VfY21kKQpkaWZmIC0tZ2l0IGEvbWlzYy9jb3ZlcmFnZS1oZWxwZXIuY3BwIGIvbWlzYy9jb3ZlcmFnZS1oZWxwZXIuY3BwCmluZGV4IGEzMWU5MjcuLmE2NjQzODMgMTAwNjQ0Ci0tLSBhL21pc2MvY292ZXJhZ2UtaGVscGVyLmNwcAorKysgYi9taXNjL2NvdmVyYWdlLWhlbHBlci5jcHAKQEAgLTI5LDggKzI5LDcgQEAKICAgICAgICAgICAgIGVzY2FwZWQuYXBwZW5kKG51bV9iYWNrc2xhc2hlcyAqIDIsICdcXCcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gZWxzZSBpZiAoKml0ID09ICciJykgewotICAgICAgICAgICAgZXNjYXBlZC5hcHBlbmQoKG51bV9iYWNrc2xhc2hlcyArIDEpICogMiwgJ1xcJyk7Ci0gICAgICAgICAgICBlc2NhcGVkLnB1c2hfYmFjaygnIicpOworICAgICAgICAgICAgZXNjYXBlZC5hcHBlbmQobnVtX2JhY2tzbGFzaGVzICogMiArIDEsICdcXCcpOwogICAgICAgICAgICAgZXNjYXBlZC5wdXNoX2JhY2soKml0KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGVzY2FwZWQuYXBwZW5kKG51bV9iYWNrc2xhc2hlcywgJ1xcJyk7CkBAIC05MCwzMCArODksMjcgQEAKICAgICByZXR1cm4gcGF0aDsKIH0KIAotaW50IGV4ZWNfY21kKHN0ZDo6c3RyaW5nIGNvbnN0JiBjbWQsIGludCBsb2dfbnVtLCBzdGQ6OnN0cmluZyBjb25zdCYgcGF0aCkgewordm9pZCBleGVjX2NtZChzdGQ6OnN0cmluZyBjb25zdCYgY21kLCBpbnQgbG9nX251bSwgc3RkOjpzdHJpbmcgY29uc3QmIHBhdGgpIHsKICAgICBzdGQ6OmFycmF5PGNoYXIsIDEyOD4gYnVmZmVyOwotCisjaWYgZGVmaW5lZChfV0lOMzIpCiAgICAgLy8gY21kIGhhcyBhbHJlYWR5IGJlZW4gZXNjYXBlZCBvdXRzaWRlIHRoaXMgZnVuY3Rpb24uCiAgICAgYXV0byByZWFsX2NtZCA9ICJPcGVuQ3BwQ292ZXJhZ2UgLS1leHBvcnRfdHlwZSBiaW5hcnk6Y292LXJlcG9ydCIgKyBzdGQ6OnRvX3N0cmluZyhsb2dfbnVtKQogICAgICAgICArICIuYmluIC0tcXVpZXQgIiArICItLXNvdXJjZXMgIiArIGVzY2FwZV9hcmcocGF0aCkgKyAiIC0tY292ZXJfY2hpbGRyZW4gLS0gIiArIGNtZDsKICAgICBzdGQ6OmNvdXQgPDwgIj09PSBNYXJrZXIgPT09OiBDbWQ6ICIgPDwgcmVhbF9jbWQgPDwgJ1xuJzsKLSAgICBhdXRvIHBpcGUgPSBfcG9wZW4ocmVhbF9jbWQuY19zdHIoKSwgInIiKTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8RklMRT4gcGlwZShfcG9wZW4ocmVhbF9jbWQuY19zdHIoKSwgInIiKSwgX3BjbG9zZSk7CisjZWxzZSAvLyBKdXN0IGZvciB0ZXN0aW5nLCBpbiB0aGUgcmVhbCB3b3JsZCB3ZSB3aWxsIGFsd2F5cyB3b3JrIHVuZGVyIFdJTjMyCisgICAgKHZvaWQpbG9nX251bTsgKHZvaWQpcGF0aDsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8RklMRT4gcGlwZShwb3BlbihjbWQuY19zdHIoKSwgInIiKSwgcGNsb3NlKTsKKyNlbmRpZgogCiAgICAgaWYgKCFwaXBlKSB7CiAgICAgICAgIHRocm93IHN0ZDo6cnVudGltZV9lcnJvcigicG9wZW4oKSBmYWlsZWQhIik7CiAgICAgfQotICAgIHdoaWxlICghZmVvZihwaXBlKSkgewotICAgICAgICBpZiAoZmdldHMoYnVmZmVyLmRhdGEoKSwgMTI4LCBwaXBlKSAhPSBudWxscHRyKSB7CisgICAgd2hpbGUgKCFmZW9mKHBpcGUuZ2V0KCkpKSB7CisgICAgICAgIGlmIChmZ2V0cyhidWZmZXIuZGF0YSgpLCAxMjgsIHBpcGUuZ2V0KCkpICE9IG51bGxwdHIpIHsKICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBidWZmZXIuZGF0YSgpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgYXV0byByZXQgPSBfcGNsb3NlKHBpcGUpOwotICAgIGlmIChyZXQgPT0gLTEpIHsKLSAgICAgICAgdGhyb3cgc3RkOjpydW50aW1lX2Vycm9yKCJ1bmRlcmx5aW5nIGVycm9yIGluIHBjbG9zZSgpIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKIH0KIAogLy8gYXJndiBzaG91bGQgYmU6CkBAIC0xMjgsNyArMTI0LDcgQEAKICAgICBhc3NlcnQoc2VwIC0gYmVnaW4oYXJncykgPT0gMiAmJiAiU3RydWN0dXJlIGRpZmZlcnMgZnJvbSBleHBlY3RlZCEiKTsKIAogICAgIGF1dG8gbnVtID0gcGFyc2VfbG9nX2ZpbGVfYXJnKGFyZ3NbMV0pOwotCisgICAgCiAgICAgYXV0byBjbWRsaW5lID0gc3RkOjphY2N1bXVsYXRlKCsrc2VwLCBlbmQoYXJncyksIHN0ZDo6c3RyaW5ne30sIFtdIChjb25zdCBzdGQ6OnN0cmluZyYgbGhzLCBjb25zdCBzdGQ6OnN0cmluZyYgcmhzKSB7CiAgICAgICAgIHJldHVybiBsaHMgKyAnICcgKyBlc2NhcGVfYXJnKHJocyk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9DTWFrZUxpc3RzLnR4dCBiL3Byb2plY3RzL0NNYWtlTGlzdHMudHh0CmluZGV4IDBhYWZjMTcuLjNmYmQ5YjQgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL0NNYWtlTGlzdHMudHh0CisrKyBiL3Byb2plY3RzL0NNYWtlTGlzdHMudHh0CkBAIC0xNywxNiArMTcsMTEgQEAKIHNldChURVNUX1NPVVJDRVMKICAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9UZXN0TWFpbi5jcHAKICAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAKLSAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9JbnRyb3NwZWN0aXZlVGVzdHMvRGV0YWlscy50ZXN0cy5jcHAKICAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwCi0gICAgICAgICR7U0VMRl9URVNUX0RJUn0vSW50cm9zcGVjdGl2ZVRlc3RzL0ludGVybmFsQmVuY2htYXJrLnRlc3RzLmNwcAogICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAKLSAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9JbnRyb3NwZWN0aXZlVGVzdHMvUmFuZG9tTnVtYmVyR2VuZXJhdGlvbi50ZXN0cy5jcHAKICAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9JbnRyb3NwZWN0aXZlVGVzdHMvVGFnLnRlc3RzLmNwcAogICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwCi0gICAgICAgICR7U0VMRl9URVNUX0RJUn0vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZ01hbmlwLnRlc3RzLmNwcAogICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwCi0gICAgICAgICR7U0VMRl9URVNUX0RJUn0vSW50cm9zcGVjdGl2ZVRlc3RzL1RvU3RyaW5nLnRlc3RzLmNwcAogICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvQXBwcm94LnRlc3RzLmNwcAogICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvQkRELnRlc3RzLmNwcAogICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvQmVuY2htYXJrLnRlc3RzLmNwcApAQCAtMzksNyArMzQsNiBAQAogICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAKICAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwCiAgICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcAotICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvVG9TdHJpbmdCeXRlLnRlc3RzLmNwcAogICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvVG9TdHJpbmdDaHJvbm8udGVzdHMuY3BwCiAgICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwCiAgICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9Ub1N0cmluZ09wdGlvbmFsLnRlc3RzLmNwcApAQCAtODQsMzMgKzc4LDYgQEAKIAogCiAjIFBsZWFzZSBrZWVwIHRoZXNlIG9yZGVyZWQgYWxwaGFiZXRpY2FsbHkKLXNldChCRU5DSE1BUktfSEVBREVSUwotCQkke0hFQURFUl9ESVJ9L2ludGVybmFsL2JlbmNobWFyay9jYXRjaF9iZW5jaG1hcmsuaHBwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvYmVuY2htYXJrL2NhdGNoX2Nocm9ub21ldGVyLmhwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2JlbmNobWFyay9jYXRjaF9jbG9jay5ocHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9iZW5jaG1hcmsvY2F0Y2hfY29uc3RydWN0b3IuaHBwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvYmVuY2htYXJrL2NhdGNoX2Vudmlyb25tZW50LmhwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2JlbmNobWFyay9jYXRjaF9lc3RpbWF0ZS5ocHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9iZW5jaG1hcmsvY2F0Y2hfZXhlY3V0aW9uX3BsYW4uaHBwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvYmVuY2htYXJrL2NhdGNoX29wdGltaXplci5ocHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9iZW5jaG1hcmsvY2F0Y2hfb3V0bGllcl9jbGFzc2lmaWNhdGlvbi5ocHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9iZW5jaG1hcmsvY2F0Y2hfc2FtcGxlX2FuYWx5c2lzLmhwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2JlbmNobWFyay9kZXRhaWwvY2F0Y2hfYW5hbHlzZS5ocHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX2JlbmNobWFya19mdW5jdGlvbi5ocHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX2NvbXBsZXRlX2ludm9rZS5ocHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX2VzdGltYXRlX2Nsb2NrLmhwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2JlbmNobWFyay9kZXRhaWwvY2F0Y2hfbWVhc3VyZS5ocHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX3JlcGVhdC5ocHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX3J1bl9mb3JfYXRfbGVhc3QuaHBwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvYmVuY2htYXJrL2RldGFpbC9jYXRjaF9zdGF0cy5ocHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9iZW5jaG1hcmsvZGV0YWlsL2NhdGNoX3RpbWluZy5ocHAKLSkKLXNldChCRU5DSE1BUktfU09VUkNFUwotICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvYmVuY2htYXJrL2RldGFpbC9jYXRjaF9zdGF0cy5jcHAKLSkKLQotU09VUkNFX0dST1VQKCJiZW5jaG1hcmsiIEZJTEVTICR7QkVOQ0hNQVJLX0hFQURFUlN9ICR7QkVOQ0hNQVJLX1NPVVJDRVN9KQotCiBzZXQoSU5URVJOQUxfSEVBREVSUwogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2FwcHJveC5oCiAgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfYXNzZXJ0aW9uaGFuZGxlci5oCkBAIC0xMzAsNyArOTcsNiBAQAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2RlY29tcG9zZXIuaAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2RlZmF1bHRfbWFpbi5ocHAKICAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9lbmZvcmNlLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9lbnVtX3ZhbHVlc19yZWdpc3RyeS5oCiAgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfZXJybm9fZ3VhcmQuaAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2V4Y2VwdGlvbl90cmFuc2xhdG9yX3JlZ2lzdHJ5LmgKICAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9leHRlcm5hbF9pbnRlcmZhY2VzLmgKQEAgLTE0MSw3ICsxMDcsNiBAQAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2ltcGwuaHBwCiAgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19jYXB0dXJlLmgKICAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2NvbmZpZy5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19lbnVtX3ZhbHVlc19yZWdpc3RyeS5oCiAgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19leGNlcHRpb24uaAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfcmVnaXN0cnlfaHViLmgKICAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3JlcG9ydGVyLmgKQEAgLTE1MSw3ICsxMTYsNiBAQAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2xlYWtfZGV0ZWN0b3IuaAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2xpc3QuaAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX21hdGNoZXJzLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9tYXRjaGVyc19leGNlcHRpb24uaHBwCiAgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnNfZmxvYXRpbmcuaAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX21hdGNoZXJzX2dlbmVyaWMuaHBwCiAgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnNfc3RyaW5nLmgKQEAgLTE3MSw2ICsxMzUsNyBAQAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3JlcG9ydGVyX3JlZ2lzdHJ5LmgKICAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9yZXN1bHRfdHlwZS5oCiAgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfcnVuX2NvbnRleHQuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2JlbmNobWFyay5oCiAgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfc2VjdGlvbi5oCiAgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfc2VjdGlvbl9pbmZvLmgKICAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9zZXNzaW9uLmgKQEAgLTE5NCw2ICsxNTksNyBAQAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3RvX3N0cmluZy5ocHAKICAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF90b3N0cmluZy5oCiAgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdG90YWxzLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF90eXBlX3RyYWl0cy5ocHAKICAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF91bmNhdWdodF9leGNlcHRpb25zLmgKICAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF91c2VyX2ludGVyZmFjZXMuaAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3ZlcnNpb24uaApAQCAtMjA1LDYgKzE3MSw3IEBACiAgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfYXBwcm94LmNwcAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2Fzc2VydGlvbmhhbmRsZXIuY3BwCiAgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfYXNzZXJ0aW9ucmVzdWx0LmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2JlbmNobWFyay5jcHAKICAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9jYXB0dXJlX21hdGNoZXJzLmNwcAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2NvbW1hbmRsaW5lLmNwcAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2NvbW1vbi5jcHAKQEAgLTIxNSw3ICsxODIsNiBAQAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2RlYnVnZ2VyLmNwcAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2RlY29tcG9zZXIuY3BwCiAgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfZW5mb3JjZS5jcHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9lbnVtX3ZhbHVlc19yZWdpc3RyeS5jcHAKICAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9lcnJub19ndWFyZC5jcHAKICAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9leGNlcHRpb25fdHJhbnNsYXRvcl9yZWdpc3RyeS5jcHAKICAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9mYXRhbF9jb25kaXRpb24uY3BwCkBAIC0yMzAsNyArMTk2LDYgQEAKICAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9saXN0LmNwcAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2xlYWtfZGV0ZWN0b3IuY3BwCiAgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnMuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnNfZXhjZXB0aW9uLmNwcAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX21hdGNoZXJzX2Zsb2F0aW5nLmNwcAogICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX21hdGNoZXJzX2dlbmVyaWMuY3BwCiAgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnNfc3RyaW5nLmNwcApAQCAtMjgyLDcgKzI0Nyw2IEBACiAgICAgICAgICR7SEVBREVSX0RJUn0vcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX3RhcC5ocHAKICAgICAgICAgJHtIRUFERVJfRElSfS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwCiAgICAgICAgICR7SEVBREVSX0RJUn0vcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX3htbC5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX3NvbmFycXViZS5ocHAKICAgICAgICAgKQogc2V0KFJFUE9SVEVSX1NPVVJDRVMKICAgICAgICAgJHtIRUFERVJfRElSfS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfYmFzZXMuY3BwCkBAIC0zMDEsOSArMjY1LDcgQEAKICAgICAgICAgJHtFWFRFUk5BTF9IRUFERVJTfQogICAgICAgICAke0lOVEVSTkFMX0hFQURFUlN9CiAgICAgICAgICR7UkVQT1JURVJfSEVBREVSU30KLQkJJHtCRU5DSE1BUktfSEVBREVSU30KLSAgICAgICAgJHtCRU5DSE1BUktfU09VUkNFU30KLSkKKyAgICAgICAgKQogCiAjIFByb3ZpZGUgc29tZSBncm91cGluZ3MgZm9yIElERXMKIFNPVVJDRV9HUk9VUCgiVGVzdHMiIEZJTEVTICR7VEVTVF9TT1VSQ0VTfSkKQEAgLTMxNCwzMSArMjc2LDE5IEBACiBhZGRfZXhlY3V0YWJsZShTZWxmVGVzdCAke1RFU1RfU09VUkNFU30gJHtJTVBMX1NPVVJDRVN9ICR7UkVQT1JURVJfU09VUkNFU30gJHtTVVJST0dBVEVfU09VUkNFU30gJHtIRUFERVJTfSkKIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKFNlbGZUZXN0IFBSSVZBVEUgJHtIRUFERVJfRElSfSkKIAotIyBJdCB0b29rIENNYWtlIHVudGlsIDMuOCB0byBhYmFuZG9uIHRoZSBkb29tZWQgYXBwcm9hY2ggb2YgZW51bWVyYXRpbmcKLSMgcmVxdWlyZWQgZmVhdHVyZXMgc28gd2UganVzdCBsaXN0IEMrKzExIGZlYXR1cmVzIHRvIHN1cHBvcnQgb2xkZXIgb25lcy4KLXRhcmdldF9jb21waWxlX2ZlYXR1cmVzKFNlbGZUZXN0Ci0gIFBSSVZBVEUKLSAgICBjeHhfYWxpZ25hcwotICAgIGN4eF9hbGlnbm9mCi0gICAgY3h4X2F0dHJpYnV0ZXMKLSAgICBjeHhfYXV0b190eXBlCi0gICAgY3h4X2NvbnN0ZXhwcgotICAgIGN4eF9kZWZhdWx0ZWRfZnVuY3Rpb25zCi0gICAgY3h4X2RlbGV0ZWRfZnVuY3Rpb25zCi0gICAgY3h4X2ZpbmFsCi0gICAgY3h4X2xhbWJkYXMKLSAgICBjeHhfbm9leGNlcHQKLSAgICBjeHhfb3ZlcnJpZGUKLSAgICBjeHhfcmFuZ2VfZm9yCi0gICAgY3h4X3J2YWx1ZV9yZWZlcmVuY2VzCi0gICAgY3h4X3N0YXRpY19hc3NlcnQKLSAgICBjeHhfc3Ryb25nX2VudW1zCi0gICAgY3h4X3RyYWlsaW5nX3JldHVybl90eXBlcwotICAgIGN4eF91bmljb2RlX2xpdGVyYWxzCi0gICAgY3h4X3VzZXJfbGl0ZXJhbHMKLSAgICBjeHhfdmFyaWFkaWNfbWFjcm9zCi0pCitpZihVU0VfQ1BQMTcpCisgICAgbWVzc2FnZShTVEFUVVMgIkVuYWJsaW5nIEMrKzE3IikKKyAgICBzZXRfcHJvcGVydHkoVEFSR0VUIFNlbGZUZXN0IFBST1BFUlRZIENYWF9TVEFOREFSRCAxNykKK2Vsc2VpZihVU0VfQ1BQMTQpCisgICAgbWVzc2FnZShTVEFUVVMgIkVuYWJsaW5nIEMrKzE0IikKKyAgICBzZXRfcHJvcGVydHkoVEFSR0VUIFNlbGZUZXN0IFBST1BFUlRZIENYWF9TVEFOREFSRCAxNCkKK2Vsc2UoKQorICAgIG1lc3NhZ2UoU1RBVFVTICJFbmFibGluZyBDKysxMSIpCisgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBTZWxmVGVzdCBQUk9QRVJUWSBDWFhfU1RBTkRBUkQgMTEpCitlbmRpZigpCiAKK3NldF9wcm9wZXJ0eShUQVJHRVQgU2VsZlRlc3QgUFJPUEVSVFkgQ1hYX1NUQU5EQVJEX1JFUVVJUkVEIE9OKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBTZWxmVGVzdCBQUk9QRVJUWSBDWFhfRVhURU5TSU9OUyBPRkYpCiAKIGlmIChDQVRDSF9FTkFCTEVfQ09WRVJBR0UpCiAgICAgc2V0KEVOQUJMRV9DT1ZFUkFHRSBPTiBDQUNIRSBCT09MICJFbmFibGUgY292ZXJhZ2UgYnVpbGQuIiBGT1JDRSkKQEAgLTM1Miw3ICszMDIsNyBAQAogaWYgKCBDTUFLRV9DWFhfQ09NUElMRVJfSUQgTUFUQ0hFUyAiQ2xhbmd8QXBwbGVDbGFuZ3xHTlUiICkKICAgICB0YXJnZXRfY29tcGlsZV9vcHRpb25zKCBTZWxmVGVzdCBQUklWQVRFIC1XYWxsIC1XZXh0cmEgLVd1bnJlYWNoYWJsZS1jb2RlIC1XcGVkYW50aWMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyApCiAgICAgaWYgKENBVENIX0VOQUJMRV9XRVJST1IpCi0gICAgICAgIHRhcmdldF9jb21waWxlX29wdGlvbnMoIFNlbGZUZXN0IFBSSVZBVEUgLVdlcnJvciApCisgICAgICAgIHRhcmdldF9jb21waWxlX29wdGlvbnMoIFNlbGZUZXN0IFBSSVZBVEUgLVdlcnJvcikKICAgICBlbmRpZigpCiBlbmRpZigpCiAjIENsYW5nIHNwZWNpZmljIG9wdGlvbnMgZ28gaGVyZQpAQCAtMzk4LDE5ICszNDgsOCBAQAogYWRkX3Rlc3QoTkFNRSBOb0Fzc2VydGlvbnMgQ09NTUFORCAkPFRBUkdFVF9GSUxFOlNlbGZUZXN0PiAtdyBOb0Fzc2VydGlvbnMpCiBzZXRfdGVzdHNfcHJvcGVydGllcyhOb0Fzc2VydGlvbnMgUFJPUEVSVElFUyBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiTm8gYXNzZXJ0aW9ucyBpbiB0ZXN0IGNhc2UiKQogCi1hZGRfdGVzdChOQU1FIE5vVGVzdCBDT01NQU5EICQ8VEFSR0VUX0ZJTEU6U2VsZlRlc3Q+IFRyYWNrZXIsICJfX19ub25leGlzdGVudF90ZXN0X19fIikKLXNldF90ZXN0c19wcm9wZXJ0aWVzKE5vVGVzdCBQUk9QRVJUSUVTCi0gICAgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIk5vIHRlc3QgY2FzZXMgbWF0Y2hlZCAnX19fbm9uZXhpc3RlbnRfdGVzdF9fXyciCi0gICAgRkFJTF9SRUdVTEFSX0VYUFJFU1NJT04gIk5vIHRlc3RzIHJhbiIKLSkKLQotYWRkX3Rlc3QoTkFNRSBXYXJuQWJvdXROb1Rlc3RzIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtUCAke0NBVENIX0RJUn0vcHJvamVjdHMvU2VsZlRlc3QvV2FybkFib3V0Tm9UZXN0cy5jbWFrZSAkPFRBUkdFVF9GSUxFOlNlbGZUZXN0PikKLQotYWRkX3Rlc3QoTkFNRSBVbm1hdGNoZWRPdXRwdXRGaWx0ZXIgQ09NTUFORCAkPFRBUkdFVF9GSUxFOlNlbGZUZXN0PiBbdGhpcy10YWctZG9lcy1ub3QtZXhpc3RdIC13IE5vVGVzdHMpCi1zZXRfdGVzdHNfcHJvcGVydGllcyhVbm1hdGNoZWRPdXRwdXRGaWx0ZXIKLSAgUFJPUEVSVElFUwotICAgIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJObyB0ZXN0IGNhc2VzIG1hdGNoZWQgJ1xcW3RoaXMtdGFnLWRvZXMtbm90LWV4aXN0XFxdJyIKLSkKK2FkZF90ZXN0KE5BTUUgTm9UZXN0IENPTU1BTkQgJDxUQVJHRVRfRklMRTpTZWxmVGVzdD4gLXcgTm9UZXN0cyAiX19fbm9uZXhpc3RlbnRfdGVzdF9fXyIpCitzZXRfdGVzdHNfcHJvcGVydGllcyhOb1Rlc3QgUFJPUEVSVElFUyBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiTm8gdGVzdCBjYXNlcyBtYXRjaGVkIikKIAogYWRkX3Rlc3QoTkFNRSBGaWx0ZXJlZFNlY3Rpb24tMSBDT01NQU5EICQ8VEFSR0VUX0ZJTEU6U2VsZlRlc3Q+IFwjMTM5NCAtYyBSdW5TZWN0aW9uKQogc2V0X3Rlc3RzX3Byb3BlcnRpZXMoRmlsdGVyZWRTZWN0aW9uLTEgUFJPUEVSVElFUyBGQUlMX1JFR1VMQVJfRVhQUkVTU0lPTiAiTm8gdGVzdHMgcmFuIikKQEAgLTQyMSwzNiArMzYwLDYgQEAKIGFkZF90ZXN0KE5BTUUgQXBwcm92YWxUZXN0cyBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7Q0FUQ0hfRElSfS9zY3JpcHRzL2FwcHJvdmFsVGVzdHMucHkgJDxUQVJHRVRfRklMRTpTZWxmVGVzdD4pCiBzZXRfdGVzdHNfcHJvcGVydGllcyhBcHByb3ZhbFRlc3RzIFBST1BFUlRJRVMgRkFJTF9SRUdVTEFSX0VYUFJFU1NJT04gIlJlc3VsdHMgZGlmZmVyZWQiKQogCi1hZGRfdGVzdChOQU1FIFJlZ3Jlc3Npb25DaGVjay0xNjcwIENPTU1BTkQgJDxUQVJHRVRfRklMRTpTZWxmVGVzdD4gIiMxNjcwIHJlZ3Jlc3Npb24gY2hlY2siIC1jIEEgLXIgY29tcGFjdCkKLXNldF90ZXN0c19wcm9wZXJ0aWVzKFJlZ3Jlc3Npb25DaGVjay0xNjcwIFBST1BFUlRJRVMgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIlBhc3NlZCAxIHRlc3QgY2FzZSB3aXRoIDIgYXNzZXJ0aW9ucy4iKQotCi1hZGRfdGVzdChOQU1FIFZlcnNpb25DaGVjayBDT01NQU5EICQ8VEFSR0VUX0ZJTEU6U2VsZlRlc3Q+IC1oKQotc2V0X3Rlc3RzX3Byb3BlcnRpZXMoVmVyc2lvbkNoZWNrIFBST1BFUlRJRVMgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIkNhdGNoIHYke1BST0pFQ1RfVkVSU0lPTn0iKQotCi1hZGRfdGVzdChOQU1FIExpYklkZW50aXR5VGVzdCBDT01NQU5EICQ8VEFSR0VUX0ZJTEU6U2VsZlRlc3Q+IC0tbGliaWRlbnRpZnkpCi1zZXRfdGVzdHNfcHJvcGVydGllcyhMaWJJZGVudGl0eVRlc3QgUFJPUEVSVElFUyBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiZGVzY3JpcHRpb246ICAgIEEgQ2F0Y2gyIHRlc3QgZXhlY3V0YWJsZSIpCi0KLWFkZF90ZXN0KE5BTUUgRmlsZW5hbWVBc1RhZ3NUZXN0IENPTU1BTkQgJDxUQVJHRVRfRklMRTpTZWxmVGVzdD4gLVwjIC0tbGlzdC10YWdzKQotc2V0X3Rlc3RzX3Byb3BlcnRpZXMoRmlsZW5hbWVBc1RhZ3NUZXN0IFBST1BFUlRJRVMgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIlxcWyNBcHByb3gudGVzdHNcXF0iKQotCi1hZGRfdGVzdChOQU1FIEVzY2FwZVNwZWNpYWxDaGFyYWN0ZXJzSW5UZXN0TmFtZXMgQ09NTUFORCAkPFRBUkdFVF9GSUxFOlNlbGZUZXN0PiAiVGVzdCB3aXRoIHNwZWNpYWxcXCwgY2hhcmFjdGVycyBcImluIG5hbWUiKQotc2V0X3Rlc3RzX3Byb3BlcnRpZXMoRXNjYXBlU3BlY2lhbENoYXJhY3RlcnNJblRlc3ROYW1lcyBQUk9QRVJUSUVTIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICIxIGFzc2VydGlvbiBpbiAxIHRlc3QgY2FzZSIpCi0KLWFkZF90ZXN0KE5BTUUgVGVzdHNJbkZpbGU6OlNpbXBsZVNwZWNzIENPTU1BTkQgJDxUQVJHRVRfRklMRTpTZWxmVGVzdD4gIi1mICR7Q0FUQ0hfRElSfS9wcm9qZWN0cy9TZWxmVGVzdC9NaXNjL3BsYWluLW9sZC10ZXN0cy5pbnB1dCIpCi1zZXRfdGVzdHNfcHJvcGVydGllcyhUZXN0c0luRmlsZTo6U2ltcGxlU3BlY3MgUFJPUEVSVElFUyBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiNiBhc3NlcnRpb25zIGluIDIgdGVzdCBjYXNlcyIpCi0KLWFkZF90ZXN0KE5BTUUgVGVzdHNJbkZpbGU6OkVzY2FwZVNwZWNpYWxDaGFyYWN0ZXJzIENPTU1BTkQgJDxUQVJHRVRfRklMRTpTZWxmVGVzdD4gIi1mICR7Q0FUQ0hfRElSfS9wcm9qZWN0cy9TZWxmVGVzdC9NaXNjL3NwZWNpYWwtY2hhcmFjdGVycy1pbi1maWxlLmlucHV0IikKLXNldF90ZXN0c19wcm9wZXJ0aWVzKFRlc3RzSW5GaWxlOjpFc2NhcGVTcGVjaWFsQ2hhcmFjdGVycyBQUk9QRVJUSUVTIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICIxIGFzc2VydGlvbiBpbiAxIHRlc3QgY2FzZSIpCi0KLSMgQ1Rlc3QgZG9lcyBub3QgYWxsb3cgdXMgdG8gY3JlYXRlIGFuIEFORCBvZiByZXF1aXJlZCByZWd1bGFyIGV4cHJlc3Npb25zLAotIyBzbyB3ZSBoYXZlIHRvIHNwbGl0IHRoZSB0ZXN0IGludG8gMiBwYXJ0cyBhbmQgbG9vayBmb3IgcGFydHMgb2YgdGhlIGV4cGVjdGVkCi0jIG91dHB1dCBzZXBhcmF0ZWx5LgotYWRkX3Rlc3QoTkFNRSBUZXN0c0luRmlsZTo6SW52YWxpZFRlc3ROYW1lcy0xIENPTU1BTkQgJDxUQVJHRVRfRklMRTpTZWxmVGVzdD4gIi1mICR7Q0FUQ0hfRElSfS9wcm9qZWN0cy9TZWxmVGVzdC9NaXNjL2ludmFsaWQtdGVzdC1uYW1lcy5pbnB1dCIpCi1zZXRfdGVzdHNfcHJvcGVydGllcyhUZXN0c0luRmlsZTo6SW52YWxpZFRlc3ROYW1lcy0xIFBST1BFUlRJRVMgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIkludmFsaWQgRmlsdGVyOiBcIlRlc3Qgd2l0aCBzcGVjaWFsLCBjaGFyYWN0ZXJzIGluIFxcXFxcIiBuYW1lXCIiKQotCi1hZGRfdGVzdChOQU1FIFRlc3RzSW5GaWxlOjpJbnZhbGlkVGVzdE5hbWVzLTIgQ09NTUFORCAkPFRBUkdFVF9GSUxFOlNlbGZUZXN0PiAiLWYgJHtDQVRDSF9ESVJ9L3Byb2plY3RzL1NlbGZUZXN0L01pc2MvaW52YWxpZC10ZXN0LW5hbWVzLmlucHV0IikKLXNldF90ZXN0c19wcm9wZXJ0aWVzKFRlc3RzSW5GaWxlOjpJbnZhbGlkVGVzdE5hbWVzLTIgUFJPUEVSVElFUyBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiTm8gdGVzdHMgcmFuIikKLQogCiBpZiAoQ0FUQ0hfVVNFX1ZBTEdSSU5EKQogICAgIGFkZF90ZXN0KE5BTUUgVmFsZ3JpbmRSdW5UZXN0cyBDT01NQU5EIHZhbGdyaW5kIC0tbGVhay1jaGVjaz1mdWxsIC0tZXJyb3ItZXhpdGNvZGU9MSAkPFRBUkdFVF9GSUxFOlNlbGZUZXN0PikKZGlmZiAtLWdpdCBhL3Byb2plY3RzL0V4dHJhVGVzdHMvQ01ha2VMaXN0cy50eHQgYi9wcm9qZWN0cy9FeHRyYVRlc3RzL0NNYWtlTGlzdHMudHh0CmluZGV4IDBlNTE0ZDkuLmMwZGQ4MmQgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL0V4dHJhVGVzdHMvQ01ha2VMaXN0cy50eHQKKysrIGIvcHJvamVjdHMvRXh0cmFUZXN0cy9DTWFrZUxpc3RzLnR4dApAQCAtMTE2LDM1ICsxMTYsNiBAQAogKQogCiAKLWFkZF9leGVjdXRhYmxlKEJlbmNobWFya2luZ01hY3JvcyAke1RFU1RTX0RJUn0vWDIwLUJlbmNobWFya2luZ01hY3Jvcy5jcHApCi10YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyggQmVuY2htYXJraW5nTWFjcm9zIFBSSVZBVEUgQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcgKQotCi1hZGRfdGVzdChOQU1FIEJlbmNobWFya2luZ01hY3JvcyBDT01NQU5EIEJlbmNobWFya2luZ01hY3JvcyAtciBjb25zb2xlIC1zKQotc2V0X3Rlc3RzX3Byb3BlcnRpZXMoCi0gICAgQmVuY2htYXJraW5nTWFjcm9zCi0gIFBST1BFUlRJRVMKLSAgICBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiYmVuY2htYXJrIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcyAgICAgICBpdGVyYXRpb25zICAgIGVzdGltYXRlZCIKLSkKLQotIyBUaGlzIHRlc3QgdG91Y2hlcyB3aW5kb3dzLmgsIHNvIGl0IHNob3VsZCBvbmx5IGJlIGNvbXBpbGVkIHVuZGVyIG1zdmMKLWlmIChNU1ZDKQotICAgICMgVGhpcyB0ZXN0IGZhaWxzIGlmIGl0IGRvZXMgbm90IGNvbXBpbGUgYW5kIHN1Y2NlZWRzIG90aGVyd2lzZQotICAgIGFkZF9leGVjdXRhYmxlKFdpbmRvd3NIZWFkZXIgJHtURVNUU19ESVJ9L1g5MC1XaW5kb3dzSGVhZGVySW5jbHVzaW9uLmNwcCkKLSAgICBzZXRfcHJvcGVydHkoIFRBUkdFVCBXaW5kb3dzSGVhZGVyIFBST1BFUlRZIENYWF9TVEFOREFSRCAxMSApCi0gICAgc2V0X3Byb3BlcnR5KCBUQVJHRVQgV2luZG93c0hlYWRlciBQUk9QRVJUWSBDWFhfU1RBTkRBUkRfUkVRVUlSRUQgT04gKQotICAgIHNldF9wcm9wZXJ0eSggVEFSR0VUIFdpbmRvd3NIZWFkZXIgUFJPUEVSVFkgQ1hYX0VYVEVOU0lPTlMgT0ZGICkKLSAgICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyggV2luZG93c0hlYWRlciBQUklWQVRFICR7U0lOR0xFX0lOQ0xVREVfUEFUSH0gKQotICAgIGFkZF90ZXN0KE5BTUUgV2luZG93c0hlYWRlciBDT01NQU5EIFdpbmRvd3NIZWFkZXIgLXIgY29tcGFjdCkKLWVuZGlmKCkKLQotYWRkX2V4ZWN1dGFibGUoRGVidWdCcmVha01hY3JvcyAke1RFU1RTX0RJUn0vWDEyLUN1c3RvbURlYnVnQnJlYWtNYWNyby5jcHApCi1hZGRfdGVzdChOQU1FIERlYnVnQnJlYWtNYWNyb3MgQ09NTUFORCBEZWJ1Z0JyZWFrTWFjcm9zIC0tYnJlYWspCi1zZXRfdGVzdHNfcHJvcGVydGllcygKLSAgICBEZWJ1Z0JyZWFrTWFjcm9zCi0gIFBST1BFUlRJRVMKLSAgICBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiUHJldHR5IHBsZWFzZSwgYnJlYWsgaW50byBkZWJ1Z2dlciIKLSkKLQogc2V0KCBFWFRSQV9URVNUX0JJTkFSSUVTCiAgICAgUHJlZml4ZWRNYWNyb3MKICAgICBEaXNhYmxlZE1hY3JvcwpAQCAtMTUyLDggKzEyMyw2IEBACiAgICAgRGlzYWJsZWRFeGNlcHRpb25zLUN1c3RvbUhhbmRsZXIKICAgICBGYWxsYmFja1N0cmluZ2lmaWVyCiAgICAgRGlzYWJsZVN0cmluZ2lmaWNhdGlvbgotICAgIEJlbmNobWFya2luZ01hY3JvcwotICAgIERlYnVnQnJlYWtNYWNyb3MKICkKIAogIyBTaGFyZWQgY29uZmlnCkBAIC0xNjQsNCArMTMzLDMgQEAKICAgICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyggJHt0ZXN0fSBQUklWQVRFICR7U0lOR0xFX0lOQ0xVREVfUEFUSH0gKQogZW5kZm9yZWFjaCgpCiAKLQpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvRXh0cmFUZXN0cy9YMDEtUHJlZml4ZWRNYWNyb3MuY3BwIGIvcHJvamVjdHMvRXh0cmFUZXN0cy9YMDEtUHJlZml4ZWRNYWNyb3MuY3BwCmluZGV4IDNkMmFiOWMuLjc2NzFjYmMgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL0V4dHJhVGVzdHMvWDAxLVByZWZpeGVkTWFjcm9zLmNwcAorKysgYi9wcm9qZWN0cy9FeHRyYVRlc3RzL1gwMS1QcmVmaXhlZE1hY3Jvcy5jcHAKQEAgLTQ4LDcgKzQ4LDYgQEAKICAgICBDQVRDSF9DSEVDS19USEFUKCJiZGVmIiwgRXF1YWxzKCJiZGVmIikpOwogCiAgICAgQ0FUQ0hfSU5GTyggInNvbWUgaW5mbyIgKTsKLSAgICBDQVRDSF9VTlNDT1BFRF9JTkZPKCAic29tZSBpbmZvIiApOwogICAgIENBVENIX1dBUk4oICJzb21lIHdhcm4iICk7CiAgICAgQ0FUQ0hfU0VDVElPTigic29tZSBzZWN0aW9uIikgewogICAgICAgICBpbnQgaSA9IDE7CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9FeHRyYVRlc3RzL1gxMi1DdXN0b21EZWJ1Z0JyZWFrTWFjcm8uY3BwIGIvcHJvamVjdHMvRXh0cmFUZXN0cy9YMTItQ3VzdG9tRGVidWdCcmVha01hY3JvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVhYjRhMC4uMDAwMDAwMAotLS0gYS9wcm9qZWN0cy9FeHRyYVRlc3RzL1gxMi1DdXN0b21EZWJ1Z0JyZWFrTWFjcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLy8gWDEyLUN1c3RvbURlYnVnQnJlYWtNYWNyby5jcHAKLS8vIFRlc3QgdGhhdCB1c2VyLWRlZmluZWQgYENBVENIX0JSRUFLX0lOVE9fREVCVUdHRVJgIGlzIHJlc3BlY3RlZCBhbmQgdXNlZC4KLQotI2luY2x1ZGUgPGlvc3RyZWFtPgotCi12b2lkIGN1c3RvbV9kZWJ1Z19icmVhaygpIHsKLSAgICBzdGQ6OmNlcnIgPDwgIlByZXR0eSBwbGVhc2UsIGJyZWFrIGludG8gZGVidWdnZXJcbiI7Ci19Ci0KLSNkZWZpbmUgQ0FUQ0hfQlJFQUtfSU5UT19ERUJVR0dFUigpIGN1c3RvbV9kZWJ1Z19icmVhaygpCi0KLSNkZWZpbmUgQ0FUQ0hfQ09ORklHX01BSU4KLSNpbmNsdWRlIDxjYXRjaDIvY2F0Y2guaHBwPgotCi1URVNUX0NBU0UoIkZhaWxpbmcgdGVzdCB0aGF0IGJyZWFrcyBpbnRvIGRlYnVnZ2VyIiwgIlttYWNyb3NdIikgewotICAgIFJFUVVJUkUoMSA9PSAyKTsKLX0KZGlmZiAtLWdpdCBhL3Byb2plY3RzL0V4dHJhVGVzdHMvWDIwLUJlbmNobWFya2luZ01hY3Jvcy5jcHAgYi9wcm9qZWN0cy9FeHRyYVRlc3RzL1gyMC1CZW5jaG1hcmtpbmdNYWNyb3MuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTJmMDU2Li4wMDAwMDAwCi0tLSBhL3Byb2plY3RzL0V4dHJhVGVzdHMvWDIwLUJlbmNobWFya2luZ01hY3Jvcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLy8gWDIwLUJlbmNobWFya2luZ01hY3Jvcy5jcHAKLS8vIFRlc3QgdGhhdCB0aGUgYmVuY2htYXJraW5nIHN1cHBvcnQgbWFjcm9zIGNvbXBpbGUgcHJvcGVybHkgd2l0aCB0aGUgc2luZ2xlIGhlYWRlcgotCi0jZGVmaW5lIENBVENIX0NPTkZJR19NQUlOCi0jaW5jbHVkZSA8Y2F0Y2gyL2NhdGNoLmhwcD4KLQotbmFtZXNwYWNlIHsKLXN0ZDo6dWludDY0X3QgZmFjdG9yaWFsKHN0ZDo6dWludDY0X3QgbnVtYmVyKSB7Ci0gICAgaWYgKG51bWJlciA8IDIpIHsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIHJldHVybiBudW1iZXIgKiBmYWN0b3JpYWwobnVtYmVyIC0gMSk7Ci19Ci19Ci0KLVRFU1RfQ0FTRSgiQmVuY2htYXJrIGZhY3RvcmlhbCIsICJbYmVuY2htYXJrXSIpIHsKLSAgICBDSEVDSyhmYWN0b3JpYWwoMCkgPT0gMSk7Ci0gICAgLy8gc29tZSBtb3JlIGFzc2VydHMuLgotICAgIENIRUNLKGZhY3RvcmlhbCgxMCkgPT0gMzYyODgwMCk7Ci0KLSAgICBCRU5DSE1BUksoImZhY3RvcmlhbCAxMCIpIHsKLSAgICAgICAgcmV0dXJuIGZhY3RvcmlhbCgxMCk7Ci0gICAgfTsKLQotICAgIENIRUNLKGZhY3RvcmlhbCgxNCkgPT0gODcxNzgyOTEyMDB1bGwpOwotICAgIEJFTkNITUFSSygiZmFjdG9yaWFsIDE0IikgewotICAgICAgICByZXR1cm4gZmFjdG9yaWFsKDE0KTsKLSAgICB9OwotfQotCi1URVNUX0NBU0UoIkJlbmNobWFyayBjb250YWluZXJzIiwgIlsuXVtiZW5jaG1hcmtdIikgewotICAgIHN0YXRpYyBjb25zdCBpbnQgc2l6ZSA9IDEwMDsKLQotICAgIHN0ZDo6dmVjdG9yPGludD4gdjsKLSAgICBzdGQ6Om1hcDxpbnQsIGludD4gbTsKLQotICAgIFNFQ1RJT04oIndpdGhvdXQgZ2VuZXJhdG9yIikgewotICAgICAgICBCRU5DSE1BUksoIkxvYWQgdXAgYSB2ZWN0b3IiKSB7Ci0gICAgICAgICAgICB2ID0gc3RkOjp2ZWN0b3I8aW50PigpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICAgICAgdi5wdXNoX2JhY2soaSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFJFUVVJUkUodi5zaXplKCkgPT0gc2l6ZSk7Ci0KLSAgICAgICAgLy8gdGVzdCBvcHRpbWl6ZXIgY29udHJvbAotICAgICAgICBCRU5DSE1BUksoIkFkZCB1cCBhIHZlY3RvcidzIGNvbnRlbnQiKSB7Ci0gICAgICAgICAgICB1aW50NjRfdCBhZGQgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICAgICAgYWRkICs9IHZbaV07Ci0gICAgICAgICAgICByZXR1cm4gYWRkOwotICAgICAgICB9OwotCi0gICAgICAgIEJFTkNITUFSSygiTG9hZCB1cCBhIG1hcCIpIHsKLSAgICAgICAgICAgIG0gPSBzdGQ6Om1hcDxpbnQsIGludD4oKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgICAgIG0uaW5zZXJ0KHsgaSwgaSArIDEgfSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFJFUVVJUkUobS5zaXplKCkgPT0gc2l6ZSk7Ci0KLSAgICAgICAgQkVOQ0hNQVJLKCJSZXNlcnZlZCB2ZWN0b3IiKSB7Ci0gICAgICAgICAgICB2ID0gc3RkOjp2ZWN0b3I8aW50PigpOwotICAgICAgICAgICAgdi5yZXNlcnZlKHNpemUpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICAgICAgdi5wdXNoX2JhY2soaSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFJFUVVJUkUodi5zaXplKCkgPT0gc2l6ZSk7Ci0KLSAgICAgICAgQkVOQ0hNQVJLKCJSZXNpemVkIHZlY3RvciIpIHsKLSAgICAgICAgICAgIHYgPSBzdGQ6OnZlY3RvcjxpbnQ+KCk7Ci0gICAgICAgICAgICB2LnJlc2l6ZShzaXplKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgICAgIHZbaV0gPSBpOwotICAgICAgICB9OwotICAgICAgICBSRVFVSVJFKHYuc2l6ZSgpID09IHNpemUpOwotCi0gICAgICAgIGludCBhcnJheVtzaXplXTsKLSAgICAgICAgQkVOQ0hNQVJLKCJBIGZpeGVkIHNpemUgYXJyYXkgdGhhdCBzaG91bGQgcmVxdWlyZSBubyBhbGxvY2F0aW9ucyIpIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gaTsKLSAgICAgICAgfTsKLSAgICAgICAgaW50IHN1bSA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgc3VtICs9IGFycmF5W2ldOwotICAgICAgICBSRVFVSVJFKHN1bSA+IHNpemUpOwotCi0gICAgICAgIFNFQ1RJT04oIlhZWiIpIHsKLQotICAgICAgICAgICAgQkVOQ0hNQVJLX0FEVkFOQ0VEKCJMb2FkIHVwIHZlY3RvciB3aXRoIGNocm9ub21ldGVyIikoQ2F0Y2g6OkJlbmNobWFyazo6Q2hyb25vbWV0ZXIgbWV0ZXIpIHsKLSAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+IGs7Ci0gICAgICAgICAgICAgICAgbWV0ZXIubWVhc3VyZShbJl0oaW50IGlkeCkgewotICAgICAgICAgICAgICAgICAgICBrID0gc3RkOjp2ZWN0b3I8aW50PigpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGsucHVzaF9iYWNrKGlkeCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRShrLnNpemUoKSA9PSBzaXplKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGludCBydW5zID0gMDsKLSAgICAgICAgICAgIEJFTkNITUFSSygiRmlsbCB2ZWN0b3IgaW5kZXhlZCIsIGJlbmNobWFya0luZGV4KSB7Ci0gICAgICAgICAgICAgICAgdiA9IHN0ZDo6dmVjdG9yPGludD4oKTsKLSAgICAgICAgICAgICAgICB2LnJlc2l6ZShzaXplKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgdltpXSA9IGJlbmNobWFya0luZGV4OwotICAgICAgICAgICAgICAgIHJ1bnMgPSBiZW5jaG1hcmtJbmRleDsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdi5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIFJFUVVJUkUodltpXSA9PSBydW5zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIFNFQ1RJT04oIndpdGggZ2VuZXJhdG9yIikgewotICAgICAgICBhdXRvIGdlbmVyYXRlZCA9IEdFTkVSQVRFKHJhbmdlKDAsIDEwKSk7Ci0gICAgICAgIEJFTkNITUFSSygiRmlsbCB2ZWN0b3IgZ2VuZXJhdGVkIikgewotICAgICAgICAgICAgdiA9IHN0ZDo6dmVjdG9yPGludD4oKTsKLSAgICAgICAgICAgIHYucmVzaXplKHNpemUpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICAgICAgdltpXSA9IGdlbmVyYXRlZDsKLSAgICAgICAgfTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBSRVFVSVJFKHZbaV0gPT0gZ2VuZXJhdGVkKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Byb2plY3RzL0V4dHJhVGVzdHMvWDkwLVdpbmRvd3NIZWFkZXJJbmNsdXNpb24uY3BwIGIvcHJvamVjdHMvRXh0cmFUZXN0cy9YOTAtV2luZG93c0hlYWRlckluY2x1c2lvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiN2EwNzQuLjAwMDAwMDAKLS0tIGEvcHJvamVjdHMvRXh0cmFUZXN0cy9YOTAtV2luZG93c0hlYWRlckluY2x1c2lvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0vLyBYOTAtV2luZG93c0hlYWRlckluY2x1c2lvbi5jcHAKLS8vIFRlc3QgdGhhdCB0aGUgQ2F0Y2gyIGhlYWRlciBjb21waWxlcyBldmVuIGFmdGVyIGluY2x1ZGluZyB3aW5kb3dzLmgKLS8vIHdpdGhvdXQgZGVmaW5pbmcgTk9NSU5NQVggZmlyc3QuIEFzIGFuIEZZSSwgaWYgeW91IGRvIHRoYXQsIHlvdSBhcmUKLS8vIHdyb25nLgotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2RlZmluZSBDQVRDSF9DT05GSUdfTUFJTgotI2luY2x1ZGUgPGNhdGNoMi9jYXRjaC5ocHA+Ci0KLVRFU1RfQ0FTRSgiQ2F0Y2gyIGRpZCBzdXJ2aXZlIGNvbXBpbGF0aW9uIHdpdGggd2luZG93cy5oIiwgIltjb21waWxlLXRlc3RdIikgewotICAgIFNVQ0NFRUQoKTsKLX0KZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy9jb21wYWN0LnN3LmFwcHJvdmVkLnR4dCBiL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy9jb21wYWN0LnN3LmFwcHJvdmVkLnR4dAppbmRleCBjNjEwMjhhLi42ZmVkYmI5IDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9CYXNlbGluZXMvY29tcGFjdC5zdy5hcHByb3ZlZC50eHQKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL2NvbXBhY3Quc3cuYXBwcm92ZWQudHh0CkBAIC0zLDggKzMsNiBAQAogRGVjb21wb3NpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBmcHRyID09IDBsIGZvcjogMCA9PSAwCiBDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB5LnYgPT0gMCBmb3I6IDAgPT0gMAogQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMCA9PSB5LnYgZm9yOiAwID09IDAKLUNvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHkudiA9PSAwIGZvcjogMCA9PSAwCi1Db21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAwID09IHkudiBmb3I6IDAgPT0gMAogQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdDEgPT0gdDIgZm9yOiB7P30gPT0gez99CiBDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0MSAhPSB0MiBmb3I6IHs/fSAhPSB7P30KIENvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHQxIDwgdDIgZm9yOiB7P30gPCB7P30KQEAgLTE1NywzNiArMTU1LDE4IEBACiBDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDAgZm9yOiAwID09IDAKIENsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IFRlbXBsYXRlX0ZpeHR1cmVfMjxUZXN0VHlwZT46Om1fYS5zaXplKCkgPT0gMCBmb3I6IDAgPT0gMAogQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogVGVtcGxhdGVfRml4dHVyZV8yPFRlc3RUeXBlPjo6bV9hLnNpemUoKSA9PSAwIGZvcjogMCA9PSAwCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+e30ubV9hLnNpemUoKSA8IDIgZm9yOiA2IDwgMgotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogVGVtcGxhdGVfRml4dHVyZV8yPFRlc3RUeXBlPnt9Lm1fYS5zaXplKCkgPCAyIGZvcjogMiA8IDIKLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IFRlbXBsYXRlX0ZpeHR1cmVfMjxUZXN0VHlwZT57fS5tX2Euc2l6ZSgpIDwgMiBmb3I6IDYgPCAyCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+e30ubV9hLnNpemUoKSA8IDIgZm9yOiAyIDwgMgotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogVGVtcGxhdGVfRml4dHVyZV8yPFRlc3RUeXBlPnt9Lm1fYS5zaXplKCkgPj0gMiBmb3I6IDYgPj0gMgotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogVGVtcGxhdGVfRml4dHVyZV8yPFRlc3RUeXBlPnt9Lm1fYS5zaXplKCkgPj0gMiBmb3I6IDIgPj0gMgotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogVGVtcGxhdGVfRml4dHVyZV8yPFRlc3RUeXBlPnt9Lm1fYS5zaXplKCkgPj0gMiBmb3I6IDYgPj0gMgotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogVGVtcGxhdGVfRml4dHVyZV8yPFRlc3RUeXBlPnt9Lm1fYS5zaXplKCkgPj0gMiBmb3I6IDIgPj0gMgogQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogVGVtcGxhdGVfRml4dHVyZTxUZXN0VHlwZT46Om1fYSA9PSAyIGZvcjogMS4wID09IDIKIENsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IFRlbXBsYXRlX0ZpeHR1cmU8VGVzdFR5cGU+OjptX2EgPT0gMiBmb3I6IDEuMGYgPT0gMgogQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogVGVtcGxhdGVfRml4dHVyZTxUZXN0VHlwZT46Om1fYSA9PSAyIGZvcjogMSA9PSAyCiBDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBUZW1wbGF0ZV9GaXh0dXJlPFRlc3RUeXBlPjo6bV9hID09IDEgZm9yOiAxLjAgPT0gMQogQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogVGVtcGxhdGVfRml4dHVyZTxUZXN0VHlwZT46Om1fYSA9PSAxIGZvcjogMS4wZiA9PSAxCiBDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBUZW1wbGF0ZV9GaXh0dXJlPFRlc3RUeXBlPjo6bV9hID09IDEgZm9yOiAxID09IDEKLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IE50dHBfRml4dHVyZTxWPjo6dmFsdWUgPT0gMCBmb3I6IDEgPT0gMAotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogTnR0cF9GaXh0dXJlPFY+Ojp2YWx1ZSA9PSAwIGZvcjogMyA9PSAwCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBOdHRwX0ZpeHR1cmU8Vj46OnZhbHVlID09IDAgZm9yOiA2ID09IDAKLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IE50dHBfRml4dHVyZTxWPjo6dmFsdWUgPiAwIGZvcjogMSA+IDAKLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IE50dHBfRml4dHVyZTxWPjo6dmFsdWUgPiAwIGZvcjogMyA+IDAKLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IE50dHBfRml4dHVyZTxWPjo6dmFsdWUgPiAwIGZvcjogNiA+IDAKIENsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IG1fYSA9PSAyIGZvcjogMSA9PSAyCiBDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBtX2EgPT0gMSBmb3I6IDEgPT0gMQogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4LnNpemUoKSA9PSAwIGZvcjogMCA9PSAwCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHguc2l6ZSgpID09IDAgZm9yOiAwID09IDAKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeC5zaXplKCkgPT0gMCBmb3I6IDAgPT0gMAogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4LnNpemUoKSA9PSAwIGZvcjogMCA9PSAwCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHguc2l6ZSgpID4gMCBmb3I6IDQyID4gMAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4LnNpemUoKSA+IDAgZm9yOiA5ID4gMAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4LnNpemUoKSA+IDAgZm9yOiA0MiA+IDAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeC5zaXplKCkgPiAwIGZvcjogOSA+IDAKIEFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBkID09IDEuMjNfYSBmb3I6IDEuMjMgPT0gQXBwcm94KCAxLjIzICkKIEFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBkICE9IDEuMjJfYSBmb3I6IDEuMjMgIT0gQXBwcm94KCAxLjIyICkKIEFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAtZCA9PSAtMS4yM19hIGZvcjogLTEuMjMgPT0gQXBwcm94KCAtMS4yMyApCkBAIC0yNDMsOSArMjIzLDEzIEBACiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdHJ1ZQogVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRydWUKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0cnVlCitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogSU5GSU5JVFkgPT0gQXBwcm94KElORklOSVRZKSBmb3I6IGluZmYgPT0gQXBwcm94KCBpbmYgKQorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IE5BTiAhPSBBcHByb3goTkFOKSBmb3I6IG5hbmYgIT0gQXBwcm94KCBuYW4gKQorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICEoTkFOID09IEFwcHJveChOQU4pKSBmb3I6ICEobmFuZiA9PSBBcHByb3goIG5hbiApKQorVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHkudiA9PSAwIGZvcjogMCA9PSAwCitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMCA9PSB5LnYgZm9yOiAwID09IDAKIE1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogd2l0aCA3IG1lc3NhZ2VzOiAnYSA6PSAxJyBhbmQgJ2IgOj0gMicgYW5kICdjIDo9IDMnIGFuZCAnYSArIGIgOj0gMycgYW5kICdhK2IgOj0gMycgYW5kICdjID4gYiA6PSB0cnVlJyBhbmQgJ2EgPT0gMSA6PSB0cnVlJwogTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB3aXRoIDcgbWVzc2FnZXM6ICdzdGQ6OnZlY3RvcjxpbnQ+ezEsIDIsIDN9WzAsIDEsIDJdIDo9IDMnIGFuZCAnc3RkOjp2ZWN0b3I8aW50PnsxLCAyLCAzfVsoMCwgMSldIDo9IDInIGFuZCAnc3RkOjp2ZWN0b3I8aW50PnsxLCAyLCAzfVswXSA6PSAxJyBhbmQgJyhoZWxwZXJfMTQzNjxpbnQsIGludD57MTIsIC0xMn0pIDo9IHsgMTIsIC0xMiB9JyBhbmQgJyhoZWxwZXJfMTQzNjxpbnQsIGludD4oLTEyLCAxMikpIDo9IHsgLTEyLCAxMiB9JyBhbmQgJygxLCAyKSA6PSAyJyBhbmQgJygyLCAzKSA6PSAzJwotTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB3aXRoIDExIG1lc3NhZ2VzOiAnKCJjb21tYSwgaW4gc3RyaW5nIiwgImVzY2FwZWQsIFwiLCAiKSA6PSAiZXNjYXBlZCwgIiwgIicgYW5kICcic2luZ2xlIHF1b3RlIGluIHN0cmluZywnLCIgOj0gInNpbmdsZSBxdW90ZSBpbiBzdHJpbmcsJywiJyBhbmQgJyJzb21lIGVzY2FwZXMsIFxcLFxcXFwiIDo9ICJzb21lIGVzY2FwZXMsIFwsXFwiJyBhbmQgJyJzb21lLCApLCB1bm1hdGNoZWQsIH0gcHJlbmhlc2VzIHtbPCIgOj0gInNvbWUsICksIHVubWF0Y2hlZCwgfSBwcmVuaGVzZXMge1s8IicgYW5kICcnIicgOj0gJyInJyBhbmQgJydcJycgOj0gJycnJyBhbmQgJycsJyA6PSAnLCcnIGFuZCAnJ30nIDo9ICd9JycgYW5kICcnKScgOj0gJyknJyBhbmQgJycoJyA6PSAnKCcnIGFuZCAnJ3snIDo9ICd7JycKIFRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0cnVlIHdpdGggMSBtZXNzYWdlOiAnaSA6PSAyJwogVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRydWUgd2l0aCAxIG1lc3NhZ2U6ICczJwogVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRhYiA9PSAnXHQnIGZvcjogJ1x0JyA9PSAnXHQnCkBAIC0yNzYsMTAgKzI2MCw2IEBACiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3RkOjp2ZWN0b3I8aW50PnsxLCAyfSA9PSBzdGQ6OnZlY3RvcjxpbnQ+ezEsIDJ9IGZvcjogeyAxLCAyIH0gPT0geyAxLCAyIH0KIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBhIGZvcjogMHg8aGV4IGRpZ2l0cz4KIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBhID09ICZmb28gZm9yOiAweDxoZXggZGlnaXRzPiA9PSAweDxoZXggZGlnaXRzPgotUmFuZG9tTnVtYmVyR2VuZXJhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBTaW1wbGVQY2czMnt9ID09IFNpbXBsZVBjZzMye30gZm9yOiB7P30gPT0gez99Ci1SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IFNpbXBsZVBjZzMyeyAwIH0gIT0gU2ltcGxlUGNnMzJ7fSBmb3I6IHs/fSAhPSB7P30KLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogIShTaW1wbGVQY2czMnsgMSB9ID09IFNpbXBsZVBjZzMyeyAyIH0pIGZvcjogISh7P30gPT0gez99KQotUmFuZG9tTnVtYmVyR2VuZXJhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAhKFNpbXBsZVBjZzMyeyAxIH0gIT0gU2ltcGxlUGNnMzJ7IDEgfSkgZm9yOiAhKHs/fSAhPSB7P30pCiBBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGQgPT0gQXBwcm94KDEwLjApIGZvcjogU3Ryb25nRG91YmxlVHlwZWRlZigxMCkgPT0gQXBwcm94KCAxMC4wICkKIEFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBBcHByb3goMTAuMCkgPT0gdGQgZm9yOiBBcHByb3goIDEwLjAgKSA9PSBTdHJvbmdEb3VibGVUeXBlZGVmKDEwKQogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRkICE9IEFwcHJveCgxMS4wKSBmb3I6IFN0cm9uZ0RvdWJsZVR5cGVkZWYoMTApICE9IEFwcHJveCggMTEuMCApCkBAIC0zMTIsNDUgKzI5MiwxNSBAQAogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDUgPT0gYyBmb3I6IDUgPT0gNQogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDYgPT0gdWMgZm9yOiA2ID09IDYKIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCkoKSA+IHVsIGZvcjogNDI5NDk2NzI5NSAoMHg8aGV4IGRpZ2l0cz4pID4gNAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGVzdFN0cmluZ0Zvck1hdGNoaW5nMigpLCAhY29tcG9zZWQxIGZvcjogInNvbWUgY29tcGxldGVseSBkaWZmZXJlbnQgdGV4dCB0aGF0IGNvbnRhaW5zIG9uZSBjb21tb24gd29yZCIgbm90ICggY29udGFpbnM6ICJzdHJpbmciIG9yIGNvbnRhaW5zOiAicmFuZG9tIiApCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcyKCksIGNvbXBvc2VkMiBmb3I6ICJzb21lIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRleHQgdGhhdCBjb250YWlucyBvbmUgY29tbW9uIHdvcmQiICggY29udGFpbnM6ICJzdHJpbmciIG9yIGNvbnRhaW5zOiAicmFuZG9tIiBvciBjb250YWluczogImRpZmZlcmVudCIgKQogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogdGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIENvbnRhaW5zKCJub3QgdGhlcmUiLCBDYXRjaDo6Q2FzZVNlbnNpdGl2ZTo6Tm8pIGZvcjogInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nIiBjb250YWluczogIm5vdCB0aGVyZSIgKGNhc2UgaW5zZW5zaXRpdmUpCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiB0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgQ29udGFpbnMoIlNUUklORyIpIGZvcjogInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nIiBjb250YWluczogIlNUUklORyIKLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZWxlbSAlIDIgPT0gMSBmb3I6IDEgPT0gMQotR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbGVtICUgMiA9PSAxIGZvcjogMSA9PSAxCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVsZW0gJSAyID09IDEgZm9yOiAxID09IDEKLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZWxlbSAlIDIgPT0gMSBmb3I6IDEgPT0gMQotR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbGVtICUgMiA9PSAxIGZvcjogMSA9PSAxCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVsZW0gJSAyID09IDEgZm9yOiAxID09IDEKLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZWxlbSAlIDIgPT0gMSBmb3I6IDEgPT0gMQotR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbGVtICUgMiA9PSAxIGZvcjogMSA9PSAxCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVsZW0gJSAyID09IDEgZm9yOiAxID09IDEKLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZWxlbSAlIDIgPT0gMSBmb3I6IDEgPT0gMQotR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbGVtICUgMiA9PSAxIGZvcjogMSA9PSAxCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVsZW0gJSAyID09IDEgZm9yOiAxID09IDEKLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY2FsbF9jb3VudCA9PSAxIGZvcjogMSA9PSAxCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IG1ha2VfZGF0YSgpLnNpemUoKSA9PSB0ZXN0X2NvdW50IGZvcjogNiA9PSA2CiBFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogdW5leHBlY3RlZCBleGNlcHRpb24gd2l0aCBtZXNzYWdlOiAnY3VzdG9tIGV4Y2VwdGlvbiAtIG5vdCBzdGQnOyBleHByZXNzaW9uIHdhczogdGhyb3dDdXN0b20oKQogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIHdpdGggbWVzc2FnZTogJ2N1c3RvbSBleGNlcHRpb24gLSBub3Qgc3RkJzsgZXhwcmVzc2lvbiB3YXM6IHRocm93Q3VzdG9tKCksIHN0ZDo6ZXhjZXB0aW9uCiBFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogdW5leHBlY3RlZCBleGNlcHRpb24gd2l0aCBtZXNzYWdlOiAnY3VzdG9tIHN0ZCBleGNlcHRpb24nCiBBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMTAxLjAwMDAwMSAhPSBBcHByb3goMTAwKS5lcHNpbG9uKDAuMDEpIGZvcjogMTAxLjAwMDAwMSAhPSBBcHByb3goIDEwMC4wICkKIEFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdGQ6OnBvdygxMCwgLTUpICE9IEFwcHJveChzdGQ6OnBvdygxMCwgLTcpKSBmb3I6IDAuMDAwMDEgIT0gQXBwcm94KCAwLjAwMDAwMDEgKQotVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW51bUluZm8tPmxvb2t1cCgwKSA9PSAiVmFsdWUxIiBmb3I6IFZhbHVlMSA9PSAiVmFsdWUxIgotVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW51bUluZm8tPmxvb2t1cCgxKSA9PSAiVmFsdWUyIiBmb3I6IFZhbHVlMiA9PSAiVmFsdWUyIgotVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW51bUluZm8tPmxvb2t1cCgzKSA9PSAieyoqIHVuZXhwZWN0ZWQgZW51bSB2YWx1ZSAqKn0iIGZvcjogeyoqIHVuZXhwZWN0ZWQgZW51bSB2YWx1ZSAqKn0KLT09Ci0ieyoqIHVuZXhwZWN0ZWQgZW51bSB2YWx1ZSAqKn0iCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiB0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgRW5kc1dpdGgoIlN1YnN0cmluZyIpIGZvcjogInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nIiBlbmRzIHdpdGg6ICJTdWJzdHJpbmciCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiB0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgRW5kc1dpdGgoInRoaXMiLCBDYXRjaDo6Q2FzZVNlbnNpdGl2ZTo6Tm8pIGZvcjogInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nIiBlbmRzIHdpdGg6ICJ0aGlzIiAoY2FzZSBpbnNlbnNpdGl2ZSkKLUVudW1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdHJpbmdpZnkoIEVudW1DbGFzczM6OlZhbHVlMSApID09ICJWYWx1ZTEiIGZvcjogIlZhbHVlMSIgPT0gIlZhbHVlMSIKLUVudW1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdHJpbmdpZnkoIEVudW1DbGFzczM6OlZhbHVlMiApID09ICJWYWx1ZTIiIGZvcjogIlZhbHVlMiIgPT0gIlZhbHVlMiIKLUVudW1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdHJpbmdpZnkoIEVudW1DbGFzczM6OlZhbHVlMyApID09ICJWYWx1ZTMiIGZvcjogIlZhbHVlMyIgPT0gIlZhbHVlMyIKLUVudW1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdHJpbmdpZnkoIEVudW1DbGFzczM6OlZhbHVlNCApID09ICJ7KiogdW5leHBlY3RlZCBlbnVtIHZhbHVlICoqfSIgZm9yOiAieyoqIHVuZXhwZWN0ZWQgZW51bSB2YWx1ZSAqKn0iCi09PQotInsqKiB1bmV4cGVjdGVkIGVudW0gdmFsdWUgKip9IgotRW51bVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHN0cmluZ2lmeSggZWMzICkgPT0gIlZhbHVlMiIgZm9yOiAiVmFsdWUyIiA9PSAiVmFsdWUyIgotRW51bVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHN0cmluZ2lmeSggQmlrZXNoZWQ6OkNvbG91cnM6OlJlZCApID09ICJSZWQiIGZvcjogIlJlZCIgPT0gIlJlZCIKLUVudW1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdHJpbmdpZnkoIEJpa2VzaGVkOjpDb2xvdXJzOjpCbHVlICkgPT0gIkJsdWUiIGZvcjogIkJsdWUiID09ICJCbHVlIgogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDEwMS4wMSAhPSBBcHByb3goMTAwKS5lcHNpbG9uKDAuMDEpIGZvcjogMTAxLjAxICE9IEFwcHJveCggMTAwLjAgKQogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IGRhdGEuaW50X3NldmVuID09IDYgZm9yOiA3ID09IDYKIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBkYXRhLmludF9zZXZlbiA9PSA4IGZvcjogNyA9PSA4CkBAIC0zODcsMjAgKzMzNywxNiBAQAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogZXhwZWN0ZWQgZXhjZXB0aW9uLCBnb3Qgbm9uZTsgZXhwcmVzc2lvbiB3YXM6IGRvZXNOb3RUaHJvdygpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9CiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiB3aXRoIG1lc3NhZ2U6ICdVbmtub3duIGV4Y2VwdGlvbic7IGV4cHJlc3Npb24gd2FzOiB0aHJvd3NBc0ludCgxKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfQogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogdW5leHBlY3RlZCBleGNlcHRpb24gd2l0aCBtZXNzYWdlOiAnVW5rbm93biBleGNlcHRpb24nOyBleHByZXNzaW9uIHdhczogdGhyb3dzQXNJbnQoMSksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IHRocm93c1NwZWNpYWxFeGNlcHRpb24oMyksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0gZm9yOiBTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAxCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiB0aHJvd3NTcGVjaWFsRXhjZXB0aW9uKDQpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9IGZvcjogU3BlY2lhbEV4Y2VwdGlvbjo6d2hhdCBzcGVjaWFsIGV4Y2VwdGlvbiBoYXMgdmFsdWUgb2YgMQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGhyb3dzU3BlY2lhbEV4Y2VwdGlvbigxKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSBmb3I6IFNwZWNpYWxFeGNlcHRpb246OndoYXQgc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRocm93c1NwZWNpYWxFeGNlcHRpb24oMiksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7Mn0gZm9yOiBTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAyCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiB0aHJvd3MoMyksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0gZm9yOiBTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAxCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiB0aHJvd3MoNCksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0gZm9yOiBTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAxCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0aHJvd3MoMSksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0gZm9yOiBTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAxCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0aHJvd3MoMiksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7Mn0gZm9yOiBTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAyCiBFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGhpc1Rocm93cygpLCAiZXhwZWN0ZWQgZXhjZXB0aW9uIiBmb3I6ICJleHBlY3RlZCBleGNlcHRpb24iIGVxdWFsczogImV4cGVjdGVkIGV4Y2VwdGlvbiIKIEV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0aGlzVGhyb3dzKCksIEVxdWFscyggImV4cGVjdGVEIEV4Y2VwdGlvbiIsIENhdGNoOjpDYXNlU2Vuc2l0aXZlOjpObyApIGZvcjogImV4cGVjdGVkIGV4Y2VwdGlvbiIgZXF1YWxzOiAiZXhwZWN0ZWQgZXhjZXB0aW9uIiAoY2FzZSBpbnNlbnNpdGl2ZSkKIEV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0aGlzVGhyb3dzKCksIFN0YXJ0c1dpdGgoICJleHBlY3RlZCIgKSBmb3I6ICJleHBlY3RlZCBleGNlcHRpb24iIHN0YXJ0cyB3aXRoOiAiZXhwZWN0ZWQiCiBFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGhpc1Rocm93cygpLCBFbmRzV2l0aCggImV4Y2VwdGlvbiIgKSBmb3I6ICJleHBlY3RlZCBleGNlcHRpb24iIGVuZHMgd2l0aDogImV4Y2VwdGlvbiIKIEV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0aGlzVGhyb3dzKCksIENvbnRhaW5zKCAiZXhjZXB0IiApIGZvcjogImV4cGVjdGVkIGV4Y2VwdGlvbiIgY29udGFpbnM6ICJleGNlcHQiCiBFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGhpc1Rocm93cygpLCBDb250YWlucyggImV4Q2VwdCIsIENhdGNoOjpDYXNlU2Vuc2l0aXZlOjpObyApIGZvcjogImV4cGVjdGVkIGV4Y2VwdGlvbiIgY29udGFpbnM6ICJleGNlcHQiIChjYXNlIGluc2Vuc2l0aXZlKQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGhyb3dzRGVyaXZlZEV4Y2VwdGlvbigpLCBEZXJpdmVkRXhjZXB0aW9uLCBNZXNzYWdlKCJEZXJpdmVkRXhjZXB0aW9uOjp3aGF0IikgZm9yOiBEZXJpdmVkRXhjZXB0aW9uOjp3aGF0IGV4Y2VwdGlvbiBtZXNzYWdlIG1hdGNoZXMgIkRlcml2ZWRFeGNlcHRpb246OndoYXQiCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0aHJvd3NEZXJpdmVkRXhjZXB0aW9uKCksIERlcml2ZWRFeGNlcHRpb24sICFNZXNzYWdlKCJkZXJpdmVkZXhjZXB0aW9uOjp3aGF0IikgZm9yOiBEZXJpdmVkRXhjZXB0aW9uOjp3aGF0IG5vdCBleGNlcHRpb24gbWVzc2FnZSBtYXRjaGVzICJkZXJpdmVkZXhjZXB0aW9uOjp3aGF0IgotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGhyb3dzU3BlY2lhbEV4Y2VwdGlvbigyKSwgU3BlY2lhbEV4Y2VwdGlvbiwgIU1lc3NhZ2UoIkRlcml2ZWRFeGNlcHRpb246OndoYXQiKSBmb3I6IFNwZWNpYWxFeGNlcHRpb246OndoYXQgbm90IGV4Y2VwdGlvbiBtZXNzYWdlIG1hdGNoZXMgIkRlcml2ZWRFeGNlcHRpb246OndoYXQiCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0aHJvd3NTcGVjaWFsRXhjZXB0aW9uKDIpLCBTcGVjaWFsRXhjZXB0aW9uLCBNZXNzYWdlKCJTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IikgZm9yOiBTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IGV4Y2VwdGlvbiBtZXNzYWdlIG1hdGNoZXMgIlNwZWNpYWxFeGNlcHRpb246OndoYXQiCiBFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogdW5leHBlY3RlZCBleGNlcHRpb24gd2l0aCBtZXNzYWdlOiAnZXhwZWN0ZWQgZXhjZXB0aW9uJzsgZXhwcmVzc2lvbiB3YXM6IHRoaXNUaHJvd3MoKSwgc3RkOjpzdHJpbmcKIEV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBleHBlY3RlZCBleGNlcHRpb24sIGdvdCBub25lOyBleHByZXNzaW9uIHdhczogdGhpc0RvZXNudFRocm93KCksIHN0ZDo6ZG9tYWluX2Vycm9yCiBFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogdW5leHBlY3RlZCBleGNlcHRpb24gd2l0aCBtZXNzYWdlOiAnZXhwZWN0ZWQgZXhjZXB0aW9uJzsgZXhwcmVzc2lvbiB3YXM6IHRoaXNUaHJvd3MoKQpAQCAtNDEzLDY2ICszNTksNTMgQEAKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogRmFjdG9yaWFsKDIpID09IDIgZm9yOiAyID09IDIKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogRmFjdG9yaWFsKDMpID09IDYgZm9yOiA2ID09IDYKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogRmFjdG9yaWFsKDEwKSA9PSAzNjI4ODAwIGZvcjogMzYyODgwMCAoMHg8aGV4IGRpZ2l0cz4pID09IDM2Mjg4MDAgKDB4PGhleCBkaWdpdHM+KQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMTAuLCBXaXRoaW5SZWwoMTEuMSwgMC4xKSBmb3I6IDEwLjAgYW5kIDExLjEgYXJlIHdpdGhpbiAxMCUgb2YgZWFjaCBvdGhlcgotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMTAuLCAhV2l0aGluUmVsKDExLjIsIDAuMSkgZm9yOiAxMC4wIG5vdCBhbmQgMTEuMiBhcmUgd2l0aGluIDEwJSBvZiBlYWNoIG90aGVyCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAxLiwgIVdpdGhpblJlbCgwLiwgMC45OSkgZm9yOiAxLjAgbm90IGFuZCAwIGFyZSB3aXRoaW4gOTklIG9mIGVhY2ggb3RoZXIKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IC0wLiwgV2l0aGluUmVsKDAuKSBmb3I6IC0wLjAgYW5kIDAgYXJlIHdpdGhpbiAyLjIyMDQ1ZS0xMiUgb2YgZWFjaCBvdGhlcgotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdjEsIFdpdGhpblJlbCh2MikgZm9yOiAwLjAgYW5kIDIuMjI1MDdlLTMwOCBhcmUgd2l0aGluIDIuMjIwNDVlLTEyJSBvZiBlYWNoIG90aGVyCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAxLiwgV2l0aGluQWJzKDEuLCAwKSBmb3I6IDEuMCBpcyB3aXRoaW4gMC4wIG9mIDEuMAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMC4sIFdpdGhpbkFicygxLiwgMSkgZm9yOiAwLjAgaXMgd2l0aGluIDEuMCBvZiAxLjAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDAuLCAhV2l0aGluQWJzKDEuLCAwLjk5KSBmb3I6IDAuMCBub3QgaXMgd2l0aGluIDAuOTkgb2YgMS4wCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAwLiwgIVdpdGhpbkFicygxLiwgMC45OSkgZm9yOiAwLjAgbm90IGlzIHdpdGhpbiAwLjk5IG9mIDEuMAorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogTkFOLCAhV2l0aGluQWJzKE5BTiwgMCkgZm9yOiBuYW5mIG5vdCBpcyB3aXRoaW4gMC4wIG9mIG5hbgogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMTEuLCAhV2l0aGluQWJzKDEwLiwgMC41KSBmb3I6IDExLjAgbm90IGlzIHdpdGhpbiAwLjUgb2YgMTAuMAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMTAuLCAhV2l0aGluQWJzKDExLiwgMC41KSBmb3I6IDEwLjAgbm90IGlzIHdpdGhpbiAwLjUgb2YgMTEuMAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogLTEwLiwgV2l0aGluQWJzKC0xMC4sIDAuNSkgZm9yOiAtMTAuMCBpcyB3aXRoaW4gMC41IG9mIC0xMC4wCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAtMTAuLCBXaXRoaW5BYnMoLTkuNiwgMC41KSBmb3I6IC0xMC4wIGlzIHdpdGhpbiAwLjUgb2YgLTkuNgotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMS4sIFdpdGhpblVMUCgxLiwgMCkgZm9yOiAxLjAgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjAwMDAwMDAwMDAwMDAwMDBlKzAwIChbMS4wMDAwMDAwMDAwMDAwMDAwZSswMCwgMS4wMDAwMDAwMDAwMDAwMDAwZSswMF0pCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBuZXh0YWZ0ZXIoMS4sIDIuKSwgV2l0aGluVUxQKDEuLCAxKSBmb3I6IDEuMCBpcyB3aXRoaW4gMSBVTFBzIG9mIDEuMDAwMDAwMDAwMDAwMDAwMGUrMDAgKFs5Ljk5OTk5OTk5OTk5OTk5ODllLTAxLCAxLjAwMDAwMDAwMDAwMDAwMDJlKzAwXSkKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDAuLCBXaXRoaW5VTFAobmV4dGFmdGVyKDAuLCAxLiksIDEpIGZvcjogMC4wIGlzIHdpdGhpbiAxIFVMUHMgb2YgNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQgKFswLjAwMDAwMDAwMDAwMDAwMDBlKzAwLCA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNF0pCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAxLiwgV2l0aGluVUxQKG5leHRhZnRlcigxLiwgMC4pLCAxKSBmb3I6IDEuMCBpcyB3aXRoaW4gMSBVTFBzIG9mIDkuOTk5OTk5OTk5OTk5OTk4OWUtMDEgKFs5Ljk5OTk5OTk5OTk5OTk5NzhlLTAxLCAxLjAwMDAwMDAwMDAwMDAwMDBlKzAwXSkKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDEuLCAhV2l0aGluVUxQKG5leHRhZnRlcigxLiwgMi4pLCAwKSBmb3I6IDEuMCBub3QgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjAwMDAwMDAwMDAwMDAwMDJlKzAwIChbMS4wMDAwMDAwMDAwMDAwMDAyZSswMCwgMS4wMDAwMDAwMDAwMDAwMDAyZSswMF0pCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAxLiwgV2l0aGluVUxQKDEuLCAwKSBmb3I6IDEuMCBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMDAwMDAwMDAwMDAwMDAwMGUrMDAgKFsxLjAwMDAwMDAwMDAwMDAwMDBlKzAwLCAxLjAwMDAwMDAwMDAwMDAwMDBlKzAwXSkKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IC0wLiwgV2l0aGluVUxQKDAuLCAwKSBmb3I6IC0wLjAgaXMgd2l0aGluIDAgVUxQcyBvZiAwLjAwMDAwMDAwMDAwMDAwMDBlKzAwIChbMC4wMDAwMDAwMDAwMDAwMDAwZSswMCwgMC4wMDAwMDAwMDAwMDAwMDAwZSswMF0pCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAxLiwgV2l0aGluQWJzKDEuLCAwLjUpIHx8IFdpdGhpblVMUCgyLiwgMSkgZm9yOiAxLjAgKCBpcyB3aXRoaW4gMC41IG9mIDEuMCBvciBpcyB3aXRoaW4gMSBVTFBzIG9mIDIuMDAwMDAwMDAwMDAwMDAwMGUrMDAgKFsxLjk5OTk5OTk5OTk5OTk5OThlKzAwLCAyLjAwMDAwMDAwMDAwMDAwMDRlKzAwXSkgKQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMS4sIFdpdGhpbkFicygyLiwgMC41KSB8fCBXaXRoaW5VTFAoMS4sIDApIGZvcjogMS4wICggaXMgd2l0aGluIDAuNSBvZiAyLjAgb3IgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjAwMDAwMDAwMDAwMDAwMDBlKzAwIChbMS4wMDAwMDAwMDAwMDAwMDAwZSswMCwgMS4wMDAwMDAwMDAwMDAwMDAwZSswMF0pICkKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDAuMDAwMSwgV2l0aGluQWJzKDAuLCAwLjAwMSkgfHwgV2l0aGluUmVsKDAuLCAwLjEpIGZvcjogMC4wMDAxICggaXMgd2l0aGluIDAuMDAxIG9mIDAuMCBvciBhbmQgMCBhcmUgd2l0aGluIDEwJSBvZiBlYWNoIG90aGVyICkKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDEuLCBXaXRoaW5VTFAoMS4sIDApIGZvcjogMS4wIGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBuZXh0YWZ0ZXIoMS4sIDIuKSwgV2l0aGluVUxQKDEuLCAxKSBmb3I6IDEuMCBpcyB3aXRoaW4gMSBVTFBzIG9mIDEuMAorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogbmV4dGFmdGVyKDEuLCAwLiksIFdpdGhpblVMUCgxLiwgMSkgZm9yOiAxLjAgaXMgd2l0aGluIDEgVUxQcyBvZiAxLjAKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IG5leHRhZnRlcigxLiwgMi4pLCAhV2l0aGluVUxQKDEuLCAwKSBmb3I6IDEuMCBub3QgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjAKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDEuLCBXaXRoaW5VTFAoMS4sIDApIGZvcjogMS4wIGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAtMC4sIFdpdGhpblVMUCgwLiwgMCkgZm9yOiAtMC4wIGlzIHdpdGhpbiAwIFVMUHMgb2YgMC4wCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBOQU4sICFXaXRoaW5VTFAoTkFOLCAxMjMpIGZvcjogbmFuZiBub3QgaXMgd2l0aGluIDEyMyBVTFBzIG9mIG5hbmYKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDEuLCBXaXRoaW5BYnMoMS4sIDAuNSkgfHwgV2l0aGluVUxQKDIuLCAxKSBmb3I6IDEuMCAoIGlzIHdpdGhpbiAwLjUgb2YgMS4wIG9yIGlzIHdpdGhpbiAxIFVMUHMgb2YgMi4wICkKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDEuLCBXaXRoaW5BYnMoMi4sIDAuNSkgfHwgV2l0aGluVUxQKDEuLCAwKSBmb3I6IDEuMCAoIGlzIHdpdGhpbiAwLjUgb2YgMi4wIG9yIGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wICkKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IE5BTiwgIShXaXRoaW5BYnMoTkFOLCAxMDApIHx8IFdpdGhpblVMUChOQU4sIDEyMykpIGZvcjogbmFuZiBub3QgKCBpcyB3aXRoaW4gMTAwLjAgb2YgbmFuIG9yIGlzIHdpdGhpbiAxMjMgVUxQcyBvZiBuYW5mICkKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IFdpdGhpbkFicygxLiwgMC4pCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBXaXRoaW5BYnMoMS4sIC0xLiksIHN0ZDo6ZG9tYWluX2Vycm9yCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBXaXRoaW5VTFAoMS4sIDApCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBXaXRoaW5SZWwoMS4sIDAuKQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogV2l0aGluUmVsKDEuLCAtMC4yKSwgc3RkOjpkb21haW5fZXJyb3IKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IFdpdGhpblJlbCgxLiwgMS4pLCBzdGQ6OmRvbWFpbl9lcnJvcgotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMTAuZiwgV2l0aGluUmVsKDExLjFmLCAwLjFmKSBmb3I6IDEwLjBmIGFuZCAxMS4xIGFyZSB3aXRoaW4gMTAlIG9mIGVhY2ggb3RoZXIKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDEwLmYsICFXaXRoaW5SZWwoMTEuMmYsIDAuMWYpIGZvcjogMTAuMGYgbm90IGFuZCAxMS4yIGFyZSB3aXRoaW4gMTAlIG9mIGVhY2ggb3RoZXIKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDEuZiwgIVdpdGhpblJlbCgwLmYsIDAuOTlmKSBmb3I6IDEuMGYgbm90IGFuZCAwIGFyZSB3aXRoaW4gOTklIG9mIGVhY2ggb3RoZXIKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IC0wLmYsIFdpdGhpblJlbCgwLmYpIGZvcjogLTAuMGYgYW5kIDAgYXJlIHdpdGhpbiAwLjAwMTE5MjA5JSBvZiBlYWNoIG90aGVyCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2MSwgV2l0aGluUmVsKHYyKSBmb3I6IDAuMGYgYW5kIDEuMTc1NDllLTM4IGFyZSB3aXRoaW4gMC4wMDExOTIwOSUgb2YgZWFjaCBvdGhlcgorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogV2l0aGluVUxQKDEuLCAtMSksIHN0ZDo6ZG9tYWluX2Vycm9yCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAxLmYsIFdpdGhpbkFicygxLmYsIDApIGZvcjogMS4wZiBpcyB3aXRoaW4gMC4wIG9mIDEuMAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMC5mLCBXaXRoaW5BYnMoMS5mLCAxKSBmb3I6IDAuMGYgaXMgd2l0aGluIDEuMCBvZiAxLjAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDAuZiwgIVdpdGhpbkFicygxLmYsIDAuOTlmKSBmb3I6IDAuMGYgbm90IGlzIHdpdGhpbiAwLjk5MDAwMDAwOTUgb2YgMS4wCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAwLmYsICFXaXRoaW5BYnMoMS5mLCAwLjk5ZikgZm9yOiAwLjBmIG5vdCBpcyB3aXRoaW4gMC45OTAwMDAwMDk1IG9mIDEuMAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMC5mLCBXaXRoaW5BYnMoLTAuZiwgMCkgZm9yOiAwLjBmIGlzIHdpdGhpbiAwLjAgb2YgLTAuMAorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogTkFOLCAhV2l0aGluQWJzKE5BTiwgMCkgZm9yOiBuYW5mIG5vdCBpcyB3aXRoaW4gMC4wIG9mIG5hbgogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMTEuZiwgIVdpdGhpbkFicygxMC5mLCAwLjVmKSBmb3I6IDExLjBmIG5vdCBpcyB3aXRoaW4gMC41IG9mIDEwLjAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDEwLmYsICFXaXRoaW5BYnMoMTEuZiwgMC41ZikgZm9yOiAxMC4wZiBub3QgaXMgd2l0aGluIDAuNSBvZiAxMS4wCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAtMTAuZiwgV2l0aGluQWJzKC0xMC5mLCAwLjVmKSBmb3I6IC0xMC4wZiBpcyB3aXRoaW4gMC41IG9mIC0xMC4wCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAtMTAuZiwgV2l0aGluQWJzKC05LjZmLCAwLjVmKSBmb3I6IC0xMC4wZiBpcyB3aXRoaW4gMC41IG9mIC05LjYwMDAwMDM4MTUKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDEuZiwgV2l0aGluVUxQKDEuZiwgMCkgZm9yOiAxLjBmIGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wMDAwMDAwMGUrMDBmIChbMS4wMDAwMDAwMGUrMDAsIDEuMDAwMDAwMDBlKzAwXSkKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IG5leHRhZnRlcigxLmYsIDIuZiksIFdpdGhpblVMUCgxLmYsIDEpIGZvcjogMS4wZiBpcyB3aXRoaW4gMSBVTFBzIG9mIDEuMDAwMDAwMDBlKzAwZiAoWzkuOTk5OTk5NDBlLTAxLCAxLjAwMDAwMDEyZSswMF0pCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAwLmYsIFdpdGhpblVMUChuZXh0YWZ0ZXIoMC5mLCAxLmYpLCAxKSBmb3I6IDAuMGYgaXMgd2l0aGluIDEgVUxQcyBvZiAxLjQwMTI5ODQ2ZS00NWYgKFswLjAwMDAwMDAwZSswMCwgMi44MDI1OTY5M2UtNDVdKQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMS5mLCBXaXRoaW5VTFAobmV4dGFmdGVyKDEuZiwgMC5mKSwgMSkgZm9yOiAxLjBmIGlzIHdpdGhpbiAxIFVMUHMgb2YgOS45OTk5OTk0MGUtMDFmIChbOS45OTk5OTg4MWUtMDEsIDEuMDAwMDAwMDBlKzAwXSkKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDEuZiwgIVdpdGhpblVMUChuZXh0YWZ0ZXIoMS5mLCAyLmYpLCAwKSBmb3I6IDEuMGYgbm90IGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wMDAwMDAxMmUrMDBmIChbMS4wMDAwMDAxMmUrMDAsIDEuMDAwMDAwMTJlKzAwXSkKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDEuZiwgV2l0aGluVUxQKDEuZiwgMCkgZm9yOiAxLjBmIGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wMDAwMDAwMGUrMDBmIChbMS4wMDAwMDAwMGUrMDAsIDEuMDAwMDAwMDBlKzAwXSkKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IC0wLmYsIFdpdGhpblVMUCgwLmYsIDApIGZvcjogLTAuMGYgaXMgd2l0aGluIDAgVUxQcyBvZiAwLjAwMDAwMDAwZSswMGYgKFswLjAwMDAwMDAwZSswMCwgMC4wMDAwMDAwMGUrMDBdKQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMS5mLCBXaXRoaW5BYnMoMS5mLCAwLjUpIHx8IFdpdGhpblVMUCgxLmYsIDEpIGZvcjogMS4wZiAoIGlzIHdpdGhpbiAwLjUgb2YgMS4wIG9yIGlzIHdpdGhpbiAxIFVMUHMgb2YgMS4wMDAwMDAwMGUrMDBmIChbOS45OTk5OTk0MGUtMDEsIDEuMDAwMDAwMTJlKzAwXSkgKQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMS5mLCBXaXRoaW5BYnMoMi5mLCAwLjUpIHx8IFdpdGhpblVMUCgxLmYsIDApIGZvcjogMS4wZiAoIGlzIHdpdGhpbiAwLjUgb2YgMi4wIG9yIGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wMDAwMDAwMGUrMDBmIChbMS4wMDAwMDAwMGUrMDAsIDEuMDAwMDAwMDBlKzAwXSkgKQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMC4wMDAxZiwgV2l0aGluQWJzKDAuZiwgMC4wMDFmKSB8fCBXaXRoaW5SZWwoMC5mLCAwLjFmKSBmb3I6IDAuMDAwMWYgKCBpcyB3aXRoaW4gMC4wMDEgb2YgMC4wIG9yIGFuZCAwIGFyZSB3aXRoaW4gMTAlIG9mIGVhY2ggb3RoZXIgKQorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMS5mLCBXaXRoaW5VTFAoMS5mLCAwKSBmb3I6IDEuMGYgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjBmCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBuZXh0YWZ0ZXIoMS5mLCAyLmYpLCBXaXRoaW5VTFAoMS5mLCAxKSBmb3I6IDEuMGYgaXMgd2l0aGluIDEgVUxQcyBvZiAxLjBmCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBuZXh0YWZ0ZXIoMS5mLCAwLmYpLCBXaXRoaW5VTFAoMS5mLCAxKSBmb3I6IDEuMGYgaXMgd2l0aGluIDEgVUxQcyBvZiAxLjBmCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBuZXh0YWZ0ZXIoMS5mLCAyLmYpLCAhV2l0aGluVUxQKDEuZiwgMCkgZm9yOiAxLjBmIG5vdCBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMGYKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDEuZiwgV2l0aGluVUxQKDEuZiwgMCkgZm9yOiAxLjBmIGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wZgorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogLTAuZiwgV2l0aGluVUxQKDAuZiwgMCkgZm9yOiAtMC4wZiBpcyB3aXRoaW4gMCBVTFBzIG9mIDAuMGYKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IE5BTiwgIVdpdGhpblVMUChOQU4sIDEyMykgZm9yOiBuYW5mIG5vdCBpcyB3aXRoaW4gMTIzIFVMUHMgb2YgbmFuZgorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMS5mLCBXaXRoaW5BYnMoMS5mLCAwLjUpIHx8IFdpdGhpblVMUCgxLmYsIDEpIGZvcjogMS4wZiAoIGlzIHdpdGhpbiAwLjUgb2YgMS4wIG9yIGlzIHdpdGhpbiAxIFVMUHMgb2YgMS4wZiApCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAxLmYsIFdpdGhpbkFicygyLmYsIDAuNSkgfHwgV2l0aGluVUxQKDEuZiwgMCkgZm9yOiAxLjBmICggaXMgd2l0aGluIDAuNSBvZiAyLjAgb3IgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjBmICkKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IE5BTiwgIShXaXRoaW5BYnMoTkFOLCAxMDApIHx8IFdpdGhpblVMUChOQU4sIDEyMykpIGZvcjogbmFuZiBub3QgKCBpcyB3aXRoaW4gMTAwLjAgb2YgbmFuIG9yIGlzIHdpdGhpbiAxMjMgVUxQcyBvZiBuYW5mICkKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IFdpdGhpbkFicygxLmYsIDAuZikKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IFdpdGhpbkFicygxLmYsIC0xLmYpLCBzdGQ6OmRvbWFpbl9lcnJvcgogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogV2l0aGluVUxQKDEuZiwgMCkKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IFdpdGhpblVMUCgxLmYsIHN0YXRpY19jYXN0PHVpbnQ2NF90PigtMSkpLCBzdGQ6OmRvbWFpbl9lcnJvcgotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogV2l0aGluUmVsKDEuZiwgMC5mKQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogV2l0aGluUmVsKDEuZiwgLTAuMmYpLCBzdGQ6OmRvbWFpbl9lcnJvcgotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogV2l0aGluUmVsKDEuZiwgMS5mKSwgc3RkOjpkb21haW5fZXJyb3IKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IFdpdGhpblVMUCgxLmYsIC0xKSwgc3RkOjpkb21haW5fZXJyb3IKIEdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaSAlIDIgPT0gMCBmb3I6IDAgPT0gMAogR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBpICUgMiA9PSAwIGZvcjogMCA9PSAwCiBHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGkgJSAyID09IDAgZm9yOiAwID09IDAKQEAgLTUwNyw5ICs0NDAsNiBAQAogR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjaHVuazIuc2l6ZSgpID09IDIgZm9yOiAyID09IDIKIEdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY2h1bmsyLmZyb250KCkgPT0gY2h1bmsyLmJhY2soKSBmb3I6IDIgPT0gMgogR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjaHVuazIuZnJvbnQoKSA8IDMgZm9yOiAyIDwgMwotR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjaHVuazIuc2l6ZSgpID09IDAgZm9yOiAwID09IDAKLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY2h1bmsyLnNpemUoKSA9PSAwIGZvcjogMCA9PSAwCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNodW5rMi5zaXplKCkgPT0gMCBmb3I6IDAgPT0gMAogR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjaHVuaygyLCB2YWx1ZSgxKSksIENhdGNoOjpHZW5lcmF0b3JFeGNlcHRpb24KIEdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaiA8IGkgZm9yOiAtMyA8IDEKIEdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaiA8IGkgZm9yOiAtMiA8IDEKQEAgLTYzMyw3NCArNTYzLDYgQEAKIEdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlCiBHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gNSBmb3I6IDUgPT0gNQogR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogIShnZW4ubmV4dCgpKSBmb3I6ICFmYWxzZQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgZm9yOiAtMS4wID09IEFwcHJveCggLTEuMCApIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMScKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMScKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpIGZvcjogLTAuOSA9PSBBcHByb3goIC0wLjkgKSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuOScKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC45JwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgZm9yOiAtMC44ID09IEFwcHJveCggLTAuOCApIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC44JwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjgnCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSBmb3I6IC0wLjcgPT0gQXBwcm94KCAtMC43ICkgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjcnCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuNycKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpIGZvcjogLTAuNiA9PSBBcHByb3goIC0wLjYgKSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuNicKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC42JwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgZm9yOiAtMC41ID09IEFwcHJveCggLTAuNSApIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC41JwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjUnCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSBmb3I6IC0wLjQgPT0gQXBwcm94KCAtMC40ICkgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjQnCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuNCcKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpIGZvcjogLTAuMyA9PSBBcHByb3goIC0wLjMgKSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuMycKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC4zJwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgZm9yOiAtMC4yID09IEFwcHJveCggLTAuMiApIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC4yJwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjInCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSBmb3I6IC0wLjEgPT0gQXBwcm94KCAtMC4xICkgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjEnCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuMScKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpIGZvcjogLTAuMCA9PSBBcHByb3goIC0wLjAgKSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTEuMzg3NzhlLTE2JwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0xLjM4Nzc4ZS0xNicKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpIGZvcjogMC4xID09IEFwcHJveCggMC4xICkgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuMScKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjEnCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSBmb3I6IDAuMiA9PSBBcHByb3goIDAuMiApIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjInCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC4yJwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgZm9yOiAwLjMgPT0gQXBwcm94KCAwLjMgKSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC4zJwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuMycKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpIGZvcjogMC40ID09IEFwcHJveCggMC40ICkgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuNCcKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjQnCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSBmb3I6IDAuNSA9PSBBcHByb3goIDAuNSApIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjUnCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC41JwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgZm9yOiAwLjYgPT0gQXBwcm94KCAwLjYgKSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC42JwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuNicKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpIGZvcjogMC43ID09IEFwcHJveCggMC43ICkgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuNycKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjcnCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSBmb3I6IDAuOCA9PSBBcHByb3goIDAuOCApIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjgnCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC44JwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgZm9yOiAwLjkgPT0gQXBwcm94KCAwLjkgKSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC45JwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuOScKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSBBcHByb3goIHJhbmdlRW5kICkgZm9yOiAxLjAgPT0gQXBwcm94KCAxLjAgKQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogIShnZW4ubmV4dCgpKSBmb3I6ICFmYWxzZQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgZm9yOiAtMS4wID09IEFwcHJveCggLTEuMCApIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMScKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMScKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpIGZvcjogLTAuNyA9PSBBcHByb3goIC0wLjcgKSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuNycKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC43JwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgZm9yOiAtMC40ID09IEFwcHJveCggLTAuNCApIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC40JwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjQnCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSBmb3I6IC0wLjEgPT0gQXBwcm94KCAtMC4xICkgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjEnCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuMScKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpIGZvcjogMC4yID09IEFwcHJveCggMC4yICkgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuMicKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjInCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSBmb3I6IDAuNSA9PSBBcHByb3goIDAuNSApIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjUnCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC41JwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogIShnZW4ubmV4dCgpKSBmb3I6ICFmYWxzZQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgZm9yOiAtMS4wID09IEFwcHJveCggLTEuMCApIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMScKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMScKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpIGZvcjogLTAuNyA9PSBBcHByb3goIC0wLjcgKSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuNycKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC43JwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgZm9yOiAtMC40ID09IEFwcHJveCggLTAuNCApIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC40JwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjQnCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSBmb3I6IC0wLjEgPT0gQXBwcm94KCAtMC4xICkgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjEnCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuMScKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpIGZvcjogMC4yID09IEFwcHJveCggMC4yICkgd2l0aCAxIG1lc3NhZ2U6ICdDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuMicKLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjInCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSBmb3I6IDAuNSA9PSBBcHByb3goIDAuNSApIHdpdGggMSBtZXNzYWdlOiAnQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjUnCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZSB3aXRoIDEgbWVzc2FnZTogJ0N1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC41JwotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogIShnZW4ubmV4dCgpKSBmb3I6ICFmYWxzZQogR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IDUgZm9yOiA1ID09IDUKIEdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlCiBHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gMiBmb3I6IDIgPT0gMgpAQCAtODM3LDUxICs2OTksNiBAQAogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGRhdGEuc3RyX2hlbGxvIDwgInplYnJhIiBmb3I6ICJoZWxsbyIgPCAiemVicmEiCiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZGF0YS5zdHJfaGVsbG8gPiAiaGVsbG0iIGZvcjogImhlbGxvIiA+ICJoZWxsbSIKIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBkYXRhLnN0cl9oZWxsbyA+ICJhIiBmb3I6ICJoZWxsbyIgPiAiYSIKLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4gZm9yOiA0MjQyMjQ4NzYzICgweDxoZXggZGlnaXRzPikKLT09Ci00MjQyMjQ4NzYzICgweDxoZXggZGlnaXRzPikKLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4gZm9yOiAxODY3ODg4OTI5ICgweDxoZXggZGlnaXRzPikKLT09Ci0xODY3ODg4OTI5ICgweDxoZXggZGlnaXRzPikKLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4gZm9yOiAxMjc2NjE5MDMwICgweDxoZXggZGlnaXRzPikKLT09Ci0xMjc2NjE5MDMwICgweDxoZXggZGlnaXRzPikKLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4gZm9yOiAxOTExMjE4NzgzICgweDxoZXggZGlnaXRzPikKLT09Ci0xOTExMjE4NzgzICgweDxoZXggZGlnaXRzPikKLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4gZm9yOiAxODI3MTE1MTY0ICgweDxoZXggZGlnaXRzPikKLT09Ci0xODI3MTE1MTY0ICgweDxoZXggZGlnaXRzPikKLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4gZm9yOiAxNDcyMjM0NjQ1ICgweDxoZXggZGlnaXRzPikKLT09Ci0xNDcyMjM0NjQ1ICgweDxoZXggZGlnaXRzPikKLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4gZm9yOiA4Njg4MzI5NDAgKDB4PGhleCBkaWdpdHM+KQotPT0KLTg2ODgzMjk0MCAoMHg8aGV4IGRpZ2l0cz4pCi1SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHJuZygpID09IDB4PGhleCBkaWdpdHM+IGZvcjogNTcwODgzNDQ2ICgweDxoZXggZGlnaXRzPikKLT09Ci01NzA4ODM0NDYgKDB4PGhleCBkaWdpdHM+KQotUmFuZG9tTnVtYmVyR2VuZXJhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBybmcoKSA9PSAweDxoZXggZGlnaXRzPiBmb3I6IDg4OTI5OTgwMyAoMHg8aGV4IGRpZ2l0cz4pCi09PQotODg5Mjk5ODAzICgweDxoZXggZGlnaXRzPikKLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4gZm9yOiA0MjYxMzkzMTY3ICgweDxoZXggZGlnaXRzPikKLT09Ci00MjYxMzkzMTY3ICgweDxoZXggZGlnaXRzPikKLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4gZm9yOiAxNDcyMjM0NjQ1ICgweDxoZXggZGlnaXRzPikKLT09Ci0xNDcyMjM0NjQ1ICgweDxoZXggZGlnaXRzPikKLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4gZm9yOiA4Njg4MzI5NDAgKDB4PGhleCBkaWdpdHM+KQotPT0KLTg2ODgzMjk0MCAoMHg8aGV4IGRpZ2l0cz4pCi1SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHJuZygpID09IDB4PGhleCBkaWdpdHM+IGZvcjogNTcwODgzNDQ2ICgweDxoZXggZGlnaXRzPikKLT09Ci01NzA4ODM0NDYgKDB4PGhleCBkaWdpdHM+KQotUmFuZG9tTnVtYmVyR2VuZXJhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBybmcoKSA9PSAweDxoZXggZGlnaXRzPiBmb3I6IDg4OTI5OTgwMyAoMHg8aGV4IGRpZ2l0cz4pCi09PQotODg5Mjk5ODAzICgweDxoZXggZGlnaXRzPikKLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4gZm9yOiA0MjYxMzkzMTY3ICgweDxoZXggZGlnaXRzPikKLT09Ci00MjYxMzkzMTY3ICgweDxoZXggZGlnaXRzPikKIE1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogZXhwbGljaXRseSB3aXRoIDEgbWVzc2FnZTogJ01lc3NhZ2UgZnJvbSBzZWN0aW9uIG9uZScKIE1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogZXhwbGljaXRseSB3aXRoIDEgbWVzc2FnZTogJ01lc3NhZ2UgZnJvbSBzZWN0aW9uIHR3bycKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3BlYy5oYXNGaWx0ZXJzKCkgPT0gZmFsc2UgZm9yOiBmYWxzZSA9PSBmYWxzZQpAQCAtMTAxOSwyMiArODM2LDYgQEAKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3BlYy5tYXRjaGVzKCB0Y0IgKSA9PSBmYWxzZSBmb3I6IGZhbHNlID09IGZhbHNlCiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHNwZWMubWF0Y2hlcyggdGNDICkgPT0gZmFsc2UgZm9yOiBmYWxzZSA9PSBmYWxzZQogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzcGVjLm1hdGNoZXMoIHRjRCApID09IHRydWUgZm9yOiB0cnVlID09IHRydWUKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3BlYy5tYXRjaGVzKCBmYWtlVGVzdENhc2UoICIgIGFhcmR2YXJrICIgKSApIGZvcjogdHJ1ZQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzcGVjLm1hdGNoZXMoIGZha2VUZXN0Q2FzZSggIiAgYWFyZHZhcmsiICkgKSBmb3I6IHRydWUKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3BlYy5tYXRjaGVzKCBmYWtlVGVzdENhc2UoICIgYWFyZHZhcmsgIiApICkgZm9yOiB0cnVlCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHNwZWMubWF0Y2hlcyggZmFrZVRlc3RDYXNlKCAiYWFyZHZhcmsgIiApICkgZm9yOiB0cnVlCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHNwZWMubWF0Y2hlcyggZmFrZVRlc3RDYXNlKCAiYWFyZHZhcmsiICkgKSBmb3I6IHRydWUKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3BlYy5tYXRjaGVzKCBmYWtlVGVzdENhc2UoICIgIGFhcmR2YXJrICIgKSApIGZvcjogdHJ1ZQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzcGVjLm1hdGNoZXMoIGZha2VUZXN0Q2FzZSggIiAgYWFyZHZhcmsiICkgKSBmb3I6IHRydWUKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3BlYy5tYXRjaGVzKCBmYWtlVGVzdENhc2UoICIgYWFyZHZhcmsgIiApICkgZm9yOiB0cnVlCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHNwZWMubWF0Y2hlcyggZmFrZVRlc3RDYXNlKCAiYWFyZHZhcmsgIiApICkgZm9yOiB0cnVlCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHNwZWMubWF0Y2hlcyggZmFrZVRlc3RDYXNlKCAiYWFyZHZhcmsiICkgKSBmb3I6IHRydWUKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3BlYy5tYXRjaGVzKGZha2VUZXN0Q2FzZSgiaGlkZGVuIGFuZCBmb28iLCAiWy5dW2Zvb10iKSkgZm9yOiB0cnVlCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICEoc3BlYy5tYXRjaGVzKGZha2VUZXN0Q2FzZSgib25seSBmb28iLCAiW2Zvb10iKSkpIGZvcjogIWZhbHNlCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICEoc3BlYy5tYXRjaGVzKGZha2VUZXN0Q2FzZSgiaGlkZGVuIGFuZCBmb28iLCAiWy5dW2Zvb10iKSkpIGZvcjogIWZhbHNlCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICEoc3BlYy5tYXRjaGVzKGZha2VUZXN0Q2FzZSgib25seSBmb28iLCAiW2Zvb10iKSkpIGZvcjogIWZhbHNlCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICEoc3BlYy5tYXRjaGVzKGZha2VUZXN0Q2FzZSgib25seSBoaWRkZW4iLCAiWy5dIikpKSBmb3I6ICFmYWxzZQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzcGVjLm1hdGNoZXMoZmFrZVRlc3RDYXNlKCJuZWl0aGVyIGZvbyBub3IgaGlkZGVuIiwgIltiYXJdIikpIGZvcjogdHJ1ZQogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHAgPT0gMCBmb3I6IDAgPT0gMAogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHAgPT0gcE5VTEwgZm9yOiAwID09IDAKIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBwICE9IDAgZm9yOiAweDxoZXggZGlnaXRzPiAhPSAwCkBAIC0xMDQzLDEwICs4NDQsNiBAQAogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHJldHVybnNOdWxsKCkgPT0gMCBmb3I6IHtudWxsIHN0cmluZ30gPT0gMAogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHJldHVybnNDb25zdE51bGwoKSA9PSAwIGZvcjoge251bGwgc3RyaW5nfSA9PSAwCiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMCAhPSBwIGZvcjogMCAhPSAweDxoZXggZGlnaXRzPgotVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHN0cjEuc2l6ZSgpID09IDMgKyA1IGZvcjogOCA9PSA4Ci1Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3RyMi5zaXplKCkgPT0gMyArIDEwIGZvcjogMTMgPT0gMTMKLVRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdHIxLnNpemUoKSA9PSAyICsgNSBmb3I6IDcgPT0gNwotVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHN0cjIuc2l6ZSgpID09IDIgKyAxNSBmb3I6IDE3ID09IDE3CiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAiZm9vIiwgUHJlZGljYXRlPGNvbnN0IGNoYXIqPihbXSAoY29uc3QgY2hhciogY29uc3QmKSB7IHJldHVybiB0cnVlOyB9KSBmb3I6ICJmb28iIG1hdGNoZXMgdW5kZXNjcmliZWQgcHJlZGljYXRlCiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHJlc3VsdCBmb3I6IHs/fQogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjb25maWcucHJvY2Vzc05hbWUgPT0gIiIgZm9yOiAiIiA9PSAiIgpAQCAtMTA4OCwxNiArODg1LDYgQEAKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY29uZmlnLmFib3J0QWZ0ZXIgPT0gMiBmb3I6IDIgPT0gMgogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAhcmVzdWx0IGZvcjogdHJ1ZQogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiByZXN1bHQuZXJyb3JNZXNzYWdlKCksIENvbnRhaW5zKCJjb252ZXJ0IikgJiYgQ29udGFpbnMoIm9vcHMiKSBmb3I6ICJVbmFibGUgdG8gY29udmVydCAnb29wcycgdG8gZGVzdGluYXRpb24gdHlwZSIgKCBjb250YWluczogImNvbnZlcnQiIGFuZCBjb250YWluczogIm9vcHMiICkKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY2xpLnBhcnNlKHsidGVzdCIsICItLXdhaXQtZm9yLWtleXByZXNzIiwgc3RkOjpnZXQ8MD4oaW5wdXQpfSkgZm9yOiB7P30KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY29uZmlnLndhaXRGb3JLZXlwcmVzcyA9PSBzdGQ6OmdldDwxPihpbnB1dCkgZm9yOiAwID09IDAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY2xpLnBhcnNlKHsidGVzdCIsICItLXdhaXQtZm9yLWtleXByZXNzIiwgc3RkOjpnZXQ8MD4oaW5wdXQpfSkgZm9yOiB7P30KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY29uZmlnLndhaXRGb3JLZXlwcmVzcyA9PSBzdGQ6OmdldDwxPihpbnB1dCkgZm9yOiAxID09IDEKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY2xpLnBhcnNlKHsidGVzdCIsICItLXdhaXQtZm9yLWtleXByZXNzIiwgc3RkOjpnZXQ8MD4oaW5wdXQpfSkgZm9yOiB7P30KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY29uZmlnLndhaXRGb3JLZXlwcmVzcyA9PSBzdGQ6OmdldDwxPihpbnB1dCkgZm9yOiAyID09IDIKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY2xpLnBhcnNlKHsidGVzdCIsICItLXdhaXQtZm9yLWtleXByZXNzIiwgc3RkOjpnZXQ8MD4oaW5wdXQpfSkgZm9yOiB7P30KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY29uZmlnLndhaXRGb3JLZXlwcmVzcyA9PSBzdGQ6OmdldDwxPihpbnB1dCkgZm9yOiAzID09IDMKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogIXJlc3VsdCBmb3I6IHRydWUKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcmVzdWx0LmVycm9yTWVzc2FnZSgpLCBDb250YWlucygibmV2ZXIiKSAmJiBDb250YWlucygiYm90aCIpIGZvcjogImtleXByZXNzIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mOiBuZXZlciwgc3RhcnQsIGV4aXQgb3IgYm90aC4gJ3NvbWV0aW1lcycgbm90IHJlY29nbmlzZWQiICggY29udGFpbnM6ICJuZXZlciIgYW5kIGNvbnRhaW5zOiAiYm90aCIgKQogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjbGkucGFyc2UoeyJ0ZXN0IiwgIi1lIn0pIGZvcjogez99CiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNvbmZpZy5ub1Rocm93IGZvcjogdHJ1ZQogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjbGkucGFyc2UoeyJ0ZXN0IiwgIi0tbm90aHJvdyJ9KSBmb3I6IHs/fQpAQCAtMTEyMCwxNiArOTA3LDYgQEAKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY29uZmlnLnVzZUNvbG91ciA9PSBVc2VDb2xvdXI6Ok5vIGZvcjogMiA9PSAyCiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICFyZXN1bHQgZm9yOiB0cnVlCiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHJlc3VsdC5lcnJvck1lc3NhZ2UoKSwgQ29udGFpbnMoICJjb2xvdXIgbW9kZSBtdXN0IGJlIG9uZSBvZiIgKSBmb3I6ICJjb2xvdXIgbW9kZSBtdXN0IGJlIG9uZSBvZjogYXV0bywgeWVzIG9yIG5vLiAnd3JvbmcnIG5vdCByZWNvZ25pc2VkIiBjb250YWluczogImNvbG91ciBtb2RlIG11c3QgYmUgb25lIG9mIgotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjbGkucGFyc2UoeyAidGVzdCIsICItLWJlbmNobWFyay1zYW1wbGVzPTIwMCIgfSkgZm9yOiB7P30KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY29uZmlnLmJlbmNobWFya1NhbXBsZXMgPT0gMjAwIGZvcjogMjAwID09IDIwMAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjbGkucGFyc2UoeyAidGVzdCIsICItLWJlbmNobWFyay1yZXNhbXBsZXM9MjAwMDAiIH0pIGZvcjogez99Ci1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNvbmZpZy5iZW5jaG1hcmtSZXNhbXBsZXMgPT0gMjAwMDAgZm9yOiAyMDAwMCAoMHg8aGV4IGRpZ2l0cz4pID09IDIwMDAwICgweDxoZXggZGlnaXRzPikKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY2xpLnBhcnNlKHsgInRlc3QiLCAiLS1iZW5jaG1hcmstY29uZmlkZW5jZS1pbnRlcnZhbD0wLjk5IiB9KSBmb3I6IHs/fQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjb25maWcuYmVuY2htYXJrQ29uZmlkZW5jZUludGVydmFsID09IENhdGNoOjpEZXRhaWw6OkFwcHJveCgwLjk5KSBmb3I6IDAuOTkgPT0gQXBwcm94KCAwLjk5ICkKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY2xpLnBhcnNlKHsgInRlc3QiLCAiLS1iZW5jaG1hcmstbm8tYW5hbHlzaXMiIH0pIGZvcjogez99Ci1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNvbmZpZy5iZW5jaG1hcmtOb0FuYWx5c2lzIGZvcjogdHJ1ZQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjbGkucGFyc2UoeyAidGVzdCIsICItLWJlbmNobWFyay13YXJtdXAtdGltZT0xMCIgfSkgZm9yOiB7P30KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY29uZmlnLmJlbmNobWFya1dhcm11cFRpbWUgPT0gMTAgZm9yOiAxMCA9PSAxMAogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdGQ6OnR1cGxlX3NpemU8VGVzdFR5cGU+Ojp2YWx1ZSA+PSAxIGZvcjogMyA+PSAxCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHN0ZDo6dHVwbGVfc2l6ZTxUZXN0VHlwZT46OnZhbHVlID49IDEgZm9yOiAyID49IDEKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3RkOjp0dXBsZV9zaXplPFRlc3RUeXBlPjo6dmFsdWUgPj0gMSBmb3I6IDEgPj0gMQpAQCAtMTE2NCw2ICs5NDEsNyBAQAogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IEFwcHJveCggZCApID09IDEuMjMgZm9yOiBBcHByb3goIDEuMjMgKSA9PSAxLjIzCiBBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogQXBwcm94KCBkICkgIT0gMS4yMiBmb3I6IEFwcHJveCggMS4yMyApICE9IDEuMjIKIEFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBBcHByb3goIGQgKSAhPSAxLjI0IGZvcjogQXBwcm94KCAxLjIzICkgIT0gMS4yNAorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IElORklOSVRZID09IEFwcHJveChJTkZJTklUWSkgZm9yOiBpbmZmID09IEFwcHJveCggaW5mICkKIE1lc3NhZ2UgZnJvbSBzZWN0aW9uIG9uZQogTWVzc2FnZSBmcm9tIHNlY3Rpb24gdHdvCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiB0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgU3RhcnRzV2l0aCgiVGhpcyBTdHJpbmciKSBmb3I6ICJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgc3RhcnRzIHdpdGg6ICJUaGlzIFN0cmluZyIKQEAgLTExODMsMzIgKzk2MSwzNiBAQAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIEVuZHNXaXRoKCIgU3VCc1RySW5HIiwgQ2F0Y2g6OkNhc2VTZW5zaXRpdmU6Ok5vKSBmb3I6ICJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgZW5kcyB3aXRoOiAiIHN1YnN0cmluZyIgKGNhc2UgaW5zZW5zaXRpdmUpCiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW1wdHkuZW1wdHkoKSBmb3I6IHRydWUKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbXB0eS5zaXplKCkgPT0gMCBmb3I6IDAgPT0gMAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVtcHR5LmlzTnVsbFRlcm1pbmF0ZWQoKSBmb3I6IHRydWUKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdGQ6OnN0cmNtcCggZW1wdHkuY19zdHIoKSwgIiIgKSA9PSAwIGZvcjogMCA9PSAwCiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcy5lbXB0eSgpID09IGZhbHNlIGZvcjogZmFsc2UgPT0gZmFsc2UKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzLnNpemUoKSA9PSA1IGZvcjogNSA9PSA1Ci1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcy5pc051bGxUZXJtaW5hdGVkKCkgZm9yOiB0cnVlCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaXNTdWJzdHJpbmcoIHMgKSA9PSBmYWxzZSBmb3I6IGZhbHNlID09IGZhbHNlCiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3RkOjpzdHJjbXAoIHJhd0NoYXJzLCAiaGVsbG8iICkgPT0gMCBmb3I6IDAgPT0gMAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHMuY19zdHIoKQorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGlzT3duZWQoIHMgKSA9PSBmYWxzZSBmb3I6IGZhbHNlID09IGZhbHNlCiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcy5jX3N0cigpID09IHJhd0NoYXJzIGZvcjogImhlbGxvIiA9PSAiaGVsbG8iCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcy5kYXRhKCkgPT0gcmF3Q2hhcnMgZm9yOiAiaGVsbG8iID09ICJoZWxsbyIKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBpc093bmVkKCBzICkgPT0gZmFsc2UgZm9yOiBmYWxzZSA9PSBmYWxzZQogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IG9yaWdpbmFsID09ICJvcmlnaW5hbCIKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAhKG9yaWdpbmFsLmlzTnVsbFRlcm1pbmF0ZWQoKSkgZm9yOiAhZmFsc2UKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBvcmlnaW5hbC5jX3N0cigpCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogb3JpZ2luYWwuZGF0YSgpCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaXNTdWJzdHJpbmcoIG9yaWdpbmFsICkgZm9yOiB0cnVlCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaXNPd25lZCggb3JpZ2luYWwgKSA9PSBmYWxzZSBmb3I6IGZhbHNlID09IGZhbHNlCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaXNTdWJzdHJpbmcoIG9yaWdpbmFsICkgPT0gZmFsc2UgZm9yOiBmYWxzZSA9PSBmYWxzZQorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGlzT3duZWQoIG9yaWdpbmFsICkgZm9yOiB0cnVlCiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3MuZW1wdHkoKSA9PSBmYWxzZSBmb3I6IGZhbHNlID09IGZhbHNlCiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3Muc2l6ZSgpID09IDUgZm9yOiA1ID09IDUKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdGQ6OnN0cm5jbXAoIHNzLmRhdGEoKSwgImhlbGxvIiwgNSApID09IDAgZm9yOiAwID09IDAKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdGQ6OnN0cmNtcCggc3MuY19zdHIoKSwgImhlbGxvIiApID09IDAgZm9yOiAwID09IDAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzcyA9PSAiaGVsbG8iIGZvcjogaGVsbG8gPT0gImhlbGxvIgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGlzU3Vic3RyaW5nKCBzcyApIGZvcjogdHJ1ZQorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGlzT3duZWQoIHNzICkgPT0gZmFsc2UgZm9yOiBmYWxzZSA9PSBmYWxzZQorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHJhd0NoYXJzID09IHMuY3VycmVudERhdGEoKSBmb3I6ICJoZWxsbyB3b3JsZCEiID09ICJoZWxsbyB3b3JsZCEiCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3MuY19zdHIoKSAhPSByYXdDaGFycyBmb3I6ICJoZWxsbyIgIT0gImhlbGxvIHdvcmxkISIKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBpc1N1YnN0cmluZyggc3MgKSA9PSBmYWxzZSBmb3I6IGZhbHNlID09IGZhbHNlCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaXNPd25lZCggc3MgKSBmb3I6IHRydWUKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzcy5jdXJyZW50RGF0YSgpICE9IHMuY3VycmVudERhdGEoKSBmb3I6ICJoZWxsbyIgIT0gImhlbGxvIHdvcmxkISIKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzcy5zaXplKCkgPT0gNiBmb3I6IDYgPT0gNgogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHN0ZDo6c3RyY21wKCBzcy5jX3N0cigpLCAid29ybGQhIiApID09IDAgZm9yOiAwID09IDAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzLmRhdGEoKSA9PSBzMi5kYXRhKCkgZm9yOiAiaGVsbG8gd29ybGQhIiA9PSAiaGVsbG8gd29ybGQhIgotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHMuZGF0YSgpID09IHNzLmRhdGEoKSBmb3I6ICJoZWxsbyB3b3JsZCEiID09ICJoZWxsbyB3b3JsZCEiCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcy5zdWJzdHIocy5zaXplKCkgKyAxLCAxMjMpLmVtcHR5KCkgZm9yOiB0cnVlCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3RkOjpzdHJjbXAoc3MuY19zdHIoKSwgIndvcmxkISIpID09IDAgZm9yOiAwID09IDAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAoY2hhciopYnVmZmVyMSAhPSAoY2hhciopYnVmZmVyMiBmb3I6ICJIZWxsbyIgIT0gIkhlbGxvIgotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGxlZnQgPT0gcmlnaHQgZm9yOiBIZWxsbyA9PSBIZWxsbwotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGxlZnQgIT0gbGVmdC5zdWJzdHIoMCwgMykgZm9yOiBIZWxsbyAhPSBIZWwKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzLmNfc3RyKCkgPT0gczIuY19zdHIoKSBmb3I6ICJoZWxsbyB3b3JsZCEiID09ICJoZWxsbyB3b3JsZCEiCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcy5jX3N0cigpICE9IHNzLmNfc3RyKCkgZm9yOiAiaGVsbG8gd29ybGQhIiAhPSAiaGVsbG8iCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogU3RyaW5nUmVmKCJoZWxsbyIpID09IFN0cmluZ1JlZigiaGVsbG8iKSBmb3I6IGhlbGxvID09IGhlbGxvCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogU3RyaW5nUmVmKCJoZWxsbyIpICE9IFN0cmluZ1JlZigiY2VsbG8iKSBmb3I6IGhlbGxvICE9IGNlbGxvCiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3IgPT0gImEgc3RhbmRhcmQgc3RyaW5nIiBmb3I6IGEgc3RhbmRhcmQgc3RyaW5nID09ICJhIHN0YW5kYXJkIHN0cmluZyIKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzci5zaXplKCkgPT0gc3RkU3RyLnNpemUoKSBmb3I6IDE3ID09IDE3CiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3IgPT0gImEgc3RhbmRhcmQgc3RyaW5nIiBmb3I6IGEgc3RhbmRhcmQgc3RyaW5nID09ICJhIHN0YW5kYXJkIHN0cmluZyIKQEAgLTEyMTksMTcgKzEwMDEsMTEgQEAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdGRTdHIuc2l6ZSgpID09IHNyLnNpemUoKSBmb3I6IDExID09IDExCiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3RkU3RyID09ICJhIHN0cmluZ3JlZiIgZm9yOiAiYSBzdHJpbmdyZWYiID09ICJhIHN0cmluZ3JlZiIKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdGRTdHIuc2l6ZSgpID09IHNyLnNpemUoKSBmb3I6IDExID09IDExCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogd2l0aCAxIG1lc3NhZ2U6ICdTdHJpbmdSZWZ7fS5zaXplKCkgPT0gMCcKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB3aXRoIDEgbWVzc2FnZTogJ1N0cmluZ1JlZnsgImFiYyIsIDMgfS5zaXplKCkgPT0gMycKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB3aXRoIDEgbWVzc2FnZTogJ1N0cmluZ1JlZnsgImFiYyIsIDMgfS5pc051bGxUZXJtaW5hdGVkKCknCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogd2l0aCAxIG1lc3NhZ2U6ICdTdHJpbmdSZWZ7ICJhYmMiLCAyIH0uc2l6ZSgpID09IDInCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogd2l0aCAxIG1lc3NhZ2U6ICchKFN0cmluZ1JlZnsgImFiYyIsIDIgfS5pc051bGxUZXJtaW5hdGVkKCkpJwotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHdpdGggMSBtZXNzYWdlOiAnIShzcjEuZW1wdHkoKSknCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogd2l0aCAxIG1lc3NhZ2U6ICdzcjEuc2l6ZSgpID09IDMnCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogd2l0aCAxIG1lc3NhZ2U6ICdzcjEuaXNOdWxsVGVybWluYXRlZCgpJwotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHdpdGggMSBtZXNzYWdlOiAnc3IyLmVtcHR5KCknCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogd2l0aCAxIG1lc3NhZ2U6ICdzcjIuc2l6ZSgpID09IDAnCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogd2l0aCAxIG1lc3NhZ2U6ICdzcjIuaXNOdWxsVGVybWluYXRlZCgpJworU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHN0ZFN0ciA9PSAiYSBzdHJpbmdyZWYiIGZvcjogImEgc3RyaW5ncmVmIiA9PSAiYSBzdHJpbmdyZWYiCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3RkU3RyLnNpemUoKSA9PSBzci5zaXplKCkgZm9yOiAxMSA9PSAxMQorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGFzY2lpLm51bWJlck9mQ2hhcmFjdGVycygpID09IGFzY2lpLnNpemUoKSBmb3I6IDM5ID09IDM5CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc2ltcGxldTgubnVtYmVyT2ZDaGFyYWN0ZXJzKCkgPT0gMzAgZm9yOiAzMCA9PSAzMAorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVtb2ppcy5udW1iZXJPZkNoYXJhY3RlcnMoKSA9PSA5IGZvcjogOSA9PSA5CiBUb1N0cmluZ0Nocm9uby50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBtaW51dGUgPT0gc2Vjb25kcyBmb3I6IDEgbSA9PSA2MCBzCiBUb1N0cmluZ0Nocm9uby50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBob3VyICE9IHNlY29uZHMgZm9yOiAxIGggIT0gNjAgcwogVG9TdHJpbmdDaHJvbm8udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogbWljcm8gIT0gbWlsbGkgZm9yOiAxIHVzICE9IDEgbXMKQEAgLTEyNjMsMTYgKzEwMzksNiBAQAogVGFnLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHJlZ2lzdHJ5LmFkZCggIlt0aGUgQCBpcyBub3QgYXQgdGhlIHN0YXJ0XSIsICIiLCBDYXRjaDo6U291cmNlTGluZUluZm8oICJmaWxlIiwgMyApICkKIFRhZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiByZWdpc3RyeS5hZGQoICJAbm8gc3F1YXJlIGJyYWNrZXQgYXQgc3RhcnRdIiwgIiIsIENhdGNoOjpTb3VyY2VMaW5lSW5mbyggImZpbGUiLCAzICkgKQogVGFnLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHJlZ2lzdHJ5LmFkZCggIltAbm8gc3F1YXJlIGJyYWNrZXQgYXQgZW5kIiwgIiIsIENhdGNoOjpTb3VyY2VMaW5lSW5mbyggImZpbGUiLCAzICkgKQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogVGVtcGxhdGVfRml4dHVyZTxUZXN0VHlwZT46Om1fYSA9PSAxIGZvcjogMSA9PSAxCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBUZW1wbGF0ZV9GaXh0dXJlPFRlc3RUeXBlPjo6bV9hID09IDEgZm9yOiAxID09IDEKLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IFRlbXBsYXRlX0ZpeHR1cmU8VGVzdFR5cGU+OjptX2EgPT0gMSBmb3I6IDEuMCA9PSAxCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHNpemVvZihUZXN0VHlwZSkgPiAwIGZvcjogMSA+IDAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc2l6ZW9mKFRlc3RUeXBlKSA+IDAgZm9yOiA0ID4gMAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzaXplb2YoVGVzdFR5cGUpID4gMCBmb3I6IDEgPiAwCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHNpemVvZihUZXN0VHlwZSkgPiAwIGZvcjogNCA+IDAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc2l6ZW9mKFRlc3RUeXBlKSA+IDAgZm9yOiA0ID4gMAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzaXplb2YoVGVzdFR5cGUpID4gMCBmb3I6IDEgPiAwCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHNpemVvZihUZXN0VHlwZSkgPiAwIGZvcjogNCA+IDAKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gNSBmb3I6IDUgPT0gNQogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gNSBmb3I6IDUgPj0gNQogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSAxMCBmb3I6IDEwID09IDEwCkBAIC0xMzQxLDc3ICsxMTA3LDggQEAKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IDUgZm9yOiA1ID49IDUKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gNSBmb3I6IDUgPT0gNQogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gNSBmb3I6IDUgPj0gNQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSBWIGZvcjogNiA9PSA2Ci1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSBWIGZvcjogNiA+PSA2Ci1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IDIgKiBWIGZvcjogMTIgPT0gMTIKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IDIgKiBWIGZvcjogMTIgPj0gMTIKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gViBmb3I6IDYgPT0gNgotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gViBmb3I6IDYgPj0gNgotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSAwIGZvcjogMCA9PSAwCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSBWIGZvcjogNiA+PSA2Ci1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA9PSAwIGZvcjogMCA9PSAwCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IFYgZm9yOiA2ID09IDYKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IFYgZm9yOiA2ID49IDYKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gViBmb3I6IDYgPT0gNgotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gMiAqIFYgZm9yOiAxMiA+PSAxMgotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSBWIGZvcjogNiA9PSA2Ci1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSBWIGZvcjogNiA+PSA2Ci1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IFYgZm9yOiA2ID09IDYKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IFYgZm9yOiA2ID49IDYKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gViBmb3I6IDQgPT0gNAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gViBmb3I6IDQgPj0gNAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSAyICogViBmb3I6IDggPT0gOAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gMiAqIFYgZm9yOiA4ID49IDgKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gViBmb3I6IDQgPT0gNAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gViBmb3I6IDQgPj0gNAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSAwIGZvcjogMCA9PSAwCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSBWIGZvcjogNCA+PSA0Ci1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA9PSAwIGZvcjogMCA9PSAwCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IFYgZm9yOiA0ID09IDQKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IFYgZm9yOiA0ID49IDQKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gViBmb3I6IDQgPT0gNAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gMiAqIFYgZm9yOiA4ID49IDgKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gViBmb3I6IDQgPT0gNAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gViBmb3I6IDQgPj0gNAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSBWIGZvcjogNCA9PSA0Ci1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSBWIGZvcjogNCA+PSA0Ci1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IFYgZm9yOiA1ID09IDUKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IFYgZm9yOiA1ID49IDUKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gMiAqIFYgZm9yOiAxMCA9PSAxMAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gMiAqIFYgZm9yOiAxMCA+PSAxMAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSBWIGZvcjogNSA9PSA1Ci1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSBWIGZvcjogNSA+PSA1Ci1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IDAgZm9yOiAwID09IDAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IFYgZm9yOiA1ID49IDUKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID09IDAgZm9yOiAwID09IDAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gViBmb3I6IDUgPT0gNQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gViBmb3I6IDUgPj0gNQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSBWIGZvcjogNSA9PSA1Ci1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSAyICogViBmb3I6IDEwID49IDEwCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IFYgZm9yOiA1ID09IDUKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IFYgZm9yOiA1ID49IDUKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gViBmb3I6IDUgPT0gNQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gViBmb3I6IDUgPj0gNQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSBWIGZvcjogMTUgPT0gMTUKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IFYgZm9yOiAxNSA+PSAxNQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSAyICogViBmb3I6IDMwID09IDMwCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSAyICogViBmb3I6IDMwID49IDMwCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IFYgZm9yOiAxNSA9PSAxNQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gViBmb3I6IDE1ID49IDE1Ci1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IDAgZm9yOiAwID09IDAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IFYgZm9yOiAxNSA+PSAxNQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPT0gMCBmb3I6IDAgPT0gMAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSBWIGZvcjogMTUgPT0gMTUKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IFYgZm9yOiAxNSA+PSAxNQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSBWIGZvcjogMTUgPT0gMTUKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IDIgKiBWIGZvcjogMzAgPj0gMzAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gViBmb3I6IDE1ID09IDE1Ci1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSBWIGZvcjogMTUgPj0gMTUKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gViBmb3I6IDE1ID09IDE1Ci1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSBWIGZvcjogMTUgPj0gMTUKIFZhcmlhZGljTWFjcm9zLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHdpdGggMSBtZXNzYWdlOiAnbm8gYXNzZXJ0aW9ucycKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAweDxoZXggZGlnaXRzPiA9PSBiaXQzMGFuZDMxIGZvcjogMzIyMTIyNTQ3MiAoMHg8aGV4IGRpZ2l0cz4pID09IDMyMjEyMjU0NzIKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDoKIE1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZCAtIGJ1dCB3YXMgb2s6IDEgPT0gMgogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB3aXRoIDEgbWVzc2FnZTogJ29vcHMhJwogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIHdpdGggbWVzc2FnZTogJ0ZvciBzb21lIHJlYXNvbiBzb21lb25lIGlzIHRocm93aW5nIGEgc3RyaW5nIGxpdGVyYWwhJwpAQCAtMTQ4MiwzMCArMTE3OSw2IEBACiBQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzMS5pc0NvbXBsZXRlKCkgZm9yOiB0cnVlCiBQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0ZXN0Q2FzZS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgZm9yOiBmYWxzZSA9PSBmYWxzZQogUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGVzdENhc2UuaXNDb21wbGV0ZSgpIGZvcjogdHJ1ZQotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdHJpbShzdGQ6OnN0cmluZyhub193aGl0ZXNwYWNlKSkgPT0gbm9fd2hpdGVzcGFjZSBmb3I6ICJUaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUiCi09PQotIlRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZSIKLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRyaW0oc3RkOjpzdHJpbmcobGVhZGluZ193aGl0ZXNwYWNlKSkgPT0gbm9fd2hpdGVzcGFjZSBmb3I6ICJUaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUiCi09PQotIlRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZSIKLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRyaW0oc3RkOjpzdHJpbmcodHJhaWxpbmdfd2hpdGVzcGFjZSkpID09IG5vX3doaXRlc3BhY2UgZm9yOiAiVGhlcmUgaXMgbm8gZXh0cmEgd2hpdGVzcGFjZSBoZXJlIgotPT0KLSJUaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUiCi1TdHJpbmdNYW5pcC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0cmltKHN0ZDo6c3RyaW5nKHdoaXRlc3BhY2VfYXRfYm90aF9lbmRzKSkgPT0gbm9fd2hpdGVzcGFjZSBmb3I6ICJUaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUiCi09PQotIlRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZSIKLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRyaW0oU3RyaW5nUmVmKG5vX3doaXRlc3BhY2UpKSA9PSBTdHJpbmdSZWYobm9fd2hpdGVzcGFjZSkgZm9yOiBUaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUKLT09Ci1UaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUKLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRyaW0oU3RyaW5nUmVmKGxlYWRpbmdfd2hpdGVzcGFjZSkpID09IFN0cmluZ1JlZihub193aGl0ZXNwYWNlKSBmb3I6IFRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZQotPT0KLVRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZQotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdHJpbShTdHJpbmdSZWYodHJhaWxpbmdfd2hpdGVzcGFjZSkpID09IFN0cmluZ1JlZihub193aGl0ZXNwYWNlKSBmb3I6IFRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZQotPT0KLVRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZQotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdHJpbShTdHJpbmdSZWYod2hpdGVzcGFjZV9hdF9ib3RoX2VuZHMpKSA9PSBTdHJpbmdSZWYobm9fd2hpdGVzcGFjZSkgZm9yOiBUaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUKLT09Ci1UaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUKIEV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiB3aXRoIG1lc3NhZ2U6ICczLjE0JwogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGQgPT0gYXBwcm94KCAxLjIzICkgZm9yOiAxLjIzID09IEFwcHJveCggMS4yMyApCiBBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZCA9PSBhcHByb3goIDEuMjIgKSBmb3I6IDEuMjMgPT0gQXBwcm94KCAxLjIyICkKQEAgLTE1ODEsOSArMTI1NCw0OCBAQAogImRvbid0ICZxdW90O3F1b3RlJnF1b3Q7IG1lIG9uIHRoYXQiCiBYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCAiW1x4MDFdIiApID09ICJbXFx4MDFdIiBmb3I6ICJbXHgwMV0iID09ICJbXHgwMV0iCiBYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCAiW1x4N0ZdIiApID09ICJbXFx4N0ZdIiBmb3I6ICJbXHg3Rl0iID09ICJbXHg3Rl0iCi1UYWcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGVzdGNhc2UudGFncywgVmVjdG9yQ29udGFpbnMoc3RkOjpzdHJpbmcoIi4iKSkgJiYgVmVjdG9yQ29udGFpbnMoc3RkOjpzdHJpbmcoIiFoaWRlIikpIGZvcjogeyAiIWhpZGUiLCAiLiIgfSAoIENvbnRhaW5zOiAiLiIgYW5kIENvbnRhaW5zOiAiIWhpZGUiICkKLVRhZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0ZXN0Y2FzZS50YWdzLCBWZWN0b3JDb250YWlucyhzdGQ6OnN0cmluZygiLiIpKSAmJiBWZWN0b3JDb250YWlucyhzdGQ6OnN0cmluZygiIWhpZGUiKSkgZm9yOiB7ICIhaGlkZSIsICIuIiB9ICggQ29udGFpbnM6ICIuIiBhbmQgQ29udGFpbnM6ICIhaGlkZSIgKQotVGFnLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRlc3RjYXNlLnRhZ3MsIFZlY3RvckNvbnRhaW5zKHN0ZDo6c3RyaW5nKCIuIikpICYmIFZlY3RvckNvbnRhaW5zKHN0ZDo6c3RyaW5nKCIhaGlkZSIpKSBmb3I6IHsgIiFoaWRlIiwgIi4iLCAiZm9vIiB9ICggQ29udGFpbnM6ICIuIiBhbmQgQ29udGFpbnM6ICIhaGlkZSIgKQorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSh1OCJIZXJlIGJlIPCfkb4iKSA9PSB1OCJIZXJlIGJlIPCfkb4iIGZvcjogIkhlcmUgYmUg8J+RviIgPT0gIkhlcmUgYmUg8J+RviIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUodTgixaHFoSIpID09IHU4IsWhxaEiIGZvcjogIsWhxaEiID09ICLFocWhIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhERlx4QkYiKSA9PSAiXHhERlx4QkYiIGZvcjogIt+/IiA9PSAi378iCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEUwXHhBMFx4ODAiKSA9PSAiXHhFMFx4QTBceDgwIiBmb3I6ICLgoIAiID09ICLgoIAiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEVEXHg5Rlx4QkYiKSA9PSAiXHhFRFx4OUZceEJGIiBmb3I6ICLtn78iID09ICLtn78iCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEVFXHg4MFx4ODAiKSA9PSAiXHhFRVx4ODBceDgwIiBmb3I6ICLugIAiID09ICLugIAiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEVGXHhCRlx4QkYiKSA9PSAiXHhFRlx4QkZceEJGIiBmb3I6ICLvv78iID09ICLvv78iCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEYwXHg5MFx4ODBceDgwIikgPT0gIlx4RjBceDkwXHg4MFx4ODAiIGZvcjogIvCQgIAiID09ICLwkICAIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhGNFx4OEZceEJGXHhCRiIpID09ICJceEY0XHg4Rlx4QkZceEJGIiBmb3I6ICL0j7+/IiA9PSAi9I+/vyIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIkhlcmUgXHhGRiBiZSDwn5G+IikgPT0gdTgiSGVyZSBcXHhGRiBiZSDwn5G+IiBmb3I6ICJIZXJlIFx4RkYgYmUg8J+RviIgPT0gIkhlcmUgXHhGRiBiZSDwn5G+IgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhGRiIpID09ICJcXHhGRiIgZm9yOiAiXHhGRiIgPT0gIlx4RkYiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEM1XHhDNVx4QTAiKSA9PSB1OCJcXHhDNcWgIiBmb3I6ICJceEM1xaAiID09ICJceEM1xaAiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEY0XHg5MFx4ODBceDgwIikgPT0gdTgiXFx4RjRcXHg5MFxceDgwXFx4ODAiIGZvcjogIlx4RjRceDkwXHg4MFx4ODAiID09ICJceEY0XHg5MFx4ODBceDgwIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhDMFx4ODAiKSA9PSB1OCJcXHhDMFxceDgwIiBmb3I6ICJceEMwXHg4MCIgPT0gIlx4QzBceDgwIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhGMFx4ODBceDgwXHg4MCIpID09IHU4IlxceEYwXFx4ODBcXHg4MFxceDgwIiBmb3I6ICJceEYwXHg4MFx4ODBceDgwIiA9PSAiXHhGMFx4ODBceDgwXHg4MCIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4QzFceEJGIikgPT0gdTgiXFx4QzFcXHhCRiIgZm9yOiAiXHhDMVx4QkYiID09ICJceEMxXHhCRiIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RTBceDlGXHhCRiIpID09IHU4IlxceEUwXFx4OUZcXHhCRiIgZm9yOiAiXHhFMFx4OUZceEJGIiA9PSAiXHhFMFx4OUZceEJGIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhGMFx4OEZceEJGXHhCRiIpID09IHU4IlxceEYwXFx4OEZcXHhCRlxceEJGIiBmb3I6ICJceEYwXHg4Rlx4QkZceEJGIiA9PSAiXHhGMFx4OEZceEJGXHhCRiIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RURceEEwXHg4MCIpID09ICJceEVEXHhBMFx4ODAiIGZvcjogIu2ggCIgPT0gIu2ggCIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RURceEFGXHhCRiIpID09ICJceEVEXHhBRlx4QkYiIGZvcjogIu2vvyIgPT0gIu2vvyIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RURceEIwXHg4MCIpID09ICJceEVEXHhCMFx4ODAiIGZvcjogIu2wgCIgPT0gIu2wgCIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RURceEJGXHhCRiIpID09ICJceEVEXHhCRlx4QkYiIGZvcjogIu2/vyIgPT0gIu2/vyIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4ODAiKSA9PSB1OCJcXHg4MCIgZm9yOiAiXHg4MCIgPT0gIlx4ODAiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceDgxIikgPT0gdTgiXFx4ODEiIGZvcjogIlx4ODEiID09ICJceDgxIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhCQyIpID09IHU4IlxceEJDIiBmb3I6ICJceEJDIiA9PSAiXHhCQyIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4QkYiKSA9PSB1OCJcXHhCRiIgZm9yOiAiXHhCRiIgPT0gIlx4QkYiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEY1XHg4MFx4ODBceDgwIikgPT0gdTgiXFx4RjVcXHg4MFxceDgwXFx4ODAiIGZvcjogIlx4RjVceDgwXHg4MFx4ODAiID09ICJceEY1XHg4MFx4ODBceDgwIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhGNlx4ODBceDgwXHg4MCIpID09IHU4IlxceEY2XFx4ODBcXHg4MFxceDgwIiBmb3I6ICJceEY2XHg4MFx4ODBceDgwIiA9PSAiXHhGNlx4ODBceDgwXHg4MCIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RjdceDgwXHg4MFx4ODAiKSA9PSB1OCJcXHhGN1xceDgwXFx4ODBcXHg4MCIgZm9yOiAiXHhGN1x4ODBceDgwXHg4MCIgPT0gIlx4RjdceDgwXHg4MFx4ODAiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceERFIikgPT0gdTgiXFx4REUiIGZvcjogIlx4REUiID09ICJceERFIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhERiIpID09IHU4IlxceERGIiBmb3I6ICJceERGIiA9PSAiXHhERiIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RTAiKSA9PSB1OCJcXHhFMCIgZm9yOiAiXHhFMCIgPT0gIlx4RTAiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEVGIikgPT0gdTgiXFx4RUYiIGZvcjogIlx4RUYiID09ICJceEVGIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhGMCIpID09IHU4IlxceEYwIiBmb3I6ICJceEYwIiA9PSAiXHhGMCIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RjQiKSA9PSB1OCJcXHhGNCIgZm9yOiAiXHhGNCIgPT0gIlx4RjQiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEUwXHg4MCIpID09IHU4IlxceEUwXFx4ODAiIGZvcjogIlx4RTBceDgwIiA9PSAiXHhFMFx4ODAiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEUwXHhCRiIpID09IHU4IlxceEUwXFx4QkYiIGZvcjogIlx4RTBceEJGIiA9PSAiXHhFMFx4QkYiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEUxXHg4MCIpID09IHU4IlxceEUxXFx4ODAiIGZvcjogIlx4RTFceDgwIiA9PSAiXHhFMVx4ODAiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEYwXHg4MCIpID09IHU4IlxceEYwXFx4ODAiIGZvcjogIlx4RjBceDgwIiA9PSAiXHhGMFx4ODAiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEY0XHg4MCIpID09IHU4IlxceEY0XFx4ODAiIGZvcjogIlx4RjRceDgwIiA9PSAiXHhGNFx4ODAiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEYwXHg4MFx4ODAiKSA9PSB1OCJcXHhGMFxceDgwXFx4ODAiIGZvcjogIlx4RjBceDgwXHg4MCIgPT0gIlx4RjBceDgwXHg4MCIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RjRceDgwXHg4MCIpID09IHU4IlxceEY0XFx4ODBcXHg4MCIgZm9yOiAiXHhGNFx4ODBceDgwIiA9PSAiXHhGNFx4ODBceDgwIgogVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogQ2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCBlbXB0eSApID09ICJ7ICB9IiBmb3I6ICJ7ICB9IiA9PSAieyAgfSIKIFRvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IENhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggb25lVmFsdWUgKSA9PSAieyA0MiB9IiBmb3I6ICJ7IDQyIH0iID09ICJ7IDQyIH0iCiBUb1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIHR3b1ZhbHVlcyApID09ICJ7IDQyLCAyNTAgfSIgZm9yOiAieyA0MiwgMjUwIH0iID09ICJ7IDQyLCAyNTAgfSIKQEAgLTE2NTIsMTMgKzEzNjQsNiBAQAogVG9TdHJpbmdQYWlyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCBwYWlyICkgPT0gInsgeyA0MiwgXCJBcnRodXJcIiB9LCB7IFwiRm9yZFwiLCAyNCB9IH0iIGZvcjogInsgeyA0MiwgIkFydGh1ciIgfSwgeyAiRm9yZCIsIDI0IH0gfSIKID09CiAieyB7IDQyLCAiQXJ0aHVyIiB9LCB7ICJGb3JkIiwgMjQgfSB9IgotVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcGFyc2VFbnVtcyggIiIgKSwgRXF1YWxzKCBzdGQ6OnZlY3RvcjxDYXRjaDo6U3RyaW5nUmVmPnt9ICkgZm9yOiB7ICB9IEVxdWFsczogeyAgfQotVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcGFyc2VFbnVtcyggIkNsYXNzTmFtZTo6RW51bU5hbWU6OlZhbHVlMSIgKSwgRXF1YWxzKHN0ZDo6dmVjdG9yPENhdGNoOjpTdHJpbmdSZWY+eyJWYWx1ZTEifSApIGZvcjogeyBWYWx1ZTEgfSBFcXVhbHM6IHsgVmFsdWUxIH0KLVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHBhcnNlRW51bXMoICJWYWx1ZTEiICksIEVxdWFscyggc3RkOjp2ZWN0b3I8Q2F0Y2g6OlN0cmluZ1JlZj57IlZhbHVlMSJ9ICkgZm9yOiB7IFZhbHVlMSB9IEVxdWFsczogeyBWYWx1ZTEgfQotVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcGFyc2VFbnVtcyggIkVudW1OYW1lOjpWYWx1ZTEiICksIEVxdWFscyhzdGQ6OnZlY3RvcjxDYXRjaDo6U3RyaW5nUmVmPnsiVmFsdWUxIn0gKSBmb3I6IHsgVmFsdWUxIH0gRXF1YWxzOiB7IFZhbHVlMSB9Ci1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBwYXJzZUVudW1zKCAiQ2xhc3NOYW1lOjpFbnVtTmFtZTo6VmFsdWUxLCBDbGFzc05hbWU6OkVudW1OYW1lOjpWYWx1ZTIiICksIEVxdWFscyggc3RkOjp2ZWN0b3I8Q2F0Y2g6OlN0cmluZ1JlZj57IlZhbHVlMSIsICJWYWx1ZTIifSApIGZvcjogeyBWYWx1ZTEsIFZhbHVlMiB9IEVxdWFsczogeyBWYWx1ZTEsIFZhbHVlMiB9Ci1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBwYXJzZUVudW1zKCAiQ2xhc3NOYW1lOjpFbnVtTmFtZTo6VmFsdWUxLCBDbGFzc05hbWU6OkVudW1OYW1lOjpWYWx1ZTIsIENsYXNzTmFtZTo6RW51bU5hbWU6OlZhbHVlMyIgKSwgRXF1YWxzKCBzdGQ6OnZlY3RvcjxDYXRjaDo6U3RyaW5nUmVmPnsiVmFsdWUxIiwgIlZhbHVlMiIsICJWYWx1ZTMifSApIGZvcjogeyBWYWx1ZTEsIFZhbHVlMiwgVmFsdWUzIH0gRXF1YWxzOiB7IFZhbHVlMSwgVmFsdWUyLCBWYWx1ZTMgfQotVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcGFyc2VFbnVtcyggIkNsYXNzTmFtZTo6RW51bU5hbWU6OlZhbHVlMSxDbGFzc05hbWU6OkVudW1OYW1lOjpWYWx1ZTIgLCBDbGFzc05hbWU6OkVudW1OYW1lOjpWYWx1ZTMiICksIEVxdWFscyggc3RkOjp2ZWN0b3I8Q2F0Y2g6OlN0cmluZ1JlZj57IlZhbHVlMSIsICJWYWx1ZTIiLCAiVmFsdWUzIn0gKSBmb3I6IHsgVmFsdWUxLCBWYWx1ZTIsIFZhbHVlMyB9IEVxdWFsczogeyBWYWx1ZTEsIFZhbHVlMiwgVmFsdWUzIH0KIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBwID09IDAgZm9yOiAwID09IDAKIE1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdHJ1ZSB3aXRoIDEgbWVzc2FnZTogJ3RoaXMgTUFZIGJlIHNlZW4gSUYgaW5mbyBpcyBwcmludGVkIGZvciBwYXNzaW5nIGFzc2VydGlvbnMnCiBNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IGZhbHNlIHdpdGggMiBtZXNzYWdlczogJ3RoaXMgU0hPVUxEIGJlIHNlZW4nIGFuZCAndGhpcyBTSE9VTEQgYWxzbyBiZSBzZWVuJwpAQCAtMTY2OSwyNiArMTM3NCwyMyBAQAogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBhICE9IGIgZm9yOiAxICE9IDIKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogYiAhPSBhIGZvcjogMiAhPSAxCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGEgIT0gYiBmb3I6IDEgIT0gMgotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKGxldHRlcnMsICJiIiwgInoiKSBmb3I6IHRydWUKLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGxldHRlcnMgPT0gImF6Y2RlZmNnIiBmb3I6ICJhemNkZWZjZyIgPT0gImF6Y2RlZmNnIgotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKGxldHRlcnMsICJjIiwgInoiKSBmb3I6IHRydWUKLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGxldHRlcnMgPT0gImFiemRlZnpnIiBmb3I6ICJhYnpkZWZ6ZyIgPT0gImFiemRlZnpnIgotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKGxldHRlcnMsICJhIiwgInoiKSBmb3I6IHRydWUKLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGxldHRlcnMgPT0gInpiY2RlZmNnIiBmb3I6ICJ6YmNkZWZjZyIgPT0gInpiY2RlZmNnIgotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKGxldHRlcnMsICJnIiwgInoiKSBmb3I6IHRydWUKLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGxldHRlcnMgPT0gImFiY2RlZmN6IiBmb3I6ICJhYmNkZWZjeiIgPT0gImFiY2RlZmN6IgotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKGxldHRlcnMsIGxldHRlcnMsICJyZXBsYWNlZCIpIGZvcjogdHJ1ZQotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogbGV0dGVycyA9PSAicmVwbGFjZWQiIGZvcjogInJlcGxhY2VkIiA9PSAicmVwbGFjZWQiCi1TdHJpbmdNYW5pcC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAhKENhdGNoOjpyZXBsYWNlSW5QbGFjZShsZXR0ZXJzLCAieCIsICJ6IikpIGZvcjogIWZhbHNlCi1TdHJpbmdNYW5pcC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBsZXR0ZXJzID09IGxldHRlcnMgZm9yOiAiYWJjZGVmY2ciID09ICJhYmNkZWZjZyIKLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IENhdGNoOjpyZXBsYWNlSW5QbGFjZShzLCAiJyIsICJ8JyIpIGZvcjogdHJ1ZQotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcyA9PSAiZGlkbnwndCIgZm9yOiAiZGlkbnwndCIgPT0gImRpZG58J3QiCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKCBsZXR0ZXJzLCAiYiIsICJ6IiApIGZvcjogdHJ1ZQorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGxldHRlcnMgPT0gImF6Y2RlZmNnIiBmb3I6ICJhemNkZWZjZyIgPT0gImF6Y2RlZmNnIgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IENhdGNoOjpyZXBsYWNlSW5QbGFjZSggbGV0dGVycywgImMiLCAieiIgKSBmb3I6IHRydWUKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBsZXR0ZXJzID09ICJhYnpkZWZ6ZyIgZm9yOiAiYWJ6ZGVmemciID09ICJhYnpkZWZ6ZyIKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBDYXRjaDo6cmVwbGFjZUluUGxhY2UoIGxldHRlcnMsICJhIiwgInoiICkgZm9yOiB0cnVlCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogbGV0dGVycyA9PSAiemJjZGVmY2ciIGZvcjogInpiY2RlZmNnIiA9PSAiemJjZGVmY2ciCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKCBsZXR0ZXJzLCAiZyIsICJ6IiApIGZvcjogdHJ1ZQorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGxldHRlcnMgPT0gImFiY2RlZmN6IiBmb3I6ICJhYmNkZWZjeiIgPT0gImFiY2RlZmN6IgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IENhdGNoOjpyZXBsYWNlSW5QbGFjZSggbGV0dGVycywgbGV0dGVycywgInJlcGxhY2VkIiApIGZvcjogdHJ1ZQorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGxldHRlcnMgPT0gInJlcGxhY2VkIiBmb3I6ICJyZXBsYWNlZCIgPT0gInJlcGxhY2VkIgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICEoQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKCBsZXR0ZXJzLCAieCIsICJ6IiApKSBmb3I6ICFmYWxzZQorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGxldHRlcnMgPT0gbGV0dGVycyBmb3I6ICJhYmNkZWZjZyIgPT0gImFiY2RlZmNnIgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IENhdGNoOjpyZXBsYWNlSW5QbGFjZSggcywgIiciLCAifCciICkgZm9yOiB0cnVlCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcyA9PSAiZGlkbnwndCIgZm9yOiAiZGlkbnwndCIgPT0gImRpZG58J3QiCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IGZhbHNlIHdpdGggMSBtZXNzYWdlOiAnMycKIE1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogZmFsc2Ugd2l0aCAyIG1lc3NhZ2VzOiAnaGknIGFuZCAnaSA6PSA3JwotVGFnLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRlc3RjYXNlLnRhZ3MsIENhdGNoOjpWZWN0b3JDb250YWlucyhzdGQ6OnN0cmluZygibWFnaWMtdGFnIikpICYmIENhdGNoOjpWZWN0b3JDb250YWlucyhzdGQ6OnN0cmluZygiLiIpKSBmb3I6IHsgIiFoaWRlIiwgIi4iLCAibWFnaWMtdGFnIiB9ICggQ29udGFpbnM6ICJtYWdpYy10YWciIGFuZCBDb250YWluczogIi4iICkKLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHNwbGl0U3RyaW5nUmVmKCIiLCAnLCcpLCBFcXVhbHMoc3RkOjp2ZWN0b3I8U3RyaW5nUmVmPigpKSBmb3I6IHsgIH0gRXF1YWxzOiB7ICB9Ci1TdHJpbmdNYW5pcC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzcGxpdFN0cmluZ1JlZigiYWJjIiwgJywnKSwgRXF1YWxzKHN0ZDo6dmVjdG9yPFN0cmluZ1JlZj57ImFiYyJ9KSBmb3I6IHsgYWJjIH0gRXF1YWxzOiB7IGFiYyB9Ci1TdHJpbmdNYW5pcC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzcGxpdFN0cmluZ1JlZigiYWJjLGRlZiIsICcsJyksIEVxdWFscyhzdGQ6OnZlY3RvcjxTdHJpbmdSZWY+eyJhYmMiLCAiZGVmIn0pIGZvcjogeyBhYmMsIGRlZiB9IEVxdWFsczogeyBhYmMsIGRlZiB9CitUYWcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGVzdGNhc2UudGFncywgQ2F0Y2g6OlZlY3RvckNvbnRhaW5zKHN0ZDo6c3RyaW5nKCJtYWdpYy10YWciKSkgJiYgQ2F0Y2g6OlZlY3RvckNvbnRhaW5zKHN0ZDo6c3RyaW5nKCIuIikpIGZvcjogeyAiLiIsICJtYWdpYy10YWciIH0gKCBDb250YWluczogIm1hZ2ljLXRhZyIgYW5kIENvbnRhaW5zOiAiLiIgKQogTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBmYWxzZSB3aXRoIDQgbWVzc2FnZXM6ICdDb3VudCAxIHRvIDMuLi4nIGFuZCAnMScgYW5kICcyJyBhbmQgJzMnCiBNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IGZhbHNlIHdpdGggNCBtZXNzYWdlczogJ0NvdW50IDQgdG8gNi4uLicgYW5kICc0JyBhbmQgJzUnIGFuZCAnNicKIFRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIGVtcHR5TWFwICkgPT0gInsgIH0iIGZvcjogInsgIH0iID09ICJ7ICB9IgpAQCAtMTgxMiw1ICsxNTE0LDUgQEAKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IDUgZm9yOiA1ID49IDUKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDoKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDoKLUZhaWxlZCA4NiB0ZXN0IGNhc2VzLCBmYWlsZWQgMTQ4IGFzc2VydGlvbnMuCitGYWlsZWQgNzkgdGVzdCBjYXNlcywgZmFpbGVkIDE0MSBhc3NlcnRpb25zLgogCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9CYXNlbGluZXMvY29uc29sZS5zdGQuYXBwcm92ZWQudHh0IGIvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL2NvbnNvbGUuc3RkLmFwcHJvdmVkLnR4dAppbmRleCBiYTRmNzlkLi5lNWExZDVkIDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9CYXNlbGluZXMvY29uc29sZS5zdGQuYXBwcm92ZWQudHh0CisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy9jb25zb2xlLnN0ZC5hcHByb3ZlZC50eHQKQEAgLTE2NCw1NCArMTY0LDYgQEAKICAgMCA9PSAxCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0KLVRlbXBsYXRlX0Zvb18yPGZsb2F0LCA2PgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKLSAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZV8yPFRlc3RUeXBlPnt9Lm1fYS5zaXplKCkgPCAyICkKLXdpdGggZXhwYW5zaW9uOgotICA2IDwgMgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtCi1UZW1wbGF0ZV9Gb29fMjxpbnQsIDI+Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgotICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+e30ubV9hLnNpemUoKSA8IDIgKQotd2l0aCBleHBhbnNpb246Ci0gIDIgPCAyCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gc3RkOjphcnJheQotPGZsb2F0LCA2PgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKLSAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZV8yPFRlc3RUeXBlPnt9Lm1fYS5zaXplKCkgPCAyICkKLXdpdGggZXhwYW5zaW9uOgotICA2IDwgMgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIHN0ZDo6YXJyYXkKLTxpbnQsIDI+Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgotICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+e30ubV9hLnNpemUoKSA8IDIgKQotd2l0aCBleHBhbnNpb246Ci0gIDIgPCAyCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEEgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gZG91YmxlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgpAQCAtMjQ1LDM5ICsxOTcsNiBAQAogICAxID09IDIKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gMQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKLSAgUkVRVUlSRSggTnR0cF9GaXh0dXJlPFY+Ojp2YWx1ZSA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotICAxID09IDAKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gMwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKLSAgUkVRVUlSRSggTnR0cF9GaXh0dXJlPFY+Ojp2YWx1ZSA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotICAzID09IDAKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gNgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKLSAgUkVRVUlSRSggTnR0cF9GaXh0dXJlPFY+Ojp2YWx1ZSA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotICA2ID09IDAKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQSBURVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC01MjAsMTIgKzQzOSwxMiBAQAogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgotICBDSEVDS19USFJPV1NfTUFUQ0hFUyggdGhyb3dzU3BlY2lhbEV4Y2VwdGlvbigzKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSApCisgIENIRUNLX1RIUk9XU19NQVRDSEVTKCB0aHJvd3MoMyksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0gKQogd2l0aCBleHBhbnNpb246CiAgIFNwZWNpYWxFeGNlcHRpb246OndoYXQgc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEKIAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKLSAgUkVRVUlSRV9USFJPV1NfTUFUQ0hFUyggdGhyb3dzU3BlY2lhbEV4Y2VwdGlvbig0KSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSApCisgIFJFUVVJUkVfVEhST1dTX01BVENIRVMoIHRocm93cyg0KSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSApCiB3aXRoIGV4cGFuc2lvbjoKICAgU3BlY2lhbEV4Y2VwdGlvbjo6d2hhdCBzcGVjaWFsIGV4Y2VwdGlvbiBoYXMgdmFsdWUgb2YgMQogCkBAIC0xMzgwLDYgKzEyOTksNiBAQAogICBXaHkgd291bGQgeW91IHRocm93IGEgc3RkOjpzdHJpbmc/CiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXRlc3QgY2FzZXM6ICAzMDYgfCAgMjMyIHBhc3NlZCB8ICA3MCBmYWlsZWQgfCAgNCBmYWlsZWQgYXMgZXhwZWN0ZWQKLWFzc2VydGlvbnM6IDE2NzYgfCAxNTI0IHBhc3NlZCB8IDEzMSBmYWlsZWQgfCAyMSBmYWlsZWQgYXMgZXhwZWN0ZWQKK3Rlc3QgY2FzZXM6ICAyNjAgfCAgMTkzIHBhc3NlZCB8ICA2MyBmYWlsZWQgfCAgNCBmYWlsZWQgYXMgZXhwZWN0ZWQKK2Fzc2VydGlvbnM6IDE0MjggfCAxMjgzIHBhc3NlZCB8IDEyNCBmYWlsZWQgfCAyMSBmYWlsZWQgYXMgZXhwZWN0ZWQKIApkaWZmIC0tZ2l0IGEvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL2NvbnNvbGUuc3cuYXBwcm92ZWQudHh0IGIvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL2NvbnNvbGUuc3cuYXBwcm92ZWQudHh0CmluZGV4IGUwNjM2NmMuLjlkZWYzN2QgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy9jb25zb2xlLnN3LmFwcHJvdmVkLnR4dAorKysgYi9wcm9qZWN0cy9TZWxmVGVzdC9CYXNlbGluZXMvY29uc29sZS5zdy5hcHByb3ZlZC50eHQKQEAgLTUwLDIyICs1MCw2IEBACiAgIDAgPT0gMAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jMTAyNzogQml0ZmllbGRzIGNhbiBiZSBjYXB0dXJlZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggeS52ID09IDAgKQotd2l0aCBleHBhbnNpb246Ci0gIDAgPT0gMAotCi1Db21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCAwID09IHkudiApCi13aXRoIGV4cGFuc2lvbjoKLSAgMCA9PSAwCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMxMTQ3CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgpAQCAtMTE5NiwxMDIgKzExODAsNiBAQAogICAwID09IDAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLQotVGVtcGxhdGVfRm9vXzI8ZmxvYXQsIDY+Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgotICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+e30ubV9hLnNpemUoKSA8IDIgKQotd2l0aCBleHBhbnNpb246Ci0gIDYgPCAyCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0KLVRlbXBsYXRlX0Zvb18yPGludCwgMj4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBGQUlMRUQ6Ci0gIFJFUVVJUkUoIFRlbXBsYXRlX0ZpeHR1cmVfMjxUZXN0VHlwZT57fS5tX2Euc2l6ZSgpIDwgMiApCi13aXRoIGV4cGFuc2lvbjoKLSAgMiA8IDIKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBzdGQ6OmFycmF5Ci08ZmxvYXQsIDY+Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgotICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+e30ubV9hLnNpemUoKSA8IDIgKQotd2l0aCBleHBhbnNpb246Ci0gIDYgPCAyCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gc3RkOjphcnJheQotPGludCwgMj4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBGQUlMRUQ6Ci0gIFJFUVVJUkUoIFRlbXBsYXRlX0ZpeHR1cmVfMjxUZXN0VHlwZT57fS5tX2Euc2l6ZSgpIDwgMiApCi13aXRoIGV4cGFuc2lvbjoKLSAgMiA8IDIKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLQotVGVtcGxhdGVfRm9vXzI8ZmxvYXQsNj4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIFRlbXBsYXRlX0ZpeHR1cmVfMjxUZXN0VHlwZT57fS5tX2Euc2l6ZSgpID49IDIgKQotd2l0aCBleHBhbnNpb246Ci0gIDYgPj0gMgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtCi1UZW1wbGF0ZV9Gb29fMjxpbnQsMj4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIFRlbXBsYXRlX0ZpeHR1cmVfMjxUZXN0VHlwZT57fS5tX2Euc2l6ZSgpID49IDIgKQotd2l0aCBleHBhbnNpb246Ci0gIDIgPj0gMgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtIHN0ZDo6Ci1hcnJheTxmbG9hdCw2PgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZV8yPFRlc3RUeXBlPnt9Lm1fYS5zaXplKCkgPj0gMiApCi13aXRoIGV4cGFuc2lvbjoKLSAgNiA+PSAyCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gc3RkOjoKLWFycmF5PGludCwyPgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZV8yPFRlc3RUeXBlPnt9Lm1fYS5zaXplKCkgPj0gMiApCi13aXRoIGV4cGFuc2lvbjoKLSAgMiA+PSAyCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEEgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gZG91YmxlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgpAQCAtMTM1OCw3MiArMTI0Niw2IEBACiAgIDEgPT0gMQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSAxCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgotICBSRVFVSVJFKCBOdHRwX0ZpeHR1cmU8Vj46OnZhbHVlID09IDAgKQotd2l0aCBleHBhbnNpb246Ci0gIDEgPT0gMAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSAzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgotICBSRVFVSVJFKCBOdHRwX0ZpeHR1cmU8Vj46OnZhbHVlID09IDAgKQotd2l0aCBleHBhbnNpb246Ci0gIDMgPT0gMAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSA2Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgotICBSRVFVSVJFKCBOdHRwX0ZpeHR1cmU8Vj46OnZhbHVlID09IDAgKQotd2l0aCBleHBhbnNpb246Ci0gIDYgPT0gMAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSAxCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBOdHRwX0ZpeHR1cmU8Vj46OnZhbHVlID4gMCApCi13aXRoIGV4cGFuc2lvbjoKLSAgMSA+IDAKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gMwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggTnR0cF9GaXh0dXJlPFY+Ojp2YWx1ZSA+IDAgKQotd2l0aCBleHBhbnNpb246Ci0gIDMgPiAwCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUEgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtIDYKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIE50dHBfRml4dHVyZTxWPjo6dmFsdWUgPiAwICkKLXdpdGggZXhwYW5zaW9uOgotICA2ID4gMAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBBIFRFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KQEAgLTE0OTAsNTAgKzEzMTIsNiBAQAogICAwID09IDAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQSBUZW1wbGF0ZSBwcm9kdWN0IHRlc3QgY2FzZSB3aXRoIGFycmF5IHNpZ25hdHVyZSAtIEJhcjxmbG9hdCwgNDI+Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggeC5zaXplKCkgPiAwICkKLXdpdGggZXhwYW5zaW9uOgotICA0MiA+IDAKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQSBUZW1wbGF0ZSBwcm9kdWN0IHRlc3QgY2FzZSB3aXRoIGFycmF5IHNpZ25hdHVyZSAtIEJhcjxpbnQsIDk+Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggeC5zaXplKCkgPiAwICkKLXdpdGggZXhwYW5zaW9uOgotICA5ID4gMAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BIFRlbXBsYXRlIHByb2R1Y3QgdGVzdCBjYXNlIHdpdGggYXJyYXkgc2lnbmF0dXJlIC0gc3RkOjphcnJheTxmbG9hdCwgNDI+Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggeC5zaXplKCkgPiAwICkKLXdpdGggZXhwYW5zaW9uOgotICA0MiA+IDAKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQSBUZW1wbGF0ZSBwcm9kdWN0IHRlc3QgY2FzZSB3aXRoIGFycmF5IHNpZ25hdHVyZSAtIHN0ZDo6YXJyYXk8aW50LCA5PgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHguc2l6ZSgpID4gMCApCi13aXRoIGV4cGFuc2lvbjoKLSAgOSA+IDAKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQSBjb21wYXJpc29uIHRoYXQgdXNlcyBsaXRlcmFscyBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgY29uc3RydWN0b3IKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgpAQCAtMTk0MCw2ICsxNzE4LDQzIEBACiAgIFJFUVVJUkUoIHRydWUgKQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBc3NvcnRlZCBtaXNjZWxsYW5lb3VzIHRlc3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIElORklOSVRZID09IEFwcHJveChJTkZJTklUWSkgKQord2l0aCBleHBhbnNpb246CisgIGluZmYgPT0gQXBwcm94KCBpbmYgKQorCitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggTkFOICE9IEFwcHJveChOQU4pICkKK3dpdGggZXhwYW5zaW9uOgorICBuYW5mICE9IEFwcHJveCggbmFuICkKKworQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfRkFMU0UoIE5BTiA9PSBBcHByb3goTkFOKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgIShuYW5mID09IEFwcHJveCggbmFuICkpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0JpdGZpZWxkcyBjYW4gYmUgY2FwdHVyZWQgKCMxMDI3KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB5LnYgPT0gMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMCA9PSAwCisKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCAwID09IHkudiApCit3aXRoIGV4cGFuc2lvbjoKKyAgMCA9PSAwCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENBUFRVUkUgY2FuIGRlYWwgd2l0aCBjb21wbGV4IGV4cHJlc3Npb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC0xOTcyLDI3ICsxNzg3LDYgQEAKICAgKDIsIDMpIDo9IDMKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ0FQVFVSRSBwYXJzZXMgc3RyaW5nIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLXdpdGggbWVzc2FnZXM6Ci0gICgiY29tbWEsIGluIHN0cmluZyIsICJlc2NhcGVkLCBcIiwgIikgOj0gImVzY2FwZWQsICIsICIKLSAgInNpbmdsZSBxdW90ZSBpbiBzdHJpbmcsJywiIDo9ICJzaW5nbGUgcXVvdGUgaW4gc3RyaW5nLCcsIgotICAic29tZSBlc2NhcGVzLCBcXCxcXFxcIiA6PSAic29tZSBlc2NhcGVzLCBcLFxcIgotICAic29tZSwgKSwgdW5tYXRjaGVkLCB9IHByZW5oZXNlcyB7WzwiIDo9ICJzb21lLCApLCB1bm1hdGNoZWQsIH0gcHJlbmhlc2VzIHtbCi0gIDwiCi0gICciJyA6PSAnIicKLSAgJ1wnJyA6PSAnJycKLSAgJywnIDo9ICcsJwotICAnfScgOj0gJ30nCi0gICcpJyA6PSAnKScKLSAgJygnIDo9ICcoJwotICAneycgOj0gJ3snCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENhcHR1cmUgYW5kIGluZm8gbWVzc2FnZXMKICAgQ2FwdHVyZSBzaG91bGQgc3RyaW5naWZ5IGxpa2UgYXNzZXJ0aW9ucwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjE4MCwzMiArMTk3NCw2IEBACiAgIDB4PGhleCBkaWdpdHM+ID09IDB4PGhleCBkaWdpdHM+CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvbXBhcmlzb24gb3BzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggU2ltcGxlUGNnMzJ7fSA9PSBTaW1wbGVQY2czMnt9ICkKLXdpdGggZXhwYW5zaW9uOgotICB7P30gPT0gez99Ci0KLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggU2ltcGxlUGNnMzJ7IDAgfSAhPSBTaW1wbGVQY2czMnt9ICkKLXdpdGggZXhwYW5zaW9uOgotICB7P30gIT0gez99Ci0KLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRV9GQUxTRSggU2ltcGxlUGNnMzJ7IDEgfSA9PSBTaW1wbGVQY2czMnsgMiB9ICkKLXdpdGggZXhwYW5zaW9uOgotICAhKHs/fSA9PSB7P30pCi0KLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRV9GQUxTRSggU2ltcGxlUGNnMzJ7IDEgfSAhPSBTaW1wbGVQY2czMnsgMSB9ICkKLXdpdGggZXhwYW5zaW9uOgotICAhKHs/fSAhPSB7P30pCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENvbXBhcmlzb24gd2l0aCBleHBsaWNpdGx5IGNvbnZlcnRpYmxlIHR5cGVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KQEAgLTIzOTEsMjQgKzIxNTksNiBAQAogICA0Mjk0OTY3Mjk1ICgweDxoZXggZGlnaXRzPikgPiA0CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvbXBvc2VkIG1hdGNoZXJzIGFyZSBkaXN0aW5jdAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRV9USEFUKCB0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcyKCksICFjb21wb3NlZDEgKQotd2l0aCBleHBhbnNpb246Ci0gICJzb21lIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRleHQgdGhhdCBjb250YWlucyBvbmUgY29tbW9uIHdvcmQiIG5vdCAoCi0gIGNvbnRhaW5zOiAic3RyaW5nIiBvciBjb250YWluczogInJhbmRvbSIgKQotCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZzIoKSwgY29tcG9zZWQyICkKLXdpdGggZXhwYW5zaW9uOgotICAic29tZSBjb21wbGV0ZWx5IGRpZmZlcmVudCB0ZXh0IHRoYXQgY29udGFpbnMgb25lIGNvbW1vbiB3b3JkIiAoIGNvbnRhaW5zOgotICAic3RyaW5nIiBvciBjb250YWluczogInJhbmRvbSIgb3IgY29udGFpbnM6ICJkaWZmZXJlbnQiICkKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQ29udGFpbnMgc3RyaW5nIG1hdGNoZXIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC0yNDI2LDE2NyArMjE3Niw2IEBACiAgICJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgY29udGFpbnM6ICJTVFJJTkciCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvcHkgYW5kIHRoZW4gZ2VuZXJhdGUgYSByYW5nZQotICBmcm9tIHZhciBhbmQgaXRlcmF0b3JzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZWxlbSAlIDIgPT0gMSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMSA9PSAxCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvcHkgYW5kIHRoZW4gZ2VuZXJhdGUgYSByYW5nZQotICBmcm9tIHZhciBhbmQgaXRlcmF0b3JzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZWxlbSAlIDIgPT0gMSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMSA9PSAxCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvcHkgYW5kIHRoZW4gZ2VuZXJhdGUgYSByYW5nZQotICBmcm9tIHZhciBhbmQgaXRlcmF0b3JzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZWxlbSAlIDIgPT0gMSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMSA9PSAxCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvcHkgYW5kIHRoZW4gZ2VuZXJhdGUgYSByYW5nZQotICBmcm9tIHZhciBhbmQgaXRlcmF0b3JzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZWxlbSAlIDIgPT0gMSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMSA9PSAxCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvcHkgYW5kIHRoZW4gZ2VuZXJhdGUgYSByYW5nZQotICBmcm9tIHZhciBhbmQgaXRlcmF0b3JzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZWxlbSAlIDIgPT0gMSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMSA9PSAxCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvcHkgYW5kIHRoZW4gZ2VuZXJhdGUgYSByYW5nZQotICBmcm9tIHZhciBhbmQgaXRlcmF0b3JzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZWxlbSAlIDIgPT0gMSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMSA9PSAxCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvcHkgYW5kIHRoZW4gZ2VuZXJhdGUgYSByYW5nZQotICBGcm9tIGEgdGVtcG9yYXJ5IGNvbnRhaW5lcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGVsZW0gJSAyID09IDEgKQotd2l0aCBleHBhbnNpb246Ci0gIDEgPT0gMQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Db3B5IGFuZCB0aGVuIGdlbmVyYXRlIGEgcmFuZ2UKLSAgRnJvbSBhIHRlbXBvcmFyeSBjb250YWluZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBlbGVtICUgMiA9PSAxICkKLXdpdGggZXhwYW5zaW9uOgotICAxID09IDEKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ29weSBhbmQgdGhlbiBnZW5lcmF0ZSBhIHJhbmdlCi0gIEZyb20gYSB0ZW1wb3JhcnkgY29udGFpbmVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZWxlbSAlIDIgPT0gMSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMSA9PSAxCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvcHkgYW5kIHRoZW4gZ2VuZXJhdGUgYSByYW5nZQotICBGcm9tIGEgdGVtcG9yYXJ5IGNvbnRhaW5lcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGVsZW0gJSAyID09IDEgKQotd2l0aCBleHBhbnNpb246Ci0gIDEgPT0gMQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Db3B5IGFuZCB0aGVuIGdlbmVyYXRlIGEgcmFuZ2UKLSAgRnJvbSBhIHRlbXBvcmFyeSBjb250YWluZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBlbGVtICUgMiA9PSAxICkKLXdpdGggZXhwYW5zaW9uOgotICAxID09IDEKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ29weSBhbmQgdGhlbiBnZW5lcmF0ZSBhIHJhbmdlCi0gIEZyb20gYSB0ZW1wb3JhcnkgY29udGFpbmVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZWxlbSAlIDIgPT0gMSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMSA9PSAxCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvcHkgYW5kIHRoZW4gZ2VuZXJhdGUgYSByYW5nZQotICBGaW5hbCB2YWxpZGF0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggY2FsbF9jb3VudCA9PSAxICkKLXdpdGggZXhwYW5zaW9uOgotICAxID09IDEKLQotR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBtYWtlX2RhdGEoKS5zaXplKCkgPT0gdGVzdF9jb3VudCApCi13aXRoIGV4cGFuc2lvbjoKLSAgNiA9PSA2Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEN1c3RvbSBleGNlcHRpb25zIGNhbiBiZSB0cmFuc2xhdGVkIHdoZW4gdGVzdGluZyBmb3Igbm90aHJvdwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC0yNjM1LDI5ICsyMjI0LDYgQEAKICAgMC4wMDAwMSAhPSBBcHByb3goIDAuMDAwMDAwMSApCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLURpcmVjdGx5IGNyZWF0aW5nIGFuIEVudW1JbmZvCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBDSEVDSyggZW51bUluZm8tPmxvb2t1cCgwKSA9PSAiVmFsdWUxIiApCi13aXRoIGV4cGFuc2lvbjoKLSAgVmFsdWUxID09ICJWYWx1ZTEiCi0KLVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLKCBlbnVtSW5mby0+bG9va3VwKDEpID09ICJWYWx1ZTIiICkKLXdpdGggZXhwYW5zaW9uOgotICBWYWx1ZTIgPT0gIlZhbHVlMiIKLQotVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgQ0hFQ0soIGVudW1JbmZvLT5sb29rdXAoMykgPT0gInsqKiB1bmV4cGVjdGVkIGVudW0gdmFsdWUgKip9IiApCi13aXRoIGV4cGFuc2lvbjoKLSAgeyoqIHVuZXhwZWN0ZWQgZW51bSB2YWx1ZSAqKn0KLSAgPT0KLSAgInsqKiB1bmV4cGVjdGVkIGVudW0gdmFsdWUgKip9IgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBFbmRzV2l0aCBzdHJpbmcgbWF0Y2hlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KQEAgLTI2NzUsNTYgKzIyNDEsNiBAQAogICBpbnNlbnNpdGl2ZSkKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRW51bXMgY2FuIHF1aWNrbHkgaGF2ZSBzdHJpbmdpZmljYXRpb24gZW5hYmxlZCB1c2luZyBSRUdJU1RFUl9FTlVNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FbnVtVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotRW51bVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHN0cmluZ2lmeSggRW51bUNsYXNzMzo6VmFsdWUxICkgPT0gIlZhbHVlMSIgKQotd2l0aCBleHBhbnNpb246Ci0gICJWYWx1ZTEiID09ICJWYWx1ZTEiCi0KLUVudW1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBzdHJpbmdpZnkoIEVudW1DbGFzczM6OlZhbHVlMiApID09ICJWYWx1ZTIiICkKLXdpdGggZXhwYW5zaW9uOgotICAiVmFsdWUyIiA9PSAiVmFsdWUyIgotCi1FbnVtVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggc3RyaW5naWZ5KCBFbnVtQ2xhc3MzOjpWYWx1ZTMgKSA9PSAiVmFsdWUzIiApCi13aXRoIGV4cGFuc2lvbjoKLSAgIlZhbHVlMyIgPT0gIlZhbHVlMyIKLQotRW51bVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHN0cmluZ2lmeSggRW51bUNsYXNzMzo6VmFsdWU0ICkgPT0gInsqKiB1bmV4cGVjdGVkIGVudW0gdmFsdWUgKip9IiApCi13aXRoIGV4cGFuc2lvbjoKLSAgInsqKiB1bmV4cGVjdGVkIGVudW0gdmFsdWUgKip9IgotICA9PQotICAieyoqIHVuZXhwZWN0ZWQgZW51bSB2YWx1ZSAqKn0iCi0KLUVudW1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBzdHJpbmdpZnkoIGVjMyApID09ICJWYWx1ZTIiICkKLXdpdGggZXhwYW5zaW9uOgotICAiVmFsdWUyIiA9PSAiVmFsdWUyIgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FbnVtcyBpbiBuYW1lc3BhY2VzIGNhbiBxdWlja2x5IGhhdmUgc3RyaW5naWZpY2F0aW9uIGVuYWJsZWQgdXNpbmcKLVJFR0lTVEVSX0VOVU0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVudW1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1FbnVtVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggc3RyaW5naWZ5KCBCaWtlc2hlZDo6Q29sb3Vyczo6UmVkICkgPT0gIlJlZCIgKQotd2l0aCBleHBhbnNpb246Ci0gICJSZWQiID09ICJSZWQiCi0KLUVudW1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBzdHJpbmdpZnkoIEJpa2VzaGVkOjpDb2xvdXJzOjpCbHVlICkgPT0gIkJsdWUiICkKLXdpdGggZXhwYW5zaW9uOgotICAiQmx1ZSIgPT0gIkJsdWUiCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEVwc2lsb24gb25seSBhcHBsaWVzIHRvIEFwcHJveCdzIHZhbHVlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KQEAgLTI5NDgsMTIgKzI0NjQsMTIgQEAKIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKLSAgQ0hFQ0tfVEhST1dTX01BVENIRVMoIHRocm93c1NwZWNpYWxFeGNlcHRpb24oMyksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0gKQorICBDSEVDS19USFJPV1NfTUFUQ0hFUyggdGhyb3dzKDMpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9ICkKIHdpdGggZXhwYW5zaW9uOgogICBTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAxCiAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBGQUlMRUQ6Ci0gIFJFUVVJUkVfVEhST1dTX01BVENIRVMoIHRocm93c1NwZWNpYWxFeGNlcHRpb24oNCksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0gKQorICBSRVFVSVJFX1RIUk9XU19NQVRDSEVTKCB0aHJvd3MoNCksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0gKQogd2l0aCBleHBhbnNpb246CiAgIFNwZWNpYWxFeGNlcHRpb246OndoYXQgc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEKIApAQCAtMjk2NCwxMiArMjQ4MCwxMiBAQAogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBDSEVDS19USFJPV1NfTUFUQ0hFUyggdGhyb3dzU3BlY2lhbEV4Y2VwdGlvbigxKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSApCisgIENIRUNLX1RIUk9XU19NQVRDSEVTKCB0aHJvd3MoMSksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0gKQogd2l0aCBleHBhbnNpb246CiAgIFNwZWNpYWxFeGNlcHRpb246OndoYXQgc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEKIAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRV9USFJPV1NfTUFUQ0hFUyggdGhyb3dzU3BlY2lhbEV4Y2VwdGlvbigyKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsyfSApCisgIFJFUVVJUkVfVEhST1dTX01BVENIRVMoIHRocm93cygyKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsyfSApCiB3aXRoIGV4cGFuc2lvbjoKICAgU3BlY2lhbEV4Y2VwdGlvbjo6d2hhdCBzcGVjaWFsIGV4Y2VwdGlvbiBoYXMgdmFsdWUgb2YgMgogCkBAIC0zMDI1LDMyICsyNTQxLDYgQEAKICAgImV4cGVjdGVkIGV4Y2VwdGlvbiIgY29udGFpbnM6ICJleGNlcHQiIChjYXNlIGluc2Vuc2l0aXZlKQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FeGNlcHRpb25zIG1hdGNoZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFX1RIUk9XU19NQVRDSEVTKCB0aHJvd3NEZXJpdmVkRXhjZXB0aW9uKCksIERlcml2ZWRFeGNlcHRpb24sIE1lc3NhZ2UoIkRlcml2ZWRFeGNlcHRpb246OndoYXQiKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgRGVyaXZlZEV4Y2VwdGlvbjo6d2hhdCBleGNlcHRpb24gbWVzc2FnZSBtYXRjaGVzICJEZXJpdmVkRXhjZXB0aW9uOjp3aGF0IgotCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFX1RIUk9XU19NQVRDSEVTKCB0aHJvd3NEZXJpdmVkRXhjZXB0aW9uKCksIERlcml2ZWRFeGNlcHRpb24sICFNZXNzYWdlKCJkZXJpdmVkZXhjZXB0aW9uOjp3aGF0IikgKQotd2l0aCBleHBhbnNpb246Ci0gIERlcml2ZWRFeGNlcHRpb246OndoYXQgbm90IGV4Y2VwdGlvbiBtZXNzYWdlIG1hdGNoZXMgImRlcml2ZWRleGNlcHRpb246OndoYXQiCi0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkVfVEhST1dTX01BVENIRVMoIHRocm93c1NwZWNpYWxFeGNlcHRpb24oMiksIFNwZWNpYWxFeGNlcHRpb24sICFNZXNzYWdlKCJEZXJpdmVkRXhjZXB0aW9uOjp3aGF0IikgKQotd2l0aCBleHBhbnNpb246Ci0gIFNwZWNpYWxFeGNlcHRpb246OndoYXQgbm90IGV4Y2VwdGlvbiBtZXNzYWdlIG1hdGNoZXMgIkRlcml2ZWRFeGNlcHRpb246OndoYXQiCi0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkVfVEhST1dTX01BVENIRVMoIHRocm93c1NwZWNpYWxFeGNlcHRpb24oMiksIFNwZWNpYWxFeGNlcHRpb24sIE1lc3NhZ2UoIlNwZWNpYWxFeGNlcHRpb246OndoYXQiKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgU3BlY2lhbEV4Y2VwdGlvbjo6d2hhdCBleGNlcHRpb24gbWVzc2FnZSBtYXRjaGVzICJTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBFeHBlY3RlZCBleGNlcHRpb25zIHRoYXQgZG9uJ3QgdGhyb3cgb3IgdW5leHBlY3RlZCBleGNlcHRpb25zIGZhaWwgdGhlIHRlc3QKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgpAQCAtMzEzNCw0NiArMjYyNCw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEZsb2F0aW5nIHBvaW50IG1hdGNoZXJzOiBkb3VibGUKLSAgUmVsYXRpdmUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkVfVEhBVCggMTAuLCBXaXRoaW5SZWwoMTEuMSwgMC4xKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMTAuMCBhbmQgMTEuMSBhcmUgd2l0aGluIDEwJSBvZiBlYWNoIG90aGVyCi0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkVfVEhBVCggMTAuLCAhV2l0aGluUmVsKDExLjIsIDAuMSkgKQotd2l0aCBleHBhbnNpb246Ci0gIDEwLjAgbm90IGFuZCAxMS4yIGFyZSB3aXRoaW4gMTAlIG9mIGVhY2ggb3RoZXIKLQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRV9USEFUKCAxLiwgIVdpdGhpblJlbCgwLiwgMC45OSkgKQotd2l0aCBleHBhbnNpb246Ci0gIDEuMCBub3QgYW5kIDAgYXJlIHdpdGhpbiA5OSUgb2YgZWFjaCBvdGhlcgotCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFX1RIQVQoIC0wLiwgV2l0aGluUmVsKDAuKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgLTAuMCBhbmQgMCBhcmUgd2l0aGluIDIuMjIwNDVlLTEyJSBvZiBlYWNoIG90aGVyCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUZsb2F0aW5nIHBvaW50IG1hdGNoZXJzOiBkb3VibGUKLSAgUmVsYXRpdmUKLSAgU29tZSBzdWJub3JtYWwgdmFsdWVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFX1RIQVQoIHYxLCBXaXRoaW5SZWwodjIpICkKLXdpdGggZXhwYW5zaW9uOgotICAwLjAgYW5kIDIuMjI1MDdlLTMwOCBhcmUgd2l0aGluIDIuMjIwNDVlLTEyJSBvZiBlYWNoIG90aGVyCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUZsb2F0aW5nIHBvaW50IG1hdGNoZXJzOiBkb3VibGUKICAgTWFyZ2luCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgpAQCAtMzIwMCw2ICsyNjUwLDExIEBACiAgIDAuMCBub3QgaXMgd2l0aGluIDAuOTkgb2YgMS4wCiAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfVEhBVCggTkFOLCAhV2l0aGluQWJzKE5BTiwgMCkgKQord2l0aCBleHBhbnNpb246CisgIG5hbmYgbm90IGlzIHdpdGhpbiAwLjAgb2YgbmFuCisKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggMTEuLCAhV2l0aGluQWJzKDEwLiwgMC41KSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMTEuMCBub3QgaXMgd2l0aGluIDAuNSBvZiAxMC4wCkBAIC0zMjI5LDQ0ICsyNjg0LDM3IEBACiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIQVQoIDEuLCBXaXRoaW5VTFAoMS4sIDApICkKIHdpdGggZXhwYW5zaW9uOgotICAxLjAgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjAwMDAwMDAwMDAwMDAwMDBlKzAwIChbMS4wMDAwMDAwMDAwMDAwMDAwZSswMCwgMS4KLSAgMDAwMDAwMDAwMDAwMDAwMGUrMDBdKQorICAxLjAgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjAKIAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9USEFUKCBuZXh0YWZ0ZXIoMS4sIDIuKSwgV2l0aGluVUxQKDEuLCAxKSApCiB3aXRoIGV4cGFuc2lvbjoKLSAgMS4wIGlzIHdpdGhpbiAxIFVMUHMgb2YgMS4wMDAwMDAwMDAwMDAwMDAwZSswMCAoWzkuOTk5OTk5OTk5OTk5OTk4OWUtMDEsIDEuCi0gIDAwMDAwMDAwMDAwMDAwMDJlKzAwXSkKKyAgMS4wIGlzIHdpdGhpbiAxIFVMUHMgb2YgMS4wCiAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkVfVEhBVCggMC4sIFdpdGhpblVMUChuZXh0YWZ0ZXIoMC4sIDEuKSwgMSkgKQorICBSRVFVSVJFX1RIQVQoIG5leHRhZnRlcigxLiwgMC4pLCBXaXRoaW5VTFAoMS4sIDEpICkKIHdpdGggZXhwYW5zaW9uOgotICAwLjAgaXMgd2l0aGluIDEgVUxQcyBvZiA0Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNCAoWzAuMDAwMDAwMDAwMDAwMDAwMGUrMDAsIDkuCi0gIDg4MTMxMjkxNjgyNDkzMDllLTMyNF0pCisgIDEuMCBpcyB3aXRoaW4gMSBVTFBzIG9mIDEuMAogCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFX1RIQVQoIDEuLCBXaXRoaW5VTFAobmV4dGFmdGVyKDEuLCAwLiksIDEpICkKKyAgUkVRVUlSRV9USEFUKCBuZXh0YWZ0ZXIoMS4sIDIuKSwgIVdpdGhpblVMUCgxLiwgMCkgKQogd2l0aCBleHBhbnNpb246Ci0gIDEuMCBpcyB3aXRoaW4gMSBVTFBzIG9mIDkuOTk5OTk5OTk5OTk5OTk4OWUtMDEgKFs5Ljk5OTk5OTk5OTk5OTk5NzhlLTAxLCAxLgotICAwMDAwMDAwMDAwMDAwMDAwZSswMF0pCi0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkVfVEhBVCggMS4sICFXaXRoaW5VTFAobmV4dGFmdGVyKDEuLCAyLiksIDApICkKLXdpdGggZXhwYW5zaW9uOgotICAxLjAgbm90IGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wMDAwMDAwMDAwMDAwMDAyZSswMCAoWzEuMDAwMDAwMDAwMDAwMDAwMmUrMDAsCi0gIDEuMDAwMDAwMDAwMDAwMDAwMmUrMDBdKQorICAxLjAgbm90IGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wCiAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggMS4sIFdpdGhpblVMUCgxLiwgMCkgKQogd2l0aCBleHBhbnNpb246Ci0gIDEuMCBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMDAwMDAwMDAwMDAwMDAwMGUrMDAgKFsxLjAwMDAwMDAwMDAwMDAwMDBlKzAwLCAxLgotICAwMDAwMDAwMDAwMDAwMDAwZSswMF0pCisgIDEuMCBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMAogCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIQVQoIC0wLiwgV2l0aGluVUxQKDAuLCAwKSApCiB3aXRoIGV4cGFuc2lvbjoKLSAgLTAuMCBpcyB3aXRoaW4gMCBVTFBzIG9mIDAuMDAwMDAwMDAwMDAwMDAwMGUrMDAgKFswLjAwMDAwMDAwMDAwMDAwMDBlKzAwLCAwLgotICAwMDAwMDAwMDAwMDAwMDAwZSswMF0pCisgIC0wLjAgaXMgd2l0aGluIDAgVUxQcyBvZiAwLjAKKworTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRV9USEFUKCBOQU4sICFXaXRoaW5VTFAoTkFOLCAxMjMpICkKK3dpdGggZXhwYW5zaW9uOgorICBuYW5mIG5vdCBpcyB3aXRoaW4gMTIzIFVMUHMgb2YgbmFuZgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBGbG9hdGluZyBwb2ludCBtYXRjaGVyczogZG91YmxlCkBAIC0zMjc4LDE5ICsyNzI2LDE3IEBACiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIQVQoIDEuLCBXaXRoaW5BYnMoMS4sIDAuNSkgfHwgV2l0aGluVUxQKDIuLCAxKSApCiB3aXRoIGV4cGFuc2lvbjoKLSAgMS4wICggaXMgd2l0aGluIDAuNSBvZiAxLjAgb3IgaXMgd2l0aGluIDEgVUxQcyBvZiAyLjAwMDAwMDAwMDAwMDAwMDBlKzAwIChbMS4KLSAgOTk5OTk5OTk5OTk5OTk5OGUrMDAsIDIuMDAwMDAwMDAwMDAwMDAwNGUrMDBdKSApCisgIDEuMCAoIGlzIHdpdGhpbiAwLjUgb2YgMS4wIG9yIGlzIHdpdGhpbiAxIFVMUHMgb2YgMi4wICkKIAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9USEFUKCAxLiwgV2l0aGluQWJzKDIuLCAwLjUpIHx8IFdpdGhpblVMUCgxLiwgMCkgKQogd2l0aCBleHBhbnNpb246Ci0gIDEuMCAoIGlzIHdpdGhpbiAwLjUgb2YgMi4wIG9yIGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wMDAwMDAwMDAwMDAwMDAwZSswMCAoWzEuCi0gIDAwMDAwMDAwMDAwMDAwMDBlKzAwLCAxLjAwMDAwMDAwMDAwMDAwMDBlKzAwXSkgKQorICAxLjAgKCBpcyB3aXRoaW4gMC41IG9mIDIuMCBvciBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMCApCiAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkVfVEhBVCggMC4wMDAxLCBXaXRoaW5BYnMoMC4sIDAuMDAxKSB8fCBXaXRoaW5SZWwoMC4sIDAuMSkgKQorICBSRVFVSVJFX1RIQVQoIE5BTiwgIShXaXRoaW5BYnMoTkFOLCAxMDApIHx8IFdpdGhpblVMUChOQU4sIDEyMykpICkKIHdpdGggZXhwYW5zaW9uOgotICAwLjAwMDEgKCBpcyB3aXRoaW4gMC4wMDEgb2YgMC4wIG9yIGFuZCAwIGFyZSB3aXRoaW4gMTAlIG9mIGVhY2ggb3RoZXIgKQorICBuYW5mIG5vdCAoIGlzIHdpdGhpbiAxMDAuMCBvZiBuYW4gb3IgaXMgd2l0aGluIDEyMyBVTFBzIG9mIG5hbmYgKQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBGbG9hdGluZyBwb2ludCBtYXRjaGVyczogZG91YmxlCkBAIC0zMzA5LDUzICsyNzU1LDcgQEAKICAgUkVRVUlSRV9OT1RIUk9XKCBXaXRoaW5VTFAoMS4sIDApICkKIAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRV9OT1RIUk9XKCBXaXRoaW5SZWwoMS4sIDAuKSApCi0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkVfVEhST1dTX0FTKCBXaXRoaW5SZWwoMS4sIC0wLjIpLCBzdGQ6OmRvbWFpbl9lcnJvciApCi0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkVfVEhST1dTX0FTKCBXaXRoaW5SZWwoMS4sIDEuKSwgc3RkOjpkb21haW5fZXJyb3IgKQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1GbG9hdGluZyBwb2ludCBtYXRjaGVyczogZmxvYXQKLSAgUmVsYXRpdmUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkVfVEhBVCggMTAuZiwgV2l0aGluUmVsKDExLjFmLCAwLjFmKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMTAuMGYgYW5kIDExLjEgYXJlIHdpdGhpbiAxMCUgb2YgZWFjaCBvdGhlcgotCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFX1RIQVQoIDEwLmYsICFXaXRoaW5SZWwoMTEuMmYsIDAuMWYpICkKLXdpdGggZXhwYW5zaW9uOgotICAxMC4wZiBub3QgYW5kIDExLjIgYXJlIHdpdGhpbiAxMCUgb2YgZWFjaCBvdGhlcgotCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFX1RIQVQoIDEuZiwgIVdpdGhpblJlbCgwLmYsIDAuOTlmKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMS4wZiBub3QgYW5kIDAgYXJlIHdpdGhpbiA5OSUgb2YgZWFjaCBvdGhlcgotCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFX1RIQVQoIC0wLmYsIFdpdGhpblJlbCgwLmYpICkKLXdpdGggZXhwYW5zaW9uOgotICAtMC4wZiBhbmQgMCBhcmUgd2l0aGluIDAuMDAxMTkyMDklIG9mIGVhY2ggb3RoZXIKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRmxvYXRpbmcgcG9pbnQgbWF0Y2hlcnM6IGZsb2F0Ci0gIFJlbGF0aXZlCi0gIFNvbWUgc3Vibm9ybWFsIHZhbHVlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRV9USEFUKCB2MSwgV2l0aGluUmVsKHYyKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMC4wZiBhbmQgMS4xNzU0OWUtMzggYXJlIHdpdGhpbiAwLjAwMTE5MjA5JSBvZiBlYWNoIG90aGVyCisgIFJFUVVJUkVfVEhST1dTX0FTKCBXaXRoaW5VTFAoMS4sIC0xKSwgc3RkOjpkb21haW5fZXJyb3IgKQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBGbG9hdGluZyBwb2ludCBtYXRjaGVyczogZmxvYXQKQEAgLTMzOTAsNiArMjc5MCwxMSBAQAogICAwLjBmIGlzIHdpdGhpbiAwLjAgb2YgLTAuMAogCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFX1RIQVQoIE5BTiwgIVdpdGhpbkFicyhOQU4sIDApICkKK3dpdGggZXhwYW5zaW9uOgorICBuYW5mIG5vdCBpcyB3aXRoaW4gMC4wIG9mIG5hbgorCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIQVQoIDExLmYsICFXaXRoaW5BYnMoMTAuZiwgMC41ZikgKQogd2l0aCBleHBhbnNpb246CiAgIDExLjBmIG5vdCBpcyB3aXRoaW4gMC41IG9mIDEwLjAKQEAgLTM0MTksMzggKzI4MjQsMzcgQEAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggMS5mLCBXaXRoaW5VTFAoMS5mLCAwKSApCiB3aXRoIGV4cGFuc2lvbjoKLSAgMS4wZiBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMDAwMDAwMDBlKzAwZiAoWzEuMDAwMDAwMDBlKzAwLCAxLjAwMDAwMDAwZSswMF0pCisgIDEuMGYgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjBmCiAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggbmV4dGFmdGVyKDEuZiwgMi5mKSwgV2l0aGluVUxQKDEuZiwgMSkgKQogd2l0aCBleHBhbnNpb246Ci0gIDEuMGYgaXMgd2l0aGluIDEgVUxQcyBvZiAxLjAwMDAwMDAwZSswMGYgKFs5Ljk5OTk5OTQwZS0wMSwgMS4wMDAwMDAxMmUrMDBdKQorICAxLjBmIGlzIHdpdGhpbiAxIFVMUHMgb2YgMS4wZgogCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFX1RIQVQoIDAuZiwgV2l0aGluVUxQKG5leHRhZnRlcigwLmYsIDEuZiksIDEpICkKKyAgUkVRVUlSRV9USEFUKCBuZXh0YWZ0ZXIoMS5mLCAwLmYpLCBXaXRoaW5VTFAoMS5mLCAxKSApCiB3aXRoIGV4cGFuc2lvbjoKLSAgMC4wZiBpcyB3aXRoaW4gMSBVTFBzIG9mIDEuNDAxMjk4NDZlLTQ1ZiAoWzAuMDAwMDAwMDBlKzAwLCAyLjgwMjU5NjkzZS00NV0pCisgIDEuMGYgaXMgd2l0aGluIDEgVUxQcyBvZiAxLjBmCiAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkVfVEhBVCggMS5mLCBXaXRoaW5VTFAobmV4dGFmdGVyKDEuZiwgMC5mKSwgMSkgKQorICBSRVFVSVJFX1RIQVQoIG5leHRhZnRlcigxLmYsIDIuZiksICFXaXRoaW5VTFAoMS5mLCAwKSApCiB3aXRoIGV4cGFuc2lvbjoKLSAgMS4wZiBpcyB3aXRoaW4gMSBVTFBzIG9mIDkuOTk5OTk5NDBlLTAxZiAoWzkuOTk5OTk4ODFlLTAxLCAxLjAwMDAwMDAwZSswMF0pCi0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkVfVEhBVCggMS5mLCAhV2l0aGluVUxQKG5leHRhZnRlcigxLmYsIDIuZiksIDApICkKLXdpdGggZXhwYW5zaW9uOgotICAxLjBmIG5vdCBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMDAwMDAwMTJlKzAwZiAoWzEuMDAwMDAwMTJlKzAwLCAxLjAwMDAwMDEyZSsKLSAgMDBdKQorICAxLjBmIG5vdCBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMGYKIAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9USEFUKCAxLmYsIFdpdGhpblVMUCgxLmYsIDApICkKIHdpdGggZXhwYW5zaW9uOgotICAxLjBmIGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wMDAwMDAwMGUrMDBmIChbMS4wMDAwMDAwMGUrMDAsIDEuMDAwMDAwMDBlKzAwXSkKKyAgMS4wZiBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMGYKIAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9USEFUKCAtMC5mLCBXaXRoaW5VTFAoMC5mLCAwKSApCiB3aXRoIGV4cGFuc2lvbjoKLSAgLTAuMGYgaXMgd2l0aGluIDAgVUxQcyBvZiAwLjAwMDAwMDAwZSswMGYgKFswLjAwMDAwMDAwZSswMCwgMC4wMDAwMDAwMGUrMDBdKQorICAtMC4wZiBpcyB3aXRoaW4gMCBVTFBzIG9mIDAuMGYKKworTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRV9USEFUKCBOQU4sICFXaXRoaW5VTFAoTkFOLCAxMjMpICkKK3dpdGggZXhwYW5zaW9uOgorICBuYW5mIG5vdCBpcyB3aXRoaW4gMTIzIFVMUHMgb2YgbmFuZgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBGbG9hdGluZyBwb2ludCBtYXRjaGVyczogZmxvYXQKQEAgLTM0NjIsMTkgKzI4NjYsMTcgQEAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggMS5mLCBXaXRoaW5BYnMoMS5mLCAwLjUpIHx8IFdpdGhpblVMUCgxLmYsIDEpICkKIHdpdGggZXhwYW5zaW9uOgotICAxLjBmICggaXMgd2l0aGluIDAuNSBvZiAxLjAgb3IgaXMgd2l0aGluIDEgVUxQcyBvZiAxLjAwMDAwMDAwZSswMGYgKFs5LgotICA5OTk5OTk0MGUtMDEsIDEuMDAwMDAwMTJlKzAwXSkgKQorICAxLjBmICggaXMgd2l0aGluIDAuNSBvZiAxLjAgb3IgaXMgd2l0aGluIDEgVUxQcyBvZiAxLjBmICkKIAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9USEFUKCAxLmYsIFdpdGhpbkFicygyLmYsIDAuNSkgfHwgV2l0aGluVUxQKDEuZiwgMCkgKQogd2l0aCBleHBhbnNpb246Ci0gIDEuMGYgKCBpcyB3aXRoaW4gMC41IG9mIDIuMCBvciBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMDAwMDAwMDBlKzAwZiAoWzEuCi0gIDAwMDAwMDAwZSswMCwgMS4wMDAwMDAwMGUrMDBdKSApCisgIDEuMGYgKCBpcyB3aXRoaW4gMC41IG9mIDIuMCBvciBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMGYgKQogCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFX1RIQVQoIDAuMDAwMWYsIFdpdGhpbkFicygwLmYsIDAuMDAxZikgfHwgV2l0aGluUmVsKDAuZiwgMC4xZikgKQorICBSRVFVSVJFX1RIQVQoIE5BTiwgIShXaXRoaW5BYnMoTkFOLCAxMDApIHx8IFdpdGhpblVMUChOQU4sIDEyMykpICkKIHdpdGggZXhwYW5zaW9uOgotICAwLjAwMDFmICggaXMgd2l0aGluIDAuMDAxIG9mIDAuMCBvciBhbmQgMCBhcmUgd2l0aGluIDEwJSBvZiBlYWNoIG90aGVyICkKKyAgbmFuZiBub3QgKCBpcyB3aXRoaW4gMTAwLjAgb2YgbmFuIG9yIGlzIHdpdGhpbiAxMjMgVUxQcyBvZiBuYW5mICkKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogRmxvYXRpbmcgcG9pbnQgbWF0Y2hlcnM6IGZsb2F0CkBAIC0zNDkzLDE2ICsyODk1LDcgQEAKICAgUkVRVUlSRV9OT1RIUk9XKCBXaXRoaW5VTFAoMS5mLCAwKSApCiAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkVfVEhST1dTX0FTKCBXaXRoaW5VTFAoMS5mLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oLTEpKSwgc3RkOjpkb21haW5fZXJyb3IgKQotCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFX05PVEhST1coIFdpdGhpblJlbCgxLmYsIDAuZikgKQotCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFX1RIUk9XU19BUyggV2l0aGluUmVsKDEuZiwgLTAuMmYpLCBzdGQ6OmRvbWFpbl9lcnJvciApCi0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkVfVEhST1dTX0FTKCBXaXRoaW5SZWwoMS5mLCAxLmYpLCBzdGQ6OmRvbWFpbl9lcnJvciApCisgIFJFUVVJUkVfVEhST1dTX0FTKCBXaXRoaW5VTFAoMS5mLCAtMSksIHN0ZDo6ZG9tYWluX2Vycm9yICkKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogR2VuZXJhdG9ycyAtLSBhZGFwdGVycwpAQCAtMzg4Miw0NSArMzI3NSw2IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBHZW5lcmF0b3JzIC0tIGFkYXB0ZXJzCiAgIENodW5raW5nIGEgZ2VuZXJhdG9yIGludG8gc2l6ZWQgcGllY2VzCi0gIENodW5rIHNpemUgb2YgemVybwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGNodW5rMi5zaXplKCkgPT0gMCApCi13aXRoIGV4cGFuc2lvbjoKLSAgMCA9PSAwCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUdlbmVyYXRvcnMgLS0gYWRhcHRlcnMKLSAgQ2h1bmtpbmcgYSBnZW5lcmF0b3IgaW50byBzaXplZCBwaWVjZXMKLSAgQ2h1bmsgc2l6ZSBvZiB6ZXJvCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1HZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggY2h1bmsyLnNpemUoKSA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotICAwID09IDAKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotR2VuZXJhdG9ycyAtLSBhZGFwdGVycwotICBDaHVua2luZyBhIGdlbmVyYXRvciBpbnRvIHNpemVkIHBpZWNlcwotICBDaHVuayBzaXplIG9mIHplcm8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUdlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBjaHVuazIuc2l6ZSgpID09IDAgKQotd2l0aCBleHBhbnNpb246Ci0gIDAgPT0gMAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1HZW5lcmF0b3JzIC0tIGFkYXB0ZXJzCi0gIENodW5raW5nIGEgZ2VuZXJhdG9yIGludG8gc2l6ZWQgcGllY2VzCiAgIFRocm93cyBvbiB0b28gc21hbGwgZ2VuZXJhdG9ycwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgpAQCAtNDc5NSw1MDQgKzQxNDksNiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogR2VuZXJhdG9ycyBpbnRlcm5hbHMKICAgUmFuZ2UKLSAgUG9zaXRpdmUgbWFudWFsIHN0ZXAKLSAgRmxvYXRpbmcgUG9pbnQKLSAgRXhhY3QKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpICkKLXdpdGggZXhwYW5zaW9uOgotICAtMS4wID09IEFwcHJveCggLTEuMCApCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTEKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLm5leHQoKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotd2l0aCBtZXNzYWdlOgotICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0xCi0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpICkKLXdpdGggZXhwYW5zaW9uOgotICAtMC45ID09IEFwcHJveCggLTAuOSApCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuOQotCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuOQotCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgLTAuOCA9PSBBcHByb3goIC0wLjggKQotd2l0aCBtZXNzYWdlOgotICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjgKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLm5leHQoKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotd2l0aCBtZXNzYWdlOgotICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjgKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgKQotd2l0aCBleHBhbnNpb246Ci0gIC0wLjcgPT0gQXBwcm94KCAtMC43ICkKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC43Ci0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC43Ci0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpICkKLXdpdGggZXhwYW5zaW9uOgotICAtMC42ID09IEFwcHJveCggLTAuNiApCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuNgotCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuNgotCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgLTAuNSA9PSBBcHByb3goIC0wLjUgKQotd2l0aCBtZXNzYWdlOgotICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjUKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLm5leHQoKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotd2l0aCBtZXNzYWdlOgotICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjUKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgKQotd2l0aCBleHBhbnNpb246Ci0gIC0wLjQgPT0gQXBwcm94KCAtMC40ICkKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC40Ci0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC40Ci0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpICkKLXdpdGggZXhwYW5zaW9uOgotICAtMC4zID09IEFwcHJveCggLTAuMyApCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuMwotCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuMwotCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgLTAuMiA9PSBBcHByb3goIC0wLjIgKQotd2l0aCBtZXNzYWdlOgotICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjIKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLm5leHQoKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotd2l0aCBtZXNzYWdlOgotICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjIKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgKQotd2l0aCBleHBhbnNpb246Ci0gIC0wLjEgPT0gQXBwcm94KCAtMC4xICkKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC4xCi0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC4xCi0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpICkKLXdpdGggZXhwYW5zaW9uOgotICAtMC4wID09IEFwcHJveCggLTAuMCApCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTEuMzg3NzhlLTE2Ci0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMS4zODc3OGUtMTYKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgKQotd2l0aCBleHBhbnNpb246Ci0gIDAuMSA9PSBBcHByb3goIDAuMSApCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC4xCi0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjEKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgKQotd2l0aCBleHBhbnNpb246Ci0gIDAuMiA9PSBBcHByb3goIDAuMiApCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC4yCi0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjIKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgKQotd2l0aCBleHBhbnNpb246Ci0gIDAuMyA9PSBBcHByb3goIDAuMyApCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC4zCi0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjMKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgKQotd2l0aCBleHBhbnNpb246Ci0gIDAuNCA9PSBBcHByb3goIDAuNCApCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC40Ci0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjQKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgKQotd2l0aCBleHBhbnNpb246Ci0gIDAuNSA9PSBBcHByb3goIDAuNSApCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC41Ci0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjUKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgKQotd2l0aCBleHBhbnNpb246Ci0gIDAuNiA9PSBBcHByb3goIDAuNiApCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC42Ci0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjYKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgKQotd2l0aCBleHBhbnNpb246Ci0gIDAuNyA9PSBBcHByb3goIDAuNyApCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC43Ci0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjcKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgKQotd2l0aCBleHBhbnNpb246Ci0gIDAuOCA9PSBBcHByb3goIDAuOCApCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC44Ci0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjgKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgKQotd2l0aCBleHBhbnNpb246Ci0gIDAuOSA9PSBBcHByb3goIDAuOSApCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC45Ci0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjkKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLmdldCgpID09IEFwcHJveCggcmFuZ2VFbmQgKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMS4wID09IEFwcHJveCggMS4wICkKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRV9GQUxTRSggZ2VuLm5leHQoKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgIWZhbHNlCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUdlbmVyYXRvcnMgaW50ZXJuYWxzCi0gIFJhbmdlCi0gIFBvc2l0aXZlIG1hbnVhbCBzdGVwCi0gIEZsb2F0aW5nIFBvaW50Ci0gIFNsaWdodGx5IG92ZXIgZW5kCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgLTEuMCA9PSBBcHByb3goIC0xLjAgKQotd2l0aCBtZXNzYWdlOgotICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0xCi0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMQotCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgLTAuNyA9PSBBcHByb3goIC0wLjcgKQotd2l0aCBtZXNzYWdlOgotICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjcKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLm5leHQoKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotd2l0aCBtZXNzYWdlOgotICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjcKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgKQotd2l0aCBleHBhbnNpb246Ci0gIC0wLjQgPT0gQXBwcm94KCAtMC40ICkKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC40Ci0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC40Ci0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpICkKLXdpdGggZXhwYW5zaW9uOgotICAtMC4xID09IEFwcHJveCggLTAuMSApCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuMQotCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuMQotCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMC4yID09IEFwcHJveCggMC4yICkKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjIKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLm5leHQoKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotd2l0aCBtZXNzYWdlOgotICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuMgotCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMC41ID09IEFwcHJveCggMC41ICkKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjUKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLm5leHQoKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotd2l0aCBtZXNzYWdlOgotICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuNQotCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFX0ZBTFNFKCBnZW4ubmV4dCgpICkKLXdpdGggZXhwYW5zaW9uOgotICAhZmFsc2UKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotR2VuZXJhdG9ycyBpbnRlcm5hbHMKLSAgUmFuZ2UKLSAgUG9zaXRpdmUgbWFudWFsIHN0ZXAKLSAgRmxvYXRpbmcgUG9pbnQKLSAgU2xpZ2h0bHkgdW5kZXIgZW5kCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgLTEuMCA9PSBBcHByb3goIC0xLjAgKQotd2l0aCBtZXNzYWdlOgotICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0xCi0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMQotCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgLTAuNyA9PSBBcHByb3goIC0wLjcgKQotd2l0aCBtZXNzYWdlOgotICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjcKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLm5leHQoKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotd2l0aCBtZXNzYWdlOgotICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjcKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkgKQotd2l0aCBleHBhbnNpb246Ci0gIC0wLjQgPT0gQXBwcm94KCAtMC40ICkKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC40Ci0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC40Ci0KLUdlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpICkKLXdpdGggZXhwYW5zaW9uOgotICAtMC4xID09IEFwcHJveCggLTAuMSApCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuMQotCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi13aXRoIG1lc3NhZ2U6Ci0gIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuMQotCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMC4yID09IEFwcHJveCggMC4yICkKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjIKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLm5leHQoKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotd2l0aCBtZXNzYWdlOgotICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuMgotCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMC41ID09IEFwcHJveCggMC41ICkKLXdpdGggbWVzc2FnZToKLSAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjUKLQotR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggZ2VuLm5leHQoKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotd2l0aCBtZXNzYWdlOgotICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuNQotCi1HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFX0ZBTFNFKCBnZW4ubmV4dCgpICkKLXdpdGggZXhwYW5zaW9uOgotICAhZmFsc2UKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotR2VuZXJhdG9ycyBpbnRlcm5hbHMKLSAgUmFuZ2UKICAgTmVnYXRpdmUgbWFudWFsIHN0ZXAKICAgSW50ZWdlcgogICBFeGFjdApAQCAtNjI4MywxMjUgKzUxMzksNiBAQAogICAiaGVsbG8iID4gImEiCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU91ciBQQ0cgaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgZXhwZWN0ZWQgcmVzdWx0cyBmb3Iga25vd24gc2VlZHMKLSAgRGVmYXVsdCBzZWVkZWQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotUmFuZG9tTnVtYmVyR2VuZXJhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBybmcoKSA9PSAweDxoZXggZGlnaXRzPiApCi13aXRoIGV4cGFuc2lvbjoKLSAgNDI0MjI0ODc2MyAoMHg8aGV4IGRpZ2l0cz4pCi0gID09Ci0gIDQyNDIyNDg3NjMgKDB4PGhleCBkaWdpdHM+KQotCi1SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHJuZygpID09IDB4PGhleCBkaWdpdHM+ICkKLXdpdGggZXhwYW5zaW9uOgotICAxODY3ODg4OTI5ICgweDxoZXggZGlnaXRzPikKLSAgPT0KLSAgMTg2Nzg4ODkyOSAoMHg8aGV4IGRpZ2l0cz4pCi0KLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4gKQotd2l0aCBleHBhbnNpb246Ci0gIDEyNzY2MTkwMzAgKDB4PGhleCBkaWdpdHM+KQotICA9PQotICAxMjc2NjE5MDMwICgweDxoZXggZGlnaXRzPikKLQotUmFuZG9tTnVtYmVyR2VuZXJhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBybmcoKSA9PSAweDxoZXggZGlnaXRzPiApCi13aXRoIGV4cGFuc2lvbjoKLSAgMTkxMTIxODc4MyAoMHg8aGV4IGRpZ2l0cz4pCi0gID09Ci0gIDE5MTEyMTg3ODMgKDB4PGhleCBkaWdpdHM+KQotCi1SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHJuZygpID09IDB4PGhleCBkaWdpdHM+ICkKLXdpdGggZXhwYW5zaW9uOgotICAxODI3MTE1MTY0ICgweDxoZXggZGlnaXRzPikKLSAgPT0KLSAgMTgyNzExNTE2NCAoMHg8aGV4IGRpZ2l0cz4pCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU91ciBQQ0cgaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgZXhwZWN0ZWQgcmVzdWx0cyBmb3Iga25vd24gc2VlZHMKLSAgU3BlY2lmaWMgc2VlZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmFuZG9tTnVtYmVyR2VuZXJhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHJuZygpID09IDB4PGhleCBkaWdpdHM+ICkKLXdpdGggZXhwYW5zaW9uOgotICAxNDcyMjM0NjQ1ICgweDxoZXggZGlnaXRzPikKLSAgPT0KLSAgMTQ3MjIzNDY0NSAoMHg8aGV4IGRpZ2l0cz4pCi0KLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4gKQotd2l0aCBleHBhbnNpb246Ci0gIDg2ODgzMjk0MCAoMHg8aGV4IGRpZ2l0cz4pCi0gID09Ci0gIDg2ODgzMjk0MCAoMHg8aGV4IGRpZ2l0cz4pCi0KLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4gKQotd2l0aCBleHBhbnNpb246Ci0gIDU3MDg4MzQ0NiAoMHg8aGV4IGRpZ2l0cz4pCi0gID09Ci0gIDU3MDg4MzQ0NiAoMHg8aGV4IGRpZ2l0cz4pCi0KLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4gKQotd2l0aCBleHBhbnNpb246Ci0gIDg4OTI5OTgwMyAoMHg8aGV4IGRpZ2l0cz4pCi0gID09Ci0gIDg4OTI5OTgwMyAoMHg8aGV4IGRpZ2l0cz4pCi0KLVJhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4gKQotd2l0aCBleHBhbnNpb246Ci0gIDQyNjEzOTMxNjcgKDB4PGhleCBkaWdpdHM+KQotICA9PQotICA0MjYxMzkzMTY3ICgweDxoZXggZGlnaXRzPikKLQotUmFuZG9tTnVtYmVyR2VuZXJhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBybmcoKSA9PSAweDxoZXggZGlnaXRzPiApCi13aXRoIGV4cGFuc2lvbjoKLSAgMTQ3MjIzNDY0NSAoMHg8aGV4IGRpZ2l0cz4pCi0gID09Ci0gIDE0NzIyMzQ2NDUgKDB4PGhleCBkaWdpdHM+KQotCi1SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHJuZygpID09IDB4PGhleCBkaWdpdHM+ICkKLXdpdGggZXhwYW5zaW9uOgotICA4Njg4MzI5NDAgKDB4PGhleCBkaWdpdHM+KQotICA9PQotICA4Njg4MzI5NDAgKDB4PGhleCBkaWdpdHM+KQotCi1SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHJuZygpID09IDB4PGhleCBkaWdpdHM+ICkKLXdpdGggZXhwYW5zaW9uOgotICA1NzA4ODM0NDYgKDB4PGhleCBkaWdpdHM+KQotICA9PQotICA1NzA4ODM0NDYgKDB4PGhleCBkaWdpdHM+KQotCi1SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHJuZygpID09IDB4PGhleCBkaWdpdHM+ICkKLXdpdGggZXhwYW5zaW9uOgotICA4ODkyOTk4MDMgKDB4PGhleCBkaWdpdHM+KQotICA9PQotICA4ODkyOTk4MDMgKDB4PGhleCBkaWdpdHM+KQotCi1SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHJuZygpID09IDB4PGhleCBkaWdpdHM+ICkKLXdpdGggZXhwYW5zaW9uOgotICA0MjYxMzkzMTY3ICgweDxoZXggZGlnaXRzPikKLSAgPT0KLSAgNDI2MTM5MzE2NyAoMHg8aGV4IGRpZ2l0cz4pCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE91dHB1dCBmcm9tIGFsbCBzZWN0aW9ucyBpcyByZXBvcnRlZAogICBvbmUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTczMTYsMTE0ICs2MDUzLDYgQEAKICAgdHJ1ZSA9PSB0cnVlCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MKLSAgTGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIGluIHRlc3Qgc3BlYwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLKCBzcGVjLm1hdGNoZXMoIGZha2VUZXN0Q2FzZSggIiAgYWFyZHZhcmsgIiApICkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBDSEVDSyggc3BlYy5tYXRjaGVzKCBmYWtlVGVzdENhc2UoICIgIGFhcmR2YXJrIiApICkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBDSEVDSyggc3BlYy5tYXRjaGVzKCBmYWtlVGVzdENhc2UoICIgYWFyZHZhcmsgIiApICkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBDSEVDSyggc3BlYy5tYXRjaGVzKCBmYWtlVGVzdENhc2UoICJhYXJkdmFyayAiICkgKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLKCBzcGVjLm1hdGNoZXMoIGZha2VUZXN0Q2FzZSggImFhcmR2YXJrIiApICkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncwotICBMZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgaW4gdGVzdCBuYW1lCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggZmFrZVRlc3RDYXNlKCAiICBhYXJkdmFyayAiICkgKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLKCBzcGVjLm1hdGNoZXMoIGZha2VUZXN0Q2FzZSggIiAgYWFyZHZhcmsiICkgKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLKCBzcGVjLm1hdGNoZXMoIGZha2VUZXN0Q2FzZSggIiBhYXJkdmFyayAiICkgKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLKCBzcGVjLm1hdGNoZXMoIGZha2VUZXN0Q2FzZSggImFhcmR2YXJrICIgKSApICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggZmFrZVRlc3RDYXNlKCAiYWFyZHZhcmsiICkgKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1QYXJzZSB0ZXN0IG5hbWVzIGFuZCB0YWdzCi0gIFNob3J0ZW5lZCBoaWRlIHRhZ3MgYXJlIHNwbGl0IGFwYXJ0IHdoZW4gcGFyc2luZwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLKCBzcGVjLm1hdGNoZXMoZmFrZVRlc3RDYXNlKCJoaWRkZW4gYW5kIGZvbyIsICJbLl1bZm9vXSIpKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLX0ZBTFNFKCBzcGVjLm1hdGNoZXMoZmFrZVRlc3RDYXNlKCJvbmx5IGZvbyIsICJbZm9vXSIpKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgIWZhbHNlCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MKLSAgU2hvcnRlbmVkIGhpZGUgdGFncyBhbHNvIHByb3Blcmx5IGhhbmRsZSBleGNsdXNpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBDSEVDS19GQUxTRSggc3BlYy5tYXRjaGVzKGZha2VUZXN0Q2FzZSgiaGlkZGVuIGFuZCBmb28iLCAiWy5dW2Zvb10iKSkgKQotd2l0aCBleHBhbnNpb246Ci0gICFmYWxzZQotCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLX0ZBTFNFKCBzcGVjLm1hdGNoZXMoZmFrZVRlc3RDYXNlKCJvbmx5IGZvbyIsICJbZm9vXSIpKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgIWZhbHNlCi0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgQ0hFQ0tfRkFMU0UoIHNwZWMubWF0Y2hlcyhmYWtlVGVzdENhc2UoIm9ubHkgaGlkZGVuIiwgIlsuXSIpKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgIWZhbHNlCi0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgQ0hFQ0soIHNwZWMubWF0Y2hlcyhmYWtlVGVzdENhc2UoIm5laXRoZXIgZm9vIG5vciBoaWRkZW4iLCAiW2Jhcl0iKSkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogUG9pbnRlcnMgY2FuIGJlIGNvbXBhcmVkIHRvIG51bGwKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgpAQCAtNzQ3MCw0MCArNjA5OSw2IEBACiAgIDAgIT0gMHg8aGV4IGRpZ2l0cz4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUHJlY2lzaW9uIG9mIGZsb2F0aW5nIHBvaW50IHN0cmluZ2lmaWNhdGlvbiBjYW4gYmUgc2V0Ci0gIEZsb2F0cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLVRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBDSEVDSyggc3RyMS5zaXplKCkgPT0gMyArIDUgKQotd2l0aCBleHBhbnNpb246Ci0gIDggPT0gOAotCi1Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggc3RyMi5zaXplKCkgPT0gMyArIDEwICkKLXdpdGggZXhwYW5zaW9uOgotICAxMyA9PSAxMwotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1QcmVjaXNpb24gb2YgZmxvYXRpbmcgcG9pbnQgc3RyaW5naWZpY2F0aW9uIGNhbiBiZSBzZXQKLSAgRG91YmxlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLKCBzdHIxLnNpemUoKSA9PSAyICsgNSApCi13aXRoIGV4cGFuc2lvbjoKLSAgNyA9PSA3Ci0KLVRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBzdHIyLnNpemUoKSA9PSAyICsgMTUgKQotd2l0aCBleHBhbnNpb246Ci0gIDE3ID09IDE3Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFByZWRpY2F0ZSBtYXRjaGVyIGNhbiBhY2NlcHQgY29uc3QgY2hhcioKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC03ODM2LDEwMiArNjQzMSw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lCi0gIGFib3J0Ci0gIHdhaXQtZm9yLWtleXByZXNzCi0gIEFjY2VwdGVkIG9wdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBDSEVDSyggY2xpLnBhcnNlKHsidGVzdCIsICItLXdhaXQtZm9yLWtleXByZXNzIiwgc3RkOjpnZXQ8MD4oaW5wdXQpfSkgKQotd2l0aCBleHBhbnNpb246Ci0gIHs/fQotCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGNvbmZpZy53YWl0Rm9yS2V5cHJlc3MgPT0gc3RkOjpnZXQ8MT4oaW5wdXQpICkKLXdpdGggZXhwYW5zaW9uOgotICAwID09IDAKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUKLSAgYWJvcnQKLSAgd2FpdC1mb3Ita2V5cHJlc3MKLSAgQWNjZXB0ZWQgb3B0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLKCBjbGkucGFyc2UoeyJ0ZXN0IiwgIi0td2FpdC1mb3Ita2V5cHJlc3MiLCBzdGQ6OmdldDwwPihpbnB1dCl9KSApCi13aXRoIGV4cGFuc2lvbjoKLSAgez99Ci0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggY29uZmlnLndhaXRGb3JLZXlwcmVzcyA9PSBzdGQ6OmdldDwxPihpbnB1dCkgKQotd2l0aCBleHBhbnNpb246Ci0gIDEgPT0gMQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Qcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZQotICBhYm9ydAotICB3YWl0LWZvci1rZXlwcmVzcwotICBBY2NlcHRlZCBvcHRpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgQ0hFQ0soIGNsaS5wYXJzZSh7InRlc3QiLCAiLS13YWl0LWZvci1rZXlwcmVzcyIsIHN0ZDo6Z2V0PDA+KGlucHV0KX0pICkKLXdpdGggZXhwYW5zaW9uOgotICB7P30KLQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBjb25maWcud2FpdEZvcktleXByZXNzID09IHN0ZDo6Z2V0PDE+KGlucHV0KSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMiA9PSAyCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lCi0gIGFib3J0Ci0gIHdhaXQtZm9yLWtleXByZXNzCi0gIEFjY2VwdGVkIG9wdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBDSEVDSyggY2xpLnBhcnNlKHsidGVzdCIsICItLXdhaXQtZm9yLWtleXByZXNzIiwgc3RkOjpnZXQ8MD4oaW5wdXQpfSkgKQotd2l0aCBleHBhbnNpb246Ci0gIHs/fQotCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGNvbmZpZy53YWl0Rm9yS2V5cHJlc3MgPT0gc3RkOjpnZXQ8MT4oaW5wdXQpICkKLXdpdGggZXhwYW5zaW9uOgotICAzID09IDMKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUKLSAgYWJvcnQKLSAgd2FpdC1mb3Ita2V5cHJlc3MKLSAgaW52YWxpZCBvcHRpb25zIGFyZSByZXBvcnRlZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLKCAhcmVzdWx0ICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRV9USEFUKCByZXN1bHQuZXJyb3JNZXNzYWdlKCksIENvbnRhaW5zKCJuZXZlciIpICYmIENvbnRhaW5zKCJib3RoIikgKQotd2l0aCBleHBhbnNpb246Ci0gICJrZXlwcmVzcyBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZjogbmV2ZXIsIHN0YXJ0LCBleGl0IG9yIGJvdGguICdzb21ldGltZXMnCi0gIG5vdCByZWNvZ25pc2VkIiAoIGNvbnRhaW5zOiAibmV2ZXIiIGFuZCBjb250YWluczogImJvdGgiICkKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUKICAgbm90aHJvdwogICAtZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtODEyMiw5NiArNjYyMSw2IEBACiAgIGNvbnRhaW5zOiAiY29sb3VyIG1vZGUgbXVzdCBiZSBvbmUgb2YiCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lCi0gIEJlbmNobWFyayBvcHRpb25zCi0gIHNhbXBsZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBDSEVDSyggY2xpLnBhcnNlKHsgInRlc3QiLCAiLS1iZW5jaG1hcmstc2FtcGxlcz0yMDAiIH0pICkKLXdpdGggZXhwYW5zaW9uOgotICB7P30KLQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBjb25maWcuYmVuY2htYXJrU2FtcGxlcyA9PSAyMDAgKQotd2l0aCBleHBhbnNpb246Ci0gIDIwMCA9PSAyMDAKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUKLSAgQmVuY2htYXJrIG9wdGlvbnMKLSAgcmVzYW1wbGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgQ0hFQ0soIGNsaS5wYXJzZSh7ICJ0ZXN0IiwgIi0tYmVuY2htYXJrLXJlc2FtcGxlcz0yMDAwMCIgfSkgKQotd2l0aCBleHBhbnNpb246Ci0gIHs/fQotCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGNvbmZpZy5iZW5jaG1hcmtSZXNhbXBsZXMgPT0gMjAwMDAgKQotd2l0aCBleHBhbnNpb246Ci0gIDIwMDAwICgweDxoZXggZGlnaXRzPikgPT0gMjAwMDAgKDB4PGhleCBkaWdpdHM+KQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Qcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZQotICBCZW5jaG1hcmsgb3B0aW9ucwotICBjb25maWRlbmNlLWludGVydmFsCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgQ0hFQ0soIGNsaS5wYXJzZSh7ICJ0ZXN0IiwgIi0tYmVuY2htYXJrLWNvbmZpZGVuY2UtaW50ZXJ2YWw9MC45OSIgfSkgKQotd2l0aCBleHBhbnNpb246Ci0gIHs/fQotCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGNvbmZpZy5iZW5jaG1hcmtDb25maWRlbmNlSW50ZXJ2YWwgPT0gQ2F0Y2g6OkRldGFpbDo6QXBwcm94KDAuOTkpICkKLXdpdGggZXhwYW5zaW9uOgotICAwLjk5ID09IEFwcHJveCggMC45OSApCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lCi0gIEJlbmNobWFyayBvcHRpb25zCi0gIG5vLWFuYWx5c2lzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgQ0hFQ0soIGNsaS5wYXJzZSh7ICJ0ZXN0IiwgIi0tYmVuY2htYXJrLW5vLWFuYWx5c2lzIiB9KSApCi13aXRoIGV4cGFuc2lvbjoKLSAgez99Ci0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggY29uZmlnLmJlbmNobWFya05vQW5hbHlzaXMgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUKLSAgQmVuY2htYXJrIG9wdGlvbnMKLSAgd2FybXVwLXRpbWUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBDSEVDSyggY2xpLnBhcnNlKHsgInRlc3QiLCAiLS1iZW5jaG1hcmstd2FybXVwLXRpbWU9MTAiIH0pICkKLXdpdGggZXhwYW5zaW9uOgotICB7P30KLQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBjb25maWcuYmVuY2htYXJrV2FybXVwVGltZSA9PSAxMCApCi13aXRoIGV4cGFuc2lvbjoKLSAgMTAgPT0gMTAKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogUHJvZHVjdCB3aXRoIGRpZmZlcmluZyBhcml0aWVzIC0gc3RkOjp0dXBsZTxpbnQsIGRvdWJsZSwgZmxvYXQ+CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC04NTI1LDYgKzY5MzQsMTEgQEAKIHdpdGggZXhwYW5zaW9uOgogICBBcHByb3goIDEuMjMgKSAhPSAxLjI0CiAKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBJTkZJTklUWSA9PSBBcHByb3goSU5GSU5JVFkpICkKK3dpdGggZXhwYW5zaW9uOgorICBpbmZmID09IEFwcHJveCggaW5mICkKKwogTWVzc2FnZSBmcm9tIHNlY3Rpb24gb25lCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTdGFuZGFyZCBvdXRwdXQgZnJvbSBhbGwgc2VjdGlvbnMgaXMgcmVwb3J0ZWQKQEAgLTg2NzAsMTEgKzcwODQsNiBAQAogICAwID09IDAKIAogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIGVtcHR5LmlzTnVsbFRlcm1pbmF0ZWQoKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggc3RkOjpzdHJjbXAoIGVtcHR5LmNfc3RyKCksICIiICkgPT0gMCApCiB3aXRoIGV4cGFuc2lvbjoKICAgMCA9PSAwCkBAIC04Njk3LDE3ICs3MTA2LDI3IEBACiAgIDUgPT0gNQogCiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggcy5pc051bGxUZXJtaW5hdGVkKCkgKQorICBSRVFVSVJFKCBpc1N1YnN0cmluZyggcyApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgotICB0cnVlCisgIGZhbHNlID09IGZhbHNlCiAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzdGQ6OnN0cmNtcCggcmF3Q2hhcnMsICJoZWxsbyIgKSA9PSAwICkKIHdpdGggZXhwYW5zaW9uOgogICAwID09IDAKIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3RyaW5nUmVmCisgIEZyb20gc3RyaW5nIGxpdGVyYWwKKyAgY19zdHIoKSBkb2VzIG5vdCBjYXVzZSBjb3B5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKwogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkVfTk9USFJPVyggcy5jX3N0cigpICkKKyAgUkVRVUlSRSggaXNPd25lZCggcyApID09IGZhbHNlICkKK3dpdGggZXhwYW5zaW9uOgorICBmYWxzZSA9PSBmYWxzZQogCiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggcy5jX3N0cigpID09IHJhd0NoYXJzICkKQEAgLTg3MTUsOSArNzEzNCw5IEBACiAgICJoZWxsbyIgPT0gImhlbGxvIgogCiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggcy5kYXRhKCkgPT0gcmF3Q2hhcnMgKQorICBSRVFVSVJFKCBpc093bmVkKCBzICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246Ci0gICJoZWxsbyIgPT0gImhlbGxvIgorICBmYWxzZSA9PSBmYWxzZQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTdHJpbmdSZWYKQEAgLTg3MzAsMTUgKzcxNDksMjQgQEAKICAgUkVRVUlSRSggb3JpZ2luYWwgPT0gIm9yaWdpbmFsIiApCiAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFX0ZBTFNFKCBvcmlnaW5hbC5pc051bGxUZXJtaW5hdGVkKCkgKQorICBSRVFVSVJFKCBpc1N1YnN0cmluZyggb3JpZ2luYWwgKSApCiB3aXRoIGV4cGFuc2lvbjoKLSAgIWZhbHNlCisgIHRydWUKIAogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkVfVEhST1dTKCBvcmlnaW5hbC5jX3N0cigpICkKKyAgUkVRVUlSRSggaXNPd25lZCggb3JpZ2luYWwgKSA9PSBmYWxzZSApCit3aXRoIGV4cGFuc2lvbjoKKyAgZmFsc2UgPT0gZmFsc2UKIAogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkVfTk9USFJPVyggb3JpZ2luYWwuZGF0YSgpICkKKyAgUkVRVUlSRSggaXNTdWJzdHJpbmcoIG9yaWdpbmFsICkgPT0gZmFsc2UgKQord2l0aCBleHBhbnNpb246CisgIGZhbHNlID09IGZhbHNlCisKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBpc093bmVkKCBvcmlnaW5hbCApICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFN0cmluZ1JlZgpAQCAtODc1OSw3ICs3MTg3LDcgQEAKICAgNSA9PSA1CiAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBzdGQ6OnN0cm5jbXAoIHNzLmRhdGEoKSwgImhlbGxvIiwgNSApID09IDAgKQorICBSRVFVSVJFKCBzdGQ6OnN0cmNtcCggc3MuY19zdHIoKSwgImhlbGxvIiApID09IDAgKQogd2l0aCBleHBhbnNpb246CiAgIDAgPT0gMAogCkBAIC04NzcxLDYgKzcxOTksNDkgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFN0cmluZ1JlZgogICBTdWJzdHJpbmdzCisgIGNfc3RyKCkgY2F1c2VzIGNvcHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggaXNTdWJzdHJpbmcoIHNzICkgKQord2l0aCBleHBhbnNpb246CisgIHRydWUKKworU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGlzT3duZWQoIHNzICkgPT0gZmFsc2UgKQord2l0aCBleHBhbnNpb246CisgIGZhbHNlID09IGZhbHNlCisKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCByYXdDaGFycyA9PSBzLmN1cnJlbnREYXRhKCkgKQord2l0aCBleHBhbnNpb246CisgICJoZWxsbyB3b3JsZCEiID09ICJoZWxsbyB3b3JsZCEiCisKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBzcy5jX3N0cigpICE9IHJhd0NoYXJzICkKK3dpdGggZXhwYW5zaW9uOgorICAiaGVsbG8iICE9ICJoZWxsbyB3b3JsZCEiCisKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBpc1N1YnN0cmluZyggc3MgKSA9PSBmYWxzZSApCit3aXRoIGV4cGFuc2lvbjoKKyAgZmFsc2UgPT0gZmFsc2UKKworU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGlzT3duZWQoIHNzICkgKQord2l0aCBleHBhbnNpb246CisgIHRydWUKKworU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHNzLmN1cnJlbnREYXRhKCkgIT0gcy5jdXJyZW50RGF0YSgpICkKK3dpdGggZXhwYW5zaW9uOgorICAiaGVsbG8iICE9ICJoZWxsbyB3b3JsZCEiCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N0cmluZ1JlZgorICBTdWJzdHJpbmdzCiAgIG5vbi16ZXJvLWJhc2VkIHN1YnN0cmluZwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC04Nzk1LDcwICs3MjY2LDM5IEBACiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBzLmRhdGEoKSA9PSBzMi5kYXRhKCkgKQorICBSRVFVSVJFKCBzLmNfc3RyKCkgPT0gczIuY19zdHIoKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgImhlbGxvIHdvcmxkISIgPT0gImhlbGxvIHdvcmxkISIKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU3RyaW5nUmVmCiAgIFN1YnN0cmluZ3MKLSAgUG9pbnRlciB2YWx1ZXMgb2Ygc3Vic3RyaW5nIHJlZnMgc2hvdWxkIGFsc28gbWF0Y2gKKyAgUG9pbnRlciB2YWx1ZXMgb2Ygc3Vic3RyaW5nIHJlZnMgc2hvdWxkIG5vdCBtYXRjaAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBzLmRhdGEoKSA9PSBzcy5kYXRhKCkgKQorICBSRVFVSVJFKCBzLmNfc3RyKCkgIT0gc3MuY19zdHIoKSApCiB3aXRoIGV4cGFuc2lvbjoKLSAgImhlbGxvIHdvcmxkISIgPT0gImhlbGxvIHdvcmxkISIKKyAgImhlbGxvIHdvcmxkISIgIT0gImhlbGxvIgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTdHJpbmdSZWYKLSAgU3Vic3RyaW5ncwotICBQYXN0IHRoZSBlbmQgc3Vic3RyaW5nCisgIENvbXBhcmlzb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHMuc3Vic3RyKHMuc2l6ZSgpICsgMSwgMTIzKS5lbXB0eSgpICkKKyAgUkVRVUlSRSggU3RyaW5nUmVmKCJoZWxsbyIpID09IFN0cmluZ1JlZigiaGVsbG8iKSApCiB3aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdHJpbmdSZWYKLSAgU3Vic3RyaW5ncwotICBTdWJzdHJpbmcgb2ZmIHRoZSBlbmQgYXJlIHRyaW1tZWQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICBoZWxsbyA9PSBoZWxsbwogCiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggc3RkOjpzdHJjbXAoc3MuY19zdHIoKSwgIndvcmxkISIpID09IDAgKQorICBSRVFVSVJFKCBTdHJpbmdSZWYoImhlbGxvIikgIT0gU3RyaW5nUmVmKCJjZWxsbyIpICkKIHdpdGggZXhwYW5zaW9uOgotICAwID09IDAKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3RyaW5nUmVmCi0gIENvbXBhcmlzb25zIGFyZSBkZWVwCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLKCAoY2hhciopYnVmZmVyMSAhPSAoY2hhciopYnVmZmVyMiApCi13aXRoIGV4cGFuc2lvbjoKLSAgIkhlbGxvIiAhPSAiSGVsbG8iCi0KLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBsZWZ0ID09IHJpZ2h0ICkKLXdpdGggZXhwYW5zaW9uOgotICBIZWxsbyA9PSBIZWxsbwotCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggbGVmdCAhPSBsZWZ0LnN1YnN0cigwLCAzKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgSGVsbG8gIT0gSGVsCisgIGhlbGxvICE9IGNlbGxvCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFN0cmluZ1JlZgpAQCAtODkxNyw2ICs3MzU3LDI0IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTdHJpbmdSZWYKICAgdG8gc3RkOjpzdHJpbmcKKyAgaW1wbGljaXRseSBjb25zdHJ1Y3RlZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBzdGRTdHIgPT0gImEgc3RyaW5ncmVmIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgImEgc3RyaW5ncmVmIiA9PSAiYSBzdHJpbmdyZWYiCisKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBzdGRTdHIuc2l6ZSgpID09IHNyLnNpemUoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMTEgPT0gMTEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3RyaW5nUmVmCisgIHRvIHN0ZDo6c3RyaW5nCiAgIGV4cGxpY2l0bHkgY29uc3RydWN0ZWQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgpAQCAtODk1MSw2MiArNzQwOSwyNiBAQAogICAxMSA9PSAxMQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdHJpbmdSZWYgYXQgY29tcGlsYXRpb24gdGltZQotICBTaW1wbGUgY29uc3RydWN0b3JzCitTdHJpbmdSZWYKKyAgQ291bnRpbmcgdXRmLTggY29kZXBvaW50cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotd2l0aCBtZXNzYWdlOgotICBTdHJpbmdSZWZ7fS5zaXplKCkgPT0gMAorICBSRVFVSVJFKCBhc2NpaS5udW1iZXJPZkNoYXJhY3RlcnMoKSA9PSBhc2NpaS5zaXplKCkgKQord2l0aCBleHBhbnNpb246CisgIDM5ID09IDM5CiAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotd2l0aCBtZXNzYWdlOgotICBTdHJpbmdSZWZ7ICJhYmMiLCAzIH0uc2l6ZSgpID09IDMKKyAgUkVRVUlSRSggc2ltcGxldTgubnVtYmVyT2ZDaGFyYWN0ZXJzKCkgPT0gMzAgKQord2l0aCBleHBhbnNpb246CisgIDMwID09IDMwCiAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotd2l0aCBtZXNzYWdlOgotICBTdHJpbmdSZWZ7ICJhYmMiLCAzIH0uaXNOdWxsVGVybWluYXRlZCgpCi0KLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotd2l0aCBtZXNzYWdlOgotICBTdHJpbmdSZWZ7ICJhYmMiLCAyIH0uc2l6ZSgpID09IDIKLQotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci13aXRoIG1lc3NhZ2U6Ci0gICEoU3RyaW5nUmVmeyAiYWJjIiwgMiB9LmlzTnVsbFRlcm1pbmF0ZWQoKSkKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3RyaW5nUmVmIGF0IGNvbXBpbGF0aW9uIHRpbWUKLSAgVURMIGNvbnN0cnVjdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotd2l0aCBtZXNzYWdlOgotICAhKHNyMS5lbXB0eSgpKQotCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLXdpdGggbWVzc2FnZToKLSAgc3IxLnNpemUoKSA9PSAzCi0KLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotd2l0aCBtZXNzYWdlOgotICBzcjEuaXNOdWxsVGVybWluYXRlZCgpCi0KLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotd2l0aCBtZXNzYWdlOgotICBzcjIuZW1wdHkoKQotCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLXdpdGggbWVzc2FnZToKLSAgc3IyLnNpemUoKSA9PSAwCi0KLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotd2l0aCBtZXNzYWdlOgotICBzcjIuaXNOdWxsVGVybWluYXRlZCgpCisgIFJFUVVJUkUoIGVtb2ppcy5udW1iZXJPZkNoYXJhY3RlcnMoKSA9PSA5ICkKK3dpdGggZXhwYW5zaW9uOgorICA5ID09IDkKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU3RyaW5naWZ5aW5nIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbiBoZWxwZXJzCkBAIC05MTM2LDEyMyArNzU1OCw2IEBACiAgIENIRUNLX1RIUk9XUyggcmVnaXN0cnkuYWRkKCAiW0BubyBzcXVhcmUgYnJhY2tldCBhdCBlbmQiLCAiIiwgQ2F0Y2g6OlNvdXJjZUxpbmVJbmZvKCAiZmlsZSIsIDMgKSApICkKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGVtcGxhdGUgdGVzdCBjYXNlIG1ldGhvZCB3aXRoIHRlc3QgdHlwZXMgc3BlY2lmaWVkIGluc2lkZSBzdGQ6OnR1cGxlIC0gTXlUeXBlcwotLSAwCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlPFRlc3RUeXBlPjo6bV9hID09IDEgKQotd2l0aCBleHBhbnNpb246Ci0gIDEgPT0gMQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UZW1wbGF0ZSB0ZXN0IGNhc2UgbWV0aG9kIHdpdGggdGVzdCB0eXBlcyBzcGVjaWZpZWQgaW5zaWRlIHN0ZDo6dHVwbGUgLSBNeVR5cGVzCi0tIDEKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIFRlbXBsYXRlX0ZpeHR1cmU8VGVzdFR5cGU+OjptX2EgPT0gMSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMSA9PSAxCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlIHRlc3QgY2FzZSBtZXRob2Qgd2l0aCB0ZXN0IHR5cGVzIHNwZWNpZmllZCBpbnNpZGUgc3RkOjp0dXBsZSAtIE15VHlwZXMKLS0gMgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZTxUZXN0VHlwZT46Om1fYSA9PSAxICkKLXdpdGggZXhwYW5zaW9uOgotICAxLjAgPT0gMQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UZW1wbGF0ZSB0ZXN0IGNhc2Ugd2l0aCB0ZXN0IHR5cGVzIHNwZWNpZmllZCBpbnNpZGUgbm9uLWNvcHlhYmxlIGFuZCBub24tCi1tb3ZhYmxlIHN0ZDo6dHVwbGUgLSBOb25Db3B5YWJsZUFuZE5vbk1vdmFibGVUeXBlcyAtIDAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBzaXplb2YoVGVzdFR5cGUpID4gMCApCi13aXRoIGV4cGFuc2lvbjoKLSAgMSA+IDAKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGVtcGxhdGUgdGVzdCBjYXNlIHdpdGggdGVzdCB0eXBlcyBzcGVjaWZpZWQgaW5zaWRlIG5vbi1jb3B5YWJsZSBhbmQgbm9uLQotbW92YWJsZSBzdGQ6OnR1cGxlIC0gTm9uQ29weWFibGVBbmROb25Nb3ZhYmxlVHlwZXMgLSAxCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggc2l6ZW9mKFRlc3RUeXBlKSA+IDAgKQotd2l0aCBleHBhbnNpb246Ci0gIDQgPiAwCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlIHRlc3QgY2FzZSB3aXRoIHRlc3QgdHlwZXMgc3BlY2lmaWVkIGluc2lkZSBub24tZGVmYXVsdC1jb25zdHJ1Y3RpYmxlCi1zdGQ6OnR1cGxlIC0gTXlOb25EZWZhdWx0Q29uc3RydWN0aWJsZVR5cGVzIC0gMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHNpemVvZihUZXN0VHlwZSkgPiAwICkKLXdpdGggZXhwYW5zaW9uOgotICAxID4gMAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UZW1wbGF0ZSB0ZXN0IGNhc2Ugd2l0aCB0ZXN0IHR5cGVzIHNwZWNpZmllZCBpbnNpZGUgbm9uLWRlZmF1bHQtY29uc3RydWN0aWJsZQotc3RkOjp0dXBsZSAtIE15Tm9uRGVmYXVsdENvbnN0cnVjdGlibGVUeXBlcyAtIDEKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBzaXplb2YoVGVzdFR5cGUpID4gMCApCi13aXRoIGV4cGFuc2lvbjoKLSAgNCA+IDAKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGVtcGxhdGUgdGVzdCBjYXNlIHdpdGggdGVzdCB0eXBlcyBzcGVjaWZpZWQgaW5zaWRlIHN0ZDo6dHVwbGUgLSBNeVR5cGVzIC0gMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHNpemVvZihUZXN0VHlwZSkgPiAwICkKLXdpdGggZXhwYW5zaW9uOgotICA0ID4gMAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UZW1wbGF0ZSB0ZXN0IGNhc2Ugd2l0aCB0ZXN0IHR5cGVzIHNwZWNpZmllZCBpbnNpZGUgc3RkOjp0dXBsZSAtIE15VHlwZXMgLSAxCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggc2l6ZW9mKFRlc3RUeXBlKSA+IDAgKQotd2l0aCBleHBhbnNpb246Ci0gIDEgPiAwCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlIHRlc3QgY2FzZSB3aXRoIHRlc3QgdHlwZXMgc3BlY2lmaWVkIGluc2lkZSBzdGQ6OnR1cGxlIC0gTXlUeXBlcyAtIDIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCBzaXplb2YoVGVzdFR5cGUpID4gMCApCi13aXRoIGV4cGFuc2lvbjoKLSAgNCA+IDAKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGZsb2F0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC05ODMzLDU4NiArODEzOCw2IEBACiAgIDUgPj0gNQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gKHN0ZDo6dHVwbGU8aW50LCBmbG9hdD4pLCA2Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5zaXplKCkgPT0gViApCi13aXRoIGV4cGFuc2lvbjoKLSAgNiA9PSA2Ci0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDYgPj0gNgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gKHN0ZDo6dHVwbGU8aW50LCBmbG9hdD4pLCA2Ci0gIHJlc2l6aW5nIGJpZ2dlciBjaGFuZ2VzIHNpemUgYW5kIGNhcGFjaXR5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5zaXplKCkgPT0gMiAqIFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDEyID09IDEyCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDIgKiBWICkKLXdpdGggZXhwYW5zaW9uOgotICAxMiA+PSAxMgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gKHN0ZDo6dHVwbGU8aW50LCBmbG9hdD4pLCA2Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5zaXplKCkgPT0gViApCi13aXRoIGV4cGFuc2lvbjoKLSAgNiA9PSA2Ci0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDYgPj0gNgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gKHN0ZDo6dHVwbGU8aW50LCBmbG9hdD4pLCA2Ci0gIHJlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LnNpemUoKSA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotICAwID09IDAKLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gViApCi13aXRoIGV4cGFuc2lvbjoKLSAgNiA+PSA2Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSAoc3RkOjp0dXBsZTxpbnQsIGZsb2F0PiksIDYKLSAgcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eQotICBXZSBjYW4gdXNlIHRoZSAnc3dhcCB0cmljaycgdG8gcmVzZXQgdGhlIGNhcGFjaXR5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID09IDAgKQotd2l0aCBleHBhbnNpb246Ci0gIDAgPT0gMAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gKHN0ZDo6dHVwbGU8aW50LCBmbG9hdD4pLCA2Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5zaXplKCkgPT0gViApCi13aXRoIGV4cGFuc2lvbjoKLSAgNiA9PSA2Ci0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDYgPj0gNgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gKHN0ZDo6dHVwbGU8aW50LCBmbG9hdD4pLCA2Ci0gIHJlc2VydmluZyBiaWdnZXIgY2hhbmdlcyBjYXBhY2l0eSBidXQgbm90IHNpemUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LnNpemUoKSA9PSBWICkKLXdpdGggZXhwYW5zaW9uOgotICA2ID09IDYKLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gMiAqIFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDEyID49IDEyCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSAoc3RkOjp0dXBsZTxpbnQsIGZsb2F0PiksIDYKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LnNpemUoKSA9PSBWICkKLXdpdGggZXhwYW5zaW9uOgotICA2ID09IDYKLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gViApCi13aXRoIGV4cGFuc2lvbjoKLSAgNiA+PSA2Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSAoc3RkOjp0dXBsZTxpbnQsIGZsb2F0PiksIDYKLSAgcmVzZXJ2aW5nIHNtYWxsZXIgZG9lcyBub3QgY2hhbmdlIHNpemUgb3IgY2FwYWNpdHkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LnNpemUoKSA9PSBWICkKLXdpdGggZXhwYW5zaW9uOgotICA2ID09IDYKLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gViApCi13aXRoIGV4cGFuc2lvbjoKLSAgNiA+PSA2Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdCw0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5zaXplKCkgPT0gViApCi13aXRoIGV4cGFuc2lvbjoKLSAgNCA9PSA0Ci0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDQgPj0gNAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQsNAotICByZXNpemluZyBiaWdnZXIgY2hhbmdlcyBzaXplIGFuZCBjYXBhY2l0eQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuc2l6ZSgpID09IDIgKiBWICkKLXdpdGggZXhwYW5zaW9uOgotICA4ID09IDgKLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gMiAqIFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDggPj0gOAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQsNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuc2l6ZSgpID09IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDQgPT0gNAotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSBWICkKLXdpdGggZXhwYW5zaW9uOgotICA0ID49IDQKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGZsb2F0LDQKLSAgcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuc2l6ZSgpID09IDAgKQotd2l0aCBleHBhbnNpb246Ci0gIDAgPT0gMAotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSBWICkKLXdpdGggZXhwYW5zaW9uOgotICA0ID49IDQKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGZsb2F0LDQKLSAgcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eQotICBXZSBjYW4gdXNlIHRoZSAnc3dhcCB0cmljaycgdG8gcmVzZXQgdGhlIGNhcGFjaXR5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID09IDAgKQotd2l0aCBleHBhbnNpb246Ci0gIDAgPT0gMAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQsNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuc2l6ZSgpID09IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDQgPT0gNAotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSBWICkKLXdpdGggZXhwYW5zaW9uOgotICA0ID49IDQKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGZsb2F0LDQKLSAgcmVzZXJ2aW5nIGJpZ2dlciBjaGFuZ2VzIGNhcGFjaXR5IGJ1dCBub3Qgc2l6ZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuc2l6ZSgpID09IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDQgPT0gNAotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSAyICogViApCi13aXRoIGV4cGFuc2lvbjoKLSAgOCA+PSA4Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdCw0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5zaXplKCkgPT0gViApCi13aXRoIGV4cGFuc2lvbjoKLSAgNCA9PSA0Ci0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDQgPj0gNAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQsNAotICByZXNlcnZpbmcgc21hbGxlciBkb2VzIG5vdCBjaGFuZ2Ugc2l6ZSBvciBjYXBhY2l0eQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuc2l6ZSgpID09IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDQgPT0gNAotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSBWICkKLXdpdGggZXhwYW5zaW9uOgotICA0ID49IDQKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGludCw1Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5zaXplKCkgPT0gViApCi13aXRoIGV4cGFuc2lvbjoKLSAgNSA9PSA1Ci0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDUgPj0gNQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gaW50LDUKLSAgcmVzaXppbmcgYmlnZ2VyIGNoYW5nZXMgc2l6ZSBhbmQgY2FwYWNpdHkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LnNpemUoKSA9PSAyICogViApCi13aXRoIGV4cGFuc2lvbjoKLSAgMTAgPT0gMTAKLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gMiAqIFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDEwID49IDEwCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBpbnQsNQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuc2l6ZSgpID09IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDUgPT0gNQotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSBWICkKLXdpdGggZXhwYW5zaW9uOgotICA1ID49IDUKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGludCw1Ci0gIHJlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LnNpemUoKSA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotICAwID09IDAKLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gViApCi13aXRoIGV4cGFuc2lvbjoKLSAgNSA+PSA1Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBpbnQsNQotICByZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5Ci0gIFdlIGNhbiB1c2UgdGhlICdzd2FwIHRyaWNrJyB0byByZXNldCB0aGUgY2FwYWNpdHkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPT0gMCApCi13aXRoIGV4cGFuc2lvbjoKLSAgMCA9PSAwCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBpbnQsNQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuc2l6ZSgpID09IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDUgPT0gNQotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSBWICkKLXdpdGggZXhwYW5zaW9uOgotICA1ID49IDUKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGludCw1Ci0gIHJlc2VydmluZyBiaWdnZXIgY2hhbmdlcyBjYXBhY2l0eSBidXQgbm90IHNpemUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LnNpemUoKSA9PSBWICkKLXdpdGggZXhwYW5zaW9uOgotICA1ID09IDUKLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gMiAqIFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDEwID49IDEwCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBpbnQsNQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuc2l6ZSgpID09IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDUgPT0gNQotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSBWICkKLXdpdGggZXhwYW5zaW9uOgotICA1ID49IDUKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGludCw1Ci0gIHJlc2VydmluZyBzbWFsbGVyIGRvZXMgbm90IGNoYW5nZSBzaXplIG9yIGNhcGFjaXR5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5zaXplKCkgPT0gViApCi13aXRoIGV4cGFuc2lvbjoKLSAgNSA9PSA1Ci0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDUgPj0gNQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjpzdHJpbmcsMTUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LnNpemUoKSA9PSBWICkKLXdpdGggZXhwYW5zaW9uOgotICAxNSA9PSAxNQotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSBWICkKLXdpdGggZXhwYW5zaW9uOgotICAxNSA+PSAxNQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjpzdHJpbmcsMTUKLSAgcmVzaXppbmcgYmlnZ2VyIGNoYW5nZXMgc2l6ZSBhbmQgY2FwYWNpdHkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LnNpemUoKSA9PSAyICogViApCi13aXRoIGV4cGFuc2lvbjoKLSAgMzAgPT0gMzAKLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gMiAqIFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDMwID49IDMwCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnN0cmluZywxNQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuc2l6ZSgpID09IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDE1ID09IDE1Ci0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDE1ID49IDE1Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnN0cmluZywxNQotICByZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5zaXplKCkgPT0gMCApCi13aXRoIGV4cGFuc2lvbjoKLSAgMCA9PSAwCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDE1ID49IDE1Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnN0cmluZywxNQotICByZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5Ci0gIFdlIGNhbiB1c2UgdGhlICdzd2FwIHRyaWNrJyB0byByZXNldCB0aGUgY2FwYWNpdHkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPT0gMCApCi13aXRoIGV4cGFuc2lvbjoKLSAgMCA9PSAwCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnN0cmluZywxNQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuc2l6ZSgpID09IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDE1ID09IDE1Ci0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDE1ID49IDE1Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnN0cmluZywxNQotICByZXNlcnZpbmcgYmlnZ2VyIGNoYW5nZXMgY2FwYWNpdHkgYnV0IG5vdCBzaXplCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5zaXplKCkgPT0gViApCi13aXRoIGV4cGFuc2lvbjoKLSAgMTUgPT0gMTUKLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gMiAqIFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDMwID49IDMwCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnN0cmluZywxNQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuc2l6ZSgpID09IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDE1ID09IDE1Ci0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDE1ID49IDE1Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnN0cmluZywxNQotICByZXNlcnZpbmcgc21hbGxlciBkb2VzIG5vdCBjaGFuZ2Ugc2l6ZSBvciBjYXBhY2l0eQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHYuc2l6ZSgpID09IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDE1ID09IDE1Ci0KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IFYgKQotd2l0aCBleHBhbnNpb246Ci0gIDE1ID49IDE1Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFRlc3QgY2FzZSB3aXRoIG9uZSBhcmd1bWVudAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVmFyaWFkaWNNYWNyb3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KQEAgLTEwNDM0LDE0ICs4MTU5LDYgQEAKICAgMzIyMTIyNTQ3MiAoMHg8aGV4IGRpZ2l0cz4pID09IDMyMjEyMjU0NzIKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGVzdCB3aXRoIHNwZWNpYWwsIGNoYXJhY3RlcnMgImluIG5hbWUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBUaGUgTk9fRkFJTCBtYWNybyByZXBvcnRzIGEgZmFpbHVyZSBidXQgZG9lcyBub3QgZmFpbCB0aGUgdGVzdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgpAQCAtMTA5MzcsNjggKzg2NTQsNiBAQAogICB0cnVlCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRyaW0gc3RyaW5ncwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdHJpbShzdGQ6OnN0cmluZyhub193aGl0ZXNwYWNlKSkgPT0gbm9fd2hpdGVzcGFjZSApCi13aXRoIGV4cGFuc2lvbjoKLSAgIlRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZSIKLSAgPT0KLSAgIlRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZSIKLQotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdHJpbShzdGQ6OnN0cmluZyhsZWFkaW5nX3doaXRlc3BhY2UpKSA9PSBub193aGl0ZXNwYWNlICkKLXdpdGggZXhwYW5zaW9uOgotICAiVGhlcmUgaXMgbm8gZXh0cmEgd2hpdGVzcGFjZSBoZXJlIgotICA9PQotICAiVGhlcmUgaXMgbm8gZXh0cmEgd2hpdGVzcGFjZSBoZXJlIgotCi1TdHJpbmdNYW5pcC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB0cmltKHN0ZDo6c3RyaW5nKHRyYWlsaW5nX3doaXRlc3BhY2UpKSA9PSBub193aGl0ZXNwYWNlICkKLXdpdGggZXhwYW5zaW9uOgotICAiVGhlcmUgaXMgbm8gZXh0cmEgd2hpdGVzcGFjZSBoZXJlIgotICA9PQotICAiVGhlcmUgaXMgbm8gZXh0cmEgd2hpdGVzcGFjZSBoZXJlIgotCi1TdHJpbmdNYW5pcC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB0cmltKHN0ZDo6c3RyaW5nKHdoaXRlc3BhY2VfYXRfYm90aF9lbmRzKSkgPT0gbm9fd2hpdGVzcGFjZSApCi13aXRoIGV4cGFuc2lvbjoKLSAgIlRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZSIKLSAgPT0KLSAgIlRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZSIKLQotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdHJpbShTdHJpbmdSZWYobm9fd2hpdGVzcGFjZSkpID09IFN0cmluZ1JlZihub193aGl0ZXNwYWNlKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgVGhlcmUgaXMgbm8gZXh0cmEgd2hpdGVzcGFjZSBoZXJlCi0gID09Ci0gIFRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZQotCi1TdHJpbmdNYW5pcC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB0cmltKFN0cmluZ1JlZihsZWFkaW5nX3doaXRlc3BhY2UpKSA9PSBTdHJpbmdSZWYobm9fd2hpdGVzcGFjZSkgKQotd2l0aCBleHBhbnNpb246Ci0gIFRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZQotICA9PQotICBUaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUKLQotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggdHJpbShTdHJpbmdSZWYodHJhaWxpbmdfd2hpdGVzcGFjZSkpID09IFN0cmluZ1JlZihub193aGl0ZXNwYWNlKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgVGhlcmUgaXMgbm8gZXh0cmEgd2hpdGVzcGFjZSBoZXJlCi0gID09Ci0gIFRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZQotCi1TdHJpbmdNYW5pcC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFKCB0cmltKFN0cmluZ1JlZih3aGl0ZXNwYWNlX2F0X2JvdGhfZW5kcykpID09IFN0cmluZ1JlZihub193aGl0ZXNwYWNlKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgVGhlcmUgaXMgbm8gZXh0cmEgd2hpdGVzcGFjZSBoZXJlCi0gID09Ci0gIFRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBVbmV4cGVjdGVkIGV4Y2VwdGlvbnMgY2FuIGJlIHRyYW5zbGF0ZWQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgpAQCAtMTE1OTgsMzcgKzkyNTMsMjYxIEBACiAgICJbXHg3Rl0iID09ICJbXHg3Rl0iCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWFkZGluZyBhIGhpZGUgdGFnIGltcGxpY2l0bHkgZW5hYmxlcyBhbGwgb3RoZXJzCitYbWxFbmNvZGU6IFVURi04CisgIFZhbGlkIHV0Zi04IHN0cmluZ3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRhZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRhZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFX1RIQVQoIHRlc3RjYXNlLnRhZ3MsIFZlY3RvckNvbnRhaW5zKHN0ZDo6c3RyaW5nKCIuIikpICYmIFZlY3RvckNvbnRhaW5zKHN0ZDo6c3RyaW5nKCIhaGlkZSIpKSApCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSh1OCJIZXJlIGJlIPCfkb4iKSA9PSB1OCJIZXJlIGJlIPCfkb4iICkKIHdpdGggZXhwYW5zaW9uOgotICB7ICIhaGlkZSIsICIuIiB9ICggQ29udGFpbnM6ICIuIiBhbmQgQ29udGFpbnM6ICIhaGlkZSIgKQorICAiSGVyZSBiZSDwn5G+IiA9PSAiSGVyZSBiZSDwn5G+IgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSh1OCLFocWhIikgPT0gdTgixaHFoSIgKQord2l0aCBleHBhbnNpb246CisgICLFocWhIiA9PSAixaHFoSIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4REZceEJGIikgPT0gIlx4REZceEJGIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIt+/IiA9PSAi378iCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEUwXHhBMFx4ODAiKSA9PSAiXHhFMFx4QTBceDgwIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIuCggCIgPT0gIuCggCIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RURceDlGXHhCRiIpID09ICJceEVEXHg5Rlx4QkYiICkKK3dpdGggZXhwYW5zaW9uOgorICAi7Z+/IiA9PSAi7Z+/IgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhFRVx4ODBceDgwIikgPT0gIlx4RUVceDgwXHg4MCIgKQord2l0aCBleHBhbnNpb246CisgICLugIAiID09ICLugIAiCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEVGXHhCRlx4QkYiKSA9PSAiXHhFRlx4QkZceEJGIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIu+/vyIgPT0gIu+/vyIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RjBceDkwXHg4MFx4ODAiKSA9PSAiXHhGMFx4OTBceDgwXHg4MCIgKQord2l0aCBleHBhbnNpb246CisgICLwkICAIiA9PSAi8JCAgCIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RjRceDhGXHhCRlx4QkYiKSA9PSAiXHhGNFx4OEZceEJGXHhCRiIgKQord2l0aCBleHBhbnNpb246CisgICL0j7+/IiA9PSAi9I+/vyIKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYWRkaW5nIGEgaGlkZSB0YWcgaW1wbGljaXRseSBlbmFibGVzIGFsbCBvdGhlcnMKK1htbEVuY29kZTogVVRGLTgKKyAgSW52YWxpZCB1dGYtOCBzdHJpbmdzCisgIFZhcmlvdXMgYnJva2VuIHN0cmluZ3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRhZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRhZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBSRVFVSVJFX1RIQVQoIHRlc3RjYXNlLnRhZ3MsIFZlY3RvckNvbnRhaW5zKHN0ZDo6c3RyaW5nKCIuIikpICYmIFZlY3RvckNvbnRhaW5zKHN0ZDo6c3RyaW5nKCIhaGlkZSIpKSApCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiSGVyZSBceEZGIGJlIPCfkb4iKSA9PSB1OCJIZXJlIFxceEZGIGJlIPCfkb4iICkKIHdpdGggZXhwYW5zaW9uOgotICB7ICIhaGlkZSIsICIuIiB9ICggQ29udGFpbnM6ICIuIiBhbmQgQ29udGFpbnM6ICIhaGlkZSIgKQorICAiSGVyZSBceEZGIGJlIPCfkb4iID09ICJIZXJlIFx4RkYgYmUg8J+RviIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RkYiKSA9PSAiXFx4RkYiICkKK3dpdGggZXhwYW5zaW9uOgorICAiXHhGRiIgPT0gIlx4RkYiCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEM1XHhDNVx4QTAiKSA9PSB1OCJcXHhDNcWgIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIlx4QzXFoCIgPT0gIlx4QzXFoCIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RjRceDkwXHg4MFx4ODAiKSA9PSB1OCJcXHhGNFxceDkwXFx4ODBcXHg4MCIgKQord2l0aCBleHBhbnNpb246CisgICJceEY0XHg5MFx4ODBceDgwIiA9PSAiXHhGNFx4OTBceDgwXHg4MCIKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotYWRkaW5nIGEgaGlkZSB0YWcgaW1wbGljaXRseSBlbmFibGVzIGFsbCBvdGhlcnMKK1htbEVuY29kZTogVVRGLTgKKyAgSW52YWxpZCB1dGYtOCBzdHJpbmdzCisgIE92ZXJsb25nIGVuY29kaW5ncwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGFnLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotVGFnLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkVfVEhBVCggdGVzdGNhc2UudGFncywgVmVjdG9yQ29udGFpbnMoc3RkOjpzdHJpbmcoIi4iKSkgJiYgVmVjdG9yQ29udGFpbnMoc3RkOjpzdHJpbmcoIiFoaWRlIikpICkKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEMwXHg4MCIpID09IHU4IlxceEMwXFx4ODAiICkKIHdpdGggZXhwYW5zaW9uOgotICB7ICIhaGlkZSIsICIuIiwgImZvbyIgfSAoIENvbnRhaW5zOiAiLiIgYW5kIENvbnRhaW5zOiAiIWhpZGUiICkKKyAgIlx4QzBceDgwIiA9PSAiXHhDMFx4ODAiCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEYwXHg4MFx4ODBceDgwIikgPT0gdTgiXFx4RjBcXHg4MFxceDgwXFx4ODAiICkKK3dpdGggZXhwYW5zaW9uOgorICAiXHhGMFx4ODBceDgwXHg4MCIgPT0gIlx4RjBceDgwXHg4MFx4ODAiCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEMxXHhCRiIpID09IHU4IlxceEMxXFx4QkYiICkKK3dpdGggZXhwYW5zaW9uOgorICAiXHhDMVx4QkYiID09ICJceEMxXHhCRiIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RTBceDlGXHhCRiIpID09IHU4IlxceEUwXFx4OUZcXHhCRiIgKQord2l0aCBleHBhbnNpb246CisgICJceEUwXHg5Rlx4QkYiID09ICJceEUwXHg5Rlx4QkYiCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEYwXHg4Rlx4QkZceEJGIikgPT0gdTgiXFx4RjBcXHg4RlxceEJGXFx4QkYiICkKK3dpdGggZXhwYW5zaW9uOgorICAiXHhGMFx4OEZceEJGXHhCRiIgPT0gIlx4RjBceDhGXHhCRlx4QkYiCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1htbEVuY29kZTogVVRGLTgKKyAgSW52YWxpZCB1dGYtOCBzdHJpbmdzCisgIFN1cnJvZ2F0ZSBwYWlycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEVEXHhBMFx4ODAiKSA9PSAiXHhFRFx4QTBceDgwIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIu2ggCIgPT0gIu2ggCIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RURceEFGXHhCRiIpID09ICJceEVEXHhBRlx4QkYiICkKK3dpdGggZXhwYW5zaW9uOgorICAi7a+/IiA9PSAi7a+/IgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhFRFx4QjBceDgwIikgPT0gIlx4RURceEIwXHg4MCIgKQord2l0aCBleHBhbnNpb246CisgICLtsIAiID09ICLtsIAiCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEVEXHhCRlx4QkYiKSA9PSAiXHhFRFx4QkZceEJGIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIu2/vyIgPT0gIu2/vyIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWG1sRW5jb2RlOiBVVEYtOAorICBJbnZhbGlkIHV0Zi04IHN0cmluZ3MKKyAgSW52YWxpZCBzdGFydCBieXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4ODAiKSA9PSB1OCJcXHg4MCIgKQord2l0aCBleHBhbnNpb246CisgICJceDgwIiA9PSAiXHg4MCIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4ODEiKSA9PSB1OCJcXHg4MSIgKQord2l0aCBleHBhbnNpb246CisgICJceDgxIiA9PSAiXHg4MSIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4QkMiKSA9PSB1OCJcXHhCQyIgKQord2l0aCBleHBhbnNpb246CisgICJceEJDIiA9PSAiXHhCQyIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4QkYiKSA9PSB1OCJcXHhCRiIgKQord2l0aCBleHBhbnNpb246CisgICJceEJGIiA9PSAiXHhCRiIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RjVceDgwXHg4MFx4ODAiKSA9PSB1OCJcXHhGNVxceDgwXFx4ODBcXHg4MCIgKQord2l0aCBleHBhbnNpb246CisgICJceEY1XHg4MFx4ODBceDgwIiA9PSAiXHhGNVx4ODBceDgwXHg4MCIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RjZceDgwXHg4MFx4ODAiKSA9PSB1OCJcXHhGNlxceDgwXFx4ODBcXHg4MCIgKQord2l0aCBleHBhbnNpb246CisgICJceEY2XHg4MFx4ODBceDgwIiA9PSAiXHhGNlx4ODBceDgwXHg4MCIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RjdceDgwXHg4MFx4ODAiKSA9PSB1OCJcXHhGN1xceDgwXFx4ODBcXHg4MCIgKQord2l0aCBleHBhbnNpb246CisgICJceEY3XHg4MFx4ODBceDgwIiA9PSAiXHhGN1x4ODBceDgwXHg4MCIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWG1sRW5jb2RlOiBVVEYtOAorICBJbnZhbGlkIHV0Zi04IHN0cmluZ3MKKyAgTWlzc2luZyBjb250aW51YXRpb24gYnl0ZShzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceERFIikgPT0gdTgiXFx4REUiICkKK3dpdGggZXhwYW5zaW9uOgorICAiXHhERSIgPT0gIlx4REUiCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceERGIikgPT0gdTgiXFx4REYiICkKK3dpdGggZXhwYW5zaW9uOgorICAiXHhERiIgPT0gIlx4REYiCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEUwIikgPT0gdTgiXFx4RTAiICkKK3dpdGggZXhwYW5zaW9uOgorICAiXHhFMCIgPT0gIlx4RTAiCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEVGIikgPT0gdTgiXFx4RUYiICkKK3dpdGggZXhwYW5zaW9uOgorICAiXHhFRiIgPT0gIlx4RUYiCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEYwIikgPT0gdTgiXFx4RjAiICkKK3dpdGggZXhwYW5zaW9uOgorICAiXHhGMCIgPT0gIlx4RjAiCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEY0IikgPT0gdTgiXFx4RjQiICkKK3dpdGggZXhwYW5zaW9uOgorICAiXHhGNCIgPT0gIlx4RjQiCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEUwXHg4MCIpID09IHU4IlxceEUwXFx4ODAiICkKK3dpdGggZXhwYW5zaW9uOgorICAiXHhFMFx4ODAiID09ICJceEUwXHg4MCIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RTBceEJGIikgPT0gdTgiXFx4RTBcXHhCRiIgKQord2l0aCBleHBhbnNpb246CisgICJceEUwXHhCRiIgPT0gIlx4RTBceEJGIgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhFMVx4ODAiKSA9PSB1OCJcXHhFMVxceDgwIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIlx4RTFceDgwIiA9PSAiXHhFMVx4ODAiCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEYwXHg4MCIpID09IHU4IlxceEYwXFx4ODAiICkKK3dpdGggZXhwYW5zaW9uOgorICAiXHhGMFx4ODAiID09ICJceEYwXHg4MCIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RjRceDgwIikgPT0gdTgiXFx4RjRcXHg4MCIgKQord2l0aCBleHBhbnNpb246CisgICJceEY0XHg4MCIgPT0gIlx4RjRceDgwIgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhGMFx4ODBceDgwIikgPT0gdTgiXFx4RjBcXHg4MFxceDgwIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIlx4RjBceDgwXHg4MCIgPT0gIlx4RjBceDgwXHg4MCIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RjRceDgwXHg4MCIpID09IHU4IlxceEY0XFx4ODBcXHg4MCIgKQord2l0aCBleHBhbnNpb246CisgICJceEY0XHg4MFx4ODAiID09ICJceEY0XHg4MFx4ODAiCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGFycmF5PGludCwgTj4gLT4gdG9TdHJpbmcKQEAgLTEyMjUyLDYyICsxMDEzMSw2IEBACiAgICJ7IHsgNDIsICJBcnRodXIiIH0sIHsgIkZvcmQiLCAyNCB9IH0iCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXBhcnNlRW51bXMKLSAgTm8gZW51bXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLX1RIQVQoIHBhcnNlRW51bXMoICIiICksIEVxdWFscyggc3RkOjp2ZWN0b3I8Q2F0Y2g6OlN0cmluZ1JlZj57fSApICkKLXdpdGggZXhwYW5zaW9uOgotICB7ICB9IEVxdWFsczogeyAgfQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1wYXJzZUVudW1zCi0gIE9uZSBlbnVtIHZhbHVlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBDSEVDS19USEFUKCBwYXJzZUVudW1zKCAiQ2xhc3NOYW1lOjpFbnVtTmFtZTo6VmFsdWUxIiApLCBFcXVhbHMoc3RkOjp2ZWN0b3I8Q2F0Y2g6OlN0cmluZ1JlZj57IlZhbHVlMSJ9ICkgKQotd2l0aCBleHBhbnNpb246Ci0gIHsgVmFsdWUxIH0gRXF1YWxzOiB7IFZhbHVlMSB9Ci0KLVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLX1RIQVQoIHBhcnNlRW51bXMoICJWYWx1ZTEiICksIEVxdWFscyggc3RkOjp2ZWN0b3I8Q2F0Y2g6OlN0cmluZ1JlZj57IlZhbHVlMSJ9ICkgKQotd2l0aCBleHBhbnNpb246Ci0gIHsgVmFsdWUxIH0gRXF1YWxzOiB7IFZhbHVlMSB9Ci0KLVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLX1RIQVQoIHBhcnNlRW51bXMoICJFbnVtTmFtZTo6VmFsdWUxIiApLCBFcXVhbHMoc3RkOjp2ZWN0b3I8Q2F0Y2g6OlN0cmluZ1JlZj57IlZhbHVlMSJ9ICkgKQotd2l0aCBleHBhbnNpb246Ci0gIHsgVmFsdWUxIH0gRXF1YWxzOiB7IFZhbHVlMSB9Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXBhcnNlRW51bXMKLSAgTXVsdGlwbGUgZW51bSB2YWx1ZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLX1RIQVQoIHBhcnNlRW51bXMoICJDbGFzc05hbWU6OkVudW1OYW1lOjpWYWx1ZTEsIENsYXNzTmFtZTo6RW51bU5hbWU6OlZhbHVlMiIgKSwgRXF1YWxzKCBzdGQ6OnZlY3RvcjxDYXRjaDo6U3RyaW5nUmVmPnsiVmFsdWUxIiwgIlZhbHVlMiJ9ICkgKQotd2l0aCBleHBhbnNpb246Ci0gIHsgVmFsdWUxLCBWYWx1ZTIgfSBFcXVhbHM6IHsgVmFsdWUxLCBWYWx1ZTIgfQotCi1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBDSEVDS19USEFUKCBwYXJzZUVudW1zKCAiQ2xhc3NOYW1lOjpFbnVtTmFtZTo6VmFsdWUxLCBDbGFzc05hbWU6OkVudW1OYW1lOjpWYWx1ZTIsIENsYXNzTmFtZTo6RW51bU5hbWU6OlZhbHVlMyIgKSwgRXF1YWxzKCBzdGQ6OnZlY3RvcjxDYXRjaDo6U3RyaW5nUmVmPnsiVmFsdWUxIiwgIlZhbHVlMiIsICJWYWx1ZTMifSApICkKLXdpdGggZXhwYW5zaW9uOgotICB7IFZhbHVlMSwgVmFsdWUyLCBWYWx1ZTMgfSBFcXVhbHM6IHsgVmFsdWUxLCBWYWx1ZTIsIFZhbHVlMyB9Ci0KLVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLX1RIQVQoIHBhcnNlRW51bXMoICJDbGFzc05hbWU6OkVudW1OYW1lOjpWYWx1ZTEsQ2xhc3NOYW1lOjpFbnVtTmFtZTo6VmFsdWUyICwgQ2xhc3NOYW1lOjpFbnVtTmFtZTo6VmFsdWUzIiApLCBFcXVhbHMoIHN0ZDo6dmVjdG9yPENhdGNoOjpTdHJpbmdSZWY+eyJWYWx1ZTEiLCAiVmFsdWUyIiwgIlZhbHVlMyJ9ICkgKQotd2l0aCBleHBhbnNpb246Ci0gIHsgVmFsdWUxLCBWYWx1ZTIsIFZhbHVlMyB9IEVxdWFsczogeyBWYWx1ZTEsIFZhbHVlMiwgVmFsdWUzIH0KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogcG9pbnRlciB0byBjbGFzcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC0xMjM5NiwxNSArMTAyMTksMTUgQEAKIHJlcGxhY2VJblBsYWNlCiAgIHJlcGxhY2Ugc2luZ2xlIGNoYXIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgQ0hFQ0soIENhdGNoOjpyZXBsYWNlSW5QbGFjZShsZXR0ZXJzLCAiYiIsICJ6IikgKQorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBDYXRjaDo6cmVwbGFjZUluUGxhY2UoIGxldHRlcnMsICJiIiwgInoiICkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggbGV0dGVycyA9PSAiYXpjZGVmY2ciICkKIHdpdGggZXhwYW5zaW9uOgogICAiYXpjZGVmY2ciID09ICJhemNkZWZjZyIKQEAgLTEyNDEzLDE1ICsxMDIzNiwxNSBAQAogcmVwbGFjZUluUGxhY2UKICAgcmVwbGFjZSB0d28gY2hhcnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgQ0hFQ0soIENhdGNoOjpyZXBsYWNlSW5QbGFjZShsZXR0ZXJzLCAiYyIsICJ6IikgKQorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBDYXRjaDo6cmVwbGFjZUluUGxhY2UoIGxldHRlcnMsICJjIiwgInoiICkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggbGV0dGVycyA9PSAiYWJ6ZGVmemciICkKIHdpdGggZXhwYW5zaW9uOgogICAiYWJ6ZGVmemciID09ICJhYnpkZWZ6ZyIKQEAgLTEyNDMwLDE1ICsxMDI1MywxNSBAQAogcmVwbGFjZUluUGxhY2UKICAgcmVwbGFjZSBmaXJzdCBjaGFyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdHJpbmdNYW5pcC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLKCBDYXRjaDo6cmVwbGFjZUluUGxhY2UobGV0dGVycywgImEiLCAieiIpICkKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKCBsZXR0ZXJzLCAiYSIsICJ6IiApICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCiAKLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIGxldHRlcnMgPT0gInpiY2RlZmNnIiApCiB3aXRoIGV4cGFuc2lvbjoKICAgInpiY2RlZmNnIiA9PSAiemJjZGVmY2ciCkBAIC0xMjQ0NywxNSArMTAyNzAsMTUgQEAKIHJlcGxhY2VJblBsYWNlCiAgIHJlcGxhY2UgbGFzdCBjaGFyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdHJpbmdNYW5pcC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLKCBDYXRjaDo6cmVwbGFjZUluUGxhY2UobGV0dGVycywgImciLCAieiIpICkKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKCBsZXR0ZXJzLCAiZyIsICJ6IiApICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCiAKLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIGxldHRlcnMgPT0gImFiY2RlZmN6IiApCiB3aXRoIGV4cGFuc2lvbjoKICAgImFiY2RlZmN6IiA9PSAiYWJjZGVmY3oiCkBAIC0xMjQ2NCwxNSArMTAyODcsMTUgQEAKIHJlcGxhY2VJblBsYWNlCiAgIHJlcGxhY2UgYWxsIGNoYXJzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdHJpbmdNYW5pcC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLKCBDYXRjaDo6cmVwbGFjZUluUGxhY2UobGV0dGVycywgbGV0dGVycywgInJlcGxhY2VkIikgKQorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBDYXRjaDo6cmVwbGFjZUluUGxhY2UoIGxldHRlcnMsIGxldHRlcnMsICJyZXBsYWNlZCIgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1TdHJpbmdNYW5pcC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBsZXR0ZXJzID09ICJyZXBsYWNlZCIgKQogd2l0aCBleHBhbnNpb246CiAgICJyZXBsYWNlZCIgPT0gInJlcGxhY2VkIgpAQCAtMTI0ODEsMTUgKzEwMzA0LDE1IEBACiByZXBsYWNlSW5QbGFjZQogICByZXBsYWNlIG5vIGNoYXJzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdHJpbmdNYW5pcC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIENIRUNLX0ZBTFNFKCBDYXRjaDo6cmVwbGFjZUluUGxhY2UobGV0dGVycywgIngiLCAieiIpICkKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDS19GQUxTRSggQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKCBsZXR0ZXJzLCAieCIsICJ6IiApICkKIHdpdGggZXhwYW5zaW9uOgogICAhZmFsc2UKIAotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggbGV0dGVycyA9PSBsZXR0ZXJzICkKIHdpdGggZXhwYW5zaW9uOgogICAiYWJjZGVmY2ciID09ICJhYmNkZWZjZyIKQEAgLTEyNDk4LDE1ICsxMDMyMSwxNSBAQAogcmVwbGFjZUluUGxhY2UKICAgZXNjYXBlICcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVN0cmluZ01hbmlwLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgQ0hFQ0soIENhdGNoOjpyZXBsYWNlSW5QbGFjZShzLCAiJyIsICJ8JyIpICkKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKCBzLCAiJyIsICJ8JyIgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1TdHJpbmdNYW5pcC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzID09ICJkaWRufCd0IiApCiB3aXRoIGV4cGFuc2lvbjoKICAgImRpZG58J3QiID09ICJkaWRufCd0IgpAQCAtMTI1NTIsMjggKzEwMzc1LDcgQEAKIFRhZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIQVQoIHRlc3RjYXNlLnRhZ3MsIENhdGNoOjpWZWN0b3JDb250YWlucyhzdGQ6OnN0cmluZygibWFnaWMtdGFnIikpICYmIENhdGNoOjpWZWN0b3JDb250YWlucyhzdGQ6OnN0cmluZygiLiIpKSApCiB3aXRoIGV4cGFuc2lvbjoKLSAgeyAiIWhpZGUiLCAiLiIsICJtYWdpYy10YWciIH0gKCBDb250YWluczogIm1hZ2ljLXRhZyIgYW5kIENvbnRhaW5zOiAiLiIgKQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zcGxpdFN0cmluZwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgQ0hFQ0tfVEhBVCggc3BsaXRTdHJpbmdSZWYoIiIsICcsJyksIEVxdWFscyhzdGQ6OnZlY3RvcjxTdHJpbmdSZWY+KCkpICkKLXdpdGggZXhwYW5zaW9uOgotICB7ICB9IEVxdWFsczogeyAgfQotCi1TdHJpbmdNYW5pcC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgotICBDSEVDS19USEFUKCBzcGxpdFN0cmluZ1JlZigiYWJjIiwgJywnKSwgRXF1YWxzKHN0ZDo6dmVjdG9yPFN0cmluZ1JlZj57ImFiYyJ9KSApCi13aXRoIGV4cGFuc2lvbjoKLSAgeyBhYmMgfSBFcXVhbHM6IHsgYWJjIH0KLQotU3RyaW5nTWFuaXAudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgQ0hFQ0tfVEhBVCggc3BsaXRTdHJpbmdSZWYoImFiYyxkZWYiLCAnLCcpLCBFcXVhbHMoc3RkOjp2ZWN0b3I8U3RyaW5nUmVmPnsiYWJjIiwgImRlZiJ9KSApCi13aXRoIGV4cGFuc2lvbjoKLSAgeyBhYmMsIGRlZiB9IEVxdWFsczogeyBhYmMsIGRlZiB9CisgIHsgIi4iLCAibWFnaWMtdGFnIiB9ICggQ29udGFpbnM6ICJtYWdpYy10YWciIGFuZCBDb250YWluczogIi4iICkKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3RhY2tzIHVuc2NvcGVkIGluZm8gaW4gbG9vcHMKQEAgLTEzNDE2LDYgKzExMjE4LDYgQEAKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdGVzdCBjYXNlczogIDMwNiB8ICAyMTYgcGFzc2VkIHwgIDg2IGZhaWxlZCB8ICA0IGZhaWxlZCBhcyBleHBlY3RlZAotYXNzZXJ0aW9uczogMTY5MyB8IDE1MjQgcGFzc2VkIHwgMTQ4IGZhaWxlZCB8IDIxIGZhaWxlZCBhcyBleHBlY3RlZAordGVzdCBjYXNlczogIDI2MCB8ICAxNzcgcGFzc2VkIHwgIDc5IGZhaWxlZCB8ICA0IGZhaWxlZCBhcyBleHBlY3RlZAorYXNzZXJ0aW9uczogMTQ0NSB8IDEyODMgcGFzc2VkIHwgMTQxIGZhaWxlZCB8IDIxIGZhaWxlZCBhcyBleHBlY3RlZAogCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9CYXNlbGluZXMvY29uc29sZS5zd2E0LmFwcHJvdmVkLnR4dCBiL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy9jb25zb2xlLnN3YTQuYXBwcm92ZWQudHh0CmluZGV4IDMyMmI4MTUuLmJmYTY2NzUgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy9jb25zb2xlLnN3YTQuYXBwcm92ZWQudHh0CisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy9jb25zb2xlLnN3YTQuYXBwcm92ZWQudHh0CkBAIC01MCwyMiArNTAsNiBAQAogICAwID09IDAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIzEwMjc6IEJpdGZpZWxkcyBjYW4gYmUgY2FwdHVyZWQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUNvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6Ci0gIFJFUVVJUkUoIHkudiA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotICAwID09IDAKLQotQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKLSAgUkVRVUlSRSggMCA9PSB5LnYgKQotd2l0aCBleHBhbnNpb246Ci0gIDAgPT0gMAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjMTE0NwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KQEAgLTM2OCw2ICszNTIsNiBAQAogICBDSEVDSyggdHJ1ZSAhPSB0cnVlICkKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdGVzdCBjYXNlczogMTkgfCAxNCBwYXNzZWQgfCAzIGZhaWxlZCB8IDIgZmFpbGVkIGFzIGV4cGVjdGVkCi1hc3NlcnRpb25zOiA0MiB8IDM1IHBhc3NlZCB8IDQgZmFpbGVkIHwgMyBmYWlsZWQgYXMgZXhwZWN0ZWQKK3Rlc3QgY2FzZXM6IDE4IHwgMTMgcGFzc2VkIHwgMyBmYWlsZWQgfCAyIGZhaWxlZCBhcyBleHBlY3RlZAorYXNzZXJ0aW9uczogNDAgfCAzMyBwYXNzZWQgfCA0IGZhaWxlZCB8IDMgZmFpbGVkIGFzIGV4cGVjdGVkCiAKZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy9qdW5pdC5zdy5hcHByb3ZlZC50eHQgYi9wcm9qZWN0cy9TZWxmVGVzdC9CYXNlbGluZXMvanVuaXQuc3cuYXBwcm92ZWQudHh0CmluZGV4IDZkZDAzYTkuLmFmNGViZTAgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy9qdW5pdC5zdy5hcHByb3ZlZC50eHQKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL2p1bml0LnN3LmFwcHJvdmVkLnR4dApAQCAtMSw3ICsxLDcgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8dGVzdHN1aXRlc2xvb3NlIHRleHQgYXJ0aWZhY3QKID4KLSAgPHRlc3RzdWl0ZSBuYW1lPSI8ZXhlLW5hbWU+IiBlcnJvcnM9IjE3IiBmYWlsdXJlcz0iMTMyIiB0ZXN0cz0iMTY5NCIgaG9zdG5hbWU9InRiZCIgdGltZT0ie2R1cmF0aW9ufSIgdGltZXN0YW1wPSJ7aXNvODYwMS10aW1lc3RhbXB9Ij4KKyAgPHRlc3RzdWl0ZSBuYW1lPSI8ZXhlLW5hbWU+IiBlcnJvcnM9IjE3IiBmYWlsdXJlcz0iMTI1IiB0ZXN0cz0iMTQ0NiIgaG9zdG5hbWU9InRiZCIgdGltZT0ie2R1cmF0aW9ufSIgdGltZXN0YW1wPSJ7aXNvODYwMS10aW1lc3RhbXB9Ij4KICAgICA8cHJvcGVydGllcz4KICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmaWx0ZXJzIiB2YWx1ZT0iflshbm9ucG9ydGFibGVdflshYmVuY2htYXJrXX5bYXBwcm92YWxzXSIvPgogICAgICAgPHByb3BlcnR5IG5hbWU9InJhbmRvbS1zZWVkIiB2YWx1ZT0iMSIvPgpAQCAtOSw3ICs5LDYgQEAKICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iIyBBIHRlc3QgbmFtZSB0aGF0IHN0YXJ0cyB3aXRoIGEgIyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSIjMTAwNTogQ29tcGFyaW5nIHBvaW50ZXIgdG8gaW50IGFuZCBsb25nIChOVUxMIGNhbiBiZSBlaXRoZXIgb24gdmFyaW91cyBzeXN0ZW1zKSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSIjMTAyNyIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSIjMTAyNzogQml0ZmllbGRzIGNhbiBiZSBjYXB0dXJlZCIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSIjMTE0NyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSIjMTE3NSAtIEhpZGRlbiBUZXN0IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IiMxMjM4IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CkBAIC0xOCw3ICsxNyw2IEBACiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IiMxNDU1IC0gSU5GTyBhbmQgV0FSTiBjYW4gc3RhcnQgd2l0aCBhIGxpbmVicmVhayIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSIjMTUxNDogc3RkZXJyL3N0ZG91dCBpcyBub3QgY2FwdHVyZWQgaW4gdGVzdHMgYWJvcnRlZCBieSBhbiBleGNlcHRpb24iIHRpbWU9IntkdXJhdGlvbn0iPgogICAgICAgPGZhaWx1cmUgdHlwZT0iRkFJTCI+Ci1GQUlMRUQ6CiAxNTE0CiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KQEAgLTMyLDcgKzMwLDYgQEAKICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iIzE1NDgiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iIzc0OCAtIGNhcHR1cmVzIHdpdGggdW5leHBlY3RlZCBleGNlcHRpb25zL291dHNpZGUgYXNzZXJ0aW9ucyIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZXJyb3IgdHlwZT0iVEVTVF9DQVNFIj4KLUZBSUxFRDoKIGV4cGVjdGVkIGV4Y2VwdGlvbgogYW5zd2VyIDo9IDQyCiBFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KQEAgLTQwLDggKzM3LDYgQEAKICAgICA8L3Rlc3RjYXNlPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSIjNzQ4IC0gY2FwdHVyZXMgd2l0aCB1bmV4cGVjdGVkIGV4Y2VwdGlvbnMvaW5zaWRlIFJFUVVJUkVfTk9USFJPVyIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZXJyb3IgbWVzc2FnZT0idGhpc1Rocm93cygpIiB0eXBlPSJSRVFVSVJFX05PVEhST1ciPgotRkFJTEVEOgotICBSRVFVSVJFX05PVEhST1coIHRoaXNUaHJvd3MoKSApCiBleHBlY3RlZCBleGNlcHRpb24KIGFuc3dlciA6PSA0MgogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC01MSwxMSArNDYsNyBAQAogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSIjODA5IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IiM4MzMiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iIzgzNSAtLSBlcnJubyBzaG91bGQgbm90IGJlIHRvdWNoZWQgYnkgQ2F0Y2giIHRpbWU9IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZigpID09IDAiIHR5cGU9IkNIRUNLIj4KLUZBSUxFRDoKLSAgQ0hFQ0soIGYoKSA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotICAxID09IDAKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjEgPT0gMCIgdHlwZT0iQ0hFQ0siPgogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CkBAIC02Nyw1MyArNTgsMjcgQEAKICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iIzk2MSAtLSBEeW5hbWljYWxseSBjcmVhdGVkIHNlY3Rpb25zIHNob3VsZCBhbGwgYmUgcmVwb3J0ZWQvTG9vcGVkIHNlY3Rpb24gNCIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSInTm90JyBjaGVja3MgdGhhdCBzaG91bGQgZmFpbCIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJmYWxzZSAhPSBmYWxzZSIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggZmFsc2UgIT0gZmFsc2UgKQogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJ0cnVlICE9IHRydWUiIHR5cGU9IkNIRUNLIj4KLUZBSUxFRDoKLSAgQ0hFQ0soIHRydWUgIT0gdHJ1ZSApCiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IiF0cnVlIiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCAhdHJ1ZSApCi13aXRoIGV4cGFuc2lvbjoKLSAgZmFsc2UKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImZhbHNlIiB0eXBlPSJDSEVDSyI+CiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IiEodHJ1ZSkiIHR5cGU9IkNIRUNLX0ZBTFNFIj4KLUZBSUxFRDoKLSAgQ0hFQ0tfRkFMU0UoIHRydWUgKQotd2l0aCBleHBhbnNpb246Ci0gICF0cnVlCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSIhdHJ1ZSIgdHlwZT0iQ0hFQ0tfRkFMU0UiPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSIhdHJ1ZVZhbHVlIiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCAhdHJ1ZVZhbHVlICkKLXdpdGggZXhwYW5zaW9uOgotICBmYWxzZQorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZmFsc2UiIHR5cGU9IkNIRUNLIj4KIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iISh0cnVlVmFsdWUpIiB0eXBlPSJDSEVDS19GQUxTRSI+Ci1GQUlMRUQ6Ci0gIENIRUNLX0ZBTFNFKCB0cnVlVmFsdWUgKQotd2l0aCBleHBhbnNpb246Ci0gICF0cnVlCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSIhdHJ1ZSIgdHlwZT0iQ0hFQ0tfRkFMU0UiPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSIhKDEgPT0gMSkiIHR5cGU9IkNIRUNLIj4KLUZBSUxFRDoKLSAgQ0hFQ0soICEoMSA9PSAxKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgZmFsc2UKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImZhbHNlIiB0eXBlPSJDSEVDSyI+CiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KICAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IiEoMSA9PSAxKSIgdHlwZT0iQ0hFQ0tfRkFMU0UiPgotRkFJTEVEOgotICBDSEVDS19GQUxTRSggMSA9PSAxICkKIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CkBAIC0xMjUsNDggKzkwLDI4IEBACiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Iih1bmltcGxlbWVudGVkKSBzdGF0aWMgYm9vbHMgY2FuIGJlIGV2YWx1YXRlZC9kaXJlY3QiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iM3gzeDMgaW50cyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVzdENsYXNzIiBuYW1lPSJBIE1FVEhPRF9BU19URVNUX0NBU0UgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJzID09ICZxdW90O3dvcmxkJnF1b3Q7IiB0eXBlPSJSRVFVSVJFIj4KLUZBSUxFRDoKLSAgUkVRVUlSRSggcyA9PSAid29ybGQiICkKLXdpdGggZXhwYW5zaW9uOgotICAiaGVsbG8iID09ICJ3b3JsZCIKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IiZxdW90O2hlbGxvJnF1b3Q7ID09ICZxdW90O3dvcmxkJnF1b3Q7IiB0eXBlPSJSRVFVSVJFIj4KIENsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+LlRlc3RDbGFzcyIgbmFtZT0iQSBNRVRIT0RfQVNfVEVTVF9DQVNFIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+LlRlbXBsYXRlX0ZpeHR1cmVfMiIgbmFtZT0iQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIFRlbXBsYXRlX0ZvbyZsdDtmbG9hdD4iIHRpbWU9IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iVGVtcGxhdGVfRml4dHVyZV8yJmx0O1Rlc3RUeXBlPjo6bV9hLnNpemUoKSA9PSAxIiB0eXBlPSJSRVFVSVJFIj4KLUZBSUxFRDoKLSAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZV8yJmx0O1Rlc3RUeXBlPjo6bV9hLnNpemUoKSA9PSAxICkKLXdpdGggZXhwYW5zaW9uOgotICAwID09IDEKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjAgPT0gMSIgdHlwZT0iUkVRVUlSRSI+CiBDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5UZW1wbGF0ZV9GaXh0dXJlXzIiIG5hbWU9IkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBUZW1wbGF0ZV9Gb28mbHQ7aW50PiIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEiIHR5cGU9IlJFUVVJUkUiPgotRkFJTEVEOgotICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEgKQotd2l0aCBleHBhbnNpb246Ci0gIDAgPT0gMQorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iMCA9PSAxIiB0eXBlPSJSRVFVSVJFIj4KIENsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+LlRlbXBsYXRlX0ZpeHR1cmVfMiIgbmFtZT0iQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIHN0ZDo6dmVjdG9yJmx0O2Zsb2F0PiIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEiIHR5cGU9IlJFUVVJUkUiPgotRkFJTEVEOgotICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEgKQotd2l0aCBleHBhbnNpb246Ci0gIDAgPT0gMQorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iMCA9PSAxIiB0eXBlPSJSRVFVSVJFIj4KIENsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+LlRlbXBsYXRlX0ZpeHR1cmVfMiIgbmFtZT0iQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIHN0ZDo6dmVjdG9yJmx0O2ludD4iIHRpbWU9IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iVGVtcGxhdGVfRml4dHVyZV8yJmx0O1Rlc3RUeXBlPjo6bV9hLnNpemUoKSA9PSAxIiB0eXBlPSJSRVFVSVJFIj4KLUZBSUxFRDoKLSAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZV8yJmx0O1Rlc3RUeXBlPjo6bV9hLnNpemUoKSA9PSAxICkKLXdpdGggZXhwYW5zaW9uOgotICAwID09IDEKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjAgPT0gMSIgdHlwZT0iUkVRVUlSRSI+CiBDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CkBAIC0xNzQsMTEyICsxMTksMjYgQEAKICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+LlRlbXBsYXRlX0ZpeHR1cmVfMiIgbmFtZT0iQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtIFRlbXBsYXRlX0ZvbyZsdDtpbnQ+IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5UZW1wbGF0ZV9GaXh0dXJlXzIiIG5hbWU9IkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSBzdGQ6OnZlY3RvciZsdDtmbG9hdD4iIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+LlRlbXBsYXRlX0ZpeHR1cmVfMiIgbmFtZT0iQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtIHN0ZDo6dmVjdG9yJmx0O2ludD4iIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+LlRlbXBsYXRlX0ZpeHR1cmVfMiIgbmFtZT0iQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBUZW1wbGF0ZV9Gb29fMiZsdDtmbG9hdCwgNj4iIHRpbWU9IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iVGVtcGxhdGVfRml4dHVyZV8yJmx0O1Rlc3RUeXBlPnt9Lm1fYS5zaXplKCkgJmx0OyAyIiB0eXBlPSJSRVFVSVJFIj4KLUZBSUxFRDoKLSAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZV8yJmx0O1Rlc3RUeXBlPnt9Lm1fYS5zaXplKCkgJmx0OyAyICkKLXdpdGggZXhwYW5zaW9uOgotICA2ICZsdDsgMgotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RjYXNlPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVtcGxhdGVfRml4dHVyZV8yIiBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIFRlbXBsYXRlX0Zvb18yJmx0O2ludCwgMj4iIHRpbWU9IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iVGVtcGxhdGVfRml4dHVyZV8yJmx0O1Rlc3RUeXBlPnt9Lm1fYS5zaXplKCkgJmx0OyAyIiB0eXBlPSJSRVFVSVJFIj4KLUZBSUxFRDoKLSAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZV8yJmx0O1Rlc3RUeXBlPnt9Lm1fYS5zaXplKCkgJmx0OyAyICkKLXdpdGggZXhwYW5zaW9uOgotICAyICZsdDsgMgotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RjYXNlPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVtcGxhdGVfRml4dHVyZV8yIiBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIHN0ZDo6YXJyYXkmbHQ7ZmxvYXQsIDY+IiB0aW1lPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IlRlbXBsYXRlX0ZpeHR1cmVfMiZsdDtUZXN0VHlwZT57fS5tX2Euc2l6ZSgpICZsdDsgMiIgdHlwZT0iUkVRVUlSRSI+Ci1GQUlMRUQ6Ci0gIFJFUVVJUkUoIFRlbXBsYXRlX0ZpeHR1cmVfMiZsdDtUZXN0VHlwZT57fS5tX2Euc2l6ZSgpICZsdDsgMiApCi13aXRoIGV4cGFuc2lvbjoKLSAgNiAmbHQ7IDIKLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Y2FzZT4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+LlRlbXBsYXRlX0ZpeHR1cmVfMiIgbmFtZT0iQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBzdGQ6OmFycmF5Jmx0O2ludCwgMj4iIHRpbWU9IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iVGVtcGxhdGVfRml4dHVyZV8yJmx0O1Rlc3RUeXBlPnt9Lm1fYS5zaXplKCkgJmx0OyAyIiB0eXBlPSJSRVFVSVJFIj4KLUZBSUxFRDoKLSAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZV8yJmx0O1Rlc3RUeXBlPnt9Lm1fYS5zaXplKCkgJmx0OyAyICkKLXdpdGggZXhwYW5zaW9uOgotICAyICZsdDsgMgotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RjYXNlPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVtcGxhdGVfRml4dHVyZV8yIiBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtIFRlbXBsYXRlX0Zvb18yJmx0O2Zsb2F0LDY+IiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5UZW1wbGF0ZV9GaXh0dXJlXzIiIG5hbWU9IkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gVGVtcGxhdGVfRm9vXzImbHQ7aW50LDI+IiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5UZW1wbGF0ZV9GaXh0dXJlXzIiIG5hbWU9IkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gc3RkOjphcnJheSZsdDtmbG9hdCw2PiIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVtcGxhdGVfRml4dHVyZV8yIiBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtIHN0ZDo6YXJyYXkmbHQ7aW50LDI+IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5UZW1wbGF0ZV9GaXh0dXJlIiBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIGRvdWJsZSIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJUZW1wbGF0ZV9GaXh0dXJlJmx0O1Rlc3RUeXBlPjo6bV9hID09IDIiIHR5cGU9IlJFUVVJUkUiPgotRkFJTEVEOgotICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlJmx0O1Rlc3RUeXBlPjo6bV9hID09IDIgKQotd2l0aCBleHBhbnNpb246Ci0gIDEuMCA9PSAyCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSIxLjAgPT0gMiIgdHlwZT0iUkVRVUlSRSI+CiBDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5UZW1wbGF0ZV9GaXh0dXJlIiBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIGZsb2F0IiB0aW1lPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IlRlbXBsYXRlX0ZpeHR1cmUmbHQ7VGVzdFR5cGU+OjptX2EgPT0gMiIgdHlwZT0iUkVRVUlSRSI+Ci1GQUlMRUQ6Ci0gIFJFUVVJUkUoIFRlbXBsYXRlX0ZpeHR1cmUmbHQ7VGVzdFR5cGU+OjptX2EgPT0gMiApCi13aXRoIGV4cGFuc2lvbjoKLSAgMS4wZiA9PSAyCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSIxLjBmID09IDIiIHR5cGU9IlJFUVVJUkUiPgogQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KICAgICA8L3Rlc3RjYXNlPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVtcGxhdGVfRml4dHVyZSIgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBpbnQiIHRpbWU9IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iVGVtcGxhdGVfRml4dHVyZSZsdDtUZXN0VHlwZT46Om1fYSA9PSAyIiB0eXBlPSJSRVFVSVJFIj4KLUZBSUxFRDoKLSAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZSZsdDtUZXN0VHlwZT46Om1fYSA9PSAyICkKLXdpdGggZXhwYW5zaW9uOgotICAxID09IDIKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjEgPT0gMiIgdHlwZT0iUkVRVUlSRSI+CiBDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5UZW1wbGF0ZV9GaXh0dXJlIiBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtIGRvdWJsZSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVtcGxhdGVfRml4dHVyZSIgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSBmbG9hdCIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVtcGxhdGVfRml4dHVyZSIgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSBpbnQiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lk50dHBfRml4dHVyZSIgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gMSIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJOdHRwX0ZpeHR1cmUmbHQ7Vj46OnZhbHVlID09IDAiIHR5cGU9IlJFUVVJUkUiPgotRkFJTEVEOgotICBSRVFVSVJFKCBOdHRwX0ZpeHR1cmUmbHQ7Vj46OnZhbHVlID09IDAgKQotd2l0aCBleHBhbnNpb246Ci0gIDEgPT0gMAotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RjYXNlPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uTnR0cF9GaXh0dXJlIiBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSAzIiB0aW1lPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9Ik50dHBfRml4dHVyZSZsdDtWPjo6dmFsdWUgPT0gMCIgdHlwZT0iUkVRVUlSRSI+Ci1GQUlMRUQ6Ci0gIFJFUVVJUkUoIE50dHBfRml4dHVyZSZsdDtWPjo6dmFsdWUgPT0gMCApCi13aXRoIGV4cGFuc2lvbjoKLSAgMyA9PSAwCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdGNhc2U+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5OdHRwX0ZpeHR1cmUiIG5hbWU9IkEgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIDYiIHRpbWU9IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iTnR0cF9GaXh0dXJlJmx0O1Y+Ojp2YWx1ZSA9PSAwIiB0eXBlPSJSRVFVSVJFIj4KLUZBSUxFRDoKLSAgUkVRVUlSRSggTnR0cF9GaXh0dXJlJmx0O1Y+Ojp2YWx1ZSA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotICA2ID09IDAKLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Y2FzZT4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lk50dHBfRml4dHVyZSIgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gMSIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uTnR0cF9GaXh0dXJlIiBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSAzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5OdHRwX0ZpeHR1cmUiIG5hbWU9IkEgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtIDYiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+LkZpeHR1cmUiIG5hbWU9IkEgVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIiB0aW1lPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9Im1fYSA9PSAyIiB0eXBlPSJSRVFVSVJFIj4KLUZBSUxFRDoKLSAgUkVRVUlSRSggbV9hID09IDIgKQotd2l0aCBleHBhbnNpb246Ci0gIDEgPT0gMgorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iMSA9PSAyIiB0eXBlPSJSRVFVSVJFIj4KIENsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KQEAgLTI4OCwzMiArMTQ3LDE5IEBACiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkEgVGVtcGxhdGUgcHJvZHVjdCB0ZXN0IGNhc2UgLSBGb28mbHQ7aW50PiIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJBIFRlbXBsYXRlIHByb2R1Y3QgdGVzdCBjYXNlIC0gc3RkOjp2ZWN0b3ImbHQ7ZmxvYXQ+IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkEgVGVtcGxhdGUgcHJvZHVjdCB0ZXN0IGNhc2UgLSBzdGQ6OnZlY3RvciZsdDtpbnQ+IiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkEgVGVtcGxhdGUgcHJvZHVjdCB0ZXN0IGNhc2Ugd2l0aCBhcnJheSBzaWduYXR1cmUgLSBCYXImbHQ7ZmxvYXQsIDQyPiIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJBIFRlbXBsYXRlIHByb2R1Y3QgdGVzdCBjYXNlIHdpdGggYXJyYXkgc2lnbmF0dXJlIC0gQmFyJmx0O2ludCwgOT4iIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQSBUZW1wbGF0ZSBwcm9kdWN0IHRlc3QgY2FzZSB3aXRoIGFycmF5IHNpZ25hdHVyZSAtIHN0ZDo6YXJyYXkmbHQ7ZmxvYXQsIDQyPiIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJBIFRlbXBsYXRlIHByb2R1Y3QgdGVzdCBjYXNlIHdpdGggYXJyYXkgc2lnbmF0dXJlIC0gc3RkOjphcnJheSZsdDtpbnQsIDk+IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkEgY29tcGFyaXNvbiB0aGF0IHVzZXMgbGl0ZXJhbHMgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIGNvbnN0cnVjdG9yIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkEgY291cGxlIG9mIG5lc3RlZCBzZWN0aW9ucyBmb2xsb3dlZCBieSBhIGZhaWx1cmUiIHRpbWU9IntkdXJhdGlvbn0iPgogICAgICAgPGZhaWx1cmUgdHlwZT0iRkFJTCI+Ci1GQUlMRUQ6CiB0byBpbmZpbml0eSBhbmQgYmV5b25kCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQSBjb3VwbGUgb2YgbmVzdGVkIHNlY3Rpb25zIGZvbGxvd2VkIGJ5IGEgZmFpbHVyZS9PdXRlci9Jbm5lciIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJBIGZhaWxpbmcgZXhwcmVzc2lvbiB3aXRoIGEgbm9uIHN0cmVhbWFibGUgdHlwZSBpcyBzdGlsbCBjYXB0dXJlZCIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSImYW1wO28xID09ICZhbXA7bzIiIHR5cGU9IkNIRUNLIj4KLUZBSUxFRDoKLSAgQ0hFQ0soICZhbXA7bzEgPT0gJmFtcDtvMiApCi13aXRoIGV4cGFuc2lvbjoKLSAgMHg8aGV4IGRpZ2l0cz4gPT0gMHg8aGV4IGRpZ2l0cz4KKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjB4PGhleCBkaWdpdHM+ID09IDB4PGhleCBkaWdpdHM+IiB0eXBlPSJDSEVDSyI+CiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9Im8xID09IG8yIiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCBvMSA9PSBvMiApCi13aXRoIGV4cGFuc2lvbjoKLSAgez99ID09IHs/fQorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iez99ID09IHs/fSIgdHlwZT0iQ0hFQ0siPgogVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KQEAgLTMyMSw4ICsxNjcsNiBAQAogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJBbiBleHByZXNzaW9uIHdpdGggc2lkZS1lZmZlY3RzIHNob3VsZCBvbmx5IGJlIGV2YWx1YXRlZCBvbmNlIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkFuIHVuY2hlY2tlZCBleGNlcHRpb24gcmVwb3J0cyB0aGUgbGluZSBvZiB0aGUgbGFzdCBhc3NlcnRpb24iIHRpbWU9IntkdXJhdGlvbn0iPgogICAgICAgPGVycm9yIG1lc3NhZ2U9IntVbmtub3duIGV4cHJlc3Npb24gYWZ0ZXIgdGhlIHJlcG9ydGVkIGxpbmV9Ij4KLUZBSUxFRDoKLSAge1Vua25vd24gZXhwcmVzc2lvbiBhZnRlciB0aGUgcmVwb3J0ZWQgbGluZX0KIHVuZXhwZWN0ZWQgZXhjZXB0aW9uCiBFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZXJyb3I+CkBAIC0zNDEsOSArMTg1LDEwIEBACiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkFzc2VydGlvbnMgdGhlbiBzZWN0aW9ucy9BIHNlY3Rpb24iIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQXNzZXJ0aW9ucyB0aGVuIHNlY3Rpb25zL0Egc2VjdGlvbi9Bbm90aGVyIHNlY3Rpb24iIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQXNzZXJ0aW9ucyB0aGVuIHNlY3Rpb25zL0Egc2VjdGlvbi9Bbm90aGVyIG90aGVyIHNlY3Rpb24iIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQXNzb3J0ZWQgbWlzY2VsbGFuZW91cyB0ZXN0cyIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJCaXRmaWVsZHMgY2FuIGJlIGNhcHR1cmVkICgjMTAyNykiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQ0FQVFVSRSBjYW4gZGVhbCB3aXRoIGNvbXBsZXggZXhwcmVzc2lvbnMiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQ0FQVFVSRSBjYW4gZGVhbCB3aXRoIGNvbXBsZXggZXhwcmVzc2lvbnMgaW52b2x2aW5nIGNvbW1hcyIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJDQVBUVVJFIHBhcnNlcyBzdHJpbmcgYW5kIGNoYXJhY3RlciBjb25zdGFudHMiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQ2FwdHVyZSBhbmQgaW5mbyBtZXNzYWdlcy9DYXB0dXJlIHNob3VsZCBzdHJpbmdpZnkgbGlrZSBhc3NlcnRpb25zIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkNhcHR1cmUgYW5kIGluZm8gbWVzc2FnZXMvSW5mbyBzaG91bGQgTk9UIHN0cmluZ2lmeSB0aGUgd2F5IGFzc2VydGlvbnMgZG8iIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQ2hhcmFjdGVyIHByZXR0eSBwcmludGluZy9TcGVjaWZpY2FsbHkgZXNjYXBlZCIgdGltZT0ie2R1cmF0aW9ufSIvPgpAQCAtMzUxLDIzMCArMTk2LDEyMSBAQAogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJDaGFyYWN0ZXIgcHJldHR5IHByaW50aW5nL0xvdyBBU0NJSSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJDb21tYXMgaW4gdmFyaW91cyBtYWNyb3MgYXJlIGFsbG93ZWQiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQ29tcGFyaW5nIGZ1bmN0aW9uIHBvaW50ZXJzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkNvbXBhcmlzb24gb3BzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkNvbXBhcmlzb24gd2l0aCBleHBsaWNpdGx5IGNvbnZlcnRpYmxlIHR5cGVzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkNvbXBhcmlzb25zIGJldHdlZW4gaW50cyB3aGVyZSBvbmUgc2lkZSBpcyBjb21wdXRlZCIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJDb21wYXJpc29ucyBiZXR3ZWVuIHVuc2lnbmVkIGludHMgYW5kIG5lZ2F0aXZlIHNpZ25lZCBpbnRzIG1hdGNoIGMrKyBzdGFuZGFyZCBiZWhhdmlvdXIiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQ29tcGFyaXNvbnMgd2l0aCBpbnQgbGl0ZXJhbHMgZG9uJ3Qgd2FybiB3aGVuIG1peGluZyBzaWduZWQvIHVuc2lnbmVkIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkNvbXBvc2VkIG1hdGNoZXJzIGFyZSBkaXN0aW5jdCIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJDb250YWlucyBzdHJpbmcgbWF0Y2hlciIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJ0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgQ29udGFpbnMoJnF1b3Q7bm90IHRoZXJlJnF1b3Q7LCBDYXRjaDo6Q2FzZVNlbnNpdGl2ZTo6Tm8pIiB0eXBlPSJDSEVDS19USEFUIj4KLUZBSUxFRDoKLSAgQ0hFQ0tfVEhBVCggdGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIENvbnRhaW5zKCJub3QgdGhlcmUiLCBDYXRjaDo6Q2FzZVNlbnNpdGl2ZTo6Tm8pICkKLXdpdGggZXhwYW5zaW9uOgotICAidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIGNvbnRhaW5zOiAibm90IHRoZXJlIiAoY2FzZQotICBpbnNlbnNpdGl2ZSkKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IiZxdW90O3RoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nJnF1b3Q7IGNvbnRhaW5zOiAmcXVvdDtub3QgdGhlcmUmcXVvdDsgKGNhc2UgaW5zZW5zaXRpdmUpIiB0eXBlPSJDSEVDS19USEFUIj4KIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJ0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgQ29udGFpbnMoJnF1b3Q7U1RSSU5HJnF1b3Q7KSIgdHlwZT0iQ0hFQ0tfVEhBVCI+Ci1GQUlMRUQ6Ci0gIENIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBDb250YWlucygiU1RSSU5HIikgKQotd2l0aCBleHBhbnNpb246Ci0gICJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgY29udGFpbnM6ICJTVFJJTkciCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSImcXVvdDt0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyZxdW90OyBjb250YWluczogJnF1b3Q7U1RSSU5HJnF1b3Q7IiB0eXBlPSJDSEVDS19USEFUIj4KIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQ29weSBhbmQgdGhlbiBnZW5lcmF0ZSBhIHJhbmdlL2Zyb20gdmFyIGFuZCBpdGVyYXRvcnMiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQ29weSBhbmQgdGhlbiBnZW5lcmF0ZSBhIHJhbmdlL0Zyb20gYSB0ZW1wb3JhcnkgY29udGFpbmVyIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkNvcHkgYW5kIHRoZW4gZ2VuZXJhdGUgYSByYW5nZS9GaW5hbCB2YWxpZGF0aW9uIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkN1c3RvbSBleGNlcHRpb25zIGNhbiBiZSB0cmFuc2xhdGVkIHdoZW4gdGVzdGluZyBmb3Igbm90aHJvdyIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZXJyb3IgbWVzc2FnZT0idGhyb3dDdXN0b20oKSIgdHlwZT0iUkVRVUlSRV9OT1RIUk9XIj4KLUZBSUxFRDoKLSAgUkVRVUlSRV9OT1RIUk9XKCB0aHJvd0N1c3RvbSgpICkKIGN1c3RvbSBleGNlcHRpb24gLSBub3Qgc3RkCiBFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZXJyb3I+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQ3VzdG9tIGV4Y2VwdGlvbnMgY2FuIGJlIHRyYW5zbGF0ZWQgd2hlbiB0ZXN0aW5nIGZvciB0aHJvd2luZyBhcyBzb21ldGhpbmcgZWxzZSIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZXJyb3IgbWVzc2FnZT0idGhyb3dDdXN0b20oKSwgc3RkOjpleGNlcHRpb24iIHR5cGU9IlJFUVVJUkVfVEhST1dTX0FTIj4KLUZBSUxFRDoKLSAgUkVRVUlSRV9USFJPV1NfQVMoIHRocm93Q3VzdG9tKCksIHN0ZDo6ZXhjZXB0aW9uICkKIGN1c3RvbSBleGNlcHRpb24gLSBub3Qgc3RkCiBFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZXJyb3I+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQ3VzdG9tIHN0ZC1leGNlcHRpb25zIGNhbiBiZSBjdXN0b20gdHJhbnNsYXRlZCIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZXJyb3IgdHlwZT0iVEVTVF9DQVNFIj4KLUZBSUxFRDoKIGN1c3RvbSBzdGQgZXhjZXB0aW9uCiBFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZXJyb3I+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iRGVmYXVsdCBzY2FsZSBpcyBpbnZpc2libGUgdG8gY29tcGFyaXNvbiIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJEaXJlY3RseSBjcmVhdGluZyBhbiBFbnVtSW5mbyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJFbmRzV2l0aCBzdHJpbmcgbWF0Y2hlciIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJ0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgRW5kc1dpdGgoJnF1b3Q7U3Vic3RyaW5nJnF1b3Q7KSIgdHlwZT0iQ0hFQ0tfVEhBVCI+Ci1GQUlMRUQ6Ci0gIENIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBFbmRzV2l0aCgiU3Vic3RyaW5nIikgKQotd2l0aCBleHBhbnNpb246Ci0gICJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgZW5kcyB3aXRoOiAiU3Vic3RyaW5nIgorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iJnF1b3Q7dGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmcmcXVvdDsgZW5kcyB3aXRoOiAmcXVvdDtTdWJzdHJpbmcmcXVvdDsiIHR5cGU9IkNIRUNLX1RIQVQiPgogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9InRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBFbmRzV2l0aCgmcXVvdDt0aGlzJnF1b3Q7LCBDYXRjaDo6Q2FzZVNlbnNpdGl2ZTo6Tm8pIiB0eXBlPSJDSEVDS19USEFUIj4KLUZBSUxFRDoKLSAgQ0hFQ0tfVEhBVCggdGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIEVuZHNXaXRoKCJ0aGlzIiwgQ2F0Y2g6OkNhc2VTZW5zaXRpdmU6Ok5vKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nIiBlbmRzIHdpdGg6ICJ0aGlzIiAoY2FzZQotICBpbnNlbnNpdGl2ZSkKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IiZxdW90O3RoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nJnF1b3Q7IGVuZHMgd2l0aDogJnF1b3Q7dGhpcyZxdW90OyAoY2FzZSBpbnNlbnNpdGl2ZSkiIHR5cGU9IkNIRUNLX1RIQVQiPgogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KICAgICA8L3Rlc3RjYXNlPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJFbnVtcyBjYW4gcXVpY2tseSBoYXZlIHN0cmluZ2lmaWNhdGlvbiBlbmFibGVkIHVzaW5nIFJFR0lTVEVSX0VOVU0iIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iRW51bXMgaW4gbmFtZXNwYWNlcyBjYW4gcXVpY2tseSBoYXZlIHN0cmluZ2lmaWNhdGlvbiBlbmFibGVkIHVzaW5nIFJFR0lTVEVSX0VOVU0iIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iRXBzaWxvbiBvbmx5IGFwcGxpZXMgdG8gQXBwcm94J3MgdmFsdWUiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iRXF1YWxpdHkgY2hlY2tzIHRoYXQgc2hvdWxkIGZhaWwiIHRpbWU9IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZGF0YS5pbnRfc2V2ZW4gPT0gNiIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggZGF0YS5pbnRfc2V2ZW4gPT0gNiApCi13aXRoIGV4cGFuc2lvbjoKLSAgNyA9PSA2CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSI3ID09IDYiIHR5cGU9IkNIRUNLIj4KIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZGF0YS5pbnRfc2V2ZW4gPT0gOCIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggZGF0YS5pbnRfc2V2ZW4gPT0gOCApCi13aXRoIGV4cGFuc2lvbjoKLSAgNyA9PSA4CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSI3ID09IDgiIHR5cGU9IkNIRUNLIj4KIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZGF0YS5pbnRfc2V2ZW4gPT0gMCIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggZGF0YS5pbnRfc2V2ZW4gPT0gMCApCi13aXRoIGV4cGFuc2lvbjoKLSAgNyA9PSAwCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSI3ID09IDAiIHR5cGU9IkNIRUNLIj4KIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZGF0YS5mbG9hdF9uaW5lX3BvaW50X29uZSA9PSBBcHByb3goIDkuMTFmICkiIHR5cGU9IkNIRUNLIj4KLUZBSUxFRDoKLSAgQ0hFQ0soIGRhdGEuZmxvYXRfbmluZV9wb2ludF9vbmUgPT0gQXBwcm94KCA5LjExZiApICkKLXdpdGggZXhwYW5zaW9uOgotICA5LjFmID09IEFwcHJveCggOS4xMDk5OTk2NTY3ICkKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjkuMWYgPT0gQXBwcm94KCA5LjEwOTk5OTY1NjcgKSIgdHlwZT0iQ0hFQ0siPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lID09IEFwcHJveCggOS4wZiApIiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCBkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lID09IEFwcHJveCggOS4wZiApICkKLXdpdGggZXhwYW5zaW9uOgotICA5LjFmID09IEFwcHJveCggOS4wICkKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjkuMWYgPT0gQXBwcm94KCA5LjAgKSIgdHlwZT0iQ0hFQ0siPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lID09IEFwcHJveCggMSApIiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCBkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lID09IEFwcHJveCggMSApICkKLXdpdGggZXhwYW5zaW9uOgotICA5LjFmID09IEFwcHJveCggMS4wICkKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjkuMWYgPT0gQXBwcm94KCAxLjAgKSIgdHlwZT0iQ0hFQ0siPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lID09IEFwcHJveCggMCApIiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCBkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lID09IEFwcHJveCggMCApICkKLXdpdGggZXhwYW5zaW9uOgotICA5LjFmID09IEFwcHJveCggMC4wICkKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjkuMWYgPT0gQXBwcm94KCAwLjAgKSIgdHlwZT0iQ0hFQ0siPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJkYXRhLmRvdWJsZV9waSA9PSBBcHByb3goIDMuMTQxNSApIiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCBkYXRhLmRvdWJsZV9waSA9PSBBcHByb3goIDMuMTQxNSApICkKLXdpdGggZXhwYW5zaW9uOgotICAzLjE0MTU5MjY1MzUgPT0gQXBwcm94KCAzLjE0MTUgKQorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iMy4xNDE1OTI2NTM1ID09IEFwcHJveCggMy4xNDE1ICkiIHR5cGU9IkNIRUNLIj4KIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZGF0YS5zdHJfaGVsbG8gPT0gJnF1b3Q7Z29vZGJ5ZSZxdW90OyIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggZGF0YS5zdHJfaGVsbG8gPT0gImdvb2RieWUiICkKLXdpdGggZXhwYW5zaW9uOgotICAiaGVsbG8iID09ICJnb29kYnllIgorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iJnF1b3Q7aGVsbG8mcXVvdDsgPT0gJnF1b3Q7Z29vZGJ5ZSZxdW90OyIgdHlwZT0iQ0hFQ0siPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJkYXRhLnN0cl9oZWxsbyA9PSAmcXVvdDtoZWxsJnF1b3Q7IiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCBkYXRhLnN0cl9oZWxsbyA9PSAiaGVsbCIgKQotd2l0aCBleHBhbnNpb246Ci0gICJoZWxsbyIgPT0gImhlbGwiCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSImcXVvdDtoZWxsbyZxdW90OyA9PSAmcXVvdDtoZWxsJnF1b3Q7IiB0eXBlPSJDSEVDSyI+CiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImRhdGEuc3RyX2hlbGxvID09ICZxdW90O2hlbGxvMSZxdW90OyIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggZGF0YS5zdHJfaGVsbG8gPT0gImhlbGxvMSIgKQotd2l0aCBleHBhbnNpb246Ci0gICJoZWxsbyIgPT0gImhlbGxvMSIKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IiZxdW90O2hlbGxvJnF1b3Q7ID09ICZxdW90O2hlbGxvMSZxdW90OyIgdHlwZT0iQ0hFQ0siPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJkYXRhLnN0cl9oZWxsby5zaXplKCkgPT0gNiIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggZGF0YS5zdHJfaGVsbG8uc2l6ZSgpID09IDYgKQotd2l0aCBleHBhbnNpb246Ci0gIDUgPT0gNgorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iNSA9PSA2IiB0eXBlPSJDSEVDSyI+CiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9InggPT0gQXBwcm94KCAxLjMwMSApIiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCB4ID09IEFwcHJveCggMS4zMDEgKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMS4zID09IEFwcHJveCggMS4zMDEgKQorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iMS4zID09IEFwcHJveCggMS4zMDEgKSIgdHlwZT0iQ0hFQ0siPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iRXF1YWxpdHkgY2hlY2tzIHRoYXQgc2hvdWxkIHN1Y2NlZWQiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iRXF1YWxzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkVxdWFscyBzdHJpbmcgbWF0Y2hlciIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJ0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgRXF1YWxzKCZxdW90O3RoaXMgc3RyaW5nIGNvbnRhaW5zICdBQkMnIGFzIGEgc3Vic3RyaW5nJnF1b3Q7KSIgdHlwZT0iQ0hFQ0tfVEhBVCI+Ci1GQUlMRUQ6Ci0gIENIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBFcXVhbHMoInRoaXMgc3RyaW5nIGNvbnRhaW5zICdBQkMnIGFzIGEgc3Vic3RyaW5nIikgKQotd2l0aCBleHBhbnNpb246Ci0gICJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgZXF1YWxzOiAidGhpcyBzdHJpbmcgY29udGFpbnMKLSAgJ0FCQycgYXMgYSBzdWJzdHJpbmciCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSImcXVvdDt0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyZxdW90OyBlcXVhbHM6ICZxdW90O3RoaXMgc3RyaW5nIGNvbnRhaW5zICdBQkMnIGFzIGEgc3Vic3RyaW5nJnF1b3Q7IiB0eXBlPSJDSEVDS19USEFUIj4KIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJ0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgRXF1YWxzKCZxdW90O3NvbWV0aGluZyBlbHNlJnF1b3Q7LCBDYXRjaDo6Q2FzZVNlbnNpdGl2ZTo6Tm8pIiB0eXBlPSJDSEVDS19USEFUIj4KLUZBSUxFRDoKLSAgQ0hFQ0tfVEhBVCggdGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIEVxdWFscygic29tZXRoaW5nIGVsc2UiLCBDYXRjaDo6Q2FzZVNlbnNpdGl2ZTo6Tm8pICkKLXdpdGggZXhwYW5zaW9uOgotICAidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIGVxdWFsczogInNvbWV0aGluZyBlbHNlIiAoY2FzZQotICBpbnNlbnNpdGl2ZSkKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IiZxdW90O3RoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nJnF1b3Q7IGVxdWFsczogJnF1b3Q7c29tZXRoaW5nIGVsc2UmcXVvdDsgKGNhc2UgaW5zZW5zaXRpdmUpIiB0eXBlPSJDSEVDS19USEFUIj4KIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iRXhjZXB0aW9uIGFzIGEgdmFsdWUgKGUuZy4gaW4gUkVRVUlSRV9USFJPV1NfTUFUQ0hFUykgY2FuIGJlIHN0cmluZ2lmaWVkIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkV4Y2VwdGlvbiBtYXRjaGVycyB0aGF0IGZhaWwvTm8gZXhjZXB0aW9uIiB0aW1lPSJ7ZHVyYXRpb259Ij4KICAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImRvZXNOb3RUaHJvdygpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9IiB0eXBlPSJDSEVDS19USFJPV1NfTUFUQ0hFUyI+Ci1GQUlMRUQ6Ci0gIENIRUNLX1RIUk9XU19NQVRDSEVTKCBkb2VzTm90VGhyb3coKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSApCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZG9lc05vdFRocm93KCksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0iIHR5cGU9IlJFUVVJUkVfVEhST1dTX01BVENIRVMiPgotRkFJTEVEOgotICBSRVFVSVJFX1RIUk9XU19NQVRDSEVTKCBkb2VzTm90VGhyb3coKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSApCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkV4Y2VwdGlvbiBtYXRjaGVycyB0aGF0IGZhaWwvVHlwZSBtaXNtYXRjaCIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZXJyb3IgbWVzc2FnZT0idGhyb3dzQXNJbnQoMSksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0iIHR5cGU9IkNIRUNLX1RIUk9XU19NQVRDSEVTIj4KLUZBSUxFRDoKLSAgQ0hFQ0tfVEhST1dTX01BVENIRVMoIHRocm93c0FzSW50KDEpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9ICkKIFVua25vd24gZXhjZXB0aW9uCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9lcnJvcj4KICAgICAgIDxlcnJvciBtZXNzYWdlPSJ0aHJvd3NBc0ludCgxKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSIgdHlwZT0iUkVRVUlSRV9USFJPV1NfTUFUQ0hFUyI+Ci1GQUlMRUQ6Ci0gIFJFUVVJUkVfVEhST1dTX01BVENIRVMoIHRocm93c0FzSW50KDEpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9ICkKIFVua25vd24gZXhjZXB0aW9uCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9lcnJvcj4KICAgICA8L3Rlc3RjYXNlPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJFeGNlcHRpb24gbWF0Y2hlcnMgdGhhdCBmYWlsL0NvbnRlbnRzIGFyZSB3cm9uZyIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJ0aHJvd3NTcGVjaWFsRXhjZXB0aW9uKDMpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9IiB0eXBlPSJDSEVDS19USFJPV1NfTUFUQ0hFUyI+Ci1GQUlMRUQ6Ci0gIENIRUNLX1RIUk9XU19NQVRDSEVTKCB0aHJvd3NTcGVjaWFsRXhjZXB0aW9uKDMpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9ICkKLXdpdGggZXhwYW5zaW9uOgotICBTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAxCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAxIiB0eXBlPSJDSEVDS19USFJPV1NfTUFUQ0hFUyI+CiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0idGhyb3dzU3BlY2lhbEV4Y2VwdGlvbig0KSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSIgdHlwZT0iUkVRVUlSRV9USFJPV1NfTUFUQ0hFUyI+Ci1GQUlMRUQ6Ci0gIFJFUVVJUkVfVEhST1dTX01BVENIRVMoIHRocm93c1NwZWNpYWxFeGNlcHRpb24oNCksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0gKQotd2l0aCBleHBhbnNpb246Ci0gIFNwZWNpYWxFeGNlcHRpb246OndoYXQgc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IlNwZWNpYWxFeGNlcHRpb246OndoYXQgc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEiIHR5cGU9IlJFUVVJUkVfVEhST1dTX01BVENIRVMiPgogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KICAgICA8L3Rlc3RjYXNlPgpAQCAtNTgyLDU1ICszMTgsNDEgQEAKICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iRXhjZXB0aW9uIG1lc3NhZ2VzIGNhbiBiZSB0ZXN0ZWQgZm9yL2V4YWN0IG1hdGNoIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkV4Y2VwdGlvbiBtZXNzYWdlcyBjYW4gYmUgdGVzdGVkIGZvci9kaWZmZXJlbnQgY2FzZSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJFeGNlcHRpb24gbWVzc2FnZXMgY2FuIGJlIHRlc3RlZCBmb3Ivd2lsZGNhcmRlZCIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJFeGNlcHRpb25zIG1hdGNoZXJzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkV4cGVjdGVkIGV4Y2VwdGlvbnMgdGhhdCBkb24ndCB0aHJvdyBvciB1bmV4cGVjdGVkIGV4Y2VwdGlvbnMgZmFpbCB0aGUgdGVzdCIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZXJyb3IgbWVzc2FnZT0idGhpc1Rocm93cygpLCBzdGQ6OnN0cmluZyIgdHlwZT0iQ0hFQ0tfVEhST1dTX0FTIj4KLUZBSUxFRDoKLSAgQ0hFQ0tfVEhST1dTX0FTKCB0aGlzVGhyb3dzKCksIHN0ZDo6c3RyaW5nICkKIGV4cGVjdGVkIGV4Y2VwdGlvbgogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2Vycm9yPgogICAgICAgPGZhaWx1cmUgbWVzc2FnZT0idGhpc0RvZXNudFRocm93KCksIHN0ZDo6ZG9tYWluX2Vycm9yIiB0eXBlPSJDSEVDS19USFJPV1NfQVMiPgotRkFJTEVEOgotICBDSEVDS19USFJPV1NfQVMoIHRoaXNEb2VzbnRUaHJvdygpLCBzdGQ6OmRvbWFpbl9lcnJvciApCiBFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KICAgICAgIDxlcnJvciBtZXNzYWdlPSJ0aGlzVGhyb3dzKCkiIHR5cGU9IkNIRUNLX05PVEhST1ciPgotRkFJTEVEOgotICBDSEVDS19OT1RIUk9XKCB0aGlzVGhyb3dzKCkgKQogZXhwZWN0ZWQgZXhjZXB0aW9uCiBFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZXJyb3I+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iRkFJTCBhYm9ydHMgdGhlIHRlc3QiIHRpbWU9IntkdXJhdGlvbn0iPgogICAgICAgPGZhaWx1cmUgdHlwZT0iRkFJTCI+Ci1GQUlMRUQ6CiBUaGlzIGlzIGEgZmFpbHVyZQogTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkZBSUwgZG9lcyBub3QgcmVxdWlyZSBhbiBhcmd1bWVudCIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZmFpbHVyZSB0eXBlPSJGQUlMIj4KLUZBSUxFRDoKIE1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KICAgICA8L3Rlc3RjYXNlPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJGQUlMX0NIRUNLIGRvZXMgbm90IGFib3J0IHRoZSB0ZXN0IiB0aW1lPSJ7ZHVyYXRpb259Ij4KICAgICAgIDxmYWlsdXJlIHR5cGU9IkZBSUxfQ0hFQ0siPgotRkFJTEVEOgogVGhpcyBpcyBhIGZhaWx1cmUKIE1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KICAgICA8L3Rlc3RjYXNlPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJGYWN0b3JpYWxzIGFyZSBjb21wdXRlZCIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJGbG9hdGluZyBwb2ludCBtYXRjaGVyczogZG91YmxlL1JlbGF0aXZlIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkZsb2F0aW5nIHBvaW50IG1hdGNoZXJzOiBkb3VibGUvUmVsYXRpdmUvU29tZSBzdWJub3JtYWwgdmFsdWVzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkZsb2F0aW5nIHBvaW50IG1hdGNoZXJzOiBkb3VibGUvTWFyZ2luIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkZsb2F0aW5nIHBvaW50IG1hdGNoZXJzOiBkb3VibGUvVUxQcyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJGbG9hdGluZyBwb2ludCBtYXRjaGVyczogZG91YmxlL0NvbXBvc2VkIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkZsb2F0aW5nIHBvaW50IG1hdGNoZXJzOiBkb3VibGUvQ29uc3RydWN0b3IgdmFsaWRhdGlvbiIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJGbG9hdGluZyBwb2ludCBtYXRjaGVyczogZmxvYXQvUmVsYXRpdmUiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iRmxvYXRpbmcgcG9pbnQgbWF0Y2hlcnM6IGZsb2F0L1JlbGF0aXZlL1NvbWUgc3Vibm9ybWFsIHZhbHVlcyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJGbG9hdGluZyBwb2ludCBtYXRjaGVyczogZmxvYXQvTWFyZ2luIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkZsb2F0aW5nIHBvaW50IG1hdGNoZXJzOiBmbG9hdC9VTFBzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkZsb2F0aW5nIHBvaW50IG1hdGNoZXJzOiBmbG9hdC9Db21wb3NlZCIgdGltZT0ie2R1cmF0aW9ufSIvPgpAQCAtNjQ0LDcgKzM2Niw2IEBACiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkdlbmVyYXRvcnMgLS0gYWRhcHRlcnMvUmVwZWF0aW5nIGEgZ2VuZXJhdG9yIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkdlbmVyYXRvcnMgLS0gYWRhcHRlcnMvQ2h1bmtpbmcgYSBnZW5lcmF0b3IgaW50byBzaXplZCBwaWVjZXMvTnVtYmVyIG9mIGVsZW1lbnRzIGluIHNvdXJjZSBpcyBkaXZpc2libGUgYnkgY2h1bmsgc2l6ZSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJHZW5lcmF0b3JzIC0tIGFkYXB0ZXJzL0NodW5raW5nIGEgZ2VuZXJhdG9yIGludG8gc2l6ZWQgcGllY2VzL051bWJlciBvZiBlbGVtZW50cyBpbiBzb3VyY2UgaXMgbm90IGRpdmlzaWJsZSBieSBjaHVuayBzaXplIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkdlbmVyYXRvcnMgLS0gYWRhcHRlcnMvQ2h1bmtpbmcgYSBnZW5lcmF0b3IgaW50byBzaXplZCBwaWVjZXMvQ2h1bmsgc2l6ZSBvZiB6ZXJvIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkdlbmVyYXRvcnMgLS0gYWRhcHRlcnMvQ2h1bmtpbmcgYSBnZW5lcmF0b3IgaW50byBzaXplZCBwaWVjZXMvVGhyb3dzIG9uIHRvbyBzbWFsbCBnZW5lcmF0b3JzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkdlbmVyYXRvcnMgLS0gc2ltcGxlL29uZSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJHZW5lcmF0b3JzIC0tIHNpbXBsZS90d28iIHRpbWU9IntkdXJhdGlvbn0iLz4KQEAgLTY2NCw0MCArMzg1LDI1IEBACiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkdlbmVyYXRvcnMgaW50ZXJuYWxzL1JhbmdlL1Bvc2l0aXZlIG1hbnVhbCBzdGVwL0ludGVnZXIvRXhhY3QiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iR2VuZXJhdG9ycyBpbnRlcm5hbHMvUmFuZ2UvUG9zaXRpdmUgbWFudWFsIHN0ZXAvSW50ZWdlci9TbGlnaHRseSBvdmVyIGVuZCIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9SYW5nZS9Qb3NpdGl2ZSBtYW51YWwgc3RlcC9JbnRlZ2VyL1NsaWdodGx5IHVuZGVyIGVuZCIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9SYW5nZS9Qb3NpdGl2ZSBtYW51YWwgc3RlcC9GbG9hdGluZyBQb2ludC9FeGFjdCIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9SYW5nZS9Qb3NpdGl2ZSBtYW51YWwgc3RlcC9GbG9hdGluZyBQb2ludC9TbGlnaHRseSBvdmVyIGVuZCIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9SYW5nZS9Qb3NpdGl2ZSBtYW51YWwgc3RlcC9GbG9hdGluZyBQb2ludC9TbGlnaHRseSB1bmRlciBlbmQiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iR2VuZXJhdG9ycyBpbnRlcm5hbHMvUmFuZ2UvTmVnYXRpdmUgbWFudWFsIHN0ZXAvSW50ZWdlci9FeGFjdCIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9SYW5nZS9OZWdhdGl2ZSBtYW51YWwgc3RlcC9JbnRlZ2VyL1NsaWdodGx5IG92ZXIgZW5kIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkdlbmVyYXRvcnMgaW50ZXJuYWxzL1JhbmdlL05lZ2F0aXZlIG1hbnVhbCBzdGVwL0ludGVnZXIvU2xpZ2h0bHkgdW5kZXIgZW5kIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkdyZWF0ZXItdGhhbiBpbmVxdWFsaXRpZXMgd2l0aCBkaWZmZXJlbnQgZXBzaWxvbnMiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iSU5GTyBhbmQgV0FSTiBkbyBub3QgYWJvcnQgdGVzdHMiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iSU5GTyBnZXRzIGxvZ2dlZCBvbiBmYWlsdXJlIiB0aW1lPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImEgPT0gMSIgdHlwZT0iUkVRVUlSRSI+Ci1GQUlMRUQ6Ci0gIFJFUVVJUkUoIGEgPT0gMSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMiA9PSAxCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSIyID09IDEiIHR5cGU9IlJFUVVJUkUiPgogdGhpcyBtZXNzYWdlIHNob3VsZCBiZSBsb2dnZWQKIHNvIHNob3VsZCB0aGlzCiBNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iSU5GTyBnZXRzIGxvZ2dlZCBvbiBmYWlsdXJlLCBldmVuIGlmIGNhcHR1cmVkIGJlZm9yZSBzdWNjZXNzZnVsIGFzc2VydGlvbnMiIHRpbWU9IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iYSA9PSAxIiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCBhID09IDEgKQotd2l0aCBleHBhbnNpb246Ci0gIDIgPT0gMQorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iMiA9PSAxIiB0eXBlPSJDSEVDSyI+CiB0aGlzIG1lc3NhZ2UgbWF5IGJlIGxvZ2dlZCBsYXRlcgogdGhpcyBtZXNzYWdlIHNob3VsZCBiZSBsb2dnZWQKIE1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImEgPT0gMCIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggYSA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotICAyID09IDAKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjIgPT0gMCIgdHlwZT0iQ0hFQ0siPgogdGhpcyBtZXNzYWdlIG1heSBiZSBsb2dnZWQgbGF0ZXIKIHRoaXMgbWVzc2FnZSBzaG91bGQgYmUgbG9nZ2VkCiBhbmQgdGhpcywgYnV0IGxhdGVyCkBAIC03MDUsNTAgKzQxMSwyNiBAQAogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IklORk8gaXMgcmVzZXQgZm9yIGVhY2ggbG9vcCIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJpICZsdDsgMTAiIHR5cGU9IlJFUVVJUkUiPgotRkFJTEVEOgotICBSRVFVSVJFKCBpICZsdDsgMTAgKQotd2l0aCBleHBhbnNpb246Ci0gIDEwICZsdDsgMTAKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjEwICZsdDsgMTAiIHR5cGU9IlJFUVVJUkUiPgogY3VycmVudCBjb3VudGVyIDEwCiBpIDo9IDEwCiBNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iSW5lcXVhbGl0eSBjaGVja3MgdGhhdCBzaG91bGQgZmFpbCIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJkYXRhLmludF9zZXZlbiAhPSA3IiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCBkYXRhLmludF9zZXZlbiAhPSA3ICkKLXdpdGggZXhwYW5zaW9uOgotICA3ICE9IDcKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjcgIT0gNyIgdHlwZT0iQ0hFQ0siPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lICE9IEFwcHJveCggOS4xZiApIiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCBkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lICE9IEFwcHJveCggOS4xZiApICkKLXdpdGggZXhwYW5zaW9uOgotICA5LjFmICE9IEFwcHJveCggOS4xMDAwMDAzODE1ICkKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjkuMWYgIT0gQXBwcm94KCA5LjEwMDAwMDM4MTUgKSIgdHlwZT0iQ0hFQ0siPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJkYXRhLmRvdWJsZV9waSAhPSBBcHByb3goIDMuMTQxNTkyNjUzNSApIiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCBkYXRhLmRvdWJsZV9waSAhPSBBcHByb3goIDMuMTQxNTkyNjUzNSApICkKLXdpdGggZXhwYW5zaW9uOgotICAzLjE0MTU5MjY1MzUgIT0gQXBwcm94KCAzLjE0MTU5MjY1MzUgKQorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iMy4xNDE1OTI2NTM1ICE9IEFwcHJveCggMy4xNDE1OTI2NTM1ICkiIHR5cGU9IkNIRUNLIj4KIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZGF0YS5zdHJfaGVsbG8gIT0gJnF1b3Q7aGVsbG8mcXVvdDsiIHR5cGU9IkNIRUNLIj4KLUZBSUxFRDoKLSAgQ0hFQ0soIGRhdGEuc3RyX2hlbGxvICE9ICJoZWxsbyIgKQotd2l0aCBleHBhbnNpb246Ci0gICJoZWxsbyIgIT0gImhlbGxvIgorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iJnF1b3Q7aGVsbG8mcXVvdDsgIT0gJnF1b3Q7aGVsbG8mcXVvdDsiIHR5cGU9IkNIRUNLIj4KIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZGF0YS5zdHJfaGVsbG8uc2l6ZSgpICE9IDUiIHR5cGU9IkNIRUNLIj4KLUZBSUxFRDoKLSAgQ0hFQ0soIGRhdGEuc3RyX2hlbGxvLnNpemUoKSAhPSA1ICkKLXdpdGggZXhwYW5zaW9uOgotICA1ICE9IDUKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjUgIT0gNSIgdHlwZT0iQ0hFQ0siPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KQEAgLTc1OSwzMSArNDQxLDE4IEBACiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Ik1hdGNoZXJzIGNhbiBiZSAoQW55T2YpIGNvbXBvc2VkIHdpdGggdGhlIHx8IG9wZXJhdG9yIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Ik1hdGNoZXJzIGNhbiBiZSBjb21wb3NlZCB3aXRoIGJvdGggJmFtcDsmYW1wOyBhbmQgfHwiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iTWF0Y2hlcnMgY2FuIGJlIGNvbXBvc2VkIHdpdGggYm90aCAmYW1wOyZhbXA7IGFuZCB8fCAtIGZhaWxpbmciIHRpbWU9IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0idGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIChDb250YWlucygmcXVvdDtzdHJpbmcmcXVvdDspIHx8IENvbnRhaW5zKCZxdW90O2RpZmZlcmVudCZxdW90OykpICZhbXA7JmFtcDsgQ29udGFpbnMoJnF1b3Q7cmFuZG9tJnF1b3Q7KSIgdHlwZT0iQ0hFQ0tfVEhBVCI+Ci1GQUlMRUQ6Ci0gIENIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCAoQ29udGFpbnMoInN0cmluZyIpIHx8IENvbnRhaW5zKCJkaWZmZXJlbnQiKSkgJmFtcDsmYW1wOyBDb250YWlucygicmFuZG9tIikgKQotd2l0aCBleHBhbnNpb246Ci0gICJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgKCAoIGNvbnRhaW5zOiAic3RyaW5nIiBvcgotICBjb250YWluczogImRpZmZlcmVudCIgKSBhbmQgY29udGFpbnM6ICJyYW5kb20iICkKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IiZxdW90O3RoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nJnF1b3Q7ICggKCBjb250YWluczogJnF1b3Q7c3RyaW5nJnF1b3Q7IG9yIGNvbnRhaW5zOiAmcXVvdDtkaWZmZXJlbnQmcXVvdDsgKSBhbmQgY29udGFpbnM6ICZxdW90O3JhbmRvbSZxdW90OyApIiB0eXBlPSJDSEVDS19USEFUIj4KIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iTWF0Y2hlcnMgY2FuIGJlIG5lZ2F0ZWQgKE5vdCkgd2l0aCB0aGUgISBvcGVyYXRvciIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJNYXRjaGVycyBjYW4gYmUgbmVnYXRlZCAoTm90KSB3aXRoIHRoZSAhIG9wZXJhdG9yIC0gZmFpbGluZyIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJ0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgIUNvbnRhaW5zKCZxdW90O3N1YnN0cmluZyZxdW90OykiIHR5cGU9IkNIRUNLX1RIQVQiPgotRkFJTEVEOgotICBDSEVDS19USEFUKCB0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgIUNvbnRhaW5zKCJzdWJzdHJpbmciKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nIiBub3QgY29udGFpbnM6ICJzdWJzdHJpbmciCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSImcXVvdDt0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyZxdW90OyBub3QgY29udGFpbnM6ICZxdW90O3N1YnN0cmluZyZxdW90OyIgdHlwZT0iQ0hFQ0tfVEhBVCI+CiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Ik1pc21hdGNoaW5nIGV4Y2VwdGlvbiBtZXNzYWdlcyBmYWlsaW5nIHRoZSB0ZXN0IiB0aW1lPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9InRoaXNUaHJvd3MoKSwgJnF1b3Q7c2hvdWxkIGZhaWwmcXVvdDsiIHR5cGU9IlJFUVVJUkVfVEhST1dTX1dJVEgiPgotRkFJTEVEOgotICBSRVFVSVJFX1RIUk9XU19XSVRIKCB0aGlzVGhyb3dzKCksICJzaG91bGQgZmFpbCIgKQotd2l0aCBleHBhbnNpb246Ci0gICJleHBlY3RlZCBleGNlcHRpb24iIGVxdWFsczogInNob3VsZCBmYWlsIgorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iJnF1b3Q7ZXhwZWN0ZWQgZXhjZXB0aW9uJnF1b3Q7IGVxdWFsczogJnF1b3Q7c2hvdWxkIGZhaWwmcXVvdDsiIHR5cGU9IlJFUVVJUkVfVEhST1dTX1dJVEgiPgogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KQEAgLTc5MSw3ICs0NjAsNiBAQAogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJOaWNlIGRlc2NyaXB0aXZlIG5hbWUiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iTm9uLXN0ZCBleGNlcHRpb25zIGNhbiBiZSB0cmFuc2xhdGVkIiB0aW1lPSJ7ZHVyYXRpb259Ij4KICAgICAgIDxlcnJvciB0eXBlPSJURVNUX0NBU0UiPgotRkFJTEVEOgogY3VzdG9tIGV4Y2VwdGlvbgogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2Vycm9yPgpAQCAtNzk5LDE1MyArNDY3LDczIEBACiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Ik9iamVjdHMgdGhhdCBldmFsdWF0ZWQgaW4gYm9vbGVhbiBjb250ZXh0cyBjYW4gYmUgY2hlY2tlZCIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJPcHRpb25hbGx5IHN0YXRpYyBhc3NlcnRpb25zIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Ik9yZGVyaW5nIGNvbXBhcmlzb24gY2hlY2tzIHRoYXQgc2hvdWxkIGZhaWwiIHRpbWU9IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZGF0YS5pbnRfc2V2ZW4gPiA3IiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCBkYXRhLmludF9zZXZlbiA+IDcgKQotd2l0aCBleHBhbnNpb246Ci0gIDcgPiA3CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSI3ID4gNyIgdHlwZT0iQ0hFQ0siPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJkYXRhLmludF9zZXZlbiAmbHQ7IDciIHR5cGU9IkNIRUNLIj4KLUZBSUxFRDoKLSAgQ0hFQ0soIGRhdGEuaW50X3NldmVuICZsdDsgNyApCi13aXRoIGV4cGFuc2lvbjoKLSAgNyAmbHQ7IDcKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjcgJmx0OyA3IiB0eXBlPSJDSEVDSyI+CiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImRhdGEuaW50X3NldmVuID4gOCIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggZGF0YS5pbnRfc2V2ZW4gPiA4ICkKLXdpdGggZXhwYW5zaW9uOgotICA3ID4gOAorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iNyA+IDgiIHR5cGU9IkNIRUNLIj4KIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZGF0YS5pbnRfc2V2ZW4gJmx0OyA2IiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCBkYXRhLmludF9zZXZlbiAmbHQ7IDYgKQotd2l0aCBleHBhbnNpb246Ci0gIDcgJmx0OyA2CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSI3ICZsdDsgNiIgdHlwZT0iQ0hFQ0siPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJkYXRhLmludF9zZXZlbiAmbHQ7IDAiIHR5cGU9IkNIRUNLIj4KLUZBSUxFRDoKLSAgQ0hFQ0soIGRhdGEuaW50X3NldmVuICZsdDsgMCApCi13aXRoIGV4cGFuc2lvbjoKLSAgNyAmbHQ7IDAKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjcgJmx0OyAwIiB0eXBlPSJDSEVDSyI+CiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImRhdGEuaW50X3NldmVuICZsdDsgLTEiIHR5cGU9IkNIRUNLIj4KLUZBSUxFRDoKLSAgQ0hFQ0soIGRhdGEuaW50X3NldmVuICZsdDsgLTEgKQotd2l0aCBleHBhbnNpb246Ci0gIDcgJmx0OyAtMQorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iNyAmbHQ7IC0xIiB0eXBlPSJDSEVDSyI+CiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImRhdGEuaW50X3NldmVuID49IDgiIHR5cGU9IkNIRUNLIj4KLUZBSUxFRDoKLSAgQ0hFQ0soIGRhdGEuaW50X3NldmVuID49IDggKQotd2l0aCBleHBhbnNpb246Ci0gIDcgPj0gOAorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iNyA+PSA4IiB0eXBlPSJDSEVDSyI+CiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImRhdGEuaW50X3NldmVuICZsdDs9IDYiIHR5cGU9IkNIRUNLIj4KLUZBSUxFRDoKLSAgQ0hFQ0soIGRhdGEuaW50X3NldmVuICZsdDs9IDYgKQotd2l0aCBleHBhbnNpb246Ci0gIDcgJmx0Oz0gNgorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iNyAmbHQ7PSA2IiB0eXBlPSJDSEVDSyI+CiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImRhdGEuZmxvYXRfbmluZV9wb2ludF9vbmUgJmx0OyA5IiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCBkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lICZsdDsgOSApCi13aXRoIGV4cGFuc2lvbjoKLSAgOS4xZiAmbHQ7IDkKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjkuMWYgJmx0OyA5IiB0eXBlPSJDSEVDSyI+CiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImRhdGEuZmxvYXRfbmluZV9wb2ludF9vbmUgPiAxMCIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggZGF0YS5mbG9hdF9uaW5lX3BvaW50X29uZSA+IDEwICkKLXdpdGggZXhwYW5zaW9uOgotICA5LjFmID4gMTAKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjkuMWYgPiAxMCIgdHlwZT0iQ0hFQ0siPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lID4gOS4yIiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCBkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lID4gOS4yICkKLXdpdGggZXhwYW5zaW9uOgotICA5LjFmID4gOS4yCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSI5LjFmID4gOS4yIiB0eXBlPSJDSEVDSyI+CiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImRhdGEuc3RyX2hlbGxvID4gJnF1b3Q7aGVsbG8mcXVvdDsiIHR5cGU9IkNIRUNLIj4KLUZBSUxFRDoKLSAgQ0hFQ0soIGRhdGEuc3RyX2hlbGxvID4gImhlbGxvIiApCi13aXRoIGV4cGFuc2lvbjoKLSAgImhlbGxvIiA+ICJoZWxsbyIKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IiZxdW90O2hlbGxvJnF1b3Q7ID4gJnF1b3Q7aGVsbG8mcXVvdDsiIHR5cGU9IkNIRUNLIj4KIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZGF0YS5zdHJfaGVsbG8gJmx0OyAmcXVvdDtoZWxsbyZxdW90OyIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggZGF0YS5zdHJfaGVsbG8gJmx0OyAiaGVsbG8iICkKLXdpdGggZXhwYW5zaW9uOgotICAiaGVsbG8iICZsdDsgImhlbGxvIgorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iJnF1b3Q7aGVsbG8mcXVvdDsgJmx0OyAmcXVvdDtoZWxsbyZxdW90OyIgdHlwZT0iQ0hFQ0siPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJkYXRhLnN0cl9oZWxsbyA+ICZxdW90O2hlbGxwJnF1b3Q7IiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCBkYXRhLnN0cl9oZWxsbyA+ICJoZWxscCIgKQotd2l0aCBleHBhbnNpb246Ci0gICJoZWxsbyIgPiAiaGVsbHAiCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSImcXVvdDtoZWxsbyZxdW90OyA+ICZxdW90O2hlbGxwJnF1b3Q7IiB0eXBlPSJDSEVDSyI+CiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImRhdGEuc3RyX2hlbGxvID4gJnF1b3Q7eiZxdW90OyIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggZGF0YS5zdHJfaGVsbG8gPiAieiIgKQotd2l0aCBleHBhbnNpb246Ci0gICJoZWxsbyIgPiAieiIKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IiZxdW90O2hlbGxvJnF1b3Q7ID4gJnF1b3Q7eiZxdW90OyIgdHlwZT0iQ0hFQ0siPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJkYXRhLnN0cl9oZWxsbyAmbHQ7ICZxdW90O2hlbGxtJnF1b3Q7IiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCBkYXRhLnN0cl9oZWxsbyAmbHQ7ICJoZWxsbSIgKQotd2l0aCBleHBhbnNpb246Ci0gICJoZWxsbyIgJmx0OyAiaGVsbG0iCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSImcXVvdDtoZWxsbyZxdW90OyAmbHQ7ICZxdW90O2hlbGxtJnF1b3Q7IiB0eXBlPSJDSEVDSyI+CiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImRhdGEuc3RyX2hlbGxvICZsdDsgJnF1b3Q7YSZxdW90OyIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggZGF0YS5zdHJfaGVsbG8gJmx0OyAiYSIgKQotd2l0aCBleHBhbnNpb246Ci0gICJoZWxsbyIgJmx0OyAiYSIKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IiZxdW90O2hlbGxvJnF1b3Q7ICZsdDsgJnF1b3Q7YSZxdW90OyIgdHlwZT0iQ0hFQ0siPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJkYXRhLnN0cl9oZWxsbyA+PSAmcXVvdDt6JnF1b3Q7IiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCBkYXRhLnN0cl9oZWxsbyA+PSAieiIgKQotd2l0aCBleHBhbnNpb246Ci0gICJoZWxsbyIgPj0gInoiCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSImcXVvdDtoZWxsbyZxdW90OyA+PSAmcXVvdDt6JnF1b3Q7IiB0eXBlPSJDSEVDSyI+CiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImRhdGEuc3RyX2hlbGxvICZsdDs9ICZxdW90O2EmcXVvdDsiIHR5cGU9IkNIRUNLIj4KLUZBSUxFRDoKLSAgQ0hFQ0soIGRhdGEuc3RyX2hlbGxvICZsdDs9ICJhIiApCi13aXRoIGV4cGFuc2lvbjoKLSAgImhlbGxvIiAmbHQ7PSAiYSIKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IiZxdW90O2hlbGxvJnF1b3Q7ICZsdDs9ICZxdW90O2EmcXVvdDsiIHR5cGU9IkNIRUNLIj4KIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Ik9yZGVyaW5nIGNvbXBhcmlzb24gY2hlY2tzIHRoYXQgc2hvdWxkIHN1Y2NlZWQiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iT3VyIFBDRyBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBleHBlY3RlZCByZXN1bHRzIGZvciBrbm93biBzZWVkcy9EZWZhdWx0IHNlZWRlZCIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJPdXIgUENHIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGV4cGVjdGVkIHJlc3VsdHMgZm9yIGtub3duIHNlZWRzL1NwZWNpZmljIHNlZWQiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iT3V0cHV0IGZyb20gYWxsIHNlY3Rpb25zIGlzIHJlcG9ydGVkL29uZSIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZmFpbHVyZSB0eXBlPSJGQUlMIj4KLUZBSUxFRDoKIE1lc3NhZ2UgZnJvbSBzZWN0aW9uIG9uZQogTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Ik91dHB1dCBmcm9tIGFsbCBzZWN0aW9ucyBpcyByZXBvcnRlZC90d28iIHRpbWU9IntkdXJhdGlvbn0iPgogICAgICAgPGZhaWx1cmUgdHlwZT0iRkFJTCI+Ci1GQUlMRUQ6CiBNZXNzYWdlIGZyb20gc2VjdGlvbiB0d28KIE1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KQEAgLTk4MSwxMyArNTY5LDcgQEAKICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncy9lbXB0eSB0YWciIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncy9lbXB0eSBxdW90ZWQgbmFtZSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQYXJzZSB0ZXN0IG5hbWVzIGFuZCB0YWdzL3F1b3RlZCBzdHJpbmcgZm9sbG93ZWQgYnkgdGFnIGV4Y2x1c2lvbiIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQYXJzZSB0ZXN0IG5hbWVzIGFuZCB0YWdzL0xlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBpbiB0ZXN0IHNwZWMiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncy9MZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgaW4gdGVzdCBuYW1lIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MvU2hvcnRlbmVkIGhpZGUgdGFncyBhcmUgc3BsaXQgYXBhcnQgd2hlbiBwYXJzaW5nIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MvU2hvcnRlbmVkIGhpZGUgdGFncyBhbHNvIHByb3Blcmx5IGhhbmRsZSBleGNsdXNpb24iIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUG9pbnRlcnMgY2FuIGJlIGNvbXBhcmVkIHRvIG51bGwiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUHJlY2lzaW9uIG9mIGZsb2F0aW5nIHBvaW50IHN0cmluZ2lmaWNhdGlvbiBjYW4gYmUgc2V0L0Zsb2F0cyIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcmVjaXNpb24gb2YgZmxvYXRpbmcgcG9pbnQgc3RyaW5naWZpY2F0aW9uIGNhbiBiZSBzZXQvRG91YmxlIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlByZWRpY2F0ZSBtYXRjaGVyIGNhbiBhY2NlcHQgY29uc3QgY2hhcioiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUvZW1wdHkgYXJncyBkb24ndCBjYXVzZSBhIGNyYXNoIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL2RlZmF1bHQgLSBubyBhcmd1bWVudHMiIHRpbWU9IntkdXJhdGlvbn0iLz4KQEAgLTEwMDQsOCArNTg2LDYgQEAKICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUvYWJvcnQvLWEgYWJvcnRzIGFmdGVyIGZpcnN0IGZhaWx1cmUiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUvYWJvcnQvLXggMiBhYm9ydHMgYWZ0ZXIgdHdvIGZhaWx1cmVzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL2Fib3J0Ly14IG11c3QgYmUgbnVtZXJpYyIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9hYm9ydC93YWl0LWZvci1rZXlwcmVzcy9BY2NlcHRlZCBvcHRpb25zIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL2Fib3J0L3dhaXQtZm9yLWtleXByZXNzL2ludmFsaWQgb3B0aW9ucyBhcmUgcmVwb3J0ZWQiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUvbm90aHJvdy8tZSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9ub3Rocm93Ly0tbm90aHJvdyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9vdXRwdXQgZmlsZW5hbWUvLW8gZmlsZW5hbWUiIHRpbWU9IntkdXJhdGlvbn0iLz4KQEAgLTEwMTYsNDYgKzU5NiwyMiBAQAogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS91c2UtY29sb3VyL3llcyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS91c2UtY29sb3VyL25vIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL3VzZS1jb2xvdXIvZXJyb3IiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUvQmVuY2htYXJrIG9wdGlvbnMvc2FtcGxlcyIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9CZW5jaG1hcmsgb3B0aW9ucy9yZXNhbXBsZXMiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUvQmVuY2htYXJrIG9wdGlvbnMvY29uZmlkZW5jZS1pbnRlcnZhbCIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9CZW5jaG1hcmsgb3B0aW9ucy9uby1hbmFseXNpcyIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9CZW5jaG1hcmsgb3B0aW9ucy93YXJtdXAtdGltZSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9kdWN0IHdpdGggZGlmZmVyaW5nIGFyaXRpZXMgLSBzdGQ6OnR1cGxlJmx0O2ludCwgZG91YmxlLCBmbG9hdD4iIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUHJvZHVjdCB3aXRoIGRpZmZlcmluZyBhcml0aWVzIC0gc3RkOjp0dXBsZSZsdDtpbnQsIGRvdWJsZT4iIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUHJvZHVjdCB3aXRoIGRpZmZlcmluZyBhcml0aWVzIC0gc3RkOjp0dXBsZSZsdDtpbnQ+IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlJlY29uc3RydWN0aW9uIHNob3VsZCBiZSBiYXNlZCBvbiBzdHJpbmdpZmljYXRpb246ICM5MTQiIHRpbWU9IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0idHJ1dGh5KGZhbHNlKSIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggdHJ1dGh5KGZhbHNlKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgSGV5LCBpdHMgdHJ1dGh5IQorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iSGV5LCBpdHMgdHJ1dGh5ISIgdHlwZT0iQ0hFQ0siPgogRGVjb21wb3NpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlJlZ2V4IHN0cmluZyBtYXRjaGVyIiB0aW1lPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9InRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBNYXRjaGVzKCZxdW90O3RoaXMgU1RSSU5HIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nJnF1b3Q7KSIgdHlwZT0iQ0hFQ0tfVEhBVCI+Ci1GQUlMRUQ6Ci0gIENIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBNYXRjaGVzKCJ0aGlzIFNUUklORyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIpICkKLXdpdGggZXhwYW5zaW9uOgotICAidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIG1hdGNoZXMgInRoaXMgU1RSSU5HIGNvbnRhaW5zCi0gICdhYmMnIGFzIGEgc3Vic3RyaW5nIiBjYXNlIHNlbnNpdGl2ZWx5CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSImcXVvdDt0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyZxdW90OyBtYXRjaGVzICZxdW90O3RoaXMgU1RSSU5HIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nJnF1b3Q7IGNhc2Ugc2Vuc2l0aXZlbHkiIHR5cGU9IkNIRUNLX1RIQVQiPgogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9InRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBNYXRjaGVzKCZxdW90O2NvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nJnF1b3Q7KSIgdHlwZT0iQ0hFQ0tfVEhBVCI+Ci1GQUlMRUQ6Ci0gIENIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBNYXRjaGVzKCJjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIpICkKLXdpdGggZXhwYW5zaW9uOgotICAidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIG1hdGNoZXMgImNvbnRhaW5zICdhYmMnIGFzIGEKLSAgc3Vic3RyaW5nIiBjYXNlIHNlbnNpdGl2ZWx5CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSImcXVvdDt0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyZxdW90OyBtYXRjaGVzICZxdW90O2NvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nJnF1b3Q7IGNhc2Ugc2Vuc2l0aXZlbHkiIHR5cGU9IkNIRUNLX1RIQVQiPgogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9InRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBNYXRjaGVzKCZxdW90O3RoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEmcXVvdDspIiB0eXBlPSJDSEVDS19USEFUIj4KLUZBSUxFRDoKLSAgQ0hFQ0tfVEhBVCggdGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIE1hdGNoZXMoInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEiKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nIiBtYXRjaGVzICJ0aGlzIHN0cmluZyBjb250YWlucwotICAnYWJjJyBhcyBhIiBjYXNlIHNlbnNpdGl2ZWx5CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSImcXVvdDt0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyZxdW90OyBtYXRjaGVzICZxdW90O3RoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEmcXVvdDsgY2FzZSBzZW5zaXRpdmVseSIgdHlwZT0iQ0hFQ0tfVEhBVCI+CiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CkBAIC0xMDg4LDE5ICs2NDQsMTAgQEAKICAgICAgIDwvc3lzdGVtLW91dD4KICAgICA8L3Rlc3RjYXNlPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJTdGFydHNXaXRoIHN0cmluZyBtYXRjaGVyIiB0aW1lPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9InRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBTdGFydHNXaXRoKCZxdW90O1RoaXMgU3RyaW5nJnF1b3Q7KSIgdHlwZT0iQ0hFQ0tfVEhBVCI+Ci1GQUlMRUQ6Ci0gIENIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBTdGFydHNXaXRoKCJUaGlzIFN0cmluZyIpICkKLXdpdGggZXhwYW5zaW9uOgotICAidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIHN0YXJ0cyB3aXRoOiAiVGhpcyBTdHJpbmciCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSImcXVvdDt0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyZxdW90OyBzdGFydHMgd2l0aDogJnF1b3Q7VGhpcyBTdHJpbmcmcXVvdDsiIHR5cGU9IkNIRUNLX1RIQVQiPgogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9InRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBTdGFydHNXaXRoKCZxdW90O3N0cmluZyZxdW90OywgQ2F0Y2g6OkNhc2VTZW5zaXRpdmU6Ok5vKSIgdHlwZT0iQ0hFQ0tfVEhBVCI+Ci1GQUlMRUQ6Ci0gIENIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBTdGFydHNXaXRoKCJzdHJpbmciLCBDYXRjaDo6Q2FzZVNlbnNpdGl2ZTo6Tm8pICkKLXdpdGggZXhwYW5zaW9uOgotICAidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIHN0YXJ0cyB3aXRoOiAic3RyaW5nIiAoY2FzZQotICBpbnNlbnNpdGl2ZSkKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IiZxdW90O3RoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nJnF1b3Q7IHN0YXJ0cyB3aXRoOiAmcXVvdDtzdHJpbmcmcXVvdDsgKGNhc2UgaW5zZW5zaXRpdmUpIiB0eXBlPSJDSEVDS19USEFUIj4KIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KQEAgLTExMTAsNTIgKzY1NywzOCBAQAogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJTdHJpbmcgbWF0Y2hlcnMiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU3RyaW5nUmVmL0VtcHR5IHN0cmluZyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJTdHJpbmdSZWYvRnJvbSBzdHJpbmcgbGl0ZXJhbCIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJTdHJpbmdSZWYvRnJvbSBzdHJpbmcgbGl0ZXJhbC9jX3N0cigpIGRvZXMgbm90IGNhdXNlIGNvcHkiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU3RyaW5nUmVmL0Zyb20gc3ViLXN0cmluZyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJTdHJpbmdSZWYvU3Vic3RyaW5ncy96ZXJvLWJhc2VkIHN1YnN0cmluZyIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJTdHJpbmdSZWYvU3Vic3RyaW5ncy9jX3N0cigpIGNhdXNlcyBjb3B5IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlN0cmluZ1JlZi9TdWJzdHJpbmdzL25vbi16ZXJvLWJhc2VkIHN1YnN0cmluZyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJTdHJpbmdSZWYvU3Vic3RyaW5ncy9Qb2ludGVyIHZhbHVlcyBvZiBmdWxsIHJlZnMgc2hvdWxkIG1hdGNoIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlN0cmluZ1JlZi9TdWJzdHJpbmdzL1BvaW50ZXIgdmFsdWVzIG9mIHN1YnN0cmluZyByZWZzIHNob3VsZCBhbHNvIG1hdGNoIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlN0cmluZ1JlZi9TdWJzdHJpbmdzL1Bhc3QgdGhlIGVuZCBzdWJzdHJpbmciIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU3RyaW5nUmVmL1N1YnN0cmluZ3MvU3Vic3RyaW5nIG9mZiB0aGUgZW5kIGFyZSB0cmltbWVkIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlN0cmluZ1JlZi9Db21wYXJpc29ucyBhcmUgZGVlcCIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJTdHJpbmdSZWYvU3Vic3RyaW5ncy9Qb2ludGVyIHZhbHVlcyBvZiBzdWJzdHJpbmcgcmVmcyBzaG91bGQgbm90IG1hdGNoIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlN0cmluZ1JlZi9Db21wYXJpc29ucyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJTdHJpbmdSZWYvZnJvbSBzdGQ6OnN0cmluZy9pbXBsaWNpdGx5IGNvbnN0cnVjdGVkIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlN0cmluZ1JlZi9mcm9tIHN0ZDo6c3RyaW5nL2V4cGxpY2l0bHkgY29uc3RydWN0ZWQiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU3RyaW5nUmVmL2Zyb20gc3RkOjpzdHJpbmcvYXNzaWduZWQiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU3RyaW5nUmVmL3RvIHN0ZDo6c3RyaW5nL2ltcGxpY2l0bHkgY29uc3RydWN0ZWQiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU3RyaW5nUmVmL3RvIHN0ZDo6c3RyaW5nL2V4cGxpY2l0bHkgY29uc3RydWN0ZWQiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU3RyaW5nUmVmL3RvIHN0ZDo6c3RyaW5nL2Fzc2lnbmVkIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlN0cmluZ1JlZiBhdCBjb21waWxhdGlvbiB0aW1lL1NpbXBsZSBjb25zdHJ1Y3RvcnMiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU3RyaW5nUmVmIGF0IGNvbXBpbGF0aW9uIHRpbWUvVURMIGNvbnN0cnVjdGlvbiIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJTdHJpbmdSZWYvQ291bnRpbmcgdXRmLTggY29kZXBvaW50cyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJTdHJpbmdpZnlpbmcgc3RkOjpjaHJvbm86OmR1cmF0aW9uIGhlbHBlcnMiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU3RyaW5naWZ5aW5nIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbiB3aXRoIHdlaXJkIHJhdGlvcyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJTdHJpbmdpZnlpbmcgc3RkOjpjaHJvbm86OnRpbWVfcG9pbnQmbHQ7c3lzdGVtX2Nsb2NrPiIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUYWJzIGFuZCBuZXdsaW5lcyBzaG93IGluIG91dHB1dCIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJzMSA9PSBzMiIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggczEgPT0gczIgKQotd2l0aCBleHBhbnNpb246Ci0gICJpZiAoJGIgPT0gMTApIHsKLSAgCQkkYQk9IDIwOwotICB9IgotICA9PQotICAiaWYgKCRiID09IDEwKSB7Ci0gIAkkYSA9IDIwOwotICB9Ci0gICIKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IiZxdW90O2lmICgkYiA9PSAxMCkgeworCQkkYQk9IDIwOworfSZxdW90OworPT0KKyZxdW90O2lmICgkYiA9PSAxMCkgeworCSRhID0gMjA7Cit9CismcXVvdDsiIHR5cGU9IkNIRUNLIj4KIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KICAgICA8L3Rlc3RjYXNlPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUYWcgYWxpYXMgY2FuIGJlIHJlZ2lzdGVyZWQgYWdhaW5zdCB0YWcgcGF0dGVybnMvVGhlIHNhbWUgdGFnIGFsaWFzIGNhbiBvbmx5IGJlIHJlZ2lzdGVyZWQgb25jZSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUYWcgYWxpYXMgY2FuIGJlIHJlZ2lzdGVyZWQgYWdhaW5zdCB0YWcgcGF0dGVybnMvVGFnIGFsaWFzZXMgbXVzdCBiZSBvZiB0aGUgZm9ybSBbQG5hbWVdIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5UZW1wbGF0ZV9GaXh0dXJlIiBuYW1lPSJUZW1wbGF0ZSB0ZXN0IGNhc2UgbWV0aG9kIHdpdGggdGVzdCB0eXBlcyBzcGVjaWZpZWQgaW5zaWRlIHN0ZDo6dHVwbGUgLSBNeVR5cGVzIC0gMCIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVtcGxhdGVfRml4dHVyZSIgbmFtZT0iVGVtcGxhdGUgdGVzdCBjYXNlIG1ldGhvZCB3aXRoIHRlc3QgdHlwZXMgc3BlY2lmaWVkIGluc2lkZSBzdGQ6OnR1cGxlIC0gTXlUeXBlcyAtIDEiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+LlRlbXBsYXRlX0ZpeHR1cmUiIG5hbWU9IlRlbXBsYXRlIHRlc3QgY2FzZSBtZXRob2Qgd2l0aCB0ZXN0IHR5cGVzIHNwZWNpZmllZCBpbnNpZGUgc3RkOjp0dXBsZSAtIE15VHlwZXMgLSAyIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlIHRlc3QgY2FzZSB3aXRoIHRlc3QgdHlwZXMgc3BlY2lmaWVkIGluc2lkZSBub24tY29weWFibGUgYW5kIG5vbi1tb3ZhYmxlIHN0ZDo6dHVwbGUgLSBOb25Db3B5YWJsZUFuZE5vbk1vdmFibGVUeXBlcyAtIDAiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVtcGxhdGUgdGVzdCBjYXNlIHdpdGggdGVzdCB0eXBlcyBzcGVjaWZpZWQgaW5zaWRlIG5vbi1jb3B5YWJsZSBhbmQgbm9uLW1vdmFibGUgc3RkOjp0dXBsZSAtIE5vbkNvcHlhYmxlQW5kTm9uTW92YWJsZVR5cGVzIC0gMSIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZSB0ZXN0IGNhc2Ugd2l0aCB0ZXN0IHR5cGVzIHNwZWNpZmllZCBpbnNpZGUgbm9uLWRlZmF1bHQtY29uc3RydWN0aWJsZSBzdGQ6OnR1cGxlIC0gTXlOb25EZWZhdWx0Q29uc3RydWN0aWJsZVR5cGVzIC0gMCIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZSB0ZXN0IGNhc2Ugd2l0aCB0ZXN0IHR5cGVzIHNwZWNpZmllZCBpbnNpZGUgbm9uLWRlZmF1bHQtY29uc3RydWN0aWJsZSBzdGQ6OnR1cGxlIC0gTXlOb25EZWZhdWx0Q29uc3RydWN0aWJsZVR5cGVzIC0gMSIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZSB0ZXN0IGNhc2Ugd2l0aCB0ZXN0IHR5cGVzIHNwZWNpZmllZCBpbnNpZGUgc3RkOjp0dXBsZSAtIE15VHlwZXMgLSAwIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlIHRlc3QgY2FzZSB3aXRoIHRlc3QgdHlwZXMgc3BlY2lmaWVkIGluc2lkZSBzdGQ6OnR1cGxlIC0gTXlUeXBlcyAtIDEiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVtcGxhdGUgdGVzdCBjYXNlIHdpdGggdGVzdCB0eXBlcyBzcGVjaWZpZWQgaW5zaWRlIHN0ZDo6dHVwbGUgLSBNeVR5cGVzIC0gMiIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGZsb2F0L3Jlc2l6aW5nIGJpZ2dlciBjaGFuZ2VzIHNpemUgYW5kIGNhcGFjaXR5IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdC9yZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CkBAIC0xMTgwLDM4ICs3MTMsMTIgQEAKICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6dHVwbGUmbHQ7aW50LGZsb2F0Pi9yZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5L1dlIGNhbiB1c2UgdGhlICdzd2FwIHRyaWNrJyB0byByZXNldCB0aGUgY2FwYWNpdHkiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6dHVwbGUmbHQ7aW50LGZsb2F0Pi9yZXNlcnZpbmcgYmlnZ2VyIGNoYW5nZXMgY2FwYWNpdHkgYnV0IG5vdCBzaXplIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnR1cGxlJmx0O2ludCxmbG9hdD4vcmVzZXJ2aW5nIHNtYWxsZXIgZG9lcyBub3QgY2hhbmdlIHNpemUgb3IgY2FwYWNpdHkiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIChzdGQ6OnR1cGxlJmx0O2ludCwgZmxvYXQ+KSwgNiIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gKHN0ZDo6dHVwbGUmbHQ7aW50LCBmbG9hdD4pLCA2L3Jlc2l6aW5nIGJpZ2dlciBjaGFuZ2VzIHNpemUgYW5kIGNhcGFjaXR5IiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSAoc3RkOjp0dXBsZSZsdDtpbnQsIGZsb2F0PiksIDYvcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eSIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gKHN0ZDo6dHVwbGUmbHQ7aW50LCBmbG9hdD4pLCA2L3Jlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkvV2UgY2FuIHVzZSB0aGUgJ3N3YXAgdHJpY2snIHRvIHJlc2V0IHRoZSBjYXBhY2l0eSIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gKHN0ZDo6dHVwbGUmbHQ7aW50LCBmbG9hdD4pLCA2L3Jlc2VydmluZyBiaWdnZXIgY2hhbmdlcyBjYXBhY2l0eSBidXQgbm90IHNpemUiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIChzdGQ6OnR1cGxlJmx0O2ludCwgZmxvYXQ+KSwgNi9yZXNlcnZpbmcgc21hbGxlciBkb2VzIG5vdCBjaGFuZ2Ugc2l6ZSBvciBjYXBhY2l0eSIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQsNCIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQsNC9yZXNpemluZyBiaWdnZXIgY2hhbmdlcyBzaXplIGFuZCBjYXBhY2l0eSIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQsNC9yZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5IiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdCw0L3Jlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkvV2UgY2FuIHVzZSB0aGUgJ3N3YXAgdHJpY2snIHRvIHJlc2V0IHRoZSBjYXBhY2l0eSIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQsNC9yZXNlcnZpbmcgYmlnZ2VyIGNoYW5nZXMgY2FwYWNpdHkgYnV0IG5vdCBzaXplIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdCw0L3Jlc2VydmluZyBzbWFsbGVyIGRvZXMgbm90IGNoYW5nZSBzaXplIG9yIGNhcGFjaXR5IiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBpbnQsNSIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gaW50LDUvcmVzaXppbmcgYmlnZ2VyIGNoYW5nZXMgc2l6ZSBhbmQgY2FwYWNpdHkiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGludCw1L3Jlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGludCw1L3Jlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkvV2UgY2FuIHVzZSB0aGUgJ3N3YXAgdHJpY2snIHRvIHJlc2V0IHRoZSBjYXBhY2l0eSIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gaW50LDUvcmVzZXJ2aW5nIGJpZ2dlciBjaGFuZ2VzIGNhcGFjaXR5IGJ1dCBub3Qgc2l6ZSIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gaW50LDUvcmVzZXJ2aW5nIHNtYWxsZXIgZG9lcyBub3QgY2hhbmdlIHNpemUgb3IgY2FwYWNpdHkiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6c3RyaW5nLDE1IiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnN0cmluZywxNS9yZXNpemluZyBiaWdnZXIgY2hhbmdlcyBzaXplIGFuZCBjYXBhY2l0eSIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjpzdHJpbmcsMTUvcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eSIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjpzdHJpbmcsMTUvcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eS9XZSBjYW4gdXNlIHRoZSAnc3dhcCB0cmljaycgdG8gcmVzZXQgdGhlIGNhcGFjaXR5IiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnN0cmluZywxNS9yZXNlcnZpbmcgYmlnZ2VyIGNoYW5nZXMgY2FwYWNpdHkgYnV0IG5vdCBzaXplIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnN0cmluZywxNS9yZXNlcnZpbmcgc21hbGxlciBkb2VzIG5vdCBjaGFuZ2Ugc2l6ZSBvciBjYXBhY2l0eSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZXN0IGNhc2Ugd2l0aCBvbmUgYXJndW1lbnQiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVzdCBlbnVtIGJpdCB2YWx1ZXMiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVzdCB3aXRoIHNwZWNpYWwsIGNoYXJhY3RlcnMgJnF1b3Q7aW4gbmFtZSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUaGUgTk9fRkFJTCBtYWNybyByZXBvcnRzIGEgZmFpbHVyZSBidXQgZG9lcyBub3QgZmFpbCB0aGUgdGVzdCIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUaGlzIHRlc3QgJ3Nob3VsZCcgZmFpbCBidXQgZG9lc24ndCIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUaHJvd24gc3RyaW5nIGxpdGVyYWxzIGFyZSB0cmFuc2xhdGVkIiB0aW1lPSJ7ZHVyYXRpb259Ij4KICAgICAgIDxlcnJvciB0eXBlPSJURVNUX0NBU0UiPgotRkFJTEVEOgogRm9yIHNvbWUgcmVhc29uIHNvbWVvbmUgaXMgdGhyb3dpbmcgYSBzdHJpbmcgbGl0ZXJhbCEKIEV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9lcnJvcj4KQEAgLTEyMjYsMTAgKzczMyw4IEBACiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRyYWNrZXIvc3VjY2Vzc2Z1bGx5IGNsb3NlIG9uZSBzZWN0aW9uLCB0aGVuIGZpbmQgYW5vdGhlci9SZS1lbnRlciAtIHNraXBzIFMxIGFuZCBlbnRlcnMgUzIvU3VjY2Vzc2Z1bGx5IGNsb3NlIFMyIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRyYWNrZXIvc3VjY2Vzc2Z1bGx5IGNsb3NlIG9uZSBzZWN0aW9uLCB0aGVuIGZpbmQgYW5vdGhlci9SZS1lbnRlciAtIHNraXBzIFMxIGFuZCBlbnRlcnMgUzIvZmFpbCBTMiIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUcmFja2VyL29wZW4gYSBuZXN0ZWQgc2VjdGlvbiIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUcmltIHN0cmluZ3MiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVW5leHBlY3RlZCBleGNlcHRpb25zIGNhbiBiZSB0cmFuc2xhdGVkIiB0aW1lPSJ7ZHVyYXRpb259Ij4KICAgICAgIDxlcnJvciB0eXBlPSJURVNUX0NBU0UiPgotRkFJTEVEOgogMy4xNAogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2Vycm9yPgpAQCAtMTI0MSwyMCArNzQ2LDEyIEBACiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlZlY3RvciBBcHByb3ggbWF0Y2hlci9WZWN0b3JzIHdpdGggZWxlbWVudHMvRGlmZmVyZW50IGxlbmd0aCIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJWZWN0b3IgQXBwcm94IG1hdGNoZXIvVmVjdG9ycyB3aXRoIGVsZW1lbnRzL1NhbWUgbGVuZ3RoLCBkaWZmZXJlbnQgZWxlbWVudHMiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVmVjdG9yIEFwcHJveCBtYXRjaGVyIC0tIGZhaWxpbmcvRW1wdHkgYW5kIG5vbiBlbXB0eSB2ZWN0b3JzIGFyZSBub3QgYXBwcm94IGVxdWFsIiB0aW1lPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImVtcHR5LCBBcHByb3godDEpIiB0eXBlPSJDSEVDS19USEFUIj4KLUZBSUxFRDoKLSAgQ0hFQ0tfVEhBVCggZW1wdHksIEFwcHJveCh0MSkgKQotd2l0aCBleHBhbnNpb246Ci0gIHsgIH0gaXMgYXBwcm94OiB7IDEuMCwgMi4wIH0KKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9InsgIH0gaXMgYXBwcm94OiB7IDEuMCwgMi4wIH0iIHR5cGU9IkNIRUNLX1RIQVQiPgogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KICAgICA8L3Rlc3RjYXNlPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJWZWN0b3IgQXBwcm94IG1hdGNoZXIgLS0gZmFpbGluZy9KdXN0IGRpZmZlcmVudCB2ZWN0b3JzIiB0aW1lPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9InYxLCBBcHByb3godjIpIiB0eXBlPSJDSEVDS19USEFUIj4KLUZBSUxFRDoKLSAgQ0hFQ0tfVEhBVCggdjEsIEFwcHJveCh2MikgKQotd2l0aCBleHBhbnNpb246Ci0gIHsgMi4wLCA0LjAsIDYuMCB9IGlzIGFwcHJveDogeyAxLjAsIDMuMCwgNS4wIH0KKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9InsgMi4wLCA0LjAsIDYuMCB9IGlzIGFwcHJveDogeyAxLjAsIDMuMCwgNS4wIH0iIHR5cGU9IkNIRUNLX1RIQVQiPgogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KICAgICA8L3Rlc3RjYXNlPgpAQCAtMTI2NCwxMzIgKzc2MSw3NiBAQAogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJWZWN0b3IgbWF0Y2hlcnMvRXF1YWxzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlZlY3RvciBtYXRjaGVycy9Vbm9yZGVyZWRFcXVhbHMiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVmVjdG9yIG1hdGNoZXJzIHRoYXQgZmFpbC9Db250YWlucyAoZWxlbWVudCkiIHRpbWU9IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0idiwgVmVjdG9yQ29udGFpbnMoLTEpIiB0eXBlPSJDSEVDS19USEFUIj4KLUZBSUxFRDoKLSAgQ0hFQ0tfVEhBVCggdiwgVmVjdG9yQ29udGFpbnMoLTEpICkKLXdpdGggZXhwYW5zaW9uOgotICB7IDEsIDIsIDMgfSBDb250YWluczogLTEKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9InsgMSwgMiwgMyB9IENvbnRhaW5zOiAtMSIgdHlwZT0iQ0hFQ0tfVEhBVCI+CiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZW1wdHksIFZlY3RvckNvbnRhaW5zKDEpIiB0eXBlPSJDSEVDS19USEFUIj4KLUZBSUxFRDoKLSAgQ0hFQ0tfVEhBVCggZW1wdHksIFZlY3RvckNvbnRhaW5zKDEpICkKLXdpdGggZXhwYW5zaW9uOgotICB7ICB9IENvbnRhaW5zOiAxCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJ7ICB9IENvbnRhaW5zOiAxIiB0eXBlPSJDSEVDS19USEFUIj4KIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVmVjdG9yIG1hdGNoZXJzIHRoYXQgZmFpbC9Db250YWlucyAodmVjdG9yKSIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJlbXB0eSwgQ29udGFpbnModikiIHR5cGU9IkNIRUNLX1RIQVQiPgotRkFJTEVEOgotICBDSEVDS19USEFUKCBlbXB0eSwgQ29udGFpbnModikgKQotd2l0aCBleHBhbnNpb246Ci0gIHsgIH0gQ29udGFpbnM6IHsgMSwgMiwgMyB9CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJ7ICB9IENvbnRhaW5zOiB7IDEsIDIsIDMgfSIgdHlwZT0iQ0hFQ0tfVEhBVCI+CiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0idiwgQ29udGFpbnModjIpIiB0eXBlPSJDSEVDS19USEFUIj4KLUZBSUxFRDoKLSAgQ0hFQ0tfVEhBVCggdiwgQ29udGFpbnModjIpICkKLXdpdGggZXhwYW5zaW9uOgotICB7IDEsIDIsIDMgfSBDb250YWluczogeyAxLCAyLCA0IH0KKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9InsgMSwgMiwgMyB9IENvbnRhaW5zOiB7IDEsIDIsIDQgfSIgdHlwZT0iQ0hFQ0tfVEhBVCI+CiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlZlY3RvciBtYXRjaGVycyB0aGF0IGZhaWwvRXF1YWxzIiB0aW1lPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9InYsIEVxdWFscyh2MikiIHR5cGU9IkNIRUNLX1RIQVQiPgotRkFJTEVEOgotICBDSEVDS19USEFUKCB2LCBFcXVhbHModjIpICkKLXdpdGggZXhwYW5zaW9uOgotICB7IDEsIDIsIDMgfSBFcXVhbHM6IHsgMSwgMiB9CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJ7IDEsIDIsIDMgfSBFcXVhbHM6IHsgMSwgMiB9IiB0eXBlPSJDSEVDS19USEFUIj4KIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJ2MiwgRXF1YWxzKHYpIiB0eXBlPSJDSEVDS19USEFUIj4KLUZBSUxFRDoKLSAgQ0hFQ0tfVEhBVCggdjIsIEVxdWFscyh2KSApCi13aXRoIGV4cGFuc2lvbjoKLSAgeyAxLCAyIH0gRXF1YWxzOiB7IDEsIDIsIDMgfQorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0ieyAxLCAyIH0gRXF1YWxzOiB7IDEsIDIsIDMgfSIgdHlwZT0iQ0hFQ0tfVEhBVCI+CiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZW1wdHksIEVxdWFscyh2KSIgdHlwZT0iQ0hFQ0tfVEhBVCI+Ci1GQUlMRUQ6Ci0gIENIRUNLX1RIQVQoIGVtcHR5LCBFcXVhbHModikgKQotd2l0aCBleHBhbnNpb246Ci0gIHsgIH0gRXF1YWxzOiB7IDEsIDIsIDMgfQorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0ieyAgfSBFcXVhbHM6IHsgMSwgMiwgMyB9IiB0eXBlPSJDSEVDS19USEFUIj4KIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJ2LCBFcXVhbHMoZW1wdHkpIiB0eXBlPSJDSEVDS19USEFUIj4KLUZBSUxFRDoKLSAgQ0hFQ0tfVEhBVCggdiwgRXF1YWxzKGVtcHR5KSApCi13aXRoIGV4cGFuc2lvbjoKLSAgeyAxLCAyLCAzIH0gRXF1YWxzOiB7ICB9CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJ7IDEsIDIsIDMgfSBFcXVhbHM6IHsgIH0iIHR5cGU9IkNIRUNLX1RIQVQiPgogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KICAgICA8L3Rlc3RjYXNlPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJWZWN0b3IgbWF0Y2hlcnMgdGhhdCBmYWlsL1Vub3JkZXJlZEVxdWFscyIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJ2LCBVbm9yZGVyZWRFcXVhbHMoZW1wdHkpIiB0eXBlPSJDSEVDS19USEFUIj4KLUZBSUxFRDoKLSAgQ0hFQ0tfVEhBVCggdiwgVW5vcmRlcmVkRXF1YWxzKGVtcHR5KSApCi13aXRoIGV4cGFuc2lvbjoKLSAgeyAxLCAyLCAzIH0gVW5vcmRlcmVkRXF1YWxzOiB7ICB9CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJ7IDEsIDIsIDMgfSBVbm9yZGVyZWRFcXVhbHM6IHsgIH0iIHR5cGU9IkNIRUNLX1RIQVQiPgogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImVtcHR5LCBVbm9yZGVyZWRFcXVhbHModikiIHR5cGU9IkNIRUNLX1RIQVQiPgotRkFJTEVEOgotICBDSEVDS19USEFUKCBlbXB0eSwgVW5vcmRlcmVkRXF1YWxzKHYpICkKLXdpdGggZXhwYW5zaW9uOgotICB7ICB9IFVub3JkZXJlZEVxdWFsczogeyAxLCAyLCAzIH0KKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9InsgIH0gVW5vcmRlcmVkRXF1YWxzOiB7IDEsIDIsIDMgfSIgdHlwZT0iQ0hFQ0tfVEhBVCI+CiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0icGVybXV0ZWQsIFVub3JkZXJlZEVxdWFscyh2KSIgdHlwZT0iQ0hFQ0tfVEhBVCI+Ci1GQUlMRUQ6Ci0gIENIRUNLX1RIQVQoIHBlcm11dGVkLCBVbm9yZGVyZWRFcXVhbHModikgKQotd2l0aCBleHBhbnNpb246Ci0gIHsgMSwgMyB9IFVub3JkZXJlZEVxdWFsczogeyAxLCAyLCAzIH0KKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9InsgMSwgMyB9IFVub3JkZXJlZEVxdWFsczogeyAxLCAyLCAzIH0iIHR5cGU9IkNIRUNLX1RIQVQiPgogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9InBlcm11dGVkLCBVbm9yZGVyZWRFcXVhbHModikiIHR5cGU9IkNIRUNLX1RIQVQiPgotRkFJTEVEOgotICBDSEVDS19USEFUKCBwZXJtdXRlZCwgVW5vcmRlcmVkRXF1YWxzKHYpICkKLXdpdGggZXhwYW5zaW9uOgotICB7IDMsIDEgfSBVbm9yZGVyZWRFcXVhbHM6IHsgMSwgMiwgMyB9CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJ7IDMsIDEgfSBVbm9yZGVyZWRFcXVhbHM6IHsgMSwgMiwgMyB9IiB0eXBlPSJDSEVDS19USEFUIj4KIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iV2hlbiBjaGVja2VkIGV4Y2VwdGlvbnMgYXJlIHRocm93biB0aGV5IGNhbiBiZSBleHBlY3RlZCBvciB1bmV4cGVjdGVkIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IldoZW4gdW5jaGVja2VkIGV4Y2VwdGlvbnMgYXJlIHRocm93biBkaXJlY3RseSB0aGV5IGFyZSBhbHdheXMgZmFpbHVyZXMiIHRpbWU9IntkdXJhdGlvbn0iPgogICAgICAgPGVycm9yIHR5cGU9IlRFU1RfQ0FTRSI+Ci1GQUlMRUQ6CiB1bmV4cGVjdGVkIGV4Y2VwdGlvbgogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2Vycm9yPgogICAgIDwvdGVzdGNhc2U+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IldoZW4gdW5jaGVja2VkIGV4Y2VwdGlvbnMgYXJlIHRocm93biBkdXJpbmcgYSBDSEVDSyB0aGUgdGVzdCBzaG91bGQgY29udGludWUiIHRpbWU9IntkdXJhdGlvbn0iPgogICAgICAgPGVycm9yIG1lc3NhZ2U9InRoaXNUaHJvd3MoKSA9PSAwIiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCB0aGlzVGhyb3dzKCkgPT0gMCApCiBleHBlY3RlZCBleGNlcHRpb24KIEV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9lcnJvcj4KICAgICA8L3Rlc3RjYXNlPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJXaGVuIHVuY2hlY2tlZCBleGNlcHRpb25zIGFyZSB0aHJvd24gZHVyaW5nIGEgUkVRVUlSRSB0aGUgdGVzdCBzaG91bGQgYWJvcnQgZmFpbCIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZXJyb3IgbWVzc2FnZT0idGhpc1Rocm93cygpID09IDAiIHR5cGU9IlJFUVVJUkUiPgotRkFJTEVEOgotICBSRVFVSVJFKCB0aGlzVGhyb3dzKCkgPT0gMCApCiBleHBlY3RlZCBleGNlcHRpb24KIEV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9lcnJvcj4KICAgICA8L3Rlc3RjYXNlPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJXaGVuIHVuY2hlY2tlZCBleGNlcHRpb25zIGFyZSB0aHJvd24gZnJvbSBmdW5jdGlvbnMgdGhleSBhcmUgYWx3YXlzIGZhaWx1cmVzIiB0aW1lPSJ7ZHVyYXRpb259Ij4KICAgICAgIDxlcnJvciBtZXNzYWdlPSJ0aGlzVGhyb3dzKCkgPT0gMCIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggdGhpc1Rocm93cygpID09IDAgKQogZXhwZWN0ZWQgZXhjZXB0aW9uCiBFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZXJyb3I+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iV2hlbiB1bmNoZWNrZWQgZXhjZXB0aW9ucyBhcmUgdGhyb3duIGZyb20gc2VjdGlvbnMgdGhleSBhcmUgYWx3YXlzIGZhaWx1cmVzL3NlY3Rpb24gbmFtZSIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZXJyb3IgdHlwZT0iVEVTVF9DQVNFIj4KLUZBSUxFRDoKIHVuZXhwZWN0ZWQgZXhjZXB0aW9uCiBFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZXJyb3I+CkBAIC0xNDA4LDQxICs4NDksMzAgQEAKICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iWG1sRW5jb2RlL3N0cmluZyB3aXRoIHF1b3RlcyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJYbWxFbmNvZGUvc3RyaW5nIHdpdGggY29udHJvbCBjaGFyICgxKSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJYbWxFbmNvZGUvc3RyaW5nIHdpdGggY29udHJvbCBjaGFyICh4N0YpIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9ImFkZGluZyBhIGhpZGUgdGFnIGltcGxpY2l0bHkgZW5hYmxlcyBhbGwgb3RoZXJzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlhtbEVuY29kZTogVVRGLTgvVmFsaWQgdXRmLTggc3RyaW5ncyIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJYbWxFbmNvZGU6IFVURi04L0ludmFsaWQgdXRmLTggc3RyaW5ncy9WYXJpb3VzIGJyb2tlbiBzdHJpbmdzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlhtbEVuY29kZTogVVRGLTgvSW52YWxpZCB1dGYtOCBzdHJpbmdzL092ZXJsb25nIGVuY29kaW5ncyIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJYbWxFbmNvZGU6IFVURi04L0ludmFsaWQgdXRmLTggc3RyaW5ncy9TdXJyb2dhdGUgcGFpcnMiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iWG1sRW5jb2RlOiBVVEYtOC9JbnZhbGlkIHV0Zi04IHN0cmluZ3MvSW52YWxpZCBzdGFydCBieXRlIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlhtbEVuY29kZTogVVRGLTgvSW52YWxpZCB1dGYtOCBzdHJpbmdzL01pc3NpbmcgY29udGludWF0aW9uIGJ5dGUocykiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iYXJyYXkmbHQ7aW50LCBOPiAtPiB0b1N0cmluZyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJhdG9taWMgaWYiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iYm9vbGVhbiBtZW1iZXIiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iY2hlY2tlZEVsc2UiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iY2hlY2tlZEVsc2UsIGZhaWxpbmciIHRpbWU9IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZmxhZyIgdHlwZT0iQ0hFQ0tFRF9FTFNFIj4KLUZBSUxFRDoKLSAgQ0hFQ0tFRF9FTFNFKCBmbGFnICkKLXdpdGggZXhwYW5zaW9uOgotICBmYWxzZQorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZmFsc2UiIHR5cGU9IkNIRUNLRURfRUxTRSI+CiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJ0ZXN0Q2hlY2tlZEVsc2UoIGZhbHNlICkiIHR5cGU9IlJFUVVJUkUiPgotRkFJTEVEOgotICBSRVFVSVJFKCB0ZXN0Q2hlY2tlZEVsc2UoIGZhbHNlICkgKQotd2l0aCBleHBhbnNpb246Ci0gIGZhbHNlCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSI+CiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iY2hlY2tlZElmIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9ImNoZWNrZWRJZiwgZmFpbGluZyIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJmbGFnIiB0eXBlPSJDSEVDS0VEX0lGIj4KLUZBSUxFRDoKLSAgQ0hFQ0tFRF9JRiggZmxhZyApCi13aXRoIGV4cGFuc2lvbjoKLSAgZmFsc2UKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImZhbHNlIiB0eXBlPSJDSEVDS0VEX0lGIj4KIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9InRlc3RDaGVja2VkSWYoIGZhbHNlICkiIHR5cGU9IlJFUVVJUkUiPgotRkFJTEVEOgotICBSRVFVSVJFKCB0ZXN0Q2hlY2tlZElmKCBmYWxzZSApICkKLXdpdGggZXhwYW5zaW9uOgotICBmYWxzZQorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZmFsc2UiIHR5cGU9IlJFUVVJUkUiPgogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CkBAIC0xNDUzLDM0ICs4ODMsMjQgQEAKICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iZXZlbiBtb3JlIG5lc3RlZCBTRUNUSU9OIHRlc3RzL2YgKGxlYWYpIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Imp1c3QgZmFpbHVyZSIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZmFpbHVyZSB0eXBlPSJGQUlMIj4KLUZBSUxFRDoKIFByZXZpb3VzIGluZm8gc2hvdWxkIG5vdCBiZSBzZWVuCiBNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ianVzdCBmYWlsdXJlIGFmdGVyIHVuc2NvcGVkIGluZm8iIHRpbWU9IntkdXJhdGlvbn0iPgogICAgICAgPGZhaWx1cmUgdHlwZT0iRkFJTCI+Ci1GQUlMRUQ6CiBwcmV2aW91cyB1bnNjb3BlZCBpbmZvIFNIT1VMRCBub3QgYmUgc2VlbgogTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9ImxvbmcgbG9uZyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJsb29wZWQgU0VDVElPTiB0ZXN0cy9iIGlzIGN1cnJlbnRseTogMCIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJiID4gYSIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggYiA+IGEgKQotd2l0aCBleHBhbnNpb246Ci0gIDAgPiAxCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSIwID4gMSIgdHlwZT0iQ0hFQ0siPgogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Imxvb3BlZCBTRUNUSU9OIHRlc3RzL2IgaXMgY3VycmVudGx5OiAxIiB0aW1lPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImIgPiBhIiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCBiID4gYSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMSA+IDEKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjEgPiAxIiB0eXBlPSJDSEVDSyI+CiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KQEAgLTE0OTMsNjIgKzkxMywzNCBAQAogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJsb29wZWQgU0VDVElPTiB0ZXN0cy9iIGlzIGN1cnJlbnRseTogOCIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJsb29wZWQgU0VDVElPTiB0ZXN0cy9iIGlzIGN1cnJlbnRseTogOSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJsb29wZWQgdGVzdHMiIHRpbWU9IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iKCBmaWJbaV0gJSAyICkgPT0gMCIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggKCBmaWJbaV0gJSAyICkgPT0gMCApCi13aXRoIGV4cGFuc2lvbjoKLSAgMSA9PSAwCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSIxID09IDAiIHR5cGU9IkNIRUNLIj4KIFRlc3RpbmcgaWYgZmliWzBdICgxKSBpcyBldmVuCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSIoIGZpYltpXSAlIDIgKSA9PSAwIiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCAoIGZpYltpXSAlIDIgKSA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotICAxID09IDAKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjEgPT0gMCIgdHlwZT0iQ0hFQ0siPgogVGVzdGluZyBpZiBmaWJbMV0gKDEpIGlzIGV2ZW4KIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IiggZmliW2ldICUgMiApID09IDAiIHR5cGU9IkNIRUNLIj4KLUZBSUxFRDoKLSAgQ0hFQ0soICggZmliW2ldICUgMiApID09IDAgKQotd2l0aCBleHBhbnNpb246Ci0gIDEgPT0gMAorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iMSA9PSAwIiB0eXBlPSJDSEVDSyI+CiBUZXN0aW5nIGlmIGZpYlszXSAoMykgaXMgZXZlbgogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iKCBmaWJbaV0gJSAyICkgPT0gMCIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggKCBmaWJbaV0gJSAyICkgPT0gMCApCi13aXRoIGV4cGFuc2lvbjoKLSAgMSA9PSAwCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSIxID09IDAiIHR5cGU9IkNIRUNLIj4KIFRlc3RpbmcgaWYgZmliWzRdICg1KSBpcyBldmVuCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSIoIGZpYltpXSAlIDIgKSA9PSAwIiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCAoIGZpYltpXSAlIDIgKSA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotICAxID09IDAKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjEgPT0gMCIgdHlwZT0iQ0hFQ0siPgogVGVzdGluZyBpZiBmaWJbNl0gKDEzKSBpcyBldmVuCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSIoIGZpYltpXSAlIDIgKSA9PSAwIiB0eXBlPSJDSEVDSyI+Ci1GQUlMRUQ6Ci0gIENIRUNLKCAoIGZpYltpXSAlIDIgKSA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotICAxID09IDAKKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjEgPT0gMCIgdHlwZT0iQ0hFQ0siPgogVGVzdGluZyBpZiBmaWJbN10gKDIxKSBpcyBldmVuCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ibWl4IGluZm8sIHVuc2NvcGVkIGluZm8gYW5kIHdhcm5pbmciIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ibW9yZSBuZXN0ZWQgU0VDVElPTiB0ZXN0cy9lcXVhbC9kb2Vzbid0IGVxdWFsIiB0aW1lPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImEgPT0gYiIgdHlwZT0iUkVRVUlSRSI+Ci1GQUlMRUQ6Ci0gIFJFUVVJUkUoIGEgPT0gYiApCi13aXRoIGV4cGFuc2lvbjoKLSAgMSA9PSAyCisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSIxID09IDIiIHR5cGU9IlJFUVVJUkUiPgogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CkBAIC0xNTYxLDggKzk1Myw2IEBACiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Im5vdCBhbGxvd2VkIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Im5vdCBwcmludHMgdW5zY29wZWQgaW5mbyBmcm9tIHByZXZpb3VzIGZhaWx1cmVzIiB0aW1lPSJ7ZHVyYXRpb259Ij4KICAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImZhbHNlIiB0eXBlPSJSRVFVSVJFIj4KLUZBSUxFRDoKLSAgUkVRVUlSRSggZmFsc2UgKQogdGhpcyBTSE9VTEQgYmUgc2VlbgogTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgpAQCAtMTU3MCwxNSArOTYwLDEwIEBACiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Im51bGwgc3RyaW5ncyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJudWxsX3B0ciIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJwYWlyJmx0O3BhaXImbHQ7aW50LGNvbnN0IGNoYXIgKixwYWlyJmx0O3N0ZDo6c3RyaW5nLGludD4gPiAtPiB0b1N0cmluZyIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJwYXJzZUVudW1zL05vIGVudW1zIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InBhcnNlRW51bXMvT25lIGVudW0gdmFsdWUiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0icGFyc2VFbnVtcy9NdWx0aXBsZSBlbnVtIHZhbHVlcyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJwb2ludGVyIHRvIGNsYXNzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InByaW50IHVuc2NvcGVkIGluZm8gaWYgcGFzc2luZyB1bnNjb3BlZCBpbmZvIGlzIHByaW50ZWQiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0icHJpbnRzIHVuc2NvcGVkIGluZm8gb24gZmFpbHVyZSIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSI+Ci1GQUlMRUQ6Ci0gIFJFUVVJUkUoIGZhbHNlICkKIHRoaXMgU0hPVUxEIGJlIHNlZW4KIHRoaXMgU0hPVUxEIGFsc28gYmUgc2VlbgogTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgpAQCAtMTU4Niw4ICs5NzEsNiBAQAogICAgIDwvdGVzdGNhc2U+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InByaW50cyB1bnNjb3BlZCBpbmZvIG9ubHkgZm9yIHRoZSBmaXJzdCBhc3NlcnRpb24iIHRpbWU9IntkdXJhdGlvbn0iPgogICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZmFsc2UiIHR5cGU9IkNIRUNLIj4KLUZBSUxFRDoKLSAgQ0hFQ0soIGZhbHNlICkKIHRoaXMgU0hPVUxEIGJlIHNlZW4gb25seSBPTkNFCiBNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CkBAIC0xNjAzLDI3ICs5ODYsMjAgQEAKICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0icmVwbGFjZUluUGxhY2UvZXNjYXBlICciIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ic2VuZCBhIHNpbmdsZSBjaGFyIHRvIElORk8iIHRpbWU9IntkdXJhdGlvbn0iPgogICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZmFsc2UiIHR5cGU9IlJFUVVJUkUiPgotRkFJTEVEOgotICBSRVFVSVJFKCBmYWxzZSApCiAzCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ic2VuZHMgaW5mb3JtYXRpb24gdG8gSU5GTyIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSI+Ci1GQUlMRUQ6Ci0gIFJFUVVJUkUoIGZhbHNlICkKIGhpCiBpIDo9IDcKIE1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KICAgICA8L3Rlc3RjYXNlPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJzaG9ydGVuZWQgaGlkZSB0YWdzIGFyZSBzcGxpdCBhcGFydCIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJzcGxpdFN0cmluZyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJzdGFja3MgdW5zY29wZWQgaW5mbyBpbiBsb29wcyIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJmYWxzZSIgdHlwZT0iQ0hFQ0siPgotRkFJTEVEOgotICBDSEVDSyggZmFsc2UgKQogQ291bnQgMSB0byAzLi4uCiAxCiAyCkBAIC0xNjMxLDggKzEwMDcsNiBAQAogTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZmFsc2UiIHR5cGU9IkNIRUNLIj4KLUZBSUxFRDoKLSAgQ0hFQ0soIGZhbHNlICkKIENvdW50IDQgdG8gNi4uLgogNAogNQpAQCAtMTY1MCwxMSArMTAyNCw3IEBACiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InN0ZDo6c2V0IGlzIGNvbnZlcnRpYmxlIHN0cmluZy9zZXZlcmFsIGl0ZW1zIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InN0ZDo6dmVjdG9yJmx0O3N0ZDo6cGFpciZsdDtzdGQ6OnN0cmluZyxpbnQ+ID4gLT4gdG9TdHJpbmciIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ic3RyaW5nIGxpdGVyYWxzIG9mIGRpZmZlcmVudCBzaXplcyBjYW4gYmUgY29tcGFyZWQiIHRpbWU9IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0ic3RkOjpzdHJpbmcoICZxdW90O2ZpcnN0JnF1b3Q7ICkgPT0gJnF1b3Q7c2Vjb25kJnF1b3Q7IiB0eXBlPSJSRVFVSVJFIj4KLUZBSUxFRDoKLSAgUkVRVUlSRSggc3RkOjpzdHJpbmcoICJmaXJzdCIgKSA9PSAic2Vjb25kIiApCi13aXRoIGV4cGFuc2lvbjoKLSAgImZpcnN0IiA9PSAic2Vjb25kIgorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iJnF1b3Q7Zmlyc3QmcXVvdDsgPT0gJnF1b3Q7c2Vjb25kJnF1b3Q7IiB0eXBlPSJSRVFVSVJFIj4KIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgogICAgIDwvdGVzdGNhc2U+CkBAIC0xNjcxLDcgKzEwNDEsNiBAQAogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJ0YWJsZXMiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0idGhyb3duIHN0ZDo6c3RyaW5ncyBhcmUgdHJhbnNsYXRlZCIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZXJyb3IgdHlwZT0iVEVTVF9DQVNFIj4KLUZBSUxFRDoKIFdoeSB3b3VsZCB5b3UgdGhyb3cgYSBzdGQ6OnN0cmluZz8KIEV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9lcnJvcj4KZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy9zb25hcnF1YmUuc3cuYXBwcm92ZWQudHh0IGIvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL3NvbmFycXViZS5zdy5hcHByb3ZlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmODllOTkuLjAwMDAwMDAKLS0tIGEvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL3NvbmFycXViZS5zdy5hcHByb3ZlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNzMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08dGVzdEV4ZWN1dGlvbnMgdmVyc2lvbj0iMSJsb29zZSB0ZXh0IGFydGlmYWN0Ci0+Ci0gIDxmaWxlIHBhdGg9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIj4KLSAgICA8dGVzdENhc2UgbmFtZT0iUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncy9FbXB0eSB0ZXN0IHNwZWMgc2hvdWxkIGhhdmUgbm8gZmlsdGVycyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncy9UZXN0IHNwZWMgZnJvbSBlbXB0eSBzdHJpbmcgc2hvdWxkIGhhdmUgbm8gZmlsdGVycyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncy9UZXN0IHNwZWMgZnJvbSBqdXN0IGEgY29tbWEgc2hvdWxkIGhhdmUgbm8gZmlsdGVycyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncy9UZXN0IHNwZWMgZnJvbSBuYW1lIHNob3VsZCBoYXZlIG9uZSBmaWx0ZXIiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MvVGVzdCBzcGVjIGZyb20gcXVvdGVkIG5hbWUgc2hvdWxkIGhhdmUgb25lIGZpbHRlciIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncy9UZXN0IHNwZWMgZnJvbSBuYW1lIHNob3VsZCBoYXZlIG9uZSBmaWx0ZXIiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MvV2lsZGNhcmQgYXQgdGhlIHN0YXJ0IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQYXJzZSB0ZXN0IG5hbWVzIGFuZCB0YWdzL1dpbGRjYXJkIGF0IHRoZSBlbmQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MvV2lsZGNhcmQgYXQgYm90aCBlbmRzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQYXJzZSB0ZXN0IG5hbWVzIGFuZCB0YWdzL1JlZHVuZGFudCB3aWxkY2FyZCBhdCB0aGUgc3RhcnQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MvUmVkdW5kYW50IHdpbGRjYXJkIGF0IHRoZSBlbmQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MvUmVkdW5kYW50IHdpbGRjYXJkIGF0IGJvdGggZW5kcyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncy9XaWxkY2FyZCBhdCBib3RoIGVuZHMsIHJlZHVuZGFudCBhdCBzdGFydCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncy9KdXN0IHdpbGRjYXJkIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQYXJzZSB0ZXN0IG5hbWVzIGFuZCB0YWdzL1NpbmdsZSB0YWciIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MvU2luZ2xlIHRhZywgdHdvIG1hdGNoZXMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MvVHdvIHRhZ3MiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MvVHdvIHRhZ3MsIHNwYXJlIHNlcGFyYXRlZCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncy9XaWxkY2FyZGVkIG5hbWUgYW5kIHRhZyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncy9TaW5nbGUgdGFnIGV4Y2x1c2lvbiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncy9PbmUgdGFnIGV4Y2x1c2lvbiBhbmQgb25lIHRhZyBpbmNsdXNpb24iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MvT25lIHRhZyBleGNsdXNpb24gYW5kIG9uZSB3bGRjYXJkZWQgbmFtZSBpbmNsdXNpb24iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MvT25lIHRhZyBleGNsdXNpb24sIHVzaW5nIGV4Y2x1ZGU6LCBhbmQgb25lIHdsZGNhcmRlZCBuYW1lIGluY2x1c2lvbiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncy9uYW1lIGV4Y2x1c2lvbiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncy93aWxkY2FyZGVkIG5hbWUgZXhjbHVzaW9uIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQYXJzZSB0ZXN0IG5hbWVzIGFuZCB0YWdzL3dpbGRjYXJkZWQgbmFtZSBleGNsdXNpb24gd2l0aCB0YWcgaW5jbHVzaW9uIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQYXJzZSB0ZXN0IG5hbWVzIGFuZCB0YWdzL3dpbGRjYXJkZWQgbmFtZSBleGNsdXNpb24sIHVzaW5nIGV4Y2x1ZGU6LCB3aXRoIHRhZyBpbmNsdXNpb24iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MvdHdvIHdpbGRjYXJkZWQgbmFtZXMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MvZW1wdHkgdGFnIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQYXJzZSB0ZXN0IG5hbWVzIGFuZCB0YWdzL2VtcHR5IHF1b3RlZCBuYW1lIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQYXJzZSB0ZXN0IG5hbWVzIGFuZCB0YWdzL3F1b3RlZCBzdHJpbmcgZm9sbG93ZWQgYnkgdGFnIGV4Y2x1c2lvbiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncy9MZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgaW4gdGVzdCBzcGVjIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQYXJzZSB0ZXN0IG5hbWVzIGFuZCB0YWdzL0xlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBpbiB0ZXN0IG5hbWUiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MvU2hvcnRlbmVkIGhpZGUgdGFncyBhcmUgc3BsaXQgYXBhcnQgd2hlbiBwYXJzaW5nIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQYXJzZSB0ZXN0IG5hbWVzIGFuZCB0YWdzL1Nob3J0ZW5lZCBoaWRlIHRhZ3MgYWxzbyBwcm9wZXJseSBoYW5kbGUgZXhjbHVzaW9uIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9lbXB0eSBhcmdzIGRvbid0IGNhdXNlIGEgY3Jhc2giIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL2RlZmF1bHQgLSBubyBhcmd1bWVudHMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL3Rlc3QgbGlzdHMvU3BlY2lmeSBvbmUgdGVzdCBjYXNlIHVzaW5nIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS90ZXN0IGxpc3RzL1NwZWNpZnkgb25lIHRlc3QgY2FzZSBleGNsdXNpb24gdXNpbmcgZXhjbHVkZToiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL3Rlc3QgbGlzdHMvU3BlY2lmeSBvbmUgdGVzdCBjYXNlIGV4Y2x1c2lvbiB1c2luZyB+IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9yZXBvcnRlci8tci9jb25zb2xlIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9yZXBvcnRlci8tci94bWwiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL3JlcG9ydGVyLy0tcmVwb3J0ZXIvanVuaXQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL3JlcG9ydGVyL09ubHkgb25lIHJlcG9ydGVyIGlzIGFjY2VwdGVkIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9yZXBvcnRlci9tdXN0IG1hdGNoIG9uZSBvZiB0aGUgYXZhaWxhYmxlIG9uZXMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL2RlYnVnZ2VyLy1iIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9kZWJ1Z2dlci8tLWJyZWFrIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9hYm9ydC8tYSBhYm9ydHMgYWZ0ZXIgZmlyc3QgZmFpbHVyZSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUvYWJvcnQvLXggMiBhYm9ydHMgYWZ0ZXIgdHdvIGZhaWx1cmVzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9hYm9ydC8teCBtdXN0IGJlIG51bWVyaWMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL2Fib3J0L3dhaXQtZm9yLWtleXByZXNzL0FjY2VwdGVkIG9wdGlvbnMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL2Fib3J0L3dhaXQtZm9yLWtleXByZXNzL2ludmFsaWQgb3B0aW9ucyBhcmUgcmVwb3J0ZWQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL25vdGhyb3cvLWUiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL25vdGhyb3cvLS1ub3Rocm93IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9vdXRwdXQgZmlsZW5hbWUvLW8gZmlsZW5hbWUiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL291dHB1dCBmaWxlbmFtZS8tLW91dCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUvY29tYmluYXRpb25zL1NpbmdsZSBjaGFyYWN0ZXIgZmxhZ3MgY2FuIGJlIGNvbWJpbmVkIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS91c2UtY29sb3VyL3dpdGhvdXQgb3B0aW9uIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS91c2UtY29sb3VyL2F1dG8iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL3VzZS1jb2xvdXIveWVzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS91c2UtY29sb3VyL25vIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS91c2UtY29sb3VyL2Vycm9yIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9CZW5jaG1hcmsgb3B0aW9ucy9zYW1wbGVzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9CZW5jaG1hcmsgb3B0aW9ucy9yZXNhbXBsZXMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL0JlbmNobWFyayBvcHRpb25zL2NvbmZpZGVuY2UtaW50ZXJ2YWwiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL0JlbmNobWFyayBvcHRpb25zL25vLWFuYWx5c2lzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9CZW5jaG1hcmsgb3B0aW9ucy93YXJtdXAtdGltZSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGVzdCB3aXRoIHNwZWNpYWwsIGNoYXJhY3RlcnMgJnF1b3Q7aW4gbmFtZSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgPC9maWxlPgotICA8ZmlsZSBwYXRoPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9TaW5nbGUgdmFsdWUiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkdlbmVyYXRvcnMgaW50ZXJuYWxzL1ByZXNldCB2YWx1ZXMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkdlbmVyYXRvcnMgaW50ZXJuYWxzL0dlbmVyYXRvciBjb21iaW5hdG9yIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9FeHBsaWNpdGx5IHR5cGVkIGdlbmVyYXRvciBzZXF1ZW5jZSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iR2VuZXJhdG9ycyBpbnRlcm5hbHMvRmlsdGVyIGdlbmVyYXRvciIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iR2VuZXJhdG9ycyBpbnRlcm5hbHMvVGFrZSBnZW5lcmF0b3IvVGFrZSBsZXNzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9UYWtlIGdlbmVyYXRvci9UYWtlIG1vcmUiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkdlbmVyYXRvcnMgaW50ZXJuYWxzL01hcCB3aXRoIGV4cGxpY2l0IHJldHVybiB0eXBlIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9NYXAgd2l0aCBkZWR1Y2VkIHJldHVybiB0eXBlIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9SZXBlYXQvU2luZ3VsYXIgcmVwZWF0IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9SZXBlYXQvQWN0dWFsIHJlcGVhdCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iR2VuZXJhdG9ycyBpbnRlcm5hbHMvUmFuZ2UvUG9zaXRpdmUgYXV0byBzdGVwL0ludGVnZXIiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkdlbmVyYXRvcnMgaW50ZXJuYWxzL1JhbmdlL05lZ2F0aXZlIGF1dG8gc3RlcC9JbnRlZ2VyIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9SYW5nZS9Qb3NpdGl2ZSBtYW51YWwgc3RlcC9JbnRlZ2VyL0V4YWN0IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9SYW5nZS9Qb3NpdGl2ZSBtYW51YWwgc3RlcC9JbnRlZ2VyL1NsaWdodGx5IG92ZXIgZW5kIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9SYW5nZS9Qb3NpdGl2ZSBtYW51YWwgc3RlcC9JbnRlZ2VyL1NsaWdodGx5IHVuZGVyIGVuZCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iR2VuZXJhdG9ycyBpbnRlcm5hbHMvUmFuZ2UvUG9zaXRpdmUgbWFudWFsIHN0ZXAvRmxvYXRpbmcgUG9pbnQvRXhhY3QiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkdlbmVyYXRvcnMgaW50ZXJuYWxzL1JhbmdlL1Bvc2l0aXZlIG1hbnVhbCBzdGVwL0Zsb2F0aW5nIFBvaW50L1NsaWdodGx5IG92ZXIgZW5kIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9SYW5nZS9Qb3NpdGl2ZSBtYW51YWwgc3RlcC9GbG9hdGluZyBQb2ludC9TbGlnaHRseSB1bmRlciBlbmQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkdlbmVyYXRvcnMgaW50ZXJuYWxzL1JhbmdlL05lZ2F0aXZlIG1hbnVhbCBzdGVwL0ludGVnZXIvRXhhY3QiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkdlbmVyYXRvcnMgaW50ZXJuYWxzL1JhbmdlL05lZ2F0aXZlIG1hbnVhbCBzdGVwL0ludGVnZXIvU2xpZ2h0bHkgb3ZlciBlbmQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkdlbmVyYXRvcnMgaW50ZXJuYWxzL1JhbmdlL05lZ2F0aXZlIG1hbnVhbCBzdGVwL0ludGVnZXIvU2xpZ2h0bHkgdW5kZXIgZW5kIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICA8L2ZpbGU+Ci0gIDxmaWxlIHBhdGg9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCI+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRyYWNrZXIiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRyYWNrZXIvc3VjY2Vzc2Z1bGx5IGNsb3NlIG9uZSBzZWN0aW9uIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUcmFja2VyL2ZhaWwgb25lIHNlY3Rpb24iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRyYWNrZXIvZmFpbCBvbmUgc2VjdGlvbi9yZS1lbnRlciBhZnRlciBmYWlsZWQgc2VjdGlvbiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVHJhY2tlci9mYWlsIG9uZSBzZWN0aW9uL3JlLWVudGVyIGFmdGVyIGZhaWxlZCBzZWN0aW9uIGFuZCBmaW5kIG5leHQgc2VjdGlvbiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVHJhY2tlci9zdWNjZXNzZnVsbHkgY2xvc2Ugb25lIHNlY3Rpb24sIHRoZW4gZmluZCBhbm90aGVyIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUcmFja2VyL3N1Y2Nlc3NmdWxseSBjbG9zZSBvbmUgc2VjdGlvbiwgdGhlbiBmaW5kIGFub3RoZXIvUmUtZW50ZXIgLSBza2lwcyBTMSBhbmQgZW50ZXJzIFMyIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUcmFja2VyL3N1Y2Nlc3NmdWxseSBjbG9zZSBvbmUgc2VjdGlvbiwgdGhlbiBmaW5kIGFub3RoZXIvUmUtZW50ZXIgLSBza2lwcyBTMSBhbmQgZW50ZXJzIFMyL1N1Y2Nlc3NmdWxseSBjbG9zZSBTMiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVHJhY2tlci9zdWNjZXNzZnVsbHkgY2xvc2Ugb25lIHNlY3Rpb24sIHRoZW4gZmluZCBhbm90aGVyL1JlLWVudGVyIC0gc2tpcHMgUzEgYW5kIGVudGVycyBTMi9mYWlsIFMyIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUcmFja2VyL29wZW4gYSBuZXN0ZWQgc2VjdGlvbiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgPC9maWxlPgotICA8ZmlsZSBwYXRoPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcCI+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkNvbXBhcmlzb24gb3BzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJPdXIgUENHIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGV4cGVjdGVkIHJlc3VsdHMgZm9yIGtub3duIHNlZWRzL0RlZmF1bHQgc2VlZGVkIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJPdXIgUENHIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGV4cGVjdGVkIHJlc3VsdHMgZm9yIGtub3duIHNlZWRzL1NwZWNpZmljIHNlZWQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gIDwvZmlsZT4KLSAgPGZpbGUgcGF0aD0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCI+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlN0cmluZ1JlZi9FbXB0eSBzdHJpbmciIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlN0cmluZ1JlZi9Gcm9tIHN0cmluZyBsaXRlcmFsIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJTdHJpbmdSZWYvRnJvbSBzdWItc3RyaW5nIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJTdHJpbmdSZWYvU3Vic3RyaW5ncy96ZXJvLWJhc2VkIHN1YnN0cmluZyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iU3RyaW5nUmVmL1N1YnN0cmluZ3Mvbm9uLXplcm8tYmFzZWQgc3Vic3RyaW5nIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJTdHJpbmdSZWYvU3Vic3RyaW5ncy9Qb2ludGVyIHZhbHVlcyBvZiBmdWxsIHJlZnMgc2hvdWxkIG1hdGNoIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJTdHJpbmdSZWYvU3Vic3RyaW5ncy9Qb2ludGVyIHZhbHVlcyBvZiBzdWJzdHJpbmcgcmVmcyBzaG91bGQgYWxzbyBtYXRjaCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iU3RyaW5nUmVmL1N1YnN0cmluZ3MvUGFzdCB0aGUgZW5kIHN1YnN0cmluZyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iU3RyaW5nUmVmL1N1YnN0cmluZ3MvU3Vic3RyaW5nIG9mZiB0aGUgZW5kIGFyZSB0cmltbWVkIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJTdHJpbmdSZWYvQ29tcGFyaXNvbnMgYXJlIGRlZXAiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlN0cmluZ1JlZi9mcm9tIHN0ZDo6c3RyaW5nL2ltcGxpY2l0bHkgY29uc3RydWN0ZWQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlN0cmluZ1JlZi9mcm9tIHN0ZDo6c3RyaW5nL2V4cGxpY2l0bHkgY29uc3RydWN0ZWQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlN0cmluZ1JlZi9mcm9tIHN0ZDo6c3RyaW5nL2Fzc2lnbmVkIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJTdHJpbmdSZWYvdG8gc3RkOjpzdHJpbmcvZXhwbGljaXRseSBjb25zdHJ1Y3RlZCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iU3RyaW5nUmVmL3RvIHN0ZDo6c3RyaW5nL2Fzc2lnbmVkIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJTdHJpbmdSZWYgYXQgY29tcGlsYXRpb24gdGltZS9TaW1wbGUgY29uc3RydWN0b3JzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJTdHJpbmdSZWYgYXQgY29tcGlsYXRpb24gdGltZS9VREwgY29uc3RydWN0aW9uIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICA8L2ZpbGU+Ci0gIDxmaWxlIHBhdGg9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZ01hbmlwLnRlc3RzLmNwcCI+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRyaW0gc3RyaW5ncyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0icmVwbGFjZUluUGxhY2UvcmVwbGFjZSBzaW5nbGUgY2hhciIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0icmVwbGFjZUluUGxhY2UvcmVwbGFjZSB0d28gY2hhcnMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InJlcGxhY2VJblBsYWNlL3JlcGxhY2UgZmlyc3QgY2hhciIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0icmVwbGFjZUluUGxhY2UvcmVwbGFjZSBsYXN0IGNoYXIiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InJlcGxhY2VJblBsYWNlL3JlcGxhY2UgYWxsIGNoYXJzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJyZXBsYWNlSW5QbGFjZS9yZXBsYWNlIG5vIGNoYXJzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJyZXBsYWNlSW5QbGFjZS9lc2NhcGUgJyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0ic3BsaXRTdHJpbmciIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gIDwvZmlsZT4KLSAgPGZpbGUgcGF0aD0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvVGFnLnRlc3RzLmNwcCI+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRhZyBhbGlhcyBjYW4gYmUgcmVnaXN0ZXJlZCBhZ2FpbnN0IHRhZyBwYXR0ZXJucy9UaGUgc2FtZSB0YWcgYWxpYXMgY2FuIG9ubHkgYmUgcmVnaXN0ZXJlZCBvbmNlIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUYWcgYWxpYXMgY2FuIGJlIHJlZ2lzdGVyZWQgYWdhaW5zdCB0YWcgcGF0dGVybnMvVGFnIGFsaWFzZXMgbXVzdCBiZSBvZiB0aGUgZm9ybSBbQG5hbWVdIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJhZGRpbmcgYSBoaWRlIHRhZyBpbXBsaWNpdGx5IGVuYWJsZXMgYWxsIG90aGVycyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0ic2hvcnRlbmVkIGhpZGUgdGFncyBhcmUgc3BsaXQgYXBhcnQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gIDwvZmlsZT4KLSAgPGZpbGUgcGF0aD0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvVG9TdHJpbmcudGVzdHMuY3BwIj4KLSAgICA8dGVzdENhc2UgbmFtZT0iRGlyZWN0bHkgY3JlYXRpbmcgYW4gRW51bUluZm8iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InBhcnNlRW51bXMvTm8gZW51bXMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InBhcnNlRW51bXMvT25lIGVudW0gdmFsdWUiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InBhcnNlRW51bXMvTXVsdGlwbGUgZW51bSB2YWx1ZXMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gIDwvZmlsZT4KLSAgPGZpbGUgcGF0aD0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCI+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlhtbEVuY29kZS9ub3JtYWwgc3RyaW5nIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJYbWxFbmNvZGUvZW1wdHkgc3RyaW5nIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJYbWxFbmNvZGUvc3RyaW5nIHdpdGggYW1wZXJzYW5kIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJYbWxFbmNvZGUvc3RyaW5nIHdpdGggbGVzcy10aGFuIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJYbWxFbmNvZGUvc3RyaW5nIHdpdGggZ3JlYXRlci10aGFuIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJYbWxFbmNvZGUvc3RyaW5nIHdpdGggcXVvdGVzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJYbWxFbmNvZGUvc3RyaW5nIHdpdGggY29udHJvbCBjaGFyICgxKSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iWG1sRW5jb2RlL3N0cmluZyB3aXRoIGNvbnRyb2wgY2hhciAoeDdGKSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgPC9maWxlPgotICA8ZmlsZSBwYXRoPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQXBwcm94LnRlc3RzLmNwcCI+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkEgY29tcGFyaXNvbiB0aGF0IHVzZXMgbGl0ZXJhbHMgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIGNvbnN0cnVjdG9yIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBYnNvbHV0ZSBtYXJnaW4iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkFwcHJveCBzZXR0ZXJzIHZhbGlkYXRlIHRoZWlyIGFyZ3VtZW50cyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQXBwcm94IHdpdGggZXhhY3RseS1yZXByZXNlbnRhYmxlIG1hcmdpbiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQXBwcm94aW1hdGUgUEkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkFwcHJveGltYXRlIGNvbXBhcmlzb25zIHdpdGggZGlmZmVyZW50IGVwc2lsb25zIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBcHByb3hpbWF0ZSBjb21wYXJpc29ucyB3aXRoIGZsb2F0cyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQXBwcm94aW1hdGUgY29tcGFyaXNvbnMgd2l0aCBpbnRzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBcHByb3hpbWF0ZSBjb21wYXJpc29ucyB3aXRoIG1peGVkIG51bWVyaWMgdHlwZXMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkNvbXBhcmlzb24gd2l0aCBleHBsaWNpdGx5IGNvbnZlcnRpYmxlIHR5cGVzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJEZWZhdWx0IHNjYWxlIGlzIGludmlzaWJsZSB0byBjb21wYXJpc29uIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJFcHNpbG9uIG9ubHkgYXBwbGllcyB0byBBcHByb3gncyB2YWx1ZSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iR3JlYXRlci10aGFuIGluZXF1YWxpdGllcyB3aXRoIGRpZmZlcmVudCBlcHNpbG9ucyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iTGVzcy10aGFuIGluZXF1YWxpdGllcyB3aXRoIGRpZmZlcmVudCBlcHNpbG9ucyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iU29tZSBzaW1wbGUgY29tcGFyaXNvbnMgYmV0d2VlbiBkb3VibGVzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJVc2UgYSBjdXN0b20gYXBwcm94IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICA8L2ZpbGU+Ci0gIDxmaWxlIHBhdGg9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9CREQudGVzdHMuY3BwIj4KLSAgICA8dGVzdENhc2UgbmFtZT0iU2NlbmFyaW86IEJERCB0ZXN0cyByZXF1aXJpbmcgRml4dHVyZXMgdG8gcHJvdmlkZSBjb21tb25seS1hY2Nlc3NlZCBkYXRhIG9yIG1ldGhvZHMvR2l2ZW46IE5vIG9wZXJhdGlvbnMgcHJlY2VkZSBtZSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iU2NlbmFyaW86IEJERCB0ZXN0cyByZXF1aXJpbmcgRml4dHVyZXMgdG8gcHJvdmlkZSBjb21tb25seS1hY2Nlc3NlZCBkYXRhIG9yIG1ldGhvZHMvR2l2ZW46IE5vIG9wZXJhdGlvbnMgcHJlY2VkZSBtZS9XaGVuOiBXZSBnZXQgdGhlIGNvdW50L1RoZW46IFN1YnNlcXVlbnRseSB2YWx1ZXMgYXJlIGhpZ2hlciIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iU2NlbmFyaW86IERvIHRoYXQgdGhpbmcgd2l0aCB0aGUgdGhpbmcvR2l2ZW46IFRoaXMgc3R1ZmYgZXhpc3RzL0FuZCBnaXZlbjogQW5kIHNvbWUgYXNzdW1wdGlvbi9XaGVuOiBJIGRvIHRoaXMvVGhlbjogaXQgc2hvdWxkIGRvIHRoaXMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlNjZW5hcmlvOiBEbyB0aGF0IHRoaW5nIHdpdGggdGhlIHRoaW5nL0dpdmVuOiBUaGlzIHN0dWZmIGV4aXN0cy9BbmQgZ2l2ZW46IEFuZCBzb21lIGFzc3VtcHRpb24vV2hlbjogSSBkbyB0aGlzL1RoZW46IGl0IHNob3VsZCBkbyB0aGlzL0FuZDogZG8gdGhhdCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iU2NlbmFyaW86IFRoaXMgaXMgYSByZWFsbHkgbG9uZyBzY2VuYXJpbyBuYW1lIHRvIHNlZSBob3cgdGhlIGxpc3QgY29tbWFuZCBkZWFscyB3aXRoIHdyYXBwaW5nL0dpdmVuOiBBIHNlY3Rpb24gbmFtZSB0aGF0IGlzIHNvIGxvbmcgdGhhdCBpdCBjYW5ub3QgZml0IGluIGEgc2luZ2xlIGNvbnNvbGUgd2lkdGgvV2hlbjogVGhlIHRlc3QgaGVhZGVycyBhcmUgcHJpbnRlZCBhcyBwYXJ0IG9mIHRoZSBub3JtYWwgcnVubmluZyBvZiB0aGUgc2NlbmFyaW8vVGhlbjogVGhlLCBkZWxpYmVyYXRlbHkgdmVyeSBsb25nIGFuZCBvdmVybHkgdmVyYm9zZSAoeW91IHNlZSB3aGF0IEkgZGlkIHRoZXJlPykgc2VjdGlvbiBuYW1lcyBtdXN0IHdyYXAsIGFsb25nIHdpdGggYW4gaW5kZW50IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJTY2VuYXJpbzogVmVjdG9yIHJlc2l6aW5nIGFmZmVjdHMgc2l6ZSBhbmQgY2FwYWNpdHkvR2l2ZW46IGFuIGVtcHR5IHZlY3RvciIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iU2NlbmFyaW86IFZlY3RvciByZXNpemluZyBhZmZlY3RzIHNpemUgYW5kIGNhcGFjaXR5L0dpdmVuOiBhbiBlbXB0eSB2ZWN0b3IvV2hlbjogaXQgaXMgbWFkZSBsYXJnZXIvVGhlbjogdGhlIHNpemUgYW5kIGNhcGFjaXR5IGdvIHVwIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJTY2VuYXJpbzogVmVjdG9yIHJlc2l6aW5nIGFmZmVjdHMgc2l6ZSBhbmQgY2FwYWNpdHkvR2l2ZW46IGFuIGVtcHR5IHZlY3Rvci9XaGVuOiBpdCBpcyBtYWRlIGxhcmdlci9UaGVuOiB0aGUgc2l6ZSBhbmQgY2FwYWNpdHkgZ28gdXAvQW5kIHdoZW46IGl0IGlzIG1hZGUgc21hbGxlciBhZ2Fpbi9UaGVuOiB0aGUgc2l6ZSBnb2VzIGRvd24gYnV0IHRoZSBjYXBhY2l0eSBzdGF5cyB0aGUgc2FtZSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iU2NlbmFyaW86IFZlY3RvciByZXNpemluZyBhZmZlY3RzIHNpemUgYW5kIGNhcGFjaXR5L0dpdmVuOiBhbiBlbXB0eSB2ZWN0b3IvV2hlbjogd2UgcmVzZXJ2ZSBtb3JlIHNwYWNlL1RoZW46IFRoZSBjYXBhY2l0eSBpcyBpbmNyZWFzZWQgYnV0IHRoZSBzaXplIHJlbWFpbnMgdGhlIHNhbWUiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gIDwvZmlsZT4KLSAgPGZpbGUgcGF0aD0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCI+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkEgTUVUSE9EX0FTX1RFU1RfQ0FTRSBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJSRVFVSVJFKHMgPT0gJnF1b3Q7d29ybGQmcXVvdDspIj4KLUZBSUxFRDoKLQlSRVFVSVJFKCBzID09ICJ3b3JsZCIgKQotd2l0aCBleHBhbnNpb246Ci0JImhlbGxvIiA9PSAid29ybGQiCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkEgTUVUSE9EX0FTX1RFU1RfQ0FTRSBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gVGVtcGxhdGVfRm9vJmx0O2Zsb2F0PiIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iUkVRVUlSRShUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEpIj4KLUZBSUxFRDoKLQlSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEgKQotd2l0aCBleHBhbnNpb246Ci0JMCA9PSAxCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBUZW1wbGF0ZV9Gb28mbHQ7aW50PiIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iUkVRVUlSRShUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEpIj4KLUZBSUxFRDoKLQlSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEgKQotd2l0aCBleHBhbnNpb246Ci0JMCA9PSAxCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBzdGQ6OnZlY3RvciZsdDtmbG9hdD4iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IlJFUVVJUkUoVGVtcGxhdGVfRml4dHVyZV8yJmx0O1Rlc3RUeXBlPjo6bV9hLnNpemUoKSA9PSAxKSI+Ci1GQUlMRUQ6Ci0JUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZV8yJmx0O1Rlc3RUeXBlPjo6bV9hLnNpemUoKSA9PSAxICkKLXdpdGggZXhwYW5zaW9uOgotCTAgPT0gMQotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gc3RkOjp2ZWN0b3ImbHQ7aW50PiIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iUkVRVUlSRShUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEpIj4KLUZBSUxFRDoKLQlSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEgKQotd2l0aCBleHBhbnNpb246Ci0JMCA9PSAxCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSBUZW1wbGF0ZV9Gb28mbHQ7ZmxvYXQ+IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gVGVtcGxhdGVfRm9vJmx0O2ludD4iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSBzdGQ6OnZlY3RvciZsdDtmbG9hdD4iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSBzdGQ6OnZlY3RvciZsdDtpbnQ+IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIFRlbXBsYXRlX0Zvb18yJmx0O2Zsb2F0LCA2PiIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iUkVRVUlSRShUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+e30ubV9hLnNpemUoKSAmbHQ7IDIpIj4KLUZBSUxFRDoKLQlSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+e30ubV9hLnNpemUoKSAmbHQ7IDIgKQotd2l0aCBleHBhbnNpb246Ci0JNiAmbHQ7IDIKLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBUZW1wbGF0ZV9Gb29fMiZsdDtpbnQsIDI+IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJSRVFVSVJFKFRlbXBsYXRlX0ZpeHR1cmVfMiZsdDtUZXN0VHlwZT57fS5tX2Euc2l6ZSgpICZsdDsgMikiPgotRkFJTEVEOgotCVJFUVVJUkUoIFRlbXBsYXRlX0ZpeHR1cmVfMiZsdDtUZXN0VHlwZT57fS5tX2Euc2l6ZSgpICZsdDsgMiApCi13aXRoIGV4cGFuc2lvbjoKLQkyICZsdDsgMgotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIHN0ZDo6YXJyYXkmbHQ7ZmxvYXQsIDY+IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJSRVFVSVJFKFRlbXBsYXRlX0ZpeHR1cmVfMiZsdDtUZXN0VHlwZT57fS5tX2Euc2l6ZSgpICZsdDsgMikiPgotRkFJTEVEOgotCVJFUVVJUkUoIFRlbXBsYXRlX0ZpeHR1cmVfMiZsdDtUZXN0VHlwZT57fS5tX2Euc2l6ZSgpICZsdDsgMiApCi13aXRoIGV4cGFuc2lvbjoKLQk2ICZsdDsgMgotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIHN0ZDo6YXJyYXkmbHQ7aW50LCAyPiIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iUkVRVUlSRShUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+e30ubV9hLnNpemUoKSAmbHQ7IDIpIj4KLUZBSUxFRDoKLQlSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+e30ubV9hLnNpemUoKSAmbHQ7IDIgKQotd2l0aCBleHBhbnNpb246Ci0JMiAmbHQ7IDIKLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSBUZW1wbGF0ZV9Gb29fMiZsdDtmbG9hdCw2PiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSBUZW1wbGF0ZV9Gb29fMiZsdDtpbnQsMj4iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gc3RkOjphcnJheSZsdDtmbG9hdCw2PiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSBzdGQ6OmFycmF5Jmx0O2ludCwyPiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBkb3VibGUiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IlJFUVVJUkUoVGVtcGxhdGVfRml4dHVyZSZsdDtUZXN0VHlwZT46Om1fYSA9PSAyKSI+Ci1GQUlMRUQ6Ci0JUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZSZsdDtUZXN0VHlwZT46Om1fYSA9PSAyICkKLXdpdGggZXhwYW5zaW9uOgotCTEuMCA9PSAyCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkEgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gZmxvYXQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IlJFUVVJUkUoVGVtcGxhdGVfRml4dHVyZSZsdDtUZXN0VHlwZT46Om1fYSA9PSAyKSI+Ci1GQUlMRUQ6Ci0JUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZSZsdDtUZXN0VHlwZT46Om1fYSA9PSAyICkKLXdpdGggZXhwYW5zaW9uOgotCTEuMGYgPT0gMgotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIGludCIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iUkVRVUlSRShUZW1wbGF0ZV9GaXh0dXJlJmx0O1Rlc3RUeXBlPjo6bV9hID09IDIpIj4KLUZBSUxFRDoKLQlSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlJmx0O1Rlc3RUeXBlPjo6bV9hID09IDIgKQotd2l0aCBleHBhbnNpb246Ci0JMSA9PSAyCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkEgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gZG91YmxlIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtIGZsb2F0IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtIGludCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gMSIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iUkVRVUlSRShOdHRwX0ZpeHR1cmUmbHQ7Vj46OnZhbHVlID09IDApIj4KLUZBSUxFRDoKLQlSRVFVSVJFKCBOdHRwX0ZpeHR1cmUmbHQ7Vj46OnZhbHVlID09IDAgKQotd2l0aCBleHBhbnNpb246Ci0JMSA9PSAwCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkEgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIDMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IlJFUVVJUkUoTnR0cF9GaXh0dXJlJmx0O1Y+Ojp2YWx1ZSA9PSAwKSI+Ci1GQUlMRUQ6Ci0JUkVRVUlSRSggTnR0cF9GaXh0dXJlJmx0O1Y+Ojp2YWx1ZSA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotCTMgPT0gMAotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSA2IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJSRVFVSVJFKE50dHBfRml4dHVyZSZsdDtWPjo6dmFsdWUgPT0gMCkiPgotRkFJTEVEOgotCVJFUVVJUkUoIE50dHBfRml4dHVyZSZsdDtWPjo6dmFsdWUgPT0gMCApCi13aXRoIGV4cGFuc2lvbjoKLQk2ID09IDAKLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gMSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gMyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gNiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQSBURVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IlJFUVVJUkUobV9hID09IDIpIj4KLUZBSUxFRDoKLQlSRVFVSVJFKCBtX2EgPT0gMiApCi13aXRoIGV4cGFuc2lvbjoKLQkxID09IDIKLUNsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iQSBURVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlIHRlc3QgY2FzZSBtZXRob2Qgd2l0aCB0ZXN0IHR5cGVzIHNwZWNpZmllZCBpbnNpZGUgc3RkOjp0dXBsZSAtIE15VHlwZXMgLSAwIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZSB0ZXN0IGNhc2UgbWV0aG9kIHdpdGggdGVzdCB0eXBlcyBzcGVjaWZpZWQgaW5zaWRlIHN0ZDo6dHVwbGUgLSBNeVR5cGVzIC0gMSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGVtcGxhdGUgdGVzdCBjYXNlIG1ldGhvZCB3aXRoIHRlc3QgdHlwZXMgc3BlY2lmaWVkIGluc2lkZSBzdGQ6OnR1cGxlIC0gTXlUeXBlcyAtIDIiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gIDwvZmlsZT4KLSAgPGZpbGUgcGF0aD0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NvbXBpbGF0aW9uLnRlc3RzLmNwcCI+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IiMxMDI3IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSIjMTAyNzogQml0ZmllbGRzIGNhbiBiZSBjYXB0dXJlZCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iIzExNDciIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IiMxMjM4IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSIjMTI0NSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iIzE0MDMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IiMxNTQ4IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSIjODA5IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSIjODMzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSIjODcyIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJPcHRpb25hbGx5IHN0YXRpYyBhc3NlcnRpb25zIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICA8L2ZpbGU+Ci0gIDxmaWxlIHBhdGg9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Db25kaXRpb24udGVzdHMuY3BwIj4KLSAgICA8dGVzdENhc2UgbmFtZT0iJ05vdCcgY2hlY2tzIHRoYXQgc2hvdWxkIGZhaWwiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLKGZhbHNlICE9IGZhbHNlKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIGZhbHNlICE9IGZhbHNlICkKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0sodHJ1ZSAhPSB0cnVlKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIHRydWUgIT0gdHJ1ZSApCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLKCF0cnVlKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soICF0cnVlICkKLXdpdGggZXhwYW5zaW9uOgotCWZhbHNlCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLX0ZBTFNFKCEodHJ1ZSkpIj4KLUZBSUxFRDoKLQlDSEVDS19GQUxTRSggdHJ1ZSApCi13aXRoIGV4cGFuc2lvbjoKLQkhdHJ1ZQotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyghdHJ1ZVZhbHVlKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soICF0cnVlVmFsdWUgKQotd2l0aCBleHBhbnNpb246Ci0JZmFsc2UKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0tfRkFMU0UoISh0cnVlVmFsdWUpKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0tfRkFMU0UoIHRydWVWYWx1ZSApCi13aXRoIGV4cGFuc2lvbjoKLQkhdHJ1ZQotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyghKDEgPT0gMSkpIj4KLUZBSUxFRDoKLQlDSEVDSyggISgxID09IDEpICkKLXdpdGggZXhwYW5zaW9uOgotCWZhbHNlCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLX0ZBTFNFKCEoMSA9PSAxKSkiPgotRkFJTEVEOgotCUNIRUNLX0ZBTFNFKCAxID09IDEgKQotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iJ05vdCcgY2hlY2tzIHRoYXQgc2hvdWxkIHN1Y2NlZWQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkNvbXBhcmlzb25zIGJldHdlZW4gaW50cyB3aGVyZSBvbmUgc2lkZSBpcyBjb21wdXRlZCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQ29tcGFyaXNvbnMgYmV0d2VlbiB1bnNpZ25lZCBpbnRzIGFuZCBuZWdhdGl2ZSBzaWduZWQgaW50cyBtYXRjaCBjKysgc3RhbmRhcmQgYmVoYXZpb3VyIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJDb21wYXJpc29ucyB3aXRoIGludCBsaXRlcmFscyBkb24ndCB3YXJuIHdoZW4gbWl4aW5nIHNpZ25lZC8gdW5zaWduZWQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkVxdWFsaXR5IGNoZWNrcyB0aGF0IHNob3VsZCBmYWlsIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8c2tpcHBlZCBtZXNzYWdlPSJDSEVDSyhkYXRhLmludF9zZXZlbiA9PSA2KSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIGRhdGEuaW50X3NldmVuID09IDYgKQotd2l0aCBleHBhbnNpb246Ci0JNyA9PSA2Ci1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvc2tpcHBlZD4KLSAgICAgIDxza2lwcGVkIG1lc3NhZ2U9IkNIRUNLKGRhdGEuaW50X3NldmVuID09IDgpIj4KLUZBSUxFRDoKLQlDSEVDSyggZGF0YS5pbnRfc2V2ZW4gPT0gOCApCi13aXRoIGV4cGFuc2lvbjoKLQk3ID09IDgKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9za2lwcGVkPgotICAgICAgPHNraXBwZWQgbWVzc2FnZT0iQ0hFQ0soZGF0YS5pbnRfc2V2ZW4gPT0gMCkiPgotRkFJTEVEOgotCUNIRUNLKCBkYXRhLmludF9zZXZlbiA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotCTcgPT0gMAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L3NraXBwZWQ+Ci0gICAgICA8c2tpcHBlZCBtZXNzYWdlPSJDSEVDSyhkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lID09IEFwcHJveCggOS4xMWYgKSkiPgotRkFJTEVEOgotCUNIRUNLKCBkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lID09IEFwcHJveCggOS4xMWYgKSApCi13aXRoIGV4cGFuc2lvbjoKLQk5LjFmID09IEFwcHJveCggOS4xMDk5OTk2NTY3ICkKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9za2lwcGVkPgotICAgICAgPHNraXBwZWQgbWVzc2FnZT0iQ0hFQ0soZGF0YS5mbG9hdF9uaW5lX3BvaW50X29uZSA9PSBBcHByb3goIDkuMGYgKSkiPgotRkFJTEVEOgotCUNIRUNLKCBkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lID09IEFwcHJveCggOS4wZiApICkKLXdpdGggZXhwYW5zaW9uOgotCTkuMWYgPT0gQXBwcm94KCA5LjAgKQotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L3NraXBwZWQ+Ci0gICAgICA8c2tpcHBlZCBtZXNzYWdlPSJDSEVDSyhkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lID09IEFwcHJveCggMSApKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIGRhdGEuZmxvYXRfbmluZV9wb2ludF9vbmUgPT0gQXBwcm94KCAxICkgKQotd2l0aCBleHBhbnNpb246Ci0JOS4xZiA9PSBBcHByb3goIDEuMCApCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvc2tpcHBlZD4KLSAgICAgIDxza2lwcGVkIG1lc3NhZ2U9IkNIRUNLKGRhdGEuZmxvYXRfbmluZV9wb2ludF9vbmUgPT0gQXBwcm94KCAwICkpIj4KLUZBSUxFRDoKLQlDSEVDSyggZGF0YS5mbG9hdF9uaW5lX3BvaW50X29uZSA9PSBBcHByb3goIDAgKSApCi13aXRoIGV4cGFuc2lvbjoKLQk5LjFmID09IEFwcHJveCggMC4wICkKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9za2lwcGVkPgotICAgICAgPHNraXBwZWQgbWVzc2FnZT0iQ0hFQ0soZGF0YS5kb3VibGVfcGkgPT0gQXBwcm94KCAzLjE0MTUgKSkiPgotRkFJTEVEOgotCUNIRUNLKCBkYXRhLmRvdWJsZV9waSA9PSBBcHByb3goIDMuMTQxNSApICkKLXdpdGggZXhwYW5zaW9uOgotCTMuMTQxNTkyNjUzNSA9PSBBcHByb3goIDMuMTQxNSApCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvc2tpcHBlZD4KLSAgICAgIDxza2lwcGVkIG1lc3NhZ2U9IkNIRUNLKGRhdGEuc3RyX2hlbGxvID09ICZxdW90O2dvb2RieWUmcXVvdDspIj4KLUZBSUxFRDoKLQlDSEVDSyggZGF0YS5zdHJfaGVsbG8gPT0gImdvb2RieWUiICkKLXdpdGggZXhwYW5zaW9uOgotCSJoZWxsbyIgPT0gImdvb2RieWUiCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvc2tpcHBlZD4KLSAgICAgIDxza2lwcGVkIG1lc3NhZ2U9IkNIRUNLKGRhdGEuc3RyX2hlbGxvID09ICZxdW90O2hlbGwmcXVvdDspIj4KLUZBSUxFRDoKLQlDSEVDSyggZGF0YS5zdHJfaGVsbG8gPT0gImhlbGwiICkKLXdpdGggZXhwYW5zaW9uOgotCSJoZWxsbyIgPT0gImhlbGwiCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvc2tpcHBlZD4KLSAgICAgIDxza2lwcGVkIG1lc3NhZ2U9IkNIRUNLKGRhdGEuc3RyX2hlbGxvID09ICZxdW90O2hlbGxvMSZxdW90OykiPgotRkFJTEVEOgotCUNIRUNLKCBkYXRhLnN0cl9oZWxsbyA9PSAiaGVsbG8xIiApCi13aXRoIGV4cGFuc2lvbjoKLQkiaGVsbG8iID09ICJoZWxsbzEiCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvc2tpcHBlZD4KLSAgICAgIDxza2lwcGVkIG1lc3NhZ2U9IkNIRUNLKGRhdGEuc3RyX2hlbGxvLnNpemUoKSA9PSA2KSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIGRhdGEuc3RyX2hlbGxvLnNpemUoKSA9PSA2ICkKLXdpdGggZXhwYW5zaW9uOgotCTUgPT0gNgotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L3NraXBwZWQ+Ci0gICAgICA8c2tpcHBlZCBtZXNzYWdlPSJDSEVDSyh4ID09IEFwcHJveCggMS4zMDEgKSkiPgotRkFJTEVEOgotCUNIRUNLKCB4ID09IEFwcHJveCggMS4zMDEgKSApCi13aXRoIGV4cGFuc2lvbjoKLQkxLjMgPT0gQXBwcm94KCAxLjMwMSApCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvc2tpcHBlZD4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJFcXVhbGl0eSBjaGVja3MgdGhhdCBzaG91bGQgc3VjY2VlZCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iSW5lcXVhbGl0eSBjaGVja3MgdGhhdCBzaG91bGQgZmFpbCIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPHNraXBwZWQgbWVzc2FnZT0iQ0hFQ0soZGF0YS5pbnRfc2V2ZW4gIT0gNykiPgotRkFJTEVEOgotCUNIRUNLKCBkYXRhLmludF9zZXZlbiAhPSA3ICkKLXdpdGggZXhwYW5zaW9uOgotCTcgIT0gNwotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L3NraXBwZWQ+Ci0gICAgICA8c2tpcHBlZCBtZXNzYWdlPSJDSEVDSyhkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lICE9IEFwcHJveCggOS4xZiApKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIGRhdGEuZmxvYXRfbmluZV9wb2ludF9vbmUgIT0gQXBwcm94KCA5LjFmICkgKQotd2l0aCBleHBhbnNpb246Ci0JOS4xZiAhPSBBcHByb3goIDkuMTAwMDAwMzgxNSApCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvc2tpcHBlZD4KLSAgICAgIDxza2lwcGVkIG1lc3NhZ2U9IkNIRUNLKGRhdGEuZG91YmxlX3BpICE9IEFwcHJveCggMy4xNDE1OTI2NTM1ICkpIj4KLUZBSUxFRDoKLQlDSEVDSyggZGF0YS5kb3VibGVfcGkgIT0gQXBwcm94KCAzLjE0MTU5MjY1MzUgKSApCi13aXRoIGV4cGFuc2lvbjoKLQkzLjE0MTU5MjY1MzUgIT0gQXBwcm94KCAzLjE0MTU5MjY1MzUgKQotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L3NraXBwZWQ+Ci0gICAgICA8c2tpcHBlZCBtZXNzYWdlPSJDSEVDSyhkYXRhLnN0cl9oZWxsbyAhPSAmcXVvdDtoZWxsbyZxdW90OykiPgotRkFJTEVEOgotCUNIRUNLKCBkYXRhLnN0cl9oZWxsbyAhPSAiaGVsbG8iICkKLXdpdGggZXhwYW5zaW9uOgotCSJoZWxsbyIgIT0gImhlbGxvIgotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L3NraXBwZWQ+Ci0gICAgICA8c2tpcHBlZCBtZXNzYWdlPSJDSEVDSyhkYXRhLnN0cl9oZWxsby5zaXplKCkgIT0gNSkiPgotRkFJTEVEOgotCUNIRUNLKCBkYXRhLnN0cl9oZWxsby5zaXplKCkgIT0gNSApCi13aXRoIGV4cGFuc2lvbjoKLQk1ICE9IDUKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9za2lwcGVkPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkluZXF1YWxpdHkgY2hlY2tzIHRoYXQgc2hvdWxkIHN1Y2NlZWQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Ik9yZGVyaW5nIGNvbXBhcmlzb24gY2hlY2tzIHRoYXQgc2hvdWxkIGZhaWwiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLKGRhdGEuaW50X3NldmVuID4gNykiPgotRkFJTEVEOgotCUNIRUNLKCBkYXRhLmludF9zZXZlbiA+IDcgKQotd2l0aCBleHBhbnNpb246Ci0JNyA+IDcKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0soZGF0YS5pbnRfc2V2ZW4gJmx0OyA3KSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIGRhdGEuaW50X3NldmVuICZsdDsgNyApCi13aXRoIGV4cGFuc2lvbjoKLQk3ICZsdDsgNwotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyhkYXRhLmludF9zZXZlbiA+IDgpIj4KLUZBSUxFRDoKLQlDSEVDSyggZGF0YS5pbnRfc2V2ZW4gPiA4ICkKLXdpdGggZXhwYW5zaW9uOgotCTcgPiA4Ci1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLKGRhdGEuaW50X3NldmVuICZsdDsgNikiPgotRkFJTEVEOgotCUNIRUNLKCBkYXRhLmludF9zZXZlbiAmbHQ7IDYgKQotd2l0aCBleHBhbnNpb246Ci0JNyAmbHQ7IDYKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0soZGF0YS5pbnRfc2V2ZW4gJmx0OyAwKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIGRhdGEuaW50X3NldmVuICZsdDsgMCApCi13aXRoIGV4cGFuc2lvbjoKLQk3ICZsdDsgMAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyhkYXRhLmludF9zZXZlbiAmbHQ7IC0xKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIGRhdGEuaW50X3NldmVuICZsdDsgLTEgKQotd2l0aCBleHBhbnNpb246Ci0JNyAmbHQ7IC0xCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLKGRhdGEuaW50X3NldmVuID49IDgpIj4KLUZBSUxFRDoKLQlDSEVDSyggZGF0YS5pbnRfc2V2ZW4gPj0gOCApCi13aXRoIGV4cGFuc2lvbjoKLQk3ID49IDgKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0soZGF0YS5pbnRfc2V2ZW4gJmx0Oz0gNikiPgotRkFJTEVEOgotCUNIRUNLKCBkYXRhLmludF9zZXZlbiAmbHQ7PSA2ICkKLXdpdGggZXhwYW5zaW9uOgotCTcgJmx0Oz0gNgotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyhkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lICZsdDsgOSkiPgotRkFJTEVEOgotCUNIRUNLKCBkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lICZsdDsgOSApCi13aXRoIGV4cGFuc2lvbjoKLQk5LjFmICZsdDsgOQotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyhkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lID4gMTApIj4KLUZBSUxFRDoKLQlDSEVDSyggZGF0YS5mbG9hdF9uaW5lX3BvaW50X29uZSA+IDEwICkKLXdpdGggZXhwYW5zaW9uOgotCTkuMWYgPiAxMAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyhkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lID4gOS4yKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIGRhdGEuZmxvYXRfbmluZV9wb2ludF9vbmUgPiA5LjIgKQotd2l0aCBleHBhbnNpb246Ci0JOS4xZiA+IDkuMgotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyhkYXRhLnN0cl9oZWxsbyA+ICZxdW90O2hlbGxvJnF1b3Q7KSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIGRhdGEuc3RyX2hlbGxvID4gImhlbGxvIiApCi13aXRoIGV4cGFuc2lvbjoKLQkiaGVsbG8iID4gImhlbGxvIgotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyhkYXRhLnN0cl9oZWxsbyAmbHQ7ICZxdW90O2hlbGxvJnF1b3Q7KSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIGRhdGEuc3RyX2hlbGxvICZsdDsgImhlbGxvIiApCi13aXRoIGV4cGFuc2lvbjoKLQkiaGVsbG8iICZsdDsgImhlbGxvIgotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyhkYXRhLnN0cl9oZWxsbyA+ICZxdW90O2hlbGxwJnF1b3Q7KSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIGRhdGEuc3RyX2hlbGxvID4gImhlbGxwIiApCi13aXRoIGV4cGFuc2lvbjoKLQkiaGVsbG8iID4gImhlbGxwIgotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyhkYXRhLnN0cl9oZWxsbyA+ICZxdW90O3omcXVvdDspIj4KLUZBSUxFRDoKLQlDSEVDSyggZGF0YS5zdHJfaGVsbG8gPiAieiIgKQotd2l0aCBleHBhbnNpb246Ci0JImhlbGxvIiA+ICJ6IgotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyhkYXRhLnN0cl9oZWxsbyAmbHQ7ICZxdW90O2hlbGxtJnF1b3Q7KSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIGRhdGEuc3RyX2hlbGxvICZsdDsgImhlbGxtIiApCi13aXRoIGV4cGFuc2lvbjoKLQkiaGVsbG8iICZsdDsgImhlbGxtIgotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyhkYXRhLnN0cl9oZWxsbyAmbHQ7ICZxdW90O2EmcXVvdDspIj4KLUZBSUxFRDoKLQlDSEVDSyggZGF0YS5zdHJfaGVsbG8gJmx0OyAiYSIgKQotd2l0aCBleHBhbnNpb246Ci0JImhlbGxvIiAmbHQ7ICJhIgotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyhkYXRhLnN0cl9oZWxsbyA+PSAmcXVvdDt6JnF1b3Q7KSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIGRhdGEuc3RyX2hlbGxvID49ICJ6IiApCi13aXRoIGV4cGFuc2lvbjoKLQkiaGVsbG8iID49ICJ6IgotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyhkYXRhLnN0cl9oZWxsbyAmbHQ7PSAmcXVvdDthJnF1b3Q7KSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIGRhdGEuc3RyX2hlbGxvICZsdDs9ICJhIiApCi13aXRoIGV4cGFuc2lvbjoKLQkiaGVsbG8iICZsdDs9ICJhIgotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iT3JkZXJpbmcgY29tcGFyaXNvbiBjaGVja3MgdGhhdCBzaG91bGQgc3VjY2VlZCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUG9pbnRlcnMgY2FuIGJlIGNvbXBhcmVkIHRvIG51bGwiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9ImNvbXBhcmlzb25zIGJldHdlZW4gY29uc3QgaW50IHZhcmlhYmxlcyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iY29tcGFyaXNvbnMgYmV0d2VlbiBpbnQgdmFyaWFibGVzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICA8L2ZpbGU+Ci0gIDxmaWxlIHBhdGg9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9EZWNvbXBvc2l0aW9uLnRlc3RzLmNwcCI+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IiMxMDA1OiBDb21wYXJpbmcgcG9pbnRlciB0byBpbnQgYW5kIGxvbmcgKE5VTEwgY2FuIGJlIGVpdGhlciBvbiB2YXJpb3VzIHN5c3RlbXMpIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJSZWNvbnN0cnVjdGlvbiBzaG91bGQgYmUgYmFzZWQgb24gc3RyaW5naWZpY2F0aW9uOiAjOTE0IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyh0cnV0aHkoZmFsc2UpKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIHRydXRoeShmYWxzZSkgKQotd2l0aCBleHBhbnNpb246Ci0JSGV5LCBpdHMgdHJ1dGh5IQotRGVjb21wb3NpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gIDwvZmlsZT4KLSAgPGZpbGUgcGF0aD0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0VudW1Ub1N0cmluZy50ZXN0cy5jcHAiPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJFbnVtcyBjYW4gcXVpY2tseSBoYXZlIHN0cmluZ2lmaWNhdGlvbiBlbmFibGVkIHVzaW5nIFJFR0lTVEVSX0VOVU0iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkVudW1zIGluIG5hbWVzcGFjZXMgY2FuIHF1aWNrbHkgaGF2ZSBzdHJpbmdpZmljYXRpb24gZW5hYmxlZCB1c2luZyBSRUdJU1RFUl9FTlVNIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJ0b1N0cmluZyhlbnVtIGNsYXNzIHcvb3BlcmF0b3ImbHQ7Jmx0OykiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InRvU3RyaW5nKGVudW0gY2xhc3MpIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJ0b1N0cmluZyhlbnVtIHcvb3BlcmF0b3ImbHQ7Jmx0OykiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InRvU3RyaW5nKGVudW0pIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICA8L2ZpbGU+Ci0gIDxmaWxlIHBhdGg9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIj4KLSAgICA8dGVzdENhc2UgbmFtZT0iIzc0OCAtIGNhcHR1cmVzIHdpdGggdW5leHBlY3RlZCBleGNlcHRpb25zL291dHNpZGUgYXNzZXJ0aW9ucyIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPHNraXBwZWQgbWVzc2FnZT0iVEVTVF9DQVNFKCkiPgotRkFJTEVEOgotZXhwZWN0ZWQgZXhjZXB0aW9uCi1hbnN3ZXIgOj0gNDIKLUV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9za2lwcGVkPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IiM3NDggLSBjYXB0dXJlcyB3aXRoIHVuZXhwZWN0ZWQgZXhjZXB0aW9ucy9pbnNpZGUgUkVRVUlSRV9OT1RIUk9XIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8c2tpcHBlZCBtZXNzYWdlPSJSRVFVSVJFX05PVEhST1codGhpc1Rocm93cygpKSI+Ci1GQUlMRUQ6Ci0JUkVRVUlSRV9OT1RIUk9XKCB0aGlzVGhyb3dzKCkgKQotZXhwZWN0ZWQgZXhjZXB0aW9uCi1hbnN3ZXIgOj0gNDIKLUV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9za2lwcGVkPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IiM3NDggLSBjYXB0dXJlcyB3aXRoIHVuZXhwZWN0ZWQgZXhjZXB0aW9ucy9pbnNpZGUgUkVRVUlSRV9USFJPV1MiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkFuIHVuY2hlY2tlZCBleGNlcHRpb24gcmVwb3J0cyB0aGUgbGluZSBvZiB0aGUgbGFzdCBhc3NlcnRpb24iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxlcnJvciBtZXNzYWdlPSIoe1Vua25vd24gZXhwcmVzc2lvbiBhZnRlciB0aGUgcmVwb3J0ZWQgbGluZX0pIj4KLUZBSUxFRDoKLQl7VW5rbm93biBleHByZXNzaW9uIGFmdGVyIHRoZSByZXBvcnRlZCBsaW5lfQotdW5leHBlY3RlZCBleGNlcHRpb24KLUV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9lcnJvcj4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJDdXN0b20gZXhjZXB0aW9ucyBjYW4gYmUgdHJhbnNsYXRlZCB3aGVuIHRlc3RpbmcgZm9yIG5vdGhyb3ciIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxlcnJvciBtZXNzYWdlPSJSRVFVSVJFX05PVEhST1codGhyb3dDdXN0b20oKSkiPgotRkFJTEVEOgotCVJFUVVJUkVfTk9USFJPVyggdGhyb3dDdXN0b20oKSApCi1jdXN0b20gZXhjZXB0aW9uIC0gbm90IHN0ZAotRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2Vycm9yPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkN1c3RvbSBleGNlcHRpb25zIGNhbiBiZSB0cmFuc2xhdGVkIHdoZW4gdGVzdGluZyBmb3IgdGhyb3dpbmcgYXMgc29tZXRoaW5nIGVsc2UiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxlcnJvciBtZXNzYWdlPSJSRVFVSVJFX1RIUk9XU19BUyh0aHJvd0N1c3RvbSgpLCBzdGQ6OmV4Y2VwdGlvbikiPgotRkFJTEVEOgotCVJFUVVJUkVfVEhST1dTX0FTKCB0aHJvd0N1c3RvbSgpLCBzdGQ6OmV4Y2VwdGlvbiApCi1jdXN0b20gZXhjZXB0aW9uIC0gbm90IHN0ZAotRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2Vycm9yPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkN1c3RvbSBzdGQtZXhjZXB0aW9ucyBjYW4gYmUgY3VzdG9tIHRyYW5zbGF0ZWQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxlcnJvciBtZXNzYWdlPSJURVNUX0NBU0UoKSI+Ci1GQUlMRUQ6Ci1jdXN0b20gc3RkIGV4Y2VwdGlvbgotRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2Vycm9yPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkV4Y2VwdGlvbiBtZXNzYWdlcyBjYW4gYmUgdGVzdGVkIGZvci9leGFjdCBtYXRjaCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iRXhjZXB0aW9uIG1lc3NhZ2VzIGNhbiBiZSB0ZXN0ZWQgZm9yL2RpZmZlcmVudCBjYXNlIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJFeGNlcHRpb24gbWVzc2FnZXMgY2FuIGJlIHRlc3RlZCBmb3Ivd2lsZGNhcmRlZCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iRXhwZWN0ZWQgZXhjZXB0aW9ucyB0aGF0IGRvbid0IHRocm93IG9yIHVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBmYWlsIHRoZSB0ZXN0IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZXJyb3IgbWVzc2FnZT0iQ0hFQ0tfVEhST1dTX0FTKHRoaXNUaHJvd3MoKSwgc3RkOjpzdHJpbmcpIj4KLUZBSUxFRDoKLQlDSEVDS19USFJPV1NfQVMoIHRoaXNUaHJvd3MoKSwgc3RkOjpzdHJpbmcgKQotZXhwZWN0ZWQgZXhjZXB0aW9uCi1FeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZXJyb3I+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDS19USFJPV1NfQVModGhpc0RvZXNudFRocm93KCksIHN0ZDo6ZG9tYWluX2Vycm9yKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0tfVEhST1dTX0FTKCB0aGlzRG9lc250VGhyb3coKSwgc3RkOjpkb21haW5fZXJyb3IgKQotRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZXJyb3IgbWVzc2FnZT0iQ0hFQ0tfTk9USFJPVyh0aGlzVGhyb3dzKCkpIj4KLUZBSUxFRDoKLQlDSEVDS19OT1RIUk9XKCB0aGlzVGhyb3dzKCkgKQotZXhwZWN0ZWQgZXhjZXB0aW9uCi1FeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZXJyb3I+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iTWlzbWF0Y2hpbmcgZXhjZXB0aW9uIG1lc3NhZ2VzIGZhaWxpbmcgdGhlIHRlc3QiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IlJFUVVJUkVfVEhST1dTX1dJVEgodGhpc1Rocm93cygpLCAmcXVvdDtzaG91bGQgZmFpbCZxdW90OykiPgotRkFJTEVEOgotCVJFUVVJUkVfVEhST1dTX1dJVEgoIHRoaXNUaHJvd3MoKSwgInNob3VsZCBmYWlsIiApCi13aXRoIGV4cGFuc2lvbjoKLQkiZXhwZWN0ZWQgZXhjZXB0aW9uIiBlcXVhbHM6ICJzaG91bGQgZmFpbCIKLUV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Ik5vbi1zdGQgZXhjZXB0aW9ucyBjYW4gYmUgdHJhbnNsYXRlZCIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGVycm9yIG1lc3NhZ2U9IlRFU1RfQ0FTRSgpIj4KLUZBSUxFRDoKLWN1c3RvbSBleGNlcHRpb24KLUV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9lcnJvcj4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUaHJvd24gc3RyaW5nIGxpdGVyYWxzIGFyZSB0cmFuc2xhdGVkIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZXJyb3IgbWVzc2FnZT0iVEVTVF9DQVNFKCkiPgotRkFJTEVEOgotRm9yIHNvbWUgcmVhc29uIHNvbWVvbmUgaXMgdGhyb3dpbmcgYSBzdHJpbmcgbGl0ZXJhbCEKLUV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9lcnJvcj4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJVbmV4cGVjdGVkIGV4Y2VwdGlvbnMgY2FuIGJlIHRyYW5zbGF0ZWQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxlcnJvciBtZXNzYWdlPSJURVNUX0NBU0UoKSI+Ci1GQUlMRUQ6Ci0zLjE0Ci1FeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZXJyb3I+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iV2hlbiBjaGVja2VkIGV4Y2VwdGlvbnMgYXJlIHRocm93biB0aGV5IGNhbiBiZSBleHBlY3RlZCBvciB1bmV4cGVjdGVkIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJXaGVuIHVuY2hlY2tlZCBleGNlcHRpb25zIGFyZSB0aHJvd24gZGlyZWN0bHkgdGhleSBhcmUgYWx3YXlzIGZhaWx1cmVzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZXJyb3IgbWVzc2FnZT0iVEVTVF9DQVNFKCkiPgotRkFJTEVEOgotdW5leHBlY3RlZCBleGNlcHRpb24KLUV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9lcnJvcj4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJXaGVuIHVuY2hlY2tlZCBleGNlcHRpb25zIGFyZSB0aHJvd24gZHVyaW5nIGEgQ0hFQ0sgdGhlIHRlc3Qgc2hvdWxkIGNvbnRpbnVlIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZXJyb3IgbWVzc2FnZT0iQ0hFQ0sodGhpc1Rocm93cygpID09IDApIj4KLUZBSUxFRDoKLQlDSEVDSyggdGhpc1Rocm93cygpID09IDAgKQotZXhwZWN0ZWQgZXhjZXB0aW9uCi1FeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZXJyb3I+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iV2hlbiB1bmNoZWNrZWQgZXhjZXB0aW9ucyBhcmUgdGhyb3duIGR1cmluZyBhIFJFUVVJUkUgdGhlIHRlc3Qgc2hvdWxkIGFib3J0IGZhaWwiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxlcnJvciBtZXNzYWdlPSJSRVFVSVJFKHRoaXNUaHJvd3MoKSA9PSAwKSI+Ci1GQUlMRUQ6Ci0JUkVRVUlSRSggdGhpc1Rocm93cygpID09IDAgKQotZXhwZWN0ZWQgZXhjZXB0aW9uCi1FeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZXJyb3I+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iV2hlbiB1bmNoZWNrZWQgZXhjZXB0aW9ucyBhcmUgdGhyb3duIGZyb20gZnVuY3Rpb25zIHRoZXkgYXJlIGFsd2F5cyBmYWlsdXJlcyIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGVycm9yIG1lc3NhZ2U9IkNIRUNLKHRoaXNUaHJvd3MoKSA9PSAwKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIHRoaXNUaHJvd3MoKSA9PSAwICkKLWV4cGVjdGVkIGV4Y2VwdGlvbgotRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2Vycm9yPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IldoZW4gdW5jaGVja2VkIGV4Y2VwdGlvbnMgYXJlIHRocm93biBmcm9tIHNlY3Rpb25zIHRoZXkgYXJlIGFsd2F5cyBmYWlsdXJlcy9zZWN0aW9uIG5hbWUiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxlcnJvciBtZXNzYWdlPSJURVNUX0NBU0UoKSI+Ci1GQUlMRUQ6Ci11bmV4cGVjdGVkIGV4Y2VwdGlvbgotRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2Vycm9yPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InRocm93biBzdGQ6OnN0cmluZ3MgYXJlIHRyYW5zbGF0ZWQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxlcnJvciBtZXNzYWdlPSJURVNUX0NBU0UoKSI+Ci1GQUlMRUQ6Ci1XaHkgd291bGQgeW91IHRocm93IGEgc3RkOjpzdHJpbmc/Ci1FeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZXJyb3I+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgPC9maWxlPgotICA8ZmlsZSBwYXRoPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSIzeDN4MyBpbnRzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJDb3B5IGFuZCB0aGVuIGdlbmVyYXRlIGEgcmFuZ2UvZnJvbSB2YXIgYW5kIGl0ZXJhdG9ycyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQ29weSBhbmQgdGhlbiBnZW5lcmF0ZSBhIHJhbmdlL0Zyb20gYSB0ZW1wb3JhcnkgY29udGFpbmVyIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJDb3B5IGFuZCB0aGVuIGdlbmVyYXRlIGEgcmFuZ2UvRmluYWwgdmFsaWRhdGlvbiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iR2VuZXJhdG9ycyAtLSBhZGFwdGVycy9GaWx0ZXJpbmcgYnkgcHJlZGljYXRlL0Jhc2ljIHVzYWdlIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJHZW5lcmF0b3JzIC0tIGFkYXB0ZXJzL0ZpbHRlcmluZyBieSBwcmVkaWNhdGUvVGhyb3dzIGlmIHRoZXJlIGFyZSBubyBtYXRjaGluZyB2YWx1ZXMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkdlbmVyYXRvcnMgLS0gYWRhcHRlcnMvU2hvcnRlbmluZyBhIHJhbmdlIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJHZW5lcmF0b3JzIC0tIGFkYXB0ZXJzL1RyYW5zZm9ybWluZyBlbGVtZW50cy9TYW1lIHR5cGUiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkdlbmVyYXRvcnMgLS0gYWRhcHRlcnMvVHJhbnNmb3JtaW5nIGVsZW1lbnRzL0RpZmZlcmVudCB0eXBlIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJHZW5lcmF0b3JzIC0tIGFkYXB0ZXJzL1RyYW5zZm9ybWluZyBlbGVtZW50cy9EaWZmZXJlbnQgZGVkdWNlZCB0eXBlIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJHZW5lcmF0b3JzIC0tIGFkYXB0ZXJzL1JlcGVhdGluZyBhIGdlbmVyYXRvciIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iR2VuZXJhdG9ycyAtLSBhZGFwdGVycy9DaHVua2luZyBhIGdlbmVyYXRvciBpbnRvIHNpemVkIHBpZWNlcy9OdW1iZXIgb2YgZWxlbWVudHMgaW4gc291cmNlIGlzIGRpdmlzaWJsZSBieSBjaHVuayBzaXplIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJHZW5lcmF0b3JzIC0tIGFkYXB0ZXJzL0NodW5raW5nIGEgZ2VuZXJhdG9yIGludG8gc2l6ZWQgcGllY2VzL051bWJlciBvZiBlbGVtZW50cyBpbiBzb3VyY2UgaXMgbm90IGRpdmlzaWJsZSBieSBjaHVuayBzaXplIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJHZW5lcmF0b3JzIC0tIGFkYXB0ZXJzL0NodW5raW5nIGEgZ2VuZXJhdG9yIGludG8gc2l6ZWQgcGllY2VzL0NodW5rIHNpemUgb2YgemVybyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iR2VuZXJhdG9ycyAtLSBhZGFwdGVycy9DaHVua2luZyBhIGdlbmVyYXRvciBpbnRvIHNpemVkIHBpZWNlcy9UaHJvd3Mgb24gdG9vIHNtYWxsIGdlbmVyYXRvcnMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkdlbmVyYXRvcnMgLS0gc2ltcGxlL29uZSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iR2VuZXJhdG9ycyAtLSBzaW1wbGUvdHdvIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJOZXN0ZWQgZ2VuZXJhdG9ycyBhbmQgY2FwdHVyZWQgdmFyaWFibGVzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJzdHJsZW4zIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJ0YWJsZXMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gIDwvZmlsZT4KLSAgPGZpbGUgcGF0aD0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCI+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkFyYml0cmFyeSBwcmVkaWNhdGUgbWF0Y2hlci9GdW5jdGlvbiBwb2ludGVyIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBcmJpdHJhcnkgcHJlZGljYXRlIG1hdGNoZXIvTGFtYmRhcyArIGRpZmZlcmVudCB0eXBlIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJDb21wb3NlZCBtYXRjaGVycyBhcmUgZGlzdGluY3QiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkNvbnRhaW5zIHN0cmluZyBtYXRjaGVyIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDS19USEFUKHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBDb250YWlucygmcXVvdDtub3QgdGhlcmUmcXVvdDssIENhdGNoOjpDYXNlU2Vuc2l0aXZlOjpObykpIj4KLUZBSUxFRDoKLQlDSEVDS19USEFUKCB0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgQ29udGFpbnMoIm5vdCB0aGVyZSIsIENhdGNoOjpDYXNlU2Vuc2l0aXZlOjpObykgKQotd2l0aCBleHBhbnNpb246Ci0JInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nIiBjb250YWluczogIm5vdCB0aGVyZSIgKGNhc2UgaW5zZW5zaXRpdmUpCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0tfVEhBVCh0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgQ29udGFpbnMoJnF1b3Q7U1RSSU5HJnF1b3Q7KSkiPgotRkFJTEVEOgotCUNIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBDb250YWlucygiU1RSSU5HIikgKQotd2l0aCBleHBhbnNpb246Ci0JInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nIiBjb250YWluczogIlNUUklORyIKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iRW5kc1dpdGggc3RyaW5nIG1hdGNoZXIiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLX1RIQVQodGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIEVuZHNXaXRoKCZxdW90O1N1YnN0cmluZyZxdW90OykpIj4KLUZBSUxFRDoKLQlDSEVDS19USEFUKCB0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgRW5kc1dpdGgoIlN1YnN0cmluZyIpICkKLXdpdGggZXhwYW5zaW9uOgotCSJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgZW5kcyB3aXRoOiAiU3Vic3RyaW5nIgotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLX1RIQVQodGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIEVuZHNXaXRoKCZxdW90O3RoaXMmcXVvdDssIENhdGNoOjpDYXNlU2Vuc2l0aXZlOjpObykpIj4KLUZBSUxFRDoKLQlDSEVDS19USEFUKCB0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgRW5kc1dpdGgoInRoaXMiLCBDYXRjaDo6Q2FzZVNlbnNpdGl2ZTo6Tm8pICkKLXdpdGggZXhwYW5zaW9uOgotCSJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgZW5kcyB3aXRoOiAidGhpcyIgKGNhc2UgaW5zZW5zaXRpdmUpCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkVxdWFscyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iRXF1YWxzIHN0cmluZyBtYXRjaGVyIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDS19USEFUKHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBFcXVhbHMoJnF1b3Q7dGhpcyBzdHJpbmcgY29udGFpbnMgJ0FCQycgYXMgYSBzdWJzdHJpbmcmcXVvdDspKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0tfVEhBVCggdGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIEVxdWFscygidGhpcyBzdHJpbmcgY29udGFpbnMgJ0FCQycgYXMgYSBzdWJzdHJpbmciKSApCi13aXRoIGV4cGFuc2lvbjoKLQkidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIGVxdWFsczogInRoaXMgc3RyaW5nIGNvbnRhaW5zICdBQkMnIGFzIGEgc3Vic3RyaW5nIgotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLX1RIQVQodGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIEVxdWFscygmcXVvdDtzb21ldGhpbmcgZWxzZSZxdW90OywgQ2F0Y2g6OkNhc2VTZW5zaXRpdmU6Ok5vKSkiPgotRkFJTEVEOgotCUNIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBFcXVhbHMoInNvbWV0aGluZyBlbHNlIiwgQ2F0Y2g6OkNhc2VTZW5zaXRpdmU6Ok5vKSApCi13aXRoIGV4cGFuc2lvbjoKLQkidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIGVxdWFsczogInNvbWV0aGluZyBlbHNlIiAoY2FzZSBpbnNlbnNpdGl2ZSkKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iRXhjZXB0aW9uIG1hdGNoZXJzIHRoYXQgZmFpbC9ObyBleGNlcHRpb24iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLX1RIUk9XU19NQVRDSEVTKGRvZXNOb3RUaHJvdygpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9KSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0tfVEhST1dTX01BVENIRVMoIGRvZXNOb3RUaHJvdygpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9ICkKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJSRVFVSVJFX1RIUk9XU19NQVRDSEVTKGRvZXNOb3RUaHJvdygpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9KSI+Ci1GQUlMRUQ6Ci0JUkVRVUlSRV9USFJPV1NfTUFUQ0hFUyggZG9lc05vdFRocm93KCksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0gKQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJFeGNlcHRpb24gbWF0Y2hlcnMgdGhhdCBmYWlsL1R5cGUgbWlzbWF0Y2giIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxlcnJvciBtZXNzYWdlPSJDSEVDS19USFJPV1NfTUFUQ0hFUyh0aHJvd3NBc0ludCgxKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSkiPgotRkFJTEVEOgotCUNIRUNLX1RIUk9XU19NQVRDSEVTKCB0aHJvd3NBc0ludCgxKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSApCi1Vbmtub3duIGV4Y2VwdGlvbgotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZXJyb3I+Ci0gICAgICA8ZXJyb3IgbWVzc2FnZT0iUkVRVUlSRV9USFJPV1NfTUFUQ0hFUyh0aHJvd3NBc0ludCgxKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSkiPgotRkFJTEVEOgotCVJFUVVJUkVfVEhST1dTX01BVENIRVMoIHRocm93c0FzSW50KDEpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9ICkKLVVua25vd24gZXhjZXB0aW9uCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9lcnJvcj4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJFeGNlcHRpb24gbWF0Y2hlcnMgdGhhdCBmYWlsL0NvbnRlbnRzIGFyZSB3cm9uZyIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0tfVEhST1dTX01BVENIRVModGhyb3dzU3BlY2lhbEV4Y2VwdGlvbigzKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSkiPgotRkFJTEVEOgotCUNIRUNLX1RIUk9XU19NQVRDSEVTKCB0aHJvd3NTcGVjaWFsRXhjZXB0aW9uKDMpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9ICkKLXdpdGggZXhwYW5zaW9uOgotCVNwZWNpYWxFeGNlcHRpb246OndoYXQgc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJSRVFVSVJFX1RIUk9XU19NQVRDSEVTKHRocm93c1NwZWNpYWxFeGNlcHRpb24oNCksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0pIj4KLUZBSUxFRDoKLQlSRVFVSVJFX1RIUk9XU19NQVRDSEVTKCB0aHJvd3NTcGVjaWFsRXhjZXB0aW9uKDQpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9ICkKLXdpdGggZXhwYW5zaW9uOgotCVNwZWNpYWxFeGNlcHRpb246OndoYXQgc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iRXhjZXB0aW9uIG1hdGNoZXJzIHRoYXQgc3VjY2VlZCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iRXhjZXB0aW9ucyBtYXRjaGVycyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iRmxvYXRpbmcgcG9pbnQgbWF0Y2hlcnM6IGRvdWJsZS9SZWxhdGl2ZSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iRmxvYXRpbmcgcG9pbnQgbWF0Y2hlcnM6IGRvdWJsZS9SZWxhdGl2ZS9Tb21lIHN1Ym5vcm1hbCB2YWx1ZXMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkZsb2F0aW5nIHBvaW50IG1hdGNoZXJzOiBkb3VibGUvTWFyZ2luIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJGbG9hdGluZyBwb2ludCBtYXRjaGVyczogZG91YmxlL1VMUHMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkZsb2F0aW5nIHBvaW50IG1hdGNoZXJzOiBkb3VibGUvQ29tcG9zZWQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkZsb2F0aW5nIHBvaW50IG1hdGNoZXJzOiBkb3VibGUvQ29uc3RydWN0b3IgdmFsaWRhdGlvbiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iRmxvYXRpbmcgcG9pbnQgbWF0Y2hlcnM6IGZsb2F0L1JlbGF0aXZlIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJGbG9hdGluZyBwb2ludCBtYXRjaGVyczogZmxvYXQvUmVsYXRpdmUvU29tZSBzdWJub3JtYWwgdmFsdWVzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJGbG9hdGluZyBwb2ludCBtYXRjaGVyczogZmxvYXQvTWFyZ2luIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJGbG9hdGluZyBwb2ludCBtYXRjaGVyczogZmxvYXQvVUxQcyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iRmxvYXRpbmcgcG9pbnQgbWF0Y2hlcnM6IGZsb2F0L0NvbXBvc2VkIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJGbG9hdGluZyBwb2ludCBtYXRjaGVyczogZmxvYXQvQ29uc3RydWN0b3IgdmFsaWRhdGlvbiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iTWF0Y2hlcnMgY2FuIGJlIChBbGxPZikgY29tcG9zZWQgd2l0aCB0aGUgJmFtcDsmYW1wOyBvcGVyYXRvciIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iTWF0Y2hlcnMgY2FuIGJlIChBbnlPZikgY29tcG9zZWQgd2l0aCB0aGUgfHwgb3BlcmF0b3IiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Ik1hdGNoZXJzIGNhbiBiZSBjb21wb3NlZCB3aXRoIGJvdGggJmFtcDsmYW1wOyBhbmQgfHwiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Ik1hdGNoZXJzIGNhbiBiZSBjb21wb3NlZCB3aXRoIGJvdGggJmFtcDsmYW1wOyBhbmQgfHwgLSBmYWlsaW5nIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDS19USEFUKHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCAoQ29udGFpbnMoJnF1b3Q7c3RyaW5nJnF1b3Q7KSB8fCBDb250YWlucygmcXVvdDtkaWZmZXJlbnQmcXVvdDspKSAmYW1wOyZhbXA7IENvbnRhaW5zKCZxdW90O3JhbmRvbSZxdW90OykpIj4KLUZBSUxFRDoKLQlDSEVDS19USEFUKCB0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgKENvbnRhaW5zKCJzdHJpbmciKSB8fCBDb250YWlucygiZGlmZmVyZW50IikpICZhbXA7JmFtcDsgQ29udGFpbnMoInJhbmRvbSIpICkKLXdpdGggZXhwYW5zaW9uOgotCSJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgKCAoIGNvbnRhaW5zOiAic3RyaW5nIiBvciBjb250YWluczogImRpZmZlcmVudCIgKSBhbmQgY29udGFpbnM6ICJyYW5kb20iICkKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iTWF0Y2hlcnMgY2FuIGJlIG5lZ2F0ZWQgKE5vdCkgd2l0aCB0aGUgISBvcGVyYXRvciIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iTWF0Y2hlcnMgY2FuIGJlIG5lZ2F0ZWQgKE5vdCkgd2l0aCB0aGUgISBvcGVyYXRvciAtIGZhaWxpbmciIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLX1RIQVQodGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksICFDb250YWlucygmcXVvdDtzdWJzdHJpbmcmcXVvdDspKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0tfVEhBVCggdGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksICFDb250YWlucygic3Vic3RyaW5nIikgKQotd2l0aCBleHBhbnNpb246Ci0JInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nIiBub3QgY29udGFpbnM6ICJzdWJzdHJpbmciCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlByZWRpY2F0ZSBtYXRjaGVyIGNhbiBhY2NlcHQgY29uc3QgY2hhcioiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlJlZ2V4IHN0cmluZyBtYXRjaGVyIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDS19USEFUKHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBNYXRjaGVzKCZxdW90O3RoaXMgU1RSSU5HIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nJnF1b3Q7KSkiPgotRkFJTEVEOgotCUNIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBNYXRjaGVzKCJ0aGlzIFNUUklORyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIpICkKLXdpdGggZXhwYW5zaW9uOgotCSJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgbWF0Y2hlcyAidGhpcyBTVFJJTkcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIGNhc2Ugc2Vuc2l0aXZlbHkKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDS19USEFUKHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBNYXRjaGVzKCZxdW90O2NvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nJnF1b3Q7KSkiPgotRkFJTEVEOgotCUNIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBNYXRjaGVzKCJjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIpICkKLXdpdGggZXhwYW5zaW9uOgotCSJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgbWF0Y2hlcyAiY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIGNhc2Ugc2Vuc2l0aXZlbHkKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDS19USEFUKHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBNYXRjaGVzKCZxdW90O3RoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEmcXVvdDspKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0tfVEhBVCggdGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIE1hdGNoZXMoInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEiKSApCi13aXRoIGV4cGFuc2lvbjoKLQkidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIG1hdGNoZXMgInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEiIGNhc2Ugc2Vuc2l0aXZlbHkKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iUmVncmVzc2lvbiB0ZXN0ICMxIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJTdGFydHNXaXRoIHN0cmluZyBtYXRjaGVyIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDS19USEFUKHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBTdGFydHNXaXRoKCZxdW90O1RoaXMgU3RyaW5nJnF1b3Q7KSkiPgotRkFJTEVEOgotCUNIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBTdGFydHNXaXRoKCJUaGlzIFN0cmluZyIpICkKLXdpdGggZXhwYW5zaW9uOgotCSJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgc3RhcnRzIHdpdGg6ICJUaGlzIFN0cmluZyIKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDS19USEFUKHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBTdGFydHNXaXRoKCZxdW90O3N0cmluZyZxdW90OywgQ2F0Y2g6OkNhc2VTZW5zaXRpdmU6Ok5vKSkiPgotRkFJTEVEOgotCUNIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBTdGFydHNXaXRoKCJzdHJpbmciLCBDYXRjaDo6Q2FzZVNlbnNpdGl2ZTo6Tm8pICkKLXdpdGggZXhwYW5zaW9uOgotCSJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgc3RhcnRzIHdpdGg6ICJzdHJpbmciIChjYXNlIGluc2Vuc2l0aXZlKQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJTdHJpbmcgbWF0Y2hlcnMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlZlY3RvciBBcHByb3ggbWF0Y2hlci9FbXB0eSB2ZWN0b3IgaXMgcm91Z2hseSBlcXVhbCB0byBhbiBlbXB0eSB2ZWN0b3IiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlZlY3RvciBBcHByb3ggbWF0Y2hlci9WZWN0b3JzIHdpdGggZWxlbWVudHMvQSB2ZWN0b3IgaXMgYXBwcm94IGVxdWFsIHRvIGl0c2VsZiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVmVjdG9yIEFwcHJveCBtYXRjaGVyL1ZlY3RvcnMgd2l0aCBlbGVtZW50cy9EaWZmZXJlbnQgbGVuZ3RoIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJWZWN0b3IgQXBwcm94IG1hdGNoZXIvVmVjdG9ycyB3aXRoIGVsZW1lbnRzL1NhbWUgbGVuZ3RoLCBkaWZmZXJlbnQgZWxlbWVudHMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlZlY3RvciBBcHByb3ggbWF0Y2hlciAtLSBmYWlsaW5nL0VtcHR5IGFuZCBub24gZW1wdHkgdmVjdG9ycyBhcmUgbm90IGFwcHJveCBlcXVhbCIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0tfVEhBVChlbXB0eSwgQXBwcm94KHQxKSkiPgotRkFJTEVEOgotCUNIRUNLX1RIQVQoIGVtcHR5LCBBcHByb3godDEpICkKLXdpdGggZXhwYW5zaW9uOgotCXsgIH0gaXMgYXBwcm94OiB7IDEuMCwgMi4wIH0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iVmVjdG9yIEFwcHJveCBtYXRjaGVyIC0tIGZhaWxpbmcvSnVzdCBkaWZmZXJlbnQgdmVjdG9ycyIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0tfVEhBVCh2MSwgQXBwcm94KHYyKSkiPgotRkFJTEVEOgotCUNIRUNLX1RIQVQoIHYxLCBBcHByb3godjIpICkKLXdpdGggZXhwYW5zaW9uOgotCXsgMi4wLCA0LjAsIDYuMCB9IGlzIGFwcHJveDogeyAxLjAsIDMuMCwgNS4wIH0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iVmVjdG9yIG1hdGNoZXJzL0NvbnRhaW5zIChlbGVtZW50KSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVmVjdG9yIG1hdGNoZXJzL0NvbnRhaW5zICh2ZWN0b3IpIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJWZWN0b3IgbWF0Y2hlcnMvQ29udGFpbnMgKGVsZW1lbnQpLCBjb21wb3NlZCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVmVjdG9yIG1hdGNoZXJzL0VxdWFscyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVmVjdG9yIG1hdGNoZXJzL1Vub3JkZXJlZEVxdWFscyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVmVjdG9yIG1hdGNoZXJzIHRoYXQgZmFpbC9Db250YWlucyAoZWxlbWVudCkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLX1RIQVQodiwgVmVjdG9yQ29udGFpbnMoLTEpKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0tfVEhBVCggdiwgVmVjdG9yQ29udGFpbnMoLTEpICkKLXdpdGggZXhwYW5zaW9uOgotCXsgMSwgMiwgMyB9IENvbnRhaW5zOiAtMQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLX1RIQVQoZW1wdHksIFZlY3RvckNvbnRhaW5zKDEpKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0tfVEhBVCggZW1wdHksIFZlY3RvckNvbnRhaW5zKDEpICkKLXdpdGggZXhwYW5zaW9uOgotCXsgIH0gQ29udGFpbnM6IDEKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iVmVjdG9yIG1hdGNoZXJzIHRoYXQgZmFpbC9Db250YWlucyAodmVjdG9yKSIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0tfVEhBVChlbXB0eSwgQ29udGFpbnModikpIj4KLUZBSUxFRDoKLQlDSEVDS19USEFUKCBlbXB0eSwgQ29udGFpbnModikgKQotd2l0aCBleHBhbnNpb246Ci0JeyAgfSBDb250YWluczogeyAxLCAyLCAzIH0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDS19USEFUKHYsIENvbnRhaW5zKHYyKSkiPgotRkFJTEVEOgotCUNIRUNLX1RIQVQoIHYsIENvbnRhaW5zKHYyKSApCi13aXRoIGV4cGFuc2lvbjoKLQl7IDEsIDIsIDMgfSBDb250YWluczogeyAxLCAyLCA0IH0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iVmVjdG9yIG1hdGNoZXJzIHRoYXQgZmFpbC9FcXVhbHMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLX1RIQVQodiwgRXF1YWxzKHYyKSkiPgotRkFJTEVEOgotCUNIRUNLX1RIQVQoIHYsIEVxdWFscyh2MikgKQotd2l0aCBleHBhbnNpb246Ci0JeyAxLCAyLCAzIH0gRXF1YWxzOiB7IDEsIDIgfQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLX1RIQVQodjIsIEVxdWFscyh2KSkiPgotRkFJTEVEOgotCUNIRUNLX1RIQVQoIHYyLCBFcXVhbHModikgKQotd2l0aCBleHBhbnNpb246Ci0JeyAxLCAyIH0gRXF1YWxzOiB7IDEsIDIsIDMgfQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLX1RIQVQoZW1wdHksIEVxdWFscyh2KSkiPgotRkFJTEVEOgotCUNIRUNLX1RIQVQoIGVtcHR5LCBFcXVhbHModikgKQotd2l0aCBleHBhbnNpb246Ci0JeyAgfSBFcXVhbHM6IHsgMSwgMiwgMyB9Ci1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0tfVEhBVCh2LCBFcXVhbHMoZW1wdHkpKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0tfVEhBVCggdiwgRXF1YWxzKGVtcHR5KSApCi13aXRoIGV4cGFuc2lvbjoKLQl7IDEsIDIsIDMgfSBFcXVhbHM6IHsgIH0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iVmVjdG9yIG1hdGNoZXJzIHRoYXQgZmFpbC9Vbm9yZGVyZWRFcXVhbHMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLX1RIQVQodiwgVW5vcmRlcmVkRXF1YWxzKGVtcHR5KSkiPgotRkFJTEVEOgotCUNIRUNLX1RIQVQoIHYsIFVub3JkZXJlZEVxdWFscyhlbXB0eSkgKQotd2l0aCBleHBhbnNpb246Ci0JeyAxLCAyLCAzIH0gVW5vcmRlcmVkRXF1YWxzOiB7ICB9Ci1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0tfVEhBVChlbXB0eSwgVW5vcmRlcmVkRXF1YWxzKHYpKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0tfVEhBVCggZW1wdHksIFVub3JkZXJlZEVxdWFscyh2KSApCi13aXRoIGV4cGFuc2lvbjoKLQl7ICB9IFVub3JkZXJlZEVxdWFsczogeyAxLCAyLCAzIH0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDS19USEFUKHBlcm11dGVkLCBVbm9yZGVyZWRFcXVhbHModikpIj4KLUZBSUxFRDoKLQlDSEVDS19USEFUKCBwZXJtdXRlZCwgVW5vcmRlcmVkRXF1YWxzKHYpICkKLXdpdGggZXhwYW5zaW9uOgotCXsgMSwgMyB9IFVub3JkZXJlZEVxdWFsczogeyAxLCAyLCAzIH0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDS19USEFUKHBlcm11dGVkLCBVbm9yZGVyZWRFcXVhbHModikpIj4KLUZBSUxFRDoKLQlDSEVDS19USEFUKCBwZXJtdXRlZCwgVW5vcmRlcmVkRXF1YWxzKHYpICkKLXdpdGggZXhwYW5zaW9uOgotCXsgMywgMSB9IFVub3JkZXJlZEVxdWFsczogeyAxLCAyLCAzIH0KLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgPC9maWxlPgotICA8ZmlsZSBwYXRoPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSIjMTQ1NSAtIElORk8gYW5kIFdBUk4gY2FuIHN0YXJ0IHdpdGggYSBsaW5lYnJlYWsiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkNBUFRVUkUgY2FuIGRlYWwgd2l0aCBjb21wbGV4IGV4cHJlc3Npb25zIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJDQVBUVVJFIGNhbiBkZWFsIHdpdGggY29tcGxleCBleHByZXNzaW9ucyBpbnZvbHZpbmcgY29tbWFzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJDQVBUVVJFIHBhcnNlcyBzdHJpbmcgYW5kIGNoYXJhY3RlciBjb25zdGFudHMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkZBSUwgYWJvcnRzIHRoZSB0ZXN0IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJGQUlMKCkiPgotRkFJTEVEOgotVGhpcyBpcyBhIGZhaWx1cmUKLU1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJGQUlMIGRvZXMgbm90IHJlcXVpcmUgYW4gYXJndW1lbnQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkZBSUwoKSI+Ci1GQUlMRUQ6Ci1NZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iRkFJTF9DSEVDSyBkb2VzIG5vdCBhYm9ydCB0aGUgdGVzdCIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iRkFJTF9DSEVDSygpIj4KLUZBSUxFRDoKLVRoaXMgaXMgYSBmYWlsdXJlCi1NZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iSU5GTyBhbmQgV0FSTiBkbyBub3QgYWJvcnQgdGVzdHMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IklORk8gZ2V0cyBsb2dnZWQgb24gZmFpbHVyZSIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iUkVRVUlSRShhID09IDEpIj4KLUZBSUxFRDoKLQlSRVFVSVJFKCBhID09IDEgKQotd2l0aCBleHBhbnNpb246Ci0JMiA9PSAxCi10aGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIGxvZ2dlZAotc28gc2hvdWxkIHRoaXMKLU1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJJTkZPIGdldHMgbG9nZ2VkIG9uIGZhaWx1cmUsIGV2ZW4gaWYgY2FwdHVyZWQgYmVmb3JlIHN1Y2Nlc3NmdWwgYXNzZXJ0aW9ucyIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0soYSA9PSAxKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIGEgPT0gMSApCi13aXRoIGV4cGFuc2lvbjoKLQkyID09IDEKLXRoaXMgbWVzc2FnZSBtYXkgYmUgbG9nZ2VkIGxhdGVyCi10aGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIGxvZ2dlZAotTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0soYSA9PSAwKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIGEgPT0gMCApCi13aXRoIGV4cGFuc2lvbjoKLQkyID09IDAKLXRoaXMgbWVzc2FnZSBtYXkgYmUgbG9nZ2VkIGxhdGVyCi10aGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIGxvZ2dlZAotYW5kIHRoaXMsIGJ1dCBsYXRlcgotTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IklORk8gaXMgcmVzZXQgZm9yIGVhY2ggbG9vcCIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iUkVRVUlSRShpICZsdDsgMTApIj4KLUZBSUxFRDoKLQlSRVFVSVJFKCBpICZsdDsgMTAgKQotd2l0aCBleHBhbnNpb246Ci0JMTAgJmx0OyAxMAotY3VycmVudCBjb3VudGVyIDEwCi1pIDo9IDEwCi1NZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iT3V0cHV0IGZyb20gYWxsIHNlY3Rpb25zIGlzIHJlcG9ydGVkL29uZSIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iRkFJTCgpIj4KLUZBSUxFRDoKLU1lc3NhZ2UgZnJvbSBzZWN0aW9uIG9uZQotTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Ik91dHB1dCBmcm9tIGFsbCBzZWN0aW9ucyBpcyByZXBvcnRlZC90d28iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkZBSUwoKSI+Ci1GQUlMRUQ6Ci1NZXNzYWdlIGZyb20gc2VjdGlvbiB0d28KLU1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJTVUNDRUVEIGNvdW50cyBhcyBhIHRlc3QgcGFzcyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iU1VDQ0VFRCBkb2VzIG5vdCByZXF1aXJlIGFuIGFyZ3VtZW50IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJTdGFuZGFyZCBvdXRwdXQgZnJvbSBhbGwgc2VjdGlvbnMgaXMgcmVwb3J0ZWQvdHdvIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUaGUgTk9fRkFJTCBtYWNybyByZXBvcnRzIGEgZmFpbHVyZSBidXQgZG9lcyBub3QgZmFpbCB0aGUgdGVzdCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0ianVzdCBmYWlsdXJlIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJGQUlMKCkiPgotRkFJTEVEOgotUHJldmlvdXMgaW5mbyBzaG91bGQgbm90IGJlIHNlZW4KLU1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJqdXN0IGZhaWx1cmUgYWZ0ZXIgdW5zY29wZWQgaW5mbyIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iRkFJTCgpIj4KLUZBSUxFRDoKLXByZXZpb3VzIHVuc2NvcGVkIGluZm8gU0hPVUxEIG5vdCBiZSBzZWVuCi1NZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0ibWl4IGluZm8sIHVuc2NvcGVkIGluZm8gYW5kIHdhcm5pbmciIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Im5vdCBwcmludHMgdW5zY29wZWQgaW5mbyBmcm9tIHByZXZpb3VzIGZhaWx1cmVzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJSRVFVSVJFKGZhbHNlKSI+Ci1GQUlMRUQ6Ci0JUkVRVUlSRSggZmFsc2UgKQotdGhpcyBTSE9VTEQgYmUgc2VlbgotTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InByaW50IHVuc2NvcGVkIGluZm8gaWYgcGFzc2luZyB1bnNjb3BlZCBpbmZvIGlzIHByaW50ZWQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InByaW50cyB1bnNjb3BlZCBpbmZvIG9uIGZhaWx1cmUiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IlJFUVVJUkUoZmFsc2UpIj4KLUZBSUxFRDoKLQlSRVFVSVJFKCBmYWxzZSApCi10aGlzIFNIT1VMRCBiZSBzZWVuCi10aGlzIFNIT1VMRCBhbHNvIGJlIHNlZW4KLU1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJwcmludHMgdW5zY29wZWQgaW5mbyBvbmx5IGZvciB0aGUgZmlyc3QgYXNzZXJ0aW9uIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyhmYWxzZSkiPgotRkFJTEVEOgotCUNIRUNLKCBmYWxzZSApCi10aGlzIFNIT1VMRCBiZSBzZWVuIG9ubHkgT05DRQotTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InNlbmRzIGluZm9ybWF0aW9uIHRvIElORk8iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IlJFUVVJUkUoZmFsc2UpIj4KLUZBSUxFRDoKLQlSRVFVSVJFKCBmYWxzZSApCi1oaQotaSA6PSA3Ci1NZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0ic3RhY2tzIHVuc2NvcGVkIGluZm8gaW4gbG9vcHMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLKGZhbHNlKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIGZhbHNlICkKLUNvdW50IDEgdG8gMy4uLgotMQotMgotMwotTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0soZmFsc2UpIj4KLUZBSUxFRDoKLQlDSEVDSyggZmFsc2UgKQotQ291bnQgNCB0byA2Li4uCi00Ci01Ci02Ci1NZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgPC9maWxlPgotICA8ZmlsZSBwYXRoPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSIjIEEgdGVzdCBuYW1lIHRoYXQgc3RhcnRzIHdpdGggYSAjIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSIjMTE3NSAtIEhpZGRlbiBUZXN0IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSIjODM1IC0tIGVycm5vIHNob3VsZCBub3QgYmUgdG91Y2hlZCBieSBDYXRjaCIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPHNraXBwZWQgbWVzc2FnZT0iQ0hFQ0soZigpID09IDApIj4KLUZBSUxFRDoKLQlDSEVDSyggZigpID09IDAgKQotd2l0aCBleHBhbnNpb246Ci0JMSA9PSAwCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L3NraXBwZWQ+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iIzk2MSAtLSBEeW5hbWljYWxseSBjcmVhdGVkIHNlY3Rpb25zIHNob3VsZCBhbGwgYmUgcmVwb3J0ZWQvTG9vcGVkIHNlY3Rpb24gMCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iIzk2MSAtLSBEeW5hbWljYWxseSBjcmVhdGVkIHNlY3Rpb25zIHNob3VsZCBhbGwgYmUgcmVwb3J0ZWQvTG9vcGVkIHNlY3Rpb24gMSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iIzk2MSAtLSBEeW5hbWljYWxseSBjcmVhdGVkIHNlY3Rpb25zIHNob3VsZCBhbGwgYmUgcmVwb3J0ZWQvTG9vcGVkIHNlY3Rpb24gMiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iIzk2MSAtLSBEeW5hbWljYWxseSBjcmVhdGVkIHNlY3Rpb25zIHNob3VsZCBhbGwgYmUgcmVwb3J0ZWQvTG9vcGVkIHNlY3Rpb24gMyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iIzk2MSAtLSBEeW5hbWljYWxseSBjcmVhdGVkIHNlY3Rpb25zIHNob3VsZCBhbGwgYmUgcmVwb3J0ZWQvTG9vcGVkIHNlY3Rpb24gNCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQSBUZW1wbGF0ZSBwcm9kdWN0IHRlc3QgY2FzZSAtIEZvbyZsdDtmbG9hdD4iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkEgVGVtcGxhdGUgcHJvZHVjdCB0ZXN0IGNhc2UgLSBGb28mbHQ7aW50PiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQSBUZW1wbGF0ZSBwcm9kdWN0IHRlc3QgY2FzZSAtIHN0ZDo6dmVjdG9yJmx0O2Zsb2F0PiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQSBUZW1wbGF0ZSBwcm9kdWN0IHRlc3QgY2FzZSAtIHN0ZDo6dmVjdG9yJmx0O2ludD4iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkEgVGVtcGxhdGUgcHJvZHVjdCB0ZXN0IGNhc2Ugd2l0aCBhcnJheSBzaWduYXR1cmUgLSBCYXImbHQ7ZmxvYXQsIDQyPiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQSBUZW1wbGF0ZSBwcm9kdWN0IHRlc3QgY2FzZSB3aXRoIGFycmF5IHNpZ25hdHVyZSAtIEJhciZsdDtpbnQsIDk+IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBIFRlbXBsYXRlIHByb2R1Y3QgdGVzdCBjYXNlIHdpdGggYXJyYXkgc2lnbmF0dXJlIC0gc3RkOjphcnJheSZsdDtmbG9hdCwgNDI+IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBIFRlbXBsYXRlIHByb2R1Y3QgdGVzdCBjYXNlIHdpdGggYXJyYXkgc2lnbmF0dXJlIC0gc3RkOjphcnJheSZsdDtpbnQsIDk+IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBIGNvdXBsZSBvZiBuZXN0ZWQgc2VjdGlvbnMgZm9sbG93ZWQgYnkgYSBmYWlsdXJlIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJGQUlMKCkiPgotRkFJTEVEOgotdG8gaW5maW5pdHkgYW5kIGJleW9uZAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkEgY291cGxlIG9mIG5lc3RlZCBzZWN0aW9ucyBmb2xsb3dlZCBieSBhIGZhaWx1cmUvT3V0ZXIvSW5uZXIiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkZhY3RvcmlhbHMgYXJlIGNvbXB1dGVkIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJNYW51YWxseVJlZ2lzdGVyZWQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Ik5pY2UgZGVzY3JpcHRpdmUgbmFtZSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUHJvZHVjdCB3aXRoIGRpZmZlcmluZyBhcml0aWVzIC0gc3RkOjp0dXBsZSZsdDtpbnQsIGRvdWJsZSwgZmxvYXQ+IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJQcm9kdWN0IHdpdGggZGlmZmVyaW5nIGFyaXRpZXMgLSBzdGQ6OnR1cGxlJmx0O2ludCwgZG91YmxlPiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUHJvZHVjdCB3aXRoIGRpZmZlcmluZyBhcml0aWVzIC0gc3RkOjp0dXBsZSZsdDtpbnQ+IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJTZW5kcyBzdHVmZiB0byBzdGRvdXQgYW5kIHN0ZGVyciIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGFicyBhbmQgbmV3bGluZXMgc2hvdyBpbiBvdXRwdXQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLKHMxID09IHMyKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soIHMxID09IHMyICkKLXdpdGggZXhwYW5zaW9uOgotCSJpZiAoJGIgPT0gMTApIHsKLQkJJGEJPSAyMDsKLX0iCi09PQotImlmICgkYiA9PSAxMCkgewotCSRhID0gMjA7Ci19Ci0iCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGVtcGxhdGUgdGVzdCBjYXNlIHdpdGggdGVzdCB0eXBlcyBzcGVjaWZpZWQgaW5zaWRlIG5vbi1jb3B5YWJsZSBhbmQgbm9uLW1vdmFibGUgc3RkOjp0dXBsZSAtIE5vbkNvcHlhYmxlQW5kTm9uTW92YWJsZVR5cGVzIC0gMCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGVtcGxhdGUgdGVzdCBjYXNlIHdpdGggdGVzdCB0eXBlcyBzcGVjaWZpZWQgaW5zaWRlIG5vbi1jb3B5YWJsZSBhbmQgbm9uLW1vdmFibGUgc3RkOjp0dXBsZSAtIE5vbkNvcHlhYmxlQW5kTm9uTW92YWJsZVR5cGVzIC0gMSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGVtcGxhdGUgdGVzdCBjYXNlIHdpdGggdGVzdCB0eXBlcyBzcGVjaWZpZWQgaW5zaWRlIG5vbi1kZWZhdWx0LWNvbnN0cnVjdGlibGUgc3RkOjp0dXBsZSAtIE15Tm9uRGVmYXVsdENvbnN0cnVjdGlibGVUeXBlcyAtIDAiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlIHRlc3QgY2FzZSB3aXRoIHRlc3QgdHlwZXMgc3BlY2lmaWVkIGluc2lkZSBub24tZGVmYXVsdC1jb25zdHJ1Y3RpYmxlIHN0ZDo6dHVwbGUgLSBNeU5vbkRlZmF1bHRDb25zdHJ1Y3RpYmxlVHlwZXMgLSAxIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZSB0ZXN0IGNhc2Ugd2l0aCB0ZXN0IHR5cGVzIHNwZWNpZmllZCBpbnNpZGUgc3RkOjp0dXBsZSAtIE15VHlwZXMgLSAwIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZSB0ZXN0IGNhc2Ugd2l0aCB0ZXN0IHR5cGVzIHNwZWNpZmllZCBpbnNpZGUgc3RkOjp0dXBsZSAtIE15VHlwZXMgLSAxIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZSB0ZXN0IGNhc2Ugd2l0aCB0ZXN0IHR5cGVzIHNwZWNpZmllZCBpbnNpZGUgc3RkOjp0dXBsZSAtIE15VHlwZXMgLSAyIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdC9yZXNpemluZyBiaWdnZXIgY2hhbmdlcyBzaXplIGFuZCBjYXBhY2l0eSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGZsb2F0L3Jlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdC9yZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5L1dlIGNhbiB1c2UgdGhlICdzd2FwIHRyaWNrJyB0byByZXNldCB0aGUgY2FwYWNpdHkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdC9yZXNlcnZpbmcgYmlnZ2VyIGNoYW5nZXMgY2FwYWNpdHkgYnV0IG5vdCBzaXplIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQvcmVzZXJ2aW5nIHNtYWxsZXIgZG9lcyBub3QgY2hhbmdlIHNpemUgb3IgY2FwYWNpdHkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBpbnQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBpbnQvcmVzaXppbmcgYmlnZ2VyIGNoYW5nZXMgc2l6ZSBhbmQgY2FwYWNpdHkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBpbnQvcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGludC9yZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5L1dlIGNhbiB1c2UgdGhlICdzd2FwIHRyaWNrJyB0byByZXNldCB0aGUgY2FwYWNpdHkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBpbnQvcmVzZXJ2aW5nIGJpZ2dlciBjaGFuZ2VzIGNhcGFjaXR5IGJ1dCBub3Qgc2l6ZSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGludC9yZXNlcnZpbmcgc21hbGxlciBkb2VzIG5vdCBjaGFuZ2Ugc2l6ZSBvciBjYXBhY2l0eSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6c3RyaW5nIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjpzdHJpbmcvcmVzaXppbmcgYmlnZ2VyIGNoYW5nZXMgc2l6ZSBhbmQgY2FwYWNpdHkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnN0cmluZy9yZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjpzdHJpbmcvcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eS9XZSBjYW4gdXNlIHRoZSAnc3dhcCB0cmljaycgdG8gcmVzZXQgdGhlIGNhcGFjaXR5IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjpzdHJpbmcvcmVzZXJ2aW5nIGJpZ2dlciBjaGFuZ2VzIGNhcGFjaXR5IGJ1dCBub3Qgc2l6ZSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6c3RyaW5nL3Jlc2VydmluZyBzbWFsbGVyIGRvZXMgbm90IGNoYW5nZSBzaXplIG9yIGNhcGFjaXR5IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjp0dXBsZSZsdDtpbnQsZmxvYXQ+IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjp0dXBsZSZsdDtpbnQsZmxvYXQ+L3Jlc2l6aW5nIGJpZ2dlciBjaGFuZ2VzIHNpemUgYW5kIGNhcGFjaXR5IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjp0dXBsZSZsdDtpbnQsZmxvYXQ+L3Jlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnR1cGxlJmx0O2ludCxmbG9hdD4vcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eS9XZSBjYW4gdXNlIHRoZSAnc3dhcCB0cmljaycgdG8gcmVzZXQgdGhlIGNhcGFjaXR5IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjp0dXBsZSZsdDtpbnQsZmxvYXQ+L3Jlc2VydmluZyBiaWdnZXIgY2hhbmdlcyBjYXBhY2l0eSBidXQgbm90IHNpemUiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnR1cGxlJmx0O2ludCxmbG9hdD4vcmVzZXJ2aW5nIHNtYWxsZXIgZG9lcyBub3QgY2hhbmdlIHNpemUgb3IgY2FwYWNpdHkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSAoc3RkOjp0dXBsZSZsdDtpbnQsIGZsb2F0PiksIDYiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSAoc3RkOjp0dXBsZSZsdDtpbnQsIGZsb2F0PiksIDYvcmVzaXppbmcgYmlnZ2VyIGNoYW5nZXMgc2l6ZSBhbmQgY2FwYWNpdHkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSAoc3RkOjp0dXBsZSZsdDtpbnQsIGZsb2F0PiksIDYvcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIChzdGQ6OnR1cGxlJmx0O2ludCwgZmxvYXQ+KSwgNi9yZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5L1dlIGNhbiB1c2UgdGhlICdzd2FwIHRyaWNrJyB0byByZXNldCB0aGUgY2FwYWNpdHkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSAoc3RkOjp0dXBsZSZsdDtpbnQsIGZsb2F0PiksIDYvcmVzZXJ2aW5nIGJpZ2dlciBjaGFuZ2VzIGNhcGFjaXR5IGJ1dCBub3Qgc2l6ZSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIChzdGQ6OnR1cGxlJmx0O2ludCwgZmxvYXQ+KSwgNi9yZXNlcnZpbmcgc21hbGxlciBkb2VzIG5vdCBjaGFuZ2Ugc2l6ZSBvciBjYXBhY2l0eSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGZsb2F0LDQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdCw0L3Jlc2l6aW5nIGJpZ2dlciBjaGFuZ2VzIHNpemUgYW5kIGNhcGFjaXR5IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQsNC9yZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQsNC9yZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5L1dlIGNhbiB1c2UgdGhlICdzd2FwIHRyaWNrJyB0byByZXNldCB0aGUgY2FwYWNpdHkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdCw0L3Jlc2VydmluZyBiaWdnZXIgY2hhbmdlcyBjYXBhY2l0eSBidXQgbm90IHNpemUiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdCw0L3Jlc2VydmluZyBzbWFsbGVyIGRvZXMgbm90IGNoYW5nZSBzaXplIG9yIGNhcGFjaXR5IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gaW50LDUiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBpbnQsNS9yZXNpemluZyBiaWdnZXIgY2hhbmdlcyBzaXplIGFuZCBjYXBhY2l0eSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGludCw1L3Jlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBpbnQsNS9yZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5L1dlIGNhbiB1c2UgdGhlICdzd2FwIHRyaWNrJyB0byByZXNldCB0aGUgY2FwYWNpdHkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBpbnQsNS9yZXNlcnZpbmcgYmlnZ2VyIGNoYW5nZXMgY2FwYWNpdHkgYnV0IG5vdCBzaXplIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gaW50LDUvcmVzZXJ2aW5nIHNtYWxsZXIgZG9lcyBub3QgY2hhbmdlIHNpemUgb3IgY2FwYWNpdHkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnN0cmluZywxNSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6c3RyaW5nLDE1L3Jlc2l6aW5nIGJpZ2dlciBjaGFuZ2VzIHNpemUgYW5kIGNhcGFjaXR5IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjpzdHJpbmcsMTUvcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6c3RyaW5nLDE1L3Jlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkvV2UgY2FuIHVzZSB0aGUgJ3N3YXAgdHJpY2snIHRvIHJlc2V0IHRoZSBjYXBhY2l0eSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGVtcGxhdGVUZXN0U2lnOiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6c3RyaW5nLDE1L3Jlc2VydmluZyBiaWdnZXIgY2hhbmdlcyBjYXBhY2l0eSBidXQgbm90IHNpemUiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnN0cmluZywxNS9yZXNlcnZpbmcgc21hbGxlciBkb2VzIG5vdCBjaGFuZ2Ugc2l6ZSBvciBjYXBhY2l0eSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGhpcyB0ZXN0ICdzaG91bGQnIGZhaWwgYnV0IGRvZXNuJ3QiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9ImF0b21pYyBpZiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iY2hlY2tlZEVsc2UiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9ImNoZWNrZWRFbHNlLCBmYWlsaW5nIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDS0VEX0VMU0UoZmxhZykiPgotRkFJTEVEOgotCUNIRUNLRURfRUxTRSggZmxhZyApCi13aXRoIGV4cGFuc2lvbjoKLQlmYWxzZQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iUkVRVUlSRSh0ZXN0Q2hlY2tlZEVsc2UoIGZhbHNlICkpIj4KLUZBSUxFRDoKLQlSRVFVSVJFKCB0ZXN0Q2hlY2tlZEVsc2UoIGZhbHNlICkgKQotd2l0aCBleHBhbnNpb246Ci0JZmFsc2UKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJjaGVja2VkSWYiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9ImNoZWNrZWRJZiwgZmFpbGluZyIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0tFRF9JRihmbGFnKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0tFRF9JRiggZmxhZyApCi13aXRoIGV4cGFuc2lvbjoKLQlmYWxzZQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iUkVRVUlSRSh0ZXN0Q2hlY2tlZElmKCBmYWxzZSApKSI+Ci1GQUlMRUQ6Ci0JUkVRVUlSRSggdGVzdENoZWNrZWRJZiggZmFsc2UgKSApCi13aXRoIGV4cGFuc2lvbjoKLQlmYWxzZQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9ImV2ZW4gbW9yZSBuZXN0ZWQgU0VDVElPTiB0ZXN0cy9jL2QgKGxlYWYpIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJldmVuIG1vcmUgbmVzdGVkIFNFQ1RJT04gdGVzdHMvYy9lIChsZWFmKSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iZXZlbiBtb3JlIG5lc3RlZCBTRUNUSU9OIHRlc3RzL2YgKGxlYWYpIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJsb25nIGxvbmciIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Imxvb3BlZCBTRUNUSU9OIHRlc3RzL2IgaXMgY3VycmVudGx5OiAwIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyhiID4gYSkiPgotRkFJTEVEOgotCUNIRUNLKCBiID4gYSApCi13aXRoIGV4cGFuc2lvbjoKLQkwID4gMQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Imxvb3BlZCBTRUNUSU9OIHRlc3RzL2IgaXMgY3VycmVudGx5OiAxIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSyhiID4gYSkiPgotRkFJTEVEOgotCUNIRUNLKCBiID4gYSApCi13aXRoIGV4cGFuc2lvbjoKLQkxID4gMQotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Imxvb3BlZCBTRUNUSU9OIHRlc3RzL2IgaXMgY3VycmVudGx5OiAyIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJsb29wZWQgU0VDVElPTiB0ZXN0cy9iIGlzIGN1cnJlbnRseTogMyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0ibG9vcGVkIFNFQ1RJT04gdGVzdHMvYiBpcyBjdXJyZW50bHk6IDQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Imxvb3BlZCBTRUNUSU9OIHRlc3RzL2IgaXMgY3VycmVudGx5OiA1IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJsb29wZWQgU0VDVElPTiB0ZXN0cy9iIGlzIGN1cnJlbnRseTogNiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0ibG9vcGVkIFNFQ1RJT04gdGVzdHMvYiBpcyBjdXJyZW50bHk6IDciIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Imxvb3BlZCBTRUNUSU9OIHRlc3RzL2IgaXMgY3VycmVudGx5OiA4IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJsb29wZWQgU0VDVElPTiB0ZXN0cy9iIGlzIGN1cnJlbnRseTogOSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0ibG9vcGVkIHRlc3RzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSygoIGZpYltpXSAlIDIgKSA9PSAwKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soICggZmliW2ldICUgMiApID09IDAgKQotd2l0aCBleHBhbnNpb246Ci0JMSA9PSAwCi1UZXN0aW5nIGlmIGZpYlswXSAoMSkgaXMgZXZlbgotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0soKCBmaWJbaV0gJSAyICkgPT0gMCkiPgotRkFJTEVEOgotCUNIRUNLKCAoIGZpYltpXSAlIDIgKSA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotCTEgPT0gMAotVGVzdGluZyBpZiBmaWJbMV0gKDEpIGlzIGV2ZW4KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLKCggZmliW2ldICUgMiApID09IDApIj4KLUZBSUxFRDoKLQlDSEVDSyggKCBmaWJbaV0gJSAyICkgPT0gMCApCi13aXRoIGV4cGFuc2lvbjoKLQkxID09IDAKLVRlc3RpbmcgaWYgZmliWzNdICgzKSBpcyBldmVuCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSygoIGZpYltpXSAlIDIgKSA9PSAwKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soICggZmliW2ldICUgMiApID09IDAgKQotd2l0aCBleHBhbnNpb246Ci0JMSA9PSAwCi1UZXN0aW5nIGlmIGZpYls0XSAoNSkgaXMgZXZlbgotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0soKCBmaWJbaV0gJSAyICkgPT0gMCkiPgotRkFJTEVEOgotCUNIRUNLKCAoIGZpYltpXSAlIDIgKSA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotCTEgPT0gMAotVGVzdGluZyBpZiBmaWJbNl0gKDEzKSBpcyBldmVuCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJDSEVDSygoIGZpYltpXSAlIDIgKSA9PSAwKSI+Ci1GQUlMRUQ6Ci0JQ0hFQ0soICggZmliW2ldICUgMiApID09IDAgKQotd2l0aCBleHBhbnNpb246Ci0JMSA9PSAwCi1UZXN0aW5nIGlmIGZpYls3XSAoMjEpIGlzIGV2ZW4KLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RDYXNlPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJtb3JlIG5lc3RlZCBTRUNUSU9OIHRlc3RzL2VxdWFsL2RvZXNuJ3QgZXF1YWwiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IlJFUVVJUkUoYSA9PSBiKSI+Ci1GQUlMRUQ6Ci0JUkVRVUlSRSggYSA9PSBiICkKLXdpdGggZXhwYW5zaW9uOgotCTEgPT0gMgotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Im1vcmUgbmVzdGVkIFNFQ1RJT04gdGVzdHMvZG9lc24ndCBlcXVhbC9ub3QgZXF1YWwiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Im1vcmUgbmVzdGVkIFNFQ1RJT04gdGVzdHMvZG9lc24ndCBlcXVhbC9sZXNzIHRoYW4iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Im5lc3RlZCBTRUNUSU9OIHRlc3RzL2RvZXNuJ3QgZXF1YWwiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Im5lc3RlZCBTRUNUSU9OIHRlc3RzL2RvZXNuJ3QgZXF1YWwvbm90IGVxdWFsIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJub3QgYWxsb3dlZCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0ibnVsbCBzdHJpbmdzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJyYW5kb20gU0VDVElPTiB0ZXN0cy9kb2Vzbid0IGVxdWFsIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJyYW5kb20gU0VDVElPTiB0ZXN0cy9ub3QgZXF1YWwiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InNlbmQgYSBzaW5nbGUgY2hhciB0byBJTkZPIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJSRVFVSVJFKGZhbHNlKSI+Ci1GQUlMRUQ6Ci0JUkVRVUlSRSggZmFsc2UgKQotMwotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InRvU3RyaW5nIG9uIGNvbnN0IHdjaGFyX3QgY29uc3QgcG9pbnRlciByZXR1cm5zIHRoZSBzdHJpbmcgY29udGVudHMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InRvU3RyaW5nIG9uIGNvbnN0IHdjaGFyX3QgcG9pbnRlciByZXR1cm5zIHRoZSBzdHJpbmcgY29udGVudHMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InRvU3RyaW5nIG9uIHdjaGFyX3QgY29uc3QgcG9pbnRlciByZXR1cm5zIHRoZSBzdHJpbmcgY29udGVudHMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InRvU3RyaW5nIG9uIHdjaGFyX3QgcmV0dXJucyB0aGUgc3RyaW5nIGNvbnRlbnRzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJ2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0idmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQvcmVzaXppbmcgYmlnZ2VyIGNoYW5nZXMgc2l6ZSBhbmQgY2FwYWNpdHkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkL3Jlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkL3Jlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkvV2UgY2FuIHVzZSB0aGUgJ3N3YXAgdHJpY2snIHRvIHJlc2V0IHRoZSBjYXBhY2l0eSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0idmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQvcmVzZXJ2aW5nIGJpZ2dlciBjaGFuZ2VzIGNhcGFjaXR5IGJ1dCBub3Qgc2l6ZSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0idmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQvcmVzZXJ2aW5nIHNtYWxsZXIgZG9lcyBub3QgY2hhbmdlIHNpemUgb3IgY2FwYWNpdHkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InhtbGVudGl0eWNoZWNrL2VtYmVkZGVkIHhtbDogJmx0O3Rlc3Q+aXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGVtYmVkIHhtbCBjaGFyYWN0ZXJzLCBzdWNoIGFzICZsdDssICZxdW90OyBvciAmYW1wOywgb3IgZXZlbiB3aG9sZSAmbHQ7eG1sPmRvY3VtZW50cyZsdDsveG1sPiB3aXRoaW4gYW4gYXR0cmlidXRlJmx0Oy90ZXN0PiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0ieG1sZW50aXR5Y2hlY2svZW5jb2RlZCBjaGFyczogdGhlc2Ugc2hvdWxkIGFsbCBiZSBlbmNvZGVkOiAmYW1wOyZhbXA7JmFtcDsmcXVvdDsmcXVvdDsmcXVvdDsmbHQ7Jmx0OyZsdDsmYW1wOyZxdW90OyZsdDsmbHQ7JmFtcDsmcXVvdDsiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gIDwvZmlsZT4KLSAgPGZpbGUgcGF0aD0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nQ2hyb25vLnRlc3RzLmNwcCI+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlN0cmluZ2lmeWluZyBzdGQ6OmNocm9ubzo6ZHVyYXRpb24gaGVscGVycyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iU3RyaW5naWZ5aW5nIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbiB3aXRoIHdlaXJkIHJhdGlvcyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iU3RyaW5naWZ5aW5nIHN0ZDo6Y2hyb25vOjp0aW1lX3BvaW50Jmx0O3N5c3RlbV9jbG9jaz4iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gIDwvZmlsZT4KLSAgPGZpbGUgcGF0aD0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHAiPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJDYXB0dXJlIGFuZCBpbmZvIG1lc3NhZ2VzL0NhcHR1cmUgc2hvdWxkIHN0cmluZ2lmeSBsaWtlIGFzc2VydGlvbnMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkNhcHR1cmUgYW5kIGluZm8gbWVzc2FnZXMvSW5mbyBzaG91bGQgTk9UIHN0cmluZ2lmeSB0aGUgd2F5IGFzc2VydGlvbnMgZG8iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkNoYXJhY3RlciBwcmV0dHkgcHJpbnRpbmcvU3BlY2lmaWNhbGx5IGVzY2FwZWQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkNoYXJhY3RlciBwcmV0dHkgcHJpbnRpbmcvR2VuZXJhbCBjaGFycyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQ2hhcmFjdGVyIHByZXR0eSBwcmludGluZy9Mb3cgQVNDSUkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkV4Y2VwdGlvbiBhcyBhIHZhbHVlIChlLmcuIGluIFJFUVVJUkVfVEhST1dTX01BVENIRVMpIGNhbiBiZSBzdHJpbmdpZmllZCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUHJlY2lzaW9uIG9mIGZsb2F0aW5nIHBvaW50IHN0cmluZ2lmaWNhdGlvbiBjYW4gYmUgc2V0L0Zsb2F0cyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iUHJlY2lzaW9uIG9mIGZsb2F0aW5nIHBvaW50IHN0cmluZ2lmaWNhdGlvbiBjYW4gYmUgc2V0L0RvdWJsZSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iU3RhdGljIGFycmF5cyBhcmUgY29udmVydGlibGUgdG8gc3RyaW5nL1NpbmdsZSBpdGVtIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJTdGF0aWMgYXJyYXlzIGFyZSBjb252ZXJ0aWJsZSB0byBzdHJpbmcvTXVsdGlwbGUiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlN0YXRpYyBhcnJheXMgYXJlIGNvbnZlcnRpYmxlIHRvIHN0cmluZy9Ob24tdHJpdmlhbCBpbm5lciBpdGVtcyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0ic3RkOjptYXAgaXMgY29udmVydGlibGUgc3RyaW5nL2VtcHR5IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJzdGQ6Om1hcCBpcyBjb252ZXJ0aWJsZSBzdHJpbmcvc2luZ2xlIGl0ZW0iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InN0ZDo6bWFwIGlzIGNvbnZlcnRpYmxlIHN0cmluZy9zZXZlcmFsIGl0ZW1zIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJzdGQ6OnNldCBpcyBjb252ZXJ0aWJsZSBzdHJpbmcvZW1wdHkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InN0ZDo6c2V0IGlzIGNvbnZlcnRpYmxlIHN0cmluZy9zaW5nbGUgaXRlbSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0ic3RkOjpzZXQgaXMgY29udmVydGlibGUgc3RyaW5nL3NldmVyYWwgaXRlbXMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gIDwvZmlsZT4KLSAgPGZpbGUgcGF0aD0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nUGFpci50ZXN0cy5jcHAiPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJwYWlyJmx0O3BhaXImbHQ7aW50LGNvbnN0IGNoYXIgKixwYWlyJmx0O3N0ZDo6c3RyaW5nLGludD4gPiAtPiB0b1N0cmluZyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0ic3RkOjpwYWlyJmx0O2ludCxjb25zdCBzdGQ6OnN0cmluZz4gLT4gdG9TdHJpbmciIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InN0ZDo6cGFpciZsdDtpbnQsc3RkOjpzdHJpbmc+IC0+IHRvU3RyaW5nIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJzdGQ6OnZlY3RvciZsdDtzdGQ6OnBhaXImbHQ7c3RkOjpzdHJpbmcsaW50PiA+IC0+IHRvU3RyaW5nIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICA8L2ZpbGU+Ci0gIDxmaWxlIHBhdGg9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ1R1cGxlLnRlc3RzLmNwcCI+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InR1cGxlJmx0Oz4iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InR1cGxlJmx0O2Zsb2F0LGludD4iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InR1cGxlJmx0O2ludD4iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InR1cGxlJmx0OzAsaW50LGNvbnN0IGNoYXIgKj4iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InR1cGxlJmx0O3N0cmluZyxzdHJpbmc+IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJ0dXBsZSZsdDt0dXBsZSZsdDtpbnQ+LHR1cGxlJmx0Oz4sZmxvYXQ+IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICA8L2ZpbGU+Ci0gIDxmaWxlIHBhdGg9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHAiPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJhcnJheSZsdDtpbnQsIE4+IC0+IHRvU3RyaW5nIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJ2ZWMmbHQ7dmVjJmx0O3N0cmluZyxhbGxvYz4+IC0+IHRvU3RyaW5nIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJ2ZWN0b3ImbHQ7Ym9vbD4gLT4gdG9TdHJpbmciIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InZlY3RvciZsdDtpbnQsYWxsb2NhdG9yPiAtPiB0b1N0cmluZyIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0idmVjdG9yJmx0O2ludD4gLT4gdG9TdHJpbmciIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InZlY3RvciZsdDtzdHJpbmc+IC0+IHRvU3RyaW5nIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICA8L2ZpbGU+Ci0gIDxmaWxlIHBhdGg9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcCI+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InN0cmluZ2lmeSByYW5nZXMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InN0cmluZ2lmeSggaGFzX21ha2VyICkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InN0cmluZ2lmeSggaGFzX21ha2VyX2FuZF9vcGVyYXRvciApIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJzdHJpbmdpZnkoIGhhc19uZWl0aGVyICkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InN0cmluZ2lmeSggaGFzX29wZXJhdG9yICkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InN0cmluZ2lmeSggaGFzX3RlbXBsYXRlX29wZXJhdG9yICkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InN0cmluZ2lmeSggdmVjdG9ycyZsdDtoYXNfbWFrZXI+ICkiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9InN0cmluZ2lmeSggdmVjdG9ycyZsdDtoYXNfbWFrZXJfYW5kX29wZXJhdG9yPiApIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJzdHJpbmdpZnkoIHZlY3RvcnMmbHQ7aGFzX29wZXJhdG9yPiApIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICA8L2ZpbGU+Ci0gIDxmaWxlIHBhdGg9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ucmlja3kudGVzdHMuY3BwIj4KLSAgICA8dGVzdENhc2UgbmFtZT0iIzE1MTQ6IHN0ZGVyci9zdGRvdXQgaXMgbm90IGNhcHR1cmVkIGluIHRlc3RzIGFib3J0ZWQgYnkgYW4gZXhjZXB0aW9uIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJGQUlMKCkiPgotRkFJTEVEOgotMTUxNAotVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iKHVuaW1wbGVtZW50ZWQpIHN0YXRpYyBib29scyBjYW4gYmUgZXZhbHVhdGVkL2NvbXBhcmUgdG8gdHJ1ZSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iKHVuaW1wbGVtZW50ZWQpIHN0YXRpYyBib29scyBjYW4gYmUgZXZhbHVhdGVkL2NvbXBhcmUgdG8gZmFsc2UiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Iih1bmltcGxlbWVudGVkKSBzdGF0aWMgYm9vbHMgY2FuIGJlIGV2YWx1YXRlZC9uZWdhdGlvbiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iKHVuaW1wbGVtZW50ZWQpIHN0YXRpYyBib29scyBjYW4gYmUgZXZhbHVhdGVkL2RvdWJsZSBuZWdhdGlvbiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iKHVuaW1wbGVtZW50ZWQpIHN0YXRpYyBib29scyBjYW4gYmUgZXZhbHVhdGVkL2RpcmVjdCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQSBmYWlsaW5nIGV4cHJlc3Npb24gd2l0aCBhIG5vbiBzdHJlYW1hYmxlIHR5cGUgaXMgc3RpbGwgY2FwdHVyZWQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ij4KLSAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IkNIRUNLKCZhbXA7bzEgPT0gJmFtcDtvMikiPgotRkFJTEVEOgotCUNIRUNLKCAmYW1wO28xID09ICZhbXA7bzIgKQotd2l0aCBleHBhbnNpb246Ci0JMHg8aGV4IGRpZ2l0cz4gPT0gMHg8aGV4IGRpZ2l0cz4KLVRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iQ0hFQ0sobzEgPT0gbzIpIj4KLUZBSUxFRDoKLQlDSEVDSyggbzEgPT0gbzIgKQotd2l0aCBleHBhbnNpb246Ci0Jez99ID09IHs/fQotVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0gICAgICA8L2ZhaWx1cmU+Ci0gICAgPC90ZXN0Q2FzZT4KLSAgICA8dGVzdENhc2UgbmFtZT0iQW4gZXhwcmVzc2lvbiB3aXRoIHNpZGUtZWZmZWN0cyBzaG91bGQgb25seSBiZSBldmFsdWF0ZWQgb25jZSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQXNzZXJ0aW9ucyB0aGVuIHNlY3Rpb25zIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBc3NlcnRpb25zIHRoZW4gc2VjdGlvbnMvQSBzZWN0aW9uIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJBc3NlcnRpb25zIHRoZW4gc2VjdGlvbnMvQSBzZWN0aW9uL0Fub3RoZXIgc2VjdGlvbiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQXNzZXJ0aW9ucyB0aGVuIHNlY3Rpb25zL0Egc2VjdGlvbi9Bbm90aGVyIG90aGVyIHNlY3Rpb24iIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkNvbW1hcyBpbiB2YXJpb3VzIG1hY3JvcyBhcmUgYWxsb3dlZCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iQ29tcGFyaW5nIGZ1bmN0aW9uIHBvaW50ZXJzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJPYmplY3RzIHRoYXQgZXZhbHVhdGVkIGluIGJvb2xlYW4gY29udGV4dHMgY2FuIGJlIGNoZWNrZWQiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlRlc3QgZW51bSBiaXQgdmFsdWVzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJXaGVyZSB0aGUgTEhTIGlzIG5vdCBhIHNpbXBsZSB2YWx1ZSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iV2hlcmUgdGhlcmUgaXMgbW9yZSB0byB0aGUgZXhwcmVzc2lvbiBhZnRlciB0aGUgUkhTIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJYL2xldmVsLzAvYSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iWC9sZXZlbC8wL2IiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IlgvbGV2ZWwvMS9hIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJYL2xldmVsLzEvYiIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iYm9vbGVhbiBtZW1iZXIiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Im5vbiBzdHJlYW1hYmxlIC0gd2l0aCBjb252LiBvcCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0ibm9uLWNvcHlhYmxlIG9iamVjdHMiIGR1cmF0aW9uPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RDYXNlIG5hbWU9Im51bGxfcHRyIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJwb2ludGVyIHRvIGNsYXNzIiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJzdHJpbmcgbGl0ZXJhbHMgb2YgZGlmZmVyZW50IHNpemVzIGNhbiBiZSBjb21wYXJlZCIgZHVyYXRpb249IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iUkVRVUlSRShzdGQ6OnN0cmluZyggJnF1b3Q7Zmlyc3QmcXVvdDsgKSA9PSAmcXVvdDtzZWNvbmQmcXVvdDspIj4KLUZBSUxFRDoKLQlSRVFVSVJFKCBzdGQ6OnN0cmluZyggImZpcnN0IiApID09ICJzZWNvbmQiICkKLXdpdGggZXhwYW5zaW9uOgotCSJmaXJzdCIgPT0gInNlY29uZCIKLVRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotICAgICAgPC9mYWlsdXJlPgotICAgIDwvdGVzdENhc2U+Ci0gIDwvZmlsZT4KLSAgPGZpbGUgcGF0aD0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1ZhcmlhZGljTWFjcm9zLnRlc3RzLmNwcCI+Ci0gICAgPHRlc3RDYXNlIG5hbWU9IkFub255bW91cyB0ZXN0IGNhc2UgMSIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdENhc2UgbmFtZT0iVGVzdCBjYXNlIHdpdGggb25lIGFyZ3VtZW50IiBkdXJhdGlvbj0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Q2FzZSBuYW1lPSJWYXJpYWRpYyBtYWNyb3MvU2VjdGlvbiB3aXRoIG9uZSBhcmd1bWVudCIgZHVyYXRpb249IntkdXJhdGlvbn0iLz4KLSAgPC9maWxlPgotPC90ZXN0RXhlY3V0aW9ucz4KZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy94bWwuc3cuYXBwcm92ZWQudHh0IGIvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL3htbC5zdy5hcHByb3ZlZC50eHQKaW5kZXggNGVlZDcxMi4uZDA1M2I0MCAxMDA2NDQKLS0tIGEvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL3htbC5zdy5hcHByb3ZlZC50eHQKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL3htbC5zdy5hcHByb3ZlZC50eHQKQEAgLTQzLDI1ICs0Myw2IEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iIzEwMjc6IEJpdGZpZWxkcyBjYW4gYmUgY2FwdHVyZWQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ29tcGlsYXRpb24udGVzdHMuY3BwIiA+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NvbXBpbGF0aW9uLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgeS52ID09IDAKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIDAgPT0gMAotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Db21waWxhdGlvbi50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIDAgPT0geS52Ci0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAwID09IDAKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KLSAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSIjMTE0NyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Db21waWxhdGlvbi50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ29tcGlsYXRpb24udGVzdHMuY3BwIiA+CiAgICAgICAgIDxPcmlnaW5hbD4KQEAgLTExMyw3ICs5NCw3IEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iIzExNzUgLSBIaWRkZW4gVGVzdCIgdGFncz0iWyFoaWRlXVsuXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSIjMTE3NSAtIEhpZGRlbiBUZXN0IiB0YWdzPSJbLl0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSIjMTIzOCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Db21waWxhdGlvbi50ZXN0cy5jcHAiID4KQEAgLTE2MSw3ICsxNDIsNyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IiMxNDU1IC0gSU5GTyBhbmQgV0FSTiBjYW4gc3RhcnQgd2l0aCBhIGxpbmVicmVhayIgdGFncz0iWyFoaWRlXVsuXVttZXNzYWdlc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0iIzE0NTUgLSBJTkZPIGFuZCBXQVJOIGNhbiBzdGFydCB3aXRoIGEgbGluZWJyZWFrIiB0YWdzPSJbLl1bbWVzc2FnZXNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwIiA+CiAgICAgICA8SW5mbz4KIAogVGhpcyBpbmZvIG1lc3NhZ2Ugc3RhcnRzIHdpdGggYSBsaW5lYnJlYWsKQEAgLTE3Miw3ICsxNTMsNyBAQAogICAgICAgPC9XYXJuaW5nPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSIjMTUxNDogc3RkZXJyL3N0ZG91dCBpcyBub3QgY2FwdHVyZWQgaW4gdGVzdHMgYWJvcnRlZCBieSBhbiBleGNlcHRpb24iIHRhZ3M9IlshaGlkZV1bLl1bb3V0cHV0LWNhcHR1cmVdW3JlZ3Jlc3Npb25dIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RyaWNreS50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0iIzE1MTQ6IHN0ZGVyci9zdGRvdXQgaXMgbm90IGNhcHR1cmVkIGluIHRlc3RzIGFib3J0ZWQgYnkgYW4gZXhjZXB0aW9uIiB0YWdzPSJbLl1bb3V0cHV0LWNhcHR1cmVdW3JlZ3Jlc3Npb25dIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RyaWNreS50ZXN0cy5jcHAiID4KICAgICAgIDxGYWlsdXJlIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVHJpY2t5LnRlc3RzLmNwcCIgPgogICAgICAgICAxNTE0CiAgICAgICA8L0ZhaWx1cmU+CkBAIC0xOTYsNyArMTc3LDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSIjNzQ4IC0gY2FwdHVyZXMgd2l0aCB1bmV4cGVjdGVkIGV4Y2VwdGlvbnMiIHRhZ3M9IlshaGlkZV1bIXNob3VsZGZhaWxdWyF0aHJvd3NdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0iIzc0OCAtIGNhcHR1cmVzIHdpdGggdW5leHBlY3RlZCBleGNlcHRpb25zIiB0YWdzPSJbIXNob3VsZGZhaWxdWyF0aHJvd3NdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KICAgICAgIDxTZWN0aW9uIG5hbWU9Im91dHNpZGUgYXNzZXJ0aW9ucyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIiA+CiAgICAgICAgIDxJbmZvPgogICAgICAgICAgIGFuc3dlciA6PSA0MgpAQCAtMzA5LDcgKzI5MCw3IEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iIzgzNSAtLSBlcnJubyBzaG91bGQgbm90IGJlIHRvdWNoZWQgYnkgQ2F0Y2giIHRhZ3M9IlshaGlkZV1bIXNob3VsZGZhaWxdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9IiM4MzUgLS0gZXJybm8gc2hvdWxkIG5vdCBiZSB0b3VjaGVkIGJ5IENhdGNoIiB0YWdzPSJbIXNob3VsZGZhaWxdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgIGYoKSA9PSAwCkBAIC0zNDIsNyArMzIzLDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSIjOTYxIC0tIER5bmFtaWNhbGx5IGNyZWF0ZWQgc2VjdGlvbnMgc2hvdWxkIGFsbCBiZSByZXBvcnRlZCIgdGFncz0iWyFoaWRlXVsuXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSIjOTYxIC0tIER5bmFtaWNhbGx5IGNyZWF0ZWQgc2VjdGlvbnMgc2hvdWxkIGFsbCBiZSByZXBvcnRlZCIgdGFncz0iWy5dIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICA8U2VjdGlvbiBuYW1lPSJMb29wZWQgc2VjdGlvbiAwIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CiAgICAgICA8L1NlY3Rpb24+CkBAIC0zNjAsNyArMzQxLDcgQEAKICAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSInTm90JyBjaGVja3MgdGhhdCBzaG91bGQgZmFpbCIgdGFncz0iWyFoaWRlXVsuXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Db25kaXRpb24udGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9IidOb3QnIGNoZWNrcyB0aGF0IHNob3VsZCBmYWlsIiB0YWdzPSJbLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ29uZGl0aW9uLnRlc3RzLmNwcCIgPgogICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0iZmFsc2UiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NvbmRpdGlvbi50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgIGZhbHNlICE9IGZhbHNlCkBAIC0xMjI3LDcgKzEyMDgsNyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IkEgTUVUSE9EX0FTX1RFU1RfQ0FTRSBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIiB0YWdzPSJbIWhpZGVdWy5dW2NsYXNzXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0iQSBNRVRIT0RfQVNfVEVTVF9DQVNFIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMiIHRhZ3M9IlsuXVtjbGFzc11bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgIHMgPT0gIndvcmxkIgpAQCAtMTI0OSw3ICsxMjMwLDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gVGVtcGxhdGVfRm9vJmx0O2Zsb2F0PiIgdGFncz0iWyFoaWRlXVsuXVtjbGFzc11bZmFpbGluZ11bcHJvZHVjdF1bdGVtcGxhdGVdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gVGVtcGxhdGVfRm9vJmx0O2Zsb2F0PiIgdGFncz0iWy5dW2NsYXNzXVtmYWlsaW5nXVtwcm9kdWN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgIFRlbXBsYXRlX0ZpeHR1cmVfMiZsdDtUZXN0VHlwZT46Om1fYS5zaXplKCkgPT0gMQpAQCAtMTI2MCw3ICsxMjQxLDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIFRlbXBsYXRlX0ZvbyZsdDtpbnQ+IiB0YWdzPSJbIWhpZGVdWy5dW2NsYXNzXVtmYWlsaW5nXVtwcm9kdWN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9IkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBUZW1wbGF0ZV9Gb28mbHQ7aW50PiIgdGFncz0iWy5dW2NsYXNzXVtmYWlsaW5nXVtwcm9kdWN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgIFRlbXBsYXRlX0ZpeHR1cmVfMiZsdDtUZXN0VHlwZT46Om1fYS5zaXplKCkgPT0gMQpAQCAtMTI3MSw3ICsxMjUyLDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIHN0ZDo6dmVjdG9yJmx0O2Zsb2F0PiIgdGFncz0iWyFoaWRlXVsuXVtjbGFzc11bZmFpbGluZ11bcHJvZHVjdF1bdGVtcGxhdGVdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gc3RkOjp2ZWN0b3ImbHQ7ZmxvYXQ+IiB0YWdzPSJbLl1bY2xhc3NdW2ZhaWxpbmddW3Byb2R1Y3RdW3RlbXBsYXRlXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgVGVtcGxhdGVfRml4dHVyZV8yJmx0O1Rlc3RUeXBlPjo6bV9hLnNpemUoKSA9PSAxCkBAIC0xMjgyLDcgKzEyNjMsNyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gc3RkOjp2ZWN0b3ImbHQ7aW50PiIgdGFncz0iWyFoaWRlXVsuXVtjbGFzc11bZmFpbGluZ11bcHJvZHVjdF1bdGVtcGxhdGVdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gc3RkOjp2ZWN0b3ImbHQ7aW50PiIgdGFncz0iWy5dW2NsYXNzXVtmYWlsaW5nXVtwcm9kdWN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgIFRlbXBsYXRlX0ZpeHR1cmVfMiZsdDtUZXN0VHlwZT46Om1fYS5zaXplKCkgPT0gMQpAQCAtMTMzNyw5NSArMTMxOCw3IEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBUZW1wbGF0ZV9Gb29fMiZsdDtmbG9hdCwgNj4iIHRhZ3M9IlshaGlkZV1bLl1bY2xhc3NdW2ZhaWxpbmddW250dHBdW3Byb2R1Y3RdW3RlbXBsYXRlXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgVGVtcGxhdGVfRml4dHVyZV8yJmx0O1Rlc3RUeXBlPnt9Lm1fYS5zaXplKCkgJmx0OyAyCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA2ICZsdDsgMgotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KLSAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIFRlbXBsYXRlX0Zvb18yJmx0O2ludCwgMj4iIHRhZ3M9IlshaGlkZV1bLl1bY2xhc3NdW2ZhaWxpbmddW250dHBdW3Byb2R1Y3RdW3RlbXBsYXRlXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgVGVtcGxhdGVfRml4dHVyZV8yJmx0O1Rlc3RUeXBlPnt9Lm1fYS5zaXplKCkgJmx0OyAyCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAyICZsdDsgMgotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KLSAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIHN0ZDo6YXJyYXkmbHQ7ZmxvYXQsIDY+IiB0YWdzPSJbIWhpZGVdWy5dW2NsYXNzXVtmYWlsaW5nXVtudHRwXVtwcm9kdWN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIFRlbXBsYXRlX0ZpeHR1cmVfMiZsdDtUZXN0VHlwZT57fS5tX2Euc2l6ZSgpICZsdDsgMgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgNiAmbHQ7IDIKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+Ci0gICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBzdGQ6OmFycmF5Jmx0O2ludCwgMj4iIHRhZ3M9IlshaGlkZV1bLl1bY2xhc3NdW2ZhaWxpbmddW250dHBdW3Byb2R1Y3RdW3RlbXBsYXRlXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgVGVtcGxhdGVfRml4dHVyZV8yJmx0O1Rlc3RUeXBlPnt9Lm1fYS5zaXplKCkgJmx0OyAyCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAyICZsdDsgMgotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KLSAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtIFRlbXBsYXRlX0Zvb18yJmx0O2Zsb2F0LDY+IiB0YWdzPSJbY2xhc3NdW250dHBdW3Byb2R1Y3RdW3RlbXBsYXRlXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICBUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+e30ubV9hLnNpemUoKSA+PSAyCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA2ID49IDIKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KLSAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtIFRlbXBsYXRlX0Zvb18yJmx0O2ludCwyPiIgdGFncz0iW2NsYXNzXVtudHRwXVtwcm9kdWN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgVGVtcGxhdGVfRml4dHVyZV8yJmx0O1Rlc3RUeXBlPnt9Lm1fYS5zaXplKCkgPj0gMgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgMiA+PSAyCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+Ci0gICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSBzdGQ6OmFycmF5Jmx0O2Zsb2F0LDY+IiB0YWdzPSJbY2xhc3NdW250dHBdW3Byb2R1Y3RdW3RlbXBsYXRlXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICBUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+e30ubV9hLnNpemUoKSA+PSAyCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA2ID49IDIKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KLSAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtIHN0ZDo6YXJyYXkmbHQ7aW50LDI+IiB0YWdzPSJbY2xhc3NdW250dHBdW3Byb2R1Y3RdW3RlbXBsYXRlXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICBUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+e30ubV9hLnNpemUoKSA+PSAyCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAyID49IDIKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KLSAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIGRvdWJsZSIgdGFncz0iWyFoaWRlXVsuXVtjbGFzc11bZmFpbGluZ11bdGVtcGxhdGVdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIGRvdWJsZSIgdGFncz0iWy5dW2NsYXNzXVtmYWlsaW5nXVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgIFRlbXBsYXRlX0ZpeHR1cmUmbHQ7VGVzdFR5cGU+OjptX2EgPT0gMgpAQCAtMTQzNiw3ICsxMzI5LDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBmbG9hdCIgdGFncz0iWyFoaWRlXVsuXVtjbGFzc11bZmFpbGluZ11bdGVtcGxhdGVdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIGZsb2F0IiB0YWdzPSJbLl1bY2xhc3NdW2ZhaWxpbmddW3RlbXBsYXRlXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgVGVtcGxhdGVfRml4dHVyZSZsdDtUZXN0VHlwZT46Om1fYSA9PSAyCkBAIC0xNDQ3LDcgKzEzNDAsNyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIGludCIgdGFncz0iWyFoaWRlXVsuXVtjbGFzc11bZmFpbGluZ11bdGVtcGxhdGVdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIGludCIgdGFncz0iWy5dW2NsYXNzXVtmYWlsaW5nXVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgIFRlbXBsYXRlX0ZpeHR1cmUmbHQ7VGVzdFR5cGU+OjptX2EgPT0gMgpAQCAtMTQ5MSw3MyArMTM4NCw3IEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gMSIgdGFncz0iWyFoaWRlXVsuXVtjbGFzc11bZmFpbGluZ11bbnR0cF1bdGVtcGxhdGVdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0iZmFsc2UiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICBOdHRwX0ZpeHR1cmUmbHQ7Vj46OnZhbHVlID09IDAKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIDEgPT0gMAotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KLSAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSAzIiB0YWdzPSJbIWhpZGVdWy5dW2NsYXNzXVtmYWlsaW5nXVtudHRwXVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIE50dHBfRml4dHVyZSZsdDtWPjo6dmFsdWUgPT0gMAotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgMyA9PSAwCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgotICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IkEgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIDYiIHRhZ3M9IlshaGlkZV1bLl1bY2xhc3NdW2ZhaWxpbmddW250dHBdW3RlbXBsYXRlXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgTnR0cF9GaXh0dXJlJmx0O1Y+Ojp2YWx1ZSA9PSAwCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA2ID09IDAKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+Ci0gICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gMSIgdGFncz0iW2NsYXNzXVtudHRwXVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgTnR0cF9GaXh0dXJlJmx0O1Y+Ojp2YWx1ZSA+IDAKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIDEgPiAwCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+Ci0gICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gMyIgdGFncz0iW2NsYXNzXVtudHRwXVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgTnR0cF9GaXh0dXJlJmx0O1Y+Ojp2YWx1ZSA+IDAKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIDMgPiAwCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+Ci0gICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gNiIgdGFncz0iW2NsYXNzXVtudHRwXVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgTnR0cF9GaXh0dXJlJmx0O1Y+Ojp2YWx1ZSA+IDAKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIDYgPiAwCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+Ci0gICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iQSBURVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMiIHRhZ3M9IlshaGlkZV1bLl1bY2xhc3NdW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyIgdGFncz0iWy5dW2NsYXNzXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgbV9hID09IDIKQEAgLTE2MjMsNTAgKzE0NTAsNiBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IkEgVGVtcGxhdGUgcHJvZHVjdCB0ZXN0IGNhc2Ugd2l0aCBhcnJheSBzaWduYXR1cmUgLSBCYXImbHQ7ZmxvYXQsIDQyPiIgdGFncz0iW250dHBdW3Byb2R1Y3RdW3RlbXBsYXRlXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgeC5zaXplKCkgPiAwCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA0MiA+IDAKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KLSAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRlbXBsYXRlIHByb2R1Y3QgdGVzdCBjYXNlIHdpdGggYXJyYXkgc2lnbmF0dXJlIC0gQmFyJmx0O2ludCwgOT4iIHRhZ3M9IltudHRwXVtwcm9kdWN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHguc2l6ZSgpID4gMAotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgOSA+IDAKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KLSAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRlbXBsYXRlIHByb2R1Y3QgdGVzdCBjYXNlIHdpdGggYXJyYXkgc2lnbmF0dXJlIC0gc3RkOjphcnJheSZsdDtmbG9hdCwgNDI+IiB0YWdzPSJbbnR0cF1bcHJvZHVjdF1bdGVtcGxhdGVdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB4LnNpemUoKSA+IDAKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIDQyID4gMAotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgotICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IkEgVGVtcGxhdGUgcHJvZHVjdCB0ZXN0IGNhc2Ugd2l0aCBhcnJheSBzaWduYXR1cmUgLSBzdGQ6OmFycmF5Jmx0O2ludCwgOT4iIHRhZ3M9IltudHRwXVtwcm9kdWN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHguc2l6ZSgpID4gMAotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgOSA+IDAKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KLSAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSJBIGNvbXBhcmlzb24gdGhhdCB1c2VzIGxpdGVyYWxzIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBjb25zdHJ1Y3RvciIgdGFncz0iW0FwcHJveF0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQXBwcm94LnRlc3RzLmNwcCIgPgogICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9BcHByb3gudGVzdHMuY3BwIiA+CiAgICAgICAgIDxPcmlnaW5hbD4KQEAgLTE3MTgsNyArMTUwMSw3IEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iQSBjb3VwbGUgb2YgbmVzdGVkIHNlY3Rpb25zIGZvbGxvd2VkIGJ5IGEgZmFpbHVyZSIgdGFncz0iWyFoaWRlXVsuXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJBIGNvdXBsZSBvZiBuZXN0ZWQgc2VjdGlvbnMgZm9sbG93ZWQgYnkgYSBmYWlsdXJlIiB0YWdzPSJbLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgIDxTZWN0aW9uIG5hbWU9Ik91dGVyIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICAgIDxTZWN0aW9uIG5hbWU9IklubmVyIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KQEAgLTE3MzAsNyArMTUxMyw3IEBACiAgICAgICA8L0ZhaWx1cmU+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IkEgZmFpbGluZyBleHByZXNzaW9uIHdpdGggYSBub24gc3RyZWFtYWJsZSB0eXBlIGlzIHN0aWxsIGNhcHR1cmVkIiB0YWdzPSJbIWhpZGVdWy5dW1RyaWNreV1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVHJpY2t5LnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJBIGZhaWxpbmcgZXhwcmVzc2lvbiB3aXRoIGEgbm9uIHN0cmVhbWFibGUgdHlwZSBpcyBzdGlsbCBjYXB0dXJlZCIgdGFncz0iWy5dW1RyaWNreV1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVHJpY2t5LnRlc3RzLmNwcCIgPgogICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0iZmFsc2UiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RyaWNreS50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgICZhbXA7bzEgPT0gJmFtcDtvMgpAQCAtMTgyMiw3ICsxNjA1LDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJBbiB1bmNoZWNrZWQgZXhjZXB0aW9uIHJlcG9ydHMgdGhlIGxpbmUgb2YgdGhlIGxhc3QgYXNzZXJ0aW9uIiB0YWdzPSJbIWhpZGVdWyF0aHJvd3NdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0iQW4gdW5jaGVja2VkIGV4Y2VwdGlvbiByZXBvcnRzIHRoZSBsaW5lIG9mIHRoZSBsYXN0IGFzc2VydGlvbiIgdGFncz0iWyF0aHJvd3NdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgIDEgPT0gMQpAQCAtMjE3Miw2ICsxOTU1LDUyIEBACiAgICAgICA8L1NlY3Rpb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0iQXNzb3J0ZWQgbWlzY2VsbGFuZW91cyB0ZXN0cyIgdGFncz0iW0FwcHJveF0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQXBwcm94LnRlc3RzLmNwcCIgPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9BcHByb3gudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICBJTkZJTklUWSA9PSBBcHByb3goSU5GSU5JVFkpCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICBpbmZmID09IEFwcHJveCggaW5mICkKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQXBwcm94LnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgTkFOICE9IEFwcHJveChOQU4pCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICBuYW5mICE9IEFwcHJveCggbmFuICkKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfRkFMU0UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQXBwcm94LnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgIShOQU4gPT0gQXBwcm94KE5BTikpCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAhKG5hbmYgPT0gQXBwcm94KCBuYW4gKSkKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KKyAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJCaXRmaWVsZHMgY2FuIGJlIGNhcHR1cmVkICgjMTAyNykiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVHJpY2t5LnRlc3RzLmNwcCIgPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ucmlja3kudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB5LnYgPT0gMAorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMCA9PSAwCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RyaWNreS50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIDAgPT0geS52CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAwID09IDAKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KKyAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSJDQVBUVVJFIGNhbiBkZWFsIHdpdGggY29tcGxleCBleHByZXNzaW9ucyIgdGFncz0iW2NhcHR1cmVdW21lc3NhZ2VzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgogICAgICAgPEluZm8+CiAgICAgICAgIGEgOj0gMQpAQCAtMjIyMCw0MiArMjA0OSw2IEBACiAgICAgICA8L0luZm8+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iQ0FQVFVSRSBwYXJzZXMgc3RyaW5nIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzIiB0YWdzPSJbY2FwdHVyZV1bbWVzc2FnZXNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwIiA+Ci0gICAgICA8SW5mbz4KLSAgICAgICAgKCJjb21tYSwgaW4gc3RyaW5nIiwgImVzY2FwZWQsIFwiLCAiKSA6PSAiZXNjYXBlZCwgIiwgIgotICAgICAgPC9JbmZvPgotICAgICAgPEluZm8+Ci0gICAgICAgICJzaW5nbGUgcXVvdGUgaW4gc3RyaW5nLCcsIiA6PSAic2luZ2xlIHF1b3RlIGluIHN0cmluZywnLCIKLSAgICAgIDwvSW5mbz4KLSAgICAgIDxJbmZvPgotICAgICAgICAic29tZSBlc2NhcGVzLCBcXCxcXFxcIiA6PSAic29tZSBlc2NhcGVzLCBcLFxcIgotICAgICAgPC9JbmZvPgotICAgICAgPEluZm8+Ci0gICAgICAgICJzb21lLCApLCB1bm1hdGNoZWQsIH0gcHJlbmhlc2VzIHtbJmx0OyIgOj0gInNvbWUsICksIHVubWF0Y2hlZCwgfSBwcmVuaGVzZXMge1smbHQ7IgotICAgICAgPC9JbmZvPgotICAgICAgPEluZm8+Ci0gICAgICAgICciJyA6PSAnIicKLSAgICAgIDwvSW5mbz4KLSAgICAgIDxJbmZvPgotICAgICAgICAnXCcnIDo9ICcnJwotICAgICAgPC9JbmZvPgotICAgICAgPEluZm8+Ci0gICAgICAgICcsJyA6PSAnLCcKLSAgICAgIDwvSW5mbz4KLSAgICAgIDxJbmZvPgotICAgICAgICAnfScgOj0gJ30nCi0gICAgICA8L0luZm8+Ci0gICAgICA8SW5mbz4KLSAgICAgICAgJyknIDo9ICcpJwotICAgICAgPC9JbmZvPgotICAgICAgPEluZm8+Ci0gICAgICAgICcoJyA6PSAnKCcKLSAgICAgIDwvSW5mbz4KLSAgICAgIDxJbmZvPgotICAgICAgICAneycgOj0gJ3snCi0gICAgICA8L0luZm8+Ci0gICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+Ci0gICAgPC9UZXN0Q2FzZT4KICAgICA8VGVzdENhc2UgbmFtZT0iQ2FwdHVyZSBhbmQgaW5mbyBtZXNzYWdlcyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwIiA+CiAgICAgICA8U2VjdGlvbiBuYW1lPSJDYXB0dXJlIHNob3VsZCBzdHJpbmdpZnkgbGlrZSBhc3NlcnRpb25zIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHAiID4KICAgICAgICAgPEluZm8+CkBAIC0yNTI5LDQxICsyMzIyLDYgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJDb21wYXJpc29uIG9wcyIgdGFncz0iW3JuZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcCIgPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1JhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICBTaW1wbGVQY2czMnt9ID09IFNpbXBsZVBjZzMye30KLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIHs/fSA9PSB7P30KLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgU2ltcGxlUGNnMzJ7IDAgfSAhPSBTaW1wbGVQY2czMnt9Ci0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICB7P30gIT0gez99Ci0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX0ZBTFNFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUmFuZG9tTnVtYmVyR2VuZXJhdGlvbi50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICEoU2ltcGxlUGNnMzJ7IDEgfSA9PSBTaW1wbGVQY2czMnsgMiB9KQotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgISh7P30gPT0gez99KQotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9GQUxTRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1JhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAhKFNpbXBsZVBjZzMyeyAxIH0gIT0gU2ltcGxlUGNnMzJ7IDEgfSkKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICEoez99ICE9IHs/fSkKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KLSAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSJDb21wYXJpc29uIHdpdGggZXhwbGljaXRseSBjb252ZXJ0aWJsZSB0eXBlcyIgdGFncz0iW0FwcHJveF0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQXBwcm94LnRlc3RzLmNwcCIgPgogICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9BcHByb3gudGVzdHMuY3BwIiA+CiAgICAgICAgIDxPcmlnaW5hbD4KQEAgLTI4MzIsMjYgKzI1OTAsNyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IkNvbXBvc2VkIG1hdGNoZXJzIGFyZSBkaXN0aW5jdCIgdGFncz0iW2NvbXBvc2VkXVttYXRjaGVyc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcyKCksICFjb21wb3NlZDEKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICJzb21lIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRleHQgdGhhdCBjb250YWlucyBvbmUgY29tbW9uIHdvcmQiIG5vdCAoIGNvbnRhaW5zOiAic3RyaW5nIiBvciBjb250YWluczogInJhbmRvbSIgKQotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgdGVzdFN0cmluZ0Zvck1hdGNoaW5nMigpLCBjb21wb3NlZDIKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICJzb21lIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRleHQgdGhhdCBjb250YWlucyBvbmUgY29tbW9uIHdvcmQiICggY29udGFpbnM6ICJzdHJpbmciIG9yIGNvbnRhaW5zOiAicmFuZG9tIiBvciBjb250YWluczogImRpZmZlcmVudCIgKQotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgotICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IkNvbnRhaW5zIHN0cmluZyBtYXRjaGVyIiB0YWdzPSJbIWhpZGVdWy5dW2ZhaWxpbmddW21hdGNoZXJzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0iQ29udGFpbnMgc3RyaW5nIG1hdGNoZXIiIHRhZ3M9IlsuXVtmYWlsaW5nXVttYXRjaGVyc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iQ0hFQ0tfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBDb250YWlucygibm90IHRoZXJlIiwgQ2F0Y2g6OkNhc2VTZW5zaXRpdmU6Ok5vKQpAQCAtMjg3MCwxNjEgKzI2MDksNyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJDb3B5IGFuZCB0aGVuIGdlbmVyYXRlIGEgcmFuZ2UiIHRhZ3M9IltnZW5lcmF0b3JzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgotICAgICAgPFNlY3Rpb24gbmFtZT0iZnJvbSB2YXIgYW5kIGl0ZXJhdG9ycyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgZWxlbSAlIDIgPT0gMQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMSA9PSAxCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iZnJvbSB2YXIgYW5kIGl0ZXJhdG9ycyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgZWxlbSAlIDIgPT0gMQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMSA9PSAxCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iZnJvbSB2YXIgYW5kIGl0ZXJhdG9ycyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgZWxlbSAlIDIgPT0gMQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMSA9PSAxCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iZnJvbSB2YXIgYW5kIGl0ZXJhdG9ycyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgZWxlbSAlIDIgPT0gMQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMSA9PSAxCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iZnJvbSB2YXIgYW5kIGl0ZXJhdG9ycyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgZWxlbSAlIDIgPT0gMQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMSA9PSAxCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iZnJvbSB2YXIgYW5kIGl0ZXJhdG9ycyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgZWxlbSAlIDIgPT0gMQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMSA9PSAxCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iRnJvbSBhIHRlbXBvcmFyeSBjb250YWluZXIiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIGVsZW0gJSAyID09IDEKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDEgPT0gMQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9IkZyb20gYSB0ZW1wb3JhcnkgY29udGFpbmVyIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBlbGVtICUgMiA9PSAxCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAxID09IDEKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICA8L1NlY3Rpb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJGcm9tIGEgdGVtcG9yYXJ5IGNvbnRhaW5lciIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgZWxlbSAlIDIgPT0gMQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMSA9PSAxCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iRnJvbSBhIHRlbXBvcmFyeSBjb250YWluZXIiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIGVsZW0gJSAyID09IDEKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDEgPT0gMQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9IkZyb20gYSB0ZW1wb3JhcnkgY29udGFpbmVyIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBlbGVtICUgMiA9PSAxCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAxID09IDEKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICA8L1NlY3Rpb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJGcm9tIGEgdGVtcG9yYXJ5IGNvbnRhaW5lciIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgZWxlbSAlIDIgPT0gMQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMSA9PSAxCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iRmluYWwgdmFsaWRhdGlvbiIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgY2FsbF9jb3VudCA9PSAxCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAxID09IDEKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBtYWtlX2RhdGEoKS5zaXplKCkgPT0gdGVzdF9jb3VudAotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgNiA9PSA2Ci0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgotICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IkN1c3RvbSBleGNlcHRpb25zIGNhbiBiZSB0cmFuc2xhdGVkIHdoZW4gdGVzdGluZyBmb3Igbm90aHJvdyIgdGFncz0iWyFoaWRlXVshdGhyb3dzXVsuXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9IkN1c3RvbSBleGNlcHRpb25zIGNhbiBiZSB0cmFuc2xhdGVkIHdoZW4gdGVzdGluZyBmb3Igbm90aHJvdyIgdGFncz0iWyF0aHJvd3NdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJSRVFVSVJFX05PVEhST1ciIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgdGhyb3dDdXN0b20oKQpAQCAtMzAzOCw3ICsyNjIzLDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iQ3VzdG9tIGV4Y2VwdGlvbnMgY2FuIGJlIHRyYW5zbGF0ZWQgd2hlbiB0ZXN0aW5nIGZvciB0aHJvd2luZyBhcyBzb21ldGhpbmcgZWxzZSIgdGFncz0iWyFoaWRlXVshdGhyb3dzXVsuXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9IkN1c3RvbSBleGNlcHRpb25zIGNhbiBiZSB0cmFuc2xhdGVkIHdoZW4gdGVzdGluZyBmb3IgdGhyb3dpbmcgYXMgc29tZXRoaW5nIGVsc2UiIHRhZ3M9IlshdGhyb3dzXVsuXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iUkVRVUlSRV9USFJPV1NfQVMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgdGhyb3dDdXN0b20oKSwgc3RkOjpleGNlcHRpb24KQEAgLTMwNTIsNyArMjYzNyw3IEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IkN1c3RvbSBzdGQtZXhjZXB0aW9ucyBjYW4gYmUgY3VzdG9tIHRyYW5zbGF0ZWQiIHRhZ3M9IlshaGlkZV1bIXRocm93c11bLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJDdXN0b20gc3RkLWV4Y2VwdGlvbnMgY2FuIGJlIGN1c3RvbSB0cmFuc2xhdGVkIiB0YWdzPSJbIXRocm93c11bLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcCIgPgogICAgICAgPEV4Y2VwdGlvbiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KICAgICAgICAgY3VzdG9tIHN0ZCBleGNlcHRpb24KICAgICAgIDwvRXhjZXB0aW9uPgpAQCAtMzA3NywzNiArMjY2Miw3IEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iRGlyZWN0bHkgY3JlYXRpbmcgYW4gRW51bUluZm8iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9Ub1N0cmluZy50ZXN0cy5jcHAiID4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvVG9TdHJpbmcudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICBlbnVtSW5mby0+bG9va3VwKDApID09ICJWYWx1ZTEiCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICBWYWx1ZTEgPT0gIlZhbHVlMSIKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvVG9TdHJpbmcudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICBlbnVtSW5mby0+bG9va3VwKDEpID09ICJWYWx1ZTIiCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICBWYWx1ZTIgPT0gIlZhbHVlMiIKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvVG9TdHJpbmcudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICBlbnVtSW5mby0+bG9va3VwKDMpID09ICJ7KiogdW5leHBlY3RlZCBlbnVtIHZhbHVlICoqfSIKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIHsqKiB1bmV4cGVjdGVkIGVudW0gdmFsdWUgKip9Ci09PQotInsqKiB1bmV4cGVjdGVkIGVudW0gdmFsdWUgKip9IgotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgotICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IkVuZHNXaXRoIHN0cmluZyBtYXRjaGVyIiB0YWdzPSJbIWhpZGVdWy5dW2ZhaWxpbmddW21hdGNoZXJzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0iRW5kc1dpdGggc3RyaW5nIG1hdGNoZXIiIHRhZ3M9IlsuXVtmYWlsaW5nXVttYXRjaGVyc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iQ0hFQ0tfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBFbmRzV2l0aCgiU3Vic3RyaW5nIikKQEAgLTMxMjUsNzAgKzI2ODEsNiBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJFbnVtcyBjYW4gcXVpY2tseSBoYXZlIHN0cmluZ2lmaWNhdGlvbiBlbmFibGVkIHVzaW5nIFJFR0lTVEVSX0VOVU0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRW51bVRvU3RyaW5nLnRlc3RzLmNwcCIgPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FbnVtVG9TdHJpbmcudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICBzdHJpbmdpZnkoIEVudW1DbGFzczM6OlZhbHVlMSApID09ICJWYWx1ZTEiCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAiVmFsdWUxIiA9PSAiVmFsdWUxIgotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FbnVtVG9TdHJpbmcudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICBzdHJpbmdpZnkoIEVudW1DbGFzczM6OlZhbHVlMiApID09ICJWYWx1ZTIiCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAiVmFsdWUyIiA9PSAiVmFsdWUyIgotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FbnVtVG9TdHJpbmcudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICBzdHJpbmdpZnkoIEVudW1DbGFzczM6OlZhbHVlMyApID09ICJWYWx1ZTMiCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAiVmFsdWUzIiA9PSAiVmFsdWUzIgotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FbnVtVG9TdHJpbmcudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICBzdHJpbmdpZnkoIEVudW1DbGFzczM6OlZhbHVlNCApID09ICJ7KiogdW5leHBlY3RlZCBlbnVtIHZhbHVlICoqfSIKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICJ7KiogdW5leHBlY3RlZCBlbnVtIHZhbHVlICoqfSIKLT09Ci0ieyoqIHVuZXhwZWN0ZWQgZW51bSB2YWx1ZSAqKn0iCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0VudW1Ub1N0cmluZy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHN0cmluZ2lmeSggZWMzICkgPT0gIlZhbHVlMiIKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICJWYWx1ZTIiID09ICJWYWx1ZTIiCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+Ci0gICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iRW51bXMgaW4gbmFtZXNwYWNlcyBjYW4gcXVpY2tseSBoYXZlIHN0cmluZ2lmaWNhdGlvbiBlbmFibGVkIHVzaW5nIFJFR0lTVEVSX0VOVU0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRW51bVRvU3RyaW5nLnRlc3RzLmNwcCIgPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FbnVtVG9TdHJpbmcudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICBzdHJpbmdpZnkoIEJpa2VzaGVkOjpDb2xvdXJzOjpSZWQgKSA9PSAiUmVkIgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgIlJlZCIgPT0gIlJlZCIKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRW51bVRvU3RyaW5nLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgc3RyaW5naWZ5KCBCaWtlc2hlZDo6Q29sb3Vyczo6Qmx1ZSApID09ICJCbHVlIgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgIkJsdWUiID09ICJCbHVlIgotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgotICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9IkVwc2lsb24gb25seSBhcHBsaWVzIHRvIEFwcHJveCdzIHZhbHVlIiB0YWdzPSJbQXBwcm94XSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9BcHByb3gudGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0FwcHJveC50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgpAQCAtMzIwMCw3ICsyNjkyLDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJFcXVhbGl0eSBjaGVja3MgdGhhdCBzaG91bGQgZmFpbCIgdGFncz0iWyFoaWRlXVshbWF5ZmFpbF1bLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ29uZGl0aW9uLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJFcXVhbGl0eSBjaGVja3MgdGhhdCBzaG91bGQgZmFpbCIgdGFncz0iWyFtYXlmYWlsXVsuXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Db25kaXRpb24udGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ29uZGl0aW9uLnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgZGF0YS5pbnRfc2V2ZW4gPT0gNgpAQCAtMzM4NSw3ICsyODc3LDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJFcXVhbHMgc3RyaW5nIG1hdGNoZXIiIHRhZ3M9IlshaGlkZV1bLl1bZmFpbGluZ11bbWF0Y2hlcnNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJFcXVhbHMgc3RyaW5nIG1hdGNoZXIiIHRhZ3M9IlsuXVtmYWlsaW5nXVttYXRjaGVyc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iQ0hFQ0tfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBFcXVhbHMoInRoaXMgc3RyaW5nIGNvbnRhaW5zICdBQkMnIGFzIGEgc3Vic3RyaW5nIikKQEAgLTM0MzUsNyArMjkyNyw3IEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iRXhjZXB0aW9uIG1hdGNoZXJzIHRoYXQgZmFpbCIgdGFncz0iWyFoaWRlXVshdGhyb3dzXVsuXVtleGNlcHRpb25zXVtmYWlsaW5nXVttYXRjaGVyc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9IkV4Y2VwdGlvbiBtYXRjaGVycyB0aGF0IGZhaWwiIHRhZ3M9IlshdGhyb3dzXVsuXVtleGNlcHRpb25zXVtmYWlsaW5nXVttYXRjaGVyc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICA8U2VjdGlvbiBuYW1lPSJObyBleGNlcHRpb24iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJDSEVDS19USFJPV1NfTUFUQ0hFUyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8T3JpZ2luYWw+CkBAIC0zNDgzLDcgKzI5NzUsNyBAQAogICAgICAgPFNlY3Rpb24gbmFtZT0iQ29udGVudHMgYXJlIHdyb25nIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iQ0hFQ0tfVEhST1dTX01BVENIRVMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgdGhyb3dzU3BlY2lhbEV4Y2VwdGlvbigzKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfQorICAgICAgICAgICAgdGhyb3dzKDMpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9CiAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICA8RXhwYW5kZWQ+CiAgICAgICAgICAgICBTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAxCkBAIC0zNDkxLDcgKzI5ODMsNyBAQAogICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJSRVFVSVJFX1RIUk9XU19NQVRDSEVTIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHRocm93c1NwZWNpYWxFeGNlcHRpb24oNCksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0KKyAgICAgICAgICAgIHRocm93cyg0KSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfQogICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgPEV4cGFuZGVkPgogICAgICAgICAgICAgU3BlY2lhbEV4Y2VwdGlvbjo6d2hhdCBzcGVjaWFsIGV4Y2VwdGlvbiBoYXMgdmFsdWUgb2YgMQpAQCAtMzUwNCw3ICsyOTk2LDcgQEAKICAgICA8VGVzdENhc2UgbmFtZT0iRXhjZXB0aW9uIG1hdGNoZXJzIHRoYXQgc3VjY2VlZCIgdGFncz0iWyF0aHJvd3NdW2V4Y2VwdGlvbnNdW21hdGNoZXJzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLX1RIUk9XU19NQVRDSEVTIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgdGhyb3dzU3BlY2lhbEV4Y2VwdGlvbigxKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfQorICAgICAgICAgIHRocm93cygxKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfQogICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICA8RXhwYW5kZWQ+CiAgICAgICAgICAgU3BlY2lhbEV4Y2VwdGlvbjo6d2hhdCBzcGVjaWFsIGV4Y2VwdGlvbiBoYXMgdmFsdWUgb2YgMQpAQCAtMzUxMiw3ICszMDA0LDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhST1dTX01BVENIRVMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB0aHJvd3NTcGVjaWFsRXhjZXB0aW9uKDIpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezJ9CisgICAgICAgICAgdGhyb3dzKDIpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezJ9CiAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgIDxFeHBhbmRlZD4KICAgICAgICAgICBTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAyCkBAIC0zNTgwLDQyICszMDcyLDcgQEAKICAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJFeGNlcHRpb25zIG1hdGNoZXJzIiB0YWdzPSJbIXRocm93c11bZXhjZXB0aW9uc11bbWF0Y2hlcnNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USFJPV1NfTUFUQ0hFUyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHRocm93c0Rlcml2ZWRFeGNlcHRpb24oKSwgRGVyaXZlZEV4Y2VwdGlvbiwgTWVzc2FnZSgiRGVyaXZlZEV4Y2VwdGlvbjo6d2hhdCIpCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICBEZXJpdmVkRXhjZXB0aW9uOjp3aGF0IGV4Y2VwdGlvbiBtZXNzYWdlIG1hdGNoZXMgIkRlcml2ZWRFeGNlcHRpb246OndoYXQiCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIUk9XU19NQVRDSEVTIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgdGhyb3dzRGVyaXZlZEV4Y2VwdGlvbigpLCBEZXJpdmVkRXhjZXB0aW9uLCAhTWVzc2FnZSgiZGVyaXZlZGV4Y2VwdGlvbjo6d2hhdCIpCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICBEZXJpdmVkRXhjZXB0aW9uOjp3aGF0IG5vdCBleGNlcHRpb24gbWVzc2FnZSBtYXRjaGVzICJkZXJpdmVkZXhjZXB0aW9uOjp3aGF0IgotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USFJPV1NfTUFUQ0hFUyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHRocm93c1NwZWNpYWxFeGNlcHRpb24oMiksIFNwZWNpYWxFeGNlcHRpb24sICFNZXNzYWdlKCJEZXJpdmVkRXhjZXB0aW9uOjp3aGF0IikKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIFNwZWNpYWxFeGNlcHRpb246OndoYXQgbm90IGV4Y2VwdGlvbiBtZXNzYWdlIG1hdGNoZXMgIkRlcml2ZWRFeGNlcHRpb246OndoYXQiCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIUk9XU19NQVRDSEVTIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgdGhyb3dzU3BlY2lhbEV4Y2VwdGlvbigyKSwgU3BlY2lhbEV4Y2VwdGlvbiwgTWVzc2FnZSgiU3BlY2lhbEV4Y2VwdGlvbjo6d2hhdCIpCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICBTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IGV4Y2VwdGlvbiBtZXNzYWdlIG1hdGNoZXMgIlNwZWNpYWxFeGNlcHRpb246OndoYXQiCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+Ci0gICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iRXhwZWN0ZWQgZXhjZXB0aW9ucyB0aGF0IGRvbid0IHRocm93IG9yIHVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBmYWlsIHRoZSB0ZXN0IiB0YWdzPSJbIWhpZGVdWyF0aHJvd3NdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0iRXhwZWN0ZWQgZXhjZXB0aW9ucyB0aGF0IGRvbid0IHRocm93IG9yIHVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBmYWlsIHRoZSB0ZXN0IiB0YWdzPSJbIXRocm93c11bLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcCIgPgogICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0iZmFsc2UiIHR5cGU9IkNIRUNLX1RIUk9XU19BUyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIiA+CiAgICAgICAgIDxPcmlnaW5hbD4KICAgICAgICAgICB0aGlzVGhyb3dzKCksIHN0ZDo6c3RyaW5nCkBAIC0zNjQ4LDE3ICszMTA1LDE3IEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IkZBSUwgYWJvcnRzIHRoZSB0ZXN0IiB0YWdzPSJbIWhpZGVdWy5dW2ZhaWxpbmddW21lc3NhZ2VzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJGQUlMIGFib3J0cyB0aGUgdGVzdCIgdGFncz0iWy5dW2ZhaWxpbmddW21lc3NhZ2VzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgogICAgICAgPEZhaWx1cmUgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgogICAgICAgICBUaGlzIGlzIGEgZmFpbHVyZQogICAgICAgPC9GYWlsdXJlPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJGQUlMIGRvZXMgbm90IHJlcXVpcmUgYW4gYXJndW1lbnQiIHRhZ3M9IlshaGlkZV1bLl1bZmFpbGluZ11bbWVzc2FnZXNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9IkZBSUwgZG9lcyBub3QgcmVxdWlyZSBhbiBhcmd1bWVudCIgdGFncz0iWy5dW2ZhaWxpbmddW21lc3NhZ2VzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgogICAgICAgPEZhaWx1cmUgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgLz4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iRkFJTF9DSEVDSyBkb2VzIG5vdCBhYm9ydCB0aGUgdGVzdCIgdGFncz0iWyFoaWRlXVsuXVtmYWlsaW5nXVttZXNzYWdlc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0iRkFJTF9DSEVDSyBkb2VzIG5vdCBhYm9ydCB0aGUgdGVzdCIgdGFncz0iWy5dW2ZhaWxpbmddW21lc3NhZ2VzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgogICAgICAgPEZhaWx1cmUgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgogICAgICAgICBUaGlzIGlzIGEgZmFpbHVyZQogICAgICAgPC9GYWlsdXJlPgpAQCAtMzcxMSw1MiArMzE2OCw2IEBACiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KICAgICA8VGVzdENhc2UgbmFtZT0iRmxvYXRpbmcgcG9pbnQgbWF0Y2hlcnM6IGRvdWJsZSIgdGFncz0iW2Zsb2F0aW5nLXBvaW50XVttYXRjaGVyc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJSZWxhdGl2ZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIDEwLiwgV2l0aGluUmVsKDExLjEsIDAuMSkKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDEwLjAgYW5kIDExLjEgYXJlIHdpdGhpbiAxMCUgb2YgZWFjaCBvdGhlcgotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIDEwLiwgIVdpdGhpblJlbCgxMS4yLCAwLjEpCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAxMC4wIG5vdCBhbmQgMTEuMiBhcmUgd2l0aGluIDEwJSBvZiBlYWNoIG90aGVyCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgMS4sICFXaXRoaW5SZWwoMC4sIDAuOTkpCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAxLjAgbm90IGFuZCAwIGFyZSB3aXRoaW4gOTklIG9mIGVhY2ggb3RoZXIKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAtMC4sIFdpdGhpblJlbCgwLikKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIC0wLjAgYW5kIDAgYXJlIHdpdGhpbiAyLjIyMDQ1ZS0xMiUgb2YgZWFjaCBvdGhlcgotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0iU29tZSBzdWJub3JtYWwgdmFsdWVzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgdjEsIFdpdGhpblJlbCh2MikKLSAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDAuMCBhbmQgMi4yMjUwN2UtMzA4IGFyZSB3aXRoaW4gMi4yMjA0NWUtMTIlIG9mIGVhY2ggb3RoZXIKLSAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICAgIDwvU2VjdGlvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxTZWN0aW9uIG5hbWU9Ik1hcmdpbiIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KQEAgLTM3OTIsNiArMzIwMywxNCBAQAogICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBOQU4sICFXaXRoaW5BYnMoTkFOLCAwKQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgbmFuZiBub3QgaXMgd2l0aGluIDAuMCBvZiBuYW4KKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgICAxMS4sICFXaXRoaW5BYnMoMTAuLCAwLjUpCiAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICA8RXhwYW5kZWQ+CkBAIC0zODIyLDcgKzMyNDEsNyBAQAogICAgICAgICAgICAgLTEwLjAgaXMgd2l0aGluIDAuNSBvZiAtOS42CiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI4IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI5IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgogICAgICAgPC9TZWN0aW9uPgogICAgICAgPFNlY3Rpb24gbmFtZT0iVUxQcyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgpAQCAtMzgzMCw3ICszMjQ5LDcgQEAKICAgICAgICAgICAgIDEuLCBXaXRoaW5VTFAoMS4sIDApCiAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAxLjAgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjAwMDAwMDAwMDAwMDAwMDBlKzAwIChbMS4wMDAwMDAwMDAwMDAwMDAwZSswMCwgMS4wMDAwMDAwMDAwMDAwMDAwZSswMF0pCisgICAgICAgICAgICAxLjAgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjAKICAgICAgICAgICA8L0V4cGFuZGVkPgogICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KQEAgLTM4MzgsMzEgKzMyNTcsMjMgQEAKICAgICAgICAgICAgIG5leHRhZnRlcigxLiwgMi4pLCBXaXRoaW5VTFAoMS4sIDEpCiAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAxLjAgaXMgd2l0aGluIDEgVUxQcyBvZiAxLjAwMDAwMDAwMDAwMDAwMDBlKzAwIChbOS45OTk5OTk5OTk5OTk5OTg5ZS0wMSwgMS4wMDAwMDAwMDAwMDAwMDAyZSswMF0pCisgICAgICAgICAgICAxLjAgaXMgd2l0aGluIDEgVUxQcyBvZiAxLjAKICAgICAgICAgICA8L0V4cGFuZGVkPgogICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAwLiwgV2l0aGluVUxQKG5leHRhZnRlcigwLiwgMS4pLCAxKQorICAgICAgICAgICAgbmV4dGFmdGVyKDEuLCAwLiksIFdpdGhpblVMUCgxLiwgMSkKICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDAuMCBpcyB3aXRoaW4gMSBVTFBzIG9mIDQuOTQwNjU2NDU4NDEyNDY1NGUtMzI0IChbMC4wMDAwMDAwMDAwMDAwMDAwZSswMCwgOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjRdKQorICAgICAgICAgICAgMS4wIGlzIHdpdGhpbiAxIFVMUHMgb2YgMS4wCiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgMS4sIFdpdGhpblVMUChuZXh0YWZ0ZXIoMS4sIDAuKSwgMSkKKyAgICAgICAgICAgIG5leHRhZnRlcigxLiwgMi4pLCAhV2l0aGluVUxQKDEuLCAwKQogICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMS4wIGlzIHdpdGhpbiAxIFVMUHMgb2YgOS45OTk5OTk5OTk5OTk5OTg5ZS0wMSAoWzkuOTk5OTk5OTk5OTk5OTk3OGUtMDEsIDEuMDAwMDAwMDAwMDAwMDAwMGUrMDBdKQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIDEuLCAhV2l0aGluVUxQKG5leHRhZnRlcigxLiwgMi4pLCAwKQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMS4wIG5vdCBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMDAwMDAwMDAwMDAwMDAwMmUrMDAgKFsxLjAwMDAwMDAwMDAwMDAwMDJlKzAwLCAxLjAwMDAwMDAwMDAwMDAwMDJlKzAwXSkKKyAgICAgICAgICAgIDEuMCBub3QgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjAKICAgICAgICAgICA8L0V4cGFuZGVkPgogICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KQEAgLTM4NzAsNyArMzI4MSw3IEBACiAgICAgICAgICAgICAxLiwgV2l0aGluVUxQKDEuLCAwKQogICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMS4wIGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wMDAwMDAwMDAwMDAwMDAwZSswMCAoWzEuMDAwMDAwMDAwMDAwMDAwMGUrMDAsIDEuMDAwMDAwMDAwMDAwMDAwMGUrMDBdKQorICAgICAgICAgICAgMS4wIGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wCiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CkBAIC0zODc4LDcgKzMyODksMTUgQEAKICAgICAgICAgICAgIC0wLiwgV2l0aGluVUxQKDAuLCAwKQogICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgLTAuMCBpcyB3aXRoaW4gMCBVTFBzIG9mIDAuMDAwMDAwMDAwMDAwMDAwMGUrMDAgKFswLjAwMDAwMDAwMDAwMDAwMDBlKzAwLCAwLjAwMDAwMDAwMDAwMDAwMDBlKzAwXSkKKyAgICAgICAgICAgIC0wLjAgaXMgd2l0aGluIDAgVUxQcyBvZiAwLjAKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBOQU4sICFXaXRoaW5VTFAoTkFOLCAxMjMpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICBuYW5mIG5vdCBpcyB3aXRoaW4gMTIzIFVMUHMgb2YgbmFuZgogICAgICAgICAgIDwvRXhwYW5kZWQ+CiAgICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNyIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KQEAgLTM4ODksNyArMzMwOCw3IEBACiAgICAgICAgICAgICAxLiwgV2l0aGluQWJzKDEuLCAwLjUpIHx8IFdpdGhpblVMUCgyLiwgMSkKICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDEuMCAoIGlzIHdpdGhpbiAwLjUgb2YgMS4wIG9yIGlzIHdpdGhpbiAxIFVMUHMgb2YgMi4wMDAwMDAwMDAwMDAwMDAwZSswMCAoWzEuOTk5OTk5OTk5OTk5OTk5OGUrMDAsIDIuMDAwMDAwMDAwMDAwMDAwNGUrMDBdKSApCisgICAgICAgICAgICAxLjAgKCBpcyB3aXRoaW4gMC41IG9mIDEuMCBvciBpcyB3aXRoaW4gMSBVTFBzIG9mIDIuMCApCiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CkBAIC0zODk3LDE1ICszMzE2LDE1IEBACiAgICAgICAgICAgICAxLiwgV2l0aGluQWJzKDIuLCAwLjUpIHx8IFdpdGhpblVMUCgxLiwgMCkKICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDEuMCAoIGlzIHdpdGhpbiAwLjUgb2YgMi4wIG9yIGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wMDAwMDAwMDAwMDAwMDAwZSswMCAoWzEuMDAwMDAwMDAwMDAwMDAwMGUrMDAsIDEuMDAwMDAwMDAwMDAwMDAwMGUrMDBdKSApCisgICAgICAgICAgICAxLjAgKCBpcyB3aXRoaW4gMC41IG9mIDIuMCBvciBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMCApCiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgMC4wMDAxLCBXaXRoaW5BYnMoMC4sIDAuMDAxKSB8fCBXaXRoaW5SZWwoMC4sIDAuMSkKKyAgICAgICAgICAgIE5BTiwgIShXaXRoaW5BYnMoTkFOLCAxMDApIHx8IFdpdGhpblVMUChOQU4sIDEyMykpCiAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAwLjAwMDEgKCBpcyB3aXRoaW4gMC4wMDEgb2YgMC4wIG9yIGFuZCAwIGFyZSB3aXRoaW4gMTAlIG9mIGVhY2ggb3RoZXIgKQorICAgICAgICAgICAgbmFuZiBub3QgKCBpcyB3aXRoaW4gMTAwLjAgb2YgbmFuIG9yIGlzIHdpdGhpbiAxMjMgVUxQcyBvZiBuYW5mICkKICAgICAgICAgICA8L0V4cGFuZGVkPgogICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjMiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CkBAIC0zOTM1LDgxICszMzU0LDE5IEBACiAgICAgICAgICAgICBXaXRoaW5VTFAoMS4sIDApCiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX05PVEhST1ciIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgV2l0aGluUmVsKDEuLCAwLikKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIFdpdGhpblJlbCgxLiwgMC4pCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIUk9XU19BUyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBXaXRoaW5SZWwoMS4sIC0wLjIpLCBzdGQ6OmRvbWFpbl9lcnJvcgorICAgICAgICAgICAgV2l0aGluVUxQKDEuLCAtMSksIHN0ZDo6ZG9tYWluX2Vycm9yCiAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICBXaXRoaW5SZWwoMS4sIC0wLjIpLCBzdGQ6OmRvbWFpbl9lcnJvcgorICAgICAgICAgICAgV2l0aGluVUxQKDEuLCAtMSksIHN0ZDo6ZG9tYWluX2Vycm9yCiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIUk9XU19BUyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBXaXRoaW5SZWwoMS4sIDEuKSwgc3RkOjpkb21haW5fZXJyb3IKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIFdpdGhpblJlbCgxLiwgMS4pLCBzdGQ6OmRvbWFpbl9lcnJvcgotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KICAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSJGbG9hdGluZyBwb2ludCBtYXRjaGVyczogZmxvYXQiIHRhZ3M9IltmbG9hdGluZy1wb2ludF1bbWF0Y2hlcnNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgotICAgICAgPFNlY3Rpb24gbmFtZT0iUmVsYXRpdmUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAxMC5mLCBXaXRoaW5SZWwoMTEuMWYsIDAuMWYpCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAxMC4wZiBhbmQgMTEuMSBhcmUgd2l0aGluIDEwJSBvZiBlYWNoIG90aGVyCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgMTAuZiwgIVdpdGhpblJlbCgxMS4yZiwgMC4xZikKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDEwLjBmIG5vdCBhbmQgMTEuMiBhcmUgd2l0aGluIDEwJSBvZiBlYWNoIG90aGVyCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgMS5mLCAhV2l0aGluUmVsKDAuZiwgMC45OWYpCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAxLjBmIG5vdCBhbmQgMCBhcmUgd2l0aGluIDk5JSBvZiBlYWNoIG90aGVyCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgLTAuZiwgV2l0aGluUmVsKDAuZikKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIC0wLjBmIGFuZCAwIGFyZSB3aXRoaW4gMC4wMDExOTIwOSUgb2YgZWFjaCBvdGhlcgotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0iU29tZSBzdWJub3JtYWwgdmFsdWVzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgdjEsIFdpdGhpblJlbCh2MikKLSAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDAuMGYgYW5kIDEuMTc1NDllLTM4IGFyZSB3aXRoaW4gMC4wMDExOTIwOSUgb2YgZWFjaCBvdGhlcgotICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgICAgPC9TZWN0aW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI1IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgogICAgICAgPFNlY3Rpb24gbmFtZT0iTWFyZ2luIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgpAQCAtNDA1Myw2ICszNDEwLDE0IEBACiAgICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIE5BTiwgIVdpdGhpbkFicyhOQU4sIDApCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICBuYW5mIG5vdCBpcyB3aXRoaW4gMC4wIG9mIG5hbgorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KICAgICAgICAgICAgIDExLmYsICFXaXRoaW5BYnMoMTAuZiwgMC41ZikKICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KQEAgLTQwODMsNyArMzQ0OCw3IEBACiAgICAgICAgICAgICAtMTAuMGYgaXMgd2l0aGluIDAuNSBvZiAtOS42MDAwMDAzODE1CiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI5IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxMCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KICAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxTZWN0aW9uIG5hbWU9IlVMUHMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KQEAgLTQwOTEsNyArMzQ1Niw3IEBACiAgICAgICAgICAgICAxLmYsIFdpdGhpblVMUCgxLmYsIDApCiAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAxLjBmIGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wMDAwMDAwMGUrMDBmIChbMS4wMDAwMDAwMGUrMDAsIDEuMDAwMDAwMDBlKzAwXSkKKyAgICAgICAgICAgIDEuMGYgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjBmCiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CkBAIC00MDk5LDMxICszNDY0LDIzIEBACiAgICAgICAgICAgICBuZXh0YWZ0ZXIoMS5mLCAyLmYpLCBXaXRoaW5VTFAoMS5mLCAxKQogICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMS4wZiBpcyB3aXRoaW4gMSBVTFBzIG9mIDEuMDAwMDAwMDBlKzAwZiAoWzkuOTk5OTk5NDBlLTAxLCAxLjAwMDAwMDEyZSswMF0pCisgICAgICAgICAgICAxLjBmIGlzIHdpdGhpbiAxIFVMUHMgb2YgMS4wZgogICAgICAgICAgIDwvRXhwYW5kZWQ+CiAgICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIDAuZiwgV2l0aGluVUxQKG5leHRhZnRlcigwLmYsIDEuZiksIDEpCisgICAgICAgICAgICBuZXh0YWZ0ZXIoMS5mLCAwLmYpLCBXaXRoaW5VTFAoMS5mLCAxKQogICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMC4wZiBpcyB3aXRoaW4gMSBVTFBzIG9mIDEuNDAxMjk4NDZlLTQ1ZiAoWzAuMDAwMDAwMDBlKzAwLCAyLjgwMjU5NjkzZS00NV0pCisgICAgICAgICAgICAxLjBmIGlzIHdpdGhpbiAxIFVMUHMgb2YgMS4wZgogICAgICAgICAgIDwvRXhwYW5kZWQ+CiAgICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIDEuZiwgV2l0aGluVUxQKG5leHRhZnRlcigxLmYsIDAuZiksIDEpCisgICAgICAgICAgICBuZXh0YWZ0ZXIoMS5mLCAyLmYpLCAhV2l0aGluVUxQKDEuZiwgMCkKICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDEuMGYgaXMgd2l0aGluIDEgVUxQcyBvZiA5Ljk5OTk5OTQwZS0wMWYgKFs5Ljk5OTk5ODgxZS0wMSwgMS4wMDAwMDAwMGUrMDBdKQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIDEuZiwgIVdpdGhpblVMUChuZXh0YWZ0ZXIoMS5mLCAyLmYpLCAwKQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMS4wZiBub3QgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjAwMDAwMDEyZSswMGYgKFsxLjAwMDAwMDEyZSswMCwgMS4wMDAwMDAxMmUrMDBdKQorICAgICAgICAgICAgMS4wZiBub3QgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjBmCiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CkBAIC00MTMxLDcgKzM0ODgsNyBAQAogICAgICAgICAgICAgMS5mLCBXaXRoaW5VTFAoMS5mLCAwKQogICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMS4wZiBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMDAwMDAwMDBlKzAwZiAoWzEuMDAwMDAwMDBlKzAwLCAxLjAwMDAwMDAwZSswMF0pCisgICAgICAgICAgICAxLjBmIGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wZgogICAgICAgICAgIDwvRXhwYW5kZWQ+CiAgICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgpAQCAtNDEzOSw3ICszNDk2LDE1IEBACiAgICAgICAgICAgICAtMC5mLCBXaXRoaW5VTFAoMC5mLCAwKQogICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgLTAuMGYgaXMgd2l0aGluIDAgVUxQcyBvZiAwLjAwMDAwMDAwZSswMGYgKFswLjAwMDAwMDAwZSswMCwgMC4wMDAwMDAwMGUrMDBdKQorICAgICAgICAgICAgLTAuMGYgaXMgd2l0aGluIDAgVUxQcyBvZiAwLjBmCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgTkFOLCAhV2l0aGluVUxQKE5BTiwgMTIzKQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgbmFuZiBub3QgaXMgd2l0aGluIDEyMyBVTFBzIG9mIG5hbmYKICAgICAgICAgICA8L0V4cGFuZGVkPgogICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjciIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CkBAIC00MTUwLDcgKzM1MTUsNyBAQAogICAgICAgICAgICAgMS5mLCBXaXRoaW5BYnMoMS5mLCAwLjUpIHx8IFdpdGhpblVMUCgxLmYsIDEpCiAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAxLjBmICggaXMgd2l0aGluIDAuNSBvZiAxLjAgb3IgaXMgd2l0aGluIDEgVUxQcyBvZiAxLjAwMDAwMDAwZSswMGYgKFs5Ljk5OTk5OTQwZS0wMSwgMS4wMDAwMDAxMmUrMDBdKSApCisgICAgICAgICAgICAxLjBmICggaXMgd2l0aGluIDAuNSBvZiAxLjAgb3IgaXMgd2l0aGluIDEgVUxQcyBvZiAxLjBmICkKICAgICAgICAgICA8L0V4cGFuZGVkPgogICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KQEAgLTQxNTgsMTUgKzM1MjMsMTUgQEAKICAgICAgICAgICAgIDEuZiwgV2l0aGluQWJzKDIuZiwgMC41KSB8fCBXaXRoaW5VTFAoMS5mLCAwKQogICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMS4wZiAoIGlzIHdpdGhpbiAwLjUgb2YgMi4wIG9yIGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wMDAwMDAwMGUrMDBmIChbMS4wMDAwMDAwMGUrMDAsIDEuMDAwMDAwMDBlKzAwXSkgKQorICAgICAgICAgICAgMS4wZiAoIGlzIHdpdGhpbiAwLjUgb2YgMi4wIG9yIGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wZiApCiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgMC4wMDAxZiwgV2l0aGluQWJzKDAuZiwgMC4wMDFmKSB8fCBXaXRoaW5SZWwoMC5mLCAwLjFmKQorICAgICAgICAgICAgTkFOLCAhKFdpdGhpbkFicyhOQU4sIDEwMCkgfHwgV2l0aGluVUxQKE5BTiwgMTIzKSkKICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDAuMDAwMWYgKCBpcyB3aXRoaW4gMC4wMDEgb2YgMC4wIG9yIGFuZCAwIGFyZSB3aXRoaW4gMTAlIG9mIGVhY2ggb3RoZXIgKQorICAgICAgICAgICAgbmFuZiBub3QgKCBpcyB3aXRoaW4gMTAwLjAgb2YgbmFuIG9yIGlzIHdpdGhpbiAxMjMgVUxQcyBvZiBuYW5mICkKICAgICAgICAgICA8L0V4cGFuZGVkPgogICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjMiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CkBAIC00MTk4LDM3ICszNTYzLDEzIEBACiAgICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USFJPV1NfQVMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgV2l0aGluVUxQKDEuZiwgc3RhdGljX2Nhc3QmbHQ7dWludDY0X3Q+KC0xKSksIHN0ZDo6ZG9tYWluX2Vycm9yCisgICAgICAgICAgICBXaXRoaW5VTFAoMS5mLCAtMSksIHN0ZDo6ZG9tYWluX2Vycm9yCiAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICBXaXRoaW5VTFAoMS5mLCBzdGF0aWNfY2FzdCZsdDt1aW50NjRfdD4oLTEpKSwgc3RkOjpkb21haW5fZXJyb3IKKyAgICAgICAgICAgIFdpdGhpblVMUCgxLmYsIC0xKSwgc3RkOjpkb21haW5fZXJyb3IKICAgICAgICAgICA8L0V4cGFuZGVkPgogICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfTk9USFJPVyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBXaXRoaW5SZWwoMS5mLCAwLmYpCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICBXaXRoaW5SZWwoMS5mLCAwLmYpCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIUk9XU19BUyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBXaXRoaW5SZWwoMS5mLCAtMC4yZiksIHN0ZDo6ZG9tYWluX2Vycm9yCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICBXaXRoaW5SZWwoMS5mLCAtMC4yZiksIHN0ZDo6ZG9tYWluX2Vycm9yCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIUk9XU19BUyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBXaXRoaW5SZWwoMS5mLCAxLmYpLCBzdGQ6OmRvbWFpbl9lcnJvcgotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgV2l0aGluUmVsKDEuZiwgMS5mKSwgc3RkOjpkb21haW5fZXJyb3IKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjciIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjQiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CiAgICAgICA8L1NlY3Rpb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KQEAgLTQ2NDEsNDggKzM5ODIsNiBAQAogICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIzIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgogICAgICAgPC9TZWN0aW9uPgogICAgICAgPFNlY3Rpb24gbmFtZT0iQ2h1bmtpbmcgYSBnZW5lcmF0b3IgaW50byBzaXplZCBwaWVjZXMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0iQ2h1bmsgc2l6ZSBvZiB6ZXJvIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICBjaHVuazIuc2l6ZSgpID09IDAKLSAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDAgPT0gMAotICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgICAgPC9TZWN0aW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iQ2h1bmtpbmcgYSBnZW5lcmF0b3IgaW50byBzaXplZCBwaWVjZXMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0iQ2h1bmsgc2l6ZSBvZiB6ZXJvIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICBjaHVuazIuc2l6ZSgpID09IDAKLSAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDAgPT0gMAotICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgICAgPC9TZWN0aW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iQ2h1bmtpbmcgYSBnZW5lcmF0b3IgaW50byBzaXplZCBwaWVjZXMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0iQ2h1bmsgc2l6ZSBvZiB6ZXJvIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICBjaHVuazIuc2l6ZSgpID09IDAKLSAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDAgPT0gMAotICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgICAgPC9TZWN0aW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iQ2h1bmtpbmcgYSBnZW5lcmF0b3IgaW50byBzaXplZCBwaWVjZXMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KICAgICAgICAgPFNlY3Rpb24gbmFtZT0iVGhyb3dzIG9uIHRvbyBzbWFsbCBnZW5lcmF0b3JzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USFJPV1NfQVMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KICAgICAgICAgICAgIDxPcmlnaW5hbD4KQEAgLTU4MzIsNzc4ICs1MTMxLDYgQEAKICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMTAiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CiAgICAgICA8L1NlY3Rpb24+CiAgICAgICA8U2VjdGlvbiBuYW1lPSJSYW5nZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICA8U2VjdGlvbiBuYW1lPSJQb3NpdGl2ZSBtYW51YWwgc3RlcCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxTZWN0aW9uIG5hbWU9IkZsb2F0aW5nIFBvaW50IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8U2VjdGlvbiBuYW1lPSJFeGFjdCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8SW5mbz4KLSAgICAgICAgICAgICAgICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0xCi0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICAtMS4wID09IEFwcHJveCggLTEuMCApCi0gICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgICA8SW5mbz4KLSAgICAgICAgICAgICAgICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0xCi0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuOQotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgLTAuOSA9PSBBcHByb3goIC0wLjkgKQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC45Ci0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuOAotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgLTAuOCA9PSBBcHByb3goIC0wLjggKQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC44Ci0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuNwotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgLTAuNyA9PSBBcHByb3goIC0wLjcgKQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC43Ci0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuNgotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgLTAuNiA9PSBBcHByb3goIC0wLjYgKQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC42Ci0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuNQotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgLTAuNSA9PSBBcHByb3goIC0wLjUgKQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC41Ci0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuNAotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgLTAuNCA9PSBBcHByb3goIC0wLjQgKQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC40Ci0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuMwotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgLTAuMyA9PSBBcHByb3goIC0wLjMgKQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC4zCi0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuMgotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgLTAuMiA9PSBBcHByb3goIC0wLjIgKQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC4yCi0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuMQotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgLTAuMSA9PSBBcHByb3goIC0wLjEgKQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMC4xCi0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTEuMzg3NzhlLTE2Ci0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICAtMC4wID09IEFwcHJveCggLTAuMCApCi0gICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgICA8SW5mbz4KLSAgICAgICAgICAgICAgICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0xLjM4Nzc4ZS0xNgotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICB0cnVlCi0gICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgICA8SW5mbz4KLSAgICAgICAgICAgICAgICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuMQotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgMC4xID09IEFwcHJveCggMC4xICkKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC4xCi0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC4yCi0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICAwLjIgPT0gQXBwcm94KCAwLjIgKQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjIKLSAgICAgICAgICAgICAgPC9JbmZvPgotICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgICAgZ2VuLm5leHQoKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjMKLSAgICAgICAgICAgICAgPC9JbmZvPgotICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIDAuMyA9PSBBcHByb3goIDAuMyApCi0gICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgICA8SW5mbz4KLSAgICAgICAgICAgICAgICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuMwotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICB0cnVlCi0gICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgICA8SW5mbz4KLSAgICAgICAgICAgICAgICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuNAotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgMC40ID09IEFwcHJveCggMC40ICkKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC40Ci0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC41Ci0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICAwLjUgPT0gQXBwcm94KCAwLjUgKQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjUKLSAgICAgICAgICAgICAgPC9JbmZvPgotICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgICAgZ2VuLm5leHQoKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjYKLSAgICAgICAgICAgICAgPC9JbmZvPgotICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIDAuNiA9PSBBcHByb3goIDAuNiApCi0gICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgICA8SW5mbz4KLSAgICAgICAgICAgICAgICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuNgotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICB0cnVlCi0gICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgICA8SW5mbz4KLSAgICAgICAgICAgICAgICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuNwotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgMC43ID09IEFwcHJveCggMC43ICkKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC43Ci0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC44Ci0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICAwLjggPT0gQXBwcm94KCAwLjggKQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjgKLSAgICAgICAgICAgICAgPC9JbmZvPgotICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgICAgZ2VuLm5leHQoKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjkKLSAgICAgICAgICAgICAgPC9JbmZvPgotICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIDAuOSA9PSBBcHByb3goIDAuOSApCi0gICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgICA8SW5mbz4KLSAgICAgICAgICAgICAgICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuOQotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICB0cnVlCi0gICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IEFwcHJveCggcmFuZ2VFbmQgKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgMS4wID09IEFwcHJveCggMS4wICkKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfRkFMU0UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICAhKGdlbi5uZXh0KCkpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICAhZmFsc2UKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjQyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgICAgICAgPC9TZWN0aW9uPgotICAgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNDIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICAgICAgPC9TZWN0aW9uPgotICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjQyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgICA8L1NlY3Rpb24+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjQyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iUmFuZ2UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0iUG9zaXRpdmUgbWFudWFsIHN0ZXAiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8U2VjdGlvbiBuYW1lPSJGbG9hdGluZyBQb2ludCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgPFNlY3Rpb24gbmFtZT0iU2xpZ2h0bHkgb3ZlciBlbmQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMQotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgLTEuMCA9PSBBcHByb3goIC0xLjAgKQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMQotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICB0cnVlCi0gICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgICA8SW5mbz4KLSAgICAgICAgICAgICAgICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjcKLSAgICAgICAgICAgICAgPC9JbmZvPgotICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIC0wLjcgPT0gQXBwcm94KCAtMC43ICkKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuNwotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICB0cnVlCi0gICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgICA8SW5mbz4KLSAgICAgICAgICAgICAgICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjQKLSAgICAgICAgICAgICAgPC9JbmZvPgotICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIC0wLjQgPT0gQXBwcm94KCAtMC40ICkKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuNAotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICB0cnVlCi0gICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgICA8SW5mbz4KLSAgICAgICAgICAgICAgICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjEKLSAgICAgICAgICAgICAgPC9JbmZvPgotICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIC0wLjEgPT0gQXBwcm94KCAtMC4xICkKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuMQotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICB0cnVlCi0gICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgICA8SW5mbz4KLSAgICAgICAgICAgICAgICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuMgotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgMC4yID09IEFwcHJveCggMC4yICkKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC4yCi0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC41Ci0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICAwLjUgPT0gQXBwcm94KCAwLjUgKQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjUKLSAgICAgICAgICAgICAgPC9JbmZvPgotICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgICAgZ2VuLm5leHQoKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9GQUxTRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgICEoZ2VuLm5leHQoKSkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgICFmYWxzZQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMTMiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICAgICAgICA8L1NlY3Rpb24+Ci0gICAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxMyIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgICAgICA8L1NlY3Rpb24+Ci0gICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMTMiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICAgIDwvU2VjdGlvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMTMiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICA8L1NlY3Rpb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJSYW5nZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICA8U2VjdGlvbiBuYW1lPSJQb3NpdGl2ZSBtYW51YWwgc3RlcCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxTZWN0aW9uIG5hbWU9IkZsb2F0aW5nIFBvaW50IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8U2VjdGlvbiBuYW1lPSJTbGlnaHRseSB1bmRlciBlbmQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMQotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgLTEuMCA9PSBBcHByb3goIC0xLjAgKQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAtMQotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICB0cnVlCi0gICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgICA8SW5mbz4KLSAgICAgICAgICAgICAgICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjcKLSAgICAgICAgICAgICAgPC9JbmZvPgotICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIC0wLjcgPT0gQXBwcm94KCAtMC43ICkKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuNwotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICB0cnVlCi0gICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgICA8SW5mbz4KLSAgICAgICAgICAgICAgICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjQKLSAgICAgICAgICAgICAgPC9JbmZvPgotICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIC0wLjQgPT0gQXBwcm94KCAtMC40ICkKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuNAotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICB0cnVlCi0gICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgICA8SW5mbz4KLSAgICAgICAgICAgICAgICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIC0wLjEKLSAgICAgICAgICAgICAgPC9JbmZvPgotICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIC0wLjEgPT0gQXBwcm94KCAtMC4xICkKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgLTAuMQotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICB0cnVlCi0gICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgICA8SW5mbz4KLSAgICAgICAgICAgICAgICBDdXJyZW50IGV4cGVjdGVkIHZhbHVlIGlzIDAuMgotICAgICAgICAgICAgICA8L0luZm8+Ci0gICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gQXBwcm94KGV4cGVjdGVkKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgMC4yID09IEFwcHJveCggMC4yICkKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC4yCi0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICAgIDxJbmZvPgotICAgICAgICAgICAgICAgIEN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgMC41Ci0gICAgICAgICAgICAgIDwvSW5mbz4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgIGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpCi0gICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgICAwLjUgPT0gQXBwcm94KCAwLjUgKQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEluZm8+Ci0gICAgICAgICAgICAgICAgQ3VycmVudCBleHBlY3RlZCB2YWx1ZSBpcyAwLjUKLSAgICAgICAgICAgICAgPC9JbmZvPgotICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgICAgZ2VuLm5leHQoKQotICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9GQUxTRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICAgICEoZ2VuLm5leHQoKSkKLSAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAgICFmYWxzZQotICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMTMiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICAgICAgICA8L1NlY3Rpb24+Ci0gICAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxMyIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgICAgICA8L1NlY3Rpb24+Ci0gICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMTMiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICAgIDwvU2VjdGlvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMTMiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICA8L1NlY3Rpb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJSYW5nZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgogICAgICAgICA8U2VjdGlvbiBuYW1lPSJOZWdhdGl2ZSBtYW51YWwgc3RlcCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxTZWN0aW9uIG5hbWU9IkludGVnZXIiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KICAgICAgICAgICAgIDxTZWN0aW9uIG5hbWU9IkV4YWN0IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CkBAIC02ODg0LDcgKzU0MTEsNyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IklORk8gYW5kIFdBUk4gZG8gbm90IGFib3J0IHRlc3RzIiB0YWdzPSJbIWhpZGVdWy5dW21lc3NhZ2VzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJJTkZPIGFuZCBXQVJOIGRvIG5vdCBhYm9ydCB0ZXN0cyIgdGFncz0iWy5dW21lc3NhZ2VzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgogICAgICAgPEluZm8+CiAgICAgICAgIHRoaXMgaXMgYSBtZXNzYWdlCiAgICAgICA8L0luZm8+CkBAIC02ODkzLDcgKzU0MjAsNyBAQAogICAgICAgPC9XYXJuaW5nPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJJTkZPIGdldHMgbG9nZ2VkIG9uIGZhaWx1cmUiIHRhZ3M9IlshaGlkZV1bLl1bZmFpbGluZ11bbWVzc2FnZXNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9IklORk8gZ2V0cyBsb2dnZWQgb24gZmFpbHVyZSIgdGFncz0iWy5dW2ZhaWxpbmddW21lc3NhZ2VzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgogICAgICAgPEluZm8+CiAgICAgICAgIHRoaXMgbWVzc2FnZSBzaG91bGQgYmUgbG9nZ2VkCiAgICAgICA8L0luZm8+CkBAIC02OTEwLDcgKzU0MzcsNyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJJTkZPIGdldHMgbG9nZ2VkIG9uIGZhaWx1cmUsIGV2ZW4gaWYgY2FwdHVyZWQgYmVmb3JlIHN1Y2Nlc3NmdWwgYXNzZXJ0aW9ucyIgdGFncz0iWyFoaWRlXVsuXVtmYWlsaW5nXVttZXNzYWdlc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0iSU5GTyBnZXRzIGxvZ2dlZCBvbiBmYWlsdXJlLCBldmVuIGlmIGNhcHR1cmVkIGJlZm9yZSBzdWNjZXNzZnVsIGFzc2VydGlvbnMiIHRhZ3M9IlsuXVtmYWlsaW5nXVttZXNzYWdlc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KICAgICAgIDxJbmZvPgogICAgICAgICB0aGlzIG1lc3NhZ2UgbWF5IGJlIGxvZ2dlZCBsYXRlcgogICAgICAgPC9JbmZvPgpAQCAtNjk3NSw3ICs1NTAyLDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iSU5GTyBpcyByZXNldCBmb3IgZWFjaCBsb29wIiB0YWdzPSJbIWhpZGVdWy5dW2ZhaWxpbmddW21lc3NhZ2VzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJJTkZPIGlzIHJlc2V0IGZvciBlYWNoIGxvb3AiIHRhZ3M9IlsuXVtmYWlsaW5nXVttZXNzYWdlc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KICAgICAgIDxJbmZvPgogICAgICAgICBjdXJyZW50IGNvdW50ZXIgMAogICAgICAgPC9JbmZvPgpAQCAtNzEzMiw3ICs1NjU5LDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iSW5lcXVhbGl0eSBjaGVja3MgdGhhdCBzaG91bGQgZmFpbCIgdGFncz0iWyFoaWRlXVshc2hvdWxkZmFpbF1bLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ29uZGl0aW9uLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJJbmVxdWFsaXR5IGNoZWNrcyB0aGF0IHNob3VsZCBmYWlsIiB0YWdzPSJbIXNob3VsZGZhaWxdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NvbmRpdGlvbi50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Db25kaXRpb24udGVzdHMuY3BwIiA+CiAgICAgICAgIDxPcmlnaW5hbD4KICAgICAgICAgICBkYXRhLmludF9zZXZlbiAhPSA3CkBAIC03MzQ1LDcgKzU4NzIsNyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9Ik1hdGNoZXJzIGNhbiBiZSBjb21wb3NlZCB3aXRoIGJvdGggJmFtcDsmYW1wOyBhbmQgfHwgLSBmYWlsaW5nIiB0YWdzPSJbIWhpZGVdWy5dW2ZhaWxpbmddW21hdGNoZXJzXVtvcGVyYXRvciZhbXA7JmFtcDtdW29wZXJhdG9yc11bb3BlcmF0b3J8fF0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9Ik1hdGNoZXJzIGNhbiBiZSBjb21wb3NlZCB3aXRoIGJvdGggJmFtcDsmYW1wOyBhbmQgfHwgLSBmYWlsaW5nIiB0YWdzPSJbLl1bZmFpbGluZ11bbWF0Y2hlcnNdW29wZXJhdG9yJmFtcDsmYW1wO11bb3BlcmF0b3JzXVtvcGVyYXRvcnx8XSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJDSEVDS19USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgdGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIChDb250YWlucygic3RyaW5nIikgfHwgQ29udGFpbnMoImRpZmZlcmVudCIpKSAmYW1wOyZhbXA7IENvbnRhaW5zKCJyYW5kb20iKQpAQCAtNzM2Nyw3ICs1ODk0LDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJNYXRjaGVycyBjYW4gYmUgbmVnYXRlZCAoTm90KSB3aXRoIHRoZSAhIG9wZXJhdG9yIC0gZmFpbGluZyIgdGFncz0iWyFoaWRlXVsuXVtmYWlsaW5nXVttYXRjaGVyc11bbm90XVtvcGVyYXRvcnNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJNYXRjaGVycyBjYW4gYmUgbmVnYXRlZCAoTm90KSB3aXRoIHRoZSAhIG9wZXJhdG9yIC0gZmFpbGluZyIgdGFncz0iWy5dW2ZhaWxpbmddW21hdGNoZXJzXVtub3RdW29wZXJhdG9yc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iQ0hFQ0tfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCAhQ29udGFpbnMoInN1YnN0cmluZyIpCkBAIC03Mzc4LDcgKzU5MDUsNyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJNaXNtYXRjaGluZyBleGNlcHRpb24gbWVzc2FnZXMgZmFpbGluZyB0aGUgdGVzdCIgdGFncz0iWyFoaWRlXVshdGhyb3dzXVsuXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9Ik1pc21hdGNoaW5nIGV4Y2VwdGlvbiBtZXNzYWdlcyBmYWlsaW5nIHRoZSB0ZXN0IiB0YWdzPSJbIXRocm93c11bLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcCIgPgogICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USFJPV1NfV0lUSCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIiA+CiAgICAgICAgIDxPcmlnaW5hbD4KICAgICAgICAgICB0aGlzVGhyb3dzKCksICJleHBlY3RlZCBleGNlcHRpb24iCkBAIC03NTI4LDEzICs2MDU1LDEzIEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iTmljZSBkZXNjcmlwdGl2ZSBuYW1lIiB0YWdzPSJbIWhpZGVdWy5dW3RhZzFdW3RhZzJdW3RhZzNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9Ik5pY2UgZGVzY3JpcHRpdmUgbmFtZSIgdGFncz0iWy5dW3RhZzFdW3RhZzJdW3RhZzNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICA8V2FybmluZz4KICAgICAgICAgVGhpcyBvbmUgcmFuCiAgICAgICA8L1dhcm5pbmc+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9Ik5vbi1zdGQgZXhjZXB0aW9ucyBjYW4gYmUgdHJhbnNsYXRlZCIgdGFncz0iWyFoaWRlXVshdGhyb3dzXVsuXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9Ik5vbi1zdGQgZXhjZXB0aW9ucyBjYW4gYmUgdHJhbnNsYXRlZCIgdGFncz0iWyF0aHJvd3NdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KICAgICAgIDxFeGNlcHRpb24gZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIiA+CiAgICAgICAgIGN1c3RvbSBleGNlcHRpb24KICAgICAgIDwvRXhjZXB0aW9uPgpAQCAtNzU3MCw3ICs2MDk3LDcgQEAKICAgICA8VGVzdENhc2UgbmFtZT0iT3B0aW9uYWxseSBzdGF0aWMgYXNzZXJ0aW9ucyIgdGFncz0iW2NvbXBpbGF0aW9uXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Db21waWxhdGlvbi50ZXN0cy5jcHAiID4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJPcmRlcmluZyBjb21wYXJpc29uIGNoZWNrcyB0aGF0IHNob3VsZCBmYWlsIiB0YWdzPSJbIWhpZGVdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NvbmRpdGlvbi50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0iT3JkZXJpbmcgY29tcGFyaXNvbiBjaGVja3MgdGhhdCBzaG91bGQgZmFpbCIgdGFncz0iWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NvbmRpdGlvbi50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Db25kaXRpb24udGVzdHMuY3BwIiA+CiAgICAgICAgIDxPcmlnaW5hbD4KICAgICAgICAgICBkYXRhLmludF9zZXZlbiA+IDcKQEAgLTc4NjQsMTY2ICs2MzkxLDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJPdXIgUENHIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGV4cGVjdGVkIHJlc3VsdHMgZm9yIGtub3duIHNlZWRzIiB0YWdzPSJbcm5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1JhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwIiA+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJEZWZhdWx0IHNlZWRlZCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1JhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwIiA+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHJuZygpID09IDB4PGhleCBkaWdpdHM+Ci0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICA0MjQyMjQ4NzYzICgweDxoZXggZGlnaXRzPikKLT09Ci00MjQyMjQ4NzYzICgweDxoZXggZGlnaXRzPikKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHJuZygpID09IDB4PGhleCBkaWdpdHM+Ci0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAxODY3ODg4OTI5ICgweDxoZXggZGlnaXRzPikKLT09Ci0xODY3ODg4OTI5ICgweDxoZXggZGlnaXRzPikKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHJuZygpID09IDB4PGhleCBkaWdpdHM+Ci0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAxMjc2NjE5MDMwICgweDxoZXggZGlnaXRzPikKLT09Ci0xMjc2NjE5MDMwICgweDxoZXggZGlnaXRzPikKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHJuZygpID09IDB4PGhleCBkaWdpdHM+Ci0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAxOTExMjE4NzgzICgweDxoZXggZGlnaXRzPikKLT09Ci0xOTExMjE4NzgzICgweDxoZXggZGlnaXRzPikKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHJuZygpID09IDB4PGhleCBkaWdpdHM+Ci0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAxODI3MTE1MTY0ICgweDxoZXggZGlnaXRzPikKLT09Ci0xODI3MTE1MTY0ICgweDxoZXggZGlnaXRzPikKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjUiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICA8L1NlY3Rpb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJTcGVjaWZpYyBzZWVkIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUmFuZG9tTnVtYmVyR2VuZXJhdGlvbi50ZXN0cy5jcHAiID4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1JhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4KLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDE0NzIyMzQ2NDUgKDB4PGhleCBkaWdpdHM+KQotPT0KLTE0NzIyMzQ2NDUgKDB4PGhleCBkaWdpdHM+KQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1JhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4KLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDg2ODgzMjk0MCAoMHg8aGV4IGRpZ2l0cz4pCi09PQotODY4ODMyOTQwICgweDxoZXggZGlnaXRzPikKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHJuZygpID09IDB4PGhleCBkaWdpdHM+Ci0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICA1NzA4ODM0NDYgKDB4PGhleCBkaWdpdHM+KQotPT0KLTU3MDg4MzQ0NiAoMHg8aGV4IGRpZ2l0cz4pCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUmFuZG9tTnVtYmVyR2VuZXJhdGlvbi50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBybmcoKSA9PSAweDxoZXggZGlnaXRzPgotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgODg5Mjk5ODAzICgweDxoZXggZGlnaXRzPikKLT09Ci04ODkyOTk4MDMgKDB4PGhleCBkaWdpdHM+KQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1JhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4KLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDQyNjEzOTMxNjcgKDB4PGhleCBkaWdpdHM+KQotPT0KLTQyNjEzOTMxNjcgKDB4PGhleCBkaWdpdHM+KQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1JhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4KLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDE0NzIyMzQ2NDUgKDB4PGhleCBkaWdpdHM+KQotPT0KLTE0NzIyMzQ2NDUgKDB4PGhleCBkaWdpdHM+KQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1JhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4KLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDg2ODgzMjk0MCAoMHg8aGV4IGRpZ2l0cz4pCi09PQotODY4ODMyOTQwICgweDxoZXggZGlnaXRzPikKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHJuZygpID09IDB4PGhleCBkaWdpdHM+Ci0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICA1NzA4ODM0NDYgKDB4PGhleCBkaWdpdHM+KQotPT0KLTU3MDg4MzQ0NiAoMHg8aGV4IGRpZ2l0cz4pCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUmFuZG9tTnVtYmVyR2VuZXJhdGlvbi50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBybmcoKSA9PSAweDxoZXggZGlnaXRzPgotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgODg5Mjk5ODAzICgweDxoZXggZGlnaXRzPikKLT09Ci04ODkyOTk4MDMgKDB4PGhleCBkaWdpdHM+KQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1JhbmRvbU51bWJlckdlbmVyYXRpb24udGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgcm5nKCkgPT0gMHg8aGV4IGRpZ2l0cz4KLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDQyNjEzOTMxNjcgKDB4PGhleCBkaWdpdHM+KQotPT0KLTQyNjEzOTMxNjcgKDB4PGhleCBkaWdpdHM+KQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMTAiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICA8L1NlY3Rpb24+Ci0gICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+Ci0gICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iT3V0cHV0IGZyb20gYWxsIHNlY3Rpb25zIGlzIHJlcG9ydGVkIiB0YWdzPSJbIWhpZGVdWy5dW2ZhaWxpbmddW21lc3NhZ2VzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJPdXRwdXQgZnJvbSBhbGwgc2VjdGlvbnMgaXMgcmVwb3J0ZWQiIHRhZ3M9IlsuXVtmYWlsaW5nXVttZXNzYWdlc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KICAgICAgIDxTZWN0aW9uIG5hbWU9Im9uZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgogICAgICAgICA8RmFpbHVyZSBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwIiA+CiAgICAgICAgICAgTWVzc2FnZSBmcm9tIHNlY3Rpb24gb25lCkBAIC04MDM4LDcgKzY0MDYsNyBAQAogICAgICAgPC9TZWN0aW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJQYXJzZSB0ZXN0IG5hbWVzIGFuZCB0YWdzIiB0YWdzPSJbY29tbWFuZC1saW5lXVt0ZXN0LXNwZWNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0iUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CiAgICAgICA8U2VjdGlvbiBuYW1lPSJFbXB0eSB0ZXN0IHNwZWMgc2hvdWxkIGhhdmUgbm8gZmlsdGVycyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KICAgICAgICAgICA8T3JpZ2luYWw+CkBAIC05MjEyLDE0NiArNzU4MCw2IEBACiAgICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KICAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9IkxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBpbiB0ZXN0IHNwZWMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgc3BlYy5tYXRjaGVzKCBmYWtlVGVzdENhc2UoICIgIGFhcmR2YXJrICIgKSApCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICB0cnVlCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgc3BlYy5tYXRjaGVzKCBmYWtlVGVzdENhc2UoICIgIGFhcmR2YXJrIiApICkKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIHRydWUKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBzcGVjLm1hdGNoZXMoIGZha2VUZXN0Q2FzZSggIiBhYXJkdmFyayAiICkgKQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHNwZWMubWF0Y2hlcyggZmFrZVRlc3RDYXNlKCAiYWFyZHZhcmsgIiApICkKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIHRydWUKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBzcGVjLm1hdGNoZXMoIGZha2VUZXN0Q2FzZSggImFhcmR2YXJrIiApICkKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIHRydWUKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjUiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICA8L1NlY3Rpb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJMZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgaW4gdGVzdCBuYW1lIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHNwZWMubWF0Y2hlcyggZmFrZVRlc3RDYXNlKCAiICBhYXJkdmFyayAiICkgKQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHNwZWMubWF0Y2hlcyggZmFrZVRlc3RDYXNlKCAiICBhYXJkdmFyayIgKSApCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICB0cnVlCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgc3BlYy5tYXRjaGVzKCBmYWtlVGVzdENhc2UoICIgYWFyZHZhcmsgIiApICkKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIHRydWUKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBzcGVjLm1hdGNoZXMoIGZha2VUZXN0Q2FzZSggImFhcmR2YXJrICIgKSApCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICB0cnVlCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgc3BlYy5tYXRjaGVzKCBmYWtlVGVzdENhc2UoICJhYXJkdmFyayIgKSApCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICB0cnVlCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI1IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iU2hvcnRlbmVkIGhpZGUgdGFncyBhcmUgc3BsaXQgYXBhcnQgd2hlbiBwYXJzaW5nIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHNwZWMubWF0Y2hlcyhmYWtlVGVzdENhc2UoImhpZGRlbiBhbmQgZm9vIiwgIlsuXVtmb29dIikpCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICB0cnVlCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDS19GQUxTRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgIShzcGVjLm1hdGNoZXMoZmFrZVRlc3RDYXNlKCJvbmx5IGZvbyIsICJbZm9vXSIpKSkKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICFmYWxzZQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9IlNob3J0ZW5lZCBoaWRlIHRhZ3MgYWxzbyBwcm9wZXJseSBoYW5kbGUgZXhjbHVzaW9uIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0tfRkFMU0UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICEoc3BlYy5tYXRjaGVzKGZha2VUZXN0Q2FzZSgiaGlkZGVuIGFuZCBmb28iLCAiWy5dW2Zvb10iKSkpCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAhZmFsc2UKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLX0ZBTFNFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAhKHNwZWMubWF0Y2hlcyhmYWtlVGVzdENhc2UoIm9ubHkgZm9vIiwgIltmb29dIikpKQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgIWZhbHNlCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDS19GQUxTRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgIShzcGVjLm1hdGNoZXMoZmFrZVRlc3RDYXNlKCJvbmx5IGhpZGRlbiIsICJbLl0iKSkpCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAhZmFsc2UKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBzcGVjLm1hdGNoZXMoZmFrZVRlc3RDYXNlKCJuZWl0aGVyIGZvbyBub3IgaGlkZGVuIiwgIltiYXJdIikpCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICB0cnVlCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI0IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9IlBvaW50ZXJzIGNhbiBiZSBjb21wYXJlZCB0byBudWxsIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NvbmRpdGlvbi50ZXN0cy5jcHAiID4KQEAgLTk0MjEsNDcgKzc2NDksNiBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IlByZWNpc2lvbiBvZiBmbG9hdGluZyBwb2ludCBzdHJpbmdpZmljYXRpb24gY2FuIGJlIHNldCIgdGFncz0iW2Zsb2F0aW5nUG9pbnRdW3RvU3RyaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwIiA+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJGbG9hdHMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgc3RyMS5zaXplKCkgPT0gMyArIDUKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDggPT0gOAotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgc3RyMi5zaXplKCkgPT0gMyArIDEwCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAxMyA9PSAxMwotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9IkRvdWJsZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBzdHIxLnNpemUoKSA9PSAyICsgNQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgNyA9PSA3Ci0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBzdHIyLnNpemUoKSA9PSAyICsgMTUKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDE3ID09IDE3Ci0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgotICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9IlByZWRpY2F0ZSBtYXRjaGVyIGNhbiBhY2NlcHQgY29uc3QgY2hhcioiIHRhZ3M9Iltjb21waWxhdGlvbl1bbWF0Y2hlcnNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgogICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CkBAIC05ODc4LDEzMSArODA2NSw2IEBACiAgICAgICAgIDwvU2VjdGlvbj4KICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KICAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9ImFib3J0IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0id2FpdC1mb3Ita2V5cHJlc3MiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxTZWN0aW9uIG5hbWU9IkFjY2VwdGVkIG9wdGlvbnMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgY2xpLnBhcnNlKHsidGVzdCIsICItLXdhaXQtZm9yLWtleXByZXNzIiwgc3RkOjpnZXQmbHQ7MD4oaW5wdXQpfSkKLSAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgIHs/fQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICBjb25maWcud2FpdEZvcktleXByZXNzID09IHN0ZDo6Z2V0Jmx0OzE+KGlucHV0KQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgMCA9PSAwCi0gICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgICAgIDwvU2VjdGlvbj4KLSAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgICA8L1NlY3Rpb24+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICA8L1NlY3Rpb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJhYm9ydCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxTZWN0aW9uIG5hbWU9IndhaXQtZm9yLWtleXByZXNzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8U2VjdGlvbiBuYW1lPSJBY2NlcHRlZCBvcHRpb25zIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgIGNsaS5wYXJzZSh7InRlc3QiLCAiLS13YWl0LWZvci1rZXlwcmVzcyIsIHN0ZDo6Z2V0Jmx0OzA+KGlucHV0KX0pCi0gICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICB7P30KLSAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgY29uZmlnLndhaXRGb3JLZXlwcmVzcyA9PSBzdGQ6OmdldCZsdDsxPihpbnB1dCkKLSAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgIDEgPT0gMQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgICAgICA8L1NlY3Rpb24+Ci0gICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgICAgPC9TZWN0aW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iYWJvcnQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICA8U2VjdGlvbiBuYW1lPSJ3YWl0LWZvci1rZXlwcmVzcyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPFNlY3Rpb24gbmFtZT0iQWNjZXB0ZWQgb3B0aW9ucyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICBjbGkucGFyc2UoeyJ0ZXN0IiwgIi0td2FpdC1mb3Ita2V5cHJlc3MiLCBzdGQ6OmdldCZsdDswPihpbnB1dCl9KQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgez99Ci0gICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgIGNvbmZpZy53YWl0Rm9yS2V5cHJlc3MgPT0gc3RkOjpnZXQmbHQ7MT4oaW5wdXQpCi0gICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAyID09IDIKLSAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICAgICAgPC9TZWN0aW9uPgotICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICAgIDwvU2VjdGlvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9ImFib3J0IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0id2FpdC1mb3Ita2V5cHJlc3MiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxTZWN0aW9uIG5hbWU9IkFjY2VwdGVkIG9wdGlvbnMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgY2xpLnBhcnNlKHsidGVzdCIsICItLXdhaXQtZm9yLWtleXByZXNzIiwgc3RkOjpnZXQmbHQ7MD4oaW5wdXQpfSkKLSAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgIHs/fQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICBjb25maWcud2FpdEZvcktleXByZXNzID09IHN0ZDo6Z2V0Jmx0OzE+KGlucHV0KQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgMyA9PSAzCi0gICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgICAgIDwvU2VjdGlvbj4KLSAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgICA8L1NlY3Rpb24+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICA8L1NlY3Rpb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJhYm9ydCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxTZWN0aW9uIG5hbWU9IndhaXQtZm9yLWtleXByZXNzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8U2VjdGlvbiBuYW1lPSJpbnZhbGlkIG9wdGlvbnMgYXJlIHJlcG9ydGVkIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgICFyZXN1bHQKLSAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICByZXN1bHQuZXJyb3JNZXNzYWdlKCksIENvbnRhaW5zKCJuZXZlciIpICZhbXA7JmFtcDsgQ29udGFpbnMoImJvdGgiKQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgImtleXByZXNzIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mOiBuZXZlciwgc3RhcnQsIGV4aXQgb3IgYm90aC4gJ3NvbWV0aW1lcycgbm90IHJlY29nbmlzZWQiICggY29udGFpbnM6ICJuZXZlciIgYW5kIGNvbnRhaW5zOiAiYm90aCIgKQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgICAgICA8L1NlY3Rpb24+Ci0gICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgICAgPC9TZWN0aW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgogICAgICAgPFNlY3Rpb24gbmFtZT0ibm90aHJvdyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CiAgICAgICAgIDxTZWN0aW9uIG5hbWU9Ii1lIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CkBAIC0xMDIzOSwxMTYgKzgzMDEsNiBAQAogICAgICAgICA8L1NlY3Rpb24+CiAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CiAgICAgICA8L1NlY3Rpb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJCZW5jaG1hcmsgb3B0aW9ucyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxTZWN0aW9uIG5hbWU9InNhbXBsZXMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgY2xpLnBhcnNlKHsgInRlc3QiLCAiLS1iZW5jaG1hcmstc2FtcGxlcz0yMDAiIH0pCi0gICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICB7P30KLSAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICBjb25maWcuYmVuY2htYXJrU2FtcGxlcyA9PSAyMDAKLSAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDIwMCA9PSAyMDAKLSAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICAgIDwvU2VjdGlvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9IkJlbmNobWFyayBvcHRpb25zIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0icmVzYW1wbGVzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIGNsaS5wYXJzZSh7ICJ0ZXN0IiwgIi0tYmVuY2htYXJrLXJlc2FtcGxlcz0yMDAwMCIgfSkKLSAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIHs/fQotICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIGNvbmZpZy5iZW5jaG1hcmtSZXNhbXBsZXMgPT0gMjAwMDAKLSAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDIwMDAwICgweDxoZXggZGlnaXRzPikgPT0gMjAwMDAgKDB4PGhleCBkaWdpdHM+KQotICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgICAgPC9TZWN0aW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iQmVuY2htYXJrIG9wdGlvbnMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICA8U2VjdGlvbiBuYW1lPSJjb25maWRlbmNlLWludGVydmFsIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIGNsaS5wYXJzZSh7ICJ0ZXN0IiwgIi0tYmVuY2htYXJrLWNvbmZpZGVuY2UtaW50ZXJ2YWw9MC45OSIgfSkKLSAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIHs/fQotICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIGNvbmZpZy5iZW5jaG1hcmtDb25maWRlbmNlSW50ZXJ2YWwgPT0gQ2F0Y2g6OkRldGFpbDo6QXBwcm94KDAuOTkpCi0gICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAwLjk5ID09IEFwcHJveCggMC45OSApCi0gICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgICA8L1NlY3Rpb24+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICA8L1NlY3Rpb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJCZW5jaG1hcmsgb3B0aW9ucyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxTZWN0aW9uIG5hbWU9Im5vLWFuYWx5c2lzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIGNsaS5wYXJzZSh7ICJ0ZXN0IiwgIi0tYmVuY2htYXJrLW5vLWFuYWx5c2lzIiB9KQotICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgez99Ci0gICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgY29uZmlnLmJlbmNobWFya05vQW5hbHlzaXMKLSAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICAgIDwvU2VjdGlvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9IkJlbmNobWFyayBvcHRpb25zIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0id2FybXVwLXRpbWUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgY2xpLnBhcnNlKHsgInRlc3QiLCAiLS1iZW5jaG1hcmstd2FybXVwLXRpbWU9MTAiIH0pCi0gICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICB7P30KLSAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICBjb25maWcuYmVuY2htYXJrV2FybXVwVGltZSA9PSAxMAotICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgMTAgPT0gMTAKLSAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICAgIDwvU2VjdGlvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSJQcm9kdWN0IHdpdGggZGlmZmVyaW5nIGFyaXRpZXMgLSBzdGQ6OnR1cGxlJmx0O2ludCwgZG91YmxlLCBmbG9hdD4iIHRhZ3M9Iltwcm9kdWN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KQEAgLTEwMzg0LDcgKzgzMzYsNyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IlJlY29uc3RydWN0aW9uIHNob3VsZCBiZSBiYXNlZCBvbiBzdHJpbmdpZmljYXRpb246ICM5MTQiIHRhZ3M9IlshaGlkZV1bLl1bRGVjb21wb3NpdGlvbl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRGVjb21wb3NpdGlvbi50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0iUmVjb25zdHJ1Y3Rpb24gc2hvdWxkIGJlIGJhc2VkIG9uIHN0cmluZ2lmaWNhdGlvbjogIzkxNCIgdGFncz0iWy5dW0RlY29tcG9zaXRpb25dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0RlY29tcG9zaXRpb24udGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRGVjb21wb3NpdGlvbi50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgIHRydXRoeShmYWxzZSkKQEAgLTEwMzk1LDcgKzgzNDcsNyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJSZWdleCBzdHJpbmcgbWF0Y2hlciIgdGFncz0iWyFoaWRlXVsuXVtmYWlsaW5nXVttYXRjaGVyc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9IlJlZ2V4IHN0cmluZyBtYXRjaGVyIiB0YWdzPSJbLl1bZmFpbGluZ11bbWF0Y2hlcnNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgogICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0iZmFsc2UiIHR5cGU9IkNIRUNLX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICAgIDxPcmlnaW5hbD4KICAgICAgICAgICB0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgTWF0Y2hlcygidGhpcyBTVFJJTkcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciKQpAQCAtMTA0MzYsNyArODM4OCw3IEBACiAgICAgPFRlc3RDYXNlIG5hbWU9IlNVQ0NFRUQgY291bnRzIGFzIGEgdGVzdCBwYXNzIiB0YWdzPSJbbWVzc2FnZXNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwIiA+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iU1VDQ0VFRCBkb2VzIG5vdCByZXF1aXJlIGFuIGFyZ3VtZW50IiB0YWdzPSJbIWhpZGVdWy5dW21lc3NhZ2VzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJTVUNDRUVEIGRvZXMgbm90IHJlcXVpcmUgYW4gYXJndW1lbnQiIHRhZ3M9IlsuXVttZXNzYWdlc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSJTY2VuYXJpbzogQkREIHRlc3RzIHJlcXVpcmluZyBGaXh0dXJlcyB0byBwcm92aWRlIGNvbW1vbmx5LWFjY2Vzc2VkIGRhdGEgb3IgbWV0aG9kcyIgdGFncz0iW2JkZF1bZml4dHVyZXNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0JERC50ZXN0cy5jcHAiID4KQEAgLTEwNjA0LDcgKzg1NTYsNyBAQAogICAgICAgPC9TZWN0aW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IlNlbmRzIHN0dWZmIHRvIHN0ZG91dCBhbmQgc3RkZXJyIiB0YWdzPSJbIWhpZGVdWy5dIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9IlNlbmRzIHN0dWZmIHRvIHN0ZG91dCBhbmQgc3RkZXJyIiB0YWdzPSJbLl0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIj4KICAgICAgICAgPFN0ZE91dD4KIEEgc3RyaW5nIHNlbnQgZGlyZWN0bHkgdG8gc3Rkb3V0CkBAIC0xMDY4MCw5ICs4NjMyLDE3IEBACiAgICAgICAgICAgQXBwcm94KCAxLjIzICkgIT0gMS4yNAogICAgICAgICA8L0V4cGFuZGVkPgogICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9BcHByb3gudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICBJTkZJTklUWSA9PSBBcHByb3goSU5GSU5JVFkpCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICBpbmZmID09IEFwcHJveCggaW5mICkKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJTdGFuZGFyZCBvdXRwdXQgZnJvbSBhbGwgc2VjdGlvbnMgaXMgcmVwb3J0ZWQiIHRhZ3M9IlshaGlkZV1bLl1bbWVzc2FnZXNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9IlN0YW5kYXJkIG91dHB1dCBmcm9tIGFsbCBzZWN0aW9ucyBpcyByZXBvcnRlZCIgdGFncz0iWy5dW21lc3NhZ2VzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgogICAgICAgPFNlY3Rpb24gbmFtZT0ib25lIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwIiA+CiAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjAiIGZhaWx1cmVzPSIxIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CiAgICAgICA8L1NlY3Rpb24+CkBAIC0xMDY5Niw3ICs4NjU2LDcgQEAKICAgICAgICAgPC9TdGRPdXQ+CiAgICAgICA8L092ZXJhbGxSZXN1bHQ+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iU3RhcnRzV2l0aCBzdHJpbmcgbWF0Y2hlciIgdGFncz0iWyFoaWRlXVsuXVtmYWlsaW5nXVttYXRjaGVyc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9IlN0YXJ0c1dpdGggc3RyaW5nIG1hdGNoZXIiIHRhZ3M9IlsuXVtmYWlsaW5nXVttYXRjaGVyc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iQ0hFQ0tfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBTdGFydHNXaXRoKCJUaGlzIFN0cmluZyIpCkBAIC0xMDg0MCwyMSArODgwMCwxMyBAQAogICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgZW1wdHkuaXNOdWxsVGVybWluYXRlZCgpCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICB0cnVlCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KICAgICAgICAgICAgIHN0ZDo6c3RyY21wKCBlbXB0eS5jX3N0cigpLCAiIiApID09IDAKICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KICAgICAgICAgICAgIDAgPT0gMAogICAgICAgICAgIDwvRXhwYW5kZWQ+CiAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMyIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KICAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxTZWN0aW9uIG5hbWU9IkZyb20gc3RyaW5nIGxpdGVyYWwiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CkBAIC0xMDg3NSwxMCArODgyNywxMCBAQAogICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgcy5pc051bGxUZXJtaW5hdGVkKCkKKyAgICAgICAgICAgIGlzU3Vic3RyaW5nKCBzICkgPT0gZmFsc2UKICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIHRydWUKKyAgICAgICAgICAgIGZhbHNlID09IGZhbHNlCiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgpAQCAtMTA4ODksMzAgKzg4NDEsMzMgQEAKICAgICAgICAgICAgIDAgPT0gMAogICAgICAgICAgIDwvRXhwYW5kZWQ+CiAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9OT1RIUk9XIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHMuY19zdHIoKQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgcy5jX3N0cigpCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHMuY19zdHIoKSA9PSByYXdDaGFycwotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgImhlbGxvIiA9PSAiaGVsbG8iCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHMuZGF0YSgpID09IHJhd0NoYXJzCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAiaGVsbG8iID09ICJoZWxsbyIKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxTZWN0aW9uIG5hbWU9ImNfc3RyKCkgZG9lcyBub3QgY2F1c2UgY29weSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBpc093bmVkKCBzICkgPT0gZmFsc2UKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgIGZhbHNlID09IGZhbHNlCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBzLmNfc3RyKCkgPT0gcmF3Q2hhcnMKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJoZWxsbyIgPT0gImhlbGxvIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgaXNPd25lZCggcyApID09IGZhbHNlCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICBmYWxzZSA9PSBmYWxzZQorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMyIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgPC9TZWN0aW9uPgogICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI3IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgogICAgICAgPC9TZWN0aW9uPgogICAgICAgPFNlY3Rpb24gbmFtZT0iRnJvbSBzdWItc3RyaW5nIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgpAQCAtMTA5MjQsMzEgKzg4NzksMzkgQEAKICAgICAgICAgICAgIG9yaWdpbmFsID09ICJvcmlnaW5hbCIKICAgICAgICAgICA8L0V4cGFuZGVkPgogICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfRkFMU0UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgIShvcmlnaW5hbC5pc051bGxUZXJtaW5hdGVkKCkpCisgICAgICAgICAgICBpc1N1YnN0cmluZyggb3JpZ2luYWwgKQogICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgIWZhbHNlCisgICAgICAgICAgICB0cnVlCiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIUk9XUyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBvcmlnaW5hbC5jX3N0cigpCisgICAgICAgICAgICBpc093bmVkKCBvcmlnaW5hbCApID09IGZhbHNlCiAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICBvcmlnaW5hbC5jX3N0cigpCisgICAgICAgICAgICBmYWxzZSA9PSBmYWxzZQogICAgICAgICAgIDwvRXhwYW5kZWQ+CiAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9OT1RIUk9XIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIG9yaWdpbmFsLmRhdGEoKQorICAgICAgICAgICAgaXNTdWJzdHJpbmcoIG9yaWdpbmFsICkgPT0gZmFsc2UKICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIG9yaWdpbmFsLmRhdGEoKQorICAgICAgICAgICAgZmFsc2UgPT0gZmFsc2UKICAgICAgICAgICA8L0V4cGFuZGVkPgogICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjQiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgaXNPd25lZCggb3JpZ2luYWwgKQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KICAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxTZWN0aW9uIG5hbWU9IlN1YnN0cmluZ3MiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CiAgICAgICAgIDxTZWN0aW9uIG5hbWU9Inplcm8tYmFzZWQgc3Vic3RyaW5nIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgpAQCAtMTA5NzAsNyArODkzMyw3IEBACiAgICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CiAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIHN0ZDo6c3RybmNtcCggc3MuZGF0YSgpLCAiaGVsbG8iLCA1ICkgPT0gMAorICAgICAgICAgICAgICBzdGQ6OnN0cmNtcCggc3MuY19zdHIoKSwgImhlbGxvIiApID09IDAKICAgICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgICA8RXhwYW5kZWQ+CiAgICAgICAgICAgICAgIDAgPT0gMApAQCAtMTA5ODksNiArODk1Miw2OCBAQAogICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI0IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgogICAgICAgPC9TZWN0aW9uPgogICAgICAgPFNlY3Rpb24gbmFtZT0iU3Vic3RyaW5ncyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iY19zdHIoKSBjYXVzZXMgY29weSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBpc1N1YnN0cmluZyggc3MgKQorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgaXNPd25lZCggc3MgKSA9PSBmYWxzZQorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgZmFsc2UgPT0gZmFsc2UKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIHJhd0NoYXJzID09IHMuY3VycmVudERhdGEoKQorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgImhlbGxvIHdvcmxkISIgPT0gImhlbGxvIHdvcmxkISIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIHNzLmNfc3RyKCkgIT0gcmF3Q2hhcnMKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJoZWxsbyIgIT0gImhlbGxvIHdvcmxkISIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGlzU3Vic3RyaW5nKCBzcyApID09IGZhbHNlCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICBmYWxzZSA9PSBmYWxzZQorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgaXNPd25lZCggc3MgKQorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgc3MuY3VycmVudERhdGEoKSAhPSBzLmN1cnJlbnREYXRhKCkKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJoZWxsbyIgIT0gImhlbGxvIHdvcmxkISIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjciIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNyIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IlN1YnN0cmluZ3MiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CiAgICAgICAgIDxTZWN0aW9uIG5hbWU9Im5vbi16ZXJvLWJhc2VkIHN1YnN0cmluZyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgogICAgICAgICAgICAgPE9yaWdpbmFsPgpAQCAtMTEwMTQsNyArOTAzOSw3IEBACiAgICAgICAgIDxTZWN0aW9uIG5hbWU9IlBvaW50ZXIgdmFsdWVzIG9mIGZ1bGwgcmVmcyBzaG91bGQgbWF0Y2giIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgcy5kYXRhKCkgPT0gczIuZGF0YSgpCisgICAgICAgICAgICAgIHMuY19zdHIoKSA9PSBzMi5jX3N0cigpCiAgICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgICAgPEV4cGFuZGVkPgogICAgICAgICAgICAgICAiaGVsbG8gd29ybGQhIiA9PSAiaGVsbG8gd29ybGQhIgpAQCAtMTEwMjUsNzMgKzkwNTAsMzcgQEAKICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KICAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxTZWN0aW9uIG5hbWU9IlN1YnN0cmluZ3MiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxTZWN0aW9uIG5hbWU9IlBvaW50ZXIgdmFsdWVzIG9mIHN1YnN0cmluZyByZWZzIHNob3VsZCBhbHNvIG1hdGNoIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgorICAgICAgICA8U2VjdGlvbiBuYW1lPSJQb2ludGVyIHZhbHVlcyBvZiBzdWJzdHJpbmcgcmVmcyBzaG91bGQgbm90IG1hdGNoIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CiAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIHMuZGF0YSgpID09IHNzLmRhdGEoKQorICAgICAgICAgICAgICBzLmNfc3RyKCkgIT0gc3MuY19zdHIoKQogICAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgImhlbGxvIHdvcmxkISIgPT0gImhlbGxvIHdvcmxkISIKKyAgICAgICAgICAgICAgImhlbGxvIHdvcmxkISIgIT0gImhlbGxvIgogICAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KICAgICAgICAgPC9TZWN0aW9uPgogICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgogICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iU3Vic3RyaW5ncyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0iUGFzdCB0aGUgZW5kIHN1YnN0cmluZyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICBzLnN1YnN0cihzLnNpemUoKSArIDEsIDEyMykuZW1wdHkoKQotICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgICAgPC9TZWN0aW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iU3Vic3RyaW5ncyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0iU3Vic3RyaW5nIG9mZiB0aGUgZW5kIGFyZSB0cmltbWVkIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIHN0ZDo6c3RyY21wKHNzLmNfc3RyKCksICJ3b3JsZCEiKSA9PSAwCi0gICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAwID09IDAKLSAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICAgIDwvU2VjdGlvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9IkNvbXBhcmlzb25zIGFyZSBkZWVwIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IkNvbXBhcmlzb25zIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIChjaGFyKilidWZmZXIxICE9IChjaGFyKilidWZmZXIyCisgICAgICAgICAgICBTdHJpbmdSZWYoImhlbGxvIikgPT0gU3RyaW5nUmVmKCJoZWxsbyIpCiAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAiSGVsbG8iICE9ICJIZWxsbyIKKyAgICAgICAgICAgIGhlbGxvID09IGhlbGxvCiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIGxlZnQgPT0gcmlnaHQKKyAgICAgICAgICAgIFN0cmluZ1JlZigiaGVsbG8iKSAhPSBTdHJpbmdSZWYoImNlbGxvIikKICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIEhlbGxvID09IEhlbGxvCisgICAgICAgICAgICBoZWxsbyAhPSBjZWxsbwogICAgICAgICAgIDwvRXhwYW5kZWQ+CiAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBsZWZ0ICE9IGxlZnQuc3Vic3RyKDAsIDMpCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICBIZWxsbyAhPSBIZWwKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjMiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CiAgICAgICA8L1NlY3Rpb24+CiAgICAgICA8U2VjdGlvbiBuYW1lPSJmcm9tIHN0ZDo6c3RyaW5nIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgogICAgICAgICA8U2VjdGlvbiBuYW1lPSJpbXBsaWNpdGx5IGNvbnN0cnVjdGVkIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgpAQCAtMTExNjAsNiArOTE0OSwyOCBAQAogICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgogICAgICAgPC9TZWN0aW9uPgogICAgICAgPFNlY3Rpb24gbmFtZT0idG8gc3RkOjpzdHJpbmciIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CisgICAgICAgIDxTZWN0aW9uIG5hbWU9ImltcGxpY2l0bHkgY29uc3RydWN0ZWQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgc3RkU3RyID09ICJhIHN0cmluZ3JlZiIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJhIHN0cmluZ3JlZiIgPT0gImEgc3RyaW5ncmVmIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgc3RkU3RyLnNpemUoKSA9PSBzci5zaXplKCkKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgIDExID09IDExCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJ0byBzdGQ6OnN0cmluZyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KICAgICAgICAgPFNlY3Rpb24gbmFtZT0iZXhwbGljaXRseSBjb25zdHJ1Y3RlZCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgogICAgICAgICAgICAgPE9yaWdpbmFsPgpAQCAtMTEyMDMsMTQgKzkyMTQsMzIgQEAKICAgICAgICAgPC9TZWN0aW9uPgogICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgogICAgICAgPC9TZWN0aW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgotICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IlN0cmluZ1JlZiBhdCBjb21waWxhdGlvbiB0aW1lIiB0YWdzPSJbU3RyaW5nUmVmXVtTdHJpbmdzXVtjb25zdGV4cHJdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgotICAgICAgPFNlY3Rpb24gbmFtZT0iU2ltcGxlIGNvbnN0cnVjdG9ycyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9IlVETCBjb25zdHJ1Y3Rpb24iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjYiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8U2VjdGlvbiBuYW1lPSJDb3VudGluZyB1dGYtOCBjb2RlcG9pbnRzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGFzY2lpLm51bWJlck9mQ2hhcmFjdGVycygpID09IGFzY2lpLnNpemUoKQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgMzkgPT0gMzkKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgc2ltcGxldTgubnVtYmVyT2ZDaGFyYWN0ZXJzKCkgPT0gMzAKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDMwID09IDMwCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGVtb2ppcy5udW1iZXJPZkNoYXJhY3RlcnMoKSA9PSA5CisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICA5ID09IDkKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjMiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CiAgICAgICA8L1NlY3Rpb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KQEAgLTExMjgxLDcgKzkzMTAsNyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IlRhYnMgYW5kIG5ld2xpbmVzIHNob3cgaW4gb3V0cHV0IiB0YWdzPSJbIWhpZGVdWy5dW2ZhaWxpbmddW3doaXRlc3BhY2VdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9IlRhYnMgYW5kIG5ld2xpbmVzIHNob3cgaW4gb3V0cHV0IiB0YWdzPSJbLl1bZmFpbGluZ11bd2hpdGVzcGFjZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgczEgPT0gczIKQEAgLTExMzgwLDExNiArOTQwOSw2IEBACiAgICAgICA8L1NlY3Rpb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iVGVtcGxhdGUgdGVzdCBjYXNlIG1ldGhvZCB3aXRoIHRlc3QgdHlwZXMgc3BlY2lmaWVkIGluc2lkZSBzdGQ6OnR1cGxlIC0gTXlUeXBlcyAtIDAiIHRhZ3M9IltjbGFzc11bbGlzdF1bdGVtcGxhdGVdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIFRlbXBsYXRlX0ZpeHR1cmUmbHQ7VGVzdFR5cGU+OjptX2EgPT0gMQotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgMSA9PSAxCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+Ci0gICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iVGVtcGxhdGUgdGVzdCBjYXNlIG1ldGhvZCB3aXRoIHRlc3QgdHlwZXMgc3BlY2lmaWVkIGluc2lkZSBzdGQ6OnR1cGxlIC0gTXlUeXBlcyAtIDEiIHRhZ3M9IltjbGFzc11bbGlzdF1bdGVtcGxhdGVdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIFRlbXBsYXRlX0ZpeHR1cmUmbHQ7VGVzdFR5cGU+OjptX2EgPT0gMQotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgMSA9PSAxCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+Ci0gICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iVGVtcGxhdGUgdGVzdCBjYXNlIG1ldGhvZCB3aXRoIHRlc3QgdHlwZXMgc3BlY2lmaWVkIGluc2lkZSBzdGQ6OnR1cGxlIC0gTXlUeXBlcyAtIDIiIHRhZ3M9IltjbGFzc11bbGlzdF1bdGVtcGxhdGVdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIFRlbXBsYXRlX0ZpeHR1cmUmbHQ7VGVzdFR5cGU+OjptX2EgPT0gMQotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgMS4wID09IDEKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KLSAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZSB0ZXN0IGNhc2Ugd2l0aCB0ZXN0IHR5cGVzIHNwZWNpZmllZCBpbnNpZGUgbm9uLWNvcHlhYmxlIGFuZCBub24tbW92YWJsZSBzdGQ6OnR1cGxlIC0gTm9uQ29weWFibGVBbmROb25Nb3ZhYmxlVHlwZXMgLSAwIiB0YWdzPSJbbGlzdF1bdGVtcGxhdGVdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICBzaXplb2YoVGVzdFR5cGUpID4gMAotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgMSA+IDAKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KLSAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZSB0ZXN0IGNhc2Ugd2l0aCB0ZXN0IHR5cGVzIHNwZWNpZmllZCBpbnNpZGUgbm9uLWNvcHlhYmxlIGFuZCBub24tbW92YWJsZSBzdGQ6OnR1cGxlIC0gTm9uQ29weWFibGVBbmROb25Nb3ZhYmxlVHlwZXMgLSAxIiB0YWdzPSJbbGlzdF1bdGVtcGxhdGVdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICBzaXplb2YoVGVzdFR5cGUpID4gMAotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgNCA+IDAKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KLSAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZSB0ZXN0IGNhc2Ugd2l0aCB0ZXN0IHR5cGVzIHNwZWNpZmllZCBpbnNpZGUgbm9uLWRlZmF1bHQtY29uc3RydWN0aWJsZSBzdGQ6OnR1cGxlIC0gTXlOb25EZWZhdWx0Q29uc3RydWN0aWJsZVR5cGVzIC0gMCIgdGFncz0iW2xpc3RdW3RlbXBsYXRlXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgc2l6ZW9mKFRlc3RUeXBlKSA+IDAKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIDEgPiAwCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+Ci0gICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iVGVtcGxhdGUgdGVzdCBjYXNlIHdpdGggdGVzdCB0eXBlcyBzcGVjaWZpZWQgaW5zaWRlIG5vbi1kZWZhdWx0LWNvbnN0cnVjdGlibGUgc3RkOjp0dXBsZSAtIE15Tm9uRGVmYXVsdENvbnN0cnVjdGlibGVUeXBlcyAtIDEiIHRhZ3M9IltsaXN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHNpemVvZihUZXN0VHlwZSkgPiAwCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA0ID4gMAotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgotICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlIHRlc3QgY2FzZSB3aXRoIHRlc3QgdHlwZXMgc3BlY2lmaWVkIGluc2lkZSBzdGQ6OnR1cGxlIC0gTXlUeXBlcyAtIDAiIHRhZ3M9IltsaXN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHNpemVvZihUZXN0VHlwZSkgPiAwCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA0ID4gMAotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgotICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlIHRlc3QgY2FzZSB3aXRoIHRlc3QgdHlwZXMgc3BlY2lmaWVkIGluc2lkZSBzdGQ6OnR1cGxlIC0gTXlUeXBlcyAtIDEiIHRhZ3M9IltsaXN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHNpemVvZihUZXN0VHlwZSkgPiAwCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAxID4gMAotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgotICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlIHRlc3QgY2FzZSB3aXRoIHRlc3QgdHlwZXMgc3BlY2lmaWVkIGluc2lkZSBzdGQ6OnR1cGxlIC0gTXlUeXBlcyAtIDIiIHRhZ3M9IltsaXN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHNpemVvZihUZXN0VHlwZSkgPiAwCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA0ID4gMAotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgotICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdCIgdGFncz0iW3RlbXBsYXRlXVt2ZWN0b3JdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICAgIDxPcmlnaW5hbD4KQEAgLTEyMTA2LDYyMiArMTAwMjUsNiBAQAogICAgICAgPC9TZWN0aW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSAoc3RkOjp0dXBsZSZsdDtpbnQsIGZsb2F0PiksIDYiIHRhZ3M9IltudHRwXVt0ZW1wbGF0ZV1bdmVjdG9yXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgdi5zaXplKCkgPT0gVgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgNiA9PSA2Ci0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gVgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgNiA+PSA2Ci0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJyZXNpemluZyBiaWdnZXIgY2hhbmdlcyBzaXplIGFuZCBjYXBhY2l0eSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgdi5zaXplKCkgPT0gMiAqIFYKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDEyID09IDEyCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgdi5jYXBhY2l0eSgpID49IDIgKiBWCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAxMiA+PSAxMgotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHYuc2l6ZSgpID09IFYKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIDYgPT0gNgotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgdi5jYXBhY2l0eSgpID49IFYKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIDYgPj0gNgotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0icmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgdi5zaXplKCkgPT0gMAotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMCA9PSAwCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgdi5jYXBhY2l0eSgpID49IFYKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDYgPj0gNgotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0iV2UgY2FuIHVzZSB0aGUgJ3N3YXAgdHJpY2snIHRvIHJlc2V0IHRoZSBjYXBhY2l0eSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgdi5jYXBhY2l0eSgpID09IDAKLSAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDAgPT0gMAotICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgICAgPC9TZWN0aW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIzIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgdi5zaXplKCkgPT0gVgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgNiA9PSA2Ci0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gVgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgNiA+PSA2Ci0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJyZXNlcnZpbmcgYmlnZ2VyIGNoYW5nZXMgY2FwYWNpdHkgYnV0IG5vdCBzaXplIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICB2LnNpemUoKSA9PSBWCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICA2ID09IDYKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gMiAqIFYKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDEyID49IDEyCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgdi5zaXplKCkgPT0gVgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgNiA9PSA2Ci0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gVgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgNiA+PSA2Ci0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJyZXNlcnZpbmcgc21hbGxlciBkb2VzIG5vdCBjaGFuZ2Ugc2l6ZSBvciBjYXBhY2l0eSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgdi5zaXplKCkgPT0gVgotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgNiA9PSA2Ci0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgdi5jYXBhY2l0eSgpID49IFYKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDYgPj0gNgotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KLSAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZVRlc3RTaWc6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQsNCIgdGFncz0iW250dHBdW3RlbXBsYXRlXVt2ZWN0b3JdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB2LnNpemUoKSA9PSBWCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA0ID09IDQKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSBWCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA0ID49IDQKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9InJlc2l6aW5nIGJpZ2dlciBjaGFuZ2VzIHNpemUgYW5kIGNhcGFjaXR5IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICB2LnNpemUoKSA9PSAyICogVgotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgOCA9PSA4Ci0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgdi5jYXBhY2l0eSgpID49IDIgKiBWCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICA4ID49IDgKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICA8L1NlY3Rpb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB2LnNpemUoKSA9PSBWCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA0ID09IDQKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSBWCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA0ID49IDQKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9InJlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHYuc2l6ZSgpID09IDAKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDAgPT0gMAotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSBWCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICA0ID49IDQKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxTZWN0aW9uIG5hbWU9IldlIGNhbiB1c2UgdGhlICdzd2FwIHRyaWNrJyB0byByZXNldCB0aGUgY2FwYWNpdHkiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIHYuY2FwYWNpdHkoKSA9PSAwCi0gICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAwID09IDAKLSAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICAgIDwvU2VjdGlvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMyIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHYuc2l6ZSgpID09IFYKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIDQgPT0gNAotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgdi5jYXBhY2l0eSgpID49IFYKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIDQgPj0gNAotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0icmVzZXJ2aW5nIGJpZ2dlciBjaGFuZ2VzIGNhcGFjaXR5IGJ1dCBub3Qgc2l6ZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgdi5zaXplKCkgPT0gVgotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgNCA9PSA0Ci0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgdi5jYXBhY2l0eSgpID49IDIgKiBWCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICA4ID49IDgKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICA8L1NlY3Rpb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB2LnNpemUoKSA9PSBWCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA0ID09IDQKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSBWCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA0ID49IDQKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9InJlc2VydmluZyBzbWFsbGVyIGRvZXMgbm90IGNoYW5nZSBzaXplIG9yIGNhcGFjaXR5IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICB2LnNpemUoKSA9PSBWCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICA0ID09IDQKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gVgotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgNCA+PSA0Ci0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgotICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBpbnQsNSIgdGFncz0iW250dHBdW3RlbXBsYXRlXVt2ZWN0b3JdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB2LnNpemUoKSA9PSBWCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA1ID09IDUKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSBWCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA1ID49IDUKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9InJlc2l6aW5nIGJpZ2dlciBjaGFuZ2VzIHNpemUgYW5kIGNhcGFjaXR5IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICB2LnNpemUoKSA9PSAyICogVgotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMTAgPT0gMTAKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gMiAqIFYKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDEwID49IDEwCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgdi5zaXplKCkgPT0gVgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgNSA9PSA1Ci0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gVgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgNSA+PSA1Ci0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJyZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICB2LnNpemUoKSA9PSAwCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAwID09IDAKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gVgotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgNSA+PSA1Ci0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8U2VjdGlvbiBuYW1lPSJXZSBjYW4gdXNlIHRoZSAnc3dhcCB0cmljaycgdG8gcmVzZXQgdGhlIGNhcGFjaXR5IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICB2LmNhcGFjaXR5KCkgPT0gMAotICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgMCA9PSAwCi0gICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgICA8L1NlY3Rpb24+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjMiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICA8L1NlY3Rpb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB2LnNpemUoKSA9PSBWCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA1ID09IDUKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSBWCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA1ID49IDUKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9InJlc2VydmluZyBiaWdnZXIgY2hhbmdlcyBjYXBhY2l0eSBidXQgbm90IHNpemUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHYuc2l6ZSgpID09IFYKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDUgPT0gNQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSAyICogVgotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMTAgPj0gMTAKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICA8L1NlY3Rpb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB2LnNpemUoKSA9PSBWCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA1ID09IDUKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSBWCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICA1ID49IDUKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9InJlc2VydmluZyBzbWFsbGVyIGRvZXMgbm90IGNoYW5nZSBzaXplIG9yIGNhcGFjaXR5IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICB2LnNpemUoKSA9PSBWCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICA1ID09IDUKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gVgotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgNSA+PSA1Ci0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgotICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnN0cmluZywxNSIgdGFncz0iW250dHBdW3RlbXBsYXRlXVt2ZWN0b3JdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB2LnNpemUoKSA9PSBWCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAxNSA9PSAxNQotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgdi5jYXBhY2l0eSgpID49IFYKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIDE1ID49IDE1Ci0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJyZXNpemluZyBiaWdnZXIgY2hhbmdlcyBzaXplIGFuZCBjYXBhY2l0eSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgdi5zaXplKCkgPT0gMiAqIFYKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDMwID09IDMwCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgdi5jYXBhY2l0eSgpID49IDIgKiBWCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAzMCA+PSAzMAotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHYuc2l6ZSgpID09IFYKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIDE1ID09IDE1Ci0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gVgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgMTUgPj0gMTUKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9InJlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHYuc2l6ZSgpID09IDAKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDAgPT0gMAotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSBWCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAxNSA+PSAxNQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0iV2UgY2FuIHVzZSB0aGUgJ3N3YXAgdHJpY2snIHRvIHJlc2V0IHRoZSBjYXBhY2l0eSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgdi5jYXBhY2l0eSgpID09IDAKLSAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDAgPT0gMAotICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgICAgPC9TZWN0aW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIzIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgdi5zaXplKCkgPT0gVgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgMTUgPT0gMTUKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSBWCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAxNSA+PSAxNQotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0icmVzZXJ2aW5nIGJpZ2dlciBjaGFuZ2VzIGNhcGFjaXR5IGJ1dCBub3Qgc2l6ZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgdi5zaXplKCkgPT0gVgotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMTUgPT0gMTUKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gMiAqIFYKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDMwID49IDMwCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgdi5zaXplKCkgPT0gVgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgMTUgPT0gMTUKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSBWCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAxNSA+PSAxNQotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0icmVzZXJ2aW5nIHNtYWxsZXIgZG9lcyBub3QgY2hhbmdlIHNpemUgb3IgY2FwYWNpdHkiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHYuc2l6ZSgpID09IFYKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDE1ID09IDE1Ci0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgdi5jYXBhY2l0eSgpID49IFYKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDE1ID49IDE1Ci0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgotICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9IlRlc3QgY2FzZSB3aXRoIG9uZSBhcmd1bWVudCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9WYXJpYWRpY01hY3Jvcy50ZXN0cy5jcHAiID4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgpAQCAtMTI3MzYsOSArMTAwMzksNiBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IlRlc3Qgd2l0aCBzcGVjaWFsLCBjaGFyYWN0ZXJzICZxdW90O2luIG5hbWUiIHRhZ3M9IltjbGldW3JlZ3Jlc3Npb25dIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KLSAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSJUaGUgTk9fRkFJTCBtYWNybyByZXBvcnRzIGEgZmFpbHVyZSBidXQgZG9lcyBub3QgZmFpbCB0aGUgdGVzdCIgdGFncz0iW21lc3NhZ2VzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgogICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0iZmFsc2UiIHR5cGU9IkNIRUNLX05PRkFJTCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CkBAIC0xMjc1MCwxMCArMTAwNTAsMTAgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iVGhpcyB0ZXN0ICdzaG91bGQnIGZhaWwgYnV0IGRvZXNuJ3QiIHRhZ3M9IlshaGlkZV1bIXNob3VsZGZhaWxdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9IlRoaXMgdGVzdCAnc2hvdWxkJyBmYWlsIGJ1dCBkb2Vzbid0IiB0YWdzPSJbIXNob3VsZGZhaWxdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IlRocm93biBzdHJpbmcgbGl0ZXJhbHMgYXJlIHRyYW5zbGF0ZWQiIHRhZ3M9IlshaGlkZV1bIXRocm93c11bLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJUaHJvd24gc3RyaW5nIGxpdGVyYWxzIGFyZSB0cmFuc2xhdGVkIiB0YWdzPSJbIXRocm93c11bLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcCIgPgogICAgICAgPEV4Y2VwdGlvbiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KICAgICAgICAgRm9yIHNvbWUgcmVhc29uIHNvbWVvbmUgaXMgdGhyb3dpbmcgYSBzdHJpbmcgbGl0ZXJhbCEKICAgICAgIDwvRXhjZXB0aW9uPgpAQCAtMTMzMzQsOTAgKzEwNjM0LDcgQEAKICAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJUcmltIHN0cmluZ3MiIHRhZ3M9IltzdHJpbmctbWFuaXBdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nTWFuaXAudGVzdHMuY3BwIiA+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nTWFuaXAudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB0cmltKHN0ZDo6c3RyaW5nKG5vX3doaXRlc3BhY2UpKSA9PSBub193aGl0ZXNwYWNlCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAiVGhlcmUgaXMgbm8gZXh0cmEgd2hpdGVzcGFjZSBoZXJlIgotPT0KLSJUaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUiCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nTWFuaXAudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB0cmltKHN0ZDo6c3RyaW5nKGxlYWRpbmdfd2hpdGVzcGFjZSkpID09IG5vX3doaXRlc3BhY2UKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICJUaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUiCi09PQotIlRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZSIKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmdNYW5pcC50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHRyaW0oc3RkOjpzdHJpbmcodHJhaWxpbmdfd2hpdGVzcGFjZSkpID09IG5vX3doaXRlc3BhY2UKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICJUaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUiCi09PQotIlRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZSIKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmdNYW5pcC50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHRyaW0oc3RkOjpzdHJpbmcod2hpdGVzcGFjZV9hdF9ib3RoX2VuZHMpKSA9PSBub193aGl0ZXNwYWNlCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAiVGhlcmUgaXMgbm8gZXh0cmEgd2hpdGVzcGFjZSBoZXJlIgotPT0KLSJUaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUiCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nTWFuaXAudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB0cmltKFN0cmluZ1JlZihub193aGl0ZXNwYWNlKSkgPT0gU3RyaW5nUmVmKG5vX3doaXRlc3BhY2UpCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICBUaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUKLT09Ci1UaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmdNYW5pcC50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHRyaW0oU3RyaW5nUmVmKGxlYWRpbmdfd2hpdGVzcGFjZSkpID09IFN0cmluZ1JlZihub193aGl0ZXNwYWNlKQotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgVGhlcmUgaXMgbm8gZXh0cmEgd2hpdGVzcGFjZSBoZXJlCi09PQotVGhlcmUgaXMgbm8gZXh0cmEgd2hpdGVzcGFjZSBoZXJlCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nTWFuaXAudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB0cmltKFN0cmluZ1JlZih0cmFpbGluZ193aGl0ZXNwYWNlKSkgPT0gU3RyaW5nUmVmKG5vX3doaXRlc3BhY2UpCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICBUaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUKLT09Ci1UaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmdNYW5pcC50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHRyaW0oU3RyaW5nUmVmKHdoaXRlc3BhY2VfYXRfYm90aF9lbmRzKSkgPT0gU3RyaW5nUmVmKG5vX3doaXRlc3BhY2UpCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICBUaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUKLT09Ci1UaGVyZSBpcyBubyBleHRyYSB3aGl0ZXNwYWNlIGhlcmUKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KLSAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJVbmV4cGVjdGVkIGV4Y2VwdGlvbnMgY2FuIGJlIHRyYW5zbGF0ZWQiIHRhZ3M9IlshaGlkZV1bIXRocm93c11bLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJVbmV4cGVjdGVkIGV4Y2VwdGlvbnMgY2FuIGJlIHRyYW5zbGF0ZWQiIHRhZ3M9IlshdGhyb3dzXVsuXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIiA+CiAgICAgICA8RXhjZXB0aW9uIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcCIgPgogICAgICAgICAzLjE0CiAgICAgICA8L0V4Y2VwdGlvbj4KQEAgLTEzNTc2LDcgKzEwNzkzLDcgQEAKICAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJWZWN0b3IgQXBwcm94IG1hdGNoZXIgLS0gZmFpbGluZyIgdGFncz0iWyFoaWRlXVsuXVthcHByb3hdW2ZhaWxpbmddW21hdGNoZXJzXVt2ZWN0b3JdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJWZWN0b3IgQXBwcm94IG1hdGNoZXIgLS0gZmFpbGluZyIgdGFncz0iWy5dW2FwcHJveF1bZmFpbGluZ11bbWF0Y2hlcnNdW3ZlY3Rvcl0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICA8U2VjdGlvbiBuYW1lPSJFbXB0eSBhbmQgbm9uIGVtcHR5IHZlY3RvcnMgYXJlIG5vdCBhcHByb3ggZXF1YWwiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJDSEVDS19USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KQEAgLTEzNzMxLDcgKzEwOTQ4LDcgQEAKICAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJWZWN0b3IgbWF0Y2hlcnMgdGhhdCBmYWlsIiB0YWdzPSJbIWhpZGVdWy5dW2ZhaWxpbmddW21hdGNoZXJzXVt2ZWN0b3JdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJWZWN0b3IgbWF0Y2hlcnMgdGhhdCBmYWlsIiB0YWdzPSJbLl1bZmFpbGluZ11bbWF0Y2hlcnNdW3ZlY3Rvcl0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICA8U2VjdGlvbiBuYW1lPSJDb250YWlucyAoZWxlbWVudCkiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJDSEVDS19USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KQEAgLTEzODY5LDEzICsxMTA4NiwxMyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IldoZW4gdW5jaGVja2VkIGV4Y2VwdGlvbnMgYXJlIHRocm93biBkaXJlY3RseSB0aGV5IGFyZSBhbHdheXMgZmFpbHVyZXMiIHRhZ3M9IlshaGlkZV1bIXRocm93c11bLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJXaGVuIHVuY2hlY2tlZCBleGNlcHRpb25zIGFyZSB0aHJvd24gZGlyZWN0bHkgdGhleSBhcmUgYWx3YXlzIGZhaWx1cmVzIiB0YWdzPSJbIXRocm93c11bLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcCIgPgogICAgICAgPEV4Y2VwdGlvbiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KICAgICAgICAgdW5leHBlY3RlZCBleGNlcHRpb24KICAgICAgIDwvRXhjZXB0aW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJXaGVuIHVuY2hlY2tlZCBleGNlcHRpb25zIGFyZSB0aHJvd24gZHVyaW5nIGEgQ0hFQ0sgdGhlIHRlc3Qgc2hvdWxkIGNvbnRpbnVlIiB0YWdzPSJbIWhpZGVdWyF0aHJvd3NdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0iV2hlbiB1bmNoZWNrZWQgZXhjZXB0aW9ucyBhcmUgdGhyb3duIGR1cmluZyBhIENIRUNLIHRoZSB0ZXN0IHNob3VsZCBjb250aW51ZSIgdGFncz0iWyF0aHJvd3NdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIiA+CiAgICAgICAgIDxPcmlnaW5hbD4KICAgICAgICAgICB0aGlzVGhyb3dzKCkgPT0gMApAQCAtMTM4ODksNyArMTExMDYsNyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJXaGVuIHVuY2hlY2tlZCBleGNlcHRpb25zIGFyZSB0aHJvd24gZHVyaW5nIGEgUkVRVUlSRSB0aGUgdGVzdCBzaG91bGQgYWJvcnQgZmFpbCIgdGFncz0iWyFoaWRlXVshdGhyb3dzXVsuXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9IldoZW4gdW5jaGVja2VkIGV4Y2VwdGlvbnMgYXJlIHRocm93biBkdXJpbmcgYSBSRVFVSVJFIHRoZSB0ZXN0IHNob3VsZCBhYm9ydCBmYWlsIiB0YWdzPSJbIXRocm93c11bLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcCIgPgogICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0iZmFsc2UiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgdGhpc1Rocm93cygpID09IDAKQEAgLTEzOTAzLDcgKzExMTIwLDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iV2hlbiB1bmNoZWNrZWQgZXhjZXB0aW9ucyBhcmUgdGhyb3duIGZyb20gZnVuY3Rpb25zIHRoZXkgYXJlIGFsd2F5cyBmYWlsdXJlcyIgdGFncz0iWyFoaWRlXVshdGhyb3dzXVsuXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9IldoZW4gdW5jaGVja2VkIGV4Y2VwdGlvbnMgYXJlIHRocm93biBmcm9tIGZ1bmN0aW9ucyB0aGV5IGFyZSBhbHdheXMgZmFpbHVyZXMiIHRhZ3M9IlshdGhyb3dzXVsuXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgdGhpc1Rocm93cygpID09IDAKQEAgLTEzOTE3LDcgKzExMTM0LDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iV2hlbiB1bmNoZWNrZWQgZXhjZXB0aW9ucyBhcmUgdGhyb3duIGZyb20gc2VjdGlvbnMgdGhleSBhcmUgYWx3YXlzIGZhaWx1cmVzIiB0YWdzPSJbIWhpZGVdWyF0aHJvd3NdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0iV2hlbiB1bmNoZWNrZWQgZXhjZXB0aW9ucyBhcmUgdGhyb3duIGZyb20gc2VjdGlvbnMgdGhleSBhcmUgYWx3YXlzIGZhaWx1cmVzIiB0YWdzPSJbIXRocm93c11bLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcCIgPgogICAgICAgPFNlY3Rpb24gbmFtZT0ic2VjdGlvbiBuYW1lIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KICAgICAgICAgPEV4Y2VwdGlvbiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KICAgICAgICAgICB1bmV4cGVjdGVkIGV4Y2VwdGlvbgpAQCAtMTM5MjksMTMgKzExMTQ2LDEzIEBACiAgICAgPFRlc3RDYXNlIG5hbWU9IldoZW4gdW5jaGVja2VkIGV4Y2VwdGlvbnMgYXJlIHRocm93biwgYnV0IGNhdWdodCwgdGhleSBkbyBub3QgYWZmZWN0IHRoZSB0ZXN0IiB0YWdzPSJbIXRocm93c10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcCIgPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJXaGVyZSB0aGUgTEhTIGlzIG5vdCBhIHNpbXBsZSB2YWx1ZSIgdGFncz0iWyFoaWRlXVsuXVtUcmlja3ldW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RyaWNreS50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0iV2hlcmUgdGhlIExIUyBpcyBub3QgYSBzaW1wbGUgdmFsdWUiIHRhZ3M9IlsuXVtUcmlja3ldW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RyaWNreS50ZXN0cy5jcHAiID4KICAgICAgIDxXYXJuaW5nPgogICAgICAgICBVbmNvbW1lbnQgdGhlIGNvZGUgaW4gdGhpcyB0ZXN0IHRvIGNoZWNrIHRoYXQgaXQgZ2l2ZXMgYSBzZW5zaWJsZSBjb21waWxlciBlcnJvcgogICAgICAgPC9XYXJuaW5nPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJXaGVyZSB0aGVyZSBpcyBtb3JlIHRvIHRoZSBleHByZXNzaW9uIGFmdGVyIHRoZSBSSFMiIHRhZ3M9IlshaGlkZV1bLl1bVHJpY2t5XVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ucmlja3kudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9IldoZXJlIHRoZXJlIGlzIG1vcmUgdG8gdGhlIGV4cHJlc3Npb24gYWZ0ZXIgdGhlIFJIUyIgdGFncz0iWy5dW1RyaWNreV1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVHJpY2t5LnRlc3RzLmNwcCIgPgogICAgICAgPFdhcm5pbmc+CiAgICAgICAgIFVuY29tbWVudCB0aGUgY29kZSBpbiB0aGlzIHRlc3QgdG8gY2hlY2sgdGhhdCBpdCBnaXZlcyBhIHNlbnNpYmxlIGNvbXBpbGVyIGVycm9yCiAgICAgICA8L1dhcm5pbmc+CkBAIC0xNDA2NiwzMSArMTEyODMsMzc2IEBACiAgICAgICA8L1NlY3Rpb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iYWRkaW5nIGEgaGlkZSB0YWcgaW1wbGljaXRseSBlbmFibGVzIGFsbCBvdGhlcnMiIHRhZ3M9Ilt0YWdzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1RhZy50ZXN0cy5jcHAiID4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1RhZy50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHRlc3RjYXNlLnRhZ3MsIFZlY3RvckNvbnRhaW5zKHN0ZDo6c3RyaW5nKCIuIikpICZhbXA7JmFtcDsgVmVjdG9yQ29udGFpbnMoc3RkOjpzdHJpbmcoIiFoaWRlIikpCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICB7ICIhaGlkZSIsICIuIiB9ICggQ29udGFpbnM6ICIuIiBhbmQgQ29udGFpbnM6ICIhaGlkZSIgKQotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvVGFnLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgdGVzdGNhc2UudGFncywgVmVjdG9yQ29udGFpbnMoc3RkOjpzdHJpbmcoIi4iKSkgJmFtcDsmYW1wOyBWZWN0b3JDb250YWlucyhzdGQ6OnN0cmluZygiIWhpZGUiKSkKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIHsgIiFoaWRlIiwgIi4iIH0gKCBDb250YWluczogIi4iIGFuZCBDb250YWluczogIiFoaWRlIiApCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9UYWcudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB0ZXN0Y2FzZS50YWdzLCBWZWN0b3JDb250YWlucyhzdGQ6OnN0cmluZygiLiIpKSAmYW1wOyZhbXA7IFZlY3RvckNvbnRhaW5zKHN0ZDo6c3RyaW5nKCIhaGlkZSIpKQotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgeyAiIWhpZGUiLCAiLiIsICJmb28iIH0gKCBDb250YWluczogIi4iIGFuZCBDb250YWluczogIiFoaWRlIiApCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+CisgICAgPFRlc3RDYXNlIG5hbWU9IlhtbEVuY29kZTogVVRGLTgiIHRhZ3M9IltVVEYtOF1bWE1MXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IlZhbGlkIHV0Zi04IHN0cmluZ3MiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGVuY29kZSh1OCJIZXJlIGJlIPCfkb4iKSA9PSB1OCJIZXJlIGJlIPCfkb4iCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAiSGVyZSBiZSDwn5G+IiA9PSAiSGVyZSBiZSDwn5G+IgorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgZW5jb2RlKHU4IsWhxaEiKSA9PSB1OCLFocWhIgorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgIsWhxaEiID09ICLFocWhIgorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgZW5jb2RlKCJceERGXHhCRiIpID09ICJceERGXHhCRiIKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICLfvyIgPT0gIt+/IgorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgZW5jb2RlKCJceEUwXHhBMFx4ODAiKSA9PSAiXHhFMFx4QTBceDgwIgorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgIuCggCIgPT0gIuCggCIKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGVuY29kZSgiXHhFRFx4OUZceEJGIikgPT0gIlx4RURceDlGXHhCRiIKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICLtn78iID09ICLtn78iCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBlbmNvZGUoIlx4RUVceDgwXHg4MCIpID09ICJceEVFXHg4MFx4ODAiCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAi7oCAIiA9PSAi7oCAIgorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgZW5jb2RlKCJceEVGXHhCRlx4QkYiKSA9PSAiXHhFRlx4QkZceEJGIgorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgIu+/vyIgPT0gIu+/vyIKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGVuY29kZSgiXHhGMFx4OTBceDgwXHg4MCIpID09ICJceEYwXHg5MFx4ODBceDgwIgorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgIvCQgIAiID09ICLwkICAIgorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgZW5jb2RlKCJceEY0XHg4Rlx4QkZceEJGIikgPT0gIlx4RjRceDhGXHhCRlx4QkYiCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAi9I+/vyIgPT0gIvSPv78iCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI5IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iSW52YWxpZCB1dGYtOCBzdHJpbmdzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICA8U2VjdGlvbiBuYW1lPSJWYXJpb3VzIGJyb2tlbiBzdHJpbmdzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIkhlcmUgXHhGRiBiZSDwn5G+IikgPT0gdTgiSGVyZSBcXHhGRiBiZSDwn5G+IgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIkhlcmUgXHhGRiBiZSDwn5G+IiA9PSAiSGVyZSBceEZGIGJlIPCfkb4iCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceEZGIikgPT0gIlxceEZGIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIlx4RkYiID09ICJceEZGIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHhDNVx4QzVceEEwIikgPT0gdTgiXFx4QzXFoCIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEM1xaAiID09ICJceEM1xaAiCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceEY0XHg5MFx4ODBceDgwIikgPT0gdTgiXFx4RjRcXHg5MFxceDgwXFx4ODAiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAiXHhGNFx4OTBceDgwXHg4MCIgPT0gIlx4RjRceDkwXHg4MFx4ODAiCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI0IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjQiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJJbnZhbGlkIHV0Zi04IHN0cmluZ3MiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgIDxTZWN0aW9uIG5hbWU9Ik92ZXJsb25nIGVuY29kaW5ncyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceEMwXHg4MCIpID09IHU4IlxceEMwXFx4ODAiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAiXHhDMFx4ODAiID09ICJceEMwXHg4MCIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4RjBceDgwXHg4MFx4ODAiKSA9PSB1OCJcXHhGMFxceDgwXFx4ODBcXHg4MCIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEYwXHg4MFx4ODBceDgwIiA9PSAiXHhGMFx4ODBceDgwXHg4MCIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4QzFceEJGIikgPT0gdTgiXFx4QzFcXHhCRiIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEMxXHhCRiIgPT0gIlx4QzFceEJGIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHhFMFx4OUZceEJGIikgPT0gdTgiXFx4RTBcXHg5RlxceEJGIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIlx4RTBceDlGXHhCRiIgPT0gIlx4RTBceDlGXHhCRiIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4RjBceDhGXHhCRlx4QkYiKSA9PSB1OCJcXHhGMFxceDhGXFx4QkZcXHhCRiIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEYwXHg4Rlx4QkZceEJGIiA9PSAiXHhGMFx4OEZceEJGXHhCRiIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjUiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IkludmFsaWQgdXRmLTggc3RyaW5ncyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iU3Vycm9nYXRlIHBhaXJzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4RURceEEwXHg4MCIpID09ICJceEVEXHhBMFx4ODAiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAi7aCAIiA9PSAi7aCAIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHhFRFx4QUZceEJGIikgPT0gIlx4RURceEFGXHhCRiIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICLtr78iID09ICLtr78iCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceEVEXHhCMFx4ODAiKSA9PSAiXHhFRFx4QjBceDgwIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIu2wgCIgPT0gIu2wgCIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4RURceEJGXHhCRiIpID09ICJceEVEXHhCRlx4QkYiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAi7b+/IiA9PSAi7b+/IgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI0IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iSW52YWxpZCB1dGYtOCBzdHJpbmdzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICA8U2VjdGlvbiBuYW1lPSJJbnZhbGlkIHN0YXJ0IGJ5dGUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHg4MCIpID09IHU4IlxceDgwIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIlx4ODAiID09ICJceDgwIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHg4MSIpID09IHU4IlxceDgxIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIlx4ODEiID09ICJceDgxIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHhCQyIpID09IHU4IlxceEJDIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIlx4QkMiID09ICJceEJDIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHhCRiIpID09IHU4IlxceEJGIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIlx4QkYiID09ICJceEJGIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHhGNVx4ODBceDgwXHg4MCIpID09IHU4IlxceEY1XFx4ODBcXHg4MFxceDgwIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIlx4RjVceDgwXHg4MFx4ODAiID09ICJceEY1XHg4MFx4ODBceDgwIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHhGNlx4ODBceDgwXHg4MCIpID09IHU4IlxceEY2XFx4ODBcXHg4MFxceDgwIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIlx4RjZceDgwXHg4MFx4ODAiID09ICJceEY2XHg4MFx4ODBceDgwIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHhGN1x4ODBceDgwXHg4MCIpID09IHU4IlxceEY3XFx4ODBcXHg4MFxceDgwIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIlx4RjdceDgwXHg4MFx4ODAiID09ICJceEY3XHg4MFx4ODBceDgwIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNyIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI3IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iSW52YWxpZCB1dGYtOCBzdHJpbmdzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICA8U2VjdGlvbiBuYW1lPSJNaXNzaW5nIGNvbnRpbnVhdGlvbiBieXRlKHMpIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4REUiKSA9PSB1OCJcXHhERSIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceERFIiA9PSAiXHhERSIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4REYiKSA9PSB1OCJcXHhERiIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceERGIiA9PSAiXHhERiIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4RTAiKSA9PSB1OCJcXHhFMCIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEUwIiA9PSAiXHhFMCIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4RUYiKSA9PSB1OCJcXHhFRiIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEVGIiA9PSAiXHhFRiIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4RjAiKSA9PSB1OCJcXHhGMCIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEYwIiA9PSAiXHhGMCIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4RjQiKSA9PSB1OCJcXHhGNCIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEY0IiA9PSAiXHhGNCIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4RTBceDgwIikgPT0gdTgiXFx4RTBcXHg4MCIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEUwXHg4MCIgPT0gIlx4RTBceDgwIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHhFMFx4QkYiKSA9PSB1OCJcXHhFMFxceEJGIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIlx4RTBceEJGIiA9PSAiXHhFMFx4QkYiCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceEUxXHg4MCIpID09IHU4IlxceEUxXFx4ODAiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAiXHhFMVx4ODAiID09ICJceEUxXHg4MCIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4RjBceDgwIikgPT0gdTgiXFx4RjBcXHg4MCIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEYwXHg4MCIgPT0gIlx4RjBceDgwIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHhGNFx4ODAiKSA9PSB1OCJcXHhGNFxceDgwIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIlx4RjRceDgwIiA9PSAiXHhGNFx4ODAiCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceEYwXHg4MFx4ODAiKSA9PSB1OCJcXHhGMFxceDgwXFx4ODAiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAiXHhGMFx4ODBceDgwIiA9PSAiXHhGMFx4ODBceDgwIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHhGNFx4ODBceDgwIikgPT0gdTgiXFx4RjRcXHg4MFxceDgwIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIlx4RjRceDgwXHg4MCIgPT0gIlx4RjRceDgwXHg4MCIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEzIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEzIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9ImFycmF5Jmx0O2ludCwgTj4gLT4gdG9TdHJpbmciIHRhZ3M9IlthcnJheV1bY29udGFpbmVyc11bdG9TdHJpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcCIgPgpAQCAtMTQxNjEsNyArMTE3MjMsNyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9ImNoZWNrZWRFbHNlLCBmYWlsaW5nIiB0YWdzPSJbIWhpZGVdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9ImNoZWNrZWRFbHNlLCBmYWlsaW5nIiB0YWdzPSJbLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJDSEVDS0VEX0VMU0UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgIGZsYWcKQEAgLTE0MTk5LDcgKzExNzYxLDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJjaGVja2VkSWYsIGZhaWxpbmciIHRhZ3M9IlshaGlkZV1bLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0iY2hlY2tlZElmLCBmYWlsaW5nIiB0YWdzPSJbLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJDSEVDS0VEX0lGIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICAgIDxPcmlnaW5hbD4KICAgICAgICAgICBmbGFnCkBAIC0xNDMxMywxMyArMTE4NzUsMTMgQEAKIGxvb3NlIHRleHQgYXJ0aWZhY3QKICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0ianVzdCBmYWlsdXJlIiB0YWdzPSJbIWhpZGVdWy5dW2ZhaWxdW2lzb2xhdGVkIGluZm9dW21lc3NhZ2VzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJqdXN0IGZhaWx1cmUiIHRhZ3M9IlsuXVtmYWlsXVtpc29sYXRlZCBpbmZvXVttZXNzYWdlc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KICAgICAgIDxGYWlsdXJlIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KICAgICAgICAgUHJldmlvdXMgaW5mbyBzaG91bGQgbm90IGJlIHNlZW4KICAgICAgIDwvRmFpbHVyZT4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0ianVzdCBmYWlsdXJlIGFmdGVyIHVuc2NvcGVkIGluZm8iIHRhZ3M9IlshaGlkZV1bLl1bZmFpbGluZ11baW5mb11bdW5zY29wZWRdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9Imp1c3QgZmFpbHVyZSBhZnRlciB1bnNjb3BlZCBpbmZvIiB0YWdzPSJbLl1bZmFpbGluZ11baW5mb11bdW5zY29wZWRdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwIiA+CiAgICAgICA8RmFpbHVyZSBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwIiA+CiAgICAgICAgIHByZXZpb3VzIHVuc2NvcGVkIGluZm8gU0hPVUxEIG5vdCBiZSBzZWVuCiAgICAgICA8L0ZhaWx1cmU+CkBAIC0xNDM0NCw3ICsxMTkwNiw3IEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0ibG9vcGVkIFNFQ1RJT04gdGVzdHMiIHRhZ3M9IlshaGlkZV1bLl1bZmFpbGluZ11bc2VjdGlvbnNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9Imxvb3BlZCBTRUNUSU9OIHRlc3RzIiB0YWdzPSJbLl1bZmFpbGluZ11bc2VjdGlvbnNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICA8U2VjdGlvbiBuYW1lPSJiIGlzIGN1cnJlbnRseTogMCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8T3JpZ2luYWw+CkBAIC0xNDQ1Nyw3ICsxMjAxOSw3IEBACiAgICAgICA8L1NlY3Rpb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9Imxvb3BlZCB0ZXN0cyIgdGFncz0iWyFoaWRlXVsuXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJsb29wZWQgdGVzdHMiIHRhZ3M9IlsuXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgogICAgICAgPEluZm8+CiAgICAgICAgIFRlc3RpbmcgaWYgZmliWzBdICgxKSBpcyBldmVuCiAgICAgICA8L0luZm8+CkBAIC0xNDU2OSw3ICsxMjEzMSw3IEBACiAgICAgICA8L1dhcm5pbmc+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9Im1vcmUgbmVzdGVkIFNFQ1RJT04gdGVzdHMiIHRhZ3M9IlshaGlkZV1bLl1bZmFpbGluZ11bc2VjdGlvbnNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9Im1vcmUgbmVzdGVkIFNFQ1RJT04gdGVzdHMiIHRhZ3M9IlsuXVtmYWlsaW5nXVtzZWN0aW9uc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgIDxTZWN0aW9uIG5hbWU9ImRvZXNuJ3QgZXF1YWwiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgICAgPFNlY3Rpb24gbmFtZT0iZXF1YWwiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgpAQCAtMTQ2MTQsNyArMTIxNzYsNyBAQAogICAgICAgPC9TZWN0aW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJuZXN0ZWQgU0VDVElPTiB0ZXN0cyIgdGFncz0iWyFoaWRlXVsuXVtmYWlsaW5nXVtzZWN0aW9uc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0ibmVzdGVkIFNFQ1RJT04gdGVzdHMiIHRhZ3M9IlsuXVtmYWlsaW5nXVtzZWN0aW9uc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgIDxTZWN0aW9uIG5hbWU9ImRvZXNuJ3QgZXF1YWwiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KQEAgLTE0NjU4LDcgKzEyMjIwLDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJub24tY29weWFibGUgb2JqZWN0cyIgdGFncz0iWyFoaWRlXVsuXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ucmlja3kudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9Im5vbi1jb3B5YWJsZSBvYmplY3RzIiB0YWdzPSJbLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVHJpY2t5LnRlc3RzLmNwcCIgPgogICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVHJpY2t5LnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgdGkgPT0gdHlwZWlkKGludCkKQEAgLTE0NjcyLDcgKzEyMjM0LDcgQEAKICAgICA8VGVzdENhc2UgbmFtZT0ibm90IGFsbG93ZWQiIHRhZ3M9IlshdGhyb3dzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9Im5vdCBwcmludHMgdW5zY29wZWQgaW5mbyBmcm9tIHByZXZpb3VzIGZhaWx1cmVzIiB0YWdzPSJbIWhpZGVdWy5dW2ZhaWxpbmddW2luZm9dW3Vuc2NvcGVkXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJub3QgcHJpbnRzIHVuc2NvcGVkIGluZm8gZnJvbSBwcmV2aW91cyBmYWlsdXJlcyIgdGFncz0iWy5dW2ZhaWxpbmddW2luZm9dW3Vuc2NvcGVkXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgogICAgICAgPEluZm8+CiAgICAgICAgIHRoaXMgTUFZIGJlIHNlZW4gb25seSBmb3IgdGhlIEZJUlNUIGFzc2VydGlvbiBJRiBpbmZvIGlzIHByaW50ZWQgZm9yIHBhc3NpbmcgYXNzZXJ0aW9ucwogICAgICAgPC9JbmZvPgpAQCAtMTQ3NTEsNzQgKzEyMzEzLDYgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJwYXJzZUVudW1zIiB0YWdzPSJbU3RyaW5nc11bZW51bXNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvVG9TdHJpbmcudGVzdHMuY3BwIiA+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJObyBlbnVtcyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1RvU3RyaW5nLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDS19USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvVG9TdHJpbmcudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgcGFyc2VFbnVtcyggIiIgKSwgRXF1YWxzKCBzdGQ6OnZlY3RvciZsdDtDYXRjaDo6U3RyaW5nUmVmPnt9ICkKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIHsgIH0gRXF1YWxzOiB7ICB9Ci0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iT25lIGVudW0gdmFsdWUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9Ub1N0cmluZy50ZXN0cy5jcHAiID4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0tfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1RvU3RyaW5nLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHBhcnNlRW51bXMoICJDbGFzc05hbWU6OkVudW1OYW1lOjpWYWx1ZTEiICksIEVxdWFscyhzdGQ6OnZlY3RvciZsdDtDYXRjaDo6U3RyaW5nUmVmPnsiVmFsdWUxIn0gKQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgeyBWYWx1ZTEgfSBFcXVhbHM6IHsgVmFsdWUxIH0KLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9Ub1N0cmluZy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBwYXJzZUVudW1zKCAiVmFsdWUxIiApLCBFcXVhbHMoIHN0ZDo6dmVjdG9yJmx0O0NhdGNoOjpTdHJpbmdSZWY+eyJWYWx1ZTEifSApCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICB7IFZhbHVlMSB9IEVxdWFsczogeyBWYWx1ZTEgfQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0tfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1RvU3RyaW5nLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHBhcnNlRW51bXMoICJFbnVtTmFtZTo6VmFsdWUxIiApLCBFcXVhbHMoc3RkOjp2ZWN0b3ImbHQ7Q2F0Y2g6OlN0cmluZ1JlZj57IlZhbHVlMSJ9ICkKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIHsgVmFsdWUxIH0gRXF1YWxzOiB7IFZhbHVlMSB9Ci0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIzIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0iTXVsdGlwbGUgZW51bSB2YWx1ZXMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9Ub1N0cmluZy50ZXN0cy5jcHAiID4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0tfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1RvU3RyaW5nLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHBhcnNlRW51bXMoICJDbGFzc05hbWU6OkVudW1OYW1lOjpWYWx1ZTEsIENsYXNzTmFtZTo6RW51bU5hbWU6OlZhbHVlMiIgKSwgRXF1YWxzKCBzdGQ6OnZlY3RvciZsdDtDYXRjaDo6U3RyaW5nUmVmPnsiVmFsdWUxIiwgIlZhbHVlMiJ9ICkKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIHsgVmFsdWUxLCBWYWx1ZTIgfSBFcXVhbHM6IHsgVmFsdWUxLCBWYWx1ZTIgfQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0tfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1RvU3RyaW5nLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHBhcnNlRW51bXMoICJDbGFzc05hbWU6OkVudW1OYW1lOjpWYWx1ZTEsIENsYXNzTmFtZTo6RW51bU5hbWU6OlZhbHVlMiwgQ2xhc3NOYW1lOjpFbnVtTmFtZTo6VmFsdWUzIiApLCBFcXVhbHMoIHN0ZDo6dmVjdG9yJmx0O0NhdGNoOjpTdHJpbmdSZWY+eyJWYWx1ZTEiLCAiVmFsdWUyIiwgIlZhbHVlMyJ9ICkKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIHsgVmFsdWUxLCBWYWx1ZTIsIFZhbHVlMyB9IEVxdWFsczogeyBWYWx1ZTEsIFZhbHVlMiwgVmFsdWUzIH0KLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9Ub1N0cmluZy50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBwYXJzZUVudW1zKCAiQ2xhc3NOYW1lOjpFbnVtTmFtZTo6VmFsdWUxLENsYXNzTmFtZTo6RW51bU5hbWU6OlZhbHVlMiAsIENsYXNzTmFtZTo6RW51bU5hbWU6OlZhbHVlMyIgKSwgRXF1YWxzKCBzdGQ6OnZlY3RvciZsdDtDYXRjaDo6U3RyaW5nUmVmPnsiVmFsdWUxIiwgIlZhbHVlMiIsICJWYWx1ZTMifSApCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICB7IFZhbHVlMSwgVmFsdWUyLCBWYWx1ZTMgfSBFcXVhbHM6IHsgVmFsdWUxLCBWYWx1ZTIsIFZhbHVlMyB9Ci0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIzIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgotICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9InBvaW50ZXIgdG8gY2xhc3MiIHRhZ3M9IltUcmlja3ldIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RyaWNreS50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVHJpY2t5LnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CkBAIC0xNDg0NCw3ICsxMjMzOCw3IEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0icHJpbnRzIHVuc2NvcGVkIGluZm8gb24gZmFpbHVyZSIgdGFncz0iWyFoaWRlXVsuXVtmYWlsaW5nXVtpbmZvXVt1bnNjb3BlZF0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0icHJpbnRzIHVuc2NvcGVkIGluZm8gb24gZmFpbHVyZSIgdGFncz0iWy5dW2ZhaWxpbmddW2luZm9dW3Vuc2NvcGVkXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgogICAgICAgPEluZm8+CiAgICAgICAgIHRoaXMgU0hPVUxEIGJlIHNlZW4KICAgICAgIDwvSW5mbz4KQEAgLTE0ODYxLDcgKzEyMzU1LDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0icHJpbnRzIHVuc2NvcGVkIGluZm8gb25seSBmb3IgdGhlIGZpcnN0IGFzc2VydGlvbiIgdGFncz0iWyFoaWRlXVsuXVtmYWlsaW5nXVtpbmZvXVt1bnNjb3BlZF0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0icHJpbnRzIHVuc2NvcGVkIGluZm8gb25seSBmb3IgdGhlIGZpcnN0IGFzc2VydGlvbiIgdGFncz0iWy5dW2ZhaWxpbmddW2luZm9dW3Vuc2NvcGVkXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgogICAgICAgPEluZm8+CiAgICAgICAgIHRoaXMgU0hPVUxEIGJlIHNlZW4gb25seSBPTkNFCiAgICAgICA8L0luZm8+CkBAIC0xNDkwMiw3ICsxMjM5Niw3IEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9InJhbmRvbSBTRUNUSU9OIHRlc3RzIiB0YWdzPSJbIWhpZGVdWy5dW2ZhaWxpbmddW3NlY3Rpb25zXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJyYW5kb20gU0VDVElPTiB0ZXN0cyIgdGFncz0iWy5dW2ZhaWxpbmddW3NlY3Rpb25zXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgogICAgICAgPFNlY3Rpb24gbmFtZT0iZG9lc24ndCBlcXVhbCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgpAQCAtMTQ5MzUsMTcgKzEyNDI5LDE3IEBACiAgICAgICA8L1NlY3Rpb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0icmVwbGFjZUluUGxhY2UiIHRhZ3M9IltzdHJpbmctbWFuaXBdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nTWFuaXAudGVzdHMuY3BwIiA+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJyZXBsYWNlIHNpbmdsZSBjaGFyIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nTWFuaXAudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nTWFuaXAudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9InJlcGxhY2VJblBsYWNlIiB0YWdzPSJbU3RyaW5nTWFuaXBdW1N0cmluZ3NdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgorICAgICAgPFNlY3Rpb24gbmFtZT0icmVwbGFjZSBzaW5nbGUgY2hhciIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKGxldHRlcnMsICJiIiwgInoiKQorICAgICAgICAgICAgQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKCBsZXR0ZXJzLCAiYiIsICJ6IiApCiAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICA8RXhwYW5kZWQ+CiAgICAgICAgICAgICB0cnVlCiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZ01hbmlwLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgICBsZXR0ZXJzID09ICJhemNkZWZjZyIKICAgICAgICAgICA8L09yaWdpbmFsPgpAQCAtMTQ5NTUsMTYgKzEyNDQ5LDE2IEBACiAgICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KICAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9InJlcGxhY2UgdHdvIGNoYXJzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nTWFuaXAudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nTWFuaXAudGVzdHMuY3BwIiA+CisgICAgICA8U2VjdGlvbiBuYW1lPSJyZXBsYWNlIHR3byBjaGFycyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKGxldHRlcnMsICJjIiwgInoiKQorICAgICAgICAgICAgQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKCBsZXR0ZXJzLCAiYyIsICJ6IiApCiAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICA8RXhwYW5kZWQ+CiAgICAgICAgICAgICB0cnVlCiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZ01hbmlwLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgICBsZXR0ZXJzID09ICJhYnpkZWZ6ZyIKICAgICAgICAgICA8L09yaWdpbmFsPgpAQCAtMTQ5NzQsMTYgKzEyNDY4LDE2IEBACiAgICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KICAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9InJlcGxhY2UgZmlyc3QgY2hhciIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZ01hbmlwLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZ01hbmlwLnRlc3RzLmNwcCIgPgorICAgICAgPFNlY3Rpb24gbmFtZT0icmVwbGFjZSBmaXJzdCBjaGFyIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBDYXRjaDo6cmVwbGFjZUluUGxhY2UobGV0dGVycywgImEiLCAieiIpCisgICAgICAgICAgICBDYXRjaDo6cmVwbGFjZUluUGxhY2UoIGxldHRlcnMsICJhIiwgInoiICkKICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KICAgICAgICAgICAgIHRydWUKICAgICAgICAgICA8L0V4cGFuZGVkPgogICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nTWFuaXAudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KICAgICAgICAgICAgIGxldHRlcnMgPT0gInpiY2RlZmNnIgogICAgICAgICAgIDwvT3JpZ2luYWw+CkBAIC0xNDk5MywxNiArMTI0ODcsMTYgQEAKICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgogICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0icmVwbGFjZSBsYXN0IGNoYXIiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmdNYW5pcC50ZXN0cy5jcHAiID4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmdNYW5pcC50ZXN0cy5jcHAiID4KKyAgICAgIDxTZWN0aW9uIG5hbWU9InJlcGxhY2UgbGFzdCBjaGFyIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBDYXRjaDo6cmVwbGFjZUluUGxhY2UobGV0dGVycywgImciLCAieiIpCisgICAgICAgICAgICBDYXRjaDo6cmVwbGFjZUluUGxhY2UoIGxldHRlcnMsICJnIiwgInoiICkKICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KICAgICAgICAgICAgIHRydWUKICAgICAgICAgICA8L0V4cGFuZGVkPgogICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nTWFuaXAudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KICAgICAgICAgICAgIGxldHRlcnMgPT0gImFiY2RlZmN6IgogICAgICAgICAgIDwvT3JpZ2luYWw+CkBAIC0xNTAxMiwxNiArMTI1MDYsMTYgQEAKICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgogICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0icmVwbGFjZSBhbGwgY2hhcnMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmdNYW5pcC50ZXN0cy5jcHAiID4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmdNYW5pcC50ZXN0cy5jcHAiID4KKyAgICAgIDxTZWN0aW9uIG5hbWU9InJlcGxhY2UgYWxsIGNoYXJzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBDYXRjaDo6cmVwbGFjZUluUGxhY2UobGV0dGVycywgbGV0dGVycywgInJlcGxhY2VkIikKKyAgICAgICAgICAgIENhdGNoOjpyZXBsYWNlSW5QbGFjZSggbGV0dGVycywgbGV0dGVycywgInJlcGxhY2VkIiApCiAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICA8RXhwYW5kZWQ+CiAgICAgICAgICAgICB0cnVlCiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZ01hbmlwLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgICBsZXR0ZXJzID09ICJyZXBsYWNlZCIKICAgICAgICAgICA8L09yaWdpbmFsPgpAQCAtMTUwMzEsMTYgKzEyNTI1LDE2IEBACiAgICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KICAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9InJlcGxhY2Ugbm8gY2hhcnMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmdNYW5pcC50ZXN0cy5jcHAiID4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0tfRkFMU0UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmdNYW5pcC50ZXN0cy5jcHAiID4KKyAgICAgIDxTZWN0aW9uIG5hbWU9InJlcGxhY2Ugbm8gY2hhcnMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLX0ZBTFNFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICEoQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKGxldHRlcnMsICJ4IiwgInoiKSkKKyAgICAgICAgICAgICEoQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKCBsZXR0ZXJzLCAieCIsICJ6IiApKQogICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgPEV4cGFuZGVkPgogICAgICAgICAgICAgIWZhbHNlCiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZ01hbmlwLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgICBsZXR0ZXJzID09IGxldHRlcnMKICAgICAgICAgICA8L09yaWdpbmFsPgpAQCAtMTUwNTAsMTYgKzEyNTQ0LDE2IEBACiAgICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KICAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9ImVzY2FwZSAnIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nTWFuaXAudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nTWFuaXAudGVzdHMuY3BwIiA+CisgICAgICA8U2VjdGlvbiBuYW1lPSJlc2NhcGUgJyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKHMsICInIiwgInwnIikKKyAgICAgICAgICAgIENhdGNoOjpyZXBsYWNlSW5QbGFjZSggcywgIiciLCAifCciICkKICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KICAgICAgICAgICAgIHRydWUKICAgICAgICAgICA8L0V4cGFuZGVkPgogICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nTWFuaXAudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KICAgICAgICAgICAgIHMgPT0gImRpZG58J3QiCiAgICAgICAgICAgPC9PcmlnaW5hbD4KQEAgLTE1MDc0LDcgKzEyNTY4LDcgQEAKICAgICA8VGVzdENhc2UgbmFtZT0ic2Vjb25kIHRhZyIgdGFncz0iW3RhZzJdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9InNlbmQgYSBzaW5nbGUgY2hhciB0byBJTkZPIiB0YWdzPSJbIWhpZGVdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9InNlbmQgYSBzaW5nbGUgY2hhciB0byBJTkZPIiB0YWdzPSJbLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgIDxJbmZvPgogICAgICAgICAzCiAgICAgICA8L0luZm8+CkBAIC0xNTA4OCw3ICsxMjU4Miw3IEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9InNlbmRzIGluZm9ybWF0aW9uIHRvIElORk8iIHRhZ3M9IlshaGlkZV1bLl1bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0ic2VuZHMgaW5mb3JtYXRpb24gdG8gSU5GTyIgdGFncz0iWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwIiA+CiAgICAgICA8SW5mbz4KICAgICAgICAgaGkKICAgICAgIDwvSW5mbz4KQEAgLTE1MTExLDM5ICsxMjYwNSwxMiBAQAogICAgICAgICAgIHRlc3RjYXNlLnRhZ3MsIENhdGNoOjpWZWN0b3JDb250YWlucyhzdGQ6OnN0cmluZygibWFnaWMtdGFnIikpICZhbXA7JmFtcDsgQ2F0Y2g6OlZlY3RvckNvbnRhaW5zKHN0ZDo6c3RyaW5nKCIuIikpCiAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICB7ICIhaGlkZSIsICIuIiwgIm1hZ2ljLXRhZyIgfSAoIENvbnRhaW5zOiAibWFnaWMtdGFnIiBhbmQgQ29udGFpbnM6ICIuIiApCisgICAgICAgICAgeyAiLiIsICJtYWdpYy10YWciIH0gKCBDb250YWluczogIm1hZ2ljLXRhZyIgYW5kIENvbnRhaW5zOiAiLiIgKQogICAgICAgICA8L0V4cGFuZGVkPgogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9InNwbGl0U3RyaW5nIiB0YWdzPSJbc3RyaW5nLW1hbmlwXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZ01hbmlwLnRlc3RzLmNwcCIgPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0tfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZ01hbmlwLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgc3BsaXRTdHJpbmdSZWYoIiIsICcsJyksIEVxdWFscyhzdGQ6OnZlY3RvciZsdDtTdHJpbmdSZWY+KCkpCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICB7ICB9IEVxdWFsczogeyAgfQotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0tfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZ01hbmlwLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgc3BsaXRTdHJpbmdSZWYoImFiYyIsICcsJyksIEVxdWFscyhzdGQ6OnZlY3RvciZsdDtTdHJpbmdSZWY+eyJhYmMifSkKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIHsgYWJjIH0gRXF1YWxzOiB7IGFiYyB9Ci0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDS19USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nTWFuaXAudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICBzcGxpdFN0cmluZ1JlZigiYWJjLGRlZiIsICcsJyksIEVxdWFscyhzdGQ6OnZlY3RvciZsdDtTdHJpbmdSZWY+eyJhYmMiLCAiZGVmIn0pCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICB7IGFiYywgZGVmIH0gRXF1YWxzOiB7IGFiYywgZGVmIH0KLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KLSAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJzdGFja3MgdW5zY29wZWQgaW5mbyBpbiBsb29wcyIgdGFncz0iWyFoaWRlXVsuXVtmYWlsaW5nXVtpbmZvXVt1bnNjb3BlZF0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0ic3RhY2tzIHVuc2NvcGVkIGluZm8gaW4gbG9vcHMiIHRhZ3M9IlsuXVtmYWlsaW5nXVtpbmZvXVt1bnNjb3BlZF0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KICAgICAgIDxJbmZvPgogICAgICAgICBDb3VudCAxIHRvIDMuLi4KICAgICAgIDwvSW5mbz4KQEAgLTE1Mjk3LDcgKzEyNzY0LDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJzdHJpbmcgbGl0ZXJhbHMgb2YgZGlmZmVyZW50IHNpemVzIGNhbiBiZSBjb21wYXJlZCIgdGFncz0iWyFoaWRlXVsuXVtUcmlja3ldW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RyaWNreS50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0ic3RyaW5nIGxpdGVyYWxzIG9mIGRpZmZlcmVudCBzaXplcyBjYW4gYmUgY29tcGFyZWQiIHRhZ3M9IlsuXVtUcmlja3ldW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RyaWNreS50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RyaWNreS50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgIHN0ZDo6c3RyaW5nKCAiZmlyc3QiICkgPT0gInNlY29uZCIKQEAgLTE1NTE5LDcgKzEyOTg2LDcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJ0aHJvd24gc3RkOjpzdHJpbmdzIGFyZSB0cmFuc2xhdGVkIiB0YWdzPSJbIWhpZGVdWyF0aHJvd3NdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0idGhyb3duIHN0ZDo6c3RyaW5ncyBhcmUgdHJhbnNsYXRlZCIgdGFncz0iWyF0aHJvd3NdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KICAgICAgIDxFeGNlcHRpb24gZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIiA+CiAgICAgICAgIFdoeSB3b3VsZCB5b3UgdGhyb3cgYSBzdGQ6OnN0cmluZz8KICAgICAgIDwvRXhjZXB0aW9uPgpAQCAtMTYwMzcsNyArMTM1MDQsNyBAQAogICAgICAgPC9TZWN0aW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMTUyNCIgZmFpbHVyZXM9IjE0OSIgZXhwZWN0ZWRGYWlsdXJlcz0iMjEiLz4KKyAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxMjgzIiBmYWlsdXJlcz0iMTQyIiBleHBlY3RlZEZhaWx1cmVzPSIyMSIvPgogICA8L0dyb3VwPgotICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxNTI0IiBmYWlsdXJlcz0iMTQ4IiBleHBlY3RlZEZhaWx1cmVzPSIyMSIvPgorICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxMjgzIiBmYWlsdXJlcz0iMTQxIiBleHBlY3RlZEZhaWx1cmVzPSIyMSIvPgogPC9DYXRjaD4KZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCBiL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcAppbmRleCA2ZTU5MDMyLi45YjViMGVkIDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwCkBAIC0xNyw3ICsxNyw3IEBACiAKIGlubGluZSBDYXRjaDo6VGVzdENhc2UgZmFrZVRlc3RDYXNlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGRlc2MgPSAiIikgeyByZXR1cm4gQ2F0Y2g6Om1ha2VUZXN0Q2FzZShudWxscHRyLCAiIiwgeyBuYW1lLCBkZXNjIH0sIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPKTsgfQogCi1URVNUX0NBU0UoICJQYXJzZSB0ZXN0IG5hbWVzIGFuZCB0YWdzIiwgIltjb21tYW5kLWxpbmVdW3Rlc3Qtc3BlY10iICkgeworVEVTVF9DQVNFKCAiUGFyc2UgdGVzdCBuYW1lcyBhbmQgdGFncyIgKSB7CiAKICAgICB1c2luZyBDYXRjaDo6cGFyc2VUZXN0U3BlYzsKICAgICB1c2luZyBDYXRjaDo6VGVzdFNwZWM7CkBAIC0yNjIsMzQgKzI2Miw3IEBACiAgICAgICAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQyApID09IGZhbHNlICk7CiAgICAgICAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjRCApID09IHRydWUgKTsKICAgICB9Ci0gICAgU0VDVElPTiggIkxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBpbiB0ZXN0IHNwZWMiICkgewotICAgICAgICBUZXN0U3BlYyBzcGVjID0gcGFyc2VUZXN0U3BlYyggIlwiICBhYXJkdmFyayBcIiIgKTsKLSAgICAgICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggZmFrZVRlc3RDYXNlKCAiICBhYXJkdmFyayAiICkgKSApOwotICAgICAgICBDSEVDSyggc3BlYy5tYXRjaGVzKCBmYWtlVGVzdENhc2UoICIgIGFhcmR2YXJrIiApICkgKTsKLSAgICAgICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggZmFrZVRlc3RDYXNlKCAiIGFhcmR2YXJrICIgKSApICk7Ci0gICAgICAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIGZha2VUZXN0Q2FzZSggImFhcmR2YXJrICIgKSApICk7Ci0gICAgICAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIGZha2VUZXN0Q2FzZSggImFhcmR2YXJrIiApICkgKTsKLSAgICB9Ci0gICAgU0VDVElPTiggIkxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBpbiB0ZXN0IG5hbWUiICkgewotICAgICAgICBUZXN0U3BlYyBzcGVjID0gcGFyc2VUZXN0U3BlYyggImFhcmR2YXJrIiApOwotICAgICAgICBDSEVDSyggc3BlYy5tYXRjaGVzKCBmYWtlVGVzdENhc2UoICIgIGFhcmR2YXJrICIgKSApICk7Ci0gICAgICAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIGZha2VUZXN0Q2FzZSggIiAgYWFyZHZhcmsiICkgKSApOwotICAgICAgICBDSEVDSyggc3BlYy5tYXRjaGVzKCBmYWtlVGVzdENhc2UoICIgYWFyZHZhcmsgIiApICkgKTsKLSAgICAgICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggZmFrZVRlc3RDYXNlKCAiYWFyZHZhcmsgIiApICkgKTsKLSAgICAgICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggZmFrZVRlc3RDYXNlKCAiYWFyZHZhcmsiICkgKSApOwotICAgIH0KLSAgICBTRUNUSU9OKCJTaG9ydGVuZWQgaGlkZSB0YWdzIGFyZSBzcGxpdCBhcGFydCB3aGVuIHBhcnNpbmciKSB7Ci0gICAgICAgIFRlc3RTcGVjIHNwZWMgPSBwYXJzZVRlc3RTcGVjKCJbLmZvb10iKTsKLSAgICAgICAgQ0hFQ0soc3BlYy5tYXRjaGVzKGZha2VUZXN0Q2FzZSgiaGlkZGVuIGFuZCBmb28iLCAiWy5dW2Zvb10iKSkpOwotICAgICAgICBDSEVDS19GQUxTRShzcGVjLm1hdGNoZXMoZmFrZVRlc3RDYXNlKCJvbmx5IGZvbyIsICJbZm9vXSIpKSk7Ci0gICAgfQotICAgIFNFQ1RJT04oIlNob3J0ZW5lZCBoaWRlIHRhZ3MgYWxzbyBwcm9wZXJseSBoYW5kbGUgZXhjbHVzaW9uIikgewotICAgICAgICBUZXN0U3BlYyBzcGVjID0gcGFyc2VUZXN0U3BlYygiflsuZm9vXSIpOwotICAgICAgICBDSEVDS19GQUxTRShzcGVjLm1hdGNoZXMoZmFrZVRlc3RDYXNlKCJoaWRkZW4gYW5kIGZvbyIsICJbLl1bZm9vXSIpKSk7Ci0gICAgICAgIENIRUNLX0ZBTFNFKHNwZWMubWF0Y2hlcyhmYWtlVGVzdENhc2UoIm9ubHkgZm9vIiwgIltmb29dIikpKTsKLSAgICAgICAgQ0hFQ0tfRkFMU0Uoc3BlYy5tYXRjaGVzKGZha2VUZXN0Q2FzZSgib25seSBoaWRkZW4iLCAiWy5dIikpKTsKLSAgICAgICAgQ0hFQ0soc3BlYy5tYXRjaGVzKGZha2VUZXN0Q2FzZSgibmVpdGhlciBmb28gbm9yIGhpZGRlbiIsICJbYmFyXSIpKSk7Ci0gICAgfQorCiB9CiAKIFRFU1RfQ0FTRSggIlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lIiwgIltjb25maWddW2NvbW1hbmQtbGluZV0iICkgewpAQCAtNDE0LDMxICszODcsNyBAQAogICAgICAgICAgICAgUkVRVUlSRV9USEFUKHJlc3VsdC5lcnJvck1lc3NhZ2UoKSwgQ29udGFpbnMoImNvbnZlcnQiKSAmJiBDb250YWlucygib29wcyIpKTsKICNlbmRpZgogICAgICAgICB9Ci0KLSAgICAgU0VDVElPTigid2FpdC1mb3Ita2V5cHJlc3MiKSB7Ci0gICAgICAgIFNFQ1RJT04oIkFjY2VwdGVkIG9wdGlvbnMiKSB7Ci0gICAgICAgICAgICB1c2luZyB0dXBsZV90eXBlID0gc3RkOjp0dXBsZTxjaGFyIGNvbnN0KiwgQ2F0Y2g6OldhaXRGb3JLZXlwcmVzczo6V2hlbj47Ci0gICAgICAgICAgICBhdXRvIGlucHV0ID0gR0VORVJBVEUodGFibGU8Y2hhciBjb25zdCosIENhdGNoOjpXYWl0Rm9yS2V5cHJlc3M6OldoZW4+KHsKLSAgICAgICAgICAgICAgICB0dXBsZV90eXBleyJuZXZlciIsIENhdGNoOjpXYWl0Rm9yS2V5cHJlc3M6Ok5ldmVyfSwKLSAgICAgICAgICAgICAgICB0dXBsZV90eXBleyJzdGFydCIsIENhdGNoOjpXYWl0Rm9yS2V5cHJlc3M6OkJlZm9yZVN0YXJ0fSwKLSAgICAgICAgICAgICAgICB0dXBsZV90eXBleyJleGl0IiwgIENhdGNoOjpXYWl0Rm9yS2V5cHJlc3M6OkJlZm9yZUV4aXR9LAotICAgICAgICAgICAgICAgIHR1cGxlX3R5cGV7ImJvdGgiLCAgQ2F0Y2g6OldhaXRGb3JLZXlwcmVzczo6QmVmb3JlU3RhcnRBbmRFeGl0fSwKLSAgICAgICAgICAgIH0pKTsKLSAgICAgICAgICAgIENIRUNLKGNsaS5wYXJzZSh7InRlc3QiLCAiLS13YWl0LWZvci1rZXlwcmVzcyIsIHN0ZDo6Z2V0PDA+KGlucHV0KX0pKTsKLQotICAgICAgICAgICAgUkVRVUlSRShjb25maWcud2FpdEZvcktleXByZXNzID09IHN0ZDo6Z2V0PDE+KGlucHV0KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBTRUNUSU9OKCJpbnZhbGlkIG9wdGlvbnMgYXJlIHJlcG9ydGVkIikgewotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjbGkucGFyc2UoeyJ0ZXN0IiwgIi0td2FpdC1mb3Ita2V5cHJlc3MiLCAic29tZXRpbWVzIn0pOwotICAgICAgICAgICAgQ0hFQ0soIXJlc3VsdCk7Ci0KLSNpZm5kZWYgQ0FUQ0hfQ09ORklHX0RJU0FCTEVfTUFUQ0hFUlMKLSAgICAgICAgICAgIFJFUVVJUkVfVEhBVChyZXN1bHQuZXJyb3JNZXNzYWdlKCksIENvbnRhaW5zKCJuZXZlciIpICYmIENvbnRhaW5zKCJib3RoIikpOwotI2VuZGlmCi0gICAgICAgIH0KICAgICB9Ci0gICB9CiAKICAgICBTRUNUSU9OKCJub3Rocm93IikgewogICAgICAgICBTRUNUSU9OKCItZSIpIHsKQEAgLTUxMyw0MSArNDYyLDQgQEAKICNlbmRpZgogICAgICAgICB9CiAgICAgfQotCi0gICAgU0VDVElPTigiQmVuY2htYXJrIG9wdGlvbnMiKSB7Ci0gICAgICAgIFNFQ1RJT04oInNhbXBsZXMiKSB7Ci0gICAgICAgICAgICBDSEVDSyhjbGkucGFyc2UoeyAidGVzdCIsICItLWJlbmNobWFyay1zYW1wbGVzPTIwMCIgfSkpOwotCi0gICAgICAgICAgICBSRVFVSVJFKGNvbmZpZy5iZW5jaG1hcmtTYW1wbGVzID09IDIwMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBTRUNUSU9OKCJyZXNhbXBsZXMiKSB7Ci0gICAgICAgICAgICBDSEVDSyhjbGkucGFyc2UoeyAidGVzdCIsICItLWJlbmNobWFyay1yZXNhbXBsZXM9MjAwMDAiIH0pKTsKLQotICAgICAgICAgICAgUkVRVUlSRShjb25maWcuYmVuY2htYXJrUmVzYW1wbGVzID09IDIwMDAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIFNFQ1RJT04oImNvbmZpZGVuY2UtaW50ZXJ2YWwiKSB7Ci0gICAgICAgICAgICBDSEVDSyhjbGkucGFyc2UoeyAidGVzdCIsICItLWJlbmNobWFyay1jb25maWRlbmNlLWludGVydmFsPTAuOTkiIH0pKTsKLQotICAgICAgICAgICAgUkVRVUlSRShjb25maWcuYmVuY2htYXJrQ29uZmlkZW5jZUludGVydmFsID09IENhdGNoOjpEZXRhaWw6OkFwcHJveCgwLjk5KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBTRUNUSU9OKCJuby1hbmFseXNpcyIpIHsKLSAgICAgICAgICAgIENIRUNLKGNsaS5wYXJzZSh7ICJ0ZXN0IiwgIi0tYmVuY2htYXJrLW5vLWFuYWx5c2lzIiB9KSk7Ci0KLSAgICAgICAgICAgIFJFUVVJUkUoY29uZmlnLmJlbmNobWFya05vQW5hbHlzaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgU0VDVElPTigid2FybXVwLXRpbWUiKSB7Ci0gICAgICAgICAgICBDSEVDSyhjbGkucGFyc2UoeyAidGVzdCIsICItLWJlbmNobWFyay13YXJtdXAtdGltZT0xMCIgfSkpOwotCi0gICAgICAgICAgICBSRVFVSVJFKGNvbmZpZy5iZW5jaG1hcmtXYXJtdXBUaW1lID09IDEwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotVEVTVF9DQVNFKCJUZXN0IHdpdGggc3BlY2lhbCwgY2hhcmFjdGVycyBcImluIG5hbWUiLCAiW2NsaV1bcmVncmVzc2lvbl0iKSB7Ci0gICAgLy8gVGhpcyB0ZXN0IGNhc2Ugc3VjY2VlZHMgaWYgd2UgY2FuIGludm9rZSBpdCBmcm9tIHRoZSBDTEkKLSAgICBTVUNDRUVEKCk7CiB9CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvRGV0YWlscy50ZXN0cy5jcHAgYi9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvRGV0YWlscy50ZXN0cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MDU0ZmIuLjAwMDAwMDAKLS0tIGEvcHJvamVjdHMvU2VsZlRlc3QvSW50cm9zcGVjdGl2ZVRlc3RzL0RldGFpbHMudGVzdHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoKLSAqICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0gKiAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKi8KLQotI2luY2x1ZGUgImNhdGNoLmhwcCIKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ3MDIpIC8vIHVucmVhY2hhYmxlIGNvZGUgaW4gdGhlIG1hY3JvIGV4cGFuc2lvbnMKLSNlbmRpZgotCi1URVNUX0NBU0UoIkNoZWNrIHRoYXQgb3VyIGVycm9yIGhhbmRsaW5nIG1hY3JvcyB0aHJvdyB0aGUgcmlnaHQgZXhjZXB0aW9ucyIsICJbIXRocm93c11baW50ZXJuYWxzXVthcHByb3ZhbHNdIikgewotICAgIFJFUVVJUkVfVEhST1dTX0FTKENBVENIX0lOVEVSTkFMX0VSUk9SKCIiKSwgc3RkOjpsb2dpY19lcnJvcik7Ci0gICAgUkVRVUlSRV9USFJPV1NfQVMoQ0FUQ0hfRVJST1IoIiIpLCBzdGQ6OmRvbWFpbl9lcnJvcik7Ci0gICAgUkVRVUlSRV9USFJPV1NfQVMoQ0FUQ0hfUlVOVElNRV9FUlJPUigiIiksIHN0ZDo6cnVudGltZV9lcnJvcik7Ci0gICAgUkVRVUlSRV9USFJPV1NfQVMoW10oKXtDQVRDSF9FTkZPUkNFKGZhbHNlLCAiIik7fSgpLCBzdGQ6OmRvbWFpbl9lcnJvcik7Ci0gICAgUkVRVUlSRV9OT1RIUk9XKFtdKCl7Q0FUQ0hfRU5GT1JDRSh0cnVlLCAiIik7fSgpKTsKLX0KLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5pbmcocG9wKSAvLyB1bnJlYWNoYWJsZSBjb2RlIGluIHRoZSBtYWNybyBleHBhbnNpb25zCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAgYi9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwCmluZGV4IDU0OWYzNTUuLmRiYzFkOTUgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcApAQCAtMTczLDU4ICsxNzMsNiBAQAogICAgICAgICAgICAgICAgICAgICBSRVFVSVJFX0ZBTFNFKGdlbi5uZXh0KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU0VDVElPTigiRmxvYXRpbmcgUG9pbnQiKSB7Ci0gICAgICAgICAgICAgICAgU0VDVElPTigiRXhhY3QiKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gcmFuZ2VTdGFydCA9IC0xLjsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byByYW5nZUVuZCA9IDEuOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIHN0ZXAgPSAuMTsKLQotICAgICAgICAgICAgICAgICAgICBhdXRvIGdlbiA9IHJhbmdlKHJhbmdlU3RhcnQsIHJhbmdlRW5kLCBzdGVwKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBleHBlY3RlZCA9IHJhbmdlU3RhcnQ7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlKCAocmFuZ2VFbmQgLSBleHBlY3RlZCkgPiBzdGVwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgSU5GTyggIkN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgIiA8PCBleHBlY3RlZCApCi0gICAgICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSBBcHByb3goZXhwZWN0ZWQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLm5leHQoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkICs9IHN0ZXA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgUkVRVUlSRShnZW4uZ2V0KCkgPT0gQXBwcm94KCByYW5nZUVuZCApICk7Ci0gICAgICAgICAgICAgICAgICAgIFJFUVVJUkVfRkFMU0UoZ2VuLm5leHQoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFNFQ1RJT04oIlNsaWdodGx5IG92ZXIgZW5kIikgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIHJhbmdlU3RhcnQgPSAtMS47Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gcmFuZ2VFbmQgPSAxLjsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byBzdGVwID0gLjM7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXV0byBnZW4gPSByYW5nZShyYW5nZVN0YXJ0LCByYW5nZUVuZCwgc3RlcCk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXhwZWN0ZWQgPSByYW5nZVN0YXJ0OwotICAgICAgICAgICAgICAgICAgICB3aGlsZSggKHJhbmdlRW5kIC0gZXhwZWN0ZWQpID4gc3RlcCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgSU5GTyggIkN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgIiA8PCBleHBlY3RlZCApCi0gICAgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkpOwotICAgICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5uZXh0KCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkICs9IHN0ZXA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgUkVRVUlSRV9GQUxTRShnZW4ubmV4dCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU0VDVElPTigiU2xpZ2h0bHkgdW5kZXIgZW5kIikgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIHJhbmdlU3RhcnQgPSAtMS47Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gcmFuZ2VFbmQgPSAuOTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byBzdGVwID0gLjM7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXV0byBnZW4gPSByYW5nZShyYW5nZVN0YXJ0LCByYW5nZUVuZCwgc3RlcCk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXhwZWN0ZWQgPSByYW5nZVN0YXJ0OwotICAgICAgICAgICAgICAgICAgICB3aGlsZSggKHJhbmdlRW5kIC0gZXhwZWN0ZWQpID4gc3RlcCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgSU5GTyggIkN1cnJlbnQgZXhwZWN0ZWQgdmFsdWUgaXMgIiA8PCBleHBlY3RlZCApCi0gICAgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IEFwcHJveChleHBlY3RlZCkpOwotICAgICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5uZXh0KCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkICs9IHN0ZXA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgUkVRVUlSRV9GQUxTRShnZW4ubmV4dCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgU0VDVElPTigiTmVnYXRpdmUgbWFudWFsIHN0ZXAiKSB7CiAgICAgICAgICAgICBTRUNUSU9OKCJJbnRlZ2VyIikgewpAQCAtMzAyLDcgKzI1MCw3IEBACiAKIH0KIAotVEVTVF9DQVNFKCJHRU5FUkFURSBjYXB0dXJlIG1hY3JvcyIsICJbZ2VuZXJhdG9yc11baW50ZXJuYWxzXVthcHByb3ZhbHNdIikgeworVEVTVF9DQVNFKCJHRU5FUkFURSBjYXB0dXJlIG1hY3JvcyIsICJbZ2VuZXJhdG9yc11baW50ZXJuYWxzXVsuYXBwcm92YWxzXSIpIHsKICAgICBhdXRvIHZhbHVlID0gR0VORVJBVEUodGFrZSgxMCwgcmFuZG9tKDAsIDEwKSkpOwogCiAgICAgbm9uX2NvcHlhYmxlIG5jOyBuYy52YWx1ZSA9IHZhbHVlOwpAQCAtMzEwLDQzICsyNTgsMyBAQAogICAgIGF1dG8gdmFsdWUyID0gR0VORVJBVEVfUkVGKENhdGNoOjpHZW5lcmF0b3JzOjpHZW5lcmF0b3JXcmFwcGVyPGludD4oc3RkOjp1bmlxdWVfcHRyPENhdGNoOjpHZW5lcmF0b3JzOjpJR2VuZXJhdG9yPGludD4+KG5ldyBUZXN0R2VuKG5jKSkpKTsKICAgICBSRVFVSVJFKHZhbHVlID09IHZhbHVlMik7CiB9Ci0KLVRFU1RfQ0FTRSgiIzE4MDkgLSBHRU5FUkFURV9DT1BZIGFuZCBTaW5nbGVWYWx1ZUdlbmVyYXRvciBkb2VzIG5vdCBjb21waWxlIiwgIltnZW5lcmF0b3JzXVtjb21waWxhdGlvbl1bYXBwcm92YWxzXSIpIHsKLSAgICAvLyBWZXJpZnkgSXNzdWUgIzE4MDkgZml4LCBvbmx5IG5lZWRzIHRvIGNvbXBpbGUuCi0gICAgYXV0byBhID0gR0VORVJBVEVfQ09QWSgxLCAyKTsKLSAgICAodm9pZClhOwotICAgIGF1dG8gYiA9IEdFTkVSQVRFX0NPUFkoYXM8bG9uZz57fSwgMSwgMik7Ci0gICAgKHZvaWQpYjsKLSAgICBpbnQgaSA9IDE7Ci0gICAgaW50IGogPSAyOwotICAgIGF1dG8gYyA9IEdFTkVSQVRFX0NPUFkoaSwgaik7Ci0gICAgKHZvaWQpYzsKLSAgICBhdXRvIGQgPSBHRU5FUkFURV9DT1BZKGFzPGxvbmc+e30sIGksIGopOwotICAgICh2b2lkKWQ7Ci0gICAgU1VDQ0VFRCgpOwotfQotCi1URVNUX0NBU0UoIk11bHRpcGxlIHJhbmRvbSBnZW5lcmF0b3JzIGluIG9uZSB0ZXN0IGNhc2Ugb3V0cHV0IGRpZmZlcmVudCB2YWx1ZXMiLCAiW2dlbmVyYXRvcnNdW2ludGVybmFsc11bYXBwcm92YWxzXSIpIHsKLSAgICBTRUNUSU9OKCJJbnRlZ2VyIikgewotICAgICAgICBhdXRvIHJhbmRvbTEgPSBDYXRjaDo6R2VuZXJhdG9yczo6cmFuZG9tKDAsIDEwMDApOwotICAgICAgICBhdXRvIHJhbmRvbTIgPSBDYXRjaDo6R2VuZXJhdG9yczo6cmFuZG9tKDAsIDEwMDApOwotICAgICAgICBzaXplX3Qgc2FtZSA9IDA7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7Ci0gICAgICAgICAgICBzYW1lICs9IHJhbmRvbTEuZ2V0KCkgPT0gcmFuZG9tMi5nZXQoKTsKLSAgICAgICAgICAgIHJhbmRvbTEubmV4dCgpOyByYW5kb20yLm5leHQoKTsKLSAgICAgICAgfQotICAgICAgICAvLyAwLjUlIHNlZW1zIGxpa2UgYSBzYW5lIGJvdW5kIGZvciByYW5kb20gaWRlbnRpY2FsIGVsZW1lbnRzIHdpdGhpbiAxMDAwIHJ1bnMKLSAgICAgICAgUkVRVUlSRShzYW1lIDwgNSk7Ci0gICAgfQotICAgIFNFQ1RJT04oIkZsb2F0IikgewotICAgICAgICBhdXRvIHJhbmRvbTEgPSBDYXRjaDo6R2VuZXJhdG9yczo6cmFuZG9tKDAuLCAxMDAwLik7Ci0gICAgICAgIGF1dG8gcmFuZG9tMiA9IENhdGNoOjpHZW5lcmF0b3JzOjpyYW5kb20oMC4sIDEwMDAuKTsKLSAgICAgICAgc2l6ZV90IHNhbWUgPSAwOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDA7ICsraSkgewotICAgICAgICAgICAgc2FtZSArPSByYW5kb20xLmdldCgpID09IHJhbmRvbTIuZ2V0KCk7Ci0gICAgICAgICAgICByYW5kb20xLm5leHQoKTsgcmFuZG9tMi5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gMC41JSBzZWVtcyBsaWtlIGEgc2FuZSBib3VuZCBmb3IgcmFuZG9tIGlkZW50aWNhbCBlbGVtZW50cyB3aXRoaW4gMTAwMCBydW5zCi0gICAgICAgIFJFUVVJUkUoc2FtZSA8IDUpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9JbnRlcm5hbEJlbmNobWFyay50ZXN0cy5jcHAgYi9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvSW50ZXJuYWxCZW5jaG1hcmsudGVzdHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTc5OThkLi4wMDAwMDAwCi0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9JbnRlcm5hbEJlbmNobWFyay50ZXN0cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MDUgKzAsMCBAQAotLyoKLSAqICBDcmVhdGVkIGJ5IEpvYWNoaW0gb24gMTYvMDQvMjAxOS4KLSAqICBBZGFwdGVkIGZyb20gZG9uYXRlZCBub25pdXMgY29kZS4KLSAqCi0gKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICovCi0KLSNpbmNsdWRlICJjYXRjaC5ocHAiCi0jaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORykKLW5hbWVzcGFjZSB7Ci0gICAgc3RydWN0IG1hbnVhbF9jbG9jayB7Ci0gICAgcHVibGljOgotICAgICAgICB1c2luZyBkdXJhdGlvbiA9IHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kczsKLSAgICAgICAgdXNpbmcgdGltZV9wb2ludCA9IHN0ZDo6Y2hyb25vOjp0aW1lX3BvaW50PG1hbnVhbF9jbG9jaywgZHVyYXRpb24+OwotICAgICAgICB1c2luZyByZXAgPSBkdXJhdGlvbjo6cmVwOwotICAgICAgICB1c2luZyBwZXJpb2QgPSBkdXJhdGlvbjo6cGVyaW9kOwotICAgICAgICBlbnVtIHsgaXNfc3RlYWR5ID0gdHJ1ZSB9OwotCi0gICAgICAgIHN0YXRpYyB0aW1lX3BvaW50IG5vdygpIHsKLSAgICAgICAgICAgIHJldHVybiB0aW1lX3BvaW50KGR1cmF0aW9uKHRpY2soKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgYWR2YW5jZShpbnQgdGlja3MgPSAxKSB7Ci0gICAgICAgICAgICB0aWNrKCkgKz0gdGlja3M7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyByZXAmIHRpY2soKSB7Ci0gICAgICAgICAgICBzdGF0aWMgcmVwIHRoZV90aWNrID0gMDsKLSAgICAgICAgICAgIHJldHVybiB0aGVfdGljazsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgY291bnRpbmdfY2xvY2sgewotICAgIHB1YmxpYzoKLSAgICAgICAgdXNpbmcgZHVyYXRpb24gPSBzdGQ6OmNocm9ubzo6bmFub3NlY29uZHM7Ci0gICAgICAgIHVzaW5nIHRpbWVfcG9pbnQgPSBzdGQ6OmNocm9ubzo6dGltZV9wb2ludDxjb3VudGluZ19jbG9jaywgZHVyYXRpb24+OwotICAgICAgICB1c2luZyByZXAgPSBkdXJhdGlvbjo6cmVwOwotICAgICAgICB1c2luZyBwZXJpb2QgPSBkdXJhdGlvbjo6cGVyaW9kOwotICAgICAgICBlbnVtIHsgaXNfc3RlYWR5ID0gdHJ1ZSB9OwotCi0gICAgICAgIHN0YXRpYyB0aW1lX3BvaW50IG5vdygpIHsKLSAgICAgICAgICAgIHN0YXRpYyByZXAgdGlja3MgPSAwOwotICAgICAgICAgICAgcmV0dXJuIHRpbWVfcG9pbnQoZHVyYXRpb24odGlja3MgKz0gcmF0ZSgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBzZXRfcmF0ZShyZXAgbmV3X3JhdGUpIHsgcmF0ZSgpID0gbmV3X3JhdGU7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyByZXAmIHJhdGUoKSB7Ci0gICAgICAgICAgICBzdGF0aWMgcmVwIHRoZV9yYXRlID0gMTsKLSAgICAgICAgICAgIHJldHVybiB0aGVfcmF0ZTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgVGVzdENocm9ub21ldGVyTW9kZWwgOiBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6OkNocm9ub21ldGVyQ29uY2VwdCB7Ci0gICAgICAgIGludCBzdGFydGVkID0gMDsKLSAgICAgICAgaW50IGZpbmlzaGVkID0gMDsKLQotICAgICAgICB2b2lkIHN0YXJ0KCkgb3ZlcnJpZGUgeyArK3N0YXJ0ZWQ7IH0KLSAgICAgICAgdm9pZCBmaW5pc2goKSBvdmVycmlkZSB7ICsrZmluaXNoZWQ7IH0KLSAgICB9OwotfSAvLyBuYW1lc3BhY2UKLQotVEVTVF9DQVNFKCJ3YXJtdXAiLCAiW2JlbmNobWFya10iKSB7Ci0gICAgYXV0byByYXRlID0gMTAwMDsKLSAgICBjb3VudGluZ19jbG9jazo6c2V0X3JhdGUocmF0ZSk7Ci0KLSAgICBhdXRvIHN0YXJ0ID0gY291bnRpbmdfY2xvY2s6Om5vdygpOwotICAgIGF1dG8gaXRlcmF0aW9ucyA9IENhdGNoOjpCZW5jaG1hcms6OkRldGFpbDo6d2FybXVwPGNvdW50aW5nX2Nsb2NrPigpOwotICAgIGF1dG8gZW5kID0gY291bnRpbmdfY2xvY2s6Om5vdygpOwotCi0gICAgUkVRVUlSRSgoaXRlcmF0aW9ucyAqIHJhdGUpID4gQ2F0Y2g6OkJlbmNobWFyazo6RGV0YWlsOjp3YXJtdXBfdGltZS5jb3VudCgpKTsKLSAgICBSRVFVSVJFKChlbmQgLSBzdGFydCkgPiBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6Ondhcm11cF90aW1lKTsKLX0KLQotVEVTVF9DQVNFKCJyZXNvbHV0aW9uIiwgIltiZW5jaG1hcmtdIikgewotICAgIGF1dG8gcmF0ZSA9IDEwMDA7Ci0gICAgY291bnRpbmdfY2xvY2s6OnNldF9yYXRlKHJhdGUpOwotCi0gICAgc2l6ZV90IGNvdW50ID0gMTA7Ci0gICAgYXV0byByZXMgPSBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6OnJlc29sdXRpb248Y291bnRpbmdfY2xvY2s+KHN0YXRpY19jYXN0PGludD4oY291bnQpKTsKLQotICAgIFJFUVVJUkUocmVzLnNpemUoKSA9PSBjb3VudCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgUkVRVUlSRShyZXNbaV0gPT0gcmF0ZSk7Ci0gICAgfQotfQotCi1URVNUX0NBU0UoImVzdGltYXRlX2Nsb2NrX3Jlc29sdXRpb24iLCAiW2JlbmNobWFya10iKSB7Ci0gICAgYXV0byByYXRlID0gMTAwMDsKLSAgICBjb3VudGluZ19jbG9jazo6c2V0X3JhdGUocmF0ZSk7Ci0KLSAgICBpbnQgaXRlcnMgPSAxNjAwMDA7Ci0gICAgYXV0byByZXMgPSBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6OmVzdGltYXRlX2Nsb2NrX3Jlc29sdXRpb248Y291bnRpbmdfY2xvY2s+KGl0ZXJzKTsKLQotICAgIFJFUVVJUkUocmVzLm1lYW4uY291bnQoKSA9PSByYXRlKTsKLSAgICBSRVFVSVJFKHJlcy5vdXRsaWVycy50b3RhbCgpID09IDApOwotfQotCi1URVNUX0NBU0UoImJlbmNobWFyayBmdW5jdGlvbiBjYWxsIiwgIltiZW5jaG1hcmtdIikgewotICAgIFNFQ1RJT04oIndpdGhvdXQgY2hyb25vbWV0ZXIiKSB7Ci0gICAgICAgIGF1dG8gY2FsbGVkID0gMDsKLSAgICAgICAgYXV0byBtb2RlbCA9IFRlc3RDaHJvbm9tZXRlck1vZGVse307Ci0gICAgICAgIGF1dG8gbWV0ZXIgPSBDYXRjaDo6QmVuY2htYXJrOjpDaHJvbm9tZXRlcnsgbW9kZWwsIDEgfTsKLSAgICAgICAgYXV0byBmbiA9IENhdGNoOjpCZW5jaG1hcms6OkRldGFpbDo6QmVuY2htYXJrRnVuY3Rpb257IFsmXSB7Ci0gICAgICAgICAgICAgICAgQ0hFQ0sobW9kZWwuc3RhcnRlZCA9PSAxKTsKLSAgICAgICAgICAgICAgICBDSEVDSyhtb2RlbC5maW5pc2hlZCA9PSAwKTsKLSAgICAgICAgICAgICAgICArK2NhbGxlZDsKLSAgICAgICAgICAgIH0gfTsKLQotICAgICAgICBmbihtZXRlcik7Ci0KLSAgICAgICAgQ0hFQ0sobW9kZWwuc3RhcnRlZCA9PSAxKTsKLSAgICAgICAgQ0hFQ0sobW9kZWwuZmluaXNoZWQgPT0gMSk7Ci0gICAgICAgIENIRUNLKGNhbGxlZCA9PSAxKTsKLSAgICB9Ci0KLSAgICBTRUNUSU9OKCJ3aXRoIGNocm9ub21ldGVyIikgewotICAgICAgICBhdXRvIGNhbGxlZCA9IDA7Ci0gICAgICAgIGF1dG8gbW9kZWwgPSBUZXN0Q2hyb25vbWV0ZXJNb2RlbHt9OwotICAgICAgICBhdXRvIG1ldGVyID0gQ2F0Y2g6OkJlbmNobWFyazo6Q2hyb25vbWV0ZXJ7IG1vZGVsLCAxIH07Ci0gICAgICAgIGF1dG8gZm4gPSBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6OkJlbmNobWFya0Z1bmN0aW9ueyBbJl0oQ2F0Y2g6OkJlbmNobWFyazo6Q2hyb25vbWV0ZXIpIHsKLSAgICAgICAgICAgICAgICBDSEVDSyhtb2RlbC5zdGFydGVkID09IDApOwotICAgICAgICAgICAgICAgIENIRUNLKG1vZGVsLmZpbmlzaGVkID09IDApOwotICAgICAgICAgICAgICAgICsrY2FsbGVkOwotICAgICAgICAgICAgfSB9OwotCi0gICAgICAgIGZuKG1ldGVyKTsKLQotICAgICAgICBDSEVDSyhtb2RlbC5zdGFydGVkID09IDApOwotICAgICAgICBDSEVDSyhtb2RlbC5maW5pc2hlZCA9PSAwKTsKLSAgICAgICAgQ0hFQ0soY2FsbGVkID09IDEpOwotICAgIH0KLX0KLQotVEVTVF9DQVNFKCJ1bmlmb3JtIHNhbXBsZXMiLCAiW2JlbmNobWFya10iKSB7Ci0gICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiBzYW1wbGVzKDEwMCk7Ci0gICAgc3RkOjpmaWxsKHNhbXBsZXMuYmVnaW4oKSwgc2FtcGxlcy5lbmQoKSwgMjMpOwotCi0gICAgdXNpbmcgaXQgPSBzdGQ6OnZlY3Rvcjxkb3VibGU+OjppdGVyYXRvcjsKLSAgICBhdXRvIGUgPSBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6OmJvb3RzdHJhcCgwLjk1LCBzYW1wbGVzLmJlZ2luKCksIHNhbXBsZXMuZW5kKCksIHNhbXBsZXMsIFtdKGl0IGEsIGl0IGIpIHsKLSAgICAgICAgYXV0byBzdW0gPSBzdGQ6OmFjY3VtdWxhdGUoYSwgYiwgMC4pOwotICAgICAgICByZXR1cm4gc3VtIC8gKGIgLSBhKTsKLSAgICB9KTsKLSAgICBDSEVDSyhlLnBvaW50ID09IDIzKTsKLSAgICBDSEVDSyhlLnVwcGVyX2JvdW5kID09IDIzKTsKLSAgICBDSEVDSyhlLmxvd2VyX2JvdW5kID09IDIzKTsKLSAgICBDSEVDSyhlLmNvbmZpZGVuY2VfaW50ZXJ2YWwgPT0gMC45NSk7Ci19Ci0KLQotVEVTVF9DQVNFKCJub3JtYWxfY2RmIiwgIltiZW5jaG1hcmtdIikgewotICAgIHVzaW5nIENhdGNoOjpCZW5jaG1hcms6OkRldGFpbDo6bm9ybWFsX2NkZjsKLSAgICBDSEVDSyhub3JtYWxfY2RmKDAuMDAwMDAwKSA9PSBBcHByb3goMC41MDAwMDAwMDAwMDAwMDAwMCkpOwotICAgIENIRUNLKG5vcm1hbF9jZGYoMS4wMDAwMDApID09IEFwcHJveCgwLjg0MTM0NDc0NjA2ODU0MjkzKSk7Ci0gICAgQ0hFQ0sobm9ybWFsX2NkZigtMS4wMDAwMDApID09IEFwcHJveCgwLjE1ODY1NTI1MzkzMTQ1NzA1KSk7Ci0gICAgQ0hFQ0sobm9ybWFsX2NkZigyLjgwOTcyOSkgPT0gQXBwcm94KDAuOTk3NTIwODM4NDUzMTU0MDkpKTsKLSAgICBDSEVDSyhub3JtYWxfY2RmKC0xLjM1MjU3MCkgPT0gQXBwcm94KDAuMDg4MDk2NTIwOTUwNjYwMzUpKTsKLX0KLQotVEVTVF9DQVNFKCJlcmZjX2ludiIsICJbYmVuY2htYXJrXSIpIHsKLSAgICB1c2luZyBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6OmVyZmNfaW52OwotICAgIENIRUNLKGVyZmNfaW52KDEuMTAzNTYwKSA9PSBBcHByb3goLTAuMDkyMDM2ODc2MjM4NDMwMTUpKTsKLSAgICBDSEVDSyhlcmZjX2ludigxLjA2NzQwMCkgPT0gQXBwcm94KC0wLjA1OTgwMjkxMTE1NzYzMzYxKSk7Ci0gICAgQ0hFQ0soZXJmY19pbnYoMC4wNTAwMDApID09IEFwcHJveCgxLjM4NTkwMzgyNDM0OTY3Nzk2KSk7Ci19Ci0KLVRFU1RfQ0FTRSgibm9ybWFsX3F1YW50aWxlIiwgIltiZW5jaG1hcmtdIikgewotICAgIHVzaW5nIENhdGNoOjpCZW5jaG1hcms6OkRldGFpbDo6bm9ybWFsX3F1YW50aWxlOwotICAgIENIRUNLKG5vcm1hbF9xdWFudGlsZSgwLjU1MTc4MCkgPT0gQXBwcm94KDAuMTMwMTU5Nzk4NjE0ODQxOTgpKTsKLSAgICBDSEVDSyhub3JtYWxfcXVhbnRpbGUoMC41MzM3MDApID09IEFwcHJveCgwLjA4NDU3NDA4ODAyODUxODc1KSk7Ci0gICAgQ0hFQ0sobm9ybWFsX3F1YW50aWxlKDAuMDI1MDAwKSA9PSBBcHByb3goLTEuOTU5OTYzOTg0NTQwMDU0NDkpKTsKLX0KLQotCi1URVNUX0NBU0UoIm1lYW4iLCAiW2JlbmNobWFya10iKSB7Ci0gICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiB4eyAxMC4sIDIwLiwgMTQuLCAxNi4sIDMwLiwgMjQuIH07Ci0KLSAgICBhdXRvIG0gPSBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6Om1lYW4oeC5iZWdpbigpLCB4LmVuZCgpKTsKLQotICAgIFJFUVVJUkUobSA9PSAxOS4pOwotfQotCi1URVNUX0NBU0UoIndlaWdodGVkX2F2ZXJhZ2VfcXVhbnRpbGUiLCAiW2JlbmNobWFya10iKSB7Ci0gICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiB4eyAxMC4sIDIwLiwgMTQuLCAxNi4sIDMwLiwgMjQuIH07Ci0KLSAgICBhdXRvIHExID0gQ2F0Y2g6OkJlbmNobWFyazo6RGV0YWlsOjp3ZWlnaHRlZF9hdmVyYWdlX3F1YW50aWxlKDEsIDQsIHguYmVnaW4oKSwgeC5lbmQoKSk7Ci0gICAgYXV0byBtZWQgPSBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6OndlaWdodGVkX2F2ZXJhZ2VfcXVhbnRpbGUoMSwgMiwgeC5iZWdpbigpLCB4LmVuZCgpKTsKLSAgICBhdXRvIHEzID0gQ2F0Y2g6OkJlbmNobWFyazo6RGV0YWlsOjp3ZWlnaHRlZF9hdmVyYWdlX3F1YW50aWxlKDMsIDQsIHguYmVnaW4oKSwgeC5lbmQoKSk7Ci0KLSAgICBSRVFVSVJFKHExID09IDE0LjUpOwotICAgIFJFUVVJUkUobWVkID09IDE4Lik7Ci0gICAgUkVRVUlSRShxMyA9PSAyMy4pOwotfQotCi1URVNUX0NBU0UoImNsYXNzaWZ5X291dGxpZXJzIiwgIltiZW5jaG1hcmtdIikgewotICAgIGF1dG8gcmVxdWlyZV9vdXRsaWVycyA9IFtdKENhdGNoOjpCZW5jaG1hcms6Ok91dGxpZXJDbGFzc2lmaWNhdGlvbiBvLCBpbnQgbG9zLCBpbnQgbG9tLCBpbnQgaGltLCBpbnQgaGlzKSB7Ci0gICAgICAgIFJFUVVJUkUoby5sb3dfc2V2ZXJlID09IGxvcyk7Ci0gICAgICAgIFJFUVVJUkUoby5sb3dfbWlsZCA9PSBsb20pOwotICAgICAgICBSRVFVSVJFKG8uaGlnaF9taWxkID09IGhpbSk7Ci0gICAgICAgIFJFUVVJUkUoby5oaWdoX3NldmVyZSA9PSBoaXMpOwotICAgICAgICBSRVFVSVJFKG8udG90YWwoKSA9PSBsb3MgKyBsb20gKyBoaW0gKyBoaXMpOwotICAgIH07Ci0KLSAgICBTRUNUSU9OKCJub25lIikgewotICAgICAgICBzdGQ6OnZlY3Rvcjxkb3VibGU+IHh7IDEwLiwgMjAuLCAxNC4sIDE2LiwgMzAuLCAyNC4gfTsKLQotICAgICAgICBhdXRvIG8gPSBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6OmNsYXNzaWZ5X291dGxpZXJzKHguYmVnaW4oKSwgeC5lbmQoKSk7Ci0KLSAgICAgICAgUkVRVUlSRShvLnNhbXBsZXNfc2VlbiA9PSBzdGF0aWNfY2FzdDxpbnQ+KHguc2l6ZSgpKSk7Ci0gICAgICAgIHJlcXVpcmVfb3V0bGllcnMobywgMCwgMCwgMCwgMCk7Ci0gICAgfQotICAgIFNFQ1RJT04oImxvdyBzZXZlcmUiKSB7Ci0gICAgICAgIHN0ZDo6dmVjdG9yPGRvdWJsZT4geHsgLTEyLiwgMjAuLCAxNC4sIDE2LiwgMzAuLCAyNC4gfTsKLQotICAgICAgICBhdXRvIG8gPSBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6OmNsYXNzaWZ5X291dGxpZXJzKHguYmVnaW4oKSwgeC5lbmQoKSk7Ci0KLSAgICAgICAgUkVRVUlSRShvLnNhbXBsZXNfc2VlbiA9PSBzdGF0aWNfY2FzdDxpbnQ+KHguc2l6ZSgpKSk7Ci0gICAgICAgIHJlcXVpcmVfb3V0bGllcnMobywgMSwgMCwgMCwgMCk7Ci0gICAgfQotICAgIFNFQ1RJT04oImxvdyBtaWxkIikgewotICAgICAgICBzdGQ6OnZlY3Rvcjxkb3VibGU+IHh7IDEuLCAyMC4sIDE0LiwgMTYuLCAzMC4sIDI0LiB9OwotCi0gICAgICAgIGF1dG8gbyA9IENhdGNoOjpCZW5jaG1hcms6OkRldGFpbDo6Y2xhc3NpZnlfb3V0bGllcnMoeC5iZWdpbigpLCB4LmVuZCgpKTsKLQotICAgICAgICBSRVFVSVJFKG8uc2FtcGxlc19zZWVuID09IHN0YXRpY19jYXN0PGludD4oeC5zaXplKCkpKTsKLSAgICAgICAgcmVxdWlyZV9vdXRsaWVycyhvLCAwLCAxLCAwLCAwKTsKLSAgICB9Ci0gICAgU0VDVElPTigiaGlnaCBtaWxkIikgewotICAgICAgICBzdGQ6OnZlY3Rvcjxkb3VibGU+IHh7IDEwLiwgMjAuLCAxNC4sIDE2LiwgMzYuLCAyNC4gfTsKLQotICAgICAgICBhdXRvIG8gPSBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6OmNsYXNzaWZ5X291dGxpZXJzKHguYmVnaW4oKSwgeC5lbmQoKSk7Ci0KLSAgICAgICAgUkVRVUlSRShvLnNhbXBsZXNfc2VlbiA9PSBzdGF0aWNfY2FzdDxpbnQ+KHguc2l6ZSgpKSk7Ci0gICAgICAgIHJlcXVpcmVfb3V0bGllcnMobywgMCwgMCwgMSwgMCk7Ci0gICAgfQotICAgIFNFQ1RJT04oImhpZ2ggc2V2ZXJlIikgewotICAgICAgICBzdGQ6OnZlY3Rvcjxkb3VibGU+IHh7IDEwLiwgMjAuLCAxNC4sIDE2LiwgNDkuLCAyNC4gfTsKLQotICAgICAgICBhdXRvIG8gPSBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6OmNsYXNzaWZ5X291dGxpZXJzKHguYmVnaW4oKSwgeC5lbmQoKSk7Ci0KLSAgICAgICAgUkVRVUlSRShvLnNhbXBsZXNfc2VlbiA9PSBzdGF0aWNfY2FzdDxpbnQ+KHguc2l6ZSgpKSk7Ci0gICAgICAgIHJlcXVpcmVfb3V0bGllcnMobywgMCwgMCwgMCwgMSk7Ci0gICAgfQotICAgIFNFQ1RJT04oIm1peGVkIikgewotICAgICAgICBzdGQ6OnZlY3Rvcjxkb3VibGU+IHh7IC0yMC4sIDIwLiwgMTQuLCAxNi4sIDM5LiwgMjQuIH07Ci0KLSAgICAgICAgYXV0byBvID0gQ2F0Y2g6OkJlbmNobWFyazo6RGV0YWlsOjpjbGFzc2lmeV9vdXRsaWVycyh4LmJlZ2luKCksIHguZW5kKCkpOwotCi0gICAgICAgIFJFUVVJUkUoby5zYW1wbGVzX3NlZW4gPT0gc3RhdGljX2Nhc3Q8aW50Pih4LnNpemUoKSkpOwotICAgICAgICByZXF1aXJlX291dGxpZXJzKG8sIDEsIDAsIDEsIDApOwotICAgIH0KLX0KLQotVEVTVF9DQVNFKCJhbmFseXNlIiwgIltiZW5jaG1hcmtdIikgewotICAgIENhdGNoOjpDb25maWdEYXRhIGRhdGF7fTsKLSAgICBkYXRhLmJlbmNobWFya0NvbmZpZGVuY2VJbnRlcnZhbCA9IDAuOTU7Ci0gICAgZGF0YS5iZW5jaG1hcmtOb0FuYWx5c2lzID0gZmFsc2U7Ci0gICAgZGF0YS5iZW5jaG1hcmtSZXNhbXBsZXMgPSAxMDAwOwotICAgIGRhdGEuYmVuY2htYXJrU2FtcGxlcyA9IDk5OwotICAgIENhdGNoOjpDb25maWcgY29uZmlne2RhdGF9OwotCi0gICAgdXNpbmcgRHVyYXRpb24gPSBDYXRjaDo6QmVuY2htYXJrOjpGbG9hdER1cmF0aW9uPENhdGNoOjpCZW5jaG1hcms6OmRlZmF1bHRfY2xvY2s+OwotCi0gICAgQ2F0Y2g6OkJlbmNobWFyazo6RW52aXJvbm1lbnQ8RHVyYXRpb24+IGVudjsKLSAgICBzdGQ6OnZlY3RvcjxEdXJhdGlvbj4gc2FtcGxlcyg5OSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzYW1wbGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHNhbXBsZXNbaV0gPSBEdXJhdGlvbigyMyArIChpICUgMyAtIDEpKTsKLSAgICB9Ci0KLSAgICBhdXRvIGFuYWx5c2lzID0gQ2F0Y2g6OkJlbmNobWFyazo6RGV0YWlsOjphbmFseXNlKGNvbmZpZywgZW52LCBzYW1wbGVzLmJlZ2luKCksIHNhbXBsZXMuZW5kKCkpOwotICAgIENIRUNLKGFuYWx5c2lzLm1lYW4ucG9pbnQuY291bnQoKSA9PSAyMyk7Ci0gICAgQ0hFQ0soYW5hbHlzaXMubWVhbi5sb3dlcl9ib3VuZC5jb3VudCgpIDwgMjMpOwotICAgIENIRUNLKGFuYWx5c2lzLm1lYW4ubG93ZXJfYm91bmQuY291bnQoKSA+IDIyKTsKLSAgICBDSEVDSyhhbmFseXNpcy5tZWFuLnVwcGVyX2JvdW5kLmNvdW50KCkgPiAyMyk7Ci0gICAgQ0hFQ0soYW5hbHlzaXMubWVhbi51cHBlcl9ib3VuZC5jb3VudCgpIDwgMjQpOwotCi0gICAgQ0hFQ0soYW5hbHlzaXMuc3RhbmRhcmRfZGV2aWF0aW9uLnBvaW50LmNvdW50KCkgPiAwLjUpOwotICAgIENIRUNLKGFuYWx5c2lzLnN0YW5kYXJkX2RldmlhdGlvbi5wb2ludC5jb3VudCgpIDwgMSk7Ci0gICAgQ0hFQ0soYW5hbHlzaXMuc3RhbmRhcmRfZGV2aWF0aW9uLmxvd2VyX2JvdW5kLmNvdW50KCkgPiAwLjUpOwotICAgIENIRUNLKGFuYWx5c2lzLnN0YW5kYXJkX2RldmlhdGlvbi5sb3dlcl9ib3VuZC5jb3VudCgpIDwgMSk7Ci0gICAgQ0hFQ0soYW5hbHlzaXMuc3RhbmRhcmRfZGV2aWF0aW9uLnVwcGVyX2JvdW5kLmNvdW50KCkgPiAwLjUpOwotICAgIENIRUNLKGFuYWx5c2lzLnN0YW5kYXJkX2RldmlhdGlvbi51cHBlcl9ib3VuZC5jb3VudCgpIDwgMSk7Ci0KLSAgICBDSEVDSyhhbmFseXNpcy5vdXRsaWVycy50b3RhbCgpID09IDApOwotICAgIENIRUNLKGFuYWx5c2lzLm91dGxpZXJzLmxvd19taWxkID09IDApOwotICAgIENIRUNLKGFuYWx5c2lzLm91dGxpZXJzLmxvd19zZXZlcmUgPT0gMCk7Ci0gICAgQ0hFQ0soYW5hbHlzaXMub3V0bGllcnMuaGlnaF9taWxkID09IDApOwotICAgIENIRUNLKGFuYWx5c2lzLm91dGxpZXJzLmhpZ2hfc2V2ZXJlID09IDApOwotICAgIENIRUNLKGFuYWx5c2lzLm91dGxpZXJzLnNhbXBsZXNfc2VlbiA9PSBzYW1wbGVzLnNpemUoKSk7Ci0KLSAgICBDSEVDSyhhbmFseXNpcy5vdXRsaWVyX3ZhcmlhbmNlIDwgMC41KTsKLSAgICBDSEVDSyhhbmFseXNpcy5vdXRsaWVyX3ZhcmlhbmNlID4gMCk7Ci19Ci0KLVRFU1RfQ0FTRSgiYW5hbHlzZSBubyBhbmFseXNpcyIsICJbYmVuY2htYXJrXSIpIHsKLSAgICBDYXRjaDo6Q29uZmlnRGF0YSBkYXRhe307Ci0gICAgZGF0YS5iZW5jaG1hcmtDb25maWRlbmNlSW50ZXJ2YWwgPSAwLjk1OwotICAgIGRhdGEuYmVuY2htYXJrTm9BbmFseXNpcyA9IHRydWU7Ci0gICAgZGF0YS5iZW5jaG1hcmtSZXNhbXBsZXMgPSAxMDAwOwotICAgIGRhdGEuYmVuY2htYXJrU2FtcGxlcyA9IDk5OwotICAgIENhdGNoOjpDb25maWcgY29uZmlneyBkYXRhIH07Ci0KLSAgICB1c2luZyBEdXJhdGlvbiA9IENhdGNoOjpCZW5jaG1hcms6OkZsb2F0RHVyYXRpb248Q2F0Y2g6OkJlbmNobWFyazo6ZGVmYXVsdF9jbG9jaz47Ci0KLSAgICBDYXRjaDo6QmVuY2htYXJrOjpFbnZpcm9ubWVudDxEdXJhdGlvbj4gZW52OwotICAgIHN0ZDo6dmVjdG9yPER1cmF0aW9uPiBzYW1wbGVzKDk5KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNhbXBsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgc2FtcGxlc1tpXSA9IER1cmF0aW9uKDIzICsgKGkgJSAzIC0gMSkpOwotICAgIH0KLQotICAgIGF1dG8gYW5hbHlzaXMgPSBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6OmFuYWx5c2UoY29uZmlnLCBlbnYsIHNhbXBsZXMuYmVnaW4oKSwgc2FtcGxlcy5lbmQoKSk7Ci0gICAgQ0hFQ0soYW5hbHlzaXMubWVhbi5wb2ludC5jb3VudCgpID09IDIzKTsKLSAgICBDSEVDSyhhbmFseXNpcy5tZWFuLmxvd2VyX2JvdW5kLmNvdW50KCkgPT0gMjMpOwotICAgIENIRUNLKGFuYWx5c2lzLm1lYW4udXBwZXJfYm91bmQuY291bnQoKSA9PSAyMyk7Ci0KLSAgICBDSEVDSyhhbmFseXNpcy5zdGFuZGFyZF9kZXZpYXRpb24ucG9pbnQuY291bnQoKSA9PSAwKTsKLSAgICBDSEVDSyhhbmFseXNpcy5zdGFuZGFyZF9kZXZpYXRpb24ubG93ZXJfYm91bmQuY291bnQoKSA9PSAwKTsKLSAgICBDSEVDSyhhbmFseXNpcy5zdGFuZGFyZF9kZXZpYXRpb24udXBwZXJfYm91bmQuY291bnQoKSA9PSAwKTsKLQotICAgIENIRUNLKGFuYWx5c2lzLm91dGxpZXJzLnRvdGFsKCkgPT0gMCk7Ci0gICAgQ0hFQ0soYW5hbHlzaXMub3V0bGllcnMubG93X21pbGQgPT0gMCk7Ci0gICAgQ0hFQ0soYW5hbHlzaXMub3V0bGllcnMubG93X3NldmVyZSA9PSAwKTsKLSAgICBDSEVDSyhhbmFseXNpcy5vdXRsaWVycy5oaWdoX21pbGQgPT0gMCk7Ci0gICAgQ0hFQ0soYW5hbHlzaXMub3V0bGllcnMuaGlnaF9zZXZlcmUgPT0gMCk7Ci0gICAgQ0hFQ0soYW5hbHlzaXMub3V0bGllcnMuc2FtcGxlc19zZWVuID09IDApOwotCi0gICAgQ0hFQ0soYW5hbHlzaXMub3V0bGllcl92YXJpYW5jZSA9PSAwKTsKLX0KLQotVEVTVF9DQVNFKCJydW5fZm9yX2F0X2xlYXN0LCBpbnQiLCAiW2JlbmNobWFya10iKSB7Ci0gICAgbWFudWFsX2Nsb2NrOjpkdXJhdGlvbiB0aW1lKDEwMCk7Ci0KLSAgICBpbnQgb2xkX3ggPSAxOwotICAgIGF1dG8gVGltaW5nID0gQ2F0Y2g6OkJlbmNobWFyazo6RGV0YWlsOjpydW5fZm9yX2F0X2xlYXN0PG1hbnVhbF9jbG9jaz4odGltZSwgMSwgWyZvbGRfeF0oaW50IHgpIC0+IGludCB7Ci0gICAgICAgIENIRUNLKHggPj0gb2xkX3gpOwotICAgICAgICBtYW51YWxfY2xvY2s6OmFkdmFuY2UoeCk7Ci0gICAgICAgIG9sZF94ID0geDsKLSAgICAgICAgcmV0dXJuIHggKyAxNzsKLSAgICB9KTsKLQotICAgIFJFUVVJUkUoVGltaW5nLmVsYXBzZWQgPj0gdGltZSk7Ci0gICAgUkVRVUlSRShUaW1pbmcucmVzdWx0ID09IFRpbWluZy5pdGVyYXRpb25zICsgMTcpOwotICAgIFJFUVVJUkUoVGltaW5nLml0ZXJhdGlvbnMgPj0gdGltZS5jb3VudCgpKTsKLX0KLQotVEVTVF9DQVNFKCJydW5fZm9yX2F0X2xlYXN0LCBjaHJvbm9tZXRlciIsICJbYmVuY2htYXJrXSIpIHsKLSAgICBtYW51YWxfY2xvY2s6OmR1cmF0aW9uIHRpbWUoMTAwKTsKLQotICAgIGludCBvbGRfcnVucyA9IDE7Ci0gICAgYXV0byBUaW1pbmcgPSBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6OnJ1bl9mb3JfYXRfbGVhc3Q8bWFudWFsX2Nsb2NrPih0aW1lLCAxLCBbJm9sZF9ydW5zXShDYXRjaDo6QmVuY2htYXJrOjpDaHJvbm9tZXRlciBtZXRlcikgLT4gaW50IHsKLSAgICAgICAgQ0hFQ0sobWV0ZXIucnVucygpID49IG9sZF9ydW5zKTsKLSAgICAgICAgbWFudWFsX2Nsb2NrOjphZHZhbmNlKDEwMCk7Ci0gICAgICAgIG1ldGVyLm1lYXN1cmUoW10gewotICAgICAgICAgICAgbWFudWFsX2Nsb2NrOjphZHZhbmNlKDEpOwotICAgICAgICB9KTsKLSAgICAgICAgb2xkX3J1bnMgPSBtZXRlci5ydW5zKCk7Ci0gICAgICAgIHJldHVybiBtZXRlci5ydW5zKCkgKyAxNzsKLSAgICB9KTsKLQotICAgIFJFUVVJUkUoVGltaW5nLmVsYXBzZWQgPj0gdGltZSk7Ci0gICAgUkVRVUlSRShUaW1pbmcucmVzdWx0ID09IFRpbWluZy5pdGVyYXRpb25zICsgMTcpOwotICAgIFJFUVVJUkUoVGltaW5nLml0ZXJhdGlvbnMgPj0gdGltZS5jb3VudCgpKTsKLX0KLQotCi1URVNUX0NBU0UoIm1lYXN1cmUiLCAiW2JlbmNobWFya10iKSB7Ci0gICAgYXV0byByID0gQ2F0Y2g6OkJlbmNobWFyazo6RGV0YWlsOjptZWFzdXJlPG1hbnVhbF9jbG9jaz4oW10oaW50IHgpIC0+IGludCB7Ci0gICAgICAgIENIRUNLKHggPT0gMTcpOwotICAgICAgICBtYW51YWxfY2xvY2s6OmFkdmFuY2UoNDIpOwotICAgICAgICByZXR1cm4gMjM7Ci0gICAgfSwgMTcpOwotICAgIGF1dG8gcyA9IENhdGNoOjpCZW5jaG1hcms6OkRldGFpbDo6bWVhc3VyZTxtYW51YWxfY2xvY2s+KFtdKGludCB4KSAtPiBpbnQgewotICAgICAgICBDSEVDSyh4ID09IDIzKTsKLSAgICAgICAgbWFudWFsX2Nsb2NrOjphZHZhbmNlKDY5KTsKLSAgICAgICAgcmV0dXJuIDE3OwotICAgIH0sIDIzKTsKLQotICAgIENIRUNLKHIuZWxhcHNlZC5jb3VudCgpID09IDQyKTsKLSAgICBDSEVDSyhyLnJlc3VsdCA9PSAyMyk7Ci0gICAgQ0hFQ0soci5pdGVyYXRpb25zID09IDEpOwotCi0gICAgQ0hFQ0socy5lbGFwc2VkLmNvdW50KCkgPT0gNjkpOwotICAgIENIRUNLKHMucmVzdWx0ID09IDE3KTsKLSAgICBDSEVDSyhzLml0ZXJhdGlvbnMgPT0gMSk7Ci19Ci0KLVRFU1RfQ0FTRSgicnVuIGJlbmNobWFyayIsICJbYmVuY2htYXJrXSIpIHsKLSAgICBjb3VudGluZ19jbG9jazo6c2V0X3JhdGUoMTAwMCk7Ci0gICAgYXV0byBzdGFydCA9IGNvdW50aW5nX2Nsb2NrOjpub3coKTsKLSAgICAKLSAgICBDYXRjaDo6QmVuY2htYXJrOjpCZW5jaG1hcmsgYmVuY2h7ICJUZXN0IEJlbmNobWFyayIsIFtdKENhdGNoOjpCZW5jaG1hcms6OkNocm9ub21ldGVyIG1ldGVyKSB7Ci0gICAgICAgIGNvdW50aW5nX2Nsb2NrOjpzZXRfcmF0ZSgxMDAwMDApOwotICAgICAgICBtZXRlci5tZWFzdXJlKFtdIHsgcmV0dXJuIGNvdW50aW5nX2Nsb2NrOjpub3coKTsgfSk7Ci0gICAgfSB9OwotCi0gICAgYmVuY2gucnVuPGNvdW50aW5nX2Nsb2NrPigpOwotICAgIGF1dG8gZW5kID0gY291bnRpbmdfY2xvY2s6Om5vdygpOwotCi0gICAgQ0hFQ0soKGVuZCAtIHN0YXJ0KS5jb3VudCgpID09IDI4NjcyNTEwMDApOwotfQotI2VuZGlmIC8vIENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcAppbmRleCA4MzdkMzY2Li45NzQyMzI2IDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwCisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAKQEAgLTE4OSwxOCArMTg5LDMgQEAKICAgICAgICAgUkVRVUlSRSgxID09IDApOwogICAgIH0KIH0KLQotLy8gU2VsZWN0aW5nIGEgIm5vdCBsYXN0IiBzZWN0aW9uIGluc2lkZSBhIHRlc3QgY2FzZSB2aWEgLWMgInNlY3Rpb24iIHdvdWxkCi0vLyBwcmV2aW91c2x5IG9ubHkgcnVuIHRoZSBmaXJzdCBzdWJzZWN0aW9uLCBpbnN0ZWFkIG9mIHJ1bm5pbmcgYWxsIG9mIHRoZW0uCi0vLyBUaGlzIGFsbG93cyB1cyB0byBjaGVjayB0aGF0IGAiIzE2NzAgcmVncmVzc2lvbiBjaGVjayIgLWMgQWAgbGVhZHMgdG8KLS8vIDIgc3VjY2Vzc2Z1bCBhc3NlcnRpb25zLgotVEVTVF9DQVNFKCIjMTY3MCByZWdyZXNzaW9uIGNoZWNrIiwgIlsuYXBwcm92YWxzXVt0cmFja2VyXSIpIHsKLSAgICBTRUNUSU9OKCJBIikgewotICAgICAgICBTRUNUSU9OKCIxIikgU1VDQ0VFRCgpOwotICAgICAgICBTRUNUSU9OKCIyIikgU1VDQ0VFRCgpOwotICAgIH0KLSAgICBTRUNUSU9OKCJCIikgewotICAgICAgICBTRUNUSU9OKCIxIikgU1VDQ0VFRCgpOwotICAgICAgICBTRUNUSU9OKCIyIikgU1VDQ0VFRCgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcCBiL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9SYW5kb21OdW1iZXJHZW5lcmF0aW9uLnRlc3RzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgwODVkYi4uMDAwMDAwMAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvUmFuZG9tTnVtYmVyR2VuZXJhdGlvbi50ZXN0cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotICogIENyZWF0ZWQgYnkgTWFydGluIG9uIDA2LzEwLzIwMTkuCi0gKgotICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLSAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqLwotCi0jaW5jbHVkZSAiY2F0Y2guaHBwIgotCi0jaW5jbHVkZSAiaW50ZXJuYWwvY2F0Y2hfcmFuZG9tX251bWJlcl9nZW5lcmF0b3IuaCIKLQotVEVTVF9DQVNFKCJPdXIgUENHIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGV4cGVjdGVkIHJlc3VsdHMgZm9yIGtub3duIHNlZWRzIiwgIltybmddIikgewotICAgIENhdGNoOjpTaW1wbGVQY2czMiBybmc7Ci0gICAgU0VDVElPTigiRGVmYXVsdCBzZWVkZWQiKSB7Ci0gICAgICAgIFJFUVVJUkUocm5nKCkgPT0gMHhmY2RiOTQzYik7Ci0gICAgICAgIFJFUVVJUkUocm5nKCkgPT0gMHg2ZjU1YjkyMSk7Ci0gICAgICAgIFJFUVVJUkUocm5nKCkgPT0gMHg0YzE3YTkxNik7Ci0gICAgICAgIFJFUVVJUkUocm5nKCkgPT0gMHg3MWVhZTI1Zik7Ci0gICAgICAgIFJFUVVJUkUocm5nKCkgPT0gMHg2Y2U3OTA5Yyk7Ci0gICAgfQotICAgIFNFQ1RJT04oIlNwZWNpZmljIHNlZWQiKSB7Ci0gICAgICAgIHJuZy5zZWVkKDB4YWJjZDEyMzQpOwotICAgICAgICBSRVFVSVJFKHJuZygpID09IDB4NTdjMDg0OTUpOwotICAgICAgICBSRVFVSVJFKHJuZygpID09IDB4MzNjOTU2YWMpOwotICAgICAgICBSRVFVSVJFKHJuZygpID09IDB4MjIwNmZkNzYpOwotICAgICAgICBSRVFVSVJFKHJuZygpID09IDB4MzUwMWEzNWIpOwotICAgICAgICBSRVFVSVJFKHJuZygpID09IDB4ZmRmZmIzMGYpOwotCi0gICAgICAgIC8vIEFsc28gY2hlY2sgcmVwZWF0ZWQgb3V0cHV0IGFmdGVyIHJlc2VlZGluZwotICAgICAgICBybmcuc2VlZCgweGFiY2QxMjM0KTsKLSAgICAgICAgUkVRVUlSRShybmcoKSA9PSAweDU3YzA4NDk1KTsKLSAgICAgICAgUkVRVUlSRShybmcoKSA9PSAweDMzYzk1NmFjKTsKLSAgICAgICAgUkVRVUlSRShybmcoKSA9PSAweDIyMDZmZDc2KTsKLSAgICAgICAgUkVRVUlSRShybmcoKSA9PSAweDM1MDFhMzViKTsKLSAgICAgICAgUkVRVUlSRShybmcoKSA9PSAweGZkZmZiMzBmKTsKLSAgICB9Ci19Ci0KLVRFU1RfQ0FTRSgiQ29tcGFyaXNvbiBvcHMiLCAiW3JuZ10iKSB7Ci0gICAgdXNpbmcgQ2F0Y2g6OlNpbXBsZVBjZzMyOwotICAgIFJFUVVJUkUoU2ltcGxlUGNnMzJ7fSA9PSBTaW1wbGVQY2czMnt9KTsKLSAgICBSRVFVSVJFKFNpbXBsZVBjZzMyeyAwIH0gIT0gU2ltcGxlUGNnMzJ7fSk7Ci0gICAgUkVRVUlSRV9GQUxTRShTaW1wbGVQY2czMnsgMSB9ID09IFNpbXBsZVBjZzMyeyAyIH0pOwotICAgIFJFUVVJUkVfRkFMU0UoU2ltcGxlUGNnMzJ7IDEgfSAhPSBTaW1wbGVQY2czMnsgMSB9KTsKLX0KZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAKaW5kZXggM2EzMDg2NS4uYWUyMWJiMyAxMDA2NDQKLS0tIGEvcHJvamVjdHMvU2VsZlRlc3QvSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAKQEAgLTQsMTUgKzQsMzkgQEAKIAogI2luY2x1ZGUgPGNzdHJpbmc+CiAKK25hbWVzcGFjZSBDYXRjaCB7CisKKyAgICAvLyBJbXBsZW1lbnRhdGlvbiBvZiB0ZXN0IGFjY2Vzc29ycworICAgIHN0cnVjdCBTdHJpbmdSZWZUZXN0QWNjZXNzIHsKKyAgICAgICAgc3RhdGljIGF1dG8gaXNPd25lZCggU3RyaW5nUmVmIGNvbnN0JiBzdHJpbmdSZWYgKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJpbmdSZWYuaXNPd25lZCgpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBhdXRvIGlzU3Vic3RyaW5nKCBTdHJpbmdSZWYgY29uc3QmIHN0cmluZ1JlZiApIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1JlZi5pc1N1YnN0cmluZygpOworICAgICAgICB9CisgICAgfTsKKworCisgICAgbmFtZXNwYWNlIHsKKyAgICBhdXRvIGlzT3duZWQoIFN0cmluZ1JlZiBjb25zdCYgc3RyaW5nUmVmICkgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiBTdHJpbmdSZWZUZXN0QWNjZXNzOjppc093bmVkKCBzdHJpbmdSZWYgKTsKKyAgICB9CisgICAgYXV0byBpc1N1YnN0cmluZyggU3RyaW5nUmVmIGNvbnN0JiBzdHJpbmdSZWYgKSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZ1JlZlRlc3RBY2Nlc3M6OmlzU3Vic3RyaW5nKCBzdHJpbmdSZWYgKTsKKyAgICB9CisgICAgfSAvLyBlbmQgYW5vbnltb3VzIG5hbWVzcGFjZQorCit9IC8vIG5hbWVzcGFjZSBDYXRjaAorCiBURVNUX0NBU0UoICJTdHJpbmdSZWYiLCAiW1N0cmluZ3NdW1N0cmluZ1JlZl0iICkgewogCiAgICAgdXNpbmcgQ2F0Y2g6OlN0cmluZ1JlZjsKKyAgICB1c2luZyBDYXRjaDo6aXNPd25lZDsgdXNpbmcgQ2F0Y2g6OmlzU3Vic3RyaW5nOwogCiAgICAgU0VDVElPTiggIkVtcHR5IHN0cmluZyIgKSB7CiAgICAgICAgIFN0cmluZ1JlZiBlbXB0eTsKICAgICAgICAgUkVRVUlSRSggZW1wdHkuZW1wdHkoKSApOwogICAgICAgICBSRVFVSVJFKCBlbXB0eS5zaXplKCkgPT0gMCApOwotICAgICAgICBSRVFVSVJFKCBlbXB0eS5pc051bGxUZXJtaW5hdGVkKCkgKTsKICAgICAgICAgUkVRVUlSRSggc3RkOjpzdHJjbXAoIGVtcHR5LmNfc3RyKCksICIiICkgPT0gMCApOwogICAgIH0KIApAQCAtMjAsMjIgKzQ0LDI5IEBACiAgICAgICAgIFN0cmluZ1JlZiBzID0gImhlbGxvIjsKICAgICAgICAgUkVRVUlSRSggcy5lbXB0eSgpID09IGZhbHNlICk7CiAgICAgICAgIFJFUVVJUkUoIHMuc2l6ZSgpID09IDUgKTsKLSAgICAgICAgUkVRVUlSRSggcy5pc051bGxUZXJtaW5hdGVkKCkgKTsKKyAgICAgICAgUkVRVUlSRSggaXNTdWJzdHJpbmcoIHMgKSA9PSBmYWxzZSApOwogCi0gICAgICAgIGF1dG8gcmF3Q2hhcnMgPSBzLmRhdGEoKTsKKyAgICAgICAgYXV0byByYXdDaGFycyA9IHMuY3VycmVudERhdGEoKTsKICAgICAgICAgUkVRVUlSRSggc3RkOjpzdHJjbXAoIHJhd0NoYXJzLCAiaGVsbG8iICkgPT0gMCApOwogCi0gICAgICAgIFJFUVVJUkVfTk9USFJPVyhzLmNfc3RyKCkpOwotICAgICAgICBSRVFVSVJFKHMuY19zdHIoKSA9PSByYXdDaGFycyk7Ci0gICAgICAgIFJFUVVJUkUocy5kYXRhKCkgPT0gcmF3Q2hhcnMpOworICAgICAgICBTRUNUSU9OKCAiY19zdHIoKSBkb2VzIG5vdCBjYXVzZSBjb3B5IiApIHsKKyAgICAgICAgICAgIFJFUVVJUkUoIGlzT3duZWQoIHMgKSA9PSBmYWxzZSApOworCisgICAgICAgICAgICBSRVFVSVJFKCBzLmNfc3RyKCkgPT0gcmF3Q2hhcnMgKTsKKworICAgICAgICAgICAgUkVRVUlSRSggaXNPd25lZCggcyApID09IGZhbHNlICk7CisgICAgICAgIH0KICAgICB9CiAgICAgU0VDVElPTiggIkZyb20gc3ViLXN0cmluZyIgKSB7CiAgICAgICAgIFN0cmluZ1JlZiBvcmlnaW5hbCA9IFN0cmluZ1JlZiggIm9yaWdpbmFsIHN0cmluZyIgKS5zdWJzdHIoMCwgOCk7CiAgICAgICAgIFJFUVVJUkUoIG9yaWdpbmFsID09ICJvcmlnaW5hbCIgKTsKKyAgICAgICAgUkVRVUlSRSggaXNTdWJzdHJpbmcoIG9yaWdpbmFsICkgKTsKKyAgICAgICAgUkVRVUlSRSggaXNPd25lZCggb3JpZ2luYWwgKSA9PSBmYWxzZSApOwogCi0gICAgICAgIFJFUVVJUkVfRkFMU0Uob3JpZ2luYWwuaXNOdWxsVGVybWluYXRlZCgpKTsKLSAgICAgICAgUkVRVUlSRV9USFJPV1Mob3JpZ2luYWwuY19zdHIoKSk7Ci0gICAgICAgIFJFUVVJUkVfTk9USFJPVyhvcmlnaW5hbC5kYXRhKCkpOworICAgICAgICBvcmlnaW5hbC5jX3N0cigpOyAvLyBGb3JjZXMgaXQgdG8gdGFrZSBvd25lcnNoaXAKKworICAgICAgICBSRVFVSVJFKCBpc1N1YnN0cmluZyggb3JpZ2luYWwgKSA9PSBmYWxzZSApOworICAgICAgICBSRVFVSVJFKCBpc093bmVkKCBvcmlnaW5hbCApICk7CiAgICAgfQogCiAKQEAgLTQ2LDkgKzc3LDIyIEBACiAgICAgICAgIFNFQ1RJT04oICJ6ZXJvLWJhc2VkIHN1YnN0cmluZyIgKSB7CiAgICAgICAgICAgICBSRVFVSVJFKCBzcy5lbXB0eSgpID09IGZhbHNlICk7CiAgICAgICAgICAgICBSRVFVSVJFKCBzcy5zaXplKCkgPT0gNSApOwotICAgICAgICAgICAgUkVRVUlSRSggc3RkOjpzdHJuY21wKCBzcy5kYXRhKCksICJoZWxsbyIsIDUgKSA9PSAwICk7CisgICAgICAgICAgICBSRVFVSVJFKCBzdGQ6OnN0cmNtcCggc3MuY19zdHIoKSwgImhlbGxvIiApID09IDAgKTsKICAgICAgICAgICAgIFJFUVVJUkUoIHNzID09ICJoZWxsbyIgKTsKICAgICAgICAgfQorICAgICAgICBTRUNUSU9OKCAiY19zdHIoKSBjYXVzZXMgY29weSIgKSB7CisgICAgICAgICAgICBSRVFVSVJFKCBpc1N1YnN0cmluZyggc3MgKSApOworICAgICAgICAgICAgUkVRVUlSRSggaXNPd25lZCggc3MgKSA9PSBmYWxzZSApOworCisgICAgICAgICAgICBhdXRvIHJhd0NoYXJzID0gc3MuY3VycmVudERhdGEoKTsKKyAgICAgICAgICAgIFJFUVVJUkUoIHJhd0NoYXJzID09IHMuY3VycmVudERhdGEoKSApOyAvLyBzYW1lIHBvaW50ZXIgdmFsdWUKKyAgICAgICAgICAgIFJFUVVJUkUoIHNzLmNfc3RyKCkgIT0gcmF3Q2hhcnMgKTsKKworICAgICAgICAgICAgUkVRVUlSRSggaXNTdWJzdHJpbmcoIHNzICkgPT0gZmFsc2UgKTsKKyAgICAgICAgICAgIFJFUVVJUkUoIGlzT3duZWQoIHNzICkgKTsKKworICAgICAgICAgICAgUkVRVUlSRSggc3MuY3VycmVudERhdGEoKSAhPSBzLmN1cnJlbnREYXRhKCkgKTsgLy8gZGlmZmVyZW50IHBvaW50ZXIgdmFsdWUKKyAgICAgICAgfQogCiAgICAgICAgIFNFQ1RJT04oICJub24temVyby1iYXNlZCBzdWJzdHJpbmciKSB7CiAgICAgICAgICAgICBzcyA9IHMuc3Vic3RyKCA2LCA2ICk7CkBAIC01OCwzMiArMTAyLDE3IEBACiAKICAgICAgICAgU0VDVElPTiggIlBvaW50ZXIgdmFsdWVzIG9mIGZ1bGwgcmVmcyBzaG91bGQgbWF0Y2giICkgewogICAgICAgICAgICAgU3RyaW5nUmVmIHMyID0gczsKLSAgICAgICAgICAgIFJFUVVJUkUoIHMuZGF0YSgpID09IHMyLmRhdGEoKSApOworICAgICAgICAgICAgUkVRVUlSRSggcy5jX3N0cigpID09IHMyLmNfc3RyKCkgKTsKICAgICAgICAgfQogCi0gICAgICAgIFNFQ1RJT04oICJQb2ludGVyIHZhbHVlcyBvZiBzdWJzdHJpbmcgcmVmcyBzaG91bGQgYWxzbyBtYXRjaCIgKSB7Ci0gICAgICAgICAgICBSRVFVSVJFKCBzLmRhdGEoKSA9PSBzcy5kYXRhKCkgKTsKKyAgICAgICAgU0VDVElPTiggIlBvaW50ZXIgdmFsdWVzIG9mIHN1YnN0cmluZyByZWZzIHNob3VsZCBub3QgbWF0Y2giICkgeworICAgICAgICAgICAgUkVRVUlSRSggcy5jX3N0cigpICE9IHNzLmNfc3RyKCkgKTsKICAgICAgICAgfQotCi0gICAgICAgIFNFQ1RJT04oIlBhc3QgdGhlIGVuZCBzdWJzdHJpbmciKSB7Ci0gICAgICAgICAgICBSRVFVSVJFKHMuc3Vic3RyKHMuc2l6ZSgpICsgMSwgMTIzKS5lbXB0eSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFNFQ1RJT04oIlN1YnN0cmluZyBvZmYgdGhlIGVuZCBhcmUgdHJpbW1lZCIpIHsKLSAgICAgICAgICAgIHNzID0gcy5zdWJzdHIoNiwgMTIzKTsKLSAgICAgICAgICAgIFJFUVVJUkUoc3RkOjpzdHJjbXAoc3MuY19zdHIoKSwgIndvcmxkISIpID09IDApOwotICAgICAgICB9Ci0gICAgICAgIC8vIFRPRE86IHN1YnN0cmluZyBpbnRvIHN0cmluZyArIHNpemUgaXMgbG9uZ2VyIHRoYW4gZW5kCiAgICAgfQogCi0gICAgU0VDVElPTiggIkNvbXBhcmlzb25zIGFyZSBkZWVwIiApIHsKLSAgICAgICAgY2hhciBidWZmZXIxW10gPSAiSGVsbG8iOwotICAgICAgICBjaGFyIGJ1ZmZlcjJbXSA9ICJIZWxsbyI7Ci0gICAgICAgIENIRUNLKChjaGFyKilidWZmZXIxICE9IChjaGFyKilidWZmZXIyKTsKLQotICAgICAgICBTdHJpbmdSZWYgbGVmdChidWZmZXIxKSwgcmlnaHQoYnVmZmVyMik7Ci0gICAgICAgIFJFUVVJUkUoIGxlZnQgPT0gcmlnaHQgKTsKLSAgICAgICAgUkVRVUlSRShsZWZ0ICE9IGxlZnQuc3Vic3RyKDAsIDMpKTsKKyAgICBTRUNUSU9OKCAiQ29tcGFyaXNvbnMiICkgeworICAgICAgICBSRVFVSVJFKCBTdHJpbmdSZWYoImhlbGxvIikgPT0gU3RyaW5nUmVmKCJoZWxsbyIpICk7CisgICAgICAgIFJFUVVJUkUoIFN0cmluZ1JlZigiaGVsbG8iKSAhPSBTdHJpbmdSZWYoImNlbGxvIikgKTsKICAgICB9CiAKICAgICBTRUNUSU9OKCAiZnJvbSBzdGQ6OnN0cmluZyIgKSB7CkBAIC0xMTAsNiArMTM5LDExIEBACiAgICAgU0VDVElPTiggInRvIHN0ZDo6c3RyaW5nIiApIHsKICAgICAgICAgU3RyaW5nUmVmIHNyID0gImEgc3RyaW5ncmVmIjsKIAorICAgICAgICBTRUNUSU9OKCAiaW1wbGljaXRseSBjb25zdHJ1Y3RlZCIgKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyBzdGRTdHIgPSBzcjsKKyAgICAgICAgICAgIFJFUVVJUkUoIHN0ZFN0ciA9PSAiYSBzdHJpbmdyZWYiICk7CisgICAgICAgICAgICBSRVFVSVJFKCBzdGRTdHIuc2l6ZSgpID09IHNyLnNpemUoKSApOworICAgICAgICB9CiAgICAgICAgIFNFQ1RJT04oICJleHBsaWNpdGx5IGNvbnN0cnVjdGVkIiApIHsKICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHN0ZFN0ciggc3IgKTsKICAgICAgICAgICAgIFJFUVVJUkUoIHN0ZFN0ciA9PSAiYSBzdHJpbmdyZWYiICk7CkBAIC0xMTcsMzQgKzE1MSw1NCBAQAogICAgICAgICB9CiAgICAgICAgIFNFQ1RJT04oICJhc3NpZ25lZCIgKSB7CiAgICAgICAgICAgICBzdGQ6OnN0cmluZyBzdGRTdHI7Ci0gICAgICAgICAgICBzdGRTdHIgPSBzdGF0aWNfY2FzdDxzdGQ6OnN0cmluZz4oc3IpOworICAgICAgICAgICAgc3RkU3RyID0gc3I7CiAgICAgICAgICAgICBSRVFVSVJFKCBzdGRTdHIgPT0gImEgc3RyaW5ncmVmIiApOwogICAgICAgICAgICAgUkVRVUlSRSggc3RkU3RyLnNpemUoKSA9PSBzci5zaXplKCkgKTsKICAgICAgICAgfQogICAgIH0KKworICAgIFNFQ1RJT04oICJDb3VudGluZyB1dGYtOCBjb2RlcG9pbnRzIiApIHsKKyAgICAgICAgU3RyaW5nUmVmIGFzY2lpID0gImp1c3QgYSBwbGFpbiBvbGQgYm9yaW5nIGFzY2lpIHN0cmluZy4uLiI7CisgICAgICAgIFJFUVVJUkUoYXNjaWkubnVtYmVyT2ZDaGFyYWN0ZXJzKCkgPT0gYXNjaWkuc2l6ZSgpKTsKKworICAgICAgICBTdHJpbmdSZWYgc2ltcGxldTggPSB1OCJUcm9jaGEgxI1lxaF0aW55IG5pa29obyBuZXphYmlsYSI7CisgICAgICAgIFJFUVVJUkUoc2ltcGxldTgubnVtYmVyT2ZDaGFyYWN0ZXJzKCkgPT0gMzApOworCisgICAgICAgIFN0cmluZ1JlZiBlbW9qaXMgPSB1OCJIZXJlIGJlIPCfkb4iOworICAgICAgICBSRVFVSVJFKGVtb2ppcy5udW1iZXJPZkNoYXJhY3RlcnMoKSA9PSA5KTsKKyAgICB9CisKIH0KIAotVEVTVF9DQVNFKCJTdHJpbmdSZWYgYXQgY29tcGlsYXRpb24gdGltZSIsICJbU3RyaW5nc11bU3RyaW5nUmVmXVtjb25zdGV4cHJdIikgewotICAgIHVzaW5nIENhdGNoOjpTdHJpbmdSZWY7Ci0gICAgU0VDVElPTigiU2ltcGxlIGNvbnN0cnVjdG9ycyIpIHsKLSAgICAgICAgU1RBVElDX1JFUVVJUkUoU3RyaW5nUmVme30uc2l6ZSgpID09IDApOwotCi0gICAgICAgIFNUQVRJQ19SRVFVSVJFKFN0cmluZ1JlZnsgImFiYyIsIDMgfS5zaXplKCkgPT0gMyk7Ci0gICAgICAgIFNUQVRJQ19SRVFVSVJFKFN0cmluZ1JlZnsgImFiYyIsIDMgfS5pc051bGxUZXJtaW5hdGVkKCkpOwotCi0gICAgICAgIFNUQVRJQ19SRVFVSVJFKFN0cmluZ1JlZnsgImFiYyIsIDIgfS5zaXplKCkgPT0gMik7Ci0gICAgICAgIFNUQVRJQ19SRVFVSVJFX0ZBTFNFKFN0cmluZ1JlZnsgImFiYyIsIDIgfS5pc051bGxUZXJtaW5hdGVkKCkpOworVEVTVF9DQVNFKCAicmVwbGFjZUluUGxhY2UiLCAiW1N0cmluZ3NdW1N0cmluZ01hbmlwXSIgKSB7CisgICAgc3RkOjpzdHJpbmcgbGV0dGVycyA9ICJhYmNkZWZjZyI7CisgICAgU0VDVElPTiggInJlcGxhY2Ugc2luZ2xlIGNoYXIiICkgeworICAgICAgICBDSEVDSyggQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKCBsZXR0ZXJzLCAiYiIsICJ6IiApICk7CisgICAgICAgIENIRUNLKCBsZXR0ZXJzID09ICJhemNkZWZjZyIgKTsKICAgICB9Ci0gICAgU0VDVElPTigiVURMIGNvbnN0cnVjdGlvbiIpIHsKLSAgICAgICAgY29uc3RleHByIGF1dG8gc3IxID0gImFiYyJfY2F0Y2hfc3I7Ci0gICAgICAgIFNUQVRJQ19SRVFVSVJFX0ZBTFNFKHNyMS5lbXB0eSgpKTsKLSAgICAgICAgU1RBVElDX1JFUVVJUkUoc3IxLnNpemUoKSA9PSAzKTsKLSAgICAgICAgU1RBVElDX1JFUVVJUkUoc3IxLmlzTnVsbFRlcm1pbmF0ZWQoKSk7Ci0KLSAgICAgICAgdXNpbmcgQ2F0Y2g6Om9wZXJhdG9yIiIgX3NyOwotICAgICAgICBjb25zdGV4cHIgYXV0byBzcjIgPSAiIl9zcjsKLSAgICAgICAgU1RBVElDX1JFUVVJUkUoc3IyLmVtcHR5KCkpOwotICAgICAgICBTVEFUSUNfUkVRVUlSRShzcjIuc2l6ZSgpID09IDApOwotICAgICAgICBTVEFUSUNfUkVRVUlSRShzcjIuaXNOdWxsVGVybWluYXRlZCgpKTsKKyAgICBTRUNUSU9OKCAicmVwbGFjZSB0d28gY2hhcnMiICkgeworICAgICAgICBDSEVDSyggQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKCBsZXR0ZXJzLCAiYyIsICJ6IiApICk7CisgICAgICAgIENIRUNLKCBsZXR0ZXJzID09ICJhYnpkZWZ6ZyIgKTsKKyAgICB9CisgICAgU0VDVElPTiggInJlcGxhY2UgZmlyc3QgY2hhciIgKSB7CisgICAgICAgIENIRUNLKCBDYXRjaDo6cmVwbGFjZUluUGxhY2UoIGxldHRlcnMsICJhIiwgInoiICkgKTsKKyAgICAgICAgQ0hFQ0soIGxldHRlcnMgPT0gInpiY2RlZmNnIiApOworICAgIH0KKyAgICBTRUNUSU9OKCAicmVwbGFjZSBsYXN0IGNoYXIiICkgeworICAgICAgICBDSEVDSyggQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKCBsZXR0ZXJzLCAiZyIsICJ6IiApICk7CisgICAgICAgIENIRUNLKCBsZXR0ZXJzID09ICJhYmNkZWZjeiIgKTsKKyAgICB9CisgICAgU0VDVElPTiggInJlcGxhY2UgYWxsIGNoYXJzIiApIHsKKyAgICAgICAgQ0hFQ0soIENhdGNoOjpyZXBsYWNlSW5QbGFjZSggbGV0dGVycywgbGV0dGVycywgInJlcGxhY2VkIiApICk7CisgICAgICAgIENIRUNLKCBsZXR0ZXJzID09ICJyZXBsYWNlZCIgKTsKKyAgICB9CisgICAgU0VDVElPTiggInJlcGxhY2Ugbm8gY2hhcnMiICkgeworICAgICAgICBDSEVDS19GQUxTRSggQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKCBsZXR0ZXJzLCAieCIsICJ6IiApICk7CisgICAgICAgIENIRUNLKCBsZXR0ZXJzID09IGxldHRlcnMgKTsKKyAgICB9CisgICAgU0VDVElPTiggImVzY2FwZSAnIiApIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgcyA9ICJkaWRuJ3QiOworICAgICAgICBDSEVDSyggQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKCBzLCAiJyIsICJ8JyIgKSApOworICAgICAgICBDSEVDSyggcyA9PSAiZGlkbnwndCIgKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nTWFuaXAudGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZ01hbmlwLnRlc3RzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgxN2YzNy4uMDAwMDAwMAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nTWFuaXAudGVzdHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotI2luY2x1ZGUgImludGVybmFsL2NhdGNoX3N0cmluZ19tYW5pcC5oIgotCi0jaW5jbHVkZSAiY2F0Y2guaHBwIgotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG5vX3doaXRlc3BhY2UgPSAiVGhlcmUgaXMgbm8gZXh0cmEgd2hpdGVzcGFjZSBoZXJlIjsKLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbGVhZGluZ193aGl0ZXNwYWNlID0gIiBcciBcdFxuIFRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZSI7Ci1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRyYWlsaW5nX3doaXRlc3BhY2UgPSAiVGhlcmUgaXMgbm8gZXh0cmEgd2hpdGVzcGFjZSBoZXJlIFx0IFxuIFxyICI7Ci1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHdoaXRlc3BhY2VfYXRfYm90aF9lbmRzID0gIiBcclxuIFx0IFRoZXJlIGlzIG5vIGV4dHJhIHdoaXRlc3BhY2UgaGVyZSAgXHRcdFx0IFxuIjsKLQotVEVTVF9DQVNFKCJUcmltIHN0cmluZ3MiLCAiW3N0cmluZy1tYW5pcF0iKSB7Ci0gICAgdXNpbmcgQ2F0Y2g6OnRyaW07IHVzaW5nIENhdGNoOjpTdHJpbmdSZWY7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8c3RkOjpzdHJpbmcsIGRlY2x0eXBlKHRyaW0oc3RkOjpzdHJpbmd7fSkpPjo6dmFsdWUsICJUcmltbWluZyBzdGQ6OnN0cmluZyBzaG91bGQgcmV0dXJuIHN0ZDo6c3RyaW5nIik7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8U3RyaW5nUmVmLCBkZWNsdHlwZSh0cmltKFN0cmluZ1JlZnt9KSk+Ojp2YWx1ZSwgIlRyaW1taW5nIFN0cmluZ1JlZiBzaG91bGQgcmV0dXJuIFN0cmluZ1JlZiIpOwotCi0gICAgUkVRVUlSRSh0cmltKHN0ZDo6c3RyaW5nKG5vX3doaXRlc3BhY2UpKSA9PSBub193aGl0ZXNwYWNlKTsKLSAgICBSRVFVSVJFKHRyaW0oc3RkOjpzdHJpbmcobGVhZGluZ193aGl0ZXNwYWNlKSkgPT0gbm9fd2hpdGVzcGFjZSk7Ci0gICAgUkVRVUlSRSh0cmltKHN0ZDo6c3RyaW5nKHRyYWlsaW5nX3doaXRlc3BhY2UpKSA9PSBub193aGl0ZXNwYWNlKTsKLSAgICBSRVFVSVJFKHRyaW0oc3RkOjpzdHJpbmcod2hpdGVzcGFjZV9hdF9ib3RoX2VuZHMpKSA9PSBub193aGl0ZXNwYWNlKTsKLQotICAgIFJFUVVJUkUodHJpbShTdHJpbmdSZWYobm9fd2hpdGVzcGFjZSkpID09IFN0cmluZ1JlZihub193aGl0ZXNwYWNlKSk7Ci0gICAgUkVRVUlSRSh0cmltKFN0cmluZ1JlZihsZWFkaW5nX3doaXRlc3BhY2UpKSA9PSBTdHJpbmdSZWYobm9fd2hpdGVzcGFjZSkpOwotICAgIFJFUVVJUkUodHJpbShTdHJpbmdSZWYodHJhaWxpbmdfd2hpdGVzcGFjZSkpID09IFN0cmluZ1JlZihub193aGl0ZXNwYWNlKSk7Ci0gICAgUkVRVUlSRSh0cmltKFN0cmluZ1JlZih3aGl0ZXNwYWNlX2F0X2JvdGhfZW5kcykpID09IFN0cmluZ1JlZihub193aGl0ZXNwYWNlKSk7Ci19Ci0KLVRFU1RfQ0FTRSgicmVwbGFjZUluUGxhY2UiLCAiW3N0cmluZy1tYW5pcF0iKSB7Ci0gICAgc3RkOjpzdHJpbmcgbGV0dGVycyA9ICJhYmNkZWZjZyI7Ci0gICAgU0VDVElPTigicmVwbGFjZSBzaW5nbGUgY2hhciIpIHsKLSAgICAgICAgQ0hFQ0soQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKGxldHRlcnMsICJiIiwgInoiKSk7Ci0gICAgICAgIENIRUNLKGxldHRlcnMgPT0gImF6Y2RlZmNnIik7Ci0gICAgfQotICAgIFNFQ1RJT04oInJlcGxhY2UgdHdvIGNoYXJzIikgewotICAgICAgICBDSEVDSyhDYXRjaDo6cmVwbGFjZUluUGxhY2UobGV0dGVycywgImMiLCAieiIpKTsKLSAgICAgICAgQ0hFQ0sobGV0dGVycyA9PSAiYWJ6ZGVmemciKTsKLSAgICB9Ci0gICAgU0VDVElPTigicmVwbGFjZSBmaXJzdCBjaGFyIikgewotICAgICAgICBDSEVDSyhDYXRjaDo6cmVwbGFjZUluUGxhY2UobGV0dGVycywgImEiLCAieiIpKTsKLSAgICAgICAgQ0hFQ0sobGV0dGVycyA9PSAiemJjZGVmY2ciKTsKLSAgICB9Ci0gICAgU0VDVElPTigicmVwbGFjZSBsYXN0IGNoYXIiKSB7Ci0gICAgICAgIENIRUNLKENhdGNoOjpyZXBsYWNlSW5QbGFjZShsZXR0ZXJzLCAiZyIsICJ6IikpOwotICAgICAgICBDSEVDSyhsZXR0ZXJzID09ICJhYmNkZWZjeiIpOwotICAgIH0KLSAgICBTRUNUSU9OKCJyZXBsYWNlIGFsbCBjaGFycyIpIHsKLSAgICAgICAgQ0hFQ0soQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKGxldHRlcnMsIGxldHRlcnMsICJyZXBsYWNlZCIpKTsKLSAgICAgICAgQ0hFQ0sobGV0dGVycyA9PSAicmVwbGFjZWQiKTsKLSAgICB9Ci0gICAgU0VDVElPTigicmVwbGFjZSBubyBjaGFycyIpIHsKLSAgICAgICAgQ0hFQ0tfRkFMU0UoQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKGxldHRlcnMsICJ4IiwgInoiKSk7Ci0gICAgICAgIENIRUNLKGxldHRlcnMgPT0gbGV0dGVycyk7Ci0gICAgfQotICAgIFNFQ1RJT04oImVzY2FwZSAnIikgewotICAgICAgICBzdGQ6OnN0cmluZyBzID0gImRpZG4ndCI7Ci0gICAgICAgIENIRUNLKENhdGNoOjpyZXBsYWNlSW5QbGFjZShzLCAiJyIsICJ8JyIpKTsKLSAgICAgICAgQ0hFQ0socyA9PSAiZGlkbnwndCIpOwotICAgIH0KLX0KLQotVEVTVF9DQVNFKCJzcGxpdFN0cmluZyIsICJbc3RyaW5nLW1hbmlwXSIpIHsKLSAgICB1c2luZyBuYW1lc3BhY2UgQ2F0Y2g6Ok1hdGNoZXJzOwotICAgIHVzaW5nIENhdGNoOjpzcGxpdFN0cmluZ1JlZjsKLSAgICB1c2luZyBDYXRjaDo6U3RyaW5nUmVmOwotCi0gICAgQ0hFQ0tfVEhBVChzcGxpdFN0cmluZ1JlZigiIiwgJywnKSwgRXF1YWxzKHN0ZDo6dmVjdG9yPFN0cmluZ1JlZj4oKSkpOwotICAgIENIRUNLX1RIQVQoc3BsaXRTdHJpbmdSZWYoImFiYyIsICcsJyksIEVxdWFscyhzdGQ6OnZlY3RvcjxTdHJpbmdSZWY+eyJhYmMifSkpOwotICAgIENIRUNLX1RIQVQoc3BsaXRTdHJpbmdSZWYoImFiYyxkZWYiLCAnLCcpLCBFcXVhbHMoc3RkOjp2ZWN0b3I8U3RyaW5nUmVmPnsiYWJjIiwgImRlZiJ9KSk7Ci19CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvVGFnLnRlc3RzLmNwcCBiL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9UYWcudGVzdHMuY3BwCmluZGV4IDc3NWMyZTcuLmYzODkwYjEgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9UYWcudGVzdHMuY3BwCisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9UYWcudGVzdHMuY3BwCkBAIC00OCwxMCArNDgsMyBAQAogICAgIGF1dG8gdGVzdGNhc2UgPSBDYXRjaDo6bWFrZVRlc3RDYXNlKG51bGxwdHIsICIiLCB7ImZha2UgdGVzdCBuYW1lIiwgIlsubWFnaWMtdGFnXSJ9LCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTyk7CiAgICAgUkVRVUlSRV9USEFUKHRlc3RjYXNlLnRhZ3MsIENhdGNoOjpWZWN0b3JDb250YWlucyhzdGQ6OnN0cmluZygibWFnaWMtdGFnIikpICYmIENhdGNoOjpWZWN0b3JDb250YWlucyhzdGQ6OnN0cmluZygiLiIpKSk7CiB9Ci0KLVRFU1RfQ0FTRSgiYWRkaW5nIGEgaGlkZSB0YWcgaW1wbGljaXRseSBlbmFibGVzIGFsbCBvdGhlcnMiLCAiW3RhZ3NdIikgewotICAgIHVzaW5nIENhdGNoOjpWZWN0b3JDb250YWluczsKLSAgICBhdXRvIHRhZyA9IEdFTkVSQVRFKGFzPGNoYXIgY29uc3QqPnt9LCAiWyFoaWRlXSIsICJbLl0iLCAiWy5mb29dIik7Ci0gICAgYXV0byB0ZXN0Y2FzZSA9IENhdGNoOjptYWtlVGVzdENhc2UobnVsbHB0ciwgIiIsIHsiZmFrZSB0ZXN0IG5hbWUiLCB0YWd9LCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTyk7Ci0gICAgUkVRVUlSRV9USEFUKHRlc3RjYXNlLnRhZ3MsIFZlY3RvckNvbnRhaW5zKHN0ZDo6c3RyaW5nKCIuIikpICYmIFZlY3RvckNvbnRhaW5zKHN0ZDo6c3RyaW5nKCIhaGlkZSIpKSk7Ci19CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvVG9TdHJpbmcudGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvSW50cm9zcGVjdGl2ZVRlc3RzL1RvU3RyaW5nLnRlc3RzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FhOTI0Zi4uMDAwMDAwMAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvVG9TdHJpbmcudGVzdHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotI2luY2x1ZGUgImNhdGNoLmhwcCIKLQotI2luY2x1ZGUgImludGVybmFsL2NhdGNoX2VudW1fdmFsdWVzX3JlZ2lzdHJ5LmgiCi0KLWVudW0gY2xhc3MgRW51bUNsYXNzMyB7IFZhbHVlMSwgVmFsdWUyLCBWYWx1ZTMsIFZhbHVlNCB9OwotCi0KLVRFU1RfQ0FTRSggInBhcnNlRW51bXMiLCAiW1N0cmluZ3NdW2VudW1zXSIgKSB7Ci0gICAgdXNpbmcgbmFtZXNwYWNlIENhdGNoOjpNYXRjaGVyczsKLSAgICB1c2luZyBDYXRjaDo6RGV0YWlsOjpwYXJzZUVudW1zOwotCi0gICAgU0VDVElPTiggIk5vIGVudW1zIiApCi0gICAgICAgIENIRUNLX1RIQVQoIHBhcnNlRW51bXMoICIiICksIEVxdWFscyggc3RkOjp2ZWN0b3I8Q2F0Y2g6OlN0cmluZ1JlZj57fSApICk7Ci0KLSAgICBTRUNUSU9OKCAiT25lIGVudW0gdmFsdWUiICkgewotICAgICAgICBDSEVDS19USEFUKCBwYXJzZUVudW1zKCAiQ2xhc3NOYW1lOjpFbnVtTmFtZTo6VmFsdWUxIiApLAotICAgICAgICAgICAgICAgIEVxdWFscyhzdGQ6OnZlY3RvcjxDYXRjaDo6U3RyaW5nUmVmPnsiVmFsdWUxIn0gKSApOwotICAgICAgICBDSEVDS19USEFUKCBwYXJzZUVudW1zKCAiVmFsdWUxIiApLAotICAgICAgICAgICAgICAgIEVxdWFscyggc3RkOjp2ZWN0b3I8Q2F0Y2g6OlN0cmluZ1JlZj57IlZhbHVlMSJ9ICkgKTsKLSAgICAgICAgQ0hFQ0tfVEhBVCggcGFyc2VFbnVtcyggIkVudW1OYW1lOjpWYWx1ZTEiICksCi0gICAgICAgICAgICAgICAgRXF1YWxzKHN0ZDo6dmVjdG9yPENhdGNoOjpTdHJpbmdSZWY+eyJWYWx1ZTEifSApICk7Ci0gICAgfQotCi0gICAgU0VDVElPTiggIk11bHRpcGxlIGVudW0gdmFsdWVzIiApIHsKLSAgICAgICAgQ0hFQ0tfVEhBVCggcGFyc2VFbnVtcyggIkNsYXNzTmFtZTo6RW51bU5hbWU6OlZhbHVlMSwgQ2xhc3NOYW1lOjpFbnVtTmFtZTo6VmFsdWUyIiApLAotICAgICAgICAgICAgICAgICAgICBFcXVhbHMoIHN0ZDo6dmVjdG9yPENhdGNoOjpTdHJpbmdSZWY+eyJWYWx1ZTEiLCAiVmFsdWUyIn0gKSApOwotICAgICAgICBDSEVDS19USEFUKCBwYXJzZUVudW1zKCAiQ2xhc3NOYW1lOjpFbnVtTmFtZTo6VmFsdWUxLCBDbGFzc05hbWU6OkVudW1OYW1lOjpWYWx1ZTIsIENsYXNzTmFtZTo6RW51bU5hbWU6OlZhbHVlMyIgKSwKLSAgICAgICAgICAgICAgICAgICAgRXF1YWxzKCBzdGQ6OnZlY3RvcjxDYXRjaDo6U3RyaW5nUmVmPnsiVmFsdWUxIiwgIlZhbHVlMiIsICJWYWx1ZTMifSApICk7Ci0gICAgICAgIENIRUNLX1RIQVQoIHBhcnNlRW51bXMoICJDbGFzc05hbWU6OkVudW1OYW1lOjpWYWx1ZTEsQ2xhc3NOYW1lOjpFbnVtTmFtZTo6VmFsdWUyICwgQ2xhc3NOYW1lOjpFbnVtTmFtZTo6VmFsdWUzIiApLAotICAgICAgICAgICAgICAgICAgICBFcXVhbHMoIHN0ZDo6dmVjdG9yPENhdGNoOjpTdHJpbmdSZWY+eyJWYWx1ZTEiLCAiVmFsdWUyIiwgIlZhbHVlMyJ9ICkgKTsKLSAgICB9Ci19Ci0KLVRFU1RfQ0FTRSggIkRpcmVjdGx5IGNyZWF0aW5nIGFuIEVudW1JbmZvIiApIHsKLQotICAgIHVzaW5nIG5hbWVzcGFjZSBDYXRjaDo6RGV0YWlsOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnVtSW5mbz4gZW51bUluZm8gPSBtYWtlRW51bUluZm8oICJFbnVtTmFtZSIsICJFbnVtTmFtZTo6VmFsdWUxLCBFbnVtTmFtZTo6VmFsdWUyIiwgezAsIDF9ICk7Ci0KLSAgICBDSEVDSyggZW51bUluZm8tPmxvb2t1cCgwKSA9PSAiVmFsdWUxIiApOwotICAgIENIRUNLKCBlbnVtSW5mby0+bG9va3VwKDEpID09ICJWYWx1ZTIiICk7Ci0gICAgQ0hFQ0soIGVudW1JbmZvLT5sb29rdXAoMykgPT0gInsqKiB1bmV4cGVjdGVkIGVudW0gdmFsdWUgKip9IiApOwotfQpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvU2VsZlRlc3QvSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAgYi9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcAppbmRleCBiZjZjODYwLi5jMzg4NmFiIDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcAorKysgYi9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcApAQCAtNDAsMTEgKzQwLDEwIEBACiB9CiAKIC8vIFRoYW5rcyB0byBQZXRlciBCaW5kZWxzIChkYXNjYW5keSkgZm9yIHNvbWUgb2YgdGhlIHRlc3RzCi1URVNUX0NBU0UoIlhtbEVuY29kZTogVVRGLTgiLCAiW1hNTF1bVVRGLThdW2FwcHJvdmFsc10iKSB7Ci0jZGVmaW5lIEVTQyhsaXQpIChjaGFyKikobGl0KQorVEVTVF9DQVNFKCJYbWxFbmNvZGU6IFVURi04IiwgIltYTUxdW1VURi04XSIpIHsKICAgICBTRUNUSU9OKCJWYWxpZCB1dGYtOCBzdHJpbmdzIikgewotICAgICAgICBDSEVDSyhlbmNvZGUoRVNDKHU4IkhlcmUgYmUg8J+RviIpKSA9PSBFU0ModTgiSGVyZSBiZSDwn5G+IikpOwotICAgICAgICBDSEVDSyhlbmNvZGUoRVNDKHU4IsWhxaEiKSkgPT0gRVNDKHU4IsWhxaEiKSk7CisgICAgICAgIENIRUNLKGVuY29kZSh1OCJIZXJlIGJlIPCfkb4iKSA9PSB1OCJIZXJlIGJlIPCfkb4iKTsKKyAgICAgICAgQ0hFQ0soZW5jb2RlKHU4IsWhxaEiKSA9PSB1OCLFocWhIik7CiAKICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceERGXHhCRiIpICAgICAgICAgPT0gIlx4REZceEJGIik7IC8vIDB4N0ZGCiAgICAgICAgIENIRUNLKGVuY29kZSgiXHhFMFx4QTBceDgwIikgICAgID09ICJceEUwXHhBMFx4ODAiKTsgLy8gMHg4MDAKQEAgLTU2LDE4ICs1NSwxOCBAQAogICAgIH0KICAgICBTRUNUSU9OKCJJbnZhbGlkIHV0Zi04IHN0cmluZ3MiKSB7CiAgICAgICAgIFNFQ1RJT04oIlZhcmlvdXMgYnJva2VuIHN0cmluZ3MiKSB7Ci0gICAgICAgICAgICBDSEVDSyhlbmNvZGUoRVNDKCJIZXJlIFx4RkYgYmUgXHhGMFx4OUZceDkxXHhCRSIpKSA9PSBFU0ModTgiSGVyZSBcXHhGRiBiZSDwn5G+IikpOworICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJIZXJlIFx4RkYgYmUg8J+RviIpID09IHU4IkhlcmUgXFx4RkYgYmUg8J+RviIpOwogICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEZGIikgPT0gIlxceEZGIik7Ci0gICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4QzVceEM1XHhBMCIpID09IEVTQyh1OCJcXHhDNcWgIikpOwotICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEY0XHg5MFx4ODBceDgwIikgPT0gRVNDKHU4IlxceEY0XFx4OTBcXHg4MFxceDgwIikpOyAvLyAweDExMDAwMCAtLSBvdXQgb2YgdW5pY29kZSByYW5nZQorICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEM1XHhDNVx4QTAiKSA9PSB1OCJcXHhDNcWgIik7CisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RjRceDkwXHg4MFx4ODAiKSA9PSB1OCJcXHhGNFxceDkwXFx4ODBcXHg4MCIpOyAvLyAweDExMDAwMCAtLSBvdXQgb2YgdW5pY29kZSByYW5nZQogICAgICAgICB9CiAKICAgICAgICAgU0VDVElPTigiT3ZlcmxvbmcgZW5jb2RpbmdzIikgewotICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEMwXHg4MCIpID09ICJcXHhDMFxceDgwIik7IC8vIFwwCi0gICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RjBceDgwXHg4MFx4ODAiKSA9PSAiXFx4RjBcXHg4MFxceDgwXFx4ODAiKTsgLy8gU3VwZXItb3Zlci1sb25nIFwwCi0gICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4QzFceEJGIikgPT0gIlxceEMxXFx4QkYiKTsgLy8gQVNDSUkgY2hhciBhcyBVVEYtOCAoMHg3RikKLSAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhFMFx4OUZceEJGIikgPT0gIlxceEUwXFx4OUZcXHhCRiIpOyAvLyAweDdGRgotICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEYwXHg4Rlx4QkZceEJGIikgPT0gIlxceEYwXFx4OEZcXHhCRlxceEJGIik7IC8vIDB4RkZGRgorICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEMwXHg4MCIpID09IHU4IlxceEMwXFx4ODAiKTsgLy8gXDAKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhGMFx4ODBceDgwXHg4MCIpID09IHU4IlxceEYwXFx4ODBcXHg4MFxceDgwIik7IC8vIFN1cGVyLW92ZXItbG9uZyBcMAorICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEMxXHhCRiIpID09IHU4IlxceEMxXFx4QkYiKTsgLy8gQVNDSUkgY2hhciBhcyBVVEYtOCAoMHg3RikKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhFMFx4OUZceEJGIikgPT0gdTgiXFx4RTBcXHg5RlxceEJGIik7IC8vIDB4N0ZGCisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RjBceDhGXHhCRlx4QkYiKSA9PSB1OCJcXHhGMFxceDhGXFx4QkZcXHhCRiIpOyAvLyAweEZGRkYKICAgICAgICAgfQogCiAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBhY3R1YWxseSBkb24ndCBtb2RpZnkgc3Vycm9nYXRlIHBhaXJzLCBhcyB3ZSBkbyBub3QgZG8gc3RyaWN0IGNoZWNraW5nCkBAIC03OSwzNiArNzgsMzUgQEAKICAgICAgICAgfQogCiAgICAgICAgIFNFQ1RJT04oIkludmFsaWQgc3RhcnQgYnl0ZSIpIHsKLSAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHg4MCIpID09ICJcXHg4MCIpOwotICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceDgxIikgPT0gIlxceDgxIik7Ci0gICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4QkMiKSA9PSAiXFx4QkMiKTsKLSAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhCRiIpID09ICJcXHhCRiIpOworICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceDgwIikgPT0gdTgiXFx4ODAiKTsKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHg4MSIpID09IHU4IlxceDgxIik7CisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4QkMiKSA9PSB1OCJcXHhCQyIpOworICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEJGIikgPT0gdTgiXFx4QkYiKTsKICAgICAgICAgICAgIC8vIE91dCBvZiByYW5nZQotICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEY1XHg4MFx4ODBceDgwIikgPT0gIlxceEY1XFx4ODBcXHg4MFxceDgwIik7Ci0gICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RjZceDgwXHg4MFx4ODAiKSA9PSAiXFx4RjZcXHg4MFxceDgwXFx4ODAiKTsKLSAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhGN1x4ODBceDgwXHg4MCIpID09ICJcXHhGN1xceDgwXFx4ODBcXHg4MCIpOworICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEY1XHg4MFx4ODBceDgwIikgPT0gdTgiXFx4RjVcXHg4MFxceDgwXFx4ODAiKTsKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhGNlx4ODBceDgwXHg4MCIpID09IHU4IlxceEY2XFx4ODBcXHg4MFxceDgwIik7CisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RjdceDgwXHg4MFx4ODAiKSA9PSB1OCJcXHhGN1xceDgwXFx4ODBcXHg4MCIpOwogICAgICAgICB9CiAKICAgICAgICAgU0VDVElPTigiTWlzc2luZyBjb250aW51YXRpb24gYnl0ZShzKSIpIHsKICAgICAgICAgICAgIC8vIE1pc3NpbmcgZmlyc3QgY29udGludWF0aW9uIGJ5dGUKLSAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhERSIpID09ICJcXHhERSIpOwotICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceERGIikgPT0gIlxceERGIik7Ci0gICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RTAiKSA9PSAiXFx4RTAiKTsKLSAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhFRiIpID09ICJcXHhFRiIpOwotICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEYwIikgPT0gIlxceEYwIik7Ci0gICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RjQiKSA9PSAiXFx4RjQiKTsKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhERSIpID09IHU4IlxceERFIik7CisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4REYiKSA9PSB1OCJcXHhERiIpOworICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEUwIikgPT0gdTgiXFx4RTAiKTsKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhFRiIpID09IHU4IlxceEVGIik7CisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RjAiKSA9PSB1OCJcXHhGMCIpOworICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEY0IikgPT0gdTgiXFx4RjQiKTsKIAogICAgICAgICAgICAgLy8gTWlzc2luZyBzZWNvbmQgY29udGludWF0aW9uIGJ5dGUKLSAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhFMFx4ODAiKSA9PSAiXFx4RTBcXHg4MCIpOwotICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEUwXHhCRiIpID09ICJcXHhFMFxceEJGIik7Ci0gICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RTFceDgwIikgPT0gIlxceEUxXFx4ODAiKTsKLSAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhGMFx4ODAiKSA9PSAiXFx4RjBcXHg4MCIpOwotICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEY0XHg4MCIpID09ICJcXHhGNFxceDgwIik7CisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RTBceDgwIikgPT0gdTgiXFx4RTBcXHg4MCIpOworICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEUwXHhCRiIpID09IHU4IlxceEUwXFx4QkYiKTsKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhFMVx4ODAiKSA9PSB1OCJcXHhFMVxceDgwIik7CisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RjBceDgwIikgPT0gdTgiXFx4RjBcXHg4MCIpOworICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEY0XHg4MCIpID09IHU4IlxceEY0XFx4ODAiKTsKIAogICAgICAgICAgICAgLy8gTWlzc2luZyB0aGlyZCBjb250aW51YXRpb24gYnl0ZQotICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEYwXHg4MFx4ODAiKSA9PSAiXFx4RjBcXHg4MFxceDgwIik7Ci0gICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RjRceDgwXHg4MCIpID09ICJcXHhGNFxceDgwXFx4ODAiKTsKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhGMFx4ODBceDgwIikgPT0gdTgiXFx4RjBcXHg4MFxceDgwIik7CisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RjRceDgwXHg4MCIpID09IHU4IlxceEY0XFx4ODBcXHg4MCIpOwogICAgICAgICB9CiAgICAgfQotI3VuZGVmIEVTQwogfQpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvU2VsZlRlc3QvTWlzYy9pbnZhbGlkLXRlc3QtbmFtZXMuaW5wdXQgYi9wcm9qZWN0cy9TZWxmVGVzdC9NaXNjL2ludmFsaWQtdGVzdC1uYW1lcy5pbnB1dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJiYzg4ZS4uMDAwMDAwMAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9NaXNjL2ludmFsaWQtdGVzdC1uYW1lcy5pbnB1dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLVRlc3Qgd2l0aCBzcGVjaWFsLCBjaGFyYWN0ZXJzIGluIFwiIG5hbWUKZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L01pc2MvcGxhaW4tb2xkLXRlc3RzLmlucHV0IGIvcHJvamVjdHMvU2VsZlRlc3QvTWlzYy9wbGFpbi1vbGQtdGVzdHMuaW5wdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlNmQ5ZjEuLjAwMDAwMDAKLS0tIGEvcHJvamVjdHMvU2VsZlRlc3QvTWlzYy9wbGFpbi1vbGQtdGVzdHMuaW5wdXQKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLXJhbmRvbSBTRUNUSU9OIHRlc3RzCi1uZXN0ZWQgU0VDVElPTiB0ZXN0cwpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvU2VsZlRlc3QvTWlzYy9zcGVjaWFsLWNoYXJhY3RlcnMtaW4tZmlsZS5pbnB1dCBiL3Byb2plY3RzL1NlbGZUZXN0L01pc2Mvc3BlY2lhbC1jaGFyYWN0ZXJzLWluLWZpbGUuaW5wdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2OGE2YmYuLjAwMDAwMDAKLS0tIGEvcHJvamVjdHMvU2VsZlRlc3QvTWlzYy9zcGVjaWFsLWNoYXJhY3RlcnMtaW4tZmlsZS5pbnB1dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLVRlc3Qgd2l0aCBzcGVjaWFsXCwgY2hhcmFjdGVycyBcImluIG5hbWUKZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L1Rlc3RNYWluLmNwcCBiL3Byb2plY3RzL1NlbGZUZXN0L1Rlc3RNYWluLmNwcAppbmRleCBhMTZmMGMyLi4xYzAyM2NlIDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9UZXN0TWFpbi5jcHAKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvVGVzdE1haW4uY3BwCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSAicmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX3RlYW1jaXR5LmhwcCIKICNpbmNsdWRlICJyZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfdGFwLmhwcCIKICNpbmNsdWRlICJyZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfYXV0b21ha2UuaHBwIgotI2luY2x1ZGUgInJlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9zb25hcnF1YmUuaHBwIgogCiAKIC8vIFNvbWUgZXhhbXBsZSB0YWcgYWxpYXNlcwpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9BcHByb3gudGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9BcHByb3gudGVzdHMuY3BwCmluZGV4IDQwMjkyMjMuLmI5NTM5NGEgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvQXBwcm94LnRlc3RzLmNwcAorKysgYi9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL0FwcHJveC50ZXN0cy5jcHAKQEAgLTYxLDYgKzYxLDggQEAKICAgICBSRVFVSVJFKCBBcHByb3goIGQgKSA9PSAxLjIzICk7CiAgICAgUkVRVUlSRSggQXBwcm94KCBkICkgIT0gMS4yMiApOwogICAgIFJFUVVJUkUoIEFwcHJveCggZCApICE9IDEuMjQgKTsKKworICAgIFJFUVVJUkUoSU5GSU5JVFkgPT0gQXBwcm94KElORklOSVRZKSk7CiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTE4MSwxMSArMTgzLDggQEAKICAgICBSRVFVSVJFKDEwMS4wMSAhPSBBcHByb3goMTAwKS5lcHNpbG9uKDAuMDEpKTsKIH0KIAotVEVTVF9DQVNFKCJBc3NvcnRlZCBtaXNjZWxsYW5lb3VzIHRlc3RzIiwgIltBcHByb3hdW2FwcHJvdmFsc10iKSB7CitURVNUX0NBU0UoIkFzc29ydGVkIG1pc2NlbGxhbmVvdXMgdGVzdHMiLCAiW0FwcHJveF0iKSB7CiAgICAgUkVRVUlSRShJTkZJTklUWSA9PSBBcHByb3goSU5GSU5JVFkpKTsKLSAgICBSRVFVSVJFKC1JTkZJTklUWSAhPSBBcHByb3goSU5GSU5JVFkpKTsKLSAgICBSRVFVSVJFKDEgIT0gQXBwcm94KElORklOSVRZKSk7Ci0gICAgUkVRVUlSRShJTkZJTklUWSAhPSBBcHByb3goMSkpOwogICAgIFJFUVVJUkUoTkFOICE9IEFwcHJveChOQU4pKTsKICAgICBSRVFVSVJFX0ZBTFNFKE5BTiA9PSBBcHByb3goTkFOKSk7CiB9CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL0JlbmNobWFyay50ZXN0cy5jcHAgYi9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL0JlbmNobWFyay50ZXN0cy5jcHAKaW5kZXggZTc5NWRkZC4uZGRmNjk1MCAxMDA2NDQKLS0tIGEvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9CZW5jaG1hcmsudGVzdHMuY3BwCisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvQmVuY2htYXJrLnRlc3RzLmNwcApAQCAtMiwxNDMgKzIsNDIgQEAKIAogI2luY2x1ZGUgPG1hcD4KIAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcpCi1uYW1lc3BhY2UgewotICAgIHN0ZDo6dWludDY0X3QgRmlib25hY2NpKHN0ZDo6dWludDY0X3QgbnVtYmVyKSB7Ci0gICAgICAgIHJldHVybiBudW1iZXIgPCAyID8gMSA6IEZpYm9uYWNjaShudW1iZXIgLSAxKSArIEZpYm9uYWNjaShudW1iZXIgLSAyKTsKLSAgICB9Ci19CitURVNUX0NBU0UoICJiZW5jaG1hcmtlZCIsICJbIWJlbmNobWFya10iICkgewogCi1URVNUX0NBU0UoIkJlbmNobWFyayBGaWJvbmFjY2kiLCAiWyFiZW5jaG1hcmtdIikgewotICAgIENIRUNLKEZpYm9uYWNjaSgwKSA9PSAxKTsKLSAgICAvLyBzb21lIG1vcmUgYXNzZXJ0cy4uCi0gICAgQ0hFQ0soRmlib25hY2NpKDUpID09IDgpOwotICAgIC8vIHNvbWUgbW9yZSBhc3NlcnRzLi4KLQotICAgIEJFTkNITUFSSygiRmlib25hY2NpIDIwIikgewotICAgICAgICByZXR1cm4gRmlib25hY2NpKDIwKTsKLSAgICB9OwotCi0gICAgQkVOQ0hNQVJLKCJGaWJvbmFjY2kgMjUiKSB7Ci0gICAgICAgIHJldHVybiBGaWJvbmFjY2koMjUpOwotICAgIH07Ci0KLSAgICBCRU5DSE1BUksoIkZpYm9uYWNjaSAzMCIpIHsKLSAgICAgICAgcmV0dXJuIEZpYm9uYWNjaSgzMCk7Ci0gICAgfTsKLQotICAgIEJFTkNITUFSSygiRmlib25hY2NpIDM1IikgewotICAgICAgICByZXR1cm4gRmlib25hY2NpKDM1KTsKLSAgICB9OwotfQotCi1URVNUX0NBU0UoIkJlbmNobWFyayBjb250YWluZXJzIiwgIlshYmVuY2htYXJrXSIpIHsKICAgICBzdGF0aWMgY29uc3QgaW50IHNpemUgPSAxMDA7CiAKICAgICBzdGQ6OnZlY3RvcjxpbnQ+IHY7CiAgICAgc3RkOjptYXA8aW50LCBpbnQ+IG07CiAKLSAgICBTRUNUSU9OKCJ3aXRob3V0IGdlbmVyYXRvciIpIHsKLSAgICAgICAgQkVOQ0hNQVJLKCJMb2FkIHVwIGEgdmVjdG9yIikgewotICAgICAgICAgICAgdiA9IHN0ZDo6dmVjdG9yPGludD4oKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgICAgIHYucHVzaF9iYWNrKGkpOwotICAgICAgICB9OwotICAgICAgICBSRVFVSVJFKHYuc2l6ZSgpID09IHNpemUpOwotCi0gICAgICAgIC8vIHRlc3Qgb3B0aW1pemVyIGNvbnRyb2wKLSAgICAgICAgQkVOQ0hNQVJLKCJBZGQgdXAgYSB2ZWN0b3IncyBjb250ZW50IikgewotICAgICAgICAgICAgdWludDY0X3QgYWRkID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgICAgIGFkZCArPSB2W2ldOwotICAgICAgICAgICAgcmV0dXJuIGFkZDsKLSAgICAgICAgfTsKLQotICAgICAgICBCRU5DSE1BUksoIkxvYWQgdXAgYSBtYXAiKSB7Ci0gICAgICAgICAgICBtID0gc3RkOjptYXA8aW50LCBpbnQ+KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgICAgICBtLmluc2VydCh7IGksIGkgKyAxIH0pOwotICAgICAgICB9OwotICAgICAgICBSRVFVSVJFKG0uc2l6ZSgpID09IHNpemUpOwotCi0gICAgICAgIEJFTkNITUFSSygiUmVzZXJ2ZWQgdmVjdG9yIikgewotICAgICAgICAgICAgdiA9IHN0ZDo6dmVjdG9yPGludD4oKTsKLSAgICAgICAgICAgIHYucmVzZXJ2ZShzaXplKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgICAgIHYucHVzaF9iYWNrKGkpOwotICAgICAgICB9OwotICAgICAgICBSRVFVSVJFKHYuc2l6ZSgpID09IHNpemUpOwotCi0gICAgICAgIEJFTkNITUFSSygiUmVzaXplZCB2ZWN0b3IiKSB7Ci0gICAgICAgICAgICB2ID0gc3RkOjp2ZWN0b3I8aW50PigpOwotICAgICAgICAgICAgdi5yZXNpemUoc2l6ZSk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgICAgICB2W2ldID0gaTsKLSAgICAgICAgfTsKLSAgICAgICAgUkVRVUlSRSh2LnNpemUoKSA9PSBzaXplKTsKLQotICAgICAgICBpbnQgYXJyYXlbc2l6ZV07Ci0gICAgICAgIEJFTkNITUFSSygiQSBmaXhlZCBzaXplIGFycmF5IHRoYXQgc2hvdWxkIHJlcXVpcmUgbm8gYWxsb2NhdGlvbnMiKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgICAgICBhcnJheVtpXSA9IGk7Ci0gICAgICAgIH07Ci0gICAgICAgIGludCBzdW0gPSAwOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIHN1bSArPSBhcnJheVtpXTsKLSAgICAgICAgUkVRVUlSRShzdW0gPiBzaXplKTsKLQotICAgICAgICBTRUNUSU9OKCJYWVoiKSB7Ci0KLSAgICAgICAgICAgIEJFTkNITUFSS19BRFZBTkNFRCgiTG9hZCB1cCB2ZWN0b3Igd2l0aCBjaHJvbm9tZXRlciIpKENhdGNoOjpCZW5jaG1hcms6OkNocm9ub21ldGVyIG1ldGVyKSB7Ci0gICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8aW50PiBrOwotICAgICAgICAgICAgICAgIG1ldGVyLm1lYXN1cmUoWyZdKGludCBpZHgpIHsKLSAgICAgICAgICAgICAgICAgICAgayA9IHN0ZDo6dmVjdG9yPGludD4oKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICAgICAgICAgICAgICBrLnB1c2hfYmFjayhpZHgpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIFJFUVVJUkUoay5zaXplKCkgPT0gc2l6ZSk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBpbnQgcnVucyA9IDA7Ci0gICAgICAgICAgICBCRU5DSE1BUksoIkZpbGwgdmVjdG9yIGluZGV4ZWQiLCBiZW5jaG1hcmtJbmRleCkgewotICAgICAgICAgICAgICAgIHYgPSBzdGQ6OnZlY3RvcjxpbnQ+KCk7Ci0gICAgICAgICAgICAgICAgdi5yZXNpemUoc2l6ZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHZbaV0gPSBiZW5jaG1hcmtJbmRleDsKLSAgICAgICAgICAgICAgICBydW5zID0gYmVuY2htYXJrSW5kZXg7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHYuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBSRVFVSVJFKHZbaV0gPT0gcnVucyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBCRU5DSE1BUksoICJMb2FkIHVwIGEgdmVjdG9yIiApIHsKKyAgICAgICAgdiA9IHN0ZDo6dmVjdG9yPGludD4oKTsKKyAgICAgICAgZm9yKGludCBpID0wOyBpIDwgc2l6ZTsgKytpICkKKyAgICAgICAgICAgIHYucHVzaF9iYWNrKCBpICk7CiAgICAgfQorICAgIFJFUVVJUkUoIHYuc2l6ZSgpID09IHNpemUgKTsKIAotICAgIFNFQ1RJT04oIndpdGggZ2VuZXJhdG9yIikgewotICAgICAgICBhdXRvIGdlbmVyYXRlZCA9IEdFTkVSQVRFKHJhbmdlKDAsIDEwKSk7Ci0gICAgICAgIEJFTkNITUFSSygiRmlsbCB2ZWN0b3IgZ2VuZXJhdGVkIikgewotICAgICAgICAgICAgdiA9IHN0ZDo6dmVjdG9yPGludD4oKTsKLSAgICAgICAgICAgIHYucmVzaXplKHNpemUpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICAgICAgdltpXSA9IGdlbmVyYXRlZDsKLSAgICAgICAgfTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBSRVFVSVJFKHZbaV0gPT0gZ2VuZXJhdGVkKTsKLSAgICAgICAgfQorICAgIEJFTkNITUFSSyggIkxvYWQgdXAgYSBtYXAiICkgeworICAgICAgICBtID0gc3RkOjptYXA8aW50LCBpbnQ+KCk7CisgICAgICAgIGZvcihpbnQgaSA9MDsgaSA8IHNpemU7ICsraSApCisgICAgICAgICAgICBtLmluc2VydCggeyBpLCBpKzEgfSApOwogICAgIH0KKyAgICBSRVFVSVJFKCBtLnNpemUoKSA9PSBzaXplICk7CiAKLSAgICBTRUNUSU9OKCJjb25zdHJ1Y3QgYW5kIGRlc3Ryb3kgZXhhbXBsZSIpIHsKLSAgICAgICAgQkVOQ0hNQVJLX0FEVkFOQ0VEKCJjb25zdHJ1Y3QiKShDYXRjaDo6QmVuY2htYXJrOjpDaHJvbm9tZXRlciBtZXRlcikgewotICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Q2F0Y2g6OkJlbmNobWFyazo6c3RvcmFnZV9mb3I8c3RkOjpzdHJpbmc+PiBzdG9yYWdlKG1ldGVyLnJ1bnMoKSk7Ci0gICAgICAgICAgICBtZXRlci5tZWFzdXJlKFsmXShpbnQgaSkgeyBzdG9yYWdlW2ldLmNvbnN0cnVjdCgidGhpbmciKTsgfSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgQkVOQ0hNQVJLX0FEVkFOQ0VEKCJkZXN0cm95IikoQ2F0Y2g6OkJlbmNobWFyazo6Q2hyb25vbWV0ZXIgbWV0ZXIpIHsKLSAgICAgICAgICAgIHN0ZDo6dmVjdG9yPENhdGNoOjpCZW5jaG1hcms6OmRlc3RydWN0YWJsZV9vYmplY3Q8c3RkOjpzdHJpbmc+PiBzdG9yYWdlKG1ldGVyLnJ1bnMoKSk7Ci0gICAgICAgICAgICBmb3IoYXV0byYmIG8gOiBzdG9yYWdlKQotICAgICAgICAgICAgICAgIG8uY29uc3RydWN0KCJ0aGluZyIpOwotICAgICAgICAgICAgbWV0ZXIubWVhc3VyZShbJl0oaW50IGkpIHsgc3RvcmFnZVtpXS5kZXN0cnVjdCgpOyB9KTsKLSAgICAgICAgfTsKKyAgICBCRU5DSE1BUksoICJSZXNlcnZlZCB2ZWN0b3IiICkgeworICAgICAgICB2ID0gc3RkOjp2ZWN0b3I8aW50PigpOworICAgICAgICB2LnJlc2VydmUoc2l6ZSk7CisgICAgICAgIGZvcihpbnQgaSA9MDsgaSA8IHNpemU7ICsraSApCisgICAgICAgICAgICB2LnB1c2hfYmFjayggaSApOwogICAgIH0KKyAgICBSRVFVSVJFKCB2LnNpemUoKSA9PSBzaXplICk7CisKKyAgICBpbnQgYXJyYXlbc2l6ZV07CisgICAgQkVOQ0hNQVJLKCAiQSBmaXhlZCBzaXplIGFycmF5IHRoYXQgc2hvdWxkIHJlcXVpcmUgbm8gYWxsb2NhdGlvbnMiICkgeworICAgICAgICBmb3IoaW50IGkgPTA7IGkgPCBzaXplOyArK2kgKQorICAgICAgICAgICAgYXJyYXlbaV0gPSBpOworICAgIH0KKyAgICBpbnQgc3VtID0gMDsKKyAgICBmb3IoaW50IGkgPTA7IGkgPCBzaXplOyArK2kgKQorICAgICAgICBzdW0gKz0gYXJyYXlbaV07CisgICAgUkVRVUlSRSggc3VtID4gc2l6ZSApOwogfQotI2VuZGlmIC8vIENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwCmluZGV4IGY2NThmYzEuLjNiZGUxZDggMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwCisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwCkBAIC03LDcgKzcsNiBAQAogICovCiAKICNpbmNsdWRlICJjYXRjaC5ocHAiCi0jaW5jbHVkZSA8YXJyYXk+CiAKIG5hbWVzcGFjZXsgbmFtZXNwYWNlIENsYXNzVGVzdHMgewogCkBAIC01OSwxNSArNTgsNiBAQAogICAgIHNpemVfdCBzaXplKCkgeyByZXR1cm4gMDsgfQogfTsKIAotdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHNpemVfdCBWPgotc3RydWN0IFRlbXBsYXRlX0Zvb18yIHsKLSAgICBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIFY7IH0KLX07Ci0KLXRlbXBsYXRlIDxpbnQgVj4KLXN0cnVjdCBOdHRwX0ZpeHR1cmV7Ci0gICAgaW50IHZhbHVlID0gVjsKLX07CiAjZW5kaWYKIAogCkBAIC04NCwyNiArNzQsMTEgQEAKICAgICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlPFRlc3RUeXBlPjo6bV9hID09IDEgKTsKIH0KIAotVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9TSUcoTnR0cF9GaXh0dXJlLCAiQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIiwgIltjbGFzc11bdGVtcGxhdGVdW250dHBdIiwoKGludCBWKSwgViksIDEsIDMsIDYpIHsKLSAgICBSRVFVSVJFKE50dHBfRml4dHVyZTxWPjo6dmFsdWUgPiAwKTsKLX0KLQogVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKFRlbXBsYXRlX0ZpeHR1cmVfMiwgIkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMiLCJbY2xhc3NdW3RlbXBsYXRlXVtwcm9kdWN0XSIsKHN0ZDo6dmVjdG9yLFRlbXBsYXRlX0ZvbyksKGludCxmbG9hdCkpCiB7CiAgICAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZV8yPFRlc3RUeXBlPjo6bV9hLnNpemUoKSA9PSAwICk7CiB9CiAKLVRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcoVGVtcGxhdGVfRml4dHVyZV8yLCAiQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMiLCAiW2NsYXNzXVt0ZW1wbGF0ZV1bcHJvZHVjdF1bbnR0cF0iLCAoKHR5cGVuYW1lIFQsIHNpemVfdCBTKSwgVCwgUyksKHN0ZDo6YXJyYXksIFRlbXBsYXRlX0Zvb18yKSwgKChpbnQsMiksIChmbG9hdCw2KSkpCi17Ci0gICAgUkVRVUlSRShUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+e30ubV9hLnNpemUoKSA+PSAyKTsKLX0KLQotdXNpbmcgTXlUeXBlcyA9IHN0ZDo6dHVwbGU8aW50LCBjaGFyLCBkb3VibGU+OwotVEVNUExBVEVfTElTVF9URVNUX0NBU0VfTUVUSE9EKFRlbXBsYXRlX0ZpeHR1cmUsICJUZW1wbGF0ZSB0ZXN0IGNhc2UgbWV0aG9kIHdpdGggdGVzdCB0eXBlcyBzcGVjaWZpZWQgaW5zaWRlIHN0ZDo6dHVwbGUiLCAiW2NsYXNzXVt0ZW1wbGF0ZV1bbGlzdF0iLCBNeVR5cGVzKQotewotICAgIFJFUVVJUkUoIFRlbXBsYXRlX0ZpeHR1cmU8VGVzdFR5cGU+OjptX2EgPT0gMSApOwotfQotCiAvLyBXZSBzaG91bGQgYmUgYWJsZSB0byB3cml0ZSBvdXIgdGVzdHMgd2l0aGluIGEgZGlmZmVyZW50IG5hbWVzcGFjZQogbmFtZXNwYWNlIElubmVyCiB7CkBAIC0xMTcsMTkgKzkyLDEwIEBACiAgICAgICAgIFJFUVVJUkUoIFRlbXBsYXRlX0ZpeHR1cmU8VGVzdFR5cGU+OjptX2EgPT0gMiApOwogICAgIH0KIAotICAgIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKE50dHBfRml4dHVyZSwgIkEgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9TSUcgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyIsICJbLl1bY2xhc3NdW3RlbXBsYXRlXVtudHRwXVtmYWlsaW5nXSIsICgoaW50IFYpLCBWKSwgMSwgMywgNikgewotICAgICAgICBSRVFVSVJFKE50dHBfRml4dHVyZTxWPjo6dmFsdWUgPT0gMCk7Ci0gICAgfQotCiAgICAgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKFRlbXBsYXRlX0ZpeHR1cmVfMiwgIkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMiLCJbLl1bY2xhc3NdW3RlbXBsYXRlXVtwcm9kdWN0XVtmYWlsaW5nXSIsKHN0ZDo6dmVjdG9yLFRlbXBsYXRlX0ZvbyksKGludCxmbG9hdCkpCiAgICAgewogICAgICAgICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEgKTsKICAgICB9Ci0KLSAgICBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKFRlbXBsYXRlX0ZpeHR1cmVfMiwgIkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIiwgIlsuXVtjbGFzc11bdGVtcGxhdGVdW3Byb2R1Y3RdW250dHBdW2ZhaWxpbmddIiwgKCh0eXBlbmFtZSBULCBzaXplX3QgUyksIFQsIFMpLCAoc3RkOjphcnJheSwgVGVtcGxhdGVfRm9vXzIpLCAoKGludCwgMiksIChmbG9hdCwgNikpKQotICAgIHsKLSAgICAgICAgUkVRVUlSRShUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+e30ubV9hLnNpemUoKSA8IDIpOwotICAgIH0KIH0KIAogCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL0NvbXBpbGF0aW9uLnRlc3RzLmNwcCBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvQ29tcGlsYXRpb24udGVzdHMuY3BwCmluZGV4IDFjMDYwMTQuLjcwYjgxNGEgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvQ29tcGlsYXRpb24udGVzdHMuY3BwCisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvQ29tcGlsYXRpb24udGVzdHMuY3BwCkBAIC0xOTgsNDAgKzE5OCw2IEBACiAgICAgICAgIFJFUVVJUkUoc3RkOjppc19zYW1lPFR5cGVMaXN0PGludD4sIFR5cGVMaXN0PGludD4+Ojp2YWx1ZSk7CiAgICAgfQogCi0gICAgLy8gIzkyNQotICAgIHVzaW5nIHNpZ25hbF90ID0gdm9pZCAoKikgKHZvaWQqKTsKLQotICAgIHN0cnVjdCBUZXN0Q2xhc3MgewotICAgICAgICBzaWduYWxfdCB0ZXN0TWV0aG9kX3Vwb25Db21wbGV0ZV9hcmcgPSBudWxscHRyOwotICAgIH07Ci0KLSAgICBuYW1lc3BhY2UgdXRpbGl0eSB7Ci0gICAgICAgIGlubGluZSBzdGF0aWMgdm9pZCBzeW5jaHJvbml6aW5nX2NhbGxiYWNrKCB2b2lkICogKSB7IH0KLSAgICB9Ci0KLSNpZiBkZWZpbmVkIChfTVNDX1ZFUikKLSNwcmFnbWEgd2FybmluZyhwdXNoKQotLy8gVGhlIGZ1bmN0aW9uIHBvaW50ZXIgY29tcGFyaXNvbiBiZWxvdyB0cmlnZ2VycyB3YXJuaW5nIGJlY2F1c2Ugb2YKLS8vIGNhbGxpbmcgY29udmVudGlvbnMKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQyNDQpCi0jZW5kaWYKLSAgICBURVNUX0NBU0UoIiM5MjU6IGNvbXBhcmluZyBmdW5jdGlvbiBwb2ludGVyIHRvIGZ1bmN0aW9uIGFkZHJlc3MgZmFpbGVkIHRvIGNvbXBpbGUiLCAiWyFub25wb3J0YWJsZV0iICkgewotICAgICAgICBUZXN0Q2xhc3MgdGVzdDsKLSAgICAgICAgUkVRVUlSRSh1dGlsaXR5OjpzeW5jaHJvbml6aW5nX2NhbGxiYWNrICE9IHRlc3QudGVzdE1ldGhvZF91cG9uQ29tcGxldGVfYXJnKTsKLSAgICB9Ci0jaWYgZGVmaW5lZCAoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5pbmcocG9wKQotI2VuZGlmCi0KLSAgICBURVNUX0NBU0UoICIjMTAyNzogQml0ZmllbGRzIGNhbiBiZSBjYXB0dXJlZCIgKSB7Ci0gICAgICAgIHN0cnVjdCBZIHsKLSAgICAgICAgICAgIHVpbnQzMl90IHYgOiAxOwotICAgICAgICB9OwotICAgICAgICBZIHl7IDAgfTsKLSAgICAgICAgUkVRVUlSRSggeS52ID09IDAgKTsKLSAgICAgICAgUkVRVUlSRSggMCA9PSB5LnYgKTsKLSAgICB9Ci0KLQogfX0gLy8gbmFtZXNwYWNlIENvbXBpbGF0aW9uVGVzdHMKIAorCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL0VudW1Ub1N0cmluZy50ZXN0cy5jcHAgYi9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL0VudW1Ub1N0cmluZy50ZXN0cy5jcHAKaW5kZXggN2YyNzkxNi4uMGIxODhhOCAxMDA2NDQKLS0tIGEvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9FbnVtVG9TdHJpbmcudGVzdHMuY3BwCisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvRW51bVRvU3RyaW5nLnRlc3RzLmNwcApAQCAtNjEsMzkgKzYxLDYgQEAKICAgICBFbnVtQ2xhc3MyIGUxID0gRW51bUNsYXNzMjo6RW51bUNsYXNzMlZhbHVlMTsKICAgICBDSEVDSyggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoZTEpID09ICJFMi9WMSIgKTsKIAotICAgIGF1dG8gZTMgPSBzdGF0aWNfY2FzdDxFbnVtQ2xhc3MyPigxMCk7CisgICAgRW51bUNsYXNzMiBlMyA9IHN0YXRpY19jYXN0PEVudW1DbGFzczI+KDEwKTsKICAgICBDSEVDSyggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoZTMpID09ICJVbmtub3duIGVudW0gdmFsdWUgMTAiICk7CiB9Ci0KLWVudW0gY2xhc3MgRW51bUNsYXNzMyB7IFZhbHVlMSwgVmFsdWUyLCBWYWx1ZTMsIFZhbHVlNCB9OwotCi1DQVRDSF9SRUdJU1RFUl9FTlVNKCBFbnVtQ2xhc3MzLCBFbnVtQ2xhc3MzOjpWYWx1ZTEsIEVudW1DbGFzczM6OlZhbHVlMiwgRW51bUNsYXNzMzo6VmFsdWUzICkKLQotCi1URVNUX0NBU0UoICJFbnVtcyBjYW4gcXVpY2tseSBoYXZlIHN0cmluZ2lmaWNhdGlvbiBlbmFibGVkIHVzaW5nIFJFR0lTVEVSX0VOVU0iICkgewotICAgIHVzaW5nIENhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeTsKLSAgICBSRVFVSVJFKCBzdHJpbmdpZnkoIEVudW1DbGFzczM6OlZhbHVlMSApID09ICJWYWx1ZTEiICk7Ci0gICAgUkVRVUlSRSggc3RyaW5naWZ5KCBFbnVtQ2xhc3MzOjpWYWx1ZTIgKSA9PSAiVmFsdWUyIiApOwotICAgIFJFUVVJUkUoIHN0cmluZ2lmeSggRW51bUNsYXNzMzo6VmFsdWUzICkgPT0gIlZhbHVlMyIgKTsKLSAgICBSRVFVSVJFKCBzdHJpbmdpZnkoIEVudW1DbGFzczM6OlZhbHVlNCApID09ICJ7KiogdW5leHBlY3RlZCBlbnVtIHZhbHVlICoqfSIgKTsKLQotICAgIEVudW1DbGFzczMgZWMzID0gRW51bUNsYXNzMyA6OlZhbHVlMjsKLSAgICBSRVFVSVJFKCBzdHJpbmdpZnkoIGVjMyApID09ICJWYWx1ZTIiICk7Ci19Ci0KLW5hbWVzcGFjZSBCaWtlc2hlZCB7Ci0gICAgZW51bSBjbGFzcyBDb2xvdXJzIHsgUmVkLCBHcmVlbiwgQmx1ZSB9OwotfQotCi0vLyBJbXBvcnRhbnQhOiBUaGlzIG1hY3JvIG11c3QgYXBwZWFyIGF0IHRvcCBsZXZlbCBzY29wZSAtIG5vdCBpbnNpZGUgYSBuYW1lc3BhY2UKLS8vIFlvdSBjYW4gZnVsbHkgcXVhbGlmeSB0aGUgbmFtZXMsIG9yIHVzZSBhIHVzaW5nIGlmIHlvdSBwcmVmZXIKLUNBVENIX1JFR0lTVEVSX0VOVU0oIEJpa2VzaGVkOjpDb2xvdXJzLAotICAgICAgICAgICAgICAgICAgICAgQmlrZXNoZWQ6OkNvbG91cnM6OlJlZCwKLSAgICAgICAgICAgICAgICAgICAgIEJpa2VzaGVkOjpDb2xvdXJzOjpHcmVlbiwKLSAgICAgICAgICAgICAgICAgICAgIEJpa2VzaGVkOjpDb2xvdXJzOjpCbHVlICkKLQotVEVTVF9DQVNFKCAiRW51bXMgaW4gbmFtZXNwYWNlcyBjYW4gcXVpY2tseSBoYXZlIHN0cmluZ2lmaWNhdGlvbiBlbmFibGVkIHVzaW5nIFJFR0lTVEVSX0VOVU0iICkgewotICAgIHVzaW5nIENhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeTsKLSAgICBSRVFVSVJFKCBzdHJpbmdpZnkoIEJpa2VzaGVkOjpDb2xvdXJzOjpSZWQgKSA9PSAiUmVkIiApOwotICAgIFJFUVVJUkUoIHN0cmluZ2lmeSggQmlrZXNoZWQ6OkNvbG91cnM6OkJsdWUgKSA9PSAiQmx1ZSIgKTsKLX0KZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAgYi9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwCmluZGV4IDBlMzliZDUuLmY1ZTNmNmEgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcApAQCAtMTY3LDEwICsxNjcsNiBAQAogICAgICAgICAgICAgUkVRVUlSRShjaHVuazIuZnJvbnQoKSA9PSBjaHVuazIuYmFjaygpKTsKICAgICAgICAgICAgIFJFUVVJUkUoY2h1bmsyLmZyb250KCkgPCAzKTsKICAgICAgICAgfQotICAgICAgICBTRUNUSU9OKCJDaHVuayBzaXplIG9mIHplcm8iKSB7Ci0gICAgICAgICAgICBhdXRvIGNodW5rMiA9IEdFTkVSQVRFKHRha2UoMywgY2h1bmsoMCwgdmFsdWUoMSkpKSk7Ci0gICAgICAgICAgICBSRVFVSVJFKGNodW5rMi5zaXplKCkgPT0gMCk7Ci0gICAgICAgIH0KICAgICAgICAgU0VDVElPTigiVGhyb3dzIG9uIHRvbyBzbWFsbCBnZW5lcmF0b3JzIikgewogICAgICAgICAgICAgdXNpbmcgbmFtZXNwYWNlIENhdGNoOjpHZW5lcmF0b3JzOwogICAgICAgICAgICAgUkVRVUlSRV9USFJPV1NfQVMoY2h1bmsoMiwgdmFsdWUoMSkpLCBDYXRjaDo6R2VuZXJhdG9yRXhjZXB0aW9uKTsKQEAgLTE4MCwxOCArMTc2LDE2IEBACiAKIC8vIE5vdGUgdGhhdCBiZWNhdXNlIG9mIHRoZSBub24tcmVwcm9kdWNpYmlsaXR5IG9mIGRpc3RyaWJ1dGlvbnMsCiAvLyBhbnl0aGluZyBpbnZvbHZpbmcgdGhlIHJhbmRvbSBnZW5lcmF0b3JzIGNhbm5vdCBiZSBwYXJ0IG9mIGFwcHJvdmFscwotVEVTVF9DQVNFKCJSYW5kb20gZ2VuZXJhdG9yIiwgIltnZW5lcmF0b3JzXVthcHByb3ZhbHNdIikgeworVEVTVF9DQVNFKCJSYW5kb20gZ2VuZXJhdG9yIiwgIltnZW5lcmF0b3JzXVsuXVthcHByb3ZhbHNdIikgewogICAgIFNFQ1RJT04oIkluZmVyIGludCBmcm9tIGludGVncmFsIGFyZ3VtZW50cyIpIHsKICAgICAgICAgYXV0byB2YWwgPSBHRU5FUkFURSh0YWtlKDQsIHJhbmRvbSgwLCAxKSkpOwogICAgICAgICBTVEFUSUNfUkVRVUlSRShzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUodmFsKSwgaW50Pjo6dmFsdWUpOwotICAgICAgICBSRVFVSVJFKDAgPD0gdmFsKTsKLSAgICAgICAgUkVRVUlSRSh2YWwgPD0gMSk7CisgICAgICAgIHN0YXRpY19jYXN0PHZvaWQ+KHZhbCk7IC8vIFNpbGVuY2UgVlMgMjAxNSB1bnVzZWQgdmFyaWFibGUgd2FybmluZwogICAgIH0KICAgICBTRUNUSU9OKCJJbmZlciBkb3VibGUgZnJvbSBkb3VibGUgYXJndW1lbnRzIikgewogICAgICAgICBhdXRvIHZhbCA9IEdFTkVSQVRFKHRha2UoNCwgcmFuZG9tKDAuLCAxLikpKTsKICAgICAgICAgU1RBVElDX1JFUVVJUkUoc3RkOjppc19zYW1lPGRlY2x0eXBlKHZhbCksIGRvdWJsZT46OnZhbHVlKTsKLSAgICAgICAgUkVRVUlSRSgwLiA8PSB2YWwpOwotICAgICAgICBSRVFVSVJFKHZhbCA8IDEpOworICAgICAgICBzdGF0aWNfY2FzdDx2b2lkPih2YWwpOyAvLyBTaWxlbmNlIFZTIDIwMTUgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcKICAgICB9CiB9CiAKQEAgLTIxMiw0NSArMjA2LDMgQEAKICAgICBhdXRvIHZhbHVlcyA9IEdFTkVSQVRFX0NPUFkocmFuZ2UoZnJvbSwgdG8pKTsKICAgICBSRVFVSVJFKHZhbHVlcyA+IC02KTsKIH0KLQotbmFtZXNwYWNlIHsKLSAgICBzaXplX3QgY2FsbF9jb3VudCA9IDA7Ci0gICAgc2l6ZV90IHRlc3RfY291bnQgPSAwOwotICAgIHN0ZDo6dmVjdG9yPGludD4gbWFrZV9kYXRhKCkgewotICAgICAgICByZXR1cm4geyAxLCAzLCA1LCA3LCA5LCAxMSB9OwotICAgIH0KLSAgICBzdGQ6OnZlY3RvcjxpbnQ+IG1ha2VfZGF0YV9jb3VudGVkKCkgewotICAgICAgICArK2NhbGxfY291bnQ7Ci0gICAgICAgIHJldHVybiBtYWtlX2RhdGEoKTsKLSAgICB9Ci19Ci0KLSNpZiBkZWZpbmVkKF9fY2xhbmdfXykKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdleGl0LXRpbWUtZGVzdHJ1Y3RvcnMiCi0jZW5kaWYKLQotVEVTVF9DQVNFKCJDb3B5IGFuZCB0aGVuIGdlbmVyYXRlIGEgcmFuZ2UiLCAiW2dlbmVyYXRvcnNdIikgewotICAgIFNFQ1RJT04oImZyb20gdmFyIGFuZCBpdGVyYXRvcnMiKSB7Ci0gICAgICAgIHN0YXRpYyBhdXRvIGRhdGEgPSBtYWtlX2RhdGEoKTsKLQotICAgICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gbm90aWNlIHRoYXQgYSBnZW5lcmF0b3IgaXMgb25seSBpbml0aWFsaXplZAotICAgICAgICAvLyAqKm9uY2UqKiBwZXIgcnVuLiBXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdCBtb2RpZnlpbmcgZGF0YSB3aWxsIG5vdAotICAgICAgICAvLyBtb2RpZnkgdGhlIHVuZGVybHlpbmcgZ2VuZXJhdG9yLgotICAgICAgICBhdXRvIGVsZW0gPSBHRU5FUkFURV9SRUYoZnJvbV9yYW5nZShkYXRhLmJlZ2luKCksIGRhdGEuZW5kKCkpKTsKLSAgICAgICAgUkVRVUlSRShlbGVtICUgMiA9PSAxKTsKLSAgICB9Ci0gICAgU0VDVElPTigiRnJvbSBhIHRlbXBvcmFyeSBjb250YWluZXIiKSB7Ci0gICAgICAgIGF1dG8gZWxlbSA9IEdFTkVSQVRFKGZyb21fcmFuZ2UobWFrZV9kYXRhX2NvdW50ZWQoKSkpOwotICAgICAgICArK3Rlc3RfY291bnQ7Ci0gICAgICAgIFJFUVVJUkUoZWxlbSAlIDIgPT0gMSk7Ci0gICAgfQotICAgIFNFQ1RJT04oIkZpbmFsIHZhbGlkYXRpb24iKSB7Ci0gICAgICAgIFJFUVVJUkUoY2FsbF9jb3VudCA9PSAxKTsKLSAgICAgICAgUkVRVUlSRShtYWtlX2RhdGEoKS5zaXplKCkgPT0gdGVzdF9jb3VudCk7Ci0gICAgfQotfQotCi0jaWYgZGVmaW5lZChfX2NsYW5nX18pCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAKaW5kZXggMjNkYjdiNS4uYjBiNWQ1OCAxMDA2NDQKLS0tIGEvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAKQEAgLTUyLDE3ICs1MiwxMSBAQAogICAgICAgICBpbnQgaTsKICAgICB9OwogCi0gICAgc3RydWN0IERlcml2ZWRFeGNlcHRpb24gOiBzdGQ6OmV4Y2VwdGlvbiB7Ci0gICAgICAgIGNoYXIgY29uc3QqIHdoYXQoKSBjb25zdCBub2V4Y2VwdCBvdmVycmlkZSB7Ci0gICAgICAgICAgICByZXR1cm4gIkRlcml2ZWRFeGNlcHRpb246OndoYXQiOwotICAgICAgICB9Ci0gICAgfTsKLQorI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMpCiAgICAgdm9pZCBkb2VzTm90VGhyb3coKSB7fQogCi0jaWYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUykKICAgICBbW25vcmV0dXJuXV0KLSAgICB2b2lkIHRocm93c1NwZWNpYWxFeGNlcHRpb24oaW50IGkpIHsKKyAgICB2b2lkIHRocm93cyhpbnQgaSkgewogICAgICAgICB0aHJvdyBTcGVjaWFsRXhjZXB0aW9ue2l9OwogICAgIH0KIApAQCAtNzAsMTEgKzY0LDYgQEAKICAgICB2b2lkIHRocm93c0FzSW50KGludCBpKSB7CiAgICAgICAgIHRocm93IGk7CiAgICAgfQotCi0gICAgW1tub3JldHVybl1dCi0gICAgdm9pZCB0aHJvd3NEZXJpdmVkRXhjZXB0aW9uKCkgewotICAgICAgICB0aHJvdyBEZXJpdmVkRXhjZXB0aW9ue307Ci0gICAgfQogI2VuZGlmCiAKICAgICBjbGFzcyBFeGNlcHRpb25NYXRjaGVyIDogcHVibGljIENhdGNoOjpNYXRjaGVyQmFzZTxTcGVjaWFsRXhjZXB0aW9uPiB7CkBAIC0zMzMsOCArMzIyLDggQEAKIAogI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMpCiAgICAgICAgIFRFU1RfQ0FTRSgiRXhjZXB0aW9uIG1hdGNoZXJzIHRoYXQgc3VjY2VlZCIsICJbbWF0Y2hlcnNdW2V4Y2VwdGlvbnNdWyF0aHJvd3NdIikgewotICAgICAgICAgICAgQ0hFQ0tfVEhST1dTX01BVENIRVModGhyb3dzU3BlY2lhbEV4Y2VwdGlvbigxKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSk7Ci0gICAgICAgICAgICBSRVFVSVJFX1RIUk9XU19NQVRDSEVTKHRocm93c1NwZWNpYWxFeGNlcHRpb24oMiksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7Mn0pOworICAgICAgICAgICAgQ0hFQ0tfVEhST1dTX01BVENIRVModGhyb3dzKDEpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9KTsKKyAgICAgICAgICAgIFJFUVVJUkVfVEhST1dTX01BVENIRVModGhyb3dzKDIpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezJ9KTsKICAgICAgICAgfQogCiAgICAgICAgIFRFU1RfQ0FTRSgiRXhjZXB0aW9uIG1hdGNoZXJzIHRoYXQgZmFpbCIsICJbbWF0Y2hlcnNdW2V4Y2VwdGlvbnNdWyF0aHJvd3NdWy5mYWlsaW5nXSIpIHsKQEAgLTM0NywyNyArMzM2LDEzIEBACiAgICAgICAgICAgICAgICAgUkVRVUlSRV9USFJPV1NfTUFUQ0hFUyh0aHJvd3NBc0ludCgxKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTRUNUSU9OKCJDb250ZW50cyBhcmUgd3JvbmciKSB7Ci0gICAgICAgICAgICAgICAgQ0hFQ0tfVEhST1dTX01BVENIRVModGhyb3dzU3BlY2lhbEV4Y2VwdGlvbigzKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRV9USFJPV1NfTUFUQ0hFUyh0aHJvd3NTcGVjaWFsRXhjZXB0aW9uKDQpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9KTsKKyAgICAgICAgICAgICAgICBDSEVDS19USFJPV1NfTUFUQ0hFUyh0aHJvd3MoMyksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0pOworICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhST1dTX01BVENIRVModGhyb3dzKDQpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmCiAKICAgICAgICAgVEVTVF9DQVNFKCJGbG9hdGluZyBwb2ludCBtYXRjaGVyczogZmxvYXQiLCAiW21hdGNoZXJzXVtmbG9hdGluZy1wb2ludF0iKSB7Ci0gICAgICAgICAgICBTRUNUSU9OKCJSZWxhdGl2ZSIpIHsKLSAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMTAuZiwgIFdpdGhpblJlbCgxMS4xZiwgMC4xZikpOwotICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVCgxMC5mLCAhV2l0aGluUmVsKDExLjJmLCAwLjFmKSk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKCAxLmYsICFXaXRoaW5SZWwoMC5mLCAwLjk5ZikpOwotICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVCgtMC5mLCAgV2l0aGluUmVsKDAuZikpOwotICAgICAgICAgICAgICAgIFNFQ1RJT04oIlNvbWUgc3Vibm9ybWFsIHZhbHVlcyIpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byB2MSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byB2MiA9IHYxOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdjIgPSBzdGQ6Om5leHRhZnRlcih2MSwgMC5mKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQodjEsIFdpdGhpblJlbCh2MikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNFQ1RJT04oIk1hcmdpbiIpIHsKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMS5mLCBXaXRoaW5BYnMoMS5mLCAwKSk7CiAgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKDAuZiwgV2l0aGluQWJzKDEuZiwgMSkpOwpAQCAtMzc2LDYgKzM1MSw3IEBACiAgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKDAuZiwgIVdpdGhpbkFicygxLmYsIDAuOTlmKSk7CiAKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMC5mLCBXaXRoaW5BYnMoLTAuZiwgMCkpOworICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVChOQU4sICFXaXRoaW5BYnMoTkFOLCAwKSk7CiAKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMTEuZiwgIVdpdGhpbkFicygxMC5mLCAwLjVmKSk7CiAgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKDEwLmYsICFXaXRoaW5BYnMoMTEuZiwgMC41ZikpOwpAQCAtMzg2LDQ2ICszNjIsMzAgQEAKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMS5mLCBXaXRoaW5VTFAoMS5mLCAwKSk7CiAKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQobmV4dGFmdGVyKDEuZiwgMi5mKSwgV2l0aGluVUxQKDEuZiwgMSkpOwotICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVCgwLmYsIFdpdGhpblVMUChuZXh0YWZ0ZXIoMC5mLCAxLmYpLCAxKSk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKDEuZiwgV2l0aGluVUxQKG5leHRhZnRlcigxLmYsIDAuZiksIDEpKTsKLSAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMS5mLCAhV2l0aGluVUxQKG5leHRhZnRlcigxLmYsIDIuZiksIDApKTsKKyAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQobmV4dGFmdGVyKDEuZiwgMC5mKSwgV2l0aGluVUxQKDEuZiwgMSkpOworICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVChuZXh0YWZ0ZXIoMS5mLCAyLmYpLCAhV2l0aGluVUxQKDEuZiwgMCkpOwogCiAgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKDEuZiwgV2l0aGluVUxQKDEuZiwgMCkpOwogICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVCgtMC5mLCBXaXRoaW5VTFAoMC5mLCAwKSk7CisKKyAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoTkFOLCAhV2l0aGluVUxQKE5BTiwgMTIzKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTRUNUSU9OKCJDb21wb3NlZCIpIHsKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMS5mLCBXaXRoaW5BYnMoMS5mLCAwLjUpIHx8IFdpdGhpblVMUCgxLmYsIDEpKTsKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMS5mLCBXaXRoaW5BYnMoMi5mLCAwLjUpIHx8IFdpdGhpblVMUCgxLmYsIDApKTsKLSAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMC4wMDAxZiwgV2l0aGluQWJzKDAuZiwgMC4wMDFmKSB8fCBXaXRoaW5SZWwoMC5mLCAwLjFmKSk7CisKKyAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoTkFOLCAhKFdpdGhpbkFicyhOQU4sIDEwMCkgfHwgV2l0aGluVUxQKE5BTiwgMTIzKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU0VDVElPTigiQ29uc3RydWN0b3IgdmFsaWRhdGlvbiIpIHsKICAgICAgICAgICAgICAgICBSRVFVSVJFX05PVEhST1coV2l0aGluQWJzKDEuZiwgMC5mKSk7CiAgICAgICAgICAgICAgICAgUkVRVUlSRV9USFJPV1NfQVMoV2l0aGluQWJzKDEuZiwgLTEuZiksIHN0ZDo6ZG9tYWluX2Vycm9yKTsKIAogICAgICAgICAgICAgICAgIFJFUVVJUkVfTk9USFJPVyhXaXRoaW5VTFAoMS5mLCAwKSk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRV9USFJPV1NfQVMoV2l0aGluVUxQKDEuZiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KC0xKSksIHN0ZDo6ZG9tYWluX2Vycm9yKTsKLQotICAgICAgICAgICAgICAgIFJFUVVJUkVfTk9USFJPVyhXaXRoaW5SZWwoMS5mLCAwLmYpKTsKLSAgICAgICAgICAgICAgICBSRVFVSVJFX1RIUk9XU19BUyhXaXRoaW5SZWwoMS5mLCAtMC4yZiksIHN0ZDo6ZG9tYWluX2Vycm9yKTsKLSAgICAgICAgICAgICAgICBSRVFVSVJFX1RIUk9XU19BUyhXaXRoaW5SZWwoMS5mLCAxLmYpLCBzdGQ6OmRvbWFpbl9lcnJvcik7CisgICAgICAgICAgICAgICAgUkVRVUlSRV9USFJPV1NfQVMoV2l0aGluVUxQKDEuZiwgLTEpLCBzdGQ6OmRvbWFpbl9lcnJvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBURVNUX0NBU0UoIkZsb2F0aW5nIHBvaW50IG1hdGNoZXJzOiBkb3VibGUiLCAiW21hdGNoZXJzXVtmbG9hdGluZy1wb2ludF0iKSB7Ci0gICAgICAgICAgICBTRUNUSU9OKCJSZWxhdGl2ZSIpIHsKLSAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMTAuLCBXaXRoaW5SZWwoMTEuMSwgMC4xKSk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKDEwLiwgIVdpdGhpblJlbCgxMS4yLCAwLjEpKTsKLSAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMS4sICFXaXRoaW5SZWwoMC4sIDAuOTkpKTsKLSAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoLTAuLCBXaXRoaW5SZWwoMC4pKTsKLSAgICAgICAgICAgICAgICBTRUNUSU9OKCJTb21lIHN1Ym5vcm1hbCB2YWx1ZXMiKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gdjEgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1pbigpOwotICAgICAgICAgICAgICAgICAgICBhdXRvIHYyID0gdjE7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2MiA9IHN0ZDo6bmV4dGFmdGVyKHYxLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQodjEsIFdpdGhpblJlbCh2MikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNFQ1RJT04oIk1hcmdpbiIpIHsKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMS4sIFdpdGhpbkFicygxLiwgMCkpOwogICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVCgwLiwgV2l0aGluQWJzKDEuLCAxKSk7CkBAIC00MzMsNiArMzkzLDggQEAKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMC4sICFXaXRoaW5BYnMoMS4sIDAuOTkpKTsKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMC4sICFXaXRoaW5BYnMoMS4sIDAuOTkpKTsKIAorICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVChOQU4sICFXaXRoaW5BYnMoTkFOLCAwKSk7CisKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMTEuLCAhV2l0aGluQWJzKDEwLiwgMC41KSk7CiAgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKDEwLiwgIVdpdGhpbkFicygxMS4sIDAuNSkpOwogICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVCgtMTAuLCBXaXRoaW5BYnMoLTEwLiwgMC41KSk7CkBAIC00NDIsNDMgKzQwNCwyOSBAQAogICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVCgxLiwgV2l0aGluVUxQKDEuLCAwKSk7CiAKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQobmV4dGFmdGVyKDEuLCAyLiksIFdpdGhpblVMUCgxLiwgMSkpOwotICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVCgwLiwgIFdpdGhpblVMUChuZXh0YWZ0ZXIoMC4sIDEuKSwgMSkpOwotICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVCgxLiwgIFdpdGhpblVMUChuZXh0YWZ0ZXIoMS4sIDAuKSwgMSkpOwotICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVCgxLiwgIVdpdGhpblVMUChuZXh0YWZ0ZXIoMS4sIDIuKSwgMCkpOworICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVChuZXh0YWZ0ZXIoMS4sIDAuKSwgV2l0aGluVUxQKDEuLCAxKSk7CisgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKG5leHRhZnRlcigxLiwgMi4pLCAhV2l0aGluVUxQKDEuLCAwKSk7CiAKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMS4sIFdpdGhpblVMUCgxLiwgMCkpOwogICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVCgtMC4sIFdpdGhpblVMUCgwLiwgMCkpOworCisgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKE5BTiwgIVdpdGhpblVMUChOQU4sIDEyMykpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU0VDVElPTigiQ29tcG9zZWQiKSB7CiAgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKDEuLCBXaXRoaW5BYnMoMS4sIDAuNSkgfHwgV2l0aGluVUxQKDIuLCAxKSk7CiAgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKDEuLCBXaXRoaW5BYnMoMi4sIDAuNSkgfHwgV2l0aGluVUxQKDEuLCAwKSk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKDAuMDAwMSwgV2l0aGluQWJzKDAuLCAwLjAwMSkgfHwgV2l0aGluUmVsKDAuLCAwLjEpKTsKKworICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVChOQU4sICEoV2l0aGluQWJzKE5BTiwgMTAwKSB8fCBXaXRoaW5VTFAoTkFOLCAxMjMpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTRUNUSU9OKCJDb25zdHJ1Y3RvciB2YWxpZGF0aW9uIikgewogICAgICAgICAgICAgICAgIFJFUVVJUkVfTk9USFJPVyhXaXRoaW5BYnMoMS4sIDAuKSk7CiAgICAgICAgICAgICAgICAgUkVRVUlSRV9USFJPV1NfQVMoV2l0aGluQWJzKDEuLCAtMS4pLCBzdGQ6OmRvbWFpbl9lcnJvcik7CiAKICAgICAgICAgICAgICAgICBSRVFVSVJFX05PVEhST1coV2l0aGluVUxQKDEuLCAwKSk7Ci0KLSAgICAgICAgICAgICAgICBSRVFVSVJFX05PVEhST1coV2l0aGluUmVsKDEuLCAwLikpOwotICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhST1dTX0FTKFdpdGhpblJlbCgxLiwgLTAuMiksIHN0ZDo6ZG9tYWluX2Vycm9yKTsKLSAgICAgICAgICAgICAgICBSRVFVSVJFX1RIUk9XU19BUyhXaXRoaW5SZWwoMS4sIDEuKSwgc3RkOjpkb21haW5fZXJyb3IpOworICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhST1dTX0FTKFdpdGhpblVMUCgxLiwgLTEpLCBzdGQ6OmRvbWFpbl9lcnJvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBURVNUX0NBU0UoIkZsb2F0aW5nIHBvaW50IG1hdGNoZXJzIHRoYXQgYXJlIHByb2JsZW1hdGljIGluIGFwcHJvdmFscyIsICJbYXBwcm92YWxzXVttYXRjaGVyc11bZmxvYXRpbmctcG9pbnRdIikgewotICAgICAgICAgICAgUkVRVUlSRV9USEFUKE5BTiwgIVdpdGhpbkFicyhOQU4sIDApKTsKLSAgICAgICAgICAgIFJFUVVJUkVfVEhBVChOQU4sICEoV2l0aGluQWJzKE5BTiwgMTAwKSB8fCBXaXRoaW5VTFAoTkFOLCAxMjMpKSk7Ci0gICAgICAgICAgICBSRVFVSVJFX1RIQVQoTkFOLCAhV2l0aGluVUxQKE5BTiwgMTIzKSk7Ci0gICAgICAgICAgICBSRVFVSVJFX1RIQVQoSU5GSU5JVFksIFdpdGhpblJlbChJTkZJTklUWSkpOwotICAgICAgICAgICAgUkVRVUlSRV9USEFUKC1JTkZJTklUWSwgIVdpdGhpblJlbChJTkZJTklUWSkpOwotICAgICAgICAgICAgUkVRVUlSRV9USEFUKDEuLCAhV2l0aGluUmVsKElORklOSVRZKSk7Ci0gICAgICAgICAgICBSRVFVSVJFX1RIQVQoSU5GSU5JVFksICFXaXRoaW5SZWwoMS4pKTsKLSAgICAgICAgICAgIFJFUVVJUkVfVEhBVChOQU4sICFXaXRoaW5SZWwoTkFOKSk7Ci0gICAgICAgICAgICBSRVFVSVJFX1RIQVQoMS4sICFXaXRoaW5SZWwoTkFOKSk7Ci0gICAgICAgICAgICBSRVFVSVJFX1RIQVQoTkFOLCAhV2l0aGluUmVsKDEuKSk7Ci0gICAgICAgIH0KLQogICAgICAgICBURVNUX0NBU0UoIkFyYml0cmFyeSBwcmVkaWNhdGUgbWF0Y2hlciIsICJbbWF0Y2hlcnNdW2dlbmVyaWNdIikgewogICAgICAgICAgICAgU0VDVElPTigiRnVuY3Rpb24gcG9pbnRlciIpIHsKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMSwgIFByZWRpY2F0ZTxpbnQ+KGFsd2F5c1RydWUsICJhbHdheXMgdHJ1ZSIpKTsKQEAgLTU1MCwyNSArNDk4LDYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0jaWYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUykKLSAgICAgICAgVEVTVF9DQVNFKCJFeGNlcHRpb25zIG1hdGNoZXJzIiwgIlttYXRjaGVyc11bZXhjZXB0aW9uc11bIXRocm93c10iKSB7Ci0gICAgICAgICAgICBSRVFVSVJFX1RIUk9XU19NQVRDSEVTKHRocm93c0Rlcml2ZWRFeGNlcHRpb24oKSwgIERlcml2ZWRFeGNlcHRpb24sICBNZXNzYWdlKCJEZXJpdmVkRXhjZXB0aW9uOjp3aGF0IikpOwotICAgICAgICAgICAgUkVRVUlSRV9USFJPV1NfTUFUQ0hFUyh0aHJvd3NEZXJpdmVkRXhjZXB0aW9uKCksICBEZXJpdmVkRXhjZXB0aW9uLCAhTWVzc2FnZSgiZGVyaXZlZGV4Y2VwdGlvbjo6d2hhdCIpKTsKLSAgICAgICAgICAgIFJFUVVJUkVfVEhST1dTX01BVENIRVModGhyb3dzU3BlY2lhbEV4Y2VwdGlvbigyKSwgU3BlY2lhbEV4Y2VwdGlvbiwgIU1lc3NhZ2UoIkRlcml2ZWRFeGNlcHRpb246OndoYXQiKSk7Ci0gICAgICAgICAgICBSRVFVSVJFX1RIUk9XU19NQVRDSEVTKHRocm93c1NwZWNpYWxFeGNlcHRpb24oMiksIFNwZWNpYWxFeGNlcHRpb24sICBNZXNzYWdlKCJTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IikpOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBURVNUX0NBU0UoIkNvbXBvc2VkIG1hdGNoZXJzIGFyZSBkaXN0aW5jdCIsICJbbWF0Y2hlcnNdW2NvbXBvc2VkXSIpIHsKLSAgICAgICAgICAgIGF1dG8gbTEgPSBDb250YWlucygic3RyaW5nIik7Ci0gICAgICAgICAgICBhdXRvIG0yID0gQ29udGFpbnMoInJhbmRvbSIpOwotICAgICAgICAgICAgYXV0byBjb21wb3NlZDEgPSBtMSB8fCBtMjsKLSAgICAgICAgICAgIGF1dG8gbTMgPSBDb250YWlucygiZGlmZmVyZW50Iik7Ci0gICAgICAgICAgICBhdXRvIGNvbXBvc2VkMiA9IGNvbXBvc2VkMSB8fCBtMzsKLSAgICAgICAgICAgIFJFUVVJUkVfVEhBVCh0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcyKCksICFjb21wb3NlZDEpOwotICAgICAgICAgICAgUkVRVUlSRV9USEFUKHRlc3RTdHJpbmdGb3JNYXRjaGluZzIoKSwgY29tcG9zZWQyKTsKLSAgICAgICAgfQotCiB9IH0gLy8gbmFtZXNwYWNlIE1hdGNoZXJzVGVzdHMKIAogI2VuZGlmIC8vIENBVENIX0NPTkZJR19ESVNBQkxFX01BVENIRVJTCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcAppbmRleCA5MzM0NzA4Li5jY2I3YWMyIDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwCisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAKQEAgLTI1MSwxMyArMjUxLDYgQEAKICAgICBTVUNDRUVEKCk7CiB9CiAKLVRFU1RfQ0FTRSgiQ0FQVFVSRSBwYXJzZXMgc3RyaW5nIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzIiwgIlttZXNzYWdlc11bY2FwdHVyZV0iKSB7Ci0gICAgQ0FQVFVSRSgoImNvbW1hLCBpbiBzdHJpbmciLCAiZXNjYXBlZCwgXCIsICIpLCAic2luZ2xlIHF1b3RlIGluIHN0cmluZywnLCIsICJzb21lIGVzY2FwZXMsIFxcLFxcXFwiKTsKLSAgICBDQVBUVVJFKCJzb21lLCApLCB1bm1hdGNoZWQsIH0gcHJlbmhlc2VzIHtbPCIpOwotICAgIENBUFRVUkUoJyInLCAnXCcnLCAnLCcsICd9JywgJyknLCAnKCcsICd7Jyk7Ci0gICAgU1VDQ0VFRCgpOwotfQotCiAjaWZkZWYgX19jbGFuZ19fCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAgYi9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwCmluZGV4IDgwOGQxZDAuLjRkZTZmMWEgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcApAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGNlcnJubz4KICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8c3N0cmVhbT4KLSNpbmNsdWRlIDxhcnJheT4KIAogbmFtZXNwYWNlIHsgbmFtZXNwYWNlIE1pc2NUZXN0cyB7CiAKQEAgLTU4LDIxICs1NywxNSBAQAogICAgICAgICBSRUdJU1RFUl9URVNUX0NBU0UoIG1hbnVhbGx5UmVnaXN0ZXJlZFRlc3RGdW5jdGlvbiwgIk1hbnVhbGx5UmVnaXN0ZXJlZCIgKTsKICAgICB9CiB9OwotCi1DQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTgogQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUwogc3RhdGljIEF1dG9UZXN0UmVnIGF1dG9UZXN0UmVnOwotQ0FUQ0hfSU5URVJOQUxfU1RPUF9XQVJOSU5HU19TVVBQUkVTU0lPTgorQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgRm9vIHsKICAgICBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIDA7IH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBTPgotc3RydWN0IEJhciB7Ci0gICAgc2l6ZV90IHNpemUoKSB7IHJldHVybiBTOyB9Ci19OwogI2VuZGlmCiAKIFRFU1RfQ0FTRSggInJhbmRvbSBTRUNUSU9OIHRlc3RzIiwgIlsuXVtzZWN0aW9uc11bZmFpbGluZ10iICkgewpAQCAtMzEzLDkxICszMDYsMTUgQEAKICAgICB9CiB9CiAKLVRFTVBMQVRFX1RFU1RfQ0FTRV9TSUcoIlRlbXBsYXRlVGVzdFNpZzogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQiLCAiW3ZlY3Rvcl1bdGVtcGxhdGVdW250dHBdIiwgKCh0eXBlbmFtZSBUZXN0VHlwZSwgaW50IFYpLCBUZXN0VHlwZSwgViksIChpbnQsNSksIChmbG9hdCw0KSwgKHN0ZDo6c3RyaW5nLDE1KSwgKChzdGQ6OnR1cGxlPGludCwgZmxvYXQ+KSwgNikpIHsKLQotICAgIHN0ZDo6dmVjdG9yPFRlc3RUeXBlPiB2KFYpOwotCi0gICAgUkVRVUlSRSh2LnNpemUoKSA9PSBWKTsKLSAgICBSRVFVSVJFKHYuY2FwYWNpdHkoKSA+PSBWKTsKLQotICAgIFNFQ1RJT04oInJlc2l6aW5nIGJpZ2dlciBjaGFuZ2VzIHNpemUgYW5kIGNhcGFjaXR5IikgewotICAgICAgICB2LnJlc2l6ZSgyICogVik7Ci0KLSAgICAgICAgUkVRVUlSRSh2LnNpemUoKSA9PSAyICogVik7Ci0gICAgICAgIFJFUVVJUkUodi5jYXBhY2l0eSgpID49IDIgKiBWKTsKLSAgICB9Ci0gICAgU0VDVElPTigicmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eSIpIHsKLSAgICAgICAgdi5yZXNpemUoMCk7Ci0KLSAgICAgICAgUkVRVUlSRSh2LnNpemUoKSA9PSAwKTsKLSAgICAgICAgUkVRVUlSRSh2LmNhcGFjaXR5KCkgPj0gVik7Ci0KLSAgICAgICAgU0VDVElPTigiV2UgY2FuIHVzZSB0aGUgJ3N3YXAgdHJpY2snIHRvIHJlc2V0IHRoZSBjYXBhY2l0eSIpIHsKLSAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRlc3RUeXBlPiBlbXB0eTsKLSAgICAgICAgICAgIGVtcHR5LnN3YXAodik7Ci0KLSAgICAgICAgICAgIFJFUVVJUkUodi5jYXBhY2l0eSgpID09IDApOwotICAgICAgICB9Ci0gICAgfQotICAgIFNFQ1RJT04oInJlc2VydmluZyBiaWdnZXIgY2hhbmdlcyBjYXBhY2l0eSBidXQgbm90IHNpemUiKSB7Ci0gICAgICAgIHYucmVzZXJ2ZSgyICogVik7Ci0KLSAgICAgICAgUkVRVUlSRSh2LnNpemUoKSA9PSBWKTsKLSAgICAgICAgUkVRVUlSRSh2LmNhcGFjaXR5KCkgPj0gMiAqIFYpOwotICAgIH0KLSAgICBTRUNUSU9OKCJyZXNlcnZpbmcgc21hbGxlciBkb2VzIG5vdCBjaGFuZ2Ugc2l6ZSBvciBjYXBhY2l0eSIpIHsKLSAgICAgICAgdi5yZXNlcnZlKDApOwotCi0gICAgICAgIFJFUVVJUkUodi5zaXplKCkgPT0gVik7Ci0gICAgICAgIFJFUVVJUkUodi5jYXBhY2l0eSgpID49IFYpOwotICAgIH0KLX0KLQogVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoIkEgVGVtcGxhdGUgcHJvZHVjdCB0ZXN0IGNhc2UiLCAiW3RlbXBsYXRlXVtwcm9kdWN0XSIsIChzdGQ6OnZlY3RvciwgRm9vKSwgKGludCwgZmxvYXQpKSB7CiAgICAgVGVzdFR5cGUgeDsKICAgICBSRVFVSVJFKHguc2l6ZSgpID09IDApOwogfQogCi1URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9TSUcoIkEgVGVtcGxhdGUgcHJvZHVjdCB0ZXN0IGNhc2Ugd2l0aCBhcnJheSBzaWduYXR1cmUiLCAiW3RlbXBsYXRlXVtwcm9kdWN0XVtudHRwXSIsICgodHlwZW5hbWUgVCwgc2l6ZV90IFMpLCBULCBTKSwgKHN0ZDo6YXJyYXksIEJhciksICgoaW50LCA5KSwgKGZsb2F0LCA0MikpKSB7Ci0gICAgVGVzdFR5cGUgeDsKLSAgICBSRVFVSVJFKHguc2l6ZSgpID4gMCk7Ci19Ci0KIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCJQcm9kdWN0IHdpdGggZGlmZmVyaW5nIGFyaXRpZXMiLCAiW3RlbXBsYXRlXVtwcm9kdWN0XSIsIHN0ZDo6dHVwbGUsIChpbnQsIChpbnQsIGRvdWJsZSksIChpbnQsIGRvdWJsZSwgZmxvYXQpKSkgewogICAgIFJFUVVJUkUoc3RkOjp0dXBsZV9zaXplPFRlc3RUeXBlPjo6dmFsdWUgPj0gMSk7CiB9CiAKLXVzaW5nIE15VHlwZXMgPSBzdGQ6OnR1cGxlPGludCwgY2hhciwgZmxvYXQ+OwotVEVNUExBVEVfTElTVF9URVNUX0NBU0UoIlRlbXBsYXRlIHRlc3QgY2FzZSB3aXRoIHRlc3QgdHlwZXMgc3BlY2lmaWVkIGluc2lkZSBzdGQ6OnR1cGxlIiwgIlt0ZW1wbGF0ZV1bbGlzdF0iLCBNeVR5cGVzKQotewotICAgIFJFUVVJUkUoc2l6ZW9mKFRlc3RUeXBlKSA+IDApOwotfQotCi1zdHJ1Y3QgTm9uRGVmYXVsdENvbnN0cnVjdGlibGVUeXBlIHsKLSAgICBOb25EZWZhdWx0Q29uc3RydWN0aWJsZVR5cGUoKSA9IGRlbGV0ZTsKLX07Ci0KLXVzaW5nIE15Tm9uRGVmYXVsdENvbnN0cnVjdGlibGVUeXBlcyA9IHN0ZDo6dHVwbGU8Tm9uRGVmYXVsdENvbnN0cnVjdGlibGVUeXBlLCBmbG9hdD47Ci1URU1QTEFURV9MSVNUX1RFU1RfQ0FTRSgiVGVtcGxhdGUgdGVzdCBjYXNlIHdpdGggdGVzdCB0eXBlcyBzcGVjaWZpZWQgaW5zaWRlIG5vbi1kZWZhdWx0LWNvbnN0cnVjdGlibGUgc3RkOjp0dXBsZSIsICJbdGVtcGxhdGVdW2xpc3RdIiwgTXlOb25EZWZhdWx0Q29uc3RydWN0aWJsZVR5cGVzKQotewotICAgIFJFUVVJUkUoc2l6ZW9mKFRlc3RUeXBlKSA+IDApOwotfQotCi1zdHJ1Y3QgTm9uQ29weWFibGVBbmROb25Nb3ZhYmxlVHlwZSB7Ci0gICAgTm9uQ29weWFibGVBbmROb25Nb3ZhYmxlVHlwZSgpID0gZGVmYXVsdDsKLQotICAgIE5vbkNvcHlhYmxlQW5kTm9uTW92YWJsZVR5cGUoTm9uQ29weWFibGVBbmROb25Nb3ZhYmxlVHlwZSBjb25zdCAmKSA9IGRlbGV0ZTsKLSAgICBOb25Db3B5YWJsZUFuZE5vbk1vdmFibGVUeXBlKE5vbkNvcHlhYmxlQW5kTm9uTW92YWJsZVR5cGUgJiYpID0gZGVsZXRlOwotICAgIGF1dG8gb3BlcmF0b3I9KE5vbkNvcHlhYmxlQW5kTm9uTW92YWJsZVR5cGUgY29uc3QgJikgLT4gTm9uQ29weWFibGVBbmROb25Nb3ZhYmxlVHlwZSAmID0gZGVsZXRlOwotICAgIGF1dG8gb3BlcmF0b3I9KE5vbkNvcHlhYmxlQW5kTm9uTW92YWJsZVR5cGUgJiYpIC0+IE5vbkNvcHlhYmxlQW5kTm9uTW92YWJsZVR5cGUgJiA9IGRlbGV0ZTsKLX07Ci0KLXVzaW5nIE5vbkNvcHlhYmxlQW5kTm9uTW92YWJsZVR5cGVzID0gc3RkOjp0dXBsZTxOb25Db3B5YWJsZUFuZE5vbk1vdmFibGVUeXBlLCBmbG9hdD47Ci1URU1QTEFURV9MSVNUX1RFU1RfQ0FTRSgiVGVtcGxhdGUgdGVzdCBjYXNlIHdpdGggdGVzdCB0eXBlcyBzcGVjaWZpZWQgaW5zaWRlIG5vbi1jb3B5YWJsZSBhbmQgbm9uLW1vdmFibGUgc3RkOjp0dXBsZSIsICJbdGVtcGxhdGVdW2xpc3RdIiwgTm9uQ29weWFibGVBbmROb25Nb3ZhYmxlVHlwZXMpCi17Ci0gICAgUkVRVUlSRShzaXplb2YoVGVzdFR5cGUpID4gMCk7Ci19Ci0KIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsc3F1YXJlZC9DYXRjaC9pc3N1ZXMvMTY2CiBURVNUX0NBU0UoIkEgY291cGxlIG9mIG5lc3RlZCBzZWN0aW9ucyBmb2xsb3dlZCBieSBhIGZhaWx1cmUiLCAiW2ZhaWxpbmddWy5dIikgewogICAgIFNFQ1RJT04oIk91dGVyIikKQEAgLTQ1Nyw2ICszNzQsMTIgQEAKICAgICBSRVFVSVJFKCBsID09IHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZyBsb25nPjo6bWF4KCkgKTsKIH0KIAorLy9URVNUX0NBU0UoICJEaXZpZGUgYnkgWmVybyBzaWduYWwgaGFuZGxlciIsICJbLl1bc2lnXSIgKSB7CisvLyAgICBpbnQgaSA9IDA7CisvLyAgICBpbnQgeCA9IDEwL2k7IC8vIFRoaXMgc2hvdWxkIGNhdXNlIHRoZSBzaWduYWwgdG8gZmlyZQorLy8gICAgQ0hFQ0soIHggPT0gMCApOworLy99CisKIFRFU1RfQ0FTRSggIlRoaXMgdGVzdCAnc2hvdWxkJyBmYWlsIGJ1dCBkb2Vzbid0IiwgIlsuXVtmYWlsaW5nXVshc2hvdWxkZmFpbF0iICkgewogICAgIFNVQ0NFRUQoICJvb3BzISIgKTsKIH0KZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvVG9TdHJpbmdCeXRlLnRlc3RzLmNwcCBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvVG9TdHJpbmdCeXRlLnRlc3RzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFhZDY3OS4uMDAwMDAwMAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL1RvU3RyaW5nQnl0ZS50ZXN0cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jaW5jbHVkZSAiY2F0Y2guaHBwIgotCi0jaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTdfQllURSkKLQotVEVTVF9DQVNFKCAic3RkOjpieXRlIC0+IHRvU3RyaW5nIiwgIlt0b1N0cmluZ11bYnl0ZV1bYXBwcm92YWxzXSIgKSB7Ci0gICAgdXNpbmcgdHlwZSA9IHN0ZDo6Ynl0ZTsKLSAgICBSRVFVSVJFKCAiMCIgPT0gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIHR5cGV7IDAgfSApICk7Ci19Ci0KLVRFU1RfQ0FTRSggInN0ZDo6dmVjdG9yPHN0ZDo6Ynl0ZT4gLT4gdG9TdHJpbmciLCAiW3RvU3RyaW5nXVtieXRlXVthcHByb3ZhbHNdIiApIHsKLSAgICB1c2luZyB0eXBlID0gc3RkOjp2ZWN0b3I8c3RkOjpieXRlPjsKLSAgICBSRVFVSVJFKCAieyAwLCAxLCAyIH0iID09IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCB0eXBleyBzdGQ6OmJ5dGV7MH0sIHN0ZDo6Ynl0ZXsxfSwgc3RkOjpieXRlezJ9IH0gKSApOwotfQotCi0jZW5kaWYgLy8gQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NQUDE3X0JZVEUKZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcCBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcAppbmRleCA2OWQ2MzIwLi4wOWFjMzA0IDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHAKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwCkBAIC0xMjgsNDAgKzEyOCw2IEBACiAKICNlbmRpZgogCi1URVNUX0NBU0UoIlByZWNpc2lvbiBvZiBmbG9hdGluZyBwb2ludCBzdHJpbmdpZmljYXRpb24gY2FuIGJlIHNldCIsICJbdG9TdHJpbmddW2Zsb2F0aW5nUG9pbnRdIikgewotICAgIFNFQ1RJT04oIkZsb2F0cyIpIHsKLSAgICAgICAgdXNpbmcgc20gPSBDYXRjaDo6U3RyaW5nTWFrZXI8ZmxvYXQ+OwotICAgICAgICBjb25zdCBhdXRvIG9sZFByZWNpc2lvbiA9IHNtOjpwcmVjaXNpb247Ci0KLSAgICAgICAgY29uc3QgZmxvYXQgdGVzdEZsb2F0ID0gMS4xMjM0NTY3ODkwMTIzNDU2Nzg5OWY7Ci0gICAgICAgIGF1dG8gc3RyMSA9IHNtOjpjb252ZXJ0KHRlc3RGbG9hdCk7Ci0gICAgICAgIHNtOjpwcmVjaXNpb24gPSA1OwotICAgICAgICAvLyAiMS4iIHByZWZpeCA9IDIgY2hhcnMsIGYgc3VmZml4IGlzIGFub3RoZXIgY2hhcgotICAgICAgICBDSEVDSyhzdHIxLnNpemUoKSA9PSAzICsgNSk7Ci0KLSAgICAgICAgc206OnByZWNpc2lvbiA9IDEwOwotICAgICAgICBhdXRvIHN0cjIgPSBzbTo6Y29udmVydCh0ZXN0RmxvYXQpOwotICAgICAgICBSRVFVSVJFKHN0cjIuc2l6ZSgpID09IDMgKyAxMCk7Ci0gICAgICAgIHNtOjpwcmVjaXNpb24gPSBvbGRQcmVjaXNpb247Ci0gICAgfQotICAgIFNFQ1RJT04oIkRvdWJsZSIpIHsKLSAgICAgICAgdXNpbmcgc20gPSBDYXRjaDo6U3RyaW5nTWFrZXI8ZG91YmxlPjsKLSAgICAgICAgY29uc3QgYXV0byBvbGRQcmVjaXNpb24gPSBzbTo6cHJlY2lzaW9uOwotCi0gICAgICAgIGNvbnN0IGRvdWJsZSB0ZXN0RG91YmxlID0gMS4xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTk7Ci0gICAgICAgIHNtOjpwcmVjaXNpb24gPSA1OwotICAgICAgICBhdXRvIHN0cjEgPSBzbTo6Y29udmVydCh0ZXN0RG91YmxlKTsKLSAgICAgICAgLy8gIjEuIiBwcmVmaXggPSAyIGNoYXJzCi0gICAgICAgIENIRUNLKHN0cjEuc2l6ZSgpID09IDIgKyA1KTsKLQotICAgICAgICBzbTo6cHJlY2lzaW9uID0gMTU7Ci0gICAgICAgIGF1dG8gc3RyMiA9IHNtOjpjb252ZXJ0KHRlc3REb3VibGUpOwotICAgICAgICBSRVFVSVJFKHN0cjIuc2l6ZSgpID09IDIgKyAxNSk7Ci0KLSAgICAgICAgc206OnByZWNpc2lvbiA9IG9sZFByZWNpc2lvbjsKLSAgICB9Ci19Ci0KIG5hbWVzcGFjZSB7CiAKIHN0cnVjdCBXaGF0RXhjZXB0aW9uIDogc3RkOjpleGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9Ub1N0cmluZ1ZhcmlhbnQudGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9Ub1N0cmluZ1ZhcmlhbnQudGVzdHMuY3BwCmluZGV4IGI5N2JiNGIuLmEwNDhlMTUgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvVG9TdHJpbmdWYXJpYW50LnRlc3RzLmNwcAorKysgYi9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL1RvU3RyaW5nVmFyaWFudC50ZXN0cy5jcHAKQEAgLTksMTIgKzksMTIgQEAKIC8vIFdlIG5lZWQgMiB0eXBlcyB3aXRoIG5vbi10cml2aWFsIGNvcGllcy9tb3Zlcwogc3RydWN0IE15VHlwZTEgewogICAgIE15VHlwZTEoKSA9IGRlZmF1bHQ7Ci0gICAgW1tub3JldHVybl1dIE15VHlwZTEoTXlUeXBlMSBjb25zdCYpIHsgdGhyb3cgMTsgfQorICAgIE15VHlwZTEoTXlUeXBlMSBjb25zdCYpIHsgdGhyb3cgMTsgfQogICAgIE15VHlwZTEmIG9wZXJhdG9yPShNeVR5cGUxIGNvbnN0JikgeyB0aHJvdyAzOyB9CiB9Owogc3RydWN0IE15VHlwZTIgewogICAgIE15VHlwZTIoKSA9IGRlZmF1bHQ7Ci0gICAgW1tub3JldHVybl1dIE15VHlwZTIoTXlUeXBlMiBjb25zdCYpIHsgdGhyb3cgMjsgfQorICAgIE15VHlwZTIoTXlUeXBlMiBjb25zdCYpIHsgdGhyb3cgMjsgfQogICAgIE15VHlwZTImIG9wZXJhdG9yPShNeVR5cGUyIGNvbnN0JikgeyB0aHJvdyA0OyB9CiB9OwogCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL1RvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcCBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwCmluZGV4IGVhNGQ1YzguLjYzYjQ5ZTUgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwCisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwCkBAIC0xNyw5ICsxNyw5IEBACiB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHZ2OwogICAgIFJFUVVJUkUoIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHZ2KSA9PSAieyAgfSIgKTsKLSAgICB2di5lbXBsYWNlX2JhY2soICJoZWxsbyIgKTsKKyAgICB2di5wdXNoX2JhY2soICJoZWxsbyIgKTsKICAgICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh2dikgPT0gInsgXCJoZWxsb1wiIH0iICk7Ci0gICAgdnYuZW1wbGFjZV9iYWNrKCAid29ybGQiICk7CisgICAgdnYucHVzaF9iYWNrKCAid29ybGQiICk7CiAgICAgUkVRVUlSRSggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodnYpID09ICJ7IFwiaGVsbG9cIiwgXCJ3b3JsZFwiIH0iICk7CiB9CiAKQEAgLTgzLDQgKzgzLDQgQEAKICAgICBSRVFVSVJFKCBDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIG9uZVZhbHVlICkgPT0gInsgNDIgfSIgKTsKICAgICBzdGQ6OmFycmF5PGludCwgMj4gdHdvVmFsdWVzID0ge3sgNDIsIDI1MCB9fTsKICAgICBSRVFVSVJFKCBDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIHR3b1ZhbHVlcyApID09ICJ7IDQyLCAyNTAgfSIgKTsKLX0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL1RyaWNreS50ZXN0cy5jcHAgYi9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL1RyaWNreS50ZXN0cy5jcHAKaW5kZXggODQ2N2U1NC4uNzdiYWQyZiAxMDA2NDQKLS0tIGEvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9Ucmlja3kudGVzdHMuY3BwCisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvVHJpY2t5LnRlc3RzLmNwcApAQCAtMTcsNyArMTcsNyBAQAogCiAjaW5jbHVkZSAiY2F0Y2guaHBwIgogCi0jaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDxpb3N0cmVhbT4KIApAQCAtMzk0LDYgKzM5NCwxMiBAQAogICAgIH0KIH0KIAorVEVTVF9DQVNFKCAibnVsbCBkZXJlZiIsICJbLl1bZmFpbGluZ11bIW5vbnBvcnRhYmxlXSIgKSB7CisgICAgQ0hFQ0soIGZhbHNlICk7CisgICAgaW50ICp4ID0gTlVMTDsKKyAgICAqeCA9IDE7Cit9CisKIFRFU1RfQ0FTRSggIm5vbi1jb3B5YWJsZSBvYmplY3RzIiwgIlsuXVtmYWlsaW5nXSIgKSB7CiAjaWYgQ0hFQ0tfQ09ORklHX1VTRV9SVFRJCiAgICAgLy8gVGhhbmtzIHRvIEFndXN0aW4gQmVyZ8OpIChAay1iYWxsbyBvbiB0aGUgY3BwbGFuZyBTbGFjaykgZm9yIHJhaXNpbmcgdGhpcwpAQCAtNDAyLDYgKzQwOCwzMiBAQAogI2VuZGlmCiB9CiAKKy8vICM5MjUKK3VzaW5nIHNpZ25hbF90ID0gdm9pZCAoKikgKHZvaWQqKTsKKworc3RydWN0IFRlc3RDbGFzcyB7CisgICAgc2lnbmFsX3QgdGVzdE1ldGhvZF91cG9uQ29tcGxldGVfYXJnID0gbnVsbHB0cjsKK307CisKK25hbWVzcGFjZSB1dGlsaXR5IHsKKyAgICBpbmxpbmUgc3RhdGljIHZvaWQgc3luY2hyb25pemluZ19jYWxsYmFjayggdm9pZCAqICkgeyB9Cit9CisKK1RFU1RfQ0FTRSgiIzkyNTogY29tcGFyaW5nIGZ1bmN0aW9uIHBvaW50ZXIgdG8gZnVuY3Rpb24gYWRkcmVzcyBmYWlsZWQgdG8gY29tcGlsZSIsICJbIW5vbnBvcnRhYmxlXSIgKSB7CisKKyAgICBUZXN0Q2xhc3MgdGVzdDsKKyAgICBSRVFVSVJFKHV0aWxpdHk6OnN5bmNocm9uaXppbmdfY2FsbGJhY2sgIT0gdGVzdC50ZXN0TWV0aG9kX3Vwb25Db21wbGV0ZV9hcmcpOworfQorCitURVNUX0NBU0UoICJCaXRmaWVsZHMgY2FuIGJlIGNhcHR1cmVkICgjMTAyNykiICkgeworICAgIHN0cnVjdCBZIHsKKyAgICAgICAgdWludDMyX3QgdiA6IDE7CisgICAgfTsKKyAgICBZIHl7IDAgfTsKKyAgICBSRVFVSVJFKCB5LnYgPT0gMCApOworICAgIFJFUVVJUkUoIDAgPT0geS52ICk7Cit9CisKIFRFU1RfQ0FTRSgiIzE1MTQ6IHN0ZGVyci9zdGRvdXQgaXMgbm90IGNhcHR1cmVkIGluIHRlc3RzIGFib3J0ZWQgYnkgYW4gZXhjZXB0aW9uIiwgIltvdXRwdXQtY2FwdHVyZV1bcmVncmVzc2lvbl1bLl0iKSB7CiAgICAgc3RkOjpjb3V0IDw8ICJUaGlzIHdvdWxkIG5vdCBiZSBjYXVnaHQgcHJldmlvdXNseVxuIiA8PCBzdGQ6OmZsdXNoOwogICAgIHN0ZDo6Y2xvZyA8PCAiTm9yIHdvdWxkIHRoaXNcbiIgPDwgc3RkOjpmbHVzaDsKZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L1dhcm5BYm91dE5vVGVzdHMuY21ha2UgYi9wcm9qZWN0cy9TZWxmVGVzdC9XYXJuQWJvdXROb1Rlc3RzLmNtYWtlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjM3ZTNmLi4wMDAwMDAwCi0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L1dhcm5BYm91dE5vVGVzdHMuY21ha2UKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIFdvcmthcm91bmQgZm9yIGEgcGVjdWxpYXJpdHkgd2hlcmUgQ1Rlc3QgZGlzcmVnYXJkcyB0aGUgcmV0dXJuIGNvZGUgZnJvbSBhCi0jIHRlc3QgY29tbWFuZCBpZiBhIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OIGlzIGFsc28gc2V0Ci1leGVjdXRlX3Byb2Nlc3MoCi0gICAgQ09NTUFORCAke0NNQUtFX0FSR1YzfSAtdyBOb1Rlc3RzICJfX19ub25leGlzdGVudF90ZXN0X19fIgotICAgIFJFU1VMVF9WQVJJQUJMRSByZXQKLSAgICBPVVRQVVRfVkFSSUFCTEUgb3V0Ci0pCi0KLW1lc3NhZ2UoIiR7b3V0fSIpCi0KLWlmKE5PVCAke3JldH0gTUFUQ0hFUyAiXlswLTldKyQiKQotICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIiR7cmV0fSIpCi1lbmRpZigpCi0KLWlmKCR7cmV0fSBFUVVBTCAwKQotICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkV4cGVjdGVkIG5vbnplcm8gcmV0dXJuIGNvZGUiKQotZWxzZWlmKCR7b3V0fSBNQVRDSEVTICJIZWxwZXIgZmFpbGVkIHdpdGgiKQotICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkhlbHBlciBmYWlsZWQiKQotZW5kaWYoKQpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvV2hlcmUgZGlkIHRoZSBwcm9qZWN0cyBnby50eHQgYi9wcm9qZWN0cy9XaGVyZSBkaWQgdGhlIHByb2plY3RzIGdvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2IwMTFkCi0tLSAvZGV2L251bGwKKysrIGIvcHJvamVjdHMvV2hlcmUgZGlkIHRoZSBwcm9qZWN0cyBnby50eHQKQEAgLTAsMCArMSwxMyBAQAorVGhlIGNhbm9uaWNhbCBwcm9qZWN0IGZvcm1hdCBpcyBub3cgQ01ha2UuCitUbyBnZW5lcmF0ZSBhbiBYQ29kZSBvciBWaXN1YWwgU3R1ZGlvIHByb2plY3QgeW91J2xsIG5lZWQgQ01ha2UsIHdoaWNoIHlvdSBjYW4gZG93bmxvYWQgZnJvbSBodHRwczovL2NtYWtlLm9yZyBpZiBuZWNlc3NhcnkuCisKK1RvIGdlbmVyYXRlIHRoZSBwcm9qZWN0IGZpbGVzIG9wZW4gYSB0ZXJtaW5hbC8gY29uc29sZSB3aXRoaW4gdGhlIHByb2plY3RzIGRpcmVjdG9yeSAod2hlcmUgdGhpcyBmaWxlIGlzIGxvY2F0ZWQpLCBjcmVhdGUgYSBkaXJlY3RvcnkgY2FsbGVkICJHZW5lcmF0ZWQiICh1c2luZyBta2RpciBvciBtZCksIGNkIGludG8gaXQsIHRoZW4gdHlwZToKKworQ01ha2UgLUcgPHByb2plY3QgZm9ybWF0PiAuLi8uLgorCitXaGVyZSA8cHJvamVjdCBmb3JtYXQ+IGlzIFhDb2RlIGZvciBYQ29kZSBwcm9qZWN0cywgb3IgIlZpc3VhbCBTdHVkaW8gMTQiIGZvciBWaXN1YWwgU3R1ZGlvIDIwMTUgKHJlcGxhY2UgMTQgd2l0aCB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgZm9yIGFueSBvdGhlciBzdXBwb3J0ZWQgVmlzdWFsIFN0dWRpbyB2ZXJzaW9uIC0gb3IgZXhlY3V0ZSBDTWFrZSAtaGVscCBmb3IgdGhlIGZ1bGwgbGlzdCkKKworUmVtZW1iZXIgdG8gcmUtcnVuIENNYWtlIGFueSB0aW1lIHlvdSBwdWxsIGZyb20gR2l0SHViLgorTm90ZSB0aGF0IHRoZSBwcm9qZWN0cy9HZW5lcmF0ZWQgZm9sZGVyIGlzIGV4Y2x1ZGVkIGluIC5naXRpZ25vcmUuIFNvIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzLgorCitDTWFrZSBjYW4gYWxzbyBnZW5lcmF0ZSBtYWtlIGZpbGVzIG9yIHByb2plY3RzIGZvciBvdGhlciBidWlsZCBzeXN0ZW1zLiBSdW4gQ01ha2UgLWhlbHAgZm9yIHRoZSBmdWxsIHNldCBvZiBvcHRpb25zLgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9hcHByb3ZhbFRlc3RzLnB5IGIvc2NyaXB0cy9hcHByb3ZhbFRlc3RzLnB5CmluZGV4IDgzOGExYTcuLmJiMDFlNmQgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvYXBwcm92YWxUZXN0cy5weQorKysgYi9zY3JpcHRzL2FwcHJvdmFsVGVzdHMucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24zCisjIS91c3IvYmluL2VudiBweXRob24KIAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgogCkBAIC0yOSw3ICsyOSw2IEBACiBsaW5lTnVtYmVyUGFyc2VyID0gcmUuY29tcGlsZShyJyBsaW5lPSJbMC05XSoiJykKIGhleFBhcnNlciA9IHJlLmNvbXBpbGUocidcYigwW3hYXVswLTlhLWZBLUZdKylcYicpCiBkdXJhdGlvbnNQYXJzZXIgPSByZS5jb21waWxlKHInIHRpbWU9IlswLTldKlwuWzAtOV0qIicpCi1zb25hcnF1YmVEdXJhdGlvblBhcnNlciA9IHJlLmNvbXBpbGUocicgZHVyYXRpb249IlswLTldKyInKQogdGltZXN0YW1wc1BhcnNlciA9IHJlLmNvbXBpbGUocidcZHs0fS1cZHsyfS1cZHsyfVRcZHsyfVw6XGR7Mn1cOlxkezJ9WicpCiB2ZXJzaW9uUGFyc2VyID0gcmUuY29tcGlsZShyJ0NhdGNoIHZbMC05XStcLlswLTldK1wuWzAtOV0rKC1kZXZlbG9wXC5bMC05XSspPycpCiBudWxsUGFyc2VyID0gcmUuY29tcGlsZShyJ1xiKF9fbnVsbHxudWxscHRyKVxiJykKQEAgLTEzOSw3ICsxMzgsNiBAQAogCiAgICAgIyBzdHJpcCBkdXJhdGlvbnMgYW5kIHRpbWVzdGFtcHMKICAgICBsaW5lID0gZHVyYXRpb25zUGFyc2VyLnN1YignIHRpbWU9IntkdXJhdGlvbn0iJywgbGluZSkKLSAgICBsaW5lID0gc29uYXJxdWJlRHVyYXRpb25QYXJzZXIuc3ViKCcgZHVyYXRpb249IntkdXJhdGlvbn0iJywgbGluZSkKICAgICBsaW5lID0gdGltZXN0YW1wc1BhcnNlci5zdWIoJ3tpc284NjAxLXRpbWVzdGFtcH0nLCBsaW5lKQogICAgIGxpbmUgPSBzcGVjaWFsQ2FzZVBhcnNlci5zdWIoJ2ZpbGU6XGc8MT4nLCBsaW5lKQogICAgIGxpbmUgPSBlcnJub1BhcnNlci5zdWIoJ2Vycm5vJywgbGluZSkKQEAgLTIwNiw4ICsyMDQsNiBAQAogYXBwcm92ZSgieG1sLnN3IiwgWyJ+WyFub25wb3J0YWJsZV1+WyFiZW5jaG1hcmtdflthcHByb3ZhbHNdIiwgIi1zIiwgIi13IiwgIk5vQXNzZXJ0aW9ucyIsICItciIsICJ4bWwiLCAiLS1vcmRlciIsICJsZXgiLCAiLS1ybmctc2VlZCIsICIxIl0pCiAjIGNvbXBhY3QgcmVwb3J0ZXIsIGluY2x1ZGUgcGFzc2VzLCB3YXJuIGFib3V0IE5vIEFzc2VydGlvbnMKIGFwcHJvdmUoJ2NvbXBhY3Quc3cnLCBbJ35bIW5vbnBvcnRhYmxlXX5bIWJlbmNobWFya11+W2FwcHJvdmFsc10nLCAnLXMnLCAnLXcnLCAnTm9Bc3NlcnRpb25zJywgJy1yJywgJ2NvbXBhY3QnLCAnLS1vcmRlcicsICdsZXgnLCAiLS1ybmctc2VlZCIsICIxIl0pCi0jIHNvbmFycXViZSByZXBvcnRlciwgaW5jbHVkZSBwYXNzZXMsIHdhcm4gYWJvdXQgTm8gQXNzZXJ0aW9ucwotYXBwcm92ZSgic29uYXJxdWJlLnN3IiwgWyJ+WyFub25wb3J0YWJsZV1+WyFiZW5jaG1hcmtdflthcHByb3ZhbHNdIiwgIi1zIiwgIi13IiwgIk5vQXNzZXJ0aW9ucyIsICItciIsICJzb25hcnF1YmUiLCAiLS1vcmRlciIsICJsZXgiLCAiLS1ybmctc2VlZCIsICIxIl0pCiAKIGlmIG92ZXJhbGxSZXN1bHQgIT0gMDoKICAgICBwcmludCgiSWYgdGhlc2UgZGlmZmVyZW5jZXMgYXJlIGV4cGVjdGVkLCBydW4gYXBwcm92ZS5weSB0byBhcHByb3ZlIG5ldyBiYXNlbGluZXMuIikKZGlmZiAtLWdpdCBhL3NjcmlwdHMvYXBwcm92ZS5weSBiL3NjcmlwdHMvYXBwcm92ZS5weQppbmRleCAxZTBkNWE3Li5mMDM0MTdkIDEwMDc1NQotLS0gYS9zY3JpcHRzL2FwcHJvdmUucHkKKysrIGIvc2NyaXB0cy9hcHByb3ZlLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAKIGZyb20gIF9fZnV0dXJlX18gaW1wb3J0ICBwcmludF9mdW5jdGlvbgogCmRpZmYgLS1naXQgYS9zY3JpcHRzL2JlbmNobWFya0NvbXBpbGUucHkgYi9zY3JpcHRzL2JlbmNobWFya0NvbXBpbGUucHkKaW5kZXggMzQxMTNiOS4uNTg2YzI2YSAxMDA3NTUKLS0tIGEvc2NyaXB0cy9iZW5jaG1hcmtDb21waWxlLnB5CisrKyBiL3NjcmlwdHMvYmVuY2htYXJrQ29tcGlsZS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZGV2ZWxvcEJ1aWxkLnB5IGIvc2NyaXB0cy9kZXZlbG9wQnVpbGQucHkKaW5kZXggOTI1MmM3ZC4uYTgxMTVmZSAxMDA3NTUKLS0tIGEvc2NyaXB0cy9kZXZlbG9wQnVpbGQucHkKKysrIGIvc2NyaXB0cy9kZXZlbG9wQnVpbGQucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24zCisjIS91c3IvYmluL2VudiBweXRob24KIAogZnJvbSAgX19mdXR1cmVfXyBpbXBvcnQgIHByaW50X2Z1bmN0aW9uCiBpbXBvcnQgcmVsZWFzZUNvbW1vbgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9lbWJlZENsYXJhLnB5IGIvc2NyaXB0cy9lbWJlZENsYXJhLnB5CmluZGV4IGQ4YzE1MjAuLjdjZWIzZTMgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvZW1iZWRDbGFyYS5weQorKysgYi9zY3JpcHRzL2VtYmVkQ2xhcmEucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24zCisjIS91c3IvYmluL2VudiBweXRob24KIAogIyBFeGVjdXRlIHRoaXMgc2NyaXB0IGFueSB0aW1lIHlvdSBpbXBvcnQgYSBuZXcgY29weSBvZiBDbGFyYSBpbnRvIHRoZSB0aGlyZF9wYXJ0eSBhcmVhCiBpbXBvcnQgb3MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZXh0cmFjdEZlYXR1cmVzRnJvbVJlbGVhc2VOb3Rlcy5weSBiL3NjcmlwdHMvZXh0cmFjdEZlYXR1cmVzRnJvbVJlbGVhc2VOb3Rlcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFmNDk1NS4uMDAwMDAwMAotLS0gYS9zY3JpcHRzL2V4dHJhY3RGZWF0dXJlc0Zyb21SZWxlYXNlTm90ZXMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24zCi0KLSMKLSMgZXh0cmFjdEZlYXR1cmVzRnJvbVJlbGVhc2VOb3Rlcy5weQotIwotIyBSZWFkIHRoZSByZWxlYXNlIG5vdGVzIC0gZG9jcy9yZWxlYXNlLW5vdGVzLm1kIC0gYW5kIGdlbmVyYXRlIHRleHQKLSMgZm9yIHBhc3RpbmcgaW4gdG8gaW5kaXZpZHVhbCBkb2N1bWVudGF0aW9uIHBhZ2VzLCB0byBpbmRpY2F0ZSB3aGljaAotIyB2ZXJzaW9ucyByZWNlbnQgZmVhdHVyZXMgd2VyZSByZWxlYXNlZCBpbi4KLSMKLSMgVXNpbmcgdGhlIG91dHB1dCBvZiB0aGUgZmlsZSBpcyBlYXNpZXIgdGhhbiBtYW51YWxseSBjb25zdHJ1Y3RpbmcKLSMgdGhlIHRleHQgdG8gcGFzdGUgaW4gdG8gZG9jdW1lbnRhdGlvbiBwYWdlcy4KLSMKLSMgT25lIHdheSB0byB1c2UgdGhpczoKLSMgLSBydW4gdGhpcyBzY3JpcHQsIHNhdmluZyB0aGUgb3V0cHV0IHRvIHNvbWUgdGVtcG9yYXJ5IGZpbGUKLSMgLSBkaWZmIHRoaXMgb3V0cHV0IHdpdGggdGhlIGFjdHVhbCByZWxlYXNlIG5vdGVzIHBhZ2UKLSMgLSB0aGUgZGlmZmVyZW5jZXMgYXJlIE1hcmtkb3duIHRleHQgdGhhdCBjYW4gYmUgcGFzdGVkIGluIHRvIHRoZQotIyAgIGFwcHJvcHJpYXRlIGRvY3VtZW50YXRpb24gcGFnZXMgaW4gdGhlIGRvY3MvIGRpcmVjdG9yeS4KLSMgLSBlYWNoIHJlbGVhc2UgYWxzbyBoYXMgYSBnaXRodWIgbGluayB0byBzaG93IHdoaWNoIGRvY3VtZW50YXRpb24gZmlsZXMKLSMgICB3ZXJlIGNoYW5nZWQgaW4gaXQuCi0jICAgVGhpcyBjYW4gYmUgaGVscGZ1bCB0byBzZWUgd2hpY2ggZG9jdW1lbnRhdGlvbiBwYWdlcwotIyAgIHRvIGFkZCB0aGUgJ0ludHJvZHVjZWQgaW4gQ2F0Y2ggLi4uJyBzbmlwcGV0cyB0byB0aGUgcmVsZXZhbnQgcGFnZXMuCi0jCi0KLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KLQotaW1wb3J0IHJlCi0KLQotZGVmIGNyZWF0ZV9pbnRyb2R1Y2VkX2luX3RleHQodmVyc2lvbiwgYnVnX251bWJlciA9IE5vbmUpOgotICAgICIiIkdlbmVyYXRlIHRleHQgdG8gcGFzdGUgaW4gdG8gZG9jdW1lbnRhdGlvbiBmaWxlIiIiCi0gICAgaWYgYnVnX251bWJlcjoKLSAgICAgICAgcmV0dXJuICc+IFtJbnRyb2R1Y2VkXShodHRwczovL2dpdGh1Yi5jb20vY2F0Y2hvcmcvQ2F0Y2gyL2lzc3Vlcy8lcykgaW4gQ2F0Y2ggJXMuJyAlIChidWdfbnVtYmVyLCB2ZXJzaW9uKQotICAgIGVsc2U6Ci0gICAgICAgICMgVXNlIHRoaXMgdGV4dCBmb3IgY2hhbmdlcyB0aGF0IGRvbid0IGhhdmUgaXNzdWUgbnVtYmVycwotICAgICAgICByZXR1cm4gJz4gSW50cm9kdWNlZCBpbiBDYXRjaCAlcy4nICUgdmVyc2lvbgotCi0KLWRlZiBsaW5rX3RvX2NoYW5nZXNfaW5fcmVsZWFzZShyZWxlYXNlLCByZWxlYXNlcyk6Ci0gICAgIiIiCi0gICAgTWFya2Rvd24gdGV4dCBmb3IgYSBoeXBlcmxpbmsgc2hvd2luZyBhbGwgZWRpdHMgaW4gYSByZWxlYXNlLCBvciBlbXB0eSBzdHJpbmcKLQotICAgIDpwYXJhbSByZWxlYXNlOiBBIHJlbGVhc2UgdmVyc2lvbiwgYXMgYSBzdHJpbmcgCi0gICAgOnBhcmFtIHJlbGVhc2VzOiBBIGNvbnRhaW5lciBvZiByZWxlYXNlcywgaW4gZGVzY2VuZGluZyBvcmRlciAtIG5ld2VzdCB0byBvbGRlc3QKLSAgICA6cmV0dXJuOiBNYXJrZG93biB0ZXh0IGZvciBhIGh5cGVybGluayBzaG93aW5nIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBnaXZlIHJlbGVhc2UgYW5kIHRoZSBwcmlvciBvbmUsCi0gICAgICAgICAgICAgb3IgZW1wdHkgc3RyaW5nLCBpZiB0aGUgcHJldmlvdXMgcmVsZWFzZSBpcyBub3Qga25vd24KLSAgICAiIiIKLQotICAgIGlmIHJlbGVhc2UgPT0gcmVsZWFzZXNbLTFdOgotICAgICAgICAjIFRoaXMgaXMgdGhlIGVhcmxpZXN0IHJlbGVhc2Ugd2Uga25vdyBhYm91dAotICAgICAgICByZXR1cm4gJycKLSAgICBpbmRleCA9IHJlbGVhc2VzLmluZGV4KHJlbGVhc2UpCi0gICAgcHJldmlvdXNfcmVsZWFzZSA9IHJlbGVhc2VzW2luZGV4ICsgMV0KLSAgICByZXR1cm4gJ1xuW0NoYW5nZXMgaW4gJXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9jYXRjaG9yZy9DYXRjaDIvY29tcGFyZS92JXMuLi52JXMpJyAlIChyZWxlYXNlLCBwcmV2aW91c19yZWxlYXNlLCByZWxlYXNlKQotCi0KLWRlZiB3cml0ZV9yZWNlbnRfcmVsZWFzZV9ub3Rlc193aXRoX2ludHJvZHVjZWRfdGV4dCgpOgotICAgIGN1cnJlbnRfdmVyc2lvbiA9IE5vbmUKLSAgICByZWxlYXNlX3RvY19yZWdleCA9IHInXFsoXGQuXGQuXGQpXF1cKCNcZCtcKTxicj4nCi0gICAgaXNzdWVfbnVtYmVyX3JlZ2V4ID0gcicjWzAtOV0rJwotICAgIHJlbGVhc2VzID0gW10KLSAgICB3aXRoIG9wZW4oJy4uL2RvY3MvcmVsZWFzZS1ub3Rlcy5tZCcpIGFzIHJlbGVhc2Vfbm90ZXM6Ci0gICAgICAgIGZvciBsaW5lIGluIHJlbGVhc2Vfbm90ZXM6Ci0gICAgICAgICAgICBsaW5lID0gbGluZVs6LTFdCi0gICAgICAgICAgICBwcmludChsaW5lKQotCi0gICAgICAgICAgICAjIEV4dHJhY3QgdmVyc2lvbiBudW1iZXIgZnJvbSB0YWJsZSBvZiBjb250ZW50cwotICAgICAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2gocmVsZWFzZV90b2NfcmVnZXgsIGxpbmUpCi0gICAgICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAgICAgICAgICByZWxlYXNlX25hbWUgPSBtYXRjaC5ncm91cCgxKQotICAgICAgICAgICAgICAgIHJlbGVhc2VzLmFwcGVuZChyZWxlYXNlX25hbWUpCi0KLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnIyMgJyk6Ci0gICAgICAgICAgICAgICAgIyBJdCdzIGEgc2VjdGlvbiB3aXRoIHZlcnNpb24gbnVtYmVyCi0gICAgICAgICAgICAgICAgY3VycmVudF92ZXJzaW9uID0gbGluZS5yZXBsYWNlKCcjIyAnLCAnJykKLQotICAgICAgICAgICAgICAgICMgV2UgZGVjaWRlZCBub3QgdG8gYWRkIHJlbGVhc2VkLWRhdGUgaW5mbyBmb3Igb2xkZXIgdmVyc2lvbnMKLSAgICAgICAgICAgICAgICBpZiBjdXJyZW50X3ZlcnNpb24gPT0gJ09sZGVyIHZlcnNpb25zJzoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLQotICAgICAgICAgICAgICAgIHByaW50KGNyZWF0ZV9pbnRyb2R1Y2VkX2luX3RleHQoY3VycmVudF92ZXJzaW9uKSkKLSAgICAgICAgICAgICAgICBwcmludChsaW5rX3RvX2NoYW5nZXNfaW5fcmVsZWFzZShjdXJyZW50X3ZlcnNpb24sIHJlbGVhc2VzKSkKLQotICAgICAgICAgICAgIyBOb3QgeWV0IGZvdW5kIGEgdmVyc2lvbiBudW1iZXIsIHNvIHRvIGF2b2lkIHBpY2tpbmcgdXAgaHlwZXJsaW5rcyB0bwotICAgICAgICAgICAgIyB2ZXJzaW9uIG51bWJlcnMgaW4gdGhlIGluZGV4LCBrZWVwIGdvaW5nCi0gICAgICAgICAgICBpZiBub3QgY3VycmVudF92ZXJzaW9uOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIGZvciBidWdfbGluayBpbiByZS5maW5kYWxsKGlzc3VlX251bWJlcl9yZWdleCwgbGluZSk6Ci0gICAgICAgICAgICAgICAgYnVnX251bWJlciA9IGJ1Z19saW5rLnJlcGxhY2UoJyMnLCAnJykKLSAgICAgICAgICAgICAgICBwcmludChjcmVhdGVfaW50cm9kdWNlZF9pbl90ZXh0KGN1cnJlbnRfdmVyc2lvbiwgYnVnX251bWJlcikpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB3cml0ZV9yZWNlbnRfcmVsZWFzZV9ub3Rlc193aXRoX2ludHJvZHVjZWRfdGV4dCgpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2ZpeFdoaXRlc3BhY2UucHkgYi9zY3JpcHRzL2ZpeFdoaXRlc3BhY2UucHkKaW5kZXggNDU5MWMxYy4uYmZhNGFhMCAxMDA3NTUKLS0tIGEvc2NyaXB0cy9maXhXaGl0ZXNwYWNlLnB5CisrKyBiL3NjcmlwdHMvZml4V2hpdGVzcGFjZS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogCiBmcm9tICBfX2Z1dHVyZV9fIGltcG9ydCAgcHJpbnRfZnVuY3Rpb24KIGltcG9ydCBvcwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZW5lcmF0ZVNpbmdsZUhlYWRlci5weSBiL3NjcmlwdHMvZ2VuZXJhdGVTaW5nbGVIZWFkZXIucHkKaW5kZXggZmZkMTE3OC4uMzEwMzNkNiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9nZW5lcmF0ZVNpbmdsZUhlYWRlci5weQorKysgYi9zY3JpcHRzL2dlbmVyYXRlU2luZ2xlSGVhZGVyLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIApAQCAtMjMsNyArMjMsNiBAQAogICAgIGJsYW5rUGFyc2VyID0gcmUuY29tcGlsZSggcideXHMqJCcpCiAKICAgICBzZWVuSGVhZGVycyA9IHNldChbXSkKLSAgICBwb3NzaWJsZUhlYWRlcnMgPSBzZXQoW10pCiAgICAgcm9vdFBhdGggPSBvcy5wYXRoLmpvaW4oIGNhdGNoUGF0aCwgJ2luY2x1ZGUvJyApCiAgICAgb3V0cHV0UGF0aCA9IG9zLnBhdGguam9pbiggY2F0Y2hQYXRoLCAnc2luZ2xlX2luY2x1ZGUvY2F0Y2gyL2NhdGNoLmhwcCcgKQogCkBAIC01MywyMCArNTIsOCBAQAogICAgICAgICBpZiBnbG9iYWxzWydpbmNsdWRlSW1wbCddIG9yIGdsb2JhbHNbJ2ltcGxJZkRlZnMnXSA9PSAtMToKICAgICAgICAgICAgIG91dC53cml0ZSggbGluZSApCiAKLSAgICBkZWYgZ2V0RGlyc1RvU2VhcmNoKCApOgotICAgICAgICByZXR1cm4gW29zLnBhdGguam9pbiggcm9vdFBhdGgsIHMpIGZvciBzIGluIFsnJywgJ2ludGVybmFsJywgJ3JlcG9ydGVycycsICdpbnRlcm5hbC9iZW5jaG1hcmsnLCAnaW50ZXJuYWwvYmVuY2htYXJrL2RldGFpbCddXQotCi0gICAgZGVmIGNvbGxlY3RQb3NzaWJsZUhlYWRlcnMoKToKLSAgICAgICAgZGlycyA9IGdldERpcnNUb1NlYXJjaCgpCi0gICAgICAgIGZvciBkaXIgaW4gZGlyczoKLSAgICAgICAgICAgIGhwcHMgPSBnbG9iKG9zLnBhdGguam9pbihkaXIsICcqLmhwcCcpKQotICAgICAgICAgICAgaHMgPSBnbG9iKG9zLnBhdGguam9pbihkaXIsICcqLmgnKSkKLSAgICAgICAgICAgIHBvc3NpYmxlSGVhZGVycy51cGRhdGUoIGhwcC5ycGFydGl0aW9uKCBvcy5zZXAgKVsyXSBmb3IgaHBwIGluIGhwcHMgKQotICAgICAgICAgICAgcG9zc2libGVIZWFkZXJzLnVwZGF0ZSggaC5ycGFydGl0aW9uKCBvcy5zZXAgKVsyXSBmb3IgaCBpbiBocyApCi0KLQogICAgIGRlZiBpbnNlcnRDcHBzKCk6Ci0gICAgICAgIGRpcnMgPSBnZXREaXJzVG9TZWFyY2goKQorICAgICAgICBkaXJzID0gW29zLnBhdGguam9pbiggcm9vdFBhdGgsIHMpIGZvciBzIGluIFsnJywgJ2ludGVybmFsJywgJ3JlcG9ydGVycyddXQogICAgICAgICBjcHBGaWxlcyA9IFtdCiAgICAgICAgIGZvciBkaXIgaW4gZGlyczoKICAgICAgICAgICAgIGNwcEZpbGVzICs9IGdsb2Iob3MucGF0aC5qb2luKGRpciwgJyouY3BwJykpCkBAIC0xMTYsMTMgKzEwMyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSggbGluZS5yc3RyaXAoKSArICJcbiIgKQogICAgICAgICB3cml0ZSggdScvLyBlbmQge31cbicuZm9ybWF0KGZpbGVuYW1lKSApCiAKLSAgICBkZWYgd2FyblVucGFyc2VkSGVhZGVycygpOgotICAgICAgICB1bnBhcnNlZEhlYWRlcnMgPSBwb3NzaWJsZUhlYWRlcnMuZGlmZmVyZW5jZSggc2VlbkhlYWRlcnMgKQotICAgICAgICAjIFRoZXNlIGhlYWRlcnMgYXJlbid0IHBhY2thZ2VkIGludG8gdGhlIHVuaWZpZWQgaGVhZGVyLCBleGNsdWRlIHRoZW0gZnJvbSBhbnkgd2FybmluZwotICAgICAgICB3aGl0ZWxpc3QgPSBbJ2NhdGNoLmhwcCcsICdjYXRjaF9yZXBvcnRlcl90ZWFtY2l0eS5ocHAnLCAnY2F0Y2hfd2l0aF9tYWluLmhwcCcsICdjYXRjaF9yZXBvcnRlcl9hdXRvbWFrZS5ocHAnLCAnY2F0Y2hfcmVwb3J0ZXJfdGFwLmhwcCcsICdjYXRjaF9yZXBvcnRlcl9zb25hcnF1YmUuaHBwJ10KLSAgICAgICAgdW5wYXJzZWRIZWFkZXJzID0gdW5wYXJzZWRIZWFkZXJzLmRpZmZlcmVuY2UoIHdoaXRlbGlzdCApCi0gICAgICAgIGlmIHVucGFyc2VkSGVhZGVyczoKLSAgICAgICAgICAgIHByaW50KCAiV0FSTklORzogdW5wYXJzZWQgaGVhZGVycyBkZXRlY3RlZFxuezB9XG4iLmZvcm1hdCggdW5wYXJzZWRIZWFkZXJzICkgKQogCiAgICAgd3JpdGUoIHUiLypcbiIgKQogICAgIHdyaXRlKCB1IiAqICBDYXRjaCB2ezB9XG4iLmZvcm1hdCggdi5nZXRWZXJzaW9uU3RyaW5nKCkgKSApCkBAIC0xMzcsMTMgKzExNywxMSBAQAogICAgIHdyaXRlKCB1IiNpZm5kZWYgVFdPQkxVRUNVQkVTX1NJTkdMRV9JTkNMVURFX0NBVENIX0hQUF9JTkNMVURFRFxuIiApCiAgICAgd3JpdGUoIHUiI2RlZmluZSBUV09CTFVFQ1VCRVNfU0lOR0xFX0lOQ0xVREVfQ0FUQ0hfSFBQX0lOQ0xVREVEXG4iICkKIAotICAgIGNvbGxlY3RQb3NzaWJsZUhlYWRlcnMoKQogICAgIHBhcnNlRmlsZSggcm9vdFBhdGgsICdjYXRjaC5ocHAnICkKLSAgICB3YXJuVW5wYXJzZWRIZWFkZXJzKCkKIAogICAgIHdyaXRlKCB1IiNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfU0lOR0xFX0lOQ0xVREVfQ0FUQ0hfSFBQX0lOQ0xVREVEXG5cbiIgKQogICAgIG91dC5jbG9zZSgpCi0gICAgcHJpbnQoICJHZW5lcmF0ZWQgc2luZ2xlIGluY2x1ZGUgZm9yIENhdGNoIHZ7MH1cbiIuZm9ybWF0KCB2LmdldFZlcnNpb25TdHJpbmcoKSApICkKKyAgICBwcmludCAoIkdlbmVyYXRlZCBzaW5nbGUgaW5jbHVkZSBmb3IgQ2F0Y2ggdnswfVxuIi5mb3JtYXQoIHYuZ2V0VmVyc2lvblN0cmluZygpICkgKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9zY3JpcHRzL21ham9yUmVsZWFzZS5weSBiL3NjcmlwdHMvbWFqb3JSZWxlYXNlLnB5CmluZGV4IGU5ZTI4NWEuLjhkYTM0MDYgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvbWFqb3JSZWxlYXNlLnB5CisrKyBiL3NjcmlwdHMvbWFqb3JSZWxlYXNlLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAKIGZyb20gIF9fZnV0dXJlX18gaW1wb3J0ICBwcmludF9mdW5jdGlvbgogaW1wb3J0IHJlbGVhc2VDb21tb24KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWlub3JSZWxlYXNlLnB5IGIvc2NyaXB0cy9taW5vclJlbGVhc2UucHkKaW5kZXggMmI1N2MyZS4uNmU3MWNkOCAxMDA3NTUKLS0tIGEvc2NyaXB0cy9taW5vclJlbGVhc2UucHkKKysrIGIvc2NyaXB0cy9taW5vclJlbGVhc2UucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24zCisjIS91c3IvYmluL2VudiBweXRob24KIAogZnJvbSAgX19mdXR1cmVfXyBpbXBvcnQgIHByaW50X2Z1bmN0aW9uCiBpbXBvcnQgcmVsZWFzZUNvbW1vbgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYXRjaFJlbGVhc2UucHkgYi9zY3JpcHRzL3BhdGNoUmVsZWFzZS5weQppbmRleCBkMjBkYjcxLi4xNDE3NjQyIDEwMDc1NQotLS0gYS9zY3JpcHRzL3BhdGNoUmVsZWFzZS5weQorKysgYi9zY3JpcHRzL3BhdGNoUmVsZWFzZS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogCiBmcm9tICBfX2Z1dHVyZV9fIGltcG9ydCAgcHJpbnRfZnVuY3Rpb24KIGltcG9ydCByZWxlYXNlQ29tbW9uCmRpZmYgLS1naXQgYS9zY3JpcHRzL3JlbGVhc2VDb21tb24ucHkgYi9zY3JpcHRzL3JlbGVhc2VDb21tb24ucHkKaW5kZXggMjgzMzM3ZC4uOWNkYzRmNiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9yZWxlYXNlQ29tbW9uLnB5CisrKyBiL3NjcmlwdHMvcmVsZWFzZUNvbW1vbi5weQpAQCAtNCw4ICs0LDYgQEAKIGltcG9ydCBzeXMKIGltcG9ydCByZQogaW1wb3J0IHN0cmluZwotaW1wb3J0IGdsb2IKLWltcG9ydCBmbm1hdGNoCiAKIGZyb20gc2NyaXB0Q29tbW9uIGltcG9ydCBjYXRjaFBhdGgKIApAQCAtMTAwLDQ3ICs5OCwyOSBAQAogCiAKIGRlZiB1cGRhdGVDbWFrZUZpbGUodmVyc2lvbik6Ci0gICAgd2l0aCBvcGVuKGNtYWtlUGF0aCwgJ3JiJykgYXMgZmlsZToKKyAgICB3aXRoIG9wZW4oY21ha2VQYXRoLCAncicpIGFzIGZpbGU6CiAgICAgICAgIGxpbmVzID0gZmlsZS5yZWFkbGluZXMoKQotICAgIHJlcGxhY2VtZW50UmVnZXggPSByZS5jb21waWxlKGIncHJvamVjdFxcKENhdGNoMiBMQU5HVUFHRVMgQ1hYIFZFUlNJT04gXFxkK1xcLlxcZCtcXC5cXGQrXFwpJykKLSAgICByZXBsYWNlbWVudCA9ICdwcm9qZWN0KENhdGNoMiBMQU5HVUFHRVMgQ1hYIFZFUlNJT04gezB9KScuZm9ybWF0KHZlcnNpb24uZ2V0VmVyc2lvblN0cmluZygpKS5lbmNvZGUoJ2FzY2lpJykKLSAgICB3aXRoIG9wZW4oY21ha2VQYXRoLCAnd2InKSBhcyBmaWxlOgorICAgIHdpdGggb3BlbihjbWFrZVBhdGgsICd3JykgYXMgZmlsZToKICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICBmaWxlLndyaXRlKHJlcGxhY2VtZW50UmVnZXguc3ViKHJlcGxhY2VtZW50LCBsaW5lKSkKKyAgICAgICAgICAgIGlmICdwcm9qZWN0KENhdGNoMiBMQU5HVUFHRVMgQ1hYIFZFUlNJT04gJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoJ3Byb2plY3QoQ2F0Y2gyIExBTkdVQUdFUyBDWFggVkVSU0lPTiB7MH0pXG4nLmZvcm1hdCh2ZXJzaW9uLmdldFZlcnNpb25TdHJpbmcoKSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZpbGUud3JpdGUobGluZSkKIAogCiBkZWYgdXBkYXRlVmVyc2lvbkRlZmluZSh2ZXJzaW9uKToKLSAgICAjIEZpcnN0IG1lbWJlciBvZiB0aGUgdHVwbGUgaXMgdGhlIGNvbXBpbGVkIHJlZ2V4IG9iamVjdCwgdGhlIHNlY29uZCBpcyByZXBsYWNlbWVudCBpZiBpdCBtYXRjaGVzCi0gICAgcmVwbGFjZW1lbnRSZWdleGVzID0gWyhyZS5jb21waWxlKGInI2RlZmluZSBDQVRDSF9WRVJTSU9OX01BSk9SIFxcZCsnKSwnI2RlZmluZSBDQVRDSF9WRVJTSU9OX01BSk9SIHt9Jy5mb3JtYXQodmVyc2lvbi5tYWpvclZlcnNpb24pLmVuY29kZSgnYXNjaWknKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChyZS5jb21waWxlKGInI2RlZmluZSBDQVRDSF9WRVJTSU9OX01JTk9SIFxcZCsnKSwnI2RlZmluZSBDQVRDSF9WRVJTSU9OX01JTk9SIHt9Jy5mb3JtYXQodmVyc2lvbi5taW5vclZlcnNpb24pLmVuY29kZSgnYXNjaWknKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChyZS5jb21waWxlKGInI2RlZmluZSBDQVRDSF9WRVJTSU9OX1BBVENIIFxcZCsnKSwnI2RlZmluZSBDQVRDSF9WRVJTSU9OX1BBVENIIHt9Jy5mb3JtYXQodmVyc2lvbi5wYXRjaE51bWJlcikuZW5jb2RlKCdhc2NpaScpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBdCi0gICAgd2l0aCBvcGVuKGRlZmluZVBhdGgsICdyYicpIGFzIGZpbGU6CisgICAgd2l0aCBvcGVuKGRlZmluZVBhdGgsICdyJykgYXMgZmlsZToKICAgICAgICAgbGluZXMgPSBmaWxlLnJlYWRsaW5lcygpCi0gICAgd2l0aCBvcGVuKGRlZmluZVBhdGgsICd3YicpIGFzIGZpbGU6CisgICAgd2l0aCBvcGVuKGRlZmluZVBhdGgsICd3JykgYXMgZmlsZToKICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICBmb3IgcmVwbGFjZW1lbnQgaW4gcmVwbGFjZW1lbnRSZWdleGVzOgotICAgICAgICAgICAgICAgIGxpbmUgPSByZXBsYWNlbWVudFswXS5zdWIocmVwbGFjZW1lbnRbMV0sIGxpbmUpCi0gICAgICAgICAgICBmaWxlLndyaXRlKGxpbmUpCi0KLQotZGVmIHVwZGF0ZVZlcnNpb25QbGFjZWhvbGRlcihmaWxlbmFtZSwgdmVyc2lvbik6Ci0gICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncmInKSBhcyBmaWxlOgotICAgICAgICBsaW5lcyA9IGZpbGUucmVhZGxpbmVzKCkKLSAgICBwbGFjZWhvbGRlclJlZ2V4ID0gcmUuY29tcGlsZShiJyBpbiBDYXRjaCBYLlkuWicpCi0gICAgcmVwbGFjZW1lbnQgPSAnIGluIENhdGNoIHt9Lnt9Lnt9Jy5mb3JtYXQodmVyc2lvbi5tYWpvclZlcnNpb24sIHZlcnNpb24ubWlub3JWZXJzaW9uLCB2ZXJzaW9uLnBhdGNoTnVtYmVyKS5lbmNvZGUoJ2FzY2lpJykKLSAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3YicpIGFzIGZpbGU6Ci0gICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgICAgICAgZmlsZS53cml0ZShwbGFjZWhvbGRlclJlZ2V4LnN1YihyZXBsYWNlbWVudCwgbGluZSkpCi0KLQotZGVmIHVwZGF0ZURvY3VtZW50YXRpb25WZXJzaW9uUGxhY2Vob2xkZXJzKHZlcnNpb24pOgotICAgIHByaW50KCdVcGRhdGluZyB2ZXJzaW9uIHBsYWNlaG9sZGVyIGluIGRvY3VtZW50YXRpb24nKQotICAgIGRvY3NQYXRoID0gb3MucGF0aC5qb2luKGNhdGNoUGF0aCwgJ2RvY3MvJykKLSAgICBmb3IgYmFzZVBhdGgsIF8sIGZpbGVzIGluIG9zLndhbGsoZG9jc1BhdGgpOgotICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKLSAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChmaWxlLCAiKi5tZCIpIGFuZCAiY29udHJpYnV0aW5nLm1kIiAhPSBmaWxlOgotICAgICAgICAgICAgICAgIHVwZGF0ZVZlcnNpb25QbGFjZWhvbGRlcihvcy5wYXRoLmpvaW4oYmFzZVBhdGgsIGZpbGUpLCB2ZXJzaW9uKQorICAgICAgICAgICAgaWYgJyNkZWZpbmUgQ0FUQ0hfVkVSU0lPTl9NQUpPUicgaW4gbGluZToKKyAgICAgICAgICAgICAgICBmaWxlLndyaXRlKCcjZGVmaW5lIENBVENIX1ZFUlNJT05fTUFKT1Ige31cbicuZm9ybWF0KHZlcnNpb24ubWFqb3JWZXJzaW9uKSkKKyAgICAgICAgICAgIGVsaWYgJyNkZWZpbmUgQ0FUQ0hfVkVSU0lPTl9NSU5PUicgaW4gbGluZToKKyAgICAgICAgICAgICAgICBmaWxlLndyaXRlKCcjZGVmaW5lIENBVENIX1ZFUlNJT05fTUlOT1Ige31cbicuZm9ybWF0KHZlcnNpb24ubWlub3JWZXJzaW9uKSkKKyAgICAgICAgICAgIGVsaWYgJyNkZWZpbmUgQ0FUQ0hfVkVSU0lPTl9QQVRDSCcgaW4gbGluZToKKyAgICAgICAgICAgICAgICBmaWxlLndyaXRlKCcjZGVmaW5lIENBVENIX1ZFUlNJT05fUEFUQ0gge31cbicuZm9ybWF0KHZlcnNpb24ucGF0Y2hOdW1iZXIpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWxlLndyaXRlKGxpbmUpCiAKIAogZGVmIHBlcmZvcm1VcGRhdGVzKHZlcnNpb24pOgpAQCAtMTU2LDExICsxMzYsMTAgQEAKICAgICAjIFdlIHByb2JhYmx5IHNob3VsZCBoYXZlIHNvbWUga2luZCBvZiBjb252ZW50aW9uIHRvIHNlbGVjdCB3aGljaCByZXBvcnRlcnMgbmVlZCB0byBiZSBjb3BpZWQgYXV0b21hZ2ljYWxseSwKICAgICAjIGJ1dCB0aGlzIHdvcmtzIGZvciBub3cKICAgICBpbXBvcnQgc2h1dGlsCi0gICAgZm9yIHJlcCBpbiAoJ2F1dG9tYWtlJywgJ3RhcCcsICd0ZWFtY2l0eScsICdzb25hcnF1YmUnKToKKyAgICBmb3IgcmVwIGluICgnYXV0b21ha2UnLCAndGFwJywgJ3RlYW1jaXR5Jyk6CiAgICAgICAgIHNvdXJjZUZpbGUgPSBvcy5wYXRoLmpvaW4oY2F0Y2hQYXRoLCAnaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfe30uaHBwJy5mb3JtYXQocmVwKSkKICAgICAgICAgZGVzdEZpbGUgPSBvcy5wYXRoLmpvaW4oY2F0Y2hQYXRoLCAnc2luZ2xlX2luY2x1ZGUnLCAnY2F0Y2gyJywgJ2NhdGNoX3JlcG9ydGVyX3t9LmhwcCcuZm9ybWF0KHJlcCkpCiAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzb3VyY2VGaWxlLCBkZXN0RmlsZSkKIAogICAgIHVwZGF0ZVJlYWRtZUZpbGUodmVyc2lvbikKICAgICB1cGRhdGVDbWFrZUZpbGUodmVyc2lvbikKLSAgICB1cGRhdGVEb2N1bWVudGF0aW9uVmVyc2lvblBsYWNlaG9sZGVycyh2ZXJzaW9uKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9yZWxlYXNlTm90ZXMucHkgYi9zY3JpcHRzL3JlbGVhc2VOb3Rlcy5weQppbmRleCA3ZjU4MGU5Li41ZTc3MGJiIDEwMDc1NQotLS0gYS9zY3JpcHRzL3JlbGVhc2VOb3Rlcy5weQorKysgYi9zY3JpcHRzL3JlbGVhc2VOb3Rlcy5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvdXBkYXRlRG9jdW1lbnRUb0MucHkgYi9zY3JpcHRzL3VwZGF0ZURvY3VtZW50VG9DLnB5CmluZGV4IDQxYjQ4NzUuLjMyNWM4YTMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvdXBkYXRlRG9jdW1lbnRUb0MucHkKKysrIGIvc2NyaXB0cy91cGRhdGVEb2N1bWVudFRvQy5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogCiAjCiAjIHVwZGF0ZURvY3VtZW50VG9DLnB5CmRpZmYgLS1naXQgYS9zY3JpcHRzL3VwZGF0ZVdhbmRib3gucHkgYi9zY3JpcHRzL3VwZGF0ZVdhbmRib3gucHkKaW5kZXggMzY2OGRhNS4uNTY0Zjk0OCAxMDA2NDQKLS0tIGEvc2NyaXB0cy91cGRhdGVXYW5kYm94LnB5CisrKyBiL3NjcmlwdHMvdXBkYXRlV2FuZGJveC5weQpAQCAtMSwyMiArMSwxNiBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAKIGltcG9ydCBqc29uCiBpbXBvcnQgb3MKLWltcG9ydCB1cmxsaWIucmVxdWVzdAotaW1wb3J0IHVybGxpYi5wYXJzZQotCitpbXBvcnQgdXJsbGliMgogCiBmcm9tIHNjcmlwdENvbW1vbiBpbXBvcnQgY2F0Y2hQYXRoCiAKIGRlZiB1cGxvYWQob3B0aW9ucyk6Ci0jICAgIHJlcXVlc3RfYmxhaCA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QoJ2h0dHBzOi8vCi0KLSAgICByZXF1ZXN0ID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCgnaHR0cHM6Ly9tZWxwb24ub3JnL3dhbmRib3gvYXBpL2NvbXBpbGUuanNvbicsIG1ldGhvZD0nUE9TVCcpCi0gICAganNvbl9ieXRlcyA9IGpzb24uZHVtcHMob3B0aW9ucykuZW5jb2RlKCd1dGYtOCcpCi0gICAgcmVxdWVzdC5hZGRfaGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpCi0gICAgcmVxdWVzdC5hZGRfaGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIGxlbihqc29uX2J5dGVzKSkKLSAgICByZXNwb25zZSA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxdWVzdCwganNvbl9ieXRlcykKLSAgICByZXR1cm4ganNvbi5sb2FkcyhyZXNwb25zZS5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpKQorICAgIHJlcXVlc3QgPSB1cmxsaWIyLlJlcXVlc3QoJ2h0dHA6Ly9tZWxwb24ub3JnL3dhbmRib3gvYXBpL2NvbXBpbGUuanNvbicpCisgICAgcmVxdWVzdC5hZGRfaGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpCisgICAgcmVzcG9uc2UgPSB1cmxsaWIyLnVybG9wZW4ocmVxdWVzdCwganNvbi5kdW1wcyhvcHRpb25zKSkKKyAgICByZXR1cm4ganNvbi5sb2FkcyhyZXNwb25zZS5yZWFkKCkpCiAKIG1haW5fZmlsZSA9ICcnJwogI2RlZmluZSBDQVRDSF9DT05GSUdfTUFJTiAgLy8gVGhpcyB0ZWxscyBDYXRjaCB0byBwcm92aWRlIGEgbWFpbigpIC0gb25seSBkbyB0aGlzIGluIG9uZSBjcHAgZmlsZQpAQCAtNDcsNyArNDEsNyBAQAogICAgICAgICAnc2F2ZSc6IFRydWUKICAgICB9KQogCi0gICAgaWYgJ3VybCcgaW4gcmVzcG9uc2UgYW5kICdjb21waWxlcl9lcnJvcicgbm90IGluIHJlc3BvbnNlOgorICAgIGlmICdzdGF0dXMnIGluIHJlc3BvbnNlIGFuZCAnY29tcGlsZXJfZXJyb3InIG5vdCBpbiByZXNwb25zZToKICAgICAgICAgcmV0dXJuIFRydWUsIHJlc3BvbnNlWyd1cmwnXQogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiBGYWxzZSwgcmVzcG9uc2UKZGlmZiAtLWdpdCBhL3NpbmdsZV9pbmNsdWRlL2NhdGNoMi9jYXRjaC5ocHAgYi9zaW5nbGVfaW5jbHVkZS9jYXRjaDIvY2F0Y2guaHBwCmluZGV4IGY1N2Q3ZjQuLmRmMTRjMzUgMTAwNjQ0Ci0tLSBhL3NpbmdsZV9pbmNsdWRlL2NhdGNoMi9jYXRjaC5ocHAKKysrIGIvc2luZ2xlX2luY2x1ZGUvY2F0Y2gyL2NhdGNoLmhwcApAQCAtMSw5ICsxLDkgQEAKIC8qCi0gKiAgQ2F0Y2ggdjIuMTEuMgotICogIEdlbmVyYXRlZDogMjAyMC0wMy0xOSAxMjozNTowNC4wMzg3MzMKKyAqICBDYXRjaCB2Mi43LjIKKyAqICBHZW5lcmF0ZWQ6IDIwMTktMDQtMjIgMjM6MTM6MTQuNjg3NDY1CiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIFRoaXMgZmlsZSBoYXMgYmVlbiBtZXJnZWQgZnJvbSBtdWx0aXBsZSBoZWFkZXJzLiBQbGVhc2UgZG9uJ3QgZWRpdCBpdCBkaXJlY3RseQotICogIENvcHlyaWdodCAoYykgMjAyMCBUd28gQmx1ZSBDdWJlcyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChjKSAyMDE5IFR3byBCbHVlIEN1YmVzIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQpAQCAtMTQsNyArMTQsNyBAQAogCiAKICNkZWZpbmUgQ0FUQ0hfVkVSU0lPTl9NQUpPUiAyCi0jZGVmaW5lIENBVENIX1ZFUlNJT05fTUlOT1IgMTEKKyNkZWZpbmUgQ0FUQ0hfVkVSU0lPTl9NSU5PUiA3CiAjZGVmaW5lIENBVENIX1ZFUlNJT05fUEFUQ0ggMgogCiAjaWZkZWYgX19jbGFuZ19fCkBAIC0xMzYsMzggKzEzNiwyNiBAQAogIyAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19DUFAxN19VTkNBVUdIVF9FWENFUFRJT05TCiAjZW5kaWYKIAotLy8gV2UgaGF2ZSB0byBhdm9pZCBib3RoIElDQyBhbmQgQ2xhbmcsIGJlY2F1c2UgdGhleSB0cnkgdG8gbWFzayB0aGVtc2VsdmVzCi0vLyBhcyBnY2MsIGFuZCB3ZSB3YW50IG9ubHkgR0NDIGluIHRoaXMgYmxvY2sKLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX2NsYW5nX18pICYmICFkZWZpbmVkKF9fSUNDKQotIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1RBUlRfV0FSTklOR1NfU1VQUFJFU1NJT04gX1ByYWdtYSggIkdDQyBkaWFnbm9zdGljIHB1c2giICkKLSMgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1NUT1BfV0FSTklOR1NfU1VQUFJFU1NJT04gIF9QcmFnbWEoICJHQ0MgZGlhZ25vc3RpYyBwb3AiICkKKyNpZmRlZiBfX2NsYW5nX18KIAotIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfSUdOT1JFX0JVVF9XQVJOKC4uLikgKHZvaWQpX19idWlsdGluX2NvbnN0YW50X3AoX19WQV9BUkdTX18pCisjICAgICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTIFwKKyAgICAgICAgICAgIF9QcmFnbWEoICJjbGFuZyBkaWFnbm9zdGljIHB1c2giICkgXAorICAgICAgICAgICAgX1ByYWdtYSggImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XZXhpdC10aW1lLWRlc3RydWN0b3JzXCIiICkgXAorICAgICAgICAgICAgX1ByYWdtYSggImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XZ2xvYmFsLWNvbnN0cnVjdG9yc1wiIikKKyMgICAgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1VOU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyBcCisgICAgICAgICAgICBfUHJhZ21hKCAiY2xhbmcgZGlhZ25vc3RpYyBwb3AiICkKIAotI2VuZGlmCisjICAgICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19QQVJFTlRIRVNFU19XQVJOSU5HUyBcCisgICAgICAgICAgICBfUHJhZ21hKCAiY2xhbmcgZGlhZ25vc3RpYyBwdXNoIiApIFwKKyAgICAgICAgICAgIF9QcmFnbWEoICJjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3BhcmVudGhlc2VzXCIiICkKKyMgICAgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1VOU1VQUFJFU1NfUEFSRU5USEVTRVNfV0FSTklOR1MgXAorICAgICAgICAgICAgX1ByYWdtYSggImNsYW5nIGRpYWdub3N0aWMgcG9wIiApCiAKLSNpZiBkZWZpbmVkKF9fY2xhbmdfXykKLQotIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1RBUlRfV0FSTklOR1NfU1VQUFJFU1NJT04gX1ByYWdtYSggImNsYW5nIGRpYWdub3N0aWMgcHVzaCIgKQotIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1RPUF9XQVJOSU5HU19TVVBQUkVTU0lPTiAgX1ByYWdtYSggImNsYW5nIGRpYWdub3N0aWMgcG9wIiApCi0KLSMgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0lHTk9SRV9CVVRfV0FSTiguLi4pICh2b2lkKV9fYnVpbHRpbl9jb25zdGFudF9wKF9fVkFfQVJHU19fKQotCi0jICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTIFwKLSAgICAgICAgIF9QcmFnbWEoICJjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV2V4aXQtdGltZS1kZXN0cnVjdG9yc1wiIiApIFwKLSAgICAgICAgIF9QcmFnbWEoICJjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV2dsb2JhbC1jb25zdHJ1Y3RvcnNcIiIpCi0KLSMgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1BBUkVOVEhFU0VTX1dBUk5JTkdTIFwKLSAgICAgICAgIF9QcmFnbWEoICJjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3BhcmVudGhlc2VzXCIiICkKLQotIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfVU5VU0VEX1dBUk5JTkdTIFwKLSAgICAgICAgIF9QcmFnbWEoICJjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3VudXNlZC12YXJpYWJsZVwiIiApCi0KLSMgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1pFUk9fVkFSSUFESUNfV0FSTklOR1MgXAotICAgICAgICAgX1ByYWdtYSggImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XZ251LXplcm8tdmFyaWFkaWMtbWFjcm8tYXJndW1lbnRzXCIiICkKLQotIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfVU5VU0VEX1RFTVBMQVRFX1dBUk5JTkdTIFwKLSAgICAgICAgIF9QcmFnbWEoICJjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3VudXNlZC10ZW1wbGF0ZVwiIiApCisjICAgICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19VTlVTRURfV0FSTklOR1MgXAorICAgICAgICAgICAgX1ByYWdtYSggImNsYW5nIGRpYWdub3N0aWMgcHVzaCIgKSBcCisgICAgICAgICAgICBfUHJhZ21hKCAiY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bnVzZWQtdmFyaWFibGVcIiIgKQorIyAgICAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19VTlVTRURfV0FSTklOR1MgXAorICAgICAgICAgICAgX1ByYWdtYSggImNsYW5nIGRpYWdub3N0aWMgcG9wIiApCiAKICNlbmRpZiAvLyBfX2NsYW5nX18KIApAQCAtMTkyLDcgKzE4MCw2IEBACiAvLyBBbmRyb2lkIHNvbWVob3cgc3RpbGwgZG9lcyBub3Qgc3VwcG9ydCBzdGQ6OnRvX3N0cmluZwogI2lmIGRlZmluZWQoX19BTkRST0lEX18pCiAjICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfTk9fQ1BQMTFfVE9fU1RSSU5HCi0jICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfQU5EUk9JRF9MT0dXUklURQogI2VuZGlmCiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC0yMTcsMjEgKzIwNCwxNiBAQAogLy8gc29tZSB2ZXJzaW9ucyBvZiBjeWd3aW4gKG1vc3QpIGRvIG5vdCBzdXBwb3J0IHN0ZDo6dG9fc3RyaW5nLiBVc2UgdGhlIGxpYnN0ZCBjaGVjay4KIC8vIGh0dHBzOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MtNC44LjIvbGlic3RkYysrL2FwaS9hMDEwNTNfc291cmNlLmh0bWwgbGluZSAyODEyLTI4MTMKICMgaWYgISgoX19jcGx1c3BsdXMgPj0gMjAxMTAzTCkgJiYgZGVmaW5lZChfR0xJQkNYWF9VU0VfQzk5KSBcCi0gICAgICAgICAgICYmICFkZWZpbmVkKF9HTElCQ1hYX0hBVkVfQlJPS0VOX1ZTV1BSSU5URikpCisJICAgICAgICYmICFkZWZpbmVkKF9HTElCQ1hYX0hBVkVfQlJPS0VOX1ZTV1BSSU5URikpCiAKLSMgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19OT19DUFAxMV9UT19TVFJJTkcKKyMJZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19OT19DUFAxMV9UT19TVFJJTkcKIAogIyBlbmRpZgogI2VuZGlmIC8vIF9fQ1lHV0lOX18KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vIFZpc3VhbCBDKysKLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotCi0jICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1RBUlRfV0FSTklOR1NfU1VQUFJFU1NJT04gX19wcmFnbWEoIHdhcm5pbmcocHVzaCkgKQotIyAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1NUT1BfV0FSTklOR1NfU1VQUFJFU1NJT04gIF9fcHJhZ21hKCB3YXJuaW5nKHBvcCkgKQotCi0jICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfSUdOT1JFX0JVVF9XQVJOKC4uLikgKHZvaWQpc2l6ZW9mKF9fVkFfQVJHU19fKQorI2lmZGVmIF9NU0NfVkVSCiAKICMgIGlmIF9NU0NfVkVSID49IDE5MDAgLy8gVmlzdWFsIFN0dWRpbyAyMDE1IG9yIG5ld2VyCiAjICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfQ1BQMTdfVU5DQVVHSFRfRVhDRVBUSU9OUwpAQCAtMjQ4LDE5ICsyMzAsMTIgQEAKIC8vIE1TVkMgdHJhZGl0aW9uYWwgcHJlcHJvY2Vzc29yIG5lZWRzIHNvbWUgd29ya2Fyb3VuZCBmb3IgX19WQV9BUkdTX18KIC8vIF9NU1ZDX1RSQURJVElPTkFMID09IDAgbWVhbnMgbmV3IGNvbmZvcm1hbnQgcHJlcHJvY2Vzc29yCiAvLyBfTVNWQ19UUkFESVRJT05BTCA9PSAxIG1lYW5zIG9sZCB0cmFkaXRpb25hbCBub24tY29uZm9ybWFudCBwcmVwcm9jZXNzb3IKLSMgIGlmICFkZWZpbmVkKF9fY2xhbmdfXykgLy8gSGFuZGxlIENsYW5nIG1hc3F1ZXJhZGluZyBmb3IgbXN2YwotIyAgICBpZiAhZGVmaW5lZChfTVNWQ19UUkFESVRJT05BTCkgfHwgKGRlZmluZWQoX01TVkNfVFJBRElUSU9OQUwpICYmIF9NU1ZDX1RSQURJVElPTkFMKQotIyAgICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IKLSMgICAgZW5kaWYgLy8gTVNWQ19UUkFESVRJT05BTAotIyAgZW5kaWYgLy8gX19jbGFuZ19fCisjICBpZiAhZGVmaW5lZChfTVNWQ19UUkFESVRJT05BTCkgfHwgKGRlZmluZWQoX01TVkNfVFJBRElUSU9OQUwpICYmIF9NU1ZDX1RSQURJVElPTkFMKQorIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCisjICBlbmRpZgogCiAjZW5kaWYgLy8gX01TQ19WRVIKIAotI2lmIGRlZmluZWQoX1JFRU5UUkFOVCkgfHwgZGVmaW5lZChfTVNDX1ZFUikKLS8vIEVuYWJsZSBhc3luYyBwcm9jZXNzaW5nLCBhcyAtcHRocmVhZCBpcyBzcGVjaWZpZWQgb3Igbm8gYWRkaXRpb25hbCBsaW5raW5nIGlzIHJlcXVpcmVkCi0jIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfVVNFX0FTWU5DCi0jZW5kaWYgLy8gX01TQ19WRVIKLQogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vIENoZWNrIGlmIHdlIGFyZSBjb21waWxlZCB3aXRoIC1mbm8tZXhjZXB0aW9ucyBvciBlcXVpdmFsZW50CiAjaWYgZGVmaW5lZChfX0VYQ0VQVElPTlMpIHx8IGRlZmluZWQoX19jcHBfZXhjZXB0aW9ucykgfHwgZGVmaW5lZChfQ1BQVU5XSU5EKQpAQCAtMjkxLDUzICsyNjYsNDAgQEAKICNlbmRpZgogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vLyBSVFggaXMgYSBzcGVjaWFsIHZlcnNpb24gb2YgV2luZG93cyB0aGF0IGlzIHJlYWwgdGltZS4KLS8vIFRoaXMgbWVhbnMgdGhhdCBpdCBpcyBkZXRlY3RlZCBhcyBXaW5kb3dzLCBidXQgZG9lcyBub3QgcHJvdmlkZQotLy8gdGhlIHNhbWUgc2V0IG9mIGNhcGFiaWxpdGllcyBhcyByZWFsIFdpbmRvd3MgZG9lcy4KLSNpZiBkZWZpbmVkKFVOREVSX1JUU1MpIHx8IGRlZmluZWQoUlRYNjRfQlVJTEQpCi0gICAgI2RlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfTk9fV0lORE9XU19TRUgKLSAgICAjZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19OT19BU1lOQwotICAgICNkZWZpbmUgQ0FUQ0hfQ09ORklHX0NPTE9VUl9OT05FCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEpCi0jZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19HTE9CQUxfTkVYVEFGVEVSCi0jZW5kaWYKLQotLy8gVmFyaW91cyBzdGRsaWIgc3VwcG9ydCBjaGVja3MgdGhhdCByZXF1aXJlIF9faGFzX2luY2x1ZGUKKy8vIENoZWNrIGlmIHN0cmluZ192aWV3IGlzIGF2YWlsYWJsZSBhbmQgdXNhYmxlCisvLyBUaGUgY2hlY2sgaXMgc3BsaXQgYXBhcnQgdG8gd29yayBhcm91bmQgdjE0MCAoVlMyMDE1KSBwcmVwcm9jZXNzb3IgaXNzdWUuLi4KICNpZiBkZWZpbmVkKF9faGFzX2luY2x1ZGUpCi0gIC8vIENoZWNrIGlmIHN0cmluZ192aWV3IGlzIGF2YWlsYWJsZSBhbmQgdXNhYmxlCi0gICNpZiBfX2hhc19pbmNsdWRlKDxzdHJpbmdfdmlldz4pICYmIGRlZmluZWQoQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUikKLSAgIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NQUDE3X1NUUklOR19WSUVXCi0gICNlbmRpZgorI2lmIF9faGFzX2luY2x1ZGUoPHN0cmluZ192aWV3PikgJiYgZGVmaW5lZChDQVRDSF9DUFAxN19PUl9HUkVBVEVSKQorIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NQUDE3X1NUUklOR19WSUVXCisjZW5kaWYKKyNlbmRpZgogCi0gIC8vIENoZWNrIGlmIG9wdGlvbmFsIGlzIGF2YWlsYWJsZSBhbmQgdXNhYmxlCi0gICMgIGlmIF9faGFzX2luY2x1ZGUoPG9wdGlvbmFsPikgJiYgZGVmaW5lZChDQVRDSF9DUFAxN19PUl9HUkVBVEVSKQotICAjICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfQ1BQMTdfT1BUSU9OQUwKLSAgIyAgZW5kaWYgLy8gX19oYXNfaW5jbHVkZSg8b3B0aW9uYWw+KSAmJiBkZWZpbmVkKENBVENIX0NQUDE3X09SX0dSRUFURVIpCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gQ2hlY2sgaWYgb3B0aW9uYWwgaXMgYXZhaWxhYmxlIGFuZCB1c2FibGUKKyNpZiBkZWZpbmVkKF9faGFzX2luY2x1ZGUpCisjICBpZiBfX2hhc19pbmNsdWRlKDxvcHRpb25hbD4pICYmIGRlZmluZWQoQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUikKKyMgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19DUFAxN19PUFRJT05BTAorIyAgZW5kaWYgLy8gX19oYXNfaW5jbHVkZSg8b3B0aW9uYWw+KSAmJiBkZWZpbmVkKENBVENIX0NQUDE3X09SX0dSRUFURVIpCisjZW5kaWYgLy8gX19oYXNfaW5jbHVkZQogCi0gIC8vIENoZWNrIGlmIGJ5dGUgaXMgYXZhaWxhYmxlIGFuZCB1c2FibGUKLSAgIyAgaWYgX19oYXNfaW5jbHVkZSg8Y3N0ZGRlZj4pICYmIGRlZmluZWQoQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUikKLSAgIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NQUDE3X0JZVEUKLSAgIyAgZW5kaWYgLy8gX19oYXNfaW5jbHVkZSg8Y3N0ZGRlZj4pICYmIGRlZmluZWQoQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUikKLQotICAvLyBDaGVjayBpZiB2YXJpYW50IGlzIGF2YWlsYWJsZSBhbmQgdXNhYmxlCi0gICMgIGlmIF9faGFzX2luY2x1ZGUoPHZhcmlhbnQ+KSAmJiBkZWZpbmVkKENBVENIX0NQUDE3X09SX0dSRUFURVIpCi0gICMgICAgaWYgZGVmaW5lZChfX2NsYW5nX18pICYmIChfX2NsYW5nX21ham9yX18gPCA4KQotICAgICAgICAgLy8gd29yayBhcm91bmQgY2xhbmcgYnVnIHdpdGggbGlic3RkYysrIGh0dHBzOi8vYnVncy5sbHZtLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE4NTIKLSAgICAgICAgIC8vIGZpeCBzaG91bGQgYmUgaW4gY2xhbmcgOCwgd29ya2Fyb3VuZCBpbiBsaWJzdGRjKysgOC4yCi0gICMgICAgICBpbmNsdWRlIDxjaXNvNjQ2PgotICAjICAgICAgaWYgZGVmaW5lZChfX0dMSUJDWFhfXykgJiYgZGVmaW5lZChfR0xJQkNYWF9SRUxFQVNFKSAmJiAoX0dMSUJDWFhfUkVMRUFTRSA8IDkpCi0gICMgICAgICAgIGRlZmluZSBDQVRDSF9DT05GSUdfTk9fQ1BQMTdfVkFSSUFOVAotICAjICAgICAgZWxzZQotICAjICAgICAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NQUDE3X1ZBUklBTlQKLSAgIyAgICAgIGVuZGlmIC8vIGRlZmluZWQoX19HTElCQ1hYX18pICYmIGRlZmluZWQoX0dMSUJDWFhfUkVMRUFTRSkgJiYgKF9HTElCQ1hYX1JFTEVBU0UgPCA5KQotICAjICAgIGVsc2UKLSAgIyAgICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfQ1BQMTdfVkFSSUFOVAotICAjICAgIGVuZGlmIC8vIGRlZmluZWQoX19jbGFuZ19fKSAmJiAoX19jbGFuZ19tYWpvcl9fIDwgOCkKLSAgIyAgZW5kaWYgLy8gX19oYXNfaW5jbHVkZSg8dmFyaWFudD4pICYmIGRlZmluZWQoQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUikKLSNlbmRpZiAvLyBkZWZpbmVkKF9faGFzX2luY2x1ZGUpCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gQ2hlY2sgaWYgdmFyaWFudCBpcyBhdmFpbGFibGUgYW5kIHVzYWJsZQorI2lmIGRlZmluZWQoX19oYXNfaW5jbHVkZSkKKyMgIGlmIF9faGFzX2luY2x1ZGUoPHZhcmlhbnQ+KSAmJiBkZWZpbmVkKENBVENIX0NQUDE3X09SX0dSRUFURVIpCisjICAgIGlmIGRlZmluZWQoX19jbGFuZ19fKSAmJiAoX19jbGFuZ19tYWpvcl9fIDwgOCkKKyAgICAgICAvLyB3b3JrIGFyb3VuZCBjbGFuZyBidWcgd2l0aCBsaWJzdGRjKysgaHR0cHM6Ly9idWdzLmxsdm0ub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTg1MgorICAgICAgIC8vIGZpeCBzaG91bGQgYmUgaW4gY2xhbmcgOCwgd29ya2Fyb3VuZCBpbiBsaWJzdGRjKysgOC4yCisjICAgICAgaW5jbHVkZSA8Y2lzbzY0Nj4KKyMgICAgICBpZiBkZWZpbmVkKF9fR0xJQkNYWF9fKSAmJiBkZWZpbmVkKF9HTElCQ1hYX1JFTEVBU0UpICYmIChfR0xJQkNYWF9SRUxFQVNFIDwgOSkKKyMgICAgICAgIGRlZmluZSBDQVRDSF9DT05GSUdfTk9fQ1BQMTdfVkFSSUFOVAorIyAgICAgIGVsc2UKKyMgICAgICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfQ1BQMTdfVkFSSUFOVAorIyAgICAgIGVuZGlmIC8vIGRlZmluZWQoX19HTElCQ1hYX18pICYmIGRlZmluZWQoX0dMSUJDWFhfUkVMRUFTRSkgJiYgKF9HTElCQ1hYX1JFTEVBU0UgPCA5KQorIyAgICBlbHNlCisjICAgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19DUFAxN19WQVJJQU5UCisjICAgIGVuZGlmIC8vIGRlZmluZWQoX19jbGFuZ19fKSAmJiAoX19jbGFuZ19tYWpvcl9fIDwgOCkKKyMgIGVuZGlmIC8vIF9faGFzX2luY2x1ZGUoPHZhcmlhbnQ+KSAmJiBkZWZpbmVkKENBVENIX0NQUDE3X09SX0dSRUFURVIpCisjZW5kaWYgLy8gX19oYXNfaW5jbHVkZQogCiAjaWYgZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9DT05GSUdfQ09VTlRFUikgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX05PX0NPVU5URVIpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19DT1VOVEVSKQogIyAgIGRlZmluZSBDQVRDSF9DT05GSUdfQ09VTlRFUgpAQCAtMzc0LDEwICszMzYsNiBAQAogIyAgZGVmaW5lIENBVENIX0NPTkZJR19DUFAxN19WQVJJQU5UCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NQUDE3X0JZVEUpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19OT19DUFAxN19CWVRFKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTdfQllURSkKLSMgIGRlZmluZSBDQVRDSF9DT05GSUdfQ1BQMTdfQllURQotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19FWFBFUklNRU5UQUxfUkVESVJFQ1QpCiAjICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX05FV19DQVBUVVJFCiAjZW5kaWYKQEAgLTM5NCw1MyArMzUyLDE3IEBACiAjICBkZWZpbmUgQ0FUQ0hfQ09ORklHX1BPTFlGSUxMX0lTTkFOCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX1VTRV9BU1lOQykgICYmICFkZWZpbmVkKENBVENIX0lOVEVSTkFMX0NPTkZJR19OT19BU1lOQykgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX05PX1VTRV9BU1lOQykgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX1VTRV9BU1lOQykKLSMgIGRlZmluZSBDQVRDSF9DT05GSUdfVVNFX0FTWU5DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0FORFJPSURfTE9HV1JJVEUpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19OT19BTkRST0lEX0xPR1dSSVRFKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfQU5EUk9JRF9MT0dXUklURSkKLSMgIGRlZmluZSBDQVRDSF9DT05GSUdfQU5EUk9JRF9MT0dXUklURQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENBVENIX0lOVEVSTkFMX0NPTkZJR19HTE9CQUxfTkVYVEFGVEVSKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfTk9fR0xPQkFMX05FWFRBRlRFUikgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX0dMT0JBTF9ORVhUQUZURVIpCi0jICBkZWZpbmUgQ0FUQ0hfQ09ORklHX0dMT0JBTF9ORVhUQUZURVIKLSNlbmRpZgotCi0vLyBFdmVuIGlmIHdlIGRvIG5vdCB0aGluayB0aGUgY29tcGlsZXIgaGFzIHRoYXQgd2FybmluZywgd2Ugc3RpbGwgaGF2ZQotLy8gdG8gcHJvdmlkZSBhIG1hY3JvIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIGNvZGUuCi0jaWYgIWRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfU1RBUlRfV0FSTklOR1NfU1VQUFJFU1NJT04pCi0jICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1NUQVJUX1dBUk5JTkdTX1NVUFBSRVNTSU9OCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9TVE9QX1dBUk5JTkdTX1NVUFBSRVNTSU9OKQotIyAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9TVE9QX1dBUk5JTkdTX1NVUFBSRVNTSU9OCi0jZW5kaWYKICNpZiAhZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19QQVJFTlRIRVNFU19XQVJOSU5HUykKICMgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfUEFSRU5USEVTRVNfV0FSTklOR1MKKyMgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19QQVJFTlRIRVNFU19XQVJOSU5HUwogI2VuZGlmCiAjaWYgIWRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUykKICMgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUworIyAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MKICNlbmRpZgogI2lmICFkZWZpbmVkKENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1VOVVNFRF9XQVJOSU5HUykKICMgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfVU5VU0VEX1dBUk5JTkdTCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19aRVJPX1ZBUklBRElDX1dBUk5JTkdTKQotIyAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19aRVJPX1ZBUklBRElDX1dBUk5JTkdTCi0jZW5kaWYKLQotLy8gVGhlIGdvYWwgb2YgdGhpcyBtYWNybyBpcyB0byBhdm9pZCBldmFsdWF0aW9uIG9mIHRoZSBhcmd1bWVudHMsIGJ1dAotLy8gc3RpbGwgaGF2ZSB0aGUgY29tcGlsZXIgd2FybiBvbiBwcm9ibGVtcyBpbnNpZGUuLi4KLSNpZiAhZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9JR05PUkVfQlVUX1dBUk4pCi0jICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0lHTk9SRV9CVVRfV0FSTiguLi4pCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKF9fYXBwbGVfYnVpbGRfdmVyc2lvbl9fKSAmJiAoX19jbGFuZ19tYWpvcl9fIDwgMTApCi0jICAgdW5kZWYgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfVU5VU0VEX1RFTVBMQVRFX1dBUk5JTkdTCi0jZWxpZiBkZWZpbmVkKF9fY2xhbmdfXykgJiYgKF9fY2xhbmdfbWFqb3JfXyA8IDUpCi0jICAgdW5kZWYgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfVU5VU0VEX1RFTVBMQVRFX1dBUk5JTkdTCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1VOVVNFRF9URU1QTEFURV9XQVJOSU5HUykKLSMgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfVU5VU0VEX1RFTVBMQVRFX1dBUk5JTkdTCisjICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1VOU1VQUFJFU1NfVU5VU0VEX1dBUk5JTkdTCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUykKQEAgLTUwNSw3ICs0MjcsNyBAQAogICAgICAgICBTb3VyY2VMaW5lSW5mbyggU291cmNlTGluZUluZm8mJiApICAgICAgICAgICAgICBub2V4Y2VwdCA9IGRlZmF1bHQ7CiAgICAgICAgIFNvdXJjZUxpbmVJbmZvJiBvcGVyYXRvciA9ICggU291cmNlTGluZUluZm8mJiApIG5vZXhjZXB0ID0gZGVmYXVsdDsKIAotICAgICAgICBib29sIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gZmlsZVswXSA9PSAnXDAnOyB9CisgICAgICAgIGJvb2wgZW1wdHkoKSBjb25zdCBub2V4Y2VwdDsKICAgICAgICAgYm9vbCBvcGVyYXRvciA9PSAoIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBvdGhlciApIGNvbnN0IG5vZXhjZXB0OwogICAgICAgICBib29sIG9wZXJhdG9yIDwgKCBTb3VyY2VMaW5lSW5mbyBjb25zdCYgb3RoZXIgKSBjb25zdCBub2V4Y2VwdDsKIApAQCAtNTQ2LDEwICs0NjgsOSBAQAogfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCiAKICNkZWZpbmUgQ0FUQ0hfUkVHSVNURVJfVEFHX0FMSUFTKCBhbGlhcywgc3BlYyApIFwKLSAgICBDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTiBcCiAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyBcCiAgICAgbmFtZXNwYWNleyBDYXRjaDo6UmVnaXN0cmFyRm9yVGFnQWxpYXNlcyBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggQXV0b1JlZ2lzdGVyVGFnQWxpYXMgKSggYWxpYXMsIHNwZWMsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPICk7IH0gXAotICAgIENBVENIX0lOVEVSTkFMX1NUT1BfV0FSTklOR1NfU1VQUFJFU1NJT04KKyAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MKIAogLy8gZW5kIGNhdGNoX3RhZ19hbGlhc19hdXRvcmVnaXN0cmFyLmgKIC8vIHN0YXJ0IGNhdGNoX3Rlc3RfcmVnaXN0cnkuaApAQCAtNTc2LDcgKzQ5Nyw2IEBACiAgICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8VGVzdENhc2U+IGNvbnN0JiBnZXRBbGxUZXN0c1NvcnRlZCggSUNvbmZpZyBjb25zdCYgY29uZmlnICkgY29uc3QgPSAwOwogICAgIH07CiAKLSAgICBib29sIGlzVGhyb3dTYWZlKCBUZXN0Q2FzZSBjb25zdCYgdGVzdENhc2UsIElDb25maWcgY29uc3QmIGNvbmZpZyApOwogICAgIGJvb2wgbWF0Y2hUZXN0KCBUZXN0Q2FzZSBjb25zdCYgdGVzdENhc2UsIFRlc3RTcGVjIGNvbnN0JiB0ZXN0U3BlYywgSUNvbmZpZyBjb25zdCYgY29uZmlnICk7CiAgICAgc3RkOjp2ZWN0b3I8VGVzdENhc2U+IGZpbHRlclRlc3RzKCBzdGQ6OnZlY3RvcjxUZXN0Q2FzZT4gY29uc3QmIHRlc3RDYXNlcywgVGVzdFNwZWMgY29uc3QmIHRlc3RTcGVjLCBJQ29uZmlnIGNvbnN0JiBjb25maWcgKTsKICAgICBzdGQ6OnZlY3RvcjxUZXN0Q2FzZT4gY29uc3QmIGdldEFsbFRlc3RDYXNlc1NvcnRlZCggSUNvbmZpZyBjb25zdCYgY29uZmlnICk7CkBAIC01ODksMzAgKzUwOSw1MyBAQAogI2luY2x1ZGUgPGNzdGRkZWY+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPGlvc2Z3ZD4KLSNpbmNsdWRlIDxjYXNzZXJ0PgogCiBuYW1lc3BhY2UgQ2F0Y2ggewogCiAgICAgLy8vIEEgbm9uLW93bmluZyBzdHJpbmcgY2xhc3MgKHNpbWlsYXIgdG8gdGhlIGZvcnRoY29taW5nIHN0ZDo6c3RyaW5nX3ZpZXcpCiAgICAgLy8vIE5vdGUgdGhhdCwgYmVjYXVzZSBhIFN0cmluZ1JlZiBtYXkgYmUgYSBzdWJzdHJpbmcgb2YgYW5vdGhlciBzdHJpbmcsCi0gICAgLy8vIGl0IG1heSBub3QgYmUgbnVsbCB0ZXJtaW5hdGVkLgorICAgIC8vLyBpdCBtYXkgbm90IGJlIG51bGwgdGVybWluYXRlZC4gY19zdHIoKSBtdXN0IHJldHVybiBhIG51bGwgdGVybWluYXRlZAorICAgIC8vLyBzdHJpbmcsIGhvd2V2ZXIsIGFuZCBzbyB0aGUgU3RyaW5nUmVmIHdpbGwgaW50ZXJuYWxseSB0YWtlIG93bmVyc2hpcAorICAgIC8vLyAodGFraW5nIGEgY29weSksIGlmIG5lY2Vzc2FyeS4gSW4gdGhlb3J5IHRoaXMgb3duZXJzaGlwIGlzIG5vdCBleHRlcm5hbGx5CisgICAgLy8vIHZpc2libGUgLSBidXQgaXQgZG9lcyBtZWFuIChzdWJzdHJpbmcpIFN0cmluZ1JlZnMgc2hvdWxkIG5vdCBiZSBzaGFyZWQgYmV0d2VlbgorICAgIC8vLyB0aHJlYWRzLgogICAgIGNsYXNzIFN0cmluZ1JlZiB7CiAgICAgcHVibGljOgogICAgICAgICB1c2luZyBzaXplX3R5cGUgPSBzdGQ6OnNpemVfdDsKLSAgICAgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBjb25zdCBjaGFyKjsKIAogICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBzdHJ1Y3QgU3RyaW5nUmVmVGVzdEFjY2VzczsKKworICAgICAgICBjaGFyIGNvbnN0KiBtX3N0YXJ0OworICAgICAgICBzaXplX3R5cGUgbV9zaXplOworCisgICAgICAgIGNoYXIqIG1fZGF0YSA9IG51bGxwdHI7CisKKyAgICAgICAgdm9pZCB0YWtlT3duZXJzaGlwKCk7CisKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyIGNvbnN0KiBjb25zdCBzX2VtcHR5ID0gIiI7CiAKLSAgICAgICAgY2hhciBjb25zdCogbV9zdGFydCA9IHNfZW1wdHk7Ci0gICAgICAgIHNpemVfdHlwZSBtX3NpemUgPSAwOworICAgIHB1YmxpYzogLy8gY29uc3RydWN0aW9uLyBhc3NpZ25tZW50CisgICAgICAgIFN0cmluZ1JlZigpIG5vZXhjZXB0CisgICAgICAgIDogICBTdHJpbmdSZWYoIHNfZW1wdHksIDAgKQorICAgICAgICB7fQogCi0gICAgcHVibGljOiAvLyBjb25zdHJ1Y3Rpb24KLSAgICAgICAgY29uc3RleHByIFN0cmluZ1JlZigpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgICAgICAgU3RyaW5nUmVmKCBTdHJpbmdSZWYgY29uc3QmIG90aGVyICkgbm9leGNlcHQKKyAgICAgICAgOiAgIG1fc3RhcnQoIG90aGVyLm1fc3RhcnQgKSwKKyAgICAgICAgICAgIG1fc2l6ZSggb3RoZXIubV9zaXplICkKKyAgICAgICAge30KKworICAgICAgICBTdHJpbmdSZWYoIFN0cmluZ1JlZiYmIG90aGVyICkgbm9leGNlcHQKKyAgICAgICAgOiAgIG1fc3RhcnQoIG90aGVyLm1fc3RhcnQgKSwKKyAgICAgICAgICAgIG1fc2l6ZSggb3RoZXIubV9zaXplICksCisgICAgICAgICAgICBtX2RhdGEoIG90aGVyLm1fZGF0YSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG90aGVyLm1fZGF0YSA9IG51bGxwdHI7CisgICAgICAgIH0KIAogICAgICAgICBTdHJpbmdSZWYoIGNoYXIgY29uc3QqIHJhd0NoYXJzICkgbm9leGNlcHQ7CiAKLSAgICAgICAgY29uc3RleHByIFN0cmluZ1JlZiggY2hhciBjb25zdCogcmF3Q2hhcnMsIHNpemVfdHlwZSBzaXplICkgbm9leGNlcHQKKyAgICAgICAgU3RyaW5nUmVmKCBjaGFyIGNvbnN0KiByYXdDaGFycywgc2l6ZV90eXBlIHNpemUgKSBub2V4Y2VwdAogICAgICAgICA6ICAgbV9zdGFydCggcmF3Q2hhcnMgKSwKICAgICAgICAgICAgIG1fc2l6ZSggc2l6ZSApCiAgICAgICAgIHt9CkBAIC02MjIsNjQgKzU2NSwxMDEgQEAKICAgICAgICAgICAgIG1fc2l6ZSggc3RkU3RyaW5nLnNpemUoKSApCiAgICAgICAgIHt9CiAKLSAgICAgICAgZXhwbGljaXQgb3BlcmF0b3Igc3RkOjpzdHJpbmcoKSBjb25zdCB7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcobV9zdGFydCwgbV9zaXplKTsKKyAgICAgICAgflN0cmluZ1JlZigpIG5vZXhjZXB0IHsKKyAgICAgICAgICAgIGRlbGV0ZVtdIG1fZGF0YTsKICAgICAgICAgfQogCisgICAgICAgIGF1dG8gb3BlcmF0b3IgPSAoIFN0cmluZ1JlZiBjb25zdCAmb3RoZXIgKSBub2V4Y2VwdCAtPiBTdHJpbmdSZWYmIHsKKyAgICAgICAgICAgIGRlbGV0ZVtdIG1fZGF0YTsKKyAgICAgICAgICAgIG1fZGF0YSA9IG51bGxwdHI7CisgICAgICAgICAgICBtX3N0YXJ0ID0gb3RoZXIubV9zdGFydDsKKyAgICAgICAgICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIG9wZXJhdG9yIHN0ZDo6c3RyaW5nKCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBzd2FwKCBTdHJpbmdSZWYmIG90aGVyICkgbm9leGNlcHQ7CisKICAgICBwdWJsaWM6IC8vIG9wZXJhdG9ycwogICAgICAgICBhdXRvIG9wZXJhdG9yID09ICggU3RyaW5nUmVmIGNvbnN0JiBvdGhlciApIGNvbnN0IG5vZXhjZXB0IC0+IGJvb2w7Ci0gICAgICAgIGF1dG8gb3BlcmF0b3IgIT0gKFN0cmluZ1JlZiBjb25zdCYgb3RoZXIpIGNvbnN0IG5vZXhjZXB0IC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgICAgICB9CisgICAgICAgIGF1dG8gb3BlcmF0b3IgIT0gKCBTdHJpbmdSZWYgY29uc3QmIG90aGVyICkgY29uc3Qgbm9leGNlcHQgLT4gYm9vbDsKIAotICAgICAgICBhdXRvIG9wZXJhdG9yW10gKCBzaXplX3R5cGUgaW5kZXggKSBjb25zdCBub2V4Y2VwdCAtPiBjaGFyIHsKLSAgICAgICAgICAgIGFzc2VydChpbmRleCA8IG1fc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdGFydFtpbmRleF07Ci0gICAgICAgIH0KKyAgICAgICAgYXV0byBvcGVyYXRvcltdICggc2l6ZV90eXBlIGluZGV4ICkgY29uc3Qgbm9leGNlcHQgLT4gY2hhcjsKIAogICAgIHB1YmxpYzogLy8gbmFtZWQgcXVlcmllcwotICAgICAgICBjb25zdGV4cHIgYXV0byBlbXB0eSgpIGNvbnN0IG5vZXhjZXB0IC0+IGJvb2wgeworICAgICAgICBhdXRvIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQgLT4gYm9vbCB7CiAgICAgICAgICAgICByZXR1cm4gbV9zaXplID09IDA7CiAgICAgICAgIH0KLSAgICAgICAgY29uc3RleHByIGF1dG8gc2l6ZSgpIGNvbnN0IG5vZXhjZXB0IC0+IHNpemVfdHlwZSB7CisgICAgICAgIGF1dG8gc2l6ZSgpIGNvbnN0IG5vZXhjZXB0IC0+IHNpemVfdHlwZSB7CiAgICAgICAgICAgICByZXR1cm4gbV9zaXplOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gUmV0dXJucyB0aGUgY3VycmVudCBzdGFydCBwb2ludGVyLiBJZiB0aGUgU3RyaW5nUmVmIGlzIG5vdAotICAgICAgICAvLyBudWxsLXRlcm1pbmF0ZWQsIHRocm93cyBzdGQ6OmRvbWFpbl9leGNlcHRpb24KKyAgICAgICAgYXV0byBudW1iZXJPZkNoYXJhY3RlcnMoKSBjb25zdCBub2V4Y2VwdCAtPiBzaXplX3R5cGU7CiAgICAgICAgIGF1dG8gY19zdHIoKSBjb25zdCAtPiBjaGFyIGNvbnN0KjsKIAogICAgIHB1YmxpYzogLy8gc3Vic3RyaW5ncyBhbmQgc2VhcmNoZXMKLSAgICAgICAgLy8gUmV0dXJucyBhIHN1YnN0cmluZyBvZiBbc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoKS4KLSAgICAgICAgLy8gSWYgc3RhcnQgKyBsZW5ndGggPiBzaXplKCksIHRoZW4gdGhlIHN1YnN0cmluZyBpcyBbc3RhcnQsIHNpemUoKSkuCi0gICAgICAgIC8vIElmIHN0YXJ0ID4gc2l6ZSgpLCB0aGVuIHRoZSBzdWJzdHJpbmcgaXMgZW1wdHkuCi0gICAgICAgIGF1dG8gc3Vic3RyKCBzaXplX3R5cGUgc3RhcnQsIHNpemVfdHlwZSBsZW5ndGggKSBjb25zdCBub2V4Y2VwdCAtPiBTdHJpbmdSZWY7CisgICAgICAgIGF1dG8gc3Vic3RyKCBzaXplX3R5cGUgc3RhcnQsIHNpemVfdHlwZSBzaXplICkgY29uc3Qgbm9leGNlcHQgLT4gU3RyaW5nUmVmOwogCi0gICAgICAgIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhcnQgcG9pbnRlci4gTWF5IG5vdCBiZSBudWxsLXRlcm1pbmF0ZWQuCi0gICAgICAgIGF1dG8gZGF0YSgpIGNvbnN0IG5vZXhjZXB0IC0+IGNoYXIgY29uc3QqOworICAgICAgICAvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXJ0IHBvaW50ZXIuCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgcG9pbnRlciBjYW4gY2hhbmdlIHdoZW4gaWYgdGhlIFN0cmluZ1JlZiBpcyBhIHN1YnN0cmluZworICAgICAgICBhdXRvIGN1cnJlbnREYXRhKCkgY29uc3Qgbm9leGNlcHQgLT4gY2hhciBjb25zdCo7CiAKLSAgICAgICAgY29uc3RleHByIGF1dG8gaXNOdWxsVGVybWluYXRlZCgpIGNvbnN0IG5vZXhjZXB0IC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuIG1fc3RhcnRbbV9zaXplXSA9PSAnXDAnOwotICAgICAgICB9Ci0KLSAgICBwdWJsaWM6IC8vIGl0ZXJhdG9ycwotICAgICAgICBjb25zdGV4cHIgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9Ci0gICAgICAgIGNvbnN0ZXhwciBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0ICsgbV9zaXplOyB9CisgICAgcHJpdmF0ZTogLy8gb3duZXJzaGlwIHF1ZXJpZXMgLSBtYXkgbm90IGJlIGNvbnNpc3RlbnQgYmV0d2VlbiBjYWxscworICAgICAgICBhdXRvIGlzT3duZWQoKSBjb25zdCBub2V4Y2VwdCAtPiBib29sOworICAgICAgICBhdXRvIGlzU3Vic3RyaW5nKCkgY29uc3Qgbm9leGNlcHQgLT4gYm9vbDsKICAgICB9OwogCisgICAgYXV0byBvcGVyYXRvciArICggU3RyaW5nUmVmIGNvbnN0JiBsaHMsIFN0cmluZ1JlZiBjb25zdCYgcmhzICkgLT4gc3RkOjpzdHJpbmc7CisgICAgYXV0byBvcGVyYXRvciArICggU3RyaW5nUmVmIGNvbnN0JiBsaHMsIGNoYXIgY29uc3QqIHJocyApIC0+IHN0ZDo6c3RyaW5nOworICAgIGF1dG8gb3BlcmF0b3IgKyAoIGNoYXIgY29uc3QqIGxocywgU3RyaW5nUmVmIGNvbnN0JiByaHMgKSAtPiBzdGQ6OnN0cmluZzsKKwogICAgIGF1dG8gb3BlcmF0b3IgKz0gKCBzdGQ6OnN0cmluZyYgbGhzLCBTdHJpbmdSZWYgY29uc3QmIHNyICkgLT4gc3RkOjpzdHJpbmcmOwogICAgIGF1dG8gb3BlcmF0b3IgPDwgKCBzdGQ6Om9zdHJlYW0mIG9zLCBTdHJpbmdSZWYgY29uc3QmIHNyICkgLT4gc3RkOjpvc3RyZWFtJjsKIAotICAgIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yICIiIF9zciggY2hhciBjb25zdCogcmF3Q2hhcnMsIHN0ZDo6c2l6ZV90IHNpemUgKSBub2V4Y2VwdCAtPiBTdHJpbmdSZWYgeworICAgIGlubGluZSBhdXRvIG9wZXJhdG9yICIiIF9zciggY2hhciBjb25zdCogcmF3Q2hhcnMsIHN0ZDo6c2l6ZV90IHNpemUgKSBub2V4Y2VwdCAtPiBTdHJpbmdSZWYgewogICAgICAgICByZXR1cm4gU3RyaW5nUmVmKCByYXdDaGFycywgc2l6ZSApOwogICAgIH0KKwogfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKIAotY29uc3RleHByIGF1dG8gb3BlcmF0b3IgIiIgX2NhdGNoX3NyKCBjaGFyIGNvbnN0KiByYXdDaGFycywgc3RkOjpzaXplX3Qgc2l6ZSApIG5vZXhjZXB0IC0+IENhdGNoOjpTdHJpbmdSZWYgeworaW5saW5lIGF1dG8gb3BlcmF0b3IgIiIgX2NhdGNoX3NyKCBjaGFyIGNvbnN0KiByYXdDaGFycywgc3RkOjpzaXplX3Qgc2l6ZSApIG5vZXhjZXB0IC0+IENhdGNoOjpTdHJpbmdSZWYgewogICAgIHJldHVybiBDYXRjaDo6U3RyaW5nUmVmKCByYXdDaGFycywgc2l6ZSApOwogfQogCiAvLyBlbmQgY2F0Y2hfc3RyaW5ncmVmLmgKKy8vIHN0YXJ0IGNhdGNoX3R5cGVfdHJhaXRzLmhwcAorCisKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKworbmFtZXNwYWNlIENhdGNoeworCisjaWZkZWYgQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUgorCXRlbXBsYXRlIDx0eXBlbmFtZS4uLj4KKwlpbmxpbmUgY29uc3RleHByIGF1dG8gaXNfdW5pcXVlID0gc3RkOjp0cnVlX3R5cGV7fTsKKworCXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBSZXN0PgorCWlubGluZSBjb25zdGV4cHIgYXV0byBpc191bmlxdWU8VCwgUmVzdC4uLj4gPSBzdGQ6OmJvb2xfY29uc3RhbnQ8CisJCSghc3RkOjppc19zYW1lX3Y8VCwgUmVzdD4gJiYgLi4uKSAmJiBpc191bmlxdWU8UmVzdC4uLj4KKwk+e307CisjZWxzZQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+CitzdHJ1Y3QgaXNfdW5pcXVlIDogc3RkOjp0cnVlX3R5cGV7fTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUuLi4gUmVzdD4KK3N0cnVjdCBpc191bmlxdWU8VDAsIFQxLCBSZXN0Li4uPiA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQKKzxib29sLAorICAgICAhc3RkOjppc19zYW1lPFQwLCBUMT46OnZhbHVlCisgICAgICYmIGlzX3VuaXF1ZTxUMCwgUmVzdC4uLj46OnZhbHVlCisgICAgICYmIGlzX3VuaXF1ZTxUMSwgUmVzdC4uLj46OnZhbHVlCis+e307CisKKyNlbmRpZgorfQorCisvLyBlbmQgY2F0Y2hfdHlwZV90cmFpdHMuaHBwCiAvLyBzdGFydCBjYXRjaF9wcmVwcm9jZXNzb3IuaHBwCiAKIApAQCAtNzQyLDE3MCArNzIyLDIzIEBACiAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1NUUklOR0laRV9XSVRIT1VUX1BBUkVOUyhwYXJhbSkgKElOVEVSTkFMX0NBVENIX1NUUklOR0laRShJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHBhcmFtKSkgKyAxKQogI2VuZGlmCiAKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfTUFLRV9OQU1FU1BBQ0UyKC4uLikgbnNfIyNfX1ZBX0FSR1NfXwotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9NQUtFX05BTUVTUEFDRShuYW1lKSBJTlRFUk5BTF9DQVRDSF9NQUtFX05BTUVTUEFDRTIobmFtZSkKLQogI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKC4uLikgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EMShJTlRFUk5BTF9DQVRDSF9ERUYgX19WQV9BUkdTX18pCiAKKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVU5JUVVFX05BTUUyKE5hbWUsIC4uLikgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVU5JUVVFX05BTUUzKE5hbWUsIF9fVkFfQVJHU19fKQogI2lmbmRlZiBDQVRDSF9DT05GSUdfVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfTUFLRV9UWVBFX0xJU1QyKC4uLikgZGVjbHR5cGUoZ2V0X3dyYXBwZXI8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU19HRU4oX19WQV9BUkdTX18pPigpKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9NQUtFX1RZUEVfTElTVCguLi4pIElOVEVSTkFMX0NBVENIX01BS0VfVFlQRV9MSVNUMihJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKF9fVkFfQVJHU19fKSkKKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVU5JUVVFX05BTUUzKE5hbWUsLi4uKSBOYW1lICIgLSAiICNfX1ZBX0FSR1NfXworI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9VTklRVUVfTkFNRShOYW1lLC4uLikgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVU5JUVVFX05BTUUyKE5hbWUsIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoX19WQV9BUkdTX18pKQogI2Vsc2UKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfTUFLRV9UWVBFX0xJU1QyKC4uLikgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKGRlY2x0eXBlKGdldF93cmFwcGVyPElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfR0VOKF9fVkFfQVJHU19fKT4oKSkpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX01BS0VfVFlQRV9MSVNUKC4uLikgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKElOVEVSTkFMX0NBVENIX01BS0VfVFlQRV9MSVNUMihJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKF9fVkFfQVJHU19fKSkpCisvLyBNU1ZDIGlzIGFkZGluZyBleHRyYSBzcGFjZSBhbmQgbmVlZHMgbW9yZSBjYWxscyB0byBwcm9wZXJseSByZW1vdmUgKCkKKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVU5JUVVFX05BTUUzKE5hbWUsLi4uKSBOYW1lICIgLSIgI19fVkFfQVJHU19fCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1VOSVFVRV9OQU1FMShOYW1lLCAuLi4pIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1VOSVFVRV9OQU1FMihOYW1lLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVU5JUVVFX05BTUUoTmFtZSwgLi4uKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9VTklRVUVfTkFNRTEoTmFtZSwgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoX19WQV9BUkdTX18pKSkKICNlbmRpZgogCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX01BS0VfVFlQRV9MSVNUU19GUk9NX1RZUEVTKC4uLilcCi0gICAgQ0FUQ0hfUkVDX0xJU1QoSU5URVJOQUxfQ0FUQ0hfTUFLRV9UWVBFX0xJU1QsX19WQV9BUkdTX18pCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX01BS0VfVFlQRV9MSVNUKHR5cGVzKSBDYXRjaDo6VHlwZUxpc3Q8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyh0eXBlcyk+CiAKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU18xX0FSRyhfMCkgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhfMCkKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU18yX0FSRyhfMCwgXzEpIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoXzApLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzFfQVJHKF8xKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzNfQVJHKF8wLCBfMSwgXzIpIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoXzApLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzJfQVJHKF8xLCBfMikKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU180X0FSRyhfMCwgXzEsIF8yLCBfMykgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhfMCksIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfM19BUkcoXzEsIF8yLCBfMykKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU181X0FSRyhfMCwgXzEsIF8yLCBfMywgXzQpIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoXzApLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzRfQVJHKF8xLCBfMiwgXzMsIF80KQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzZfQVJHKF8wLCBfMSwgXzIsIF8zLCBfNCwgXzUpIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoXzApLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzVfQVJHKF8xLCBfMiwgXzMsIF80LCBfNSkKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU183X0FSRyhfMCwgXzEsIF8yLCBfMywgXzQsIF81LCBfNikgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhfMCksIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfNl9BUkcoXzEsIF8yLCBfNCwgXzUsIF82KQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzhfQVJHKF8wLCBfMSwgXzIsIF8zLCBfNCwgXzUsIF82LCBfNykgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhfMCksIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfN19BUkcoXzEsIF8yLCBfMywgXzQsIF81LCBfNiwgXzcpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfOV9BUkcoXzAsIF8xLCBfMiwgXzMsIF80LCBfNSwgXzYsIF83LCBfOCkgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhfMCksIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfOF9BUkcoXzEsIF8yLCBfMywgXzQsIF81LCBfNiwgXzcsIF84KQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzEwX0FSRyhfMCwgXzEsIF8yLCBfMywgXzQsIF81LCBfNiwgXzcsIF84LCBfOSkgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhfMCksIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfOV9BUkcoXzEsIF8yLCBfMywgXzQsIF81LCBfNiwgXzcsIF84LCBfOSkKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU18xMV9BUkcoXzAsIF8xLCBfMiwgXzMsIF80LCBfNSwgXzYsIF83LCBfOCwgXzksIF8xMCkgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhfMCksIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfMTBfQVJHKF8xLCBfMiwgXzMsIF80LCBfNSwgXzYsIF83LCBfOCwgXzksIF8xMCkKLQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9WQV9OQVJHU19JTVBMKF8wLCBfMSwgXzIsIF8zLCBfNCwgXzUsIF82LCBfNywgXzgsIF85LCBfMTAsIE4sIC4uLikgTgotCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX1RZUEVfR0VOXAotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBzdHJ1Y3QgVHlwZUxpc3Qge307XAotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uVHM+XAotICAgIGNvbnN0ZXhwciBhdXRvIGdldF93cmFwcGVyKCkgbm9leGNlcHQgLT4gVHlwZUxpc3Q8VHMuLi4+IHsgcmV0dXJuIHt9OyB9XAotICAgIHRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcy4uLj4gc3RydWN0IFRlbXBsYXRlVHlwZUxpc3R7fTtcCi0gICAgdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzLi4uQ3M+XAotICAgIGNvbnN0ZXhwciBhdXRvIGdldF93cmFwcGVyKCkgbm9leGNlcHQgLT4gVGVtcGxhdGVUeXBlTGlzdDxDcy4uLj4geyByZXR1cm4ge307IH1cCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4+XAotICAgIHN0cnVjdCBhcHBlbmQ7XAotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uPlwKLSAgICBzdHJ1Y3QgcmV3cmFwO1wKLSAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MsIHR5cGVuYW1lLi4uPlwKLSAgICBzdHJ1Y3QgY3JlYXRlO1wKLSAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MsIHR5cGVuYW1lPlwKLSAgICBzdHJ1Y3QgY29udmVydDtcCi0gICAgXAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFwKLSAgICBzdHJ1Y3QgYXBwZW5kPFQ+IHsgdXNpbmcgdHlwZSA9IFQ7IH07XAotICAgIHRlbXBsYXRlPCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgTDEsIHR5cGVuYW1lLi4uRTEsIHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBMMiwgdHlwZW5hbWUuLi5FMiwgdHlwZW5hbWUuLi5SZXN0PlwKLSAgICBzdHJ1Y3QgYXBwZW5kPEwxPEUxLi4uPiwgTDI8RTIuLi4+LCBSZXN0Li4uPiB7IHVzaW5nIHR5cGUgPSB0eXBlbmFtZSBhcHBlbmQ8TDE8RTEuLi4sRTIuLi4+LCBSZXN0Li4uPjo6dHlwZTsgfTtcCi0gICAgdGVtcGxhdGU8IHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBMMSwgdHlwZW5hbWUuLi5FMSwgdHlwZW5hbWUuLi5SZXN0PlwKLSAgICBzdHJ1Y3QgYXBwZW5kPEwxPEUxLi4uPiwgVHlwZUxpc3Q8bXBsXzo6bmE+LCBSZXN0Li4uPiB7IHVzaW5nIHR5cGUgPSBMMTxFMS4uLj47IH07XAotICAgIFwKLSAgICB0ZW1wbGF0ZTwgdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzIENvbnRhaW5lciwgdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzIExpc3QsIHR5cGVuYW1lLi4uZWxlbXM+XAotICAgIHN0cnVjdCByZXdyYXA8VGVtcGxhdGVUeXBlTGlzdDxDb250YWluZXI+LCBMaXN0PGVsZW1zLi4uPj4geyB1c2luZyB0eXBlID0gVHlwZUxpc3Q8Q29udGFpbmVyPGVsZW1zLi4uPj47IH07XAotICAgIHRlbXBsYXRlPCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgQ29udGFpbmVyLCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgTGlzdCwgY2xhc3MuLi5FbGVtcywgdHlwZW5hbWUuLi5FbGVtZW50cz5cCi0gICAgc3RydWN0IHJld3JhcDxUZW1wbGF0ZVR5cGVMaXN0PENvbnRhaW5lcj4sIExpc3Q8RWxlbXMuLi4+LCBFbGVtZW50cy4uLj4geyB1c2luZyB0eXBlID0gdHlwZW5hbWUgYXBwZW5kPFR5cGVMaXN0PENvbnRhaW5lcjxFbGVtcy4uLj4+LCB0eXBlbmFtZSByZXdyYXA8VGVtcGxhdGVUeXBlTGlzdDxDb250YWluZXI+LCBFbGVtZW50cy4uLj46OnR5cGU+Ojp0eXBlOyB9O1wKLSAgICBcCi0gICAgdGVtcGxhdGU8dGVtcGxhdGUgPHR5cGVuYW1lLi4uPiBjbGFzcyBGaW5hbCwgdGVtcGxhdGU8IHR5cGVuYW1lLi4uPiBjbGFzcy4uLkNvbnRhaW5lcnMsIHR5cGVuYW1lLi4uVHlwZXM+XAotICAgIHN0cnVjdCBjcmVhdGU8RmluYWwsIFRlbXBsYXRlVHlwZUxpc3Q8Q29udGFpbmVycy4uLj4sIFR5cGVMaXN0PFR5cGVzLi4uPj4geyB1c2luZyB0eXBlID0gdHlwZW5hbWUgYXBwZW5kPEZpbmFsPD4sIHR5cGVuYW1lIHJld3JhcDxUZW1wbGF0ZVR5cGVMaXN0PENvbnRhaW5lcnM+LCBUeXBlcy4uLj46OnR5cGUuLi4+Ojp0eXBlOyB9O1wKLSAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+IGNsYXNzIEZpbmFsLCB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+IGNsYXNzIExpc3QsIHR5cGVuYW1lLi4uVHM+XAotICAgIHN0cnVjdCBjb252ZXJ0PEZpbmFsLCBMaXN0PFRzLi4uPj4geyB1c2luZyB0eXBlID0gdHlwZW5hbWUgYXBwZW5kPEZpbmFsPD4sVHlwZUxpc3Q8VHM+Li4uPjo6dHlwZTsgfTsKLQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9OVFRQXzEoc2lnbmF0dXJlLCAuLi4pXAotICAgIHRlbXBsYXRlPElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoc2lnbmF0dXJlKT4gc3RydWN0IE50dHB7fTtcCi0gICAgdGVtcGxhdGU8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhzaWduYXR1cmUpPlwKLSAgICBjb25zdGV4cHIgYXV0byBnZXRfd3JhcHBlcigpIG5vZXhjZXB0IC0+IE50dHA8X19WQV9BUkdTX18+IHsgcmV0dXJuIHt9OyB9IFwKLSAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHNpZ25hdHVyZSk+IGNsYXNzLi4uPiBzdHJ1Y3QgTnR0cFRlbXBsYXRlVHlwZUxpc3R7fTtcCi0gICAgdGVtcGxhdGU8dGVtcGxhdGU8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhzaWduYXR1cmUpPiBjbGFzcy4uLkNzPlwKLSAgICBjb25zdGV4cHIgYXV0byBnZXRfd3JhcHBlcigpIG5vZXhjZXB0IC0+IE50dHBUZW1wbGF0ZVR5cGVMaXN0PENzLi4uPiB7IHJldHVybiB7fTsgfSBcCi0gICAgXAotICAgIHRlbXBsYXRlPCB0ZW1wbGF0ZTxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHNpZ25hdHVyZSk+IGNsYXNzIENvbnRhaW5lciwgdGVtcGxhdGU8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhzaWduYXR1cmUpPiBjbGFzcyBMaXN0LCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHNpZ25hdHVyZSk+XAotICAgIHN0cnVjdCByZXdyYXA8TnR0cFRlbXBsYXRlVHlwZUxpc3Q8Q29udGFpbmVyPiwgTGlzdDxfX1ZBX0FSR1NfXz4+IHsgdXNpbmcgdHlwZSA9IFR5cGVMaXN0PENvbnRhaW5lcjxfX1ZBX0FSR1NfXz4+OyB9O1wKLSAgICB0ZW1wbGF0ZTwgdGVtcGxhdGU8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhzaWduYXR1cmUpPiBjbGFzcyBDb250YWluZXIsIHRlbXBsYXRlPElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoc2lnbmF0dXJlKT4gY2xhc3MgTGlzdCwgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhzaWduYXR1cmUpLCB0eXBlbmFtZS4uLkVsZW1lbnRzPlwKLSAgICBzdHJ1Y3QgcmV3cmFwPE50dHBUZW1wbGF0ZVR5cGVMaXN0PENvbnRhaW5lcj4sIExpc3Q8X19WQV9BUkdTX18+LCBFbGVtZW50cy4uLj4geyB1c2luZyB0eXBlID0gdHlwZW5hbWUgYXBwZW5kPFR5cGVMaXN0PENvbnRhaW5lcjxfX1ZBX0FSR1NfXz4+LCB0eXBlbmFtZSByZXdyYXA8TnR0cFRlbXBsYXRlVHlwZUxpc3Q8Q29udGFpbmVyPiwgRWxlbWVudHMuLi4+Ojp0eXBlPjo6dHlwZTsgfTtcCi0gICAgdGVtcGxhdGU8dGVtcGxhdGUgPHR5cGVuYW1lLi4uPiBjbGFzcyBGaW5hbCwgdGVtcGxhdGU8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhzaWduYXR1cmUpPiBjbGFzcy4uLkNvbnRhaW5lcnMsIHR5cGVuYW1lLi4uVHlwZXM+XAotICAgIHN0cnVjdCBjcmVhdGU8RmluYWwsIE50dHBUZW1wbGF0ZVR5cGVMaXN0PENvbnRhaW5lcnMuLi4+LCBUeXBlTGlzdDxUeXBlcy4uLj4+IHsgdXNpbmcgdHlwZSA9IHR5cGVuYW1lIGFwcGVuZDxGaW5hbDw+LCB0eXBlbmFtZSByZXdyYXA8TnR0cFRlbXBsYXRlVHlwZUxpc3Q8Q29udGFpbmVycz4sIFR5cGVzLi4uPjo6dHlwZS4uLj46OnR5cGU7IH07Ci0KLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVDAoVGVzdE5hbWUpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1QxKFRlc3ROYW1lLCBzaWduYXR1cmUpXAotICAgIHRlbXBsYXRlPElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoc2lnbmF0dXJlKT5cCi0gICAgc3RhdGljIHZvaWQgVGVzdE5hbWUoKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX1goVGVzdE5hbWUsIHNpZ25hdHVyZSwgLi4uKVwKLSAgICB0ZW1wbGF0ZTxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHNpZ25hdHVyZSk+XAotICAgIHN0YXRpYyB2b2lkIFRlc3ROYW1lKCkKLQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1QwKFRlc3ROYW1lKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1QxKFRlc3ROYW1lLCBzaWduYXR1cmUpXAotICAgIHRlbXBsYXRlPElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoc2lnbmF0dXJlKT5cCi0gICAgc3RhdGljIHZvaWQgVGVzdE5hbWUoKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfWChUZXN0TmFtZSwgc2lnbmF0dXJlLC4uLilcCi0gICAgdGVtcGxhdGU8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhzaWduYXR1cmUpPlwKLSAgICBzdGF0aWMgdm9pZCBUZXN0TmFtZSgpCi0KLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUjAoVGVzdEZ1bmMsIHNpZ25hdHVyZSlcCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT5cCi0gICAgdm9pZCByZWdfdGVzdChUeXBlTGlzdDxUeXBlPiwgQ2F0Y2g6Ok5hbWVBbmRUYWdzIG5hbWVBbmRUYWdzKVwKLSAgICB7XAotICAgICAgICBDYXRjaDo6QXV0b1JlZyggQ2F0Y2g6Om1ha2VUZXN0SW52b2tlcigmVGVzdEZ1bmM8VHlwZT4pLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ2F0Y2g6OlN0cmluZ1JlZigpLCBuYW1lQW5kVGFncyk7XAotICAgIH0KLQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSKFRlc3RGdW5jLCBzaWduYXR1cmUsIC4uLilcCi0gICAgdGVtcGxhdGU8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhzaWduYXR1cmUpPlwKLSAgICB2b2lkIHJlZ190ZXN0KE50dHA8X19WQV9BUkdTX18+LCBDYXRjaDo6TmFtZUFuZFRhZ3MgbmFtZUFuZFRhZ3MpXAotICAgIHtcCi0gICAgICAgIENhdGNoOjpBdXRvUmVnKCBDYXRjaDo6bWFrZVRlc3RJbnZva2VyKCZUZXN0RnVuYzxfX1ZBX0FSR1NfXz4pLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ2F0Y2g6OlN0cmluZ1JlZigpLCBuYW1lQW5kVGFncyk7XAotICAgIH0KLQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSX01FVEhPRDAoVGVzdE5hbWUsIHNpZ25hdHVyZSwgLi4uKVwKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPlwKLSAgICB2b2lkIHJlZ190ZXN0KFR5cGVMaXN0PFR5cGU+LCBDYXRjaDo6U3RyaW5nUmVmIGNsYXNzTmFtZSwgQ2F0Y2g6Ok5hbWVBbmRUYWdzIG5hbWVBbmRUYWdzKVwKLSAgICB7XAotICAgICAgICBDYXRjaDo6QXV0b1JlZyggQ2F0Y2g6Om1ha2VUZXN0SW52b2tlcigmVGVzdE5hbWU8VHlwZT46OnRlc3QpLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgY2xhc3NOYW1lLCBuYW1lQW5kVGFncyk7XAotICAgIH0KLQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSX01FVEhPRChUZXN0TmFtZSwgc2lnbmF0dXJlLCAuLi4pXAotICAgIHRlbXBsYXRlPElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoc2lnbmF0dXJlKT5cCi0gICAgdm9pZCByZWdfdGVzdChOdHRwPF9fVkFfQVJHU19fPiwgQ2F0Y2g6OlN0cmluZ1JlZiBjbGFzc05hbWUsIENhdGNoOjpOYW1lQW5kVGFncyBuYW1lQW5kVGFncylcCi0gICAge1wKLSAgICAgICAgQ2F0Y2g6OkF1dG9SZWcoIENhdGNoOjptYWtlVGVzdEludm9rZXIoJlRlc3ROYW1lPF9fVkFfQVJHU19fPjo6dGVzdCksIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBjbGFzc05hbWUsIG5hbWVBbmRUYWdzKTtcCi0gICAgfQotCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EMChUZXN0TmFtZSwgQ2xhc3NOYW1lKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRDEoVGVzdE5hbWUsIENsYXNzTmFtZSwgc2lnbmF0dXJlKVwKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gXAotICAgIHN0cnVjdCBUZXN0TmFtZSA6IElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoQ2xhc3NOYW1lKTxUZXN0VHlwZT4geyBcCi0gICAgICAgIHZvaWQgdGVzdCgpO1wKLSAgICB9Ci0KLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9NRVRIT0RfWChUZXN0TmFtZSwgQ2xhc3NOYW1lLCBzaWduYXR1cmUsIC4uLilcCi0gICAgdGVtcGxhdGU8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhzaWduYXR1cmUpPiBcCi0gICAgc3RydWN0IFRlc3ROYW1lIDogSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhDbGFzc05hbWUpPF9fVkFfQVJHU19fPiB7IFwKLSAgICAgICAgdm9pZCB0ZXN0KCk7XAotICAgIH0KLQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EMChUZXN0TmFtZSkKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRDEoVGVzdE5hbWUsIHNpZ25hdHVyZSlcCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVGVzdFR5cGU+IFwKLSAgICB2b2lkIElOVEVSTkFMX0NBVENIX01BS0VfTkFNRVNQQUNFKFRlc3ROYW1lKTo6VGVzdE5hbWU8VGVzdFR5cGU+Ojp0ZXN0KCkKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRF9YKFRlc3ROYW1lLCBzaWduYXR1cmUsIC4uLilcCi0gICAgdGVtcGxhdGU8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhzaWduYXR1cmUpPiBcCi0gICAgdm9pZCBJTlRFUk5BTF9DQVRDSF9NQUtFX05BTUVTUEFDRShUZXN0TmFtZSk6OlRlc3ROYW1lPF9fVkFfQVJHU19fPjo6dGVzdCgpCi0KLSNpZm5kZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX05UVFBfMAotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9OVFRQX0dFTiguLi4pIElOVEVSTkFMX0NBVENIX1ZBX05BUkdTX0lNUEwoX19WQV9BUkdTX18sIElOVEVSTkFMX0NBVENIX05UVFBfMShfX1ZBX0FSR1NfXyksIElOVEVSTkFMX0NBVENIX05UVFBfMShfX1ZBX0FSR1NfXyksIElOVEVSTkFMX0NBVENIX05UVFBfMShfX1ZBX0FSR1NfXyksIElOVEVSTkFMX0NBVENIX05UVFBfMShfX1ZBX0FSR1NfXyksIElOVEVSTkFMX0NBVENIX05UVFBfMShfX1ZBX0FSR1NfXyksIElOVEVSTkFMX0NBVENIX05UVFBfMSggX19WQV9BUkdTX18pLCBJTlRFUk5BTF9DQVRDSF9OVFRQXzEoIF9fVkFfQVJHU19fKSwgSU5URVJOQUxfQ0FUQ0hfTlRUUF8xKCBfX1ZBX0FSR1NfXyksIElOVEVSTkFMX0NBVENIX05UVFBfMSggX19WQV9BUkdTX18pLElOVEVSTkFMX0NBVENIX05UVFBfMSggX19WQV9BUkdTX18pLCBJTlRFUk5BTF9DQVRDSF9OVFRQXzApCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0QoVGVzdE5hbWUsIC4uLikgSU5URVJOQUxfQ0FUQ0hfVkFfTkFSR1NfSU1QTCggImR1bW15IiwgX19WQV9BUkdTX18sIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0RfWCxJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0RfWCwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0RfWCwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRF9YLElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0RfWCxJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0QxLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EMCkoVGVzdE5hbWUsIF9fVkFfQVJHU19fKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRChUZXN0TmFtZSwgQ2xhc3NOYW1lLCAuLi4pIElOVEVSTkFMX0NBVENIX1ZBX05BUkdTX0lNUEwoICJkdW1teSIsIF9fVkFfQVJHU19fLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRF9YLElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EX1gsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EX1gsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EX1gsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EX1gsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EX1gsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EX1gsSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9NRVRIT0RfWCxJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRF9YLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRDEsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EMCkoVGVzdE5hbWUsIENsYXNzTmFtZSwgX19WQV9BUkdTX18pCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX05UVFBfUkVHX01FVEhPRF9HRU4oVGVzdE5hbWUsIC4uLikgSU5URVJOQUxfQ0FUQ0hfVkFfTkFSR1NfSU1QTCggImR1bW15IiwgX19WQV9BUkdTX18sIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVJfTUVUSE9ELCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSX01FVEhPRCwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUl9NRVRIT0QsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVJfTUVUSE9ELCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSX01FVEhPRCwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUl9NRVRIT0QsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVJfTUVUSE9ELCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSX01FVEhPRCwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUl9NRVRIT0QsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVJfTUVUSE9EMCwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUl9NRVRIT0QwKShUZXN0TmFtZSwgX19WQV9BUkdTX18pCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX05UVFBfUkVHX0dFTihUZXN0RnVuYywgLi4uKSBJTlRFUk5BTF9DQVRDSF9WQV9OQVJHU19JTVBMKCAiZHVtbXkiLCBfX1ZBX0FSR1NfXywgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUiwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUiwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUiwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUiwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUiwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUiwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUiwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUiwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUiwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUjAsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVIwKShUZXN0RnVuYywgX19WQV9BUkdTX18pCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVChUZXN0TmFtZSwgLi4uKSBJTlRFUk5BTF9DQVRDSF9WQV9OQVJHU19JTVBMKCAiZHVtbXkiLCBfX1ZBX0FSR1NfXywgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfWCwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfWCwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9YLElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9YLElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVDEsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVDApKFRlc3ROYW1lLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVChUZXN0TmFtZSwgLi4uKSBJTlRFUk5BTF9DQVRDSF9WQV9OQVJHU19JTVBMKCAiZHVtbXkiLCBfX1ZBX0FSR1NfXywgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9YLElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfWCwgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX1gsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfWCwgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfWCxJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX1gsSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUMSwgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVDApKFRlc3ROYW1lLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU19HRU4oLi4uKSBJTlRFUk5BTF9DQVRDSF9WQV9OQVJHU19JTVBMKF9fVkFfQVJHU19fLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzExX0FSRyxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzEwX0FSRyxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzlfQVJHLElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfOF9BUkcsSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU183X0FSRyxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzZfQVJHLElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfNV9BUkcsSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU180X0FSRyxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzNfQVJHLElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfMl9BUkcsSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU18xX0FSRykoX19WQV9BUkdTX18pCi0jZWxzZQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9OVFRQXzAoc2lnbmF0dXJlKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9OVFRQX0dFTiguLi4pIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyhJTlRFUk5BTF9DQVRDSF9WQV9OQVJHU19JTVBMKF9fVkFfQVJHU19fLCBJTlRFUk5BTF9DQVRDSF9OVFRQXzEsIElOVEVSTkFMX0NBVENIX05UVFBfMSwgSU5URVJOQUxfQ0FUQ0hfTlRUUF8xLCBJTlRFUk5BTF9DQVRDSF9OVFRQXzEsIElOVEVSTkFMX0NBVENIX05UVFBfMSwgSU5URVJOQUxfQ0FUQ0hfTlRUUF8xLCBJTlRFUk5BTF9DQVRDSF9OVFRQXzEsIElOVEVSTkFMX0NBVENIX05UVFBfMSwgSU5URVJOQUxfQ0FUQ0hfTlRUUF8xLElOVEVSTkFMX0NBVENIX05UVFBfMSwgSU5URVJOQUxfQ0FUQ0hfTlRUUF8wKSggX19WQV9BUkdTX18pKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EKFRlc3ROYW1lLCAuLi4pIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyhJTlRFUk5BTF9DQVRDSF9WQV9OQVJHU19JTVBMKCAiZHVtbXkiLCBfX1ZBX0FSR1NfXywgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRF9YLElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0RfWCwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0RfWCwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EX1gsSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRF9YLElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0RfWCwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX01FVEhPRDEsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9NRVRIT0QwKShUZXN0TmFtZSwgX19WQV9BUkdTX18pKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRChUZXN0TmFtZSwgQ2xhc3NOYW1lLCAuLi4pIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyhJTlRFUk5BTF9DQVRDSF9WQV9OQVJHU19JTVBMKCAiZHVtbXkiLCBfX1ZBX0FSR1NfXywgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9NRVRIT0RfWCxJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRF9YLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRF9YLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRF9YLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRF9YLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRF9YLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRF9YLElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EX1gsSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9NRVRIT0RfWCwgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9NRVRIT0QxLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRDApKFRlc3ROYW1lLCBDbGFzc05hbWUsIF9fVkFfQVJHU19fKSkKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdfTUVUSE9EX0dFTihUZXN0TmFtZSwgLi4uKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoSU5URVJOQUxfQ0FUQ0hfVkFfTkFSR1NfSU1QTCggImR1bW15IiwgX19WQV9BUkdTX18sIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVJfTUVUSE9ELCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSX01FVEhPRCwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUl9NRVRIT0QsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVJfTUVUSE9ELCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSX01FVEhPRCwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUl9NRVRIT0QsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVJfTUVUSE9ELCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSX01FVEhPRCwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUl9NRVRIT0QsIElOVEVSTkFMX0NBVENIX05UVFBfUkVHSVNURVJfTUVUSE9EMCwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUl9NRVRIT0QwKShUZXN0TmFtZSwgX19WQV9BUkdTX18pKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR19HRU4oVGVzdEZ1bmMsIC4uLikgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKElOVEVSTkFMX0NBVENIX1ZBX05BUkdTX0lNUEwoICJkdW1teSIsIF9fVkFfQVJHU19fLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSLCBJTlRFUk5BTF9DQVRDSF9OVFRQX1JFR0lTVEVSMCwgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdJU1RFUjApKFRlc3RGdW5jLCBfX1ZBX0FSR1NfXykpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVChUZXN0TmFtZSwgLi4uKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoSU5URVJOQUxfQ0FUQ0hfVkFfTkFSR1NfSU1QTCggImR1bW15IiwgX19WQV9BUkdTX18sIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfWCwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfWCwgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUX1gsIElOVEVSTkFMX0NBVENIX0RFRklORV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfWCxJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfWCxJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1QxLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1QwKShUZXN0TmFtZSwgX19WQV9BUkdTX18pKQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUKFRlc3ROYW1lLCAuLi4pIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyhJTlRFUk5BTF9DQVRDSF9WQV9OQVJHU19JTVBMKCAiZHVtbXkiLCBfX1ZBX0FSR1NfXywgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9YLElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfWCwgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX1gsIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfWCwgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfWCxJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX1gsSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVF9YLCBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUMSwgSU5URVJOQUxfQ0FUQ0hfREVDTEFSRV9TSUdfVEVTVDApKFRlc3ROYW1lLCBfX1ZBX0FSR1NfXykpCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfR0VOKC4uLikgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKElOVEVSTkFMX0NBVENIX1ZBX05BUkdTX0lNUEwoX19WQV9BUkdTX18sIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfMTFfQVJHLElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfMTBfQVJHLElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfOV9BUkcsSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU184X0FSRyxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzdfQVJHLElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfNl9BUkcsSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU181X0FSRyxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzRfQVJHLElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlNfM19BUkcsSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOU18yX0FSRyxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TXzFfQVJHKShfX1ZBX0FSR1NfXykpCi0jZW5kaWYKKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfTUFLRV9UWVBFX0xJU1RTX0ZST01fVFlQRVModHlwZXMpXAorICAgIENBVENIX1JFQ19MSVNUKElOVEVSTkFMX0NBVENIX01BS0VfVFlQRV9MSVNULElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlModHlwZXMpKQogCiAvLyBlbmQgY2F0Y2hfcHJlcHJvY2Vzc29yLmhwcAogLy8gc3RhcnQgY2F0Y2hfbWV0YS5ocHAKQEAgLTkxNCw0MCArNzQ3LDY4IEBACiAjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAKIG5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgYWx3YXlzX2ZhbHNlIDogc3RkOjpmYWxzZV90eXBlIHt9OwordGVtcGxhdGU8IHR5cGVuYW1lLi4uID4KK3N0cnVjdCBUeXBlTGlzdCB7fTsKIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4gc3RydWN0IHRydWVfZ2l2ZW4gOiBzdGQ6OnRydWVfdHlwZSB7fTsKLSAgICBzdHJ1Y3QgaXNfY2FsbGFibGVfdGVzdGVyIHsKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1biwgdHlwZW5hbWUuLi4gQXJncz4KLSAgICAgICAgdHJ1ZV9naXZlbjxkZWNsdHlwZShzdGQ6OmRlY2x2YWw8RnVuPigpKHN0ZDo6ZGVjbHZhbDxBcmdzPigpLi4uKSk+IHN0YXRpYyB0ZXN0KGludCk7Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLj4KLSAgICAgICAgc3RkOjpmYWxzZV90eXBlIHN0YXRpYyB0ZXN0KC4uLik7Cit0ZW1wbGF0ZTwgdHlwZW5hbWUuLi4gPgorc3RydWN0IGFwcGVuZDsKKwordGVtcGxhdGU8IHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBMMQorICAgICwgdHlwZW5hbWUuLi5FMQorICAgICwgdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzIEwyCisgICAgLCB0eXBlbmFtZS4uLkUyCis+CitzdHJ1Y3QgYXBwZW5kPCBMMTxFMS4uLj4sIEwyPEUyLi4uPiA+IHsKKyAgICB1c2luZyB0eXBlID0gTDE8RTEuLi4sIEUyLi4uPjsKK307CisKK3RlbXBsYXRlPCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgTDEKKyAgICAsIHR5cGVuYW1lLi4uRTEKKyAgICAsIHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBMMgorICAgICwgdHlwZW5hbWUuLi5FMgorICAgICwgdHlwZW5hbWUuLi5SZXN0Cis+CitzdHJ1Y3QgYXBwZW5kPCBMMTxFMS4uLj4sIEwyPEUyLi4uPiwgUmVzdC4uLj4geworICAgIHVzaW5nIHR5cGUgPSB0eXBlbmFtZSBhcHBlbmQ8IEwxPEUxLi4uLCBFMi4uLj4sIFJlc3QuLi4gPjo6dHlwZTsKK307CisKK3RlbXBsYXRlPCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MKKyAgICAsIHR5cGVuYW1lLi4uCis+CitzdHJ1Y3QgcmV3cmFwOworCit0ZW1wbGF0ZTwgdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzIENvbnRhaW5lcgorICAgICwgdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzIExpc3QKKyAgICAsIHR5cGVuYW1lLi4uZWxlbXMKKz4KK3N0cnVjdCByZXdyYXA8Q29udGFpbmVyLCBMaXN0PGVsZW1zLi4uPj4geworICAgIHVzaW5nIHR5cGUgPSBUeXBlTGlzdDwgQ29udGFpbmVyPCBlbGVtcy4uLiA+ID47Cit9OworCit0ZW1wbGF0ZTwgdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzIENvbnRhaW5lcgorICAgICwgdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzIExpc3QKKyAgICAsIGNsYXNzLi4uRWxlbXMKKyAgICAsIHR5cGVuYW1lLi4uRWxlbWVudHM+CisgICAgc3RydWN0IHJld3JhcDxDb250YWluZXIsIExpc3Q8RWxlbXMuLi4+LCBFbGVtZW50cy4uLj4geworICAgIHVzaW5nIHR5cGUgPSB0eXBlbmFtZSBhcHBlbmQ8VHlwZUxpc3Q8Q29udGFpbmVyPEVsZW1zLi4uPj4sIHR5cGVuYW1lIHJld3JhcDxDb250YWluZXIsIEVsZW1lbnRzLi4uPjo6dHlwZT46OnR5cGU7Cit9OworCit0ZW1wbGF0ZTwgdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzLi4uQ29udGFpbmVycyA+CitzdHJ1Y3QgY29tYmluZSB7CisgICAgdGVtcGxhdGU8IHR5cGVuYW1lLi4uVHlwZXMgPgorICAgIHN0cnVjdCB3aXRoX3R5cGVzIHsKKyAgICAgICAgdGVtcGxhdGU8IHRlbXBsYXRlIDx0eXBlbmFtZS4uLj4gY2xhc3MgRmluYWwgPgorICAgICAgICBzdHJ1Y3QgaW50byB7CisgICAgICAgICAgICB1c2luZyB0eXBlID0gdHlwZW5hbWUgYXBwZW5kPEZpbmFsPD4sIHR5cGVuYW1lIHJld3JhcDxDb250YWluZXJzLCBUeXBlcy4uLj46OnR5cGUuLi4+Ojp0eXBlOworICAgICAgICB9OwogICAgIH07Cit9OwogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IGlzX2NhbGxhYmxlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1biwgdHlwZW5hbWUuLi4gQXJncz4KLSAgICBzdHJ1Y3QgaXNfY2FsbGFibGU8RnVuKEFyZ3MuLi4pPiA6IGRlY2x0eXBlKGlzX2NhbGxhYmxlX3Rlc3Rlcjo6dGVzdDxGdW4sIEFyZ3MuLi4+KDApKSB7fTsKLQotI2lmIGRlZmluZWQoX19jcHBfbGliX2lzX2ludm9jYWJsZSkgJiYgX19jcHBfbGliX2lzX2ludm9jYWJsZSA+PSAyMDE3MDMKLSAgICAvLyBzdGQ6OnJlc3VsdF9vZiBpcyBkZXByZWNhdGVkIGluIEMrKzE3IGFuZCByZW1vdmVkIGluIEMrKzIwLiBIZW5jZSwgaXQgaXMKLSAgICAvLyByZXBsYWNlZCB3aXRoIHN0ZDo6aW52b2tlX3Jlc3VsdCBoZXJlLiBBbHNvICpfdCBmb3JtYXQgaXMgcHJlZmVycmVkIG92ZXIKLSAgICAvLyB0eXBlbmFtZSAqOjp0eXBlIGZvcm1hdC4KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVT4KLSAgICB1c2luZyBGdW5jdGlvblJldHVyblR5cGUgPSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxzdGQ6OnJlbW92ZV9jdl90PHN0ZDo6aW52b2tlX3Jlc3VsdF90PEZ1bmMsIFU+Pj47Ci0jZWxzZQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSBVPgotICAgIHVzaW5nIEZ1bmN0aW9uUmV0dXJuVHlwZSA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jdjx0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxGdW5jKFUpPjo6dHlwZT46OnR5cGU+Ojp0eXBlOwotI2VuZGlmCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IGFsd2F5c19mYWxzZSA6IHN0ZDo6ZmFsc2VfdHlwZSB7fTsKIAogfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKIAotbmFtZXNwYWNlIG1wbF97Ci0gICAgc3RydWN0IG5hOwotfQotCiAvLyBlbmQgY2F0Y2hfbWV0YS5ocHAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKQEAgLTk5Myw3MCArODU0LDM4IEBACiAgICAgICAgICAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIHZvaWQgVGVzdE5hbWU6OnRlc3QoKQotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTl8yKCBUZXN0TmFtZSwgVGVzdEZ1bmMsIE5hbWUsIFRhZ3MsIFNpZ25hdHVyZSwgLi4uICkgIFwKLSAgICAgICAgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUKFRlc3RGdW5jLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFNpZ25hdHVyZSkpCi0gICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX05PX1JFR0lTVFJBVElPTl8yKCBUZXN0TmFtZUNsYXNzLCBUZXN0TmFtZSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBTaWduYXR1cmUsIC4uLiApICAgIFwKKyAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9OT19SRUdJU1RSQVRJT04oIFRlc3ROYW1lLCAuLi4gKSAgXAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXRpYyB2b2lkIFRlc3ROYW1lKCkKKyAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OKCBUZXN0TmFtZSwgQ2xhc3NOYW1lLCAuLi4gKSAgICBcCiAgICAgICAgIG5hbWVzcGFjZXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgbmFtZXNwYWNlIElOVEVSTkFMX0NBVENIX01BS0VfTkFNRVNQQUNFKFRlc3ROYW1lKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBJTlRFUk5BTF9DQVRDSF9ERUNMQVJFX1NJR19URVNUX01FVEhPRChUZXN0TmFtZSwgQ2xhc3NOYW1lLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFNpZ25hdHVyZSkpO1wKKyAgICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzdHJ1Y3QgVGVzdE5hbWUgOiBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKENsYXNzTmFtZSA8VGVzdFR5cGU+KSB7ICAgICBcCisgICAgICAgICAgICAgICAgdm9pZCB0ZXN0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EKFRlc3ROYW1lLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFNpZ25hdHVyZSkpCi0KLSAgICAjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgotICAgICAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9OT19SRUdJU1RSQVRJT04oTmFtZSwgVGFncywgLi4uKSBcCi0gICAgICAgICAgICBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTk9fUkVHSVNUUkFUSU9OXzIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19GX1VfTl9DX19fXyApLCBOYW1lLCBUYWdzLCB0eXBlbmFtZSBUZXN0VHlwZSwgX19WQV9BUkdTX18gKQotICAgICNlbHNlCi0gICAgICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTihOYW1lLCBUYWdzLCAuLi4pIFwKLSAgICAgICAgICAgIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTl8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgTmFtZSwgVGFncywgdHlwZW5hbWUgVGVzdFR5cGUsIF9fVkFfQVJHU19fICkgKQotICAgICNlbmRpZgotCi0gICAgI2lmbmRlZiBDQVRDSF9DT05GSUdfVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IKLSAgICAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfU0lHX05PX1JFR0lTVFJBVElPTihOYW1lLCBUYWdzLCBTaWduYXR1cmUsIC4uLikgXAotICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTl8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgTmFtZSwgVGFncywgU2lnbmF0dXJlLCBfX1ZBX0FSR1NfXyApCi0gICAgI2Vsc2UKLSAgICAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfU0lHX05PX1JFR0lTVFJBVElPTihOYW1lLCBUYWdzLCBTaWduYXR1cmUsIC4uLikgXAotICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTk9fUkVHSVNUUkFUSU9OXzIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19GX1VfTl9DX19fXyApLCBOYW1lLCBUYWdzLCBTaWduYXR1cmUsIF9fVkFfQVJHU19fICkgKQotICAgICNlbmRpZgotCi0gICAgI2lmbmRlZiBDQVRDSF9DT05GSUdfVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IKLSAgICAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX05PX1JFR0lTVFJBVElPTiggQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLC4uLiApIFwKLSAgICAgICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OXzIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0NfTF9BX1NfU19fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICkgLCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIHR5cGVuYW1lIFQsIF9fVkFfQVJHU19fICkKLSAgICAjZWxzZQotICAgICAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OKCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsLi4uICkgXAotICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX05PX1JFR0lTVFJBVElPTl8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19DX0xfQV9TX1NfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApICwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCB0eXBlbmFtZSBULCBfX1ZBX0FSR1NfXyApICkKLSAgICAjZW5kaWYKLQotICAgICNpZm5kZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCi0gICAgICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9TSUdfTk9fUkVHSVNUUkFUSU9OKCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIFNpZ25hdHVyZSwgLi4uICkgXAotICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9OT19SRUdJU1RSQVRJT05fMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fQ19MX0FfU19TX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSAsIENsYXNzTmFtZSwgTmFtZSwgVGFncywgU2lnbmF0dXJlLCBfX1ZBX0FSR1NfXyApCi0gICAgI2Vsc2UKLSAgICAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJR19OT19SRUdJU1RSQVRJT04oIENsYXNzTmFtZSwgTmFtZSwgVGFncywgU2lnbmF0dXJlLCAuLi4gKSBcCi0gICAgICAgICAgICBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OXzIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0NfTF9BX1NfU19fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICkgLCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIFNpZ25hdHVyZSwgX19WQV9BUkdTX18gKSApCi0gICAgI2VuZGlmCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB2b2lkIFRlc3ROYW1lOjp0ZXN0KCkKICNlbmRpZgogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVTVENBU0UyKCBUZXN0TmFtZSwgLi4uICkgXAogICAgICAgICBzdGF0aWMgdm9pZCBUZXN0TmFtZSgpOyBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NUQVJUX1dBUk5JTkdTX1NVUFBSRVNTSU9OIFwKICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyBcCiAgICAgICAgIG5hbWVzcGFjZXsgQ2F0Y2g6OkF1dG9SZWcgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIGF1dG9SZWdpc3RyYXIgKSggQ2F0Y2g6Om1ha2VUZXN0SW52b2tlciggJlRlc3ROYW1lICksIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDYXRjaDo6U3RyaW5nUmVmKCksIENhdGNoOjpOYW1lQW5kVGFnc3sgX19WQV9BUkdTX18gfSApOyB9IC8qIE5PTElOVCAqLyBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NUT1BfV0FSTklOR1NfU1VQUFJFU1NJT04gXAorICAgICAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAogICAgICAgICBzdGF0aWMgdm9pZCBUZXN0TmFtZSgpCiAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URVNUQ0FTRSggLi4uICkgXAogICAgICAgICBJTlRFUk5BTF9DQVRDSF9URVNUQ0FTRTIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9TX1RfX19fICksIF9fVkFfQVJHU19fICkKIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX01FVEhPRF9BU19URVNUX0NBU0UoIFF1YWxpZmllZE1ldGhvZCwgLi4uICkgXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTiBcCiAgICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAogICAgICAgICBuYW1lc3BhY2V7IENhdGNoOjpBdXRvUmVnIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBhdXRvUmVnaXN0cmFyICkoIENhdGNoOjptYWtlVGVzdEludm9rZXIoICZRdWFsaWZpZWRNZXRob2QgKSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sICImIiAjUXVhbGlmaWVkTWV0aG9kLCBDYXRjaDo6TmFtZUFuZFRhZ3N7IF9fVkFfQVJHU19fIH0gKTsgfSAvKiBOT0xJTlQgKi8gXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVE9QX1dBUk5JTkdTX1NVUFBSRVNTSU9OCisgICAgICAgIENBVENIX0lOVEVSTkFMX1VOU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUwogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVTVF9DQVNFX01FVEhPRDIoIFRlc3ROYW1lLCBDbGFzc05hbWUsIC4uLiApXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTiBcCiAgICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAogICAgICAgICBuYW1lc3BhY2V7IFwKICAgICAgICAgICAgIHN0cnVjdCBUZXN0TmFtZSA6IElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoQ2xhc3NOYW1lKSB7IFwKQEAgLTEwNjQsNzcgKzg5Myw2NiBAQAogICAgICAgICAgICAgfTsgXAogICAgICAgICAgICAgQ2F0Y2g6OkF1dG9SZWcgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIGF1dG9SZWdpc3RyYXIgKSAoIENhdGNoOjptYWtlVGVzdEludm9rZXIoICZUZXN0TmFtZTo6dGVzdCApLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgI0NsYXNzTmFtZSwgQ2F0Y2g6Ok5hbWVBbmRUYWdzeyBfX1ZBX0FSR1NfXyB9ICk7IC8qIE5PTElOVCAqLyBcCiAgICAgICAgIH0gXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVE9QX1dBUk5JTkdTX1NVUFBSRVNTSU9OIFwKKyAgICAgICAgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTIFwKICAgICAgICAgdm9pZCBUZXN0TmFtZTo6dGVzdCgpCiAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URVNUX0NBU0VfTUVUSE9EKCBDbGFzc05hbWUsIC4uLiApIFwKICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVEVTVF9DQVNFX01FVEhPRDIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9TX1RfX19fICksIENsYXNzTmFtZSwgX19WQV9BUkdTX18gKQogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfUkVHSVNURVJfVEVTVENBU0UoIEZ1bmN0aW9uLCAuLi4gKSBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NUQVJUX1dBUk5JTkdTX1NVUFBSRVNTSU9OIFwKICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyBcCiAgICAgICAgIENhdGNoOjpBdXRvUmVnIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBhdXRvUmVnaXN0cmFyICkoIENhdGNoOjptYWtlVGVzdEludm9rZXIoIEZ1bmN0aW9uICksIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDYXRjaDo6U3RyaW5nUmVmKCksIENhdGNoOjpOYW1lQW5kVGFnc3sgX19WQV9BUkdTX18gfSApOyAvKiBOT0xJTlQgKi8gXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVE9QX1dBUk5JTkdTX1NVUFBSRVNTSU9OCisgICAgICAgIENBVENIX0lOVEVSTkFMX1VOU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUwogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFXzIoVGVzdE5hbWUsIFRlc3RGdW5jLCBOYW1lLCBUYWdzLCBTaWduYXR1cmUsIC4uLiApXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTiBcCisgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfMihUZXN0TmFtZSwgVGVzdEZ1bmMsIE5hbWUsIFRhZ3MsIC4uLiApXAogICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTIFwKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfWkVST19WQVJJQURJQ19XQVJOSU5HUyBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1VOVVNFRF9URU1QTEFURV9XQVJOSU5HUyBcCi0gICAgICAgIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1QoVGVzdEZ1bmMsIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoU2lnbmF0dXJlKSk7XAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gXAorICAgICAgICBzdGF0aWMgdm9pZCBUZXN0RnVuYygpO1wKICAgICAgICAgbmFtZXNwYWNlIHtcCi0gICAgICAgIG5hbWVzcGFjZSBJTlRFUk5BTF9DQVRDSF9NQUtFX05BTUVTUEFDRShUZXN0TmFtZSl7XAotICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVFlQRV9HRU5cCi0gICAgICAgICAgICBJTlRFUk5BTF9DQVRDSF9OVFRQX0dFTihJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFNpZ25hdHVyZSkpXAotICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdfR0VOKFRlc3RGdW5jLElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoU2lnbmF0dXJlKSlcCiAgICAgICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLlR5cGVzPiBcCiAgICAgICAgICAgICBzdHJ1Y3QgVGVzdE5hbWV7XAotICAgICAgICAgICAgICAgIFRlc3ROYW1lKCl7XAotICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGNoYXIgY29uc3QqIHRtcGxfdHlwZXNbXSA9IHtDQVRDSF9SRUNfTElTVChJTlRFUk5BTF9DQVRDSF9TVFJJTkdJWkVfV0lUSE9VVF9QQVJFTlMsIF9fVkFfQVJHU19fKX07XAorICAgICAgICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uVHM+IFwKKyAgICAgICAgICAgICAgICBUZXN0TmFtZShUcy4uLm5hbWVzKXtcCisgICAgICAgICAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX0NIRUNLX1VOSVFVRV9UWVBFUyhDQVRDSF9SRUNfTElTVChJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TLCBfX1ZBX0FSR1NfXykpIFwKICAgICAgICAgICAgICAgICAgICAgdXNpbmcgZXhwYW5kZXIgPSBpbnRbXTtcCi0gICAgICAgICAgICAgICAgICAgICh2b2lkKWV4cGFuZGVyeyhyZWdfdGVzdChUeXBlc3t9LCBDYXRjaDo6TmFtZUFuZFRhZ3N7IE5hbWUgIiAtICIgKyBzdGQ6OnN0cmluZyh0bXBsX3R5cGVzW2luZGV4XSksIFRhZ3MgfSApLCBpbmRleCsrLCAwKS4uLiB9Oy8qIE5PTElOVCAqLyBcCisgICAgICAgICAgICAgICAgICAgICh2b2lkKWV4cGFuZGVyeyhDYXRjaDo6QXV0b1JlZyggQ2F0Y2g6Om1ha2VUZXN0SW52b2tlciggJlRlc3RGdW5jPFR5cGVzPiApLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ2F0Y2g6OlN0cmluZ1JlZigpLCBDYXRjaDo6TmFtZUFuZFRhZ3N7IG5hbWVzLCBUYWdzIH0gKSwgMCkuLi4gfTsvKiBOT0xJTlQgKi8gXAogICAgICAgICAgICAgICAgIH1cCiAgICAgICAgICAgICB9O1wKLSAgICAgICAgICAgIHN0YXRpYyBpbnQgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIGdsb2JhbFJlZ2lzdHJhciApID0gW10oKXtcCi0gICAgICAgICAgICBUZXN0TmFtZTxJTlRFUk5BTF9DQVRDSF9NQUtFX1RZUEVfTElTVFNfRlJPTV9UWVBFUyhfX1ZBX0FSR1NfXyk+KCk7XAorICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUkVHSVNUUllfSU5JVElBVEUoVGVzdE5hbWUsIE5hbWUsIF9fVkFfQVJHU19fKSBcCisgICAgICAgIH1cCisgICAgICAgIENBVENIX0lOVEVSTkFMX1VOU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyBcCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiBcCisgICAgICAgIHN0YXRpYyB2b2lkIFRlc3RGdW5jKCkKKworI2lmIGRlZmluZWQoQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUikKKyNkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ0hFQ0tfVU5JUVVFX1RZUEVTKC4uLikgc3RhdGljX2Fzc2VydChDYXRjaDo6aXNfdW5pcXVlPF9fVkFfQVJHU19fPiwiRHVwbGljYXRlIHR5cGUgZGV0ZWN0ZWQgaW4gZGVjbGFyYXRpb24gb2YgdGVtcGxhdGUgdGVzdCBjYXNlIik7CisjZWxzZQorI2RlZmluZSBDQVRDSF9JTlRFUk5BTF9DSEVDS19VTklRVUVfVFlQRVMoLi4uKSBzdGF0aWNfYXNzZXJ0KENhdGNoOjppc191bmlxdWU8X19WQV9BUkdTX18+Ojp2YWx1ZSwiRHVwbGljYXRlIHR5cGUgZGV0ZWN0ZWQgaW4gZGVjbGFyYXRpb24gb2YgdGVtcGxhdGUgdGVzdCBjYXNlIik7CisjZW5kaWYKKworI2lmbmRlZiBDQVRDSF9DT05GSUdfVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IKKyAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRShOYW1lLCBUYWdzLCAuLi4pIFwKKyAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFXzIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19GX1VfTl9DX19fXyApLCBOYW1lLCBUYWdzLCBfX1ZBX0FSR1NfXyApCisjZWxzZQorICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKE5hbWUsIFRhZ3MsIC4uLikgXAorICAgICAgICBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgTmFtZSwgVGFncywgX19WQV9BUkdTX18gKSApCisjZW5kaWYKKworICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUkVHSVNUUllfSU5JVElBVEUoVGVzdE5hbWUsIE5hbWUsIC4uLilcCisgICAgICAgIHN0YXRpYyBpbnQgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIGdsb2JhbFJlZ2lzdHJhciApID0gW10oKXtcCisgICAgICAgICAgICBUZXN0TmFtZTxDQVRDSF9SRUNfTElTVChJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TLCBfX1ZBX0FSR1NfXyk+KENBVENIX1JFQ19MSVNUX1VEKElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1VOSVFVRV9OQU1FLE5hbWUsIF9fVkFfQVJHU19fKSk7XAogICAgICAgICAgICAgcmV0dXJuIDA7XAotICAgICAgICB9KCk7XAotICAgICAgICB9XAotICAgICAgICB9XAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVE9QX1dBUk5JTkdTX1NVUFBSRVNTSU9OIFwKLSAgICAgICAgSU5URVJOQUxfQ0FUQ0hfREVGSU5FX1NJR19URVNUKFRlc3RGdW5jLElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoU2lnbmF0dXJlKSkKKyAgICAgICAgfSgpOwogCi0jaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKE5hbWUsIFRhZ3MsIC4uLikgXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0ZfVV9OX0NfX19fICksIE5hbWUsIFRhZ3MsIHR5cGVuYW1lIFRlc3RUeXBlLCBfX1ZBX0FSR1NfXyApCi0jZWxzZQotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKE5hbWUsIFRhZ3MsIC4uLikgXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgTmFtZSwgVGFncywgdHlwZW5hbWUgVGVzdFR5cGUsIF9fVkFfQVJHU19fICkgKQotI2VuZGlmCi0KLSNpZm5kZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCi0gICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfU0lHKE5hbWUsIFRhZ3MsIFNpZ25hdHVyZSwgLi4uKSBcCi0gICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgTmFtZSwgVGFncywgU2lnbmF0dXJlLCBfX1ZBX0FSR1NfXyApCi0jZWxzZQotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX1NJRyhOYW1lLCBUYWdzLCBTaWduYXR1cmUsIC4uLikgXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgTmFtZSwgVGFncywgU2lnbmF0dXJlLCBfX1ZBX0FSR1NfXyApICkKLSNlbmRpZgotCi0gICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRTIoVGVzdE5hbWUsIFRlc3RGdW5jTmFtZSwgTmFtZSwgVGFncywgU2lnbmF0dXJlLCBUbXBsVHlwZXMsIFR5cGVzTGlzdCkgXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTiAgICAgICAgICAgICAgICAgICAgICBcCisgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRTIoVGVzdE5hbWUsIFRlc3RGdW5jTmFtZSwgTmFtZSwgVGFncywgVG1wbFR5cGVzLCBUeXBlc0xpc3QpIFwKICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1pFUk9fVkFSSUFESUNfV0FSTklOR1MgICAgICAgICAgICAgICAgXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19VTlVTRURfVEVNUExBVEVfV0FSTklOR1MgICAgICAgICAgICAgIFwKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGVzdFR5cGU+IHN0YXRpYyB2b2lkIFRlc3RGdW5jTmFtZSgpOyAgICAgICBcCi0gICAgICAgIG5hbWVzcGFjZSB7XAotICAgICAgICBuYW1lc3BhY2UgSU5URVJOQUxfQ0FUQ0hfTUFLRV9OQU1FU1BBQ0UoVGVzdE5hbWUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVFlQRV9HRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIElOVEVSTkFMX0NBVENIX05UVFBfR0VOKElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoU2lnbmF0dXJlKSkgICAgICAgICBcCisgICAgICAgIG5hbWVzcGFjZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlwZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIHN0cnVjdCBUZXN0TmFtZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdm9pZCByZWdfdGVzdHMoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRlc3ROYW1lKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfQ0hFQ0tfVU5JUVVFX1RZUEVTKFR5cGVzLi4uKSAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICB1c2luZyBleHBhbmRlciA9IGludFtdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGNoYXIgY29uc3QqIHRtcGxfdHlwZXNbXSA9IHtDQVRDSF9SRUNfTElTVChJTlRFUk5BTF9DQVRDSF9TVFJJTkdJWkVfV0lUSE9VVF9QQVJFTlMsIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoVG1wbFR5cGVzKSl9O1wKQEAgLTExNDQsMTI0ICs5NjIsNjUgQEAKICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgc3RhdGljIGludCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggZ2xvYmFsUmVnaXN0cmFyICkgPSBbXSgpeyBcCi0gICAgICAgICAgICAgICAgdXNpbmcgVGVzdEluaXQgPSB0eXBlbmFtZSBjcmVhdGU8VGVzdE5hbWUsIGRlY2x0eXBlKGdldF93cmFwcGVyPElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoVG1wbFR5cGVzKT4oKSksIFR5cGVMaXN0PElOVEVSTkFMX0NBVENIX01BS0VfVFlQRV9MSVNUU19GUk9NX1RZUEVTKElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoVHlwZXNMaXN0KSk+Pjo6dHlwZTsgXAotICAgICAgICAgICAgICAgIFRlc3RJbml0IHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB0LnJlZ190ZXN0cygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdXNpbmcgVGVzdEluaXQgPSBDYXRjaDo6Y29tYmluZTxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFRtcGxUeXBlcyk+IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OndpdGhfdHlwZXM8SU5URVJOQUxfQ0FUQ0hfTUFLRV9UWVBFX0xJU1RTX0ZST01fVFlQRVMoVHlwZXNMaXN0KT46OmludG88VGVzdE5hbWU+Ojp0eXBlOyBcCisgICAgICAgICAgICAgICAgVGVzdEluaXQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIH0oKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1RPUF9XQVJOSU5HU19TVVBQUkVTU0lPTiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGVzdFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIHN0YXRpYyB2b2lkIFRlc3RGdW5jTmFtZSgpCiAKICNpZm5kZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCiAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRShOYW1lLCBUYWdzLCAuLi4pXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRTIoSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0ZfVV9OX0NfX19fICksIE5hbWUsIFRhZ3MsIHR5cGVuYW1lIFQsX19WQV9BUkdTX18pCisgICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFMihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSxOYW1lLFRhZ3MsX19WQV9BUkdTX18pCiAjZWxzZQogICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoTmFtZSwgVGFncywgLi4uKVwKLSAgICAgICAgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRTIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19GX1VfTl9DX19fXyApLCBOYW1lLCBUYWdzLCB0eXBlbmFtZSBULCBfX1ZBX0FSR1NfXyApICkKKyAgICAgICAgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRTIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19GX1VfTl9DX19fXyApLCBOYW1lLCBUYWdzLCBfX1ZBX0FSR1NfXyApICkKICNlbmRpZgogCi0jaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfU0lHKE5hbWUsIFRhZ3MsIFNpZ25hdHVyZSwgLi4uKVwKLSAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UyKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19GX1VfTl9DX19fXyApLCBOYW1lLCBUYWdzLCBTaWduYXR1cmUsIF9fVkFfQVJHU19fKQotI2Vsc2UKLSAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX1NJRyhOYW1lLCBUYWdzLCBTaWduYXR1cmUsIC4uLilcCi0gICAgICAgIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UyKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgTmFtZSwgVGFncywgU2lnbmF0dXJlLCBfX1ZBX0FSR1NfXyApICkKLSNlbmRpZgotCi0gICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9MSVNUX1RFU1RfQ0FTRV8yKFRlc3ROYW1lLCBUZXN0RnVuYywgTmFtZSwgVGFncywgVG1wbExpc3QpXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTiBcCisgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EXzIoIFRlc3ROYW1lQ2xhc3MsIFRlc3ROYW1lLCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIC4uLiApIFwKICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1VOVVNFRF9URU1QTEFURV9XQVJOSU5HUyBcCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiBzdGF0aWMgdm9pZCBUZXN0RnVuYygpOyAgICAgICBcCi0gICAgICAgIG5hbWVzcGFjZSB7XAotICAgICAgICBuYW1lc3BhY2UgSU5URVJOQUxfQ0FUQ0hfTUFLRV9OQU1FU1BBQ0UoVGVzdE5hbWUpe1wKLSAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVFlQRV9HRU5cCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHN0cnVjdCBUZXN0TmFtZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB2b2lkIHJlZ190ZXN0cygpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaW50IGluZGV4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdXNpbmcgZXhwYW5kZXIgPSBpbnRbXTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKHZvaWQpZXhwYW5kZXJ7KENhdGNoOjpBdXRvUmVnKCBDYXRjaDo6bWFrZVRlc3RJbnZva2VyKCAmVGVzdEZ1bmM8VHlwZXM+ICksIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDYXRjaDo6U3RyaW5nUmVmKCksIENhdGNoOjpOYW1lQW5kVGFnc3sgTmFtZSAiIC0gIiArIHN0ZDo6c3RyaW5nKElOVEVSTkFMX0NBVENIX1NUUklOR0laRShUbXBsTGlzdCkpICsgIiAtICIgKyBzdGQ6OnRvX3N0cmluZyhpbmRleCksIFRhZ3MgfSApLCBpbmRleCsrLCAwKS4uLiB9Oy8qIE5PTElOVCAqL1wKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfTtcCi0gICAgICAgIHN0YXRpYyBpbnQgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIGdsb2JhbFJlZ2lzdHJhciApID0gW10oKXsgXAotICAgICAgICAgICAgICAgIHVzaW5nIFRlc3RJbml0ID0gdHlwZW5hbWUgY29udmVydDxUZXN0TmFtZSwgVG1wbExpc3Q+Ojp0eXBlOyBcCi0gICAgICAgICAgICAgICAgVGVzdEluaXQgdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHQucmVnX3Rlc3RzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9fVwKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1RPUF9XQVJOSU5HU19TVVBQUkVTU0lPTiAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc3RhdGljIHZvaWQgVGVzdEZ1bmMoKQotCi0gICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9MSVNUX1RFU1RfQ0FTRShOYW1lLCBUYWdzLCBUbXBsTGlzdCkgXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9MSVNUX1RFU1RfQ0FTRV8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgTmFtZSwgVGFncywgVG1wbExpc3QgKQotCi0gICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EXzIoIFRlc3ROYW1lQ2xhc3MsIFRlc3ROYW1lLCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIFNpZ25hdHVyZSwgLi4uICkgXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTiBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19aRVJPX1ZBUklBRElDX1dBUk5JTkdTIFwKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfVU5VU0VEX1RFTVBMQVRFX1dBUk5JTkdTIFwKLSAgICAgICAgbmFtZXNwYWNlIHtcCi0gICAgICAgIG5hbWVzcGFjZSBJTlRFUk5BTF9DQVRDSF9NQUtFX05BTUVTUEFDRShUZXN0TmFtZSl7IFwKLSAgICAgICAgICAgIElOVEVSTkFMX0NBVENIX1RZUEVfR0VOXAotICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfTlRUUF9HRU4oSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhTaWduYXR1cmUpKVwKLSAgICAgICAgICAgIElOVEVSTkFMX0NBVENIX0RFQ0xBUkVfU0lHX1RFU1RfTUVUSE9EKFRlc3ROYW1lLCBDbGFzc05hbWUsIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoU2lnbmF0dXJlKSk7XAotICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfTlRUUF9SRUdfTUVUSE9EX0dFTihUZXN0TmFtZSwgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhTaWduYXR1cmUpKVwKKyAgICAgICAgbmFtZXNwYWNleyBcCisgICAgICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gXAorICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1lIDogSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhDbGFzc05hbWUgPFRlc3RUeXBlPikgeyBcCisgICAgICAgICAgICAgICAgdm9pZCB0ZXN0KCk7XAorICAgICAgICAgICAgfTtcCiAgICAgICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLlR5cGVzPiBcCiAgICAgICAgICAgICBzdHJ1Y3QgVGVzdE5hbWVDbGFzc3tcCi0gICAgICAgICAgICAgICAgVGVzdE5hbWVDbGFzcygpe1wKLSAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBjaGFyIGNvbnN0KiB0bXBsX3R5cGVzW10gPSB7Q0FUQ0hfUkVDX0xJU1QoSU5URVJOQUxfQ0FUQ0hfU1RSSU5HSVpFX1dJVEhPVVRfUEFSRU5TLCBfX1ZBX0FSR1NfXyl9O1wKKyAgICAgICAgICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLlRzPiBcCisgICAgICAgICAgICAgICAgVGVzdE5hbWVDbGFzcyhUcy4uLm5hbWVzKXtcCisgICAgICAgICAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX0NIRUNLX1VOSVFVRV9UWVBFUyhDQVRDSF9SRUNfTElTVChJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TLCBfX1ZBX0FSR1NfXykpIFwKICAgICAgICAgICAgICAgICAgICAgdXNpbmcgZXhwYW5kZXIgPSBpbnRbXTtcCi0gICAgICAgICAgICAgICAgICAgICh2b2lkKWV4cGFuZGVyeyhyZWdfdGVzdChUeXBlc3t9LCAjQ2xhc3NOYW1lLCBDYXRjaDo6TmFtZUFuZFRhZ3N7IE5hbWUgIiAtICIgKyBzdGQ6OnN0cmluZyh0bXBsX3R5cGVzW2luZGV4XSksIFRhZ3MgfSApLCBpbmRleCsrLCAwKS4uLiB9Oy8qIE5PTElOVCAqLyBcCisgICAgICAgICAgICAgICAgICAgICh2b2lkKWV4cGFuZGVyeyhDYXRjaDo6QXV0b1JlZyggQ2F0Y2g6Om1ha2VUZXN0SW52b2tlciggJlRlc3ROYW1lPFR5cGVzPjo6dGVzdCApLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgI0NsYXNzTmFtZSwgQ2F0Y2g6Ok5hbWVBbmRUYWdzeyBuYW1lcywgVGFncyB9ICksIDApLi4uIH07LyogTk9MSU5UICovIFwKICAgICAgICAgICAgICAgICB9XAogICAgICAgICAgICAgfTtcCi0gICAgICAgICAgICBzdGF0aWMgaW50IElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBnbG9iYWxSZWdpc3RyYXIgKSA9IFtdKCl7XAotICAgICAgICAgICAgICAgIFRlc3ROYW1lQ2xhc3M8SU5URVJOQUxfQ0FUQ0hfTUFLRV9UWVBFX0xJU1RTX0ZST01fVFlQRVMoX19WQV9BUkdTX18pPigpO1wKLSAgICAgICAgICAgICAgICByZXR1cm4gMDtcCi0gICAgICAgIH0oKTtcCisgICAgICAgICAgICBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9SRUdJU1RSWV9JTklUSUFURShUZXN0TmFtZUNsYXNzLCBOYW1lLCBfX1ZBX0FSR1NfXylcCiAgICAgICAgIH1cCi0gICAgICAgIH1cCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NUT1BfV0FSTklOR1NfU1VQUFJFU1NJT04gXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9ERUZJTkVfU0lHX1RFU1RfTUVUSE9EKFRlc3ROYW1lLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFNpZ25hdHVyZSkpCisgICAgICAgIENBVENIX0lOVEVSTkFMX1VOU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HU1wKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGVzdFR5cGU+IFwKKyAgICAgICAgdm9pZCBUZXN0TmFtZTxUZXN0VHlwZT46OnRlc3QoKQogCiAjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgogICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLC4uLiApIFwKLSAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19DX0xfQV9TX1NfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApICwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCB0eXBlbmFtZSBULCBfX1ZBX0FSR1NfXyApCisgICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fQ19MX0FfU19TX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSAsIENsYXNzTmFtZSwgTmFtZSwgVGFncywgX19WQV9BUkdTX18gKQogI2Vsc2UKICAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIENsYXNzTmFtZSwgTmFtZSwgVGFncywuLi4gKSBcCi0gICAgICAgIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19DX0xfQV9TX1NfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApICwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCB0eXBlbmFtZSBULCBfX1ZBX0FSR1NfXyApICkKKyAgICAgICAgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EXzIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0NfTF9BX1NfU19fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICkgLCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIF9fVkFfQVJHU19fICkgKQogI2VuZGlmCiAKLSNpZm5kZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCi0gICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyggQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBTaWduYXR1cmUsIC4uLiApIFwKLSAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19DX0xfQV9TX1NfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApICwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBTaWduYXR1cmUsIF9fVkFfQVJHU19fICkKLSNlbHNlCi0gICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyggQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBTaWduYXR1cmUsIC4uLiApIFwKLSAgICAgICAgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EXzIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0NfTF9BX1NfU19fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICkgLCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIFNpZ25hdHVyZSwgX19WQV9BUkdTX18gKSApCi0jZW5kaWYKLQotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EXzIoVGVzdE5hbWVDbGFzcywgVGVzdE5hbWUsIENsYXNzTmFtZSwgTmFtZSwgVGFncywgU2lnbmF0dXJlLCBUbXBsVHlwZXMsIFR5cGVzTGlzdClcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NUQVJUX1dBUk5JTkdTX1NVUFBSRVNTSU9OIFwKKyAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF8yKFRlc3ROYW1lQ2xhc3MsIFRlc3ROYW1lLCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIFRtcGxUeXBlcywgVHlwZXNMaXN0KVwKICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1pFUk9fVkFSSUFESUNfV0FSTklOR1MgXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19VTlVTRURfVEVNUExBVEVfV0FSTklOR1MgXAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gXAogICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1lIDogSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhDbGFzc05hbWUgPFRlc3RUeXBlPikgeyBcCiAgICAgICAgICAgICAgICAgdm9pZCB0ZXN0KCk7XAogICAgICAgICAgICAgfTtcCiAgICAgICAgIG5hbWVzcGFjZSB7XAotICAgICAgICBuYW1lc3BhY2UgSU5URVJOQUxfQ0FUQ0hfTUFLRV9OQU1FU1BBQ0UoVGVzdE5hbWVDbGFzcykge1wKLSAgICAgICAgICAgIElOVEVSTkFMX0NBVENIX1RZUEVfR0VOICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfTlRUUF9HRU4oSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhTaWduYXR1cmUpKVwKICAgICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uVHlwZXM+XAogICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1lQ2xhc3N7XAotICAgICAgICAgICAgICAgIHZvaWQgcmVnX3Rlc3RzKCl7XAorICAgICAgICAgICAgICAgIFRlc3ROYW1lQ2xhc3MoKXtcCisgICAgICAgICAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX0NIRUNLX1VOSVFVRV9UWVBFUyhUeXBlcy4uLilcCiAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCA9IDA7XAogICAgICAgICAgICAgICAgICAgICB1c2luZyBleHBhbmRlciA9IGludFtdO1wKICAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGNoYXIgY29uc3QqIHRtcGxfdHlwZXNbXSA9IHtDQVRDSF9SRUNfTElTVChJTlRFUk5BTF9DQVRDSF9TVFJJTkdJWkVfV0lUSE9VVF9QQVJFTlMsIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoVG1wbFR5cGVzKSl9O1wKQEAgLTEyNzEsNjYgKzEwMzAsMjQgQEAKICAgICAgICAgICAgICAgICB9XAogICAgICAgICAgICAgfTtcCiAgICAgICAgICAgICBzdGF0aWMgaW50IElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBnbG9iYWxSZWdpc3RyYXIgKSA9IFtdKCl7XAotICAgICAgICAgICAgICAgIHVzaW5nIFRlc3RJbml0ID0gdHlwZW5hbWUgY3JlYXRlPFRlc3ROYW1lQ2xhc3MsIGRlY2x0eXBlKGdldF93cmFwcGVyPElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoVG1wbFR5cGVzKT4oKSksIFR5cGVMaXN0PElOVEVSTkFMX0NBVENIX01BS0VfVFlQRV9MSVNUU19GUk9NX1RZUEVTKElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoVHlwZXNMaXN0KSk+Pjo6dHlwZTtcCi0gICAgICAgICAgICAgICAgVGVzdEluaXQgdDtcCi0gICAgICAgICAgICAgICAgdC5yZWdfdGVzdHMoKTtcCisgICAgICAgICAgICAgICAgdXNpbmcgVGVzdEluaXQgPSBDYXRjaDo6Y29tYmluZTxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFRtcGxUeXBlcyk+XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6d2l0aF90eXBlczxJTlRFUk5BTF9DQVRDSF9NQUtFX1RZUEVfTElTVFNfRlJPTV9UWVBFUyhUeXBlc0xpc3QpPjo6aW50bzxUZXN0TmFtZUNsYXNzPjo6dHlwZTtcCisgICAgICAgICAgICAgICAgVGVzdEluaXQoKTtcCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XAogICAgICAgICAgICAgfSgpOyBcCiAgICAgICAgIH1cCi0gICAgICAgIH1cCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NUT1BfV0FSTklOR1NfU1VQUFJFU1NJT04gXAorICAgICAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gXAogICAgICAgICB2b2lkIFRlc3ROYW1lPFRlc3RUeXBlPjo6dGVzdCgpCiAKICNpZm5kZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCiAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QoIENsYXNzTmFtZSwgTmFtZSwgVGFncywgLi4uIClcCi0gICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCB0eXBlbmFtZSBULCBfX1ZBX0FSR1NfXyApCisgICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBfX1ZBX0FSR1NfXyApCiAjZWxzZQogICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIC4uLiApXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCB0eXBlbmFtZSBULF9fVkFfQVJHU19fICkgKQorICAgICAgICBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBfX1ZBX0FSR1NfXyApICkKICNlbmRpZgogCi0jaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyggQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBTaWduYXR1cmUsIC4uLiApXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0ZfVV9OX0NfX19fICksIENsYXNzTmFtZSwgTmFtZSwgVGFncywgU2lnbmF0dXJlLCBfX1ZBX0FSR1NfXyApCi0jZWxzZQotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyggQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBTaWduYXR1cmUsIC4uLiApXAotICAgICAgICBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBTaWduYXR1cmUsX19WQV9BUkdTX18gKSApCi0jZW5kaWYKLQotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfTElTVF9URVNUX0NBU0VfTUVUSE9EXzIoIFRlc3ROYW1lQ2xhc3MsIFRlc3ROYW1lLCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIFRtcGxMaXN0KSBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NUQVJUX1dBUk5JTkdTX1NVUFBSRVNTSU9OIFwKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1VOVVNFRF9URU1QTEFURV9XQVJOSU5HUyBcCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiBcCi0gICAgICAgIHN0cnVjdCBUZXN0TmFtZSA6IElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoQ2xhc3NOYW1lIDxUZXN0VHlwZT4pIHsgXAotICAgICAgICAgICAgdm9pZCB0ZXN0KCk7XAotICAgICAgICB9O1wKLSAgICAgICAgbmFtZXNwYWNlIHtcCi0gICAgICAgIG5hbWVzcGFjZSBJTlRFUk5BTF9DQVRDSF9NQUtFX05BTUVTUEFDRShUZXN0TmFtZSl7IFwKLSAgICAgICAgICAgIElOVEVSTkFMX0NBVENIX1RZUEVfR0VOXAotICAgICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi5UeXBlcz5cCi0gICAgICAgICAgICBzdHJ1Y3QgVGVzdE5hbWVDbGFzc3tcCi0gICAgICAgICAgICAgICAgdm9pZCByZWdfdGVzdHMoKXtcCi0gICAgICAgICAgICAgICAgICAgIGludCBpbmRleCA9IDA7XAotICAgICAgICAgICAgICAgICAgICB1c2luZyBleHBhbmRlciA9IGludFtdO1wKLSAgICAgICAgICAgICAgICAgICAgKHZvaWQpZXhwYW5kZXJ7KENhdGNoOjpBdXRvUmVnKCBDYXRjaDo6bWFrZVRlc3RJbnZva2VyKCAmVGVzdE5hbWU8VHlwZXM+Ojp0ZXN0ICksIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCAjQ2xhc3NOYW1lLCBDYXRjaDo6TmFtZUFuZFRhZ3N7IE5hbWUgIiAtICIgKyBzdGQ6OnN0cmluZyhJTlRFUk5BTF9DQVRDSF9TVFJJTkdJWkUoVG1wbExpc3QpKSArICIgLSAiICsgc3RkOjp0b19zdHJpbmcoaW5kZXgpLCBUYWdzIH0gKSwgaW5kZXgrKywgMCkuLi4gfTsvKiBOT0xJTlQgKi8gXAotICAgICAgICAgICAgICAgIH1cCi0gICAgICAgICAgICB9O1wKLSAgICAgICAgICAgIHN0YXRpYyBpbnQgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIGdsb2JhbFJlZ2lzdHJhciApID0gW10oKXtcCi0gICAgICAgICAgICAgICAgdXNpbmcgVGVzdEluaXQgPSB0eXBlbmFtZSBjb252ZXJ0PFRlc3ROYW1lQ2xhc3MsIFRtcGxMaXN0Pjo6dHlwZTtcCi0gICAgICAgICAgICAgICAgVGVzdEluaXQgdDtcCi0gICAgICAgICAgICAgICAgdC5yZWdfdGVzdHMoKTtcCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7XAotICAgICAgICAgICAgfSgpOyBcCi0gICAgICAgIH19XAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVE9QX1dBUk5JTkdTX1NVUFBSRVNTSU9OIFwKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGVzdFR5cGU+IFwKLSAgICAgICAgdm9pZCBUZXN0TmFtZTxUZXN0VHlwZT46OnRlc3QoKQotCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX0xJU1RfVEVTVF9DQVNFX01FVEhPRChDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIFRtcGxMaXN0KSBcCi0gICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX0xJU1RfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBUbXBsTGlzdCApCi0KIC8vIGVuZCBjYXRjaF90ZXN0X3JlZ2lzdHJ5LmgKIC8vIHN0YXJ0IGNhdGNoX2NhcHR1cmUuaHBwCiAKQEAgLTE0MzAsNyArMTE0Nyw3IEBACiAKICAgICBhdXRvIG1ha2VTdHJlYW0oIFN0cmluZ1JlZiBjb25zdCAmZmlsZW5hbWUgKSAtPiBJU3RyZWFtIGNvbnN0KjsKIAotICAgIGNsYXNzIFJldXNhYmxlU3RyaW5nU3RyZWFtIDogTm9uQ29weWFibGUgeworICAgIGNsYXNzIFJldXNhYmxlU3RyaW5nU3RyZWFtIHsKICAgICAgICAgc3RkOjpzaXplX3QgbV9pbmRleDsKICAgICAgICAgc3RkOjpvc3RyZWFtKiBtX29zczsKICAgICBwdWJsaWM6CkBAIC0xNDQ5LDQyICsxMTY2LDYgQEAKIH0KIAogLy8gZW5kIGNhdGNoX3N0cmVhbS5oCi0vLyBzdGFydCBjYXRjaF9pbnRlcmZhY2VzX2VudW1fdmFsdWVzX3JlZ2lzdHJ5LmgKLQotI2luY2x1ZGUgPHZlY3Rvcj4KLQotbmFtZXNwYWNlIENhdGNoIHsKLQotICAgIG5hbWVzcGFjZSBEZXRhaWwgewotICAgICAgICBzdHJ1Y3QgRW51bUluZm8gewotICAgICAgICAgICAgU3RyaW5nUmVmIG1fbmFtZTsKLSAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxpbnQsIFN0cmluZ1JlZj4+IG1fdmFsdWVzOwotCi0gICAgICAgICAgICB+RW51bUluZm8oKTsKLQotICAgICAgICAgICAgU3RyaW5nUmVmIGxvb2t1cCggaW50IHZhbHVlICkgY29uc3Q7Ci0gICAgICAgIH07Ci0gICAgfSAvLyBuYW1lc3BhY2UgRGV0YWlsCi0KLSAgICBzdHJ1Y3QgSU11dGFibGVFbnVtVmFsdWVzUmVnaXN0cnkgewotICAgICAgICB2aXJ0dWFsIH5JTXV0YWJsZUVudW1WYWx1ZXNSZWdpc3RyeSgpOwotCi0gICAgICAgIHZpcnR1YWwgRGV0YWlsOjpFbnVtSW5mbyBjb25zdCYgcmVnaXN0ZXJFbnVtKCBTdHJpbmdSZWYgZW51bU5hbWUsIFN0cmluZ1JlZiBhbGxFbnVtcywgc3RkOjp2ZWN0b3I8aW50PiBjb25zdCYgdmFsdWVzICkgPSAwOwotCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEU+Ci0gICAgICAgIERldGFpbDo6RW51bUluZm8gY29uc3QmIHJlZ2lzdGVyRW51bSggU3RyaW5nUmVmIGVudW1OYW1lLCBTdHJpbmdSZWYgYWxsRW51bXMsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxFPiB2YWx1ZXMgKSB7Ci0gICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihpbnQpID49IHNpemVvZihFKSwgIkNhbm5vdCBzZXJpYWxpemUgZW51bSB0byBpbnQiKTsKLSAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGludD4gaW50VmFsdWVzOwotICAgICAgICAgICAgaW50VmFsdWVzLnJlc2VydmUoIHZhbHVlcy5zaXplKCkgKTsKLSAgICAgICAgICAgIGZvciggYXV0byBlbnVtVmFsdWUgOiB2YWx1ZXMgKQotICAgICAgICAgICAgICAgIGludFZhbHVlcy5wdXNoX2JhY2soIHN0YXRpY19jYXN0PGludD4oIGVudW1WYWx1ZSApICk7Ci0gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXJFbnVtKCBlbnVtTmFtZSwgYWxsRW51bXMsIGludFZhbHVlcyApOwotICAgICAgICB9Ci0gICAgfTsKLQotfSAvLyBDYXRjaAotCi0vLyBlbmQgY2F0Y2hfaW50ZXJmYWNlc19lbnVtX3ZhbHVlc19yZWdpc3RyeS5oCiAKICNpZmRlZiBDQVRDSF9DT05GSUdfQ1BQMTdfU1RSSU5HX1ZJRVcKICNpbmNsdWRlIDxzdHJpbmdfdmlldz4KQEAgLTE1NTUsOSArMTIzNiw5IEBACiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICAgICAgY2xhc3MgSXNTdHJlYW1JbnNlcnRhYmxlIHsKLSAgICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0cmVhbSwgdHlwZW5hbWUgVT4KKyAgICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNTLCB0eXBlbmFtZSBUVD4KICAgICAgICAgICAgIHN0YXRpYyBhdXRvIHRlc3QoaW50KQotICAgICAgICAgICAgICAgIC0+IGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxTdHJlYW0mPigpIDw8IHN0ZDo6ZGVjbHZhbDxVPigpLCBzdGQ6OnRydWVfdHlwZSgpKTsKKyAgICAgICAgICAgICAgICAtPiBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8U1MmPigpIDw8IHN0ZDo6ZGVjbHZhbDxUVD4oKSwgc3RkOjp0cnVlX3R5cGUoKSk7CiAKICAgICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZT4KICAgICAgICAgICAgIHN0YXRpYyBhdXRvIHRlc3QoLi4uKS0+c3RkOjpmYWxzZV90eXBlOwpAQCAtMTcxOSwxMiArMTQwMCw2IEBACiAgICAgICAgIH0KICAgICB9OwogCi0jaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTdfQllURSkKLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFN0cmluZ01ha2VyPHN0ZDo6Ynl0ZT4gewotICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgY29udmVydChzdGQ6OmJ5dGUgdmFsdWUpOwotICAgIH07Ci0jZW5kaWYgLy8gZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTdfQllURSkKICAgICB0ZW1wbGF0ZTw+CiAgICAgc3RydWN0IFN0cmluZ01ha2VyPGludD4gewogICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgY29udmVydChpbnQgdmFsdWUpOwpAQCAtMTc3NiwxMyArMTQ1MSwxMCBAQAogICAgIHRlbXBsYXRlPD4KICAgICBzdHJ1Y3QgU3RyaW5nTWFrZXI8ZmxvYXQ+IHsKICAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnZlcnQoZmxvYXQgdmFsdWUpOwotICAgICAgICBzdGF0aWMgaW50IHByZWNpc2lvbjsKICAgICB9OwotCiAgICAgdGVtcGxhdGU8PgogICAgIHN0cnVjdCBTdHJpbmdNYWtlcjxkb3VibGU+IHsKICAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnZlcnQoZG91YmxlIHZhbHVlKTsKLSAgICAgICAgc3RhdGljIGludCBwcmVjaXNpb247CiAgICAgfTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgpAQCAtMjE1NSwxOCArMTgyNyw2IEBACiB9CiAjZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX0VOQUJMRV9DSFJPTk9fU1RSSU5HTUFLRVIKIAotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9SRUdJU1RFUl9FTlVNKCBlbnVtTmFtZSwgLi4uICkgXAotbmFtZXNwYWNlIENhdGNoIHsgXAotICAgIHRlbXBsYXRlPD4gc3RydWN0IFN0cmluZ01ha2VyPGVudW1OYW1lPiB7IFwKLSAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnZlcnQoIGVudW1OYW1lIHZhbHVlICkgeyBcCi0gICAgICAgICAgICBzdGF0aWMgY29uc3QgYXV0byYgZW51bUluZm8gPSA6OkNhdGNoOjpnZXRNdXRhYmxlUmVnaXN0cnlIdWIoKS5nZXRNdXRhYmxlRW51bVZhbHVlc1JlZ2lzdHJ5KCkucmVnaXN0ZXJFbnVtKCAjZW51bU5hbWUsICNfX1ZBX0FSR1NfXywgeyBfX1ZBX0FSR1NfXyB9ICk7IFwKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzdGQ6OnN0cmluZz4oZW51bUluZm8ubG9va3VwKCBzdGF0aWNfY2FzdDxpbnQ+KCB2YWx1ZSApICkpOyBcCi0gICAgICAgIH0gXAotICAgIH07IFwKLX0KLQotI2RlZmluZSBDQVRDSF9SRUdJU1RFUl9FTlVNKCBlbnVtTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfUkVHSVNURVJfRU5VTSggZW51bU5hbWUsIF9fVkFfQVJHU19fICkKLQogI2lmZGVmIF9NU0NfVkVSCiAjcHJhZ21hIHdhcm5pbmcocG9wKQogI2VuZGlmCkBAIC0yNDA2LDcgKzIwNjYsNiBAQAogLy8gc3RhcnQgY2F0Y2hfaW50ZXJmYWNlc19jYXB0dXJlLmgKIAogI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxjaHJvbm8+CiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKQEAgLTI0MTcsMTggKzIwNzYsMTQgQEAKICAgICBzdHJ1Y3QgTWVzc2FnZUluZm87CiAgICAgc3RydWN0IE1lc3NhZ2VCdWlsZGVyOwogICAgIHN0cnVjdCBDb3VudHM7CisgICAgc3RydWN0IEJlbmNobWFya0luZm87CisgICAgc3RydWN0IEJlbmNobWFya1N0YXRzOwogICAgIHN0cnVjdCBBc3NlcnRpb25SZWFjdGlvbjsKICAgICBzdHJ1Y3QgU291cmNlTGluZUluZm87CiAKICAgICBzdHJ1Y3QgSVRyYW5zaWVudEV4cHJlc3Npb247CiAgICAgc3RydWN0IElHZW5lcmF0b3JUcmFja2VyOwogCi0jaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORykKLSAgICBzdHJ1Y3QgQmVuY2htYXJrSW5mbzsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRHVyYXRpb24gPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlLCBzdGQ6Om5hbm8+PgotICAgIHN0cnVjdCBCZW5jaG1hcmtTdGF0czsKLSNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORwotCiAgICAgc3RydWN0IElSZXN1bHRDYXB0dXJlIHsKIAogICAgICAgICB2aXJ0dWFsIH5JUmVzdWx0Q2FwdHVyZSgpOwpAQCAtMjQ0MCwxMiArMjA5NSw4IEBACiAKICAgICAgICAgdmlydHVhbCBhdXRvIGFjcXVpcmVHZW5lcmF0b3JUcmFja2VyKCBTb3VyY2VMaW5lSW5mbyBjb25zdCYgbGluZUluZm8gKSAtPiBJR2VuZXJhdG9yVHJhY2tlciYgPSAwOwogCi0jaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORykKLSAgICAgICAgdmlydHVhbCB2b2lkIGJlbmNobWFya1ByZXBhcmluZyggc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBiZW5jaG1hcmtTdGFydGluZyggQmVuY2htYXJrSW5mbyBjb25zdCYgaW5mbyApID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGJlbmNobWFya0VuZGVkKCBCZW5jaG1hcmtTdGF0czw+IGNvbnN0JiBzdGF0cyApID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGJlbmNobWFya0ZhaWxlZCggc3RkOjpzdHJpbmcgY29uc3QmIGVycm9yICkgPSAwOwotI2VuZGlmIC8vIENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HCisgICAgICAgIHZpcnR1YWwgdm9pZCBiZW5jaG1hcmtFbmRlZCggQmVuY2htYXJrU3RhdHMgY29uc3QmIHN0YXRzICkgPSAwOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwdXNoU2NvcGVkTWVzc2FnZSggTWVzc2FnZUluZm8gY29uc3QmIG1lc3NhZ2UgKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwb3BTY29wZWRNZXNzYWdlKCBNZXNzYWdlSW5mbyBjb25zdCYgbWVzc2FnZSApID0gMDsKQEAgLTI2NzYsMTYgKzIzMjcsMTUgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVTVCggbWFjcm9OYW1lLCByZXN1bHREaXNwb3NpdGlvbiwgLi4uICkgXAogICAgIGRvIHsgXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9JR05PUkVfQlVUX1dBUk4oX19WQV9BUkdTX18pOyBcCiAgICAgICAgIENhdGNoOjpBc3NlcnRpb25IYW5kbGVyIGNhdGNoQXNzZXJ0aW9uSGFuZGxlciggbWFjcm9OYW1lIyNfY2F0Y2hfc3IsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDQVRDSF9JTlRFUk5BTF9TVFJJTkdJRlkoX19WQV9BUkdTX18pLCByZXN1bHREaXNwb3NpdGlvbiApOyBcCiAgICAgICAgIElOVEVSTkFMX0NBVENIX1RSWSB7IFwKLSAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX1NUQVJUX1dBUk5JTkdTX1NVUFBSRVNTSU9OIFwKICAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1BBUkVOVEhFU0VTX1dBUk5JTkdTIFwKICAgICAgICAgICAgIGNhdGNoQXNzZXJ0aW9uSGFuZGxlci5oYW5kbGVFeHByKCBDYXRjaDo6RGVjb21wb3NlcigpIDw9IF9fVkFfQVJHU19fICk7IFwKLSAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX1NUT1BfV0FSTklOR1NfU1VQUFJFU1NJT04gXAorICAgICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19QQVJFTlRIRVNFU19XQVJOSU5HUyBcCiAgICAgICAgIH0gSU5URVJOQUxfQ0FUQ0hfQ0FUQ0goIGNhdGNoQXNzZXJ0aW9uSGFuZGxlciApIFwKICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfUkVBQ1QoIGNhdGNoQXNzZXJ0aW9uSGFuZGxlciApIFwKLSAgICB9IHdoaWxlKCBmYWxzZSApCisgICAgfSB3aGlsZSggKHZvaWQpMCwgKGZhbHNlKSAmJiBzdGF0aWNfY2FzdDxib29sPiggISEoX19WQV9BUkdTX18pICkgKSAvLyB0aGUgZXhwcmVzc2lvbiBoZXJlIGlzIG5ldmVyIGV2YWx1YXRlZCBhdCBydW50aW1lIGJ1dCBpdCBmb3JjZXMgdGhlIGNvbXBpbGVyIHRvIGdpdmUgaXQgYSBsb29rCisgICAgLy8gVGhlIGRvdWJsZSBuZWdhdGlvbiBzaWxlbmNlcyBNU1ZDJ3MgQzQ4MDAgd2FybmluZywgdGhlIHN0YXRpY19jYXN0IGZvcmNlcyBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24gaWYgdGhlIHR5cGUgaGFzIG92ZXJsb2FkZWQgJiYuCiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfSUYoIG1hY3JvTmFtZSwgcmVzdWx0RGlzcG9zaXRpb24sIC4uLiApIFwKQEAgLTI5MDIsMTggKzI1NTIsNjIgQEAKIH0gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaAogCiAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1NFQ1RJT04oIC4uLiApIFwKLSAgICBDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTiBcCiAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfVU5VU0VEX1dBUk5JTkdTIFwKICAgICBpZiggQ2F0Y2g6OlNlY3Rpb24gY29uc3QmIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBjYXRjaF9pbnRlcm5hbF9TZWN0aW9uICkgPSBDYXRjaDo6U2VjdGlvbkluZm8oIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBfX1ZBX0FSR1NfXyApICkgXAotICAgIENBVENIX0lOVEVSTkFMX1NUT1BfV0FSTklOR1NfU1VQUFJFU1NJT04KKyAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX1VOVVNFRF9XQVJOSU5HUwogCiAjZGVmaW5lIElOVEVSTkFMX0NBVENIX0RZTkFNSUNfU0VDVElPTiggLi4uICkgXAotICAgIENBVENIX0lOVEVSTkFMX1NUQVJUX1dBUk5JTkdTX1NVUFBSRVNTSU9OIFwKICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19VTlVTRURfV0FSTklOR1MgXAogICAgIGlmKCBDYXRjaDo6U2VjdGlvbiBjb25zdCYgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIGNhdGNoX2ludGVybmFsX1NlY3Rpb24gKSA9IENhdGNoOjpTZWN0aW9uSW5mbyggQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIChDYXRjaDo6UmV1c2FibGVTdHJpbmdTdHJlYW0oKSA8PCBfX1ZBX0FSR1NfXykuc3RyKCkgKSApIFwKLSAgICBDQVRDSF9JTlRFUk5BTF9TVE9QX1dBUk5JTkdTX1NVUFBSRVNTSU9OCisgICAgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19VTlVTRURfV0FSTklOR1MKIAogLy8gZW5kIGNhdGNoX3NlY3Rpb24uaAorLy8gc3RhcnQgY2F0Y2hfYmVuY2htYXJrLmgKKworI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgQ2F0Y2ggeworCisgICAgY2xhc3MgQmVuY2htYXJrTG9vcGVyIHsKKworICAgICAgICBzdGQ6OnN0cmluZyBtX25hbWU7CisgICAgICAgIHN0ZDo6c2l6ZV90IG1fY291bnQgPSAwOworICAgICAgICBzdGQ6OnNpemVfdCBtX2l0ZXJhdGlvbnNUb1J1biA9IDE7CisgICAgICAgIHVpbnQ2NF90IG1fcmVzb2x1dGlvbjsKKyAgICAgICAgVGltZXIgbV90aW1lcjsKKworICAgICAgICBzdGF0aWMgYXV0byBnZXRSZXNvbHV0aW9uKCkgLT4gdWludDY0X3Q7CisgICAgcHVibGljOgorICAgICAgICAvLyBLZWVwIG1vc3Qgb2YgdGhpcyBpbmxpbmUgYXMgaXQncyBvbiB0aGUgY29kZSBwYXRoIHRoYXQgaXMgYmVpbmcgdGltZWQKKyAgICAgICAgQmVuY2htYXJrTG9vcGVyKCBTdHJpbmdSZWYgbmFtZSApCisgICAgICAgIDogICBtX25hbWUoIG5hbWUgKSwKKyAgICAgICAgICAgIG1fcmVzb2x1dGlvbiggZ2V0UmVzb2x1dGlvbigpICkKKyAgICAgICAgeworICAgICAgICAgICAgcmVwb3J0U3RhcnQoKTsKKyAgICAgICAgICAgIG1fdGltZXIuc3RhcnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSB7CisgICAgICAgICAgICBpZiggbV9jb3VudCA8IG1faXRlcmF0aW9uc1RvUnVuICkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBuZWVkc01vcmVJdGVyYXRpb25zKCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGluY3JlbWVudCgpIHsKKyAgICAgICAgICAgICsrbV9jb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcmVwb3J0U3RhcnQoKTsKKyAgICAgICAgYXV0byBuZWVkc01vcmVJdGVyYXRpb25zKCkgLT4gYm9vbDsKKyAgICB9OworCit9IC8vIGVuZCBuYW1lc3BhY2UgQ2F0Y2gKKworI2RlZmluZSBCRU5DSE1BUksoIG5hbWUgKSBcCisgICAgZm9yKCBDYXRjaDo6QmVuY2htYXJrTG9vcGVyIGxvb3BlciggbmFtZSApOyBsb29wZXI7IGxvb3Blci5pbmNyZW1lbnQoKSApCisKKy8vIGVuZCBjYXRjaF9iZW5jaG1hcmsuaAogLy8gc3RhcnQgY2F0Y2hfaW50ZXJmYWNlc19leGNlcHRpb24uaAogCiAvLyBzdGFydCBjYXRjaF9pbnRlcmZhY2VzX3JlZ2lzdHJ5X2h1Yi5oCkBAIC0yOTMwLDggKzI2MjQsNiBAQAogICAgIHN0cnVjdCBJUmVwb3J0ZXJSZWdpc3RyeTsKICAgICBzdHJ1Y3QgSVJlcG9ydGVyRmFjdG9yeTsKICAgICBzdHJ1Y3QgSVRhZ0FsaWFzUmVnaXN0cnk7Ci0gICAgc3RydWN0IElNdXRhYmxlRW51bVZhbHVlc1JlZ2lzdHJ5OwotCiAgICAgY2xhc3MgU3RhcnR1cEV4Y2VwdGlvblJlZ2lzdHJ5OwogCiAgICAgdXNpbmcgSVJlcG9ydGVyRmFjdG9yeVB0ciA9IHN0ZDo6c2hhcmVkX3B0cjxJUmVwb3J0ZXJGYWN0b3J5PjsKQEAgLTI5NDIsNiArMjYzNCw3IEBACiAgICAgICAgIHZpcnR1YWwgSVJlcG9ydGVyUmVnaXN0cnkgY29uc3QmIGdldFJlcG9ydGVyUmVnaXN0cnkoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgSVRlc3RDYXNlUmVnaXN0cnkgY29uc3QmIGdldFRlc3RDYXNlUmVnaXN0cnkoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgSVRhZ0FsaWFzUmVnaXN0cnkgY29uc3QmIGdldFRhZ0FsaWFzUmVnaXN0cnkoKSBjb25zdCA9IDA7CisKICAgICAgICAgdmlydHVhbCBJRXhjZXB0aW9uVHJhbnNsYXRvclJlZ2lzdHJ5IGNvbnN0JiBnZXRFeGNlcHRpb25UcmFuc2xhdG9yUmVnaXN0cnkoKSBjb25zdCA9IDA7CiAKICAgICAgICAgdmlydHVhbCBTdGFydHVwRXhjZXB0aW9uUmVnaXN0cnkgY29uc3QmIGdldFN0YXJ0dXBFeGNlcHRpb25SZWdpc3RyeSgpIGNvbnN0ID0gMDsKQEAgLTI5NTUsNyArMjY0OCw2IEBACiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclRyYW5zbGF0b3IoIGNvbnN0IElFeGNlcHRpb25UcmFuc2xhdG9yKiB0cmFuc2xhdG9yICkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJUYWdBbGlhcyggc3RkOjpzdHJpbmcgY29uc3QmIGFsaWFzLCBzdGQ6OnN0cmluZyBjb25zdCYgdGFnLCBTb3VyY2VMaW5lSW5mbyBjb25zdCYgbGluZUluZm8gKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclN0YXJ0dXBFeGNlcHRpb24oKSBub2V4Y2VwdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgSU11dGFibGVFbnVtVmFsdWVzUmVnaXN0cnkmIGdldE11dGFibGVFbnVtVmFsdWVzUmVnaXN0cnkoKSA9IDA7CiAgICAgfTsKIAogICAgIElSZWdpc3RyeUh1YiBjb25zdCYgZ2V0UmVnaXN0cnlIdWIoKTsKQEAgLTMwMjksMTAgKzI3MjEsOSBAQAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9UUkFOU0xBVEVfRVhDRVBUSU9OMiggdHJhbnNsYXRvck5hbWUsIHNpZ25hdHVyZSApIFwKICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgdHJhbnNsYXRvck5hbWUoIHNpZ25hdHVyZSApOyBcCi0gICAgQ0FUQ0hfSU5URVJOQUxfU1RBUlRfV0FSTklOR1NfU1VQUFJFU1NJT04gXAogICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAogICAgIG5hbWVzcGFjZXsgQ2F0Y2g6OkV4Y2VwdGlvblRyYW5zbGF0b3JSZWdpc3RyYXIgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIGNhdGNoX2ludGVybmFsX0V4Y2VwdGlvblJlZ2lzdHJhciApKCAmdHJhbnNsYXRvck5hbWUgKTsgfSBcCi0gICAgQ0FUQ0hfSU5URVJOQUxfU1RPUF9XQVJOSU5HU19TVVBQUkVTU0lPTiBcCisgICAgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTIFwKICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgdHJhbnNsYXRvck5hbWUoIHNpZ25hdHVyZSApCiAKICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVFJBTlNMQVRFX0VYQ0VQVElPTiggc2lnbmF0dXJlICkgSU5URVJOQUxfQ0FUQ0hfVFJBTlNMQVRFX0VYQ0VQVElPTjIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBjYXRjaF9pbnRlcm5hbF9FeGNlcHRpb25UcmFuc2xhdG9yICksIHNpZ25hdHVyZSApCkBAIC0zMTYzLDcgKzI4NTQsNiBAQAogCiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPGlvc2Z3ZD4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKQEAgLTMxNzQsMTMgKzI4NjQsNyBAQAogICAgIGJvb2wgY29udGFpbnMoIHN0ZDo6c3RyaW5nIGNvbnN0JiBzLCBzdGQ6OnN0cmluZyBjb25zdCYgaW5maXggKTsKICAgICB2b2lkIHRvTG93ZXJJblBsYWNlKCBzdGQ6OnN0cmluZyYgcyApOwogICAgIHN0ZDo6c3RyaW5nIHRvTG93ZXIoIHN0ZDo6c3RyaW5nIGNvbnN0JiBzICk7Ci0gICAgLy8hIFJldHVybnMgYSBuZXcgc3RyaW5nIHdpdGhvdXQgd2hpdGVzcGFjZSBhdCB0aGUgc3RhcnQvZW5kCiAgICAgc3RkOjpzdHJpbmcgdHJpbSggc3RkOjpzdHJpbmcgY29uc3QmIHN0ciApOwotICAgIC8vISBSZXR1cm5zIGEgc3Vic3RyaW5nIG9mIHRoZSBvcmlnaW5hbCByZWYgd2l0aG91dCB3aGl0ZXNwYWNlLiBCZXdhcmUgbGlmZXRpbWVzIQotICAgIFN0cmluZ1JlZiB0cmltKFN0cmluZ1JlZiByZWYpOwotCi0gICAgLy8gISEhIEJlIGF3YXJlLCByZXR1cm5zIHJlZnMgaW50byBvcmlnaW5hbCBzdHJpbmcgLSBtYWtlIHN1cmUgb3JpZ2luYWwgc3RyaW5nIG91dGxpdmVzIHRoZW0KLSAgICBzdGQ6OnZlY3RvcjxTdHJpbmdSZWY+IHNwbGl0U3RyaW5nUmVmKCBTdHJpbmdSZWYgc3RyLCBjaGFyIGRlbGltaXRlciApOwogICAgIGJvb2wgcmVwbGFjZUluUGxhY2UoIHN0ZDo6c3RyaW5nJiBzdHIsIHN0ZDo6c3RyaW5nIGNvbnN0JiByZXBsYWNlVGhpcywgc3RkOjpzdHJpbmcgY29uc3QmIHdpdGhUaGlzICk7CiAKICAgICBzdHJ1Y3QgcGx1cmFsaXNlIHsKQEAgLTMyMzMsMTUgKzI5MTcsNiBAQAogICAgICAgICAgICAgdmlydHVhbCBib29sIG1hdGNoKCBPYmplY3RUIGNvbnN0JiBhcmcgKSBjb25zdCA9IDA7CiAgICAgICAgIH07CiAKLSNpZiBkZWZpbmVkKF9fT0JKQ19fKQotICAgICAgICAvLyBIYWNrIHRvIGZpeCBDYXRjaCBHSCBpc3N1ZSAjMTY2MS4gQ291bGQgdXNlIGlkIGZvciBnZW5lcmljIE9iamVjdCBzdXBwb3J0LgotICAgICAgICAvLyB1c2Ugb2YgY29uc3QgZm9yIE9iamVjdCBwb2ludGVycyBpcyB2ZXJ5IHVuY29tbW9uIGFuZCB1bmRlciBBUkMgaXQgY2F1c2VzIHNvbWUga2luZCBvZiBzaWduYXR1cmUgbWlzbWF0Y2ggdGhhdCBicmVha3MgY29tcGlsYXRpb24KLSAgICAgICAgdGVtcGxhdGU8PgotICAgICAgICBzdHJ1Y3QgTWF0Y2hlck1ldGhvZDxOU1N0cmluZyo+IHsKLSAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBtYXRjaCggTlNTdHJpbmcqIGFyZyApIGNvbnN0ID0gMDsKLSAgICAgICAgfTsKLSNlbmRpZgotCiAjaWZkZWYgX19jbGFuZ19fCiAjICAgIHByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAogI2VuZGlmCkBAIC0zMjc5LDEwICsyOTU0LDkgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRpb247CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIE1hdGNoQWxsT2Y8QXJnVD4gb3BlcmF0b3IgJiYgKCBNYXRjaGVyQmFzZTxBcmdUPiBjb25zdCYgb3RoZXIgKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBjb3B5KCp0aGlzKTsKLSAgICAgICAgICAgICAgICBjb3B5Lm1fbWF0Y2hlcnMucHVzaF9iYWNrKCAmb3RoZXIgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY29weTsKKyAgICAgICAgICAgIE1hdGNoQWxsT2Y8QXJnVD4mIG9wZXJhdG9yICYmICggTWF0Y2hlckJhc2U8QXJnVD4gY29uc3QmIG90aGVyICkgeworICAgICAgICAgICAgICAgIG1fbWF0Y2hlcnMucHVzaF9iYWNrKCAmb3RoZXIgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPE1hdGNoZXJCYXNlPEFyZ1Q+IGNvbnN0Kj4gbV9tYXRjaGVyczsKQEAgLTMzMTMsMTAgKzI5ODcsOSBAQAogICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgTWF0Y2hBbnlPZjxBcmdUPiBvcGVyYXRvciB8fCAoIE1hdGNoZXJCYXNlPEFyZ1Q+IGNvbnN0JiBvdGhlciApIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNvcHkoKnRoaXMpOwotICAgICAgICAgICAgICAgIGNvcHkubV9tYXRjaGVycy5wdXNoX2JhY2soICZvdGhlciApOwotICAgICAgICAgICAgICAgIHJldHVybiBjb3B5OworICAgICAgICAgICAgTWF0Y2hBbnlPZjxBcmdUPiYgb3BlcmF0b3IgfHwgKCBNYXRjaGVyQmFzZTxBcmdUPiBjb25zdCYgb3RoZXIgKSB7CisgICAgICAgICAgICAgICAgbV9tYXRjaGVycy5wdXNoX2JhY2soICZvdGhlciApOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TWF0Y2hlckJhc2U8QXJnVD4gY29uc3QqPiBtX21hdGNoZXJzOwpAQCAtMzM2MCwzNSArMzAzMywxMSBAQAogfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKIAogLy8gZW5kIGNhdGNoX21hdGNoZXJzLmgKLS8vIHN0YXJ0IGNhdGNoX21hdGNoZXJzX2V4Y2VwdGlvbi5ocHAKLQotbmFtZXNwYWNlIENhdGNoIHsKLW5hbWVzcGFjZSBNYXRjaGVycyB7Ci1uYW1lc3BhY2UgRXhjZXB0aW9uIHsKLQotY2xhc3MgRXhjZXB0aW9uTWVzc2FnZU1hdGNoZXIgOiBwdWJsaWMgTWF0Y2hlckJhc2U8c3RkOjpleGNlcHRpb24+IHsKLSAgICBzdGQ6OnN0cmluZyBtX21lc3NhZ2U7Ci1wdWJsaWM6Ci0KLSAgICBFeGNlcHRpb25NZXNzYWdlTWF0Y2hlcihzdGQ6OnN0cmluZyBjb25zdCYgbWVzc2FnZSk6Ci0gICAgICAgIG1fbWVzc2FnZShtZXNzYWdlKQotICAgIHt9Ci0KLSAgICBib29sIG1hdGNoKHN0ZDo6ZXhjZXB0aW9uIGNvbnN0JiBleCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6OnN0cmluZyBkZXNjcmliZSgpIGNvbnN0IG92ZXJyaWRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgRXhjZXB0aW9uCi0KLUV4Y2VwdGlvbjo6RXhjZXB0aW9uTWVzc2FnZU1hdGNoZXIgTWVzc2FnZShzdGQ6OnN0cmluZyBjb25zdCYgbWVzc2FnZSk7Ci0KLX0gLy8gbmFtZXNwYWNlIE1hdGNoZXJzCi19IC8vIG5hbWVzcGFjZSBDYXRjaAotCi0vLyBlbmQgY2F0Y2hfbWF0Y2hlcnNfZXhjZXB0aW9uLmhwcAogLy8gc3RhcnQgY2F0Y2hfbWF0Y2hlcnNfZmxvYXRpbmcuaAogCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8Y21hdGg+CisKIG5hbWVzcGFjZSBDYXRjaCB7CiBuYW1lc3BhY2UgTWF0Y2hlcnMgewogCkBAIC0zNDA2LDQzICszMDU1LDIyIEBACiAgICAgICAgIH07CiAKICAgICAgICAgc3RydWN0IFdpdGhpblVscHNNYXRjaGVyIDogTWF0Y2hlckJhc2U8ZG91YmxlPiB7Ci0gICAgICAgICAgICBXaXRoaW5VbHBzTWF0Y2hlcihkb3VibGUgdGFyZ2V0LCB1aW50NjRfdCB1bHBzLCBGbG9hdGluZ1BvaW50S2luZCBiYXNlVHlwZSk7CisgICAgICAgICAgICBXaXRoaW5VbHBzTWF0Y2hlcihkb3VibGUgdGFyZ2V0LCBpbnQgdWxwcywgRmxvYXRpbmdQb2ludEtpbmQgYmFzZVR5cGUpOwogICAgICAgICAgICAgYm9vbCBtYXRjaChkb3VibGUgY29uc3QmIG1hdGNoZWUpIGNvbnN0IG92ZXJyaWRlOwogICAgICAgICAgICAgc3RkOjpzdHJpbmcgZGVzY3JpYmUoKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIGRvdWJsZSBtX3RhcmdldDsKLSAgICAgICAgICAgIHVpbnQ2NF90IG1fdWxwczsKKyAgICAgICAgICAgIGludCBtX3VscHM7CiAgICAgICAgICAgICBGbG9hdGluZ1BvaW50S2luZCBtX3R5cGU7CiAgICAgICAgIH07CiAKLSAgICAgICAgLy8gR2l2ZW4gSUVFRS03NTQgZm9ybWF0IGZvciBmbG9hdHMgYW5kIGRvdWJsZXMsIHdlIGNhbiBhc3N1bWUKLSAgICAgICAgLy8gdGhhdCBmbG9hdCAtPiBkb3VibGUgcHJvbW90aW9uIGlzIGxvc3NsZXNzLiBHaXZlbiB0aGlzLCB3ZSBjYW4KLSAgICAgICAgLy8gYXNzdW1lIHRoYXQgaWYgd2UgZG8gdGhlIHN0YW5kYXJkIHJlbGF0aXZlIGNvbXBhcmlzb24gb2YKLSAgICAgICAgLy8gfGxocyAtIHJoc3wgPD0gZXBzaWxvbiAqIG1heChmYWJzKGxocyksIGZhYnMocmhzKSksIHRoZW4gd2UgZ2V0Ci0gICAgICAgIC8vIHRoZSBzYW1lIHJlc3VsdCBpZiB3ZSBkbyB0aGlzIGZvciBmbG9hdHMsIGFzIGlmIHdlIGRvIHRoaXMgZm9yCi0gICAgICAgIC8vIGRvdWJsZXMgdGhhdCB3ZXJlIHByb21vdGVkIGZyb20gZmxvYXRzLgotICAgICAgICBzdHJ1Y3QgV2l0aGluUmVsTWF0Y2hlciA6IE1hdGNoZXJCYXNlPGRvdWJsZT4gewotICAgICAgICAgICAgV2l0aGluUmVsTWF0Y2hlcihkb3VibGUgdGFyZ2V0LCBkb3VibGUgZXBzaWxvbik7Ci0gICAgICAgICAgICBib29sIG1hdGNoKGRvdWJsZSBjb25zdCYgbWF0Y2hlZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyBkZXNjcmliZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgZG91YmxlIG1fdGFyZ2V0OwotICAgICAgICAgICAgZG91YmxlIG1fZXBzaWxvbjsKLSAgICAgICAgfTsKLQogICAgIH0gLy8gbmFtZXNwYWNlIEZsb2F0aW5nCiAKICAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBjcmVhdGUgdGhlIGFjdHVhbCBtYXRjaGVyIG9iamVjdHMuCiAgICAgLy8gVGhpcyBhbGxvd3MgdGhlIHR5cGVzIHRvIGJlIGluZmVycmVkCi0gICAgRmxvYXRpbmc6OldpdGhpblVscHNNYXRjaGVyIFdpdGhpblVMUChkb3VibGUgdGFyZ2V0LCB1aW50NjRfdCBtYXhVbHBEaWZmKTsKLSAgICBGbG9hdGluZzo6V2l0aGluVWxwc01hdGNoZXIgV2l0aGluVUxQKGZsb2F0IHRhcmdldCwgdWludDY0X3QgbWF4VWxwRGlmZik7CisgICAgRmxvYXRpbmc6OldpdGhpblVscHNNYXRjaGVyIFdpdGhpblVMUChkb3VibGUgdGFyZ2V0LCBpbnQgbWF4VWxwRGlmZik7CisgICAgRmxvYXRpbmc6OldpdGhpblVscHNNYXRjaGVyIFdpdGhpblVMUChmbG9hdCB0YXJnZXQsIGludCBtYXhVbHBEaWZmKTsKICAgICBGbG9hdGluZzo6V2l0aGluQWJzTWF0Y2hlciBXaXRoaW5BYnMoZG91YmxlIHRhcmdldCwgZG91YmxlIG1hcmdpbik7Ci0gICAgRmxvYXRpbmc6OldpdGhpblJlbE1hdGNoZXIgV2l0aGluUmVsKGRvdWJsZSB0YXJnZXQsIGRvdWJsZSBlcHMpOwotICAgIC8vIGRlZmF1bHRzIGVwc2lsb24gdG8gMTAwKm51bWVyaWNfbGltaXRzPGRvdWJsZT46OmVwc2lsb24oKQotICAgIEZsb2F0aW5nOjpXaXRoaW5SZWxNYXRjaGVyIFdpdGhpblJlbChkb3VibGUgdGFyZ2V0KTsKLSAgICBGbG9hdGluZzo6V2l0aGluUmVsTWF0Y2hlciBXaXRoaW5SZWwoZmxvYXQgdGFyZ2V0LCBmbG9hdCBlcHMpOwotICAgIC8vIGRlZmF1bHRzIGVwc2lsb24gdG8gMTAwKm51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigpCi0gICAgRmxvYXRpbmc6OldpdGhpblJlbE1hdGNoZXIgV2l0aGluUmVsKGZsb2F0IHRhcmdldCk7CiAKIH0gLy8gbmFtZXNwYWNlIE1hdGNoZXJzCiB9IC8vIG5hbWVzcGFjZSBDYXRjaApAQCAtMzg0MCw3ICszNDY4LDcgQEAKIC8vIGVuZCBjYXRjaF9pbnRlcmZhY2VzX2dlbmVyYXRvcnRyYWNrZXIuaAogLy8gc3RhcnQgY2F0Y2hfZW5mb3JjZS5oCiAKLSNpbmNsdWRlIDxleGNlcHRpb24+CisjaW5jbHVkZSA8c3RkZXhjZXB0PgogCiBuYW1lc3BhY2UgQ2F0Y2ggewogI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMpCkBAIC0zODUzLDMwICszNDgxLDE4IEBACiAgICAgW1tub3JldHVybl1dCiAgICAgdm9pZCB0aHJvd19leGNlcHRpb24oc3RkOjpleGNlcHRpb24gY29uc3QmIGUpOwogI2VuZGlmCi0KLSAgICBbW25vcmV0dXJuXV0KLSAgICB2b2lkIHRocm93X2xvZ2ljX2Vycm9yKHN0ZDo6c3RyaW5nIGNvbnN0JiBtc2cpOwotICAgIFtbbm9yZXR1cm5dXQotICAgIHZvaWQgdGhyb3dfZG9tYWluX2Vycm9yKHN0ZDo6c3RyaW5nIGNvbnN0JiBtc2cpOwotICAgIFtbbm9yZXR1cm5dXQotICAgIHZvaWQgdGhyb3dfcnVudGltZV9lcnJvcihzdGQ6OnN0cmluZyBjb25zdCYgbXNnKTsKLQogfSAvLyBuYW1lc3BhY2UgQ2F0Y2g7CiAKLSNkZWZpbmUgQ0FUQ0hfTUFLRV9NU0coLi4uKSBcCi0gICAgKENhdGNoOjpSZXVzYWJsZVN0cmluZ1N0cmVhbSgpIDw8IF9fVkFfQVJHU19fKS5zdHIoKQotCi0jZGVmaW5lIENBVENIX0lOVEVSTkFMX0VSUk9SKC4uLikgXAotICAgIENhdGNoOjp0aHJvd19sb2dpY19lcnJvcihDQVRDSF9NQUtFX01TRyggQ0FUQ0hfSU5URVJOQUxfTElORUlORk8gPDwgIjogSW50ZXJuYWwgQ2F0Y2gyIGVycm9yOiAiIDw8IF9fVkFfQVJHU19fKSkKLQotI2RlZmluZSBDQVRDSF9FUlJPUiguLi4pIFwKLSAgICBDYXRjaDo6dGhyb3dfZG9tYWluX2Vycm9yKENBVENIX01BS0VfTVNHKCBfX1ZBX0FSR1NfXyApKQotCi0jZGVmaW5lIENBVENIX1JVTlRJTUVfRVJST1IoLi4uKSBcCi0gICAgQ2F0Y2g6OnRocm93X3J1bnRpbWVfZXJyb3IoQ0FUQ0hfTUFLRV9NU0coIF9fVkFfQVJHU19fICkpCi0KLSNkZWZpbmUgQ0FUQ0hfRU5GT1JDRSggY29uZGl0aW9uLCAuLi4gKSBcCi0gICAgZG97IGlmKCAhKGNvbmRpdGlvbikgKSBDQVRDSF9FUlJPUiggX19WQV9BUkdTX18gKTsgfSB3aGlsZShmYWxzZSkKKyNkZWZpbmUgQ0FUQ0hfUFJFUEFSRV9FWENFUFRJT04oIHR5cGUsIG1zZyApIFwKKyAgICB0eXBlKCAoIENhdGNoOjpSZXVzYWJsZVN0cmluZ1N0cmVhbSgpIDw8IG1zZyApLnN0cigpICkKKyNkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfRVJST1IoIG1zZyApIFwKKyAgICBDYXRjaDo6dGhyb3dfZXhjZXB0aW9uKENBVENIX1BSRVBBUkVfRVhDRVBUSU9OKCBzdGQ6OmxvZ2ljX2Vycm9yLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTyA8PCAiOiBJbnRlcm5hbCBDYXRjaCBlcnJvcjogIiA8PCBtc2cpKQorI2RlZmluZSBDQVRDSF9FUlJPUiggbXNnICkgXAorICAgIENhdGNoOjp0aHJvd19leGNlcHRpb24oQ0FUQ0hfUFJFUEFSRV9FWENFUFRJT04oIHN0ZDo6ZG9tYWluX2Vycm9yLCBtc2cgKSkKKyNkZWZpbmUgQ0FUQ0hfUlVOVElNRV9FUlJPUiggbXNnICkgXAorICAgIENhdGNoOjp0aHJvd19leGNlcHRpb24oQ0FUQ0hfUFJFUEFSRV9FWENFUFRJT04oIHN0ZDo6cnVudGltZV9lcnJvciwgbXNnICkpCisjZGVmaW5lIENBVENIX0VORk9SQ0UoIGNvbmRpdGlvbiwgbXNnICkgXAorICAgIGRveyBpZiggIShjb25kaXRpb24pICkgQ0FUQ0hfRVJST1IoIG1zZyApOyB9IHdoaWxlKGZhbHNlKQogCiAvLyBlbmQgY2F0Y2hfZW5mb3JjZS5oCiAjaW5jbHVkZSA8bWVtb3J5PgpAQCAtMzkyNSw2ICszNTQxLDcgQEAKICAgICBjbGFzcyBTaW5nbGVWYWx1ZUdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBJR2VuZXJhdG9yPFQ+IHsKICAgICAgICAgVCBtX3ZhbHVlOwogICAgIHB1YmxpYzoKKyAgICAgICAgU2luZ2xlVmFsdWVHZW5lcmF0b3IoVCBjb25zdCYgdmFsdWUpIDogbV92YWx1ZSggdmFsdWUgKSB7fQogICAgICAgICBTaW5nbGVWYWx1ZUdlbmVyYXRvcihUJiYgdmFsdWUpIDogbV92YWx1ZShzdGQ6Om1vdmUodmFsdWUpKSB7fQogCiAgICAgICAgIFQgY29uc3QmIGdldCgpIGNvbnN0IG92ZXJyaWRlIHsKQEAgLTM5MzcsOSArMzU1NCw2IEBACiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIGNsYXNzIEZpeGVkVmFsdWVzR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIElHZW5lcmF0b3I8VD4gewotICAgICAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX3NhbWU8VCwgYm9vbD46OnZhbHVlLAotICAgICAgICAgICAgIkZpeGVkVmFsdWVzR2VuZXJhdG9yIGRvZXMgbm90IHN1cHBvcnQgYm9vbHMgYmVjYXVzZSBvZiBzdGQ6OnZlY3Rvcjxib29sPiIKLSAgICAgICAgICAgICJzcGVjaWFsaXphdGlvbiwgdXNlIFNpbmdsZVZhbHVlIEdlbmVyYXRvciBpbnN0ZWFkLiIpOwogICAgICAgICBzdGQ6OnZlY3RvcjxUPiBtX3ZhbHVlczsKICAgICAgICAgc2l6ZV90IG1faWR4ID0gMDsKICAgICBwdWJsaWM6CkBAIC0zOTg3LDIxICszNjAxLDIxIEBACiAgICAgICAgICAgICBtX2dlbmVyYXRvcnMuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShnZW5lcmF0b3IpKTsKICAgICAgICAgfQogICAgICAgICB2b2lkIHBvcHVsYXRlKFQmJiB2YWwpIHsKLSAgICAgICAgICAgIG1fZ2VuZXJhdG9ycy5lbXBsYWNlX2JhY2sodmFsdWUoc3RkOjpmb3J3YXJkPFQ+KHZhbCkpKTsKKyAgICAgICAgICAgIG1fZ2VuZXJhdG9ycy5lbXBsYWNlX2JhY2sodmFsdWUoc3RkOjptb3ZlKHZhbCkpKTsKICAgICAgICAgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgogICAgICAgICB2b2lkIHBvcHVsYXRlKFUmJiB2YWwpIHsKLSAgICAgICAgICAgIHBvcHVsYXRlKFQoc3RkOjpmb3J3YXJkPFU+KHZhbCkpKTsKKyAgICAgICAgICAgIHBvcHVsYXRlKFQoc3RkOjptb3ZlKHZhbCkpKTsKICAgICAgICAgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZS4uLiBHcz4KLSAgICAgICAgdm9pZCBwb3B1bGF0ZShVJiYgdmFsdWVPckdlbmVyYXRvciwgR3MgJiYuLi4gbW9yZUdlbmVyYXRvcnMpIHsKKyAgICAgICAgdm9pZCBwb3B1bGF0ZShVJiYgdmFsdWVPckdlbmVyYXRvciwgR3MuLi4gbW9yZUdlbmVyYXRvcnMpIHsKICAgICAgICAgICAgIHBvcHVsYXRlKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZU9yR2VuZXJhdG9yKSk7CiAgICAgICAgICAgICBwb3B1bGF0ZShzdGQ6OmZvcndhcmQ8R3M+KG1vcmVHZW5lcmF0b3JzKS4uLik7CiAgICAgICAgIH0KIAogICAgIHB1YmxpYzoKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEdzPgotICAgICAgICBHZW5lcmF0b3JzKEdzICYmLi4uIG1vcmVHZW5lcmF0b3JzKSB7CisgICAgICAgIEdlbmVyYXRvcnMoR3MuLi4gbW9yZUdlbmVyYXRvcnMpIHsKICAgICAgICAgICAgIG1fZ2VuZXJhdG9ycy5yZXNlcnZlKHNpemVvZi4uLihHcykpOwogICAgICAgICAgICAgcG9wdWxhdGUoc3RkOjpmb3J3YXJkPEdzPihtb3JlR2VuZXJhdG9ycykuLi4pOwogICAgICAgICB9CkBAIC00MDMyLDcgKzM2NDYsNyBAQAogICAgIHN0cnVjdCBhcyB7fTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEdzPgotICAgIGF1dG8gbWFrZUdlbmVyYXRvcnMoIEdlbmVyYXRvcldyYXBwZXI8VD4mJiBnZW5lcmF0b3IsIEdzICYmLi4uIG1vcmVHZW5lcmF0b3JzICkgLT4gR2VuZXJhdG9yczxUPiB7CisgICAgYXV0byBtYWtlR2VuZXJhdG9ycyggR2VuZXJhdG9yV3JhcHBlcjxUPiYmIGdlbmVyYXRvciwgR3MuLi4gbW9yZUdlbmVyYXRvcnMgKSAtPiBHZW5lcmF0b3JzPFQ+IHsKICAgICAgICAgcmV0dXJuIEdlbmVyYXRvcnM8VD4oc3RkOjptb3ZlKGdlbmVyYXRvciksIHN0ZDo6Zm9yd2FyZDxHcz4obW9yZUdlbmVyYXRvcnMpLi4uKTsKICAgICB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTQwNDAsMTEgKzM2NTQsMTEgQEAKICAgICAgICAgcmV0dXJuIEdlbmVyYXRvcnM8VD4oc3RkOjptb3ZlKGdlbmVyYXRvcikpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBHcz4KLSAgICBhdXRvIG1ha2VHZW5lcmF0b3JzKCBUJiYgdmFsLCBHcyAmJi4uLiBtb3JlR2VuZXJhdG9ycyApIC0+IEdlbmVyYXRvcnM8VD4geworICAgIGF1dG8gbWFrZUdlbmVyYXRvcnMoIFQmJiB2YWwsIEdzLi4uIG1vcmVHZW5lcmF0b3JzICkgLT4gR2VuZXJhdG9yczxUPiB7CiAgICAgICAgIHJldHVybiBtYWtlR2VuZXJhdG9ycyggdmFsdWUoIHN0ZDo6Zm9yd2FyZDxUPiggdmFsICkgKSwgc3RkOjpmb3J3YXJkPEdzPiggbW9yZUdlbmVyYXRvcnMgKS4uLiApOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZS4uLiBHcz4KLSAgICBhdXRvIG1ha2VHZW5lcmF0b3JzKCBhczxUPiwgVSYmIHZhbCwgR3MgJiYuLi4gbW9yZUdlbmVyYXRvcnMgKSAtPiBHZW5lcmF0b3JzPFQ+IHsKKyAgICBhdXRvIG1ha2VHZW5lcmF0b3JzKCBhczxUPiwgVSYmIHZhbCwgR3MuLi4gbW9yZUdlbmVyYXRvcnMgKSAtPiBHZW5lcmF0b3JzPFQ+IHsKICAgICAgICAgcmV0dXJuIG1ha2VHZW5lcmF0b3JzKCB2YWx1ZSggVCggc3RkOjpmb3J3YXJkPFU+KCB2YWwgKSApICksIHN0ZDo6Zm9yd2FyZDxHcz4oIG1vcmVHZW5lcmF0b3JzICkuLi4gKTsKICAgICB9CiAKQEAgLTQwNzAsMTEgKzM2ODQsMTEgQEAKIH0gLy8gbmFtZXNwYWNlIENhdGNoCiAKICNkZWZpbmUgR0VORVJBVEUoIC4uLiApIFwKLSAgICBDYXRjaDo6R2VuZXJhdG9yczo6Z2VuZXJhdGUoIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBbIF17IHVzaW5nIG5hbWVzcGFjZSBDYXRjaDo6R2VuZXJhdG9yczsgcmV0dXJuIG1ha2VHZW5lcmF0b3JzKCBfX1ZBX0FSR1NfXyApOyB9ICkgLy9OT0xJTlQoZ29vZ2xlLWJ1aWxkLXVzaW5nLW5hbWVzcGFjZSkKKyAgICBDYXRjaDo6R2VuZXJhdG9yczo6Z2VuZXJhdGUoIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBbIF17IHVzaW5nIG5hbWVzcGFjZSBDYXRjaDo6R2VuZXJhdG9yczsgcmV0dXJuIG1ha2VHZW5lcmF0b3JzKCBfX1ZBX0FSR1NfXyApOyB9ICkKICNkZWZpbmUgR0VORVJBVEVfQ09QWSggLi4uICkgXAotICAgIENhdGNoOjpHZW5lcmF0b3JzOjpnZW5lcmF0ZSggQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIFs9XXsgdXNpbmcgbmFtZXNwYWNlIENhdGNoOjpHZW5lcmF0b3JzOyByZXR1cm4gbWFrZUdlbmVyYXRvcnMoIF9fVkFfQVJHU19fICk7IH0gKSAvL05PTElOVChnb29nbGUtYnVpbGQtdXNpbmctbmFtZXNwYWNlKQorICAgIENhdGNoOjpHZW5lcmF0b3JzOjpnZW5lcmF0ZSggQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIFs9XXsgdXNpbmcgbmFtZXNwYWNlIENhdGNoOjpHZW5lcmF0b3JzOyByZXR1cm4gbWFrZUdlbmVyYXRvcnMoIF9fVkFfQVJHU19fICk7IH0gKQogI2RlZmluZSBHRU5FUkFURV9SRUYoIC4uLiApIFwKLSAgICBDYXRjaDo6R2VuZXJhdG9yczo6Z2VuZXJhdGUoIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBbJl17IHVzaW5nIG5hbWVzcGFjZSBDYXRjaDo6R2VuZXJhdG9yczsgcmV0dXJuIG1ha2VHZW5lcmF0b3JzKCBfX1ZBX0FSR1NfXyApOyB9ICkgLy9OT0xJTlQoZ29vZ2xlLWJ1aWxkLXVzaW5nLW5hbWVzcGFjZSkKKyAgICBDYXRjaDo6R2VuZXJhdG9yczo6Z2VuZXJhdGUoIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBbJl17IHVzaW5nIG5hbWVzcGFjZSBDYXRjaDo6R2VuZXJhdG9yczsgcmV0dXJuIG1ha2VHZW5lcmF0b3JzKCBfX1ZBX0FSR1NfXyApOyB9ICkKIAogLy8gZW5kIGNhdGNoX2dlbmVyYXRvcnMuaHBwCiAvLyBzdGFydCBjYXRjaF9nZW5lcmF0b3JzX2dlbmVyaWMuaHBwCkBAIC00MTU5LDkgKzM3NzMsNiBAQAogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgY2xhc3MgUmVwZWF0R2VuZXJhdG9yIDogcHVibGljIElHZW5lcmF0b3I8VD4gewotICAgICAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX3NhbWU8VCwgYm9vbD46OnZhbHVlLAotICAgICAgICAgICAgIlJlcGVhdEdlbmVyYXRvciBjdXJyZW50bHkgZG9lcyBub3Qgc3VwcG9ydCBib29scyIKLSAgICAgICAgICAgICJiZWNhdXNlIG9mIHN0ZDo6dmVjdG9yPGJvb2w+IHNwZWNpYWxpemF0aW9uIik7CiAgICAgICAgIEdlbmVyYXRvcldyYXBwZXI8VD4gbV9nZW5lcmF0b3I7CiAgICAgICAgIG11dGFibGUgc3RkOjp2ZWN0b3I8VD4gbV9yZXR1cm5lZDsKICAgICAgICAgc2l6ZV90IG1fdGFyZ2V0X3JlcGVhdHM7CkBAIC00MjQwLDcgKzM4NTEsMTggQEAKICAgICAgICAgfQogICAgIH07CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVCA9IEZ1bmN0aW9uUmV0dXJuVHlwZTxGdW5jLCBVPj4KKyNpZiBkZWZpbmVkKF9fY3BwX2xpYl9pc19pbnZvY2FibGUpICYmIF9fY3BwX2xpYl9pc19pbnZvY2FibGUgPj0gMjAxNzAzCisgICAgLy8gc3RkOjpyZXN1bHRfb2YgaXMgZGVwcmVjYXRlZCBpbiBDKysxNyBhbmQgcmVtb3ZlZCBpbiBDKysyMC4gSGVuY2UsIGl0IGlzCisgICAgLy8gcmVwbGFjZWQgd2l0aCBzdGQ6Omludm9rZV9yZXN1bHQgaGVyZS4gQWxzbyAqX3QgZm9ybWF0IGlzIHByZWZlcnJlZCBvdmVyCisgICAgLy8gdHlwZW5hbWUgKjo6dHlwZSBmb3JtYXQuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIFU+CisgICAgdXNpbmcgTWFwRnVuY3Rpb25SZXR1cm5UeXBlID0gc3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8c3RkOjpyZW1vdmVfY3ZfdDxzdGQ6Omludm9rZV9yZXN1bHRfdDxGdW5jLCBVPj4+OworI2Vsc2UKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgVT4KKyAgICB1c2luZyBNYXBGdW5jdGlvblJldHVyblR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8dHlwZW5hbWUgc3RkOjpyZW1vdmVfY3Y8dHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8RnVuYyhVKT46OnR5cGU+Ojp0eXBlPjo6dHlwZTsKKyNlbmRpZgorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFQgPSBNYXBGdW5jdGlvblJldHVyblR5cGU8RnVuYywgVT4+CiAgICAgR2VuZXJhdG9yV3JhcHBlcjxUPiBtYXAoRnVuYyYmIGZ1bmN0aW9uLCBHZW5lcmF0b3JXcmFwcGVyPFU+JiYgZ2VuZXJhdG9yKSB7CiAgICAgICAgIHJldHVybiBHZW5lcmF0b3JXcmFwcGVyPFQ+KAogICAgICAgICAgICAgcGY6Om1ha2VfdW5pcXVlPE1hcEdlbmVyYXRvcjxULCBVLCBGdW5jPj4oc3RkOjpmb3J3YXJkPEZ1bmM+KGZ1bmN0aW9uKSwgc3RkOjptb3ZlKGdlbmVyYXRvcikpCkBAIC00MjY1LDE0ICszODg3LDEyIEBACiAgICAgICAgICAgICBtX2NodW5rX3NpemUoc2l6ZSksIG1fZ2VuZXJhdG9yKHN0ZDo6bW92ZShnZW5lcmF0b3IpKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2NodW5rLnJlc2VydmUobV9jaHVua19zaXplKTsKLSAgICAgICAgICAgIGlmIChtX2NodW5rX3NpemUgIT0gMCkgewotICAgICAgICAgICAgICAgIG1fY2h1bmsucHVzaF9iYWNrKG1fZ2VuZXJhdG9yLmdldCgpKTsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG1fY2h1bmtfc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9nZW5lcmF0b3IubmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDYXRjaDo6dGhyb3dfZXhjZXB0aW9uKEdlbmVyYXRvckV4Y2VwdGlvbigiTm90IGVub3VnaCB2YWx1ZXMgdG8gaW5pdGlhbGl6ZSB0aGUgZmlyc3QgY2h1bmsiKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbV9jaHVuay5wdXNoX2JhY2sobV9nZW5lcmF0b3IuZ2V0KCkpOworICAgICAgICAgICAgbV9jaHVuay5wdXNoX2JhY2sobV9nZW5lcmF0b3IuZ2V0KCkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBtX2NodW5rX3NpemU7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICghbV9nZW5lcmF0b3IubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIENhdGNoOjp0aHJvd19leGNlcHRpb24oR2VuZXJhdG9yRXhjZXB0aW9uKCJOb3QgZW5vdWdoIHZhbHVlcyB0byBpbml0aWFsaXplIHRoZSBmaXJzdCBjaHVuayIpKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9jaHVuay5wdXNoX2JhY2sobV9nZW5lcmF0b3IuZ2V0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHN0ZDo6dmVjdG9yPFQ+IGNvbnN0JiBnZXQoKSBjb25zdCBvdmVycmlkZSB7CkBAIC00MzQzLDcgKzM5NjMsNiBAQAogICAgIHsKICAgICAgICAgaWYoICFJTXV0YWJsZUNvbnRleHQ6OmN1cnJlbnRDb250ZXh0ICkKICAgICAgICAgICAgIElNdXRhYmxlQ29udGV4dDo6Y3JlYXRlQ29udGV4dCgpOwotICAgICAgICAvLyBOT0xJTlRORVhUTElORShjbGFuZy1hbmFseXplci1jb3JlLnVuaW5pdGlhbGl6ZWQuVW5kZWZSZXR1cm4pCiAgICAgICAgIHJldHVybiAqSU11dGFibGVDb250ZXh0OjpjdXJyZW50Q29udGV4dDsKICAgICB9CiAKQEAgLTQzNTMsODAgKzM5NzIsMTEgQEAKICAgICB9CiAKICAgICB2b2lkIGNsZWFuVXBDb250ZXh0KCk7Ci0KLSAgICBjbGFzcyBTaW1wbGVQY2czMjsKLSAgICBTaW1wbGVQY2czMiYgcm5nKCk7CiB9CiAKIC8vIGVuZCBjYXRjaF9jb250ZXh0LmgKIC8vIHN0YXJ0IGNhdGNoX2ludGVyZmFjZXNfY29uZmlnLmgKIAotLy8gc3RhcnQgY2F0Y2hfb3B0aW9uLmhwcAotCi1uYW1lc3BhY2UgQ2F0Y2ggewotCi0gICAgLy8gQW4gb3B0aW9uYWwgdHlwZQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgY2xhc3MgT3B0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIE9wdGlvbigpIDogbnVsbGFibGVWYWx1ZSggbnVsbHB0ciApIHt9Ci0gICAgICAgIE9wdGlvbiggVCBjb25zdCYgX3ZhbHVlICkKLSAgICAgICAgOiBudWxsYWJsZVZhbHVlKCBuZXcoIHN0b3JhZ2UgKSBUKCBfdmFsdWUgKSApCi0gICAgICAgIHt9Ci0gICAgICAgIE9wdGlvbiggT3B0aW9uIGNvbnN0JiBfb3RoZXIgKQotICAgICAgICA6IG51bGxhYmxlVmFsdWUoIF9vdGhlciA/IG5ldyggc3RvcmFnZSApIFQoICpfb3RoZXIgKSA6IG51bGxwdHIgKQotICAgICAgICB7fQotCi0gICAgICAgIH5PcHRpb24oKSB7Ci0gICAgICAgICAgICByZXNldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgT3B0aW9uJiBvcGVyYXRvcj0gKCBPcHRpb24gY29uc3QmIF9vdGhlciApIHsKLSAgICAgICAgICAgIGlmKCAmX290aGVyICE9IHRoaXMgKSB7Ci0gICAgICAgICAgICAgICAgcmVzZXQoKTsKLSAgICAgICAgICAgICAgICBpZiggX290aGVyICkKLSAgICAgICAgICAgICAgICAgICAgbnVsbGFibGVWYWx1ZSA9IG5ldyggc3RvcmFnZSApIFQoICpfb3RoZXIgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgfQotICAgICAgICBPcHRpb24mIG9wZXJhdG9yID0gKCBUIGNvbnN0JiBfdmFsdWUgKSB7Ci0gICAgICAgICAgICByZXNldCgpOwotICAgICAgICAgICAgbnVsbGFibGVWYWx1ZSA9IG5ldyggc3RvcmFnZSApIFQoIF92YWx1ZSApOwotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCByZXNldCgpIHsKLSAgICAgICAgICAgIGlmKCBudWxsYWJsZVZhbHVlICkKLSAgICAgICAgICAgICAgICBudWxsYWJsZVZhbHVlLT5+VCgpOwotICAgICAgICAgICAgbnVsbGFibGVWYWx1ZSA9IG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBUJiBvcGVyYXRvciooKSB7IHJldHVybiAqbnVsbGFibGVWYWx1ZTsgfQotICAgICAgICBUIGNvbnN0JiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqbnVsbGFibGVWYWx1ZTsgfQotICAgICAgICBUKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gbnVsbGFibGVWYWx1ZTsgfQotICAgICAgICBjb25zdCBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbnVsbGFibGVWYWx1ZTsgfQotCi0gICAgICAgIFQgdmFsdWVPciggVCBjb25zdCYgZGVmYXVsdFZhbHVlICkgY29uc3QgewotICAgICAgICAgICAgcmV0dXJuIG51bGxhYmxlVmFsdWUgPyAqbnVsbGFibGVWYWx1ZSA6IGRlZmF1bHRWYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgc29tZSgpIGNvbnN0IHsgcmV0dXJuIG51bGxhYmxlVmFsdWUgIT0gbnVsbHB0cjsgfQotICAgICAgICBib29sIG5vbmUoKSBjb25zdCB7IHJldHVybiBudWxsYWJsZVZhbHVlID09IG51bGxwdHI7IH0KLQotICAgICAgICBib29sIG9wZXJhdG9yICEoKSBjb25zdCB7IHJldHVybiBudWxsYWJsZVZhbHVlID09IG51bGxwdHI7IH0KLSAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsKLSAgICAgICAgICAgIHJldHVybiBzb21lKCk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFQgKm51bGxhYmxlVmFsdWU7Ci0gICAgICAgIGFsaWduYXMoYWxpZ25vZihUKSkgY2hhciBzdG9yYWdlW3NpemVvZihUKV07Ci0gICAgfTsKLQotfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCi0KLS8vIGVuZCBjYXRjaF9vcHRpb24uaHBwCi0jaW5jbHVkZSA8Y2hyb25vPgogI2luY2x1ZGUgPGlvc2Z3ZD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgpAQCAtNDQ4OSw3MSArNDAzOSwxNiBAQAogICAgICAgICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgZ2V0VGVzdHNPclRhZ3MoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgUnVuVGVzdHM6OkluV2hhdE9yZGVyIHJ1bk9yZGVyKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBybmdTZWVkKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGludCBiZW5jaG1hcmtSZXNvbHV0aW9uTXVsdGlwbGUoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgVXNlQ29sb3VyOjpZZXNPck5vIHVzZUNvbG91cigpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGdldFNlY3Rpb25zVG9SdW4oKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgVmVyYm9zaXR5IHZlcmJvc2l0eSgpIGNvbnN0ID0gMDsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgYmVuY2htYXJrTm9BbmFseXNpcygpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBpbnQgYmVuY2htYXJrU2FtcGxlcygpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBkb3VibGUgYmVuY2htYXJrQ29uZmlkZW5jZUludGVydmFsKCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBiZW5jaG1hcmtSZXNhbXBsZXMoKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBiZW5jaG1hcmtXYXJtdXBUaW1lKCkgY29uc3QgPSAwOwogICAgIH07CiAKICAgICB1c2luZyBJQ29uZmlnUHRyID0gc3RkOjpzaGFyZWRfcHRyPElDb25maWcgY29uc3Q+OwogfQogCiAvLyBlbmQgY2F0Y2hfaW50ZXJmYWNlc19jb25maWcuaAotLy8gc3RhcnQgY2F0Y2hfcmFuZG9tX251bWJlcl9nZW5lcmF0b3IuaAotCi0jaW5jbHVkZSA8Y3N0ZGludD4KLQotbmFtZXNwYWNlIENhdGNoIHsKLQotICAgIC8vIFRoaXMgaXMgYSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgQysrMTEgVW5pZm9ybSBSYW5kb20gTnVtYmVyCi0gICAgLy8gR2VuZXJhdG9yLiBJdCBkb2VzIG5vdCBwcm92aWRlIGFsbCBvcGVyYXRvcnMsIGJlY2F1c2UgQ2F0Y2gyCi0gICAgLy8gZG9lcyBub3QgdXNlIGl0LCBidXQgaXQgc2hvdWxkIGJlaGF2ZSBhcyBleHBlY3RlZCBpbnNpZGUgc3RkbGliJ3MKLSAgICAvLyBkaXN0cmlidXRpb25zLgotICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgUENHIGZhbWlseSAoaHR0cDovL3BjZy1yYW5kb20ub3JnKQotICAgIGNsYXNzIFNpbXBsZVBjZzMyIHsKLSAgICAgICAgdXNpbmcgc3RhdGVfdHlwZSA9IHN0ZDo6dWludDY0X3Q7Ci0gICAgcHVibGljOgotICAgICAgICB1c2luZyByZXN1bHRfdHlwZSA9IHN0ZDo6dWludDMyX3Q7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgcmVzdWx0X3R5cGUgKG1pbikoKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBzdGF0aWMgY29uc3RleHByIHJlc3VsdF90eXBlIChtYXgpKCkgewotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHJlc3VsdF90eXBlPigtMSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBQcm92aWRlIHNvbWUgZGVmYXVsdCBpbml0aWFsIHN0YXRlIGZvciB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvcgotICAgICAgICBTaW1wbGVQY2czMigpOlNpbXBsZVBjZzMyKDB4ZWQ3NDNjYzRVKSB7fQotCi0gICAgICAgIGV4cGxpY2l0IFNpbXBsZVBjZzMyKHJlc3VsdF90eXBlIHNlZWRfKTsKLQotICAgICAgICB2b2lkIHNlZWQocmVzdWx0X3R5cGUgc2VlZF8pOwotICAgICAgICB2b2lkIGRpc2NhcmQodWludDY0X3Qgc2tpcCk7Ci0KLSAgICAgICAgcmVzdWx0X3R5cGUgb3BlcmF0b3IoKSgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShTaW1wbGVQY2czMiBjb25zdCYgbGhzLCBTaW1wbGVQY2czMiBjb25zdCYgcmhzKTsKLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVQY2czMiBjb25zdCYgbGhzLCBTaW1wbGVQY2czMiBjb25zdCYgcmhzKTsKLQotICAgICAgICAvLyBJbiB0aGVvcnkgd2UgYWxzbyBuZWVkIG9wZXJhdG9yPDwgYW5kIG9wZXJhdG9yPj4KLSAgICAgICAgLy8gSW4gcHJhY3RpY2Ugd2UgZG8gbm90IHVzZSB0aGVtLCBzbyB3ZSB3aWxsIHNraXAgdGhlbSBmb3Igbm93Ci0KLSAgICAgICAgc3RkOjp1aW50NjRfdCBtX3N0YXRlOwotICAgICAgICAvLyBUaGlzIHBhcnQgb2YgdGhlIHN0YXRlIGRldGVybWluZXMgd2hpY2ggInN0cmVhbSIgb2YgdGhlIG51bWJlcnMKLSAgICAgICAgLy8gaXMgY2hvc2VuIC0tIHdlIHRha2UgaXQgYXMgYSBjb25zdGFudCBmb3IgQ2F0Y2gyLCBzbyB3ZSBvbmx5Ci0gICAgICAgIC8vIG5lZWQgdG8gZGVhbCB3aXRoIHNlZWRpbmcgdGhlIG1haW4gc3RhdGUuCi0gICAgICAgIC8vIFBpY2tlZCBieSByZWFkaW5nIDggYnl0ZXMgZnJvbSBgL2Rldi9yYW5kb21gIDotKQotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjp1aW50NjRfdCBzX2luYyA9ICgweDEzZWQwY2M1M2Y5Mzk0NzZVTEwgPDwgMVVMTCkgfCAxVUxMOwotICAgIH07Ci0KLX0gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaAotCi0vLyBlbmQgY2F0Y2hfcmFuZG9tX251bWJlcl9nZW5lcmF0b3IuaAogI2luY2x1ZGUgPHJhbmRvbT4KIAogbmFtZXNwYWNlIENhdGNoIHsKQEAgLTQ1NjEsMTMgKzQwNTYsMTQgQEAKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEZsb2F0PgogY2xhc3MgUmFuZG9tRmxvYXRpbmdHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSUdlbmVyYXRvcjxGbG9hdD4gewotICAgIENhdGNoOjpTaW1wbGVQY2czMiYgbV9ybmc7CisgICAgLy8gRklYTUU6IFdoYXQgaXMgdGhlIHJpZ2h0IHNlZWQ/CisgICAgc3RkOjptaW5zdGRfcmFuZCBtX3JhbmQ7CiAgICAgc3RkOjp1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uPEZsb2F0PiBtX2Rpc3Q7CiAgICAgRmxvYXQgbV9jdXJyZW50X251bWJlcjsKIHB1YmxpYzoKIAogICAgIFJhbmRvbUZsb2F0aW5nR2VuZXJhdG9yKEZsb2F0IGEsIEZsb2F0IGIpOgotICAgICAgICBtX3JuZyhybmcoKSksCisgICAgICAgIG1fcmFuZChnZXRDdXJyZW50Q29udGV4dCgpLmdldENvbmZpZygpLT5ybmdTZWVkKCkpLAogICAgICAgICBtX2Rpc3QoYSwgYikgewogICAgICAgICBzdGF0aWNfY2FzdDx2b2lkPihuZXh0KCkpOwogICAgIH0KQEAgLTQ1NzYsMjAgKzQwNzIsMjAgQEAKICAgICAgICAgcmV0dXJuIG1fY3VycmVudF9udW1iZXI7CiAgICAgfQogICAgIGJvb2wgbmV4dCgpIG92ZXJyaWRlIHsKLSAgICAgICAgbV9jdXJyZW50X251bWJlciA9IG1fZGlzdChtX3JuZyk7CisgICAgICAgIG1fY3VycmVudF9udW1iZXIgPSBtX2Rpc3QobV9yYW5kKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEludGVnZXI+CiBjbGFzcyBSYW5kb21JbnRlZ2VyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIElHZW5lcmF0b3I8SW50ZWdlcj4gewotICAgIENhdGNoOjpTaW1wbGVQY2czMiYgbV9ybmc7CisgICAgc3RkOjptaW5zdGRfcmFuZCBtX3JhbmQ7CiAgICAgc3RkOjp1bmlmb3JtX2ludF9kaXN0cmlidXRpb248SW50ZWdlcj4gbV9kaXN0OwogICAgIEludGVnZXIgbV9jdXJyZW50X251bWJlcjsKIHB1YmxpYzoKIAogICAgIFJhbmRvbUludGVnZXJHZW5lcmF0b3IoSW50ZWdlciBhLCBJbnRlZ2VyIGIpOgotICAgICAgICBtX3JuZyhybmcoKSksCisgICAgICAgIG1fcmFuZChnZXRDdXJyZW50Q29udGV4dCgpLmdldENvbmZpZygpLT5ybmdTZWVkKCkpLAogICAgICAgICBtX2Rpc3QoYSwgYikgewogICAgICAgICBzdGF0aWNfY2FzdDx2b2lkPihuZXh0KCkpOwogICAgIH0KQEAgLTQ1OTgsNyArNDA5NCw3IEBACiAgICAgICAgIHJldHVybiBtX2N1cnJlbnRfbnVtYmVyOwogICAgIH0KICAgICBib29sIG5leHQoKSBvdmVycmlkZSB7Ci0gICAgICAgIG1fY3VycmVudF9udW1iZXIgPSBtX2Rpc3QobV9ybmcpOworICAgICAgICBtX2N1cnJlbnRfbnVtYmVyID0gbV9kaXN0KG1fcmFuZCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH07CkBAIC00NjU4LDcgKzQxNTQsNyBAQAogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIEdlbmVyYXRvcldyYXBwZXI8VD4gcmFuZ2UoVCBjb25zdCYgc3RhcnQsIFQgY29uc3QmIGVuZCwgVCBjb25zdCYgc3RlcCkgewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFQsIGJvb2w+Ojp2YWx1ZSwgIlR5cGUgbXVzdCBiZSBudW1lcmljIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFQsIGJvb2w+Ojp2YWx1ZSwgIlR5cGUgbXVzdCBiZSBhbiBpbnRlZ2VyIik7CiAgICAgcmV0dXJuIEdlbmVyYXRvcldyYXBwZXI8VD4ocGY6Om1ha2VfdW5pcXVlPFJhbmdlR2VuZXJhdG9yPFQ+PihzdGFydCwgZW5kLCBzdGVwKSk7CiB9CiAKQEAgLTQ2NjgsNDUgKzQxNjQsNiBAQAogICAgIHJldHVybiBHZW5lcmF0b3JXcmFwcGVyPFQ+KHBmOjptYWtlX3VuaXF1ZTxSYW5nZUdlbmVyYXRvcjxUPj4oc3RhcnQsIGVuZCkpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIEl0ZXJhdG9yR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIElHZW5lcmF0b3I8VD4gewotICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfc2FtZTxULCBib29sPjo6dmFsdWUsCi0gICAgICAgICJJdGVyYXRvckdlbmVyYXRvciBjdXJyZW50bHkgZG9lcyBub3Qgc3VwcG9ydCBib29scyIKLSAgICAgICAgImJlY2F1c2Ugb2Ygc3RkOjp2ZWN0b3I8Ym9vbD4gc3BlY2lhbGl6YXRpb24iKTsKLQotICAgIHN0ZDo6dmVjdG9yPFQ+IG1fZWxlbXM7Ci0gICAgc2l6ZV90IG1fY3VycmVudCA9IDA7Ci1wdWJsaWM6Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIElucHV0SXRlcmF0b3IsIHR5cGVuYW1lIElucHV0U2VudGluZWw+Ci0gICAgSXRlcmF0b3JHZW5lcmF0b3IoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRTZW50aW5lbCBsYXN0KTptX2VsZW1zKGZpcnN0LCBsYXN0KSB7Ci0gICAgICAgIGlmIChtX2VsZW1zLmVtcHR5KCkpIHsKLSAgICAgICAgICAgIENhdGNoOjp0aHJvd19leGNlcHRpb24oR2VuZXJhdG9yRXhjZXB0aW9uKCJJdGVyYXRvckdlbmVyYXRvciByZWNlaXZlZCBubyB2YWxpZCB2YWx1ZXMiKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBUIGNvbnN0JiBnZXQoKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgICAgIHJldHVybiBtX2VsZW1zW21fY3VycmVudF07Ci0gICAgfQotCi0gICAgYm9vbCBuZXh0KCkgb3ZlcnJpZGUgewotICAgICAgICArK21fY3VycmVudDsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudCAhPSBtX2VsZW1zLnNpemUoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSW5wdXRJdGVyYXRvciwKLSAgICAgICAgICB0eXBlbmFtZSBJbnB1dFNlbnRpbmVsLAotICAgICAgICAgIHR5cGVuYW1lIFJlc3VsdFR5cGUgPSB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxJbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4KLUdlbmVyYXRvcldyYXBwZXI8UmVzdWx0VHlwZT4gZnJvbV9yYW5nZShJbnB1dEl0ZXJhdG9yIGZyb20sIElucHV0U2VudGluZWwgdG8pIHsKLSAgICByZXR1cm4gR2VuZXJhdG9yV3JhcHBlcjxSZXN1bHRUeXBlPihwZjo6bWFrZV91bmlxdWU8SXRlcmF0b3JHZW5lcmF0b3I8UmVzdWx0VHlwZT4+KGZyb20sIHRvKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250YWluZXIsCi0gICAgICAgICAgdHlwZW5hbWUgUmVzdWx0VHlwZSA9IHR5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVfdHlwZT4KLUdlbmVyYXRvcldyYXBwZXI8UmVzdWx0VHlwZT4gZnJvbV9yYW5nZShDb250YWluZXIgY29uc3QmIGNudCkgewotICAgIHJldHVybiBHZW5lcmF0b3JXcmFwcGVyPFJlc3VsdFR5cGU+KHBmOjptYWtlX3VuaXF1ZTxJdGVyYXRvckdlbmVyYXRvcjxSZXN1bHRUeXBlPj4oY250LmJlZ2luKCksIGNudC5lbmQoKSkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBHZW5lcmF0b3JzCiB9IC8vIG5hbWVzcGFjZSBDYXRjaAogCkBAIC00OTEwLDcgKzQzNjcsNyBAQAogICAgICAgICAgICAgICAgICAgICBhcmNTYWZlUmVsZWFzZSggbV9zdWJzdHIgKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBib29sIG1hdGNoKCBOU1N0cmluZyogc3RyICkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICAgICAgICAgIGJvb2wgbWF0Y2goIE5TU3RyaW5nKiBjb25zdCYgc3RyICkgY29uc3Qgb3ZlcnJpZGUgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogCkBAIC00OTIwLDcgKzQzNzcsNyBAQAogICAgICAgICAgICAgc3RydWN0IEVxdWFscyA6IFN0cmluZ0hvbGRlciB7CiAgICAgICAgICAgICAgICAgRXF1YWxzKCBOU1N0cmluZyogc3Vic3RyICkgOiBTdHJpbmdIb2xkZXIoIHN1YnN0ciApe30KIAotICAgICAgICAgICAgICAgIGJvb2wgbWF0Y2goIE5TU3RyaW5nKiBzdHIgKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgICAgICAgICAgYm9vbCBtYXRjaCggTlNTdHJpbmcqIGNvbnN0JiBzdHIgKSBjb25zdCBvdmVycmlkZSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAgKHN0ciAhPSBuaWwgfHwgbV9zdWJzdHIgPT0gbmlsICkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RyIGlzRXF1YWxUb1N0cmluZzptX3N1YnN0cl07CiAgICAgICAgICAgICAgICAgfQpAQCAtNDkzMyw3ICs0MzkwLDcgQEAKICAgICAgICAgICAgIHN0cnVjdCBDb250YWlucyA6IFN0cmluZ0hvbGRlciB7CiAgICAgICAgICAgICAgICAgQ29udGFpbnMoIE5TU3RyaW5nKiBzdWJzdHIgKSA6IFN0cmluZ0hvbGRlciggc3Vic3RyICl7fQogCi0gICAgICAgICAgICAgICAgYm9vbCBtYXRjaCggTlNTdHJpbmcqIHN0ciApIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgICAgICAgICBib29sIG1hdGNoKCBOU1N0cmluZyogY29uc3QmIHN0ciApIGNvbnN0IG92ZXJyaWRlIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICAoc3RyICE9IG5pbCB8fCBtX3N1YnN0ciA9PSBuaWwgKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHIgcmFuZ2VPZlN0cmluZzptX3N1YnN0cl0ubG9jYXRpb24gIT0gTlNOb3RGb3VuZDsKICAgICAgICAgICAgICAgICB9CkBAIC00OTQ2LDcgKzQ0MDMsNyBAQAogICAgICAgICAgICAgc3RydWN0IFN0YXJ0c1dpdGggOiBTdHJpbmdIb2xkZXIgewogICAgICAgICAgICAgICAgIFN0YXJ0c1dpdGgoIE5TU3RyaW5nKiBzdWJzdHIgKSA6IFN0cmluZ0hvbGRlciggc3Vic3RyICl7fQogCi0gICAgICAgICAgICAgICAgYm9vbCBtYXRjaCggTlNTdHJpbmcqIHN0ciApIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgICAgICAgICBib29sIG1hdGNoKCBOU1N0cmluZyogY29uc3QmIHN0ciApIGNvbnN0IG92ZXJyaWRlIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICAoc3RyICE9IG5pbCB8fCBtX3N1YnN0ciA9PSBuaWwgKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHIgcmFuZ2VPZlN0cmluZzptX3N1YnN0cl0ubG9jYXRpb24gPT0gMDsKICAgICAgICAgICAgICAgICB9CkBAIC00OTU4LDcgKzQ0MTUsNyBAQAogICAgICAgICAgICAgc3RydWN0IEVuZHNXaXRoIDogU3RyaW5nSG9sZGVyIHsKICAgICAgICAgICAgICAgICBFbmRzV2l0aCggTlNTdHJpbmcqIHN1YnN0ciApIDogU3RyaW5nSG9sZGVyKCBzdWJzdHIgKXt9CiAKLSAgICAgICAgICAgICAgICBib29sIG1hdGNoKCBOU1N0cmluZyogc3RyICkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICAgICAgICAgIGJvb2wgbWF0Y2goIE5TU3RyaW5nKiBjb25zdCYgc3RyICkgY29uc3Qgb3ZlcnJpZGUgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gIChzdHIgIT0gbmlsIHx8IG1fc3Vic3RyID09IG5pbCApICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0ciByYW5nZU9mU3RyaW5nOm1fc3Vic3RyXS5sb2NhdGlvbiA9PSBbc3RyIGxlbmd0aF0gLSBbbV9zdWJzdHIgbGVuZ3RoXTsKICAgICAgICAgICAgICAgICB9CkBAIC01MDA5LDggKzQ0NjYsNyBAQAogLy8gZW5kIGNhdGNoX29iamMuaHBwCiAjZW5kaWYKIAotLy8gQmVuY2htYXJraW5nIG5lZWRzIHRoZSBleHRlcm5hbGx5LWZhY2luZyBwYXJ0cyBvZiByZXBvcnRlcnMgdG8gd29yawotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VYVEVSTkFMX0lOVEVSRkFDRVMpIHx8IGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcpCisjaWZkZWYgQ0FUQ0hfQ09ORklHX0VYVEVSTkFMX0lOVEVSRkFDRVMKIC8vIHN0YXJ0IGNhdGNoX2V4dGVybmFsX2ludGVyZmFjZXMuaAogCiAvLyBzdGFydCBjYXRjaF9yZXBvcnRlcl9iYXNlcy5ocHAKQEAgLTUwNTIsNyArNDUwOCw3IEBACiAgICAgICAgIHZpcnR1YWwgYm9vbCBtYXRjaGVzKCBzdGQ6OnN0cmluZyBjb25zdCYgc3RyICkgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICBzdGQ6OnN0cmluZyBub3JtYWxpc2VTdHJpbmcoIHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIgKSBjb25zdDsKKyAgICAgICAgc3RkOjpzdHJpbmcgYWRqdXN0Q2FzZSggc3RkOjpzdHJpbmcgY29uc3QmIHN0ciApIGNvbnN0OwogICAgICAgICBDYXNlU2Vuc2l0aXZlOjpDaG9pY2UgbV9jYXNlU2Vuc2l0aXZpdHk7CiAgICAgICAgIFdpbGRjYXJkUG9zaXRpb24gbV93aWxkY2FyZCA9IE5vV2lsZGNhcmQ7CiAgICAgICAgIHN0ZDo6c3RyaW5nIG1fcGF0dGVybjsKQEAgLTUwNjYsMjMgKzQ1MjIsMTcgQEAKIAogbmFtZXNwYWNlIENhdGNoIHsKIAotICAgIHN0cnVjdCBJQ29uZmlnOwotCiAgICAgY2xhc3MgVGVzdFNwZWMgewotICAgICAgICBjbGFzcyBQYXR0ZXJuIHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgZXhwbGljaXQgUGF0dGVybiggc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgKTsKKyAgICAgICAgc3RydWN0IFBhdHRlcm4gewogICAgICAgICAgICAgdmlydHVhbCB+UGF0dGVybigpOwogICAgICAgICAgICAgdmlydHVhbCBib29sIG1hdGNoZXMoIFRlc3RDYXNlSW5mbyBjb25zdCYgdGVzdENhc2UgKSBjb25zdCA9IDA7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSgpIGNvbnN0OwotICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QgbV9uYW1lOwogICAgICAgICB9OwogICAgICAgICB1c2luZyBQYXR0ZXJuUHRyID0gc3RkOjpzaGFyZWRfcHRyPFBhdHRlcm4+OwogCiAgICAgICAgIGNsYXNzIE5hbWVQYXR0ZXJuIDogcHVibGljIFBhdHRlcm4gewogICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBleHBsaWNpdCBOYW1lUGF0dGVybiggc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUsIHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWx0ZXJTdHJpbmcgKTsKKyAgICAgICAgICAgIE5hbWVQYXR0ZXJuKCBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSApOworICAgICAgICAgICAgdmlydHVhbCB+TmFtZVBhdHRlcm4oKTsKICAgICAgICAgICAgIGJvb2wgbWF0Y2hlcyggVGVzdENhc2VJbmZvIGNvbnN0JiB0ZXN0Q2FzZSApIGNvbnN0IG92ZXJyaWRlOwogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgV2lsZGNhcmRQYXR0ZXJuIG1fd2lsZGNhcmRQYXR0ZXJuOwpAQCAtNTA5MCw3ICs0NTQwLDggQEAKIAogICAgICAgICBjbGFzcyBUYWdQYXR0ZXJuIDogcHVibGljIFBhdHRlcm4gewogICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBleHBsaWNpdCBUYWdQYXR0ZXJuKCBzdGQ6OnN0cmluZyBjb25zdCYgdGFnLCBzdGQ6OnN0cmluZyBjb25zdCYgZmlsdGVyU3RyaW5nICk7CisgICAgICAgICAgICBUYWdQYXR0ZXJuKCBzdGQ6OnN0cmluZyBjb25zdCYgdGFnICk7CisgICAgICAgICAgICB2aXJ0dWFsIH5UYWdQYXR0ZXJuKCk7CiAgICAgICAgICAgICBib29sIG1hdGNoZXMoIFRlc3RDYXNlSW5mbyBjb25zdCYgdGVzdENhc2UgKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG1fdGFnOwpAQCAtNTA5OCw3ICs0NTQ5LDggQEAKIAogICAgICAgICBjbGFzcyBFeGNsdWRlZFBhdHRlcm4gOiBwdWJsaWMgUGF0dGVybiB7CiAgICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIGV4cGxpY2l0IEV4Y2x1ZGVkUGF0dGVybiggUGF0dGVyblB0ciBjb25zdCYgdW5kZXJseWluZ1BhdHRlcm4gKTsKKyAgICAgICAgICAgIEV4Y2x1ZGVkUGF0dGVybiggUGF0dGVyblB0ciBjb25zdCYgdW5kZXJseWluZ1BhdHRlcm4gKTsKKyAgICAgICAgICAgIHZpcnR1YWwgfkV4Y2x1ZGVkUGF0dGVybigpOwogICAgICAgICAgICAgYm9vbCBtYXRjaGVzKCBUZXN0Q2FzZUluZm8gY29uc3QmIHRlc3RDYXNlICkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICBQYXR0ZXJuUHRyIG1fdW5kZXJseWluZ1BhdHRlcm47CkBAIC01MTA4LDI1ICs0NTYwLDE1IEBACiAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxQYXR0ZXJuUHRyPiBtX3BhdHRlcm5zOwogCiAgICAgICAgICAgICBib29sIG1hdGNoZXMoIFRlc3RDYXNlSW5mbyBjb25zdCYgdGVzdENhc2UgKSBjb25zdDsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG5hbWUoKSBjb25zdDsKICAgICAgICAgfTsKIAogICAgIHB1YmxpYzoKLSAgICAgICAgc3RydWN0IEZpbHRlck1hdGNoIHsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci0gICAgICAgICAgICBzdGQ6OnZlY3RvcjxUZXN0Q2FzZSBjb25zdCo+IHRlc3RzOwotICAgICAgICB9OwotICAgICAgICB1c2luZyBNYXRjaGVzID0gc3RkOjp2ZWN0b3I8RmlsdGVyTWF0Y2g+OwotICAgICAgICB1c2luZyB2ZWN0b3JTdHJpbmdzID0gc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+OwotCiAgICAgICAgIGJvb2wgaGFzRmlsdGVycygpIGNvbnN0OwogICAgICAgICBib29sIG1hdGNoZXMoIFRlc3RDYXNlSW5mbyBjb25zdCYgdGVzdENhc2UgKSBjb25zdDsKLSAgICAgICAgTWF0Y2hlcyBtYXRjaGVzQnlGaWx0ZXIoIHN0ZDo6dmVjdG9yPFRlc3RDYXNlPiBjb25zdCYgdGVzdENhc2VzLCBJQ29uZmlnIGNvbnN0JiBjb25maWcgKSBjb25zdDsKLSAgICAgICAgY29uc3QgdmVjdG9yU3RyaW5ncyAmIGdldEludmFsaWRBcmdzKCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBzdGQ6OnZlY3RvcjxGaWx0ZXI+IG1fZmlsdGVyczsKLSAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1faW52YWxpZEFyZ3M7CisKICAgICAgICAgZnJpZW5kIGNsYXNzIFRlc3RTcGVjUGFyc2VyOwogICAgIH07CiB9CkBAIC01MTYxLDEzICs0NjAzLDkgQEAKICAgICBjbGFzcyBUZXN0U3BlY1BhcnNlciB7CiAgICAgICAgIGVudW0gTW9kZXsgTm9uZSwgTmFtZSwgUXVvdGVkTmFtZSwgVGFnLCBFc2NhcGVkTmFtZSB9OwogICAgICAgICBNb2RlIG1fbW9kZSA9IE5vbmU7Ci0gICAgICAgIE1vZGUgbGFzdE1vZGUgPSBOb25lOwogICAgICAgICBib29sIG1fZXhjbHVzaW9uID0gZmFsc2U7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG1fcG9zID0gMDsKLSAgICAgICAgc3RkOjpzaXplX3QgbV9yZWFsUGF0dGVyblBvcyA9IDA7CisgICAgICAgIHN0ZDo6c2l6ZV90IG1fc3RhcnQgPSBzdGQ6OnN0cmluZzo6bnBvcywgbV9wb3MgPSAwOwogICAgICAgICBzdGQ6OnN0cmluZyBtX2FyZzsKLSAgICAgICAgc3RkOjpzdHJpbmcgbV9zdWJzdHJpbmc7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIG1fcGF0dGVybk5hbWU7CiAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2l6ZV90PiBtX2VzY2FwZUNoYXJzOwogICAgICAgICBUZXN0U3BlYzo6RmlsdGVyIG1fY3VycmVudEZpbHRlcjsKICAgICAgICAgVGVzdFNwZWMgbV90ZXN0U3BlYzsKQEAgLTUxODAsMzIgKzQ2MTgsMzIgQEAKICAgICAgICAgVGVzdFNwZWMgdGVzdFNwZWMoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wgdmlzaXRDaGFyKCBjaGFyIGMgKTsKLSAgICAgICAgdm9pZCBzdGFydE5ld01vZGUoIE1vZGUgbW9kZSApOwotICAgICAgICBib29sIHByb2Nlc3NOb25lQ2hhciggY2hhciBjICk7Ci0gICAgICAgIHZvaWQgcHJvY2Vzc05hbWVDaGFyKCBjaGFyIGMgKTsKLSAgICAgICAgYm9vbCBwcm9jZXNzT3RoZXJDaGFyKCBjaGFyIGMgKTsKLSAgICAgICAgdm9pZCBlbmRNb2RlKCk7CisgICAgICAgIHZvaWQgdmlzaXRDaGFyKCBjaGFyIGMgKTsKKyAgICAgICAgdm9pZCBzdGFydE5ld01vZGUoIE1vZGUgbW9kZSwgc3RkOjpzaXplX3Qgc3RhcnQgKTsKICAgICAgICAgdm9pZCBlc2NhcGUoKTsKLSAgICAgICAgYm9vbCBpc0NvbnRyb2xDaGFyKCBjaGFyIGMgKSBjb25zdDsKLSAgICAgICAgdm9pZCBzYXZlTGFzdE1vZGUoKTsKLSAgICAgICAgdm9pZCByZXZlcnRCYWNrVG9MYXN0TW9kZSgpOwotICAgICAgICB2b2lkIGFkZEZpbHRlcigpOwotICAgICAgICBib29sIHNlcGFyYXRlKCk7CisgICAgICAgIHN0ZDo6c3RyaW5nIHN1YlN0cmluZygpIGNvbnN0OwogCi0gICAgICAgIC8vIEhhbmRsZXMgY29tbW9uIHByZXByb2Nlc3Npbmcgb2YgdGhlIHBhdHRlcm4gZm9yIG5hbWUvdGFnIHBhdHRlcm5zCi0gICAgICAgIHN0ZDo6c3RyaW5nIHByZXByb2Nlc3NQYXR0ZXJuKCk7Ci0gICAgICAgIC8vIEFkZHMgdGhlIGN1cnJlbnQgcGF0dGVybiBhcyBhIHRlc3QgbmFtZQotICAgICAgICB2b2lkIGFkZE5hbWVQYXR0ZXJuKCk7Ci0gICAgICAgIC8vIEFkZHMgdGhlIGN1cnJlbnQgcGF0dGVybiBhcyBhIHRhZwotICAgICAgICB2b2lkIGFkZFRhZ1BhdHRlcm4oKTsKLQotICAgICAgICBpbmxpbmUgdm9pZCBhZGRDaGFyVG9QYXR0ZXJuKGNoYXIgYykgewotICAgICAgICAgICAgbV9zdWJzdHJpbmcgKz0gYzsKLSAgICAgICAgICAgIG1fcGF0dGVybk5hbWUgKz0gYzsKLSAgICAgICAgICAgIG1fcmVhbFBhdHRlcm5Qb3MrKzsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAgICAgdm9pZCBhZGRQYXR0ZXJuKCkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdG9rZW4gPSBzdWJTdHJpbmcoKTsKKyAgICAgICAgICAgIGZvciggc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBtX2VzY2FwZUNoYXJzLnNpemUoKTsgKytpICkKKyAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2VuLnN1YnN0ciggMCwgbV9lc2NhcGVDaGFyc1tpXS1tX3N0YXJ0LWkgKSArIHRva2VuLnN1YnN0ciggbV9lc2NhcGVDaGFyc1tpXS1tX3N0YXJ0LWkrMSApOworICAgICAgICAgICAgbV9lc2NhcGVDaGFycy5jbGVhcigpOworICAgICAgICAgICAgaWYoIHN0YXJ0c1dpdGgoIHRva2VuLCAiZXhjbHVkZToiICkgKSB7CisgICAgICAgICAgICAgICAgbV9leGNsdXNpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW4uc3Vic3RyKCA4ICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiggIXRva2VuLmVtcHR5KCkgKSB7CisgICAgICAgICAgICAgICAgVGVzdFNwZWM6OlBhdHRlcm5QdHIgcGF0dGVybiA9IHN0ZDo6bWFrZV9zaGFyZWQ8VD4oIHRva2VuICk7CisgICAgICAgICAgICAgICAgaWYoIG1fZXhjbHVzaW9uICkKKyAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IHN0ZDo6bWFrZV9zaGFyZWQ8VGVzdFNwZWM6OkV4Y2x1ZGVkUGF0dGVybj4oIHBhdHRlcm4gKTsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRGaWx0ZXIubV9wYXR0ZXJucy5wdXNoX2JhY2soIHBhdHRlcm4gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fZXhjbHVzaW9uID0gZmFsc2U7CisgICAgICAgICAgICBtX21vZGUgPSBOb25lOwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBhZGRGaWx0ZXIoKTsKICAgICB9OwogICAgIFRlc3RTcGVjIHBhcnNlVGVzdFNwZWMoIHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcgKTsKIApAQCAtNTI0NiwxMiArNDY4NCw3IEBACiAKICAgICAgICAgaW50IGFib3J0QWZ0ZXIgPSAtMTsKICAgICAgICAgdW5zaWduZWQgaW50IHJuZ1NlZWQgPSAwOwotCi0gICAgICAgIGJvb2wgYmVuY2htYXJrTm9BbmFseXNpcyA9IGZhbHNlOwotICAgICAgICB1bnNpZ25lZCBpbnQgYmVuY2htYXJrU2FtcGxlcyA9IDEwMDsKLSAgICAgICAgZG91YmxlIGJlbmNobWFya0NvbmZpZGVuY2VJbnRlcnZhbCA9IDAuOTU7Ci0gICAgICAgIHVuc2lnbmVkIGludCBiZW5jaG1hcmtSZXNhbXBsZXMgPSAxMDAwMDA7Ci0gICAgICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6OnJlcCBiZW5jaG1hcmtXYXJtdXBUaW1lID0gMTAwOworICAgICAgICBpbnQgYmVuY2htYXJrUmVzb2x1dGlvbk11bHRpcGxlID0gMTAwOwogCiAgICAgICAgIFZlcmJvc2l0eSB2ZXJib3NpdHkgPSBWZXJib3NpdHk6Ok5vcm1hbDsKICAgICAgICAgV2FybkFib3V0OjpXaGF0IHdhcm5pbmdzID0gV2FybkFib3V0OjpOb3RoaW5nOwpAQCAtNTMwOCwxNiArNDc0MSwxMiBAQAogICAgICAgICBTaG93RHVyYXRpb25zOjpPck5vdCBzaG93RHVyYXRpb25zKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIFJ1blRlc3RzOjpJbldoYXRPcmRlciBydW5PcmRlcigpIGNvbnN0IG92ZXJyaWRlOwogICAgICAgICB1bnNpZ25lZCBpbnQgcm5nU2VlZCgpIGNvbnN0IG92ZXJyaWRlOworICAgICAgICBpbnQgYmVuY2htYXJrUmVzb2x1dGlvbk11bHRpcGxlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIFVzZUNvbG91cjo6WWVzT3JObyB1c2VDb2xvdXIoKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAgYm9vbCBzaG91bGREZWJ1Z0JyZWFrKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIGludCBhYm9ydEFmdGVyKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIGJvb2wgc2hvd0ludmlzaWJsZXMoKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAgVmVyYm9zaXR5IHZlcmJvc2l0eSgpIGNvbnN0IG92ZXJyaWRlOwotICAgICAgICBib29sIGJlbmNobWFya05vQW5hbHlzaXMoKSBjb25zdCBvdmVycmlkZTsKLSAgICAgICAgaW50IGJlbmNobWFya1NhbXBsZXMoKSBjb25zdCBvdmVycmlkZTsKLSAgICAgICAgZG91YmxlIGJlbmNobWFya0NvbmZpZGVuY2VJbnRlcnZhbCgpIGNvbnN0IG92ZXJyaWRlOwotICAgICAgICB1bnNpZ25lZCBpbnQgYmVuY2htYXJrUmVzYW1wbGVzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgYmVuY2htYXJrV2FybXVwVGltZSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgcHJpdmF0ZToKIApAQCAtNTM3OCw1OSArNDgwNyw3NiBAQAogfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCiAKIC8vIGVuZCBjYXRjaF9hc3NlcnRpb25yZXN1bHQuaAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcpCi0vLyBzdGFydCBjYXRjaF9lc3RpbWF0ZS5ocHAKLQotIC8vIFN0YXRpc3RpY3MgZXN0aW1hdGVzCi0KKy8vIHN0YXJ0IGNhdGNoX29wdGlvbi5ocHAKIAogbmFtZXNwYWNlIENhdGNoIHsKLSAgICBuYW1lc3BhY2UgQmVuY2htYXJrIHsKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIER1cmF0aW9uPgotICAgICAgICBzdHJ1Y3QgRXN0aW1hdGUgewotICAgICAgICAgICAgRHVyYXRpb24gcG9pbnQ7Ci0gICAgICAgICAgICBEdXJhdGlvbiBsb3dlcl9ib3VuZDsKLSAgICAgICAgICAgIER1cmF0aW9uIHVwcGVyX2JvdW5kOwotICAgICAgICAgICAgZG91YmxlIGNvbmZpZGVuY2VfaW50ZXJ2YWw7CiAKLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBEdXJhdGlvbjI+Ci0gICAgICAgICAgICBvcGVyYXRvciBFc3RpbWF0ZTxEdXJhdGlvbjI+KCkgY29uc3QgewotICAgICAgICAgICAgICAgIHJldHVybiB7IHBvaW50LCBsb3dlcl9ib3VuZCwgdXBwZXJfYm91bmQsIGNvbmZpZGVuY2VfaW50ZXJ2YWwgfTsKKyAgICAvLyBBbiBvcHRpb25hbCB0eXBlCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjbGFzcyBPcHRpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgT3B0aW9uKCkgOiBudWxsYWJsZVZhbHVlKCBudWxscHRyICkge30KKyAgICAgICAgT3B0aW9uKCBUIGNvbnN0JiBfdmFsdWUgKQorICAgICAgICA6IG51bGxhYmxlVmFsdWUoIG5ldyggc3RvcmFnZSApIFQoIF92YWx1ZSApICkKKyAgICAgICAge30KKyAgICAgICAgT3B0aW9uKCBPcHRpb24gY29uc3QmIF9vdGhlciApCisgICAgICAgIDogbnVsbGFibGVWYWx1ZSggX290aGVyID8gbmV3KCBzdG9yYWdlICkgVCggKl9vdGhlciApIDogbnVsbHB0ciApCisgICAgICAgIHt9CisKKyAgICAgICAgfk9wdGlvbigpIHsKKyAgICAgICAgICAgIHJlc2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBPcHRpb24mIG9wZXJhdG9yPSAoIE9wdGlvbiBjb25zdCYgX290aGVyICkgeworICAgICAgICAgICAgaWYoICZfb3RoZXIgIT0gdGhpcyApIHsKKyAgICAgICAgICAgICAgICByZXNldCgpOworICAgICAgICAgICAgICAgIGlmKCBfb3RoZXIgKQorICAgICAgICAgICAgICAgICAgICBudWxsYWJsZVZhbHVlID0gbmV3KCBzdG9yYWdlICkgVCggKl9vdGhlciApOwogICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0gLy8gbmFtZXNwYWNlIEJlbmNobWFyawotfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorICAgICAgICBPcHRpb24mIG9wZXJhdG9yID0gKCBUIGNvbnN0JiBfdmFsdWUgKSB7CisgICAgICAgICAgICByZXNldCgpOworICAgICAgICAgICAgbnVsbGFibGVWYWx1ZSA9IG5ldyggc3RvcmFnZSApIFQoIF92YWx1ZSApOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CiAKLS8vIGVuZCBjYXRjaF9lc3RpbWF0ZS5ocHAKLS8vIHN0YXJ0IGNhdGNoX291dGxpZXJfY2xhc3NpZmljYXRpb24uaHBwCisgICAgICAgIHZvaWQgcmVzZXQoKSB7CisgICAgICAgICAgICBpZiggbnVsbGFibGVWYWx1ZSApCisgICAgICAgICAgICAgICAgbnVsbGFibGVWYWx1ZS0+flQoKTsKKyAgICAgICAgICAgIG51bGxhYmxlVmFsdWUgPSBudWxscHRyOworICAgICAgICB9CiAKLS8vIE91dGxpZXIgaW5mb3JtYXRpb24KKyAgICAgICAgVCYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKm51bGxhYmxlVmFsdWU7IH0KKyAgICAgICAgVCBjb25zdCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm51bGxhYmxlVmFsdWU7IH0KKyAgICAgICAgVCogb3BlcmF0b3ItPigpIHsgcmV0dXJuIG51bGxhYmxlVmFsdWU7IH0KKyAgICAgICAgY29uc3QgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIG51bGxhYmxlVmFsdWU7IH0KIAotbmFtZXNwYWNlIENhdGNoIHsKLSAgICBuYW1lc3BhY2UgQmVuY2htYXJrIHsKLSAgICAgICAgc3RydWN0IE91dGxpZXJDbGFzc2lmaWNhdGlvbiB7Ci0gICAgICAgICAgICBpbnQgc2FtcGxlc19zZWVuID0gMDsKLSAgICAgICAgICAgIGludCBsb3dfc2V2ZXJlID0gMDsgICAgIC8vIG1vcmUgdGhhbiAzIHRpbWVzIElRUiBiZWxvdyBRMQotICAgICAgICAgICAgaW50IGxvd19taWxkID0gMDsgICAgICAgLy8gMS41IHRvIDMgdGltZXMgSVFSIGJlbG93IFExCi0gICAgICAgICAgICBpbnQgaGlnaF9taWxkID0gMDsgICAgICAvLyAxLjUgdG8gMyB0aW1lcyBJUVIgYWJvdmUgUTMKLSAgICAgICAgICAgIGludCBoaWdoX3NldmVyZSA9IDA7ICAgIC8vIG1vcmUgdGhhbiAzIHRpbWVzIElRUiBhYm92ZSBRMworICAgICAgICBUIHZhbHVlT3IoIFQgY29uc3QmIGRlZmF1bHRWYWx1ZSApIGNvbnN0IHsKKyAgICAgICAgICAgIHJldHVybiBudWxsYWJsZVZhbHVlID8gKm51bGxhYmxlVmFsdWUgOiBkZWZhdWx0VmFsdWU7CisgICAgICAgIH0KIAotICAgICAgICAgICAgaW50IHRvdGFsKCkgY29uc3QgewotICAgICAgICAgICAgICAgIHJldHVybiBsb3dfc2V2ZXJlICsgbG93X21pbGQgKyBoaWdoX21pbGQgKyBoaWdoX3NldmVyZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICB9IC8vIG5hbWVzcGFjZSBCZW5jaG1hcmsKLX0gLy8gbmFtZXNwYWNlIENhdGNoCisgICAgICAgIGJvb2wgc29tZSgpIGNvbnN0IHsgcmV0dXJuIG51bGxhYmxlVmFsdWUgIT0gbnVsbHB0cjsgfQorICAgICAgICBib29sIG5vbmUoKSBjb25zdCB7IHJldHVybiBudWxsYWJsZVZhbHVlID09IG51bGxwdHI7IH0KIAotLy8gZW5kIGNhdGNoX291dGxpZXJfY2xhc3NpZmljYXRpb24uaHBwCi0jZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcKKyAgICAgICAgYm9vbCBvcGVyYXRvciAhKCkgY29uc3QgeyByZXR1cm4gbnVsbGFibGVWYWx1ZSA9PSBudWxscHRyOyB9CisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7CisgICAgICAgICAgICByZXR1cm4gc29tZSgpOworICAgICAgICB9CiAKKyAgICBwcml2YXRlOgorICAgICAgICBUICpudWxsYWJsZVZhbHVlOworICAgICAgICBhbGlnbmFzKGFsaWdub2YoVCkpIGNoYXIgc3RvcmFnZVtzaXplb2YoVCldOworICAgIH07CisKK30gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaAorCisvLyBlbmQgY2F0Y2hfb3B0aW9uLmhwcAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDxpb3Nmd2Q+CiAjaW5jbHVkZSA8bWFwPgogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8YWxnb3JpdGhtPgogCiBuYW1lc3BhY2UgQ2F0Y2ggewogCkBAIC01NTY2LDQzICs1MDEyLDE0IEBACiAgICAgICAgIGJvb2wgYWJvcnRpbmc7CiAgICAgfTsKIAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcpCiAgICAgc3RydWN0IEJlbmNobWFya0luZm8gewogICAgICAgICBzdGQ6OnN0cmluZyBuYW1lOwotICAgICAgICBkb3VibGUgZXN0aW1hdGVkRHVyYXRpb247Ci0gICAgICAgIGludCBpdGVyYXRpb25zOwotICAgICAgICBpbnQgc2FtcGxlczsKLSAgICAgICAgdW5zaWduZWQgaW50IHJlc2FtcGxlczsKLSAgICAgICAgZG91YmxlIGNsb2NrUmVzb2x1dGlvbjsKLSAgICAgICAgZG91YmxlIGNsb2NrQ29zdDsKICAgICB9OwotCi0gICAgdGVtcGxhdGUgPGNsYXNzIER1cmF0aW9uPgogICAgIHN0cnVjdCBCZW5jaG1hcmtTdGF0cyB7CiAgICAgICAgIEJlbmNobWFya0luZm8gaW5mbzsKLQotICAgICAgICBzdGQ6OnZlY3RvcjxEdXJhdGlvbj4gc2FtcGxlczsKLSAgICAgICAgQmVuY2htYXJrOjpFc3RpbWF0ZTxEdXJhdGlvbj4gbWVhbjsKLSAgICAgICAgQmVuY2htYXJrOjpFc3RpbWF0ZTxEdXJhdGlvbj4gc3RhbmRhcmREZXZpYXRpb247Ci0gICAgICAgIEJlbmNobWFyazo6T3V0bGllckNsYXNzaWZpY2F0aW9uIG91dGxpZXJzOwotICAgICAgICBkb3VibGUgb3V0bGllclZhcmlhbmNlOwotCi0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBEdXJhdGlvbjI+Ci0gICAgICAgIG9wZXJhdG9yIEJlbmNobWFya1N0YXRzPER1cmF0aW9uMj4oKSBjb25zdCB7Ci0gICAgICAgICAgICBzdGQ6OnZlY3RvcjxEdXJhdGlvbjI+IHNhbXBsZXMyOwotICAgICAgICAgICAgc2FtcGxlczIucmVzZXJ2ZShzYW1wbGVzLnNpemUoKSk7Ci0gICAgICAgICAgICBzdGQ6OnRyYW5zZm9ybShzYW1wbGVzLmJlZ2luKCksIHNhbXBsZXMuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlcihzYW1wbGVzMiksIFtdKER1cmF0aW9uIGQpIHsgcmV0dXJuIER1cmF0aW9uMihkKTsgfSk7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIGluZm8sCi0gICAgICAgICAgICAgICAgc3RkOjptb3ZlKHNhbXBsZXMyKSwKLSAgICAgICAgICAgICAgICBtZWFuLAotICAgICAgICAgICAgICAgIHN0YW5kYXJkRGV2aWF0aW9uLAotICAgICAgICAgICAgICAgIG91dGxpZXJzLAotICAgICAgICAgICAgICAgIG91dGxpZXJWYXJpYW5jZSwKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KKyAgICAgICAgc3RkOjpzaXplX3QgaXRlcmF0aW9uczsKKyAgICAgICAgdWludDY0X3QgZWxhcHNlZFRpbWVJbk5hbm9zZWNvbmRzOwogICAgIH07Ci0jZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcKIAogICAgIHN0cnVjdCBJU3RyZWFtaW5nUmVwb3J0ZXIgewogICAgICAgICB2aXJ0dWFsIH5JU3RyZWFtaW5nUmVwb3J0ZXIoKSA9IGRlZmF1bHQ7CkBAIC01NjE1LDI2ICs1MDMyLDIzIEBACiAKICAgICAgICAgdmlydHVhbCB2b2lkIG5vTWF0Y2hpbmdUZXN0Q2FzZXMoIHN0ZDo6c3RyaW5nIGNvbnN0JiBzcGVjICkgPSAwOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZXBvcnRJbnZhbGlkQXJndW1lbnRzKHN0ZDo6c3RyaW5nIGNvbnN0Jikge30KLQogICAgICAgICB2aXJ0dWFsIHZvaWQgdGVzdFJ1blN0YXJ0aW5nKCBUZXN0UnVuSW5mbyBjb25zdCYgdGVzdFJ1bkluZm8gKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB0ZXN0R3JvdXBTdGFydGluZyggR3JvdXBJbmZvIGNvbnN0JiBncm91cEluZm8gKSA9IDA7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHRlc3RDYXNlU3RhcnRpbmcoIFRlc3RDYXNlSW5mbyBjb25zdCYgdGVzdEluZm8gKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZWN0aW9uU3RhcnRpbmcoIFNlY3Rpb25JbmZvIGNvbnN0JiBzZWN0aW9uSW5mbyApID0gMDsKIAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcpCi0gICAgICAgIHZpcnR1YWwgdm9pZCBiZW5jaG1hcmtQcmVwYXJpbmcoIHN0ZDo6c3RyaW5nIGNvbnN0JiApIHt9CisgICAgICAgIC8vICoqKiBleHBlcmltZW50YWwgKioqCiAgICAgICAgIHZpcnR1YWwgdm9pZCBiZW5jaG1hcmtTdGFydGluZyggQmVuY2htYXJrSW5mbyBjb25zdCYgKSB7fQotICAgICAgICB2aXJ0dWFsIHZvaWQgYmVuY2htYXJrRW5kZWQoIEJlbmNobWFya1N0YXRzPD4gY29uc3QmICkge30KLSAgICAgICAgdmlydHVhbCB2b2lkIGJlbmNobWFya0ZhaWxlZCggc3RkOjpzdHJpbmcgY29uc3QmICkge30KLSNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBhc3NlcnRpb25TdGFydGluZyggQXNzZXJ0aW9uSW5mbyBjb25zdCYgYXNzZXJ0aW9uSW5mbyApID0gMDsKIAogICAgICAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBpZiB0aGUgbWVzc2FnZXMgYnVmZmVyIHNob3VsZCBiZSBjbGVhcmVkOgogICAgICAgICB2aXJ0dWFsIGJvb2wgYXNzZXJ0aW9uRW5kZWQoIEFzc2VydGlvblN0YXRzIGNvbnN0JiBhc3NlcnRpb25TdGF0cyApID0gMDsKIAorICAgICAgICAvLyAqKiogZXhwZXJpbWVudGFsICoqKgorICAgICAgICB2aXJ0dWFsIHZvaWQgYmVuY2htYXJrRW5kZWQoIEJlbmNobWFya1N0YXRzIGNvbnN0JiApIHt9CisKICAgICAgICAgdmlydHVhbCB2b2lkIHNlY3Rpb25FbmRlZCggU2VjdGlvblN0YXRzIGNvbnN0JiBzZWN0aW9uU3RhdHMgKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB0ZXN0Q2FzZUVuZGVkKCBUZXN0Q2FzZVN0YXRzIGNvbnN0JiB0ZXN0Q2FzZVN0YXRzICkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdGVzdEdyb3VwRW5kZWQoIFRlc3RHcm91cFN0YXRzIGNvbnN0JiB0ZXN0R3JvdXBTdGF0cyApID0gMDsKQEAgLTU3MDksOCArNTEyMyw2IEBACiAKICAgICAgICAgdm9pZCBub01hdGNoaW5nVGVzdENhc2VzKHN0ZDo6c3RyaW5nIGNvbnN0Jikgb3ZlcnJpZGUge30KIAotICAgICAgICB2b2lkIHJlcG9ydEludmFsaWRBcmd1bWVudHMoc3RkOjpzdHJpbmcgY29uc3QmKSBvdmVycmlkZSB7fQotCiAgICAgICAgIHZvaWQgdGVzdFJ1blN0YXJ0aW5nKFRlc3RSdW5JbmZvIGNvbnN0JiBfdGVzdFJ1bkluZm8pIG92ZXJyaWRlIHsKICAgICAgICAgICAgIGN1cnJlbnRUZXN0UnVuSW5mbyA9IF90ZXN0UnVuSW5mbzsKICAgICAgICAgfQpAQCAtNjA0NSwxNiArNTQ1NywxNCBAQAogI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFKQogCiAjZGVmaW5lIENBVENIX1JFR0lTVEVSX1JFUE9SVEVSKCBuYW1lLCByZXBvcnRlclR5cGUgKSBcCi0gICAgQ0FUQ0hfSU5URVJOQUxfU1RBUlRfV0FSTklOR1NfU1VQUFJFU1NJT04gICAgICAgICBcCiAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUyAgICAgICAgICBcCiAgICAgbmFtZXNwYWNleyBDYXRjaDo6UmVwb3J0ZXJSZWdpc3RyYXI8cmVwb3J0ZXJUeXBlPiBjYXRjaF9pbnRlcm5hbF9SZWdpc3RyYXJGb3IjI3JlcG9ydGVyVHlwZSggbmFtZSApOyB9IFwKLSAgICBDQVRDSF9JTlRFUk5BTF9TVE9QX1dBUk5JTkdTX1NVUFBSRVNTSU9OCisgICAgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTCiAKICNkZWZpbmUgQ0FUQ0hfUkVHSVNURVJfTElTVEVORVIoIGxpc3RlbmVyVHlwZSApIFwKLSAgICBDQVRDSF9JTlRFUk5BTF9TVEFSVF9XQVJOSU5HU19TVVBQUkVTU0lPTiAgIFwKLSAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTICAgIFwKLSAgICBuYW1lc3BhY2V7IENhdGNoOjpMaXN0ZW5lclJlZ2lzdHJhcjxsaXN0ZW5lclR5cGU+IGNhdGNoX2ludGVybmFsX1JlZ2lzdHJhckZvciMjbGlzdGVuZXJUeXBlOyB9IFwKLSAgICBDQVRDSF9JTlRFUk5BTF9TVE9QX1dBUk5JTkdTX1NVUFBSRVNTSU9OCisgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgICBcCisgICAgIG5hbWVzcGFjZXsgQ2F0Y2g6Okxpc3RlbmVyUmVnaXN0cmFyPGxpc3RlbmVyVHlwZT4gY2F0Y2hfaW50ZXJuYWxfUmVnaXN0cmFyRm9yIyNsaXN0ZW5lclR5cGU7IH0gXAorICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTCiAjZWxzZSAvLyBDQVRDSF9DT05GSUdfRElTQUJMRQogCiAjZGVmaW5lIENBVENIX1JFR0lTVEVSX1JFUE9SVEVSKG5hbWUsIHJlcG9ydGVyVHlwZSkKQEAgLTYxMTYsOCArNTUyNiw2IEBACiAKICAgICAgICAgdm9pZCBub01hdGNoaW5nVGVzdENhc2VzKHN0ZDo6c3RyaW5nIGNvbnN0JiBzcGVjKSBvdmVycmlkZTsKIAotICAgICAgICB2b2lkIHJlcG9ydEludmFsaWRBcmd1bWVudHMoc3RkOjpzdHJpbmcgY29uc3QmYXJnKSBvdmVycmlkZTsKLQogICAgICAgICB2b2lkIGFzc2VydGlvblN0YXJ0aW5nKEFzc2VydGlvbkluZm8gY29uc3QmKSBvdmVycmlkZTsKIAogICAgICAgICBib29sIGFzc2VydGlvbkVuZGVkKEFzc2VydGlvblN0YXRzIGNvbnN0JiBfYXNzZXJ0aW9uU3RhdHMpIG92ZXJyaWRlOwpAQCAtNjEyNSwxMiArNTUzMyw4IEBACiAgICAgICAgIHZvaWQgc2VjdGlvblN0YXJ0aW5nKFNlY3Rpb25JbmZvIGNvbnN0JiBfc2VjdGlvbkluZm8pIG92ZXJyaWRlOwogICAgICAgICB2b2lkIHNlY3Rpb25FbmRlZChTZWN0aW9uU3RhdHMgY29uc3QmIF9zZWN0aW9uU3RhdHMpIG92ZXJyaWRlOwogCi0jaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORykKLSAgICAgICAgdm9pZCBiZW5jaG1hcmtQcmVwYXJpbmcoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUpIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGJlbmNobWFya1N0YXJ0aW5nKEJlbmNobWFya0luZm8gY29uc3QmIGluZm8pIG92ZXJyaWRlOwotICAgICAgICB2b2lkIGJlbmNobWFya0VuZGVkKEJlbmNobWFya1N0YXRzPD4gY29uc3QmIHN0YXRzKSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBiZW5jaG1hcmtGYWlsZWQoc3RkOjpzdHJpbmcgY29uc3QmIGVycm9yKSBvdmVycmlkZTsKLSNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORworICAgICAgICB2b2lkIGJlbmNobWFya0VuZGVkKEJlbmNobWFya1N0YXRzIGNvbnN0JiBzdGF0cykgb3ZlcnJpZGU7CiAKICAgICAgICAgdm9pZCB0ZXN0Q2FzZUVuZGVkKFRlc3RDYXNlU3RhdHMgY29uc3QmIF90ZXN0Q2FzZVN0YXRzKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCB0ZXN0R3JvdXBFbmRlZChUZXN0R3JvdXBTdGF0cyBjb25zdCYgX3Rlc3RHcm91cFN0YXRzKSBvdmVycmlkZTsKQEAgLTYxNzcsMTQgKzU1ODEsNiBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogbmFtZXNwYWNlIENhdGNoIHsKLSAgICBlbnVtIGNsYXNzIFhtbEZvcm1hdHRpbmcgewotICAgICAgICBOb25lID0gMHgwMCwKLSAgICAgICAgSW5kZW50ID0gMHgwMSwKLSAgICAgICAgTmV3bGluZSA9IDB4MDIsCi0gICAgfTsKLQotICAgIFhtbEZvcm1hdHRpbmcgb3BlcmF0b3IgfCAoWG1sRm9ybWF0dGluZyBsaHMsIFhtbEZvcm1hdHRpbmcgcmhzKTsKLSAgICBYbWxGb3JtYXR0aW5nIG9wZXJhdG9yICYgKFhtbEZvcm1hdHRpbmcgbGhzLCBYbWxGb3JtYXR0aW5nIHJocyk7CiAKICAgICBjbGFzcyBYbWxFbmNvZGUgewogICAgIHB1YmxpYzoKQEAgLTYyMDYsMTQgKzU2MDIsMTQgQEAKIAogICAgICAgICBjbGFzcyBTY29wZWRFbGVtZW50IHsKICAgICAgICAgcHVibGljOgotICAgICAgICAgICAgU2NvcGVkRWxlbWVudCggWG1sV3JpdGVyKiB3cml0ZXIsIFhtbEZvcm1hdHRpbmcgZm10ICk7CisgICAgICAgICAgICBTY29wZWRFbGVtZW50KCBYbWxXcml0ZXIqIHdyaXRlciApOwogCiAgICAgICAgICAgICBTY29wZWRFbGVtZW50KCBTY29wZWRFbGVtZW50JiYgb3RoZXIgKSBub2V4Y2VwdDsKICAgICAgICAgICAgIFNjb3BlZEVsZW1lbnQmIG9wZXJhdG9yPSggU2NvcGVkRWxlbWVudCYmIG90aGVyICkgbm9leGNlcHQ7CiAKICAgICAgICAgICAgIH5TY29wZWRFbGVtZW50KCk7CiAKLSAgICAgICAgICAgIFNjb3BlZEVsZW1lbnQmIHdyaXRlVGV4dCggc3RkOjpzdHJpbmcgY29uc3QmIHRleHQsIFhtbEZvcm1hdHRpbmcgZm10ID0gWG1sRm9ybWF0dGluZzo6TmV3bGluZSB8IFhtbEZvcm1hdHRpbmc6OkluZGVudCApOworICAgICAgICAgICAgU2NvcGVkRWxlbWVudCYgd3JpdGVUZXh0KCBzdGQ6OnN0cmluZyBjb25zdCYgdGV4dCwgYm9vbCBpbmRlbnQgPSB0cnVlICk7CiAKICAgICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgICAgICAgICBTY29wZWRFbGVtZW50JiB3cml0ZUF0dHJpYnV0ZSggc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUsIFQgY29uc3QmIGF0dHJpYnV0ZSApIHsKQEAgLTYyMjMsNyArNTYxOSw2IEBACiAKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIG11dGFibGUgWG1sV3JpdGVyKiBtX3dyaXRlciA9IG51bGxwdHI7Ci0gICAgICAgICAgICBYbWxGb3JtYXR0aW5nIG1fZm10OwogICAgICAgICB9OwogCiAgICAgICAgIFhtbFdyaXRlciggc3RkOjpvc3RyZWFtJiBvcyA9IENhdGNoOjpjb3V0KCkgKTsKQEAgLTYyMzIsMTEgKzU2MjcsMTEgQEAKICAgICAgICAgWG1sV3JpdGVyKCBYbWxXcml0ZXIgY29uc3QmICkgPSBkZWxldGU7CiAgICAgICAgIFhtbFdyaXRlciYgb3BlcmF0b3I9KCBYbWxXcml0ZXIgY29uc3QmICkgPSBkZWxldGU7CiAKLSAgICAgICAgWG1sV3JpdGVyJiBzdGFydEVsZW1lbnQoIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLCBYbWxGb3JtYXR0aW5nIGZtdCA9IFhtbEZvcm1hdHRpbmc6Ok5ld2xpbmUgfCBYbWxGb3JtYXR0aW5nOjpJbmRlbnQpOworICAgICAgICBYbWxXcml0ZXImIHN0YXJ0RWxlbWVudCggc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgKTsKIAotICAgICAgICBTY29wZWRFbGVtZW50IHNjb3BlZEVsZW1lbnQoIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLCBYbWxGb3JtYXR0aW5nIGZtdCA9IFhtbEZvcm1hdHRpbmc6Ok5ld2xpbmUgfCBYbWxGb3JtYXR0aW5nOjpJbmRlbnQpOworICAgICAgICBTY29wZWRFbGVtZW50IHNjb3BlZEVsZW1lbnQoIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lICk7CiAKLSAgICAgICAgWG1sV3JpdGVyJiBlbmRFbGVtZW50KFhtbEZvcm1hdHRpbmcgZm10ID0gWG1sRm9ybWF0dGluZzo6TmV3bGluZSB8IFhtbEZvcm1hdHRpbmc6OkluZGVudCk7CisgICAgICAgIFhtbFdyaXRlciYgZW5kRWxlbWVudCgpOwogCiAgICAgICAgIFhtbFdyaXRlciYgd3JpdGVBdHRyaWJ1dGUoIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLCBzdGQ6OnN0cmluZyBjb25zdCYgYXR0cmlidXRlICk7CiAKQEAgLTYyNDksOSArNTY0NCw5IEBACiAgICAgICAgICAgICByZXR1cm4gd3JpdGVBdHRyaWJ1dGUoIG5hbWUsIHJzcy5zdHIoKSApOwogICAgICAgICB9CiAKLSAgICAgICAgWG1sV3JpdGVyJiB3cml0ZVRleHQoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0ZXh0LCBYbWxGb3JtYXR0aW5nIGZtdCA9IFhtbEZvcm1hdHRpbmc6Ok5ld2xpbmUgfCBYbWxGb3JtYXR0aW5nOjpJbmRlbnQpOworICAgICAgICBYbWxXcml0ZXImIHdyaXRlVGV4dCggc3RkOjpzdHJpbmcgY29uc3QmIHRleHQsIGJvb2wgaW5kZW50ID0gdHJ1ZSApOwogCi0gICAgICAgIFhtbFdyaXRlciYgd3JpdGVDb21tZW50KHN0ZDo6c3RyaW5nIGNvbnN0JiB0ZXh0LCBYbWxGb3JtYXR0aW5nIGZtdCA9IFhtbEZvcm1hdHRpbmc6Ok5ld2xpbmUgfCBYbWxGb3JtYXR0aW5nOjpJbmRlbnQpOworICAgICAgICBYbWxXcml0ZXImIHdyaXRlQ29tbWVudCggc3RkOjpzdHJpbmcgY29uc3QmIHRleHQgKTsKIAogICAgICAgICB2b2lkIHdyaXRlU3R5bGVzaGVldFJlZiggc3RkOjpzdHJpbmcgY29uc3QmIHVybCApOwogCkBAIC02MjYxLDggKzU2NTYsNiBAQAogCiAgICAgcHJpdmF0ZToKIAotICAgICAgICB2b2lkIGFwcGx5Rm9ybWF0dGluZyhYbWxGb3JtYXR0aW5nIGZtdCk7Ci0KICAgICAgICAgdm9pZCB3cml0ZURlY2xhcmF0aW9uKCk7CiAKICAgICAgICAgdm9pZCBuZXdsaW5lSWZOZWNlc3NhcnkoKTsKQEAgLTYzNjMsMTMgKzU3NTYsNiBAQAogCiAgICAgICAgIHZvaWQgdGVzdFJ1bkVuZGVkKFRlc3RSdW5TdGF0cyBjb25zdCYgdGVzdFJ1blN0YXRzKSBvdmVycmlkZTsKIAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcpCi0gICAgICAgIHZvaWQgYmVuY2htYXJrUHJlcGFyaW5nKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lKSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBiZW5jaG1hcmtTdGFydGluZyhCZW5jaG1hcmtJbmZvIGNvbnN0Jikgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgYmVuY2htYXJrRW5kZWQoQmVuY2htYXJrU3RhdHM8PiBjb25zdCYpIG92ZXJyaWRlOwotICAgICAgICB2b2lkIGJlbmNobWFya0ZhaWxlZChzdGQ6OnN0cmluZyBjb25zdCYpIG92ZXJyaWRlOwotI2VuZGlmIC8vIENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HCi0KICAgICBwcml2YXRlOgogICAgICAgICBUaW1lciBtX3Rlc3RDYXNlVGltZXI7CiAgICAgICAgIFhtbFdyaXRlciBtX3htbDsKQEAgLTYzODMsMTAzMSArNTc2OSw2IEBACiAvLyBlbmQgY2F0Y2hfZXh0ZXJuYWxfaW50ZXJmYWNlcy5oCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcpCi0vLyBzdGFydCBjYXRjaF9iZW5jaG1hcmtpbmdfYWxsLmhwcAotCi0vLyBBIHByb3h5IGhlYWRlciB0aGF0IGluY2x1ZGVzIGFsbCBvZiB0aGUgYmVuY2htYXJraW5nIGhlYWRlcnMgdG8gYWxsb3cKLS8vIGNvbmNpc2UgaW5jbHVkZSBvZiB0aGUgYmVuY2htYXJraW5nIGZlYXR1cmVzLiBZb3Ugc2hvdWxkIHByZWZlciB0aGUKLS8vIGluZGl2aWR1YWwgaW5jbHVkZXMgaW4gc3RhbmRhcmQgdXNlLgotCi0vLyBzdGFydCBjYXRjaF9iZW5jaG1hcmsuaHBwCi0KLSAvLyBCZW5jaG1hcmsKLQotLy8gc3RhcnQgY2F0Y2hfY2hyb25vbWV0ZXIuaHBwCi0KLS8vIFVzZXItZmFjaW5nIGNocm9ub21ldGVyCi0KLQotLy8gc3RhcnQgY2F0Y2hfY2xvY2suaHBwCi0KLS8vIENsb2NrcwotCi0KLSNpbmNsdWRlIDxjaHJvbm8+Ci0jaW5jbHVkZSA8cmF0aW8+Ci0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgbmFtZXNwYWNlIEJlbmNobWFyayB7Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbG9jaz4KLSAgICAgICAgdXNpbmcgQ2xvY2tEdXJhdGlvbiA9IHR5cGVuYW1lIENsb2NrOjpkdXJhdGlvbjsKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsb2NrPgotICAgICAgICB1c2luZyBGbG9hdER1cmF0aW9uID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZSwgdHlwZW5hbWUgQ2xvY2s6OnBlcmlvZD47Ci0KLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsb2NrPgotICAgICAgICB1c2luZyBUaW1lUG9pbnQgPSB0eXBlbmFtZSBDbG9jazo6dGltZV9wb2ludDsKLQotICAgICAgICB1c2luZyBkZWZhdWx0X2Nsb2NrID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazsKLQotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xvY2s+Ci0gICAgICAgIHN0cnVjdCBub3cgewotICAgICAgICAgICAgVGltZVBvaW50PENsb2NrPiBvcGVyYXRvcigpKCkgY29uc3QgewotICAgICAgICAgICAgICAgIHJldHVybiBDbG9jazo6bm93KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdXNpbmcgZnBfc2Vjb25kcyA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGUsIHN0ZDo6cmF0aW88MT4+OwotICAgIH0gLy8gbmFtZXNwYWNlIEJlbmNobWFyawotfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKLQotLy8gZW5kIGNhdGNoX2Nsb2NrLmhwcAotLy8gc3RhcnQgY2F0Y2hfb3B0aW1pemVyLmhwcAotCi0gLy8gSGludGluZyB0aGUgb3B0aW1pemVyCi0KLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jICAgaW5jbHVkZSA8YXRvbWljPiAvLyBhdG9taWNfdGhyZWFkX2ZlbmNlCi0jZW5kaWYKLQotbmFtZXNwYWNlIENhdGNoIHsKLSAgICBuYW1lc3BhY2UgQmVuY2htYXJrIHsKLSNpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fY2xhbmdfXykKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgICAgIGlubGluZSB2b2lkIGtlZXBfbWVtb3J5KFQqIHApIHsKLSAgICAgICAgICAgIGFzbSB2b2xhdGlsZSgiIiA6IDogImciKHApIDogIm1lbW9yeSIpOwotICAgICAgICB9Ci0gICAgICAgIGlubGluZSB2b2lkIGtlZXBfbWVtb3J5KCkgewotICAgICAgICAgICAgYXNtIHZvbGF0aWxlKCIiIDogOiA6ICJtZW1vcnkiKTsKLSAgICAgICAgfQotCi0gICAgICAgIG5hbWVzcGFjZSBEZXRhaWwgewotICAgICAgICAgICAgaW5saW5lIHZvaWQgb3B0aW1pemVyX2JhcnJpZXIoKSB7IGtlZXBfbWVtb3J5KCk7IH0KLSAgICAgICAgfSAvLyBuYW1lc3BhY2UgRGV0YWlsCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotCi0jcHJhZ21hIG9wdGltaXplKCIiLCBvZmYpCi0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgICAgICBpbmxpbmUgdm9pZCBrZWVwX21lbW9yeShUKiBwKSB7Ci0gICAgICAgICAgICAvLyB0aGFua3MgQG1pbGxlbml1bWJ1ZwotICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciB2b2xhdGlsZSo+KHApID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciBjb25zdCB2b2xhdGlsZSo+KHApOwotICAgICAgICB9Ci0gICAgICAgIC8vIFRPRE8gZXF1aXZhbGVudCBrZWVwX21lbW9yeSgpCi0jcHJhZ21hIG9wdGltaXplKCIiLCBvbikKLQotICAgICAgICBuYW1lc3BhY2UgRGV0YWlsIHsKLSAgICAgICAgICAgIGlubGluZSB2b2lkIG9wdGltaXplcl9iYXJyaWVyKCkgewotICAgICAgICAgICAgICAgIHN0ZDo6YXRvbWljX3RocmVhZF9mZW5jZShzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSAvLyBuYW1lc3BhY2UgRGV0YWlsCi0KLSNlbmRpZgotCi0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgICAgICBpbmxpbmUgdm9pZCBkZW9wdGltaXplX3ZhbHVlKFQmJiB4KSB7Ci0gICAgICAgICAgICBrZWVwX21lbW9yeSgmeCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRm4sIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAgIGlubGluZSBhdXRvIGludm9rZV9kZW9wdGltaXplZChGbiYmIGZuLCBBcmdzJiYuLi4gYXJncykgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTx2b2lkLCBkZWNsdHlwZShmbihhcmdzLi4uKSk+Ojp2YWx1ZT46OnR5cGUgewotICAgICAgICAgICAgZGVvcHRpbWl6ZV92YWx1ZShzdGQ6OmZvcndhcmQ8Rm4+KGZuKSAoc3RkOjpmb3J3YXJkPEFyZ3MuLi4+KGFyZ3MuLi4pKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRm4sIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAgIGlubGluZSBhdXRvIGludm9rZV9kZW9wdGltaXplZChGbiYmIGZuLCBBcmdzJiYuLi4gYXJncykgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPHZvaWQsIGRlY2x0eXBlKGZuKGFyZ3MuLi4pKT46OnZhbHVlPjo6dHlwZSB7Ci0gICAgICAgICAgICBzdGQ6OmZvcndhcmQ8Rm4+KGZuKSAoc3RkOjpmb3J3YXJkPEFyZ3MuLi4+KGFyZ3MuLi4pKTsKLSAgICAgICAgfQotICAgIH0gLy8gbmFtZXNwYWNlIEJlbmNobWFyawotfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKLQotLy8gZW5kIGNhdGNoX29wdGltaXplci5ocHAKLS8vIHN0YXJ0IGNhdGNoX2NvbXBsZXRlX2ludm9rZS5ocHAKLQotLy8gSW52b2tlIHdpdGggYSBzcGVjaWFsIGNhc2UgZm9yIHZvaWQKLQotCi0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotbmFtZXNwYWNlIENhdGNoIHsKLSAgICBuYW1lc3BhY2UgQmVuY2htYXJrIHsKLSAgICAgICAgbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICAgICAgICAgIHN0cnVjdCBDb21wbGV0ZVR5cGUgeyB1c2luZyB0eXBlID0gVDsgfTsKLSAgICAgICAgICAgIHRlbXBsYXRlIDw+Ci0gICAgICAgICAgICBzdHJ1Y3QgQ29tcGxldGVUeXBlPHZvaWQ+IHsgc3RydWN0IHR5cGUge307IH07Ci0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgICAgICAgICAgdXNpbmcgQ29tcGxldGVUeXBlX3QgPSB0eXBlbmFtZSBDb21wbGV0ZVR5cGU8VD46OnR5cGU7Ci0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBSZXN1bHQ+Ci0gICAgICAgICAgICBzdHJ1Y3QgQ29tcGxldGVJbnZva2VyIHsKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICAgICAgICAgIHN0YXRpYyBSZXN1bHQgaW52b2tlKEZ1biYmIGZ1biwgQXJncyYmLi4uIGFyZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6Zm9yd2FyZDxGdW4+KGZ1bikoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgdGVtcGxhdGUgPD4KLSAgICAgICAgICAgIHN0cnVjdCBDb21wbGV0ZUludm9rZXI8dm9pZD4gewotICAgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW4sIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAgICAgICAgICAgc3RhdGljIENvbXBsZXRlVHlwZV90PHZvaWQ+IGludm9rZShGdW4mJiBmdW4sIEFyZ3MmJi4uLiBhcmdzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxGdW4+KGZ1bikoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2lnPgotICAgICAgICAgICAgdXNpbmcgUmVzdWx0T2ZfdCA9IHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPFNpZz46OnR5cGU7Ci0KLSAgICAgICAgICAgIC8vIGludm9rZSBhbmQgbm90IHJldHVybiB2b2lkIDooCi0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuLCB0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICAgICAgQ29tcGxldGVUeXBlX3Q8UmVzdWx0T2ZfdDxGdW4oQXJncy4uLik+PiBjb21wbGV0ZV9pbnZva2UoRnVuJiYgZnVuLCBBcmdzJiYuLi4gYXJncykgewotICAgICAgICAgICAgICAgIHJldHVybiBDb21wbGV0ZUludm9rZXI8UmVzdWx0T2ZfdDxGdW4oQXJncy4uLik+Pjo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW4+KGZ1biksIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGJlbmNobWFya0Vycm9yTXNnID0gImEgYmVuY2htYXJrIGZhaWxlZCB0byBydW4gc3VjY2Vzc2Z1bGx5IjsKLSAgICAgICAgfSAvLyBuYW1lc3BhY2UgRGV0YWlsCi0KLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bj4KLSAgICAgICAgRGV0YWlsOjpDb21wbGV0ZVR5cGVfdDxEZXRhaWw6OlJlc3VsdE9mX3Q8RnVuKCk+PiB1c2VyX2NvZGUoRnVuJiYgZnVuKSB7Ci0gICAgICAgICAgICBDQVRDSF9UUll7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIERldGFpbDo6Y29tcGxldGVfaW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW4+KGZ1bikpOwotICAgICAgICAgICAgfSBDQVRDSF9DQVRDSF9BTEx7Ci0gICAgICAgICAgICAgICAgZ2V0UmVzdWx0Q2FwdHVyZSgpLmJlbmNobWFya0ZhaWxlZCh0cmFuc2xhdGVBY3RpdmVFeGNlcHRpb24oKSk7Ci0gICAgICAgICAgICAgICAgQ0FUQ0hfUlVOVElNRV9FUlJPUihEZXRhaWw6OmJlbmNobWFya0Vycm9yTXNnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gLy8gbmFtZXNwYWNlIEJlbmNobWFyawotfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKLQotLy8gZW5kIGNhdGNoX2NvbXBsZXRlX2ludm9rZS5ocHAKLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgbmFtZXNwYWNlIEJlbmNobWFyayB7Ci0gICAgICAgIG5hbWVzcGFjZSBEZXRhaWwgewotICAgICAgICAgICAgc3RydWN0IENocm9ub21ldGVyQ29uY2VwdCB7Ci0gICAgICAgICAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCkgPSAwOwotICAgICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7Ci0gICAgICAgICAgICAgICAgdmlydHVhbCB+Q2hyb25vbWV0ZXJDb25jZXB0KCkgPSBkZWZhdWx0OwotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbG9jaz4KLSAgICAgICAgICAgIHN0cnVjdCBDaHJvbm9tZXRlck1vZGVsIGZpbmFsIDogcHVibGljIENocm9ub21ldGVyQ29uY2VwdCB7Ci0gICAgICAgICAgICAgICAgdm9pZCBzdGFydCgpIG92ZXJyaWRlIHsgc3RhcnRlZCA9IENsb2NrOjpub3coKTsgfQotICAgICAgICAgICAgICAgIHZvaWQgZmluaXNoKCkgb3ZlcnJpZGUgeyBmaW5pc2hlZCA9IENsb2NrOjpub3coKTsgfQotCi0gICAgICAgICAgICAgICAgQ2xvY2tEdXJhdGlvbjxDbG9jaz4gZWxhcHNlZCgpIGNvbnN0IHsgcmV0dXJuIGZpbmlzaGVkIC0gc3RhcnRlZDsgfQotCi0gICAgICAgICAgICAgICAgVGltZVBvaW50PENsb2NrPiBzdGFydGVkOwotICAgICAgICAgICAgICAgIFRpbWVQb2ludDxDbG9jaz4gZmluaXNoZWQ7Ci0gICAgICAgICAgICB9OwotICAgICAgICB9IC8vIG5hbWVzcGFjZSBEZXRhaWwKLQotICAgICAgICBzdHJ1Y3QgQ2hyb25vbWV0ZXIgewotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuPgotICAgICAgICAgICAgdm9pZCBtZWFzdXJlKEZ1biYmIGZ1bikgeyBtZWFzdXJlKHN0ZDo6Zm9yd2FyZDxGdW4+KGZ1biksIGlzX2NhbGxhYmxlPEZ1bihpbnQpPigpKTsgfQotCi0gICAgICAgICAgICBpbnQgcnVucygpIGNvbnN0IHsgcmV0dXJuIGs7IH0KLQotICAgICAgICAgICAgQ2hyb25vbWV0ZXIoRGV0YWlsOjpDaHJvbm9tZXRlckNvbmNlcHQmIG1ldGVyLCBpbnQgaykKLSAgICAgICAgICAgICAgICA6IGltcGwoJm1ldGVyKQotICAgICAgICAgICAgICAgICwgayhrKSB7fQotCi0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuPgotICAgICAgICAgICAgdm9pZCBtZWFzdXJlKEZ1biYmIGZ1biwgc3RkOjpmYWxzZV90eXBlKSB7Ci0gICAgICAgICAgICAgICAgbWVhc3VyZShbJmZ1bl0oaW50KSB7IHJldHVybiBmdW4oKTsgfSwgc3RkOjp0cnVlX3R5cGUoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW4+Ci0gICAgICAgICAgICB2b2lkIG1lYXN1cmUoRnVuJiYgZnVuLCBzdGQ6OnRydWVfdHlwZSkgewotICAgICAgICAgICAgICAgIERldGFpbDo6b3B0aW1pemVyX2JhcnJpZXIoKTsKLSAgICAgICAgICAgICAgICBpbXBsLT5zdGFydCgpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgazsgKytpKSBpbnZva2VfZGVvcHRpbWl6ZWQoZnVuLCBpKTsKLSAgICAgICAgICAgICAgICBpbXBsLT5maW5pc2goKTsKLSAgICAgICAgICAgICAgICBEZXRhaWw6Om9wdGltaXplcl9iYXJyaWVyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIERldGFpbDo6Q2hyb25vbWV0ZXJDb25jZXB0KiBpbXBsOwotICAgICAgICAgICAgaW50IGs7Ci0gICAgICAgIH07Ci0gICAgfSAvLyBuYW1lc3BhY2UgQmVuY2htYXJrCi19IC8vIG5hbWVzcGFjZSBDYXRjaAotCi0vLyBlbmQgY2F0Y2hfY2hyb25vbWV0ZXIuaHBwCi0vLyBzdGFydCBjYXRjaF9lbnZpcm9ubWVudC5ocHAKLQotLy8gRW52aXJvbm1lbnQgaW5mb3JtYXRpb24KLQotCi1uYW1lc3BhY2UgQ2F0Y2ggewotICAgIG5hbWVzcGFjZSBCZW5jaG1hcmsgewotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRHVyYXRpb24+Ci0gICAgICAgIHN0cnVjdCBFbnZpcm9ubWVudEVzdGltYXRlIHsKLSAgICAgICAgICAgIER1cmF0aW9uIG1lYW47Ci0gICAgICAgICAgICBPdXRsaWVyQ2xhc3NpZmljYXRpb24gb3V0bGllcnM7Ci0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBEdXJhdGlvbjI+Ci0gICAgICAgICAgICBvcGVyYXRvciBFbnZpcm9ubWVudEVzdGltYXRlPER1cmF0aW9uMj4oKSBjb25zdCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgbWVhbiwgb3V0bGllcnMgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsb2NrPgotICAgICAgICBzdHJ1Y3QgRW52aXJvbm1lbnQgewotICAgICAgICAgICAgdXNpbmcgY2xvY2tfdHlwZSA9IENsb2NrOwotICAgICAgICAgICAgRW52aXJvbm1lbnRFc3RpbWF0ZTxGbG9hdER1cmF0aW9uPENsb2NrPj4gY2xvY2tfcmVzb2x1dGlvbjsKLSAgICAgICAgICAgIEVudmlyb25tZW50RXN0aW1hdGU8RmxvYXREdXJhdGlvbjxDbG9jaz4+IGNsb2NrX2Nvc3Q7Ci0gICAgICAgIH07Ci0gICAgfSAvLyBuYW1lc3BhY2UgQmVuY2htYXJrCi19IC8vIG5hbWVzcGFjZSBDYXRjaAotCi0vLyBlbmQgY2F0Y2hfZW52aXJvbm1lbnQuaHBwCi0vLyBzdGFydCBjYXRjaF9leGVjdXRpb25fcGxhbi5ocHAKLQotIC8vIEV4ZWN1dGlvbiBwbGFuCi0KLQotLy8gc3RhcnQgY2F0Y2hfYmVuY2htYXJrX2Z1bmN0aW9uLmhwcAotCi0gLy8gRHVtYiBzdGQ6OmZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIGZvciBjb25zaXN0ZW50IGNhbGwgb3ZlcmhlYWQKLQotCi0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUgPG1lbW9yeT4KLQotbmFtZXNwYWNlIENhdGNoIHsKLSAgICBuYW1lc3BhY2UgQmVuY2htYXJrIHsKLSAgICAgICAgbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICAgICAgICAgIHVzaW5nIERlY2F5ID0gdHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZTsKLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotICAgICAgICAgICAgc3RydWN0IGlzX3JlbGF0ZWQKLSAgICAgICAgICAgICAgICA6IHN0ZDo6aXNfc2FtZTxEZWNheTxUPiwgRGVjYXk8VT4+IHt9OwotCi0gICAgICAgICAgICAvLy8gV2UgbmVlZCB0byByZWludmVudCBzdGQ6OmZ1bmN0aW9uIGJlY2F1c2UgZXZlcnkgcGllY2Ugb2YgY29kZSB0aGF0IG1pZ2h0IGFkZCBvdmVyaGVhZAotICAgICAgICAgICAgLy8vIGluIGEgbWVhc3VyZW1lbnQgY29udGV4dCBuZWVkcyB0byBoYXZlIGNvbnNpc3RlbnQgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIHNvIHRoYXQgd2UKLSAgICAgICAgICAgIC8vLyBjYW4gYWNjb3VudCBmb3IgaXQgaW4gdGhlIG1lYXN1cmVtZW50LgotICAgICAgICAgICAgLy8vIEltcGxlbWVudGF0aW9ucyBvZiBzdGQ6OmZ1bmN0aW9uIHdpdGggb3B0aW1pemF0aW9ucyB0aGF0IGFyZW4ndCBhbHdheXMgYXBwbGljYWJsZSwgbGlrZQotICAgICAgICAgICAgLy8vIHNtYWxsIGJ1ZmZlciBvcHRpbWl6YXRpb25zLCBhcmUgbm90IHVuY29tbW9uLgotICAgICAgICAgICAgLy8vIFRoaXMgaXMgZWZmZWN0aXZlbHkgYW4gaW1wbGVtZW50YXRpb24gb2Ygc3RkOjpmdW5jdGlvbiB3aXRob3V0IGFueSBzdWNoIG9wdGltaXphdGlvbnM7Ci0gICAgICAgICAgICAvLy8gaXQgbWF5IGJlIHNsb3csIGJ1dCBpdCBpcyBjb25zaXN0ZW50bHkgc2xvdy4KLSAgICAgICAgICAgIHN0cnVjdCBCZW5jaG1hcmtGdW5jdGlvbiB7Ci0gICAgICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgICAgIHN0cnVjdCBjYWxsYWJsZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKENocm9ub21ldGVyIG1ldGVyKSBjb25zdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgY2FsbGFibGUqIGNsb25lKCkgY29uc3QgPSAwOwotICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIH5jYWxsYWJsZSgpID0gZGVmYXVsdDsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW4+Ci0gICAgICAgICAgICAgICAgc3RydWN0IG1vZGVsIDogcHVibGljIGNhbGxhYmxlIHsKLSAgICAgICAgICAgICAgICAgICAgbW9kZWwoRnVuJiYgZnVuKSA6IGZ1bihzdGQ6Om1vdmUoZnVuKSkge30KLSAgICAgICAgICAgICAgICAgICAgbW9kZWwoRnVuIGNvbnN0JiBmdW4pIDogZnVuKGZ1bikge30KLQotICAgICAgICAgICAgICAgICAgICBtb2RlbDxGdW4+KiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG5ldyBtb2RlbDxGdW4+KCp0aGlzKTsgfQotCi0gICAgICAgICAgICAgICAgICAgIHZvaWQgY2FsbChDaHJvbm9tZXRlciBtZXRlcikgY29uc3Qgb3ZlcnJpZGUgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbChtZXRlciwgaXNfY2FsbGFibGU8RnVuKENocm9ub21ldGVyKT4oKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdm9pZCBjYWxsKENocm9ub21ldGVyIG1ldGVyLCBzdGQ6OnRydWVfdHlwZSkgY29uc3QgewotICAgICAgICAgICAgICAgICAgICAgICAgZnVuKG1ldGVyKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB2b2lkIGNhbGwoQ2hyb25vbWV0ZXIgbWV0ZXIsIHN0ZDo6ZmFsc2VfdHlwZSkgY29uc3QgewotICAgICAgICAgICAgICAgICAgICAgICAgbWV0ZXIubWVhc3VyZShmdW4pOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgRnVuIGZ1bjsKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgc3RydWN0IGRvX25vdGhpbmcgeyB2b2lkIG9wZXJhdG9yKCkoKSBjb25zdCB7fSB9OwotCi0gICAgICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgICAgICAgICAgICAgQmVuY2htYXJrRnVuY3Rpb24obW9kZWw8VD4qIGMpIDogZihjKSB7fQotCi0gICAgICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICAgICAgQmVuY2htYXJrRnVuY3Rpb24oKQotICAgICAgICAgICAgICAgICAgICA6IGYobmV3IG1vZGVsPGRvX25vdGhpbmc+eyB7fSB9KSB7fQotCi0gICAgICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1biwKLSAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IWlzX3JlbGF0ZWQ8RnVuLCBCZW5jaG1hcmtGdW5jdGlvbj46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4KLSAgICAgICAgICAgICAgICAgICAgQmVuY2htYXJrRnVuY3Rpb24oRnVuJiYgZnVuKQotICAgICAgICAgICAgICAgICAgICA6IGYobmV3IG1vZGVsPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8RnVuPjo6dHlwZT4oc3RkOjpmb3J3YXJkPEZ1bj4oZnVuKSkpIHt9Ci0KLSAgICAgICAgICAgICAgICBCZW5jaG1hcmtGdW5jdGlvbihCZW5jaG1hcmtGdW5jdGlvbiYmIHRoYXQpCi0gICAgICAgICAgICAgICAgICAgIDogZihzdGQ6Om1vdmUodGhhdC5mKSkge30KLQotICAgICAgICAgICAgICAgIEJlbmNobWFya0Z1bmN0aW9uKEJlbmNobWFya0Z1bmN0aW9uIGNvbnN0JiB0aGF0KQotICAgICAgICAgICAgICAgICAgICA6IGYodGhhdC5mLT5jbG9uZSgpKSB7fQotCi0gICAgICAgICAgICAgICAgQmVuY2htYXJrRnVuY3Rpb24mIG9wZXJhdG9yPShCZW5jaG1hcmtGdW5jdGlvbiYmIHRoYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgZiA9IHN0ZDo6bW92ZSh0aGF0LmYpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgQmVuY2htYXJrRnVuY3Rpb24mIG9wZXJhdG9yPShCZW5jaG1hcmtGdW5jdGlvbiBjb25zdCYgdGhhdCkgewotICAgICAgICAgICAgICAgICAgICBmLnJlc2V0KHRoYXQuZi0+Y2xvbmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yKCkoQ2hyb25vbWV0ZXIgbWV0ZXIpIGNvbnN0IHsgZi0+Y2FsbChtZXRlcik7IH0KLQotICAgICAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y2FsbGFibGU+IGY7Ci0gICAgICAgICAgICB9OwotICAgICAgICB9IC8vIG5hbWVzcGFjZSBEZXRhaWwKLSAgICB9IC8vIG5hbWVzcGFjZSBCZW5jaG1hcmsKLX0gLy8gbmFtZXNwYWNlIENhdGNoCi0KLS8vIGVuZCBjYXRjaF9iZW5jaG1hcmtfZnVuY3Rpb24uaHBwCi0vLyBzdGFydCBjYXRjaF9yZXBlYXQuaHBwCi0KLS8vIHJlcGVhdCBhbGdvcml0aG0KLQotCi0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotbmFtZXNwYWNlIENhdGNoIHsKLSAgICBuYW1lc3BhY2UgQmVuY2htYXJrIHsKLSAgICAgICAgbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuPgotICAgICAgICAgICAgc3RydWN0IHJlcGVhdGVyIHsKLSAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yKCkoaW50IGspIGNvbnN0IHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEZ1biBmdW47Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bj4KLSAgICAgICAgICAgIHJlcGVhdGVyPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8RnVuPjo6dHlwZT4gcmVwZWF0KEZ1biYmIGZ1bikgewotICAgICAgICAgICAgICAgIHJldHVybiB7IHN0ZDo6Zm9yd2FyZDxGdW4+KGZ1bikgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSAvLyBuYW1lc3BhY2UgRGV0YWlsCi0gICAgfSAvLyBuYW1lc3BhY2UgQmVuY2htYXJrCi19IC8vIG5hbWVzcGFjZSBDYXRjaAotCi0vLyBlbmQgY2F0Y2hfcmVwZWF0LmhwcAotLy8gc3RhcnQgY2F0Y2hfcnVuX2Zvcl9hdF9sZWFzdC5ocHAKLQotLy8gUnVuIGEgZnVuY3Rpb24gZm9yIGEgbWluaW11bSBhbW91bnQgb2YgdGltZQotCi0KLS8vIHN0YXJ0IGNhdGNoX21lYXN1cmUuaHBwCi0KLS8vIE1lYXN1cmUKLQotCi0vLyBzdGFydCBjYXRjaF90aW1pbmcuaHBwCi0KLS8vIFRpbWluZwotCi0KLSNpbmNsdWRlIDx0dXBsZT4KLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLQotbmFtZXNwYWNlIENhdGNoIHsKLSAgICBuYW1lc3BhY2UgQmVuY2htYXJrIHsKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIER1cmF0aW9uLCB0eXBlbmFtZSBSZXN1bHQ+Ci0gICAgICAgIHN0cnVjdCBUaW1pbmcgewotICAgICAgICAgICAgRHVyYXRpb24gZWxhcHNlZDsKLSAgICAgICAgICAgIFJlc3VsdCByZXN1bHQ7Ci0gICAgICAgICAgICBpbnQgaXRlcmF0aW9uczsKLSAgICAgICAgfTsKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsb2NrLCB0eXBlbmFtZSBTaWc+Ci0gICAgICAgIHVzaW5nIFRpbWluZ09mID0gVGltaW5nPENsb2NrRHVyYXRpb248Q2xvY2s+LCBEZXRhaWw6OkNvbXBsZXRlVHlwZV90PERldGFpbDo6UmVzdWx0T2ZfdDxTaWc+Pj47Ci0gICAgfSAvLyBuYW1lc3BhY2UgQmVuY2htYXJrCi19IC8vIG5hbWVzcGFjZSBDYXRjaAotCi0vLyBlbmQgY2F0Y2hfdGltaW5nLmhwcAotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgbmFtZXNwYWNlIEJlbmNobWFyayB7Ci0gICAgICAgIG5hbWVzcGFjZSBEZXRhaWwgewotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsb2NrLCB0eXBlbmFtZSBGdW4sIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgICAgICAgICBUaW1pbmdPZjxDbG9jaywgRnVuKEFyZ3MuLi4pPiBtZWFzdXJlKEZ1biYmIGZ1biwgQXJncyYmLi4uIGFyZ3MpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHN0YXJ0ID0gQ2xvY2s6Om5vdygpOwotICAgICAgICAgICAgICAgIGF1dG8mJiByID0gRGV0YWlsOjpjb21wbGV0ZV9pbnZva2UoZnVuLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotICAgICAgICAgICAgICAgIGF1dG8gZW5kID0gQ2xvY2s6Om5vdygpOwotICAgICAgICAgICAgICAgIGF1dG8gZGVsdGEgPSBlbmQgLSBzdGFydDsKLSAgICAgICAgICAgICAgICByZXR1cm4geyBkZWx0YSwgc3RkOjpmb3J3YXJkPGRlY2x0eXBlKHIpPihyKSwgMSB9OwotICAgICAgICAgICAgfQotICAgICAgICB9IC8vIG5hbWVzcGFjZSBEZXRhaWwKLSAgICB9IC8vIG5hbWVzcGFjZSBCZW5jaG1hcmsKLX0gLy8gbmFtZXNwYWNlIENhdGNoCi0KLS8vIGVuZCBjYXRjaF9tZWFzdXJlLmhwcAotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgbmFtZXNwYWNlIEJlbmNobWFyayB7Ci0gICAgICAgIG5hbWVzcGFjZSBEZXRhaWwgewotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsb2NrLCB0eXBlbmFtZSBGdW4+Ci0gICAgICAgICAgICBUaW1pbmdPZjxDbG9jaywgRnVuKGludCk+IG1lYXN1cmVfb25lKEZ1biYmIGZ1biwgaW50IGl0ZXJzLCBzdGQ6OmZhbHNlX3R5cGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRGV0YWlsOjptZWFzdXJlPENsb2NrPihmdW4sIGl0ZXJzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbG9jaywgdHlwZW5hbWUgRnVuPgotICAgICAgICAgICAgVGltaW5nT2Y8Q2xvY2ssIEZ1bihDaHJvbm9tZXRlcik+IG1lYXN1cmVfb25lKEZ1biYmIGZ1biwgaW50IGl0ZXJzLCBzdGQ6OnRydWVfdHlwZSkgewotICAgICAgICAgICAgICAgIERldGFpbDo6Q2hyb25vbWV0ZXJNb2RlbDxDbG9jaz4gbWV0ZXI7Ci0gICAgICAgICAgICAgICAgYXV0byYmIHJlc3VsdCA9IERldGFpbDo6Y29tcGxldGVfaW52b2tlKGZ1biwgQ2hyb25vbWV0ZXIobWV0ZXIsIGl0ZXJzKSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4geyBtZXRlci5lbGFwc2VkKCksIHN0ZDo6bW92ZShyZXN1bHQpLCBpdGVycyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xvY2ssIHR5cGVuYW1lIEZ1bj4KLSAgICAgICAgICAgIHVzaW5nIHJ1bl9mb3JfYXRfbGVhc3RfYXJndW1lbnRfdCA9IHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8aXNfY2FsbGFibGU8RnVuKENocm9ub21ldGVyKT46OnZhbHVlLCBDaHJvbm9tZXRlciwgaW50Pjo6dHlwZTsKLQotICAgICAgICAgICAgc3RydWN0IG9wdGltaXplZF9hd2F5X2Vycm9yIDogc3RkOjpleGNlcHRpb24gewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCBub2V4Y2VwdCBvdmVycmlkZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAiY291bGQgbm90IG1lYXN1cmUgYmVuY2htYXJrLCBtYXliZSBpdCB3YXMgb3B0aW1pemVkIGF3YXkiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbG9jaywgdHlwZW5hbWUgRnVuPgotICAgICAgICAgICAgVGltaW5nT2Y8Q2xvY2ssIEZ1bihydW5fZm9yX2F0X2xlYXN0X2FyZ3VtZW50X3Q8Q2xvY2ssIEZ1bj4pPiBydW5fZm9yX2F0X2xlYXN0KENsb2NrRHVyYXRpb248Q2xvY2s+IGhvd19sb25nLCBpbnQgc2VlZCwgRnVuJiYgZnVuKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpdGVycyA9IHNlZWQ7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGl0ZXJzIDwgKDEgPDwgMzApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8mJiBUaW1pbmcgPSBtZWFzdXJlX29uZTxDbG9jaz4oZnVuLCBpdGVycywgaXNfY2FsbGFibGU8RnVuKENocm9ub21ldGVyKT4oKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKFRpbWluZy5lbGFwc2VkID49IGhvd19sb25nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBUaW1pbmcuZWxhcHNlZCwgc3RkOjptb3ZlKFRpbWluZy5yZXN1bHQpLCBpdGVycyB9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGl0ZXJzICo9IDI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRocm93IG9wdGltaXplZF9hd2F5X2Vycm9ye307Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gLy8gbmFtZXNwYWNlIERldGFpbAotICAgIH0gLy8gbmFtZXNwYWNlIEJlbmNobWFyawotfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKLQotLy8gZW5kIGNhdGNoX3J1bl9mb3JfYXRfbGVhc3QuaHBwCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi1uYW1lc3BhY2UgQ2F0Y2ggewotICAgIG5hbWVzcGFjZSBCZW5jaG1hcmsgewotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRHVyYXRpb24+Ci0gICAgICAgIHN0cnVjdCBFeGVjdXRpb25QbGFuIHsKLSAgICAgICAgICAgIGludCBpdGVyYXRpb25zX3Blcl9zYW1wbGU7Ci0gICAgICAgICAgICBEdXJhdGlvbiBlc3RpbWF0ZWRfZHVyYXRpb247Ci0gICAgICAgICAgICBEZXRhaWw6OkJlbmNobWFya0Z1bmN0aW9uIGJlbmNobWFyazsKLSAgICAgICAgICAgIER1cmF0aW9uIHdhcm11cF90aW1lOwotICAgICAgICAgICAgaW50IHdhcm11cF9pdGVyYXRpb25zOwotCi0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRHVyYXRpb24yPgotICAgICAgICAgICAgb3BlcmF0b3IgRXhlY3V0aW9uUGxhbjxEdXJhdGlvbjI+KCkgY29uc3QgewotICAgICAgICAgICAgICAgIHJldHVybiB7IGl0ZXJhdGlvbnNfcGVyX3NhbXBsZSwgZXN0aW1hdGVkX2R1cmF0aW9uLCBiZW5jaG1hcmssIHdhcm11cF90aW1lLCB3YXJtdXBfaXRlcmF0aW9ucyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xvY2s+Ci0gICAgICAgICAgICBzdGQ6OnZlY3RvcjxGbG9hdER1cmF0aW9uPENsb2NrPj4gcnVuKGNvbnN0IElDb25maWcgJmNmZywgRW52aXJvbm1lbnQ8RmxvYXREdXJhdGlvbjxDbG9jaz4+IGVudikgY29uc3QgewotICAgICAgICAgICAgICAgIC8vIHdhcm11cCBhIGJpdAotICAgICAgICAgICAgICAgIERldGFpbDo6cnVuX2Zvcl9hdF9sZWFzdDxDbG9jaz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8Q2xvY2tEdXJhdGlvbjxDbG9jaz4+KHdhcm11cF90aW1lKSwgd2FybXVwX2l0ZXJhdGlvbnMsIERldGFpbDo6cmVwZWF0KG5vdzxDbG9jaz57fSkpOwotCi0gICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8RmxvYXREdXJhdGlvbjxDbG9jaz4+IHRpbWVzOwotICAgICAgICAgICAgICAgIHRpbWVzLnJlc2VydmUoY2ZnLmJlbmNobWFya1NhbXBsZXMoKSk7Ci0gICAgICAgICAgICAgICAgc3RkOjpnZW5lcmF0ZV9uKHN0ZDo6YmFja19pbnNlcnRlcih0aW1lcyksIGNmZy5iZW5jaG1hcmtTYW1wbGVzKCksIFt0aGlzLCBlbnZdIHsKLSAgICAgICAgICAgICAgICAgICAgRGV0YWlsOjpDaHJvbm9tZXRlck1vZGVsPENsb2NrPiBtb2RlbDsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy0+YmVuY2htYXJrKENocm9ub21ldGVyKG1vZGVsLCBpdGVyYXRpb25zX3Blcl9zYW1wbGUpKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBzYW1wbGVfdGltZSA9IG1vZGVsLmVsYXBzZWQoKSAtIGVudi5jbG9ja19jb3N0Lm1lYW47Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzYW1wbGVfdGltZSA8IEZsb2F0RHVyYXRpb248Q2xvY2s+Ojp6ZXJvKCkpIHNhbXBsZV90aW1lID0gRmxvYXREdXJhdGlvbjxDbG9jaz46Onplcm8oKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNhbXBsZV90aW1lIC8gaXRlcmF0aW9uc19wZXJfc2FtcGxlOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHJldHVybiB0aW1lczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICB9IC8vIG5hbWVzcGFjZSBCZW5jaG1hcmsKLX0gLy8gbmFtZXNwYWNlIENhdGNoCi0KLS8vIGVuZCBjYXRjaF9leGVjdXRpb25fcGxhbi5ocHAKLS8vIHN0YXJ0IGNhdGNoX2VzdGltYXRlX2Nsb2NrLmhwcAotCi0gLy8gRW52aXJvbm1lbnQgbWVhc3VyZW1lbnQKLQotCi0vLyBzdGFydCBjYXRjaF9zdGF0cy5ocHAKLQotLy8gU3RhdGlzdGljYWwgYW5hbHlzaXMgdG9vbHMKLQotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPGl0ZXJhdG9yPgotI2luY2x1ZGUgPG51bWVyaWM+Ci0jaW5jbHVkZSA8dHVwbGU+Ci0jaW5jbHVkZSA8Y21hdGg+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNsdWRlIDxjc3RkZGVmPgotI2luY2x1ZGUgPHJhbmRvbT4KLQotbmFtZXNwYWNlIENhdGNoIHsKLSAgICBuYW1lc3BhY2UgQmVuY2htYXJrIHsKLSAgICAgICAgbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgICAgICAgICB1c2luZyBzYW1wbGUgPSBzdGQ6OnZlY3Rvcjxkb3VibGU+OwotCi0gICAgICAgICAgICBkb3VibGUgd2VpZ2h0ZWRfYXZlcmFnZV9xdWFudGlsZShpbnQgaywgaW50IHEsIHN0ZDo6dmVjdG9yPGRvdWJsZT46Oml0ZXJhdG9yIGZpcnN0LCBzdGQ6OnZlY3Rvcjxkb3VibGU+OjppdGVyYXRvciBsYXN0KTsKLQotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yPgotICAgICAgICAgICAgT3V0bGllckNsYXNzaWZpY2F0aW9uIGNsYXNzaWZ5X291dGxpZXJzKEl0ZXJhdG9yIGZpcnN0LCBJdGVyYXRvciBsYXN0KSB7Ci0gICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiBjb3B5KGZpcnN0LCBsYXN0KTsKLQotICAgICAgICAgICAgICAgIGF1dG8gcTEgPSB3ZWlnaHRlZF9hdmVyYWdlX3F1YW50aWxlKDEsIDQsIGNvcHkuYmVnaW4oKSwgY29weS5lbmQoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byBxMyA9IHdlaWdodGVkX2F2ZXJhZ2VfcXVhbnRpbGUoMywgNCwgY29weS5iZWdpbigpLCBjb3B5LmVuZCgpKTsKLSAgICAgICAgICAgICAgICBhdXRvIGlxciA9IHEzIC0gcTE7Ci0gICAgICAgICAgICAgICAgYXV0byBsb3MgPSBxMSAtIChpcXIgKiAzLik7Ci0gICAgICAgICAgICAgICAgYXV0byBsb20gPSBxMSAtIChpcXIgKiAxLjUpOwotICAgICAgICAgICAgICAgIGF1dG8gaGltID0gcTMgKyAoaXFyICogMS41KTsKLSAgICAgICAgICAgICAgICBhdXRvIGhpcyA9IHEzICsgKGlxciAqIDMuKTsKLQotICAgICAgICAgICAgICAgIE91dGxpZXJDbGFzc2lmaWNhdGlvbiBvOwotICAgICAgICAgICAgICAgIGZvciAoOyBmaXJzdCAhPSBsYXN0OyArK2ZpcnN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8mJiB0ID0gKmZpcnN0OwotICAgICAgICAgICAgICAgICAgICBpZiAodCA8IGxvcykgKytvLmxvd19zZXZlcmU7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHQgPCBsb20pICsrby5sb3dfbWlsZDsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodCA+IGhpcykgKytvLmhpZ2hfc2V2ZXJlOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0ID4gaGltKSArK28uaGlnaF9taWxkOwotICAgICAgICAgICAgICAgICAgICArK28uc2FtcGxlc19zZWVuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gbzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yPgotICAgICAgICAgICAgZG91YmxlIG1lYW4oSXRlcmF0b3IgZmlyc3QsIEl0ZXJhdG9yIGxhc3QpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNvdW50ID0gbGFzdCAtIGZpcnN0OwotICAgICAgICAgICAgICAgIGRvdWJsZSBzdW0gPSBzdGQ6OmFjY3VtdWxhdGUoZmlyc3QsIGxhc3QsIDAuKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3VtIC8gY291bnQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVUm5nLCB0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgRXN0aW1hdG9yPgotICAgICAgICAgICAgc2FtcGxlIHJlc2FtcGxlKFVSbmcmIHJuZywgaW50IHJlc2FtcGxlcywgSXRlcmF0b3IgZmlyc3QsIEl0ZXJhdG9yIGxhc3QsIEVzdGltYXRvciYgZXN0aW1hdG9yKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBuID0gbGFzdCAtIGZpcnN0OwotICAgICAgICAgICAgICAgIHN0ZDo6dW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPGRlY2x0eXBlKG4pPiBkaXN0KDAsIG4gLSAxKTsKLQotICAgICAgICAgICAgICAgIHNhbXBsZSBvdXQ7Ci0gICAgICAgICAgICAgICAgb3V0LnJlc2VydmUocmVzYW1wbGVzKTsKLSAgICAgICAgICAgICAgICBzdGQ6OmdlbmVyYXRlX24oc3RkOjpiYWNrX2luc2VydGVyKG91dCksIHJlc2FtcGxlcywgW24sIGZpcnN0LCAmZXN0aW1hdG9yLCAmZGlzdCwgJnJuZ10gewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjxkb3VibGU+IHJlc2FtcGxlZDsKLSAgICAgICAgICAgICAgICAgICAgcmVzYW1wbGVkLnJlc2VydmUobik7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6Z2VuZXJhdGVfbihzdGQ6OmJhY2tfaW5zZXJ0ZXIocmVzYW1wbGVkKSwgbiwgW2ZpcnN0LCAmZGlzdCwgJnJuZ10geyByZXR1cm4gZmlyc3RbZGlzdChybmcpXTsgfSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlc3RpbWF0b3IocmVzYW1wbGVkLmJlZ2luKCksIHJlc2FtcGxlZC5lbmQoKSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgc3RkOjpzb3J0KG91dC5iZWdpbigpLCBvdXQuZW5kKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBFc3RpbWF0b3IsIHR5cGVuYW1lIEl0ZXJhdG9yPgotICAgICAgICAgICAgc2FtcGxlIGphY2trbmlmZShFc3RpbWF0b3ImJiBlc3RpbWF0b3IsIEl0ZXJhdG9yIGZpcnN0LCBJdGVyYXRvciBsYXN0KSB7Ci0gICAgICAgICAgICAgICAgYXV0byBuID0gbGFzdCAtIGZpcnN0OwotICAgICAgICAgICAgICAgIGF1dG8gc2Vjb25kID0gc3RkOjpuZXh0KGZpcnN0KTsKLSAgICAgICAgICAgICAgICBzYW1wbGUgcmVzdWx0czsKLSAgICAgICAgICAgICAgICByZXN1bHRzLnJlc2VydmUobik7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSBmaXJzdDsgaXQgIT0gbGFzdDsgKytpdCkgewotICAgICAgICAgICAgICAgICAgICBzdGQ6Oml0ZXJfc3dhcChpdCwgZmlyc3QpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2hfYmFjayhlc3RpbWF0b3Ioc2Vjb25kLCBsYXN0KSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlubGluZSBkb3VibGUgbm9ybWFsX2NkZihkb3VibGUgeCkgewotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OmVyZmMoLXggLyBzdGQ6OnNxcnQoMi4wKSkgLyAyLjA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRvdWJsZSBlcmZjX2ludihkb3VibGUgeCk7Ci0KLSAgICAgICAgICAgIGRvdWJsZSBub3JtYWxfcXVhbnRpbGUoZG91YmxlIHApOwotCi0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIEVzdGltYXRvcj4KLSAgICAgICAgICAgIEVzdGltYXRlPGRvdWJsZT4gYm9vdHN0cmFwKGRvdWJsZSBjb25maWRlbmNlX2xldmVsLCBJdGVyYXRvciBmaXJzdCwgSXRlcmF0b3IgbGFzdCwgc2FtcGxlIGNvbnN0JiByZXNhbXBsZSwgRXN0aW1hdG9yJiYgZXN0aW1hdG9yKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBuX3NhbXBsZXMgPSBsYXN0IC0gZmlyc3Q7Ci0KLSAgICAgICAgICAgICAgICBkb3VibGUgcG9pbnQgPSBlc3RpbWF0b3IoZmlyc3QsIGxhc3QpOwotICAgICAgICAgICAgICAgIC8vIERlZ2VuZXJhdGUgY2FzZSB3aXRoIGEgc2luZ2xlIHNhbXBsZQotICAgICAgICAgICAgICAgIGlmIChuX3NhbXBsZXMgPT0gMSkgcmV0dXJuIHsgcG9pbnQsIHBvaW50LCBwb2ludCwgY29uZmlkZW5jZV9sZXZlbCB9OwotCi0gICAgICAgICAgICAgICAgc2FtcGxlIGphY2sgPSBqYWNra25pZmUoZXN0aW1hdG9yLCBmaXJzdCwgbGFzdCk7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGphY2tfbWVhbiA9IG1lYW4oamFjay5iZWdpbigpLCBqYWNrLmVuZCgpKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgc3VtX3NxdWFyZXMsIHN1bV9jdWJlczsKLSAgICAgICAgICAgICAgICBzdGQ6OnRpZShzdW1fc3F1YXJlcywgc3VtX2N1YmVzKSA9IHN0ZDo6YWNjdW11bGF0ZShqYWNrLmJlZ2luKCksIGphY2suZW5kKCksIHN0ZDo6bWFrZV9wYWlyKDAuLCAwLiksIFtqYWNrX21lYW5dKHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4gc3FjYiwgZG91YmxlIHgpIC0+IHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4gewotICAgICAgICAgICAgICAgICAgICBhdXRvIGQgPSBqYWNrX21lYW4gLSB4OwotICAgICAgICAgICAgICAgICAgICBhdXRvIGQyID0gZCAqIGQ7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZDMgPSBkMiAqIGQ7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHNxY2IuZmlyc3QgKyBkMiwgc3FjYi5zZWNvbmQgKyBkMyB9OwotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgZG91YmxlIGFjY2VsID0gc3VtX2N1YmVzIC8gKDYgKiBzdGQ6OnBvdyhzdW1fc3F1YXJlcywgMS41KSk7Ci0gICAgICAgICAgICAgICAgaW50IG4gPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc2FtcGxlLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHByb2JfbiA9IHN0ZDo6Y291bnRfaWYocmVzYW1wbGUuYmVnaW4oKSwgcmVzYW1wbGUuZW5kKCksIFtwb2ludF0oZG91YmxlIHgpIHsgcmV0dXJuIHggPCBwb2ludDsgfSkgLyAoZG91YmxlKW47Ci0gICAgICAgICAgICAgICAgLy8gZGVnZW5lcmF0ZSBjYXNlIHdpdGggdW5pZm9ybSBzYW1wbGVzCi0gICAgICAgICAgICAgICAgaWYgKHByb2JfbiA9PSAwKSByZXR1cm4geyBwb2ludCwgcG9pbnQsIHBvaW50LCBjb25maWRlbmNlX2xldmVsIH07Ci0KLSAgICAgICAgICAgICAgICBkb3VibGUgYmlhcyA9IG5vcm1hbF9xdWFudGlsZShwcm9iX24pOwotICAgICAgICAgICAgICAgIGRvdWJsZSB6MSA9IG5vcm1hbF9xdWFudGlsZSgoMS4gLSBjb25maWRlbmNlX2xldmVsKSAvIDIuKTsKLQotICAgICAgICAgICAgICAgIGF1dG8gY3VtbiA9IFtuXShkb3VibGUgeCkgLT4gaW50IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bHJvdW5kKG5vcm1hbF9jZGYoeCkgKiBuKTsgfTsKLSAgICAgICAgICAgICAgICBhdXRvIGEgPSBbYmlhcywgYWNjZWxdKGRvdWJsZSBiKSB7IHJldHVybiBiaWFzICsgYiAvICgxLiAtIGFjY2VsICogYik7IH07Ci0gICAgICAgICAgICAgICAgZG91YmxlIGIxID0gYmlhcyArIHoxOwotICAgICAgICAgICAgICAgIGRvdWJsZSBiMiA9IGJpYXMgLSB6MTsKLSAgICAgICAgICAgICAgICBkb3VibGUgYTEgPSBhKGIxKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgYTIgPSBhKGIyKTsKLSAgICAgICAgICAgICAgICBhdXRvIGxvID0gc3RkOjptYXgoY3VtbihhMSksIDApOwotICAgICAgICAgICAgICAgIGF1dG8gaGkgPSBzdGQ6Om1pbihjdW1uKGEyKSwgbiAtIDEpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgcG9pbnQsIHJlc2FtcGxlW2xvXSwgcmVzYW1wbGVbaGldLCBjb25maWRlbmNlX2xldmVsIH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRvdWJsZSBvdXRsaWVyX3ZhcmlhbmNlKEVzdGltYXRlPGRvdWJsZT4gbWVhbiwgRXN0aW1hdGU8ZG91YmxlPiBzdGRkZXYsIGludCBuKTsKLQotICAgICAgICAgICAgc3RydWN0IGJvb3RzdHJhcF9hbmFseXNpcyB7Ci0gICAgICAgICAgICAgICAgRXN0aW1hdGU8ZG91YmxlPiBtZWFuOwotICAgICAgICAgICAgICAgIEVzdGltYXRlPGRvdWJsZT4gc3RhbmRhcmRfZGV2aWF0aW9uOwotICAgICAgICAgICAgICAgIGRvdWJsZSBvdXRsaWVyX3ZhcmlhbmNlOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgYm9vdHN0cmFwX2FuYWx5c2lzIGFuYWx5c2Vfc2FtcGxlcyhkb3VibGUgY29uZmlkZW5jZV9sZXZlbCwgaW50IG5fcmVzYW1wbGVzLCBzdGQ6OnZlY3Rvcjxkb3VibGU+OjppdGVyYXRvciBmaXJzdCwgc3RkOjp2ZWN0b3I8ZG91YmxlPjo6aXRlcmF0b3IgbGFzdCk7Ci0gICAgICAgIH0gLy8gbmFtZXNwYWNlIERldGFpbAotICAgIH0gLy8gbmFtZXNwYWNlIEJlbmNobWFyawotfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKLQotLy8gZW5kIGNhdGNoX3N0YXRzLmhwcAotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KLSNpbmNsdWRlIDx0dXBsZT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8Y21hdGg+Ci0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgbmFtZXNwYWNlIEJlbmNobWFyayB7Ci0gICAgICAgIG5hbWVzcGFjZSBEZXRhaWwgewotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsb2NrPgotICAgICAgICAgICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiByZXNvbHV0aW9uKGludCBrKSB7Ci0gICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VGltZVBvaW50PENsb2NrPj4gdGltZXM7Ci0gICAgICAgICAgICAgICAgdGltZXMucmVzZXJ2ZShrICsgMSk7Ci0gICAgICAgICAgICAgICAgc3RkOjpnZW5lcmF0ZV9uKHN0ZDo6YmFja19pbnNlcnRlcih0aW1lcyksIGsgKyAxLCBub3c8Q2xvY2s+e30pOwotCi0gICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiBkZWx0YXM7Ci0gICAgICAgICAgICAgICAgZGVsdGFzLnJlc2VydmUoayk7Ci0gICAgICAgICAgICAgICAgc3RkOjp0cmFuc2Zvcm0oc3RkOjpuZXh0KHRpbWVzLmJlZ2luKCkpLCB0aW1lcy5lbmQoKSwgdGltZXMuYmVnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpiYWNrX2luc2VydGVyKGRlbHRhcyksCi0gICAgICAgICAgICAgICAgICAgIFtdKFRpbWVQb2ludDxDbG9jaz4gYSwgVGltZVBvaW50PENsb2NrPiBiKSB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KChhIC0gYikuY291bnQoKSk7IH0pOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGRlbHRhczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgYXV0byB3YXJtdXBfaXRlcmF0aW9ucyA9IDEwMDAwOwotICAgICAgICAgICAgY29uc3QgYXV0byB3YXJtdXBfdGltZSA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTAwKTsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8gbWluaW11bV90aWNrcyA9IDEwMDA7Ci0gICAgICAgICAgICBjb25zdCBhdXRvIHdhcm11cF9zZWVkID0gMTAwMDA7Ci0gICAgICAgICAgICBjb25zdCBhdXRvIGNsb2NrX3Jlc29sdXRpb25fZXN0aW1hdGlvbl90aW1lID0gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyg1MDApOwotICAgICAgICAgICAgY29uc3QgYXV0byBjbG9ja19jb3N0X2VzdGltYXRpb25fdGltZV9saW1pdCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDEpOwotICAgICAgICAgICAgY29uc3QgYXV0byBjbG9ja19jb3N0X2VzdGltYXRpb25fdGlja19saW1pdCA9IDEwMDAwMDsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8gY2xvY2tfY29zdF9lc3RpbWF0aW9uX3RpbWUgPSBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEwKTsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8gY2xvY2tfY29zdF9lc3RpbWF0aW9uX2l0ZXJhdGlvbnMgPSAxMDAwMDsKLQotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsb2NrPgotICAgICAgICAgICAgaW50IHdhcm11cCgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcnVuX2Zvcl9hdF9sZWFzdDxDbG9jaz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8Q2xvY2tEdXJhdGlvbjxDbG9jaz4+KHdhcm11cF90aW1lKSwgd2FybXVwX3NlZWQsICZyZXNvbHV0aW9uPENsb2NrPikKLSAgICAgICAgICAgICAgICAgICAgLml0ZXJhdGlvbnM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xvY2s+Ci0gICAgICAgICAgICBFbnZpcm9ubWVudEVzdGltYXRlPEZsb2F0RHVyYXRpb248Q2xvY2s+PiBlc3RpbWF0ZV9jbG9ja19yZXNvbHV0aW9uKGludCBpdGVyYXRpb25zKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByID0gcnVuX2Zvcl9hdF9sZWFzdDxDbG9jaz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8Q2xvY2tEdXJhdGlvbjxDbG9jaz4+KGNsb2NrX3Jlc29sdXRpb25fZXN0aW1hdGlvbl90aW1lKSwgaXRlcmF0aW9ucywgJnJlc29sdXRpb248Q2xvY2s+KQotICAgICAgICAgICAgICAgICAgICAucmVzdWx0OwotICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIEZsb2F0RHVyYXRpb248Q2xvY2s+KG1lYW4oci5iZWdpbigpLCByLmVuZCgpKSksCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzaWZ5X291dGxpZXJzKHIuYmVnaW4oKSwgci5lbmQoKSksCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbG9jaz4KLSAgICAgICAgICAgIEVudmlyb25tZW50RXN0aW1hdGU8RmxvYXREdXJhdGlvbjxDbG9jaz4+IGVzdGltYXRlX2Nsb2NrX2Nvc3QoRmxvYXREdXJhdGlvbjxDbG9jaz4gcmVzb2x1dGlvbikgewotICAgICAgICAgICAgICAgIGF1dG8gdGltZV9saW1pdCA9IHN0ZDo6bWluKHJlc29sdXRpb24gKiBjbG9ja19jb3N0X2VzdGltYXRpb25fdGlja19saW1pdCwgRmxvYXREdXJhdGlvbjxDbG9jaz4oY2xvY2tfY29zdF9lc3RpbWF0aW9uX3RpbWVfbGltaXQpKTsKLSAgICAgICAgICAgICAgICBhdXRvIHRpbWVfY2xvY2sgPSBbXShpbnQgaykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGV0YWlsOjptZWFzdXJlPENsb2NrPihba10gewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2xhdGlsZSBhdXRvIGlnbm9yZWQgPSBDbG9jazo6bm93KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpaWdub3JlZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSkuZWxhcHNlZDsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIHRpbWVfY2xvY2soMSk7Ci0gICAgICAgICAgICAgICAgaW50IGl0ZXJzID0gY2xvY2tfY29zdF9lc3RpbWF0aW9uX2l0ZXJhdGlvbnM7Ci0gICAgICAgICAgICAgICAgYXV0byYmIHIgPSBydW5fZm9yX2F0X2xlYXN0PENsb2NrPihzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxDbG9ja0R1cmF0aW9uPENsb2NrPj4oY2xvY2tfY29zdF9lc3RpbWF0aW9uX3RpbWUpLCBpdGVycywgdGltZV9jbG9jayk7Ci0gICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiB0aW1lczsKLSAgICAgICAgICAgICAgICBpbnQgbnNhbXBsZXMgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6Y2VpbCh0aW1lX2xpbWl0IC8gci5lbGFwc2VkKSk7Ci0gICAgICAgICAgICAgICAgdGltZXMucmVzZXJ2ZShuc2FtcGxlcyk7Ci0gICAgICAgICAgICAgICAgc3RkOjpnZW5lcmF0ZV9uKHN0ZDo6YmFja19pbnNlcnRlcih0aW1lcyksIG5zYW1wbGVzLCBbdGltZV9jbG9jaywgJnJdIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oKHRpbWVfY2xvY2soci5pdGVyYXRpb25zKSAvIHIuaXRlcmF0aW9ucykuY291bnQoKSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgRmxvYXREdXJhdGlvbjxDbG9jaz4obWVhbih0aW1lcy5iZWdpbigpLCB0aW1lcy5lbmQoKSkpLAotICAgICAgICAgICAgICAgICAgICBjbGFzc2lmeV9vdXRsaWVycyh0aW1lcy5iZWdpbigpLCB0aW1lcy5lbmQoKSksCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsb2NrPgotICAgICAgICAgICAgRW52aXJvbm1lbnQ8RmxvYXREdXJhdGlvbjxDbG9jaz4+IG1lYXN1cmVfZW52aXJvbm1lbnQoKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGljIEVudmlyb25tZW50PEZsb2F0RHVyYXRpb248Q2xvY2s+PiogZW52ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBpZiAoZW52KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAqZW52OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGF1dG8gaXRlcnMgPSBEZXRhaWw6Ondhcm11cDxDbG9jaz4oKTsKLSAgICAgICAgICAgICAgICBhdXRvIHJlc29sdXRpb24gPSBEZXRhaWw6OmVzdGltYXRlX2Nsb2NrX3Jlc29sdXRpb248Q2xvY2s+KGl0ZXJzKTsKLSAgICAgICAgICAgICAgICBhdXRvIGNvc3QgPSBEZXRhaWw6OmVzdGltYXRlX2Nsb2NrX2Nvc3Q8Q2xvY2s+KHJlc29sdXRpb24ubWVhbik7Ci0KLSAgICAgICAgICAgICAgICBlbnYgPSBuZXcgRW52aXJvbm1lbnQ8RmxvYXREdXJhdGlvbjxDbG9jaz4+eyByZXNvbHV0aW9uLCBjb3N0IH07Ci0gICAgICAgICAgICAgICAgcmV0dXJuICplbnY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gLy8gbmFtZXNwYWNlIERldGFpbAotICAgIH0gLy8gbmFtZXNwYWNlIEJlbmNobWFyawotfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKLQotLy8gZW5kIGNhdGNoX2VzdGltYXRlX2Nsb2NrLmhwcAotLy8gc3RhcnQgY2F0Y2hfYW5hbHlzZS5ocHAKLQotIC8vIFJ1biBhbmQgYW5hbHlzZSBvbmUgYmVuY2htYXJrCi0KLQotLy8gc3RhcnQgY2F0Y2hfc2FtcGxlX2FuYWx5c2lzLmhwcAotCi0vLyBCZW5jaG1hcmsgcmVzdWx0cwotCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KLQotbmFtZXNwYWNlIENhdGNoIHsKLSAgICBuYW1lc3BhY2UgQmVuY2htYXJrIHsKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIER1cmF0aW9uPgotICAgICAgICBzdHJ1Y3QgU2FtcGxlQW5hbHlzaXMgewotICAgICAgICAgICAgc3RkOjp2ZWN0b3I8RHVyYXRpb24+IHNhbXBsZXM7Ci0gICAgICAgICAgICBFc3RpbWF0ZTxEdXJhdGlvbj4gbWVhbjsKLSAgICAgICAgICAgIEVzdGltYXRlPER1cmF0aW9uPiBzdGFuZGFyZF9kZXZpYXRpb247Ci0gICAgICAgICAgICBPdXRsaWVyQ2xhc3NpZmljYXRpb24gb3V0bGllcnM7Ci0gICAgICAgICAgICBkb3VibGUgb3V0bGllcl92YXJpYW5jZTsKLQotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIER1cmF0aW9uMj4KLSAgICAgICAgICAgIG9wZXJhdG9yIFNhbXBsZUFuYWx5c2lzPER1cmF0aW9uMj4oKSBjb25zdCB7Ci0gICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8RHVyYXRpb24yPiBzYW1wbGVzMjsKLSAgICAgICAgICAgICAgICBzYW1wbGVzMi5yZXNlcnZlKHNhbXBsZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBzdGQ6OnRyYW5zZm9ybShzYW1wbGVzLmJlZ2luKCksIHNhbXBsZXMuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlcihzYW1wbGVzMiksIFtdKER1cmF0aW9uIGQpIHsgcmV0dXJuIER1cmF0aW9uMihkKTsgfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjptb3ZlKHNhbXBsZXMyKSwKLSAgICAgICAgICAgICAgICAgICAgbWVhbiwKLSAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRfZGV2aWF0aW9uLAotICAgICAgICAgICAgICAgICAgICBvdXRsaWVycywKLSAgICAgICAgICAgICAgICAgICAgb3V0bGllcl92YXJpYW5jZSwKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0gLy8gbmFtZXNwYWNlIEJlbmNobWFyawotfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKLQotLy8gZW5kIGNhdGNoX3NhbXBsZV9hbmFseXNpcy5ocHAKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8aXRlcmF0b3I+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi1uYW1lc3BhY2UgQ2F0Y2ggewotICAgIG5hbWVzcGFjZSBCZW5jaG1hcmsgewotICAgICAgICBuYW1lc3BhY2UgRGV0YWlsIHsKLSAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBEdXJhdGlvbiwgdHlwZW5hbWUgSXRlcmF0b3I+Ci0gICAgICAgICAgICBTYW1wbGVBbmFseXNpczxEdXJhdGlvbj4gYW5hbHlzZShjb25zdCBJQ29uZmlnICZjZmcsIEVudmlyb25tZW50PER1cmF0aW9uPiwgSXRlcmF0b3IgZmlyc3QsIEl0ZXJhdG9yIGxhc3QpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNmZy5iZW5jaG1hcmtOb0FuYWx5c2lzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiBzYW1wbGVzOwotICAgICAgICAgICAgICAgICAgICBzYW1wbGVzLnJlc2VydmUobGFzdCAtIGZpcnN0KTsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjp0cmFuc2Zvcm0oZmlyc3QsIGxhc3QsIHN0ZDo6YmFja19pbnNlcnRlcihzYW1wbGVzKSwgW10oRHVyYXRpb24gZCkgeyByZXR1cm4gZC5jb3VudCgpOyB9KTsKLQotICAgICAgICAgICAgICAgICAgICBhdXRvIGFuYWx5c2lzID0gQ2F0Y2g6OkJlbmNobWFyazo6RGV0YWlsOjphbmFseXNlX3NhbXBsZXMoY2ZnLmJlbmNobWFya0NvbmZpZGVuY2VJbnRlcnZhbCgpLCBjZmcuYmVuY2htYXJrUmVzYW1wbGVzKCksIHNhbXBsZXMuYmVnaW4oKSwgc2FtcGxlcy5lbmQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gb3V0bGllcnMgPSBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6OmNsYXNzaWZ5X291dGxpZXJzKHNhbXBsZXMuYmVnaW4oKSwgc2FtcGxlcy5lbmQoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXV0byB3cmFwX2VzdGltYXRlID0gW10oRXN0aW1hdGU8ZG91YmxlPiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXN0aW1hdGU8RHVyYXRpb24+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEdXJhdGlvbihlLnBvaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHVyYXRpb24oZS5sb3dlcl9ib3VuZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1cmF0aW9uKGUudXBwZXJfYm91bmQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmNvbmZpZGVuY2VfaW50ZXJ2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxEdXJhdGlvbj4gc2FtcGxlczI7Ci0gICAgICAgICAgICAgICAgICAgIHNhbXBsZXMyLnJlc2VydmUoc2FtcGxlcy5zaXplKCkpOwotICAgICAgICAgICAgICAgICAgICBzdGQ6OnRyYW5zZm9ybShzYW1wbGVzLmJlZ2luKCksIHNhbXBsZXMuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlcihzYW1wbGVzMiksIFtdKGRvdWJsZSBkKSB7IHJldHVybiBEdXJhdGlvbihkKTsgfSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoc2FtcGxlczIpLAotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcF9lc3RpbWF0ZShhbmFseXNpcy5tZWFuKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBfZXN0aW1hdGUoYW5hbHlzaXMuc3RhbmRhcmRfZGV2aWF0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgYW5hbHlzaXMub3V0bGllcl92YXJpYW5jZSwKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxEdXJhdGlvbj4gc2FtcGxlczsKLSAgICAgICAgICAgICAgICAgICAgc2FtcGxlcy5yZXNlcnZlKGxhc3QgLSBmaXJzdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgRHVyYXRpb24gbWVhbiA9IER1cmF0aW9uKDApOwotICAgICAgICAgICAgICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IGZpcnN0OyBpdCA8IGxhc3Q7ICsraXQsICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcy5wdXNoX2JhY2soRHVyYXRpb24oKml0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZWFuICs9IER1cmF0aW9uKCppdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbWVhbiAvPSBpOwotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoc2FtcGxlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICBFc3RpbWF0ZTxEdXJhdGlvbj57bWVhbiwgbWVhbiwgbWVhbiwgMC4wfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEVzdGltYXRlPER1cmF0aW9uPntEdXJhdGlvbigwKSwgRHVyYXRpb24oMCksIER1cmF0aW9uKDApLCAwLjB9LAotICAgICAgICAgICAgICAgICAgICAgICAgT3V0bGllckNsYXNzaWZpY2F0aW9ue30sCi0gICAgICAgICAgICAgICAgICAgICAgICAwLjAKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gLy8gbmFtZXNwYWNlIERldGFpbAotICAgIH0gLy8gbmFtZXNwYWNlIEJlbmNobWFyawotfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKLQotLy8gZW5kIGNhdGNoX2FuYWx5c2UuaHBwCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxjbWF0aD4KLQotbmFtZXNwYWNlIENhdGNoIHsKLSAgICBuYW1lc3BhY2UgQmVuY2htYXJrIHsKLSAgICAgICAgc3RydWN0IEJlbmNobWFyayB7Ci0gICAgICAgICAgICBCZW5jaG1hcmsoc3RkOjpzdHJpbmcgJiZuYW1lKQotICAgICAgICAgICAgICAgIDogbmFtZShzdGQ6Om1vdmUobmFtZSkpIHt9Ci0KLSAgICAgICAgICAgIHRlbXBsYXRlIDxjbGFzcyBGVU4+Ci0gICAgICAgICAgICBCZW5jaG1hcmsoc3RkOjpzdHJpbmcgJiZuYW1lLCBGVU4gJiZmdW5jKQotICAgICAgICAgICAgICAgIDogZnVuKHN0ZDo6bW92ZShmdW5jKSksIG5hbWUoc3RkOjptb3ZlKG5hbWUpKSB7fQotCi0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xvY2s+Ci0gICAgICAgICAgICBFeGVjdXRpb25QbGFuPEZsb2F0RHVyYXRpb248Q2xvY2s+PiBwcmVwYXJlKGNvbnN0IElDb25maWcgJmNmZywgRW52aXJvbm1lbnQ8RmxvYXREdXJhdGlvbjxDbG9jaz4+IGVudikgY29uc3QgewotICAgICAgICAgICAgICAgIGF1dG8gbWluX3RpbWUgPSBlbnYuY2xvY2tfcmVzb2x1dGlvbi5tZWFuICogRGV0YWlsOjptaW5pbXVtX3RpY2tzOwotICAgICAgICAgICAgICAgIGF1dG8gcnVuX3RpbWUgPSBzdGQ6Om1heChtaW5fdGltZSwgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8ZGVjbHR5cGUobWluX3RpbWUpPihjZmcuYmVuY2htYXJrV2FybXVwVGltZSgpKSk7Ci0gICAgICAgICAgICAgICAgYXV0byYmIHRlc3QgPSBEZXRhaWw6OnJ1bl9mb3JfYXRfbGVhc3Q8Q2xvY2s+KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PENsb2NrRHVyYXRpb248Q2xvY2s+PihydW5fdGltZSksIDEsIGZ1bik7Ci0gICAgICAgICAgICAgICAgaW50IG5ld19pdGVycyA9IHN0YXRpY19jYXN0PGludD4oc3RkOjpjZWlsKG1pbl90aW1lICogdGVzdC5pdGVyYXRpb25zIC8gdGVzdC5lbGFwc2VkKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgbmV3X2l0ZXJzLCB0ZXN0LmVsYXBzZWQgLyB0ZXN0Lml0ZXJhdGlvbnMgKiBuZXdfaXRlcnMgKiBjZmcuYmVuY2htYXJrU2FtcGxlcygpLCBmdW4sIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PEZsb2F0RHVyYXRpb248Q2xvY2s+PihjZmcuYmVuY2htYXJrV2FybXVwVGltZSgpKSwgRGV0YWlsOjp3YXJtdXBfaXRlcmF0aW9ucyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xvY2sgPSBkZWZhdWx0X2Nsb2NrPgotICAgICAgICAgICAgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICAgICAgSUNvbmZpZ1B0ciBjZmcgPSBnZXRDdXJyZW50Q29udGV4dCgpLmdldENvbmZpZygpOwotCi0gICAgICAgICAgICAgICAgYXV0byBlbnYgPSBEZXRhaWw6Om1lYXN1cmVfZW52aXJvbm1lbnQ8Q2xvY2s+KCk7Ci0KLSAgICAgICAgICAgICAgICBnZXRSZXN1bHRDYXB0dXJlKCkuYmVuY2htYXJrUHJlcGFyaW5nKG5hbWUpOwotICAgICAgICAgICAgICAgIENBVENIX1RSWXsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBwbGFuID0gdXNlcl9jb2RlKFsmXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJlcGFyZTxDbG9jaz4oKmNmZywgZW52KTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQmVuY2htYXJrSW5mbyBpbmZvIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBwbGFuLmVzdGltYXRlZF9kdXJhdGlvbi5jb3VudCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgcGxhbi5pdGVyYXRpb25zX3Blcl9zYW1wbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjZmctPmJlbmNobWFya1NhbXBsZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNmZy0+YmVuY2htYXJrUmVzYW1wbGVzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnYuY2xvY2tfcmVzb2x1dGlvbi5tZWFuLmNvdW50KCksCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnYuY2xvY2tfY29zdC5tZWFuLmNvdW50KCkKLSAgICAgICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgICAgICBnZXRSZXN1bHRDYXB0dXJlKCkuYmVuY2htYXJrU3RhcnRpbmcoaW5mbyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXV0byBzYW1wbGVzID0gdXNlcl9jb2RlKFsmXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGxhbi50ZW1wbGF0ZSBydW48Q2xvY2s+KCpjZmcsIGVudik7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gYW5hbHlzaXMgPSBEZXRhaWw6OmFuYWx5c2UoKmNmZywgZW52LCBzYW1wbGVzLmJlZ2luKCksIHNhbXBsZXMuZW5kKCkpOwotICAgICAgICAgICAgICAgICAgICBCZW5jaG1hcmtTdGF0czxGbG9hdER1cmF0aW9uPENsb2NrPj4gc3RhdHN7IGluZm8sIGFuYWx5c2lzLnNhbXBsZXMsIGFuYWx5c2lzLm1lYW4sIGFuYWx5c2lzLnN0YW5kYXJkX2RldmlhdGlvbiwgYW5hbHlzaXMub3V0bGllcnMsIGFuYWx5c2lzLm91dGxpZXJfdmFyaWFuY2UgfTsKLSAgICAgICAgICAgICAgICAgICAgZ2V0UmVzdWx0Q2FwdHVyZSgpLmJlbmNobWFya0VuZGVkKHN0YXRzKTsKLQotICAgICAgICAgICAgICAgIH0gQ0FUQ0hfQ0FUQ0hfQUxMewotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRlQWN0aXZlRXhjZXB0aW9uKCkgIT0gRGV0YWlsOjpiZW5jaG1hcmtFcnJvck1zZykgLy8gYmVuY2htYXJrIGVycm9ycyBoYXZlIGJlZW4gcmVwb3J0ZWQsIG90aGVyd2lzZSByZXRocm93LgotICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpyZXRocm93X2V4Y2VwdGlvbihzdGQ6OmN1cnJlbnRfZXhjZXB0aW9uKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gc2V0cyBsYW1iZGEgdG8gYmUgdXNlZCBpbiBmdW4gKmFuZCogZXhlY3V0ZXMgYmVuY2htYXJrIQotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1biwKLSAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhRGV0YWlsOjppc19yZWxhdGVkPEZ1biwgQmVuY2htYXJrPjo6dmFsdWUsIGludD46OnR5cGUgPSAwPgotICAgICAgICAgICAgICAgIEJlbmNobWFyayAmIG9wZXJhdG9yPShGdW4gZnVuYykgewotICAgICAgICAgICAgICAgIGZ1biA9IERldGFpbDo6QmVuY2htYXJrRnVuY3Rpb24oZnVuYyk7Ci0gICAgICAgICAgICAgICAgcnVuKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICBEZXRhaWw6OkJlbmNobWFya0Z1bmN0aW9uIGZ1bjsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci0gICAgICAgIH07Ci0gICAgfQotfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKLQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9HRVRfMV9BUkcoYXJnMSwgYXJnMiwgLi4uKSBhcmcxCi0jZGVmaW5lIElOVEVSTkFMX0NBVENIX0dFVF8yX0FSRyhhcmcxLCBhcmcyLCAuLi4pIGFyZzIKLQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9CRU5DSE1BUksoQmVuY2htYXJrTmFtZSwgbmFtZSwgYmVuY2htYXJrSW5kZXgpXAotICAgIGlmKCBDYXRjaDo6QmVuY2htYXJrOjpCZW5jaG1hcmsgQmVuY2htYXJrTmFtZXtuYW1lfSApIFwKLSAgICAgICAgQmVuY2htYXJrTmFtZSA9IFsmXShpbnQgYmVuY2htYXJrSW5kZXgpCi0KLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfQkVOQ0hNQVJLX0FEVkFOQ0VEKEJlbmNobWFya05hbWUsIG5hbWUpXAotICAgIGlmKCBDYXRjaDo6QmVuY2htYXJrOjpCZW5jaG1hcmsgQmVuY2htYXJrTmFtZXtuYW1lfSApIFwKLSAgICAgICAgQmVuY2htYXJrTmFtZSA9IFsmXQotCi0vLyBlbmQgY2F0Y2hfYmVuY2htYXJrLmhwcAotLy8gc3RhcnQgY2F0Y2hfY29uc3RydWN0b3IuaHBwCi0KLS8vIENvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yIGhlbHBlcnMKLQotCi0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgbmFtZXNwYWNlIEJlbmNobWFyayB7Ci0gICAgICAgIG5hbWVzcGFjZSBEZXRhaWwgewotICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGJvb2wgRGVzdHJ1Y3Q+Ci0gICAgICAgICAgICBzdHJ1Y3QgT2JqZWN0U3RvcmFnZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVzaW5nIFRTdG9yYWdlID0gdHlwZW5hbWUgc3RkOjphbGlnbmVkX3N0b3JhZ2U8c2l6ZW9mKFQpLCBzdGQ6OmFsaWdubWVudF9vZjxUPjo6dmFsdWU+Ojp0eXBlOwotCi0gICAgICAgICAgICAgICAgT2JqZWN0U3RvcmFnZSgpIDogZGF0YSgpIHt9Ci0KLSAgICAgICAgICAgICAgICBPYmplY3RTdG9yYWdlKGNvbnN0IE9iamVjdFN0b3JhZ2UmIG90aGVyKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3KCZkYXRhKSBUKG90aGVyLnN0b3JlZF9vYmplY3QoKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgT2JqZWN0U3RvcmFnZShPYmplY3RTdG9yYWdlJiYgb3RoZXIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBuZXcoJmRhdGEpIFQoc3RkOjptb3ZlKG90aGVyLnN0b3JlZF9vYmplY3QoKSkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIH5PYmplY3RTdG9yYWdlKCkgeyBkZXN0cnVjdF9vbl9leGl0PFQ+KCk7IH0KLQotICAgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgotICAgICAgICAgICAgICAgIHZvaWQgY29uc3RydWN0KEFyZ3MmJi4uLiBhcmdzKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3ICgmZGF0YSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRlbXBsYXRlIDxib29sIEFsbG93TWFudWFsRGVzdHJ1Y3Rpb24gPSAhRGVzdHJ1Y3Q+Ci0gICAgICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8QWxsb3dNYW51YWxEZXN0cnVjdGlvbj46OnR5cGUgZGVzdHJ1Y3QoKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVkX29iamVjdCgpLn5UKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciBiZW5jaG1hcmssIGRlc3RydWN0IHRoZSB1bmRlcmx5aW5nIG9iamVjdAotICAgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgICAgICAgICAgICAgIHZvaWQgZGVzdHJ1Y3Rfb25fZXhpdCh0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxEZXN0cnVjdCwgVT46OnR5cGUqID0gMCkgeyBkZXN0cnVjdDx0cnVlPigpOyB9Ci0gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBkb24ndAotICAgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgICAgICAgICAgICAgIHZvaWQgZGVzdHJ1Y3Rfb25fZXhpdCh0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhRGVzdHJ1Y3QsIFU+Ojp0eXBlKiA9IDApIHsgfQotCi0gICAgICAgICAgICAgICAgVCYgc3RvcmVkX29iamVjdCgpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxUKj4oc3RhdGljX2Nhc3Q8dm9pZCo+KCZkYXRhKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgVCBjb25zdCYgc3RvcmVkX29iamVjdCgpIGNvbnN0IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxUKj4oc3RhdGljX2Nhc3Q8dm9pZCo+KCZkYXRhKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgVFN0b3JhZ2UgZGF0YTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICAgICAgdXNpbmcgc3RvcmFnZV9mb3IgPSBEZXRhaWw6Ok9iamVjdFN0b3JhZ2U8VCwgdHJ1ZT47Ci0KLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHVzaW5nIGRlc3RydWN0YWJsZV9vYmplY3QgPSBEZXRhaWw6Ok9iamVjdFN0b3JhZ2U8VCwgZmFsc2U+OwotICAgIH0KLX0KLQotLy8gZW5kIGNhdGNoX2NvbnN0cnVjdG9yLmhwcAotLy8gZW5kIGNhdGNoX2JlbmNobWFya2luZ19hbGwuaHBwCi0jZW5kaWYKLQogI2VuZGlmIC8vICEgQ0FUQ0hfQ09ORklHX0lNUExfT05MWQogCiAjaWZkZWYgQ0FUQ0hfSU1QTApAQCAtNzU0Miw3ICs1OTAzLDYgQEAKIAogICAgIGNsYXNzIFNlY3Rpb25UcmFja2VyIDogcHVibGljIFRyYWNrZXJCYXNlIHsKICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1fZmlsdGVyczsKLSAgICAgICAgc3RkOjpzdHJpbmcgbV90cmltbWVkX25hbWU7CiAgICAgcHVibGljOgogICAgICAgICBTZWN0aW9uVHJhY2tlciggTmFtZUFuZExvY2F0aW9uIGNvbnN0JiBuYW1lQW5kTG9jYXRpb24sIFRyYWNrZXJDb250ZXh0JiBjdHgsIElUcmFja2VyKiBwYXJlbnQgKTsKIApAQCAtNzU4MCwyMTcgKzU5NDAsNiBAQAogfQogLy8gZW5kIGNhdGNoX2xlYWtfZGV0ZWN0b3IuaAogLy8gQ3BwIGZpbGVzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHNpbmdsZS1oZWFkZXIgZmlsZSBoZXJlCi0vLyBzdGFydCBjYXRjaF9zdGF0cy5jcHAKLQotLy8gU3RhdGlzdGljYWwgYW5hbHlzaXMgdG9vbHMKLQotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcpCi0KLSNpbmNsdWRlIDxjYXNzZXJ0PgotI2luY2x1ZGUgPHJhbmRvbT4KLQotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX1VTRV9BU1lOQykKLSNpbmNsdWRlIDxmdXR1cmU+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIHsKLSAgICBkb3VibGUgZXJmX2ludihkb3VibGUgeCkgewotICAgICAgICAvLyBDb2RlIGFjY29tcGFueWluZyB0aGUgYXJ0aWNsZSAiQXBwcm94aW1hdGluZyB0aGUgZXJmaW52IGZ1bmN0aW9uIiBpbiBHUFUgQ29tcHV0aW5nIEdlbXMsIFZvbHVtZSAyCi0gICAgICAgIGRvdWJsZSB3LCBwOwotCi0gICAgICAgIHcgPSAtbG9nKCgxLjAgLSB4KSAqICgxLjAgKyB4KSk7Ci0KLSAgICAgICAgaWYgKHcgPCA2LjI1MDAwMCkgewotICAgICAgICAgICAgdyA9IHcgLSAzLjEyNTAwMDsKLSAgICAgICAgICAgIHAgPSAtMy42NDQ0MTIwNjQwMTc4MTk2OTk2ZS0yMTsKLSAgICAgICAgICAgIHAgPSAtMS42ODUwNTkxMzgxODIwMTY1ODllLTE5ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gMS4yODU4NDgwNzE1MjU2NDAwMTY3ZS0xOCArIHAgKiB3OwotICAgICAgICAgICAgcCA9IDEuMTE1Nzg3NzY3ODAyNTE4MDk2ZS0xNyArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC0xLjMzMzE3MTY2Mjg1NDYyMDkwNmUtMTYgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAyLjA5NzI3Njc4NzU5Njg1NjE2MzdlLTE3ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gNi42Mzc2MzgxMzQzNTgzMjM4MzI1ZS0xNSArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC00LjA1NDU2NjI3Mjk3NTIwNjg2MzllLTE0ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gLTguMTUxOTM0MTk3NjA1NDcyMTUyMmUtMTQgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAyLjYzMzUwOTMxNTMwODIzMjI5NzdlLTEyICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gLTEuMjk3NTEzMzI1MzQ1MzUzMjQ5OGUtMTEgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAtNS40MTU0MTIwNTQyOTQ2Mjc5MzE3ZS0xMSArIHAgKiB3OwotICAgICAgICAgICAgcCA9IDEuMDUxMjEyMjczMzIxNTMyMjg1ZS0wOSArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC00LjExMjYzMzk4MDM0Njk4MzY5NzZlLTA5ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gLTIuOTA3MDM2OTk1Nzg4MjAwNTA4NmUtMDggKyBwICogdzsKLSAgICAgICAgICAgIHAgPSA0LjIzNDc4Nzc4Mjc5MzI0MDM1MThlLTA3ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gLTEuMzY1NDY5MjAwMDgzNDY3ODY0NWUtMDYgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAtMS4zODgyNTIzMzYyNzg2NDY4NzE5ZS0wNSArIHAgKiB3OwotICAgICAgICAgICAgcCA9IDAuMDAwMTg2NzM0MjA4MDM0MDU3MTM1MiArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC0wLjAwMDc0MDcwMjUzNDE2NjI2Njk3NTEyICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gLTAuMDA2MDMzNjcwODcxNDMwMTQ5MDUzMyArIHAgKiB3OwotICAgICAgICAgICAgcCA9IDAuMjQwMTU4MTgyNDI1NTg5NjE2OTMgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAxLjY1MzY1NDU2MjY4MzEwMjczNTYgKyBwICogdzsKLSAgICAgICAgfSBlbHNlIGlmICh3IDwgMTYuMDAwMDAwKSB7Ci0gICAgICAgICAgICB3ID0gc3FydCh3KSAtIDMuMjUwMDAwOwotICAgICAgICAgICAgcCA9IDIuMjEzNzM3NjkyMTc3NTc4NzA0OWUtMDk7Ci0gICAgICAgICAgICBwID0gOS4wNzU2NTYxOTM4ODg1MzkwOTc5ZS0wOCArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC0yLjc1MTc0MDYyOTcwNjQ1NDU0MjhlLTA3ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gMS44MjM5NjI5MjE0Mzg5MjI3NzU1ZS0wOCArIHAgKiB3OwotICAgICAgICAgICAgcCA9IDEuNTAyNzQwMzk2ODkwOTgyNzYyN2UtMDYgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAtNC4wMTM4Njc1MjY5ODE1NDU5NjllLTA2ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gMi45MjM0NDQ5MDg5OTU1NDQ2MDQ0ZS0wNiArIHAgKiB3OwotICAgICAgICAgICAgcCA9IDEuMjQ3NTMwNDQ4MTY3MTc3ODcyM2UtMDUgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAtNC43MzE4MjI5MDA5MDU1NzMzOTgxZS0wNSArIHAgKiB3OwotICAgICAgICAgICAgcCA9IDYuODI4NDg1MTQ1OTU3MzE3NTQ0OGUtMDUgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAyLjQwMzExMTAzODcwOTc4OTM5OTllLTA1ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gLTAuMDAwMzU1MDM3NTIwMzYyODQ3NDc5NiArIHAgKiB3OwotICAgICAgICAgICAgcCA9IDAuMDAwOTUzMjg5Mzc5NzM3MzgwNDk3MDMgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAtMC4wMDE2ODgyNzU1NTYwMjM1MDQ3MzEzICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gMC4wMDI0OTE0NDIwOTYxMDc4NTA4MDY2ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gLTAuMDAzNzUxMjA4NTA3NTY5MjQxMjEwNyArIHAgKiB3OwotICAgICAgICAgICAgcCA9IDAuMDA1MzcwOTE0NTUzNTkwMDYzNjE3ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gMS4wMDUyNTg5Njc2OTQxNTkyMzM0ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gMy4wODM4ODU2MTA0OTIyMjA3NjM1ICsgcCAqIHc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3ID0gc3FydCh3KSAtIDUuMDAwMDAwOwotICAgICAgICAgICAgcCA9IC0yLjcxMDk5MjA2MTY0Mzg1NzMyNDNlLTExOwotICAgICAgICAgICAgcCA9IC0yLjU1NTY0MTgxNjk5NjUyNTIwNTVlLTEwICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gMS41MDc2NTcyNjkzNTAwNTQ4MDgzZS0wOSArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC0zLjc4OTQ2NTQ0MDEyNjczNjk5MzdlLTA5ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gNy42MTU3MDEyMDgwNzgzMzkzODA0ZS0wOSArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC0xLjQ5NjAwMjY2MjcxNDkyNDA0NzhlLTA4ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gMi45MTQ3OTUzNDUwOTAxMDgwODI2ZS0wOCArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC02Ljc3MTE5OTc3NTg0NTIzMzk0OThlLTA4ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gMi4yOTAwNDgyMjI4MDI2NjU0NzE3ZS0wNyArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC05LjkyOTgyNzI5NDIzMTcwMDI1MzllLTA3ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gNC41MjYwNjI1OTcyMjMxNTM3MDM5ZS0wNiArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC0xLjk2ODE3NzgxMDU1MzE2NzA1NjdlLTA1ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gNy41OTk1Mjc3MDMwMDE3NzYxMTM5ZS0wNSArIHAgKiB3OwotICAgICAgICAgICAgcCA9IC0wLjAwMDIxNTAzMDExOTMwMDQ0NDc3MzQ3ICsgcCAqIHc7Ci0gICAgICAgICAgICBwID0gLTAuMDAwMTM4NzE5MzE4MzM2MjMxMjIwMjYgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSAxLjAxMDMwMDQ2NDg2NDUzNDM5NzcgKyBwICogdzsKLSAgICAgICAgICAgIHAgPSA0Ljg0OTkwNjQwMTQwODU4NDQyMjEgKyBwICogdzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcCAqIHg7Ci0gICAgfQotCi0gICAgZG91YmxlIHN0YW5kYXJkX2RldmlhdGlvbihzdGQ6OnZlY3Rvcjxkb3VibGU+OjppdGVyYXRvciBmaXJzdCwgc3RkOjp2ZWN0b3I8ZG91YmxlPjo6aXRlcmF0b3IgbGFzdCkgewotICAgICAgICBhdXRvIG0gPSBDYXRjaDo6QmVuY2htYXJrOjpEZXRhaWw6Om1lYW4oZmlyc3QsIGxhc3QpOwotICAgICAgICBkb3VibGUgdmFyaWFuY2UgPSBzdGQ6OmFjY3VtdWxhdGUoZmlyc3QsIGxhc3QsIDAuLCBbbV0oZG91YmxlIGEsIGRvdWJsZSBiKSB7Ci0gICAgICAgICAgICBkb3VibGUgZGlmZiA9IGIgLSBtOwotICAgICAgICAgICAgcmV0dXJuIGEgKyBkaWZmICogZGlmZjsKLSAgICAgICAgICAgIH0pIC8gKGxhc3QgLSBmaXJzdCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpzcXJ0KHZhcmlhbmNlKTsKLSAgICB9Ci0KLX0KLQotbmFtZXNwYWNlIENhdGNoIHsKLSAgICBuYW1lc3BhY2UgQmVuY2htYXJrIHsKLSAgICAgICAgbmFtZXNwYWNlIERldGFpbCB7Ci0KLSAgICAgICAgICAgIGRvdWJsZSB3ZWlnaHRlZF9hdmVyYWdlX3F1YW50aWxlKGludCBrLCBpbnQgcSwgc3RkOjp2ZWN0b3I8ZG91YmxlPjo6aXRlcmF0b3IgZmlyc3QsIHN0ZDo6dmVjdG9yPGRvdWJsZT46Oml0ZXJhdG9yIGxhc3QpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNvdW50ID0gbGFzdCAtIGZpcnN0OwotICAgICAgICAgICAgICAgIGRvdWJsZSBpZHggPSAoY291bnQgLSAxKSAqIGsgLyBzdGF0aWNfY2FzdDxkb3VibGU+KHEpOwotICAgICAgICAgICAgICAgIGludCBqID0gc3RhdGljX2Nhc3Q8aW50PihpZHgpOwotICAgICAgICAgICAgICAgIGRvdWJsZSBnID0gaWR4IC0gajsKLSAgICAgICAgICAgICAgICBzdGQ6Om50aF9lbGVtZW50KGZpcnN0LCBmaXJzdCArIGosIGxhc3QpOwotICAgICAgICAgICAgICAgIGF1dG8geGogPSBmaXJzdFtqXTsKLSAgICAgICAgICAgICAgICBpZiAoZyA9PSAwKSByZXR1cm4geGo7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIHhqMSA9ICpzdGQ6Om1pbl9lbGVtZW50KGZpcnN0ICsgKGogKyAxKSwgbGFzdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHhqICsgZyAqICh4ajEgLSB4aik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRvdWJsZSBlcmZjX2ludihkb3VibGUgeCkgewotICAgICAgICAgICAgICAgIHJldHVybiBlcmZfaW52KDEuMCAtIHgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkb3VibGUgbm9ybWFsX3F1YW50aWxlKGRvdWJsZSBwKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBST09UX1RXTyA9IHN0ZDo6c3FydCgyLjApOwotCi0gICAgICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IDAuMDsKLSAgICAgICAgICAgICAgICBhc3NlcnQocCA+PSAwICYmIHAgPD0gMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHAgPCAwIHx8IHAgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gLWVyZmNfaW52KDIuMCAqIHApOwotICAgICAgICAgICAgICAgIC8vIHJlc3VsdCAqPSBub3JtYWwgZGlzdHJpYnV0aW9uIHN0YW5kYXJkIGRldmlhdGlvbiAoMS4wKSAqIHNxcnQoMikKLSAgICAgICAgICAgICAgICByZXN1bHQgKj0gLypzZCAqICovIFJPT1RfVFdPOwotICAgICAgICAgICAgICAgIC8vIHJlc3VsdCArPSBub3JtYWwgZGlzdHRyaWJ1dGlvbiBtZWFuICgwKQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRvdWJsZSBvdXRsaWVyX3ZhcmlhbmNlKEVzdGltYXRlPGRvdWJsZT4gbWVhbiwgRXN0aW1hdGU8ZG91YmxlPiBzdGRkZXYsIGludCBuKSB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHNiID0gc3RkZGV2LnBvaW50OwotICAgICAgICAgICAgICAgIGRvdWJsZSBtbiA9IG1lYW4ucG9pbnQgLyBuOwotICAgICAgICAgICAgICAgIGRvdWJsZSBtZ19taW4gPSBtbiAvIDIuOwotICAgICAgICAgICAgICAgIGRvdWJsZSBzZyA9IHN0ZDo6bWluKG1nX21pbiAvIDQuLCBzYiAvIHN0ZDo6c3FydChuKSk7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHNnMiA9IHNnICogc2c7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHNiMiA9IHNiICogc2I7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNfbWF4ID0gW24sIG1uLCBzYjIsIHNnMl0oZG91YmxlIHgpIC0+IGRvdWJsZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZSBrID0gbW4gLSB4OwotICAgICAgICAgICAgICAgICAgICBkb3VibGUgZCA9IGsgKiBrOwotICAgICAgICAgICAgICAgICAgICBkb3VibGUgbmQgPSBuICogZDsKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIGswID0gLW4gKiBuZDsKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIGsxID0gc2IyIC0gbiAqIHNnMiArIG5kOwotICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGV0ID0gazEgKiBrMSAtIDQgKiBzZzIgKiBrMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpKC0yLiAqIGswIC8gKGsxICsgc3RkOjpzcXJ0KGRldCkpKTsKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgYXV0byB2YXJfb3V0ID0gW24sIHNiMiwgc2cyXShkb3VibGUgYykgewotICAgICAgICAgICAgICAgICAgICBkb3VibGUgbmMgPSBuIC0gYzsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChuYyAvIG4pICogKHNiMiAtIG5jICogc2cyKTsKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWluKHZhcl9vdXQoMSksIHZhcl9vdXQoc3RkOjptaW4oY19tYXgoMC4pLCBjX21heChtZ19taW4pKSkpIC8gc2IyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBib290c3RyYXBfYW5hbHlzaXMgYW5hbHlzZV9zYW1wbGVzKGRvdWJsZSBjb25maWRlbmNlX2xldmVsLCBpbnQgbl9yZXNhbXBsZXMsIHN0ZDo6dmVjdG9yPGRvdWJsZT46Oml0ZXJhdG9yIGZpcnN0LCBzdGQ6OnZlY3Rvcjxkb3VibGU+OjppdGVyYXRvciBsYXN0KSB7Ci0gICAgICAgICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1RBUlRfV0FSTklOR1NfU1VQUFJFU1NJT04KLSAgICAgICAgICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTCi0gICAgICAgICAgICAgICAgc3RhdGljIHN0ZDo6cmFuZG9tX2RldmljZSBlbnRyb3B5OwotICAgICAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX1NUT1BfV0FSTklOR1NfU1VQUFJFU1NJT04KLQotICAgICAgICAgICAgICAgIGF1dG8gbiA9IHN0YXRpY19jYXN0PGludD4obGFzdCAtIGZpcnN0KTsgLy8gc2VyaW91c2x5LCBvbmUgY2FuJ3QgdXNlIGludGVncmFsIHR5cGVzIHdpdGhvdXQgaGVsbCBpbiBDKysKLQotICAgICAgICAgICAgICAgIGF1dG8gbWVhbiA9ICZEZXRhaWw6Om1lYW48c3RkOjp2ZWN0b3I8ZG91YmxlPjo6aXRlcmF0b3I+OwotICAgICAgICAgICAgICAgIGF1dG8gc3RkZGV2ID0gJnN0YW5kYXJkX2RldmlhdGlvbjsKLQotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX1VTRV9BU1lOQykKLSAgICAgICAgICAgICAgICBhdXRvIEVzdGltYXRlID0gWz1dKGRvdWJsZSgqZikoc3RkOjp2ZWN0b3I8ZG91YmxlPjo6aXRlcmF0b3IsIHN0ZDo6dmVjdG9yPGRvdWJsZT46Oml0ZXJhdG9yKSkgewotICAgICAgICAgICAgICAgICAgICBhdXRvIHNlZWQgPSBlbnRyb3B5KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OmFzeW5jKHN0ZDo6bGF1bmNoOjphc3luYywgWz1dIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bXQxOTkzNyBybmcoc2VlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc2FtcGxlZCA9IHJlc2FtcGxlKHJuZywgbl9yZXNhbXBsZXMsIGZpcnN0LCBsYXN0LCBmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBib290c3RyYXAoY29uZmlkZW5jZV9sZXZlbCwgZmlyc3QsIGxhc3QsIHJlc2FtcGxlZCwgZik7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICBhdXRvIG1lYW5fZnV0dXJlID0gRXN0aW1hdGUobWVhbik7Ci0gICAgICAgICAgICAgICAgYXV0byBzdGRkZXZfZnV0dXJlID0gRXN0aW1hdGUoc3RkZGV2KTsKLQotICAgICAgICAgICAgICAgIGF1dG8gbWVhbl9lc3RpbWF0ZSA9IG1lYW5fZnV0dXJlLmdldCgpOwotICAgICAgICAgICAgICAgIGF1dG8gc3RkZGV2X2VzdGltYXRlID0gc3RkZGV2X2Z1dHVyZS5nZXQoKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgYXV0byBFc3RpbWF0ZSA9IFs9XShkb3VibGUoKmYpKHN0ZDo6dmVjdG9yPGRvdWJsZT46Oml0ZXJhdG9yLCBzdGQ6OnZlY3Rvcjxkb3VibGU+OjppdGVyYXRvcikpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBzZWVkID0gZW50cm9weSgpOwotICAgICAgICAgICAgICAgICAgICBzdGQ6Om10MTk5Mzcgcm5nKHNlZWQpOwotICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc2FtcGxlZCA9IHJlc2FtcGxlKHJuZywgbl9yZXNhbXBsZXMsIGZpcnN0LCBsYXN0LCBmKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvb3RzdHJhcChjb25maWRlbmNlX2xldmVsLCBmaXJzdCwgbGFzdCwgcmVzYW1wbGVkLCBmKTsKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgYXV0byBtZWFuX2VzdGltYXRlID0gRXN0aW1hdGUobWVhbik7Ci0gICAgICAgICAgICAgICAgYXV0byBzdGRkZXZfZXN0aW1hdGUgPSBFc3RpbWF0ZShzdGRkZXYpOwotI2VuZGlmIC8vIENBVENIX1VTRV9BU1lOQwotCi0gICAgICAgICAgICAgICAgZG91YmxlIG91dGxpZXJfdmFyaWFuY2UgPSBEZXRhaWw6Om91dGxpZXJfdmFyaWFuY2UobWVhbl9lc3RpbWF0ZSwgc3RkZGV2X2VzdGltYXRlLCBuKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB7IG1lYW5fZXN0aW1hdGUsIHN0ZGRldl9lc3RpbWF0ZSwgb3V0bGllcl92YXJpYW5jZSB9OwotICAgICAgICAgICAgfQotICAgICAgICB9IC8vIG5hbWVzcGFjZSBEZXRhaWwKLSAgICB9IC8vIG5hbWVzcGFjZSBCZW5jaG1hcmsKLX0gLy8gbmFtZXNwYWNlIENhdGNoCi0KLSNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORwotLy8gZW5kIGNhdGNoX3N0YXRzLmNwcAogLy8gc3RhcnQgY2F0Y2hfYXBwcm94LmNwcAogCiAjaW5jbHVkZSA8Y21hdGg+CkBAIC03ODM1LDggKzU5ODQsNyBAQAogICAgIGJvb2wgQXBwcm94OjplcXVhbGl0eUNvbXBhcmlzb25JbXBsKGNvbnN0IGRvdWJsZSBvdGhlcikgY29uc3QgewogICAgICAgICAvLyBGaXJzdCB0cnkgd2l0aCBmaXhlZCBtYXJnaW4sIHRoZW4gY29tcHV0ZSBtYXJnaW4gYmFzZWQgb24gZXBzaWxvbiwgc2NhbGUgYW5kIEFwcHJveCdzIHZhbHVlCiAgICAgICAgIC8vIFRoYW5rcyB0byBSaWNoYXJkIEhhcnJpcyBmb3IgaGlzIGhlbHAgcmVmaW5pbmcgdGhlIHNjYWxlZCBtYXJnaW4gdmFsdWUKLSAgICAgICAgcmV0dXJuIG1hcmdpbkNvbXBhcmlzb24obV92YWx1ZSwgb3RoZXIsIG1fbWFyZ2luKQotICAgICAgICAgICAgfHwgbWFyZ2luQ29tcGFyaXNvbihtX3ZhbHVlLCBvdGhlciwgbV9lcHNpbG9uICogKG1fc2NhbGUgKyBzdGQ6OmZhYnMoc3RkOjppc2luZihtX3ZhbHVlKT8gMCA6IG1fdmFsdWUpKSk7CisgICAgICAgIHJldHVybiBtYXJnaW5Db21wYXJpc29uKG1fdmFsdWUsIG90aGVyLCBtX21hcmdpbikgfHwgbWFyZ2luQ29tcGFyaXNvbihtX3ZhbHVlLCBvdGhlciwgbV9lcHNpbG9uICogKG1fc2NhbGUgKyBzdGQ6OmZhYnMobV92YWx1ZSkpKTsKICAgICB9CiAKICAgICB2b2lkIEFwcHJveDo6c2V0TWFyZ2luKGRvdWJsZSBuZXdNYXJnaW4pIHsKQEAgLTc4ODIsMTkgKzYwMzAsNiBAQAogCiAgICAgI2RlZmluZSBDQVRDSF9UUkFQKCkgX19hc21fXygiaW50ICQzXG4iIDogOiApIC8qIE5PTElOVCAqLwogCi0jZWxpZiBkZWZpbmVkKENBVENIX1BMQVRGT1JNX0lQSE9ORSkKLQotICAgIC8vIHVzZSBpbmxpbmUgYXNzZW1ibGVyCi0gICAgI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKLSAgICAgICAgI2RlZmluZSBDQVRDSF9UUkFQKCkgIF9fYXNtX18oImludCAkMyIpCi0gICAgI2VsaWYgZGVmaW5lZChfX2FhcmNoNjRfXykKLSAgICAgICAgI2RlZmluZSBDQVRDSF9UUkFQKCkgIF9fYXNtX18oIi5pbnN0IDB4ZDQyMDAwMDAiKQotICAgICNlbGlmIGRlZmluZWQoX19hcm1fXykgJiYgIWRlZmluZWQoX190aHVtYl9fKQotICAgICAgICAjZGVmaW5lIENBVENIX1RSQVAoKSAgX19hc21fXygiLmluc3QgMHhlN2YwMDFmMCIpCi0gICAgI2VsaWYgZGVmaW5lZChfX2FybV9fKSAmJiAgZGVmaW5lZChfX3RodW1iX18pCi0gICAgICAgICNkZWZpbmUgQ0FUQ0hfVFJBUCgpICBfX2FzbV9fKCIuaW5zdCAweGRlMDEiKQotICAgICNlbmRpZgotCiAjZWxpZiBkZWZpbmVkKENBVENIX1BMQVRGT1JNX0xJTlVYKQogICAgIC8vIElmIHdlIGNhbiB1c2UgaW5saW5lIGFzc2VtYmxlciwgZG8gaXQgYmVjYXVzZSB0aGlzIGFsbG93cyB1cyB0byBicmVhawogICAgIC8vIGRpcmVjdGx5IGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUgZmFpbGluZyBjaGVjayBpbnN0ZWFkIG9mIGJyZWFraW5nIGluc2lkZQpAQCAtNzkxMywxMiArNjA0OCwxMCBAQAogICAgICNkZWZpbmUgQ0FUQ0hfVFJBUCgpIERlYnVnQnJlYWsoKQogI2VuZGlmCiAKLSNpZm5kZWYgQ0FUQ0hfQlJFQUtfSU5UT19ERUJVR0dFUgotICAgICNpZmRlZiBDQVRDSF9UUkFQCi0gICAgICAgICNkZWZpbmUgQ0FUQ0hfQlJFQUtfSU5UT19ERUJVR0dFUigpIFtdeyBpZiggQ2F0Y2g6OmlzRGVidWdnZXJBY3RpdmUoKSApIHsgQ0FUQ0hfVFJBUCgpOyB9IH0oKQotICAgICNlbHNlCi0gICAgICAgICNkZWZpbmUgQ0FUQ0hfQlJFQUtfSU5UT19ERUJVR0dFUigpIFtde30oKQotICAgICNlbmRpZgorI2lmZGVmIENBVENIX1RSQVAKKyAgICAjZGVmaW5lIENBVENIX0JSRUFLX0lOVE9fREVCVUdHRVIoKSBbXXsgaWYoIENhdGNoOjppc0RlYnVnZ2VyQWN0aXZlKCkgKSB7IENBVENIX1RSQVAoKTsgfSB9KCkKKyNlbHNlCisgICAgI2RlZmluZSBDQVRDSF9CUkVBS19JTlRPX0RFQlVHR0VSKCkgW117fSgpCiAjZW5kaWYKIAogLy8gZW5kIGNhdGNoX2RlYnVnZ2VyLmgKQEAgLTgwNjcsMTIgKzYyMDAsOCBAQAogCiAgICAgICAgIGF1dG8gYWNxdWlyZUdlbmVyYXRvclRyYWNrZXIoIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBsaW5lSW5mbyApIC0+IElHZW5lcmF0b3JUcmFja2VyJiBvdmVycmlkZTsKIAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcpCi0gICAgICAgIHZvaWQgYmVuY2htYXJrUHJlcGFyaW5nKCBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSApIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGJlbmNobWFya1N0YXJ0aW5nKCBCZW5jaG1hcmtJbmZvIGNvbnN0JiBpbmZvICkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgYmVuY2htYXJrRW5kZWQoIEJlbmNobWFya1N0YXRzPD4gY29uc3QmIHN0YXRzICkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgYmVuY2htYXJrRmFpbGVkKCBzdGQ6OnN0cmluZyBjb25zdCYgZXJyb3IgKSBvdmVycmlkZTsKLSNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORworICAgICAgICB2b2lkIGJlbmNobWFya0VuZGVkKCBCZW5jaG1hcmtTdGF0cyBjb25zdCYgc3RhdHMgKSBvdmVycmlkZTsKIAogICAgICAgICB2b2lkIHB1c2hTY29wZWRNZXNzYWdlKCBNZXNzYWdlSW5mbyBjb25zdCYgbWVzc2FnZSApIG92ZXJyaWRlOwogICAgICAgICB2b2lkIHBvcFNjb3BlZE1lc3NhZ2UoIE1lc3NhZ2VJbmZvIGNvbnN0JiBtZXNzYWdlICkgb3ZlcnJpZGU7CkBAIC04MTM2LDggKzYyNjUsNiBAQAogICAgICAgICBib29sIG1faW5jbHVkZVN1Y2Nlc3NmdWxSZXN1bHRzOwogICAgIH07CiAKLSAgICB2b2lkIHNlZWRSbmcoSUNvbmZpZyBjb25zdCYgY29uZmlnKTsKLSAgICB1bnNpZ25lZCBpbnQgcm5nU2VlZCgpOwogfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCiAKIC8vIGVuZCBjYXRjaF9ydW5fY29udGV4dC5oCkBAIC04Mjg0LDcgKzY0MTEsNyBAQAogICAgIH0KIAogICAgIGJvb2wgQXNzZXJ0aW9uUmVzdWx0OjpoYXNFeHByZXNzaW9uKCkgY29uc3QgewotICAgICAgICByZXR1cm4gIW1faW5mby5jYXB0dXJlZEV4cHJlc3Npb24uZW1wdHkoKTsKKyAgICAgICAgcmV0dXJuIG1faW5mby5jYXB0dXJlZEV4cHJlc3Npb25bMF0gIT0gMDsKICAgICB9CiAKICAgICBib29sIEFzc2VydGlvblJlc3VsdDo6aGFzTWVzc2FnZSgpIGNvbnN0IHsKQEAgLTgyOTIsMjIgKzY0MTksMTYgQEAKICAgICB9CiAKICAgICBzdGQ6OnN0cmluZyBBc3NlcnRpb25SZXN1bHQ6OmdldEV4cHJlc3Npb24oKSBjb25zdCB7Ci0gICAgICAgIC8vIFBvc3NpYmx5IG92ZXJhbGxvY2F0aW5nIGJ5IDMgY2hhcmFjdGVycyBzaG91bGQgYmUgYmFzaWNhbGx5IGZyZWUKLSAgICAgICAgc3RkOjpzdHJpbmcgZXhwcjsgZXhwci5yZXNlcnZlKG1faW5mby5jYXB0dXJlZEV4cHJlc3Npb24uc2l6ZSgpICsgMyk7Ci0gICAgICAgIGlmIChpc0ZhbHNlVGVzdChtX2luZm8ucmVzdWx0RGlzcG9zaXRpb24pKSB7Ci0gICAgICAgICAgICBleHByICs9ICIhKCI7Ci0gICAgICAgIH0KLSAgICAgICAgZXhwciArPSBtX2luZm8uY2FwdHVyZWRFeHByZXNzaW9uOwotICAgICAgICBpZiAoaXNGYWxzZVRlc3QobV9pbmZvLnJlc3VsdERpc3Bvc2l0aW9uKSkgewotICAgICAgICAgICAgZXhwciArPSAnKSc7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgICAgIGlmKCBpc0ZhbHNlVGVzdCggbV9pbmZvLnJlc3VsdERpc3Bvc2l0aW9uICkgKQorICAgICAgICAgICAgcmV0dXJuICIhKCIgKyBtX2luZm8uY2FwdHVyZWRFeHByZXNzaW9uICsgIikiOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gbV9pbmZvLmNhcHR1cmVkRXhwcmVzc2lvbjsKICAgICB9CiAKICAgICBzdGQ6OnN0cmluZyBBc3NlcnRpb25SZXN1bHQ6OmdldEV4cHJlc3Npb25Jbk1hY3JvKCkgY29uc3QgewogICAgICAgICBzdGQ6OnN0cmluZyBleHByOwotICAgICAgICBpZiggbV9pbmZvLm1hY3JvTmFtZS5lbXB0eSgpICkKLSAgICAgICAgICAgIGV4cHIgPSBzdGF0aWNfY2FzdDxzdGQ6OnN0cmluZz4obV9pbmZvLmNhcHR1cmVkRXhwcmVzc2lvbik7CisgICAgICAgIGlmKCBtX2luZm8ubWFjcm9OYW1lWzBdID09IDAgKQorICAgICAgICAgICAgZXhwciA9IG1faW5mby5jYXB0dXJlZEV4cHJlc3Npb247CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZXhwci5yZXNlcnZlKCBtX2luZm8ubWFjcm9OYW1lLnNpemUoKSArIG1faW5mby5jYXB0dXJlZEV4cHJlc3Npb24uc2l6ZSgpICsgNCApOwogICAgICAgICAgICAgZXhwciArPSBtX2luZm8ubWFjcm9OYW1lOwpAQCAtODM0Miw2ICs2NDYzLDMyIEBACiAKIH0gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaAogLy8gZW5kIGNhdGNoX2Fzc2VydGlvbnJlc3VsdC5jcHAKKy8vIHN0YXJ0IGNhdGNoX2JlbmNobWFyay5jcHAKKworbmFtZXNwYWNlIENhdGNoIHsKKworICAgIGF1dG8gQmVuY2htYXJrTG9vcGVyOjpnZXRSZXNvbHV0aW9uKCkgLT4gdWludDY0X3QgeworICAgICAgICByZXR1cm4gZ2V0RXN0aW1hdGVkQ2xvY2tSZXNvbHV0aW9uKCkgKiBnZXRDdXJyZW50Q29udGV4dCgpLmdldENvbmZpZygpLT5iZW5jaG1hcmtSZXNvbHV0aW9uTXVsdGlwbGUoKTsKKyAgICB9CisKKyAgICB2b2lkIEJlbmNobWFya0xvb3Blcjo6cmVwb3J0U3RhcnQoKSB7CisgICAgICAgIGdldFJlc3VsdENhcHR1cmUoKS5iZW5jaG1hcmtTdGFydGluZyggeyBtX25hbWUgfSApOworICAgIH0KKyAgICBhdXRvIEJlbmNobWFya0xvb3Blcjo6bmVlZHNNb3JlSXRlcmF0aW9ucygpIC0+IGJvb2wgeworICAgICAgICBhdXRvIGVsYXBzZWQgPSBtX3RpbWVyLmdldEVsYXBzZWROYW5vc2Vjb25kcygpOworCisgICAgICAgIC8vIEV4cG9uZW50aWFsbHkgaW5jcmVhc2luZyBpdGVyYXRpb25zIHVudGlsIHdlJ3JlIGNvbmZpZGVudCBpbiBvdXIgdGltZXIgcmVzb2x1dGlvbgorICAgICAgICBpZiggZWxhcHNlZCA8IG1fcmVzb2x1dGlvbiApIHsKKyAgICAgICAgICAgIG1faXRlcmF0aW9uc1RvUnVuICo9IDEwOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBnZXRSZXN1bHRDYXB0dXJlKCkuYmVuY2htYXJrRW5kZWQoIHsgeyBtX25hbWUgfSwgbV9jb3VudCwgZWxhcHNlZCB9ICk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKK30gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaAorLy8gZW5kIGNhdGNoX2JlbmNobWFyay5jcHAKIC8vIHN0YXJ0IGNhdGNoX2NhcHR1cmVfbWF0Y2hlcnMuY3BwCiAKIG5hbWVzcGFjZSBDYXRjaCB7CkBAIC05Njg5LDE0ICs3ODM2LDkgQEAKICAgICAgICAgICAgICAgICAgICAgaWYoICFsaW5lLmVtcHR5KCkgJiYgIXN0YXJ0c1dpdGgoIGxpbmUsICcjJyApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYoICFzdGFydHNXaXRoKCBsaW5lLCAnIicgKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9ICciJyArIGxpbmUgKyAnIic7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25maWcudGVzdHNPclRhZ3MucHVzaF9iYWNrKCBsaW5lICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25maWcudGVzdHNPclRhZ3MuZW1wbGFjZV9iYWNrKCAiLCIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy50ZXN0c09yVGFncy5wdXNoX2JhY2soIGxpbmUgKyAnLCcgKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvL1JlbW92ZSBjb21tYSBpbiB0aGUgZW5kCi0gICAgICAgICAgICAgICAgaWYoIWNvbmZpZy50ZXN0c09yVGFncy5lbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBjb25maWcudGVzdHNPclRhZ3MuZXJhc2UoIGNvbmZpZy50ZXN0c09yVGFncy5lbmQoKS0xICk7Ci0KICAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VyUmVzdWx0OjpvayggUGFyc2VSZXN1bHRUeXBlOjpNYXRjaGVkICk7CiAgICAgICAgICAgICB9OwogICAgICAgICBhdXRvIGNvbnN0IHNldFRlc3RPcmRlciA9IFsmXSggc3RkOjpzdHJpbmcgY29uc3QmIG9yZGVyICkgewpAQCAtOTczMSwxNiArNzg3MywxNCBAQAogICAgICAgICAgICAgfTsKICAgICAgICAgYXV0byBjb25zdCBzZXRXYWl0Rm9yS2V5cHJlc3MgPSBbJl0oIHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXlwcmVzcyApIHsKICAgICAgICAgICAgICAgICBhdXRvIGtleXByZXNzTGMgPSB0b0xvd2VyKCBrZXlwcmVzcyApOwotICAgICAgICAgICAgICAgIGlmIChrZXlwcmVzc0xjID09ICJuZXZlciIpCi0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy53YWl0Rm9yS2V5cHJlc3MgPSBXYWl0Rm9yS2V5cHJlc3M6Ok5ldmVyOwotICAgICAgICAgICAgICAgIGVsc2UgaWYoIGtleXByZXNzTGMgPT0gInN0YXJ0IiApCisgICAgICAgICAgICAgICAgaWYoIGtleXByZXNzTGMgPT0gInN0YXJ0IiApCiAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy53YWl0Rm9yS2V5cHJlc3MgPSBXYWl0Rm9yS2V5cHJlc3M6OkJlZm9yZVN0YXJ0OwogICAgICAgICAgICAgICAgIGVsc2UgaWYoIGtleXByZXNzTGMgPT0gImV4aXQiICkKICAgICAgICAgICAgICAgICAgICAgY29uZmlnLndhaXRGb3JLZXlwcmVzcyA9IFdhaXRGb3JLZXlwcmVzczo6QmVmb3JlRXhpdDsKICAgICAgICAgICAgICAgICBlbHNlIGlmKCBrZXlwcmVzc0xjID09ICJib3RoIiApCiAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy53YWl0Rm9yS2V5cHJlc3MgPSBXYWl0Rm9yS2V5cHJlc3M6OkJlZm9yZVN0YXJ0QW5kRXhpdDsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZXJSZXN1bHQ6OnJ1bnRpbWVFcnJvciggImtleXByZXNzIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mOiBuZXZlciwgc3RhcnQsIGV4aXQgb3IgYm90aC4gJyIgKyBrZXlwcmVzcyArICInIG5vdCByZWNvZ25pc2VkIiApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VyUmVzdWx0OjpydW50aW1lRXJyb3IoICJrZXlwcmVzcyBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZjogc3RhcnQsIGV4aXQgb3IgYm90aC4gJyIgKyBrZXlwcmVzcyArICInIG5vdCByZWNvZ25pc2VkIiApOwogICAgICAgICAgICAgcmV0dXJuIFBhcnNlclJlc3VsdDo6b2soIFBhcnNlUmVzdWx0VHlwZTo6TWF0Y2hlZCApOwogICAgICAgICAgICAgfTsKICAgICAgICAgYXV0byBjb25zdCBzZXRWZXJib3NpdHkgPSBbJl0oIHN0ZDo6c3RyaW5nIGNvbnN0JiB2ZXJib3NpdHkgKSB7CkBAIC05ODQwLDI0ICs3OTgwLDEzIEBACiAgICAgICAgICAgICB8IE9wdCggY29uZmlnLmxpYklkZW50aWZ5ICkKICAgICAgICAgICAgICAgICBbIi0tbGliaWRlbnRpZnkiXQogICAgICAgICAgICAgICAgICggInJlcG9ydCBuYW1lIGFuZCB2ZXJzaW9uIGFjY29yZGluZyB0byBsaWJpZGVudGlmeSBzdGFuZGFyZCIgKQotICAgICAgICAgICAgfCBPcHQoIHNldFdhaXRGb3JLZXlwcmVzcywgIm5ldmVyfHN0YXJ0fGV4aXR8Ym90aCIgKQorICAgICAgICAgICAgfCBPcHQoIHNldFdhaXRGb3JLZXlwcmVzcywgInN0YXJ0fGV4aXR8Ym90aCIgKQogICAgICAgICAgICAgICAgIFsiLS13YWl0LWZvci1rZXlwcmVzcyJdCiAgICAgICAgICAgICAgICAgKCAid2FpdHMgZm9yIGEga2V5cHJlc3MgYmVmb3JlIGV4aXRpbmciICkKLSAgICAgICAgICAgIHwgT3B0KCBjb25maWcuYmVuY2htYXJrU2FtcGxlcywgInNhbXBsZXMiICkKLSAgICAgICAgICAgICAgICBbIi0tYmVuY2htYXJrLXNhbXBsZXMiXQotICAgICAgICAgICAgICAgICggIm51bWJlciBvZiBzYW1wbGVzIHRvIGNvbGxlY3QgKGRlZmF1bHQ6IDEwMCkiICkKLSAgICAgICAgICAgIHwgT3B0KCBjb25maWcuYmVuY2htYXJrUmVzYW1wbGVzLCAicmVzYW1wbGVzIiApCi0gICAgICAgICAgICAgICAgWyItLWJlbmNobWFyay1yZXNhbXBsZXMiXQotICAgICAgICAgICAgICAgICggIm51bWJlciBvZiByZXNhbXBsZXMgZm9yIHRoZSBib290c3RyYXAgKGRlZmF1bHQ6IDEwMDAwMCkiICkKLSAgICAgICAgICAgIHwgT3B0KCBjb25maWcuYmVuY2htYXJrQ29uZmlkZW5jZUludGVydmFsLCAiY29uZmlkZW5jZSBpbnRlcnZhbCIgKQotICAgICAgICAgICAgICAgIFsiLS1iZW5jaG1hcmstY29uZmlkZW5jZS1pbnRlcnZhbCJdCi0gICAgICAgICAgICAgICAgKCAiY29uZmlkZW5jZSBpbnRlcnZhbCBmb3IgdGhlIGJvb3RzdHJhcCAoYmV0d2VlbiAwIGFuZCAxLCBkZWZhdWx0OiAwLjk1KSIgKQotICAgICAgICAgICAgfCBPcHQoIGNvbmZpZy5iZW5jaG1hcmtOb0FuYWx5c2lzICkKLSAgICAgICAgICAgICAgICBbIi0tYmVuY2htYXJrLW5vLWFuYWx5c2lzIl0KLSAgICAgICAgICAgICAgICAoICJwZXJmb3JtIG9ubHkgbWVhc3VyZW1lbnRzOyBkbyBub3QgcGVyZm9ybSBhbnkgYW5hbHlzaXMiICkKLSAgICAgICAgICAgIHwgT3B0KCBjb25maWcuYmVuY2htYXJrV2FybXVwVGltZSwgImJlbmNobWFya1dhcm11cFRpbWUiICkKLSAgICAgICAgICAgICAgICBbIi0tYmVuY2htYXJrLXdhcm11cC10aW1lIl0KLSAgICAgICAgICAgICAgICAoICJhbW91bnQgb2YgdGltZSBpbiBtaWxsaXNlY29uZHMgc3BlbnQgb24gd2FybWluZyB1cCBlYWNoIHRlc3QgKGRlZmF1bHQ6IDEwMCkiICkKKyAgICAgICAgICAgIHwgT3B0KCBjb25maWcuYmVuY2htYXJrUmVzb2x1dGlvbk11bHRpcGxlLCAibXVsdGlwbGllciIgKQorICAgICAgICAgICAgICAgIFsiLS1iZW5jaG1hcmstcmVzb2x1dGlvbi1tdWx0aXBsZSJdCisgICAgICAgICAgICAgICAgKCAibXVsdGlwbGUgb2YgY2xvY2sgcmVzb2x1dGlvbiB0byBydW4gYmVuY2htYXJrcyIgKQorCiAgICAgICAgICAgICB8IEFyZyggY29uZmlnLnRlc3RzT3JUYWdzLCAidGVzdCBuYW1lfHBhdHRlcm58dGFncyIgKQogICAgICAgICAgICAgICAgICggIndoaWNoIHRlc3Qgb3IgdGVzdHMgdG8gdXNlIiApOwogCkBAIC05ODczLDYgKzgwMDIsOSBAQAogCiBuYW1lc3BhY2UgQ2F0Y2ggewogCisgICAgYm9vbCBTb3VyY2VMaW5lSW5mbzo6ZW1wdHkoKSBjb25zdCBub2V4Y2VwdCB7CisgICAgICAgIHJldHVybiBmaWxlWzBdID09ICdcMCc7CisgICAgfQogICAgIGJvb2wgU291cmNlTGluZUluZm86Om9wZXJhdG9yID09ICggU291cmNlTGluZUluZm8gY29uc3QmIG90aGVyICkgY29uc3Qgbm9leGNlcHQgewogICAgICAgICByZXR1cm4gbGluZSA9PSBvdGhlci5saW5lICYmIChmaWxlID09IG90aGVyLmZpbGUgfHwgc3RkOjpzdHJjbXAoZmlsZSwgb3RoZXIuZmlsZSkgPT0gMCk7CiAgICAgfQpAQCAtOTkwOCwyMyArODA0MCwxMSBAQAogICAgIDogICBtX2RhdGEoIGRhdGEgKSwKICAgICAgICAgbV9zdHJlYW0oIG9wZW5TdHJlYW0oKSApCiAgICAgewotICAgICAgICAvLyBXZSBuZWVkIHRvIHRyaW0gZmlsdGVyIHNwZWNzIHRvIGF2b2lkIHRyb3VibGUgd2l0aCBzdXBlcmZsdW91cwotICAgICAgICAvLyB3aGl0ZXNwYWNlIChlc3AuIGltcG9ydGFudCBmb3IgYmRkIG1hY3JvcywgYXMgdGhvc2UgYXJlIG1hbnVhbGx5Ci0gICAgICAgIC8vIGFsaWduZWQgd2l0aCB3aGl0ZXNwYWNlKS4KLQotICAgICAgICBmb3IgKGF1dG8mIGVsZW0gOiBtX2RhdGEudGVzdHNPclRhZ3MpIHsKLSAgICAgICAgICAgIGVsZW0gPSB0cmltKGVsZW0pOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbSA6IG1fZGF0YS5zZWN0aW9uc1RvUnVuKSB7Ci0gICAgICAgICAgICBlbGVtID0gdHJpbShlbGVtKTsKLSAgICAgICAgfQotCiAgICAgICAgIFRlc3RTcGVjUGFyc2VyIHBhcnNlcihJVGFnQWxpYXNSZWdpc3RyeTo6Z2V0KCkpOwotICAgICAgICBpZiAoIW1fZGF0YS50ZXN0c09yVGFncy5lbXB0eSgpKSB7CisgICAgICAgIGlmICghZGF0YS50ZXN0c09yVGFncy5lbXB0eSgpKSB7CiAgICAgICAgICAgICBtX2hhc1Rlc3RGaWx0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvciAoYXV0byBjb25zdCYgdGVzdE9yVGFncyA6IG1fZGF0YS50ZXN0c09yVGFncykgewotICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZSh0ZXN0T3JUYWdzKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciggYXV0byBjb25zdCYgdGVzdE9yVGFncyA6IGRhdGEudGVzdHNPclRhZ3MgKQorICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZSggdGVzdE9yVGFncyApOwogICAgICAgICB9CiAgICAgICAgIG1fdGVzdFNwZWMgPSBwYXJzZXIudGVzdFNwZWMoKTsKICAgICB9CkBAIC05OTU5LDE4ICs4MDc5LDEzIEBACiAgICAgU2hvd0R1cmF0aW9uczo6T3JOb3QgQ29uZmlnOjpzaG93RHVyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnNob3dEdXJhdGlvbnM7IH0KICAgICBSdW5UZXN0czo6SW5XaGF0T3JkZXIgQ29uZmlnOjpydW5PcmRlcigpIGNvbnN0ICAgICB7IHJldHVybiBtX2RhdGEucnVuT3JkZXI7IH0KICAgICB1bnNpZ25lZCBpbnQgQ29uZmlnOjpybmdTZWVkKCkgY29uc3QgICAgICAgICAgICAgICB7IHJldHVybiBtX2RhdGEucm5nU2VlZDsgfQorICAgIGludCBDb25maWc6OmJlbmNobWFya1Jlc29sdXRpb25NdWx0aXBsZSgpIGNvbnN0ICAgIHsgcmV0dXJuIG1fZGF0YS5iZW5jaG1hcmtSZXNvbHV0aW9uTXVsdGlwbGU7IH0KICAgICBVc2VDb2xvdXI6Olllc09yTm8gQ29uZmlnOjp1c2VDb2xvdXIoKSBjb25zdCAgICAgICB7IHJldHVybiBtX2RhdGEudXNlQ29sb3VyOyB9CiAgICAgYm9vbCBDb25maWc6OnNob3VsZERlYnVnQnJlYWsoKSBjb25zdCAgICAgICAgICAgICAgeyByZXR1cm4gbV9kYXRhLnNob3VsZERlYnVnQnJlYWs7IH0KICAgICBpbnQgQ29uZmlnOjphYm9ydEFmdGVyKCkgY29uc3QgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBtX2RhdGEuYWJvcnRBZnRlcjsgfQogICAgIGJvb2wgQ29uZmlnOjpzaG93SW52aXNpYmxlcygpIGNvbnN0ICAgICAgICAgICAgICAgIHsgcmV0dXJuIG1fZGF0YS5zaG93SW52aXNpYmxlczsgfQogICAgIFZlcmJvc2l0eSBDb25maWc6OnZlcmJvc2l0eSgpIGNvbnN0ICAgICAgICAgICAgICAgIHsgcmV0dXJuIG1fZGF0YS52ZXJib3NpdHk7IH0KIAotICAgIGJvb2wgQ29uZmlnOjpiZW5jaG1hcmtOb0FuYWx5c2lzKCkgY29uc3QgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbV9kYXRhLmJlbmNobWFya05vQW5hbHlzaXM7IH0KLSAgICBpbnQgQ29uZmlnOjpiZW5jaG1hcmtTYW1wbGVzKCkgY29uc3QgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG1fZGF0YS5iZW5jaG1hcmtTYW1wbGVzOyB9Ci0gICAgZG91YmxlIENvbmZpZzo6YmVuY2htYXJrQ29uZmlkZW5jZUludGVydmFsKCkgY29uc3QgICAgICAgICAgICB7IHJldHVybiBtX2RhdGEuYmVuY2htYXJrQ29uZmlkZW5jZUludGVydmFsOyB9Ci0gICAgdW5zaWduZWQgaW50IENvbmZpZzo6YmVuY2htYXJrUmVzYW1wbGVzKCkgY29uc3QgICAgICAgICAgICAgICB7IHJldHVybiBtX2RhdGEuYmVuY2htYXJrUmVzYW1wbGVzOyB9Ci0gICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBDb25maWc6OmJlbmNobWFya1dhcm11cFRpbWUoKSBjb25zdCB7IHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKG1fZGF0YS5iZW5jaG1hcmtXYXJtdXBUaW1lKTsgfQotCiAgICAgSVN0cmVhbSBjb25zdCogQ29uZmlnOjpvcGVuU3RyZWFtKCkgewogICAgICAgICByZXR1cm4gQ2F0Y2g6Om1ha2VTdHJlYW0obV9kYXRhLm91dHB1dEZpbGVuYW1lKTsKICAgICB9CkBAIC0xMDAxMCw3ICs4MTI1LDcgQEAKICAgICAgICAgfTsKIAogICAgICAgICBzdHJ1Y3QgTm9Db2xvdXJJbXBsIDogSUNvbG91ckltcGwgewotICAgICAgICAgICAgdm9pZCB1c2UoIENvbG91cjo6Q29kZSApIG92ZXJyaWRlIHt9CisgICAgICAgICAgICB2b2lkIHVzZSggQ29sb3VyOjpDb2RlICkge30KIAogICAgICAgICAgICAgc3RhdGljIElDb2xvdXJJbXBsKiBpbnN0YW5jZSgpIHsKICAgICAgICAgICAgICAgICBzdGF0aWMgTm9Db2xvdXJJbXBsIHNfaW5zdGFuY2U7CkBAIC0xMDE0Miw3ICs4MjU3LDcgQEAKIAogICAgIGJvb2wgdXNlQ29sb3VyT25QbGF0Zm9ybSgpIHsKICAgICAgICAgcmV0dXJuCi0jaWYgZGVmaW5lZChDQVRDSF9QTEFURk9STV9NQUMpIHx8IGRlZmluZWQoQ0FUQ0hfUExBVEZPUk1fSVBIT05FKQorI2lmZGVmIENBVENIX1BMQVRGT1JNX01BQwogICAgICAgICAgICAgIWlzRGVidWdnZXJBY3RpdmUoKSAmJgogI2VuZGlmCiAjaWYgIShkZWZpbmVkKF9fREpHUFBfXykgJiYgZGVmaW5lZChfX1NUUklDVF9BTlNJX18pKQpAQCAtMTAxODMsMTMgKzgyOTgsMTMgQEAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKICAgICBDb2xvdXI6OkNvbG91ciggQ29kZSBfY29sb3VyQ29kZSApIHsgdXNlKCBfY29sb3VyQ29kZSApOyB9Ci0gICAgQ29sb3VyOjpDb2xvdXIoIENvbG91ciYmIG90aGVyICkgbm9leGNlcHQgewotICAgICAgICBtX21vdmVkID0gb3RoZXIubV9tb3ZlZDsKLSAgICAgICAgb3RoZXIubV9tb3ZlZCA9IHRydWU7CisgICAgQ29sb3VyOjpDb2xvdXIoIENvbG91ciYmIHJocyApIG5vZXhjZXB0IHsKKyAgICAgICAgbV9tb3ZlZCA9IHJocy5tX21vdmVkOworICAgICAgICByaHMubV9tb3ZlZCA9IHRydWU7CiAgICAgfQotICAgIENvbG91ciYgQ29sb3VyOjpvcGVyYXRvcj0oIENvbG91ciYmIG90aGVyICkgbm9leGNlcHQgewotICAgICAgICBtX21vdmVkID0gb3RoZXIubV9tb3ZlZDsKLSAgICAgICAgb3RoZXIubV9tb3ZlZCAgPSB0cnVlOworICAgIENvbG91ciYgQ29sb3VyOjpvcGVyYXRvcj0oIENvbG91ciYmIHJocyApIG5vZXhjZXB0IHsKKyAgICAgICAgbV9tb3ZlZCA9IHJocy5tX21vdmVkOworICAgICAgICByaHMubV9tb3ZlZCAgPSB0cnVlOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCkBAIC0xMDE5NywxMyArODMxMiw3IEBACiAKICAgICB2b2lkIENvbG91cjo6dXNlKCBDb2RlIF9jb2xvdXJDb2RlICkgewogICAgICAgICBzdGF0aWMgSUNvbG91ckltcGwqIGltcGwgPSBwbGF0Zm9ybUNvbG91ckluc3RhbmNlKCk7Ci0gICAgICAgIC8vIFN0cmljdGx5IHNwZWFraW5nLCB0aGlzIGNhbm5vdCBwb3NzaWJseSBoYXBwZW4uCi0gICAgICAgIC8vIEhvd2V2ZXIsIHVuZGVyIHNvbWUgY29uZGl0aW9ucyBpdCBkb2VzIGhhcHBlbiAoc2VlICMxNjI2KSwKLSAgICAgICAgLy8gYW5kIHRoaXMgY2hhbmdlIGlzIHNtYWxsIGVub3VnaCB0aGF0IHdlIGNhbiBsZXQgcHJhY3RpY2FsaXR5Ci0gICAgICAgIC8vIHRyaXVtcGggb3ZlciBwdXJpdHkgaW4gdGhpcyBjYXNlLgotICAgICAgICBpZiAoaW1wbCAhPSBudWxscHRyKSB7Ci0gICAgICAgICAgICBpbXBsLT51c2UoIF9jb2xvdXJDb2RlICk7Ci0gICAgICAgIH0KKyAgICAgICAgaW1wbC0+dXNlKCBfY29sb3VyQ29kZSApOwogICAgIH0KIAogICAgIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3IgPDwgKCBzdGQ6Om9zdHJlYW0mIG9zLCBDb2xvdXIgY29uc3QmICkgewpAQCAtMTAyNzAsMTIgKzgzNzksNiBAQAogICAgIElDb250ZXh0Ojp+SUNvbnRleHQoKSA9IGRlZmF1bHQ7CiAgICAgSU11dGFibGVDb250ZXh0Ojp+SU11dGFibGVDb250ZXh0KCkgPSBkZWZhdWx0OwogICAgIENvbnRleHQ6On5Db250ZXh0KCkgPSBkZWZhdWx0OwotCi0gICAgU2ltcGxlUGNnMzImIHJuZygpIHsKLSAgICAgICAgc3RhdGljIFNpbXBsZVBjZzMyIHNfcm5nOwotICAgICAgICByZXR1cm4gc19ybmc7Ci0gICAgfQotCiB9CiAvLyBlbmQgY2F0Y2hfY29udGV4dC5jcHAKIC8vIHN0YXJ0IGNhdGNoX2RlYnVnX2NvbnNvbGUuY3BwCkBAIC0xMDI4OSwxNiArODM5Miw3IEBACiB9CiAKIC8vIGVuZCBjYXRjaF9kZWJ1Z19jb25zb2xlLmgKLSNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19BTkRST0lEX0xPR1dSSVRFKQotI2luY2x1ZGUgPGFuZHJvaWQvbG9nLmg+Ci0KLSAgICBuYW1lc3BhY2UgQ2F0Y2ggewotICAgICAgICB2b2lkIHdyaXRlVG9EZWJ1Z0NvbnNvbGUoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0ZXh0ICkgewotICAgICAgICAgICAgX19hbmRyb2lkX2xvZ193cml0ZSggQU5EUk9JRF9MT0dfREVCVUcsICJDYXRjaCIsIHRleHQuY19zdHIoKSApOwotICAgICAgICB9Ci0gICAgfQotCi0jZWxpZiBkZWZpbmVkKENBVENIX1BMQVRGT1JNX1dJTkRPV1MpCisjaWZkZWYgQ0FUQ0hfUExBVEZPUk1fV0lORE9XUwogCiAgICAgbmFtZXNwYWNlIENhdGNoIHsKICAgICAgICAgdm9pZCB3cml0ZVRvRGVidWdDb25zb2xlKCBzdGQ6OnN0cmluZyBjb25zdCYgdGV4dCApIHsKQEAgLTEwMzE5LDcgKzg0MTMsNyBAQAogLy8gZW5kIGNhdGNoX2RlYnVnX2NvbnNvbGUuY3BwCiAvLyBzdGFydCBjYXRjaF9kZWJ1Z2dlci5jcHAKIAotI2lmIGRlZmluZWQoQ0FUQ0hfUExBVEZPUk1fTUFDKSB8fCBkZWZpbmVkKENBVENIX1BMQVRGT1JNX0lQSE9ORSkKKyNpZmRlZiBDQVRDSF9QTEFURk9STV9NQUMKIAogIyAgaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjICBpbmNsdWRlIDxzdGRib29sLmg+CkBAIC0xMDQ0Nyw4ICs4NTQxLDYgQEAKIC8vIGVuZCBjYXRjaF9kZWNvbXBvc2VyLmNwcAogLy8gc3RhcnQgY2F0Y2hfZW5mb3JjZS5jcHAKIAotI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KLQogbmFtZXNwYWNlIENhdGNoIHsKICNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlNfQ1VTVE9NX0hBTkRMRVIpCiAgICAgW1tub3JldHVybl1dCkBAIC0xMDQ1OCwxMTYgKzg1NTAsOCBAQAogICAgICAgICBzdGQ6OnRlcm1pbmF0ZSgpOwogICAgIH0KICNlbmRpZgotCi0gICAgW1tub3JldHVybl1dCi0gICAgdm9pZCB0aHJvd19sb2dpY19lcnJvcihzdGQ6OnN0cmluZyBjb25zdCYgbXNnKSB7Ci0gICAgICAgIHRocm93X2V4Y2VwdGlvbihzdGQ6OmxvZ2ljX2Vycm9yKG1zZykpOwotICAgIH0KLQotICAgIFtbbm9yZXR1cm5dXQotICAgIHZvaWQgdGhyb3dfZG9tYWluX2Vycm9yKHN0ZDo6c3RyaW5nIGNvbnN0JiBtc2cpIHsKLSAgICAgICAgdGhyb3dfZXhjZXB0aW9uKHN0ZDo6ZG9tYWluX2Vycm9yKG1zZykpOwotICAgIH0KLQotICAgIFtbbm9yZXR1cm5dXQotICAgIHZvaWQgdGhyb3dfcnVudGltZV9lcnJvcihzdGQ6OnN0cmluZyBjb25zdCYgbXNnKSB7Ci0gICAgICAgIHRocm93X2V4Y2VwdGlvbihzdGQ6OnJ1bnRpbWVfZXJyb3IobXNnKSk7Ci0gICAgfQotCiB9IC8vIG5hbWVzcGFjZSBDYXRjaDsKIC8vIGVuZCBjYXRjaF9lbmZvcmNlLmNwcAotLy8gc3RhcnQgY2F0Y2hfZW51bV92YWx1ZXNfcmVnaXN0cnkuY3BwCi0vLyBzdGFydCBjYXRjaF9lbnVtX3ZhbHVlc19yZWdpc3RyeS5oCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8bWVtb3J5PgotCi1uYW1lc3BhY2UgQ2F0Y2ggewotCi0gICAgbmFtZXNwYWNlIERldGFpbCB7Ci0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEVudW1JbmZvPiBtYWtlRW51bUluZm8oIFN0cmluZ1JlZiBlbnVtTmFtZSwgU3RyaW5nUmVmIGFsbFZhbHVlTmFtZXMsIHN0ZDo6dmVjdG9yPGludD4gY29uc3QmIHZhbHVlcyApOwotCi0gICAgICAgIGNsYXNzIEVudW1WYWx1ZXNSZWdpc3RyeSA6IHB1YmxpYyBJTXV0YWJsZUVudW1WYWx1ZXNSZWdpc3RyeSB7Ci0KLSAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxFbnVtSW5mbz4+IG1fZW51bUluZm9zOwotCi0gICAgICAgICAgICBFbnVtSW5mbyBjb25zdCYgcmVnaXN0ZXJFbnVtKCBTdHJpbmdSZWYgZW51bU5hbWUsIFN0cmluZ1JlZiBhbGxFbnVtcywgc3RkOjp2ZWN0b3I8aW50PiBjb25zdCYgdmFsdWVzKSBvdmVycmlkZTsKLSAgICAgICAgfTsKLQotICAgICAgICBzdGQ6OnZlY3RvcjxTdHJpbmdSZWY+IHBhcnNlRW51bXMoIFN0cmluZ1JlZiBlbnVtcyApOwotCi0gICAgfSAvLyBEZXRhaWwKLQotfSAvLyBDYXRjaAotCi0vLyBlbmQgY2F0Y2hfZW51bV92YWx1ZXNfcmVnaXN0cnkuaAotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0KLSAgICBJTXV0YWJsZUVudW1WYWx1ZXNSZWdpc3RyeTo6fklNdXRhYmxlRW51bVZhbHVlc1JlZ2lzdHJ5KCkge30KLQotICAgIG5hbWVzcGFjZSBEZXRhaWwgewotCi0gICAgICAgIG5hbWVzcGFjZSB7Ci0gICAgICAgICAgICAvLyBFeHRyYWN0cyB0aGUgYWN0dWFsIG5hbWUgcGFydCBvZiBhbiBlbnVtIGluc3RhbmNlCi0gICAgICAgICAgICAvLyBJbiBvdGhlciB3b3JkcywgaXQgcmV0dXJucyB0aGUgQmx1ZSBwYXJ0IG9mIEJpa2VzaGVkOjpDb2xvdXI6OkJsdWUKLSAgICAgICAgICAgIFN0cmluZ1JlZiBleHRyYWN0SW5zdGFuY2VOYW1lKFN0cmluZ1JlZiBlbnVtSW5zdGFuY2UpIHsKLSAgICAgICAgICAgICAgICAvLyBGaW5kIGxhc3Qgb2NjdXJlbmNlIG9mICI6IgotICAgICAgICAgICAgICAgIHNpemVfdCBuYW1lX3N0YXJ0ID0gZW51bUluc3RhbmNlLnNpemUoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAobmFtZV9zdGFydCA+IDAgJiYgZW51bUluc3RhbmNlW25hbWVfc3RhcnQgLSAxXSAhPSAnOicpIHsKLSAgICAgICAgICAgICAgICAgICAgLS1uYW1lX3N0YXJ0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZW51bUluc3RhbmNlLnN1YnN0cihuYW1lX3N0YXJ0LCBlbnVtSW5zdGFuY2Uuc2l6ZSgpIC0gbmFtZV9zdGFydCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBzdGQ6OnZlY3RvcjxTdHJpbmdSZWY+IHBhcnNlRW51bXMoIFN0cmluZ1JlZiBlbnVtcyApIHsKLSAgICAgICAgICAgIGF1dG8gZW51bVZhbHVlcyA9IHNwbGl0U3RyaW5nUmVmKCBlbnVtcywgJywnICk7Ci0gICAgICAgICAgICBzdGQ6OnZlY3RvcjxTdHJpbmdSZWY+IHBhcnNlZDsKLSAgICAgICAgICAgIHBhcnNlZC5yZXNlcnZlKCBlbnVtVmFsdWVzLnNpemUoKSApOwotICAgICAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiBlbnVtVmFsdWUgOiBlbnVtVmFsdWVzICkgewotICAgICAgICAgICAgICAgIHBhcnNlZC5wdXNoX2JhY2sodHJpbShleHRyYWN0SW5zdGFuY2VOYW1lKGVudW1WYWx1ZSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBFbnVtSW5mbzo6fkVudW1JbmZvKCkge30KLQotICAgICAgICBTdHJpbmdSZWYgRW51bUluZm86Omxvb2t1cCggaW50IHZhbHVlICkgY29uc3QgewotICAgICAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiB2YWx1ZVRvTmFtZSA6IG1fdmFsdWVzICkgewotICAgICAgICAgICAgICAgIGlmKCB2YWx1ZVRvTmFtZS5maXJzdCA9PSB2YWx1ZSApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVRvTmFtZS5zZWNvbmQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gInsqKiB1bmV4cGVjdGVkIGVudW0gdmFsdWUgKip9Il9zcjsKLSAgICAgICAgfQotCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnVtSW5mbz4gbWFrZUVudW1JbmZvKCBTdHJpbmdSZWYgZW51bU5hbWUsIFN0cmluZ1JlZiBhbGxWYWx1ZU5hbWVzLCBzdGQ6OnZlY3RvcjxpbnQ+IGNvbnN0JiB2YWx1ZXMgKSB7Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RW51bUluZm8+IGVudW1JbmZvKCBuZXcgRW51bUluZm8gKTsKLSAgICAgICAgICAgIGVudW1JbmZvLT5tX25hbWUgPSBlbnVtTmFtZTsKLSAgICAgICAgICAgIGVudW1JbmZvLT5tX3ZhbHVlcy5yZXNlcnZlKCB2YWx1ZXMuc2l6ZSgpICk7Ci0KLSAgICAgICAgICAgIGNvbnN0IGF1dG8gdmFsdWVOYW1lcyA9IENhdGNoOjpEZXRhaWw6OnBhcnNlRW51bXMoIGFsbFZhbHVlTmFtZXMgKTsKLSAgICAgICAgICAgIGFzc2VydCggdmFsdWVOYW1lcy5zaXplKCkgPT0gdmFsdWVzLnNpemUoKSApOwotICAgICAgICAgICAgc3RkOjpzaXplX3QgaSA9IDA7Ci0gICAgICAgICAgICBmb3IoIGF1dG8gdmFsdWUgOiB2YWx1ZXMgKQotICAgICAgICAgICAgICAgIGVudW1JbmZvLT5tX3ZhbHVlcy5lbXBsYWNlX2JhY2sodmFsdWUsIHZhbHVlTmFtZXNbaSsrXSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBlbnVtSW5mbzsKLSAgICAgICAgfQotCi0gICAgICAgIEVudW1JbmZvIGNvbnN0JiBFbnVtVmFsdWVzUmVnaXN0cnk6OnJlZ2lzdGVyRW51bSggU3RyaW5nUmVmIGVudW1OYW1lLCBTdHJpbmdSZWYgYWxsVmFsdWVOYW1lcywgc3RkOjp2ZWN0b3I8aW50PiBjb25zdCYgdmFsdWVzICkgewotICAgICAgICAgICAgbV9lbnVtSW5mb3MucHVzaF9iYWNrKG1ha2VFbnVtSW5mbyhlbnVtTmFtZSwgYWxsVmFsdWVOYW1lcywgdmFsdWVzKSk7Ci0gICAgICAgICAgICByZXR1cm4gKm1fZW51bUluZm9zLmJhY2soKTsKLSAgICAgICAgfQotCi0gICAgfSAvLyBEZXRhaWwKLX0gLy8gQ2F0Y2gKLQotLy8gZW5kIGNhdGNoX2VudW1fdmFsdWVzX3JlZ2lzdHJ5LmNwcAogLy8gc3RhcnQgY2F0Y2hfZXJybm9fZ3VhcmQuY3BwCiAKICNpbmNsdWRlIDxjZXJybm8+CkBAIC0xMDc2Miw3ICs4NzQ2LDcgQEAKIAogICAgIC8vIDMya2IgZm9yIHRoZSBhbHRlcm5hdGUgc3RhY2sgc2VlbXMgdG8gYmUgc3VmZmljaWVudC4gSG93ZXZlciwgdGhpcyB2YWx1ZQogICAgIC8vIGlzIGV4cGVyaW1lbnRhbGx5IGRldGVybWluZWQsIHNvIHRoYXQncyBub3QgZ3VhcmFudGVlZC4KLSAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6c2l6ZV90IHNpZ1N0YWNrU2l6ZSA9IDMyNzY4ID49IE1JTlNJR1NUS1NaID8gMzI3NjggOiBNSU5TSUdTVEtTWjsKKyAgICBjb25zdGV4cHIgc3RhdGljIHN0ZDo6c2l6ZV90IHNpZ1N0YWNrU2l6ZSA9IDMyNzY4ID49IE1JTlNJR1NUS1NaID8gMzI3NjggOiBNSU5TSUdTVEtTWjsKIAogICAgIHN0YXRpYyBTaWduYWxEZWZzIHNpZ25hbERlZnNbXSA9IHsKICAgICAgICAgeyBTSUdJTlQsICAiU0lHSU5UIC0gVGVybWluYWwgaW50ZXJydXB0IHNpZ25hbCIgfSwKQEAgLTEwODM5LDYgKzg4MjMsMjIgQEAKIC8vIGVuZCBjYXRjaF9mYXRhbF9jb25kaXRpb24uY3BwCiAvLyBzdGFydCBjYXRjaF9nZW5lcmF0b3JzLmNwcAogCisvLyBzdGFydCBjYXRjaF9yYW5kb21fbnVtYmVyX2dlbmVyYXRvci5oCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8cmFuZG9tPgorCituYW1lc3BhY2UgQ2F0Y2ggeworCisgICAgc3RydWN0IElDb25maWc7CisKKyAgICBzdGQ6Om10MTk5MzcmIHJuZygpOworICAgIHZvaWQgc2VlZFJuZyggSUNvbmZpZyBjb25zdCYgY29uZmlnICk7CisgICAgdW5zaWduZWQgaW50IHJuZ1NlZWQoKTsKKworfQorCisvLyBlbmQgY2F0Y2hfcmFuZG9tX251bWJlcl9nZW5lcmF0b3IuaAogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxzZXQ+CiAKQEAgLTEwOTExLDE2ICs4OTExLDEwIEBACiAKICAgICAgICAgdm9pZCBub01hdGNoaW5nVGVzdENhc2VzKCBzdGQ6OnN0cmluZyBjb25zdCYgc3BlYyApIG92ZXJyaWRlOwogCi0gICAgICAgIHZvaWQgcmVwb3J0SW52YWxpZEFyZ3VtZW50cyhzdGQ6OnN0cmluZyBjb25zdCZhcmcpIG92ZXJyaWRlOwotCiAgICAgICAgIHN0YXRpYyBzdGQ6OnNldDxWZXJib3NpdHk+IGdldFN1cHBvcnRlZFZlcmJvc2l0aWVzKCk7CiAKLSNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HKQotICAgICAgICB2b2lkIGJlbmNobWFya1ByZXBhcmluZyhzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgYmVuY2htYXJrU3RhcnRpbmcoIEJlbmNobWFya0luZm8gY29uc3QmIGJlbmNobWFya0luZm8gKSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBiZW5jaG1hcmtFbmRlZCggQmVuY2htYXJrU3RhdHM8PiBjb25zdCYgYmVuY2htYXJrU3RhdHMgKSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBiZW5jaG1hcmtGYWlsZWQoc3RkOjpzdHJpbmcgY29uc3QmKSBvdmVycmlkZTsKLSNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORworICAgICAgICB2b2lkIGJlbmNobWFya0VuZGVkKCBCZW5jaG1hcmtTdGF0cyBjb25zdCYgYmVuY2htYXJrU3RhdHMgKSBvdmVycmlkZTsKIAogICAgICAgICB2b2lkIHRlc3RSdW5TdGFydGluZyggVGVzdFJ1bkluZm8gY29uc3QmIHRlc3RSdW5JbmZvICkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgdGVzdEdyb3VwU3RhcnRpbmcoIEdyb3VwSW5mbyBjb25zdCYgZ3JvdXBJbmZvICkgb3ZlcnJpZGU7CkBAIC0xMTEzMCw3ICs5MTI0LDcgQEAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKICAgICBzdGQ6OnNpemVfdCBsaXN0VGVzdHMoIENvbmZpZyBjb25zdCYgY29uZmlnICkgewotICAgICAgICBUZXN0U3BlYyBjb25zdCYgdGVzdFNwZWMgPSBjb25maWcudGVzdFNwZWMoKTsKKyAgICAgICAgVGVzdFNwZWMgdGVzdFNwZWMgPSBjb25maWcudGVzdFNwZWMoKTsKICAgICAgICAgaWYoIGNvbmZpZy5oYXNUZXN0RmlsdGVycygpICkKICAgICAgICAgICAgIENhdGNoOjpjb3V0KCkgPDwgIk1hdGNoaW5nIHRlc3QgY2FzZXM6XG4iOwogICAgICAgICBlbHNlIHsKQEAgLTExMTY0LDcgKzkxNTgsNyBAQAogICAgIH0KIAogICAgIHN0ZDo6c2l6ZV90IGxpc3RUZXN0c05hbWVzT25seSggQ29uZmlnIGNvbnN0JiBjb25maWcgKSB7Ci0gICAgICAgIFRlc3RTcGVjIGNvbnN0JiB0ZXN0U3BlYyA9IGNvbmZpZy50ZXN0U3BlYygpOworICAgICAgICBUZXN0U3BlYyB0ZXN0U3BlYyA9IGNvbmZpZy50ZXN0U3BlYygpOwogICAgICAgICBzdGQ6OnNpemVfdCBtYXRjaGVkVGVzdHMgPSAwOwogICAgICAgICBzdGQ6OnZlY3RvcjxUZXN0Q2FzZT4gbWF0Y2hlZFRlc3RDYXNlcyA9IGZpbHRlclRlc3RzKCBnZXRBbGxUZXN0Q2FzZXNTb3J0ZWQoIGNvbmZpZyApLCB0ZXN0U3BlYywgY29uZmlnICk7CiAgICAgICAgIGZvciggYXV0byBjb25zdCYgdGVzdENhc2VJbmZvIDogbWF0Y2hlZFRlc3RDYXNlcyApIHsKQEAgLTExMTg2LDIzICs5MTgwLDE0IEBACiAgICAgfQogCiAgICAgc3RkOjpzdHJpbmcgVGFnSW5mbzo6YWxsKCkgY29uc3QgewotICAgICAgICBzaXplX3Qgc2l6ZSA9IDA7Ci0gICAgICAgIGZvciAoYXV0byBjb25zdCYgc3BlbGxpbmcgOiBzcGVsbGluZ3MpIHsKLSAgICAgICAgICAgIC8vIEFkZCAyIGZvciB0aGUgYnJhY2tlcwotICAgICAgICAgICAgc2l6ZSArPSBzcGVsbGluZy5zaXplKCkgKyAyOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RkOjpzdHJpbmcgb3V0OyBvdXQucmVzZXJ2ZShzaXplKTsKLSAgICAgICAgZm9yIChhdXRvIGNvbnN0JiBzcGVsbGluZyA6IHNwZWxsaW5ncykgewotICAgICAgICAgICAgb3V0ICs9ICdbJzsKLSAgICAgICAgICAgIG91dCArPSBzcGVsbGluZzsKLSAgICAgICAgICAgIG91dCArPSAnXSc7Ci0gICAgICAgIH0KKyAgICAgICAgc3RkOjpzdHJpbmcgb3V0OworICAgICAgICBmb3IoIGF1dG8gY29uc3QmIHNwZWxsaW5nIDogc3BlbGxpbmdzICkKKyAgICAgICAgICAgIG91dCArPSAiWyIgKyBzcGVsbGluZyArICJdIjsKICAgICAgICAgcmV0dXJuIG91dDsKICAgICB9CiAKICAgICBzdGQ6OnNpemVfdCBsaXN0VGFncyggQ29uZmlnIGNvbnN0JiBjb25maWcgKSB7Ci0gICAgICAgIFRlc3RTcGVjIGNvbnN0JiB0ZXN0U3BlYyA9IGNvbmZpZy50ZXN0U3BlYygpOworICAgICAgICBUZXN0U3BlYyB0ZXN0U3BlYyA9IGNvbmZpZy50ZXN0U3BlYygpOwogICAgICAgICBpZiggY29uZmlnLmhhc1Rlc3RGaWx0ZXJzKCkgKQogICAgICAgICAgICAgQ2F0Y2g6OmNvdXQoKSA8PCAiVGFncyBmb3IgbWF0Y2hpbmcgdGVzdCBjYXNlczpcbiI7CiAgICAgICAgIGVsc2UgewpAQCAtMTEyOTYsMjkgKzkyODEsNiBAQAogCiB9IC8vIG5hbWVzcGFjZSBDYXRjaAogLy8gZW5kIGNhdGNoX21hdGNoZXJzLmNwcAotLy8gc3RhcnQgY2F0Y2hfbWF0Y2hlcnNfZXhjZXB0aW9uLmNwcAotCi1uYW1lc3BhY2UgQ2F0Y2ggewotbmFtZXNwYWNlIE1hdGNoZXJzIHsKLW5hbWVzcGFjZSBFeGNlcHRpb24gewotCi1ib29sIEV4Y2VwdGlvbk1lc3NhZ2VNYXRjaGVyOjptYXRjaChzdGQ6OmV4Y2VwdGlvbiBjb25zdCYgZXgpIGNvbnN0IHsKLSAgICByZXR1cm4gZXgud2hhdCgpID09IG1fbWVzc2FnZTsKLX0KLQotc3RkOjpzdHJpbmcgRXhjZXB0aW9uTWVzc2FnZU1hdGNoZXI6OmRlc2NyaWJlKCkgY29uc3QgewotICAgIHJldHVybiAiZXhjZXB0aW9uIG1lc3NhZ2UgbWF0Y2hlcyBcIiIgKyBtX21lc3NhZ2UgKyAiXCIiOwotfQotCi19Ci1FeGNlcHRpb246OkV4Y2VwdGlvbk1lc3NhZ2VNYXRjaGVyIE1lc3NhZ2Uoc3RkOjpzdHJpbmcgY29uc3QmIG1lc3NhZ2UpIHsKLSAgICByZXR1cm4gRXhjZXB0aW9uOjpFeGNlcHRpb25NZXNzYWdlTWF0Y2hlcihtZXNzYWdlKTsKLX0KLQotLy8gbmFtZXNwYWNlIEV4Y2VwdGlvbgotfSAvLyBuYW1lc3BhY2UgTWF0Y2hlcnMKLX0gLy8gbmFtZXNwYWNlIENhdGNoCi0vLyBlbmQgY2F0Y2hfbWF0Y2hlcnNfZXhjZXB0aW9uLmNwcAogLy8gc3RhcnQgY2F0Y2hfbWF0Y2hlcnNfZmxvYXRpbmcuY3BwCiAKIC8vIHN0YXJ0IGNhdGNoX3BvbHlmaWxscy5ocHAKQEAgLTExMzQ3LDEwMCArOTMwOSw3NCBAQAogfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCiAKIC8vIGVuZCBjYXRjaF90b19zdHJpbmcuaHBwCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGNtYXRoPgogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8Y3N0ZGludD4KICNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0jaW5jbHVkZSA8aW9tYW5pcD4KLSNpbmNsdWRlIDxsaW1pdHM+CiAKIG5hbWVzcGFjZSBDYXRjaCB7Ci1uYW1lc3BhY2UgewotCi0gICAgaW50MzJfdCBjb252ZXJ0KGZsb2F0IGYpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZmxvYXQpID09IHNpemVvZihpbnQzMl90KSwgIkltcG9ydGFudCBVTFAgbWF0Y2hlciBhc3N1bXB0aW9uIHZpb2xhdGVkIik7Ci0gICAgICAgIGludDMyX3QgaTsKLSAgICAgICAgc3RkOjptZW1jcHkoJmksICZmLCBzaXplb2YoZikpOwotICAgICAgICByZXR1cm4gaTsKLSAgICB9Ci0KLSAgICBpbnQ2NF90IGNvbnZlcnQoZG91YmxlIGQpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZG91YmxlKSA9PSBzaXplb2YoaW50NjRfdCksICJJbXBvcnRhbnQgVUxQIG1hdGNoZXIgYXNzdW1wdGlvbiB2aW9sYXRlZCIpOwotICAgICAgICBpbnQ2NF90IGk7Ci0gICAgICAgIHN0ZDo6bWVtY3B5KCZpLCAmZCwgc2l6ZW9mKGQpKTsKLSAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZQPgotICAgIGJvb2wgYWxtb3N0RXF1YWxVbHBzKEZQIGxocywgRlAgcmhzLCB1aW50NjRfdCBtYXhVbHBEaWZmKSB7Ci0gICAgICAgIC8vIENvbXBhcmlzb24gd2l0aCBOYU4gc2hvdWxkIGFsd2F5cyBiZSBmYWxzZS4KLSAgICAgICAgLy8gVGhpcyB3YXkgd2UgY2FuIHJ1bGUgaXQgb3V0IGJlZm9yZSBnZXR0aW5nIGludG8gdGhlIHVnbHkgZGV0YWlscwotICAgICAgICBpZiAoQ2F0Y2g6OmlzbmFuKGxocykgfHwgQ2F0Y2g6OmlzbmFuKHJocykpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gbGMgPSBjb252ZXJ0KGxocyk7Ci0gICAgICAgIGF1dG8gcmMgPSBjb252ZXJ0KHJocyk7Ci0KLSAgICAgICAgaWYgKChsYyA8IDApICE9IChyYyA8IDApKSB7Ci0gICAgICAgICAgICAvLyBQb3RlbnRpYWxseSB3ZSBjYW4gaGF2ZSArMCBhbmQgLTAKLSAgICAgICAgICAgIHJldHVybiBsaHMgPT0gcmhzOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byB1bHBEaWZmID0gc3RkOjphYnMobGMgLSByYyk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4odWxwRGlmZikgPD0gbWF4VWxwRGlmZjsKLSAgICB9Ci0KLSNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19HTE9CQUxfTkVYVEFGVEVSKQotCi0gICAgZmxvYXQgbmV4dGFmdGVyKGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgcmV0dXJuIDo6bmV4dGFmdGVyZih4LCB5KTsKLSAgICB9Ci0KLSAgICBkb3VibGUgbmV4dGFmdGVyKGRvdWJsZSB4LCBkb3VibGUgeSkgewotICAgICAgICByZXR1cm4gOjpuZXh0YWZ0ZXIoeCwgeSk7Ci0gICAgfQotCi0jZW5kaWYgLy8gXl5eIENBVENIX0NPTkZJR19HTE9CQUxfTkVYVEFGVEVSIF5eXgotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRlA+Ci1GUCBzdGVwKEZQIHN0YXJ0LCBGUCBkaXJlY3Rpb24sIHVpbnQ2NF90IHN0ZXBzKSB7Ci0gICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IHN0ZXBzOyArK2kpIHsKLSNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19HTE9CQUxfTkVYVEFGVEVSKQotICAgICAgICBzdGFydCA9IENhdGNoOjpuZXh0YWZ0ZXIoc3RhcnQsIGRpcmVjdGlvbik7Ci0jZWxzZQotICAgICAgICBzdGFydCA9IHN0ZDo6bmV4dGFmdGVyKHN0YXJ0LCBkaXJlY3Rpb24pOwotI2VuZGlmCi0gICAgfQotICAgIHJldHVybiBzdGFydDsKLX0KLQotLy8gUGVyZm9ybXMgZXF1aXZhbGVudCBjaGVjayBvZiBzdGQ6OmZhYnMobGhzIC0gcmhzKSA8PSBtYXJnaW4KLS8vIEJ1dCB3aXRob3V0IHRoZSBzdWJ0cmFjdGlvbiB0byBhbGxvdyBmb3IgSU5GSU5JVFkgaW4gY29tcGFyaXNvbgotYm9vbCBtYXJnaW5Db21wYXJpc29uKGRvdWJsZSBsaHMsIGRvdWJsZSByaHMsIGRvdWJsZSBtYXJnaW4pIHsKLSAgICByZXR1cm4gKGxocyArIG1hcmdpbiA+PSByaHMpICYmIChyaHMgKyBtYXJnaW4gPj0gbGhzKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEZsb2F0aW5nUG9pbnQ+Ci12b2lkIHdyaXRlKHN0ZDo6b3N0cmVhbSYgb3V0LCBGbG9hdGluZ1BvaW50IG51bSkgewotICAgIG91dCA8PCBzdGQ6OnNjaWVudGlmaWMKLSAgICAgICAgPDwgc3RkOjpzZXRwcmVjaXNpb24oc3RkOjpudW1lcmljX2xpbWl0czxGbG9hdGluZ1BvaW50Pjo6bWF4X2RpZ2l0czEwIC0gMSkKLSAgICAgICAgPDwgbnVtOwotfQotCi19IC8vIGVuZCBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KIG5hbWVzcGFjZSBNYXRjaGVycyB7CiBuYW1lc3BhY2UgRmxvYXRpbmcgeworZW51bSBjbGFzcyBGbG9hdGluZ1BvaW50S2luZCA6IHVpbnQ4X3QgeworICAgIEZsb2F0LAorICAgIERvdWJsZQorfTsKK30KK30KK30KIAotICAgIGVudW0gY2xhc3MgRmxvYXRpbmdQb2ludEtpbmQgOiB1aW50OF90IHsKLSAgICAgICAgRmxvYXQsCi0gICAgICAgIERvdWJsZQotICAgIH07CituYW1lc3BhY2UgewogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBDb252ZXJ0ZXI7CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQ29udmVydGVyPGZsb2F0PiB7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZmxvYXQpID09IHNpemVvZihpbnQzMl90KSwgIkltcG9ydGFudCBVTFAgbWF0Y2hlciBhc3N1bXB0aW9uIHZpb2xhdGVkIik7CisgICAgQ29udmVydGVyKGZsb2F0IGYpIHsKKyAgICAgICAgc3RkOjptZW1jcHkoJmksICZmLCBzaXplb2YoZikpOworICAgIH0KKyAgICBpbnQzMl90IGk7Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IENvbnZlcnRlcjxkb3VibGU+IHsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkb3VibGUpID09IHNpemVvZihpbnQ2NF90KSwgIkltcG9ydGFudCBVTFAgbWF0Y2hlciBhc3N1bXB0aW9uIHZpb2xhdGVkIik7CisgICAgQ29udmVydGVyKGRvdWJsZSBkKSB7CisgICAgICAgIHN0ZDo6bWVtY3B5KCZpLCAmZCwgc2l6ZW9mKGQpKTsKKyAgICB9CisgICAgaW50NjRfdCBpOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CithdXRvIGNvbnZlcnQoVCB0KSAtPiBDb252ZXJ0ZXI8VD4geworICAgIHJldHVybiBDb252ZXJ0ZXI8VD4odCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBGUD4KK2Jvb2wgYWxtb3N0RXF1YWxVbHBzKEZQIGxocywgRlAgcmhzLCBpbnQgbWF4VWxwRGlmZikgeworICAgIC8vIENvbXBhcmlzb24gd2l0aCBOYU4gc2hvdWxkIGFsd2F5cyBiZSBmYWxzZS4KKyAgICAvLyBUaGlzIHdheSB3ZSBjYW4gcnVsZSBpdCBvdXQgYmVmb3JlIGdldHRpbmcgaW50byB0aGUgdWdseSBkZXRhaWxzCisgICAgaWYgKENhdGNoOjppc25hbihsaHMpIHx8IENhdGNoOjppc25hbihyaHMpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBhdXRvIGxjID0gY29udmVydChsaHMpOworICAgIGF1dG8gcmMgPSBjb252ZXJ0KHJocyk7CisKKyAgICBpZiAoKGxjLmkgPCAwKSAhPSAocmMuaSA8IDApKSB7CisgICAgICAgIC8vIFBvdGVudGlhbGx5IHdlIGNhbiBoYXZlICswIGFuZCAtMAorICAgICAgICByZXR1cm4gbGhzID09IHJoczsKKyAgICB9CisKKyAgICBhdXRvIHVscERpZmYgPSBzdGQ6OmFicyhsYy5pIC0gcmMuaSk7CisgICAgcmV0dXJuIHVscERpZmYgPD0gbWF4VWxwRGlmZjsKK30KKworfQorCituYW1lc3BhY2UgQ2F0Y2ggeworbmFtZXNwYWNlIE1hdGNoZXJzIHsKK25hbWVzcGFjZSBGbG9hdGluZyB7CiAgICAgV2l0aGluQWJzTWF0Y2hlcjo6V2l0aGluQWJzTWF0Y2hlcihkb3VibGUgdGFyZ2V0LCBkb3VibGUgbWFyZ2luKQogICAgICAgICA6bV90YXJnZXR7IHRhcmdldCB9LCBtX21hcmdpbnsgbWFyZ2luIH0gewogICAgICAgICBDQVRDSF9FTkZPUkNFKG1hcmdpbiA+PSAwLCAiSW52YWxpZCBtYXJnaW46ICIgPDwgbWFyZ2luIDw8ICcuJwpAQCAtMTE0NTcsMTEgKzkzOTMsMTAgQEAKICAgICAgICAgcmV0dXJuICJpcyB3aXRoaW4gIiArIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KG1fbWFyZ2luKSArICIgb2YgIiArIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KG1fdGFyZ2V0KTsKICAgICB9CiAKLSAgICBXaXRoaW5VbHBzTWF0Y2hlcjo6V2l0aGluVWxwc01hdGNoZXIoZG91YmxlIHRhcmdldCwgdWludDY0X3QgdWxwcywgRmxvYXRpbmdQb2ludEtpbmQgYmFzZVR5cGUpCisgICAgV2l0aGluVWxwc01hdGNoZXI6OldpdGhpblVscHNNYXRjaGVyKGRvdWJsZSB0YXJnZXQsIGludCB1bHBzLCBGbG9hdGluZ1BvaW50S2luZCBiYXNlVHlwZSkKICAgICAgICAgOm1fdGFyZ2V0eyB0YXJnZXQgfSwgbV91bHBzeyB1bHBzIH0sIG1fdHlwZXsgYmFzZVR5cGUgfSB7Ci0gICAgICAgIENBVENIX0VORk9SQ0UobV90eXBlID09IEZsb2F0aW5nUG9pbnRLaW5kOjpEb3VibGUKLSAgICAgICAgICAgICAgICAgICB8fCBtX3VscHMgPCAoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCkoKSwKLSAgICAgICAgICAgICJQcm92aWRlZCBVTFAgaXMgaW1wb3NzaWJseSBsYXJnZSBmb3IgYSBmbG9hdCBjb21wYXJpc29uLiIpOworICAgICAgICBDQVRDSF9FTkZPUkNFKHVscHMgPj0gMCwgIkludmFsaWQgVUxQIHNldHRpbmc6ICIgPDwgdWxwcyA8PCAnLicKKyAgICAgICAgICAgIDw8ICIgVUxQcyBoYXZlIHRvIGJlIG5vbi1uZWdhdGl2ZS4iKTsKICAgICB9CiAKICNpZiBkZWZpbmVkKF9fY2xhbmdfXykKQEAgLTExNDg2LDU5ICs5NDIxLDE2IEBACiAjZW5kaWYKIAogICAgIHN0ZDo6c3RyaW5nIFdpdGhpblVscHNNYXRjaGVyOjpkZXNjcmliZSgpIGNvbnN0IHsKLSAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gcmV0OwotCi0gICAgICAgIHJldCA8PCAiaXMgd2l0aGluICIgPDwgbV91bHBzIDw8ICIgVUxQcyBvZiAiOwotCi0gICAgICAgIGlmIChtX3R5cGUgPT0gRmxvYXRpbmdQb2ludEtpbmQ6OkZsb2F0KSB7Ci0gICAgICAgICAgICB3cml0ZShyZXQsIHN0YXRpY19jYXN0PGZsb2F0PihtX3RhcmdldCkpOwotICAgICAgICAgICAgcmV0IDw8ICdmJzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHdyaXRlKHJldCwgbV90YXJnZXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0IDw8ICIgKFsiOwotICAgICAgICBpZiAobV90eXBlID09IEZsb2F0aW5nUG9pbnRLaW5kOjpEb3VibGUpIHsKLSAgICAgICAgICAgIHdyaXRlKHJldCwgc3RlcChtX3RhcmdldCwgc3RhdGljX2Nhc3Q8ZG91YmxlPigtSU5GSU5JVFkpLCBtX3VscHMpKTsKLSAgICAgICAgICAgIHJldCA8PCAiLCAiOwotICAgICAgICAgICAgd3JpdGUocmV0LCBzdGVwKG1fdGFyZ2V0LCBzdGF0aWNfY2FzdDxkb3VibGU+KCBJTkZJTklUWSksIG1fdWxwcykpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBjYXN0IElORklOSVRZIHRvIGZsb2F0IGJlY2F1c2Ugb2YgTWluR1csIHNlZSAjMTc4MgotICAgICAgICAgICAgd3JpdGUocmV0LCBzdGVwKHN0YXRpY19jYXN0PGZsb2F0PihtX3RhcmdldCksIHN0YXRpY19jYXN0PGZsb2F0PigtSU5GSU5JVFkpLCBtX3VscHMpKTsKLSAgICAgICAgICAgIHJldCA8PCAiLCAiOwotICAgICAgICAgICAgd3JpdGUocmV0LCBzdGVwKHN0YXRpY19jYXN0PGZsb2F0PihtX3RhcmdldCksIHN0YXRpY19jYXN0PGZsb2F0PiggSU5GSU5JVFkpLCBtX3VscHMpKTsKLSAgICAgICAgfQotICAgICAgICByZXQgPDwgIl0pIjsKLQotICAgICAgICByZXR1cm4gcmV0LnN0cigpOwotICAgIH0KLQotICAgIFdpdGhpblJlbE1hdGNoZXI6OldpdGhpblJlbE1hdGNoZXIoZG91YmxlIHRhcmdldCwgZG91YmxlIGVwc2lsb24pOgotICAgICAgICBtX3RhcmdldCh0YXJnZXQpLAotICAgICAgICBtX2Vwc2lsb24oZXBzaWxvbil7Ci0gICAgICAgIENBVENIX0VORk9SQ0UobV9lcHNpbG9uID49IDAuLCAiUmVsYXRpdmUgY29tcGFyaXNvbiB3aXRoIGVwc2lsb24gPCAgMCBkb2VzIG5vdCBtYWtlIHNlbnNlLiIpOwotICAgICAgICBDQVRDSF9FTkZPUkNFKG1fZXBzaWxvbiAgPCAxLiwgIlJlbGF0aXZlIGNvbXBhcmlzb24gd2l0aCBlcHNpbG9uID49IDEgZG9lcyBub3QgbWFrZSBzZW5zZS4iKTsKLSAgICB9Ci0KLSAgICBib29sIFdpdGhpblJlbE1hdGNoZXI6Om1hdGNoKGRvdWJsZSBjb25zdCYgbWF0Y2hlZSkgY29uc3QgewotICAgICAgICBjb25zdCBhdXRvIHJlbE1hcmdpbiA9IG1fZXBzaWxvbiAqIChzdGQ6Om1heCkoc3RkOjpmYWJzKG1hdGNoZWUpLCBzdGQ6OmZhYnMobV90YXJnZXQpKTsKLSAgICAgICAgcmV0dXJuIG1hcmdpbkNvbXBhcmlzb24obWF0Y2hlZSwgbV90YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNpbmYocmVsTWFyZ2luKT8gMCA6IHJlbE1hcmdpbik7Ci0gICAgfQotCi0gICAgc3RkOjpzdHJpbmcgV2l0aGluUmVsTWF0Y2hlcjo6ZGVzY3JpYmUoKSBjb25zdCB7Ci0gICAgICAgIENhdGNoOjpSZXVzYWJsZVN0cmluZ1N0cmVhbSBzc3RyOwotICAgICAgICBzc3RyIDw8ICJhbmQgIiA8PCBtX3RhcmdldCA8PCAiIGFyZSB3aXRoaW4gIiA8PCBtX2Vwc2lsb24gKiAxMDAuIDw8ICIlIG9mIGVhY2ggb3RoZXIiOwotICAgICAgICByZXR1cm4gc3N0ci5zdHIoKTsKKyAgICAgICAgcmV0dXJuICJpcyB3aXRoaW4gIiArIENhdGNoOjp0b19zdHJpbmcobV91bHBzKSArICIgVUxQcyBvZiAiICsgOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkobV90YXJnZXQpICsgKChtX3R5cGUgPT0gRmxvYXRpbmdQb2ludEtpbmQ6OkZsb2F0KT8gImYiIDogIiIpOwogICAgIH0KIAogfS8vIG5hbWVzcGFjZSBGbG9hdGluZwogCi1GbG9hdGluZzo6V2l0aGluVWxwc01hdGNoZXIgV2l0aGluVUxQKGRvdWJsZSB0YXJnZXQsIHVpbnQ2NF90IG1heFVscERpZmYpIHsKK0Zsb2F0aW5nOjpXaXRoaW5VbHBzTWF0Y2hlciBXaXRoaW5VTFAoZG91YmxlIHRhcmdldCwgaW50IG1heFVscERpZmYpIHsKICAgICByZXR1cm4gRmxvYXRpbmc6OldpdGhpblVscHNNYXRjaGVyKHRhcmdldCwgbWF4VWxwRGlmZiwgRmxvYXRpbmc6OkZsb2F0aW5nUG9pbnRLaW5kOjpEb3VibGUpOwogfQogCi1GbG9hdGluZzo6V2l0aGluVWxwc01hdGNoZXIgV2l0aGluVUxQKGZsb2F0IHRhcmdldCwgdWludDY0X3QgbWF4VWxwRGlmZikgeworRmxvYXRpbmc6OldpdGhpblVscHNNYXRjaGVyIFdpdGhpblVMUChmbG9hdCB0YXJnZXQsIGludCBtYXhVbHBEaWZmKSB7CiAgICAgcmV0dXJuIEZsb2F0aW5nOjpXaXRoaW5VbHBzTWF0Y2hlcih0YXJnZXQsIG1heFVscERpZmYsIEZsb2F0aW5nOjpGbG9hdGluZ1BvaW50S2luZDo6RmxvYXQpOwogfQogCkBAIC0xMTU0NiwyMiArOTQzOCw2IEBACiAgICAgcmV0dXJuIEZsb2F0aW5nOjpXaXRoaW5BYnNNYXRjaGVyKHRhcmdldCwgbWFyZ2luKTsKIH0KIAotRmxvYXRpbmc6OldpdGhpblJlbE1hdGNoZXIgV2l0aGluUmVsKGRvdWJsZSB0YXJnZXQsIGRvdWJsZSBlcHMpIHsKLSAgICByZXR1cm4gRmxvYXRpbmc6OldpdGhpblJlbE1hdGNoZXIodGFyZ2V0LCBlcHMpOwotfQotCi1GbG9hdGluZzo6V2l0aGluUmVsTWF0Y2hlciBXaXRoaW5SZWwoZG91YmxlIHRhcmdldCkgewotICAgIHJldHVybiBGbG9hdGluZzo6V2l0aGluUmVsTWF0Y2hlcih0YXJnZXQsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6ZXBzaWxvbigpICogMTAwKTsKLX0KLQotRmxvYXRpbmc6OldpdGhpblJlbE1hdGNoZXIgV2l0aGluUmVsKGZsb2F0IHRhcmdldCwgZmxvYXQgZXBzKSB7Ci0gICAgcmV0dXJuIEZsb2F0aW5nOjpXaXRoaW5SZWxNYXRjaGVyKHRhcmdldCwgZXBzKTsKLX0KLQotRmxvYXRpbmc6OldpdGhpblJlbE1hdGNoZXIgV2l0aGluUmVsKGZsb2F0IHRhcmdldCkgewotICAgIHJldHVybiBGbG9hdGluZzo6V2l0aGluUmVsTWF0Y2hlcih0YXJnZXQsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjplcHNpbG9uKCkgKiAxMDApOwotfQotCiB9IC8vIG5hbWVzcGFjZSBNYXRjaGVycwogfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKIApAQCAtMTE3NTAsMTUgKzk2MjYsNiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG5hbWVzLnN1YnN0cihzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTsKICAgICAgICAgfTsKLSAgICAgICAgYXV0byBza2lwcSA9IFsmXSAoc2l6ZV90IHN0YXJ0LCBjaGFyIHF1b3RlKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8gaSA9IHN0YXJ0ICsgMTsgaSA8IG5hbWVzLnNpemUoKSA7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChuYW1lc1tpXSA9PSBxdW90ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWVzW2ldID09ICdcXCcpCi0gICAgICAgICAgICAgICAgICAgICsraTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX0VSUk9SKCJDQVBUVVJFIHBhcnNpbmcgZW5jb3VudGVyZWQgdW5tYXRjaGVkIHF1b3RlIik7Ci0gICAgICAgIH07CiAKICAgICAgICAgc2l6ZV90IHN0YXJ0ID0gMDsKICAgICAgICAgc3RkOjpzdGFjazxjaGFyPiBvcGVuaW5nczsKQEAgLTExNzc5LDIyICs5NjQ2LDE4IEBACiAvLyAgICAgICAgICAgY2FzZSAnPic6CiAgICAgICAgICAgICAgICAgb3BlbmluZ3MucG9wKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICciJzoKLSAgICAgICAgICAgIGNhc2UgJ1wnJzoKLSAgICAgICAgICAgICAgICBwb3MgPSBza2lwcShwb3MsIGMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnLCc6Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXJ0ICE9IHBvcyAmJiBvcGVuaW5ncy5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ICE9IHBvcyAmJiBvcGVuaW5ncy5zaXplKCkgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICBtX21lc3NhZ2VzLmVtcGxhY2VfYmFjayhtYWNyb05hbWUsIGxpbmVJbmZvLCByZXN1bHRUeXBlKTsKLSAgICAgICAgICAgICAgICAgICAgbV9tZXNzYWdlcy5iYWNrKCkubWVzc2FnZSA9IHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nPih0cmltbWVkKHN0YXJ0LCBwb3MpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9tZXNzYWdlcy5iYWNrKCkubWVzc2FnZSA9IHRyaW1tZWQoc3RhcnQsIHBvcyk7CiAgICAgICAgICAgICAgICAgICAgIG1fbWVzc2FnZXMuYmFjaygpLm1lc3NhZ2UgKz0gIiA6PSAiOwogICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHBvczsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgYXNzZXJ0KG9wZW5pbmdzLmVtcHR5KCkgJiYgIk1pc21hdGNoZWQgb3BlbmluZ3MiKTsKKyAgICAgICAgYXNzZXJ0KG9wZW5pbmdzLnNpemUoKSA9PSAwICYmICJNaXNtYXRjaGVkIG9wZW5pbmdzIik7CiAgICAgICAgIG1fbWVzc2FnZXMuZW1wbGFjZV9iYWNrKG1hY3JvTmFtZSwgbGluZUluZm8sIHJlc3VsdFR5cGUpOwotICAgICAgICBtX21lc3NhZ2VzLmJhY2soKS5tZXNzYWdlID0gc3RhdGljX2Nhc3Q8c3RkOjpzdHJpbmc+KHRyaW1tZWQoc3RhcnQsIG5hbWVzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgbV9tZXNzYWdlcy5iYWNrKCkubWVzc2FnZSA9IHRyaW1tZWQoc3RhcnQsIG5hbWVzLnNpemUoKSAtIDEpOwogICAgICAgICBtX21lc3NhZ2VzLmJhY2soKS5tZXNzYWdlICs9ICIgOj0gIjsKICAgICB9CiAgICAgQ2FwdHVyZXI6On5DYXB0dXJlcigpIHsKQEAgLTEyMDg4LDYxICs5OTUxLDIwIEBACiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKLW5hbWVzcGFjZSB7Ci0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MTQ2KSAvLyB3ZSBuZWdhdGUgdWludDMyIGR1cmluZyB0aGUgcm90YXRlCi0jZW5kaWYKLSAgICAgICAgLy8gU2FmZSByb3RyIGltcGxlbWVudGF0aW9uIHRoYW5rcyB0byBKb2huIFJlZ2VocgotICAgICAgICB1aW50MzJfdCByb3RhdGVfcmlnaHQodWludDMyX3QgdmFsLCB1aW50MzJfdCBjb3VudCkgewotICAgICAgICAgICAgY29uc3QgdWludDMyX3QgbWFzayA9IDMxOwotICAgICAgICAgICAgY291bnQgJj0gbWFzazsKLSAgICAgICAgICAgIHJldHVybiAodmFsID4+IGNvdW50KSB8ICh2YWwgPDwgKC1jb3VudCAmIG1hc2spKTsKLSAgICAgICAgfQotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNwcmFnbWEgd2FybmluZyhwb3ApCi0jZW5kaWYKLQotfQotCi0gICAgU2ltcGxlUGNnMzI6OlNpbXBsZVBjZzMyKHJlc3VsdF90eXBlIHNlZWRfKSB7Ci0gICAgICAgIHNlZWQoc2VlZF8pOworICAgIHN0ZDo6bXQxOTkzNyYgcm5nKCkgeworICAgICAgICBzdGF0aWMgc3RkOjptdDE5OTM3IHNfcm5nOworICAgICAgICByZXR1cm4gc19ybmc7CiAgICAgfQogCi0gICAgdm9pZCBTaW1wbGVQY2czMjo6c2VlZChyZXN1bHRfdHlwZSBzZWVkXykgewotICAgICAgICBtX3N0YXRlID0gMDsKLSAgICAgICAgKCp0aGlzKSgpOwotICAgICAgICBtX3N0YXRlICs9IHNlZWRfOwotICAgICAgICAoKnRoaXMpKCk7Ci0gICAgfQotCi0gICAgdm9pZCBTaW1wbGVQY2czMjo6ZGlzY2FyZCh1aW50NjRfdCBza2lwKSB7Ci0gICAgICAgIC8vIFdlIGNvdWxkIGltcGxlbWVudCB0aGlzIHRvIHJ1biBpbiBPKGxvZyBuKSBzdGVwcywgYnV0IHRoaXMKLSAgICAgICAgLy8gc2hvdWxkIHN1ZmZpY2UgZm9yIG91ciB1c2UgY2FzZS4KLSAgICAgICAgZm9yICh1aW50NjRfdCBzID0gMDsgcyA8IHNraXA7ICsrcykgewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZD4oKCp0aGlzKSgpKTsKKyAgICB2b2lkIHNlZWRSbmcoIElDb25maWcgY29uc3QmIGNvbmZpZyApIHsKKyAgICAgICAgaWYoIGNvbmZpZy5ybmdTZWVkKCkgIT0gMCApIHsKKyAgICAgICAgICAgIHN0ZDo6c3JhbmQoIGNvbmZpZy5ybmdTZWVkKCkgKTsKKyAgICAgICAgICAgIHJuZygpLnNlZWQoIGNvbmZpZy5ybmdTZWVkKCkgKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFNpbXBsZVBjZzMyOjpyZXN1bHRfdHlwZSBTaW1wbGVQY2czMjo6b3BlcmF0b3IoKSgpIHsKLSAgICAgICAgLy8gcHJlcGFyZSB0aGUgb3V0cHV0IHZhbHVlCi0gICAgICAgIGNvbnN0IHVpbnQzMl90IHhvcnNoaWZ0ZWQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oKChtX3N0YXRlID4+IDE4dSkgXiBtX3N0YXRlKSA+PiAyN3UpOwotICAgICAgICBjb25zdCBhdXRvIG91dHB1dCA9IHJvdGF0ZV9yaWdodCh4b3JzaGlmdGVkLCBtX3N0YXRlID4+IDU5dSk7Ci0KLSAgICAgICAgLy8gYWR2YW5jZSBzdGF0ZQotICAgICAgICBtX3N0YXRlID0gbV9zdGF0ZSAqIDYzNjQxMzYyMjM4NDY3OTMwMDVVTEwgKyBzX2luYzsKLQotICAgICAgICByZXR1cm4gb3V0cHV0OwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShTaW1wbGVQY2czMiBjb25zdCYgbGhzLCBTaW1wbGVQY2czMiBjb25zdCYgcmhzKSB7Ci0gICAgICAgIHJldHVybiBsaHMubV9zdGF0ZSA9PSByaHMubV9zdGF0ZTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0oU2ltcGxlUGNnMzIgY29uc3QmIGxocywgU2ltcGxlUGNnMzIgY29uc3QmIHJocykgewotICAgICAgICByZXR1cm4gbGhzLm1fc3RhdGUgIT0gcmhzLm1fc3RhdGU7CisgICAgdW5zaWduZWQgaW50IHJuZ1NlZWQoKSB7CisgICAgICAgIHJldHVybiBnZXRDdXJyZW50Q29udGV4dCgpLmdldENvbmZpZygpLT5ybmdTZWVkKCk7CiAgICAgfQogfQogLy8gZW5kIGNhdGNoX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLmNwcApAQCAtMTIxNjEsOCArOTk4Myw2IEBACiAgICAgc3RydWN0IElDb25maWc7CiAKICAgICBzdGQ6OnZlY3RvcjxUZXN0Q2FzZT4gc29ydFRlc3RzKCBJQ29uZmlnIGNvbnN0JiBjb25maWcsIHN0ZDo6dmVjdG9yPFRlc3RDYXNlPiBjb25zdCYgdW5zb3J0ZWRUZXN0Q2FzZXMgKTsKLQotICAgIGJvb2wgaXNUaHJvd1NhZmUoIFRlc3RDYXNlIGNvbnN0JiB0ZXN0Q2FzZSwgSUNvbmZpZyBjb25zdCYgY29uZmlnICk7CiAgICAgYm9vbCBtYXRjaFRlc3QoIFRlc3RDYXNlIGNvbnN0JiB0ZXN0Q2FzZSwgVGVzdFNwZWMgY29uc3QmIHRlc3RTcGVjLCBJQ29uZmlnIGNvbnN0JiBjb25maWcgKTsKIAogICAgIHZvaWQgZW5mb3JjZU5vRHVwbGljYXRlVGVzdENhc2VzKCBzdGQ6OnZlY3RvcjxUZXN0Q2FzZT4gY29uc3QmIGZ1bmN0aW9ucyApOwpAQCAtMTIzNjQsOSArMTAxODQsNiBAQAogICAgICAgICAgICAgdm9pZCByZWdpc3RlclN0YXJ0dXBFeGNlcHRpb24oKSBub2V4Y2VwdCBvdmVycmlkZSB7CiAgICAgICAgICAgICAgICAgbV9leGNlcHRpb25SZWdpc3RyeS5hZGQoc3RkOjpjdXJyZW50X2V4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIElNdXRhYmxlRW51bVZhbHVlc1JlZ2lzdHJ5JiBnZXRNdXRhYmxlRW51bVZhbHVlc1JlZ2lzdHJ5KCkgb3ZlcnJpZGUgewotICAgICAgICAgICAgICAgIHJldHVybiBtX2VudW1WYWx1ZXNSZWdpc3RyeTsKLSAgICAgICAgICAgIH0KIAogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgVGVzdFJlZ2lzdHJ5IG1fdGVzdENhc2VSZWdpc3RyeTsKQEAgLTEyMzc0LDcgKzEwMTkxLDYgQEAKICAgICAgICAgICAgIEV4Y2VwdGlvblRyYW5zbGF0b3JSZWdpc3RyeSBtX2V4Y2VwdGlvblRyYW5zbGF0b3JSZWdpc3RyeTsKICAgICAgICAgICAgIFRhZ0FsaWFzUmVnaXN0cnkgbV90YWdBbGlhc1JlZ2lzdHJ5OwogICAgICAgICAgICAgU3RhcnR1cEV4Y2VwdGlvblJlZ2lzdHJ5IG1fZXhjZXB0aW9uUmVnaXN0cnk7Ci0gICAgICAgICAgICBEZXRhaWw6OkVudW1WYWx1ZXNSZWdpc3RyeSBtX2VudW1WYWx1ZXNSZWdpc3RyeTsKICAgICAgICAgfTsKICAgICB9CiAKQEAgLTEyNjcwLDIxICsxMDQ4NiwxMiBAQAogCiAgICAgICAgIG1fdW5maW5pc2hlZFNlY3Rpb25zLnB1c2hfYmFjayhlbmRJbmZvKTsKICAgICB9Ci0KLSNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HKQotICAgIHZvaWQgUnVuQ29udGV4dDo6YmVuY2htYXJrUHJlcGFyaW5nKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lKSB7Ci0JCW1fcmVwb3J0ZXItPmJlbmNobWFya1ByZXBhcmluZyhuYW1lKTsKLQl9CiAgICAgdm9pZCBSdW5Db250ZXh0OjpiZW5jaG1hcmtTdGFydGluZyggQmVuY2htYXJrSW5mbyBjb25zdCYgaW5mbyApIHsKICAgICAgICAgbV9yZXBvcnRlci0+YmVuY2htYXJrU3RhcnRpbmcoIGluZm8gKTsKICAgICB9Ci0gICAgdm9pZCBSdW5Db250ZXh0OjpiZW5jaG1hcmtFbmRlZCggQmVuY2htYXJrU3RhdHM8PiBjb25zdCYgc3RhdHMgKSB7CisgICAgdm9pZCBSdW5Db250ZXh0OjpiZW5jaG1hcmtFbmRlZCggQmVuY2htYXJrU3RhdHMgY29uc3QmIHN0YXRzICkgewogICAgICAgICBtX3JlcG9ydGVyLT5iZW5jaG1hcmtFbmRlZCggc3RhdHMgKTsKICAgICB9Ci0Jdm9pZCBSdW5Db250ZXh0OjpiZW5jaG1hcmtGYWlsZWQoc3RkOjpzdHJpbmcgY29uc3QgJiBlcnJvcikgewotCQltX3JlcG9ydGVyLT5iZW5jaG1hcmtGYWlsZWQoZXJyb3IpOwotCX0KLSNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORwogCiAgICAgdm9pZCBSdW5Db250ZXh0OjpwdXNoU2NvcGVkTWVzc2FnZShNZXNzYWdlSW5mbyBjb25zdCAmIG1lc3NhZ2UpIHsKICAgICAgICAgbV9tZXNzYWdlcy5wdXNoX2JhY2sobWVzc2FnZSk7CkBAIC0xMjcxOSw3ICsxMDUyNiw3IEBACiAgICAgICAgIC8vIERvbid0IHJlYnVpbGQgdGhlIHJlc3VsdCAtLSB0aGUgc3RyaW5naWZpY2F0aW9uIGl0c2VsZiBjYW4gY2F1c2UgbW9yZSBmYXRhbCBlcnJvcnMKICAgICAgICAgLy8gSW5zdGVhZCwgZmFrZSBhIHJlc3VsdCBkYXRhLgogICAgICAgICBBc3NlcnRpb25SZXN1bHREYXRhIHRlbXBSZXN1bHQoIFJlc3VsdFdhczo6RmF0YWxFcnJvckNvbmRpdGlvbiwgeyBmYWxzZSB9ICk7Ci0gICAgICAgIHRlbXBSZXN1bHQubWVzc2FnZSA9IHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nPihtZXNzYWdlKTsKKyAgICAgICAgdGVtcFJlc3VsdC5tZXNzYWdlID0gbWVzc2FnZTsKICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0IHJlc3VsdChtX2xhc3RBc3NlcnRpb25JbmZvLCB0ZW1wUmVzdWx0KTsKIAogICAgICAgICBhc3NlcnRpb25FbmRlZChyZXN1bHQpOwpAQCAtMTI4ODIsNyArMTA2ODksNyBAQAogICAgICAgICBtX2xhc3RBc3NlcnRpb25JbmZvID0gaW5mbzsKIAogICAgICAgICBBc3NlcnRpb25SZXN1bHREYXRhIGRhdGEoIHJlc3VsdFR5cGUsIExhenlFeHByZXNzaW9uKCBmYWxzZSApICk7Ci0gICAgICAgIGRhdGEubWVzc2FnZSA9IHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nPihtZXNzYWdlKTsKKyAgICAgICAgZGF0YS5tZXNzYWdlID0gbWVzc2FnZTsKICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdHsgbV9sYXN0QXNzZXJ0aW9uSW5mbywgZGF0YSB9OwogICAgICAgICBhc3NlcnRpb25FbmRlZCggYXNzZXJ0aW9uUmVzdWx0ICk7CiAgICAgICAgIGlmKCAhYXNzZXJ0aW9uUmVzdWx0LmlzT2soKSApCkBAIC0xMjk0NSwxOCArMTA3NTIsNiBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBDQVRDSF9JTlRFUk5BTF9FUlJPUigiTm8gcmVzdWx0IGNhcHR1cmUgaW5zdGFuY2UiKTsKICAgICB9Ci0KLSAgICB2b2lkIHNlZWRSbmcoSUNvbmZpZyBjb25zdCYgY29uZmlnKSB7Ci0gICAgICAgIGlmIChjb25maWcucm5nU2VlZCgpICE9IDApIHsKLSAgICAgICAgICAgIHN0ZDo6c3JhbmQoY29uZmlnLnJuZ1NlZWQoKSk7Ci0gICAgICAgICAgICBybmcoKS5zZWVkKGNvbmZpZy5ybmdTZWVkKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IHJuZ1NlZWQoKSB7Ci0gICAgICAgIHJldHVybiBnZXRDdXJyZW50Q29udGV4dCgpLmdldENvbmZpZygpLT5ybmdTZWVkKCk7Ci0gICAgfQotCiB9CiAvLyBlbmQgY2F0Y2hfcnVuX2NvbnRleHQuY3BwCiAvLyBzdGFydCBjYXRjaF9zZWN0aW9uLmNwcApAQCAtMTMwMTgsNyArMTA4MTMsNyBAQAogICAgICAgICB2b2lkIGxpYklkZW50aWZ5KCk7CiAKICAgICAgICAgaW50IGFwcGx5Q29tbWFuZExpbmUoIGludCBhcmdjLCBjaGFyIGNvbnN0ICogY29uc3QgKiBhcmd2ICk7Ci0gICAgI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX1dDSEFSKSAmJiBkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChVTklDT0RFKQorICAgICNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19XQ0hBUikgJiYgZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChVTklDT0RFKQogICAgICAgICBpbnQgYXBwbHlDb21tYW5kTGluZSggaW50IGFyZ2MsIHdjaGFyX3QgY29uc3QgKiBjb25zdCAqIGFyZ3YgKTsKICAgICAjZW5kaWYKIApAQCAtMTMwODUsOCArMTA4ODAsNiBAQAogLy8gZW5kIGNhdGNoX3ZlcnNpb24uaAogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8aW9tYW5pcD4KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8aXRlcmF0b3I+CiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKQEAgLTEzMTIwLDYxICsxMDkxMyw0NSBAQAogICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgfQogCi0gICAgICAgIGNsYXNzIFRlc3RHcm91cCB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIGV4cGxpY2l0IFRlc3RHcm91cChzdGQ6OnNoYXJlZF9wdHI8Q29uZmlnPiBjb25zdCYgY29uZmlnKQotICAgICAgICAgICAgOiBtX2NvbmZpZ3tjb25maWd9Ci0gICAgICAgICAgICAsIG1fY29udGV4dHtjb25maWcsIG1ha2VSZXBvcnRlcihjb25maWcpfQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF1dG8gY29uc3QmIGFsbFRlc3RDYXNlcyA9IGdldEFsbFRlc3RDYXNlc1NvcnRlZCgqbV9jb25maWcpOwotICAgICAgICAgICAgICAgIG1fbWF0Y2hlcyA9IG1fY29uZmlnLT50ZXN0U3BlYygpLm1hdGNoZXNCeUZpbHRlcihhbGxUZXN0Q2FzZXMsICptX2NvbmZpZyk7Ci0gICAgICAgICAgICAgICAgYXV0byBjb25zdCYgaW52YWxpZEFyZ3MgPSBtX2NvbmZpZy0+dGVzdFNwZWMoKS5nZXRJbnZhbGlkQXJncygpOworICAgICAgICBDYXRjaDo6VG90YWxzIHJ1blRlc3RzKHN0ZDo6c2hhcmVkX3B0cjxDb25maWc+IGNvbnN0JiBjb25maWcpIHsKKyAgICAgICAgICAgIGF1dG8gcmVwb3J0ZXIgPSBtYWtlUmVwb3J0ZXIoY29uZmlnKTsKIAotICAgICAgICAgICAgICAgIGlmIChtX21hdGNoZXMuZW1wdHkoKSAmJiBpbnZhbGlkQXJncy5lbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byBjb25zdCYgdGVzdCA6IGFsbFRlc3RDYXNlcykKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGVzdC5pc0hpZGRlbigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdGVzdHMuZW1wbGFjZSgmdGVzdCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvIGNvbnN0JiBtYXRjaCA6IG1fbWF0Y2hlcykKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdGVzdHMuaW5zZXJ0KG1hdGNoLnRlc3RzLmJlZ2luKCksIG1hdGNoLnRlc3RzLmVuZCgpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBSdW5Db250ZXh0IGNvbnRleHQoY29uZmlnLCBzdGQ6Om1vdmUocmVwb3J0ZXIpKTsKKworICAgICAgICAgICAgVG90YWxzIHRvdGFsczsKKworICAgICAgICAgICAgY29udGV4dC50ZXN0R3JvdXBTdGFydGluZyhjb25maWctPm5hbWUoKSwgMSwgMSk7CisKKyAgICAgICAgICAgIFRlc3RTcGVjIHRlc3RTcGVjID0gY29uZmlnLT50ZXN0U3BlYygpOworCisgICAgICAgICAgICBhdXRvIGNvbnN0JiBhbGxUZXN0Q2FzZXMgPSBnZXRBbGxUZXN0Q2FzZXNTb3J0ZWQoKmNvbmZpZyk7CisgICAgICAgICAgICBmb3IgKGF1dG8gY29uc3QmIHRlc3RDYXNlIDogYWxsVGVzdENhc2VzKSB7CisgICAgICAgICAgICAgICAgYm9vbCBtYXRjaGluZyA9ICghdGVzdFNwZWMuaGFzRmlsdGVycygpICYmICF0ZXN0Q2FzZS5pc0hpZGRlbigpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RTcGVjLmhhc0ZpbHRlcnMoKSAmJiBtYXRjaFRlc3QodGVzdENhc2UsIHRlc3RTcGVjLCAqY29uZmlnKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQuYWJvcnRpbmcoKSAmJiBtYXRjaGluZykKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzICs9IGNvbnRleHQucnVuVGVzdCh0ZXN0Q2FzZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydGVyKCkuc2tpcFRlc3QodGVzdENhc2UpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBUb3RhbHMgZXhlY3V0ZSgpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNvbnN0JiBpbnZhbGlkQXJncyA9IG1fY29uZmlnLT50ZXN0U3BlYygpLmdldEludmFsaWRBcmdzKCk7Ci0gICAgICAgICAgICAgICAgVG90YWxzIHRvdGFsczsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQudGVzdEdyb3VwU3RhcnRpbmcobV9jb25maWctPm5hbWUoKSwgMSwgMSk7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvIGNvbnN0JiB0ZXN0Q2FzZSA6IG1fdGVzdHMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQuYWJvcnRpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFscyArPSBtX2NvbnRleHQucnVuVGVzdCgqdGVzdENhc2UpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2NvbnRleHQucmVwb3J0ZXIoKS5za2lwVGVzdCgqdGVzdENhc2UpOworICAgICAgICAgICAgaWYgKGNvbmZpZy0+d2FybkFib3V0Tm9UZXN0cygpICYmIHRvdGFscy50ZXN0Q2FzZXMudG90YWwoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgUmV1c2FibGVTdHJpbmdTdHJlYW0gdGVzdENvbmZpZzsKKworICAgICAgICAgICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgaW5wdXQgOiBjb25maWctPmdldFRlc3RzT3JUYWdzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdCkgeyB0ZXN0Q29uZmlnIDw8ICcgJzsgfQorICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB0ZXN0Q29uZmlnIDw8IGlucHV0OwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGZvciAoYXV0byBjb25zdCYgbWF0Y2ggOiBtX21hdGNoZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoLnRlc3RzLmVtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY29udGV4dC5yZXBvcnRlcigpLm5vTWF0Y2hpbmdUZXN0Q2FzZXMobWF0Y2gubmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbHMuZXJyb3IgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghaW52YWxpZEFyZ3MuZW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gY29uc3QmIGludmFsaWRBcmc6IGludmFsaWRBcmdzKQotICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29udGV4dC5yZXBvcnRlcigpLnJlcG9ydEludmFsaWRBcmd1bWVudHMoaW52YWxpZEFyZyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LnRlc3RHcm91cEVuZGVkKG1fY29uZmlnLT5uYW1lKCksIHRvdGFscywgMSwgMSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsczsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydGVyKCkubm9NYXRjaGluZ1Rlc3RDYXNlcyh0ZXN0Q29uZmlnLnN0cigpKTsKKyAgICAgICAgICAgICAgICB0b3RhbHMuZXJyb3IgPSAtMTsKICAgICAgICAgICAgIH0KIAotICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgdXNpbmcgVGVzdHMgPSBzdGQ6OnNldDxUZXN0Q2FzZSBjb25zdCo+OwotCi0gICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Q29uZmlnPiBtX2NvbmZpZzsKLSAgICAgICAgICAgIFJ1bkNvbnRleHQgbV9jb250ZXh0OwotICAgICAgICAgICAgVGVzdHMgbV90ZXN0czsKLSAgICAgICAgICAgIFRlc3RTcGVjOjpNYXRjaGVzIG1fbWF0Y2hlczsKLSAgICAgICAgfTsKKyAgICAgICAgICAgIGNvbnRleHQudGVzdEdyb3VwRW5kZWQoY29uZmlnLT5uYW1lKCksIHRvdGFscywgMSwgMSk7CisgICAgICAgICAgICByZXR1cm4gdG90YWxzOworICAgICAgICB9CiAKICAgICAgICAgdm9pZCBhcHBseUZpbGVuYW1lc0FzVGFncyhDYXRjaDo6SUNvbmZpZyBjb25zdCYgY29uZmlnKSB7CiAgICAgICAgICAgICBhdXRvJiB0ZXN0cyA9IGNvbnN0X2Nhc3Q8c3RkOjp2ZWN0b3I8VGVzdENhc2U+Jj4oZ2V0QWxsVGVzdENhc2VzU29ydGVkKGNvbmZpZykpOwpAQCAtMTMyMTEsOSArMTA5ODgsNiBAQAogI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMpCiAgICAgICAgIGNvbnN0IGF1dG8mIGV4Y2VwdGlvbnMgPSBnZXRSZWdpc3RyeUh1YigpLmdldFN0YXJ0dXBFeGNlcHRpb25SZWdpc3RyeSgpLmdldEV4Y2VwdGlvbnMoKTsKICAgICAgICAgaWYgKCAhZXhjZXB0aW9ucy5lbXB0eSgpICkgewotICAgICAgICAgICAgY29uZmlnKCk7Ci0gICAgICAgICAgICBnZXRDdXJyZW50TXV0YWJsZUNvbnRleHQoKS5zZXRDb25maWcobV9jb25maWcpOwotCiAgICAgICAgICAgICBtX3N0YXJ0dXBFeGNlcHRpb25zID0gdHJ1ZTsKICAgICAgICAgICAgIENvbG91ciBjb2xvdXJHdWFyZCggQ29sb3VyOjpSZWQgKTsKICAgICAgICAgICAgIENhdGNoOjpjZXJyKCkgPDwgIkVycm9ycyBvY2N1cnJlZCBkdXJpbmcgc3RhcnR1cCEiIDw8ICdcbic7CkBAIC0xMzI0Myw3ICsxMTAxNyw3IEBACiAgICAgfQogICAgIHZvaWQgU2Vzc2lvbjo6bGliSWRlbnRpZnkoKSB7CiAgICAgICAgIENhdGNoOjpjb3V0KCkKLSAgICAgICAgICAgICAgICA8PCBzdGQ6OmxlZnQgPDwgc3RkOjpzZXR3KDE2KSA8PCAiZGVzY3JpcHRpb246ICIgPDwgIkEgQ2F0Y2gyIHRlc3QgZXhlY3V0YWJsZVxuIgorICAgICAgICAgICAgICAgIDw8IHN0ZDo6bGVmdCA8PCBzdGQ6OnNldHcoMTYpIDw8ICJkZXNjcmlwdGlvbjogIiA8PCAiQSBDYXRjaCB0ZXN0IGV4ZWN1dGFibGVcbiIKICAgICAgICAgICAgICAgICA8PCBzdGQ6OmxlZnQgPDwgc3RkOjpzZXR3KDE2KSA8PCAiY2F0ZWdvcnk6ICIgPDwgInRlc3RmcmFtZXdvcmtcbiIKICAgICAgICAgICAgICAgICA8PCBzdGQ6OmxlZnQgPDwgc3RkOjpzZXR3KDE2KSA8PCAiZnJhbWV3b3JrOiAiIDw8ICJDYXRjaCBUZXN0XG4iCiAgICAgICAgICAgICAgICAgPDwgc3RkOjpsZWZ0IDw8IHN0ZDo6c2V0dygxNikgPDwgInZlcnNpb246ICIgPDwgbGlicmFyeVZlcnNpb24oKSA8PCBzdGQ6OmVuZGw7CkBAIC0xMzI3NCwxNyArMTEwNDgsMTcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0jaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfV0NIQVIpICYmIGRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKFVOSUNPREUpCisjaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfV0NIQVIpICYmIGRlZmluZWQoV0lOMzIpICYmIGRlZmluZWQoVU5JQ09ERSkKICAgICBpbnQgU2Vzc2lvbjo6YXBwbHlDb21tYW5kTGluZSggaW50IGFyZ2MsIHdjaGFyX3QgY29uc3QgKiBjb25zdCAqIGFyZ3YgKSB7CiAKICAgICAgICAgY2hhciAqKnV0ZjhBcmd2ID0gbmV3IGNoYXIgKlsgYXJnYyBdOwogCiAgICAgICAgIGZvciAoIGludCBpID0gMDsgaSA8IGFyZ2M7ICsraSApIHsKLSAgICAgICAgICAgIGludCBidWZTaXplID0gV2lkZUNoYXJUb011bHRpQnl0ZSggQ1BfVVRGOCwgMCwgYXJndltpXSwgLTEsIG51bGxwdHIsIDAsIG51bGxwdHIsIG51bGxwdHIgKTsKKyAgICAgICAgICAgIGludCBidWZTaXplID0gV2lkZUNoYXJUb011bHRpQnl0ZSggQ1BfVVRGOCwgMCwgYXJndltpXSwgLTEsIE5VTEwsIDAsIE5VTEwsIE5VTEwgKTsKIAogICAgICAgICAgICAgdXRmOEFyZ3ZbIGkgXSA9IG5ldyBjaGFyWyBidWZTaXplIF07CiAKLSAgICAgICAgICAgIFdpZGVDaGFyVG9NdWx0aUJ5dGUoIENQX1VURjgsIDAsIGFyZ3ZbaV0sIC0xLCB1dGY4QXJndltpXSwgYnVmU2l6ZSwgbnVsbHB0ciwgbnVsbHB0ciApOworICAgICAgICAgICAgV2lkZUNoYXJUb011bHRpQnl0ZSggQ1BfVVRGOCwgMCwgYXJndltpXSwgLTEsIHV0ZjhBcmd2W2ldLCBidWZTaXplLCBOVUxMLCBOVUxMICk7CiAgICAgICAgIH0KIAogICAgICAgICBpbnQgcmV0dXJuQ29kZSA9IGFwcGx5Q29tbWFuZExpbmUoIGFyZ2MsIHV0ZjhBcmd2ICk7CkBAIC0xMzM1MSwxMiArMTExMjUsNyBAQAogICAgICAgICAgICAgaWYoIE9wdGlvbjxzdGQ6OnNpemVfdD4gbGlzdGVkID0gbGlzdCggbV9jb25maWcgKSApCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oICpsaXN0ZWQgKTsKIAotICAgICAgICAgICAgVGVzdEdyb3VwIHRlc3RzIHsgbV9jb25maWcgfTsKLSAgICAgICAgICAgIGF1dG8gY29uc3QgdG90YWxzID0gdGVzdHMuZXhlY3V0ZSgpOwotCi0gICAgICAgICAgICBpZiggbV9jb25maWctPndhcm5BYm91dE5vVGVzdHMoKSAmJiB0b3RhbHMuZXJyb3IgPT0gLTEgKQotICAgICAgICAgICAgICAgIHJldHVybiAyOwotCisgICAgICAgICAgICBhdXRvIHRvdGFscyA9IHJ1blRlc3RzKCBtX2NvbmZpZyApOwogICAgICAgICAgICAgLy8gTm90ZSB0aGF0IG9uIHVuaWNlcyBvbmx5IHRoZSBsb3dlciA4IGJpdHMgYXJlIHVzdWFsbHkgdXNlZCwgY2xhbXBpbmcKICAgICAgICAgICAgIC8vIHRoZSByZXR1cm4gdmFsdWUgdG8gMjU1IHByZXZlbnRzIGZhbHNlIG5lZ2F0aXZlIHdoZW4gc29tZSBtdWx0aXBsZQogICAgICAgICAgICAgLy8gb2YgMjU2IHRlc3RzIGhhcyBmYWlsZWQKQEAgLTEzNDMzLDcgKzExMjAyLDcgQEAKIAogICAgIENhdGNoOjpJU3RyZWFtOjp+SVN0cmVhbSgpID0gZGVmYXVsdDsKIAotICAgIG5hbWVzcGFjZSBEZXRhaWwgeyBuYW1lc3BhY2UgeworICAgIG5hbWVzcGFjZSBkZXRhaWwgeyBuYW1lc3BhY2UgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBXcml0ZXJGLCBzdGQ6OnNpemVfdCBidWZmZXJTaXplPTI1Nj4KICAgICAgICAgY2xhc3MgU3RyZWFtQnVmSW1wbCA6IHB1YmxpYyBzdGQ6OnN0cmVhbWJ1ZiB7CiAgICAgICAgICAgICBjaGFyIGRhdGFbYnVmZmVyU2l6ZV07CkBAIC0xMzUzMiwxNSArMTEzMDEsMTUgQEAKIAogICAgIGF1dG8gbWFrZVN0cmVhbSggU3RyaW5nUmVmIGNvbnN0ICZmaWxlbmFtZSApIC0+IElTdHJlYW0gY29uc3QqIHsKICAgICAgICAgaWYoIGZpbGVuYW1lLmVtcHR5KCkgKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBEZXRhaWw6OkNvdXRTdHJlYW0oKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgZGV0YWlsOjpDb3V0U3RyZWFtKCk7CiAgICAgICAgIGVsc2UgaWYoIGZpbGVuYW1lWzBdID09ICclJyApIHsKICAgICAgICAgICAgIGlmKCBmaWxlbmFtZSA9PSAiJWRlYnVnIiApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEZXRhaWw6OkRlYnVnT3V0U3RyZWFtKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBkZXRhaWw6OkRlYnVnT3V0U3RyZWFtKCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgQ0FUQ0hfRVJST1IoICJVbnJlY29nbmlzZWQgc3RyZWFtOiAnIiA8PCBmaWxlbmFtZSA8PCAiJyIgKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbmV3IERldGFpbDo6RmlsZVN0cmVhbSggZmlsZW5hbWUgKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgZGV0YWlsOjpGaWxlU3RyZWFtKCBmaWxlbmFtZSApOwogICAgIH0KIAogICAgIC8vIFRoaXMgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBpZGVhIG9mIGEgcG9vbCBvZiBvc3RyaW5nc3RyZWFtcyB0aGF0IGNhbiBiZSByZXVzZWQuCkBAIC0xMzU5Nyw3ICsxMTM2Niw2IEBACiAjaW5jbHVkZSA8b3N0cmVhbT4KICNpbmNsdWRlIDxjc3RyaW5nPgogI2luY2x1ZGUgPGNjdHlwZT4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKQEAgLTEzNjM4LDE4ICsxMTQwNiw2IEBACiAgICAgICAgIHJldHVybiBzdGFydCAhPSBzdGQ6OnN0cmluZzo6bnBvcyA/IHN0ci5zdWJzdHIoIHN0YXJ0LCAxK2VuZC1zdGFydCApIDogc3RkOjpzdHJpbmcoKTsKICAgICB9CiAKLSAgICBTdHJpbmdSZWYgdHJpbShTdHJpbmdSZWYgcmVmKSB7Ci0gICAgICAgIGNvbnN0IGF1dG8gaXNfd3MgPSBbXShjaGFyIGMpIHsKLSAgICAgICAgICAgIHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJzsKLSAgICAgICAgfTsKLSAgICAgICAgc2l6ZV90IHJlYWxfYmVnaW4gPSAwOwotICAgICAgICB3aGlsZSAocmVhbF9iZWdpbiA8IHJlZi5zaXplKCkgJiYgaXNfd3MocmVmW3JlYWxfYmVnaW5dKSkgeyArK3JlYWxfYmVnaW47IH0KLSAgICAgICAgc2l6ZV90IHJlYWxfZW5kID0gcmVmLnNpemUoKTsKLSAgICAgICAgd2hpbGUgKHJlYWxfZW5kID4gcmVhbF9iZWdpbiAmJiBpc193cyhyZWZbcmVhbF9lbmQgLSAxXSkpIHsgLS1yZWFsX2VuZDsgfQotCi0gICAgICAgIHJldHVybiByZWYuc3Vic3RyKHJlYWxfYmVnaW4sIHJlYWxfZW5kIC0gcmVhbF9iZWdpbik7Ci0gICAgfQotCiAgICAgYm9vbCByZXBsYWNlSW5QbGFjZSggc3RkOjpzdHJpbmcmIHN0ciwgc3RkOjpzdHJpbmcgY29uc3QmIHJlcGxhY2VUaGlzLCBzdGQ6OnN0cmluZyBjb25zdCYgd2l0aFRoaXMgKSB7CiAgICAgICAgIGJvb2wgcmVwbGFjZWQgPSBmYWxzZTsKICAgICAgICAgc3RkOjpzaXplX3QgaSA9IHN0ci5maW5kKCByZXBsYWNlVGhpcyApOwpAQCAtMTM2NjQsMjEgKzExNDIwLDYgQEAKICAgICAgICAgcmV0dXJuIHJlcGxhY2VkOwogICAgIH0KIAotICAgIHN0ZDo6dmVjdG9yPFN0cmluZ1JlZj4gc3BsaXRTdHJpbmdSZWYoIFN0cmluZ1JlZiBzdHIsIGNoYXIgZGVsaW1pdGVyICkgewotICAgICAgICBzdGQ6OnZlY3RvcjxTdHJpbmdSZWY+IHN1YlN0cmluZ3M7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IHN0YXJ0ID0gMDsKLSAgICAgICAgZm9yKHN0ZDo6c2l6ZV90IHBvcyA9IDA7IHBvcyA8IHN0ci5zaXplKCk7ICsrcG9zICkgewotICAgICAgICAgICAgaWYoIHN0cltwb3NdID09IGRlbGltaXRlciApIHsKLSAgICAgICAgICAgICAgICBpZiggcG9zIC0gc3RhcnQgPiAxICkKLSAgICAgICAgICAgICAgICAgICAgc3ViU3RyaW5ncy5wdXNoX2JhY2soIHN0ci5zdWJzdHIoIHN0YXJ0LCBwb3Mtc3RhcnQgKSApOwotICAgICAgICAgICAgICAgIHN0YXJ0ID0gcG9zKzE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYoIHN0YXJ0IDwgc3RyLnNpemUoKSApCi0gICAgICAgICAgICBzdWJTdHJpbmdzLnB1c2hfYmFjayggc3RyLnN1YnN0ciggc3RhcnQsIHN0ci5zaXplKCktc3RhcnQgKSApOwotICAgICAgICByZXR1cm4gc3ViU3RyaW5nczsKLSAgICB9Ci0KICAgICBwbHVyYWxpc2U6OnBsdXJhbGlzZSggc3RkOjpzaXplX3QgY291bnQsIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYWJlbCApCiAgICAgOiAgIG1fY291bnQoIGNvdW50ICksCiAgICAgICAgIG1fbGFiZWwoIGxhYmVsICkKQEAgLTEzNjk1LDQ2ICsxMTQzNiwxMjMgQEAKIC8vIGVuZCBjYXRjaF9zdHJpbmdfbWFuaXAuY3BwCiAvLyBzdGFydCBjYXRjaF9zdHJpbmdyZWYuY3BwCiAKLSNpbmNsdWRlIDxhbGdvcml0aG0+CisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjICAgIHByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyMgICAgcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdleGl0LXRpbWUtZGVzdHJ1Y3RvcnMiCisjZW5kaWYKKwogI2luY2x1ZGUgPG9zdHJlYW0+CiAjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDxjc3RkaW50PgogCituYW1lc3BhY2UgeworICAgIGNvbnN0IHVpbnQzMl90IGJ5dGVfMl9sZWFkID0gMHhDMDsKKyAgICBjb25zdCB1aW50MzJfdCBieXRlXzNfbGVhZCA9IDB4RTA7CisgICAgY29uc3QgdWludDMyX3QgYnl0ZV80X2xlYWQgPSAweEYwOworfQorCiBuYW1lc3BhY2UgQ2F0Y2ggewogICAgIFN0cmluZ1JlZjo6U3RyaW5nUmVmKCBjaGFyIGNvbnN0KiByYXdDaGFycyApIG5vZXhjZXB0CiAgICAgOiBTdHJpbmdSZWYoIHJhd0NoYXJzLCBzdGF0aWNfY2FzdDxTdHJpbmdSZWY6OnNpemVfdHlwZT4oc3RkOjpzdHJsZW4ocmF3Q2hhcnMpICkgKQogICAgIHt9CiAKKyAgICBTdHJpbmdSZWY6Om9wZXJhdG9yIHN0ZDo6c3RyaW5nKCkgY29uc3QgeworICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoIG1fc3RhcnQsIG1fc2l6ZSApOworICAgIH0KKworICAgIHZvaWQgU3RyaW5nUmVmOjpzd2FwKCBTdHJpbmdSZWYmIG90aGVyICkgbm9leGNlcHQgeworICAgICAgICBzdGQ6OnN3YXAoIG1fc3RhcnQsIG90aGVyLm1fc3RhcnQgKTsKKyAgICAgICAgc3RkOjpzd2FwKCBtX3NpemUsIG90aGVyLm1fc2l6ZSApOworICAgICAgICBzdGQ6OnN3YXAoIG1fZGF0YSwgb3RoZXIubV9kYXRhICk7CisgICAgfQorCiAgICAgYXV0byBTdHJpbmdSZWY6OmNfc3RyKCkgY29uc3QgLT4gY2hhciBjb25zdCogewotICAgICAgICBDQVRDSF9FTkZPUkNFKGlzTnVsbFRlcm1pbmF0ZWQoKSwgIkNhbGxlZCBTdHJpbmdSZWY6OmNfc3RyKCkgb24gYSBub24tbnVsbC10ZXJtaW5hdGVkIGluc3RhbmNlIik7CisgICAgICAgIGlmKCBpc1N1YnN0cmluZygpICkKKyAgICAgICAgICAgY29uc3RfY2FzdDxTdHJpbmdSZWYqPiggdGhpcyApLT50YWtlT3duZXJzaGlwKCk7CiAgICAgICAgIHJldHVybiBtX3N0YXJ0OwogICAgIH0KLSAgICBhdXRvIFN0cmluZ1JlZjo6ZGF0YSgpIGNvbnN0IG5vZXhjZXB0IC0+IGNoYXIgY29uc3QqIHsKKyAgICBhdXRvIFN0cmluZ1JlZjo6Y3VycmVudERhdGEoKSBjb25zdCBub2V4Y2VwdCAtPiBjaGFyIGNvbnN0KiB7CiAgICAgICAgIHJldHVybiBtX3N0YXJ0OwogICAgIH0KIAotICAgIGF1dG8gU3RyaW5nUmVmOjpzdWJzdHIoIHNpemVfdHlwZSBzdGFydCwgc2l6ZV90eXBlIHNpemUgKSBjb25zdCBub2V4Y2VwdCAtPiBTdHJpbmdSZWYgewotICAgICAgICBpZiAoc3RhcnQgPCBtX3NpemUpIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmdSZWYobV9zdGFydCArIHN0YXJ0LCAoc3RkOjptaW4pKG1fc2l6ZSAtIHN0YXJ0LCBzaXplKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nUmVmKCk7CisgICAgYXV0byBTdHJpbmdSZWY6OmlzT3duZWQoKSBjb25zdCBub2V4Y2VwdCAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YSAhPSBudWxscHRyOworICAgIH0KKyAgICBhdXRvIFN0cmluZ1JlZjo6aXNTdWJzdHJpbmcoKSBjb25zdCBub2V4Y2VwdCAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuIG1fc3RhcnRbbV9zaXplXSAhPSAnXDAnOworICAgIH0KKworICAgIHZvaWQgU3RyaW5nUmVmOjp0YWtlT3duZXJzaGlwKCkgeworICAgICAgICBpZiggIWlzT3duZWQoKSApIHsKKyAgICAgICAgICAgIG1fZGF0YSA9IG5ldyBjaGFyW21fc2l6ZSsxXTsKKyAgICAgICAgICAgIG1lbWNweSggbV9kYXRhLCBtX3N0YXJ0LCBtX3NpemUgKTsKKyAgICAgICAgICAgIG1fZGF0YVttX3NpemVdID0gJ1wwJzsKKyAgICAgICAgICAgIG1fc3RhcnQgPSBtX2RhdGE7CiAgICAgICAgIH0KICAgICB9CisgICAgYXV0byBTdHJpbmdSZWY6OnN1YnN0ciggc2l6ZV90eXBlIHN0YXJ0LCBzaXplX3R5cGUgc2l6ZSApIGNvbnN0IG5vZXhjZXB0IC0+IFN0cmluZ1JlZiB7CisgICAgICAgIGlmKCBzdGFydCA8IG1fc2l6ZSApCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nUmVmKCBtX3N0YXJ0K3N0YXJ0LCBzaXplICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmdSZWYoKTsKKyAgICB9CiAgICAgYXV0byBTdHJpbmdSZWY6Om9wZXJhdG9yID09ICggU3RyaW5nUmVmIGNvbnN0JiBvdGhlciApIGNvbnN0IG5vZXhjZXB0IC0+IGJvb2wgewotICAgICAgICByZXR1cm4gbV9zaXplID09IG90aGVyLm1fc2l6ZQotICAgICAgICAgICAgJiYgKHN0ZDo6bWVtY21wKCBtX3N0YXJ0LCBvdGhlci5tX3N0YXJ0LCBtX3NpemUgKSA9PSAwKTsKKyAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzaXplKCkgPT0gb3RoZXIuc2l6ZSgpICYmCisgICAgICAgICAgICAoc3RkOjpzdHJuY21wKCBtX3N0YXJ0LCBvdGhlci5tX3N0YXJ0LCBzaXplKCkgKSA9PSAwKTsKKyAgICB9CisgICAgYXV0byBTdHJpbmdSZWY6Om9wZXJhdG9yICE9ICggU3RyaW5nUmVmIGNvbnN0JiBvdGhlciApIGNvbnN0IG5vZXhjZXB0IC0+IGJvb2wgeworICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0oIG90aGVyICk7CisgICAgfQorCisgICAgYXV0byBTdHJpbmdSZWY6Om9wZXJhdG9yW10oc2l6ZV90eXBlIGluZGV4KSBjb25zdCBub2V4Y2VwdCAtPiBjaGFyIHsKKyAgICAgICAgcmV0dXJuIG1fc3RhcnRbaW5kZXhdOworICAgIH0KKworICAgIGF1dG8gU3RyaW5nUmVmOjpudW1iZXJPZkNoYXJhY3RlcnMoKSBjb25zdCBub2V4Y2VwdCAtPiBzaXplX3R5cGUgeworICAgICAgICBzaXplX3R5cGUgbm9DaGFycyA9IG1fc2l6ZTsKKyAgICAgICAgLy8gTWFrZSBhZGp1c3RtZW50cyBmb3IgdWZ0IGVuY29kaW5ncworICAgICAgICBmb3IoIHNpemVfdHlwZSBpPTA7IGkgPCBtX3NpemU7ICsraSApIHsKKyAgICAgICAgICAgIGNoYXIgYyA9IG1fc3RhcnRbaV07CisgICAgICAgICAgICBpZiggKCBjICYgYnl0ZV8yX2xlYWQgKSA9PSBieXRlXzJfbGVhZCApIHsKKyAgICAgICAgICAgICAgICBub0NoYXJzLS07CisgICAgICAgICAgICAgICAgaWYgKCggYyAmIGJ5dGVfM19sZWFkICkgPT0gYnl0ZV8zX2xlYWQgKQorICAgICAgICAgICAgICAgICAgICBub0NoYXJzLS07CisgICAgICAgICAgICAgICAgaWYoICggYyAmIGJ5dGVfNF9sZWFkICkgPT0gYnl0ZV80X2xlYWQgKQorICAgICAgICAgICAgICAgICAgICBub0NoYXJzLS07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5vQ2hhcnM7CisgICAgfQorCisgICAgYXV0byBvcGVyYXRvciArICggU3RyaW5nUmVmIGNvbnN0JiBsaHMsIFN0cmluZ1JlZiBjb25zdCYgcmhzICkgLT4gc3RkOjpzdHJpbmcgeworICAgICAgICBzdGQ6OnN0cmluZyBzdHI7CisgICAgICAgIHN0ci5yZXNlcnZlKCBsaHMuc2l6ZSgpICsgcmhzLnNpemUoKSApOworICAgICAgICBzdHIgKz0gbGhzOworICAgICAgICBzdHIgKz0gcmhzOworICAgICAgICByZXR1cm4gc3RyOworICAgIH0KKyAgICBhdXRvIG9wZXJhdG9yICsgKCBTdHJpbmdSZWYgY29uc3QmIGxocywgY29uc3QgY2hhciogcmhzICkgLT4gc3RkOjpzdHJpbmcgeworICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoIGxocyApICsgc3RkOjpzdHJpbmcoIHJocyApOworICAgIH0KKyAgICBhdXRvIG9wZXJhdG9yICsgKCBjaGFyIGNvbnN0KiBsaHMsIFN0cmluZ1JlZiBjb25zdCYgcmhzICkgLT4gc3RkOjpzdHJpbmcgeworICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoIGxocyApICsgc3RkOjpzdHJpbmcoIHJocyApOwogICAgIH0KIAogICAgIGF1dG8gb3BlcmF0b3IgPDwgKCBzdGQ6Om9zdHJlYW0mIG9zLCBTdHJpbmdSZWYgY29uc3QmIHN0ciApIC0+IHN0ZDo6b3N0cmVhbSYgewotICAgICAgICByZXR1cm4gb3Mud3JpdGUoc3RyLmRhdGEoKSwgc3RyLnNpemUoKSk7CisgICAgICAgIHJldHVybiBvcy53cml0ZShzdHIuY3VycmVudERhdGEoKSwgc3RyLnNpemUoKSk7CiAgICAgfQogCiAgICAgYXV0byBvcGVyYXRvcis9KCBzdGQ6OnN0cmluZyYgbGhzLCBTdHJpbmdSZWYgY29uc3QmIHJocyApIC0+IHN0ZDo6c3RyaW5nJiB7Ci0gICAgICAgIGxocy5hcHBlbmQocmhzLmRhdGEoKSwgcmhzLnNpemUoKSk7CisgICAgICAgIGxocy5hcHBlbmQocmhzLmN1cnJlbnREYXRhKCksIHJocy5zaXplKCkpOwogICAgICAgICByZXR1cm4gbGhzOwogICAgIH0KIAogfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKKworI2lmIGRlZmluZWQoX19jbGFuZ19fKQorIyAgICBwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgogLy8gZW5kIGNhdGNoX3N0cmluZ3JlZi5jcHAKIC8vIHN0YXJ0IGNhdGNoX3RhZ19hbGlhcy5jcHAKIApAQCAtMTM4NTMsNyArMTE2NzEsOCBAQAogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdGFnczsKICAgICAgICAgc3RkOjpzdHJpbmcgZGVzYywgdGFnOwogICAgICAgICBib29sIGluVGFnID0gZmFsc2U7Ci0gICAgICAgIGZvciAoY2hhciBjIDogbmFtZUFuZFRhZ3MudGFncykgeworICAgICAgICBzdGQ6OnN0cmluZyBfZGVzY09yVGFncyA9IG5hbWVBbmRUYWdzLnRhZ3M7CisgICAgICAgIGZvciAoY2hhciBjIDogX2Rlc2NPclRhZ3MpIHsKICAgICAgICAgICAgIGlmKCAhaW5UYWcgKSB7CiAgICAgICAgICAgICAgICAgaWYoIGMgPT0gJ1snICkKICAgICAgICAgICAgICAgICAgICAgaW5UYWcgPSB0cnVlOwpAQCAtMTM4ODMsMTEgKzExNzAyLDEwIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYoIGlzSGlkZGVuICkgewotICAgICAgICAgICAgLy8gQWRkIGFsbCAiaGlkZGVuIiB0YWdzIHRvIG1ha2UgdGhlbSBiZWhhdmUgaWRlbnRpY2FsbHkKLSAgICAgICAgICAgIHRhZ3MuaW5zZXJ0KCB0YWdzLmVuZCgpLCB7ICIuIiwgIiFoaWRlIiB9ICk7CisgICAgICAgICAgICB0YWdzLnB1c2hfYmFjayggIi4iICk7CiAgICAgICAgIH0KIAotICAgICAgICBUZXN0Q2FzZUluZm8gaW5mbyggc3RhdGljX2Nhc3Q8c3RkOjpzdHJpbmc+KG5hbWVBbmRUYWdzLm5hbWUpLCBfY2xhc3NOYW1lLCBkZXNjLCB0YWdzLCBfbGluZUluZm8gKTsKKyAgICAgICAgVGVzdENhc2VJbmZvIGluZm8oIG5hbWVBbmRUYWdzLm5hbWUsIF9jbGFzc05hbWUsIGRlc2MsIHRhZ3MsIF9saW5lSW5mbyApOwogICAgICAgICByZXR1cm4gVGVzdENhc2UoIF90ZXN0Q2FzZSwgc3RkOjptb3ZlKGluZm8pICk7CiAgICAgfQogCkBAIC0xNDAwMSwxMyArMTE4MTksOCBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzb3J0ZWQ7CiAgICAgfQotCi0gICAgYm9vbCBpc1Rocm93U2FmZSggVGVzdENhc2UgY29uc3QmIHRlc3RDYXNlLCBJQ29uZmlnIGNvbnN0JiBjb25maWcgKSB7Ci0gICAgICAgIHJldHVybiAhdGVzdENhc2UudGhyb3dzKCkgfHwgY29uZmlnLmFsbG93VGhyb3dzKCk7Ci0gICAgfQotCiAgICAgYm9vbCBtYXRjaFRlc3QoIFRlc3RDYXNlIGNvbnN0JiB0ZXN0Q2FzZSwgVGVzdFNwZWMgY29uc3QmIHRlc3RTcGVjLCBJQ29uZmlnIGNvbnN0JiBjb25maWcgKSB7Ci0gICAgICAgIHJldHVybiB0ZXN0U3BlYy5tYXRjaGVzKCB0ZXN0Q2FzZSApICYmIGlzVGhyb3dTYWZlKCB0ZXN0Q2FzZSwgY29uZmlnICk7CisgICAgICAgIHJldHVybiB0ZXN0U3BlYy5tYXRjaGVzKCB0ZXN0Q2FzZSApICYmICggY29uZmlnLmFsbG93VGhyb3dzKCkgfHwgIXRlc3RDYXNlLnRocm93cygpICk7CiAgICAgfQogCiAgICAgdm9pZCBlbmZvcmNlTm9EdXBsaWNhdGVUZXN0Q2FzZXMoIHN0ZDo6dmVjdG9yPFRlc3RDYXNlPiBjb25zdCYgZnVuY3Rpb25zICkgewpAQCAtMTQwNjgsNyArMTE4ODEsNyBAQAogICAgIH0KIAogICAgIHN0ZDo6c3RyaW5nIGV4dHJhY3RDbGFzc05hbWUoIFN0cmluZ1JlZiBjb25zdCYgY2xhc3NPclF1YWxpZmllZE1ldGhvZE5hbWUgKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGNsYXNzTmFtZShjbGFzc09yUXVhbGlmaWVkTWV0aG9kTmFtZSk7CisgICAgICAgIHN0ZDo6c3RyaW5nIGNsYXNzTmFtZSA9IGNsYXNzT3JRdWFsaWZpZWRNZXRob2ROYW1lOwogICAgICAgICBpZiggc3RhcnRzV2l0aCggY2xhc3NOYW1lLCAnJicgKSApCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0ZDo6c2l6ZV90IGxhc3RDb2xvbnMgPSBjbGFzc05hbWUucmZpbmQoICI6OiIgKTsKQEAgLTE0MjEwLDcgKzEyMDIzLDcgQEAKICAgICAgICAgICAgICAgICBtX3J1blN0YXRlID0gQ29tcGxldGVkU3VjY2Vzc2Z1bGx5OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBFeGVjdXRpbmdDaGlsZHJlbjoKLSAgICAgICAgICAgICAgICBpZiggc3RkOjphbGxfb2YobV9jaGlsZHJlbi5iZWdpbigpLCBtX2NoaWxkcmVuLmVuZCgpLCBbXShJVHJhY2tlclB0ciBjb25zdCYgdCl7IHJldHVybiB0LT5pc0NvbXBsZXRlKCk7IH0pICkKKyAgICAgICAgICAgICAgICBpZiggbV9jaGlsZHJlbi5lbXB0eSgpIHx8IG1fY2hpbGRyZW4uYmFjaygpLT5pc0NvbXBsZXRlKCkgKQogICAgICAgICAgICAgICAgICAgICBtX3J1blN0YXRlID0gQ29tcGxldGVkU3VjY2Vzc2Z1bGx5OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0xNDI0NSw4ICsxMjA1OCw3IEBACiAgICAgfQogCiAgICAgU2VjdGlvblRyYWNrZXI6OlNlY3Rpb25UcmFja2VyKCBOYW1lQW5kTG9jYXRpb24gY29uc3QmIG5hbWVBbmRMb2NhdGlvbiwgVHJhY2tlckNvbnRleHQmIGN0eCwgSVRyYWNrZXIqIHBhcmVudCApCi0gICAgOiAgIFRyYWNrZXJCYXNlKCBuYW1lQW5kTG9jYXRpb24sIGN0eCwgcGFyZW50ICksCi0gICAgICAgIG1fdHJpbW1lZF9uYW1lKHRyaW0obmFtZUFuZExvY2F0aW9uLm5hbWUpKQorICAgIDogICBUcmFja2VyQmFzZSggbmFtZUFuZExvY2F0aW9uLCBjdHgsIHBhcmVudCApCiAgICAgewogICAgICAgICBpZiggcGFyZW50ICkgewogICAgICAgICAgICAgd2hpbGUoICFwYXJlbnQtPmlzU2VjdGlvblRyYWNrZXIoKSApCkBAIC0xNDI2MCwxMSArMTIwNzIsMTIgQEAKICAgICBib29sIFNlY3Rpb25UcmFja2VyOjppc0NvbXBsZXRlKCkgY29uc3QgewogICAgICAgICBib29sIGNvbXBsZXRlID0gdHJ1ZTsKIAotICAgICAgICBpZiAoKG1fZmlsdGVycy5lbXB0eSgpIHx8IG1fZmlsdGVyc1swXSA9PSAiIikKLSAgICAgICAgICAgIHx8IHN0ZDo6ZmluZChtX2ZpbHRlcnMuYmVnaW4oKSwgbV9maWx0ZXJzLmVuZCgpLCBtX3RyaW1tZWRfbmFtZSkgIT0gbV9maWx0ZXJzLmVuZCgpKSB7CisgICAgICAgIGlmICgobV9maWx0ZXJzLmVtcHR5KCkgfHwgbV9maWx0ZXJzWzBdID09ICIiKSB8fAorICAgICAgICAgICAgIHN0ZDo6ZmluZChtX2ZpbHRlcnMuYmVnaW4oKSwgbV9maWx0ZXJzLmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICBtX25hbWVBbmRMb2NhdGlvbi5uYW1lKSAhPSBtX2ZpbHRlcnMuZW5kKCkpCiAgICAgICAgICAgICBjb21wbGV0ZSA9IFRyYWNrZXJCYXNlOjppc0NvbXBsZXRlKCk7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvbXBsZXRlOworCiAgICAgfQogCiAgICAgYm9vbCBTZWN0aW9uVHJhY2tlcjo6aXNTZWN0aW9uVHJhY2tlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTE0Mjg4LDIxICsxMjEwMSwyMCBAQAogICAgIH0KIAogICAgIHZvaWQgU2VjdGlvblRyYWNrZXI6OnRyeU9wZW4oKSB7Ci0gICAgICAgIGlmKCAhaXNDb21wbGV0ZSgpICkKKyAgICAgICAgaWYoICFpc0NvbXBsZXRlKCkgJiYgKG1fZmlsdGVycy5lbXB0eSgpIHx8IG1fZmlsdGVyc1swXS5lbXB0eSgpIHx8ICBtX2ZpbHRlcnNbMF0gPT0gbV9uYW1lQW5kTG9jYXRpb24ubmFtZSApICkKICAgICAgICAgICAgIG9wZW4oKTsKICAgICB9CiAKICAgICB2b2lkIFNlY3Rpb25UcmFja2VyOjphZGRJbml0aWFsRmlsdGVycyggc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBmaWx0ZXJzICkgewogICAgICAgICBpZiggIWZpbHRlcnMuZW1wdHkoKSApIHsKLSAgICAgICAgICAgIG1fZmlsdGVycy5yZXNlcnZlKCBtX2ZpbHRlcnMuc2l6ZSgpICsgZmlsdGVycy5zaXplKCkgKyAyICk7Ci0gICAgICAgICAgICBtX2ZpbHRlcnMuZW1wbGFjZV9iYWNrKCIiKTsgLy8gUm9vdCAtIHNob3VsZCBuZXZlciBiZSBjb25zdWx0ZWQKLSAgICAgICAgICAgIG1fZmlsdGVycy5lbXBsYWNlX2JhY2soIiIpOyAvLyBUZXN0IENhc2UgLSBub3QgYSBzZWN0aW9uIGZpbHRlcgorICAgICAgICAgICAgbV9maWx0ZXJzLnB1c2hfYmFjaygiIik7IC8vIFJvb3QgLSBzaG91bGQgbmV2ZXIgYmUgY29uc3VsdGVkCisgICAgICAgICAgICBtX2ZpbHRlcnMucHVzaF9iYWNrKCIiKTsgLy8gVGVzdCBDYXNlIC0gbm90IGEgc2VjdGlvbiBmaWx0ZXIKICAgICAgICAgICAgIG1fZmlsdGVycy5pbnNlcnQoIG1fZmlsdGVycy5lbmQoKSwgZmlsdGVycy5iZWdpbigpLCBmaWx0ZXJzLmVuZCgpICk7CiAgICAgICAgIH0KICAgICB9CiAgICAgdm9pZCBTZWN0aW9uVHJhY2tlcjo6YWRkTmV4dEZpbHRlcnMoIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgZmlsdGVycyApIHsKICAgICAgICAgaWYoIGZpbHRlcnMuc2l6ZSgpID4gMSApCi0gICAgICAgICAgICBtX2ZpbHRlcnMuaW5zZXJ0KCBtX2ZpbHRlcnMuZW5kKCksIGZpbHRlcnMuYmVnaW4oKSsxLCBmaWx0ZXJzLmVuZCgpICk7CisgICAgICAgICAgICBtX2ZpbHRlcnMuaW5zZXJ0KCBtX2ZpbHRlcnMuZW5kKCksICsrZmlsdGVycy5iZWdpbigpLCBmaWx0ZXJzLmVuZCgpICk7CiAgICAgfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0Q2FzZVRyYWNraW5nCkBAIC0xNDM1NCw4MSArMTIxNjYsNDcgQEAKIAogbmFtZXNwYWNlIENhdGNoIHsKIAotICAgIFRlc3RTcGVjOjpQYXR0ZXJuOjpQYXR0ZXJuKCBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSApCi0gICAgOiBtX25hbWUoIG5hbWUgKQotICAgIHt9Ci0KICAgICBUZXN0U3BlYzo6UGF0dGVybjo6flBhdHRlcm4oKSA9IGRlZmF1bHQ7CisgICAgVGVzdFNwZWM6Ok5hbWVQYXR0ZXJuOjp+TmFtZVBhdHRlcm4oKSA9IGRlZmF1bHQ7CisgICAgVGVzdFNwZWM6OlRhZ1BhdHRlcm46On5UYWdQYXR0ZXJuKCkgPSBkZWZhdWx0OworICAgIFRlc3RTcGVjOjpFeGNsdWRlZFBhdHRlcm46On5FeGNsdWRlZFBhdHRlcm4oKSA9IGRlZmF1bHQ7CiAKLSAgICBzdGQ6OnN0cmluZyBjb25zdCYgVGVzdFNwZWM6OlBhdHRlcm46Om5hbWUoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX25hbWU7Ci0gICAgfQotCi0gICAgVGVzdFNwZWM6Ok5hbWVQYXR0ZXJuOjpOYW1lUGF0dGVybiggc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUsIHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWx0ZXJTdHJpbmcgKQotICAgIDogUGF0dGVybiggZmlsdGVyU3RyaW5nICkKLSAgICAsIG1fd2lsZGNhcmRQYXR0ZXJuKCB0b0xvd2VyKCBuYW1lICksIENhc2VTZW5zaXRpdmU6Ok5vICkKKyAgICBUZXN0U3BlYzo6TmFtZVBhdHRlcm46Ok5hbWVQYXR0ZXJuKCBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSApCisgICAgOiBtX3dpbGRjYXJkUGF0dGVybiggdG9Mb3dlciggbmFtZSApLCBDYXNlU2Vuc2l0aXZlOjpObyApCiAgICAge30KLQogICAgIGJvb2wgVGVzdFNwZWM6Ok5hbWVQYXR0ZXJuOjptYXRjaGVzKCBUZXN0Q2FzZUluZm8gY29uc3QmIHRlc3RDYXNlICkgY29uc3QgewotICAgICAgICByZXR1cm4gbV93aWxkY2FyZFBhdHRlcm4ubWF0Y2hlcyggdGVzdENhc2UubmFtZSApOworICAgICAgICByZXR1cm4gbV93aWxkY2FyZFBhdHRlcm4ubWF0Y2hlcyggdG9Mb3dlciggdGVzdENhc2UubmFtZSApICk7CiAgICAgfQogCi0gICAgVGVzdFNwZWM6OlRhZ1BhdHRlcm46OlRhZ1BhdHRlcm4oIHN0ZDo6c3RyaW5nIGNvbnN0JiB0YWcsIHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWx0ZXJTdHJpbmcgKQotICAgIDogUGF0dGVybiggZmlsdGVyU3RyaW5nICkKLSAgICAsIG1fdGFnKCB0b0xvd2VyKCB0YWcgKSApCi0gICAge30KLQorICAgIFRlc3RTcGVjOjpUYWdQYXR0ZXJuOjpUYWdQYXR0ZXJuKCBzdGQ6OnN0cmluZyBjb25zdCYgdGFnICkgOiBtX3RhZyggdG9Mb3dlciggdGFnICkgKSB7fQogICAgIGJvb2wgVGVzdFNwZWM6OlRhZ1BhdHRlcm46Om1hdGNoZXMoIFRlc3RDYXNlSW5mbyBjb25zdCYgdGVzdENhc2UgKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBzdGQ6OmZpbmQoYmVnaW4odGVzdENhc2UubGNhc2VUYWdzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQodGVzdENhc2UubGNhc2VUYWdzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RhZykgIT0gZW5kKHRlc3RDYXNlLmxjYXNlVGFncyk7CiAgICAgfQogCi0gICAgVGVzdFNwZWM6OkV4Y2x1ZGVkUGF0dGVybjo6RXhjbHVkZWRQYXR0ZXJuKCBQYXR0ZXJuUHRyIGNvbnN0JiB1bmRlcmx5aW5nUGF0dGVybiApCi0gICAgOiBQYXR0ZXJuKCB1bmRlcmx5aW5nUGF0dGVybi0+bmFtZSgpICkKLSAgICAsIG1fdW5kZXJseWluZ1BhdHRlcm4oIHVuZGVybHlpbmdQYXR0ZXJuICkKLSAgICB7fQotCi0gICAgYm9vbCBUZXN0U3BlYzo6RXhjbHVkZWRQYXR0ZXJuOjptYXRjaGVzKCBUZXN0Q2FzZUluZm8gY29uc3QmIHRlc3RDYXNlICkgY29uc3QgewotICAgICAgICByZXR1cm4gIW1fdW5kZXJseWluZ1BhdHRlcm4tPm1hdGNoZXMoIHRlc3RDYXNlICk7Ci0gICAgfQorICAgIFRlc3RTcGVjOjpFeGNsdWRlZFBhdHRlcm46OkV4Y2x1ZGVkUGF0dGVybiggUGF0dGVyblB0ciBjb25zdCYgdW5kZXJseWluZ1BhdHRlcm4gKSA6IG1fdW5kZXJseWluZ1BhdHRlcm4oIHVuZGVybHlpbmdQYXR0ZXJuICkge30KKyAgICBib29sIFRlc3RTcGVjOjpFeGNsdWRlZFBhdHRlcm46Om1hdGNoZXMoIFRlc3RDYXNlSW5mbyBjb25zdCYgdGVzdENhc2UgKSBjb25zdCB7IHJldHVybiAhbV91bmRlcmx5aW5nUGF0dGVybi0+bWF0Y2hlcyggdGVzdENhc2UgKTsgfQogCiAgICAgYm9vbCBUZXN0U3BlYzo6RmlsdGVyOjptYXRjaGVzKCBUZXN0Q2FzZUluZm8gY29uc3QmIHRlc3RDYXNlICkgY29uc3QgewotICAgICAgICByZXR1cm4gc3RkOjphbGxfb2YoIG1fcGF0dGVybnMuYmVnaW4oKSwgbV9wYXR0ZXJucy5lbmQoKSwgWyZdKCBQYXR0ZXJuUHRyIGNvbnN0JiBwICl7IHJldHVybiBwLT5tYXRjaGVzKCB0ZXN0Q2FzZSApOyB9ICk7Ci0gICAgfQotCi0gICAgc3RkOjpzdHJpbmcgVGVzdFNwZWM6OkZpbHRlcjo6bmFtZSgpIGNvbnN0IHsKLSAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKLSAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiBwIDogbV9wYXR0ZXJucyApCi0gICAgICAgICAgICBuYW1lICs9IHAtPm5hbWUoKTsKLSAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgICAgIC8vIEFsbCBwYXR0ZXJucyBpbiBhIGZpbHRlciBtdXN0IG1hdGNoIGZvciB0aGUgZmlsdGVyIHRvIGJlIGEgbWF0Y2gKKyAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiBwYXR0ZXJuIDogbV9wYXR0ZXJucyApIHsKKyAgICAgICAgICAgIGlmKCAhcGF0dGVybi0+bWF0Y2hlcyggdGVzdENhc2UgKSApCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGJvb2wgVGVzdFNwZWM6Omhhc0ZpbHRlcnMoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiAhbV9maWx0ZXJzLmVtcHR5KCk7CiAgICAgfQotCiAgICAgYm9vbCBUZXN0U3BlYzo6bWF0Y2hlcyggVGVzdENhc2VJbmZvIGNvbnN0JiB0ZXN0Q2FzZSApIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6YW55X29mKCBtX2ZpbHRlcnMuYmVnaW4oKSwgbV9maWx0ZXJzLmVuZCgpLCBbJl0oIEZpbHRlciBjb25zdCYgZiApeyByZXR1cm4gZi5tYXRjaGVzKCB0ZXN0Q2FzZSApOyB9ICk7CisgICAgICAgIC8vIEEgVGVzdFNwZWMgbWF0Y2hlcyBpZiBhbnkgZmlsdGVyIG1hdGNoZXMKKyAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiBmaWx0ZXIgOiBtX2ZpbHRlcnMgKQorICAgICAgICAgICAgaWYoIGZpbHRlci5tYXRjaGVzKCB0ZXN0Q2FzZSApICkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAgIFRlc3RTcGVjOjpNYXRjaGVzIFRlc3RTcGVjOjptYXRjaGVzQnlGaWx0ZXIoIHN0ZDo6dmVjdG9yPFRlc3RDYXNlPiBjb25zdCYgdGVzdENhc2VzLCBJQ29uZmlnIGNvbnN0JiBjb25maWcgKSBjb25zdAotICAgIHsKLSAgICAgICAgTWF0Y2hlcyBtYXRjaGVzKCBtX2ZpbHRlcnMuc2l6ZSgpICk7Ci0gICAgICAgIHN0ZDo6dHJhbnNmb3JtKCBtX2ZpbHRlcnMuYmVnaW4oKSwgbV9maWx0ZXJzLmVuZCgpLCBtYXRjaGVzLmJlZ2luKCksIFsmXSggRmlsdGVyIGNvbnN0JiBmaWx0ZXIgKXsKLSAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRlc3RDYXNlIGNvbnN0Kj4gY3VycmVudE1hdGNoZXM7Ci0gICAgICAgICAgICBmb3IoIGF1dG8gY29uc3QmIHRlc3QgOiB0ZXN0Q2FzZXMgKQotICAgICAgICAgICAgICAgIGlmKCBpc1Rocm93U2FmZSggdGVzdCwgY29uZmlnICkgJiYgZmlsdGVyLm1hdGNoZXMoIHRlc3QgKSApCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNYXRjaGVzLmVtcGxhY2VfYmFjayggJnRlc3QgKTsKLSAgICAgICAgICAgIHJldHVybiBGaWx0ZXJNYXRjaHsgZmlsdGVyLm5hbWUoKSwgY3VycmVudE1hdGNoZXMgfTsKLSAgICAgICAgfSApOwotICAgICAgICByZXR1cm4gbWF0Y2hlczsKLSAgICB9Ci0KLSAgICBjb25zdCBUZXN0U3BlYzo6dmVjdG9yU3RyaW5ncyYgVGVzdFNwZWM6OmdldEludmFsaWRBcmdzKCkgY29uc3R7Ci0gICAgICAgIHJldHVybiAgKG1faW52YWxpZEFyZ3MpOwotICAgIH0KLQogfQogLy8gZW5kIGNhdGNoX3Rlc3Rfc3BlYy5jcHAKIC8vIHN0YXJ0IGNhdGNoX3Rlc3Rfc3BlY19wYXJzZXIuY3BwCkBAIC0xNDQ0MCwxMzYgKzEyMjE4LDY0IEBACiAgICAgVGVzdFNwZWNQYXJzZXImIFRlc3RTcGVjUGFyc2VyOjpwYXJzZSggc3RkOjpzdHJpbmcgY29uc3QmIGFyZyApIHsKICAgICAgICAgbV9tb2RlID0gTm9uZTsKICAgICAgICAgbV9leGNsdXNpb24gPSBmYWxzZTsKKyAgICAgICAgbV9zdGFydCA9IHN0ZDo6c3RyaW5nOjpucG9zOwogICAgICAgICBtX2FyZyA9IG1fdGFnQWxpYXNlcy0+ZXhwYW5kQWxpYXNlcyggYXJnICk7CiAgICAgICAgIG1fZXNjYXBlQ2hhcnMuY2xlYXIoKTsKLSAgICAgICAgbV9zdWJzdHJpbmcucmVzZXJ2ZShtX2FyZy5zaXplKCkpOwotICAgICAgICBtX3BhdHRlcm5OYW1lLnJlc2VydmUobV9hcmcuc2l6ZSgpKTsKLSAgICAgICAgbV9yZWFsUGF0dGVyblBvcyA9IDA7Ci0KICAgICAgICAgZm9yKCBtX3BvcyA9IDA7IG1fcG9zIDwgbV9hcmcuc2l6ZSgpOyArK21fcG9zICkKLSAgICAgICAgICAvL2lmIHZpc2l0Q2hhciBmYWlscwotICAgICAgICAgICBpZiggIXZpc2l0Q2hhciggbV9hcmdbbV9wb3NdICkgKXsKLSAgICAgICAgICAgICAgIG1fdGVzdFNwZWMubV9pbnZhbGlkQXJncy5wdXNoX2JhY2soYXJnKTsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICB9Ci0gICAgICAgIGVuZE1vZGUoKTsKKyAgICAgICAgICAgIHZpc2l0Q2hhciggbV9hcmdbbV9wb3NdICk7CisgICAgICAgIGlmKCBtX21vZGUgPT0gTmFtZSApCisgICAgICAgICAgICBhZGRQYXR0ZXJuPFRlc3RTcGVjOjpOYW1lUGF0dGVybj4oKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KICAgICBUZXN0U3BlYyBUZXN0U3BlY1BhcnNlcjo6dGVzdFNwZWMoKSB7CiAgICAgICAgIGFkZEZpbHRlcigpOwogICAgICAgICByZXR1cm4gbV90ZXN0U3BlYzsKICAgICB9Ci0gICAgYm9vbCBUZXN0U3BlY1BhcnNlcjo6dmlzaXRDaGFyKCBjaGFyIGMgKSB7Ci0gICAgICAgIGlmKCAobV9tb2RlICE9IEVzY2FwZWROYW1lKSAmJiAoYyA9PSAnXFwnKSApIHsKLSAgICAgICAgICAgIGVzY2FwZSgpOwotICAgICAgICAgICAgYWRkQ2hhclRvUGF0dGVybihjKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9ZWxzZSBpZigobV9tb2RlICE9IEVzY2FwZWROYW1lKSAmJiAoYyA9PSAnLCcpICkgIHsKLSAgICAgICAgICAgIHJldHVybiBzZXBhcmF0ZSgpOwotICAgICAgICB9CiAKLSAgICAgICAgc3dpdGNoKCBtX21vZGUgKSB7Ci0gICAgICAgIGNhc2UgTm9uZToKLSAgICAgICAgICAgIGlmKCBwcm9jZXNzTm9uZUNoYXIoIGMgKSApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOYW1lOgotICAgICAgICAgICAgcHJvY2Vzc05hbWVDaGFyKCBjICk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFc2NhcGVkTmFtZToKLSAgICAgICAgICAgIGVuZE1vZGUoKTsKLSAgICAgICAgICAgIGFkZENoYXJUb1BhdHRlcm4oYyk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgY2FzZSBUYWc6Ci0gICAgICAgIGNhc2UgUXVvdGVkTmFtZToKLSAgICAgICAgICAgIGlmKCBwcm9jZXNzT3RoZXJDaGFyKCBjICkgKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgYnJlYWs7CisgICAgdm9pZCBUZXN0U3BlY1BhcnNlcjo6dmlzaXRDaGFyKCBjaGFyIGMgKSB7CisgICAgICAgIGlmKCBtX21vZGUgPT0gTm9uZSApIHsKKyAgICAgICAgICAgIHN3aXRjaCggYyApIHsKKyAgICAgICAgICAgIGNhc2UgJyAnOiByZXR1cm47CisgICAgICAgICAgICBjYXNlICd+JzogbV9leGNsdXNpb24gPSB0cnVlOyByZXR1cm47CisgICAgICAgICAgICBjYXNlICdbJzogcmV0dXJuIHN0YXJ0TmV3TW9kZSggVGFnLCArK21fcG9zICk7CisgICAgICAgICAgICBjYXNlICciJzogcmV0dXJuIHN0YXJ0TmV3TW9kZSggUXVvdGVkTmFtZSwgKyttX3BvcyApOworICAgICAgICAgICAgY2FzZSAnXFwnOiByZXR1cm4gZXNjYXBlKCk7CisgICAgICAgICAgICBkZWZhdWx0OiBzdGFydE5ld01vZGUoIE5hbWUsIG1fcG9zICk7IGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgbV9zdWJzdHJpbmcgKz0gYzsKLSAgICAgICAgaWYoICFpc0NvbnRyb2xDaGFyKCBjICkgKSB7Ci0gICAgICAgICAgICBtX3BhdHRlcm5OYW1lICs9IGM7Ci0gICAgICAgICAgICBtX3JlYWxQYXR0ZXJuUG9zKys7CisgICAgICAgIGlmKCBtX21vZGUgPT0gTmFtZSApIHsKKyAgICAgICAgICAgIGlmKCBjID09ICcsJyApIHsKKyAgICAgICAgICAgICAgICBhZGRQYXR0ZXJuPFRlc3RTcGVjOjpOYW1lUGF0dGVybj4oKTsKKyAgICAgICAgICAgICAgICBhZGRGaWx0ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoIGMgPT0gJ1snICkgeworICAgICAgICAgICAgICAgIGlmKCBzdWJTdHJpbmcoKSA9PSAiZXhjbHVkZToiICkKKyAgICAgICAgICAgICAgICAgICAgbV9leGNsdXNpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYWRkUGF0dGVybjxUZXN0U3BlYzo6TmFtZVBhdHRlcm4+KCk7CisgICAgICAgICAgICAgICAgc3RhcnROZXdNb2RlKCBUYWcsICsrbV9wb3MgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoIGMgPT0gJ1xcJyApCisgICAgICAgICAgICAgICAgZXNjYXBlKCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGVsc2UgaWYoIG1fbW9kZSA9PSBFc2NhcGVkTmFtZSApCisgICAgICAgICAgICBtX21vZGUgPSBOYW1lOworICAgICAgICBlbHNlIGlmKCBtX21vZGUgPT0gUXVvdGVkTmFtZSAmJiBjID09ICciJyApCisgICAgICAgICAgICBhZGRQYXR0ZXJuPFRlc3RTcGVjOjpOYW1lUGF0dGVybj4oKTsKKyAgICAgICAgZWxzZSBpZiggbV9tb2RlID09IFRhZyAmJiBjID09ICddJyApCisgICAgICAgICAgICBhZGRQYXR0ZXJuPFRlc3RTcGVjOjpUYWdQYXR0ZXJuPigpOwogICAgIH0KLSAgICAvLyBUd28gb2YgdGhlIHByb2Nlc3NpbmcgbWV0aG9kcyByZXR1cm4gdHJ1ZSB0byBzaWduYWwgdGhlIGNhbGxlciB0byByZXR1cm4KLSAgICAvLyB3aXRob3V0IGFkZGluZyB0aGUgZ2l2ZW4gY2hhcmFjdGVyIHRvIHRoZSBjdXJyZW50IHBhdHRlcm4gc3RyaW5ncwotICAgIGJvb2wgVGVzdFNwZWNQYXJzZXI6OnByb2Nlc3NOb25lQ2hhciggY2hhciBjICkgewotICAgICAgICBzd2l0Y2goIGMgKSB7Ci0gICAgICAgIGNhc2UgJyAnOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgJ34nOgotICAgICAgICAgICAgbV9leGNsdXNpb24gPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlICdbJzoKLSAgICAgICAgICAgIHN0YXJ0TmV3TW9kZSggVGFnICk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgJyInOgotICAgICAgICAgICAgc3RhcnROZXdNb2RlKCBRdW90ZWROYW1lICk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzdGFydE5ld01vZGUoIE5hbWUgKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICB2b2lkIFRlc3RTcGVjUGFyc2VyOjpwcm9jZXNzTmFtZUNoYXIoIGNoYXIgYyApIHsKLSAgICAgICAgaWYoIGMgPT0gJ1snICkgewotICAgICAgICAgICAgaWYoIG1fc3Vic3RyaW5nID09ICJleGNsdWRlOiIgKQotICAgICAgICAgICAgICAgIG1fZXhjbHVzaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbmRNb2RlKCk7Ci0gICAgICAgICAgICBzdGFydE5ld01vZGUoIFRhZyApOwotICAgICAgICB9Ci0gICAgfQotICAgIGJvb2wgVGVzdFNwZWNQYXJzZXI6OnByb2Nlc3NPdGhlckNoYXIoIGNoYXIgYyApIHsKLSAgICAgICAgaWYoICFpc0NvbnRyb2xDaGFyKCBjICkgKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX3N1YnN0cmluZyArPSBjOwotICAgICAgICBlbmRNb2RlKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICB2b2lkIFRlc3RTcGVjUGFyc2VyOjpzdGFydE5ld01vZGUoIE1vZGUgbW9kZSApIHsKKyAgICB2b2lkIFRlc3RTcGVjUGFyc2VyOjpzdGFydE5ld01vZGUoIE1vZGUgbW9kZSwgc3RkOjpzaXplX3Qgc3RhcnQgKSB7CiAgICAgICAgIG1fbW9kZSA9IG1vZGU7Ci0gICAgfQotICAgIHZvaWQgVGVzdFNwZWNQYXJzZXI6OmVuZE1vZGUoKSB7Ci0gICAgICAgIHN3aXRjaCggbV9tb2RlICkgewotICAgICAgICBjYXNlIE5hbWU6Ci0gICAgICAgIGNhc2UgUXVvdGVkTmFtZToKLSAgICAgICAgICAgIHJldHVybiBhZGROYW1lUGF0dGVybigpOwotICAgICAgICBjYXNlIFRhZzoKLSAgICAgICAgICAgIHJldHVybiBhZGRUYWdQYXR0ZXJuKCk7Ci0gICAgICAgIGNhc2UgRXNjYXBlZE5hbWU6Ci0gICAgICAgICAgICByZXZlcnRCYWNrVG9MYXN0TW9kZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIE5vbmU6Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gc3RhcnROZXdNb2RlKCBOb25lICk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9zdGFydCA9IHN0YXJ0OwogICAgIH0KICAgICB2b2lkIFRlc3RTcGVjUGFyc2VyOjplc2NhcGUoKSB7Ci0gICAgICAgIHNhdmVMYXN0TW9kZSgpOworICAgICAgICBpZiggbV9tb2RlID09IE5vbmUgKQorICAgICAgICAgICAgbV9zdGFydCA9IG1fcG9zOwogICAgICAgICBtX21vZGUgPSBFc2NhcGVkTmFtZTsKLSAgICAgICAgbV9lc2NhcGVDaGFycy5wdXNoX2JhY2sobV9yZWFsUGF0dGVyblBvcyk7CisgICAgICAgIG1fZXNjYXBlQ2hhcnMucHVzaF9iYWNrKCBtX3BvcyApOwogICAgIH0KLSAgICBib29sIFRlc3RTcGVjUGFyc2VyOjppc0NvbnRyb2xDaGFyKCBjaGFyIGMgKSBjb25zdCB7Ci0gICAgICAgIHN3aXRjaCggbV9tb2RlICkgewotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjYXNlIE5vbmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGMgPT0gJ34nOwotICAgICAgICAgICAgY2FzZSBOYW1lOgotICAgICAgICAgICAgICAgIHJldHVybiBjID09ICdbJzsKLSAgICAgICAgICAgIGNhc2UgRXNjYXBlZE5hbWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBjYXNlIFF1b3RlZE5hbWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGMgPT0gJyInOwotICAgICAgICAgICAgY2FzZSBUYWc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGMgPT0gJ1snIHx8IGMgPT0gJ10nOwotICAgICAgICB9Ci0gICAgfQorICAgIHN0ZDo6c3RyaW5nIFRlc3RTcGVjUGFyc2VyOjpzdWJTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX2FyZy5zdWJzdHIoIG1fc3RhcnQsIG1fcG9zIC0gbV9zdGFydCApOyB9CiAKICAgICB2b2lkIFRlc3RTcGVjUGFyc2VyOjphZGRGaWx0ZXIoKSB7CiAgICAgICAgIGlmKCAhbV9jdXJyZW50RmlsdGVyLm1fcGF0dGVybnMuZW1wdHkoKSApIHsKQEAgLTE0NTc4LDg0ICsxMjI4NCw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIFRlc3RTcGVjUGFyc2VyOjpzYXZlTGFzdE1vZGUoKSB7Ci0gICAgICBsYXN0TW9kZSA9IG1fbW9kZTsKLSAgICB9Ci0KLSAgICB2b2lkIFRlc3RTcGVjUGFyc2VyOjpyZXZlcnRCYWNrVG9MYXN0TW9kZSgpIHsKLSAgICAgIG1fbW9kZSA9IGxhc3RNb2RlOwotICAgIH0KLQotICAgIGJvb2wgVGVzdFNwZWNQYXJzZXI6OnNlcGFyYXRlKCkgewotICAgICAgaWYoIChtX21vZGU9PVF1b3RlZE5hbWUpIHx8IChtX21vZGU9PVRhZykgKXsKLSAgICAgICAgIC8vaW52YWxpZCBhcmd1bWVudCwgc2lnbmFsIGZhaWx1cmUgdG8gcHJldmlvdXMgc2NvcGUuCi0gICAgICAgICBtX21vZGUgPSBOb25lOwotICAgICAgICAgbV9wb3MgPSBtX2FyZy5zaXplKCk7Ci0gICAgICAgICBtX3N1YnN0cmluZy5jbGVhcigpOwotICAgICAgICAgbV9wYXR0ZXJuTmFtZS5jbGVhcigpOwotICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZW5kTW9kZSgpOwotICAgICAgYWRkRmlsdGVyKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsgLy9zdWNjZXNzCi0gICAgfQotCi0gICAgc3RkOjpzdHJpbmcgVGVzdFNwZWNQYXJzZXI6OnByZXByb2Nlc3NQYXR0ZXJuKCkgewotICAgICAgICBzdGQ6OnN0cmluZyB0b2tlbiA9IG1fcGF0dGVybk5hbWU7Ci0gICAgICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBtX2VzY2FwZUNoYXJzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgdG9rZW4gPSB0b2tlbi5zdWJzdHIoMCwgbV9lc2NhcGVDaGFyc1tpXSAtIGkpICsgdG9rZW4uc3Vic3RyKG1fZXNjYXBlQ2hhcnNbaV0gLSBpICsgMSk7Ci0gICAgICAgIG1fZXNjYXBlQ2hhcnMuY2xlYXIoKTsKLSAgICAgICAgaWYgKHN0YXJ0c1dpdGgodG9rZW4sICJleGNsdWRlOiIpKSB7Ci0gICAgICAgICAgICBtX2V4Y2x1c2lvbiA9IHRydWU7Ci0gICAgICAgICAgICB0b2tlbiA9IHRva2VuLnN1YnN0cig4KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fcGF0dGVybk5hbWUuY2xlYXIoKTsKLQotICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgfQotCi0gICAgdm9pZCBUZXN0U3BlY1BhcnNlcjo6YWRkTmFtZVBhdHRlcm4oKSB7Ci0gICAgICAgIGF1dG8gdG9rZW4gPSBwcmVwcm9jZXNzUGF0dGVybigpOwotCi0gICAgICAgIGlmICghdG9rZW4uZW1wdHkoKSkgewotICAgICAgICAgICAgVGVzdFNwZWM6OlBhdHRlcm5QdHIgcGF0dGVybiA9IHN0ZDo6bWFrZV9zaGFyZWQ8VGVzdFNwZWM6Ok5hbWVQYXR0ZXJuPih0b2tlbiwgbV9zdWJzdHJpbmcpOwotICAgICAgICAgICAgaWYgKG1fZXhjbHVzaW9uKQotICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBzdGQ6Om1ha2Vfc2hhcmVkPFRlc3RTcGVjOjpFeGNsdWRlZFBhdHRlcm4+KHBhdHRlcm4pOwotICAgICAgICAgICAgbV9jdXJyZW50RmlsdGVyLm1fcGF0dGVybnMucHVzaF9iYWNrKHBhdHRlcm4pOwotICAgICAgICB9Ci0gICAgICAgIG1fc3Vic3RyaW5nLmNsZWFyKCk7Ci0gICAgICAgIG1fZXhjbHVzaW9uID0gZmFsc2U7Ci0gICAgICAgIG1fbW9kZSA9IE5vbmU7Ci0gICAgfQotCi0gICAgdm9pZCBUZXN0U3BlY1BhcnNlcjo6YWRkVGFnUGF0dGVybigpIHsKLSAgICAgICAgYXV0byB0b2tlbiA9IHByZXByb2Nlc3NQYXR0ZXJuKCk7Ci0KLSAgICAgICAgaWYgKCF0b2tlbi5lbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgdGFnIHBhdHRlcm4gaXMgdGhlICJoaWRlIGFuZCB0YWciIHNob3J0aGFuZCAoZS5nLiBbLmZvb10pCi0gICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIGNyZWF0ZSBhIHNlcGFyYXRlIGhpZGUgdGFnIGFuZCBzaG9ydGVuIHRoZSByZWFsIG9uZQotICAgICAgICAgICAgaWYgKHRva2VuLnNpemUoKSA+IDEgJiYgdG9rZW5bMF0gPT0gJy4nKSB7Ci0gICAgICAgICAgICAgICAgdG9rZW4uZXJhc2UodG9rZW4uYmVnaW4oKSk7Ci0gICAgICAgICAgICAgICAgVGVzdFNwZWM6OlBhdHRlcm5QdHIgcGF0dGVybiA9IHN0ZDo6bWFrZV9zaGFyZWQ8VGVzdFNwZWM6OlRhZ1BhdHRlcm4+KCIuIiwgbV9zdWJzdHJpbmcpOwotICAgICAgICAgICAgICAgIGlmIChtX2V4Y2x1c2lvbikgewotICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gc3RkOjptYWtlX3NoYXJlZDxUZXN0U3BlYzo6RXhjbHVkZWRQYXR0ZXJuPihwYXR0ZXJuKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50RmlsdGVyLm1fcGF0dGVybnMucHVzaF9iYWNrKHBhdHRlcm4pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBUZXN0U3BlYzo6UGF0dGVyblB0ciBwYXR0ZXJuID0gc3RkOjptYWtlX3NoYXJlZDxUZXN0U3BlYzo6VGFnUGF0dGVybj4odG9rZW4sIG1fc3Vic3RyaW5nKTsKLQotICAgICAgICAgICAgaWYgKG1fZXhjbHVzaW9uKSB7Ci0gICAgICAgICAgICAgICAgcGF0dGVybiA9IHN0ZDo6bWFrZV9zaGFyZWQ8VGVzdFNwZWM6OkV4Y2x1ZGVkUGF0dGVybj4ocGF0dGVybik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2N1cnJlbnRGaWx0ZXIubV9wYXR0ZXJucy5wdXNoX2JhY2socGF0dGVybik7Ci0gICAgICAgIH0KLSAgICAgICAgbV9zdWJzdHJpbmcuY2xlYXIoKTsKLSAgICAgICAgbV9leGNsdXNpb24gPSBmYWxzZTsKLSAgICAgICAgbV9tb2RlID0gTm9uZTsKLSAgICB9Ci0KICAgICBUZXN0U3BlYyBwYXJzZVRlc3RTcGVjKCBzdGQ6OnN0cmluZyBjb25zdCYgYXJnICkgewogICAgICAgICByZXR1cm4gVGVzdFNwZWNQYXJzZXIoIElUYWdBbGlhc1JlZ2lzdHJ5OjpnZXQoKSApLnBhcnNlKCBhcmcgKS50ZXN0U3BlYygpOwogICAgIH0KQEAgLTE0NzU3LDExICsxMjM4NSwxMyBAQAogICAgICAgICAgICAgZW51bSBBcmNoIHsgQmlnLCBMaXR0bGUgfTsKIAogICAgICAgICAgICAgc3RhdGljIEFyY2ggd2hpY2goKSB7Ci0gICAgICAgICAgICAgICAgaW50IG9uZSA9IDE7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGxvd2VzdCBieXRlIHdlIHJlYWQgaXMgbm9uLXplcm8sIHdlIGNhbiBhc3N1bWUKLSAgICAgICAgICAgICAgICAvLyB0aGF0IGxpdHRsZSBlbmRpYW4gZm9ybWF0IGlzIHVzZWQuCi0gICAgICAgICAgICAgICAgYXV0byB2YWx1ZSA9ICpyZWludGVycHJldF9jYXN0PGNoYXIqPigmb25lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPyBMaXR0bGUgOiBCaWc7CisgICAgICAgICAgICAgICAgdW5pb24gX3sKKyAgICAgICAgICAgICAgICAgICAgaW50IGFzSW50OworICAgICAgICAgICAgICAgICAgICBjaGFyIGFzQ2hhcltzaXplb2YgKGludCldOworICAgICAgICAgICAgICAgIH0gdTsKKworICAgICAgICAgICAgICAgIHUuYXNJbnQgPSAxOworICAgICAgICAgICAgICAgIHJldHVybiAoIHUuYXNDaGFyW3NpemVvZihpbnQpLTFdID09IDEgKSA/IEJpZyA6IExpdHRsZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsKICAgICB9CkBAIC0xNDg4NSwxMyArMTI1MTUsNiBAQAogfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19DUFAxN19CWVRFKQotI2luY2x1ZGUgPGNzdGRkZWY+Ci1zdGQ6OnN0cmluZyBTdHJpbmdNYWtlcjxzdGQ6OmJ5dGU+Ojpjb252ZXJ0KHN0ZDo6Ynl0ZSB2YWx1ZSkgewotICAgIHJldHVybiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShzdGQ6OnRvX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25nPih2YWx1ZSkpOwotfQotI2VuZGlmIC8vIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0NQUDE3X0JZVEUpCi0KIHN0ZDo6c3RyaW5nIFN0cmluZ01ha2VyPGludD46OmNvbnZlcnQoaW50IHZhbHVlKSB7CiAgICAgcmV0dXJuIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4odmFsdWUpKTsKIH0KQEAgLTE0OTU0LDE2ICsxMjU3NywxMSBAQAogICAgIHJldHVybiAibnVsbHB0ciI7CiB9CiAKLWludCBTdHJpbmdNYWtlcjxmbG9hdD46OnByZWNpc2lvbiA9IDU7Ci0KIHN0ZDo6c3RyaW5nIFN0cmluZ01ha2VyPGZsb2F0Pjo6Y29udmVydChmbG9hdCB2YWx1ZSkgewotICAgIHJldHVybiBmcFRvU3RyaW5nKHZhbHVlLCBwcmVjaXNpb24pICsgJ2YnOworICAgIHJldHVybiBmcFRvU3RyaW5nKHZhbHVlLCA1KSArICdmJzsKIH0KLQotaW50IFN0cmluZ01ha2VyPGRvdWJsZT46OnByZWNpc2lvbiA9IDEwOwotCiBzdGQ6OnN0cmluZyBTdHJpbmdNYWtlcjxkb3VibGU+Ojpjb252ZXJ0KGRvdWJsZSB2YWx1ZSkgewotICAgIHJldHVybiBmcFRvU3RyaW5nKHZhbHVlLCBwcmVjaXNpb24pOworICAgIHJldHVybiBmcFRvU3RyaW5nKHZhbHVlLCAxMCk7CiB9CiAKIHN0ZDo6c3RyaW5nIHJhdGlvX3N0cmluZzxzdGQ6OmF0dG8+OjpzeW1ib2woKSB7IHJldHVybiAiYSI7IH0KQEAgLTE1MDgxLDcgKzEyNjk5LDcgQEAKICAgICB9CiAKICAgICBWZXJzaW9uIGNvbnN0JiBsaWJyYXJ5VmVyc2lvbigpIHsKLSAgICAgICAgc3RhdGljIFZlcnNpb24gdmVyc2lvbiggMiwgMTEsIDIsICIiLCAwICk7CisgICAgICAgIHN0YXRpYyBWZXJzaW9uIHZlcnNpb24oIDIsIDcsIDIsICIiLCAwICk7CiAgICAgICAgIHJldHVybiB2ZXJzaW9uOwogICAgIH0KIApAQCAtMTUwODksMTIgKzEyNzA3LDE0IEBACiAvLyBlbmQgY2F0Y2hfdmVyc2lvbi5jcHAKIC8vIHN0YXJ0IGNhdGNoX3dpbGRjYXJkX3BhdHRlcm4uY3BwCiAKKyNpbmNsdWRlIDxzc3RyZWFtPgorCiBuYW1lc3BhY2UgQ2F0Y2ggewogCiAgICAgV2lsZGNhcmRQYXR0ZXJuOjpXaWxkY2FyZFBhdHRlcm4oIHN0ZDo6c3RyaW5nIGNvbnN0JiBwYXR0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXNlU2Vuc2l0aXZlOjpDaG9pY2UgY2FzZVNlbnNpdGl2aXR5ICkKICAgICA6ICAgbV9jYXNlU2Vuc2l0aXZpdHkoIGNhc2VTZW5zaXRpdml0eSApLAotICAgICAgICBtX3BhdHRlcm4oIG5vcm1hbGlzZVN0cmluZyggcGF0dGVybiApICkKKyAgICAgICAgbV9wYXR0ZXJuKCBhZGp1c3RDYXNlKCBwYXR0ZXJuICkgKQogICAgIHsKICAgICAgICAgaWYoIHN0YXJ0c1dpdGgoIG1fcGF0dGVybiwgJyonICkgKSB7CiAgICAgICAgICAgICBtX3BhdHRlcm4gPSBtX3BhdHRlcm4uc3Vic3RyKCAxICk7CkBAIC0xNTEwOSwyNyArMTI3MjksMjggQEAKICAgICBib29sIFdpbGRjYXJkUGF0dGVybjo6bWF0Y2hlcyggc3RkOjpzdHJpbmcgY29uc3QmIHN0ciApIGNvbnN0IHsKICAgICAgICAgc3dpdGNoKCBtX3dpbGRjYXJkICkgewogICAgICAgICAgICAgY2FzZSBOb1dpbGRjYXJkOgotICAgICAgICAgICAgICAgIHJldHVybiBtX3BhdHRlcm4gPT0gbm9ybWFsaXNlU3RyaW5nKCBzdHIgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9wYXR0ZXJuID09IGFkanVzdENhc2UoIHN0ciApOwogICAgICAgICAgICAgY2FzZSBXaWxkY2FyZEF0U3RhcnQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVuZHNXaXRoKCBub3JtYWxpc2VTdHJpbmcoIHN0ciApLCBtX3BhdHRlcm4gKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW5kc1dpdGgoIGFkanVzdENhc2UoIHN0ciApLCBtX3BhdHRlcm4gKTsKICAgICAgICAgICAgIGNhc2UgV2lsZGNhcmRBdEVuZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRzV2l0aCggbm9ybWFsaXNlU3RyaW5nKCBzdHIgKSwgbV9wYXR0ZXJuICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0c1dpdGgoIGFkanVzdENhc2UoIHN0ciApLCBtX3BhdHRlcm4gKTsKICAgICAgICAgICAgIGNhc2UgV2lsZGNhcmRBdEJvdGhFbmRzOgotICAgICAgICAgICAgICAgIHJldHVybiBjb250YWlucyggbm9ybWFsaXNlU3RyaW5nKCBzdHIgKSwgbV9wYXR0ZXJuICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKCBhZGp1c3RDYXNlKCBzdHIgKSwgbV9wYXR0ZXJuICk7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX0VSUk9SKCAiVW5rbm93biBlbnVtIiApOwogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RkOjpzdHJpbmcgV2lsZGNhcmRQYXR0ZXJuOjpub3JtYWxpc2VTdHJpbmcoIHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIgKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiB0cmltKCBtX2Nhc2VTZW5zaXRpdml0eSA9PSBDYXNlU2Vuc2l0aXZlOjpObyA/IHRvTG93ZXIoIHN0ciApIDogc3RyICk7CisgICAgc3RkOjpzdHJpbmcgV2lsZGNhcmRQYXR0ZXJuOjphZGp1c3RDYXNlKCBzdGQ6OnN0cmluZyBjb25zdCYgc3RyICkgY29uc3QgeworICAgICAgICByZXR1cm4gbV9jYXNlU2Vuc2l0aXZpdHkgPT0gQ2FzZVNlbnNpdGl2ZTo6Tm8gPyB0b0xvd2VyKCBzdHIgKSA6IHN0cjsKICAgICB9CiB9CiAvLyBlbmQgY2F0Y2hfd2lsZGNhcmRfcGF0dGVybi5jcHAKIC8vIHN0YXJ0IGNhdGNoX3htbHdyaXRlci5jcHAKIAogI2luY2x1ZGUgPGlvbWFuaXA+Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+CisKK3VzaW5nIHVjaGFyID0gdW5zaWduZWQgY2hhcjsKIAogbmFtZXNwYWNlIENhdGNoIHsKIApAQCAtMTUxNjksMzAgKzEyNzkwLDggQEAKICAgICAgICAgb3MuZmxhZ3MoZik7CiAgICAgfQogCi0gICAgYm9vbCBzaG91bGROZXdsaW5lKFhtbEZvcm1hdHRpbmcgZm10KSB7Ci0gICAgICAgIHJldHVybiAhIShzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxYbWxGb3JtYXR0aW5nPjo6dHlwZT4oZm10ICYgWG1sRm9ybWF0dGluZzo6TmV3bGluZSkpOwotICAgIH0KLQotICAgIGJvb2wgc2hvdWxkSW5kZW50KFhtbEZvcm1hdHRpbmcgZm10KSB7Ci0gICAgICAgIHJldHVybiAhIShzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxYbWxGb3JtYXR0aW5nPjo6dHlwZT4oZm10ICYgWG1sRm9ybWF0dGluZzo6SW5kZW50KSk7Ci0gICAgfQotCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotICAgIFhtbEZvcm1hdHRpbmcgb3BlcmF0b3IgfCAoWG1sRm9ybWF0dGluZyBsaHMsIFhtbEZvcm1hdHRpbmcgcmhzKSB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxYbWxGb3JtYXR0aW5nPigKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPFhtbEZvcm1hdHRpbmc+Ojp0eXBlPihsaHMpIHwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPFhtbEZvcm1hdHRpbmc+Ojp0eXBlPihyaHMpCi0gICAgICAgICk7Ci0gICAgfQotCi0gICAgWG1sRm9ybWF0dGluZyBvcGVyYXRvciAmIChYbWxGb3JtYXR0aW5nIGxocywgWG1sRm9ybWF0dGluZyByaHMpIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFhtbEZvcm1hdHRpbmc+KAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGU8WG1sRm9ybWF0dGluZz46OnR5cGU+KGxocykgJgotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGU8WG1sRm9ybWF0dGluZz46OnR5cGU+KHJocykKLSAgICAgICAgKTsKLSAgICB9Ci0KICAgICBYbWxFbmNvZGU6OlhtbEVuY29kZSggc3RkOjpzdHJpbmcgY29uc3QmIHN0ciwgRm9yV2hhdCBmb3JXaGF0ICkKICAgICA6ICAgbV9zdHIoIHN0ciApLAogICAgICAgICBtX2ZvcldoYXQoIGZvcldoYXQgKQpAQCAtMTUyMDMsNyArMTI4MDIsNyBAQAogICAgICAgICAvLyAoc2VlOiBodHRwOi8vd3d3LnczLm9yZy9UUi94bWwvI3N5bnRheCkKIAogICAgICAgICBmb3IoIHN0ZDo6c2l6ZV90IGlkeCA9IDA7IGlkeCA8IG1fc3RyLnNpemUoKTsgKysgaWR4ICkgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjID0gbV9zdHJbaWR4XTsKKyAgICAgICAgICAgIHVjaGFyIGMgPSBtX3N0cltpZHhdOwogICAgICAgICAgICAgc3dpdGNoIChjKSB7CiAgICAgICAgICAgICBjYXNlICc8JzogICBvcyA8PCAiJmx0OyI7IGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnJic6ICAgb3MgPDwgIiZhbXA7IjsgYnJlYWs7CkBAIC0xNTI2Myw3ICsxMjg2Miw3IEBACiAgICAgICAgICAgICAgICAgYm9vbCB2YWxpZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsdWUgPSBoZWFkZXJWYWx1ZShjKTsKICAgICAgICAgICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IG4gPSAxOyBuIDwgZW5jQnl0ZXM7ICsrbikgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG5jID0gbV9zdHJbaWR4ICsgbl07CisgICAgICAgICAgICAgICAgICAgIHVjaGFyIG5jID0gbV9zdHJbaWR4ICsgbl07CiAgICAgICAgICAgICAgICAgICAgIHZhbGlkICY9ICgobmMgJiAweEMwKSA9PSAweDgwKTsKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAodmFsdWUgPDwgNikgfCAobmMgJiAweDNGKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xNTI5NywxNyArMTI4OTYsMTMgQEAKICAgICAgICAgcmV0dXJuIG9zOwogICAgIH0KIAotICAgIFhtbFdyaXRlcjo6U2NvcGVkRWxlbWVudDo6U2NvcGVkRWxlbWVudCggWG1sV3JpdGVyKiB3cml0ZXIsIFhtbEZvcm1hdHRpbmcgZm10ICkKLSAgICA6ICAgbV93cml0ZXIoIHdyaXRlciApLAotICAgICAgICBtX2ZtdChmbXQpCisgICAgWG1sV3JpdGVyOjpTY29wZWRFbGVtZW50OjpTY29wZWRFbGVtZW50KCBYbWxXcml0ZXIqIHdyaXRlciApCisgICAgOiAgIG1fd3JpdGVyKCB3cml0ZXIgKQogICAgIHt9CiAKICAgICBYbWxXcml0ZXI6OlNjb3BlZEVsZW1lbnQ6OlNjb3BlZEVsZW1lbnQoIFNjb3BlZEVsZW1lbnQmJiBvdGhlciApIG5vZXhjZXB0Ci0gICAgOiAgIG1fd3JpdGVyKCBvdGhlci5tX3dyaXRlciApLAotICAgICAgICBtX2ZtdChvdGhlci5tX2ZtdCkKLSAgICB7CisgICAgOiAgIG1fd3JpdGVyKCBvdGhlci5tX3dyaXRlciApewogICAgICAgICBvdGhlci5tX3dyaXRlciA9IG51bGxwdHI7Ci0gICAgICAgIG90aGVyLm1fZm10ID0gWG1sRm9ybWF0dGluZzo6Tm9uZTsKICAgICB9CiAgICAgWG1sV3JpdGVyOjpTY29wZWRFbGVtZW50JiBYbWxXcml0ZXI6OlNjb3BlZEVsZW1lbnQ6Om9wZXJhdG9yPSggU2NvcGVkRWxlbWVudCYmIG90aGVyICkgbm9leGNlcHQgewogICAgICAgICBpZiAoIG1fd3JpdGVyICkgewpAQCAtMTUzMTUsMTkgKzEyOTEwLDE2IEBACiAgICAgICAgIH0KICAgICAgICAgbV93cml0ZXIgPSBvdGhlci5tX3dyaXRlcjsKICAgICAgICAgb3RoZXIubV93cml0ZXIgPSBudWxscHRyOwotICAgICAgICBtX2ZtdCA9IG90aGVyLm1fZm10OwotICAgICAgICBvdGhlci5tX2ZtdCA9IFhtbEZvcm1hdHRpbmc6Ok5vbmU7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKICAgICBYbWxXcml0ZXI6OlNjb3BlZEVsZW1lbnQ6On5TY29wZWRFbGVtZW50KCkgewotICAgICAgICBpZiAobV93cml0ZXIpIHsKLSAgICAgICAgICAgIG1fd3JpdGVyLT5lbmRFbGVtZW50KG1fZm10KTsKLSAgICAgICAgfQorICAgICAgICBpZiggbV93cml0ZXIgKQorICAgICAgICAgICAgbV93cml0ZXItPmVuZEVsZW1lbnQoKTsKICAgICB9CiAKLSAgICBYbWxXcml0ZXI6OlNjb3BlZEVsZW1lbnQmIFhtbFdyaXRlcjo6U2NvcGVkRWxlbWVudDo6d3JpdGVUZXh0KCBzdGQ6OnN0cmluZyBjb25zdCYgdGV4dCwgWG1sRm9ybWF0dGluZyBmbXQgKSB7Ci0gICAgICAgIG1fd3JpdGVyLT53cml0ZVRleHQoIHRleHQsIGZtdCApOworICAgIFhtbFdyaXRlcjo6U2NvcGVkRWxlbWVudCYgWG1sV3JpdGVyOjpTY29wZWRFbGVtZW50Ojp3cml0ZVRleHQoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0ZXh0LCBib29sIGluZGVudCApIHsKKyAgICAgICAgbV93cml0ZXItPndyaXRlVGV4dCggdGV4dCwgaW5kZW50ICk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKQEAgLTE1MzM3LDQ3ICsxMjkyOSwzNyBAQAogICAgIH0KIAogICAgIFhtbFdyaXRlcjo6flhtbFdyaXRlcigpIHsKLSAgICAgICAgd2hpbGUgKCFtX3RhZ3MuZW1wdHkoKSkgeworICAgICAgICB3aGlsZSggIW1fdGFncy5lbXB0eSgpICkKICAgICAgICAgICAgIGVuZEVsZW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICBuZXdsaW5lSWZOZWNlc3NhcnkoKTsKICAgICB9CiAKLSAgICBYbWxXcml0ZXImIFhtbFdyaXRlcjo6c3RhcnRFbGVtZW50KCBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSwgWG1sRm9ybWF0dGluZyBmbXQgKSB7CisgICAgWG1sV3JpdGVyJiBYbWxXcml0ZXI6OnN0YXJ0RWxlbWVudCggc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgKSB7CiAgICAgICAgIGVuc3VyZVRhZ0Nsb3NlZCgpOwogICAgICAgICBuZXdsaW5lSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgaWYgKHNob3VsZEluZGVudChmbXQpKSB7Ci0gICAgICAgICAgICBtX29zIDw8IG1faW5kZW50OwotICAgICAgICAgICAgbV9pbmRlbnQgKz0gIiAgIjsKLSAgICAgICAgfQotICAgICAgICBtX29zIDw8ICc8JyA8PCBuYW1lOworICAgICAgICBtX29zIDw8IG1faW5kZW50IDw8ICc8JyA8PCBuYW1lOwogICAgICAgICBtX3RhZ3MucHVzaF9iYWNrKCBuYW1lICk7CisgICAgICAgIG1faW5kZW50ICs9ICIgICI7CiAgICAgICAgIG1fdGFnSXNPcGVuID0gdHJ1ZTsKLSAgICAgICAgYXBwbHlGb3JtYXR0aW5nKGZtdCk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICBYbWxXcml0ZXI6OlNjb3BlZEVsZW1lbnQgWG1sV3JpdGVyOjpzY29wZWRFbGVtZW50KCBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSwgWG1sRm9ybWF0dGluZyBmbXQgKSB7Ci0gICAgICAgIFNjb3BlZEVsZW1lbnQgc2NvcGVkKCB0aGlzLCBmbXQgKTsKLSAgICAgICAgc3RhcnRFbGVtZW50KCBuYW1lLCBmbXQgKTsKKyAgICBYbWxXcml0ZXI6OlNjb3BlZEVsZW1lbnQgWG1sV3JpdGVyOjpzY29wZWRFbGVtZW50KCBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSApIHsKKyAgICAgICAgU2NvcGVkRWxlbWVudCBzY29wZWQoIHRoaXMgKTsKKyAgICAgICAgc3RhcnRFbGVtZW50KCBuYW1lICk7CiAgICAgICAgIHJldHVybiBzY29wZWQ7CiAgICAgfQogCi0gICAgWG1sV3JpdGVyJiBYbWxXcml0ZXI6OmVuZEVsZW1lbnQoWG1sRm9ybWF0dGluZyBmbXQpIHsKLSAgICAgICAgbV9pbmRlbnQgPSBtX2luZGVudC5zdWJzdHIoMCwgbV9pbmRlbnQuc2l6ZSgpIC0gMik7Ci0KKyAgICBYbWxXcml0ZXImIFhtbFdyaXRlcjo6ZW5kRWxlbWVudCgpIHsKKyAgICAgICAgbmV3bGluZUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIG1faW5kZW50ID0gbV9pbmRlbnQuc3Vic3RyKCAwLCBtX2luZGVudC5zaXplKCktMiApOwogICAgICAgICBpZiggbV90YWdJc09wZW4gKSB7CiAgICAgICAgICAgICBtX29zIDw8ICIvPiI7CiAgICAgICAgICAgICBtX3RhZ0lzT3BlbiA9IGZhbHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbmV3bGluZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkSW5kZW50KGZtdCkpIHsKLSAgICAgICAgICAgICAgICBtX29zIDw8IG1faW5kZW50OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9vcyA8PCAiPC8iIDw8IG1fdGFncy5iYWNrKCkgPDwgIj4iOwogICAgICAgICB9Ci0gICAgICAgIG1fb3MgPDwgc3RkOjpmbHVzaDsKLSAgICAgICAgYXBwbHlGb3JtYXR0aW5nKGZtdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9vcyA8PCBtX2luZGVudCA8PCAiPC8iIDw8IG1fdGFncy5iYWNrKCkgPDwgIj4iOworICAgICAgICB9CisgICAgICAgIG1fb3MgPDwgc3RkOjplbmRsOwogICAgICAgICBtX3RhZ3MucG9wX2JhY2soKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTE1MzkzLDI2ICsxMjk3NSwyMiBAQAogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgWG1sV3JpdGVyJiBYbWxXcml0ZXI6OndyaXRlVGV4dCggc3RkOjpzdHJpbmcgY29uc3QmIHRleHQsIFhtbEZvcm1hdHRpbmcgZm10KSB7CisgICAgWG1sV3JpdGVyJiBYbWxXcml0ZXI6OndyaXRlVGV4dCggc3RkOjpzdHJpbmcgY29uc3QmIHRleHQsIGJvb2wgaW5kZW50ICkgewogICAgICAgICBpZiggIXRleHQuZW1wdHkoKSApewogICAgICAgICAgICAgYm9vbCB0YWdXYXNPcGVuID0gbV90YWdJc09wZW47CiAgICAgICAgICAgICBlbnN1cmVUYWdDbG9zZWQoKTsKLSAgICAgICAgICAgIGlmICh0YWdXYXNPcGVuICYmIHNob3VsZEluZGVudChmbXQpKSB7CisgICAgICAgICAgICBpZiggdGFnV2FzT3BlbiAmJiBpbmRlbnQgKQogICAgICAgICAgICAgICAgIG1fb3MgPDwgbV9pbmRlbnQ7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBtX29zIDw8IFhtbEVuY29kZSggdGV4dCApOwotICAgICAgICAgICAgYXBwbHlGb3JtYXR0aW5nKGZtdCk7CisgICAgICAgICAgICBtX25lZWRzTmV3bGluZSA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIFhtbFdyaXRlciYgWG1sV3JpdGVyOjp3cml0ZUNvbW1lbnQoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0ZXh0LCBYbWxGb3JtYXR0aW5nIGZtdCkgeworICAgIFhtbFdyaXRlciYgWG1sV3JpdGVyOjp3cml0ZUNvbW1lbnQoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0ZXh0ICkgewogICAgICAgICBlbnN1cmVUYWdDbG9zZWQoKTsKLSAgICAgICAgaWYgKHNob3VsZEluZGVudChmbXQpKSB7Ci0gICAgICAgICAgICBtX29zIDw8IG1faW5kZW50OwotICAgICAgICB9Ci0gICAgICAgIG1fb3MgPDwgIjwhLS0iIDw8IHRleHQgPDwgIi0tPiI7Ci0gICAgICAgIGFwcGx5Rm9ybWF0dGluZyhmbXQpOworICAgICAgICBtX29zIDw8IG1faW5kZW50IDw8ICI8IS0tIiA8PCB0ZXh0IDw8ICItLT4iOworICAgICAgICBtX25lZWRzTmV3bGluZSA9IHRydWU7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKQEAgLTE1NDI4LDE2ICsxMzAwNiwxMSBAQAogCiAgICAgdm9pZCBYbWxXcml0ZXI6OmVuc3VyZVRhZ0Nsb3NlZCgpIHsKICAgICAgICAgaWYoIG1fdGFnSXNPcGVuICkgewotICAgICAgICAgICAgbV9vcyA8PCAnPicgPDwgc3RkOjpmbHVzaDsKLSAgICAgICAgICAgIG5ld2xpbmVJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgbV9vcyA8PCAiPiIgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgbV90YWdJc09wZW4gPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgWG1sV3JpdGVyOjphcHBseUZvcm1hdHRpbmcoWG1sRm9ybWF0dGluZyBmbXQpIHsKLSAgICAgICAgbV9uZWVkc05ld2xpbmUgPSBzaG91bGROZXdsaW5lKGZtdCk7Ci0gICAgfQotCiAgICAgdm9pZCBYbWxXcml0ZXI6OndyaXRlRGVjbGFyYXRpb24oKSB7CiAgICAgICAgIG1fb3MgPDwgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PlxuIjsKICAgICB9CkBAIC0xNTcxMywyNSArMTMyODYsMjQgQEAKICAgICAgICAgaWYgKGl0TWVzc2FnZSA9PSBtZXNzYWdlcy5lbmQoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBjb25zdCBhdXRvIGl0RW5kID0gbWVzc2FnZXMuY2VuZCgpOwotICAgICAgICBjb25zdCBhdXRvIE4gPSBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oc3RkOjpkaXN0YW5jZShpdE1lc3NhZ2UsIGl0RW5kKSk7CisgICAgICAgIC8vIHVzaW5nIG1lc3NhZ2VzLmVuZCgpIGRpcmVjdGx5IHlpZWxkcyAob3IgYXV0bykgY29tcGlsYXRpb24gZXJyb3I6CisgICAgICAgIHN0ZDo6dmVjdG9yPE1lc3NhZ2VJbmZvPjo6Y29uc3RfaXRlcmF0b3IgaXRFbmQgPSBtZXNzYWdlcy5lbmQoKTsKKyAgICAgICAgY29uc3Qgc3RkOjpzaXplX3QgTiA9IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihzdGQ6OmRpc3RhbmNlKGl0TWVzc2FnZSwgaXRFbmQpKTsKIAogICAgICAgICB7CiAgICAgICAgICAgICBDb2xvdXIgY29sb3VyR3VhcmQoY29sb3VyKTsKICAgICAgICAgICAgIHN0cmVhbSA8PCAiIHdpdGggIiA8PCBwbHVyYWxpc2UoTiwgIm1lc3NhZ2UiKSA8PCAnOic7CiAgICAgICAgIH0KIAotICAgICAgICB3aGlsZSAoaXRNZXNzYWdlICE9IGl0RW5kKSB7CisgICAgICAgIGZvciAoOyBpdE1lc3NhZ2UgIT0gaXRFbmQ7ICkgewogICAgICAgICAgICAgLy8gSWYgdGhpcyBhc3NlcnRpb24gaXMgYSB3YXJuaW5nIGlnbm9yZSBhbnkgSU5GTyBtZXNzYWdlcwogICAgICAgICAgICAgaWYgKHByaW50SW5mb01lc3NhZ2VzIHx8IGl0TWVzc2FnZS0+dHlwZSAhPSBSZXN1bHRXYXM6OkluZm8pIHsKLSAgICAgICAgICAgICAgICBwcmludE1lc3NhZ2UoKTsKLSAgICAgICAgICAgICAgICBpZiAoaXRNZXNzYWdlICE9IGl0RW5kKSB7CisgICAgICAgICAgICAgICAgc3RyZWFtIDw8ICIgJyIgPDwgaXRNZXNzYWdlLT5tZXNzYWdlIDw8ICdcJyc7CisgICAgICAgICAgICAgICAgaWYgKCsraXRNZXNzYWdlICE9IGl0RW5kKSB7CiAgICAgICAgICAgICAgICAgICAgIENvbG91ciBjb2xvdXJHdWFyZChkaW1Db2xvdXIoKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA8PCAiIGFuZCI7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgKytpdE1lc3NhZ2U7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE1ODA0LDEzICsxMzM3Niw4IEBACiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKICNwcmFnbWEgd2FybmluZyhwdXNoKQogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDA2MSkgLy8gTm90IGFsbCBsYWJlbHMgYXJlIEVYUExJQ0lUTFkgaGFuZGxlZCBpbiBzd2l0Y2gKLSAvLyBOb3RlIHRoYXQgNDA2MiAobm90IGFsbCBsYWJlbHMgYXJlIGhhbmRsZWQgYW5kIGRlZmF1bHQgaXMgbWlzc2luZykgaXMgZW5hYmxlZAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fY2xhbmdfXykKLSMgIHByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLS8vIEZvciBzaW1wbGljaXR5LCBiZW5jaG1hcmtpbmctb25seSBoZWxwZXJzIGFyZSBhbHdheXMgZW5hYmxlZAotIyAgcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtZnVuY3Rpb24iCisgLy8gTm90ZSB0aGF0IDQwNjIgKG5vdCBhbGwgbGFiZWxzIGFyZSBoYW5kbGVkCisgLy8gYW5kIGRlZmF1bHQgaXMgbWlzc2luZykgaXMgZW5hYmxlZAogI2VuZGlmCiAKIG5hbWVzcGFjZSBDYXRjaCB7CkBAIC0xNTk5MiwxMSArMTM1NTksMTEgQEAKICAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qgc19uYW5vc2Vjb25kc0luQVNlY29uZCA9IDEwMDAgKiBzX25hbm9zZWNvbmRzSW5BTWlsbGlzZWNvbmQ7CiAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IHNfbmFub3NlY29uZHNJbkFNaW51dGUgPSA2MCAqIHNfbmFub3NlY29uZHNJbkFTZWNvbmQ7CiAKLSAgICBkb3VibGUgbV9pbk5hbm9zZWNvbmRzOworICAgIHVpbnQ2NF90IG1faW5OYW5vc2Vjb25kczsKICAgICBVbml0IG1fdW5pdHM7CiAKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBEdXJhdGlvbihkb3VibGUgaW5OYW5vc2Vjb25kcywgVW5pdCB1bml0cyA9IFVuaXQ6OkF1dG8pCisgICAgZXhwbGljaXQgRHVyYXRpb24odWludDY0X3QgaW5OYW5vc2Vjb25kcywgVW5pdCB1bml0cyA9IFVuaXQ6OkF1dG8pCiAgICAgICAgIDogbV9pbk5hbm9zZWNvbmRzKGluTmFub3NlY29uZHMpLAogICAgICAgICBtX3VuaXRzKHVuaXRzKSB7CiAgICAgICAgIGlmIChtX3VuaXRzID09IFVuaXQ6OkF1dG8pIHsKQEAgLTE2MDI1LDcgKzEzNTkyLDcgQEAKICAgICAgICAgY2FzZSBVbml0OjpNaW51dGVzOgogICAgICAgICAgICAgcmV0dXJuIG1faW5OYW5vc2Vjb25kcyAvIHN0YXRpY19jYXN0PGRvdWJsZT4oc19uYW5vc2Vjb25kc0luQU1pbnV0ZSk7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gbV9pbk5hbm9zZWNvbmRzOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV9pbk5hbm9zZWNvbmRzKTsKICAgICAgICAgfQogICAgIH0KICAgICBhdXRvIHVuaXRzQXNTdHJpbmcoKSBjb25zdCAtPiBzdGQ6OnN0cmluZyB7CkBAIC0xNjA0Niw3ICsxMzYxMyw3IEBACiAKICAgICB9CiAgICAgZnJpZW5kIGF1dG8gb3BlcmF0b3IgPDwgKHN0ZDo6b3N0cmVhbSYgb3MsIER1cmF0aW9uIGNvbnN0JiBkdXJhdGlvbikgLT4gc3RkOjpvc3RyZWFtJiB7Ci0gICAgICAgIHJldHVybiBvcyA8PCBkdXJhdGlvbi52YWx1ZSgpIDw8ICcgJyA8PCBkdXJhdGlvbi51bml0c0FzU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBvcyA8PCBkdXJhdGlvbi52YWx1ZSgpIDw8ICIgIiA8PCBkdXJhdGlvbi51bml0c0FzU3RyaW5nKCk7CiAgICAgfQogfTsKIH0gLy8gZW5kIGFub24gbmFtZXNwYWNlCkBAIC0xNjA3MSwxNiArMTM2MzgsMTAgQEAKICAgICAgICAgaWYgKCFtX2lzT3BlbikgewogICAgICAgICAgICAgbV9pc09wZW4gPSB0cnVlOwogICAgICAgICAgICAgKnRoaXMgPDwgUm93QnJlYWsoKTsKLQotCQkJQ29sdW1ucyBoZWFkZXJDb2xzOwotCQkJU3BhY2VyIHNwYWNlcigyKTsKLQkJCWZvciAoYXV0byBjb25zdCYgaW5mbyA6IG1fY29sdW1uSW5mb3MpIHsKLQkJCQloZWFkZXJDb2xzICs9IENvbHVtbihpbmZvLm5hbWUpLndpZHRoKHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihpbmZvLndpZHRoIC0gMikpOwotCQkJCWhlYWRlckNvbHMgKz0gc3BhY2VyOwotCQkJfQotCQkJbV9vcyA8PCBoZWFkZXJDb2xzIDw8ICdcbic7Ci0KLSAgICAgICAgICAgIG1fb3MgPDwgQ2F0Y2g6OmdldExpbmVPZkNoYXJzPCctJz4oKSA8PCAnXG4nOworICAgICAgICAgICAgZm9yIChhdXRvIGNvbnN0JiBpbmZvIDogbV9jb2x1bW5JbmZvcykKKyAgICAgICAgICAgICAgICAqdGhpcyA8PCBpbmZvLm5hbWUgPDwgQ29sdW1uQnJlYWsoKTsKKyAgICAgICAgICAgICp0aGlzIDw8IFJvd0JyZWFrKCk7CisgICAgICAgICAgICBtX29zIDw8IENhdGNoOjpnZXRMaW5lT2ZDaGFyczwnLSc+KCkgPDwgIlxuIjsKICAgICAgICAgfQogICAgIH0KICAgICB2b2lkIGNsb3NlKCkgewpAQCAtMTYwOTksMjkgKzEzNjYwLDMwIEBACiAKICAgICBmcmllbmQgVGFibGVQcmludGVyJiBvcGVyYXRvciA8PCAoVGFibGVQcmludGVyJiB0cCwgQ29sdW1uQnJlYWspIHsKICAgICAgICAgYXV0byBjb2xTdHIgPSB0cC5tX29zcy5zdHIoKTsKLSAgICAgICAgY29uc3QgYXV0byBzdHJTaXplID0gY29sU3RyLnNpemUoKTsKKyAgICAgICAgLy8gVGhpcyB0YWtlcyBhY2NvdW50IG9mIHV0ZjggZW5jb2RpbmdzCisgICAgICAgIGF1dG8gc3RyU2l6ZSA9IENhdGNoOjpTdHJpbmdSZWYoY29sU3RyKS5udW1iZXJPZkNoYXJhY3RlcnMoKTsKICAgICAgICAgdHAubV9vc3Muc3RyKCIiKTsKICAgICAgICAgdHAub3BlbigpOwogICAgICAgICBpZiAodHAubV9jdXJyZW50Q29sdW1uID09IHN0YXRpY19jYXN0PGludD4odHAubV9jb2x1bW5JbmZvcy5zaXplKCkgLSAxKSkgewogICAgICAgICAgICAgdHAubV9jdXJyZW50Q29sdW1uID0gLTE7Ci0gICAgICAgICAgICB0cC5tX29zIDw8ICdcbic7CisgICAgICAgICAgICB0cC5tX29zIDw8ICJcbiI7CiAgICAgICAgIH0KICAgICAgICAgdHAubV9jdXJyZW50Q29sdW1uKys7CiAKICAgICAgICAgYXV0byBjb2xJbmZvID0gdHAubV9jb2x1bW5JbmZvc1t0cC5tX2N1cnJlbnRDb2x1bW5dOwotICAgICAgICBhdXRvIHBhZGRpbmcgPSAoc3RyU2l6ZSArIDEgPCBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oY29sSW5mby53aWR0aCkpCi0gICAgICAgICAgICA/IHN0ZDo6c3RyaW5nKGNvbEluZm8ud2lkdGggLSAoc3RyU2l6ZSArIDEpLCAnICcpCisgICAgICAgIGF1dG8gcGFkZGluZyA9IChzdHJTaXplICsgMiA8IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90Pihjb2xJbmZvLndpZHRoKSkKKyAgICAgICAgICAgID8gc3RkOjpzdHJpbmcoY29sSW5mby53aWR0aCAtIChzdHJTaXplICsgMiksICcgJykKICAgICAgICAgICAgIDogc3RkOjpzdHJpbmcoKTsKICAgICAgICAgaWYgKGNvbEluZm8uanVzdGlmaWNhdGlvbiA9PSBDb2x1bW5JbmZvOjpMZWZ0KQotICAgICAgICAgICAgdHAubV9vcyA8PCBjb2xTdHIgPDwgcGFkZGluZyA8PCAnICc7CisgICAgICAgICAgICB0cC5tX29zIDw8IGNvbFN0ciA8PCBwYWRkaW5nIDw8ICIgIjsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdHAubV9vcyA8PCBwYWRkaW5nIDw8IGNvbFN0ciA8PCAnICc7CisgICAgICAgICAgICB0cC5tX29zIDw8IHBhZGRpbmcgPDwgY29sU3RyIDw8ICIgIjsKICAgICAgICAgcmV0dXJuIHRwOwogICAgIH0KIAogICAgIGZyaWVuZCBUYWJsZVByaW50ZXImIG9wZXJhdG9yIDw8IChUYWJsZVByaW50ZXImIHRwLCBSb3dCcmVhaykgewogICAgICAgICBpZiAodHAubV9jdXJyZW50Q29sdW1uID4gMCkgewotICAgICAgICAgICAgdHAubV9vcyA8PCAnXG4nOworICAgICAgICAgICAgdHAubV9vcyA8PCAiXG4iOwogICAgICAgICAgICAgdHAubV9jdXJyZW50Q29sdW1uID0gLTE7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRwOwpAQCAtMTYxMzEsMjYgKzEzNjkzLDEyIEBACiBDb25zb2xlUmVwb3J0ZXI6OkNvbnNvbGVSZXBvcnRlcihSZXBvcnRlckNvbmZpZyBjb25zdCYgY29uZmlnKQogICAgIDogU3RyZWFtaW5nUmVwb3J0ZXJCYXNlKGNvbmZpZyksCiAgICAgbV90YWJsZVByaW50ZXIobmV3IFRhYmxlUHJpbnRlcihjb25maWcuc3RyZWFtKCksCi0gICAgICAgIFsmY29uZmlnXSgpIC0+IHN0ZDo6dmVjdG9yPENvbHVtbkluZm8+IHsKLSAgICAgICAgaWYgKGNvbmZpZy5mdWxsQ29uZmlnKCktPmJlbmNobWFya05vQW5hbHlzaXMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuewotICAgICAgICAgICAgICAgIHsgImJlbmNobWFyayBuYW1lIiwgQ0FUQ0hfQ09ORklHX0NPTlNPTEVfV0lEVEggLSA0MywgQ29sdW1uSW5mbzo6TGVmdCB9LAotICAgICAgICAgICAgICAgIHsgIiAgICAgc2FtcGxlcyIsIDE0LCBDb2x1bW5JbmZvOjpSaWdodCB9LAotICAgICAgICAgICAgICAgIHsgIiAgaXRlcmF0aW9ucyIsIDE0LCBDb2x1bW5JbmZvOjpSaWdodCB9LAotICAgICAgICAgICAgICAgIHsgIiAgICAgICAgbWVhbiIsIDE0LCBDb2x1bW5JbmZvOjpSaWdodCB9Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuewotICAgICAgICAgICAgICAgIHsgImJlbmNobWFyayBuYW1lIiwgQ0FUQ0hfQ09ORklHX0NPTlNPTEVfV0lEVEggLSAzMiwgQ29sdW1uSW5mbzo6TGVmdCB9LAotICAgICAgICAgICAgICAgIHsgInNhbXBsZXMgICAgICBtZWFuICAgICAgIHN0ZCBkZXYiLCAxNCwgQ29sdW1uSW5mbzo6UmlnaHQgfSwKLSAgICAgICAgICAgICAgICB7ICJpdGVyYXRpb25zICAgbG93IG1lYW4gICBsb3cgc3RkIGRldiIsIDE0LCBDb2x1bW5JbmZvOjpSaWdodCB9LAotICAgICAgICAgICAgICAgIHsgImVzdGltYXRlZCAgICBoaWdoIG1lYW4gIGhpZ2ggc3RkIGRldiIsIDE0LCBDb2x1bW5JbmZvOjpSaWdodCB9Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0gICAgfSgpKSkge30KKyAgICB7CisgICAgICAgIHsgImJlbmNobWFyayBuYW1lIiwgQ0FUQ0hfQ09ORklHX0NPTlNPTEVfV0lEVEggLSAzMiwgQ29sdW1uSW5mbzo6TGVmdCB9LAorICAgICAgICB7ICJpdGVycyIsIDgsIENvbHVtbkluZm86OlJpZ2h0IH0sCisgICAgICAgIHsgImVsYXBzZWQgbnMiLCAxNCwgQ29sdW1uSW5mbzo6UmlnaHQgfSwKKyAgICAgICAgeyAiYXZlcmFnZSIsIDE0LCBDb2x1bW5JbmZvOjpSaWdodCB9CisgICAgfSkpIHt9CiBDb25zb2xlUmVwb3J0ZXI6On5Db25zb2xlUmVwb3J0ZXIoKSA9IGRlZmF1bHQ7CiAKIHN0ZDo6c3RyaW5nIENvbnNvbGVSZXBvcnRlcjo6Z2V0RGVzY3JpcHRpb24oKSB7CkBAIC0xNjE2MSwxMCArMTM3MDksNiBAQAogICAgIHN0cmVhbSA8PCAiTm8gdGVzdCBjYXNlcyBtYXRjaGVkICciIDw8IHNwZWMgPDwgJ1wnJyA8PCBzdGQ6OmVuZGw7CiB9CiAKLXZvaWQgQ29uc29sZVJlcG9ydGVyOjpyZXBvcnRJbnZhbGlkQXJndW1lbnRzKHN0ZDo6c3RyaW5nIGNvbnN0JmFyZyl7Ci0gICAgc3RyZWFtIDw8ICJJbnZhbGlkIEZpbHRlcjogIiA8PCBhcmcgPDwgc3RkOjplbmRsOwotfQotCiB2b2lkIENvbnNvbGVSZXBvcnRlcjo6YXNzZXJ0aW9uU3RhcnRpbmcoQXNzZXJ0aW9uSW5mbyBjb25zdCYpIHt9CiAKIGJvb2wgQ29uc29sZVJlcG9ydGVyOjphc3NlcnRpb25FbmRlZChBc3NlcnRpb25TdGF0cyBjb25zdCYgX2Fzc2VydGlvblN0YXRzKSB7CkBAIC0xNjE4NSw3ICsxMzcyOSw2IEBACiB9CiAKIHZvaWQgQ29uc29sZVJlcG9ydGVyOjpzZWN0aW9uU3RhcnRpbmcoU2VjdGlvbkluZm8gY29uc3QmIF9zZWN0aW9uSW5mbykgewotICAgIG1fdGFibGVQcmludGVyLT5jbG9zZSgpOwogICAgIG1faGVhZGVyUHJpbnRlZCA9IGZhbHNlOwogICAgIFN0cmVhbWluZ1JlcG9ydGVyQmFzZTo6c2VjdGlvblN0YXJ0aW5nKF9zZWN0aW9uSW5mbyk7CiB9CkBAIC0xNjIwOSw1MyArMTM3NTIsMjggQEAKICAgICBTdHJlYW1pbmdSZXBvcnRlckJhc2U6OnNlY3Rpb25FbmRlZChfc2VjdGlvblN0YXRzKTsKIH0KIAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcpCi12b2lkIENvbnNvbGVSZXBvcnRlcjo6YmVuY2htYXJrUHJlcGFyaW5nKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lKSB7Ci0JbGF6eVByaW50V2l0aG91dENsb3NpbmdCZW5jaG1hcmtUYWJsZSgpOwotCi0JYXV0byBuYW1lQ29sID0gQ29sdW1uKG5hbWUpLndpZHRoKHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihtX3RhYmxlUHJpbnRlci0+Y29sdW1uSW5mb3MoKVswXS53aWR0aCAtIDIpKTsKLQotCWJvb2wgZmlyc3RMaW5lID0gdHJ1ZTsKLQlmb3IgKGF1dG8gbGluZSA6IG5hbWVDb2wpIHsKLQkJaWYgKCFmaXJzdExpbmUpCi0JCQkoKm1fdGFibGVQcmludGVyKSA8PCBDb2x1bW5CcmVhaygpIDw8IENvbHVtbkJyZWFrKCkgPDwgQ29sdW1uQnJlYWsoKTsKLQkJZWxzZQotCQkJZmlyc3RMaW5lID0gZmFsc2U7Ci0KLQkJKCptX3RhYmxlUHJpbnRlcikgPDwgbGluZSA8PCBDb2x1bW5CcmVhaygpOwotCX0KLX0KLQogdm9pZCBDb25zb2xlUmVwb3J0ZXI6OmJlbmNobWFya1N0YXJ0aW5nKEJlbmNobWFya0luZm8gY29uc3QmIGluZm8pIHsKLSAgICAoKm1fdGFibGVQcmludGVyKSA8PCBpbmZvLnNhbXBsZXMgPDwgQ29sdW1uQnJlYWsoKQotICAgICAgICA8PCBpbmZvLml0ZXJhdGlvbnMgPDwgQ29sdW1uQnJlYWsoKTsKLSAgICBpZiAoIW1fY29uZmlnLT5iZW5jaG1hcmtOb0FuYWx5c2lzKCkpCi0gICAgICAgICgqbV90YWJsZVByaW50ZXIpIDw8IER1cmF0aW9uKGluZm8uZXN0aW1hdGVkRHVyYXRpb24pIDw8IENvbHVtbkJyZWFrKCk7Ci19Ci12b2lkIENvbnNvbGVSZXBvcnRlcjo6YmVuY2htYXJrRW5kZWQoQmVuY2htYXJrU3RhdHM8PiBjb25zdCYgc3RhdHMpIHsKLSAgICBpZiAobV9jb25maWctPmJlbmNobWFya05vQW5hbHlzaXMoKSkKLSAgICB7Ci0gICAgICAgICgqbV90YWJsZVByaW50ZXIpIDw8IER1cmF0aW9uKHN0YXRzLm1lYW4ucG9pbnQuY291bnQoKSkgPDwgQ29sdW1uQnJlYWsoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgKCptX3RhYmxlUHJpbnRlcikgPDwgQ29sdW1uQnJlYWsoKQotICAgICAgICAgICAgPDwgRHVyYXRpb24oc3RhdHMubWVhbi5wb2ludC5jb3VudCgpKSA8PCBDb2x1bW5CcmVhaygpCi0gICAgICAgICAgICA8PCBEdXJhdGlvbihzdGF0cy5tZWFuLmxvd2VyX2JvdW5kLmNvdW50KCkpIDw8IENvbHVtbkJyZWFrKCkKLSAgICAgICAgICAgIDw8IER1cmF0aW9uKHN0YXRzLm1lYW4udXBwZXJfYm91bmQuY291bnQoKSkgPDwgQ29sdW1uQnJlYWsoKSA8PCBDb2x1bW5CcmVhaygpCi0gICAgICAgICAgICA8PCBEdXJhdGlvbihzdGF0cy5zdGFuZGFyZERldmlhdGlvbi5wb2ludC5jb3VudCgpKSA8PCBDb2x1bW5CcmVhaygpCi0gICAgICAgICAgICA8PCBEdXJhdGlvbihzdGF0cy5zdGFuZGFyZERldmlhdGlvbi5sb3dlcl9ib3VuZC5jb3VudCgpKSA8PCBDb2x1bW5CcmVhaygpCi0gICAgICAgICAgICA8PCBEdXJhdGlvbihzdGF0cy5zdGFuZGFyZERldmlhdGlvbi51cHBlcl9ib3VuZC5jb3VudCgpKSA8PCBDb2x1bW5CcmVhaygpIDw8IENvbHVtbkJyZWFrKCkgPDwgQ29sdW1uQnJlYWsoKSA8PCBDb2x1bW5CcmVhaygpIDw8IENvbHVtbkJyZWFrKCk7Ci0gICAgfQotfQorICAgIGxhenlQcmludFdpdGhvdXRDbG9zaW5nQmVuY2htYXJrVGFibGUoKTsKIAotdm9pZCBDb25zb2xlUmVwb3J0ZXI6OmJlbmNobWFya0ZhaWxlZChzdGQ6OnN0cmluZyBjb25zdCYgZXJyb3IpIHsKLQlDb2xvdXIgY29sb3VyKENvbG91cjo6UmVkKTsKLSAgICAoKm1fdGFibGVQcmludGVyKQotICAgICAgICA8PCAiQmVuY2htYXJrIGZhaWxlZCAoIiA8PCBlcnJvciA8PCAnKScKLSAgICAgICAgPDwgQ29sdW1uQnJlYWsoKSA8PCBSb3dCcmVhaygpOworICAgIGF1dG8gbmFtZUNvbCA9IENvbHVtbiggaW5mby5uYW1lICkud2lkdGgoIHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PiggbV90YWJsZVByaW50ZXItPmNvbHVtbkluZm9zKClbMF0ud2lkdGggLSAyICkgKTsKKworICAgIGJvb2wgZmlyc3RMaW5lID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8gbGluZSA6IG5hbWVDb2wpIHsKKyAgICAgICAgaWYgKCFmaXJzdExpbmUpCisgICAgICAgICAgICAoKm1fdGFibGVQcmludGVyKSA8PCBDb2x1bW5CcmVhaygpIDw8IENvbHVtbkJyZWFrKCkgPDwgQ29sdW1uQnJlYWsoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmlyc3RMaW5lID0gZmFsc2U7CisKKyAgICAgICAgKCptX3RhYmxlUHJpbnRlcikgPDwgbGluZSA8PCBDb2x1bW5CcmVhaygpOworICAgIH0KIH0KLSNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORwordm9pZCBDb25zb2xlUmVwb3J0ZXI6OmJlbmNobWFya0VuZGVkKEJlbmNobWFya1N0YXRzIGNvbnN0JiBzdGF0cykgeworICAgIER1cmF0aW9uIGF2ZXJhZ2Uoc3RhdHMuZWxhcHNlZFRpbWVJbk5hbm9zZWNvbmRzIC8gc3RhdHMuaXRlcmF0aW9ucyk7CisgICAgKCptX3RhYmxlUHJpbnRlcikKKyAgICAgICAgPDwgc3RhdHMuaXRlcmF0aW9ucyA8PCBDb2x1bW5CcmVhaygpCisgICAgICAgIDw8IHN0YXRzLmVsYXBzZWRUaW1lSW5OYW5vc2Vjb25kcyA8PCBDb2x1bW5CcmVhaygpCisgICAgICAgIDw8IGF2ZXJhZ2UgPDwgQ29sdW1uQnJlYWsoKTsKK30KIAogdm9pZCBDb25zb2xlUmVwb3J0ZXI6OnRlc3RDYXNlRW5kZWQoVGVzdENhc2VTdGF0cyBjb25zdCYgX3Rlc3RDYXNlU3RhdHMpIHsKICAgICBtX3RhYmxlUHJpbnRlci0+Y2xvc2UoKTsKQEAgLTE2MzM0LDkgKzEzODUyLDExIEBACiAKICAgICBTb3VyY2VMaW5lSW5mbyBsaW5lSW5mbyA9IG1fc2VjdGlvblN0YWNrLmJhY2soKS5saW5lSW5mbzsKIAotICAgIHN0cmVhbSA8PCBnZXRMaW5lT2ZDaGFyczwnLSc+KCkgPDwgJ1xuJzsKLSAgICBDb2xvdXIgY29sb3VyR3VhcmQoQ29sb3VyOjpGaWxlTmFtZSk7Ci0gICAgc3RyZWFtIDw8IGxpbmVJbmZvIDw8ICdcbic7CisgICAgaWYgKCFsaW5lSW5mby5lbXB0eSgpKSB7CisgICAgICAgIHN0cmVhbSA8PCBnZXRMaW5lT2ZDaGFyczwnLSc+KCkgPDwgJ1xuJzsKKyAgICAgICAgQ29sb3VyIGNvbG91ckd1YXJkKENvbG91cjo6RmlsZU5hbWUpOworICAgICAgICBzdHJlYW0gPDwgbGluZUluZm8gPDwgJ1xuJzsKKyAgICB9CiAgICAgc3RyZWFtIDw8IGdldExpbmVPZkNoYXJzPCcuJz4oKSA8PCAnXG4nIDw8IHN0ZDo6ZW5kbDsKIH0KIApAQCAtMTY0NjEsMTAgKzEzOTgxLDggQEAKIH0KIAogdm9pZCBDb25zb2xlUmVwb3J0ZXI6OnByaW50VGVzdEZpbHRlcnMoKSB7Ci0gICAgaWYgKG1fY29uZmlnLT50ZXN0U3BlYygpLmhhc0ZpbHRlcnMoKSkgewotICAgICAgICBDb2xvdXIgZ3VhcmQoQ29sb3VyOjpCcmlnaHRZZWxsb3cpOwotICAgICAgICBzdHJlYW0gPDwgIkZpbHRlcnM6ICIgPDwgc2VyaWFsaXplRmlsdGVycyhtX2NvbmZpZy0+Z2V0VGVzdHNPclRhZ3MoKSkgPDwgJ1xuJzsKLSAgICB9CisgICAgaWYgKG1fY29uZmlnLT50ZXN0U3BlYygpLmhhc0ZpbHRlcnMoKSkKKyAgICAgICAgc3RyZWFtIDw8IENvbG91cihDb2xvdXI6OkJyaWdodFllbGxvdykgPDwgIkZpbHRlcnM6ICIgPDwgc2VyaWFsaXplRmlsdGVycyggbV9jb25maWctPmdldFRlc3RzT3JUYWdzKCkgKSA8PCAnXG4nOwogfQogCiBDQVRDSF9SRUdJU1RFUl9SRVBPUlRFUigiY29uc29sZSIsIENvbnNvbGVSZXBvcnRlcikKQEAgLTE2NDc0LDEwICsxMzk5Miw2IEBACiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKICNwcmFnbWEgd2FybmluZyhwb3ApCiAjZW5kaWYKLQotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotIyAgcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYKIC8vIGVuZCBjYXRjaF9yZXBvcnRlcl9jb25zb2xlLmNwcAogLy8gc3RhcnQgY2F0Y2hfcmVwb3J0ZXJfanVuaXQuY3BwCiAKQEAgLTE2NjE0LDggKzE0MTI4LDggQEAKICAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiBjaGlsZCA6IGdyb3VwTm9kZS5jaGlsZHJlbiApCiAgICAgICAgICAgICB3cml0ZVRlc3RDYXNlKCAqY2hpbGQgKTsKIAotICAgICAgICB4bWwuc2NvcGVkRWxlbWVudCggInN5c3RlbS1vdXQiICkud3JpdGVUZXh0KCB0cmltKCBzdGRPdXRGb3JTdWl0ZSApLCBYbWxGb3JtYXR0aW5nOjpOZXdsaW5lICk7Ci0gICAgICAgIHhtbC5zY29wZWRFbGVtZW50KCAic3lzdGVtLWVyciIgKS53cml0ZVRleHQoIHRyaW0oIHN0ZEVyckZvclN1aXRlICksIFhtbEZvcm1hdHRpbmc6Ok5ld2xpbmUgKTsKKyAgICAgICAgeG1sLnNjb3BlZEVsZW1lbnQoICJzeXN0ZW0tb3V0IiApLndyaXRlVGV4dCggdHJpbSggc3RkT3V0Rm9yU3VpdGUgKSwgZmFsc2UgKTsKKyAgICAgICAgeG1sLnNjb3BlZEVsZW1lbnQoICJzeXN0ZW0tZXJyIiApLndyaXRlVGV4dCggdHJpbSggc3RkRXJyRm9yU3VpdGUgKSwgZmFsc2UgKTsKICAgICB9CiAKICAgICB2b2lkIEp1bml0UmVwb3J0ZXI6OndyaXRlVGVzdENhc2UoIFRlc3RDYXNlTm9kZSBjb25zdCYgdGVzdENhc2VOb2RlICkgewpAQCAtMTY2NjQsOSArMTQxNzgsOSBAQAogICAgICAgICAgICAgd3JpdGVBc3NlcnRpb25zKCBzZWN0aW9uTm9kZSApOwogCiAgICAgICAgICAgICBpZiggIXNlY3Rpb25Ob2RlLnN0ZE91dC5lbXB0eSgpICkKLSAgICAgICAgICAgICAgICB4bWwuc2NvcGVkRWxlbWVudCggInN5c3RlbS1vdXQiICkud3JpdGVUZXh0KCB0cmltKCBzZWN0aW9uTm9kZS5zdGRPdXQgKSwgWG1sRm9ybWF0dGluZzo6TmV3bGluZSApOworICAgICAgICAgICAgICAgIHhtbC5zY29wZWRFbGVtZW50KCAic3lzdGVtLW91dCIgKS53cml0ZVRleHQoIHRyaW0oIHNlY3Rpb25Ob2RlLnN0ZE91dCApLCBmYWxzZSApOwogICAgICAgICAgICAgaWYoICFzZWN0aW9uTm9kZS5zdGRFcnIuZW1wdHkoKSApCi0gICAgICAgICAgICAgICAgeG1sLnNjb3BlZEVsZW1lbnQoICJzeXN0ZW0tZXJyIiApLndyaXRlVGV4dCggdHJpbSggc2VjdGlvbk5vZGUuc3RkRXJyICksIFhtbEZvcm1hdHRpbmc6Ok5ld2xpbmUgKTsKKyAgICAgICAgICAgICAgICB4bWwuc2NvcGVkRWxlbWVudCggInN5c3RlbS1lcnIiICkud3JpdGVUZXh0KCB0cmltKCBzZWN0aW9uTm9kZS5zdGRFcnIgKSwgZmFsc2UgKTsKICAgICAgICAgfQogICAgICAgICBmb3IoIGF1dG8gY29uc3QmIGNoaWxkTm9kZSA6IHNlY3Rpb25Ob2RlLmNoaWxkU2VjdGlvbnMgKQogICAgICAgICAgICAgaWYoIGNsYXNzTmFtZS5lbXB0eSgpICkKQEAgLTE2NjkwLDcgKzE0MjA0LDExIEBACiAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lID0gImVycm9yIjsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRXYXM6OkV4cGxpY2l0RmFpbHVyZToKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudE5hbWUgPSAiZmFpbHVyZSI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0V2FzOjpFeHByZXNzaW9uRmFpbGVkOgorICAgICAgICAgICAgICAgICAgICBlbGVtZW50TmFtZSA9ICJmYWlsdXJlIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRXYXM6OkRpZG50VGhyb3dFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lID0gImZhaWx1cmUiOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE2NzA4LDI1ICsxNDIyNiwxMCBAQAogCiAgICAgICAgICAgICBYbWxXcml0ZXI6OlNjb3BlZEVsZW1lbnQgZSA9IHhtbC5zY29wZWRFbGVtZW50KCBlbGVtZW50TmFtZSApOwogCi0gICAgICAgICAgICB4bWwud3JpdGVBdHRyaWJ1dGUoICJtZXNzYWdlIiwgcmVzdWx0LmdldEV4cHJlc3Npb24oKSApOworICAgICAgICAgICAgeG1sLndyaXRlQXR0cmlidXRlKCAibWVzc2FnZSIsIHJlc3VsdC5nZXRFeHBhbmRlZEV4cHJlc3Npb24oKSApOwogICAgICAgICAgICAgeG1sLndyaXRlQXR0cmlidXRlKCAidHlwZSIsIHJlc3VsdC5nZXRUZXN0TWFjcm9OYW1lKCkgKTsKIAogICAgICAgICAgICAgUmV1c2FibGVTdHJpbmdTdHJlYW0gcnNzOwotICAgICAgICAgICAgaWYgKHN0YXRzLnRvdGFscy5hc3NlcnRpb25zLnRvdGFsKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgcnNzIDw8ICJGQUlMRUQiIDw8ICI6XG4iOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhwcmVzc2lvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJzcyA8PCAiICAiOwotICAgICAgICAgICAgICAgICAgICByc3MgPDwgcmVzdWx0LmdldEV4cHJlc3Npb25Jbk1hY3JvKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJzcyA8PCAnXG4nOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4cGFuZGVkRXhwcmVzc2lvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJzcyA8PCAid2l0aCBleHBhbnNpb246XG4iOwotICAgICAgICAgICAgICAgICAgICByc3MgPDwgQ29sdW1uKHJlc3VsdC5nZXRFeHBhbmRlZEV4cHJlc3Npb24oKSkuaW5kZW50KDIpIDw8ICdcbic7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByc3MgPDwgJ1xuJzsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgaWYoICFyZXN1bHQuZ2V0TWVzc2FnZSgpLmVtcHR5KCkgKQogICAgICAgICAgICAgICAgIHJzcyA8PCByZXN1bHQuZ2V0TWVzc2FnZSgpIDw8ICdcbic7CiAgICAgICAgICAgICBmb3IoIGF1dG8gY29uc3QmIG1zZyA6IHN0YXRzLmluZm9NZXNzYWdlcyApCkBAIC0xNjczNCw3ICsxNDIzNyw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJzcyA8PCBtc2cubWVzc2FnZSA8PCAnXG4nOwogCiAgICAgICAgICAgICByc3MgPDwgImF0ICIgPDwgcmVzdWx0LmdldFNvdXJjZUluZm8oKTsKLSAgICAgICAgICAgIHhtbC53cml0ZVRleHQoIHJzcy5zdHIoKSwgWG1sRm9ybWF0dGluZzo6TmV3bGluZSApOworICAgICAgICAgICAgeG1sLndyaXRlVGV4dCggcnNzLnN0cigpLCBmYWxzZSApOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNjc3OCw0MSArMTQyODEsMTkgQEAKICAgICAgICAgbV9yZXBvcnRlci0+bm9NYXRjaGluZ1Rlc3RDYXNlcyggc3BlYyApOwogICAgIH0KIAotICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OnJlcG9ydEludmFsaWRBcmd1bWVudHMoc3RkOjpzdHJpbmcgY29uc3QmYXJnKXsKLSAgICAgICAgZm9yICggYXV0byBjb25zdCYgbGlzdGVuZXIgOiBtX2xpc3RlbmVycyApIHsKLSAgICAgICAgICAgIGxpc3RlbmVyLT5yZXBvcnRJbnZhbGlkQXJndW1lbnRzKCBhcmcgKTsKLSAgICAgICAgfQotICAgICAgICBtX3JlcG9ydGVyLT5yZXBvcnRJbnZhbGlkQXJndW1lbnRzKCBhcmcgKTsKLSAgICB9Ci0KLSNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19FTkFCTEVfQkVOQ0hNQVJLSU5HKQotICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OmJlbmNobWFya1ByZXBhcmluZyggc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgKSB7Ci0JCWZvciAoYXV0byBjb25zdCYgbGlzdGVuZXIgOiBtX2xpc3RlbmVycykgewotCQkJbGlzdGVuZXItPmJlbmNobWFya1ByZXBhcmluZyhuYW1lKTsKLQkJfQotCQltX3JlcG9ydGVyLT5iZW5jaG1hcmtQcmVwYXJpbmcobmFtZSk7Ci0JfQogICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OmJlbmNobWFya1N0YXJ0aW5nKCBCZW5jaG1hcmtJbmZvIGNvbnN0JiBiZW5jaG1hcmtJbmZvICkgewogICAgICAgICBmb3IgKCBhdXRvIGNvbnN0JiBsaXN0ZW5lciA6IG1fbGlzdGVuZXJzICkgewogICAgICAgICAgICAgbGlzdGVuZXItPmJlbmNobWFya1N0YXJ0aW5nKCBiZW5jaG1hcmtJbmZvICk7CiAgICAgICAgIH0KICAgICAgICAgbV9yZXBvcnRlci0+YmVuY2htYXJrU3RhcnRpbmcoIGJlbmNobWFya0luZm8gKTsKICAgICB9Ci0gICAgdm9pZCBMaXN0ZW5pbmdSZXBvcnRlcjo6YmVuY2htYXJrRW5kZWQoIEJlbmNobWFya1N0YXRzPD4gY29uc3QmIGJlbmNobWFya1N0YXRzICkgeworICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OmJlbmNobWFya0VuZGVkKCBCZW5jaG1hcmtTdGF0cyBjb25zdCYgYmVuY2htYXJrU3RhdHMgKSB7CiAgICAgICAgIGZvciAoIGF1dG8gY29uc3QmIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMgKSB7CiAgICAgICAgICAgICBsaXN0ZW5lci0+YmVuY2htYXJrRW5kZWQoIGJlbmNobWFya1N0YXRzICk7CiAgICAgICAgIH0KICAgICAgICAgbV9yZXBvcnRlci0+YmVuY2htYXJrRW5kZWQoIGJlbmNobWFya1N0YXRzICk7CiAgICAgfQogCi0Jdm9pZCBMaXN0ZW5pbmdSZXBvcnRlcjo6YmVuY2htYXJrRmFpbGVkKCBzdGQ6OnN0cmluZyBjb25zdCYgZXJyb3IgKSB7Ci0JCWZvciAoYXV0byBjb25zdCYgbGlzdGVuZXIgOiBtX2xpc3RlbmVycykgewotCQkJbGlzdGVuZXItPmJlbmNobWFya0ZhaWxlZChlcnJvcik7Ci0JCX0KLQkJbV9yZXBvcnRlci0+YmVuY2htYXJrRmFpbGVkKGVycm9yKTsKLQl9Ci0jZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcKLQogICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OnRlc3RSdW5TdGFydGluZyggVGVzdFJ1bkluZm8gY29uc3QmIHRlc3RSdW5JbmZvICkgewogICAgICAgICBmb3IgKCBhdXRvIGNvbnN0JiBsaXN0ZW5lciA6IG1fbGlzdGVuZXJzICkgewogICAgICAgICAgICAgbGlzdGVuZXItPnRlc3RSdW5TdGFydGluZyggdGVzdFJ1bkluZm8gKTsKQEAgLTE3MDgwLDkgKzE0NTYxLDkgQEAKICAgICAgICAgICAgIGUud3JpdGVBdHRyaWJ1dGUoICJkdXJhdGlvbkluU2Vjb25kcyIsIG1fdGVzdENhc2VUaW1lci5nZXRFbGFwc2VkU2Vjb25kcygpICk7CiAKICAgICAgICAgaWYoICF0ZXN0Q2FzZVN0YXRzLnN0ZE91dC5lbXB0eSgpICkKLSAgICAgICAgICAgIG1feG1sLnNjb3BlZEVsZW1lbnQoICJTdGRPdXQiICkud3JpdGVUZXh0KCB0cmltKCB0ZXN0Q2FzZVN0YXRzLnN0ZE91dCApLCBYbWxGb3JtYXR0aW5nOjpOZXdsaW5lICk7CisgICAgICAgICAgICBtX3htbC5zY29wZWRFbGVtZW50KCAiU3RkT3V0IiApLndyaXRlVGV4dCggdHJpbSggdGVzdENhc2VTdGF0cy5zdGRPdXQgKSwgZmFsc2UgKTsKICAgICAgICAgaWYoICF0ZXN0Q2FzZVN0YXRzLnN0ZEVyci5lbXB0eSgpICkKLSAgICAgICAgICAgIG1feG1sLnNjb3BlZEVsZW1lbnQoICJTdGRFcnIiICkud3JpdGVUZXh0KCB0cmltKCB0ZXN0Q2FzZVN0YXRzLnN0ZEVyciApLCBYbWxGb3JtYXR0aW5nOjpOZXdsaW5lICk7CisgICAgICAgICAgICBtX3htbC5zY29wZWRFbGVtZW50KCAiU3RkRXJyIiApLndyaXRlVGV4dCggdHJpbSggdGVzdENhc2VTdGF0cy5zdGRFcnIgKSwgZmFsc2UgKTsKIAogICAgICAgICBtX3htbC5lbmRFbGVtZW50KCk7CiAgICAgfQpAQCAtMTcxMDYsNTEgKzE0NTg3LDYgQEAKICAgICAgICAgbV94bWwuZW5kRWxlbWVudCgpOwogICAgIH0KIAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcpCi0gICAgdm9pZCBYbWxSZXBvcnRlcjo6YmVuY2htYXJrUHJlcGFyaW5nKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lKSB7Ci0gICAgICAgIG1feG1sLnN0YXJ0RWxlbWVudCgiQmVuY2htYXJrUmVzdWx0cyIpCi0gICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoIm5hbWUiLCBuYW1lKTsKLSAgICB9Ci0KLSAgICB2b2lkIFhtbFJlcG9ydGVyOjpiZW5jaG1hcmtTdGFydGluZyhCZW5jaG1hcmtJbmZvIGNvbnN0ICZpbmZvKSB7Ci0gICAgICAgIG1feG1sLndyaXRlQXR0cmlidXRlKCJzYW1wbGVzIiwgaW5mby5zYW1wbGVzKQotICAgICAgICAgICAgLndyaXRlQXR0cmlidXRlKCJyZXNhbXBsZXMiLCBpbmZvLnJlc2FtcGxlcykKLSAgICAgICAgICAgIC53cml0ZUF0dHJpYnV0ZSgiaXRlcmF0aW9ucyIsIGluZm8uaXRlcmF0aW9ucykKLSAgICAgICAgICAgIC53cml0ZUF0dHJpYnV0ZSgiY2xvY2tSZXNvbHV0aW9uIiwgaW5mby5jbG9ja1Jlc29sdXRpb24pCi0gICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoImVzdGltYXRlZER1cmF0aW9uIiwgaW5mby5lc3RpbWF0ZWREdXJhdGlvbikKLSAgICAgICAgICAgIC53cml0ZUNvbW1lbnQoIkFsbCB2YWx1ZXMgaW4gbmFubyBzZWNvbmRzIik7Ci0gICAgfQotCi0gICAgdm9pZCBYbWxSZXBvcnRlcjo6YmVuY2htYXJrRW5kZWQoQmVuY2htYXJrU3RhdHM8PiBjb25zdCYgYmVuY2htYXJrU3RhdHMpIHsKLSAgICAgICAgbV94bWwuc3RhcnRFbGVtZW50KCJtZWFuIikKLSAgICAgICAgICAgIC53cml0ZUF0dHJpYnV0ZSgidmFsdWUiLCBiZW5jaG1hcmtTdGF0cy5tZWFuLnBvaW50LmNvdW50KCkpCi0gICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoImxvd2VyQm91bmQiLCBiZW5jaG1hcmtTdGF0cy5tZWFuLmxvd2VyX2JvdW5kLmNvdW50KCkpCi0gICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoInVwcGVyQm91bmQiLCBiZW5jaG1hcmtTdGF0cy5tZWFuLnVwcGVyX2JvdW5kLmNvdW50KCkpCi0gICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoImNpIiwgYmVuY2htYXJrU3RhdHMubWVhbi5jb25maWRlbmNlX2ludGVydmFsKTsKLSAgICAgICAgbV94bWwuZW5kRWxlbWVudCgpOwotICAgICAgICBtX3htbC5zdGFydEVsZW1lbnQoInN0YW5kYXJkRGV2aWF0aW9uIikKLSAgICAgICAgICAgIC53cml0ZUF0dHJpYnV0ZSgidmFsdWUiLCBiZW5jaG1hcmtTdGF0cy5zdGFuZGFyZERldmlhdGlvbi5wb2ludC5jb3VudCgpKQotICAgICAgICAgICAgLndyaXRlQXR0cmlidXRlKCJsb3dlckJvdW5kIiwgYmVuY2htYXJrU3RhdHMuc3RhbmRhcmREZXZpYXRpb24ubG93ZXJfYm91bmQuY291bnQoKSkKLSAgICAgICAgICAgIC53cml0ZUF0dHJpYnV0ZSgidXBwZXJCb3VuZCIsIGJlbmNobWFya1N0YXRzLnN0YW5kYXJkRGV2aWF0aW9uLnVwcGVyX2JvdW5kLmNvdW50KCkpCi0gICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoImNpIiwgYmVuY2htYXJrU3RhdHMuc3RhbmRhcmREZXZpYXRpb24uY29uZmlkZW5jZV9pbnRlcnZhbCk7Ci0gICAgICAgIG1feG1sLmVuZEVsZW1lbnQoKTsKLSAgICAgICAgbV94bWwuc3RhcnRFbGVtZW50KCJvdXRsaWVycyIpCi0gICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoInZhcmlhbmNlIiwgYmVuY2htYXJrU3RhdHMub3V0bGllclZhcmlhbmNlKQotICAgICAgICAgICAgLndyaXRlQXR0cmlidXRlKCJsb3dNaWxkIiwgYmVuY2htYXJrU3RhdHMub3V0bGllcnMubG93X21pbGQpCi0gICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoImxvd1NldmVyZSIsIGJlbmNobWFya1N0YXRzLm91dGxpZXJzLmxvd19zZXZlcmUpCi0gICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoImhpZ2hNaWxkIiwgYmVuY2htYXJrU3RhdHMub3V0bGllcnMuaGlnaF9taWxkKQotICAgICAgICAgICAgLndyaXRlQXR0cmlidXRlKCJoaWdoU2V2ZXJlIiwgYmVuY2htYXJrU3RhdHMub3V0bGllcnMuaGlnaF9zZXZlcmUpOwotICAgICAgICBtX3htbC5lbmRFbGVtZW50KCk7Ci0gICAgICAgIG1feG1sLmVuZEVsZW1lbnQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIFhtbFJlcG9ydGVyOjpiZW5jaG1hcmtGYWlsZWQoc3RkOjpzdHJpbmcgY29uc3QgJmVycm9yKSB7Ci0gICAgICAgIG1feG1sLnNjb3BlZEVsZW1lbnQoImZhaWxlZCIpLgotICAgICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoIm1lc3NhZ2UiLCBlcnJvcik7Ci0gICAgICAgIG1feG1sLmVuZEVsZW1lbnQoKTsKLSAgICB9Ci0jZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX0VOQUJMRV9CRU5DSE1BUktJTkcKLQogICAgIENBVENIX1JFR0lTVEVSX1JFUE9SVEVSKCAieG1sIiwgWG1sUmVwb3J0ZXIgKQogCiB9IC8vIGVuZCBuYW1lc3BhY2UgQ2F0Y2gKQEAgLTE3MTc2LDcgKzE0NjEyLDcgQEAKIAogI2lmbmRlZiBfX09CSkNfXwogCi0jaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfV0NIQVIpICYmIGRlZmluZWQoQ0FUQ0hfUExBVEZPUk1fV0lORE9XUykgJiYgZGVmaW5lZChfVU5JQ09ERSkgJiYgIWRlZmluZWQoRE9fTk9UX1VTRV9XTUFJTikKKyNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19XQ0hBUikgJiYgZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChfVU5JQ09ERSkgJiYgIWRlZmluZWQoRE9fTk9UX1VTRV9XTUFJTikKIC8vIFN0YW5kYXJkIEMvQysrIFdpbjMyIFVuaWNvZGUgd21haW4gZW50cnkgcG9pbnQKIGV4dGVybiAiQyIgaW50IHdtYWluIChpbnQgYXJnYywgd2NoYXJfdCAqIGFyZ3ZbXSwgd2NoYXJfdCAqIFtdKSB7CiAjZWxzZQpAQCAtMTcyNTMsNyArMTQ2ODksNiBAQAogI2VuZGlmIC8vIENBVENIX0NPTkZJR19ESVNBQkxFX01BVENIRVJTCiAKICNkZWZpbmUgQ0FUQ0hfSU5GTyggbXNnICkgSU5URVJOQUxfQ0FUQ0hfSU5GTyggIkNBVENIX0lORk8iLCBtc2cgKQotI2RlZmluZSBDQVRDSF9VTlNDT1BFRF9JTkZPKCBtc2cgKSBJTlRFUk5BTF9DQVRDSF9VTlNDT1BFRF9JTkZPKCAiQ0FUQ0hfVU5TQ09QRURfSU5GTyIsIG1zZyApCiAjZGVmaW5lIENBVENIX1dBUk4oIG1zZyApIElOVEVSTkFMX0NBVENIX01TRyggIkNBVENIX1dBUk4iLCBDYXRjaDo6UmVzdWx0V2FzOjpXYXJuaW5nLCBDYXRjaDo6UmVzdWx0RGlzcG9zaXRpb246OkNvbnRpbnVlT25GYWlsdXJlLCBtc2cgKQogI2RlZmluZSBDQVRDSF9DQVBUVVJFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9DQVBUVVJFKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRShjYXB0dXJlciksICJDQVRDSF9DQVBUVVJFIixfX1ZBX0FSR1NfXyApCiAKQEAgLTE3MjcxLDIyICsxNDcwNiwxNCBAQAogCiAjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgogI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0VfU0lHKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfU0lHKCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCi0jZGVmaW5lIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkKICNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApCi0jZGVmaW5lIENBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX1NJRyggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfU0lHKCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIENBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQogI2Vsc2UKICNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKSApCi0jZGVmaW5lIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9TSUcoIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX1NJRyggX19WQV9BUkdTX18gKSApCiAjZGVmaW5lIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkgKQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkgKQogI2RlZmluZSBDQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKSApCi0jZGVmaW5lIENBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX1NJRyggLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9TSUcoIF9fVkFfQVJHU19fICkgKQogI2RlZmluZSBDQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKSApCi0jZGVmaW5lIENBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkgKQogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfUlVOVElNRV9TVEFUSUNfUkVRVUlSRSkKQEAgLTE3MzA3LDEzICsxNDczNCw2IEBACiAjZGVmaW5lIENBVENIX1RIRU4oIGRlc2MgKSAgICAgIElOVEVSTkFMX0NBVENIX0RZTkFNSUNfU0VDVElPTiggIiAgICAgVGhlbjogIiA8PCBkZXNjICkKICNkZWZpbmUgQ0FUQ0hfQU5EX1RIRU4oIGRlc2MgKSAgSU5URVJOQUxfQ0FUQ0hfRFlOQU1JQ19TRUNUSU9OKCAiICAgICAgQW5kOiAiIDw8IGRlc2MgKQogCi0jaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORykKLSNkZWZpbmUgQ0FUQ0hfQkVOQ0hNQVJLKC4uLikgXAotICAgIElOVEVSTkFMX0NBVENIX0JFTkNITUFSSyhJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRShfX19fQ19BX1RfQ19IX19fX0JfRV9OX0NfSF9fX18pLCBJTlRFUk5BTF9DQVRDSF9HRVRfMV9BUkcoX19WQV9BUkdTX18sLCksIElOVEVSTkFMX0NBVENIX0dFVF8yX0FSRyhfX1ZBX0FSR1NfXywsKSkKLSNkZWZpbmUgQ0FUQ0hfQkVOQ0hNQVJLX0FEVkFOQ0VEKG5hbWUpIFwKLSAgICBJTlRFUk5BTF9DQVRDSF9CRU5DSE1BUktfQURWQU5DRUQoSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoX19fX0NfQV9UX0NfSF9fX19CX0VfTl9DX0hfX19fKSwgbmFtZSkKLSNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORwotCiAvLyBJZiBDQVRDSF9DT05GSUdfUFJFRklYX0FMTCBpcyBub3QgZGVmaW5lZCB0aGVuIHRoZSBDQVRDSF8gcHJlZml4IGlzIG5vdCByZXF1aXJlZAogI2Vsc2UKIApAQCAtMTczNjYsMjYgKzE0Nzg2LDE0IEBACiAKICNpZm5kZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCiAjZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApCi0jZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRV9TSUcoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9TSUcoIF9fVkFfQVJHU19fICkKICNkZWZpbmUgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkKLSNkZWZpbmUgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9TSUcoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9TSUcoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQogI2RlZmluZSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoIF9fVkFfQVJHU19fICkKLSNkZWZpbmUgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfU0lHKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9TSUcoIF9fVkFfQVJHU19fICkKICNkZWZpbmUgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCi0jZGVmaW5lIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCi0jZGVmaW5lIFRFTVBMQVRFX0xJU1RfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9MSVNUX1RFU1RfQ0FTRShfX1ZBX0FSR1NfXykKLSNkZWZpbmUgVEVNUExBVEVfTElTVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX0xJU1RfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCiAjZWxzZQogI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApICkKLSNkZWZpbmUgVEVNUExBVEVfVEVTVF9DQVNFX1NJRyggLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfU0lHKCBfX1ZBX0FSR1NfXyApICkKICNkZWZpbmUgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKSApCi0jZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9TSUcoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKSApCiAjZGVmaW5lIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApICkKLSNkZWZpbmUgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfU0lHKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX1NJRyggX19WQV9BUkdTX18gKSApCiAjZGVmaW5lIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApICkKLSNkZWZpbmUgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKSApCi0jZGVmaW5lIFRFTVBMQVRFX0xJU1RfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX0xJU1RfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApICkKLSNkZWZpbmUgVEVNUExBVEVfTElTVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfTElTVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkgKQogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfUlVOVElNRV9TVEFUSUNfUkVRVUlSRSkKQEAgLTE3NDExLDEzICsxNDgxOSw2IEBACiAjZGVmaW5lIFRIRU4oIGRlc2MgKSAgICAgIElOVEVSTkFMX0NBVENIX0RZTkFNSUNfU0VDVElPTiggIiAgICAgVGhlbjogIiA8PCBkZXNjICkKICNkZWZpbmUgQU5EX1RIRU4oIGRlc2MgKSAgSU5URVJOQUxfQ0FUQ0hfRFlOQU1JQ19TRUNUSU9OKCAiICAgICAgQW5kOiAiIDw8IGRlc2MgKQogCi0jaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORykKLSNkZWZpbmUgQkVOQ0hNQVJLKC4uLikgXAotICAgIElOVEVSTkFMX0NBVENIX0JFTkNITUFSSyhJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRShfX19fQ19BX1RfQ19IX19fX0JfRV9OX0NfSF9fX18pLCBJTlRFUk5BTF9DQVRDSF9HRVRfMV9BUkcoX19WQV9BUkdTX18sLCksIElOVEVSTkFMX0NBVENIX0dFVF8yX0FSRyhfX1ZBX0FSR1NfXywsKSkKLSNkZWZpbmUgQkVOQ0hNQVJLX0FEVkFOQ0VEKG5hbWUpIFwKLSAgICBJTlRFUk5BTF9DQVRDSF9CRU5DSE1BUktfQURWQU5DRUQoSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoX19fX0NfQV9UX0NfSF9fX19CX0VfTl9DX0hfX19fKSwgbmFtZSkKLSNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRU5BQkxFX0JFTkNITUFSS0lORwotCiB1c2luZyBDYXRjaDo6RGV0YWlsOjpBcHByb3g7CiAKICNlbHNlIC8vIENBVENIX0NPTkZJR19ESVNBQkxFCkBAIC0xNzQ1NywxMCArMTQ4NTgsOSBAQAogI2RlZmluZSBDQVRDSF9SRVFVSVJFX1RIQVQoIGFyZywgbWF0Y2hlciApICh2b2lkKSgwKQogI2VuZGlmIC8vIENBVENIX0NPTkZJR19ESVNBQkxFX01BVENIRVJTCiAKLSNkZWZpbmUgQ0FUQ0hfSU5GTyggbXNnICkgICAgICAgICAgKHZvaWQpKDApCi0jZGVmaW5lIENBVENIX1VOU0NPUEVEX0lORk8oIG1zZyApICh2b2lkKSgwKQotI2RlZmluZSBDQVRDSF9XQVJOKCBtc2cgKSAgICAgICAgICAodm9pZCkoMCkKLSNkZWZpbmUgQ0FUQ0hfQ0FQVFVSRSggbXNnICkgICAgICAgKHZvaWQpKDApCisjZGVmaW5lIENBVENIX0lORk8oIG1zZyApICAgICh2b2lkKSgwKQorI2RlZmluZSBDQVRDSF9XQVJOKCBtc2cgKSAgICAodm9pZCkoMCkKKyNkZWZpbmUgQ0FUQ0hfQ0FQVFVSRSggbXNnICkgKHZvaWQpKDApCiAKICNkZWZpbmUgQ0FUQ0hfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URVNUQ0FTRV9OT19SRUdJU1RSQVRJT04oSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX1NfVF9fX18gKSkKICNkZWZpbmUgQ0FUQ0hfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URVNUQ0FTRV9OT19SRUdJU1RSQVRJT04oSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX1NfVF9fX18gKSkKQEAgLTE3NDc1LDIzICsxNDg3NSwxNSBAQAogI2RlZmluZSBDQVRDSF9BTk9OX1RFU1RfQ0FTRSgpIElOVEVSTkFMX0NBVENIX1RFU1RDQVNFX05PX1JFR0lTVFJBVElPTihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfU19UX19fXyApKQogCiAjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgotI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9OT19SRUdJU1RSQVRJT04oX19WQV9BUkdTX18pCi0jZGVmaW5lIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9TSUcoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9TSUdfTk9fUkVHSVNUUkFUSU9OKF9fVkFfQVJHU19fKQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OKGNsYXNzTmFtZSwgX19WQV9BUkdTX18pCi0jZGVmaW5lIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHX05PX1JFR0lTVFJBVElPTihjbGFzc05hbWUsIF9fVkFfQVJHU19fICkKKyNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApICkKKyNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX05PX1JFR0lTVFJBVElPTihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgY2xhc3NOYW1lICkKICNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoIC4uLiApIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9TSUcoIC4uLiApIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKQogI2RlZmluZSBDQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCi0jZGVmaW5lIENBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcoIGNsYXNzTmFtZSwgLi4uICkgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCiAjZWxzZQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTihfX1ZBX0FSR1NfXykgKQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0VfU0lHKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9TSUdfTk9fUkVHSVNUUkFUSU9OKF9fVkFfQVJHU19fKSApCi0jZGVmaW5lIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX05PX1JFR0lTVFJBVElPTihjbGFzc05hbWUsIF9fVkFfQVJHU19fICkgKQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX1NJRyggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHX05PX1JFR0lTVFJBVElPTihjbGFzc05hbWUsIF9fVkFfQVJHU19fICkgKQorI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSApICkKKyNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBjbGFzc05hbWUgKSApCiAjZGVmaW5lIENBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCAuLi4gKSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIF9fVkFfQVJHU19fICkKLSNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfU0lHKCAuLi4gKSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIF9fVkFfQVJHU19fICkKICNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQotI2RlZmluZSBDQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIC4uLiApIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQogI2VuZGlmCiAKIC8vICJCREQtc3R5bGUiIGNvbnZlbmllbmNlIHdyYXBwZXJzCkBAIC0xNzU0Miw3ICsxNDkzNCw2IEBACiAjZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX0RJU0FCTEVfTUFUQ0hFUlMKIAogI2RlZmluZSBJTkZPKCBtc2cgKSAodm9pZCkoMCkKLSNkZWZpbmUgVU5TQ09QRURfSU5GTyggbXNnICkgKHZvaWQpKDApCiAjZGVmaW5lIFdBUk4oIG1zZyApICh2b2lkKSgwKQogI2RlZmluZSBDQVBUVVJFKCBtc2cgKSAodm9pZCkoMCkKIApAQCAtMTc1NTgsMjMgKzE0OTQ5LDE1IEBACiAjZGVmaW5lIEFOT05fVEVTVF9DQVNFKCkgSU5URVJOQUxfQ0FUQ0hfVEVTVENBU0VfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9TX1RfX19fICkpCiAKICNpZm5kZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCi0jZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTihfX1ZBX0FSR1NfXykKLSNkZWZpbmUgVEVNUExBVEVfVEVTVF9DQVNFX1NJRyggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX1NJR19OT19SRUdJU1RSQVRJT04oX19WQV9BUkdTX18pCi0jZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9OT19SRUdJU1RSQVRJT04oY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9TSUcoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9TSUdfTk9fUkVHSVNUUkFUSU9OKGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQorI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9OT19SRUdJU1RSQVRJT04oSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICkgKQorI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBjbGFzc05hbWUgKQogI2RlZmluZSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRSggLi4uICkgVEVNUExBVEVfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApCi0jZGVmaW5lIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX1NJRyggLi4uICkgVEVNUExBVEVfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkKLSNkZWZpbmUgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EX1NJRyggY2xhc3NOYW1lLCAuLi4gKSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkKICNlbHNlCi0jZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTk9fUkVHSVNUUkFUSU9OKF9fVkFfQVJHU19fKSApCi0jZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRV9TSUcoIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX1NJR19OT19SRUdJU1RSQVRJT04oX19WQV9BUkdTX18pICkKLSNkZWZpbmUgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OKGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKSApCi0jZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfU0lHKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9TSUdfTk9fUkVHSVNUUkFUSU9OKGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKSApCisjZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApICkgKQorI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9OT19SRUdJU1RSQVRJT04oSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICksIGNsYXNzTmFtZSApICkKICNkZWZpbmUgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoIC4uLiApIFRFTVBMQVRFX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKQotI2RlZmluZSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9TSUcoIC4uLiApIFRFTVBMQVRFX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKQogI2RlZmluZSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCi0jZGVmaW5lIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF9TSUcoIGNsYXNzTmFtZSwgLi4uICkgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCiAjZW5kaWYKIAogI2RlZmluZSBTVEFUSUNfUkVRVUlSRSggLi4uICkgICAgICAgKHZvaWQpKDApCmRpZmYgLS1naXQgYS9zaW5nbGVfaW5jbHVkZS9jYXRjaDIvY2F0Y2hfcmVwb3J0ZXJfc29uYXJxdWJlLmhwcCBiL3NpbmdsZV9pbmNsdWRlL2NhdGNoMi9jYXRjaF9yZXBvcnRlcl9zb25hcnF1YmUuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjdkOTI5Li4wMDAwMDAwCi0tLSBhL3NpbmdsZV9pbmNsdWRlL2NhdGNoMi9jYXRjaF9yZXBvcnRlcl9zb25hcnF1YmUuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8qCi0gKiAgQ3JlYXRlZCBieSBEYW5pZWwgR2FyY2lhIG9uIDIwMTgtMTItMDQuCi0gKiAgQ29weXJpZ2h0IFNvY2lhbCBQb2ludCBTTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICovCi0jaWZuZGVmIENBVENIX1JFUE9SVEVSX1NPTkFSUVVCRV9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQ0FUQ0hfUkVQT1JURVJfU09OQVJRVUJFX0hQUF9JTkNMVURFRAotCi0KLS8vIERvbid0ICNpbmNsdWRlIGFueSBDYXRjaCBoZWFkZXJzIGhlcmUgLSB3ZSBjYW4gYXNzdW1lIHRoZXkgYXJlIGFscmVhZHkKLS8vIGluY2x1ZGVkIGJlZm9yZSB0aGlzIGhlYWRlci4KLS8vIFRoaXMgaXMgbm90IGdvb2QgcHJhY3RpY2UgaW4gZ2VuZXJhbCBidXQgaXMgbmVjZXNzYXJ5IGluIHRoaXMgY2FzZSBzbyB0aGlzCi0vLyBmaWxlIGNhbiBiZSBkaXN0cmlidXRlZCBhcyBhIHNpbmdsZSBoZWFkZXIgdGhhdCB3b3JrcyB3aXRoIHRoZSBtYWluCi0vLyBDYXRjaCBzaW5nbGUgaGVhZGVyLgotCi0jaW5jbHVkZSA8bWFwPgotCi1uYW1lc3BhY2UgQ2F0Y2ggewotCi0gICAgc3RydWN0IFNvbmFyUXViZVJlcG9ydGVyIDogQ3VtdWxhdGl2ZVJlcG9ydGVyQmFzZTxTb25hclF1YmVSZXBvcnRlcj4gewotCi0gICAgICAgIFNvbmFyUXViZVJlcG9ydGVyKFJlcG9ydGVyQ29uZmlnIGNvbnN0JiBjb25maWcpCi0gICAgICAgIDogQ3VtdWxhdGl2ZVJlcG9ydGVyQmFzZShjb25maWcpCi0gICAgICAgICwgeG1sKGNvbmZpZy5zdHJlYW0oKSkgewotICAgICAgICAgICAgbV9yZXBvcnRlclByZWZzLnNob3VsZFJlZGlyZWN0U3RkT3V0ID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fcmVwb3J0ZXJQcmVmcy5zaG91bGRSZXBvcnRBbGxBc3NlcnRpb25zID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIH5Tb25hclF1YmVSZXBvcnRlcigpIG92ZXJyaWRlOwotCi0gICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiAiUmVwb3J0cyB0ZXN0IHJlc3VsdHMgaW4gdGhlIEdlbmVyaWMgVGVzdCBEYXRhIFNvbmFyUXViZSBYTUwgZm9ybWF0IjsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBzdGQ6OnNldDxWZXJib3NpdHk+IGdldFN1cHBvcnRlZFZlcmJvc2l0aWVzKCkgewotICAgICAgICAgICAgcmV0dXJuIHsgVmVyYm9zaXR5OjpOb3JtYWwgfTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgbm9NYXRjaGluZ1Rlc3RDYXNlcyhzdGQ6OnN0cmluZyBjb25zdCYgLypzcGVjKi8pIG92ZXJyaWRlIHt9Ci0KLSAgICAgICAgdm9pZCB0ZXN0UnVuU3RhcnRpbmcoVGVzdFJ1bkluZm8gY29uc3QmIHRlc3RSdW5JbmZvKSBvdmVycmlkZSB7Ci0gICAgICAgICAgICBDdW11bGF0aXZlUmVwb3J0ZXJCYXNlOjp0ZXN0UnVuU3RhcnRpbmcodGVzdFJ1bkluZm8pOwotICAgICAgICAgICAgeG1sLnN0YXJ0RWxlbWVudCgidGVzdEV4ZWN1dGlvbnMiKTsKLSAgICAgICAgICAgIHhtbC53cml0ZUF0dHJpYnV0ZSgidmVyc2lvbiIsICIxIik7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHRlc3RHcm91cEVuZGVkKFRlc3RHcm91cFN0YXRzIGNvbnN0JiB0ZXN0R3JvdXBTdGF0cykgb3ZlcnJpZGUgewotICAgICAgICAgICAgQ3VtdWxhdGl2ZVJlcG9ydGVyQmFzZTo6dGVzdEdyb3VwRW5kZWQodGVzdEdyb3VwU3RhdHMpOwotICAgICAgICAgICAgd3JpdGVHcm91cCgqbV90ZXN0R3JvdXBzLmJhY2soKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHRlc3RSdW5FbmRlZEN1bXVsYXRpdmUoKSBvdmVycmlkZSB7Ci0gICAgICAgICAgICB4bWwuZW5kRWxlbWVudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB3cml0ZUdyb3VwKFRlc3RHcm91cE5vZGUgY29uc3QmIGdyb3VwTm9kZSkgewotICAgICAgICAgICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIFRlc3RHcm91cE5vZGU6OkNoaWxkTm9kZXM+IHRlc3RzUGVyRmlsZTsKLSAgICAgICAgICAgIGZvcihhdXRvIGNvbnN0JiBjaGlsZCA6IGdyb3VwTm9kZS5jaGlsZHJlbikKLSAgICAgICAgICAgICAgICB0ZXN0c1BlckZpbGVbY2hpbGQtPnZhbHVlLnRlc3RJbmZvLmxpbmVJbmZvLmZpbGVdLnB1c2hfYmFjayhjaGlsZCk7Ci0KLSAgICAgICAgICAgIGZvcihhdXRvIGNvbnN0JiBrdiA6IHRlc3RzUGVyRmlsZSkKLSAgICAgICAgICAgICAgICB3cml0ZVRlc3RGaWxlKGt2LmZpcnN0LmNfc3RyKCksIGt2LnNlY29uZCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHdyaXRlVGVzdEZpbGUoY29uc3QgY2hhciogZmlsZW5hbWUsIFRlc3RHcm91cE5vZGU6OkNoaWxkTm9kZXMgY29uc3QmIHRlc3RDYXNlTm9kZXMpIHsKLSAgICAgICAgICAgIFhtbFdyaXRlcjo6U2NvcGVkRWxlbWVudCBlID0geG1sLnNjb3BlZEVsZW1lbnQoImZpbGUiKTsKLSAgICAgICAgICAgIHhtbC53cml0ZUF0dHJpYnV0ZSgicGF0aCIsIGZpbGVuYW1lKTsKLQotICAgICAgICAgICAgZm9yKGF1dG8gY29uc3QmIGNoaWxkIDogdGVzdENhc2VOb2RlcykKLSAgICAgICAgICAgICAgICB3cml0ZVRlc3RDYXNlKCpjaGlsZCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHdyaXRlVGVzdENhc2UoVGVzdENhc2VOb2RlIGNvbnN0JiB0ZXN0Q2FzZU5vZGUpIHsKLSAgICAgICAgICAgIC8vIEFsbCB0ZXN0IGNhc2VzIGhhdmUgZXhhY3RseSBvbmUgc2VjdGlvbiAtIHdoaWNoIHJlcHJlc2VudHMgdGhlCi0gICAgICAgICAgICAvLyB0ZXN0IGNhc2UgaXRzZWxmLiBUaGF0IHNlY3Rpb24gbWF5IGhhdmUgMC1uIG5lc3RlZCBzZWN0aW9ucwotICAgICAgICAgICAgYXNzZXJ0KHRlc3RDYXNlTm9kZS5jaGlsZHJlbi5zaXplKCkgPT0gMSk7Ci0gICAgICAgICAgICBTZWN0aW9uTm9kZSBjb25zdCYgcm9vdFNlY3Rpb24gPSAqdGVzdENhc2VOb2RlLmNoaWxkcmVuLmZyb250KCk7Ci0gICAgICAgICAgICB3cml0ZVNlY3Rpb24oIiIsIHJvb3RTZWN0aW9uLCB0ZXN0Q2FzZU5vZGUudmFsdWUudGVzdEluZm8ub2tUb0ZhaWwoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHdyaXRlU2VjdGlvbihzdGQ6OnN0cmluZyBjb25zdCYgcm9vdE5hbWUsIFNlY3Rpb25Ob2RlIGNvbnN0JiBzZWN0aW9uTm9kZSwgYm9vbCBva1RvRmFpbCkgewotICAgICAgICAgICAgc3RkOjpzdHJpbmcgbmFtZSA9IHRyaW0oc2VjdGlvbk5vZGUuc3RhdHMuc2VjdGlvbkluZm8ubmFtZSk7Ci0gICAgICAgICAgICBpZighcm9vdE5hbWUuZW1wdHkoKSkKLSAgICAgICAgICAgICAgICBuYW1lID0gcm9vdE5hbWUgKyAnLycgKyBuYW1lOwotCi0gICAgICAgICAgICBpZighc2VjdGlvbk5vZGUuYXNzZXJ0aW9ucy5lbXB0eSgpIHx8ICFzZWN0aW9uTm9kZS5zdGRPdXQuZW1wdHkoKSB8fCAhc2VjdGlvbk5vZGUuc3RkRXJyLmVtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBYbWxXcml0ZXI6OlNjb3BlZEVsZW1lbnQgZSA9IHhtbC5zY29wZWRFbGVtZW50KCJ0ZXN0Q2FzZSIpOwotICAgICAgICAgICAgICAgIHhtbC53cml0ZUF0dHJpYnV0ZSgibmFtZSIsIG5hbWUpOwotICAgICAgICAgICAgICAgIHhtbC53cml0ZUF0dHJpYnV0ZSgiZHVyYXRpb24iLCBzdGF0aWNfY2FzdDxsb25nPihzZWN0aW9uTm9kZS5zdGF0cy5kdXJhdGlvbkluU2Vjb25kcyAqIDEwMDApKTsKLQotICAgICAgICAgICAgICAgIHdyaXRlQXNzZXJ0aW9ucyhzZWN0aW9uTm9kZSwgb2tUb0ZhaWwpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IoYXV0byBjb25zdCYgY2hpbGROb2RlIDogc2VjdGlvbk5vZGUuY2hpbGRTZWN0aW9ucykKLSAgICAgICAgICAgICAgICB3cml0ZVNlY3Rpb24obmFtZSwgKmNoaWxkTm9kZSwgb2tUb0ZhaWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB3cml0ZUFzc2VydGlvbnMoU2VjdGlvbk5vZGUgY29uc3QmIHNlY3Rpb25Ob2RlLCBib29sIG9rVG9GYWlsKSB7Ci0gICAgICAgICAgICBmb3IoYXV0byBjb25zdCYgYXNzZXJ0aW9uIDogc2VjdGlvbk5vZGUuYXNzZXJ0aW9ucykKLSAgICAgICAgICAgICAgICB3cml0ZUFzc2VydGlvbiggYXNzZXJ0aW9uLCBva1RvRmFpbCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHdyaXRlQXNzZXJ0aW9uKEFzc2VydGlvblN0YXRzIGNvbnN0JiBzdGF0cywgYm9vbCBva1RvRmFpbCkgewotICAgICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0IGNvbnN0JiByZXN1bHQgPSBzdGF0cy5hc3NlcnRpb25SZXN1bHQ7Ci0gICAgICAgICAgICBpZighcmVzdWx0LmlzT2soKSkgewotICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGVsZW1lbnROYW1lOwotICAgICAgICAgICAgICAgIGlmKG9rVG9GYWlsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lID0gInNraXBwZWQiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHJlc3VsdC5nZXRSZXN1bHRUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0V2FzOjpUaHJld0V4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0V2FzOjpGYXRhbEVycm9yQ29uZGl0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lID0gImVycm9yIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0V2FzOjpFeHBsaWNpdEZhaWx1cmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudE5hbWUgPSAiZmFpbHVyZSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFdhczo6RXhwcmVzc2lvbkZhaWxlZDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50TmFtZSA9ICJmYWlsdXJlIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0V2FzOjpEaWRudFRocm93RXhjZXB0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lID0gImZhaWx1cmUiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIHNlZSB0aGVzZSBoZXJlOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRXYXM6OkluZm86Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFdhczo6V2FybmluZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0V2FzOjpPazoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0V2FzOjpVbmtub3duOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRXYXM6OkZhaWx1cmVCaXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFdhczo6RXhjZXB0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lID0gImludGVybmFsRXJyb3IiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgWG1sV3JpdGVyOjpTY29wZWRFbGVtZW50IGUgPSB4bWwuc2NvcGVkRWxlbWVudChlbGVtZW50TmFtZSk7Ci0KLSAgICAgICAgICAgICAgICBSZXVzYWJsZVN0cmluZ1N0cmVhbSBtZXNzYWdlUnNzOwotICAgICAgICAgICAgICAgIG1lc3NhZ2VSc3MgPDwgcmVzdWx0LmdldFRlc3RNYWNyb05hbWUoKSA8PCAiKCIgPDwgcmVzdWx0LmdldEV4cHJlc3Npb24oKSA8PCAiKSI7Ci0gICAgICAgICAgICAgICAgeG1sLndyaXRlQXR0cmlidXRlKCJtZXNzYWdlIiwgbWVzc2FnZVJzcy5zdHIoKSk7Ci0KLSAgICAgICAgICAgICAgICBSZXVzYWJsZVN0cmluZ1N0cmVhbSB0ZXh0UnNzOwotICAgICAgICAgICAgICAgIGlmIChzdGF0cy50b3RhbHMuYXNzZXJ0aW9ucy50b3RhbCgpID4gMCkgewotICAgICAgICAgICAgICAgICAgICB0ZXh0UnNzIDw8ICJGQUlMRUQ6XG4iOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4cHJlc3Npb24oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJzcyA8PCAiXHQiIDw8IHJlc3VsdC5nZXRFeHByZXNzaW9uSW5NYWNybygpIDw8ICJcbiI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeHBhbmRlZEV4cHJlc3Npb24oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJzcyA8PCAid2l0aCBleHBhbnNpb246XG5cdCIgPDwgcmVzdWx0LmdldEV4cGFuZGVkRXhwcmVzc2lvbigpIDw8ICJcbiI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZighcmVzdWx0LmdldE1lc3NhZ2UoKS5lbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICB0ZXh0UnNzIDw8IHJlc3VsdC5nZXRNZXNzYWdlKCkgPDwgIlxuIjsKLQotICAgICAgICAgICAgICAgIGZvcihhdXRvIGNvbnN0JiBtc2cgOiBzdGF0cy5pbmZvTWVzc2FnZXMpCi0gICAgICAgICAgICAgICAgICAgIGlmKG1zZy50eXBlID09IFJlc3VsdFdhczo6SW5mbykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSc3MgPDwgbXNnLm1lc3NhZ2UgPDwgIlxuIjsKLQotICAgICAgICAgICAgICAgIHRleHRSc3MgPDwgImF0ICIgPDwgcmVzdWx0LmdldFNvdXJjZUluZm8oKTsKLSAgICAgICAgICAgICAgICB4bWwud3JpdGVUZXh0KHRleHRSc3Muc3RyKCksIFhtbEZvcm1hdHRpbmc6Ok5ld2xpbmUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBYbWxXcml0ZXIgeG1sOwotICAgIH07Ci0KLSNpZmRlZiBDQVRDSF9JTVBMCi0gICAgU29uYXJRdWJlUmVwb3J0ZXI6On5Tb25hclF1YmVSZXBvcnRlcigpIHt9Ci0jZW5kaWYKLQotICAgIENBVENIX1JFR0lTVEVSX1JFUE9SVEVSKCAic29uYXJxdWJlIiwgU29uYXJRdWJlUmVwb3J0ZXIgKQotCi19IC8vIGVuZCBuYW1lc3BhY2UgQ2F0Y2gKLQotI2VuZGlmIC8vIENBVENIX1JFUE9SVEVSX1NPTkFSUVVCRV9IUFBfSU5DTFVERUQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zaW5nbGVfaW5jbHVkZS9jYXRjaDIvY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwIGIvc2luZ2xlX2luY2x1ZGUvY2F0Y2gyL2NhdGNoX3JlcG9ydGVyX3RlYW1jaXR5LmhwcAppbmRleCA0N2I3ZTRhLi5lY2EyODg1IDEwMDY0NAotLS0gYS9zaW5nbGVfaW5jbHVkZS9jYXRjaDIvY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwCisrKyBiL3NpbmdsZV9pbmNsdWRlL2NhdGNoMi9jYXRjaF9yZXBvcnRlcl90ZWFtY2l0eS5ocHAKQEAgLTE4Myw3ICsxODMsOCBAQAogCiAgICAgICAgICAgICBTb3VyY2VMaW5lSW5mbyBsaW5lSW5mbyA9IG1fc2VjdGlvblN0YWNrLmZyb250KCkubGluZUluZm87CiAKLSAgICAgICAgICAgIG9zIDw8IGxpbmVJbmZvIDw8ICJcbiI7CisgICAgICAgICAgICBpZiggIWxpbmVJbmZvLmVtcHR5KCkgKQorICAgICAgICAgICAgICAgIG9zIDw8IGxpbmVJbmZvIDw8ICJcbiI7CiAgICAgICAgICAgICBvcyA8PCBnZXRMaW5lT2ZDaGFyczwnLic+KCkgPDwgIlxuXG4iOwogICAgICAgICB9CiAK