You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@openwhisk.apache.org by GitBox <gi...@apache.org> on 2018/03/14 21:23:00 UTC

[GitHub] pritidesai closed pull request #790: Add support to export binary (zip and jar) actions

pritidesai closed pull request #790: Add support to export binary (zip and jar) actions
URL: https://github.com/apache/incubator-openwhisk-wskdeploy/pull/790
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/cmd/export.go b/cmd/export.go
index ede3ba02..1f8655c3 100644
--- a/cmd/export.go
+++ b/cmd/export.go
@@ -18,6 +18,7 @@
 package cmd
 
 import (
+	"encoding/base64"
 	"errors"
 	"fmt"
 	"os"
@@ -29,6 +30,7 @@ import (
 	"github.com/apache/incubator-openwhisk-wskdeploy/parsers"
 	"github.com/apache/incubator-openwhisk-wskdeploy/utils"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wskderrors"
+	"github.com/apache/incubator-openwhisk-wskdeploy/wski18n"
 	"github.com/spf13/cobra"
 )
 
@@ -88,34 +90,20 @@ func ExportAction(actionName string, packageName string, maniyaml *parsers.YAML)
 		pkg.Sequences[wskAction.Name] = *seq
 	} else {
 		parsedAction := *maniyaml.ComposeParsersAction(*wskAction)
-
-		// get the action file extension according to action kind (e.g. js for nodejs)
-		ext := utils.FileRuntimeExtensionsMap[wskAction.Exec.Kind]
-
 		manifestDir := filepath.Dir(utils.Flags.ManifestPath)
 
 		// store function file under action package name subdirectory in the specified manifest folder
 		functionDir := filepath.Join(manifestDir, packageName)
 		os.MkdirAll(functionDir, os.ModePerm)
 
-		// store function in manifest under path relative to manifest root
-		functionFile := filepath.Join(packageName, wskAction.Name) + "." + ext
-		parsedAction.Function = functionFile
-
-		// create function file at the full path
-		functionFile = filepath.Join(manifestDir, functionFile)
-		f, err := os.Create(functionFile)
+		// save code file at the full path
+		filename, err := saveCode(*wskAction, functionDir)
 		if err != nil {
-			return wskderrors.NewFileReadError(functionFile, err.Error())
+			return err
 		}
 
-		defer f.Close()
-
-		// store action function in the filesystem next to the manifest.yml
-		// TODO: consider to name files by namespace + action to make function file names unique
-		if wskAction.Exec.Code != nil {
-			f.Write([]byte(*wskAction.Exec.Code))
-		}
+		// store function in manifest under path relative to manifest root
+		parsedAction.Function = filepath.Join(packageName, filename)
 		pkg.Actions[wskAction.Name] = parsedAction
 	}
 
@@ -275,6 +263,64 @@ func ExportCmdImp(cmd *cobra.Command, args []string) error {
 	return nil
 }
 
+const (
+	JAVA_EXT = ".jar"
+	ZIP_EXT  = ".zip"
+	BLACKBOX = "blackbox"
+	JAVA     = "java"
+)
+
+func getBinaryKindExtension(runtime string) (extension string) {
+	switch strings.ToLower(runtime) {
+	case JAVA:
+		extension = JAVA_EXT
+	default:
+		extension = ZIP_EXT
+	}
+
+	return extension
+}
+
+func saveCode(action whisk.Action, directory string) (string, error) {
+	var code string
+	var runtime string
+	var exec whisk.Exec
+
+	exec = *action.Exec
+	runtime = strings.Split(exec.Kind, ":")[0]
+
+	if strings.ToLower(runtime) == BLACKBOX {
+		return "", wskderrors.NewInvalidRuntimeError(wski18n.T(wski18n.ID_ERR_CANT_SAVE_DOCKER_RUNTIME),
+			directory, action.Name, BLACKBOX, utils.ListOfSupportedRuntimes(utils.SupportedRunTimes))
+	}
+
+	if exec.Code != nil {
+		code = *exec.Code
+	}
+
+	var filename = ""
+	if *exec.Binary {
+		decoded, _ := base64.StdEncoding.DecodeString(code)
+		code = string(decoded)
+
+		filename = action.Name + getBinaryKindExtension(runtime)
+	} else {
+		filename = action.Name + "." + utils.FileRuntimeExtensionsMap[action.Exec.Kind]
+	}
+
+	path := filepath.Join(directory, filename)
+
+	if utils.FileExists(path) {
+		return "", wskderrors.NewFileReadError(path, wski18n.T(wski18n.ID_ERR_FILE_ALREADY_EXISTS))
+	}
+
+	if err := utils.WriteFile(path, code); err != nil {
+		return "", err
+	}
+
+	return filename, nil
+}
+
 func init() {
 	RootCmd.AddCommand(exportCmd)
 }
