diff --git a/vendor/github.com/bclicn/color/LICENSE b/vendor/github.com/bclicn/color/LICENSE
new file mode 100644
index 0000000..c22bc5f
--- /dev/null
+++ b/vendor/github.com/bclicn/color/LICENSE
@@ -0,0 +1,23 @@
+
+The MIT License (MIT)
+
+Copyright (c) 2016-2018 bcli
+
+
+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/bclicn/color/README.md b/vendor/github.com/bclicn/color/README.md
new file mode 100644
index 0000000..1065950
--- /dev/null
+++ b/vendor/github.com/bclicn/color/README.md
@@ -0,0 +1,43 @@
+# GoLang Colorized Output
+
+GoLang colorized output library for Mac & Linux Shell, [中文版说明](README_CN.md)
+
+## Showcase
+![img](showcase.jpg)
+
+## Install
+
+1. __Make sure__ your've read [GoLang Official File Structure](https://golang.org/doc/code.html)
+2. Make sure you've set a correct GOPATH
+3. `$ go get github.com/bclicn/color`
+4. In your script, `import "github.com/bclicn/color"` then call `color.Test()`
+5. Use `fmt.Println("Hello" + color.Red("World"))` to assemble a colorized output
+6. API examples available in `color-test.go`
+
+## Quick (brainless) Usage
+
+1. Download `color.go`
+2. Modify its `package color` to `package main`
+3. Put your script under the same directory and write `fmt.Println(Red("I'm red !!!"))`
+4. Run `go run color.go yourScript.go`
+5. Or build by `go build color.go yourScript.go`
+
+## A simple test script
+
+    package main
+
+    import (
+	    "fmt"
+	    "github.com/bclicn/color"
+    )
+
+    func main(){
+	    fmt.Println(color.Red("Red output"))
+	    color.Test()
+    }
+
+## License
+
+[MIT](LICENSE)
+
+bcli, 2018-7-11
diff --git a/vendor/github.com/bclicn/color/README_CN.md b/vendor/github.com/bclicn/color/README_CN.md
new file mode 100644
index 0000000..25b447e
--- /dev/null
+++ b/vendor/github.com/bclicn/color/README_CN.md
@@ -0,0 +1,43 @@
+# GoLang 彩色输出
+
+用于Mac和Linux Shell的GoLang彩色文字输出, [English Version](README.md)
+
+## 效果展示
+![img](showcase.jpg)
+
+## 安装
+
+1. __确保__你已经读过  [GoLang官方文件结构](https://golang.org/doc/code.html)
+2. 确保你的GOPATH环境变量正确
+3. `go get github.com/bclicn/color`
+3. 在你的脚本中,`import "github.com/bclicn/color"` 然后调用 `color.Test()`查看全部效果
+5. 使用`fmt.Println("Hello" + color.Red("World"))`进行彩色输出
+4. API调用示例在`color-test.go`
+
+## 快速(无脑)使用
+
+1. 下载`color.go`
+2. 将其第一行的`package color`改为`package main`
+3. 把你的脚本放在同一个文件夹下,直接调用如`fmt.Println(Red("I'm red !!!"))`
+4. 运行`go run color.go yourScript.go`
+5. 你也可以直接`go build color.go yourScript.go`
+
+## 快速调用示例
+
+    package main
+
+    import (
+	    "fmt"
+	    "github.com/bclicn/color"
+    )
+
+    func main(){
+	    fmt.Println(color.Red("Red output"))
+	    color.Test()
+    }
+
+##  License
+
+[MIT](LICENSE)
+
+bcli, 2018-7-11
diff --git a/vendor/github.com/bclicn/color/color-test.go b/vendor/github.com/bclicn/color/color-test.go
new file mode 100644
index 0000000..59e9b5b
--- /dev/null
+++ b/vendor/github.com/bclicn/color/color-test.go
@@ -0,0 +1,87 @@
+package color
+
+import (
+	"fmt"
+)
+
+// github.com/bclicn/color
+// colorized output for Mac & Linux terminal
+// version: 1.0.0
+// author:  bcli, bclicn@gmail.com, 2016-11-4
+// see:     http://misc.flogisoft.com/bash/tip_colors_and_formatting
+// usage:
+// For official code layout
+// 	$ go get github.com/bclicn/color
+// 	# in your project
+// 	import "github.com/bclicn/color"
+// 	func main() {
+//		color.Test()
+//	}
+
+func ColorTest() {
+
+	const HEAD = " "
+	const TAIL = " "
+
+	// regular
+	fmt.Println(HEAD + Black("black") + TAIL)
+	fmt.Println(HEAD + Red("red") + TAIL)
+	fmt.Println(HEAD + Green("green") + TAIL)
+	fmt.Println(HEAD + Yellow("yellow") + TAIL)
+	fmt.Println(HEAD + Blue("blue") + TAIL)
+	fmt.Println(HEAD + Purple("purple") + TAIL)
+	fmt.Println(HEAD + Cyan("cyan") + TAIL)
+	fmt.Println(HEAD + LightGray("light gray") + TAIL)
+	fmt.Println(HEAD + DarkGray("dark gray") + TAIL)
+	fmt.Println(HEAD + LightRed("light red") + TAIL)
+	fmt.Println(HEAD + LightGreen("light green") + TAIL)
+	fmt.Println(HEAD + LightYellow("light yellow") + TAIL)
+	fmt.Println(HEAD + LightBlue("light blue") + TAIL)
+	fmt.Println(HEAD + LightPurple("light purple") + TAIL)
+	fmt.Println(HEAD + LightCyan("light cyan") + TAIL)
+	fmt.Println(HEAD + White("white") + TAIL)
+
+	// bold
+	fmt.Println(HEAD + BBlack("bold black") + TAIL)
+	fmt.Println(HEAD + BRed("bold red") + TAIL)
+	fmt.Println(HEAD + BGreen("bold green") + TAIL)
+	fmt.Println(HEAD + BYellow("bold yellow") + TAIL)
+	fmt.Println(HEAD + BBlue("bold blue") + TAIL)
+	fmt.Println(HEAD + BPurple("bold purple") + TAIL)
+	fmt.Println(HEAD + BCyan("bold cyan") + TAIL)
+	fmt.Println(HEAD + BLightGray("bold light gray") + TAIL)
+	fmt.Println(HEAD + BDarkGray("bold dark gray") + TAIL)
+	fmt.Println(HEAD + BLightRed("bold light red") + TAIL)
+	fmt.Println(HEAD + BLightGreen("bold light green") + TAIL)
+	fmt.Println(HEAD + BLightYellow("bold light yellow") + TAIL)
+	fmt.Println(HEAD + BLightBlue("bold light blue") + TAIL)
+	fmt.Println(HEAD + BLightPurple("bold light purple") + TAIL)
+	fmt.Println(HEAD + BLightCyan("bold light cyan") + TAIL)
+	fmt.Println(HEAD + BWhite("bold white") + TAIL)
+
+	// background
+	fmt.Println(HEAD + GBlack("background black") + TAIL)
+	fmt.Println(HEAD + GRed("background red") + TAIL)
+	fmt.Println(HEAD + GGreen("background green") + TAIL)
+	fmt.Println(HEAD + GYellow("background yellow") + TAIL)
+	fmt.Println(HEAD + GBlue("background blue") + TAIL)
+	fmt.Println(HEAD + GPurple("background purple") + TAIL)
+	fmt.Println(HEAD + GCyan("background cyan") + TAIL)
+	fmt.Println(HEAD + GLightGray("background light gray") + TAIL)
+	fmt.Println(HEAD + GDarkGray("background dark gray") + TAIL)
+	fmt.Println(HEAD + GLightRed("background light red") + TAIL)
+	fmt.Println(HEAD + GLightGreen("background light green") + TAIL)
+	fmt.Println(HEAD + GLightYellow("background light yellow") + TAIL)
+	fmt.Println(HEAD + GLightBlue("background light blue") + TAIL)
+	fmt.Println(HEAD + GLightPurple("background light purple") + TAIL)
+	fmt.Println(HEAD + GLightCyan("background light cyan") + TAIL)
+	fmt.Println(HEAD + GWhite("background white") + TAIL)
+
+	// special
+	fmt.Println("A " + Bold("bold") + " text")
+	fmt.Println("This is a " + Dim("dimmed") + " text")
+	fmt.Println("Add a " + Underline("underline"))
+	fmt.Println("Use " + Invert("invert") + " to highlight your text")
+	fmt.Println("Your password is:" + Hide("myPass"))
+	fmt.Println("OMG I'm " + Blink("blinking") + " !!!") // blinking works only on mac
+}
diff --git a/vendor/github.com/bclicn/color/color.go b/vendor/github.com/bclicn/color/color.go
new file mode 100644
index 0000000..ce7fc83
--- /dev/null
+++ b/vendor/github.com/bclicn/color/color.go
@@ -0,0 +1,330 @@
+// github.com/bclicn/color
+// colorized output for Mac & Linux terminal
+// version: 1.0.0
+// author:  bcli, bclicn@gmail.com, 2018-7-11
+// see:     http://misc.flogisoft.com/bash/tip_colors_and_formatting
+// usage:
+// Official layout
+// 	$ go get github.com/bclicn/color
+// 	# in your project
+// 	import "github.com/bclicn/color"
+// 	func main() {
+//		fmt.Println(color.Red("I'm red!"))
+//		color.Test()
+//	}
+
+package color
+
+import (
+	"strconv"
+)
+
+const (
+	// common
+	reset  = "\033[0m" // auto reset the rest of text to default color
+	normal = 0
+	bold   = 1 // increase this value if you want bolder text
+	// special
+	dim       = 2
+	underline = 4
+	blink     = 5
+	reverse   = 7
+	hidden    = 8
+	// color
+	black       = 30 // default = 39
+	red         = 31
+	green       = 32
+	yellow      = 33
+	blue        = 34
+	purple      = 35 // purple = magenta
+	cyan        = 36
+	lightGray   = 37
+	darkGray    = 90
+	lightRed    = 91
+	lightGreen  = 92
+	lightYellow = 93
+	lightBlue   = 94
+	lightPurple = 95
+	lightCyan   = 96
+	white       = 97
+)
+
+// you can use custom color code and font size by calling this function
+func Render(colorCode int, fontSize int, content string) string {
+	return "\033[" + strconv.Itoa(fontSize) + ";" + strconv.Itoa(colorCode) + "m" + content + reset
+}
+
+// black text (use this with caution since most geeks use dark console)
+func Black(txt string) string {
+	return Render(black, normal, txt)
+}
+
+// red text
+func Red(txt string) string {
+	return Render(red, normal, txt)
+}
+
+// green text
+func Green(txt string) string {
+	return Render(green, normal, txt)
+}
+
+// yellow text
+func Yellow(txt string) string {
+	return Render(yellow, normal, txt)
+}
+
+// blue text
+func Blue(txt string) string {
+	return Render(blue, normal, txt)
+}
+
+// purple text
+func Purple(txt string) string {
+	return Render(purple, normal, txt)
+}
+
+// cyan text
+func Cyan(txt string) string {
+	return Render(cyan, normal, txt)
+}
+
+// light gray text
+func LightGray(txt string) string {
+	return Render(lightGray, normal, txt)
+}
+
+// dark gray text
+func DarkGray(txt string) string {
+	return Render(darkGray, normal, txt)
+}
+
+// light red text
+func LightRed(txt string) string {
+	return Render(lightRed, normal, txt)
+}
+
+// light green text
+func LightGreen(txt string) string {
+	return Render(lightGreen, normal, txt)
+}
+
+// light yellow text
+func LightYellow(txt string) string {
+	return Render(lightYellow, normal, txt)
+}
+
+// light blue text
+func LightBlue(txt string) string {
+	return Render(lightBlue, normal, txt)
+}
+
+// light purple text
+func LightPurple(txt string) string {
+	return Render(lightPurple, normal, txt)
+}
+
+// light cyan text
+func LightCyan(txt string) string {
+	return Render(lightCyan, normal, txt)
+}
+
+// white text
+func White(txt string) string {
+	return Render(white, normal, txt)
+}
+
+// black text (use this with caution since most geeks use dark console)
+func BBlack(txt string) string {
+	return Render(black, bold, txt)
+}
+
+// bold red
+func BRed(txt string) string {
+	return Render(red, bold, txt)
+}
+
+// bold green
+func BGreen(txt string) string {
+	return Render(green, bold, txt)
+}
+
+// bold yellow
+func BYellow(txt string) string {
+	return Render(yellow, bold, txt)
+}
+
+// bold blue
+func BBlue(txt string) string {
+	return Render(blue, bold, txt)
+}
+
+// bold purple
+func BPurple(txt string) string {
+	return Render(purple, bold, txt)
+}
+
+// bold cyan
+func BCyan(txt string) string {
+	return Render(cyan, bold, txt)
+}
+
+// bold light gray
+func BLightGray(txt string) string {
+	return Render(lightGray, bold, txt)
+}
+
+// bold dark gray
+func BDarkGray(txt string) string {
+	return Render(darkGray, bold, txt)
+}
+
+// bold light red
+func BLightRed(txt string) string {
+	return Render(lightRed, bold, txt)
+}
+
+// bold light green
+func BLightGreen(txt string) string {
+	return Render(lightGreen, bold, txt)
+}
+
+// bold light yellow
+func BLightYellow(txt string) string {
+	return Render(lightYellow, bold, txt)
+}
+
+// bold light blue
+func BLightBlue(txt string) string {
+	return Render(lightBlue, bold, txt)
+}
+
+// bold light purple
+func BLightPurple(txt string) string {
+	return Render(lightPurple, bold, txt)
+}
+
+// bold light cyan
+func BLightCyan(txt string) string {
+	return Render(lightCyan, bold, txt)
+}
+
+// bold white
+func BWhite(txt string) string {
+	return Render(white, bold, txt)
+}
+
+// black background (use this with caution since most of geeks use dark console)
+func GBlack(txt string) string {
+	return Render(black+1, normal, txt)
+}
+
+// red background
+func GRed(txt string) string {
+	return Render(red+1, normal, txt)
+}
+
+// green background
+func GGreen(txt string) string {
+	return Render(green+1, normal, txt)
+}
+
+// yellow background
+func GYellow(txt string) string {
+	return Render(yellow+1, normal, txt)
+}
+
+// blue background
+func GBlue(txt string) string {
+	return Render(blue+1, normal, txt)
+}
+
+// purple background
+func GPurple(txt string) string {
+	return Render(purple+1, normal, txt)
+}
+
+// cyan background
+func GCyan(txt string) string {
+	return Render(cyan+1, normal, txt)
+}
+
+// light gray background
+func GLightGray(txt string) string {
+	return Render(lightGray+1, normal, txt)
+}
+
+// dark gray background
+func GDarkGray(txt string) string {
+	return Render(darkGray+1, normal, txt)
+}
+
+// light red background
+func GLightRed(txt string) string {
+	return Render(lightRed+1, normal, txt)
+}
+
+// light green background
+func GLightGreen(txt string) string {
+	return Render(lightGreen+1, normal, txt)
+}
+
+// light yellow background
+func GLightYellow(txt string) string {
+	return Render(lightYellow+1, normal, txt)
+}
+
+// blue background
+func GLightBlue(txt string) string {
+	return Render(lightBlue+1, normal, txt)
+}
+
+// light purple background
+func GLightPurple(txt string) string {
+	return Render(lightPurple+1, normal, txt)
+}
+
+// light cyan background
+func GLightCyan(txt string) string {
+	return Render(lightCyan+1, normal, txt)
+}
+
+// give text a white background
+func GWhite(txt string) string {
+	return Render(white+1, normal, txt)
+}
+
+// bold text
+func Bold(txt string) string {
+	return Render(bold, normal, txt)
+}
+
+// dimmed text
+func Dim(txt string) string {
+	return Render(dim, normal, txt)
+}
+
+// underlined text
+func Underline(txt string) string {
+	return Render(underline, 0, txt)
+}
+
+// make given text blink, not supported by all consoles
+func Blink(txt string) string {
+	return Render(blink, normal, txt)
+}
+
+// invert the color of text and its background
+func Invert(txt string) string {
+	return Render(reverse, normal, txt)
+}
+
+// hide given text, useful for password input
+func Hide(txt string) string {
+	return Render(hidden, normal, txt)
+}
+
+// test all functions
+func Test() {
+	ColorTest()
+}
diff --git a/vendor/github.com/bclicn/color/showcase.jpg b/vendor/github.com/bclicn/color/showcase.jpg
new file mode 100644
index 0000000..39f270c
--- /dev/null
+++ b/vendor/github.com/bclicn/color/showcase.jpg
Binary files differ
