Repository: code-ready/crc
Pull request #3342 (2022-09-12 11:41:45)

Update openshift version to 4.11.3 (stable channel)

openshift-ci[bot]: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by:
**Once this PR has been reviewed and has the lgtm label**, please ask for approval from praveenkumar by writing `/assign @praveenkumar` in a comment. For more information see:[The Kubernetes Code Review Process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process).

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=code-ready%2Fcrc).

<details open>
Needs approval from an approver in each of these files:

- **[OWNERS](https://github.com/code-ready/crc/blob/main/OWNERS)**

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["praveenkumar"]} -->

Patch:
diff --git a/Makefile b/Makefile
index e5a7b0438..9d1a47bda 100644
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@ all: install
 
 SHELL := /bin/bash
 
-OPENSHIFT_VERSION ?= 4.11.1
+OPENSHIFT_VERSION ?= 4.11.3
 PODMAN_VERSION ?= 4.1.1
 OKD_VERSION ?= 4.11.0-0.okd-2022-08-20-022919
 BUNDLE_EXTENSION = crcbundle
@@ -162,9 +162,10 @@ clean: clean_docs clean_macos_package clean_windows_msi
 
 .PHONY: build_e2e
 build_e2e: $(SOURCES)
-	GOOS=linux   go test ./test/e2e/ --ldflags="$(VERSION_VARIABLES)" -c -o $(BUILD_DIR)/linux-amd64/e2e.test
-	GOOS=windows go test ./test/e2e/ --ldflags="$(VERSION_VARIABLES)" -c -o $(BUILD_DIR)/windows-amd64/e2e.test.exe
-	GOOS=darwin  go test ./test/e2e/ --ldflags="$(VERSION_VARIABLES)" -c -o $(BUILD_DIR)/macos-amd64/e2e.test
+	GOARCH=amd64 GOOS=linux   go test ./test/e2e/ --ldflags="$(VERSION_VARIABLES)" -c -o $(BUILD_DIR)/linux-amd64/e2e.test
+	GOARCH=amd64 GOOS=windows go test ./test/e2e/ --ldflags="$(VERSION_VARIABLES)" -c -o $(BUILD_DIR)/windows-amd64/e2e.test.exe
+	GOARCH=amd64 GOOS=darwin  go test ./test/e2e/ --ldflags="$(VERSION_VARIABLES)" -c -o $(BUILD_DIR)/macos-amd64/e2e.test
+	GOARCH=arm64 GOOS=darwin  go test ./test/e2e/ --ldflags="$(VERSION_VARIABLES)" -c -o $(BUILD_DIR)/macos-arm64/e2e.test
 
 .PHONY: build_integration
 build_integration: $(SOURCES)