diff --git a/parsers/manifest_parser.go b/parsers/manifest_parser.go
index 3a626e70..9a831c84 100644
--- a/parsers/manifest_parser.go
+++ b/parsers/manifest_parser.go
@@ -20,12 +20,13 @@ package parsers
 import (
 	"encoding/base64"
 	"errors"
-	"gopkg.in/yaml.v2"
 	"io/ioutil"
 	"os"
 	"path"
 	"strings"
 
+	"gopkg.in/yaml.v2"
+
 	"github.com/apache/incubator-openwhisk-client-go/whisk"
 	"github.com/apache/incubator-openwhisk-wskdeploy/utils"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wskderrors"
@@ -994,7 +995,7 @@ func (dm *YAMLParser) ComposeApiRecordsFromAllPackages(client *whisk.Config, man
 func (dm *YAMLParser) ComposeApiRecords(client *whisk.Config, packageName string, pkg Package, manifestPath string) ([]*whisk.ApiCreateRequest, error) {
 	var requests []*whisk.ApiCreateRequest = make([]*whisk.ApiCreateRequest, 0)
 
-	if pkg.Apis != nil {
+	if pkg.Apis != nil && len(pkg.Apis) != 0 {
 		// verify APIGW_ACCESS_TOKEN is set before composing APIs
 		// until this point, we dont know whether APIs are specified in manifest or not
 		if len(client.ApigwAccessToken) == 0 {
diff --git a/utils/fileoperations.go b/utils/fileoperations.go
index 7838641a..1c3d5b94 100644
--- a/utils/fileoperations.go
+++ b/utils/fileoperations.go
@@ -127,3 +127,19 @@ func WriteProps(path string, props map[string]string) error {
 	}
 	return nil
 }
+
+func WriteFile(filename string, content string) error {
+	file, err := os.Create(filename)
+
+	if err != nil {
+		return err
+	}
+
+	defer file.Close()
+
+	if _, err = file.WriteString(content); err != nil {
+		return err
+	}
+
+	return nil
+}
diff --git a/wski18n/i18n_ids.go b/wski18n/i18n_ids.go
index 9d9e7c7b..1c081b98 100644
--- a/wski18n/i18n_ids.go
+++ b/wski18n/i18n_ids.go
@@ -180,6 +180,8 @@ const (
 	ID_ERR_ACTION_INVALID_X_action_X                                 = "msg_err_action_invalid"
 	ID_ERR_ACTION_MISSING_RUNTIME_WITH_CODE_X_action_X               = "msg_err_action_missing_runtime_with_code"
 	ID_ERR_ACTION_FUNCTION_REMOTE_DIR_NOT_SUPPORTED_X_action_X_url_X = "msg_err_action_function_remote_dir_not_supported"
+	ID_ERR_CANT_SAVE_DOCKER_RUNTIME                                  = "msg_err_cant_save_docker"
+	ID_ERR_FILE_ALREADY_EXISTS                                       = "msg_err_file_already_exists"
 
 	// Server-side Errors (wskdeploy as an Action)
 	ID_ERR_JSON_MISSING_KEY_CMD = "msg_err_json_missing_cmd_key"
@@ -254,6 +256,8 @@ var I18N_ID_SET = [](string){
 	ID_ERR_RUNTIMES_GET_X_err_X,
 	ID_ERR_URL_INVALID_X_urltype_X_url_X_filetype_X,
 	ID_ERR_URL_MALFORMED_X_urltype_X_url_X,
+	ID_ERR_CANT_SAVE_DOCKER_RUNTIME,
+	ID_ERR_FILE_ALREADY_EXISTS,
 	ID_MSG_COMMAND_USING_X_cmd_X_filetype_X_path_X,
 	ID_MSG_CONFIG_INFO_APIHOST_X_host_X_source_X,
 	ID_MSG_CONFIG_INFO_AUTHKEY_X_source_X,
diff --git a/wski18n/i18n_resources.go b/wski18n/i18n_resources.go
index 5652ab18..0d5bd797 100644
--- a/wski18n/i18n_resources.go
+++ b/wski18n/i18n_resources.go
@@ -92,12 +92,12 @@ func wski18nResourcesDe_deAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1520374115, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 0, mode: os.FileMode(438), modTime: time.Unix(1517928990, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
 
-var _wski18nResourcesEn_usAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x5b\x6f\x8f\xdb\x36\xd2\x7f\x9f\x4f\x31\x08\x1e\x20\x2d\xe0\x28\x69\x1f\x1c\x70\x08\xb0\x38\xe4\x2e\x69\xbb\xd7\x26\x1b\xec\x26\x17\x14\xe9\x42\xa1\xc5\xb1\xcd\x5a\x22\x05\x92\xb2\xe3\x1a\xfe\xee\x87\xe1\x1f\x49\xf6\x2e\x25\xad\xd3\xe2\xf2\xa6\x6e\x38\x9c\xf9\xcd\x90\xfc\x71\x66\xa8\x7c\x7a\x04\xb0\x7f\x04\x00\xf0\x58\xf0\xc7\x2f\xe0\x71\x65\x96\x79\xad\x71\x21\xbe\xe4\xa8\xb5\xd2\x8f\x67\x7e\xd4\x6a\x26\x4d\xc9\xac\x50\x92\xc4\x5e\xbb\xb1\x47\x00\x87\xd9\x80\x06\x21\x17\x2a\xa1\xe0\x92\x86\xc6\xe6\x9b\xa6\x28\xd0\x98\x84\x8a\x9b\x30\x3a\xa6\x65\xcb\xb4\x14\x72\x99\xd0\xf2\x31\x8c\x26\xb5\x14\x15\xcf\x39\x9a\x22\x2f\x95\x5c\xe6\x1a\x6b\xa5\x6d\x42\xd7\xb5\x1b\x34\xa0\x24\x70\xac\x4b\xb5\x43\x0e\x28\xad\xb0\x02\x0d\x7c\x23\x32\xcc\x66\xf0\x8e\x15\x6b\xb6\x44\x33\x83\x97\x05\xcd\x33\x33\x78\xaf\xc5\x72\x89\xda\xcc\xe0\xba\x29\x69\x04\x6d\x91\x7d\x0b\xcc\xc0\x16\xcb\x92\xfe\xab\xb1\x40\x69\xdd\x8c\x8d\xb3\x66\x40\x48\xb0\x2b\x04\x53\x63\x21\x16\x02\x39\x48\x56\xa1\xa9\x59\x81\xd9\x64\x5f\x94\x4a\x79\xf2\x12\xac\x52\x25\x58\x15\x1c\x99\x41\x23\xfd\x2f\x60\x92\x83\xd9\xc9\x02\x54\x8d\x72\xbb\x12\x66\x0d\x75\xf0\x09\x1a\x23\xe4\x12\x18\x54\x4c\x8a\x05\x1a\xeb\x84\x55\x4d\x5a\x59\x19\x54\x55\xe4\xc9\x42\x94\xad\xf8\xaf\x2f\xdf\xfc\x32\x05\xb3\x59\x29\x6d\x87\x17\xe0\x9d\x56\x1b\xc1\xd1\x00\x03\xd3\x54\x15\xd3\x3b\xf0\xf2\xa0\x16\xb0\x5d\x31\xfb\xc4\xc0\x1c\xb1\xb7\x3c\x5f\x17\xc6\x00\x69\x34\x8e\x06\x2d\xc5\x72\x85\x65\x1d\x4c\xc3\x4e\x35\x7a\x52\x08\x29\x54\xd3\xb1\x6c\x50\x1b\xb2\x9d\x8a\x8f\x90\xd6\x39\x1c\xe4\x40\x36\xd5\x1c\xb5\x0b\x8f\x59\x7b\x68\xc3\xb6\x16\x25\x5b\xe6\xac\x16\xf9\x4a\x99\x94\xd7\xde\xa5\x97\xef\x2e\xe1\xf3\x4f\x57\x37\xef\x3f\x4f\xd4\x38\x8c\xbd\xa7\xf4\x3f\xaf\xaf\x6f\x2e\xaf\xde\x4e\xd2\xdb\xd8\x55\xbe\xc6\x5d\x42\x29\x0d\x2b\x2d\xfe\x70\x7f\x01\x9f\x7f\x7e\xfd\xeb\x14\xa5\x05\x6a\x9b\xd3\xba\x24\xb4\xd6\xcc\xae\x28\xa4\x14\xe8\x8c\x84\xdd\x22\x4e\x51\xac\xe4\x42\xa4\x98\xca\x0f\x3a\x55\xf0\x0d\xc7\x05\x6b\x4a\x0b\xc2\xc0\xff\xfd\x74\xf5\xe6\xf5\xb3\x6c\x6b\xd6\xb5\x56\xb5\xf9\x76\x4a\x54\xca\x52\x6d\xf3\xa0\x23\xc5\xaf\x4e\x08\x5a\xa1\x71\xad\xdd\xf9\x1e\x8a\x4b\xcb\x29\x2d\x11\x4c\x50\x2d\xa4\x45\xcd\x88\xfe\x52\x31\xf7\x68\x7b\x72\x50\x6b\x55\xd5\x93\x80\xaf\x71\x37\x79\x39\xd7\xb8\x9b\x0a\xda\x47\xb9\x62\x92\x2d\x91\x0f\xc2\xae\xb5\xfa\x1d\x0b\xdb\x5d\x16\x56\xc1\x1c\xa1\x62\x7a\x8d\x1c\xa2\x86\x71\x8b\x41\x4f\x4e\x24\x96\x72\x26\x98\x72\x22\xe3\x1a\x23\x0d\x8d\xac\xe8\x11\x5b\x4d\x50\xdb\xb2\x6c\x42\x6f\x37\x3e\xd9\xe9\x11\x84\x06\xf5\x06\x75\x89\xc6\xc4\x68\x4f\x50\x6d\xac\x16\x49\xcd\x7e\xe9\x1a\x83\x9a\x0e\x89\x90\xc8\x41\x37\xd2\x8a\xaa\x65\xd7\x09\x16\xac\x4e\x07\xc1\x8d\x81\x6a\x6c\xdd\x4c\x01\xeb\xb7\xdb\x06\xf5\x5c\x99\x94\xca\x30\x3a\xae\xd4\x71\x4d\x5e\x09\x43\xd7\x91\x63\xd1\x34\x89\xbe\x5f\x21\x90\x04\xed\xde\xc2\x33\x29\x9d\x12\x61\x40\x2a\x0b\x5e\x55\xa3\x91\x67\xbf\x0d\x45\xe4\xc4\x62\x2d\x06\x2e\x18\xb2\x48\x37\x01\x89\x7c\x9d\x9d\xb1\x8d\x48\x96\x5a\x99\xf3\x4c\x05\x57\x86\xb2\xe1\x53\x7f\x3e\xed\xf7\x19\xfd\x3e\x1c\x6e\x67\xb0\xd0\xaa\x82\xfd\x3e\x33\xaa\xd1\x05\x1e\x0e\x93\x6c\xfa\x05\x1b\xb3\x49\x62\x71\xad\x0c\xda\xf3\x6c\xb5\xe1\x19\xb3\x76\x14\x47\x72\xb1\xfd\x8b\xf3\xfd\xac\xc5\x72\x9b\x33\x57\x08\xe4\x56\xad\x51\x8e\xba\x4c\x33\xc0\xcf\x00\x37\xe3\x3c\xe7\x1b\x59\x31\x6d\x56\xac\xcc\x4b\x55\xb0\x32\x61\xf1\x43\x94\x82\xab\x1a\xe5\x47\x97\xc2\x04\x92\x30\xde\x9e\x9b\x0d\x1b\x56\x36\x68\x26\x1a\x94\x68\xb7\x4a\xaf\xcf\x36\xe9\x2e\x49\x89\x16\x98\x25\x77\x1b\x5d\x8e\xf8\xda\xdd\xd7\x79\xc1\x64\x81\x65\x99\xbc\xcf\xae\x7e\xce\xe0\x5f\x5e\x86\xf2\xd8\x6e\xe6\x54\x03\x0b\x26\xd2\xda\x5f\x75\x89\x03\x17\x3c\x9c\xc5\xaa\x2e\xd1\x22\x98\x86\x96\x74\xd1\x94\xe5\x2e\x83\xeb\x46\xc2\xe7\x36\xa3\x6d\x8b\x97\xcf\x74\x13\x68\xac\x14\xa5\x07\x4c\x5b\xc1\xca\x72\xd7\x15\x03\xcc\x18\xb4\xc3\xab\xd0\x43\xea\x2b\x8b\xdc\x58\x66\x9b\x54\x0e\xf5\xf4\xe9\xd3\xa7\x17\x17\x17\x17\xbd\xb5\xe8\xf9\x70\xe3\xa6\x02\x09\x90\xe0\x24\xab\xae\x26\x46\x3e\x25\x44\x31\x34\x1c\x42\x21\xed\x83\x33\xbc\xc9\xce\x5f\xeb\xfe\xdc\xe9\x46\x06\xd7\xfb\x43\x4f\x72\x78\xc5\x27\xdb\x1b\x8b\xdf\x91\xc9\x33\x22\x58\xa8\xaa\x62\x92\xe7\xae\x8e\x73\x59\x25\xb1\x5c\xce\x6c\x4e\x99\x48\xc2\xe8\x7e\x9f\x15\x15\x3f\x1c\x42\xf5\xb7\xdf\x67\x34\xd1\xee\x6a\x3c\x1c\x1c\x53\xd2\xdc\xc3\xe1\x36\xcb\x06\x6d\xbb\xf4\x71\x97\xc7\xfd\x3c\xd2\x3f\xd9\xef\x29\x99\x0d\x06\x08\xe4\xe1\x70\x0b\x2b\x16\x2a\xe4\xbe\xc3\xed\x09\x99\x6e\x3d\xdd\x70\x79\x15\xc7\xe1\x5e\x00\x59\x36\x50\xec\x06\x13\x71\x41\xff\x4c\x17\x3b\x9d\x53\x9c\x8c\xd2\x69\x37\x3f\x74\x12\xf7\x3a\x3a\xe8\x27\xc7\x1a\x25\x47\x59\x3c\x24\x9c\xdd\xa4\xf3\xed\x74\x47\x24\x19\xd3\x57\xf7\x9a\xf9\x9a\x8d\x73\x3f\x0a\x22\x86\x46\xa7\xf2\xb2\x1e\xcd\xa9\x45\xc2\xf5\xff\xe1\x1d\x11\xfd\x79\xd8\x3e\xf9\xba\x15\xbc\x4b\x73\x7f\xce\x1a\x4e\x3c\x19\x29\x24\xc3\xeb\x78\x44\xb7\x67\xae\xe4\x10\xaa\x50\x3b\x9f\x7b\xe7\x38\x44\xfe\x06\x68\x6b\xf3\x21\x2c\xc0\x1b\x4d\x2b\x19\xcc\xf6\xf3\x9f\xbf\x6e\xbf\x45\x1f\x17\xaa\x91\x3c\x0f\x78\x03\x53\x25\x37\x40\x89\x36\xc9\xc1\xdb\x95\x28\x56\xb0\x75\x8d\x67\xc2\xc5\x7d\xde\x68\x57\x08\x45\xa3\x35\x05\x26\x3a\x18\xdb\x09\xee\x92\xf2\xbf\x49\x03\x33\xce\x17\x8a\xdf\xe4\xb4\xc0\xf7\x6b\x46\x2a\xbf\xdf\xe4\xbb\x12\x99\x71\xdd\x9d\x8d\xe0\xe8\x40\x91\x3c\x61\x87\x85\xd2\x5d\xa6\xf5\x02\xc6\x6d\x0d\xd6\xb5\x77\x6c\x31\x79\x5a\xe7\xba\x02\x62\x82\xa1\xd0\x59\x4d\x2c\x86\x82\x9d\x6a\x40\xa3\x5b\xf9\x2d\x93\xb6\x6b\x92\x81\x5d\x09\xf3\x0f\xf8\x66\xf7\xec\xed\xb7\x13\xec\x8c\x95\xb3\x77\x5d\xea\x55\x65\x9f\x62\x53\xd1\x55\x23\x54\x16\x2d\x1b\x34\xf6\x76\x82\xdd\xb8\xc8\x0f\xf2\xb0\x7d\x52\x98\xe8\x63\x80\x97\x87\x5e\x79\xaa\xc7\xed\x47\x9d\x5f\xd0\x6b\x93\x6a\x74\x2d\x20\x3e\x03\x56\xf6\x6b\xa3\xf6\x5c\x13\x1c\xdd\xce\x08\x46\x80\x69\x6c\x0f\xe3\xb3\x8e\x0a\x81\x0b\x8d\x85\x0d\xf4\xa8\x7d\x3b\x7f\xec\xed\xe0\xf5\xf5\xf5\xd5\xf5\x4d\x02\xf7\xc5\xe9\x1f\xf0\xe2\x70\x67\xe0\xe2\x62\x20\x3f\xd1\xfa\x98\x89\xd7\x52\x6d\x65\x4e\xa9\xe4\xf8\x5d\x40\x52\x14\xaa\x30\x2b\x83\xee\x51\x00\x94\x2c\x77\x60\x9a\xda\xbf\x70\x3d\x73\xdd\xf8\xcc\xec\x8c\xc5\x0a\xe6\x42\x72\x21\x97\x06\x94\x86\xa5\xb0\xab\x66\x9e\x15\xaa\x6a\xdf\x34\x86\x13\x2a\xad\x63\x52\x55\x68\x64\x36\x05\xd3\xbd\x38\x82\x13\x39\xe2\xad\xad\xb0\x2b\x70\x4f\x95\x50\xa1\x31\x6c\x89\x2f\x68\x10\xb5\x3e\x1c\xdc\xf3\x93\x1f\x2b\x14\xf7\x03\xf4\x63\xa4\xdc\xed\x41\xf2\x64\x3a\x08\x89\xdf\xa1\xd2\xbf\x08\xd2\x02\x91\xe7\x42\x6e\xd4\x3a\x05\xe8\x07\x77\xaf\xd1\xd1\xf2\x62\x8e\x1c\x69\x1a\x6c\x57\xee\xd1\x2b\x20\xb5\xfe\xc1\x31\x0c\xfd\x35\x68\xd7\xb8\x6b\x9b\x6c\x54\x10\x31\xab\xf4\x50\x03\xb1\x95\x71\xfd\xa8\x4f\x31\x98\xb7\xb4\x1f\x83\x9e\x51\x9b\xb1\x0b\x9d\x4b\x65\xfd\x6d\x98\x30\xf8\xa6\xdf\xae\x76\x97\xb9\x93\x06\x46\xe7\xde\xae\x8e\x4a\xae\x31\xa3\xae\xbc\xab\x84\xa9\x98\x2d\x52\xf5\x1d\x39\xd8\x6e\x0f\x9a\xc0\x9d\x09\x1e\x2f\x5c\x21\x4f\xdf\x44\xfc\x78\xc0\x00\x5c\xa1\xef\x3c\x3a\x23\x6e\x59\x1d\xbd\x91\x50\xd5\x53\x72\xd4\x86\xf7\xa3\xd1\x8d\x61\x27\x42\x83\x88\xb6\x17\x2b\x45\x2a\x6c\x97\x7e\x94\x8e\x79\x58\x92\xb6\xe3\x4d\xb6\xc2\x6f\xc2\xd2\xbd\xa7\x1e\xa1\x52\xda\x61\x67\xee\xe5\xdb\xcd\xf1\x3f\xa7\xc4\x39\x42\x1c\x09\xf5\xf5\x43\x00\x9d\xc4\xd5\x1d\x05\x8f\xe8\x89\x01\xdf\x06\xf4\xa1\xc4\x2f\x16\xa5\x89\xa0\xf1\x8b\x4b\x72\xc8\x9d\xaf\x71\xc5\xe4\x4b\x4c\xe5\x39\xdd\x51\x5e\xa2\x7f\xb1\x0d\xdc\xdb\xbd\x32\x84\x6e\x5e\x77\x93\xd1\xfd\x26\x8a\xde\xf1\x9d\x1c\x53\x0f\x3d\xf7\x1e\xbb\xd3\xd3\x5a\x4b\xe0\x3b\x72\xd8\x15\x0e\x14\xc6\x2e\xca\x4c\xee\xda\xbd\x41\x24\xd2\x5b\xf6\xd1\xb8\x86\x2e\x7b\x0b\x61\xd4\x8d\x46\x97\x0f\xdf\xb9\xbe\xf3\x19\x7a\x2c\x1f\xae\x7f\x71\x08\x5c\x2f\xd4\x1d\xa5\x4f\x47\x4d\x98\x5b\xff\x0c\x3f\x05\x48\xc5\xca\x85\xd2\x55\x32\x72\x6f\xe2\xf8\x10\x82\x0c\xde\xeb\x1d\xb0\x25\x13\x72\xac\xe7\xa3\x75\xfe\xbb\x51\xb2\x25\xdb\xa2\xe2\x03\x0f\xde\xff\xbe\xb9\x7a\x0b\x42\xd6\x8d\x05\xce\x2c\x83\x37\x21\x1a\x4f\x8a\x8a\x3f\x21\xea\x1d\xb6\xc4\x6a\xd1\x1a\xda\xe2\x3c\x6c\x9c\xd4\xc7\x0f\xf7\x9c\x8d\xb8\xb8\x0c\xb6\x38\x0f\x3b\x62\xe6\xde\x3e\x9c\x58\x2d\x48\xa6\x60\xd2\xe7\x1b\x73\xf4\x37\x3e\xf2\xd0\x19\xeb\x26\x65\x10\x32\xd9\xa6\xe6\xcc\xe2\x09\xf5\x59\x05\x85\x92\x1b\xd4\xf6\xc4\xbc\x55\x7d\x1d\x63\x81\xed\xbb\x7b\x96\xab\x71\xb3\xb9\x93\x7a\x04\x71\x92\xd3\x73\x66\x90\x83\x92\xfd\xe3\x73\x57\xd5\x68\x28\x84\x2c\xca\x86\xe3\x09\x3c\x66\x8e\x56\x61\x3c\x18\x9e\x24\x86\x0f\x5a\x2a\x10\x61\x56\x06\x97\xd6\xb7\x19\x94\x5d\xb9\x9c\xc2\xb1\xc3\xa2\x91\x81\x1b\x22\x81\xcc\x7c\x2c\x94\xc4\xf0\xf2\x5e\x91\x16\xfc\x52\x63\x31\x85\x11\x02\xd6\xb8\x76\x91\xe7\x88\xe0\x73\xb2\xfa\x95\xe8\x1d\xf0\x8e\xec\x48\xad\x6a\x6c\x9f\xf4\x32\xf8\xd8\x5d\x26\x91\xf2\x68\xda\xac\xa5\x45\xda\x1e\x31\xe9\x19\xb9\x9e\x83\x3b\x31\x4c\x39\x95\xe5\x16\x73\x2e\xf4\x24\xb2\xbe\xd7\x2d\xf2\xa3\x8d\x7b\xad\x84\xf4\xa9\xa1\xef\x45\x58\x0c\x05\x0e\x25\x64\x1d\x2d\xcd\xc0\x34\x45\xf4\xca\xb8\xda\xe8\x98\xa9\xef\x77\xe3\xe3\xcb\xeb\xb7\x97\x6f\x7f\x9c\x5e\xf9\xc4\x09\x0f\xab\x7d\xb6\x4c\xcb\xb6\xff\xae\xd1\x26\xf3\xcd\x6b\x1a\x23\x6f\x3f\xc5\xc6\xfb\x2d\xb0\x85\x45\xed\x73\xdd\x17\xfe\x32\xa2\x1b\xf4\x76\x68\xa3\x05\x7b\xee\x21\xf2\xc1\xd7\x4f\xff\x6b\x9e\x5e\xba\x09\x1c\xed\xf8\x16\x77\x96\x29\xc3\xe6\x58\x6b\x2c\x88\x2b\x72\x8d\x75\xc9\x8a\xe4\x1e\xa0\x14\x94\xec\xa8\x92\x87\xc4\xda\xbd\xfb\x7a\x6a\x39\x7e\x70\xd8\x8a\xb2\x04\xa3\x94\x24\x2a\xea\x2c\xcc\xa0\x0e\x34\x63\x7c\x65\xe1\x5a\x46\xb8\x3d\x52\x67\x2c\xb2\x89\xd8\x43\x24\xce\xa9\x09\xcc\x4a\x35\x25\x27\x78\x06\x6d\x06\x1f\x8c\xef\x9e\xf6\xbb\x17\x24\xed\x7e\x8d\x3f\x9b\xb4\x88\x9c\xfc\xc8\x52\x12\x2e\x6f\x81\xd2\xbf\xbb\xb5\x0a\x9d\x07\x4f\x16\x0f\x30\xe9\x0e\x31\xdb\x0c\x2e\xde\x98\x51\x37\x3f\x2e\x68\x6c\xd3\xc5\xcf\xfc\xfa\xdf\xf7\x8d\x03\x2b\x45\x25\x6c\x2e\x96\x52\xe9\x24\xa4\xb8\xa5\x03\xc3\xb9\x29\x0e\x95\xfb\x75\x5a\x8f\x10\x87\x7a\x75\x53\xad\x17\x2b\x26\x97\xc8\xe6\xc9\xaf\xb2\x7e\x69\x2d\xb6\x05\x90\x89\x7e\x97\x3b\xdf\xa1\x6d\x75\x64\x70\x49\xe6\xa9\x88\x9c\xb0\x17\x1c\x02\x93\x97\x6a\x99\x1b\xf1\x47\x0a\x40\xa9\x96\x37\xe2\x0f\x77\x3f\xf9\x09\x47\x1e\x77\x5b\x94\x49\xf7\xe2\x4e\x05\xf7\x1c\xed\x16\x51\xc2\x73\x77\xeb\x7d\xf7\x7c\x32\x94\x0a\x2b\xa5\x77\x43\x68\xbc\xc4\xb9\x80\xbe\xfb\xfe\xef\x0e\xd2\xdf\xbe\xfb\x7e\x32\x26\xba\xc4\x54\x93\x2a\x60\xc2\xe8\x59\x60\x9e\xfb\xf8\xfc\xff\x73\xfa\x33\x8e\xc7\xf5\xa2\xf2\x5a\xab\x1a\xb5\x15\x98\x7a\xf4\x88\x0c\xd8\xe3\x2b\xdf\xe2\xb6\x5a\x60\xdb\xe4\xf6\x8d\xad\x4e\x59\x6c\x86\xdf\xcf\x89\x91\x12\xb9\x72\x1b\x8e\x98\x51\x58\x50\x8d\x35\x82\xbb\x85\x78\xaf\xd9\x46\x18\x98\x37\xa2\xe4\xc3\x8d\x30\xe7\x8a\xa7\x03\x4d\xdb\x76\x12\x15\xb4\xbb\xff\x88\x10\xe4\x09\xa1\x87\x68\xbb\xf6\xde\x7e\x9f\x85\xbf\x8d\xe1\xde\xef\xb3\x4a\xc8\xd0\xec\xa1\xff\x61\xc5\x48\xe9\xe8\xa0\xc6\x9c\xca\x1f\xb2\x14\x4d\xc4\x72\x3c\x48\x51\x7e\x71\x52\x99\xdf\x93\xe3\x26\x8b\xef\xb3\x2a\x6e\x87\x36\xf4\xf3\x5c\xb3\x06\xbf\x08\x93\xfc\xea\xf5\x4e\xab\xe6\x88\x62\x58\xa9\x91\xf1\x1d\x78\x15\x6d\xe2\x6d\xb0\xc4\x82\xf2\x3f\x65\x57\xe8\xfb\xc0\xe3\x90\x62\x7b\x74\xb4\x5b\x15\xae\xc2\x93\xce\x4e\x4c\x18\x0a\x25\x2d\x73\x5f\x1f\x4a\x35\xad\xe5\xea\xac\xf7\x9e\xc3\x5c\x50\xa6\x80\xb8\xf7\xb1\x28\xdc\x38\xa7\xfd\xab\x6d\x68\x09\xf8\xc6\x5a\x10\x3a\x2e\x5b\xc6\x23\xd4\xfb\x9c\x35\x57\x1b\xd4\x5a\x70\x8e\xa9\x1a\x8c\x10\xf6\xbf\x6e\xed\x9e\x33\xbb\xa9\x31\x57\xe8\xbf\x56\x4d\x5d\xa8\x5c\x98\xbc\x6e\xe6\xa5\x28\x06\x7a\x22\x41\x36\x96\x7f\xfe\x03\x5e\x66\xc0\x4f\xbc\xd3\xa3\x9b\x11\x5d\x38\x6e\x99\x23\x6c\x84\x11\xf3\xd2\x57\x44\x54\x0d\x12\x3b\xba\x77\x58\xaa\x04\x77\x54\x5d\x28\x99\xf8\x20\xf6\xd5\xeb\x7f\x7e\xf8\x71\x72\x7a\xed\xa4\x1f\x96\x5b\xf3\xf9\x32\x37\xc8\x74\xb1\xa2\x7a\x2a\x2e\x4c\x5b\x23\xa4\xfe\x89\x4e\x9c\xd1\x2e\xcc\x71\x55\x11\xf7\x30\x9d\xeb\x8e\xc0\x46\xae\x68\x82\x72\xba\x7b\xff\xec\x9d\x7b\xe6\xae\x25\x68\xed\xb1\xf6\xcf\xb1\x03\xff\x38\xe4\xd5\x3d\x2d\xdf\x10\x91\x17\xf0\x83\x43\xd0\xfd\xb3\x10\xf7\xca\x44\xca\x1e\x0a\x60\xf8\xf3\xe8\x87\x63\xe8\xbf\xf8\xc6\x2f\x14\x02\xa4\x47\xb7\x8f\xfe\x1b\x00\x00\xff\xff\x34\xf1\xdd\x53\x51\x36\x00\x00")
+var _wski18nResourcesEn_usAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x5b\x6d\x8f\xdb\xb6\xb2\xfe\x9e\x5f\x31\x08\x2e\x90\x16\x70\x94\xb4\x17\x17\xb8\x08\xb0\x38\xc8\x69\xd2\x76\x4f\x9b\x6c\xb0\x9b\x9c\xa0\x48\x17\x0a\x2d\x8e\x6d\xd6\x12\x29\x90\x94\x1d\xd7\xf0\x7f\x3f\x18\xbe\x48\xb2\x77\x29\x69\x9d\x16\x27\x5f\xea\x86\xc3\x99\x67\x86\xe4\xc3\x99\xa1\xf2\xe9\x11\xc0\xfe\x11\x00\xc0\x63\xc1\x1f\xbf\x80\xc7\x95\x59\xe6\xb5\xc6\x85\xf8\x92\xa3\xd6\x4a\x3f\x9e\xf9\x51\xab\x99\x34\x25\xb3\x42\x49\x12\x7b\xed\xc6\x1e\x01\x1c\x66\x03\x1a\x84\x5c\xa8\x84\x82\x4b\x1a\x1a\x9b\x6f\x9a\xa2\x40\x63\x12\x2a\x6e\xc2\xe8\x98\x96\x2d\xd3\x52\xc8\x65\x42\xcb\xc7\x30\x9a\xd4\x52\x54\x3c\xe7\x68\x8a\xbc\x54\x72\x99\x6b\xac\x95\xb6\x09\x5d\xd7\x6e\xd0\x80\x92\xc0\xb1\x2e\xd5\x0e\x39\xa0\xb4\xc2\x0a\x34\xf0\x8d\xc8\x30\x9b\xc1\x3b\x56\xac\xd9\x12\xcd\x0c\x5e\x16\x34\xcf\xcc\xe0\xbd\x16\xcb\x25\x6a\x33\x83\xeb\xa6\xa4\x11\xb4\x45\xf6\x2d\x30\x03\x5b\x2c\x4b\xfa\xaf\xc6\x02\xa5\x75\x33\x36\xce\x9a\x01\x21\xc1\xae\x10\x4c\x8d\x85\x58\x08\xe4\x20\x59\x85\xa6\x66\x05\x66\x93\x7d\x51\x2a\xe5\xc9\x4b\xb0\x4a\x95\x60\x55\x70\x64\x06\x8d\xf4\xbf\x80\x49\x0e\x66\x27\x0b\x50\x35\xca\xed\x4a\x98\x35\xd4\xc1\x27\x68\x8c\x90\x4b\x60\x50\x31\x29\x16\x68\xac\x13\x56\x35\x69\x65\x65\x50\x55\x91\x27\x0b\x51\xb6\xe2\xbf\xbd\x7c\xf3\xeb\x14\xcc\x66\xa5\xb4\x1d\x5e\x80\x77\x5a\x6d\x04\x47\x03\x0c\x4c\x53\x55\x4c\xef\xc0\xcb\x83\x5a\xc0\x76\xc5\xec\x13\x03\x73\xc4\xde\xf2\x7c\x5d\x18\x03\xa4\xd1\x38\x1a\xb4\x14\xcb\x15\x96\x75\x30\x0d\x3b\xd5\xe8\x49\x21\xa4\x50\x4d\xc7\xb2\x41\x6d\xc8\x76\x2a\x3e\x42\x5a\xe7\x70\x90\x03\xd9\x54\x73\xd4\x2e\x3c\x66\xed\xa1\x0d\xdb\x5a\x94\x6c\x99\xb3\x5a\xe4\x2b\x65\x52\x5e\x7b\x97\x5e\xbe\xbb\x84\xcf\x3f\x5f\xdd\xbc\xff\x3c\x51\xe3\x30\xf6\x9e\xd2\x7f\xbf\xbe\xbe\xb9\xbc\x7a\x3b\x49\x6f\x63\x57\xf9\x1a\x77\x09\xa5\x34\xac\xb4\xf8\xd3\xfd\x05\x7c\xfe\xe5\xf5\x6f\x53\x94\x16\xa8\x6d\x4e\xeb\x92\xd0\x5a\x33\xbb\xa2\x90\x52\xa0\x33\x12\x76\x8b\x38\x45\xb1\x92\x0b\x91\x62\x2a\x3f\xe8\x54\xc1\x37\x1c\x17\xac\x29\x2d\x08\x03\xff\xf3\xf3\xd5\x9b\xd7\xcf\xb2\xad\x59\xd7\x5a\xd5\xe6\xdb\x29\x51\x29\x4b\xb5\xcd\x83\x8e\x14\xbf\x3a\x21\x68\x85\xc6\xb5\x76\xe7\x7b\x28\x2e\x2d\xa7\xb4\x44\x30\x41\xb5\x90\x16\x35\x23\xfa\x4b\xc5\xdc\xa3\xed\xc9\x41\xad\x55\x55\x4f\x02\xbe\xc6\xdd\xe4\xe5\x5c\xe3\x6e\x2a\x68\x1f\xe5\x8a\x49\xb6\x44\x3e\x08\xbb\xd6\xea\x0f\x2c\x6c\x77\x59\x58\x05\x73\x84\x8a\xe9\x35\x72\x88\x1a\xc6\x2d\x06\x3d\x39\x91\x58\xca\x99\x60\xca\x89\x8c\x6b\x8c\x34\x34\xb2\xa2\x47\x6c\x35\x41\x6d\xcb\xb2\x09\xbd\xdd\xf8\x64\xa7\x47\x10\x1a\xd4\x1b\xd4\x25\x1a\x13\xa3\x3d\x41\xb5\xb1\x5a\x24\x35\xfb\xa5\x6b\x0c\x6a\x3a\x24\x42\x22\x07\xdd\x48\x2b\xaa\x96\x5d\x27\x58\xb0\x3a\x1d\x04\x37\x06\xaa\xb1\x75\x33\x05\xac\xdf\x6e\x1b\xd4\x73\x65\x52\x2a\xc3\xe8\xb8\x52\xc7\x35\x79\x25\x0c\x5d\x47\x8e\x45\xd3\x24\xfa\x7e\x85\x40\x12\xb4\x7b\x0b\xcf\xa4\x74\x4a\x84\x01\xa9\x2c\x78\x55\x8d\x46\x9e\xfd\x3e\x14\x91\x13\x8b\xb5\x18\xb8\x60\xc8\x22\xdd\x04\x24\xf2\x75\x76\xc6\x36\x22\x59\x6a\x65\xce\x33\x15\x5c\x19\xca\x86\x4f\xfd\xf9\xb4\xdf\x67\xf4\xfb\x70\xb8\x9d\xc1\x42\xab\x0a\xf6\xfb\xcc\xa8\x46\x17\x78\x38\x4c\xb2\xe9\x17\x6c\xcc\x26\x89\xc5\xb5\x32\x68\xcf\xb3\xd5\x86\x67\xcc\xda\x51\x1c\xc9\xc5\xf6\x2f\xce\xf7\xb3\x16\xcb\x6d\xce\x5c\x21\x90\x5b\xb5\x46\x39\xea\x32\xcd\x00\x3f\x03\xdc\x8c\xf3\x9c\x6f\x64\xc5\xb4\x59\xb1\x32\x2f\x55\xc1\xca\x84\xc5\x0f\x51\x0a\xae\x6a\x94\x1f\x5d\x0a\x13\x48\xc2\x78\x7b\x6e\x36\x6c\x58\xd9\xa0\x99\x68\x50\xa2\xdd\x2a\xbd\x3e\xdb\xa4\xbb\x24\x25\x5a\x60\x96\xdc\x6d\x74\x39\xe2\x6b\x77\x5f\xe7\x05\x93\x05\x96\x65\xf2\x3e\xbb\xfa\x25\x83\x1f\xbc\x0c\xe5\xb1\xdd\xcc\xa9\x06\x16\x4c\xa4\xb5\xbf\xea\x12\x07\x2e\x78\x38\x8b\x55\x5d\xa2\x45\x30\x0d\x2d\xe9\xa2\x29\xcb\x5d\x06\xd7\x8d\x84\xcf\x6d\x46\xdb\x16\x2f\x9f\xe9\x26\xd0\x58\x29\x4a\x0f\x98\xb6\x82\x95\xe5\xae\x2b\x06\x98\x31\x68\x87\x57\xa1\x87\xd4\x57\x16\xb9\xb1\xcc\x36\xa9\x1c\xea\xe9\xd3\xa7\x4f\x2f\x2e\x2e\x2e\x7a\x6b\xd1\xf3\xe1\xc6\x4d\x05\x12\x20\xc1\x49\x56\x5d\x4d\x8c\x7c\x4a\x88\x62\x68\x38\x84\x42\xda\x07\x67\x78\x93\x9d\xbf\xd6\xfd\xb9\xd3\x8d\x0c\xae\xf7\x87\x9e\xe4\xf0\x8a\x4f\xb6\x37\x16\xbf\x23\x93\x67\x44\xb0\x50\x55\xc5\x24\xcf\x5d\x1d\xe7\xb2\x4a\x62\xb9\x9c\xd9\x9c\x32\x91\x84\xd1\xfd\x3e\x2b\x2a\x7e\x38\x84\xea\x6f\xbf\xcf\x68\xa2\xdd\xd5\x78\x38\x38\xa6\xa4\xb9\x87\xc3\x6d\x96\x0d\xda\x76\xe9\xe3\x2e\x8f\xfb\x79\xa4\x7f\xb2\xdf\x53\x32\x1b\x0c\x10\xc8\xc3\xe1\x16\x56\x2c\x54\xc8\x7d\x87\xdb\x13\x32\xdd\x7a\xba\xe1\xf2\x2a\x8e\xc3\xbd\x00\xb2\x6c\xa0\xd8\x0d\x26\xe2\x82\xfe\x95\x2e\x76\x3a\xa7\x38\x19\xa5\xd3\x6e\x7e\xe8\x24\xee\x75\x74\xd0\x4f\x8e\x35\x4a\x8e\xb2\x78\x48\x38\xbb\x49\xe7\xdb\xe9\x8e\x48\x32\xa6\xaf\xee\x35\xf3\x35\x1b\xe7\x7e\x14\x44\x0c\x8d\x4e\xe5\x65\x3d\x9a\x53\x8b\x84\xeb\xff\xc5\x3b\x22\xfa\xf3\xb0\x7d\xf2\x75\x2b\x78\x97\xe6\xfe\x9a\x35\x9c\x78\x32\x52\x48\x86\xd7\xf1\x88\x6e\xcf\x5c\xc9\x21\x54\xa1\x76\x3e\xf7\xce\x71\x88\xfc\x0d\xd0\xd6\xe6\x43\x58\x80\x37\x9a\x56\x32\x98\xed\xe7\x3f\x7f\xdf\x7e\x8b\x3e\x2e\x54\x23\x79\x1e\xf0\x06\xa6\x4a\x6e\x80\x12\x6d\x92\x83\xb7\x2b\x51\xac\x60\xeb\x1a\xcf\x84\x8b\xfb\xbc\xd1\xae\x10\x8a\x46\x6b\x0a\x4c\x74\x30\xb6\x13\xdc\x25\xe5\x7f\x93\x06\x66\x9c\x2f\x14\xbf\xc9\x69\x81\xef\xd7\x8c\x54\x7e\xbf\xcb\x77\x25\x32\xe3\xba\x3b\x1b\xc1\xd1\x81\x22\x79\xc2\x0e\x0b\xa5\xbb\x4c\xeb\x05\x8c\xdb\x1a\xac\x6b\xef\xd8\x62\xf2\xb4\xce\x75\x05\xc4\x04\x43\xa1\xb3\x9a\x58\x0c\x05\x3b\xd5\x80\x46\xb7\xf2\x5b\x26\x6d\xd7\x24\x03\xbb\x12\xe6\x1f\xf0\xcd\xee\xd9\xdb\x6f\x27\xd8\x19\x2b\x67\xef\xba\xd4\xab\xca\x3e\xc5\xa6\xa2\xab\x46\xa8\x2c\x5a\x36\x68\xec\xed\x04\xbb\x71\x91\x1f\xe4\x61\xfb\xa4\x30\xd1\xc7\x00\x2f\x0f\xbd\xf2\x54\x8f\xdb\x8f\x3a\xbf\xa0\xd7\x26\xd5\xe8\x5a\x40\x7c\x06\xac\xec\xd7\x46\xed\xb9\x26\x38\xba\x9d\x11\x8c\x00\xd3\xd8\x1e\xc6\x67\x1d\x15\x02\x17\x1a\x0b\x1b\xe8\x51\xfb\x76\xfe\xd8\xdb\xc1\xeb\xeb\xeb\xab\xeb\x9b\x04\xee\x8b\xd3\x3f\xe0\xc5\xe1\xce\xc0\xc5\xc5\x40\x7e\xa2\xf5\x31\x13\xaf\xa5\xda\xca\x9c\x52\xc9\xf1\xbb\x80\xa4\x28\x54\x61\x56\x06\xdd\xa3\x00\x28\x59\xee\xc0\x34\xb5\x7f\xe1\x7a\xe6\xba\xf1\x99\xd9\x19\x8b\x15\xcc\x85\xe4\x42\x2e\x0d\x28\x0d\x4b\x61\x57\xcd\x3c\x2b\x54\xd5\xbe\x69\x0c\x27\x54\x5a\xc7\xa4\xaa\xd0\xc8\x6c\x0a\xa6\x7b\x71\x04\x27\x72\xc4\x5b\x5b\x61\x57\xe0\x9e\x2a\xa1\x42\x63\xd8\x12\x5f\xd0\x20\x6a\x7d\x38\xb8\xe7\x27\x3f\x56\x28\xee\x07\xe8\xc7\x48\xb9\xdb\x83\xe4\xc9\x74\x10\x12\xbf\x43\xa5\x7f\x13\xa4\x05\x22\xcf\x85\xdc\xa8\x75\x0a\xd0\x8f\xee\x5e\xa3\xa3\xe5\xc5\x1c\x39\xd2\x34\xd8\xae\xdc\xa3\x57\x40\x6a\xfd\x83\x63\x18\xfa\x7b\xd0\xae\x71\xd7\x36\xd9\xa8\x20\x62\x56\xe9\xa1\x06\x62\x2b\xe3\xfa\x51\x9f\x62\x30\x6f\x69\x3f\x06\x3d\xa3\x36\x63\x17\x3a\x97\xca\xfa\xdb\x30\x61\xf0\x4d\xbf\x5d\xed\x2e\x73\x27\x0d\x8c\xce\xbd\x5d\x1d\x95\x5c\x63\x46\x5d\x79\x57\x09\x53\x31\x5b\xa4\xea\x3b\x72\xb0\xdd\x1e\x34\x81\x3b\x13\x3c\x5e\xb8\x42\x9e\xbe\x89\xf8\xf1\x80\x01\xb8\x42\xdf\x79\x74\x46\xdc\xb2\x3a\x7a\x23\xa1\xaa\xa7\xe4\xa8\x0d\xef\x47\xa3\x1b\xc3\x4e\x84\x06\x11\x6d\x2f\x56\x8a\x54\xd8\x2e\xfd\x28\x1d\xf3\xb0\x24\x6d\xc7\x9b\x6c\x85\xdf\x84\xa5\x7b\x4f\x3d\x42\xa5\xb4\xc3\xce\xdc\xcb\xb7\x9b\xe3\x7f\x4e\x89\x73\x84\x38\x12\xea\xeb\x87\x00\x3a\x89\xab\x3b\x0a\x1e\xd1\x13\x03\xbe\x0d\xe8\x43\x89\x5f\x2c\x4a\x13\x41\xe3\x17\x97\xe4\x90\x3b\x5f\xe3\x8a\xc9\x97\x98\xca\x73\xba\xa3\xbc\x44\xff\x62\x1b\xb8\xb7\x7b\x65\x08\xdd\xbc\xee\x26\xa3\xfb\x4d\x14\xbd\xe3\x3b\x39\xa6\x1e\x7a\xee\x3d\x76\xa7\xa7\xb5\x96\xc0\x77\xe4\xb0\x2b\x1c\x28\x8c\x5d\x94\x99\xdc\xb5\x7b\x83\x48\xa4\xb7\xec\xa3\x71\x0d\x5d\xf6\x16\xc2\xa8\x1b\x8d\x2e\x1f\xbe\x73\x7d\xe7\x33\xf4\x58\x3e\x5c\xff\xea\x10\xb8\x5e\xa8\x3b\x4a\x9f\x8e\x9a\x30\xb7\xfe\x19\x7e\x0a\x90\x8a\x95\x0b\xa5\xab\x64\xe4\xde\xc4\xf1\x21\x04\x19\xbc\xd7\x3b\x60\x4b\x26\xe4\x58\xcf\x47\xeb\xfc\x0f\xa3\x64\x4b\xb6\x45\xc5\x07\x1e\xbc\xff\x75\x73\xf5\x16\x84\xac\x1b\x0b\x9c\x59\x06\x6f\x42\x34\x9e\x14\x15\x7f\x42\xd4\x3b\x6c\x89\xd5\xa2\x35\xb4\xc5\x79\xd8\x38\xa9\x8f\x1f\xee\x39\x1b\x71\x71\x19\x6c\x71\x1e\x76\xc4\xcc\xbd\x7d\x38\xb1\x5a\x90\x4c\xc1\xa4\xcf\x37\xe6\xe8\x6f\x7c\xe4\xa1\x33\xd6\x4d\xca\x20\x64\xb2\x4d\xcd\x99\xc5\x13\xea\xb3\x0a\x0a\x25\x37\xa8\xed\x89\x79\xab\xfa\x3a\xc6\x02\xdb\x77\xf7\x2c\x57\xe3\x66\x73\x27\xf5\x08\xe2\x24\xa7\xe7\xcc\x20\x07\x25\xfb\xc7\xe7\xae\xaa\xd1\x50\x08\x59\x94\x0d\xc7\x13\x78\xcc\x1c\xad\xc2\x78\x30\x3c\x49\x0c\x1f\xb4\x54\x20\xc2\xac\x0c\x2e\xad\x6f\x33\x28\xbb\x72\x39\x85\x63\x87\x45\x23\x03\x37\x44\x02\x99\xf9\x58\x28\x89\xe1\xe5\xbd\x22\x2d\xf8\xa5\xc6\x62\x0a\x23\x04\xac\x71\xed\x22\xcf\x11\xc1\xe7\x64\xf5\x2b\xd1\x3b\xe0\x1d\xd9\x91\x5a\xd5\xd8\x3e\xe9\x65\xf0\xb1\xbb\x4c\x22\xe5\xd1\xb4\x59\x4b\x8b\xb4\x3d\x62\xd2\x33\x72\x3d\x07\x77\x62\x98\x72\x2a\xcb\x2d\xe6\x5c\xe8\x49\x64\x7d\xaf\x5b\xe4\x47\x1b\xf7\x5a\x09\xe9\x53\x43\xdf\x8b\xb0\x18\x0a\x1c\x4a\xc8\x3a\x5a\x9a\x81\x69\x8a\xe8\x95\x71\xb5\xd1\x31\x53\x0f\xbb\x51\x30\x69\x73\xc3\x36\x98\x73\x55\xac\x31\xf5\x71\xe1\x0f\x4c\x3a\xad\x6c\x83\xf0\xca\x09\x82\xa8\x5c\x21\x31\x92\x20\x8b\x12\x73\x56\x6a\x64\x7c\x97\xe3\x17\x61\x92\x9f\xb6\xfc\x48\x07\x23\x48\x82\x97\x4c\xe8\xfe\xf8\xf2\xfa\xed\xe5\xdb\x9f\xa6\x17\x6d\x71\xc2\xc3\xca\xb6\x2d\xd3\xb2\x7d\x3a\xd0\x68\x93\xa9\xf2\x35\x8d\xd1\x42\x7d\x8a\x6f\x06\xb7\xc0\x16\x16\xb5\x4f\xd3\x5f\xf8\x7b\x94\x2e\xff\xdb\xa1\x33\x12\xec\xb9\x37\xd4\x07\xdf\x9c\xfd\x0f\x91\x7a\x99\x32\x70\xb4\xe3\xa7\xd3\x59\xa6\xe2\x80\x63\xad\xb1\x20\x9a\xcb\x35\xd6\x25\x2b\x92\xdb\x97\xb2\x67\xb2\xa3\x4a\x1e\x6a\x02\xf7\x64\xed\x59\xf1\xf8\xad\x64\x2b\xca\x12\x8c\x52\x92\x58\xb4\xb3\x30\x83\x3a\x30\xa4\xf1\x45\x91\xeb\x76\xe1\xf6\x48\x9d\xb1\xc8\x26\x62\x0f\x91\x38\xa7\x9c\x31\x2b\xd5\x94\x9c\xe0\x19\xb4\x19\x7c\x30\xbe\xf1\xdb\x6f\xbc\x90\xb4\xfb\x35\xfe\xe2\xd3\x22\x72\xf2\x23\x4b\x49\xb8\xbc\x05\xca\x5c\xef\x96\x59\x74\xe8\x3c\xcf\x3d\xc0\xa4\xe3\x1f\xb6\x19\x5c\xbc\x31\xa3\x6e\x7e\x5c\xd0\xd8\x61\x8c\x5f\x28\xf6\x3f\x4d\x1c\x07\x56\x8a\x4a\xd8\x5c\x2c\xa5\xd2\x49\x48\x71\x4b\x07\x72\x76\x53\x1c\x2a\xf7\xeb\xb4\x94\x22\xfa\xf7\xea\xa6\x5a\x2f\x56\x4c\x2e\x91\xcd\x93\x1f\x94\xfd\xda\x5a\x6c\x6b\x37\x13\xfd\x2e\x77\xbe\xb9\xdc\xea\xc8\xe0\x92\xcc\x53\xfd\x3b\x61\x2f\x38\x04\x26\x2f\xd5\x32\x37\xe2\xcf\x14\x80\x52\x2d\x6f\xc4\x9f\xee\x6a\xf5\x13\x8e\x3c\xee\xb6\x28\x93\xee\x63\x81\x25\x6a\x98\xa3\xdd\x22\x4a\x78\xee\x2e\xec\xef\x9e\x4f\x86\x52\x61\xa5\xf4\x6e\x08\x8d\x97\x38\x17\xd0\x77\xdf\xff\xbf\x83\xf4\x7f\xdf\x7d\x3f\x19\x13\xdd\xbf\xaa\x49\xd5\x5e\x61\xf4\x2c\x30\xcf\x7d\x7c\xfe\xf7\x39\xfd\x19\xc7\xe3\xda\x68\x79\xad\x55\x8d\xda\x0a\x4c\xdd\x57\x91\x01\x7b\x7c\xe5\xbb\xf3\x56\x0b\x6c\xfb\xf3\xbe\x27\xd7\x29\x8b\x7d\xfc\xfb\x39\x31\x52\x22\x57\x6e\xc3\x11\x33\x0a\x0b\xaa\xb1\x46\x70\xb7\x10\xef\x35\xdb\x08\x03\xf3\x46\x94\x7c\xb8\x87\xe7\x5c\xf1\x74\xa0\x69\xdb\x4e\xa2\x82\x76\xf7\x1f\x11\x82\x3c\x21\xf4\x10\x6d\xd7\x99\xdc\xef\xb3\xf0\xb7\x31\xdc\xfb\x7d\x56\x09\x19\xfa\x54\xf4\x3f\xac\x18\xa9\x7a\x1d\xd4\x98\x0e\xfa\x43\x96\xa2\x89\xd8\x49\x08\x52\x94\x1a\x9d\x34\x15\xee\x49\xcf\x93\x7d\x83\xb3\x9a\x05\x0e\x6d\x68\x45\xba\x3e\xd3\x60\x56\x73\xa7\xcb\x74\x44\x31\x27\xe9\x4e\xac\x19\x0c\x96\x58\x50\xea\xaa\xec\x0a\x7d\x0b\x7b\x1c\x52\xec\xec\x8e\x36\xda\xc2\x55\x78\xd2\x94\x8a\x09\x43\xa1\xa4\x65\xee\xc3\x49\xa9\xa6\x75\x8b\x9d\xf5\xde\x4b\x9e\x0b\xca\x14\x10\xf7\xbe\x73\x85\x1b\xe7\xb4\xf5\xb6\x0d\xdd\x0c\xdf\x13\x0c\x42\xc7\x15\xd7\x78\x84\x7a\x5f\xe2\xe6\x6a\x83\x5a\x0b\xce\x31\x55\x3e\x12\xc2\xfe\x87\xb9\xdd\x4b\x6c\x37\x35\xe6\x0a\xfd\x87\xb6\xa9\x0b\x95\x0b\x93\xd7\xcd\xbc\x14\xc5\x40\x3b\x27\xc8\xc6\xca\xd5\x7f\x7b\xcc\x0c\xf8\x89\x77\xda\x8b\x33\xa2\x0b\xc7\x2d\x73\x84\x8d\x30\x62\x5e\xfa\x62\x8e\x0a\x59\x62\x47\xf7\x84\x4c\x45\xec\x8e\x0a\x23\x25\x13\xdf\xf2\xbe\x7a\xfd\xcf\x0f\x3f\x4d\x4e\xaf\x9d\xf4\xc3\x72\x6b\x3e\x5f\xe6\x06\x99\x2e\x56\x54\x0a\xc6\x85\x69\xcb\x9b\xd4\xbf\x2e\x8a\x33\xda\x85\x39\x2e\x88\xe2\x1e\xa6\x73\xdd\x11\xd8\xc8\x15\x4d\x50\x4e\x77\xef\x5f\xbd\x73\xcf\xdc\xb5\x04\xad\x3d\xd6\xfe\x25\x79\xe0\xdf\xb5\xbc\xba\xa7\x5b\x1d\x22\xf2\x02\x7e\x74\x08\xba\x7f\xd1\xe2\x1e\xc8\x48\xd9\x43\x01\x0c\x7f\xd9\xfd\x70\x0c\xfd\xc7\xea\xf8\x71\x45\x80\xf4\xe8\xf6\xd1\x7f\x02\x00\x00\xff\xff\xd9\xcc\x87\x67\x0c\x37\x00\x00")
 
 func wski18nResourcesEn_usAllJsonBytes() ([]byte, error) {
 	return bindataRead(
@@ -112,7 +112,7 @@ func wski18nResourcesEn_usAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 13905, mode: os.FileMode(420), modTime: time.Unix(1520557776, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 14092, mode: os.FileMode(438), modTime: time.Unix(1520952786, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -132,7 +132,7 @@ func wski18nResourcesEs_esAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1520374115, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 0, mode: os.FileMode(438), modTime: time.Unix(1517928990, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -152,7 +152,7 @@ func wski18nResourcesFr_frAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 101, mode: os.FileMode(420), modTime: time.Unix(1520374115, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 101, mode: os.FileMode(438), modTime: time.Unix(1517928990, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -172,7 +172,7 @@ func wski18nResourcesIt_itAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1520374115, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 0, mode: os.FileMode(438), modTime: time.Unix(1517928990, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -192,7 +192,7 @@ func wski18nResourcesJa_jaAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1520374115, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 0, mode: os.FileMode(438), modTime: time.Unix(1517928990, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -212,7 +212,7 @@ func wski18nResourcesKo_krAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1520374115, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 0, mode: os.FileMode(438), modTime: time.Unix(1517928990, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -232,7 +232,7 @@ func wski18nResourcesPt_brAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1520374115, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 0, mode: os.FileMode(438), modTime: time.Unix(1517928990, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -252,7 +252,7 @@ func wski18nResourcesZh_hansAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1520374115, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", size: 0, mode: os.FileMode(438), modTime: time.Unix(1517928990, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -272,7 +272,7 @@ func wski18nResourcesZh_hantAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1520374115, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", size: 0, mode: os.FileMode(438), modTime: time.Unix(1517928990, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -329,14 +329,14 @@ func AssetNames() []string {
 
 // _bindata is a table, holding each asset generator, mapped to its name.
 var _bindata = map[string]func() (*asset, error){
-	"wski18n/resources/de_DE.all.json":   wski18nResourcesDe_deAllJson,
-	"wski18n/resources/en_US.all.json":   wski18nResourcesEn_usAllJson,
-	"wski18n/resources/es_ES.all.json":   wski18nResourcesEs_esAllJson,
-	"wski18n/resources/fr_FR.all.json":   wski18nResourcesFr_frAllJson,
-	"wski18n/resources/it_IT.all.json":   wski18nResourcesIt_itAllJson,
-	"wski18n/resources/ja_JA.all.json":   wski18nResourcesJa_jaAllJson,
-	"wski18n/resources/ko_KR.all.json":   wski18nResourcesKo_krAllJson,
-	"wski18n/resources/pt_BR.all.json":   wski18nResourcesPt_brAllJson,
+	"wski18n/resources/de_DE.all.json": wski18nResourcesDe_deAllJson,
+	"wski18n/resources/en_US.all.json": wski18nResourcesEn_usAllJson,
+	"wski18n/resources/es_ES.all.json": wski18nResourcesEs_esAllJson,
+	"wski18n/resources/fr_FR.all.json": wski18nResourcesFr_frAllJson,
+	"wski18n/resources/it_IT.all.json": wski18nResourcesIt_itAllJson,
+	"wski18n/resources/ja_JA.all.json": wski18nResourcesJa_jaAllJson,
+	"wski18n/resources/ko_KR.all.json": wski18nResourcesKo_krAllJson,
+	"wski18n/resources/pt_BR.all.json": wski18nResourcesPt_brAllJson,
 	"wski18n/resources/zh_Hans.all.json": wski18nResourcesZh_hansAllJson,
 	"wski18n/resources/zh_Hant.all.json": wski18nResourcesZh_hantAllJson,
 }
@@ -380,18 +380,17 @@ type bintree struct {
 	Func     func() (*asset, error)
 	Children map[string]*bintree
 }
-
 var _bintree = &bintree{nil, map[string]*bintree{
 	"wski18n": &bintree{nil, map[string]*bintree{
 		"resources": &bintree{nil, map[string]*bintree{
-			"de_DE.all.json":   &bintree{wski18nResourcesDe_deAllJson, map[string]*bintree{}},
-			"en_US.all.json":   &bintree{wski18nResourcesEn_usAllJson, map[string]*bintree{}},
-			"es_ES.all.json":   &bintree{wski18nResourcesEs_esAllJson, map[string]*bintree{}},
-			"fr_FR.all.json":   &bintree{wski18nResourcesFr_frAllJson, map[string]*bintree{}},
-			"it_IT.all.json":   &bintree{wski18nResourcesIt_itAllJson, map[string]*bintree{}},
-			"ja_JA.all.json":   &bintree{wski18nResourcesJa_jaAllJson, map[string]*bintree{}},
-			"ko_KR.all.json":   &bintree{wski18nResourcesKo_krAllJson, map[string]*bintree{}},
-			"pt_BR.all.json":   &bintree{wski18nResourcesPt_brAllJson, map[string]*bintree{}},
+			"de_DE.all.json": &bintree{wski18nResourcesDe_deAllJson, map[string]*bintree{}},
+			"en_US.all.json": &bintree{wski18nResourcesEn_usAllJson, map[string]*bintree{}},
+			"es_ES.all.json": &bintree{wski18nResourcesEs_esAllJson, map[string]*bintree{}},
+			"fr_FR.all.json": &bintree{wski18nResourcesFr_frAllJson, map[string]*bintree{}},
+			"it_IT.all.json": &bintree{wski18nResourcesIt_itAllJson, map[string]*bintree{}},
+			"ja_JA.all.json": &bintree{wski18nResourcesJa_jaAllJson, map[string]*bintree{}},
+			"ko_KR.all.json": &bintree{wski18nResourcesKo_krAllJson, map[string]*bintree{}},
+			"pt_BR.all.json": &bintree{wski18nResourcesPt_brAllJson, map[string]*bintree{}},
 			"zh_Hans.all.json": &bintree{wski18nResourcesZh_hansAllJson, map[string]*bintree{}},
 			"zh_Hant.all.json": &bintree{wski18nResourcesZh_hantAllJson, map[string]*bintree{}},
 		}},
@@ -444,3 +443,4 @@ func _filePath(dir, name string) string {
 	cannonicalName := strings.Replace(name, "\\", "/", -1)
 	return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
 }
+
diff --git a/wski18n/resources/en_US.all.json b/wski18n/resources/en_US.all.json
index 51b38083..6d3cabfa 100644
--- a/wski18n/resources/en_US.all.json
+++ b/wski18n/resources/en_US.all.json
@@ -323,6 +323,14 @@
     "id": "msg_err_action_function_remote_dir_not_supported",
     "translation": "Action [{{.action}}] has function pointing to remote directory [{{.url}}], such actions are not supported."
   },
+  {
+    "id": "msg_err_cant_save_docker",
+    "translation": "Cannot save Docker images."
+  },
+  {
+    "id": "msg_err_file_already_exists",
+    "translation": "File already exists."
+  },
   {
     "id": "WARNINGS",
     "translation": "================= WARNINGS ==================="


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services