diff --git a/cmd/crc/cmd/setup.go b/cmd/crc/cmd/setup.go
index bef8259af..24ca86657 100644
--- a/cmd/crc/cmd/setup.go
+++ b/cmd/crc/cmd/setup.go
@@ -58,7 +58,7 @@ func runSetup(arguments []string) error {
 	}
 
 	if !config.Get(crcConfig.Bundle).IsDefault {
-		if err := validation.ValidatePath(config.Get(crcConfig.Bundle).AsString()); err != nil {
+		if err := validation.ValidateBundlePath(config.Get(crcConfig.Bundle).AsString(), crcConfig.GetPreset(config)); err != nil {
 			return err
 		}
 	}
diff --git a/cmd/crc/cmd/start.go b/cmd/crc/cmd/start.go
index 012477bf8..5a5e01982 100644
--- a/cmd/crc/cmd/start.go
+++ b/cmd/crc/cmd/start.go
@@ -7,6 +7,7 @@ import (
 	"io"
 	"os"
 	"runtime"
+	"strings"
 	"text/template"
 
 	"github.com/Masterminds/semver/v3"
@@ -75,6 +76,8 @@ func runStart(ctx context.Context) (*types.StartResult, error) {
 		KubeAdminPassword: config.Get(crcConfig.KubeAdminPassword).AsString(),
 		Preset:            crcConfig.GetPreset(config),
 		EnableSharedDirs:  crcConfig.ShouldEnableSharedDirs(config),
+		IngressHTTPPort:   config.Get(crcConfig.IngressHTTPPort).AsUInt(),
+		IngressHTTPSPort:  config.Get(crcConfig.IngressHTTPSPort).AsUInt(),
 	}
 
 	client := newMachine()
@@ -249,10 +252,11 @@ If you find an issue, please report it at https://github.com/openshift/okd
 )
 
 type templateVariables struct {
-	ClusterConfig     *clusterConfig
-	EvalCommandLine   string
-	CommandLinePrefix string
-	PodmanRemote      string
+	ClusterConfig       *clusterConfig
+	EvalCommandLine     string
+	CommandLinePrefix   string
+	PodmanRemote        string
+	FallbackPortWarning string
 }
 
 func writeTemplatedMessage(writer io.Writer, s *startResult) error {
@@ -268,6 +272,10 @@ func writeOpenShiftTemplatedMessage(writer io.Writer, s *startResult) error {
 	if s.ClusterConfig.ClusterType == preset.OKD {
 		tmpl = fmt.Sprintf("%s\n\n%s", startTemplateForOpenshift, startTemplateForOKD)
 	}
+	fallbackPortWarning := portFallbackWarning()
+	if fallbackPortWarning != "" {
+		tmpl = fmt.Sprintf("%s\n%s", tmpl, fallbackPortWarning)
+	}
 	parsed, err := template.New("template").Parse(tmpl)
 	if err != nil {
 		return err
@@ -321,3 +329,26 @@ func checkDaemonStarted() error {
 	}
 	return daemonclient.CheckIfOlderVersion(v)
 }
+
+func portFallbackWarning() string {
+	var fallbackPortWarning string
+	httpScheme := "http"
+	httpsScheme := "https"
+	fallbackPortWarningTmpl := `
+Warning: Port %d is used for OpenShift %s routes instead of the default
+You have to add this port to %s URLs when accessing OpenShift application,
+such as %s://myapp.apps-crc.testing:%d
+`
+	ingressHTTPPort := config.Get(crcConfig.IngressHTTPPort).AsUInt()
+	ingressHTTPSPort := config.Get(crcConfig.IngressHTTPSPort).AsUInt()
+
+	if ingressHTTPSPort != constants.OpenShiftIngressHTTPSPort {
+		fallbackPortWarning += fmt.Sprintf(fallbackPortWarningTmpl,
+			ingressHTTPSPort, strings.ToUpper(httpsScheme), strings.ToUpper(httpsScheme), httpsScheme, ingressHTTPSPort)
+	}
+	if ingressHTTPPort != constants.OpenShiftIngressHTTPPort {
+		fallbackPortWarning += fmt.Sprintf(fallbackPortWarningTmpl,
+			ingressHTTPPort, strings.ToUpper(httpScheme), strings.ToUpper(httpScheme), httpScheme, ingressHTTPPort)
+	}
+	return fallbackPortWarning
+}
diff --git a/go.mod b/go.mod
index 4b1fa65f5..dd44b2b4e 100644
--- a/go.mod
+++ b/go.mod
@@ -7,7 +7,6 @@ require (
 	github.com/Masterminds/semver/v3 v3.1.1
 	github.com/Microsoft/go-winio v0.5.2
 	github.com/ProtonMail/go-crypto v0.0.0-20220623141421-5afb4c282135
-	github.com/RedHatQE/gowinx v0.0.3
 	github.com/YourFin/binappend v0.0.0-20181105185800-0add4bf0b9ad
 	github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d
 	github.com/cavaliergopher/grab/v3 v3.0.1
@@ -137,7 +136,6 @@ require (
 	github.com/opencontainers/runc v1.1.3 // indirect
 	github.com/opencontainers/runtime-spec v1.0.3-0.20220706171101-8d0d6d41d096 // indirect
 	github.com/openshift/library-go v0.0.0-20220211142501-9f57c596fd46 // indirect
-	github.com/openstandia/w32uiautomation v0.0.0-20190416091226-c987b5b65d6b // indirect
 	github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
 	github.com/pelletier/go-toml v1.9.4 // indirect
 	github.com/pelletier/go-toml/v2 v2.0.0-beta.8 // indirect
diff --git a/go.sum b/go.sum
index af99a7b6e..c0d5f3731 100644
--- a/go.sum
+++ b/go.sum
@@ -133,8 +133,6 @@ github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdko
 github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
 github.com/RangelReale/osincli v0.0.0-20160924135400-fababb0555f2 h1:x8Brv0YNEe6jY3V/hQglIG2nd8g5E2Zj5ubGKkPQctQ=
 github.com/RangelReale/osincli v0.0.0-20160924135400-fababb0555f2/go.mod h1:XyjUkMA8GN+tOOPXvnbi3XuRxWFvTJntqvTFnjmhzbk=
-github.com/RedHatQE/gowinx v0.0.3 h1:+BiJGqw4EQY7WVnj1PWBWnarcgQTWE3uP9oLHu3/sI8=
-github.com/RedHatQE/gowinx v0.0.3/go.mod h1:HOvEFhbJSXfbAOzlvr8EBG9vufpCcYP6A+PA+L97vtI=
 github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ=
 github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA=
 github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow=
@@ -521,7 +519,6 @@ github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbV
 github.com/go-logr/logr v1.2.2 h1:ahHml/yUpnlb96Rp8HCvtYVPY8ZYpxq3g7UYchIYwbs=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro=
-github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
 github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
 github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
 github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI=
@@ -1088,8 +1085,6 @@ github.com/openshift/library-go v0.0.0-20220211142501-9f57c596fd46 h1:3v3eX7FDmK
 github.com/openshift/library-go v0.0.0-20220211142501-9f57c596fd46/go.mod h1:6AmNM4N4nHftckybV/U7bQW+5AvK5TW81ndSI6KEidw=
 github.com/openshift/oc v0.0.0-alpha.0.0.20220519063019-878f5a8fe0d0 h1:pSLpV3FVK0qK34YCDEM60J9/shAmchs4LDjkwZF8r7U=
 github.com/openshift/oc v0.0.0-alpha.0.0.20220519063019-878f5a8fe0d0/go.mod h1:S0MZQ9f+bDijKHimg82a0locaSRbvDtZ8+j6uAERiQc=
-github.com/openstandia/w32uiautomation v0.0.0-20190416091226-c987b5b65d6b h1:c6u4dBKbsr+SIU7G+edjUdAwXRHrU774em+YpBc6x5o=
-github.com/openstandia/w32uiautomation v0.0.0-20190416091226-c987b5b65d6b/go.mod h1:3eWcciZpLm6NimB0Wv65kt4IuLDidcBE3z5YJj03MbA=
 github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
 github.com/ostreedev/ostree-go v0.0.0-20190702140239-759a8c1ac913/go.mod h1:J6OG6YJVEWopen4avK3VNQSnALmmjvniMmni/YFYAwc=
 github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
@@ -1260,7 +1255,6 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An
 github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
 github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
 github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
-github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
 github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns=
 github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM=
 github.com/spf13/viper v1.11.0 h1:7OX/1FS6n7jHD1zGrZTM7WtY13ZELRyosK4k93oPr44=
@@ -2188,7 +2182,6 @@ k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl
 k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
 k8s.io/utils v0.0.0-20200229041039-0a110f9eb7ab/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
 k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
-k8s.io/utils v0.0.0-20210527160623-6fdb442a123b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 k8s.io/utils v0.0.0-20211208161948-7d6a63dca704 h1:ZKMMxTvduyf5WUtREOqg5LiXaN1KO/+0oOQPRFrClpo=
diff --git a/pkg/crc/api/handlers.go b/pkg/crc/api/handlers.go
index c715f9550..97a91e3ba 100644
--- a/pkg/crc/api/handlers.go
+++ b/pkg/crc/api/handlers.go
@@ -116,6 +116,8 @@ func getStartConfig(cfg crcConfig.Storage, args client.StartConfig) types.StartC
 		NameServer:        cfg.Get(crcConfig.NameServer).AsString(),
 		PullSecret:        cluster.NewNonInteractivePullSecretLoader(cfg, args.PullSecretFile),
 		KubeAdminPassword: cfg.Get(crcConfig.KubeAdminPassword).AsString(),
+		IngressHTTPPort:   cfg.Get(crcConfig.IngressHTTPPort).AsUInt(),
+		IngressHTTPSPort:  cfg.Get(crcConfig.IngressHTTPSPort).AsUInt(),
 		Preset:            crcConfig.GetPreset(cfg),
 		EnableSharedDirs:  crcConfig.ShouldEnableSharedDirs(cfg),
 	}
diff --git a/pkg/crc/config/callbacks.go b/pkg/crc/config/callbacks.go
index 7ea7b8134..a95a38152 100644
--- a/pkg/crc/config/callbacks.go
+++ b/pkg/crc/config/callbacks.go
@@ -32,3 +32,16 @@ func RequiresCRCSetup(key string, _ interface{}) string {
 	return fmt.Sprintf("Changes to configuration property '%s' are only applied during 'crc setup'.\n"+
 		"Please run 'crc setup' for this configuration to take effect.", key)
 }
+
+func RequiresHTTPPortChangeWarning(key string, value interface{}) string {
+	return fmt.Sprintf("Changes to configuration property '%s' will break OpenShift HTTP routes.\n"+
+		"In order to access OpenShift applications through HTTP URLs "+
+		"the %d port must be manually specified, such as http://myapp.apps-crc.testing:%d", key, value, value)
+}
+
+func RequiresHTTPSPortChangeWarning(key string, value interface{}) string {
+	return fmt.Sprintf("Changes to configuration property '%s' will break OpenShift HTTPS routes.\n"+
+		"In order to access OpenShift applications through HTTPS URLs "+
+		"the %d port must be manually specified, such as https://myapp.apps-crc.testing:%d\n"+
+		"After this change, the OpenShift console will be non-functional because of OpenShift limitations", key, value, value)
+}
diff --git a/pkg/crc/config/settings.go b/pkg/crc/config/settings.go
index 7a7a05365..352288a54 100644
--- a/pkg/crc/config/settings.go
+++ b/pkg/crc/config/settings.go
@@ -31,6 +31,8 @@ const (
 	KubeAdminPassword       = "kubeadmin-password"
 	Preset                  = "preset"
 	EnableSharedDirs        = "enable-shared-dirs"
+	IngressHTTPPort         = "ingress-http-port"
+	IngressHTTPSPort        = "ingress-https-port"
 )
 
 func RegisterSettings(cfg *Config) {
@@ -107,6 +109,10 @@ func RegisterSettings(cfg *Config) {
 
 	cfg.AddSetting(KubeAdminPassword, "", ValidateString, SuccessfullyApplied,
 		"User defined kubeadmin password")
+	cfg.AddSetting(IngressHTTPPort, constants.OpenShiftIngressHTTPPort, ValidatePort, RequiresHTTPPortChangeWarning,
+		fmt.Sprintf("HTTP port to use for OpenShift ingress/routes on the host (1024-65535, default: %d)", constants.OpenShiftIngressHTTPPort))
+	cfg.AddSetting(IngressHTTPSPort, constants.OpenShiftIngressHTTPSPort, ValidatePort, RequiresHTTPSPortChangeWarning,
+		fmt.Sprintf("HTTPS port to use for OpenShift ingress/routes on the host (1024-65535, default: %d)", constants.OpenShiftIngressHTTPSPort))
 }
 
 func defaultCPUs(cfg Storage) int {
diff --git a/pkg/crc/config/types.go b/pkg/crc/config/types.go
index 174fc7670..8b0b36a88 100644
--- a/pkg/crc/config/types.go
+++ b/pkg/crc/config/types.go
@@ -39,6 +39,10 @@ func (v SettingValue) AsInt() int {
 	return cast.ToInt(v.Value)
 }
 
+func (v SettingValue) AsUInt() uint {
+	return cast.ToUint(v.Value)
+}
+
 // validationFnType takes the key, value as args and checks if valid
 type ValidationFnType func(interface{}) (bool, string)
 type SetFn func(string, interface{}) string
diff --git a/pkg/crc/config/validations.go b/pkg/crc/config/validations.go
index 93e4e1610..09d1d8028 100644
--- a/pkg/crc/config/validations.go
+++ b/pkg/crc/config/validations.go
@@ -127,3 +127,14 @@ func validatePreset(value interface{}) (bool, string) {
 	}
 	return true, ""
 }
+
+func ValidatePort(value interface{}) (bool, string) {
+	port, err := cast.ToUintE(value)
+	if err != nil {
+		return false, "Requires integer value in range of 1024-65535"
+	}
+	if port < 1024 || port > 65535 {
+		return false, fmt.Sprintf("Provided %d but requires value in range of 1024-65535", port)
+	}
+	return true, ""
+}
diff --git a/pkg/crc/constants/constants.go b/pkg/crc/constants/constants.go
index 55ac47d46..e348d597f 100644
--- a/pkg/crc/constants/constants.go
+++ b/pkg/crc/constants/constants.go
@@ -42,6 +42,9 @@ const (
 	ClusterDomain = ".crc.testing"
 	AppsDomain    = ".apps-crc.testing"
 
+	OpenShiftIngressHTTPPort  = 80
+	OpenShiftIngressHTTPSPort = 443
+
 	// This public key is owned by the CRC team (crc@crc.dev), and is used
 	// to sign bundles uploaded to an image registry.
 	// It can be fetched with: `gpg --recv-key DC7EAC400A1BFDFB`
diff --git a/pkg/crc/machine/bundle/constants.go b/pkg/crc/machine/bundle/constants.go
index 6e3627182..b4e814c2c 100644
--- a/pkg/crc/machine/bundle/constants.go
+++ b/pkg/crc/machine/bundle/constants.go
@@ -8,31 +8,23 @@ import (
 var bundleLocations = map[string]bundlesDownloadInfo{
 	"amd64": {
 		"darwin": {
-			preset.OpenShift: download.NewRemoteFile("https://mirror.openshift.com/pub/openshift-v4/clients/crc/bundles/openshift/4.11.1/crc_vfkit_4.11.1_amd64.crcbundle",
-				"b13ee71cc819b01e4d303e4f25defa2cf33f2dc4106d1bd1f904b80f74a32442"),
-			preset.Podman: download.NewRemoteFile("https://mirror.openshift.com/pub/openshift-v4/clients/crc/bundles/podman/4.1.0/crc_podman_vfkit_4.1.0_amd64.crcbundle",
-				"81028e2373ba4d541ef926d2ba819b39b79d7c7993d7e66010fa0b2bec270670"),
+			preset.OpenShift: download.NewRemoteFile("https://mirror.openshift.com/pub/openshift-v4/clients/crc/bundles/openshift/4.11.3/crc_vfkit_4.11.3_amd64.crcbundle",
+				"f912ca39c5243f0e089ba6a25273f4d50c8891fdf43f1f5333ff098022952472"),
 		},
 
 		"linux": {
-			preset.OpenShift: download.NewRemoteFile("https://mirror.openshift.com/pub/openshift-v4/clients/crc/bundles/openshift/4.11.1/crc_libvirt_4.11.1_amd64.crcbundle",
-				"ac4f9e6a1f62ae71a191764e95d46e6141994906659ee9d028f2d620bd9c9792"),
-			preset.Podman: download.NewRemoteFile("https://mirror.openshift.com/pub/openshift-v4/clients/crc/bundles/podman/4.1.0/crc_podman_libvirt_4.1.0_amd64.crcbundle",
-				"59d00867bf8358a6a3d77abbd3a0606e4a0c9917f5b02ec6d0b08a08a0285ced"),
+			preset.OpenShift: download.NewRemoteFile("https://mirror.openshift.com/pub/openshift-v4/clients/crc/bundles/openshift/4.11.3/crc_libvirt_4.11.3_amd64.crcbundle",
+				"89a31a0571de49c536e6cbd53ec0d3fa0568362c6b53b6b78f85710a6e35fc27"),
 		},
 		"windows": {
-			preset.OpenShift: download.NewRemoteFile("https://mirror.openshift.com/pub/openshift-v4/clients/crc/bundles/openshift/4.11.1/crc_hyperv_4.11.1_amd64.crcbundle",
-				"a92d698ca6c1b885bbd42dd11afbf825461ee802a461702ba6e0627ccf0f6b9e"),
-			preset.Podman: download.NewRemoteFile("https://mirror.openshift.com/pub/openshift-v4/clients/crc/bundles/podman/4.1.0/crc_podman_hyperv_4.1.0_amd64.crcbundle",
-				"cfd4aacbc0b45459af5d8f1dc916db29b6b2010b24153d0050e6d8a9b515b106"),
+			preset.OpenShift: download.NewRemoteFile("https://mirror.openshift.com/pub/openshift-v4/clients/crc/bundles/openshift/4.11.3/crc_hyperv_4.11.3_amd64.crcbundle",
+				"acee6b1f4b58e5faf8c6b56c85b565775411ee8c89d986dcc928a17468789166"),
 		},
 	},
 	"arm64": {
 		"darwin": {
-			preset.OpenShift: download.NewRemoteFile("https://mirror.openshift.com/pub/openshift-v4/clients/crc/bundles/openshift/4.11.1/crc_vfkit_4.11.1_arm64.crcbundle",
-				"2ef2f532aa45f9f17385705f2fdd5f0c56ce6650f5e29203e7eb28277f4ad623"),
-			preset.Podman: download.NewRemoteFile("https://mirror.openshift.com/pub/openshift-v4/clients/crc/bundles/podman/4.1.0/crc_podman_vfkit_4.1.0_arm64.crcbundle",
-				"6674c016591ee56451741de754b14b754aaaf1a981e4a1fa922c238353988e9a"),
+			preset.OpenShift: download.NewRemoteFile("https://mirror.openshift.com/pub/openshift-v4/clients/crc/bundles/openshift/4.11.3/crc_vfkit_4.11.3_arm64.crcbundle",
+				"290c5544ada1e0e10e5390d349754deabe48a49773c96e92a45359f38eb8f185"),
 		},
 	},
 }
diff --git a/pkg/crc/machine/bundle/metadata.go b/pkg/crc/machine/bundle/metadata.go
index 2fd8f1b62..d08837fcf 100644
--- a/pkg/crc/machine/bundle/metadata.go
+++ b/pkg/crc/machine/bundle/metadata.go
@@ -237,6 +237,13 @@ func GetBundleNameWithoutExtension(bundleName string) string {
 	return strings.TrimSuffix(bundleName, bundleExtension)
 }
 
+func GetBundleNameWithExtension(bundleName string) string {
+	if strings.HasSuffix(bundleName, bundleExtension) {
+		return bundleName
+	}
+	return fmt.Sprintf("%s%s", bundleName, bundleExtension)
+}
+
 func GetCustomBundleName(bundleFilename string) string {
 	re := regexp.MustCompile(`(?:_[0-9]+)*.crcbundle$`)
 	baseName := re.ReplaceAllLiteralString(bundleFilename, "")
diff --git a/pkg/crc/machine/start.go b/pkg/crc/machine/start.go
index 04eb87bb6..34ea2afa3 100644
--- a/pkg/crc/machine/start.go
+++ b/pkg/crc/machine/start.go
@@ -298,7 +298,7 @@ func (client *client) Start(ctx context.Context, startConfig types.StartConfig)
 	}
 
 	if client.useVSock() {
-		if err := exposePorts(startConfig.Preset); err != nil {
+		if err := exposePorts(startConfig.Preset, startConfig.IngressHTTPPort, startConfig.IngressHTTPSPort); err != nil {
 			return nil, err
 		}
 	}
diff --git a/pkg/crc/machine/types/types.go b/pkg/crc/machine/types/types.go
index 10a29c7c7..13f5d27e2 100644
--- a/pkg/crc/machine/types/types.go
+++ b/pkg/crc/machine/types/types.go
@@ -31,6 +31,10 @@ type StartConfig struct {
 
 	// Shared dirs
 	EnableSharedDirs bool
+
+	// Ports to access openshift routes
+	IngressHTTPPort  uint
+	IngressHTTPSPort uint
 }
 
 type ClusterConfig struct {
diff --git a/pkg/crc/machine/vsock.go b/pkg/crc/machine/vsock.go
index d87688106..4060d96e5 100644
--- a/pkg/crc/machine/vsock.go
+++ b/pkg/crc/machine/vsock.go
@@ -16,8 +16,8 @@ import (
 	"github.com/pkg/errors"
 )
 
-func exposePorts(preset crcPreset.Preset) error {
-	portsToExpose := vsockPorts(preset)
+func exposePorts(preset crcPreset.Preset, ingressHTTPPort, ingressHTTPSPort uint) error {
+	portsToExpose := vsockPorts(preset, ingressHTTPPort, ingressHTTPSPort)
 	daemonClient := daemonclient.New()
 	alreadyOpenedPorts, err := listOpenPorts(daemonClient)
 	if err != nil {
@@ -78,13 +78,13 @@ const (
 	virtualMachineIP = "192.168.127.2"
 	internalSSHPort  = "22"
 	localIP          = "127.0.0.1"
-	httpPort         = "80"
-	httpsPort        = "443"
+	remoteHTTPPort   = "80"
+	remoteHTTPSPort  = "443"
 	apiPort          = "6443"
 	cockpitPort      = "9090"
 )
 
-func vsockPorts(preset crcPreset.Preset) []types.ExposeRequest {
+func vsockPorts(preset crcPreset.Preset, ingressHTTPPort, ingressHTTPSPort uint) []types.ExposeRequest {
 	exposeRequest := []types.ExposeRequest{
 		{
 			Protocol: "tcp",
@@ -102,13 +102,13 @@ func vsockPorts(preset crcPreset.Preset) []types.ExposeRequest {
 			},
 			types.ExposeRequest{
 				Protocol: "tcp",
-				Local:    fmt.Sprintf(":%s", httpsPort),
-				Remote:   net.JoinHostPort(virtualMachineIP, httpsPort),
+				Local:    fmt.Sprintf(":%d", ingressHTTPSPort),
+				Remote:   net.JoinHostPort(virtualMachineIP, remoteHTTPSPort),
 			},
 			types.ExposeRequest{
 				Protocol: "tcp",
-				Local:    fmt.Sprintf(":%s", httpPort),
-				Remote:   net.JoinHostPort(virtualMachineIP, httpPort),
+				Local:    fmt.Sprintf(":%d", ingressHTTPPort),
+				Remote:   net.JoinHostPort(virtualMachineIP, remoteHTTPPort),
 			})
 	case crcPreset.Podman:
 		socketProtocol := types.UNIX
diff --git a/pkg/crc/validation/validation.go b/pkg/crc/validation/validation.go
index f640ddb62..27edfec92 100644
--- a/pkg/crc/validation/validation.go
+++ b/pkg/crc/validation/validation.go
@@ -61,34 +61,36 @@ func ValidateBundlePath(bundlePath string, preset crcpreset.Preset) error {
 	}
 
 	userProvidedBundle := filepath.Base(bundlePath)
-	if userProvidedBundle != constants.GetDefaultBundle(preset) {
-		// Should append underscore (_) here, as we don't want crc_libvirt_4.7.15.crcbundle
-		// to be detected as a custom bundle for crc_libvirt_4.7.1.crcbundle
-		usingCustomBundle := strings.HasPrefix(bundle.GetBundleNameWithoutExtension(userProvidedBundle),
-			fmt.Sprintf("%s_", bundle.GetBundleNameWithoutExtension(constants.GetDefaultBundle(preset))))
-		if usingCustomBundle {
-			logging.Warnf("Using custom bundle %s", userProvidedBundle)
-			return nil
-		}
-		if !constants.IsRelease() {
-			logging.Warnf("Using unsupported bundle %s", userProvidedBundle)
-			return nil
-		}
-		return fmt.Errorf("%s is not supported by this crc executable, please use %s", userProvidedBundle, constants.GetDefaultBundle(preset))
-	}
+	bundleMismatchWarning(userProvidedBundle, preset)
 	return nil
 }
 
 func ValidateBundle(bundlePath string, preset crcpreset.Preset) error {
 	bundleName := filepath.Base(bundlePath)
-	_, err := bundle.Get(bundleName)
+	bundleMetadata, err := bundle.Get(bundleName)
 	if err != nil {
 		return ValidateBundlePath(bundlePath, preset)
 	}
+	bundleMismatchWarning(bundleMetadata.GetBundleName(), preset)
 	/* 'bundle' is already unpacked in ~/.crc/cache */
 	return nil
 }
 
+func bundleMismatchWarning(userProvidedBundle string, preset crcpreset.Preset) {
+	userProvidedBundle = bundle.GetBundleNameWithExtension(userProvidedBundle)
+	if userProvidedBundle != constants.GetDefaultBundle(preset) {
+		// Should append underscore (_) here, as we don't want crc_libvirt_4.7.15.crcbundle
+		// to be detected as a custom bundle for crc_libvirt_4.7.1.crcbundle
+		usingCustomBundle := strings.HasPrefix(bundle.GetBundleNameWithoutExtension(userProvidedBundle),
+			fmt.Sprintf("%s_", bundle.GetBundleNameWithoutExtension(constants.GetDefaultBundle(preset))))
+		if usingCustomBundle {
+			logging.Warnf("Using custom bundle %s", userProvidedBundle)
+		} else {
+			logging.Warnf("Using %s bundle, but %s is expected for this release", userProvidedBundle, constants.GetDefaultBundle(preset))
+		}
+	}
+}
+
 // ValidateIPAddress checks if provided IP is valid
 func ValidateIPAddress(ipAddress string) error {
 	ip := net.ParseIP(ipAddress).To4()
diff --git a/vendor/github.com/RedHatQE/gowinx/AUTHORS b/vendor/github.com/RedHatQE/gowinx/AUTHORS
deleted file mode 100644
index 606975a99..000000000
--- a/vendor/github.com/RedHatQE/gowinx/AUTHORS
+++ /dev/null
@@ -1,1 +0,0 @@
-Adrian Riobo <ariobolo@redhat.com>
\ No newline at end of file
diff --git a/vendor/github.com/RedHatQE/gowinx/LICENSE b/vendor/github.com/RedHatQE/gowinx/LICENSE
deleted file mode 100644
index 261eeb9e9..000000000
--- a/vendor/github.com/RedHatQE/gowinx/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/app/action-center/action-center.go b/vendor/github.com/RedHatQE/gowinx/pkg/app/action-center/action-center.go
deleted file mode 100644
index 356d1d151..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/app/action-center/action-center.go
+++ /dev/null
@@ -1,135 +0,0 @@
-// +build windows
-
-package action_center
-
-import (
-	"fmt"
-	"syscall"
-	"time"
-
-	"github.com/RedHatQE/gowinx/pkg/util/logging"
-	win32wam "github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-and-messages"
-	"github.com/RedHatQE/gowinx/pkg/win32/desktop/notificationarea"
-	"github.com/RedHatQE/gowinx/pkg/win32/interaction"
-	"github.com/RedHatQE/gowinx/pkg/win32/ux"
-)
-
-const (
-	icon_name        string = "Action Center"
-	window_title     string = "Action center"
-	clear_all_button string = "Clear all notifications"
-)
-
-func ClickNotifyButton() error {
-	handler, err := notificationarea.FindTrayButtonByTitle(icon_name)
-	if err != nil {
-		return err
-	}
-	rect, err := getActionCenterIconPosition(handler)
-	if err != nil {
-		return err
-	}
-	return interaction.ClickOnRect(rect)
-}
-
-func ClearNotifications() error {
-	// Initialize base elements
-	initialize()
-	// Get action center window
-	actionCenterWindow, err := ux.GetActiveElement(window_title, ux.WINDOW)
-	if err != nil {
-		logging.Error(err)
-		return err
-	}
-	logging.Info("Got active window for action center")
-	clearAllButton, err := actionCenterWindow.GetElement(clear_all_button, ux.BUTTON)
-	if err != nil {
-		logging.Error(err)
-		return err
-	}
-	if err := clearAllButton.Click(); err != nil {
-		return err
-	}
-	finalize()
-	return nil
-}
-
-func PrintNotifications(notificationGroupName string) error {
-	if notifications, err := GetNotifications(notificationGroupName); err != nil {
-		return err
-	} else {
-		for _, notification := range notifications {
-			fmt.Printf("%s", notification)
-		}
-	}
-	return nil
-}
-
-// Codeready Containers
-// Fix this for testing
-func GetNotifications(notificationGroupName string) ([]string, error) {
-	notificationsGroup := "Notifications from " + notificationGroupName
-	// Initialize base elements
-	initialize()
-	var notifications []string
-	// Get action center window
-	actionCenterWindow, err := ux.GetActiveElement(window_title, ux.WINDOW)
-	if err != nil {
-		logging.Error(err)
-		return nil, err
-	}
-	// Get list of groups of notifications
-	// listGroup, err := list.GetList(actionCenterWindow, "")
-	listGroup, err := actionCenterWindow.GetElement("", ux.LIST)
-	if err != nil {
-		logging.Error(err)
-		return nil, err
-	}
-
-	// Get group of notifications
-	// group, err := group.GetGroup(listGroup, notificationsGroup)
-	group, err := listGroup.GetElement(notificationsGroup, ux.GROUP)
-	if err != nil {
-		return nil, err
-	}
-
-	// Get notifications on the group
-	listItems, err := group.GetAllChildren(ux.LISTITEM)
-	if err != nil {
-		return nil, err
-	}
-	for _, listItem := range listItems {
-		if textElement, err := listItem.GetElementByType(ux.TEXT); err == nil {
-			logging.Infof("Adding notification: %s", textElement.GetName())
-			notifications = append(notifications, textElement.GetName())
-		}
-	}
-	finalize()
-	return notifications, nil
-}
-
-func getActionCenterIconPosition(handler syscall.Handle) (win32wam.RECT, error) {
-	var rect win32wam.RECT
-	if succeed, err := win32wam.GetWindowRect(handler, &rect); succeed {
-		logging.Debugf("Rect for action center icon is t:%d,l:%d,r:%d,b:%d", rect.Top, rect.Left, rect.Right, rect.Bottom)
-		return rect, nil
-	} else {
-		return win32wam.RECT{}, err
-	}
-}
-
-func initialize() (err error) {
-	// Initialize context
-	ux.Initialize()
-	// Click notifiy button to expand action center
-	if err = ClickNotifyButton(); err == nil {
-		//delay
-		time.Sleep(1 * time.Second)
-	}
-	return
-}
-
-func finalize() {
-	// Finalize context
-	ux.Finalize()
-}
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/util/logging/logging.go b/vendor/github.com/RedHatQE/gowinx/pkg/util/logging/logging.go
deleted file mode 100644
index e8d11520e..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/util/logging/logging.go
+++ /dev/null
@@ -1,93 +0,0 @@
-package logging
-
-import (
-	"fmt"
-	"io"
-	"os"
-	"path/filepath"
-	"time"
-
-	"github.com/RedHatQE/gowinx/pkg/util"
-	"github.com/sirupsen/logrus"
-)
-
-var (
-	logfile       *os.File
-	LogLevel      string
-	originalHooks = logrus.LevelHooks{}
-)
-
-func OpenLogFile(basePath string, fileName string) (*os.File, error) {
-	if err := util.EnsureBaseDirectoriesExist(basePath); err != nil {
-		return nil, err
-	}
-	logFile, err := os.OpenFile(
-		filepath.Join(basePath, fileName),
-		os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0600)
-	if err != nil {
-		return nil, err
-	}
-	return logFile, nil
-}
-
-func CloseLogging() {
-	logfile.Close()
-	logrus.StandardLogger().ReplaceHooks(make(logrus.LevelHooks))
-}
-
-func BackupLogFile() {
-	if logfile == nil {
-		return
-	}
-	os.Rename(logfile.Name(), fmt.Sprintf("%s_%s", logfile.Name(), time.Now().Format("20060102150405"))) // nolint
-}
-
-func InitLogrus(logLevel, basePath string, fileName string) {
-	logrus.SetOutput(io.MultiWriter(os.Stdout))
-	logrus.SetLevel(logrus.DebugLevel)
-	logrus.SetFormatter(&logrus.JSONFormatter{})
-
-	for k, v := range logrus.StandardLogger().Hooks {
-		originalHooks[k] = v
-	}
-}
-
-func Info(args ...interface{}) {
-	logrus.Info(args...)
-}
-
-func Infof(s string, args ...interface{}) {
-	logrus.Infof(s, args...)
-}
-
-func Warn(args ...interface{}) {
-	logrus.Warn(args...)
-}
-
-func Warnf(s string, args ...interface{}) {
-	logrus.Warnf(s, args...)
-}
-
-func Fatal(args ...interface{}) {
-	logrus.Fatal(args...)
-}
-
-func Fatalf(s string, args ...interface{}) {
-	logrus.Fatalf(s, args...)
-}
-
-func Error(args ...interface{}) {
-	logrus.Error(args...)
-}
-
-func Errorf(s string, args ...interface{}) {
-	logrus.Errorf(s, args...)
-}
-
-func Debug(args ...interface{}) {
-	logrus.Debug(args...)
-}
-
-func Debugf(s string, args ...interface{}) {
-	logrus.Debugf(s, args...)
-}
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/util/util.go b/vendor/github.com/RedHatQE/gowinx/pkg/util/util.go
deleted file mode 100644
index f5693e62a..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/util/util.go
+++ /dev/null
@@ -1,21 +0,0 @@
-package util
-
-import (
-	"math/rand"
-	"os"
-	"strconv"
-	"time"
-)
-
-func EnsureBaseDirectoriesExist(path string) error {
-	return os.MkdirAll(path, 0750)
-}
-
-func GetHomeDir() string {
-	return os.Getenv("HOME")
-}
-
-func GenerateCorrelation() string {
-	rand.Seed(time.Now().UnixNano())
-	return strconv.Itoa(1000000 + rand.Intn(8000000))
-}
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/system-services/handle.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/system-services/handle.go
deleted file mode 100644
index 207ddc150..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/system-services/handle.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// +build windows
-package system_services
-
-import (
-	"syscall"
-
-	"github.com/RedHatQE/gowinx/pkg/win32/api/util"
-)
-
-var (
-	closeHandle = kernel32.MustFindProc("CloseHandle")
-)
-
-// https://docs.microsoft.com/en-us/windows/win32/api/handleapi/nf-handleapi-closehandle
-// BOOL CloseHandle(
-// 	HANDLE hObject
-// );
-func CloseHandle(hObject syscall.Handle) (success bool, err error) {
-	r0, _, e1 := syscall.Syscall(closeHandle.Addr(), 1,
-		uintptr(hObject),
-		0,
-		0)
-	success, err = util.EvalSyscallBool(r0, e1)
-	return
-}
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/system-services/memory.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/system-services/memory.go
deleted file mode 100644
index 48da34bad..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/system-services/memory.go
+++ /dev/null
@@ -1,74 +0,0 @@
-// +build windows
-package system_services
-
-import (
-	"syscall"
-	"unsafe"
-
-	"github.com/RedHatQE/gowinx/pkg/win32/api/util"
-)
-
-var (
-	virtualAllocEx    = kernel32.MustFindProc("VirtualAllocEx")
-	readProcessMemory = kernel32.MustFindProc("ReadProcessMemory")
-	virtualFreeEx     = kernel32.MustFindProc("VirtualFreeEx")
-)
-
-// https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualallocex
-// LPVOID VirtualAllocEx(
-// 	HANDLE hProcess,
-// 	LPVOID lpAddress,
-// 	SIZE_T dwSize,
-// 	DWORD  flAllocationType,
-// 	DWORD  flProtect
-// );
-func VirtualAllocEx(hProcess syscall.Handle, lpAddress, dwSize uintptr, flAllocationType, flProtect uint32) (baseAddress uintptr, err error) {
-	r0, _, e1 := syscall.Syscall6(virtualAllocEx.Addr(), 5, uintptr(hProcess), lpAddress, dwSize,
-		uintptr(flAllocationType), uintptr(flProtect), 0)
-	baseAddress = r0
-	if e1 != 0 {
-		err = error(e1)
-	} else {
-		err = syscall.EINVAL
-	}
-	return
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-readprocessmemory
-// BOOL ReadProcessMemory(
-// 	HANDLE  hProcess,
-// 	LPCVOID lpBaseAddress,
-// 	LPVOID  lpBuffer,
-// 	SIZE_T  nSize,
-// 	SIZE_T  *lpNumberOfBytesRead
-// );
-func ReadProcessMemory(hProcess syscall.Handle, lpBaseAddress, lpBuffer, nSize uintptr, numRead *uintptr) (success bool, err error) {
-	r0, _, e1 := syscall.Syscall6(readProcessMemory.Addr(), 5,
-		uintptr(hProcess),
-		uintptr(lpBaseAddress),
-		uintptr(lpBuffer),
-		uintptr(nSize),
-		uintptr(unsafe.Pointer(numRead)),
-		0)
-	success, err = util.EvalSyscallBool(r0, e1)
-	return
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualfreeex
-// BOOL VirtualFreeEx(
-// 	HANDLE hProcess,
-// 	LPVOID lpAddress,
-// 	SIZE_T dwSize,
-// 	DWORD  dwFreeType
-// );
-func VirtualFreeEx(hProcess syscall.Handle, lpBaseAddress, dwSize uintptr, dwFreeType uint32) (success bool, err error) {
-	r0, _, e1 := syscall.Syscall6(virtualFreeEx.Addr(), 4,
-		uintptr(hProcess),
-		uintptr(lpBaseAddress),
-		uintptr(dwSize),
-		uintptr(dwFreeType),
-		0,
-		0)
-	success, err = util.EvalSyscallBool(r0, e1)
-	return
-}
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/system-services/processthreadsa.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/system-services/processthreadsa.go
deleted file mode 100644
index 59605dc70..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/system-services/processthreadsa.go
+++ /dev/null
@@ -1,35 +0,0 @@
-// +build windows
-package system_services
-
-import (
-	"syscall"
-
-	"github.com/RedHatQE/gowinx/pkg/win32/api/util"
-)
-
-var (
-	openProcess = kernel32.MustFindProc("OpenProcess")
-)
-
-// https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess
-// HANDLE OpenProcess(
-// 	DWORD dwDesiredAccess,
-// 	BOOL  bInheritHandle,
-// 	DWORD dwProcessId
-// );
-func OpenProcess(dwDesiredAccess, bInheritHandle uint32, dwProcessId uint32) (handle syscall.Handle, err error) {
-	r0, _, e1 := syscall.Syscall(openProcess.Addr(), 3,
-		uintptr(dwDesiredAccess),
-		uintptr(bInheritHandle),
-		uintptr(dwProcessId))
-	handle, err = util.EvalSyscallHandler(r0, e1)
-	return
-}
-
-func OpenProcessAllAccess(inheritHandle bool, processId uint32) (handle syscall.Handle, err error) {
-	var inherit uint32 = 0
-	if inheritHandle {
-		inherit = 1
-	}
-	return OpenProcess(PROCESS_ALL_ACCESS, inherit, processId)
-}
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/system-services/system-services.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/system-services/system-services.go
deleted file mode 100644
index 759d0f9aa..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/system-services/system-services.go
+++ /dev/null
@@ -1,10 +0,0 @@
-// +build windows
-package system_services
-
-import (
-	"syscall"
-)
-
-var (
-	kernel32 = syscall.MustLoadDLL("kernel32.dll")
-)
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/system-services/types.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/system-services/types.go
deleted file mode 100644
index 0db78e788..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/system-services/types.go
+++ /dev/null
@@ -1,7 +0,0 @@
-// +build windows
-package system_services
-
-// Process
-const (
-	PROCESS_ALL_ACCESS = 0x1F0FFF
-)
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-accesibility-features/iuiautomationlegacyiaccessiblepattern.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-accesibility-features/iuiautomationlegacyiaccessiblepattern.go
deleted file mode 100644
index b9efac234..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-accesibility-features/iuiautomationlegacyiaccessiblepattern.go
+++ /dev/null
@@ -1,71 +0,0 @@
-// +build windows
-
-package windows_accesibility_features
-
-import (
-	"syscall"
-	"unsafe"
-
-	"github.com/go-ole/go-ole"
-)
-
-type IUIAutomationLegacyIAccessiblePattern struct {
-	ole.IUnknown
-}
-
-type IUIAutomationLegacyIAccessiblePatternVtbl struct {
-	ole.IUnknownVtbl
-
-	DoDefaultAction             uintptr
-	Get_CachedChildId           uintptr
-	SetValue                    uintptr
-	Get_CachedDefaultAction     uintptr
-	Get_CachedDescription       uintptr
-	Get_CachedHelp              uintptr
-	Get_CachedKeyboardShortcut  uintptr
-	Get_CachedName              uintptr
-	Get_CachedRole              uintptr
-	Get_CachedState             uintptr
-	Get_CachedValue             uintptr
-	Get_CurrentChildId          uintptr
-	Get_CurrentDefaultAction    uintptr
-	Get_CurrentDescription      uintptr
-	Get_CurrentHelp             uintptr
-	Get_CurrentKeyboardShortcut uintptr
-	Get_CurrentName             uintptr
-	Get_CurrentRole             uintptr
-	Get_CurrentState            uintptr
-	Get_CurrentValue            uintptr
-	GetCachedSelection          uintptr
-	GetCurrentSelection         uintptr
-	GetIAccessible              uintptr
-	Select                      uintptr
-}
-
-// https://github.com/mmarquee/ui-automation/blob/ec43c1449b11b5d0f3fd313367e242c6ce456bd9/src/main/java/mmarquee/uiautomation/IUIAutomationLegacyIAccessiblePattern.java
-var IID_IUIAutomationLegacyIAccessiblePattern = &ole.GUID{0x828055ad, 0x355b, 0x4435, [8]byte{0x86, 0xd5, 0x3b, 0x51, 0xc1, 0x4a, 0x9b, 0x1b}}
-
-func (pat *IUIAutomationLegacyIAccessiblePattern) VTable() *IUIAutomationLegacyIAccessiblePatternVtbl {
-	return (*IUIAutomationLegacyIAccessiblePatternVtbl)(unsafe.Pointer(pat.RawVTable))
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/uiautomationclient/nf-uiautomationclient-iuiautomationlegacyiaccessiblepattern-setvalue
-// HRESULT SetValue(
-// 	LPCWSTR szValue
-// );
-func (pat *IUIAutomationLegacyIAccessiblePattern) SetValue(value string) error {
-	szValue, err := syscall.UTF16PtrFromString(value)
-	if err != nil {
-		return err
-	}
-	hr, _, _ := syscall.Syscall(
-		pat.VTable().SetValue,
-		2,
-		uintptr(unsafe.Pointer(pat)),
-		uintptr(unsafe.Pointer(szValue)),
-		0)
-	if hr != 0 {
-		return ole.NewError(hr)
-	}
-	return nil
-}
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-accesibility-features/uiautomation.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-accesibility-features/uiautomation.go
deleted file mode 100644
index b62fba992..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-accesibility-features/uiautomation.go
+++ /dev/null
@@ -1,207 +0,0 @@
-// +build windows
-
-package windows_accesibility_features
-
-import (
-	"os"
-	"syscall"
-	"unsafe"
-
-	"github.com/RedHatQE/gowinx/pkg/util/logging"
-	win32wam "github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-and-messages"
-	"github.com/go-ole/go-ole"
-	wa "github.com/openstandia/w32uiautomation"
-)
-
-var (
-	manager *wa.IUIAutomation
-)
-
-func Initalize() {
-	ole.CoInitializeEx(0, ole.COINIT_APARTMENTTHREADED|ole.COINIT_SPEED_OVER_MEMORY)
-	if waManager, err := wa.NewUIAutomation(); err != nil {
-		logging.Errorf("Error initializing ui automation framework: %v", err)
-		os.Exit(1)
-	} else {
-		manager = waManager
-	}
-}
-
-func Finalize() {
-	ole.CoUninitialize()
-}
-
-func GetActiveElement(name string, elementType int64) (*wa.IUIAutomationElement, error) {
-	root, err := getRootElement()
-	defer root.Release()
-	if err != nil {
-		return nil, err
-	} else {
-		return GetElementFromParent(root, name, elementType)
-	}
-}
-
-func GetElementFromParent(parentElement *wa.IUIAutomationElement, name string, elementType int64) (*wa.IUIAutomationElement, error) {
-	conditionByName, err := createPropertyCondition(
-		wa.UIA_NamePropertyId,
-		wa.NewVariantString(name))
-	if err != nil {
-		return nil, err
-	}
-	conditionByType, err := createPropertyCondition(
-		wa.UIA_ControlTypePropertyId,
-		ole.NewVariant(ole.VT_INT, elementType))
-	if err != nil {
-		return nil, err
-	}
-	condition, err := createAndCondition(conditionByName, conditionByType)
-	if err != nil {
-		return nil, err
-	}
-	// With wait
-	// return findFirst(parentElement, wa.TreeScope_Children, condition)
-	return parentElement.FindFirst(wa.TreeScope_Children, condition)
-}
-
-func GetElementFromParentByType(parentElement *wa.IUIAutomationElement, elementType int64) (*wa.IUIAutomationElement, error) {
-	condition, err := createPropertyCondition(
-		wa.UIA_ControlTypePropertyId,
-		ole.NewVariant(ole.VT_INT, elementType))
-	if err != nil {
-		return nil, err
-	}
-	// With wait
-	// return findFirst(parentElement, wa.TreeScope_Children, condition)
-	return parentElement.FindFirst(wa.TreeScope_Children, condition)
-}
-
-func GetAllChildren(parentElement *wa.IUIAutomationElement, elementType int64) (*wa.IUIAutomationElementArray, error) {
-	condition, err := createPropertyCondition(
-		wa.UIA_ControlTypePropertyId,
-		ole.NewVariant(ole.VT_INT, elementType))
-	if err != nil {
-		return nil, err
-	}
-	// With wait
-	// return findAll(parentElement, wa.TreeScope_Children, condition)
-	return parentElement.FindAll(wa.TreeScope_Children, condition)
-}
-
-func GetElementRect(element *wa.IUIAutomationElement) (*win32wam.RECT, error) {
-	rect, err := element.Get_CurrentBoundingRectangle()
-	if err != nil {
-		return nil, err
-	}
-	return &win32wam.RECT{Top: int32(rect.Top),
-		Right:  int32(rect.Right),
-		Bottom: int32(rect.Bottom),
-		Left:   int32(rect.Left)}, nil
-}
-
-// // https://github.com/goldendict/goldendict/blob/master/guids.c
-// var IID_IUIAutomationTextPattern = &ole.GUID{0x32eba289, 0x3583, 0x42c9, [8]byte{0x9c, 0x59, 0x3b, 0x6d, 0x9a, 0x1e, 0x9b, 0x6a}}
-func GetElementText(element *wa.IUIAutomationElement) (string, error) {
-	pattern, err := getValuePattern(element)
-	if err != nil {
-		return "", err
-	}
-	defer pattern.Release()
-	return pattern.Get_CurrentValue()
-}
-
-func SetElementValue(element *wa.IUIAutomationElement, value string) error {
-	pattern, err := getLegacyIAccessiblePattern(element)
-	if err != nil {
-		return err
-	}
-	defer pattern.Release()
-	return pattern.SetValue(value)
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/uiautomationclient/nf-uiautomationclient-iuiautomation-createpropertycondition
-// HRESULT CreatePropertyCondition(
-// 	PROPERTYID             propertyId,
-// 	VARIANT                value,
-// 	IUIAutomationCondition **newCondition
-//  );
-func createPropertyCondition(propertyId wa.PROPERTYID, value ole.VARIANT) (*wa.IUIAutomationCondition, error) {
-	var newCondition *wa.IUIAutomationCondition
-	hr, _, er1 := syscall.Syscall6(
-		manager.VTable().CreatePropertyCondition,
-		4,
-		uintptr(unsafe.Pointer(manager)),
-		uintptr(propertyId),
-		uintptr(unsafe.Pointer(&value)),
-		uintptr(unsafe.Pointer(&newCondition)),
-		0,
-		0)
-	// https://docs.microsoft.com/en-us/windows/win32/seccrypto/common-hresult-values
-	if hr != 0 {
-		return nil, error(er1)
-	}
-	return newCondition, nil
-}
-
-func createAndCondition(condition1, condition2 *wa.IUIAutomationCondition) (newCondition *wa.IUIAutomationCondition, err error) {
-	return manager.CreateAndCondition(condition1, condition2)
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/uiautomationclient/nf-uiautomationclient-iuiautomationelement-findfirst
-// HRESULT FindFirst(
-// 	TreeScope              scope,
-// 	IUIAutomationCondition *condition,
-// 	IUIAutomationElement   **found
-// );
-func findFirst(elem *wa.IUIAutomationElement, scope wa.TreeScope, condition *wa.IUIAutomationCondition) (found *wa.IUIAutomationElement, err error) {
-	return wa.WaitFindFirst(manager, elem, scope, condition)
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/uiautomationclient/nf-uiautomationclient-iuiautomationelement-findfirst
-// HRESULT FindFirst(
-// 	TreeScope              scope,
-// 	IUIAutomationCondition *condition,
-// 	IUIAutomationElement   **found
-// );
-func findAll(elem *wa.IUIAutomationElement, scope wa.TreeScope, condition *wa.IUIAutomationCondition) (found *wa.IUIAutomationElementArray, err error) {
-	return wa.WaitFindAll(manager, elem, scope, condition)
-}
-
-func getRootElement() (root *wa.IUIAutomationElement, err error) {
-	return manager.GetRootElement()
-}
-
-func getValuePattern(element *wa.IUIAutomationElement) (*wa.IUIAutomationValuePattern, error) {
-	unknown, err := element.GetCurrentPattern(wa.UIA_ValuePatternId)
-	if err != nil {
-		logging.Error(err)
-		return nil, err
-	}
-	logging.Info("found value pattern for element %v", unknown)
-	defer unknown.Release()
-
-	disp, err := unknown.QueryInterface(wa.IID_IUIAutomationValuePattern)
-	if err != nil {
-		logging.Error(err)
-		return nil, err
-	}
-	logging.Info("found interface dispatcher for value pattern")
-	return (*wa.IUIAutomationValuePattern)(unsafe.Pointer(disp)), nil
-}
-
-func getLegacyIAccessiblePattern(element *wa.IUIAutomationElement) (*IUIAutomationLegacyIAccessiblePattern, error) {
-	unknown, err := element.GetCurrentPattern(wa.UIA_LegacyIAccessiblePatternId)
-	if err != nil {
-		logging.Error(err)
-		return nil, err
-	}
-	logging.Info("found LegacyIAccessible pattern for element %v", unknown)
-	defer unknown.Release()
-
-	disp, err := unknown.QueryInterface(IID_IUIAutomationLegacyIAccessiblePattern)
-	if err != nil {
-		logging.Error(err)
-		return nil, err
-	}
-	logging.Info("found interface dispatcher for LegacyIAccessible pattern")
-	return (*IUIAutomationLegacyIAccessiblePattern)(unsafe.Pointer(disp)), nil
-}
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-accesibility-features/windows-accesibility-features.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-accesibility-features/windows-accesibility-features.go
deleted file mode 100644
index 073d3362c..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-accesibility-features/windows-accesibility-features.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build windows
-
-package windows_accesibility_features
-
-import (
-	"syscall"
-)
-
-var (
-	uiautomationClient = syscall.MustLoadDLL("UIAutomationClient.dll")
-)
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-and-messages/types.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-and-messages/types.go
deleted file mode 100644
index 9af2c31e5..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-and-messages/types.go
+++ /dev/null
@@ -1,66 +0,0 @@
-// +build windows
-package windows_and_messages
-
-// https://docs.microsoft.com/en-us/windows/win32/api/windef/ns-windef-rect
-// typedef struct tagRECT {
-// 	LONG left;
-// 	LONG top;
-// 	LONG right;
-// 	LONG bottom;
-// } RECT, *PRECT, *NPRECT, *LPRECT;
-type RECT struct {
-	Left, Top, Right, Bottom int32
-}
-
-// SendMessage
-const (
-	WM_USER           uint32 = 1024
-	TB_BUTTONCOUNT    uint32 = WM_USER + 24
-	TB_COMMANDTOINDEX uint32 = WM_USER + 25
-	TB_GETBUTTONINFOW uint32 = WM_USER + 63
-	TB_GETBUTTONINFOA uint32 = WM_USER + 65
-	TB_GETBUTTONTEXT  uint32 = WM_USER + 75
-)
-
-// GetSystemMetrics constants
-const (
-	SM_CXSCREEN = 0
-	SM_CYSCREEN = 1
-)
-
-// INPUT Type
-const (
-	INPUT_MOUSE = 0
-)
-
-// MOUSEINPUT DwFlags
-const (
-	MOUSEEVENTF_ABSOLUTE        = 0x8000
-	MOUSEEVENTF_MOVE            = 0x0001
-	MOUSEEVENTF_MOVE_NOCOALESCE = 0x2000
-	MOUSEEVENTF_LEFTDOWN        = 0x0002
-	MOUSEEVENTF_LEFTUP          = 0x0004
-)
-
-// Process
-const (
-	PROCESS_ALL_ACCESS = 0x1F0FFF
-)
-
-// ShowWindow constants
-const (
-	SW_HIDE            = 0
-	SW_NORMAL          = 1
-	SW_SHOWNORMAL      = 1
-	SW_SHOWMINIMIZED   = 2
-	SW_MAXIMIZE        = 3
-	SW_SHOWMAXIMIZED   = 3
-	SW_SHOWNOACTIVATE  = 4
-	SW_SHOW            = 5
-	SW_MINIMIZE        = 6
-	SW_SHOWMINNOACTIVE = 7
-	SW_SHOWNA          = 8
-	SW_RESTORE         = 9
-	SW_SHOWDEFAULT     = 10
-	SW_FORCEMINIMIZE   = 11
-)
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-and-messages/windows-and-messages.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-and-messages/windows-and-messages.go
deleted file mode 100644
index d2c17e8b1..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-and-messages/windows-and-messages.go
+++ /dev/null
@@ -1,10 +0,0 @@
-// +build windows
-package windows_and_messages
-
-import (
-	"syscall"
-)
-
-var (
-	user32 = syscall.MustLoadDLL("user32.dll")
-)
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-and-messages/winuser.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-and-messages/winuser.go
deleted file mode 100644
index a313e2533..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-and-messages/winuser.go
+++ /dev/null
@@ -1,287 +0,0 @@
-// +build windows
-package windows_and_messages
-
-import (
-	"syscall"
-	"unsafe"
-
-	"github.com/RedHatQE/gowinx/pkg/win32/api/util"
-)
-
-var (
-	enumWindows              = user32.MustFindProc("EnumWindows")
-	enumChildWindows         = user32.MustFindProc("EnumChildWindows")
-	getWindowTextW           = user32.MustFindProc("GetWindowTextW")
-	getWindowTextA           = user32.MustFindProc("GetWindowTextA")
-	findWindowW              = user32.MustFindProc("FindWindowW")
-	findWindowEx             = user32.MustFindProc("FindWindowExW")
-	getForegroundWindow      = user32.MustFindProc("GetForegroundWindow")
-	getClassNameW            = user32.MustFindProc("GetClassNameW")
-	sendMessageW             = user32.MustFindProc("SendMessageW")
-	sendMessageA             = user32.MustFindProc("SendMessageA")
-	getSystemMetrics         = user32.MustFindProc("GetSystemMetrics")
-	sendInput                = user32.MustFindProc("SendInput")
-	getWindowRect            = user32.MustFindProc("GetWindowRect")
-	getDlgItem               = user32.MustFindProc("GetDlgItem")
-	showWindow               = user32.MustFindProc("ShowWindow")
-	isWindowUnicode          = user32.MustFindProc("IsWindowUnicode")
-	getWindowThreadProcessId = user32.MustFindProc("GetWindowThreadProcessId")
-)
-
-// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-enumwindows
-// BOOL EnumWindows(
-// 	WNDENUMPROC lpEnumFunc,
-// 	LPARAM      lParam
-// );
-func EnumWindows(enumFunc uintptr, lparam uintptr) (success bool, err error) {
-	r0, _, e1 := syscall.Syscall(enumWindows.Addr(), 2,
-		uintptr(enumFunc),
-		uintptr(lparam),
-		0)
-	success, err = util.EvalSyscallBool(r0, e1)
-	return
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-enumchildwindows
-// BOOL EnumChildWindows(
-// 	HWND        hWndParent,
-// 	WNDENUMPROC lpEnumFunc,
-// 	LPARAM      lParam
-// );
-func EnumChildWindows(hWndParent syscall.Handle, lpEnumFunc, lParam uintptr) (err error) {
-	_, _, e1 := syscall.Syscall(enumChildWindows.Addr(), 3,
-		uintptr(hWndParent),
-		lpEnumFunc,
-		lParam)
-	if e1 != 0 {
-		err = error(e1)
-	} else {
-		err = syscall.EINVAL
-	}
-	return
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindowtextw
-// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindowtexta
-// int GetWindowText(
-// 	HWND   hWnd,
-// 	LPWSTR lpString,
-// 	int    nMaxCount
-// );
-func GetWindowText(hWnd syscall.Handle, str *uint16, maxCount int32) (len int32, err error) {
-	isUnicode, err := IsWindowUnicode(hWnd)
-	if err == nil {
-		var getWindowTextAddress uintptr
-		if isUnicode {
-			getWindowTextAddress = getWindowTextW.Addr()
-		} else {
-			getWindowTextAddress = getWindowTextA.Addr()
-		}
-		r0, _, e1 := syscall.Syscall(getWindowTextAddress, 3,
-			uintptr(hWnd),
-			uintptr(unsafe.Pointer(str)),
-			uintptr(maxCount))
-		len, err = util.EvalSyscallInt32(r0, e1)
-	}
-	return
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindoww
-// HWND FindWindowW(
-// 	LPCWSTR lpClassName,
-// 	LPCWSTR lpWindowName
-// );
-func FindWindowW(lpClassName, lpWindowName *uint16) (hwnd syscall.Handle, err error) {
-	r0, _, e1 := syscall.Syscall(findWindowW.Addr(), 2,
-		uintptr(unsafe.Pointer(lpClassName)),
-		uintptr(unsafe.Pointer(lpWindowName)),
-		0)
-	hwnd, err = util.EvalSyscallHandler(r0, e1)
-	return
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindowexw
-// HWND FindWindowExW(
-// 	HWND    hWndParent,
-// 	HWND    hWndChildAfter,
-// 	LPCWSTR lpszClass,
-// 	LPCWSTR lpszWindow
-// );
-func FindWindowEx(hwndParent, hwndChildAfter syscall.Handle, lpszClass, lpszWindow *uint16) (hwnd syscall.Handle, err error) {
-	r0, _, e1 := syscall.Syscall6(findWindowEx.Addr(), 4,
-		uintptr(hwndParent),
-		uintptr(hwndChildAfter),
-		uintptr(unsafe.Pointer(lpszClass)),
-		uintptr(unsafe.Pointer(lpszWindow)),
-		0,
-		0)
-	hwnd, err = util.EvalSyscallHandler(r0, e1)
-	return
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getforegroundwindow
-// HWND GetForegroundWindow();
-func GetForegroundWindow() (hwnd syscall.Handle, err error) {
-	r0, _, e1 := syscall.Syscall(getForegroundWindow.Addr(), 0,
-		0,
-		0,
-		0)
-	hwnd, err = util.EvalSyscallHandler(r0, e1)
-	return
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getclassnamew
-// int GetClassNameW(
-// 	HWND   hWnd,
-// 	LPWSTR lpClassName,
-// 	int    nMaxCount
-// );
-func GetClassName(hWnd syscall.Handle) (name string, err error) {
-	n := make([]uint16, 256)
-	p := &n[0]
-	r0, _, e1 := syscall.Syscall(getClassNameW.Addr(), 3,
-		uintptr(hWnd),
-		uintptr(unsafe.Pointer(p)),
-		uintptr(len(n)))
-	if r0 == 0 {
-		if e1 != 0 {
-			err = error(e1)
-		} else {
-			err = syscall.EINVAL
-		}
-		return
-	}
-	name = syscall.UTF16ToString(n)
-	return
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendmessagew
-// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendmessagea
-// LRESULT SendMessageW(
-// 	HWND   hWnd,
-// 	UINT   Msg,
-// 	WPARAM wParam,
-// 	LPARAM lParam
-// );
-func SendMessage(hWnd syscall.Handle, msg uint32, wParam, lParam uintptr) (lResult uintptr, err error) {
-	isUnicode, err := IsWindowUnicode(hWnd)
-	if err == nil {
-		var sendMessageAddress uintptr
-		if isUnicode {
-			sendMessageAddress = sendMessageW.Addr()
-		} else {
-			sendMessageAddress = sendMessageA.Addr()
-		}
-		r0, _, e1 := syscall.Syscall6(sendMessageAddress, 4,
-			uintptr(hWnd),
-			uintptr(msg),
-			wParam,
-			lParam,
-			0,
-			0)
-		lResult = r0
-		if e1 != 0 {
-			err = error(e1)
-		} else {
-			err = syscall.EINVAL
-		}
-	}
-	return
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getsystemmetrics
-// int GetSystemMetrics(
-// 	int nIndex
-// );
-func GetSystemMetrics(nIndex int32) (metric int32, err error) {
-	r0, _, e1 := syscall.Syscall(getSystemMetrics.Addr(), 1,
-		uintptr(nIndex),
-		0,
-		0)
-	metric, err = util.EvalSyscallInt32(r0, e1)
-	return
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendinput
-// UINT SendInput(
-// 	UINT    cInputs,
-// 	LPINPUT pInputs,
-// 	int     cbSize
-// );
-func SendInput(cInputs uint32, pInputs unsafe.Pointer, cbSize int32) (successedEventsNumber int32, err error) {
-	r0, _, e1 := syscall.Syscall(sendInput.Addr(), 3,
-		uintptr(cInputs),
-		uintptr(pInputs),
-		uintptr(cbSize))
-	successedEventsNumber, err = util.EvalSyscallInt32(r0, e1)
-	return
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindowrect
-// BOOL GetWindowRect(
-// 	HWND   hWnd,
-// 	LPRECT lpRect
-// );
-func GetWindowRect(hWnd syscall.Handle, rect *RECT) (success bool, err error) {
-	r0, _, e1 := syscall.Syscall(getWindowRect.Addr(), 2,
-		uintptr(hWnd),
-		uintptr(unsafe.Pointer(rect)),
-		0)
-	success, err = util.EvalSyscallBool(r0, e1)
-	return
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdlgitem
-// HWND GetDlgItem(
-// 	HWND hDlg,
-// 	int  nIDDlgItem
-// );
-func GetDlgItem(hDlg syscall.Handle, nIDDlgItem int32) (hwnd syscall.Handle, err error) {
-	r0, _, e1 := syscall.Syscall(getDlgItem.Addr(), 2,
-		uintptr(hDlg),
-		uintptr(nIDDlgItem),
-		0)
-	hwnd, err = util.EvalSyscallHandler(r0, e1)
-	return
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow
-// BOOL ShowWindow(
-// 	HWND hWnd,
-// 	int  nCmdShow
-// );
-func ShowWindow(hWnd syscall.Handle, nCmdShow int32) (hidden bool, err error) {
-	r0, _, e1 := syscall.Syscall(showWindow.Addr(), 2,
-		uintptr(hWnd),
-		uintptr(nCmdShow),
-		0)
-	hidden, err = util.EvalSyscallBool(r0, e1)
-	return
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-iswindowunicode
-// BOOL IsWindowUnicode(
-// 	HWND hWnd
-// );
-func IsWindowUnicode(hWnd syscall.Handle) (isUnicode bool, err error) {
-	r0, _, e1 := syscall.Syscall(isWindowUnicode.Addr(), 1,
-		uintptr(hWnd),
-		0,
-		0)
-	isUnicode, err = util.EvalSyscallBool(r0, e1)
-	return
-}
-
-// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindowthreadprocessid
-// DWORD GetWindowThreadProcessId(
-// 	HWND    hWnd,
-// 	LPDWORD lpdwProcessId
-// );
-func GetWindowThreadProcessId(hWnd syscall.Handle, lpdwProcessId *uint32) (windowCreatorThreadId int32, err error) {
-	r0, _, e1 := syscall.Syscall(getWindowThreadProcessId.Addr(), 2,
-		uintptr(hWnd),
-		uintptr(unsafe.Pointer(lpdwProcessId)),
-		0)
-	windowCreatorThreadId, err = util.EvalSyscallInt32(r0, e1)
-	return
-}
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/util/util.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/util/util.go
deleted file mode 100644
index 589a79517..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/api/util/util.go
+++ /dev/null
@@ -1,46 +0,0 @@
-// +build windows
-package util
-
-import "syscall"
-
-func MakeLPARAM(hiword uint16, loword uint16) uintptr {
-	return uintptr((hiword << 16) | uint16(loword&0xffff))
-}
-
-func EvalSyscallHandler(r0 uintptr, e1 syscall.Errno) (hwnd syscall.Handle, err error) {
-	hwnd = syscall.Handle(r0)
-	if e1 != 0 {
-		if e1 != 0 {
-			err = error(e1)
-		} else {
-			err = syscall.EINVAL
-		}
-	}
-	return
-}
-
-func EvalSyscallInt32(r0 uintptr, e1 syscall.Errno) (value int32, err error) {
-	if r0 == 0 {
-		if e1 != 0 {
-			err = error(e1)
-		} else {
-			err = syscall.EINVAL
-		}
-	}
-	value = int32(r0)
-	return
-}
-
-func EvalSyscallBool(r0 uintptr, e1 syscall.Errno) (value bool, err error) {
-	if r0 == 0 {
-		value = false
-		if e1 != 0 {
-			err = error(e1)
-		} else {
-			err = syscall.EINVAL
-		}
-	} else {
-		value = true
-	}
-	return
-}
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/desktop/notificationarea/icons.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/desktop/notificationarea/icons.go
deleted file mode 100644
index 01df313b8..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/desktop/notificationarea/icons.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// +build windows
-package notificationarea
-
-import (
-	"syscall"
-
-	"github.com/RedHatQE/gowinx/pkg/util/logging"
-	win32wam "github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-and-messages"
-)
-
-func GetHiddenIconsCount() (int32, error) {
-	return getIconsCountByWindowClass(NOTIFICATION_AREA_HIDDEN_WINDOW_CLASS)
-}
-
-func getIconsCountByWindowClass(className string) (int32, error) {
-	var err error
-	if toolbarHandler, err := getNotificationAreaToolbarByWindowClass(className); err == nil {
-		buttonsCount, _ := win32wam.SendMessage(toolbarHandler, win32wam.TB_BUTTONCOUNT, 0, 0)
-		return int32(buttonsCount), nil
-	}
-	return 0, err
-}
-
-func GetIconPosition(rect win32wam.RECT) (x, y int32) {
-	x = rect.Left + 10
-	y = rect.Top + 10
-	logging.Debugf("icon will be clicked at x: %d y: %d", x, y)
-	return
-}
-
-func getControlRect(controlHandler syscall.Handle) (rect win32wam.RECT, err error) {
-	if _, err = win32wam.GetWindowRect(controlHandler, &rect); err == nil {
-		logging.Debugf("Rect for control t:%d,l:%d,r:%d,b:%d", rect.Top, rect.Left, rect.Right, rect.Bottom)
-	} else {
-		logging.Debugf("error getting control area rect: %v", err)
-	}
-	return
-}
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/desktop/notificationarea/notificationarea.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/desktop/notificationarea/notificationarea.go
deleted file mode 100644
index 6522bde10..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/desktop/notificationarea/notificationarea.go
+++ /dev/null
@@ -1,98 +0,0 @@
-// +build windows
-package notificationarea
-
-import (
-	"fmt"
-	"syscall"
-
-	"github.com/RedHatQE/gowinx/pkg/util/logging"
-	win32wam "github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-and-messages"
-	win32toolbar "github.com/RedHatQE/gowinx/pkg/win32/ux/toolbar"
-	win32windows "github.com/RedHatQE/gowinx/pkg/win32/ux/windows"
-)
-
-// systemtray aka notification area, it is composed of notifications icons (offering display the status and various functions)
-// distributerd across:
-// * visible area on the right side of the taskbar (class: Shell_TrayWnd)
-// * hidden area as overflowwindow ( class: NotifyIconOverflowWindow)
-
-const (
-	NOTIFICATION_AREA_VISIBLE_WINDOW_CLASS string = "Shell_TrayWnd"
-	NOTIFICATION_AREA_HIDDEN_WINDOW_CLASS  string = "NotifyIconOverflowWindow"
-	TOOLBARWINDOWS32_ID                    int32  = 1504
-	TRAY_BUTTON_CLASS                      string = "TrayButton"
-	ACTION_CENTER_NAME                     string = "Action Center"
-)
-
-func GetHiddenNotificationAreaRect() (rect win32wam.RECT, err error) {
-	// Show notification area (hidden)
-	if err = ShowHiddenNotificationArea(); err == nil {
-		if toolbarHandler, err := getNotificationAreaToolbarByWindowClass(NOTIFICATION_AREA_HIDDEN_WINDOW_CLASS); err == nil {
-			if _, err = win32wam.GetWindowRect(toolbarHandler, &rect); err == nil {
-				logging.Debugf("Rect for system tray t:%d,l:%d,r:%d,b:%d", rect.Top, rect.Left, rect.Right, rect.Bottom)
-			}
-		}
-	}
-	if err != nil {
-		logging.Errorf("error getting hidden notification area rect: %v\n", err)
-	}
-	return
-}
-
-func ShowHiddenNotificationArea() (err error) {
-	if handler, err := getNotificationAreaWindowByClass(NOTIFICATION_AREA_HIDDEN_WINDOW_CLASS); err == nil {
-		win32wam.ShowWindow(handler, win32wam.SW_SHOWNORMAL)
-	}
-	return
-}
-
-func getNotificationAreaWindowByClass(className string) (handler syscall.Handle, err error) {
-	if handler, err = win32windows.FindWindowByClass(className); err != nil {
-		logging.Errorf("error getting handler on notification area for windows class: %s, error: %v\n", className, err)
-	}
-	return
-}
-
-func getNotificationAreaToolbarByWindowClass(className string) (handler syscall.Handle, err error) {
-	if windowHandler, err := getNotificationAreaWindowByClass(className); err == nil {
-		if handler, err = win32wam.GetDlgItem(windowHandler, TOOLBARWINDOWS32_ID); err != nil {
-			logging.Errorf("error getting toolbar handler on notification area for windows class: %s, error: %v\n", className, err)
-		}
-	}
-	return
-}
-
-func GetIconPositionByTitle(buttonText string) (int, int, error) {
-	toolbarHandlers, _ := findVisibleToolbars()
-	for i, toolbarHandler := range toolbarHandlers {
-		logging.Debugf("Trying on toolbar %d", i)
-		if x, y, err := win32toolbar.GetButtonClickablePosition(toolbarHandler,
-			win32toolbar.TOOLBAR_TYPE_VISIBLE,
-			buttonText); err == nil {
-			return x, y, nil
-		}
-	}
-	toolbarHandler, err := getNotificationAreaToolbarByWindowClass(NOTIFICATION_AREA_HIDDEN_WINDOW_CLASS)
-	if err == nil {
-		if x, y, err := win32toolbar.GetButtonClickablePosition(toolbarHandler,
-			win32toolbar.TOOLBAR_TYPE_HIDDEN,
-			buttonText); err == nil {
-			return x, y, nil
-		}
-	}
-	return -1, -1, fmt.Errorf("button %s not found on toolbar\n", buttonText)
-
-}
-
-// The notification area is composed of elements, app notification icons use to be placed
-// at the toolbars
-func findVisibleToolbars() ([]syscall.Handle, error) {
-	handler, _ := win32windows.FindWindowByClass(NOTIFICATION_AREA_VISIBLE_WINDOW_CLASS)
-	toolbars, _ := win32toolbar.FindToolbars(handler)
-	return toolbars, nil
-}
-
-func FindTrayButtonByTitle(title string) (syscall.Handle, error) {
-	handler, _ := win32windows.FindWindowByClass(NOTIFICATION_AREA_VISIBLE_WINDOW_CLASS)
-	return win32windows.FindChildWindowsbyClassAndTitle(handler, TRAY_BUTTON_CLASS, title)
-}
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/interaction/mouse.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/interaction/mouse.go
deleted file mode 100644
index 57fd1f61e..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/interaction/mouse.go
+++ /dev/null
@@ -1,87 +0,0 @@
-// +build windows
-package interaction
-
-import (
-	"time"
-	"unsafe"
-
-	"github.com/RedHatQE/gowinx/pkg/util/logging"
-	win32wam "github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-and-messages"
-)
-
-const (
-	elementClickDelay time.Duration = 300 * time.Millisecond
-)
-
-type MOUSE_INPUT struct {
-	Type uint32
-	Mi   MOUSEINPUT
-}
-
-type MOUSEINPUT struct {
-	Dx          int32
-	Dy          int32
-	MouseData   uint32
-	DwFlags     uint32
-	Time        uint32
-	DwExtraInfo uintptr
-}
-
-func ClickOnRect(rect win32wam.RECT) error {
-	x := ((rect.Right - rect.Left) / 2) + rect.Left
-	y := ((rect.Bottom - rect.Top) / 2) + rect.Top
-	return Click(x, y)
-}
-
-func Click(x, y int32) error {
-	events := [3]uint32{
-		win32wam.MOUSEEVENTF_ABSOLUTE | win32wam.MOUSEEVENTF_MOVE,
-		win32wam.MOUSEEVENTF_LEFTDOWN,
-		win32wam.MOUSEEVENTF_LEFTUP}
-	for _, event := range events {
-		time.Sleep(elementClickDelay)
-		if err := mouseInput(x, y, uint32(event)); err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
-func mouseInput(x, y int32, dwFlags uint32) error {
-	dx := getDX(x)
-	dy := getDY(y)
-	mouseInput := MOUSE_INPUT{
-		Type: win32wam.INPUT_MOUSE,
-		Mi: MOUSEINPUT{
-			Dx:          dx,
-			Dy:          dy,
-			MouseData:   uint32(0),
-			DwFlags:     dwFlags,
-			Time:        uint32(0),
-			DwExtraInfo: uintptr(0)}}
-
-	actions := [1]MOUSE_INPUT{mouseInput}
-
-	if success, err := win32wam.SendInput(uint32(2), unsafe.Pointer(&actions), int32(unsafe.Sizeof(mouseInput))); success > 0 {
-		return nil
-	} else {
-		return err
-	}
-}
-
-func getDX(x int32) int32 {
-	return getDAxisValue(x, win32wam.SM_CXSCREEN)
-}
-
-func getDY(y int32) int32 {
-	return getDAxisValue(y, win32wam.SM_CYSCREEN)
-}
-
-func getDAxisValue(axisValue, systemMetricConstant int32) int32 {
-	if metric, err := win32wam.GetSystemMetrics(systemMetricConstant); err == nil {
-		return (axisValue * 65536) / metric
-	} else {
-		logging.Errorf("Error getting D Axis value: %v", err)
-		return 0
-	}
-}
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/services/process/process.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/services/process/process.go
deleted file mode 100644
index 0c080ccb2..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/services/process/process.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// +build windows
-package process
-
-import (
-	"syscall"
-
-	win32ss "github.com/RedHatQE/gowinx/pkg/win32/api/system-services"
-	win32wam "github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-and-messages"
-)
-
-const MEM_COMMIT = 0x1000
-const PAGE_READWRITE = 0x04
-
-// Get a process handler for the process holding the window (ux element, represented by its handler)
-// This is required in order to run communications with the window.
-func GetProcessHandler(windowHandler syscall.Handle) (processHandler syscall.Handle, err error) {
-	var tbProcessID uint32
-	windowCreatorThreadId, err := win32wam.GetWindowThreadProcessId(windowHandler, &tbProcessID)
-	if windowCreatorThreadId > 0 {
-		processHandler, err = win32ss.OpenProcessAllAccess(false, tbProcessID)
-	}
-	return
-}
-
-func CloseProcessHandler(processHandler syscall.Handle) error {
-	if success, err := win32ss.CloseHandle(processHandler); !success {
-		return err
-	}
-	return nil
-}
-
-func AllocateMemory(processHandler syscall.Handle, size int) (uintptr, error) {
-	return win32ss.VirtualAllocEx(processHandler, 0, uintptr(size), MEM_COMMIT, PAGE_READWRITE)
-}
-
-func FreeMemory(processHandler syscall.Handle, lpBaseAddress uintptr) (bool, error) {
-	return win32ss.VirtualFreeEx(processHandler, lpBaseAddress, 0, MEM_COMMIT)
-}
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/ux/toolbar/toolbar.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/ux/toolbar/toolbar.go
deleted file mode 100644
index d147eb999..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/ux/toolbar/toolbar.go
+++ /dev/null
@@ -1,156 +0,0 @@
-// +build windows
-package toolbar
-
-import (
-	"fmt"
-	"math"
-	"syscall"
-	"unsafe"
-
-	"github.com/RedHatQE/gowinx/pkg/util/logging"
-	win32ss "github.com/RedHatQE/gowinx/pkg/win32/api/system-services"
-	win32wam "github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-and-messages"
-	win32process "github.com/RedHatQE/gowinx/pkg/win32/services/process"
-	win32windows "github.com/RedHatQE/gowinx/pkg/win32/ux/windows"
-)
-
-// Toolbars are a way to group commands for efficient access.
-
-const (
-	// Review this 256
-	BUTTONTEXT_MAX_SIZE          = 256
-	BUTTON_DEFAULT_HEIGHT        = 40
-	BUTTON_DEFAULT_WIDHT_HIDDEN  = 40
-	BUTTON_DEFAULT_WIDHT_VISIBLE = 24
-
-	TOOLBAR_TYPE_HIDDEN  = 0
-	TOOLBAR_TYPE_VISIBLE = 1
-
-	TOOLBAR_WINDOW32_CLASS string = "ToolbarWindow32"
-)
-
-// Get an array of toolbars children from a parent window
-func FindToolbars(parentHandler syscall.Handle) ([]syscall.Handle, error) {
-	return win32windows.FindChildWindowsbyClass(parentHandler, TOOLBAR_WINDOW32_CLASS)
-}
-
-// Find the index of a button identified by its tests on a toolbar return error in case
-// the button is not on the toolbar
-func GetButtonClickablePosition(toolbarHandler syscall.Handle, toolbarType int, text string) (int, int, error) {
-	buttonsCount := getButtonsCount(toolbarHandler)
-	for n := 0; n < buttonsCount; n++ {
-		buttonText, _ := getButtonText(toolbarHandler, n)
-		if buttonText == text {
-			logging.Debugf("We found the button %s", buttonText)
-			return calculateButtonPosition(toolbarHandler, toolbarType, n)
-		}
-	}
-	return -1, -1, fmt.Errorf("toolbar does not contain the button")
-}
-
-func calculateButtonPosition(toolbarHandler syscall.Handle, toolbarType int, commandId int) (int, int, error) {
-	index := getButtonIndex(toolbarHandler, commandId)
-	logging.Debugf("Button is at index %d", index)
-	toolbarRect, err := getToolbarRect(toolbarHandler)
-	if err == nil {
-		var buttonWith, row, indexOnRow int
-		if toolbarType == TOOLBAR_TYPE_HIDDEN {
-			buttonWith = BUTTON_DEFAULT_WIDHT_HIDDEN
-			elementsPerRow := int(toolbarRect.Right-toolbarRect.Left) / int(buttonWith)
-			row = index / elementsPerRow
-			indexOnRow = int(math.Mod(float64(index), float64(elementsPerRow)))
-		} else {
-			buttonWith = BUTTON_DEFAULT_WIDHT_VISIBLE
-			row = 0
-			indexOnRow = index
-		}
-		x := (indexOnRow * buttonWith) + int(toolbarRect.Left) + (buttonWith / 2)
-		y := (row * BUTTON_DEFAULT_HEIGHT) + int(toolbarRect.Top) + (BUTTON_DEFAULT_HEIGHT / 2)
-		logging.Debugf("Button is located at row %d on order %d \n its postion would be at x: %d y: %d\n", row, indexOnRow, x, y)
-		return x, y, nil
-	}
-	return -1, -1, fmt.Errorf("can not get button position")
-
-}
-
-func getRowForIndex(index, elementsPerRow int) int {
-	return index / elementsPerRow
-}
-
-func getRelativeIndex(index, elementsPerRow int) int {
-	return int(math.Mod(float64(index), float64(elementsPerRow)))
-}
-
-// Get the toolbar rectangle
-func getToolbarRect(toolbarHandler syscall.Handle) (win32wam.RECT, error) {
-	var rect win32wam.RECT
-	if succeed, err := win32wam.GetWindowRect(toolbarHandler, &rect); succeed {
-		logging.Debugf("Rect for toolbar is t:%d,l:%d,r:%d,b:%d", rect.Top, rect.Left, rect.Right, rect.Bottom)
-		return rect, nil
-	} else {
-		return win32wam.RECT{}, err
-	}
-}
-
-func getButtonsCount(toolbarHandler syscall.Handle) int {
-	buttonsCount, _ := win32wam.SendMessage(toolbarHandler, win32wam.TB_BUTTONCOUNT, 0, 0)
-	return int(buttonsCount)
-}
-
-// Buttons are indentified by commandId on a toolbar, the posistion can be re arranged
-// and it is defined by the index. This function retrieves the button index based on its
-// command id
-func getButtonIndex(toolbarHandler syscall.Handle, commandId int) int {
-	index, _ := win32wam.SendMessage(
-		toolbarHandler,
-		win32wam.TB_COMMANDTOINDEX,
-		uintptr(commandId),
-		0)
-	return int(index)
-}
-
-// To get button text, the communication requires read / write on a memory address, to request
-// the space to OS we need to create a handler process from the thread which created the toolbar
-func getButtonText(toolbarHandler syscall.Handle, commandId int) (string, error) {
-	processHandler, err := win32process.GetProcessHandler(toolbarHandler)
-	if processHandler > 0 {
-		infoBaseAddress, err := win32process.AllocateMemory(processHandler, BUTTONTEXT_MAX_SIZE)
-		if infoBaseAddress > 0 {
-			length := requestButtonText(toolbarHandler, commandId, infoBaseAddress)
-			text, err := readButtonText(processHandler, infoBaseAddress, 2*length)
-			// should define how to treat memory and process free errors.
-			win32process.FreeMemory(processHandler, infoBaseAddress)
-			win32process.CloseProcessHandler(processHandler)
-			return text, err
-		}
-		return "", err
-	}
-	return "", err
-}
-
-// Tell toolbar handler to put the text of the button identified by the command id, on a memory address
-func requestButtonText(toolbarHandler syscall.Handle, commandId int, memoryBaseAddress uintptr) (textlength int) {
-	length, _ := win32wam.SendMessage(
-		toolbarHandler,
-		win32wam.TB_GETBUTTONTEXT,
-		uintptr(commandId),
-		memoryBaseAddress)
-	textlength = int(length)
-	return
-}
-
-// Read text of the button on a memory address
-func readButtonText(processHandler syscall.Handle, memoryBaseAddress uintptr, length int) (text string, err error) {
-	n := make([]uint16, BUTTONTEXT_MAX_SIZE)
-	var numRead uintptr
-	p := &n[0]
-	dataRead, err := win32ss.ReadProcessMemory(processHandler, memoryBaseAddress,
-		uintptr(unsafe.Pointer(p)),
-		uintptr(length),
-		&numRead)
-	if dataRead {
-		text = syscall.UTF16ToString(n)
-		logging.Debugf("Button text is %s", text)
-	}
-	return
-}
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/ux/ux.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/ux/ux.go
deleted file mode 100644
index 0b792f9bc..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/ux/ux.go
+++ /dev/null
@@ -1,178 +0,0 @@
-// +build windows
-
-package ux
-
-import (
-	"fmt"
-
-	"github.com/RedHatQE/gowinx/pkg/util/logging"
-	win32waf "github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-accesibility-features"
-	"github.com/RedHatQE/gowinx/pkg/win32/interaction"
-	wa "github.com/openstandia/w32uiautomation"
-)
-
-const (
-	WINDOW   = "window"
-	BUTTON   = "button"
-	LIST     = "list"
-	LISTITEM = "listitem"
-	GROUP    = "group"
-	TEXT     = "text"
-	MENU     = "menu"
-	MENUITEM = "menuitem"
-	CHECKBOX = "checkbox"
-	EDIT     = "edit"
-	PANE     = "pane"
-	COMBOBOX = "combobox"
-
-	windowId   = wa.UIA_WindowControlTypeId
-	buttonId   = wa.UIA_ButtonControlTypeId
-	listId     = wa.UIA_ListControlTypeId
-	listitemId = wa.UIA_ListItemControlTypeId
-	groupId    = wa.UIA_GroupControlTypeId
-	textId     = wa.UIA_TextControlTypeId
-	menuId     = wa.UIA_MenuControlTypeId
-	menuitemId = wa.UIA_MenuItemControlTypeId
-	checkboxId = wa.UIA_CheckBoxControlTypeId
-	editId     = wa.UIA_EditControlTypeId
-	paneId     = wa.UIA_PaneControlTypeId
-	comboboxId = wa.UIA_ComboBoxControlTypeId
-)
-
-var elementTypes map[string]int64 = map[string]int64{
-	WINDOW:   windowId,
-	BUTTON:   buttonId,
-	LIST:     listId,
-	LISTITEM: listitemId,
-	GROUP:    groupId,
-	TEXT:     textId,
-	MENU:     menuId,
-	MENUITEM: menuitemId,
-	CHECKBOX: checkboxId,
-	EDIT:     editId,
-	PANE:     paneId,
-	COMBOBOX: comboboxId}
-
-type UXElement struct {
-	name        string
-	elementType string
-	ref         interface{}
-}
-
-func Initialize() {
-	// Initialize context
-	win32waf.Initalize()
-}
-
-func Finalize() {
-	// Finalize context
-	win32waf.Finalize()
-}
-
-func GetActiveElement(name string, elementType string) (*UXElement, error) {
-	logging.Debugf("Get %s: %s", elementType, name)
-	if elementTypeId, ok := elementTypes[elementType]; !ok {
-		return nil, fmt.Errorf("Error elementType %s is not supported", elementType)
-	} else {
-		if element, err := win32waf.GetActiveElement(name, elementTypeId); err != nil || element == nil {
-			return nil, fmt.Errorf("Error getting element %s, with error %v", name, err)
-		} else {
-			return &UXElement{
-				name:        name,
-				elementType: elementType,
-				ref:         element}, nil
-		}
-	}
-}
-
-func (u UXElement) GetName() string {
-	return u.name
-}
-
-func (u UXElement) GetFullName() string {
-	return fmt.Sprintf("%s: %s", u.elementType, u.name)
-}
-
-func (u UXElement) Click() error {
-	logging.Debug("Click on %s", u.GetFullName())
-	if u.elementType == CHECKBOX {
-		return wa.Invoke(u.ref.(*wa.IUIAutomationElement))
-	} else {
-		position, err := win32waf.GetElementRect(u.ref.(*wa.IUIAutomationElement))
-		if err != nil {
-			return err
-		}
-		return interaction.ClickOnRect(*position)
-	}
-}
-
-func (u UXElement) SetValue(value string) error {
-	logging.Debug("setting value %s on %s", value, u.GetFullName())
-	if u.elementType != EDIT {
-		return fmt.Errorf("Error elementType %s is not supported", u.elementType)
-	}
-	return win32waf.SetElementValue(u.ref.(*wa.IUIAutomationElement), value)
-
-}
-
-func (u UXElement) GetElement(name string, elementType string) (*UXElement, error) {
-	if elementTypeId, ok := elementTypes[elementType]; !ok {
-		return nil, fmt.Errorf("Error elementType %s is not supported", elementType)
-	} else {
-		if element, err := win32waf.GetElementFromParent(u.ref.(*wa.IUIAutomationElement), name, elementTypeId); err != nil || element == nil {
-			return nil, fmt.Errorf("%s not found on parent %s", elementType, u.GetFullName())
-		} else {
-			logging.Debugf("Get first %s on parent %s", elementType, u.GetFullName())
-			return &UXElement{
-				name:        name,
-				elementType: elementType,
-				ref:         element}, nil
-		}
-	}
-}
-
-func (u UXElement) GetElementByType(elementType string) (*UXElement, error) {
-	if elementTypeId, ok := elementTypes[elementType]; !ok {
-		return nil, fmt.Errorf("Error elementType %s is not supported", elementType)
-	} else {
-		if element, err := win32waf.GetElementFromParentByType(u.ref.(*wa.IUIAutomationElement), elementTypeId); err != nil || element == nil {
-			return nil, fmt.Errorf("%s not found on parent %s", elementType, u.GetFullName())
-		} else {
-			name, err := element.Get_CurrentName()
-			if err != nil {
-				logging.Error(err)
-			}
-			logging.Debugf("Get first %s on parent %s", elementType, u.GetFullName())
-			return &UXElement{
-				name:        name,
-				elementType: elementType,
-				ref:         element}, nil
-		}
-	}
-}
-
-func (u UXElement) GetAllChildren(elementType string) ([]*UXElement, error) {
-	logging.Debugf("Get all %s on parent %s ", elementType, u.name)
-	if elementTypeId, ok := elementTypes[elementType]; !ok {
-		return nil, fmt.Errorf("Error elementType %s is not supported", elementType)
-	} else {
-		var children []*UXElement
-		elements, err := win32waf.GetAllChildren(u.ref.(*wa.IUIAutomationElement), elementTypeId)
-		if err != nil {
-			return nil, fmt.Errorf("Error getting %s on parent %s with error %v", elementType, u.GetFullName(), err)
-		}
-		childrenCount, err := elements.Get_Length()
-		if err != nil {
-			return nil, fmt.Errorf("Error getting %s on parent %s with error %v", elementType, u.GetFullName(), err)
-		}
-		var i int32
-		for i = 0; i < childrenCount; i++ {
-			if element, err := elements.GetElement(i); err == nil {
-				children = append(children, &UXElement{
-					elementType: elementType,
-					ref:         element})
-			}
-		}
-		return children, nil
-	}
-}
diff --git a/vendor/github.com/RedHatQE/gowinx/pkg/win32/ux/windows/windows.go b/vendor/github.com/RedHatQE/gowinx/pkg/win32/ux/windows/windows.go
deleted file mode 100644
index 4ddf2e8ca..000000000
--- a/vendor/github.com/RedHatQE/gowinx/pkg/win32/ux/windows/windows.go
+++ /dev/null
@@ -1,147 +0,0 @@
-// +build windows
-
-package windows
-
-import (
-	"fmt"
-	"strings"
-	"syscall"
-
-	"github.com/RedHatQE/gowinx/pkg/util/logging"
-	win32wam "github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-and-messages"
-)
-
-// To get a windows by title among all the windows on the system, it is required
-// to loop over all the windows and get the one with the same title text
-func FindWindowByTitle(title string) (syscall.Handle, error) {
-	var hwnd syscall.Handle
-	cb := syscall.NewCallback(func(h syscall.Handle, p uintptr) uintptr {
-		b := make([]uint16, 200)
-		_, err := win32wam.GetWindowText(h, &b[0], int32(len(b)))
-		if err != nil {
-			// ignore the error
-			return 1 // continue enumeration
-		}
-		if syscall.UTF16ToString(b) == title {
-			// note the window
-			hwnd = h
-			return 0 // stop enumeration
-		}
-		return 1 // continue enumeration
-	})
-	win32wam.EnumWindows(cb, 0)
-	if hwnd == 0 {
-		return 0, fmt.Errorf("No window with title '%s' found", title)
-	}
-	return hwnd, nil
-}
-
-func FindWindowByClass(class string) (syscall.Handle, error) {
-	z := uint16(0)
-	return win32wam.FindWindowW(syscall.StringToUTF16Ptr(class), &z)
-}
-
-func FindWindowExByClass(parentHandler syscall.Handle, class string) (syscall.Handle, error) {
-	z := uint16(0)
-	return win32wam.FindWindowEx(parentHandler, syscall.Handle(0), syscall.StringToUTF16Ptr(class), &z)
-}
-
-// Get all child windows whith class
-func FindChildWindowsbyClass(hwndParent syscall.Handle, class string) ([]syscall.Handle, error) {
-	var hwnds []syscall.Handle
-	cb := syscall.NewCallback(func(h syscall.Handle, p uintptr) uintptr {
-		elementClassName, err := win32wam.GetClassName(h)
-		if err != nil {
-			return 1 // continue enumeration
-		}
-		if elementClassName == class {
-			hwnds = append(hwnds, h)
-		}
-		return 1 // continue enumeration
-	})
-	win32wam.EnumChildWindows(hwndParent, cb, 0)
-	if len(hwnds) == 0 {
-		return hwnds, fmt.Errorf("No child element with classname %s\n", class)
-	}
-	return hwnds, nil
-}
-
-// Get child window with title
-func FindChildWindowByTitle(hwndParent syscall.Handle, title string) (syscall.Handle, int32, error) {
-	var hwnd syscall.Handle
-	var elementIndex int32
-	cb := syscall.NewCallback(func(h syscall.Handle, p uintptr) uintptr {
-		b := make([]uint16, 200)
-		_, err := win32wam.GetWindowText(h, &b[0], int32(len(b)))
-		if err != nil {
-			elementIndex++
-		}
-		elementTitle := syscall.UTF16ToString(b)
-		logging.Debugf("looking for child elements got: %s", elementTitle)
-		if elementTitle == title {
-			hwnd = h
-			return 0 // stop enumeration
-		}
-		elementIndex++
-		return 1 // continue enumeration
-	})
-	win32wam.EnumChildWindows(hwndParent, cb, 0)
-	if hwnd == 0 {
-		logging.Errorf("Error the expected element with title %s", title)
-		return 0, 0, fmt.Errorf("No window with title '%s' found", title)
-	}
-	return hwnd, elementIndex, nil
-}
-
-// Get all child windows whith class
-func FindChildWindowsbyClassAndTitle(hwndParent syscall.Handle, class, title string) (syscall.Handle, error) {
-	var hwnd syscall.Handle
-	cb := syscall.NewCallback(func(h syscall.Handle, p uintptr) uintptr {
-		elementClassName, err := win32wam.GetClassName(h)
-		if err != nil {
-			return 1 // continue enumeration
-		}
-		if elementClassName == class {
-			b := make([]uint16, 200)
-			_, err := win32wam.GetWindowText(h, &b[0], int32(len(b)))
-			if err != nil {
-				return 1 // continue enumeration
-			}
-			elementTitle := syscall.UTF16ToString(b)
-			logging.Debugf("looking for child elements got: %s", elementTitle)
-			if strings.Contains(strings.ToLower(elementTitle), strings.ToLower(title)) {
-				hwnd = h
-				return 0 // stop enumeration
-			}
-		}
-		return 1 // continue enumeration
-	})
-	win32wam.EnumChildWindows(hwndParent, cb, 0)
-	if hwnd == 0 {
-		return 0, fmt.Errorf("No child element with classname %s\n", class)
-	}
-	return hwnd, nil
-}
-
-// Get all child windows whith class
-func FindChildren(hwndParent syscall.Handle) ([]syscall.Handle, error) {
-	var hwnds []syscall.Handle
-	cb := syscall.NewCallback(func(h syscall.Handle, p uintptr) uintptr {
-		elementClassName, err := win32wam.GetClassName(h)
-		if err != nil {
-			return 1 // continue enumeration
-		}
-		logging.Debugf("looking for child elements got: %s", elementClassName)
-		b := make([]uint16, 200)
-		_, err = win32wam.GetWindowText(h, &b[0], int32(len(b)))
-		if err != nil {
-			return 1 // continue enumeration
-		}
-		elementTitle := syscall.UTF16ToString(b)
-		logging.Debugf("looking for child elements got: %s", elementTitle)
-		hwnds = append(hwnds, h)
-		return 1 // continue enumeration
-	})
-	win32wam.EnumChildWindows(hwndParent, cb, 0)
-	return hwnds, nil
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/LICENSE b/vendor/github.com/openstandia/w32uiautomation/LICENSE
deleted file mode 100644
index f8bdc17ec..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Hiroaki Nakamura
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/vendor/github.com/openstandia/w32uiautomation/README.md b/vendor/github.com/openstandia/w32uiautomation/README.md
deleted file mode 100644
index ce43d5983..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-w32uiautomation
-===============
-
-A library written in Go for Windows UI Automation.
-
-I am not intended to cover all APIs in Windows UI Automation API.
-I'd rather implement minimal features for my use cases.
-
-## License
-
-MIT
diff --git a/vendor/github.com/openstandia/w32uiautomation/controltypeids.go b/vendor/github.com/openstandia/w32uiautomation/controltypeids.go
deleted file mode 100644
index 82a4cd3ef..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/controltypeids.go
+++ /dev/null
@@ -1,43 +0,0 @@
-package w32uiautomation
-
-const (
-	UIA_ButtonControlTypeId      = 50000
-	UIA_CalendarControlTypeId    = 50001
-	UIA_CheckBoxControlTypeId    = 50002
-	UIA_ComboBoxControlTypeId    = 50003
-	UIA_EditControlTypeId        = 50004
-	UIA_HyperlinkControlTypeId   = 50005
-	UIA_ImageControlTypeId       = 50006
-	UIA_ListItemControlTypeId    = 50007
-	UIA_ListControlTypeId        = 50008
-	UIA_MenuControlTypeId        = 50009
-	UIA_MenuBarControlTypeId     = 50010
-	UIA_MenuItemControlTypeId    = 50011
-	UIA_ProgressBarControlTypeId = 50012
-	UIA_RadioButtonControlTypeId = 50013
-	UIA_ScrollBarControlTypeId   = 50014
-	UIA_SliderControlTypeId      = 50015
-	UIA_SpinnerControlTypeId     = 50016
-	UIA_StatusBarControlTypeId   = 50017
-	UIA_TabControlTypeId         = 50018
-	UIA_TabItemControlTypeId     = 50019
-	UIA_TextControlTypeId        = 50020
-	UIA_ToolBarControlTypeId     = 50021
-	UIA_ToolTipControlTypeId     = 50022
-	UIA_TreeControlTypeId        = 50023
-	UIA_TreeItemControlTypeId    = 50024
-	UIA_CustomControlTypeId      = 50025
-	UIA_GroupControlTypeId       = 50026
-	UIA_ThumbControlTypeId       = 50027
-	UIA_DataGridControlTypeId    = 50028
-	UIA_DataItemControlTypeId    = 50029
-	UIA_DocumentControlTypeId    = 50030
-	UIA_SplitButtonControlTypeId = 50031
-	UIA_WindowControlTypeId      = 50032
-	UIA_PaneControlTypeId        = 50033
-	UIA_HeaderControlTypeId      = 50034
-	UIA_HeaderItemControlTypeId  = 50035
-	UIA_TableControlTypeId       = 50036
-	UIA_TitleBarControlTypeId    = 50037
-	UIA_SeparatorControlTypeId   = 50038
-)
diff --git a/vendor/github.com/openstandia/w32uiautomation/eventid.go b/vendor/github.com/openstandia/w32uiautomation/eventid.go
deleted file mode 100644
index ee1c0bc3e..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/eventid.go
+++ /dev/null
@@ -1,43 +0,0 @@
-package w32uiautomation
-
-type EVENTID uintptr
-
-const (
-	UIA_ActiveTextPositionChangedEventId                 = 20032 // Identifies the event that is raised when the active text position changes, indicated by a navigation event within or between read-only text elements (such as web browsers, PDF documents, or EPUB documents) using bookmarks (fragment identifiers that refer to a location within a resource).
-	UIA_AsyncContentLoadedEventId                        = 20006 // Identifies the event that is raised when asynchronous content is being loaded. This event is used mainly by providers to indicate that asynchronous content-loading events have occurred.
-	UIA_AutomationFocusChangedEventId                    = 20005 // Identifies the event that is raised when the focus has changed from one element to another.
-	UIA_AutomationPropertyChangedEventId                 = 20004 // Identifies the event that is raised when the value of a property has changed.
-	UIA_ChangesEventId                                   = 20034 // Identifies the event that is raised when a provider calls the UiaRaiseChangesEvent function.
-	UIA_Drag_DragCancelEventId                           = 20027 // Identifies the event that is raised when the user ends a drag operation before dropping an element on a drop target. This event is raised by the element being dragged. Supported starting with Windows 8.
-	UIA_Drag_DragCompleteEventId                         = 20028 // Identifies the event that is raised when the user drops an element on a drop target. This event is raised by the element being dragged. Supported starting with Windows 8.
-	UIA_Drag_DragStartEventId                            = 20026 // Identifies the event that is raised when the user starts to drag an element. This event is raised by the element being dragged. Supported starting with Windows 8.
-	UIA_DropTarget_DragEnterEventId                      = 20029 // Identifies the event that is raised when the user drags an element into a drop target's boundary. This event is raised by the drop target element. Supported starting with Windows 8.
-	UIA_DropTarget_DragLeaveEventId                      = 20030 // Identifies the event that is raised when the user drags an element out of a drop target's boundary. This event is raised by the drop target element. Supported starting with Windows 8.
-	UIA_DropTarget_DroppedEventId                        = 20031 // Identifies the event that is raised when the user drops an element on a drop target. This event is raised by the drop target element. Supported starting with Windows 8.
-	UIA_HostedFragmentRootsInvalidatedEventId            = 20025 // Identifies the event that is raised when a change is made to the root node of a UI Automation fragment that is hosted in another element. Supported starting with Windows 8.
-	UIA_InputDiscardedEventId                            = 20022 // Identifies the event that is raised when the specified input was discarded or otherwise failed to reach any element.
-	UIA_InputReachedOtherElementEventId                  = 20021 // Identifies the event that is raised when the specified input reached an element other than the element for which the StartListening method was called.
-	UIA_InputReachedTargetEventId                        = 20020 // Identifies the event that is raised when the specified mouse or keyboard input reaches the element for which the StartListening method was called.
-	UIA_Invoke_InvokedEventId                            = 20009 // Identifies the event that is raised when a control is invoked or activated.
-	UIA_LayoutInvalidatedEventId                         = 20008 // Identifies the event that is raised when the layout of child items within a control has changed. This event is also used for Auto-suggest accessibility.
-	UIA_LiveRegionChangedEventId                         = 20024 // Identifies the event that is raised when the content of a live region has changed. Supported starting with Windows 8.
-	UIA_MenuClosedEventId                                = 20007 // Identifies the event that is raised when a menu is closed.
-	UIA_MenuModeEndEventId                               = 20019 // Identifies the event that is raised when a menu mode is ended.
-	UIA_MenuModeStartEventId                             = 20018 // Identifies the event that is raised when a menu mode is started.
-	UIA_MenuOpenedEventId                                = 20003 // Identifies the event that is raised when a menu is opened.
-	UIA_NotificationEventId                              = 20035 // Identifies the event that is raised when a provider calls the UiaRaiseNotificationEvent method.
-	UIA_Selection_InvalidatedEventId                     = 20013 // Identifies the event that is raised when a selection in a container has changed significantly.
-	UIA_SelectionItem_ElementAddedToSelectionEventId     = 20010 // Identifies the event raised when an item is added to a collection of selected items.
-	UIA_SelectionItem_ElementRemovedFromSelectionEventId = 20011 // Identifies the event raised when an item is removed from a collection of selected items.
-	UIA_SelectionItem_ElementSelectedEventId             = 20012 // Identifies the event that is raised when a call to the Select, AddToSelection, or RemoveFromSelection method results in a single item being selected.
-	UIA_StructureChangedEventId                          = 20002 // Identifies the event that is raised when the UI Automation tree structure is changed.
-	UIA_SystemAlertEventId                               = 20023 // Identifies the event that is raised when a provider issues a system alert. Supported starting with Windows 8.
-	UIA_Text_TextChangedEventId                          = 20015 // Identifies the event that is raised whenever textual content is modified.
-	UIA_Text_TextSelectionChangedEventId                 = 20014 // Identifies the event that is raised when the text selection is modified.
-	UIA_TextEdit_ConversionTargetChangedEventId          = 20033 // Identifies the event that is raised whenever a composition replacement is performed by a control. Supported starting with Windows 8.1.
-	UIA_TextEdit_TextChangedEventId                      = 20032 // Identifies the event that is raised whenever text auto-correction is performed by a control. Supported starting with Windows 8.1.
-	UIA_ToolTipClosedEventId                             = 20001 // Identifies the event that is raised when a tooltip is closed.
-	UIA_ToolTipOpenedEventId                             = 20000 // Identifies the event that is raised when a tooltip is opened.
-	UIA_Window_WindowClosedEventId                       = 20017 // Identifies the event that is raised when a window is closed.
-	UIA_Window_WindowOpenedEventId                       = 20016 // Identifies the event that is raised when a window is opened.
-)
diff --git a/vendor/github.com/openstandia/w32uiautomation/expandcollapse.go b/vendor/github.com/openstandia/w32uiautomation/expandcollapse.go
deleted file mode 100644
index be8de0253..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/expandcollapse.go
+++ /dev/null
@@ -1,44 +0,0 @@
-package w32uiautomation
-
-import "unsafe"
-
-func Expand(element *IUIAutomationElement) error {
-	pattern, err := getExpandCollapsePattern(element)
-	if err != nil {
-		return err
-	}
-	defer pattern.Release()
-	err = pattern.Expand()
-	if err != nil {
-		return err
-	}
-	return nil
-}
-
-func Collapse(element *IUIAutomationElement) error {
-	pattern, err := getExpandCollapsePattern(element)
-	if err != nil {
-		return err
-	}
-	defer pattern.Release()
-	err = pattern.Collapse()
-	if err != nil {
-		return err
-	}
-	return nil
-}
-
-func getExpandCollapsePattern(element *IUIAutomationElement) (*IUIAutomationExpandCollapsePattern, error) {
-	unknown, err := element.GetCurrentPattern(UIA_ExpandCollapsePatternId)
-	if err != nil {
-		return nil, err
-	}
-	defer unknown.Release()
-
-	disp, err := unknown.QueryInterface(IID_IUIAutomationExpandCollapsePattern)
-	if err != nil {
-		return nil, err
-	}
-
-	return (*IUIAutomationExpandCollapsePattern)(unsafe.Pointer(disp)), nil
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/invoke.go b/vendor/github.com/openstandia/w32uiautomation/invoke.go
deleted file mode 100644
index 997c71600..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/invoke.go
+++ /dev/null
@@ -1,24 +0,0 @@
-package w32uiautomation
-
-import "unsafe"
-
-func Invoke(element *IUIAutomationElement) error {
-	unknown, err := element.GetCurrentPattern(UIA_InvokePatternId)
-	if err != nil {
-		return err
-	}
-	defer unknown.Release()
-
-	disp, err := unknown.QueryInterface(IID_IUIAutomationInvokePattern)
-	if err != nil {
-		return err
-	}
-
-	pattern := (*IUIAutomationInvokePattern)(unsafe.Pointer(disp))
-	defer pattern.Release()
-	err = pattern.Invoke()
-	if err != nil {
-		return err
-	}
-	return nil
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/iuiautomation.go b/vendor/github.com/openstandia/w32uiautomation/iuiautomation.go
deleted file mode 100644
index 57618affe..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/iuiautomation.go
+++ /dev/null
@@ -1,276 +0,0 @@
-package w32uiautomation
-
-import (
-	"syscall"
-	"unsafe"
-
-	ole "github.com/go-ole/go-ole"
-)
-
-type IUIAutomation struct {
-	ole.IUnknown
-}
-
-type IUIAutomationVtbl struct {
-	ole.IUnknownVtbl
-	CompareElements                           uintptr
-	CompareRuntimeIds                         uintptr
-	GetRootElement                            uintptr
-	ElementFromHandle                         uintptr
-	ElementFromPoint                          uintptr
-	GetFocusedElement                         uintptr
-	GetRootElementBuildCache                  uintptr
-	ElementFromHandleBuildCache               uintptr
-	ElementFromPointBuildCache                uintptr
-	GetFocusedElementBuildCache               uintptr
-	CreateTreeWalker                          uintptr
-	Get_ControlViewWalker                     uintptr
-	Get_ContentViewWalker                     uintptr
-	Get_RawViewWalker                         uintptr
-	Get_RawViewCondition                      uintptr
-	Get_ControlViewCondition                  uintptr
-	Get_ContentViewCondition                  uintptr
-	CreateCacheRequest                        uintptr
-	CreateTrueCondition                       uintptr
-	CreateFalseCondition                      uintptr
-	CreatePropertyCondition                   uintptr
-	CreatePropertyConditionEx                 uintptr
-	CreateAndCondition                        uintptr
-	CreateAndConditionFromArray               uintptr
-	CreateAndConditionFromNativeArray         uintptr
-	CreateOrCondition                         uintptr
-	CreateOrConditionFromArray                uintptr
-	CreateOrConditionFromNativeArray          uintptr
-	CreateNotCondition                        uintptr
-	AddAutomationEventHandler                 uintptr
-	RemoveAutomationEventHandler              uintptr
-	AddPropertyChangedEventHandlerNativeArray uintptr
-	AddPropertyChangedEventHandler            uintptr
-	RemovePropertyChangedEventHandler         uintptr
-	AddStructureChangedEventHandler           uintptr
-	RemoveStructureChangedEventHandler        uintptr
-	AddFocusChangedEventHandler               uintptr
-	RemoveFocusChangedEventHandler            uintptr
-	RemoveAllEventHandlers                    uintptr
-	IntNativeArrayToSafeArray                 uintptr
-	IntSafeArrayToNativeArray                 uintptr
-	RectToVariant                             uintptr
-	VariantToRect                             uintptr
-	SafeArrayToRectNativeArray                uintptr
-	CreateProxyFactoryEntry                   uintptr
-	Get_ProxyFactoryMapping                   uintptr
-	GetPropertyProgrammaticName               uintptr
-	GetPatternProgrammaticName                uintptr
-	PollForPotentialSupportedPatterns         uintptr
-	PollForPotentialSupportedProperties       uintptr
-	CheckNotSupported                         uintptr
-	Get_ReservedNotSupportedValue             uintptr
-	Get_ReservedMixedAttributeValue           uintptr
-	ElementFromIAccessible                    uintptr
-	ElementFromIAccessibleBuildCache          uintptr
-}
-
-var CLSID_CUIAutomation = &ole.GUID{0xff48dba4, 0x60ef, 0x4201, [8]byte{0xaa, 0x87, 0x54, 0x10, 0x3e, 0xef, 0x59, 0x4e}}
-
-var IID_IUIAutomation = &ole.GUID{0x30cbe57d, 0xd9d0, 0x452a, [8]byte{0xab, 0x13, 0x7a, 0xc5, 0xac, 0x48, 0x25, 0xee}}
-
-func (v *IUIAutomation) VTable() *IUIAutomationVtbl {
-	return (*IUIAutomationVtbl)(unsafe.Pointer(v.RawVTable))
-}
-
-func NewUIAutomation() (*IUIAutomation, error) {
-	auto, err := ole.CreateInstance(CLSID_CUIAutomation, IID_IUIAutomation)
-	if err != nil {
-		return nil, err
-	}
-	return (*IUIAutomation)(unsafe.Pointer(auto)), nil
-}
-
-func (auto *IUIAutomation) CompareElements(el1, el2 *IUIAutomation) (areSame bool, err error) {
-	return compareElements(auto, el1, el2)
-}
-
-func (auto *IUIAutomation) GetRootElement() (root *IUIAutomationElement, err error) {
-	return getRootElement(auto)
-}
-
-func (auto *IUIAutomation) CreateTreeWalker(condition *IUIAutomationCondition) (walker *IUIAutomationTreeWalker, err error) {
-	return createTreeWalker(auto, condition)
-}
-
-func (auto *IUIAutomation) CreateTrueCondition() (newCondition *IUIAutomationCondition, err error) {
-	return createTrueCondition(auto)
-}
-
-func (auto *IUIAutomation) CreateAndCondition(condition1, condition2 *IUIAutomationCondition) (newCondition *IUIAutomationCondition, err error) {
-	return createAndCondition(auto, condition1, condition2)
-}
-
-func (auto *IUIAutomation) CreatePropertyCondition(propertyId PROPERTYID, value ole.VARIANT) (newCondition *IUIAutomationCondition, err error) {
-	return createPropertyCondition(auto, propertyId, value)
-}
-
-func (auto *IUIAutomation) AddAutomationEventHandler(eventId EVENTID, element *IUIAutomationElement, scope TreeScope, cacheRequest *IUIAutomationCacheRequest, handler *IUIAutomationEventHandler) error {
-	return addAutomationEventHandler(auto, eventId, element, scope, cacheRequest, handler)
-}
-
-func (auto *IUIAutomation) RemoveAutomationEventHandler(eventId EVENTID, element *IUIAutomationElement, handler *IUIAutomationEventHandler) error {
-	return removeAutomationEventHandler(auto, eventId, element, handler)
-}
-
-func (auto *IUIAutomation) AddStructureChangedEventHandler(element *IUIAutomationElement, scope TreeScope, cacheRequest *IUIAutomationCacheRequest, handler *IUIAutomationStructureChangedEventHandler) error {
-	return addStructureChangedEventHandler(auto, element, scope, cacheRequest, handler)
-}
-
-func (auto *IUIAutomation) RemoveStructureChangedEventHandler(element *IUIAutomationElement, handler *IUIAutomationStructureChangedEventHandler) error {
-	return removeStructureChangedEventHandler(auto, element, handler)
-}
-
-func (auto *IUIAutomation) RemoveAllEventHandlers() error {
-	return removeAllEventHandlers(auto)
-}
-
-func compareElements(auto *IUIAutomation, el1, el2 *IUIAutomation) (areSame bool, err error) {
-	hr, _, _ := syscall.Syscall6(
-		auto.VTable().CompareElements,
-		4,
-		uintptr(unsafe.Pointer(auto)),
-		uintptr(unsafe.Pointer(el1)),
-		uintptr(unsafe.Pointer(el2)),
-		uintptr(unsafe.Pointer(&areSame)),
-		0,
-		0)
-	if hr != 0 {
-		err = ole.NewError(hr)
-	}
-	return
-}
-
-func getRootElement(auto *IUIAutomation) (root *IUIAutomationElement, err error) {
-	hr, _, _ := syscall.Syscall(
-		auto.VTable().GetRootElement,
-		3,
-		uintptr(unsafe.Pointer(auto)),
-		uintptr(unsafe.Pointer(&root)),
-		0)
-	if hr != 0 {
-		err = ole.NewError(hr)
-	}
-	return
-}
-
-func createTreeWalker(auto *IUIAutomation, condition *IUIAutomationCondition) (walker *IUIAutomationTreeWalker, err error) {
-	hr, _, _ := syscall.Syscall(
-		auto.VTable().CreateTreeWalker,
-		3,
-		uintptr(unsafe.Pointer(auto)),
-		uintptr(unsafe.Pointer(condition)),
-		uintptr(unsafe.Pointer(&walker)))
-	if hr != 0 {
-		err = ole.NewError(hr)
-	}
-	return
-}
-
-func createTrueCondition(auto *IUIAutomation) (newCondition *IUIAutomationCondition, err error) {
-	hr, _, _ := syscall.Syscall(
-		auto.VTable().CreateTrueCondition,
-		2,
-		uintptr(unsafe.Pointer(auto)),
-		uintptr(unsafe.Pointer(&newCondition)),
-		0)
-	if hr != 0 {
-		err = ole.NewError(hr)
-	}
-	return
-}
-
-func createAndCondition(auto *IUIAutomation, condition1, condition2 *IUIAutomationCondition) (newCondition *IUIAutomationCondition, err error) {
-	hr, _, _ := syscall.Syscall6(
-		auto.VTable().CreateAndCondition,
-		4,
-		uintptr(unsafe.Pointer(auto)),
-		uintptr(unsafe.Pointer(condition1)),
-		uintptr(unsafe.Pointer(condition2)),
-		uintptr(unsafe.Pointer(&newCondition)),
-		0,
-		0)
-	if hr != 0 {
-		err = ole.NewError(hr)
-	}
-	return
-}
-
-func addAutomationEventHandler(auto *IUIAutomation, eventId EVENTID, element *IUIAutomationElement, scope TreeScope, cacheRequest *IUIAutomationCacheRequest, handler *IUIAutomationEventHandler) error {
-	hr, _, _ := syscall.Syscall6(
-		auto.VTable().AddAutomationEventHandler,
-		6,
-		uintptr(unsafe.Pointer(auto)),
-		uintptr(unsafe.Pointer(eventId)),
-		uintptr(unsafe.Pointer(element)),
-		uintptr(scope),
-		uintptr(unsafe.Pointer(cacheRequest)),
-		uintptr(unsafe.Pointer(handler)))
-	if hr != 0 {
-		return ole.NewError(hr)
-	}
-	return nil
-}
-
-func removeAutomationEventHandler(auto *IUIAutomation, eventId EVENTID, element *IUIAutomationElement, handler *IUIAutomationEventHandler) error {
-	hr, _, _ := syscall.Syscall6(
-		auto.VTable().RemoveAutomationEventHandler,
-		4,
-		uintptr(unsafe.Pointer(auto)),
-		uintptr(unsafe.Pointer(eventId)),
-		uintptr(unsafe.Pointer(element)),
-		uintptr(unsafe.Pointer(handler)),
-		0,
-		0)
-	if hr != 0 {
-		return ole.NewError(hr)
-	}
-	return nil
-}
-
-func addStructureChangedEventHandler(auto *IUIAutomation, element *IUIAutomationElement, scope TreeScope, cacheRequest *IUIAutomationCacheRequest, handler *IUIAutomationStructureChangedEventHandler) error {
-	hr, _, _ := syscall.Syscall6(
-		auto.VTable().AddStructureChangedEventHandler,
-		5,
-		uintptr(unsafe.Pointer(auto)),
-		uintptr(unsafe.Pointer(element)),
-		uintptr(scope),
-		uintptr(unsafe.Pointer(cacheRequest)),
-		uintptr(unsafe.Pointer(handler)),
-		0)
-	if hr != 0 {
-		return ole.NewError(hr)
-	}
-	return nil
-}
-
-func removeStructureChangedEventHandler(auto *IUIAutomation, element *IUIAutomationElement, handler *IUIAutomationStructureChangedEventHandler) error {
-	hr, _, _ := syscall.Syscall(
-		auto.VTable().RemoveStructureChangedEventHandler,
-		3,
-		uintptr(unsafe.Pointer(auto)),
-		uintptr(unsafe.Pointer(element)),
-		uintptr(unsafe.Pointer(handler)))
-	if hr != 0 {
-		return ole.NewError(hr)
-	}
-	return nil
-}
-
-func removeAllEventHandlers(auto *IUIAutomation) error {
-	hr, _, _ := syscall.Syscall(
-		auto.VTable().RemoveAllEventHandlers,
-		1,
-		uintptr(unsafe.Pointer(auto)),
-		0,
-		0)
-	if hr != 0 {
-		return ole.NewError(hr)
-	}
-	return nil
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/iuiautomation_386.go b/vendor/github.com/openstandia/w32uiautomation/iuiautomation_386.go
deleted file mode 100644
index 93f30f9c1..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/iuiautomation_386.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// +build 386
-package w32uiautomation
-
-import (
-	"syscall"
-	"unsafe"
-
-	"github.com/go-ole/go-ole"
-)
-
-func createPropertyCondition(aut *IUIAutomation, propertyId PROPERTYID, value ole.VARIANT) (newCondition *IUIAutomationCondition, err error) {
-	v := VariantToUintptrArray(value)
-	hr, _, _ := syscall.Syscall9(
-		aut.VTable().CreatePropertyCondition,
-		7,
-		uintptr(unsafe.Pointer(aut)),
-		uintptr(propertyId),
-		v[0],
-		v[1],
-		v[2],
-		v[3],
-		uintptr(unsafe.Pointer(&newCondition)),
-		0,
-		0)
-	if hr != 0 {
-		err = ole.NewError(hr)
-	}
-	return
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/iuiautomation_amd64.go b/vendor/github.com/openstandia/w32uiautomation/iuiautomation_amd64.go
deleted file mode 100644
index 5b52cb825..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/iuiautomation_amd64.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build amd64
-package w32uiautomation
-
-import (
-	"syscall"
-	"unsafe"
-
-	ole "github.com/go-ole/go-ole"
-)
-
-func createPropertyCondition(aut *IUIAutomation, propertyId PROPERTYID, value ole.VARIANT) (*IUIAutomationCondition, error) {
-	var newCondition *IUIAutomationCondition
-	hr, _, _ := syscall.Syscall6(
-		aut.VTable().CreatePropertyCondition,
-		4,
-		uintptr(unsafe.Pointer(aut)),
-		uintptr(propertyId),
-		uintptr(unsafe.Pointer(&value)),
-		uintptr(unsafe.Pointer(&newCondition)), 0, 0)
-	if hr != 0 {
-		return nil, ole.NewError(hr)
-	}
-	return newCondition, nil
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/iuiautomationcacherequest.go b/vendor/github.com/openstandia/w32uiautomation/iuiautomationcacherequest.go
deleted file mode 100644
index e7988e310..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/iuiautomationcacherequest.go
+++ /dev/null
@@ -1,21 +0,0 @@
-package w32uiautomation
-
-import (
-	"unsafe"
-
-	"github.com/go-ole/go-ole"
-)
-
-type IUIAutomationCacheRequest struct {
-	ole.IUnknown
-}
-
-type IUIAutomationCacheRequestVtbl struct {
-	ole.IUnknownVtbl
-}
-
-var IID_IUIAutomationCacheRequest = &ole.GUID{0xb32a92b5, 0xbc25, 0x4078, [8]byte{0x9c, 0x08, 0xd7, 0xee, 0x95, 0xc4, 0x8e, 0x03}}
-
-func (elem *IUIAutomationCacheRequest) VTable() *IUIAutomationCacheRequestVtbl {
-	return (*IUIAutomationCacheRequestVtbl)(unsafe.Pointer(elem.RawVTable))
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/iuiautomationcondition.go b/vendor/github.com/openstandia/w32uiautomation/iuiautomationcondition.go
deleted file mode 100644
index 4fab78417..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/iuiautomationcondition.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package w32uiautomation
-
-import (
-	"unsafe"
-
-	"github.com/go-ole/go-ole"
-)
-
-type IUIAutomationCondition struct {
-	ole.IUnknown
-}
-
-type IUIAutomationConditionVtbl struct {
-	ole.IUnknownVtbl
-}
-
-func (v *IUIAutomationCondition) VTable() *IUIAutomationConditionVtbl {
-	return (*IUIAutomationConditionVtbl)(unsafe.Pointer(v.RawVTable))
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/iuiautomationelement.go b/vendor/github.com/openstandia/w32uiautomation/iuiautomationelement.go
deleted file mode 100644
index 8aaa32b51..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/iuiautomationelement.go
+++ /dev/null
@@ -1,307 +0,0 @@
-package w32uiautomation
-
-import (
-	"syscall"
-	"unsafe"
-
-	"github.com/go-ole/go-ole"
-)
-
-type RECT struct {
-	Left   uint32
-	Top    uint32
-	Right  uint32
-	Bottom uint32
-}
-
-type IUIAutomationElement struct {
-	ole.IUnknown
-}
-
-type IUIAutomationElementVtbl struct {
-	ole.IUnknownVtbl
-	SetFocus                        uintptr
-	GetRuntimeId                    uintptr
-	FindFirst                       uintptr
-	FindAll                         uintptr
-	FindFirstBuildCache             uintptr
-	FindAllBuildCache               uintptr
-	BuildUpdatedCache               uintptr
-	GetCurrentPropertyValue         uintptr
-	GetCurrentPropertyValueEx       uintptr
-	GetCachedPropertyValue          uintptr
-	GetCachedPropertyValueEx        uintptr
-	GetCurrentPatternAs             uintptr
-	GetCachedPatternAs              uintptr
-	GetCurrentPattern               uintptr
-	GetCachedPattern                uintptr
-	GetCachedParent                 uintptr
-	GetCachedChildren               uintptr
-	Get_CurrentProcessId            uintptr
-	Get_CurrentControlType          uintptr
-	Get_CurrentLocalizedControlType uintptr
-	Get_CurrentName                 uintptr
-	Get_CurrentAcceleratorKey       uintptr
-	Get_CurrentAccessKey            uintptr
-	Get_CurrentHasKeyboardFocus     uintptr
-	Get_CurrentIsKeyboardFocusable  uintptr
-	Get_CurrentIsEnabled            uintptr
-	Get_CurrentAutomationId         uintptr
-	Get_CurrentClassName            uintptr
-	Get_CurrentHelpText             uintptr
-	Get_CurrentCulture              uintptr
-	Get_CurrentIsControlElement     uintptr
-	Get_CurrentIsContentElement     uintptr
-	Get_CurrentIsPassword           uintptr
-	Get_CurrentNativeWindowHandle   uintptr
-	Get_CurrentItemType             uintptr
-	Get_CurrentIsOffscreen          uintptr
-	Get_CurrentOrientation          uintptr
-	Get_CurrentFrameworkId          uintptr
-	Get_CurrentIsRequiredForForm    uintptr
-	Get_CurrentItemStatus           uintptr
-	Get_CurrentBoundingRectangle    uintptr
-	Get_CurrentLabeledBy            uintptr
-	Get_CurrentAriaRole             uintptr
-	Get_CurrentAriaProperties       uintptr
-	Get_CurrentIsDataValidForForm   uintptr
-	Get_CurrentControllerFor        uintptr
-	Get_CurrentDescribedBy          uintptr
-	Get_CurrentFlowsTo              uintptr
-	Get_CurrentProviderDescription  uintptr
-	Get_CachedProcessId             uintptr
-	Get_CachedControlType           uintptr
-	Get_CachedLocalizedControlType  uintptr
-	Get_CachedName                  uintptr
-	Get_CachedAcceleratorKey        uintptr
-	Get_CachedAccessKey             uintptr
-	Get_CachedHasKeyboardFocus      uintptr
-	Get_CachedIsKeyboardFocusable   uintptr
-	Get_CachedIsEnabled             uintptr
-	Get_CachedAutomationId          uintptr
-	Get_CachedClassName             uintptr
-	Get_CachedHelpText              uintptr
-	Get_CachedCulture               uintptr
-	Get_CachedIsControlElement      uintptr
-	Get_CachedIsContentElement      uintptr
-	Get_CachedIsPassword            uintptr
-	Get_CachedNativeWindowHandle    uintptr
-	Get_CachedItemType              uintptr
-	Get_CachedIsOffscreen           uintptr
-	Get_CachedOrientation           uintptr
-	Get_CachedFrameworkId           uintptr
-	Get_CachedIsRequiredForForm     uintptr
-	Get_CachedItemStatus            uintptr
-	Get_CachedBoundingRectangle     uintptr
-	Get_CachedLabeledBy             uintptr
-	Get_CachedAriaRole              uintptr
-	Get_CachedAriaProperties        uintptr
-	Get_CachedIsDataValidForForm    uintptr
-	Get_CachedControllerFor         uintptr
-	Get_CachedDescribedBy           uintptr
-	Get_CachedFlowsTo               uintptr
-	Get_CachedProviderDescription   uintptr
-	GetClickablePoint               uintptr
-}
-
-var IID_IUIAutomationElement = &ole.GUID{0xd22108aa, 0x8ac5, 0x49a5, [8]byte{0x83, 0x7b, 0x37, 0xbb, 0xb3, 0xd7, 0x59, 0x1e}}
-
-func (elem *IUIAutomationElement) VTable() *IUIAutomationElementVtbl {
-	return (*IUIAutomationElementVtbl)(unsafe.Pointer(elem.RawVTable))
-}
-
-func (elem *IUIAutomationElement) SetFocus() (err error) {
-	return setFocus(elem)
-}
-
-func (elem *IUIAutomationElement) FindAll(scope TreeScope, condition *IUIAutomationCondition) (found *IUIAutomationElementArray, err error) {
-	return findAll(elem, scope, condition)
-}
-
-func (elem *IUIAutomationElement) FindFirst(scope TreeScope, condition *IUIAutomationCondition) (found *IUIAutomationElement, err error) {
-	return findFirst(elem, scope, condition)
-}
-
-func (elem *IUIAutomationElement) GetCurrentPattern(patternId PATTERNID) (*ole.IUnknown, error) {
-	return getCurrentPattern(elem, patternId)
-}
-
-func (elem *IUIAutomationElement) Get_CurrentAutomationId() (string, error) {
-	return get_CurrentAutomationId(elem)
-}
-
-func (elem *IUIAutomationElement) Get_CurrentCurrentClassName() (string, error) {
-	return get_CurrentClassName(elem)
-}
-
-func (elem *IUIAutomationElement) Get_CurrentName() (string, error) {
-	return get_CurrentName(elem)
-}
-
-func (elem *IUIAutomationElement) Get_CurrentNativeWindowHandle() (syscall.Handle, error) {
-	return get_CurrentNativeWindowHandle(elem)
-}
-
-func (elem *IUIAutomationElement) Get_CurrentBoundingRectangle() (RECT, error) {
-	return get_CurrentBoundingRectangle(elem)
-}
-
-func (elem *IUIAutomationElement) Get_CurrentPropertyValue(propertyId PROPERTYID) (ole.VARIANT, error) {
-	return get_CurrentPropertyValue(elem, propertyId)
-}
-
-func setFocus(elem *IUIAutomationElement) (err error) {
-	hr, _, _ := syscall.Syscall(
-		elem.VTable().SetFocus,
-		1,
-		uintptr(unsafe.Pointer(elem)),
-		0,
-		0)
-	if hr != 0 {
-		err = ole.NewError(hr)
-		return
-	}
-	return
-}
-
-func findAll(elem *IUIAutomationElement, scope TreeScope, condition *IUIAutomationCondition) (found *IUIAutomationElementArray, err error) {
-	hr, _, _ := syscall.Syscall6(
-		elem.VTable().FindAll,
-		4,
-		uintptr(unsafe.Pointer(elem)),
-		uintptr(scope),
-		uintptr(unsafe.Pointer(condition)),
-		uintptr(unsafe.Pointer(&found)),
-		0,
-		0)
-	if hr != 0 {
-		err = ole.NewError(hr)
-	}
-	return
-}
-
-func findFirst(elem *IUIAutomationElement, scope TreeScope, condition *IUIAutomationCondition) (found *IUIAutomationElement, err error) {
-	hr, _, _ := syscall.Syscall6(
-		elem.VTable().FindFirst,
-		4,
-		uintptr(unsafe.Pointer(elem)),
-		uintptr(scope),
-		uintptr(unsafe.Pointer(condition)),
-		uintptr(unsafe.Pointer(&found)),
-		0,
-		0)
-	if hr != 0 {
-		err = ole.NewError(hr)
-	}
-	return
-}
-
-func getCurrentPattern(elem *IUIAutomationElement, patternId PATTERNID) (pattern *ole.IUnknown, err error) {
-	hr, _, _ := syscall.Syscall(
-		elem.VTable().GetCurrentPattern,
-		3,
-		uintptr(unsafe.Pointer(elem)),
-		uintptr(patternId),
-		uintptr(unsafe.Pointer(&pattern)))
-	if hr != 0 {
-		err = ole.NewError(hr)
-		return
-	}
-	return
-}
-
-func get_CurrentAutomationId(elem *IUIAutomationElement) (id string, err error) {
-	var bstrAutomationId *uint16
-	hr, _, _ := syscall.Syscall(
-		elem.VTable().Get_CurrentAutomationId,
-		2,
-		uintptr(unsafe.Pointer(elem)),
-		uintptr(unsafe.Pointer(&bstrAutomationId)),
-		0)
-	if hr != 0 {
-		err = ole.NewError(hr)
-		return
-	}
-	id = ole.BstrToString(bstrAutomationId)
-	return
-}
-
-func get_CurrentClassName(elem *IUIAutomationElement) (name string, err error) {
-	var bstrName *uint16
-	hr, _, _ := syscall.Syscall(
-		elem.VTable().Get_CurrentClassName,
-		2,
-		uintptr(unsafe.Pointer(elem)),
-		uintptr(unsafe.Pointer(&bstrName)),
-		0)
-	if hr != 0 {
-		err = ole.NewError(hr)
-		return
-	}
-	name = ole.BstrToString(bstrName)
-	return
-}
-
-func get_CurrentName(elem *IUIAutomationElement) (name string, err error) {
-	var bstrName *uint16
-	hr, _, _ := syscall.Syscall(
-		elem.VTable().Get_CurrentName,
-		2,
-		uintptr(unsafe.Pointer(elem)),
-		uintptr(unsafe.Pointer(&bstrName)),
-		0)
-	if hr != 0 {
-		err = ole.NewError(hr)
-		return
-	}
-	name = ole.BstrToString(bstrName)
-	return
-}
-
-func get_CurrentNativeWindowHandle(elem *IUIAutomationElement) (handle syscall.Handle, err error) {
-	hr, _, _ := syscall.Syscall(
-		elem.VTable().Get_CurrentNativeWindowHandle,
-		2,
-		uintptr(unsafe.Pointer(elem)),
-		uintptr(unsafe.Pointer(&handle)),
-		0)
-	if hr != 0 {
-		err = ole.NewError(hr)
-		return
-	}
-	return
-}
-
-func get_CurrentBoundingRectangle(elem *IUIAutomationElement) (rect RECT, err error) {
-	hr, _, _ := syscall.Syscall(
-		elem.VTable().Get_CurrentBoundingRectangle,
-		2,
-		uintptr(unsafe.Pointer(elem)),
-		uintptr(unsafe.Pointer(&rect)),
-		0)
-	if hr != 0 {
-		err = ole.NewError(hr)
-		return
-	}
-	return
-}
-
-func get_CurrentPropertyValue(elem *IUIAutomationElement, propertyid PROPERTYID) (ole.VARIANT, error) {
-	var v ole.VARIANT
-
-	ole.VariantInit(&v)
-
-	hr, _, _ := syscall.Syscall(
-		elem.VTable().GetCurrentPropertyValue,
-		3,
-		uintptr(unsafe.Pointer(elem)),
-		uintptr(propertyid),
-		uintptr(unsafe.Pointer(&v)))
-
-	if hr != 0 {
-		err := ole.NewError(hr)
-		return v, err
-	}
-
-	return v, nil
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/iuiautomationelementarray.go b/vendor/github.com/openstandia/w32uiautomation/iuiautomationelementarray.go
deleted file mode 100644
index 1db88064d..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/iuiautomationelementarray.go
+++ /dev/null
@@ -1,48 +0,0 @@
-package w32uiautomation
-import (
-	"syscall"
-	"unsafe"
-
-	ole "github.com/go-ole/go-ole"
-)
-
-type IUIAutomationElementArray struct {
-	ole.IUnknown
-}
-
-type IUIAutomationElementArrayVtbl struct {
-	ole.IUnknownVtbl
-	Get_Length uintptr
-	GetElement uintptr
-}
-
-func (v *IUIAutomationElementArray) VTable() *IUIAutomationElementArrayVtbl {
-	return (*IUIAutomationElementArrayVtbl)(unsafe.Pointer(v.RawVTable))
-}
-
-func (v *IUIAutomationElementArray) Get_Length() (length int32, err error) {
-	hr, _, _ := syscall.Syscall(
-		v.VTable().Get_Length,
-		2,
-		uintptr(unsafe.Pointer(v)),
-		uintptr(unsafe.Pointer(&length)),
-		0)
-	if hr != 0 {
-		err = ole.NewError(hr)
-	}
-	return
-}
-
-func (v *IUIAutomationElementArray) GetElement(index int32) (element *IUIAutomationElement, err error) {
-	hr, _, _ := syscall.Syscall(
-		v.VTable().GetElement,
-		3,
-		uintptr(unsafe.Pointer(v)),
-		uintptr(index),
-		uintptr(unsafe.Pointer(&element)))
-	if hr != 0 {
-		err = ole.NewError(hr)
-	}
-	return
-}
-
diff --git a/vendor/github.com/openstandia/w32uiautomation/iuiautomationeventhandler.go b/vendor/github.com/openstandia/w32uiautomation/iuiautomationeventhandler.go
deleted file mode 100644
index 95acfaa11..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/iuiautomationeventhandler.go
+++ /dev/null
@@ -1,33 +0,0 @@
-package w32uiautomation
-
-import (
-	"syscall"
-	"unsafe"
-
-	ole "github.com/go-ole/go-ole"
-)
-
-type IUIAutomationEventHandlerVtbl struct {
-	ole.IUnknownVtbl
-	HandleAutomationEvent uintptr
-}
-
-var IID_IUIAutomationEventHandler = &ole.GUID{0x146c3c17, 0xf12e, 0x4e22, [8]byte{0x8c, 0x27, 0xf8, 0x94, 0xb9, 0xb7, 0x9c, 0x69}}
-
-func (h *IUIAutomationEventHandler) VTable() *IUIAutomationEventHandlerVtbl {
-	return (*IUIAutomationEventHandlerVtbl)(unsafe.Pointer(h.RawVTable))
-}
-
-func NewAutomationEventHandler(handlerFunc func(this *IUIAutomationEventHandler, sender *IUIAutomationElement, eventId EVENTID) syscall.Handle) IUIAutomationEventHandler {
-	lpVtbl := &IUIAutomationEventHandlerVtbl{
-		IUnknownVtbl: ole.IUnknownVtbl{
-			QueryInterface: syscall.NewCallback(automationEventHandler_queryInterface),
-			AddRef:         syscall.NewCallback(automationEventHandler_addRef),
-			Release:        syscall.NewCallback(automationEventHandler_release),
-		},
-		HandleAutomationEvent: syscall.NewCallback(handlerFunc),
-	}
-	return IUIAutomationEventHandler{
-		IUnknown: ole.IUnknown{RawVTable: (*interface{})(unsafe.Pointer(lpVtbl))},
-	}
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/iuiautomationeventhandler_386.go b/vendor/github.com/openstandia/w32uiautomation/iuiautomationeventhandler_386.go
deleted file mode 100644
index cbdf94f5c..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/iuiautomationeventhandler_386.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package w32uiautomation
-
-import (
-	"unsafe"
-
-	ole "github.com/go-ole/go-ole"
-)
-
-type IUIAutomationEventHandler struct {
-	ole.IUnknown
-	ref int32
-}
-
-func automationEventHandler_queryInterface(this *ole.IUnknown, iid *ole.GUID, punk **ole.IUnknown) uint32 {
-	*punk = nil
-	if ole.IsEqualGUID(iid, ole.IID_IUnknown) ||
-		ole.IsEqualGUID(iid, ole.IID_IDispatch) {
-		automationEventHandler_addRef(this)
-		*punk = this
-		return ole.S_OK
-	}
-	if ole.IsEqualGUID(iid, IID_IUIAutomationEventHandler) {
-		automationEventHandler_addRef(this)
-		*punk = this
-		return ole.S_OK
-	}
-	return ole.E_NOINTERFACE
-}
-
-func automationEventHandler_addRef(this *ole.IUnknown) int32 {
-	pthis := (*IUIAutomationEventHandler)(unsafe.Pointer(this))
-	pthis.ref++
-	return pthis.ref
-}
-
-func automationEventHandler_release(this *ole.IUnknown) int32 {
-	pthis := (*IUIAutomationEventHandler)(unsafe.Pointer(this))
-	pthis.ref--
-	return pthis.ref
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/iuiautomationeventhandler_amd64.go b/vendor/github.com/openstandia/w32uiautomation/iuiautomationeventhandler_amd64.go
deleted file mode 100644
index 19c59491b..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/iuiautomationeventhandler_amd64.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package w32uiautomation
-
-import (
-	"unsafe"
-
-	ole "github.com/go-ole/go-ole"
-)
-
-type IUIAutomationEventHandler struct {
-	ole.IUnknown
-	ref int64
-}
-
-func automationEventHandler_queryInterface(this *ole.IUnknown, iid *ole.GUID, punk **ole.IUnknown) uint64 {
-	*punk = nil
-	if ole.IsEqualGUID(iid, ole.IID_IUnknown) ||
-		ole.IsEqualGUID(iid, ole.IID_IDispatch) {
-		automationEventHandler_addRef(this)
-		*punk = this
-		return ole.S_OK
-	}
-	if ole.IsEqualGUID(iid, IID_IUIAutomationEventHandler) {
-		automationEventHandler_addRef(this)
-		*punk = this
-		return ole.S_OK
-	}
-	return ole.E_NOINTERFACE
-}
-
-func automationEventHandler_addRef(this *ole.IUnknown) int64 {
-	pthis := (*IUIAutomationEventHandler)(unsafe.Pointer(this))
-	pthis.ref++
-	return pthis.ref
-}
-
-func automationEventHandler_release(this *ole.IUnknown) int64 {
-	pthis := (*IUIAutomationEventHandler)(unsafe.Pointer(this))
-	pthis.ref--
-	return pthis.ref
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/iuiautomationexpandcollapsepattern.go b/vendor/github.com/openstandia/w32uiautomation/iuiautomationexpandcollapsepattern.go
deleted file mode 100644
index 4577a7d9e..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/iuiautomationexpandcollapsepattern.go
+++ /dev/null
@@ -1,60 +0,0 @@
-package w32uiautomation
-
-import (
-	"syscall"
-	"unsafe"
-
-	"github.com/go-ole/go-ole"
-)
-
-type IUIAutomationExpandCollapsePattern struct {
-	ole.IUnknown
-}
-
-type IUIAutomationExpandCollapsePatternVtbl struct {
-	ole.IUnknownVtbl
-	Expand                         uintptr
-	Collapse                       uintptr
-	Get_CurrentExpandCollapseState uintptr
-	Get_CachedExpandCollapseState  uintptr
-}
-
-var IID_IUIAutomationExpandCollapsePattern = &ole.GUID{0x619be086, 0x1f4e, 0x4ee4, [8]byte{0xba, 0xfa, 0x21, 0x01, 0x28, 0x73, 0x87, 0x30}}
-
-func (pat *IUIAutomationExpandCollapsePattern) VTable() *IUIAutomationExpandCollapsePatternVtbl {
-	return (*IUIAutomationExpandCollapsePatternVtbl)(unsafe.Pointer(pat.RawVTable))
-}
-
-func (pat *IUIAutomationExpandCollapsePattern) Expand() error {
-	return expand(pat)
-}
-
-func (pat *IUIAutomationExpandCollapsePattern) Collapse() error {
-	return collapse(pat)
-}
-
-func expand(pat *IUIAutomationExpandCollapsePattern) error {
-	hr, _, _ := syscall.Syscall(
-		pat.VTable().Expand,
-		1,
-		uintptr(unsafe.Pointer(pat)),
-		0,
-		0)
-	if hr != 0 {
-		return ole.NewError(hr)
-	}
-	return nil
-}
-
-func collapse(pat *IUIAutomationExpandCollapsePattern) error {
-	hr, _, _ := syscall.Syscall(
-		pat.VTable().Collapse,
-		1,
-		uintptr(unsafe.Pointer(pat)),
-		0,
-		0)
-	if hr != 0 {
-		return ole.NewError(hr)
-	}
-	return nil
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/iuiautomationinvokepattern.go b/vendor/github.com/openstandia/w32uiautomation/iuiautomationinvokepattern.go
deleted file mode 100644
index aed9cb948..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/iuiautomationinvokepattern.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package w32uiautomation
-
-import (
-	"syscall"
-	"unsafe"
-
-	"github.com/go-ole/go-ole"
-)
-
-type IUIAutomationInvokePattern struct {
-	ole.IUnknown
-}
-
-type IUIAutomationInvokePatternVtbl struct {
-	ole.IUnknownVtbl
-	Invoke uintptr
-}
-
-var IID_IUIAutomationInvokePattern = &ole.GUID{0xfb377fbe, 0x8ea6, 0x46d5, [8]byte{0x9c, 0x73, 0x64, 0x99, 0x64, 0x2d, 0x30, 0x59}}
-
-func (pat *IUIAutomationInvokePattern) VTable() *IUIAutomationInvokePatternVtbl {
-	return (*IUIAutomationInvokePatternVtbl)(unsafe.Pointer(pat.RawVTable))
-}
-
-func (pat *IUIAutomationInvokePattern) Invoke() error {
-	return invoke(pat)
-}
-
-func invoke(pat *IUIAutomationInvokePattern) error {
-	hr, _, _ := syscall.Syscall(
-		pat.VTable().Invoke,
-		1,
-		uintptr(unsafe.Pointer(pat)),
-		0,
-		0)
-	if hr != 0 {
-		return ole.NewError(hr)
-	}
-	return nil
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/iuiautomationselectionitempattern.go b/vendor/github.com/openstandia/w32uiautomation/iuiautomationselectionitempattern.go
deleted file mode 100644
index 7c66462c3..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/iuiautomationselectionitempattern.go
+++ /dev/null
@@ -1,46 +0,0 @@
-package w32uiautomation
-
-import (
-	"syscall"
-	"unsafe"
-
-	"github.com/go-ole/go-ole"
-)
-
-type IUIAutomationSelectionItemPattern struct {
-	ole.IUnknown
-}
-
-type IUIAutomationSelectionItemPatternVtbl struct {
-	ole.IUnknownVtbl
-	Select                        uintptr
-	AddToSelection                uintptr
-	RemoveFromSelection           uintptr
-	Get_CurrentIsSelected         uintptr
-	Get_CurrentSelectionContainer uintptr
-	Get_CachedIsSelected          uintptr
-	Get_CachedSelectionContainer  uintptr
-}
-
-var IID_IUIAutomationSelectionItemPattern = &ole.GUID{0xa8efa66a, 0x0fda, 0x421a, [8]byte{0x91, 0x94, 0x38, 0x02, 0x1f, 0x35, 0x78, 0xea}}
-
-func (pat *IUIAutomationSelectionItemPattern) VTable() *IUIAutomationSelectionItemPatternVtbl {
-	return (*IUIAutomationSelectionItemPatternVtbl)(unsafe.Pointer(pat.RawVTable))
-}
-
-func (pat *IUIAutomationSelectionItemPattern) Select() error {
-	return select_(pat)
-}
-
-func select_(pat *IUIAutomationSelectionItemPattern) error {
-	hr, _, _ := syscall.Syscall(
-		pat.VTable().Select,
-		1,
-		uintptr(unsafe.Pointer(pat)),
-		0,
-		0)
-	if hr != 0 {
-		return ole.NewError(hr)
-	}
-	return nil
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/iuiautomationstructurechangedeventhandler.go b/vendor/github.com/openstandia/w32uiautomation/iuiautomationstructurechangedeventhandler.go
deleted file mode 100644
index dede93f23..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/iuiautomationstructurechangedeventhandler.go
+++ /dev/null
@@ -1,64 +0,0 @@
-package w32uiautomation
-
-import (
-	"fmt"
-	"syscall"
-	"unsafe"
-
-	ole "github.com/go-ole/go-ole"
-)
-
-type StructureChangeType uintptr
-
-const (
-	StructureChangeType_ChildAdded = iota
-	StructureChangeType_ChildRemoved
-	StructureChangeType_ChildrenInvalidated
-	StructureChangeType_ChildrenBulkAdded
-	StructureChangeType_ChildrenBulkRemoved
-	StructureChangeType_ChildrenReordered
-)
-
-func (t StructureChangeType) ToString() string {
-	switch t {
-	case StructureChangeType_ChildAdded:
-		return "StructureChangeType_ChildAdded"
-	case StructureChangeType_ChildRemoved:
-		return "StructureChangeType_ChildRemoved"
-	case StructureChangeType_ChildrenInvalidated:
-		return "StructureChangeType_ChildrenInvalidated"
-	case StructureChangeType_ChildrenBulkAdded:
-		return "StructureChangeType_ChildrenBulkAdded"
-	case StructureChangeType_ChildrenBulkRemoved:
-		return "StructureChangeType_ChildrenBulkRemoved"
-	case StructureChangeType_ChildrenReordered:
-		return "StructureChangeType_ChildrenReordered"
-	default:
-		panic(fmt.Errorf("Unknown StructureChangeType: %d", t))
-	}
-}
-
-type IUIAutomationStructureChangedEventHandlerVtbl struct {
-	ole.IUnknownVtbl
-	HandleStructureChangedEvent uintptr
-}
-
-var IID_IUIAutomationStructureChangedEventHandler = &ole.GUID{0xe81d1b4e, 0x11c5, 0x42f8, [8]byte{0x97, 0x54, 0xe7, 0x03, 0x6c, 0x79, 0xf0, 0x54}}
-
-func (h *IUIAutomationStructureChangedEventHandler) VTable() *IUIAutomationStructureChangedEventHandlerVtbl {
-	return (*IUIAutomationStructureChangedEventHandlerVtbl)(unsafe.Pointer(h.RawVTable))
-}
-
-func NewStructureChangedEventHandler(handlerFunc func(this *IUIAutomationStructureChangedEventHandler, sender *IUIAutomationElement, changeType StructureChangeType, runtimeId *ole.SAFEARRAY) syscall.Handle) IUIAutomationStructureChangedEventHandler {
-	lpVtbl := &IUIAutomationStructureChangedEventHandlerVtbl{
-		IUnknownVtbl: ole.IUnknownVtbl{
-			QueryInterface: syscall.NewCallback(structureChangedEventHandler_queryInterface),
-			AddRef:         syscall.NewCallback(structureChangedEventHandler_addRef),
-			Release:        syscall.NewCallback(structureChangedEventHandler_release),
-		},
-		HandleStructureChangedEvent: syscall.NewCallback(handlerFunc),
-	}
-	return IUIAutomationStructureChangedEventHandler{
-		IUnknown: ole.IUnknown{RawVTable: (*interface{})(unsafe.Pointer(lpVtbl))},
-	}
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/iuiautomationstructurechangedeventhandler_386.go b/vendor/github.com/openstandia/w32uiautomation/iuiautomationstructurechangedeventhandler_386.go
deleted file mode 100644
index cf6221583..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/iuiautomationstructurechangedeventhandler_386.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package w32uiautomation
-
-import (
-	"unsafe"
-
-	ole "github.com/go-ole/go-ole"
-)
-
-type IUIAutomationStructureChangedEventHandler struct {
-	ole.IUnknown
-	ref int32
-}
-
-func structureChangedEventHandler_queryInterface(this *ole.IUnknown, iid *ole.GUID, punk **ole.IUnknown) uint32 {
-	*punk = nil
-	if ole.IsEqualGUID(iid, ole.IID_IUnknown) ||
-		ole.IsEqualGUID(iid, ole.IID_IDispatch) {
-		structureChangedEventHandler_addRef(this)
-		*punk = this
-		return ole.S_OK
-	}
-	if ole.IsEqualGUID(iid, IID_IUIAutomationStructureChangedEventHandler) {
-		structureChangedEventHandler_addRef(this)
-		*punk = this
-		return ole.S_OK
-	}
-	return ole.E_NOINTERFACE
-}
-
-func structureChangedEventHandler_addRef(this *ole.IUnknown) int32 {
-	pthis := (*IUIAutomationStructureChangedEventHandler)(unsafe.Pointer(this))
-	pthis.ref++
-	return pthis.ref
-}
-
-func structureChangedEventHandler_release(this *ole.IUnknown) int32 {
-	pthis := (*IUIAutomationStructureChangedEventHandler)(unsafe.Pointer(this))
-	pthis.ref--
-	return pthis.ref
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/iuiautomationstructurechangedeventhandler_amd64.go b/vendor/github.com/openstandia/w32uiautomation/iuiautomationstructurechangedeventhandler_amd64.go
deleted file mode 100644
index 60dd44d71..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/iuiautomationstructurechangedeventhandler_amd64.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package w32uiautomation
-
-import (
-	"unsafe"
-
-	ole "github.com/go-ole/go-ole"
-)
-
-type IUIAutomationStructureChangedEventHandler struct {
-	ole.IUnknown
-	ref int64
-}
-
-func structureChangedEventHandler_queryInterface(this *ole.IUnknown, iid *ole.GUID, punk **ole.IUnknown) uint64 {
-	*punk = nil
-	if ole.IsEqualGUID(iid, ole.IID_IUnknown) ||
-		ole.IsEqualGUID(iid, ole.IID_IDispatch) {
-		structureChangedEventHandler_addRef(this)
-		*punk = this
-		return ole.S_OK
-	}
-	if ole.IsEqualGUID(iid, IID_IUIAutomationStructureChangedEventHandler) {
-		structureChangedEventHandler_addRef(this)
-		*punk = this
-		return ole.S_OK
-	}
-	return ole.E_NOINTERFACE
-}
-
-func structureChangedEventHandler_addRef(this *ole.IUnknown) int64 {
-	pthis := (*IUIAutomationStructureChangedEventHandler)(unsafe.Pointer(this))
-	pthis.ref++
-	return pthis.ref
-}
-
-func structureChangedEventHandler_release(this *ole.IUnknown) int64 {
-	pthis := (*IUIAutomationStructureChangedEventHandler)(unsafe.Pointer(this))
-	pthis.ref--
-	return pthis.ref
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/iuiautomationtreewalker.go b/vendor/github.com/openstandia/w32uiautomation/iuiautomationtreewalker.go
deleted file mode 100644
index ca44a229a..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/iuiautomationtreewalker.go
+++ /dev/null
@@ -1,84 +0,0 @@
-package w32uiautomation
-
-import (
-	"syscall"
-	"unsafe"
-
-	"github.com/go-ole/go-ole"
-)
-
-type IUIAutomationTreeWalker struct {
-	ole.IUnknown
-}
-
-type IUIAutomationTreeWalkerVtbl struct {
-	ole.IUnknownVtbl
-	GetParentElement                    uintptr
-	GetFirstChildElement                uintptr
-	GetLastChildElement                 uintptr
-	GetNextSiblingElement               uintptr
-	GetPreviousSiblingElement           uintptr
-	NormalizeElement                    uintptr
-	GetParentElementBuildCache          uintptr
-	GetFirstChildElementBuildCache      uintptr
-	GetLastChildElementBuildCache       uintptr
-	GetNextSiblingElementBuildCache     uintptr
-	GetPreviousSiblingElementBuildCache uintptr
-	NormalizeElementBuildCache          uintptr
-	Get_Condition                       uintptr
-}
-
-func (w *IUIAutomationTreeWalker) VTable() *IUIAutomationTreeWalkerVtbl {
-	return (*IUIAutomationTreeWalkerVtbl)(unsafe.Pointer(w.RawVTable))
-}
-
-func (w *IUIAutomationTreeWalker) GetParentElement(element *IUIAutomationElement) (first *IUIAutomationElement, err error) {
-	return getParentElement(w, element)
-}
-
-func (w *IUIAutomationTreeWalker) GetFirstChildElement(element *IUIAutomationElement) (first *IUIAutomationElement, err error) {
-	return getFirstChildElement(w, element)
-}
-
-func (w *IUIAutomationTreeWalker) GetNextSiblingElement(element *IUIAutomationElement) (next *IUIAutomationElement, err error) {
-	return getNextSiblingElement(w, element)
-}
-
-func getParentElement(w *IUIAutomationTreeWalker, element *IUIAutomationElement) (parent *IUIAutomationElement, err error) {
-	hr, _, _ := syscall.Syscall(
-		w.VTable().GetParentElement,
-		3,
-		uintptr(unsafe.Pointer(w)),
-		uintptr(unsafe.Pointer(element)),
-		uintptr(unsafe.Pointer(&parent)))
-	if hr != 0 {
-		err = ole.NewError(hr)
-	}
-	return
-}
-
-func getFirstChildElement(w *IUIAutomationTreeWalker, element *IUIAutomationElement) (first *IUIAutomationElement, err error) {
-	hr, _, _ := syscall.Syscall(
-		w.VTable().GetFirstChildElement,
-		3,
-		uintptr(unsafe.Pointer(w)),
-		uintptr(unsafe.Pointer(element)),
-		uintptr(unsafe.Pointer(&first)))
-	if hr != 0 {
-		err = ole.NewError(hr)
-	}
-	return
-}
-
-func getNextSiblingElement(w *IUIAutomationTreeWalker, element *IUIAutomationElement) (next *IUIAutomationElement, err error) {
-	hr, _, _ := syscall.Syscall(
-		w.VTable().GetNextSiblingElement,
-		3,
-		uintptr(unsafe.Pointer(w)),
-		uintptr(unsafe.Pointer(element)),
-		uintptr(unsafe.Pointer(&next)))
-	if hr != 0 {
-		err = ole.NewError(hr)
-	}
-	return
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/iuiautomationvaluepattern.go b/vendor/github.com/openstandia/w32uiautomation/iuiautomationvaluepattern.go
deleted file mode 100644
index 64bd81206..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/iuiautomationvaluepattern.go
+++ /dev/null
@@ -1,60 +0,0 @@
-package w32uiautomation
-
-import (
-	"syscall"
-	"unsafe"
-
-	"github.com/go-ole/go-ole"
-)
-
-type IUIAutomationValuePattern struct {
-	ole.IUnknown
-}
-
-type IUIAutomationValuePatternVtbl struct {
-	ole.IUnknownVtbl
-	SetValue                   uintptr
-	Get_CurrentValue           uintptr
-	Get_CurrentIsReadonly      uintptr
-	Get_CachedValue            uintptr
-	Get_CachedCachedIsReadOnly uintptr
-}
-
-var IID_IUIAutomationValuePattern = &ole.GUID{0xa94cd8b1, 0x0844, 0x4cd6, [8]byte{0x9d, 0x2d, 0x64, 0x05, 0x37, 0xab, 0x39, 0xe9}}
-
-func (pat *IUIAutomationValuePattern) VTable() *IUIAutomationValuePatternVtbl {
-	return (*IUIAutomationValuePatternVtbl)(unsafe.Pointer(pat.RawVTable))
-}
-
-func (pat *IUIAutomationValuePattern) SetValue(value string) error {
-	s16, err := syscall.UTF16PtrFromString(value)
-	if err != nil {
-		return err
-	}
-	hr, _, _ := syscall.Syscall(
-		pat.VTable().SetValue,
-		2,
-		uintptr(unsafe.Pointer(pat)),
-		uintptr(unsafe.Pointer(s16)),
-		0)
-	if hr != 0 {
-		return ole.NewError(hr)
-	}
-	return nil
-}
-
-func (pat *IUIAutomationValuePattern) Get_CurrentValue() (name string, err error) {
-	var bstrName *uint16
-	hr, _, _ := syscall.Syscall(
-		pat.VTable().Get_CurrentValue,
-		2,
-		uintptr(unsafe.Pointer(pat)),
-		uintptr(unsafe.Pointer(&bstrName)),
-		0)
-	if hr != 0 {
-		err = ole.NewError(hr)
-		return
-	}
-	name = ole.BstrToString(bstrName)
-	return
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/patternid.go b/vendor/github.com/openstandia/w32uiautomation/patternid.go
deleted file mode 100644
index 64911e644..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/patternid.go
+++ /dev/null
@@ -1,39 +0,0 @@
-package w32uiautomation
-
-type PATTERNID uintptr
-
-const (
-	UIA_AnnotationPatternId        = 10023 // Identifies the Annotation control pattern. Supported starting with Windows 8.
-	UIA_DockPatternId              = 10011 // Identifies the Dock control pattern.
-	UIA_DragPatternId              = 10030 // Identifies the Drag control pattern. Supported starting with Windows 8.
-	UIA_DropTargetPatternId        = 10031 // Identifies the DropTarget control pattern. Supported starting with Windows 8.
-	UIA_ExpandCollapsePatternId    = 10005 // Identifies the ExpandCollapse control pattern.
-	UIA_GridItemPatternId          = 10007 // Identifies the GridItem control pattern.
-	UIA_GridPatternId              = 10006 // Identifies the Grid control pattern.
-	UIA_InvokePatternId            = 10000 // Identifies the Invoke control pattern.
-	UIA_ItemContainerPatternId     = 10019 // Identifies the ItemContainer control pattern.
-	UIA_LegacyIAccessiblePatternId = 10018 // Identifies the LegacyIAccessible control pattern.
-	UIA_MultipleViewPatternId      = 10008 // Identifies the MultipleView control pattern.
-	UIA_ObjectModelPatternId       = 10022 // Identifies the ObjectModel control pattern. Supported starting with Windows 8.
-	UIA_RangeValuePatternId        = 10003 // Identifies the RangeValue control pattern.
-	UIA_ScrollItemPatternId        = 10017 // Identifies the ScrollItem control pattern.
-	UIA_ScrollPatternId            = 10004 // Identifies the Scroll control pattern.
-	UIA_SelectionItemPatternId     = 10010 // Identifies the SelectionItem control pattern.
-	UIA_SelectionPatternId         = 10001 // Identifies the Selection control pattern.
-	UIA_SpreadsheetPatternId       = 10026 // Identifies the Spreadsheet control pattern. Supported starting with Windows 8.
-	UIA_SpreadsheetItemPatternId   = 10027 // Identifies the SpreadsheetItem control pattern. Supported starting with Windows 8.
-	UIA_StylesPatternId            = 10025 // Identifies the Styles control pattern. Supported starting with Windows 8.
-	UIA_SynchronizedInputPatternId = 10021 // Identifies the SynchronizedInput control pattern.
-	UIA_TableItemPatternId         = 10013 // Identifies the TableItem control pattern.
-	UIA_TablePatternId             = 10012 // Identifies the Table control pattern.
-	UIA_TextChildPatternId         = 10029 // Identifies the TextChild control pattern. Supported starting with Windows 8.
-	UIA_TextEditPatternId          = 10032 // Identifies the TextEdit control pattern. Supported starting with Windows 8.1.
-	UIA_TextPatternId              = 10014 // Identifies the Text control pattern.
-	UIA_TextPattern2Id             = 10024 // Identifies the second version of the Text control pattern. Supported starting with Windows 8.
-	UIA_TogglePatternId            = 10015 // Identifies the Toggle control pattern.
-	UIA_TransformPatternId         = 10016 // Identifies the Transform control pattern.
-	UIA_TransformPattern2Id        = 10028 // Identifies the second version of the Transform control pattern. Supported starting with Windows 8.
-	UIA_ValuePatternId             = 10002 // Identifies the Value control pattern.
-	UIA_VirtualizedItemPatternId   = 10020 // Identifies the VirtualizedItem control pattern.
-	UIA_WindowPatternId            = 10009 // Identifies the Window control pattern.
-)
diff --git a/vendor/github.com/openstandia/w32uiautomation/propertyidentifiers.go b/vendor/github.com/openstandia/w32uiautomation/propertyidentifiers.go
deleted file mode 100644
index 1caf13301..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/propertyidentifiers.go
+++ /dev/null
@@ -1,117 +0,0 @@
-package w32uiautomation
-
-type PROPERTYID uintptr
-
-const (
-	UIA_RuntimeIdPropertyId                           = 30000
-	UIA_BoundingRectanglePropertyId                   = 30001
-	UIA_ProcessIdPropertyId                           = 30002
-	UIA_ControlTypePropertyId                         = 30003
-	UIA_LocalizedControlTypePropertyId                = 30004
-	UIA_NamePropertyId                                = 30005
-	UIA_AcceleratorKeyPropertyId                      = 30006
-	UIA_AccessKeyPropertyId                           = 30007
-	UIA_HasKeyboardFocusPropertyId                    = 30008
-	UIA_IsKeyboardFocusablePropertyId                 = 30009
-	UIA_IsEnabledPropertyId                           = 30010
-	UIA_AutomationIdPropertyId                        = 30011
-	UIA_ClassNamePropertyId                           = 30012
-	UIA_HelpTextPropertyId                            = 30013
-	UIA_ClickablePointPropertyId                      = 30014
-	UIA_CulturePropertyId                             = 30015
-	UIA_IsControlElementPropertyId                    = 30016
-	UIA_IsContentElementPropertyId                    = 30017
-	UIA_LabeledByPropertyId                           = 30018
-	UIA_IsPasswordPropertyId                          = 30019
-	UIA_NativeWindowHandlePropertyId                  = 30020
-	UIA_ItemTypePropertyId                            = 30021
-	UIA_IsOffscreenPropertyId                         = 30022
-	UIA_OrientationPropertyId                         = 30023
-	UIA_FrameworkIdPropertyId                         = 30024
-	UIA_IsRequiredForFormPropertyId                   = 30025
-	UIA_ItemStatusPropertyId                          = 30026
-	UIA_IsDockPatternAvailablePropertyId              = 30027
-	UIA_IsExpandCollapsePatternAvailablePropertyId    = 30028
-	UIA_IsGridItemPatternAvailablePropertyId          = 30029
-	UIA_IsGridPatternAvailablePropertyId              = 30030
-	UIA_IsInvokePatternAvailablePropertyId            = 30031
-	UIA_IsMultipleViewPatternAvailablePropertyId      = 30032
-	UIA_IsRangeValuePatternAvailablePropertyId        = 30033
-	UIA_IsScrollPatternAvailablePropertyId            = 30034
-	UIA_IsScrollItemPatternAvailablePropertyId        = 30035
-	UIA_IsSelectionItemPatternAvailablePropertyId     = 30036
-	UIA_IsSelectionPatternAvailablePropertyId         = 30037
-	UIA_IsTablePatternAvailablePropertyId             = 30038
-	UIA_IsTableItemPatternAvailablePropertyId         = 30039
-	UIA_IsTextPatternAvailablePropertyId              = 30040
-	UIA_IsTogglePatternAvailablePropertyId            = 30041
-	UIA_IsTransformPatternAvailablePropertyId         = 30042
-	UIA_IsValuePatternAvailablePropertyId             = 30043
-	UIA_IsWindowPatternAvailablePropertyId            = 30044
-	UIA_ValueValuePropertyId                          = 30045
-	UIA_ValueIsReadOnlyPropertyId                     = 30046
-	UIA_RangeValueValuePropertyId                     = 30047
-	UIA_RangeValueIsReadOnlyPropertyId                = 30048
-	UIA_RangeValueMinimumPropertyId                   = 30049
-	UIA_RangeValueMaximumPropertyId                   = 30050
-	UIA_RangeValueLargeChangePropertyId               = 30051
-	UIA_RangeValueSmallChangePropertyId               = 30052
-	UIA_ScrollHorizontalScrollPercentPropertyId       = 30053
-	UIA_ScrollHorizontalViewSizePropertyId            = 30054
-	UIA_ScrollVerticalScrollPercentPropertyId         = 30055
-	UIA_ScrollVerticalViewSizePropertyId              = 30056
-	UIA_ScrollHorizontallyScrollablePropertyId        = 30057
-	UIA_ScrollVerticallyScrollablePropertyId          = 30058
-	UIA_SelectionSelectionPropertyId                  = 30059
-	UIA_SelectionCanSelectMultiplePropertyId          = 30060
-	UIA_SelectionIsSelectionRequiredPropertyId        = 30061
-	UIA_GridRowCountPropertyId                        = 30062
-	UIA_GridColumnCountPropertyId                     = 30063
-	UIA_GridItemRowPropertyId                         = 30064
-	UIA_GridItemColumnPropertyId                      = 30065
-	UIA_GridItemRowSpanPropertyId                     = 30066
-	UIA_GridItemColumnSpanPropertyId                  = 30067
-	UIA_GridItemContainingGridPropertyId              = 30068
-	UIA_DockDockPositionPropertyId                    = 30069
-	UIA_ExpandCollapseExpandCollapseStatePropertyId   = 30070
-	UIA_MultipleViewCurrentViewPropertyId             = 30071
-	UIA_MultipleViewSupportedViewsPropertyId          = 30072
-	UIA_WindowCanMaximizePropertyId                   = 30073
-	UIA_WindowCanMinimizePropertyId                   = 30074
-	UIA_WindowWindowVisualStatePropertyId             = 30075
-	UIA_WindowWindowInteractionStatePropertyId        = 30076
-	UIA_WindowIsModalPropertyId                       = 30077
-	UIA_WindowIsTopmostPropertyId                     = 30078
-	UIA_SelectionItemIsSelectedPropertyId             = 30079
-	UIA_SelectionItemSelectionContainerPropertyId     = 30080
-	UIA_TableRowHeadersPropertyId                     = 30081
-	UIA_TableColumnHeadersPropertyId                  = 30082
-	UIA_TableRowOrColumnMajorPropertyId               = 30083
-	UIA_TableItemRowHeaderItemsPropertyId             = 30084
-	UIA_TableItemColumnHeaderItemsPropertyId          = 30085
-	UIA_ToggleToggleStatePropertyId                   = 30086
-	UIA_TransformCanMovePropertyId                    = 30087
-	UIA_TransformCanResizePropertyId                  = 30088
-	UIA_TransformCanRotatePropertyId                  = 30089
-	UIA_IsLegacyIAccessiblePatternAvailablePropertyId = 30090
-	UIA_LegacyIAccessibleChildIdPropertyId            = 30091
-	UIA_LegacyIAccessibleNamePropertyId               = 30092
-	UIA_LegacyIAccessibleValuePropertyId              = 30093
-	UIA_LegacyIAccessibleDescriptionPropertyId        = 30094
-	UIA_LegacyIAccessibleRolePropertyId               = 30095
-	UIA_LegacyIAccessibleStatePropertyId              = 30096
-	UIA_LegacyIAccessibleHelpPropertyId               = 30097
-	UIA_LegacyIAccessibleKeyboardShortcutPropertyId   = 30098
-	UIA_LegacyIAccessibleSelectionPropertyId          = 30099
-	UIA_LegacyIAccessibleDefaultActionPropertyId      = 30100
-	UIA_AriaRolePropertyId                            = 30101
-	UIA_AriaPropertiesPropertyId                      = 30102
-	UIA_IsDataValidForFormPropertyId                  = 30103
-	UIA_ControllerForPropertyId                       = 30104
-	UIA_DescribedByPropertyId                         = 30105
-	UIA_FlowsToPropertyId                             = 30106
-	UIA_ProviderDescriptionPropertyId                 = 30107
-	UIA_IsItemContainerPatternAvailablePropertyId     = 30108
-	UIA_IsVirtualizedItemPatternAvailablePropertyId   = 30109
-	UIA_IsSynchronizedInputPatternAvailablePropertyId = 30110
-)
diff --git a/vendor/github.com/openstandia/w32uiautomation/select.go b/vendor/github.com/openstandia/w32uiautomation/select.go
deleted file mode 100644
index 9770990f4..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/select.go
+++ /dev/null
@@ -1,24 +0,0 @@
-package w32uiautomation
-
-import "unsafe"
-
-func Select(element *IUIAutomationElement) error {
-	unknown, err := element.GetCurrentPattern(UIA_SelectionItemPatternId)
-	if err != nil {
-		return err
-	}
-	defer unknown.Release()
-
-	disp, err := unknown.QueryInterface(IID_IUIAutomationSelectionItemPattern)
-	if err != nil {
-		return err
-	}
-
-	pattern := (*IUIAutomationSelectionItemPattern)(unsafe.Pointer(disp))
-	defer pattern.Release()
-	err = pattern.Select()
-	if err != nil {
-		return err
-	}
-	return nil
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/treescope.go b/vendor/github.com/openstandia/w32uiautomation/treescope.go
deleted file mode 100644
index 0a665ed16..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/treescope.go
+++ /dev/null
@@ -1,12 +0,0 @@
-package w32uiautomation
-
-type TreeScope uintptr
-
-const (
-	TreeScope_Element     = 0x1
-	TreeScope_Children    = 0x2
-	TreeScope_Descendants = 0x4
-	TreeScope_Parent      = 0x8
-	TreeScope_Ancestors   = 0x10
-	TreeScope_Subtree     = TreeScope_Element | TreeScope_Children | TreeScope_Descendants
-)
diff --git a/vendor/github.com/openstandia/w32uiautomation/treewalker.go b/vendor/github.com/openstandia/w32uiautomation/treewalker.go
deleted file mode 100644
index 709071935..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/treewalker.go
+++ /dev/null
@@ -1,11 +0,0 @@
-package w32uiautomation
-
-func NewTreeWalker(auto *IUIAutomation) (*IUIAutomationTreeWalker, error) {
-	condition, err := auto.CreateTrueCondition()
-	if err != nil {
-		return nil, err
-	}
-	defer condition.Release()
-
-	return auto.CreateTreeWalker(condition)
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/variant.go b/vendor/github.com/openstandia/w32uiautomation/variant.go
deleted file mode 100644
index 69d8f5155..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/variant.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package w32uiautomation
-
-import (
-	"unsafe"
-
-	"github.com/go-ole/go-ole"
-)
-
-func NewVariantString(s string) ole.VARIANT {
-	return ole.NewVariant(
-		ole.VT_BSTR,
-		int64(uintptr(unsafe.Pointer(ole.SysAllocStringLen(s)))))
-}
-
-func NewVariantInt(i int64) ole.VARIANT {
-	return ole.NewVariant(
-		ole.VT_INT,
-		i)
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/variant_386.go b/vendor/github.com/openstandia/w32uiautomation/variant_386.go
deleted file mode 100644
index 9493745ff..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/variant_386.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// +build 386
-package w32uiautomation
-
-import "github.com/go-ole/go-ole"
-
-// type VARIANT struct {
-// 	VT         uint16 //  2
-// 	wReserved1 uint16 //  4
-// 	wReserved2 uint16 //  6
-// 	wReserved3 uint16 //  8
-// 	Val        int64  // 16
-// }
-
-func VariantToUintptrArray(v ole.VARIANT) []uintptr {
-	// Size of uintptr on 32bit system is 4
-	return []uintptr{
-		uintptr(v.VT), // uintptr(v.wReserved1)<<16 | uintptr(v.VT),
-		uintptr(0),    // uintptr(v.wReserved3)<<16 | uintptr(v.wReserved2),
-		uintptr(v.Val & 0xffffffff),
-		uintptr(v.Val >> 32),
-	}
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/variant_amd64.go b/vendor/github.com/openstandia/w32uiautomation/variant_amd64.go
deleted file mode 100644
index e78248672..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/variant_amd64.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// +build amd64
-package w32uiautomation
-
-import "github.com/go-ole/go-ole"
-
-// type VARIANT struct {
-// 	VT         uint16  //  2
-// 	wReserved1 uint16  //  4
-// 	wReserved2 uint16  //  6
-// 	wReserved3 uint16  //  8
-// 	Val        int64   // 16
-// 	_          [8]byte // 24
-// }
-
-func VariantToUintptrArray(v ole.VARIANT) []uintptr {
-	// Size of uintptr on 64bit system is 8
-	return []uintptr{
-		uintptr(v.VT<<48), // uintptr(v.VT<<48 | v.wReserved1<<32 | v.wReserved2<<16 | wReserved3),
-		uintptr(v.Val),
-		uintptr(0),
-	}
-}
diff --git a/vendor/github.com/openstandia/w32uiautomation/waitfind.go b/vendor/github.com/openstandia/w32uiautomation/waitfind.go
deleted file mode 100644
index fb18bf317..000000000
--- a/vendor/github.com/openstandia/w32uiautomation/waitfind.go
+++ /dev/null
@@ -1,64 +0,0 @@
-package w32uiautomation
-
-import (
-	"syscall"
-	"unsafe"
-
-	ole "github.com/go-ole/go-ole"
-)
-
-func WaitFindFirst(auto *IUIAutomation, elem *IUIAutomationElement, scope TreeScope, condition *IUIAutomationCondition) (found *IUIAutomationElement, err error) {
-	for {
-		found, err = elem.FindFirst(scope, condition)
-		if err != nil {
-			return nil, err
-		}
-		if found != nil {
-			return found, nil
-		}
-
-		waitChildAdded(auto, elem)
-	}
-}
-
-func WaitFindAll(auto *IUIAutomation, elem *IUIAutomationElement, scope TreeScope, condition *IUIAutomationCondition) (found *IUIAutomationElementArray, err error) {
-	for {
-		found, err = elem.FindAll(scope, condition)
-		if err != nil {
-			return nil, err
-		}
-		if found != nil {
-			return found, nil
-		}
-
-		waitChildAdded(auto, elem)
-	}
-}
-
-func waitChildAdded(auto *IUIAutomation, elem *IUIAutomationElement) error {
-	waiting := true
-	handler := NewStructureChangedEventHandler(nil)
-	lpVtbl := (*IUIAutomationStructureChangedEventHandlerVtbl)(unsafe.Pointer(handler.IUnknown.RawVTable))
-	lpVtbl.HandleStructureChangedEvent = syscall.NewCallback(func(this *IUIAutomationStructureChangedEventHandler, sender *IUIAutomationElement, changeType StructureChangeType, runtimeId *ole.SAFEARRAY) syscall.Handle {
-		switch changeType {
-		case StructureChangeType_ChildAdded, StructureChangeType_ChildrenBulkAdded:
-			waiting = false
-		}
-		return ole.S_OK
-	})
-	err := auto.AddStructureChangedEventHandler(elem, TreeScope_Subtree, nil, &handler)
-	if err != nil {
-		return err
-	}
-	var m ole.Msg
-	for waiting {
-		ole.GetMessage(&m, 0, 0, 0)
-		ole.DispatchMessage(&m)
-	}
-	err = auto.RemoveStructureChangedEventHandler(elem, &handler)
-	if err != nil {
-		return err
-	}
-	return nil
-}
-
diff --git a/vendor/modules.txt b/vendor/modules.txt
index f3218266f..031400893 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -38,21 +38,6 @@ github.com/ProtonMail/go-crypto/openpgp/s2k
 # github.com/RangelReale/osincli v0.0.0-20160924135400-fababb0555f2
 ## explicit
 github.com/RangelReale/osincli
-# github.com/RedHatQE/gowinx v0.0.3
-## explicit; go 1.15
-github.com/RedHatQE/gowinx/pkg/app/action-center
-github.com/RedHatQE/gowinx/pkg/util
-github.com/RedHatQE/gowinx/pkg/util/logging
-github.com/RedHatQE/gowinx/pkg/win32/api/system-services
-github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-accesibility-features
-github.com/RedHatQE/gowinx/pkg/win32/api/user-interface/windows-and-messages
-github.com/RedHatQE/gowinx/pkg/win32/api/util
-github.com/RedHatQE/gowinx/pkg/win32/desktop/notificationarea
-github.com/RedHatQE/gowinx/pkg/win32/interaction
-github.com/RedHatQE/gowinx/pkg/win32/services/process
-github.com/RedHatQE/gowinx/pkg/win32/ux
-github.com/RedHatQE/gowinx/pkg/win32/ux/toolbar
-github.com/RedHatQE/gowinx/pkg/win32/ux/windows
 # github.com/VividCortex/ewma v1.2.0
 ## explicit; go 1.12
 github.com/VividCortex/ewma
@@ -500,9 +485,6 @@ github.com/openshift/library-go/pkg/oauth/oauthdiscovery
 ## explicit; go 1.17
 github.com/openshift/oc/pkg/helpers/term
 github.com/openshift/oc/pkg/helpers/tokencmd
-# github.com/openstandia/w32uiautomation v0.0.0-20190416091226-c987b5b65d6b
-## explicit
-github.com/openstandia/w32uiautomation
 # github.com/patrickmn/go-cache v2.1.0+incompatible
 ## explicit
 github.com/patrickmn/go-cache


Test patch:
diff --git a/images/build-e2e/Dockerfile b/images/build-e2e/Dockerfile
index bf2843138..5621d7ae4 100644
--- a/images/build-e2e/Dockerfile
+++ b/images/build-e2e/Dockerfile
@@ -14,10 +14,6 @@ COPY --from=builder /workspace/out /opt/crc/bin
 # Review this when go 1.16 with embed support
 COPY --from=builder /workspace/test/e2e/features /opt/crc/features
 COPY --from=builder /workspace/test/testdata /opt/crc/testdata
-COPY --from=builder /workspace/test/extended/crc/ux/installer/applescripts /opt/crc/ux/installer/applescripts
-COPY --from=builder /workspace/test/extended/crc/ux/notification/applescripts /opt/crc/ux/notification/applescripts
-COPY --from=builder /workspace/test/extended/crc/ux/tray/applescripts /opt/crc/ux/tray/applescripts
-
 
 ENV EPEL https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
 
diff --git a/images/build-e2e/README.md b/images/build-e2e/README.md
index fcf62ec78..5945a2273 100644
--- a/images/build-e2e/README.md
+++ b/images/build-e2e/README.md
@@ -7,6 +7,7 @@ The container connects through ssh to the target host and copy the right binary
 ## Envs
 
 **PLATFORM**:*define target platform (windows, macos, linux).*
+**ARCH**:*define target arch (amd64, arm64). Default amd64
 **TARGET_HOST**:*dns or ip for the target host.*  
 **TARGET_HOST_USERNAME**:*username for target host.*  
 **TARGET_HOST_KEY_PATH**:*private key for user. (Mandatory if not TARGET_HOST_PASSWORD).*  
diff --git a/images/build-e2e/entrypoint.sh b/images/build-e2e/entrypoint.sh
index a2e60d838..6707c1b7a 100755
--- a/images/build-e2e/entrypoint.sh
+++ b/images/build-e2e/entrypoint.sh
@@ -1,11 +1,12 @@
 #!/bin/sh
 
+ARCH="${ARCH:-"amd64"}"
 # Vars
 BINARY=e2e.test
 if [[ ${PLATFORM} == 'windows' ]]; then
     BINARY=e2e.test.exe
 fi
-BINARY_PATH="/opt/crc/bin/${PLATFORM}-amd64/${BINARY}"
+BINARY_PATH="/opt/crc/bin/${PLATFORM}-${ARCH}/${BINARY}"
 
 # Running options
 CLEANUP_HOME="${CLEANUP_HOME:-"true"}"
@@ -14,7 +15,6 @@ E2E_TAG_EXPRESSION="${E2E_TAG_EXPRESSION:-""}"
 # Review this when go 1.16 with embed support
 FEATURES_PATH=/opt/crc/features
 TESTDATA_PATH=/opt/crc/testdata
-UX_RESOURCES_PATH=/opt/crc/ux
 
 # Results
 RESULTS_PATH="${RESULTS_PATH:-/output}"
@@ -82,19 +82,6 @@ fi
 $SCP "${BINARY_PATH}" "${REMOTE}:${EXECUTION_FOLDER}/bin"
 $SCP "${PULL_SECRET_FILE_PATH}" "${REMOTE}:${EXECUTION_FOLDER}/pull-secret"
 $SCP "${FEATURES_PATH}" "${REMOTE}:${EXECUTION_FOLDER}/bin"
-# Applescripts
-REMOTE_RESOURCES_PATH=/workspace/test/extended/crc
-if [[ ${PLATFORM} == 'windows' ]]; then
-    # Todo change for powershell cmdlet
-    $SSH "${REMOTE}" "powershell.exe -c New-Item -ItemType directory -Path ${REMOTE_RESOURCES_PATH}"
-    $SCP "${UX_RESOURCES_PATH}" "${REMOTE}:${REMOTE_RESOURCES_PATH}"
-
-else
-    # This relies on:  cat /etc/synthetic.conf 
-    #workspace  Users/crcqe/crc-e2e/workspace as symbolic link
-    $SSH "${REMOTE}" "mkdir -p ${EXECUTION_FOLDER}/workspace/test/extended/crc"
-    $SCP "${UX_RESOURCES_PATH}" "${REMOTE}:${EXECUTION_FOLDER}/workspace/test/extended/crc"
-fi
 # Testdata files
 $SCP "${TESTDATA_PATH}" "${REMOTE}:${EXECUTION_FOLDER}"
 
@@ -128,7 +115,11 @@ if [ -n "${USER_PASSWORD}" ]; then
     OPTIONS+="--user-password=${USER_PASSWORD} "
 fi
 OPTIONS+="--godog.tags=\"@${PLATFORM} && ${E2E_TAG_EXPRESSION}\" --godog.format=junit "
-BINARY_EXEC+="cd ${EXECUTION_FOLDER}/bin && ./${BINARY} ${OPTIONS} > ${RESULTS_FILE}.results"
+if [[ ${PLATFORM} == 'windows' ]]; then
+    BINARY_EXEC+="cd ${EXECUTION_FOLDER}/bin && ./${BINARY} ${OPTIONS} > ${RESULTS_FILE}.results"
+else
+    BINARY_EXEC+="sudo su - ${TARGET_HOST_USERNAME} -c \"cd ${EXECUTION_FOLDER}/bin && ./${BINARY} ${OPTIONS} > ${RESULTS_FILE}.results\""
+fi
 # Execute command remote
 $SSH ${REMOTE} ${BINARY_EXEC}
 
@@ -145,9 +136,4 @@ popd
 
 echo "Cleanup target"
 # Cleanup
-# Review this when go 1.16 with embed support
-if [[ ${PLATFORM} == 'windows' ]]; then
-    # Todo change for powershell cmdlet
-    $SSH "${REMOTE}" "rm -r /workspace"
-fi
 $SSH "${REMOTE}" "rm -r ${EXECUTION_FOLDER}"
\ No newline at end of file
diff --git a/test/e2e/crcsuite/crcsuite.go b/test/e2e/crcsuite/crcsuite.go
index 84432ef38..c397dc3cb 100644
--- a/test/e2e/crcsuite/crcsuite.go
+++ b/test/e2e/crcsuite/crcsuite.go
@@ -17,7 +17,6 @@ import (
 
 	clicumber "github.com/code-ready/clicumber/testsuite"
 	"github.com/code-ready/crc/pkg/crc/preset"
-	"github.com/code-ready/crc/test/e2e/crcsuite/ux"
 	crcCmd "github.com/code-ready/crc/test/extended/crc/cmd"
 	"github.com/code-ready/crc/test/extended/util"
 )
@@ -68,6 +67,8 @@ func FeatureContext(s *godog.Suite) {
 		ExecuteCommand)
 	s.Step(`^execut(?:e|ing) crc (.*) command (.*)$`,
 		ExecuteCommandWithExpectedExitStatus)
+	s.Step(`^execut(?:e|ing) single crc (.*) command (.*)$`,
+		ExecuteSingleCommandWithExpectedExitStatus)
 
 	// CRC file operations
 	s.Step(`^file "([^"]*)" exists in CRC home folder$`,
@@ -187,9 +188,6 @@ func FeatureContext(s *godog.Suite) {
 			fmt.Printf("Could not delete CRC VM: %s.", err)
 		}
 	})
-
-	// Extend the context with tray when supported
-	ux.FeatureContext(s, &bundleLocation, &pullSecretFile)
 }
 
 func ParseFlags() {
@@ -197,9 +195,6 @@ func ParseFlags() {
 	flag.StringVar(&pullSecretFile, "pull-secret-file", "", "Path to the file containing pull secret")
 	flag.StringVar(&CRCExecutable, "crc-binary", "", "Path to the CRC executable to be tested")
 	flag.BoolVar(&cleanupHome, "cleanup-home", true, "Try to remove crc home folder before starting the suite")
-
-	// Extend the context with tray when supported
-	ux.ParseFlags()
 }
 
 func RemoveCRCHome() error {
@@ -429,3 +424,10 @@ func ExecuteCommandWithExpectedExitStatus(command string, expectedExitStatus str
 	}
 	return crcCmd.CRC(command).ExecuteWithExpectedExit(expectedExitStatus)
 }
+
+func ExecuteSingleCommandWithExpectedExitStatus(command string, expectedExitStatus string) error {
+	if command == "setup" && userProvidedBundle {
+		command = fmt.Sprintf("%s -b %s", command, bundleLocation)
+	}
+	return crcCmd.CRC(command).ExecuteSingleWithExpectedExit(expectedExitStatus)
+}
diff --git a/test/e2e/crcsuite/ux/uxsuite.go b/test/e2e/crcsuite/ux/uxsuite.go
deleted file mode 100644
index 35d7f0a6e..000000000
--- a/test/e2e/crcsuite/ux/uxsuite.go
+++ /dev/null
@@ -1,237 +0,0 @@
-package ux
-
-import (
-	"flag"
-	"fmt"
-	"os"
-
-	"github.com/code-ready/crc/test/extended/crc/cmd"
-	"github.com/code-ready/crc/test/extended/crc/ux/installer"
-	"github.com/code-ready/crc/test/extended/crc/ux/notification"
-	"github.com/code-ready/crc/test/extended/crc/ux/tray"
-	"github.com/code-ready/crc/test/extended/util"
-	"github.com/cucumber/godog"
-	"github.com/cucumber/messages-go/v10"
-)
-
-var trayHandler tray.Tray
-var installerHandler installer.Installer
-var notificationHandler notification.Notification
-var currentUserPassword string
-var installerPath string
-
-const (
-	clusterStateWaitTimeout int = 200
-	clusterStateWaitRetries int = 10
-)
-
-// FeatureContext defines godog.Suite steps for the test suite.
-func FeatureContext(s *godog.Suite, bundleLocation *string, pullSecretFile *string) {
-	trayHandler = tray.NewTray(bundleLocation, pullSecretFile)
-	installerHandler = installer.NewInstaller(&currentUserPassword, &installerPath)
-	notificationHandler = notification.NewNotification()
-	if handlersAreInitialized() {
-		s.Step(`^install CRC tray$`,
-			trayHandler.Install)
-		s.Step(`^reboot is required$`,
-			installerHandler.RebootRequired)
-		s.Step(`^tray should be installed$`,
-			trayHandler.IsInstalled)
-		s.Step(`^tray icon should be accessible$`,
-			trayHandler.IsAccessible)
-		s.Step(`^fresh tray installation$`,
-			guaranteeFreshInstallation)
-		s.Step(`^(.*) the cluster from the tray$`,
-			clickTrayButton)
-		s.Step(`^cluster should be (.*)$`,
-			waitForClusterInState)
-		s.Step(`^set the pull secret$`,
-			trayHandler.SetPullSecret)
-		s.Step(`^tray should show cluster as (.*)$`,
-			checkClusterStateOnTray)
-		s.Step(`^(.*) CRC from installer$`,
-			executeActionFromInstaller)
-		s.Step(`^.*CRC (.*) installed$`,
-			crcInstalled)
-		s.Step(`^user should get notified with cluster state as (.*)$`,
-			getNotification)
-		s.Step(`^a (.*) cluster$`,
-			guaranteeClusterHasState)
-		s.Step(`^using copied oc login command for (.*)$`,
-			copyOCLoginCommandByUser)
-		s.Step(`^user is connected to the cluster as (.*)$`,
-			connectClusterAsUser)
-		s.BeforeScenario(func(*messages.Pickle) {
-			copyRequiredResources(tray.RequiredResourcesPath)
-			copyRequiredResources(installer.RequiredResourcesPath)
-			copyRequiredResources(notification.RequiredResourcesPath)
-		})
-	}
-}
-
-func ParseFlags() {
-	flag.StringVar(&currentUserPassword, "user-password", "",
-		"Current user password. User should be sudoer to handle the installation")
-	flag.StringVar(&installerPath, "installer-path", "",
-		"Full path for installer")
-}
-
-func handlersAreInitialized() bool {
-	return trayHandler != nil &&
-		installerHandler != nil &&
-		notificationHandler != nil
-}
-
-func copyRequiredResources(requiredResources func() (string, error)) {
-	requiredResourcesPath, err := requiredResources()
-	if err != nil {
-		os.Exit(1)
-	}
-	if requiredResourcesPath != "" {
-		err = util.CopyResourcesFromPath(requiredResourcesPath)
-		if err != nil {
-			os.Exit(1)
-		}
-	}
-}
-
-func guaranteeFreshInstallation() error {
-	err := trayHandler.IsInstalled()
-	if err != nil {
-		return err
-	}
-	err = trayHandler.IsAccessible()
-	if err != nil {
-		return err
-	}
-	err = trayHandler.IsClusterStopped()
-	if err != nil {
-		return err
-	}
-	err = cmd.CheckMachineNotExists()
-	if err != nil {
-		return err
-	}
-	return notificationHandler.ClearNotifications()
-}
-
-func guaranteeClusterHasState(state string) error {
-	switch state {
-	case "running", "stopped":
-		err := util.MatchWithRetry(state, clusterHasState,
-			clusterStateWaitRetries, clusterStateWaitTimeout)
-		if err != nil {
-			return err
-		}
-	default:
-		return fmt.Errorf("%s state is not defined as valid cluster state", state)
-	}
-	return notificationHandler.ClearNotifications()
-}
-
-func clusterHasState(expectedState string) error {
-	return cmd.CheckCRCStatus(expectedState)
-}
-
-func clickTrayButton(action string) error {
-	if trayHandler == nil {
-		return fmt.Errorf("tray handler should be initialized. Check if tray is supported on your OS")
-	}
-	switch action {
-	case "start":
-		return trayHandler.ClickStart()
-	case "stop":
-		return trayHandler.ClickStop()
-	case "delete":
-		return trayHandler.ClickDelete()
-	case "quit":
-		return trayHandler.ClickQuit()
-	default:
-		return fmt.Errorf("%s action can not be managed through the tray", action)
-	}
-}
-
-func checkClusterStateOnTray(state string) error {
-	if trayHandler == nil {
-		return fmt.Errorf("tray handler should be initialized. Check if tray is supported on your OS")
-	}
-	switch state {
-	case "running":
-		return trayHandler.IsClusterRunning()
-	case "stopped":
-		return trayHandler.IsClusterStopped()
-	default:
-		return fmt.Errorf("%s state is not defined as valid cluster state", state)
-	}
-}
-
-func executeActionFromInstaller(action string) error {
-	if installerHandler == nil {
-		return fmt.Errorf("installer handler should be initialized. Check if installer is supported on your OS")
-	}
-	switch action {
-	case "install":
-		return installerHandler.Install()
-	default:
-		return fmt.Errorf("%s action is not supported by the installer", action)
-	}
-}
-
-func waitForClusterInState(state string) error {
-	return cmd.WaitForClusterInState(state)
-}
-
-func crcInstalled(state string) error {
-	switch state {
-	case "is":
-		return cmd.CheckCRCExecutableState(cmd.CRCExecutableInstalled)
-	case "is not":
-		return cmd.CheckCRCExecutableState(cmd.CRCExecutableNotInstalled)
-	default:
-		return fmt.Errorf("%s state is not defined as valid CRC installation state", state)
-	}
-}
-
-func getNotification(action string) error {
-	if notificationHandler == nil {
-		return fmt.Errorf("notification handler should be initialized. Check if tray is supported on your OS")
-	}
-	switch action {
-	case "running":
-		return notificationHandler.GetClusterRunning()
-	case "stopped":
-		return notificationHandler.GetClusterStopped()
-	case "deleted":
-		return notificationHandler.GetClusterDeleted()
-	default:
-		return fmt.Errorf("%s action will not be notified", action)
-	}
-}
-
-func copyOCLoginCommandByUser(user string) error {
-	if trayHandler == nil {
-		return fmt.Errorf("tray handler should be initialized. Check if tray is supported on your OS")
-	}
-	switch user {
-	case "kubeadmin":
-		return trayHandler.CopyOCLoginCommandAsKubeadmin()
-	case "developer":
-		return trayHandler.CopyOCLoginCommandAsDeveloper()
-	default:
-		return fmt.Errorf("tray can not provide login command for user %s", user)
-	}
-}
-
-func connectClusterAsUser(user string) error {
-	if trayHandler == nil {
-		return fmt.Errorf("tray handler should be initialized. Check if tray is supported on your OS")
-	}
-	switch user {
-	case "kubeadmin":
-		return trayHandler.ConnectClusterAsKubeadmin()
-	case "developer":
-		return trayHandler.ConnectClusterAsDeveloper()
-	default:
-		return fmt.Errorf("can not connect to cluster as user %s", user)
-	}
-}
diff --git a/test/e2e/features/basic.feature b/test/e2e/features/basic.feature
index b5c1df082..04d62d60c 100644
--- a/test/e2e/features/basic.feature
+++ b/test/e2e/features/basic.feature
@@ -39,22 +39,7 @@ Feature: Basic test
     Scenario: CRC setup on Linux
         When executing "crc setup --check-only" fails
         Then executing crc start command fails
-        And executing crc setup command succeeds
-        And stderr should contain "Checking if CRC bundle is extracted in '$HOME/.crc'"
-        And stderr should contain "Checking if running as non-root"
-        And stderr should contain "Checking if Virtualization is enabled"
-        And stderr should contain "Checking if KVM is enabled"
-        And stderr should contain "Checking if libvirt is installed"
-        And stderr should contain "Checking if user is part of libvirt group"
-        And stderr should contain "Checking if libvirt daemon is running"
-        And stderr should contain "Checking if a supported libvirt version is installed"
-        And stderr should contain "Checking if libvirt 'crc' network is available"
-        And stderr should contain "Checking if libvirt 'crc' network is active"
-        And stderr should contain "Checking if NetworkManager is installed"
-        And stderr should contain "Checking if NetworkManager service is running"
-        And stderr should contain "Using root access: Executing systemctl daemon-reload command"
-        And stderr should contain "Using root access: Executing systemctl reload NetworkManager"
-        And stdout should contain "Your system is correctly setup for using CRC. Use 'crc start' to start the instance"
+        And executing single crc setup command succeeds
 
     @linux
     Scenario: Missing CRC setup
@@ -67,19 +52,11 @@ Feature: Basic test
     @darwin
     Scenario: CRC setup on Mac
         When executing "crc setup --check-only" fails
-        And executing crc setup command succeeds
-        And stderr should contain "Checking if running as non-root"
-        And stderr should contain "Checking if vfkit is installed"
-        And stderr should contain "Using root access: Changing ownership"
-
+        And executing single crc setup command succeeds
+        
     @windows
     Scenario: CRC setup on Windows
-        When executing crc setup command succeeds
-        Then stderr should contain "Extracting bundle from the CRC executable" if bundle is embedded
-        Then stderr should contain "Checking Windows release"
-        Then stderr should contain "Checking if Hyper-V is installed"
-        Then stderr should contain "Checking if user is a member of the Hyper-V Administrators group"
-        Then stderr should contain "Checking if the Hyper-V virtual switch exist"
+        When executing single crc setup command succeeds
 
     @darwin @linux @windows
     Scenario: Request start with monitoring stack
diff --git a/test/e2e/features/ux.feature b/test/e2e/features/ux.feature
deleted file mode 100644
index 53613c059..000000000
--- a/test/e2e/features/ux.feature
+++ /dev/null
@@ -1,62 +0,0 @@
-@ux 
-Feature: UX Test
-
-    Tets CRC usage with ux components. 
-        * Handle CRC install/ uninstall operations based on installer distribution
-        * Manage CRC through the tray
-    
-    @install @darwin
-    Scenario: Install CRC 
-        Given an environment where CRC is not installed
-        When install CRC from installer
-        Then CRC is installed
-		
-	@install @windows
-    Scenario: Install CRC 
-        Given an environment where CRC is not installed
-        When install CRC from installer
-        Then reboot is required
-		
-	@darwin @windows
-    Scenario: Install tray  
-        When install CRC tray
-        Then tray should be installed
-        And tray icon should be accessible
-
-	@darwin @windows
-    Scenario: Start the cluster
-        Given fresh tray installation   
-        When start the cluster from the tray
-        And set the pull secret
-        Then cluster should be running
-        And tray should show cluster as running
-        And user should get notified with cluster state as running
-
-	@darwin @windows
-    Scenario Outline: Connect to the cluster
-        Given a running cluster   
-        When using copied oc login command for <ocp-user>  
-        Then user is connected to the cluster as <ocp-user> 
-        # TODO notifications inconsistent https://github.com/code-ready/tray-macos/issues/84
-        # And user should get notified with command copied
-
-    Examples:
-            | ocp-user   |
-            | kubeadmin |
-            | developer |
-
-	@darwin @windows
-    Scenario: Stop the cluster
-        Given a running cluster   
-        When stop the cluster from the tray 
-        Then cluster should be stopped
-        And tray should show cluster as stopped
-        And user should get notified with cluster state as stopped
-
-	@darwin @windows
-    Scenario: Restart the cluster
-        Given a stopped cluster   
-        When start the cluster from the tray 
-        Then cluster should be running
-        And tray should show cluster as running
-        And user should get notified with cluster state as running
diff --git a/test/extended/crc/cmd/cmd.go b/test/extended/crc/cmd/cmd.go
index 5565ac86a..94a257915 100644
--- a/test/extended/crc/cmd/cmd.go
+++ b/test/extended/crc/cmd/cmd.go
@@ -2,10 +2,12 @@ package cmd
 
 import (
 	"fmt"
+	"os/exec"
 	"runtime"
 	"strings"
 
 	clicumber "github.com/code-ready/clicumber/testsuite"
+	"github.com/code-ready/crc/pkg/crc/logging"
 	"github.com/code-ready/crc/test/extended/util"
 )
 
@@ -168,3 +170,21 @@ func DeleteCRC() error {
 	fmt.Printf("Deleted CRC instance (if one existed).\n")
 	return nil
 }
+
+func (c Command) ExecuteSingleWithExpectedExit(expectedExit string) error {
+	if err := c.validate(); err != nil {
+		return err
+	}
+	if expectedExit == "succeeds" || expectedExit == "fails" {
+		// Disable G204 lint check as it will force us to use fixed args for the command
+		cmd := exec.Command("crc", strings.Split(c.command, " ")...) // #nosec G204
+		err := cmd.Run()
+		logging.Debugf("Running single command crc %s", c.command)
+		if err != nil && expectedExit == "fails" ||
+			err == nil && expectedExit == "succeeds" {
+			return nil
+		}
+		return fmt.Errorf("%s expected %s but it did not", c.ToString(), expectedExit)
+	}
+	return fmt.Errorf("%s is a valid expected exit status", expectedExit)
+}
diff --git a/test/extended/crc/ux/installer/applescripts/install.applescript b/test/extended/crc/ux/installer/applescripts/install.applescript
deleted file mode 100644
index 4a9ad8a52..000000000
--- a/test/extended/crc/ux/installer/applescripts/install.applescript
+++ /dev/null
@@ -1,41 +0,0 @@
-on run {installerPath, adminPassword}
-    set installer to installerPath as POSIX file
-    set installerWindow to "Install OpenShift Local"
-    tell application "Finder" to open installer
-    delay 1
-    tell application "System Events"
-        tell (first application process whose bundle identifier is "com.apple.installer") 
-            # Introduction
-            click button "Continue" of window installerWindow 
-            delay 2
-            # License
-            click button "Continue" of window installerWindow 
-            delay 2
-        end tell
-    end tell
-    tell application "System Events"
-        tell (first application process whose bundle identifier is "com.apple.installer")
-            # Agree the License
-            click button "Agree" of sheet 1 of window installerWindow
-            delay 2
-        end tell
-    end tell
-    tell application "System Events"
-        tell (first application process whose bundle identifier is "com.apple.installer")
-            # Select Destination
-            try
-            delay 2
-            click button "Continue" of window installerWindow
-            on error errMsg
-                log errMsg
-            end try
-            # Installation
-            click button "Install" of window installerWindow
-            delay 2
-            keystroke adminPassword & return
-            delay 15
-            # Close the installer
-            click button "Close" of window installerWindow
-        end tell
-    end tell
-end run
diff --git a/test/extended/crc/ux/installer/installer.go b/test/extended/crc/ux/installer/installer.go
deleted file mode 100644
index caaa8ebe7..000000000
--- a/test/extended/crc/ux/installer/installer.go
+++ /dev/null
@@ -1,6 +0,0 @@
-package installer
-
-type Installer interface {
-	Install() error
-	RebootRequired() error
-}
diff --git a/test/extended/crc/ux/installer/installer_unix.go b/test/extended/crc/ux/installer/installer_unix.go
deleted file mode 100644
index 646d709ec..000000000
--- a/test/extended/crc/ux/installer/installer_unix.go
+++ /dev/null
@@ -1,46 +0,0 @@
-//go:build !windows
-// +build !windows
-
-package installer
-
-import (
-	"runtime"
-
-	"github.com/code-ready/crc/test/extended/os/applescript"
-)
-
-const (
-	scriptsRelativePath string = "applescripts"
-	installScript       string = "install.applescript"
-)
-
-type applescriptHandler struct {
-	currentUserPassword *string
-	installerPath       *string
-}
-
-func NewInstaller(currentUserPassword *string, installerPath *string) Installer {
-	// TODO check parameters as they are mandatory otherwise exit
-	if runtime.GOOS == "darwin" {
-		return applescriptHandler{
-			currentUserPassword: currentUserPassword,
-			installerPath:       installerPath}
-
-	}
-	return nil
-}
-
-func RequiredResourcesPath() (string, error) {
-	return applescript.GetScriptsPath(scriptsRelativePath)
-}
-
-func (a applescriptHandler) Install() error {
-	return applescript.ExecuteApplescript(
-		installScript,
-		*a.installerPath,
-		*a.currentUserPassword)
-}
-
-func (a applescriptHandler) RebootRequired() error {
-	return nil
-}
diff --git a/test/extended/crc/ux/installer/installer_windows.go b/test/extended/crc/ux/installer/installer_windows.go
deleted file mode 100644
index e3cbf11d5..000000000
--- a/test/extended/crc/ux/installer/installer_windows.go
+++ /dev/null
@@ -1,131 +0,0 @@
-//go:build windows
-// +build windows
-
-package installer
-
-import (
-	"fmt"
-	"os/exec"
-	"time"
-
-	"github.com/RedHatQE/gowinx/pkg/win32/ux"
-	"github.com/code-ready/crc/pkg/crc/logging"
-)
-
-const (
-	installerWindowTitle string = "OpenShift Local Setup"
-
-	installerStartTime time.Duration = 20 * time.Second
-	elementClickTime   time.Duration = 2 * time.Second
-	installationTime   time.Duration = 75 * time.Second
-)
-
-var installFlow = []element{
-	{"Next", elementClickTime, ux.BUTTON},
-	{"I accept the terms in the License Agreement", elementClickTime, ux.CHECKBOX},
-	{"Next", elementClickTime, ux.BUTTON},
-	{"Next", elementClickTime, ux.BUTTON},
-	{"Install", installationTime, ux.BUTTON},
-	{"Finish", elementClickTime, ux.BUTTON}}
-
-var rebootButton = element{"Yes", elementClickTime, ux.BUTTON}
-
-type element struct {
-	id          string
-	delay       time.Duration
-	elementType string
-}
-
-type gowinxHandler struct {
-	CurrentUserPassword *string
-	InstallerPath       *string
-}
-
-func NewInstaller(currentUserPassword, installerPath *string) Installer {
-	// TODO check parameters as they are mandatory otherwise exit
-	return gowinxHandler{
-		CurrentUserPassword: currentUserPassword,
-		InstallerPath:       installerPath}
-
-}
-
-func RequiredResourcesPath() (string, error) {
-	return "", nil
-}
-
-func (g gowinxHandler) Install() error {
-	// Initialize context
-	initialize()
-	if err := runInstaller(*g.InstallerPath); err != nil {
-		return err
-	}
-	time.Sleep(installerStartTime)
-	for _, action := range installFlow {
-		// delay to get window as active
-		// need to get window everytime as its layout is changing
-		installer, err := ux.GetActiveElement(installerWindowTitle, ux.WINDOW)
-		if err != nil {
-			return err
-		}
-		element, err := installer.GetElement(action.id, action.elementType)
-		if err != nil {
-			err = fmt.Errorf("error getting %s with error %v", action.id, err)
-			logging.Error(err)
-			return err
-		}
-		if err := element.Click(); err != nil {
-			err = fmt.Errorf("error clicking %s with error %v", action.id, err)
-			logging.Error(err)
-			return err
-		}
-		// Delay after action
-		time.Sleep(action.delay)
-	}
-	// TODO which should be executed from a new cmd (to ensure ENVs)
-	// Finalize context
-	finalize()
-	return nil
-}
-
-func (g gowinxHandler) RebootRequired() error {
-	initialize()
-	installer, err := ux.GetActiveElement(installerWindowTitle, ux.WINDOW)
-	if err != nil {
-		return err
-	}
-	element, err := installer.GetElement(rebootButton.id, rebootButton.elementType)
-	if err != nil {
-		return err
-	}
-	if err := element.Click(); err != nil {
-		err = fmt.Errorf("error clicking %s with error %v", rebootButton.id, err)
-		logging.Error(err)
-		return err
-	}
-	finalize()
-	return nil
-}
-
-func runInstaller(installerPath string) error {
-	cmd := exec.Command("msiexec.exe", "/i", installerPath, "/qf")
-	if err := cmd.Start(); err != nil {
-		logging.Error(err)
-	}
-	// delay to get window as active
-	time.Sleep(1 * time.Second)
-	return nil
-}
-
-func initialize() {
-	// Initialize context
-	ux.Initialize()
-	// Ensure clean desktop
-	if err := exec.Command("powershell.exe", "-c", "(New-Object", "-ComObject", "\"Shell.Application\").minimizeall()").Run(); err != nil {
-		logging.Error(err)
-	}
-}
-
-func finalize() {
-	// Finalize context
-	ux.Finalize()
-}
diff --git a/test/extended/crc/ux/notification/applescripts/manageNotifications.applescript b/test/extended/crc/ux/notification/applescripts/manageNotifications.applescript
deleted file mode 100644
index 671ad2168..000000000
--- a/test/extended/crc/ux/notification/applescripts/manageNotifications.applescript
+++ /dev/null
@@ -1,145 +0,0 @@
-on run{action}
--- valid actions on notification
--- get latests notification
-set action_get to "get"
--- close all notifications
-set action_clear to "clear"
-
--- get major version for os
-set os_version to system attribute "sys1"
-
--- notifications should be visible to perform actions 
-if not is_notificationmenu_visible() then
-	click_notifications(os_version)
-end if
-
--- handle action
-if action = action_get then
-	set notification to get_notification(os_version)
-    click_notifications(os_version)
-    return notification
-else if action = action_clear then
-	clear_notifications(os_version)
-	click_notifications(os_version)
-else 
-	error "not supported action"
-end if
-
-end run
-
--- get the menua bar controller 
--- 11.X uses controlcenter
--- 10.X systemuiserver
-on get_systemmenu_controller(os_version)
-if os_version = 11 then
-	return "com.apple.controlcenter"
-else if os_version = 10 then
-	return "com.apple.systemuiserver"
-else
-	error "not supported os version"
-end if 
-end get_systemmenu_controller
-
-on click_notifications(os_major_version)
-set systemmenu_controler to get_systemmenu_controller(os_major_version)
-tell application "System Events"
-	tell (first application process whose bundle identifier is systemmenu_controler)
-        	click menu bar item 1 of menu bar 1
-                delay 0.25
-    	end tell
-end tell  
-end click_notifications
-
-on is_notificationmenu_visible() 
-try
-	tell application "System Events"
-    		tell window 1 of (first application process whose bundle identifier is "com.apple.notificationcenterui")
-                        name
-    		end tell
-	end tell
-    return true
-on error errMsg
-	return false
-end try
-end is_notificationmenu_visible
-
-on get_notification(os_version)
-if os_version = 11 then
-	return get_notification_11()
-else if os_version = 10 then
-	return get_notification_10()
-else
-	error "not supported os version"
-end if
-end get_notification
-
-on get_notification_11()
-try
-	tell application "System Events"
-		tell group 1 of UI element 1 of scroll area 1 of window 1 of (first application process whose bundle identifier is "com.apple.notificationcenterui")
-			return value of static text 4        
-			end tell
-	end tell
-on error
-	return ""
-end try 
-end get_notification_11
-
-on get_notification_10()
-try 
-	tell application "System Events"
-		tell (first application process whose bundle identifier is "com.apple.notificationcenterui")
-			tell UI Element 1 of row 3 of table 1 of scroll area 1 of window 1
-				if (value of static text 4) as string is not equal to "" then
-                    return value of static text 4
-                else
-                    return value of static text 5
-                end if
-			end tell
-		end tell
-	end tell
-on error
-	return ""
-end try 
-end get_notification_10
-
--- TODO Ensure only one vindow on notificationcenterui process
-on clear_notifications(os_version)
-if os_version = 11 then
-        clear_notifications_11()
-else if os_version = 10 then
-        clear_notifications_10()
-else
-        error "not supported os version"
-end if
-end clear_notifications
-
-on clear_notifications_11()
-tell application "System Events"
-	set allClosed to false
-	repeat until allClosed
-	try
-        tell group 1 of UI element 1 of scroll area 1 of window 1 of (first application process whose bundle identifier is "com.apple.notificationcenterui")
-                click
-        end tell
-	on error
- 		set allClosed to true
-	end try
-	end repeat
-end tell
-end clear_notifications_11
-
-on clear_notifications_10()
-tell application "System Events"
-    try 
-    tell (first application process whose bundle identifier is "com.apple.notificationcenterui")
-		tell (first button of UI Element 1 of row 2 of table 1 of scroll area 1 of window 1 whose value of attribute "AXDescription" is "clear")
-			click
-        end tell
-    end tell
-	on error  
-	-- no notifications to clear
-	end try
-end tell
-end clear_notifications_10
-
diff --git a/test/extended/crc/ux/notification/const.go b/test/extended/crc/ux/notification/const.go
deleted file mode 100644
index 6a7199cdf..000000000
--- a/test/extended/crc/ux/notification/const.go
+++ /dev/null
@@ -1,8 +0,0 @@
-package notification
-
-const (
-	// copyCommandMessage string = "OC Login command copied to clipboard, go ahead and login to your cluster"
-
-	notificationWaitTimeout int = 50
-	notificationWaitRetries int = 10
-)
diff --git a/test/extended/crc/ux/notification/notification.go b/test/extended/crc/ux/notification/notification.go
deleted file mode 100644
index 2577b7a02..000000000
--- a/test/extended/crc/ux/notification/notification.go
+++ /dev/null
@@ -1,8 +0,0 @@
-package notification
-
-type Notification interface {
-	GetClusterRunning() error
-	GetClusterStopped() error
-	GetClusterDeleted() error
-	ClearNotifications() error
-}
diff --git a/test/extended/crc/ux/notification/notification_unix.go b/test/extended/crc/ux/notification/notification_unix.go
deleted file mode 100644
index 18ba6a213..000000000
--- a/test/extended/crc/ux/notification/notification_unix.go
+++ /dev/null
@@ -1,60 +0,0 @@
-//go:build !windows
-// +build !windows
-
-package notification
-
-import (
-	"runtime"
-
-	"github.com/code-ready/crc/test/extended/os/applescript"
-	"github.com/code-ready/crc/test/extended/util"
-)
-
-type applescriptHandler struct {
-}
-
-const (
-	startMessage  string = "OpenShift cluster is running"
-	stopMessage   string = "The OpenShift Cluster was successfully stopped"
-	deleteMessage string = "The OpenShift Cluster is successfully deleted"
-
-	scriptsRelativePath           string = "applescripts"
-	manageNotifications           string = "manageNotifications.applescript"
-	manageNotificationActionGet   string = "get"
-	manageNotificationActionClear string = "clear"
-)
-
-func NewNotification() Notification {
-	if runtime.GOOS == "darwin" {
-		return applescriptHandler{}
-	}
-	return nil
-}
-
-func RequiredResourcesPath() (string, error) {
-	return applescript.GetScriptsPath(scriptsRelativePath)
-}
-
-func (a applescriptHandler) GetClusterRunning() error {
-	return util.MatchWithRetry(startMessage, existNotification,
-		notificationWaitRetries, notificationWaitTimeout)
-}
-
-func (a applescriptHandler) GetClusterStopped() error {
-	return util.MatchWithRetry(stopMessage, existNotification,
-		notificationWaitRetries, notificationWaitTimeout)
-}
-
-func (a applescriptHandler) GetClusterDeleted() error {
-	return util.MatchWithRetry(deleteMessage, existNotification,
-		notificationWaitRetries, notificationWaitTimeout)
-}
-
-func (a applescriptHandler) ClearNotifications() error {
-	return applescript.ExecuteApplescript(manageNotifications, manageNotificationActionClear)
-}
-
-func existNotification(expectedNotification string) error {
-	return applescript.ExecuteApplescriptReturnShouldMatch(
-		expectedNotification, manageNotifications, manageNotificationActionGet)
-}
diff --git a/test/extended/crc/ux/notification/notification_windows.go b/test/extended/crc/ux/notification/notification_windows.go
deleted file mode 100644
index 993a488ee..000000000
--- a/test/extended/crc/ux/notification/notification_windows.go
+++ /dev/null
@@ -1,83 +0,0 @@
-//go:build windows
-// +build windows
-
-package notification
-
-import (
-	"fmt"
-
-	actionCenter "github.com/RedHatQE/gowinx/pkg/app/action-center"
-	"github.com/code-ready/crc/pkg/crc/logging"
-	"github.com/code-ready/crc/test/extended/util"
-)
-
-type gowinxHandler struct {
-}
-
-const (
-	startMessage  string = "OpenShift Local Cluster has started"
-	stopMessage   string = "Cluster stopped"
-	deleteMessage string = "Cluster deleted"
-
-	notificationGroupName string = "OpenShift Local"
-)
-
-func NewNotification() Notification {
-	return gowinxHandler{}
-}
-
-func RequiredResourcesPath() (string, error) {
-	return "", nil
-}
-
-func (g gowinxHandler) GetClusterRunning() error {
-	return clusterStateNotified(startMessage)
-}
-
-func (g gowinxHandler) GetClusterStopped() error {
-	return clusterStateNotified(stopMessage)
-}
-
-func (g gowinxHandler) GetClusterDeleted() error {
-	return clusterStateNotified(deleteMessage)
-}
-
-func (g gowinxHandler) ClearNotifications() error {
-	if err := actionCenter.ClearNotifications(); err != nil {
-		logging.Error(err)
-	}
-	if err := actionCenter.ClickNotifyButton(); err != nil {
-		logging.Error(err)
-	}
-	return nil
-}
-
-func clusterStateNotified(notificationMessage string) error {
-	err := util.MatchWithRetry(notificationMessage, existNotification,
-		notificationWaitRetries, notificationWaitTimeout)
-	return err
-}
-
-func existNotification(expectedNotification string) error {
-	notifications, err := actionCenter.GetNotifications(notificationGroupName)
-	if errClear := actionCenter.ClickNotifyButton(); err != nil {
-		logging.Error(errClear)
-	}
-	if errClear := actionCenter.ClearNotifications(); err != nil {
-		logging.Error(errClear)
-	}
-	if errClear := actionCenter.ClickNotifyButton(); err != nil {
-		logging.Error(errClear)
-	}
-	if err == nil {
-		for _, notification := range notifications {
-			logging.Infof("Expected notification is %s", expectedNotification)
-			logging.Infof("Current notification is %s", notification)
-			if notification == expectedNotification {
-				return nil
-			}
-		}
-
-	}
-	return fmt.Errorf("%s not found with error", expectedNotification)
-}
diff --git a/test/extended/crc/ux/tray/applescripts/checkTrayIconIsVisible.applescript b/test/extended/crc/ux/tray/applescripts/checkTrayIconIsVisible.applescript
deleted file mode 100644
index f258ce591..000000000
--- a/test/extended/crc/ux/tray/applescripts/checkTrayIconIsVisible.applescript
+++ /dev/null
@@ -1,14 +0,0 @@
-on run {bundleIdentifer}
-    tell application "System Events" 
-        tell (first application process whose bundle identifier is bundleIdentifer) 
-            tell menu bar item of menu bar 2 
-                try
-                    name
-                    return true
-                on error
-                    return false
-                end try
-            end tell 
-        end tell 
-    end tell
-end run
diff --git a/test/extended/crc/ux/tray/applescripts/clickTrayMenuItem.applescript b/test/extended/crc/ux/tray/applescripts/clickTrayMenuItem.applescript
deleted file mode 100644
index b21706f24..000000000
--- a/test/extended/crc/ux/tray/applescripts/clickTrayMenuItem.applescript
+++ /dev/null
@@ -1,13 +0,0 @@
-on run {bundleIdentifer, buttonAXIdentifier}
-    tell application "System Events"
-        tell (first application process whose bundle identifier is bundleIdentifer)
-            tell menu bar item of menu bar 2
-                click
-                delay 0.5
-                tell (first menu item of menu 1 whose value of attribute "AXIdentifier" is buttonAXIdentifier)
-                    click
-                end tell
-            end tell
-        end tell
-    end tell
-end run
diff --git a/test/extended/crc/ux/tray/applescripts/getOCLoginCommand.applescript b/test/extended/crc/ux/tray/applescripts/getOCLoginCommand.applescript
deleted file mode 100644
index 4463d5605..000000000
--- a/test/extended/crc/ux/tray/applescripts/getOCLoginCommand.applescript
+++ /dev/null
@@ -1,31 +0,0 @@
-on run {bundleIdentifer, copyLoginUserAXIdentifier}
-set systemMenuBarId to 2
-set trayMainMenuId to 1
-set copyOCLoginMenuItem to "Copy OC Login Command"
-set copyOCLoginMenuAXIdentifier to "copy_login"
-set menuClickDelay to 0.5
-try
-    tell application "System Events"
-        tell (first application process whose bundle identifier is bundleIdentifer)
-            tell menu bar item of menu bar systemMenuBarId
-                click
-                delay menuClickDelay
-            end tell
-        end tell
-end tell
-on error errMsg
-end try
-tell application "System Events"
-    tell (first application process whose bundle identifier is bundleIdentifer)
-          tell menu item copyOCLoginMenuItem of menu trayMainMenuId of menu bar item of menu bar systemMenuBarId
-            click
-            delay menuClickDelay
-            tell (first menu whose value of attribute "AXIdentifier" is copyOCLoginMenuAXIdentifier)
-                tell (first menu item whose value of attribute "AXIdentifier" is copyLoginUserAXIdentifier)
-                    click
-                end tell
-            end tell 
-        end tell
-    end tell
-end tell
-end run
diff --git a/test/extended/crc/ux/tray/applescripts/getTrayFieldlValue.applescript b/test/extended/crc/ux/tray/applescripts/getTrayFieldlValue.applescript
deleted file mode 100644
index dd31a758c..000000000
--- a/test/extended/crc/ux/tray/applescripts/getTrayFieldlValue.applescript
+++ /dev/null
@@ -1,30 +0,0 @@
-on run {bundleIdentifer, elementAXIdentifier}
-set systemMenuBarId to 2
-set trayMainMenuId to 1
-set statusAndLogsMenuItem to "Status and Logs"
-set statusAndLogsWindowId to "Status and Logs"
-set statusAndLogsWindowCloseButtonId to 1
-set menuClickDelay to 0.5
-try
-    tell application "System Events"
-        tell (first application process whose bundle identifier is bundleIdentifer)
-            tell menu bar item of menu bar systemMenuBarId
-                click
-                delay menuClickDelay
-            end tell
-        end tell
-end tell
-on error errMsg
-end try
-tell application "System Events"
-    tell (first application process whose bundle identifier is bundleIdentifer)
-        set elementValue to name of (first menu item of menu 1 of menu bar 2 whose value of attribute "AXIdentifier" is elementAXIdentifier)
-        tell menu item statusAndLogsMenuItem of menu trayMainMenuId of menu bar item of menu bar systemMenuBarId
-            click
-            delay menuClickDelay
-        end tell
-        click button statusAndLogsWindowCloseButtonId of window statusAndLogsWindowId
-        return elementValue
-    end tell
-end tell
-end run
diff --git a/test/extended/crc/ux/tray/applescripts/installTray.applescript b/test/extended/crc/ux/tray/applescripts/installTray.applescript
deleted file mode 100644
index b242f860d..000000000
--- a/test/extended/crc/ux/tray/applescripts/installTray.applescript
+++ /dev/null
@@ -1,4 +0,0 @@
-on run {trayAppPath}
-    set trayApp to trayAppPath as POSIX file
-    tell application "Finder" to open trayApp
-end run
diff --git a/test/extended/crc/ux/tray/applescripts/runOCLoginCommand.applescript b/test/extended/crc/ux/tray/applescripts/runOCLoginCommand.applescript
deleted file mode 100644
index 3c011fb31..000000000
--- a/test/extended/crc/ux/tray/applescripts/runOCLoginCommand.applescript
+++ /dev/null
@@ -1,59 +0,0 @@
-on run
-try
-        set whoAmICommandOutput to 2
-        set terminal to get_terminal()
-        execute_command("eval $(crc oc-env)", terminal)
-        execute_command(the clipboard as text, terminal)
-        accept_insecure_connection(terminal)
-        execute_command("clear", terminal)
-        execute_command("oc whoami", terminal)
-        set user to command_output(whoAmICommandOutput)
-        # close terminal
-        close_terminal(terminal)
-        return user
-on error errMsg
-        return errMsg
-end try
-end run
-
-on get_terminal()
-tell application "Terminal"
-        activate
-        set crcTerminal to do script ("")
-        return crcTerminal
-end tell
-end get_terminal
-
-on execute_command(command, crcTerminal)
-tell application "Terminal"
-   do script (command) in crcTerminal
-   delay 2
-end tell
-end execute_command
-
-on command_output(commandOutputLine)
-set result to ""
-tell application "Terminal"
-        tell front window to set theText to contents of selected tab as text
-        set result to (paragraph commandOutputLine of theText)
-end tell
-return result
-end command_output
-
-on accept_insecure_connection(crcTerminal)
-set insecureConnectionOutput to 6
-set insecureConnectionQuestion to "Use insecure connections? (y/n)"
-set insecure to command_output(insecureConnectionOutput)
-if insecure contains insecureConnectionQuestion
-        execute_command("y", crcTerminal)
-end if
-end accept_insecure_connection
-
-on close_terminal(crcTerminal)
-tell application "Terminal"
-	do script ("") in crcTerminal
-        close window 1
-        delay 1
-        tell application "System Events" to keystroke return
-end tell
-end close_terminal 
\ No newline at end of file
diff --git a/test/extended/crc/ux/tray/applescripts/setPullSecret.applescript b/test/extended/crc/ux/tray/applescripts/setPullSecret.applescript
deleted file mode 100644
index 6e3a6fcb5..000000000
--- a/test/extended/crc/ux/tray/applescripts/setPullSecret.applescript
+++ /dev/null
@@ -1,46 +0,0 @@
-on run{bundleIdentifer, pullSecretFile} 
-    set terminal to get_terminal()
-    # Ensure clipoard is empty
-    execute_command("pbcopy < /dev/null", terminal)
-    # Copy pull secret content to clipboard
-    execute_command("cat " & pullSecretFile & " | pbcopy", terminal)
-    # close terminal
-    close_terminal(terminal)
-    # Set the content
-    paste_pullsecret_content(bundleIdentifer, the clipboard as text)  
-end run
-
-on paste_pullsecret_content(bundleIdentifer, pullsecretContent)
-tell application "System Events"
-	tell (first application process whose bundle identifier is bundleIdentifer)
-		tell window "Paste the Pull Secret"	
-			set value of text area 1 of scroll area 1 to pullsecretContent
-            click button "OK"
-        end tell
-	end tell
-end tell
-end paste_pullsecret_content
-
-on get_terminal()
-tell application "Terminal"
-        activate
-        set crcTerminal to do script ("")
-        return crcTerminal
-end tell
-end get_terminal
-
-on execute_command(command, crcTerminal)
-tell application "Terminal"
-   do script (command) in crcTerminal
-   delay 2
-end tell
-end execute_command
-
-on close_terminal(crcTerminal)
-tell application "Terminal"
-	do script ("") in crcTerminal
-        close window 1
-        delay 1
-        tell application "System Events" to keystroke return
-end tell
-end close_terminal 
diff --git a/test/extended/crc/ux/tray/const.go b/test/extended/crc/ux/tray/const.go
deleted file mode 100644
index 416215c74..000000000
--- a/test/extended/crc/ux/tray/const.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package tray
-
-const (
-	actionStart  string = "start"
-	actionStop   string = "stop"
-	actionDelete string = "delete"
-	actionQuit   string = "quit"
-
-	fieldState string = "state"
-
-	stateRunning string = "Running"
-	stateStopped string = "Stopped"
-
-	userKubeadmin string = "kubeadmin"
-	userDeveloper string = "developer"
-
-	trayClusterStateRetries int = 15
-	trayClusterStateTimeout int = 90
-)
diff --git a/test/extended/crc/ux/tray/tray.go b/test/extended/crc/ux/tray/tray.go
deleted file mode 100644
index 98898a0d4..000000000
--- a/test/extended/crc/ux/tray/tray.go
+++ /dev/null
@@ -1,31 +0,0 @@
-package tray
-
-import (
-	"fmt"
-)
-
-type Tray interface {
-	Install() error
-	IsInstalled() error
-	IsAccessible() error
-	ClickStart() error
-	ClickStop() error
-	ClickDelete() error
-	ClickQuit() error
-	SetPullSecret() error
-	IsClusterRunning() error
-	IsClusterStopped() error
-	CopyOCLoginCommandAsKubeadmin() error
-	CopyOCLoginCommandAsDeveloper() error
-	// TODO check if make sense create a new ux component
-	ConnectClusterAsKubeadmin() error
-	ConnectClusterAsDeveloper() error
-}
-
-func getElement(name string, elements map[string]string) (string, error) {
-	identifier, ok := elements[name]
-	if ok {
-		return identifier, nil
-	}
-	return "", fmt.Errorf("element '%s', Can not be accessed from the tray", name)
-}
diff --git a/test/extended/crc/ux/tray/tray_unix.go b/test/extended/crc/ux/tray/tray_unix.go
deleted file mode 100644
index e420d528d..000000000
--- a/test/extended/crc/ux/tray/tray_unix.go
+++ /dev/null
@@ -1,182 +0,0 @@
-//go:build !windows
-// +build !windows
-
-package tray
-
-import (
-	"fmt"
-	"runtime"
-	"strings"
-	"time"
-
-	clicumber "github.com/code-ready/clicumber/testsuite"
-	"github.com/code-ready/crc/test/extended/os/applescript"
-	"github.com/code-ready/crc/test/extended/util"
-)
-
-const (
-	scriptsRelativePath    string = "applescripts"
-	checkTrayIconIsVisible string = "checkTrayIconIsVisible.applescript"
-	clickTrayMenuItem      string = "clickTrayMenuItem.applescript"
-	setPullSecret          string = "setPullSecret.applescript"
-	getTrayFieldlValue     string = "getTrayFieldlValue.applescript"
-	installTray            string = "installTray.applescript"
-	getOCLoginCommand      string = "getOCLoginCommand.applescript"
-	runOCLoginCommand      string = "runOCLoginCommand.applescript"
-
-	bundleIdentifier string = "com.redhat.codeready.containers"
-	appPath          string = "/Applications/Red Hat OpenShift Local.app"
-
-	uxCheckAccessibilityDuration = "2s"
-	uxCheckAccessibilityRetry    = 10
-)
-
-var (
-	elements = map[string]string{
-		actionStart:   "start",
-		actionStop:    "stop",
-		actionDelete:  "delete",
-		actionQuit:    "quit",
-		fieldState:    "cluster_status",
-		userKubeadmin: "kubeadmin_login",
-		userDeveloper: "developer_login"}
-)
-
-type applescriptHandler struct {
-	bundleLocation         *string
-	pullSecretFileLocation *string
-}
-
-func NewTray(bundleLocationValue, pullSecretFileLocationValue *string) Tray {
-	if runtime.GOOS == "darwin" {
-		return applescriptHandler{
-			bundleLocation:         bundleLocationValue,
-			pullSecretFileLocation: pullSecretFileLocationValue}
-
-	}
-	return nil
-}
-
-func RequiredResourcesPath() (string, error) {
-	return applescript.GetScriptsPath(scriptsRelativePath)
-}
-
-func (a applescriptHandler) Install() error {
-	err := clicumber.ExecuteCommandSucceedsOrFails("crc setup", "succeeds")
-	if err != nil {
-		return err
-	}
-	// Required to pass parameters with spaces to applescript
-	sanitizedAppPath := strings.Join(append([]string{"\""}, appPath, "\""), "")
-	return applescript.ExecuteApplescript(installTray, sanitizedAppPath)
-}
-
-func (a applescriptHandler) IsInstalled() error {
-	return executeCommandSucceeds("launchctl list | grep crc", "0.*tray")
-}
-
-func (a applescriptHandler) IsAccessible() error {
-	return checkAccessible(func() error {
-		return applescript.ExecuteApplescript(
-			checkTrayIconIsVisible, bundleIdentifier)
-	}, "Tray icon")
-}
-
-func (a applescriptHandler) ClickStart() error {
-	return clickButtonByAction(actionStart)
-}
-
-func (a applescriptHandler) ClickStop() error {
-	return clickButtonByAction(actionStop)
-}
-
-func (a applescriptHandler) ClickDelete() error {
-	return clickButtonByAction(actionDelete)
-}
-
-func (a applescriptHandler) ClickQuit() error {
-	return clickButtonByAction(actionQuit)
-}
-
-func (a applescriptHandler) SetPullSecret() error {
-	return applescript.ExecuteApplescript(
-		setPullSecret, bundleIdentifier, *a.pullSecretFileLocation)
-}
-
-func (a applescriptHandler) IsClusterRunning() error {
-	return util.MatchWithRetry(stateRunning, checkTrayShowsStatusValue,
-		trayClusterStateRetries, trayClusterStateTimeout)
-}
-
-func (a applescriptHandler) IsClusterStopped() error {
-	return util.MatchWithRetry(stateStopped, checkTrayShowsStatusValue,
-		trayClusterStateRetries, trayClusterStateTimeout)
-}
-
-func (a applescriptHandler) CopyOCLoginCommandAsKubeadmin() error {
-	return clickCopyOCLoginCommand(userKubeadmin)
-}
-
-func (a applescriptHandler) CopyOCLoginCommandAsDeveloper() error {
-	return clickCopyOCLoginCommand(userDeveloper)
-}
-
-func (a applescriptHandler) ConnectClusterAsKubeadmin() error {
-	return applescript.ExecuteApplescriptReturnShouldMatch(
-		userKubeadmin, runOCLoginCommand)
-}
-
-func (a applescriptHandler) ConnectClusterAsDeveloper() error {
-	return applescript.ExecuteApplescriptReturnShouldMatch(
-		userDeveloper, runOCLoginCommand)
-}
-
-func clickButtonByAction(actionName string) error {
-	return clickOnElement(actionName, clickTrayMenuItem)
-}
-
-func clickCopyOCLoginCommand(userName string) error {
-	return clickOnElement(userName, getOCLoginCommand)
-}
-
-func clickOnElement(elementName string, scriptName string) error {
-	element, err := getElement(elementName, elements)
-	if err != nil {
-		return err
-	}
-	return applescript.ExecuteApplescript(
-		scriptName, bundleIdentifier, element)
-}
-
-func checkTrayShowsStatusValue(expectedValue string) error {
-	element, err := getElement(fieldState, elements)
-	if err != nil {
-		return err
-	}
-	return applescript.ExecuteApplescriptReturnShouldMatch(
-		expectedValue, getTrayFieldlValue, bundleIdentifier, element)
-}
-
-func checkAccessible(uxIsAccessible func() error, component string) error {
-	retryDuration, err := time.ParseDuration(uxCheckAccessibilityDuration)
-	if err != nil {
-		return err
-	}
-	for i := 0; i < uxCheckAccessibilityRetry; i++ {
-		err := uxIsAccessible()
-		if err == nil {
-			return nil
-		}
-		time.Sleep(retryDuration)
-	}
-	return fmt.Errorf("%s is not accessible", component)
-}
-
-// TODO review which helper use
-func executeCommandSucceeds(command string, expectedOutput string) error {
-	err := clicumber.ExecuteCommand(command)
-	if err != nil {
-		return err
-	}
-	return clicumber.CommandReturnShouldMatch("stdout", expectedOutput)
-}
diff --git a/test/extended/crc/ux/tray/tray_windows.go b/test/extended/crc/ux/tray/tray_windows.go
deleted file mode 100644
index aa71eb582..000000000
--- a/test/extended/crc/ux/tray/tray_windows.go
+++ /dev/null
@@ -1,294 +0,0 @@
-//go:build windows
-// +build windows
-
-package tray
-
-import (
-	"fmt"
-	"os/exec"
-	"strings"
-	"time"
-
-	"github.com/RedHatQE/gowinx/pkg/win32/desktop/notificationarea"
-	"github.com/RedHatQE/gowinx/pkg/win32/interaction"
-	"github.com/RedHatQE/gowinx/pkg/win32/ux"
-	clicumber "github.com/code-ready/clicumber/testsuite"
-	"github.com/code-ready/crc/pkg/crc/logging"
-	"github.com/code-ready/crc/test/extended/util"
-)
-
-type gowinxHandler struct {
-	bundleLocation         *string
-	pullSecretFileLocation *string
-}
-
-const (
-	trayAssemblyName string = "crc-tray.exe"
-
-	notificationIcon string = "OpenShift Local"
-	contextMenu      string = "menu"
-	loginMenu        string = "loginMenu"
-
-	pullSecretWindowID   string = "Pull Secret Picker"
-	pullSecretButtonOkID string = "OK"
-
-	elementClickTime          time.Duration = 2 * time.Second
-	pullSecretWindowDelayTime time.Duration = 8 * time.Second
-)
-
-var (
-	elements = map[string]string{
-		actionStart:   "start",
-		actionStop:    "stop",
-		actionDelete:  "delete",
-		actionQuit:    "exit",
-		fieldState:    "status",
-		loginMenu:     "copy-oc-login",
-		userKubeadmin: "kubeadmin",
-		userDeveloper: "developer"}
-)
-
-func NewTray(bundleLocationValue, pullSecretFileLocationValue *string) Tray {
-	return gowinxHandler{
-		bundleLocation:         bundleLocationValue,
-		pullSecretFileLocation: pullSecretFileLocationValue}
-}
-
-func RequiredResourcesPath() (string, error) {
-	return "", nil
-}
-
-func (g gowinxHandler) Install() error {
-	return clicumber.ExecuteCommandSucceedsOrFails("crc setup", "succeeds")
-}
-
-func (g gowinxHandler) IsInstalled() (err error) {
-	trayAssamblyNameFilter := fmt.Sprintf("IMAGENAME eq %s", trayAssemblyName)
-	out, err := exec.Command("tasklist", "/NH", "/FI", trayAssamblyNameFilter).Output()
-	if !strings.Contains(string(out), trayAssemblyName) {
-		err = fmt.Errorf("%s process not found", trayAssemblyName)
-	}
-	return
-}
-
-func (g gowinxHandler) IsAccessible() (err error) {
-	initialize()
-	err = notificationarea.ShowHiddenNotificationArea()
-	if err != nil {
-		_, _, err = notificationarea.GetIconPositionByTitle(notificationIcon)
-	}
-	finalize()
-	return
-}
-
-func (g gowinxHandler) ClickStart() error {
-	return click(actionStart)
-}
-
-func (g gowinxHandler) ClickStop() error {
-	return click(actionStop)
-}
-
-func (g gowinxHandler) ClickDelete() error {
-	return click(actionDelete)
-}
-
-func (g gowinxHandler) ClickQuit() error {
-	return click(actionQuit)
-}
-
-func (g gowinxHandler) SetPullSecret() (err error) {
-	// Initialize base elements
-	initialize()
-	err = fillFullSecretField(*g.pullSecretFileLocation)
-	// Finalize context
-	finalize()
-	return
-}
-
-func (g gowinxHandler) IsClusterRunning() error {
-	return util.MatchWithRetry(stateRunning, checkTrayShowsStatusValue,
-		trayClusterStateRetries, trayClusterStateTimeout)
-}
-
-func (g gowinxHandler) IsClusterStopped() error {
-	return util.MatchWithRetry(stateStopped, checkTrayShowsStatusValue,
-		trayClusterStateRetries, trayClusterStateTimeout)
-}
-
-func (g gowinxHandler) CopyOCLoginCommandAsKubeadmin() error {
-	return clickOnSubmenu(loginMenu, userKubeadmin)
-}
-
-func (g gowinxHandler) CopyOCLoginCommandAsDeveloper() error {
-	return clickOnSubmenu(loginMenu, userDeveloper)
-}
-
-func (g gowinxHandler) ConnectClusterAsKubeadmin() error {
-	return connectClusterAs(userKubeadmin)
-}
-
-func (g gowinxHandler) ConnectClusterAsDeveloper() error {
-	return connectClusterAs(userDeveloper)
-}
-
-func initialize() {
-	// Initialize context
-	ux.Initialize()
-	// Ensure clean desktop
-	if err := exec.Command("powershell.exe", "-c", "(New-Object", "-ComObject", "\"Shell.Application\").minimizeall()").Run(); err != nil {
-		logging.Error(err)
-	}
-}
-
-func finalize() {
-	// Finalize context
-	ux.Finalize()
-}
-
-func click(action string) (err error) {
-	// Initialize base elements
-	initialize()
-	time.Sleep(elementClickTime)
-	_, err = clickOnContextMenu(action)
-	// Finalize context
-	finalize()
-	return
-}
-
-func clickOnSubmenu(submenuElement, action string) (err error) {
-	// Initialize base elements
-	initialize()
-	if submenu, clickErr := clickOnContextMenu(submenuElement); clickErr != nil {
-		err = clickErr
-	} else {
-		_, err = clickAction(action, submenu)
-	}
-	// Finalize context
-	finalize()
-	return
-}
-
-func clickOnContextMenu(element string) (*ux.UXElement, error) {
-	contextMenu, err := getContextMenu()
-	if err != nil {
-		return nil, err
-	}
-	return clickAction(element, contextMenu)
-}
-
-func clickAction(element string, menu *ux.UXElement) (*ux.UXElement, error) {
-	buttonID, err := getElement(element, elements)
-	if err != nil {
-		return nil, err
-	}
-	button, err := menu.GetElement(buttonID, ux.MENUITEM)
-	if err != nil {
-		return nil, err
-	}
-	if err := button.Click(); err != nil {
-		return button, err
-	}
-	time.Sleep(elementClickTime)
-	return button, nil
-}
-
-func getContextMenu() (*ux.UXElement, error) {
-	err := notificationarea.ShowHiddenNotificationArea()
-	if err != nil {
-		return nil, err
-	}
-	x, y, err := notificationarea.GetIconPositionByTitle(notificationIcon)
-	if err != nil {
-		return nil, err
-	}
-	if err := interaction.Click(int32(x), int32(y)); err != nil {
-		return nil, err
-	}
-	time.Sleep(elementClickTime)
-	return ux.GetActiveElement(contextMenu, ux.MENU)
-}
-
-func connectClusterAs(connectedUser string) error {
-	//  Get oc
-	err := clicumber.ExecuteCommand("crc oc-env | Invoke-Expression")
-	if err != nil {
-		return err
-	}
-	// Copy command from clipboard
-	err = clicumber.ExecuteCommand("$clipboardCommand=Get-Clipboard")
-	if err != nil {
-		return err
-	}
-	// Run copied command
-	err = clicumber.ExecuteCommand("Invoke-Expression -Command $clipboardCommand")
-	if err != nil {
-		return err
-	}
-	// Clear
-	err = clicumber.ExecuteCommand("clear")
-	if err != nil {
-		return err
-	}
-	// Check user
-	err = clicumber.ExecuteCommand("oc whoami")
-	if err != nil {
-		return err
-	}
-	return clicumber.CommandReturnShouldMatch("stdout", connectedUser)
-}
-
-func checkTrayShowsStatusValue(expectedValue string) (err error) {
-	// Initialize base elements
-	initialize()
-	contextMenu, errContextMenu := getContextMenu()
-	if errContextMenu != nil {
-		err = errContextMenu
-	} else {
-		if statusLabel, errStatusLabel := contextMenu.GetElementByType(ux.TEXT); errStatusLabel != nil {
-			err = errStatusLabel
-		} else if statusLabel.GetName() != expectedValue {
-			err = fmt.Errorf("Tray does not show value %s", expectedValue)
-		}
-	}
-	// Finalize context
-	finalize()
-	return
-}
-
-func fillFullSecretField(pullSecretLocation string) error {
-	// Get pull secret content
-	err := exec.Command("powershell.exe", "-c", "Get-Content", pullSecretLocation, "|", "Set-Clipboard").Run()
-	if err != nil {
-		return err
-	}
-	time.Sleep(pullSecretWindowDelayTime)
-	pullSecretWindow, err := ux.GetActiveElement(pullSecretWindowID, ux.WINDOW)
-	if err != nil {
-		logging.Infof("Pullsecret file already configured")
-		return nil
-	}
-	pullSecretField, err := pullSecretWindow.GetElementByType(ux.EDIT)
-	if err != nil {
-		return err
-	}
-
-	pullSecretContent, err := exec.Command("powershell.exe", "-c", "Get-Clipboard").Output()
-	if err != nil {
-		return err
-	}
-
-	err = pullSecretField.SetValue(string(pullSecretContent))
-	if err != nil {
-		return err
-	}
-	okButton, err := pullSecretWindow.GetElement(pullSecretButtonOkID, ux.BUTTON)
-	if err != nil {
-		return err
-	}
-	if err := okButton.Click(); err != nil {
-		return err
-	}
-	time.Sleep(elementClickTime)
-	return nil
-}