You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ro...@apache.org on 2021/11/28 08:15:11 UTC

[servicecomb-service-center] branch master updated: delete syncer

This is an automated email from the ASF dual-hosted git repository.

robotljw pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-service-center.git


The following commit(s) were added to refs/heads/master by this push:
     new d4a185e  delete syncer
     new 9be272f  Merge pull request #1170 from robotLJW/master
d4a185e is described below

commit d4a185ede4fa174540e16f7f12d527d7297acb8e
Author: robotljw <79...@qq.com>
AuthorDate: Sat Nov 27 11:45:09 2021 +0800

    delete syncer
---
 cmd/syncer/conf/chassis.yaml                       |    8 -
 cmd/syncer/conf/microservice.yaml                  |    3 -
 cmd/syncer/syncer.go                               |   32 -
 go.mod                                             |   19 +-
 go.sum                                             |  359 -----
 scripts/ut_test_in_docker.sh                       |    2 -
 syncer/README-ZH.md                                |  120 --
 syncer/README.md                                   |  151 ---
 syncer/TODO-ZH.md                                  |   36 -
 syncer/TODO.md                                     |   36 -
 syncer/client/sync_client.go                       |  100 --
 syncer/client/sync_client_test.go                  |   45 -
 syncer/client/watch_client.go                      |  188 ---
 syncer/client/watch_client_test.go                 |   50 -
 syncer/cmd/daemon.go                               |  101 --
 syncer/cmd/root.go                                 |   39 -
 syncer/cmd/version.go                              |   38 -
 syncer/config/config.go                            |  105 --
 syncer/config/config_test.go                       |  231 ----
 syncer/config/const.go                             |  110 --
 syncer/config/merge.go                             |  130 --
 syncer/config/verify.go                            |  202 ---
 syncer/etcd/etcd.go                                |  134 --
 syncer/etcd/etcd_test.go                           |   80 --
 syncer/etcd/option.go                              |  118 --
 syncer/grpc/grpc.go                                |  137 --
 syncer/grpc/grpc_test.go                           |   78 --
 syncer/grpc/option.go                              |   48 -
 syncer/images/AccountServerReply.jpg               |  Bin 198944 -> 0 bytes
 syncer/images/EurekaAccountServerSuccess.jpg       |  Bin 90866 -> 0 bytes
 syncer/images/EurekaServerHasAll.jpg               |  Bin 75367 -> 0 bytes
 syncer/images/EurekaServerSuccess.jpg              |  Bin 63247 -> 0 bytes
 syncer/images/HelloServerDiscoverySuccess.jpg      |  Bin 126329 -> 0 bytes
 syncer/images/HelloServerResult.jpg                |  Bin 44530 -> 0 bytes
 syncer/images/MultiServicecenters.png              |  Bin 37135 -> 0 bytes
 syncer/images/ServiceCenterHelloServerSuccess.jpg  |  Bin 72537 -> 0 bytes
 syncer/images/ServiceCenterServerHasAll.jpg        |  Bin 63431 -> 0 bytes
 syncer/images/ServiceCenterServerSuccess.jpg       |  Bin 66059 -> 0 bytes
 syncer/images/SyncerArchitecture.png               |  Bin 98321 -> 0 bytes
 syncer/pkg/mock/mockplugin/instance.go             |   63 -
 syncer/pkg/mock/mockplugin/service.go              |   63 -
 syncer/pkg/mock/mockplugin/servicecenter.go        |  165 ---
 syncer/pkg/mock/mockservicecenter/instance.go      |   89 --
 syncer/pkg/mock/mockservicecenter/service.go       |   51 -
 syncer/pkg/mock/mockservicecenter/servicecenter.go |  171 ---
 syncer/pkg/mock/mocksotrage/etcd.go                |   68 -
 syncer/pkg/mock/mocksotrage/storage.go             |  104 --
 syncer/pkg/syssig/signal.go                        |   90 --
 syncer/pkg/syssig/signal_test.go                   |   41 -
 syncer/pkg/ticker/ticker.go                        |   69 -
 syncer/pkg/ticker/ticker_test.go                   |   36 -
 syncer/pkg/utils/addr.go                           |   53 -
 syncer/pkg/utils/addr_test.go                      |   26 -
 syncer/pkg/utils/atomic_bool.go                    |   55 -
 syncer/pkg/utils/atomic_bool_test.go               |   44 -
 syncer/pkg/utils/error.go                          |   30 -
 syncer/pkg/utils/files.go                          |   51 -
 syncer/pkg/utils/files_test.go                     |   57 -
 syncer/plugins/eureka/eureka.go                    |  115 --
 syncer/plugins/eureka/instance.go                  |  109 --
 syncer/plugins/eureka/service.go                   |   39 -
 syncer/plugins/eureka/transform.go                 |  228 ----
 syncer/plugins/eureka/type.go                      |  155 ---
 syncer/plugins/export.go                           |   42 -
 syncer/plugins/option.go                           |   78 --
 syncer/plugins/plugin.go                           |  167 ---
 syncer/plugins/plugin_test.go                      |  100 --
 syncer/plugins/servicecenter.go                    |   40 -
 syncer/plugins/servicecenter/instance.go           |   58 -
 syncer/plugins/servicecenter/instance_test.go      |   72 -
 syncer/plugins/servicecenter/schemas.go            |   42 -
 syncer/plugins/servicecenter/service.go            |   88 --
 syncer/plugins/servicecenter/service_test.go       |   68 -
 syncer/plugins/servicecenter/servicecenter.go      |   88 --
 syncer/plugins/servicecenter/servicecenter_test.go |   57 -
 syncer/plugins/servicecenter/transform.go          |  493 -------
 syncer/plugins/servicecenter/transform_test.go     |  127 --
 syncer/proto/sc/servicecenter.pb.go                | 1059 ---------------
 syncer/proto/sc/servicecenter.proto                |   77 --
 syncer/proto/syncer.pb.go                          | 1413 --------------------
 syncer/proto/syncer.proto                          |  104 --
 syncer/proto/types.go                              |   60 -
 .../eureka/account-server/pom.xml                  |   76 --
 .../servicecenter/account/AccountApplication.java  |   32 -
 .../servicecenter/account/AccountController.java   |   68 -
 .../src/main/resources/application.yaml            |   32 -
 .../eureka/eureka-server/pom.xml                   |   72 -
 .../eurekaserver/EurekaServerApplication.java      |   33 -
 .../src/main/resources/application.yaml            |   37 -
 syncer/samples/multi-servicecenters/eureka/pom.xml |   34 -
 .../multi-servicecenters-ZH.md                     |  251 ----
 .../hello-server/conf/microservice.yaml            |   29 -
 .../servicecenter/hello-server/main.go             |  157 ---
 .../hello-server/servicecenter/config.go           |  145 --
 .../hello-server/servicecenter/servicecenter.go    |  262 ----
 syncer/serf/handler.go                             |  174 ---
 syncer/serf/option.go                              |   80 --
 syncer/serf/query.go                               |   52 -
 syncer/serf/serf.go                                |  271 ----
 syncer/serf/serf_test.go                           |  177 ---
 syncer/server/convert.go                           |  129 --
 syncer/server/handler.go                           |  209 ---
 syncer/server/handler_test.go                      |  231 ----
 syncer/server/http.go                              |   62 -
 syncer/server/server.go                            |  365 -----
 syncer/server/transform.go                         |  226 ----
 syncer/servicecenter/exclude.go                    |   63 -
 syncer/servicecenter/servicecenter.go              |  211 ---
 syncer/servicecenter/servicecenter_test.go         |  222 ---
 syncer/servicecenter/storage/operation.go          |   72 -
 syncer/servicecenter/storage/storage.go            |  309 -----
 syncer/servicecenter/sync.go                       |   94 --
 syncer/task/idle/idle.go                           |   47 -
 syncer/task/idle/idle_test.go                      |   35 -
 syncer/task/task.go                                |   71 -
 syncer/task/task_test.go                           |   51 -
 syncer/task/ticker/ticker.go                       |  101 --
 syncer/task/ticker/ticker_test.go                  |   60 -
 syncer/version/version.go                          |   43 -
 119 files changed, 12 insertions(+), 13476 deletions(-)

diff --git a/cmd/syncer/conf/chassis.yaml b/cmd/syncer/conf/chassis.yaml
deleted file mode 100644
index 89a076b..0000000
--- a/cmd/syncer/conf/chassis.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-servicecomb:
-  registry:
-    disabled: true
-    address: http://127.0.0.1:30100
-  protocols:
-    rest:
-      listenAddress: 127.0.0.1:30300
diff --git a/cmd/syncer/conf/microservice.yaml b/cmd/syncer/conf/microservice.yaml
deleted file mode 100644
index dd097f6..0000000
--- a/cmd/syncer/conf/microservice.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-servicecomb:
-  service:
-    name: Syncer
\ No newline at end of file
diff --git a/cmd/syncer/syncer.go b/cmd/syncer/syncer.go
deleted file mode 100644
index dcf3b88..0000000
--- a/cmd/syncer/syncer.go
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package main
-
-import (
-	"os"
-
-	"github.com/apache/servicecomb-service-center/pkg/log"
-	"github.com/apache/servicecomb-service-center/syncer/cmd"
-)
-
-func main() {
-	if err := cmd.Execute(); err != nil {
-		log.Error("Failed to execute syncer command", err)
-		os.Exit(-1)
-	}
-}
diff --git a/go.mod b/go.mod
index 79e1181..8b96897 100644
--- a/go.mod
+++ b/go.mod
@@ -7,10 +7,17 @@ replace (
 
 require (
 	github.com/NYTimes/gziphandler v1.1.1
+	github.com/Shopify/sarama v1.19.0 // indirect
+	github.com/Shopify/toxiproxy v2.1.4+incompatible // indirect
 	github.com/apache/servicecomb-service-center/api v0.0.0
+	github.com/apache/thrift v0.13.0 // indirect
 	github.com/astaxie/beego v1.12.2
+	github.com/cenkalti/backoff v2.2.1+incompatible // indirect
 	github.com/cheggaaa/pb v1.0.25
 	github.com/deckarep/golang-set v1.7.1
+	github.com/eapache/go-resiliency v1.1.0 // indirect
+	github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect
+	github.com/eapache/queue v1.1.0 // indirect
 	github.com/elithrar/simple-scrypt v1.3.0
 	github.com/ghodss/yaml v1.0.0
 	github.com/go-chassis/cari v0.5.1-0.20211124031617-99bda218b0cf
@@ -20,11 +27,9 @@ require (
 	github.com/go-chassis/go-chassis/v2 v2.3.0
 	github.com/go-chassis/kie-client v0.1.1-0.20210926011742-97eed4281056
 	github.com/go-chassis/openlog v1.1.3
-	github.com/go-kit/kit v0.10.0 // indirect
 	github.com/golang-jwt/jwt v3.2.1+incompatible
-	github.com/golang/protobuf v1.5.2
 	github.com/gorilla/websocket v1.4.3-0.20210424162022-e8629af678b7
-	github.com/hashicorp/serf v0.8.3
+	github.com/hashicorp/go-version v1.2.0 // indirect
 	github.com/iancoleman/strcase v0.1.2
 	github.com/jinzhu/copier v0.3.0
 	github.com/karlseguin/ccache v2.0.3-0.20170217060820-3ba9789cfd2c+incompatible
@@ -33,14 +38,16 @@ require (
 	github.com/olekukonko/tablewriter v0.0.5
 	github.com/onsi/ginkgo v1.15.0
 	github.com/onsi/gomega v1.10.5
+	github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 // indirect
 	github.com/opentracing/opentracing-go v1.1.0
 	github.com/openzipkin/zipkin-go-opentracing v0.3.3-0.20180123190626-6bb822a7f15f
 	github.com/orcaman/concurrent-map v0.0.0-20210501183033-44dafcb38ecc
 	github.com/patrickmn/go-cache v2.1.0+incompatible
-	github.com/pkg/errors v0.9.1
+	github.com/pierrec/lz4 v2.0.5+incompatible // indirect
 	github.com/prometheus/client_golang v1.11.0
 	github.com/prometheus/client_model v0.2.0
 	github.com/prometheus/procfs v0.6.0
+	github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a // indirect
 	github.com/rs/cors v1.7.0 // v1.1
 	github.com/satori/go.uuid v1.1.0
 	github.com/spf13/cobra v1.1.3
@@ -50,15 +57,13 @@ require (
 	github.com/widuu/gojson v0.0.0-20170212122013-7da9d2cd949b
 	go.etcd.io/etcd/api/v3 v3.5.0
 	go.etcd.io/etcd/client/v3 v3.5.0
-	go.etcd.io/etcd/server/v3 v3.5.0
 	go.mongodb.org/mongo-driver v1.4.2
 	go.uber.org/zap v1.17.0
 	golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b
 	golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba
 	google.golang.org/grpc v1.40.0
-	google.golang.org/protobuf v1.27.1
+	gopkg.in/cheggaaa/pb.v1 v1.0.25 // indirect
 	gopkg.in/natefinch/lumberjack.v2 v2.0.0
-	gopkg.in/yaml.v2 v2.4.0
 	k8s.io/api v0.19.5
 	k8s.io/apimachinery v0.19.5
 	k8s.io/client-go v0.19.5
diff --git a/go.sum b/go.sum
index 8ac05d3..c49fa85 100644
--- a/go.sum
+++ b/go.sum
@@ -7,46 +7,30 @@ cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTj
 cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
 cloud.google.com/go v0.51.0 h1:PvKAVQWCtlGUSlZkGW3QLelKaWq7KYv/MW1EboG8bfM=
 cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw=
-cloud.google.com/go/bigquery v1.0.1 h1:hL+ycaJpVE9M7nLoiXb/Pn10ENE2u+oddxbD8uu0ZVU=
 cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
-cloud.google.com/go/datastore v1.0.0 h1:Kt+gOPPp2LEPWp8CSfxhsM8ik9CcyE/gYu+0r+RnZvM=
 cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
-cloud.google.com/go/firestore v1.1.0 h1:9x7Bx0A9R5/M9jibeJeZWqjeVEIxYW9fZYqB9a70/bY=
 cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
-cloud.google.com/go/pubsub v1.0.1 h1:W9tAK3E57P75u0XLLR82LZyw8VpAnhmyTOxW9qzmyj8=
 cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
-cloud.google.com/go/storage v1.0.0 h1:VV2nUM3wwLLGh9lSABFgZMjInyUbJeaRSE64WuAIQ+4=
 cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
-dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY=
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
 github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
-github.com/Azure/go-autorest/autorest v0.9.6 h1:5YWtOnckcudzIw8lPPBcWOnmIFWMtHci1ZWAZulMSx0=
 github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630=
 github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
-github.com/Azure/go-autorest/autorest/adal v0.8.2 h1:O1X4oexUxnZCaEUGsvMnr8ZGj8HI37tNezwY4npRqA0=
 github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q=
 github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
-github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM=
 github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g=
 github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
 github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
-github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc=
 github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM=
-github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY=
 github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
-github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k=
 github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
 github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
-github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw=
-github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
 github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
 github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
 github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
-github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
 github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
 github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
@@ -54,54 +38,31 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt
 github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
 github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
 github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
-github.com/Shonminh/apollo-client v0.2.0/go.mod h1:Jk6K99uIGxQm7Uyy1gCQTvM/kc1YLp4Qo9/jtGkEXvI=
-github.com/Shonminh/apollo-client v0.4.0 h1:AXGp4wOahrEKjheMXehgsG9B8dEfLQHttRLHeEefvus=
 github.com/Shonminh/apollo-client v0.4.0/go.mod h1:Jk6K99uIGxQm7Uyy1gCQTvM/kc1YLp4Qo9/jtGkEXvI=
 github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s=
 github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
 github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc=
 github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
-github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE=
-github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
-github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw=
-github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=
 github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2cI+DC1Mbh0TJxzA3RcLoMsFw+aXw7E=
 github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
-github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6 h1:45bxf7AZMwWcqkLzDAQugVEwedisr5nRJ1r+7LYnv0U=
 github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
-github.com/alicebob/miniredis v2.5.0+incompatible h1:yBHoLpsyjupjz3NL3MhKMVkR41j82Yjf3KFv7ApYzUI=
 github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk=
-github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg=
 github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
 github.com/apache/thrift v0.0.0-20180125231006-3d556248a8b9 h1:ymi1nHra1RZXqjg5xvka4YVyK+3uKPk2B9HUlPRIiBc=
 github.com/apache/thrift v0.0.0-20180125231006-3d556248a8b9/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
-github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA=
 github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
-github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I=
 github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
-github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to=
 github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
-github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a h1:pv34s756C4pEXnjgPfGYgdhg/ZdajGhyOvzx8k+23nw=
-github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
 github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA=
 github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
 github.com/astaxie/beego v1.12.2 h1:CajUexhSX5ONWDiSCpeQBNVfTzOtPb9e9d+3vuU5FuU=
 github.com/astaxie/beego v1.12.2/go.mod h1:TMcqhsbhN3UFpN+RCfysaxPAbrhox6QSS3NIAEp/uzE=
-github.com/aws/aws-lambda-go v1.13.3 h1:SuCy7H3NLyp+1Mrfp+m80jcbi9KYWAs9/BXwppwRDzY=
-github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
-github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
 github.com/aws/aws-sdk-go v1.34.28 h1:sscPpn/Ns3i0F4HPEWAVcwdIRaZZCuL7llJ2/60yPIk=
 github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48=
-github.com/aws/aws-sdk-go-v2 v0.18.0 h1:qZ+woO4SamnH/eEbjM2IDLhRNwIwND/RQyVlBLp3Jqg=
-github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
-github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd h1:jZtX5jh5IOMu0fpOTC3ayh6QGSPJ/KWOv1lgPvbRw1M=
 github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd/go.mod h1:1b+Y/CofkYwXMUU0OhQqGvsY2Bvgr4j6jfT699wyZKQ=
-github.com/beego/x2j v0.0.0-20131220205130-a0352aadc542 h1:nYXb+3jF6Oq/j8R/y90XrKpreCxIalBWfeyeKymgOPk=
 github.com/beego/x2j v0.0.0-20131220205130-a0352aadc542/go.mod h1:kSeGC/p1AbBiEp5kat81+DSQrZenVBZXklMLaELspWU=
 github.com/benbjohnson/clock v1.0.3 h1:vkLuvpK4fmtSCuo60+yC63p7y0BmQ8gm5ZXGuBCJyXg=
 github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
@@ -109,20 +70,13 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24
 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
-github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY=
 github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
-github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c h1:+0HFd5KSZ/mm3JmhmrDukiId5iR6w4+BdFtfSy4yWIc=
 github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
-github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737 h1:rRISKWyXfVxvoa702s91Zl5oREZTrR3yv+tXrrX7G/g=
 github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60=
-github.com/casbin/casbin v1.7.0 h1:PuzlE8w0JBg/DhIqnkF1Dewf3z+qmUZMVN07PonvVUQ=
 github.com/casbin/casbin v1.7.0/go.mod h1:c67qKN6Oum3UF5Q1+BByfFxkwKvhwW57ITjqwtzR1KE=
-github.com/casbin/casbin/v2 v2.1.2 h1:bTwon/ECRx9dwBy2ewRVr5OiqjeXSGiTUY74sDPQi/g=
-github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
 github.com/cenkalti/backoff v2.0.0+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
 github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
 github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
-github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA=
 github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054 h1:uH66TXeswKn5PW5zdZ39xEwfS9an067BirqA+P4QaLI=
@@ -133,62 +87,39 @@ github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+
 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/cheggaaa/pb v1.0.25 h1:tFpebHTkI7QZx1q1rWGOKhbunhZ3fMaxTvHDWn1bH/4=
 github.com/cheggaaa/pb v1.0.25/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s=
-github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE=
 github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
-github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8=
 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
-github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8=
 github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
-github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec h1:EdRZT3IeKQmfCSrgo8SZ8V3MEnskuJP0wCYNpe+aiXo=
-github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
-github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 h1:F1EaeKL/ta07PY/k9Os/UFtwERei2/XzGemhpGnBKNg=
 github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
 github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403 h1:cqQfy1jclcSy/FwLjemeg3SR1yaINm74aQyupQ0Bl8M=
 github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
 github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
 github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5 h1:xD/lrqdvwsc+O2bjSSi3YqY73Ke3LAiSCx49aCesA0E=
 github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo=
 github.com/cockroachdb/errors v1.2.4 h1:Lap807SXTH5tri2TivECb/4abUkMZC9zRoLarvcKDqs=
 github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA=
 github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f h1:o/kfcElHqOiXqcou5a3rIlMc7oJbMQkeLk0VQJ7zgqY=
 github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI=
-github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w=
-github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
-github.com/coocood/freecache v1.0.1 h1:oFyo4msX2c0QIKU+kuMJUwsKamJ+AKc2JJrKcMszJ5M=
 github.com/coocood/freecache v1.0.1/go.mod h1:ePwxCDzOYvARfHdr1pByNct1at3CoKnsipOHwKlNbzI=
-github.com/coreos/bbolt v1.3.2 h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s=
 github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
-github.com/coreos/etcd v3.3.13+incompatible h1:8F3hqu9fGYLBifCmRCJsicFqDx/D68Rt3q1JMazcgBQ=
 github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
-github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
 github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
 github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
-github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8=
 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
 github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI=
 github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
-github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
 github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg=
 github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
-github.com/couchbase/go-couchbase v0.0.0-20200519150804-63f3cdb75e0d h1:OMrhQqj1QCyDT2sxHCDjE+k8aMdn2ngTCGG7g4wrdLo=
 github.com/couchbase/go-couchbase v0.0.0-20200519150804-63f3cdb75e0d/go.mod h1:TWI8EKQMs5u5jLKW/tsb9VwauIrMIxQG1r5fMsswK5U=
-github.com/couchbase/gomemcached v0.0.0-20200526233749-ec430f949808 h1:8s2l8TVUwMXl6tZMe3+hPCRJ25nQXiA3d1x622JtOqc=
 github.com/couchbase/gomemcached v0.0.0-20200526233749-ec430f949808/go.mod h1:srVSlQLB8iXBVXHgnqemxUXqN6FCvClgCMPCsjBDR7c=
-github.com/couchbase/goutils v0.0.0-20180530154633-e865a1461c8a h1:Y5XsLCEhtEI8qbD9RP3Qlv5FXdTDHxZM9UPUnMRgBp8=
 github.com/couchbase/goutils v0.0.0-20180530154633-e865a1461c8a/go.mod h1:BQwMFlJzDjFDG3DJUdU0KORxn88UlsOULuxLExMh3Hs=
 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
 github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=
 github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
-github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw=
 github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76 h1:Lgdd/Qp96Qj8jqLpq2cI1I1X7BJnu06efS+XkhRoLUQ=
 github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGiisLwp9rITslkFNpZD5rz43tf41QFkTWY=
 github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -198,13 +129,9 @@ github.com/deckarep/golang-set v1.7.1 h1:SCQV0S6gTtp6itiFrTqI+pfmJ4LN85S1YzhDf9r
 github.com/deckarep/golang-set v1.7.1/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
-github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954 h1:RMLoZVzv4GliuWafOuPuQDKSm1SJph7uCRnnS61JAn4=
 github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
-github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg=
 github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
-github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ=
 github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
-github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
 github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
 github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
 github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU=
@@ -214,43 +141,29 @@ github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1
 github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc=
 github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
 github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
-github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw=
-github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
-github.com/elastic/go-elasticsearch/v6 v6.8.5 h1:U2HtkBseC1FNBmDr0TR2tKltL6FxoY+niDAlj5M8TK8=
 github.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox93HoX8utj1kxD9aFUcI=
 github.com/elazarl/go-bindata-assetfs v1.0.0 h1:G/bYguwHIzWq9ZoyUQqrjTmJbbYn3j3CKKpKinvZLFk=
 github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
 github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
-github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc=
 github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
 github.com/elithrar/simple-scrypt v1.3.0 h1:KIlOlxdoQf9JWKl5lMAJ28SY2URB0XTRDn2TckyzAZg=
 github.com/elithrar/simple-scrypt v1.3.0/go.mod h1:U2XQRI95XHY0St410VE3UjT7vuKb1qPwrl/EJwEqnZo=
 github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
-github.com/emicklei/go-restful v2.8.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
-github.com/emicklei/go-restful v2.11.1+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
 github.com/emicklei/go-restful v2.12.0+incompatible h1:SIvoTSbsMEwuM3dzFirLwKc4BH6VXP5CNf+G1FfJVr4=
 github.com/emicklei/go-restful v2.12.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
-github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
 github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
 github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
-github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d h1:QyzYnTnPE15SQyUeqU6qLbWxMkwyAyu+vGksa0b7j00=
 github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
 github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
-github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
-github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses=
 github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
 github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
 github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
 github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c=
 github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
-github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db h1:gb2Z18BhTPJPpLQWj4T+rfKHYCHxRHCtRxhKKjRidVw=
-github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
-github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 h1:a9ENSRDFBUPkJ5lCgVZh26+ZbGyoVJG7yb5SSzF5H54=
-github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
@@ -259,60 +172,43 @@ github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49P
 github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3 h1:t8FVkw33L+wilf2QiWkw0UV77qRpcH/JHPKGpKa2E8g=
 github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
-github.com/gin-gonic/gin v1.4.0 h1:3tMoCCfM7ppqsR0ptz/wi1impNpT7/9wQtMZ8lr1mCQ=
 github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM=
-github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c h1:iRTj5SRYwbvsygdwVp+y9kZT145Y1s6xOPpeOEIeGc4=
 github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw=
 github.com/go-chassis/cari v0.0.0-20201210041921-7b6fbef2df11/go.mod h1:MgtsEI0AM4Ush6Lyw27z9Gk4nQ/8GWTSXrFzupawWDM=
 github.com/go-chassis/cari v0.4.0/go.mod h1:av/19fqwEP4eOC8unL/z67AAbFDwXUCko6SKa4Avrd8=
 github.com/go-chassis/cari v0.5.0/go.mod h1:av/19fqwEP4eOC8unL/z67AAbFDwXUCko6SKa4Avrd8=
-github.com/go-chassis/cari v0.5.1-0.20210823023004-74041d1363c4 h1:FTbuN+IqSX17ulICGJqr357o8dGWqtfUdLtztLvIiRI=
 github.com/go-chassis/cari v0.5.1-0.20210823023004-74041d1363c4/go.mod h1:av/19fqwEP4eOC8unL/z67AAbFDwXUCko6SKa4Avrd8=
 github.com/go-chassis/cari v0.5.1-0.20211124031617-99bda218b0cf h1:870QYgkSLFhpqGA8YuCRPazgdAKP4oqs5vs09A6d/gE=
 github.com/go-chassis/cari v0.5.1-0.20211124031617-99bda218b0cf/go.mod h1:av/19fqwEP4eOC8unL/z67AAbFDwXUCko6SKa4Avrd8=
-github.com/go-chassis/foundation v0.1.1-0.20191113114104-2b05871e9ec4/go.mod h1:21/ajGtgJlWTCeM0TxGJdRhO8bJkKirWyV8Stlh6g6c=
 github.com/go-chassis/foundation v0.2.2-0.20201210043510-9f6d3de40234/go.mod h1:2PjwqpVwYEVaAldl5A58a08viH8p27pNeYaiE3ZxOBA=
 github.com/go-chassis/foundation v0.2.2/go.mod h1:2PjwqpVwYEVaAldl5A58a08viH8p27pNeYaiE3ZxOBA=
 github.com/go-chassis/foundation v0.3.0/go.mod h1:2PjwqpVwYEVaAldl5A58a08viH8p27pNeYaiE3ZxOBA=
 github.com/go-chassis/foundation v0.3.1-0.20210806081520-3bd92d1ef787/go.mod h1:6NsIUaHghTFRGfCBcZN011zl196F6OR5QvD9N+P4oWU=
 github.com/go-chassis/foundation v0.3.1-0.20210811025651-7f4d2b2b906c h1:6ooUyysnayGgoJHV++NLEcnnnXzsw3ud4VydjISGBqI=
 github.com/go-chassis/foundation v0.3.1-0.20210811025651-7f4d2b2b906c/go.mod h1:6NsIUaHghTFRGfCBcZN011zl196F6OR5QvD9N+P4oWU=
-github.com/go-chassis/go-archaius v1.2.1/go.mod h1:gVP52u/jCU0fgUjXdUW1VLp5YLLJ+Yl2zoOPrLM/WOM=
 github.com/go-chassis/go-archaius v1.5.1 h1:1FrNyzzmD6o6BIjPF8uQ4Cc+u7qYIgQTpDk8uopBqfo=
 github.com/go-chassis/go-archaius v1.5.1/go.mod h1:QPwvvtBxvwiC48rmydoAqxopqOr93RCQ6syWsIkXPXQ=
-github.com/go-chassis/go-chassis v1.8.3 h1:abMUm489NF8wHqYtoY4KEN2Xy65og6R4NCS9KpxgpWI=
-github.com/go-chassis/go-chassis v1.8.3/go.mod h1:GTfwh1eXsOgMRFtLM7q8qSbceI+TsrkLL2UAS11Oey8=
 github.com/go-chassis/go-chassis-extension/protocol/grpc v0.0.0-20210902082902-eb5df922afcd h1:RqGW+mW6U0+3QkvGXiDZfMwRb8PwW8bb1rI9tlm/jzo=
 github.com/go-chassis/go-chassis-extension/protocol/grpc v0.0.0-20210902082902-eb5df922afcd/go.mod h1:btid7R4NKuET4BCUkR74CL5EP0hk3J0jXSByjzwd9JM=
 github.com/go-chassis/go-chassis/v2 v2.3.0 h1:qqFeRhox9Ov0GMfkFnr/ZBkhjhyGHy+SrMyDNbXl8co=
 github.com/go-chassis/go-chassis/v2 v2.3.0/go.mod h1:iyJ2DWSkqfnCmad/0Il9nXWHaob7RcwPGlIDRNxccH0=
-github.com/go-chassis/go-restful-swagger20 v1.0.2/go.mod h1:ZK4hlfS6Q6E46ViezAjn6atrzoteyWl1OBEpUBn/36k=
 github.com/go-chassis/go-restful-swagger20 v1.0.3 h1:kWfeLwMwJZVkXP1zNyFpkmR41UZ55UTcOptTteXhvEs=
 github.com/go-chassis/go-restful-swagger20 v1.0.3/go.mod h1:eW62fYuzlNFDvIacB6AV8bhUDCTy4myfTCv0bT9Gbb0=
 github.com/go-chassis/kie-client v0.0.0-20201210060018-938c7680a9ab/go.mod h1:UTdbtyN5ge/v9DmQzdVRxQP7z51Q4z6hyl+W6ZpUHFM=
-github.com/go-chassis/kie-client v0.1.1-0.20210731071824-96f1f1e47e71 h1:3ZRlumK36aVzLzHVp9Y7RsEYK0qMwX/enD7xU6ntj78=
-github.com/go-chassis/kie-client v0.1.1-0.20210731071824-96f1f1e47e71/go.mod h1:UTdbtyN5ge/v9DmQzdVRxQP7z51Q4z6hyl+W6ZpUHFM=
 github.com/go-chassis/kie-client v0.1.1-0.20210926011742-97eed4281056 h1:Y8CyErFNg4d1dPYXvNWxpyzzLQ/kuyuxJF2/7My7qLc=
 github.com/go-chassis/kie-client v0.1.1-0.20210926011742-97eed4281056/go.mod h1:N4SrGTb+e9ZiuOOU9vC/AohqsDtCkY2amNAPcvpEem0=
 github.com/go-chassis/openlog v1.1.2/go.mod h1:+eYCADVxWyJkwsFMUBrMxyQlNqW+UUsCxvR2LrYZUaA=
 github.com/go-chassis/openlog v1.1.3 h1:XqIOvZ8YPJ9o9lLtLBskQNNWolK5kC6a4Sv7r4s9sZ4=
 github.com/go-chassis/openlog v1.1.3/go.mod h1:+eYCADVxWyJkwsFMUBrMxyQlNqW+UUsCxvR2LrYZUaA=
-github.com/go-chassis/paas-lager v1.0.2-0.20190328010332-cf506050ddb2/go.mod h1:tILYbn3+0jjCxhY6/ue9L8eRq+VJ60U6VYIdugqchB4=
 github.com/go-chassis/sc-client v0.6.1-0.20210615014358-a45e9090c751 h1:hpWN/MZBMsnJqXdMkW7v0wsC+4rYulPsBFMrHCmZMQc=
 github.com/go-chassis/sc-client v0.6.1-0.20210615014358-a45e9090c751/go.mod h1:TBS9g7OaIeu1OR/9tVPJEl6BgHFcYEdbuJlgVDQczbc=
 github.com/go-chassis/seclog v1.3.0 h1:ofjF+GpDd7YFdxa6xk13brZfVSKMdZoQVPoCWjFHGUk=
 github.com/go-chassis/seclog v1.3.0/go.mod h1:a/zGvX5BRiwtq/O0fRqS6VWjrBaXYtqFJBx3EX9xzSE=
-github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0=
 github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
-github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72 h1:b+9H1GAsx5RsjvDFLoS5zkNBzIQMuVKUYQDmxU3N5XE=
 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo=
-github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
-github.com/go-kit/log v0.1.0 h1:DGJh0Sm43HbOeYDNnVZFl8BvcYVvjD5bqYJvp0REbwQ=
 github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
 github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
@@ -321,74 +217,49 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG
 github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
 github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY=
 github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
-github.com/go-mesh/openlogging v1.0.1 h1:6raaXo8SK+wuQX1VoNi6QJCSf1fTOFWh7f5f6b2ZEmY=
-github.com/go-mesh/openlogging v1.0.1/go.mod h1:qaKi+amO+hsGin2q1GmW+/NcbZpMPnTufwrWzDmIuuU=
 github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
 github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w=
 github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
 github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
 github.com/go-openapi/jsonreference v0.19.3 h1:5cxNfTy0UVC3X8JL5ymxzyoUZmo8iZb+jeTWn7tUa8o=
 github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
-github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501 h1:C1JKChikHGpXwT5UQDFaryIpDtyyGL/CR6C2kB7F1oc=
 github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
 github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
 github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY=
 github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
-github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
 github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
-github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
-github.com/go-playground/validator v9.31.0+incompatible h1:UA72EPEogEnq76ehGdEDp4Mit+3FDh548oRqwVgNsHA=
 github.com/go-playground/validator v9.31.0+incompatible/go.mod h1:yrEkQXlcI+PugkyDjY2bRrL/UBU4f3rvrgkN3V8JEig=
-github.com/go-redis/redis v6.14.2+incompatible h1:UE9pLhzmWf+xHNmZsoccjXosPicuiNaInPgym8nzfg0=
 github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
-github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
-github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
 github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd h1:hSkbZ9XSyjyBirMeqSqUrK+9HboWrweVlzRNqoBi2d4=
 github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0=
 github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY=
-github.com/gobuffalo/depgen v0.1.0 h1:31atYa/UW9V5q8vMJ+W6wd64OaaTHUrCUXER358zLM4=
 github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg=
 github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
-github.com/gobuffalo/envy v1.7.0 h1:GlXgaiBkmrYMHco6t4j7SacKO4XUjvh5pwXh0f4uxXU=
 github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
 github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs=
 github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
-github.com/gobuffalo/flect v0.1.3 h1:3GQ53z7E3o00C/yy7Ko8VXqQXoJGLkrTQCLTF1EjoXU=
 github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
 github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk=
 github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28=
 github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo=
-github.com/gobuffalo/genny v0.1.1 h1:iQ0D6SpNXIxu52WESsD+KoQ7af2e3nCfnSBoSF/hKe0=
 github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk=
-github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211 h1:mSVZ4vj4khv+oThUfS+SQU3UuFIZ5Zo6UNcvK8E8Mz8=
 github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw=
 github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360=
 github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg=
-github.com/gobuffalo/gogen v0.1.1 h1:dLg+zb+uOyd/mKeQUYIbwbNmfRsr9hd/WtYWepmayhI=
 github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE=
-github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2 h1:8thhT+kUJMTMy3HlX4+y9Da+BNJck+p109tqqKp7WDs=
 github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8=
 github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
-github.com/gobuffalo/mapi v1.0.2 h1:fq9WcL1BYrm36SzK6+aAnZ8hcp+SrmnDyAxhNx8dvJk=
 github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
 github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
-github.com/gobuffalo/packd v0.1.0 h1:4sGKOD8yaYJ+dek1FDkwcxCHA40M4kfKgFHx8N2kwbU=
 github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
 github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ=
-github.com/gobuffalo/packr/v2 v2.2.0 h1:Ir9W9XIm9j7bhhkKE9cokvtTl1vBm62A/fene/ZCj6A=
 github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
-github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754 h1:tpom+2CJmpzAWj5/VEHync2rJGi+epHNIeRSWjzGA+4=
 github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
-github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA=
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
-github.com/gogo/googleapis v1.1.0 h1:kFkMAZBNAn4j7K0GiZr8cRYzejq68VbheufiV3YuyFI=
-github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
 github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
 github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
@@ -396,7 +267,6 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang-jwt/jwt v3.2.1+incompatible h1:73Z+4BJcrTC+KczS6WvTPvRGOp1WmfEP4Q1lOd9Z/+c=
 github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -406,7 +276,6 @@ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l
 github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.3.1 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s=
 github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
 github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -429,7 +298,6 @@ github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8l
 github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
 github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0=
 github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
 github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
@@ -448,139 +316,92 @@ github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSN
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
 github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no=
 github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
 github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
 github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc h1:DLpL8pWq0v4JYoRpEhDfsJhhJyGKCcQM2WPW2TJs31c=
 github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA=
 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
-github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
 github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
-github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM=
 github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
 github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
 github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
 github.com/googleapis/gnostic v0.5.1 h1:A8Yhf6EtqTv9RMsU6MQTyrtV1TjWlR6xU9BsZIwuTCM=
 github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU=
-github.com/gophercloud/gophercloud v0.1.0 h1:P/nh25+rzXouhytV2pUHBb65fnds26Ghl8/391+sT5o=
 github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
-github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8=
-github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
-github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
-github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
 github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
 github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
 github.com/gorilla/websocket v1.4.3-0.20210424162022-e8629af678b7 h1:L89uC9ATI61/V2eNgZYtQHyjjyjEplemB+aky4HdyzQ=
 github.com/gorilla/websocket v1.4.3-0.20210424162022-e8629af678b7/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM=
 github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
 github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
-github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
 github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw=
 github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y=
 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho=
 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
 github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
-github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
 github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
 github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
 github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
-github.com/hashicorp/consul/api v1.3.0 h1:HXNYlRkkM/t+Y/Yhxtwcy02dlYwIaoxzvxPnS+cqy78=
-github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
 github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
-github.com/hashicorp/consul/sdk v0.3.0 h1:UOxjlb4xVNF93jak1mzzoBatyFju9nrkxpVwIp/QqxQ=
-github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
-github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
 github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
-github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM=
 github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
-github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0=
 github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
-github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4=
 github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
-github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o=
 github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
-github.com/hashicorp/go-rootcerts v1.0.0 h1:Rqb66Oo1X/eSV1x66xbDccZjhJigjg0+e82kpwzSwCI=
 github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
-github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs=
 github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
-github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE=
 github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
 github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
-github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE=
 github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
 github.com/hashicorp/go-version v1.0.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
 github.com/hashicorp/go-version v1.2.0 h1:3vNe/fWF5CBgRIguda1meWhsZHy3m8gCJ5wx+dIzX/E=
 github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw=
 github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
 github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
 github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
-github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
-github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y=
 github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
-github.com/hashicorp/mdns v1.0.0 h1:WhIgCr5a7AaVH6jPUwjtRuuE7/RDufnUvzIr48smyxs=
 github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
-github.com/hashicorp/memberlist v0.1.3 h1:EmmoJme1matNzb+hMpDuR/0sbJSUisxyqBGG676r31M=
 github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
 github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
-github.com/hashicorp/serf v0.8.3 h1:MWYcmct5EtKz0efYooPcL0yNkem+7kWxqXDi/UIh+8k=
-github.com/hashicorp/serf v0.8.3/go.mod h1:UpNcs7fFbpKIyZaUuSW6EPiH+eZC7OuyFD+wc1oal+k=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-github.com/hudl/fargo v1.3.0 h1:0U6+BtN6LhaYuTnIJq4Wyq5cpn6O2kWrxAtcqBmYY6w=
-github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
 github.com/iancoleman/strcase v0.1.2 h1:gnomlvw9tnV3ITTAxzKSgTF+8kFWcU/f+TgttpXGz1U=
 github.com/iancoleman/strcase v0.1.2/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE=
-github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c=
 github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
 github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q=
 github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
 github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
 github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
-github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d h1:/WZQPMZNsjZ7IlCpsLGdQBINg5bxKQ1K1sh6awxLtkA=
-github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
 github.com/jinzhu/copier v0.3.0 h1:P5zN9OYSxmtzZmwgcVmt5Iu8egfP53BGMPAFgEksKPI=
 github.com/jinzhu/copier v0.3.0/go.mod h1:24xnZezI2Yqac9J61UC6/dG/k76ttpq0DdJI3QmUvro=
-github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
 github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
 github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
 github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
 github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
-github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
 github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ=
 github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
-github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA=
 github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
 github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ=
 github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
-github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o=
 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
 github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
-github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U=
 github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
 github.com/karlseguin/ccache v2.0.3-0.20170217060820-3ba9789cfd2c+incompatible h1:Yvcw4N+1TaDTNkIuHn3gn8D1KP7Wxn4LP5GngDPWcPQ=
 github.com/karlseguin/ccache v2.0.3-0.20170217060820-3ba9789cfd2c+incompatible/go.mod h1:CM9tNPzT6EdRh14+jiW8mEF9mkNZuuE51qmgGYUB93w=
@@ -589,26 +410,19 @@ github.com/karlseguin/ccache/v2 v2.0.8/go.mod h1:2BDThcfQMf/c0jnZowt16eW405XIqZP
 github.com/karlseguin/expect v1.0.2-0.20190806010014-778a5f0c6003 h1:vJ0Snvo+SLMY72r5J4sEfkuE7AFbixEP2qRbEcum/wA=
 github.com/karlseguin/expect v1.0.2-0.20190806010014-778a5f0c6003/go.mod h1:zNBxMY8P21owkeogJELCLeHIt+voOSduHYTFUbwRAV8=
 github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4=
-github.com/karrick/godirwalk v1.10.3 h1:lOpSw2vJP0y5eLBW906QwKsUK/fe/QDyoqM5rnnuPDY=
 github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
 github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
 github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
-github.com/kisielk/errcheck v1.5.0 h1:e8esj/e4R+SAOwFwN+n3zr0nYeCyeweozKfO23MvHzY=
 github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 github.com/klauspost/compress v1.9.5 h1:U+CaK85mrNNb4k8BNOfgJtJ/gr6kswUCFj6miSzVC6M=
 github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
 github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY=
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
 github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
@@ -617,66 +431,39 @@ github.com/labstack/echo/v4 v4.1.18-0.20201218141459-936c48a17e97 h1:G31JNI1jsTi
 github.com/labstack/echo/v4 v4.1.18-0.20201218141459-936c48a17e97/go.mod h1:Tn2yRQL/UclUalpb5rPdXDevbkJ+lp/2svdyFBg6CHQ=
 github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0=
 github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k=
-github.com/ledisdb/ledisdb v0.0.0-20200510135210-d35789ec47e6 h1:wxyqOzKxsRJ6vVRL9sXQ64Z45wmBuQ+OTH9sLsC5rKc=
 github.com/ledisdb/ledisdb v0.0.0-20200510135210-d35789ec47e6/go.mod h1:n931TsDuKuq+uX4v1fulaMbA/7ZLLhjc85h7chZGBCQ=
-github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
 github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
-github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A=
 github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
-github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743 h1:143Bb8f8DuGWck/xpNUOckBVYfFbBTnLevfRZ1aVVqo=
-github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
-github.com/lightstep/lightstep-tracer-go v0.18.1 h1:vi1F1IQ8N7hNWytK9DpJsUfQhGuNSc19z330K6vl4zk=
-github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
-github.com/little-cui/etcdadpt v0.1.4-0.20210902120751-b6d0212f913e h1:pcA89qPpIdaBur0ha7RCfKDv5jK2LnilHrTS2FPkzYY=
-github.com/little-cui/etcdadpt v0.1.4-0.20210902120751-b6d0212f913e/go.mod h1:727wftF2FS4vfkgFLmIvQue1XH+9u4lK2/hd6L7OAC8=
-github.com/little-cui/etcdadpt v0.2.0 h1:6UE6CHzKHVMSb4jkBjWynVBV+2QC+XfMkYW80j10wtM=
-github.com/little-cui/etcdadpt v0.2.0/go.mod h1:727wftF2FS4vfkgFLmIvQue1XH+9u4lK2/hd6L7OAC8=
-github.com/little-cui/etcdadpt v0.2.1-0.20211011160708-27df691edc3e h1:wdFXNX2cusZPoIKsRw003s+TbFQ6A0h89IEQNcZ4ml0=
-github.com/little-cui/etcdadpt v0.2.1-0.20211011160708-27df691edc3e/go.mod h1:727wftF2FS4vfkgFLmIvQue1XH+9u4lK2/hd6L7OAC8=
 github.com/little-cui/etcdadpt v0.2.1 h1:eT1A+BV1/2/dmmZA2Nl+cc7uTMuwd6T6DD+JrXr8xcA=
 github.com/little-cui/etcdadpt v0.2.1/go.mod h1:727wftF2FS4vfkgFLmIvQue1XH+9u4lK2/hd6L7OAC8=
-github.com/lyft/protoc-gen-validate v0.0.13 h1:KNt/RhmQTOLr7Aj8PsJ7mTronaFyx80mRTT9qF261dA=
-github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
-github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
 github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
 github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8=
 github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2 h1:JgVTCPf0uBVcUSWpyXmGpgOc62nK5HWUBKAGc3Qqa5k=
 github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
-github.com/markbates/safe v1.0.1 h1:yjZkbvRM6IzKj9tlu/zMJLS0n/V351OZWRnF3QfaUxI=
 github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
 github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
 github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
 github.com/mattn/go-colorable v0.1.7 h1:bQGKb3vps/j0E9GfJQ03JyhRuxsvdAanXlT9BTw3mdw=
 github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
 github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
-github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
 github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
 github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
 github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
 github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
 github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
-github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
 github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
-github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
 github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
 github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/miekg/dns v1.0.14 h1:9jZdLNd/P4+SfEJ0TNyxYpsK8N4GtfylBLqtbYN1sbA=
 github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
-github.com/mitchellh/cli v1.0.0 h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y=
 github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
 github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
-github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
 github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
-github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0=
 github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
-github.com/mitchellh/gox v0.4.0 h1:lfGJxY7ToLJQjHHwi0EX6uYBdK78egf954SQl13PQJc=
 github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
-github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY=
 github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
 github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
@@ -688,43 +475,20 @@ github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lN
 github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0=
 github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
-github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d h1:7PxY7LVfSZm7PEeBTyK1rj1gABdCO2mbri6GKO1cMDs=
 github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU=
 github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
-github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=
-github.com/nats-io/jwt v0.3.2 h1:+RB5hMpXUUA2dfxuhBTEkMOrYmM+gKIZYS1KjSostMI=
-github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
-github.com/nats-io/nats-server/v2 v2.1.2 h1:i2Ly0B+1+rzNZHHWtD4ZwKi+OU5l+uQo1iDHZ2PmiIc=
-github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k=
-github.com/nats-io/nats.go v1.9.1 h1:ik3HbLhZ0YABLto7iX80pZLPw/6dx3T+++MZJwLnMrQ=
-github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w=
-github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
-github.com/nats-io/nkeys v0.1.3 h1:6JrEfig+HzTH85yxzhSVbjHRJv9cn0p6n3IngIcM5/k=
-github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
-github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
-github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
 github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
 github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
-github.com/oklog/oklog v0.3.2 h1:wVfs8F+in6nTBMkA7CbRw+zZMIB7nNM825cM1wuzoTk=
-github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
-github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw=
-github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
-github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
 github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
-github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
 github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
 github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
 github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg=
@@ -732,127 +496,84 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108
 github.com/onsi/ginkgo v1.15.0 h1:1V1NfVQR87RtWAgp1lv9JZJ5Jap+XFGKPi00andXGi4=
 github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg=
 github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
-github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
 github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
 github.com/onsi/gomega v1.10.5 h1:7n6FEkpFmfCoo2t+YYqXH0evK+a9ICQz0xcAy9dYcaQ=
 github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48=
-github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88=
-github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
 github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU=
 github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
-github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo=
-github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
-github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
 github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
 github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
-github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5 h1:ZCnq+JUrvXcDVhX/xRolRBZifmabN1HcS1wrPSvxhrU=
-github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA=
-github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
-github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
-github.com/openzipkin/zipkin-go v0.2.2 h1:nY8Hti+WKaP0cRsSeQ026wU03QsM762XBeCXBb9NAWI=
-github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
 github.com/openzipkin/zipkin-go-opentracing v0.3.3-0.20180123190626-6bb822a7f15f h1:nn2nWXhr9DIrC4IxlTiwow9G6Zq6jVWdckXhIzYtJOM=
 github.com/openzipkin/zipkin-go-opentracing v0.3.3-0.20180123190626-6bb822a7f15f/go.mod h1:js2AbwmHW0YD9DwIw2JhQWmbfFi/UnWyYwdVhqbCDOE=
 github.com/orcaman/concurrent-map v0.0.0-20210501183033-44dafcb38ecc h1:Ak86L+yDSOzKFa7WM5bf5itSOo1e3Xh8bm5YCMUXIjQ=
 github.com/orcaman/concurrent-map v0.0.0-20210501183033-44dafcb38ecc/go.mod h1:Lu3tH6HLW3feq74c2GC+jIMS/K2CFcDWnWD9XkenwhI=
-github.com/pact-foundation/pact-go v1.0.4 h1:OYkFijGHoZAYbOIb1LWXrwKQbMMRUv1oQ89blD2Mh2Q=
-github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
-github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs=
 github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
 github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
 github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
-github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g=
-github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
 github.com/pelletier/go-toml v1.0.1/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
-github.com/pelletier/go-toml v1.7.0 h1:7utD74fnzVc/cpcyy8sjrlFr5vYpypUixARcHIMIGuI=
 github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
-github.com/performancecopilot/speed v3.0.0+incompatible h1:2WnRzIquHa5QxaJKShDkLM+sc0JPuwhXzK8OYOyt3Vg=
-github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
-github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
-github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233 h1:jmJndGFBPjNWW+MAYarU/Nl8QrQVzbw4B/AYE0LzETo=
 github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc=
-github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
 github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I=
 github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/profile v1.2.1 h1:F++O52m40owAmADcojzM+9gyjmMOY/T4oYJkgFDH8RE=
-github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
 github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w=
 github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
-github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
 github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
 github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
-github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
 github.com/prometheus/client_golang v1.7.0/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
 github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
 github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ=
 github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
-github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
 github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
 github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
 github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
-github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
 github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
 github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ=
 github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
 github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
 github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
 github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4=
 github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA=
 github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
 github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ=
 github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
 github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
-github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s=
 github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
 github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.3.0 h1:RR9dF3JtopPvtkroDZuVD7qquD0bnHlKSqaQhgwt8yk=
 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik=
 github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
 github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f h1:UFr9zpz4xgTnIE5yIMtWAMngCdZ9p/+q6lTbgelo80M=
 github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
-github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da h1:p3Vo3i64TCLY7gIfzeQaUJ+kppEO5WQG3cL8iE8tGHU=
-github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
 github.com/satori/go.uuid v1.1.0 h1:B9KXyj+GzIpJbV7gmr873NsY6zpbxNy24CBtGrk7jHo=
 github.com/satori/go.uuid v1.1.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
-github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 h1:X+yvsM2yrEktyI+b2qND5gpH8YhURn0k8OCaeRnkINo=
 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
 github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
 github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
-github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0 h1:QIF48X1cihydXibm+4wfAc0r/qyPyuFiPFRNphdMpEE=
 github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw=
-github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400 h1:091wFNQB3PXcL5+me0joH7EiyqQaI0wGMpEjVCkK04U=
 github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s=
-github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d h1:NVwnfyR3rENtlz62bcrkXME3INVUa4lcdGt+opvxExs=
 github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z92TR1JKMkLLoaOQk++LVnOKL3ScbJ8GNGA=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
@@ -863,19 +584,14 @@ github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM
 github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
-github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
 github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
 github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
 github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
 github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js=
 github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0=
-github.com/sony/gobreaker v0.4.1 h1:oMnRNZXX5j85zso6xCPRNPtmAycat+WcoKbklScLDgQ=
-github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
-github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ=
 github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
 github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
-github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
 github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
 github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg=
 github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
@@ -883,24 +599,14 @@ github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU
 github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
 github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M=
 github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo=
-github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
 github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
 github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM=
 github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
-github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec h1:q6XVwXmKvCRHRqesF3cSv6lNqqHi0QWOvgDlSohg8UA=
 github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE=
-github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU=
 github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
-github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
-github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271 h1:WhxRHzgeVGETMlmVfqhRn8RIeeNoPr2Czh33I4Zdccw=
-github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
-github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a h1:AhmOdSHeswKHBjhsLs/7+1voOxT+LLrSk/Nxvk35fug=
-github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -912,22 +618,16 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5
 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
 github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
 github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
 github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
-github.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c h1:3eGShk3EQf5gJCYW+WzA0TEJQd37HLOmlYF7N0YJwv0=
 github.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
 github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
 github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
-github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 h1:uruHq4dN7GR16kFc5fp3d1RIYzJW5onx8Ybykw2YQFA=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
-github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw=
 github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
-github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
-github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
 github.com/urfave/cli v1.22.4 h1:u7tSpNPPswAFymm8IehJhy4uJMlUuU/GmqSkvJ1InXA=
 github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
 github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
@@ -935,7 +635,6 @@ github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyC
 github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
 github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4=
 github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
-github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b h1:0Ve0/CCjiAiyKddUMUn3RwIGlq2iTW4GuVzyoKBYO/8=
 github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc=
 github.com/widuu/gojson v0.0.0-20170212122013-7da9d2cd949b h1:ieRJ8K7QAPWWltEOv7rzMruuPd7gbeAqTaBFhUECIy0=
 github.com/widuu/gojson v0.0.0-20170212122013-7da9d2cd949b/go.mod h1:9W1pyetRkwXqjR9tjOSrSuhGHBK0EqXoQSwWbhBHHwA=
@@ -949,16 +648,11 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.3.5 h1:dPmz1Snjq0kmkz159iL7S6WzdahUTHnHB5M56WFVifs=
 github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973 h1:iCnkJ/qjKZGdZnlcj1N55AxPDan814kpc3s1cDpQKd8=
 github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973/go.mod h1:aEV29XrmTYFr3CiRxZeGHpkvbwq+prZduBqMaascyCU=
 go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
-go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU=
 go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4=
-go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0=
-go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
 go.etcd.io/etcd/api/v3 v3.5.0 h1:GsV3S+OfZEOCNXdtNkBSR7kgLobAa/SO6tCxRa0GAYw=
 go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
 go.etcd.io/etcd/client/pkg/v3 v3.5.0 h1:2aQv6F436YnN7I4VbI8PPYrBhu+SmrTaADcf8Mi/6PU=
@@ -975,11 +669,8 @@ go.etcd.io/etcd/server/v3 v3.5.0 h1:jk8D/lwGEDlQU9kZXUFMSANkE22Sg5+mW27ip8xcF9E=
 go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4=
 go.mongodb.org/mongo-driver v1.4.2 h1:WlnEglfTg/PfPq4WXs2Vkl/5ICC6hoG8+r+LraPmGk4=
 go.mongodb.org/mongo-driver v1.4.2/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc=
-go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
-go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
-go.opencensus.io v0.22.2 h1:75k/FF0Q2YM8QYo07VPddOLBslDt1MZOdEslOHvmzAs=
 go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 go.opentelemetry.io/contrib v0.20.0 h1:ubFQUn0VCZ0gPwIoJfBJVpeBlyRMxu8Mm/huKWYd9p0=
 go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc=
@@ -1003,7 +694,6 @@ go.opentelemetry.io/otel/trace v0.20.0 h1:1DL6EXUdcg95gukhuRRvLDO/4X5THh/5dIV52l
 go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw=
 go.opentelemetry.io/proto/otlp v0.7.0 h1:rwOQPCuKAKmwGKq2aVNnYIibI6wnV7EvzgfTCzcdGg8=
 go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
-go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
 go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
 go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
 go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
@@ -1011,15 +701,10 @@ go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
 go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0=
 go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
 go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
-go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
 go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
 go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
-go.uber.org/ratelimit v0.1.0 h1:U2AruXqeTb4Eh9sYQSTrMhH8Cb7M0Ian2ibBOnBcnAw=
 go.uber.org/ratelimit v0.1.0/go.mod h1:2X8KaoNd1J0lZV+PxJk/5+DGbO/tpwLR1m++a7FnB/Y=
-go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=
-go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
 go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
-go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
 go.uber.org/zap v1.17.0 h1:MTjgFu6ZLKvY6Pvaqk97GlxNBuMpV4Hy/3P6tRGlI2U=
 go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
@@ -1030,7 +715,6 @@ golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaE
 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -1044,10 +728,8 @@ golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL
 golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
 golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
-golang.org/x/exp v0.0.0-20191227195350-da58074b4299 h1:zQpM52jfKHG6II1ISZY1ZcpygvuSFZpLwfluuF89XOg=
 golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
 golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
-golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4=
 golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -1060,14 +742,12 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu
 golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug=
 golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
 golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
-golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs=
 golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
 golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
 golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
 golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1078,7 +758,6 @@ golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73r
 golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -1087,7 +766,6 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn
 golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -1129,7 +807,6 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h
 golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1143,7 +820,6 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1151,7 +827,6 @@ golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1180,14 +855,12 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
 golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE=
 golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -1211,13 +884,11 @@ golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtn
 golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200117065230-39095c1d176c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
@@ -1230,16 +901,13 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
 google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
 google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
 google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
 google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
 google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.15.0 h1:yzlyyDW/J0w8yNFJIhiAJy4kq74S+1DOLdawELNxFMA=
 google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
@@ -1250,7 +918,6 @@ google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRn
 google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
 google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
@@ -1261,15 +928,10 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG
 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
 google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c h1:wtujag7C+4D6KMoulW9YauvK2lgdvCMS260jsqqBXr0=
 google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
-google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
 google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
-google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
 google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
-google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
 google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
 google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
 google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
 google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
@@ -1277,7 +939,6 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji
 google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
 google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
 google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
-google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0=
 google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
 google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q=
 google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
@@ -1292,11 +953,9 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
 google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
 google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
 google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
 google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -1305,30 +964,19 @@ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8X
 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/cheggaaa/pb.v1 v1.0.25 h1:Ev7yu1/f6+d+b3pi5vPdRPc6nNtP1umSfcWiEfRqv6I=
 gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
-gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8=
 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
 gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/gcfg.v1 v1.2.3 h1:m8OOJ4ccYHnx2f4gQwpno8nAX5OGOh7RLaaz0pj3Ogs=
-gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
-gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM=
 gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
-gopkg.in/go-playground/validator.v8 v8.18.2 h1:lFB4DoMU6B626w8ny76MV7VX6W2VHct2GVOI3xgiMrQ=
 gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y=
 gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
 gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
-gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw=
 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
 gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
 gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
-gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI=
 gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
-gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
 gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@@ -1343,12 +991,10 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
 gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
 k8s.io/api v0.17.0/go.mod h1:npsyOePkeP0CPwyGfXDHxvypiYMJxBWAMpQxCaJ4ZxI=
 k8s.io/api v0.19.5 h1:p0MRzyhokJ9Kn5jcJAHNup0s+COMBPfn1mTasls6mMg=
@@ -1360,7 +1006,6 @@ k8s.io/client-go v0.17.0/go.mod h1:TYgR6EUHs6k45hb6KWjVD6jFZvJV4gHDikv/It0xz+k=
 k8s.io/client-go v0.19.5 h1:Y7LsFwgbm9+5oVXER04KNCSPhY6TblYRgG1DQdVq+ig=
 k8s.io/client-go v0.19.5/go.mod h1:BSG3iuxI40Bs0nNDLS1JRa/7ReBQDHzf0x8nZZrK0fo=
 k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
-k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac h1:sAvhNk5RRuc6FNYGqe7Ygz3PSo/2wGWbulskmzRX8Vs=
 k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
 k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
 k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
@@ -1374,10 +1019,8 @@ k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H
 k8s.io/kube-openapi v0.0.0-20210527164424-3c818078ee3d h1:lUK8GPtuJy8ClWZhuvKoaLdKGPLq9H1PxWp7VPBZBkU=
 k8s.io/kube-openapi v0.0.0-20210527164424-3c818078ee3d/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
 k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
-k8s.io/utils v0.0.0-20191114200735-6ca3b61696b6/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
 k8s.io/utils v0.0.0-20200729134348-d5654de09c73 h1:uJmqzgNWG7XyClnU/mLPBWwfKKF1K8Hf8whTseBgJcg=
 k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
-rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE=
 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
 sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ=
 sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
@@ -1387,5 +1030,3 @@ sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK
 sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
 sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
 sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
-sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM=
-sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
diff --git a/scripts/ut_test_in_docker.sh b/scripts/ut_test_in_docker.sh
index d6d4113..9d3829e 100644
--- a/scripts/ut_test_in_docker.sh
+++ b/scripts/ut_test_in_docker.sh
@@ -66,12 +66,10 @@ if [ ${db_name} == "etcd" ];then
   [ $? == 0 ] && ut_for_dir pkg
   [ $? == 0 ] && ut_for_dir server
   [ $? == 0 ] && ut_for_dir scctl
-  [ $? == 0 ] && ut_for_dir syncer
 elif [ ${db_name} == "mongo" ];then
   export TEST_MODE=mongo
   [ $? == 0 ] && ut_for_file datasource
   [ $? == 0 ] && ut_for_dir datasource/mongo
-  [ $? == 0 ] && ut_for_dir syncer
   [ $? == 0 ] && ut_for_dir server
 else
   echo "${db_name} non-existent"
diff --git a/syncer/README-ZH.md b/syncer/README-ZH.md
deleted file mode 100644
index 80dabf0..0000000
--- a/syncer/README-ZH.md
+++ /dev/null
@@ -1,120 +0,0 @@
-ServiceCenter Syncer
--------
-[Introduction to English](./README.md)
-
-### 1. 什么是ServiceCenter Syncer  
-Syncer是一个多服务中心的同步工具,专为大型微服务架构设计,支持异构服务中心。它坚持以下信念:  
-- 对应用程序透明。同步工具启停,不应该对应用程序的原有流程产生影响。  
-- 为多服务中心提供对等网络。他们之间是松耦合的,成员可以自由加入与退出。  
-- 对异构服务中心提供支持。插件化的形式支持多种服务中心驱动,用户可便捷的接入自定义插件。
-
-##### 名词释义 
-- Gossip - Syncer使用来自serf的Gossip协议进行集群间的广播。Gossip协议使用UDP在集群节点间接力式随机传播,它是一种病毒式传播的协议。  
-- Serf - Gossip协议的一种具体实现,是一种用于集群成员管理、故障检测和编排的工具,具有分布式、容错性、高可用性的特点。
-- Service center - 服务中心中心。可以是单个微服务注册发现中心,也可以是一个微服务注册中心集群。我们定义的服务中心是一个拥有统一实例数据的网络区域。 
-
-### 2. ServiceCenter Syncer架构
-Syncer的运行时架构图如下:  
-![image](./images/SyncerArchitecture.png?raw=true&v=2)  
-如图所示,  
-
-- 在每个服务中心内,均部署了一套服务注册中心(ServiceCenter、Eurake或者其他)集群,该集群管理其所属服务中心的所有微服务实例,并且是彼此隔离的。同时在每个服務中心里各自部署了一个Syncer集群,它负责从注册中心发现实例,并向服务中心注册来自其他服务中心的实例信息。  
-- 在多个服务中心间,多个Syncer组成对等网络,维持一个Gossip池。Gossip协议的使用主要带来了以下便捷:
-   - Syncer仅需任意一个池成员信息即可加入网络,其他成员信息的发现是自动完成的;  
-   - 成员的故障检测是分布式的,是池中多个成员互相协作完成的,这相对于简单的心跳更加准确、完善;  
-   - 提供集群消息传递,主要用于实例数据更新事件通知、指定实例跨服务中心查询。  
-- Syncer提供RPC服务,用于传输微服务实例信息。当Syncer接收到其他成员的事件通知或跨服务中心查询请求,可通过RPC服务提供的Pull和Push接口进行数据的同步。  
-
-### 3. 快速入门 
-##### 3.1 获取并启动服务中心
-
-以Service-center为例,详细参见:[ServiceCenter 快速入门](https://github.com/apache/servicecomb-service-center#quick-start)  
-
-##### 3.2 从源码构建和运行ServiceCenter Syncer
-必要条件:golang 版本 1.11+
-```bash
-# 从github获取Service-center Syncer最新源码
-$ git clone https://github.com/apache/servicecomb-service-center.git $GOPATH/src/github.com/apache/servicecomb-service-center
-$cd $GOPATH/src/github.com/apache/servicecomb-service-center
-
-# go mod 编译设置
-$ GO111MODULE=on go mod download
-$ GO111MODULE=on go mod vendor
-
-# 编译
-$ cd syncer
-$ go build
-```
-
-##### 3.3 启动ServiceCenter Syncer
-###### 命令行参数说明:
-- sc-addr: 服务中心地址,即服务注册中心地址。支持集群模式,多个地址间使用英文半角","隔开。    
-- bind-addr:Syncer在Gossip协议内P2P地址,用于在P2P网络上和其他Syncer成员之间进行通信。   
-- rpc-addr:Syncer的数据通讯地址,用于Syncer间同步微服务实例数据。  
-- join-addr:用于指定待加入的P2P网络,P2P中的任何成员的地址, 启动第一个Syncer时不需要该参数。   
-- mode: 运行模式配置,当前支持两种模式,单实例模式“single”和集群模式“cluster”, cluster模式下每个syncer拥有三个实例
-- cluster-name:当mode为”cluster“时,Syncer集群的名字
-- cluster-port: 当mode为“cluster”时,Syncer集群成员之间进行通信的端口
-- node:当mode为“cluster”时,syncer集群成员名称。
-
-###### 同步模式说明
-- 增量同步:默认的同步模式。
-- 全量同步:每个syncer启动加入时自动触发一次,也可以在增量同步异常告警之后手动调用接口触发。
-```bash
-$ curl http://localhost:30300/v1/syncer/full-synchronization
-```
-
-假设有2个服务中心,每个服务中心都有一个用于微服务发现和注册的服务中心集群,如下所示:   
-
-|     Service center     | Local address |
-| :--------------------: | :-----------: |
-| http://10.0.0.10:30100 |   10.0.0.10   |
-| http://10.0.0.11:30100 |   10.0.0.11   |
-
-#### 单例模式(Single Mode)
-
-分别在两个机器上启动两个syncer来完成这两个服务中心之间的微服务数据同步
-
-- 在10.0.0.10的机器上执行以下命令启动Syncer
-
-```bash
-$ ./syncer daemon --sc-addr http://10.0.0.10:30100 --bind-addr 10.0.0.10:30190 --rpc-addr 10.0.0.10:30191
-```
-
-- 在10.0.0.11的机器上执行以下命令启动Syncer,并加入10.0.0.10的gossip池
-
-```bash
-$ ./syncer daemon --sc-addr http://10.0.0.11:30100 --bind-addr 10.0.0.11:30190 --rpc-addr 10.0.0.11:30191 --join-addr 10.0.0.10:30191
-```
-
-#### 集群模式(Cluster Mode)
-
-分别在两个机器上启动两个syncer集群来完成这两个服务中心之间的微服务数据同步
-
-- 在10.0.0.10的机器上启动syncer集群
-
-```bash
-$ ./syncer daemon --sc-addr http://10.0.0.10:30100 --bind-addr 10.0.0.10:30190 --rpc-addr 10.0.0.10:30191 --mode cluster --node syncer011 --cluster-port 30201 --join-addr 10.0.0.10:30190
-$ ./syncer daemon --sc-addr http://10.0.0.10:30100 --bind-addr 10.0.0.10:30290 --rpc-addr 10.0.0.10:30291 --mode cluster --node syncer012 --cluster-port 30202 --join-addr 10.0.0.10:30190
-$ ./syncer daemon --sc-addr http://10.0.0.10:30100 --bind-addr 10.0.0.10:30390 --rpc-addr 10.0.0.10:30391 --mode cluster --node syncer013 --cluster-port 30203 --join-addr 10.0.0.10:30190
-```
-
-- 在10.0.0.11机器上启动syncer集群
-
-```bash
-$ ./syncer daemon --sc-addr http://10.0.0.11:30100 --bind-addr 10.0.0.11:30190 --rpc-addr 10.0.0.11:30191 --mode cluster --node syncer021 --cluster-port 30201 --join-addr 10.0.0.10:30190
-$ ./syncer daemon --sc-addr http://10.0.0.11:30100 --bind-addr 10.0.0.11:30290 --rpc-addr 10.0.0.11:30291 --mode cluster --node syncer022 --cluster-port 30202 --join-addr 10.0.0.10:30190
-$ ./syncer daemon --sc-addr http://10.0.0.11:30100 --bind-addr 10.0.0.11:30390 --rpc-addr 10.0.0.11:30391 --mode cluster --node syncer023 --cluster-port 30203 --join-addr 10.0.0.10:30190
-```
-
-**结果验证**  
-将微服务实例注册到其中一个ServiceCener后30秒,可以从每个ServiceCenter获取有关该实例的信息。
-
-### 4. 特性
-
-Syncer是一个开发中版本,在下面列出已支持的特性,更多开发中的特性请参考[TODO](./TODO-ZH.md)
-
-- 支持多个servicecomb-service-center 服务中心之间进行数据同步
-- 在etcd中固化存储微服务实例映射表
-- 支持集群模式部署Syncer,每个syncer集群拥有3个实例
-- 支持增量同步为主要同步机制,每个syncer加入时触发一次全量同步,增量同步异常告警后也可手动进行全量同步
\ No newline at end of file
diff --git a/syncer/README.md b/syncer/README.md
deleted file mode 100644
index 1d94e88..0000000
--- a/syncer/README.md
+++ /dev/null
@@ -1,151 +0,0 @@
-ServiceCenter Syncer
--------
-[中文简介](./README-ZH.md)
-
-### 1. What is ServiceCenter Syncer  
-Syncer is a multiple servicecenters synchronization tool designed for large microservice architectures,supporting differ-structure servicecenters. The project adheres to the following beliefst:  
-- Transparent to the application. Regardless of whether the tool is running or not, it should not affect the original microservices.  
-- Provide peer-to-peer networks for multiple service-centers. Syncers are loosely coupled and members can  join and quit freely.  
-- Support for different service-centers. Plug-in form, users can easily implement plug-ins for different service-centers.
-
-##### Glossary 
-- Gossip - Syncer  uses a gossip protocol by serf for inter-cluster broadcasts. The Gossip protocol uses UDP to indirectly force random propagation between cluster nodes, which is a viral propagation protocol.  
-- Serf - An implementation of the Gossip protocol, a tool for cluster member management, fault detection, and orchestration, which is distributed, fault tolerant and highly available. 
-- service center - It can be a single microservice discovery and registration center or a cluster of microservice discovery and registration centers. We define a service center to be a network area with unified instances data.
-
-### 2. ServiceCenter Syncer Architecture
-Syncer's runtime architecture diagram is as follows,
-![image](./images/SyncerArchitecture.png?raw=true&v=2)  
-There are three service-centers, 
-
-- Within each service center, a service registry (ServiceCenter, Eurake, or other) cluster is deployed that manages all microservice instances of the service center to which it belongs, and the service centers are isolated from each other. At the same time, a Syner cluster is deployed in each service center, which is responsible for discovering instances from the registry and registering instance information from other service centers to its own service centers.
-- Between multiple service centers, multiple Syncers form a peer-to-peer network that maintains a Gossip pool. The use of the Gossip protocol mainly brings the following conveniences, 
-   - Syncer only needs any pool member information to join the network, and the discovery of other member information is done automatically. 
-   - The fault detection of members is distributed, and multiple members in the pool cooperate with each other, which is more accurate and perfect than simple heartbeat.
-   - Provides cluster messaging, mainly for event notification of instances data.
--  Syncer provides RPC service for transmitting microservice instances information. When a Syncer receives event notifications from other members or queries across service centers, the data can be synchronized through the Pull and Push interfaces provided by the RPC service.  
-
-### 3. Quick Start
-##### 3.1 Getting & Running Service center
-
-Take Service-center as an example, reference to [ServiceCenter Quick Start](https://github.com/apache/servicecomb-service-center#quick-start)  
-
-##### 3.2 Building Service-Center Syncer from Source
-Requirements, Golang version 1.11+  
-```bash
-# Get Service-center Syncer source code from github
-$ git clone https://github.com/apache/servicecomb-service-center.git $GOPATH/src/github.com/apache/servicecomb-service-center
-$cd $GOPATH/src/github.com/apache/servicecomb-service-center
-
-# Set "go mod" compile env
-$ GO111MODULE=on go mod download
-$ GO111MODULE=on go mod vendor
-
-# Build it
-$ cd syncer
-$ go build
-```
-
-##### 3.3 Running ServiceCenter Syncer
-###### Parameter Description
-- sc-addr 
-
-  Service center address, which is the service registry address. Cluster mode is supported, and multiple addresses are separated by commas.   
-  
-- bind-addr
-
-  P2P address of Syncer for communication with other Syner members in P2P networks by Gossip.   
-  
-- rpc-addr
-
-  Address of Syncer for data transmission, used to synchronize microservices data  between Syncers.  
-  
-- join-addr
-
-  The address of any member of the P2P network, to enable itself join the specified P2P network, ignore this parameter when starting the first syncer on a P2P network.   
-  
-- mode
-
-  Runtime mode of Syncer, specify 'cluster' for cluster mode which enables each Syncer to have three instance, default to 'single' mode.
-  
-- cluster-name
-
-  Name of the Syncer cluster when mode is set to be 'cluster'.
-  
-- cluster-port
-
-  The port that the Syner cluster members communicate with when mode is set to be "cluster".
-  
-- node
-
-  Member name of Syncer cluster when mode is set to be "cluster".
-  
-###### Synchronization Mode Description
-- Incremental Synchronization:
-
-  Default synchronization mode.
-  
-- Full Synchronization:
-
-  A full synchronization is automatically triggered when each syncer starts to join, 
-  or it can be triggered manually by calling the interface after an exception occurs in the incremental synchronization.
-
-```bash
-$ curl http://localhost:30300/v1/syncer/full-synchronization
-```
-
-Suppose there are 2 Service centers, each of them with a Service-center cluster for microservices discovery and registry, as following,   
-
-|     Servicecenter      | Local address |
-| :--------------------: | :-----------: |
-| http://10.0.0.10:30100 |   10.0.0.10   |
-| http://10.0.0.11:30100 |   10.0.0.11   |
-
-#### Single Mode
-
-Start Service-center Syncer to enable communication between 2 service centers
-
-- Start Sycner  on host 10.0.0.10 
-
-```bash
-$ ./syncer daemon --sc-addr http://10.0.0.10:30100 --bind-addr 10.0.0.10:30190 --rpc-addr 10.0.0.10:30191
-```
-
-- Start Syncer on host 10.0.0.11 and join into 10.0.0.10 gossip pool
-
-```bash
-$ ./syncer daemon --sc-addr http://10.0.0.11:30100 --bind-addr 10.0.0.11:30190 --rpc-addr 10.0.0.11:30191 --join-addr 10.0.0.10:30191
-```
-
-#### Cluster Mode
-
-Start 2 Syncer clusters on there host to synchronize microservice data between the 2 service centers
-
-- Start Syncer cluster on host 10.0.0.10
-
-```bash
-$ ./syncer daemon --sc-addr http://10.0.0.10:30100 --bind-addr 10.0.0.10:30190 --rpc-addr 10.0.0.10:30191 --mode cluster --node syncer011 --cluster-port 30201 --join-addr 10.0.0.10:30190
-$ ./syncer daemon --sc-addr http://10.0.0.10:30100 --bind-addr 10.0.0.10:30290 --rpc-addr 10.0.0.10:30291 --mode cluster --node syncer012 --cluster-port 30202 --join-addr 10.0.0.10:30190
-$ ./syncer daemon --sc-addr http://10.0.0.10:30100 --bind-addr 10.0.0.10:30390 --rpc-addr 10.0.0.10:30391 --mode cluster --node syncer013 --cluster-port 30203 --join-addr 10.0.0.10:30190
-```
-
-- Start Syncer cluster on host 10.0.0.11
-
-```bash
-$ ./syncer daemon --sc-addr http://10.0.0.11:30100 --bind-addr 10.0.0.11:30190 --rpc-addr 10.0.0.11:30191 --mode cluster --node syncer021 --cluster-port 30201 --join-addr 10.0.0.10:30190
-$ ./syncer daemon --sc-addr http://10.0.0.11:30100 --bind-addr 10.0.0.11:30290 --rpc-addr 10.0.0.11:30291 --mode cluster --node syncer022 --cluster-port 30202 --join-addr 10.0.0.10:30190
-$ ./syncer daemon --sc-addr http://10.0.0.11:30100 --bind-addr 10.0.0.11:30390 --rpc-addr 10.0.0.11:30391 --mode cluster --node syncer023 --cluster-port 30203 --join-addr 10.0.0.10:30190
-```
-
-**Verification**  
-30 seconds after registering a microservice to one of the Service-centers,  the information about it can be get from the other one.
-
-### 4. Features
-
-Syncer is in developing progress, reference to [TODO](./TODO.md) to get more developing features. Supported features are listed as follows,
-
-- Data synchronization among multiple servicecomb-service-centers
-- Solidify the mapping table of micro-service instances into etcd
-- Support Syncer cluster mode, each Syncer has 3 instances
-- Support incremental synchronization as the main synchronization mechanism. 
-  When each syncer joins, a full synchronization is triggered. It can also be performed manually after an exception occurs in incremental synchronization.
diff --git a/syncer/TODO-ZH.md b/syncer/TODO-ZH.md
deleted file mode 100644
index ec4a18d..0000000
--- a/syncer/TODO-ZH.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# 服务中心 Syncer的 待完成任务列表
-
-[Reference to English version](./TODO.md)
-
-## 主体功能
-
-- 完善Service-center 插件功能,Service-center之间进行数据同步时,除Serivce和Instance外的数据进行无损同步
-- 增量数据同步
-- 异构支持SpringCloud Eureka,Eureka注册的微服务可与Service-center之间进行跨DC数据通信
-- 异构支持Istio
-- 异构支持K8S etcd
-- 异构支持Consule
-- 支持跨云的数据同步
-
-## 管理功能
-
-- Syncer集群的生命周期管理,增删改查Syncer集群成员
-- 跨服务中心微服务黑名单管理
-- 跨服务中心微服务白名单管理
-- 按需同步管理
-- 支持配置文件中读取配置
-
-## 可靠性
-
-- 服务中心内部 Syncer 多实例生命周期管理
-- Syncer的微服务实例数据和映射关系表 存储到 etcd
-
-## 安全
-
-- 通信加密
-- 权限管理
-- 鉴权管理
-
-## 部署
-
-- Docker部署
\ No newline at end of file
diff --git a/syncer/TODO.md b/syncer/TODO.md
deleted file mode 100644
index 94d96fd..0000000
--- a/syncer/TODO.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# ToDo List of Service-center Syncer
-
-[中文版](./TODO-ZH.md)
-
-## Functionality
-
-- Improve Service-center plugin to perform lossless data synchronization between Service-center
-- Incremental data synchronization
-- Support SpringCloud Eureka
-- Support Istio
-- Support K8S etcd
-- Support Consule
-- Support data synchronization cross datacenters
-
-## Management
-
-- Lifecycle management of syncer cluster
-- Microservices blacklist of cross service-center
-- Microservices whitelist of cross service-center-center
-- Management of on-demand service-center synchronization
-- Support read configuration from config file
-
-## Reliable
-
-- Lifecycle management for syncer's multi-instances in a Data-center
-- Store syncer data to etcd
-
-## Security
-
-- Communication encryption
-- Authority management
-- Authentication management
-
-## Deployment
-
-- Docker deployment
\ No newline at end of file
diff --git a/syncer/client/sync_client.go b/syncer/client/sync_client.go
deleted file mode 100644
index 980e234..0000000
--- a/syncer/client/sync_client.go
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package client
-
-import (
-	"context"
-	"crypto/tls"
-	"fmt"
-	"sync"
-
-	"github.com/apache/servicecomb-service-center/pkg/log"
-	"github.com/apache/servicecomb-service-center/syncer/grpc"
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-	ggrpc "google.golang.org/grpc"
-)
-
-var (
-	clients sync.Map
-)
-
-// Client struct
-type Client struct {
-	addr string
-	conn *ggrpc.ClientConn
-	cli  pb.SyncClient
-}
-
-// NewSyncClient Get the client from the client caches with addr
-func NewSyncClient(addr string, tlsConf *tls.Config) (cli *Client) {
-	val, ok := clients.Load(addr)
-	if ok {
-		cli = val.(*Client)
-	} else {
-		err := grpc.InjectClient(func(conn *ggrpc.ClientConn) {
-			cli = &Client{
-				addr: addr,
-				conn: conn,
-				cli:  pb.NewSyncClient(conn),
-			}
-			clients.Store(addr, cli)
-		}, grpc.WithAddr(addr), grpc.WithTLSConfig(tlsConf))
-		if err != nil {
-			log.Error("", err)
-		}
-	}
-	return
-}
-
-// Pull implement the interface of sync server
-func (c *Client) Pull(ctx context.Context, addr string) (*pb.SyncData, error) {
-	data, err := c.cli.Pull(ctx, &pb.PullRequest{Addr: addr})
-	if err != nil {
-		log.Error("Pull from grpc client failed, going to close the client", err)
-		closeClient(c.addr)
-	}
-	return data, err
-}
-
-func (c *Client) IncrementPull(ctx context.Context, req *pb.IncrementPullRequest) (*pb.SyncData, error) {
-	data, err := c.cli.IncrementPull(ctx, req)
-	if err != nil {
-		log.Error("Pull from grpc client failed, going to close the client", err)
-		closeClient(c.addr)
-	}
-	return data, err
-}
-
-func (c *Client) DeclareDataLength(ctx context.Context, addr string) (*pb.DeclareResponse, error) {
-	res, err := c.cli.DeclareDataLength(ctx, &pb.DeclareRequest{Addr: addr})
-	if err != nil {
-		log.Error("Get SyncDataLength from grpc client failed, going to close the client", err)
-		closeClient(c.addr)
-	}
-	return res, err
-}
-
-func closeClient(addr string) {
-	val, ok := clients.Load(addr)
-	if ok {
-		cli := val.(*Client)
-		cli.conn.Close()
-		clients.Delete(addr)
-		log.Info(fmt.Sprintf("Close grpc client connection to %s", addr))
-	}
-}
diff --git a/syncer/client/sync_client_test.go b/syncer/client/sync_client_test.go
deleted file mode 100644
index 34885a7..0000000
--- a/syncer/client/sync_client_test.go
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-
-package client
-
-import (
-	"context"
-	"crypto/tls"
-	"testing"
-
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-	"github.com/stretchr/testify/assert"
-)
-
-var c = NewSyncClient("", new(tls.Config))
-
-func TestClient_IncrementPull(t *testing.T) {
-	t.Run("Test IncrementPull", func(t *testing.T) {
-		_, err := c.IncrementPull(context.Background(), &pb.IncrementPullRequest{Addr: "http://127.0.0.1", Length: 3})
-		assert.Error(t, err, "IncrementPull fail without grpc")
-	})
-}
-
-func TestClient_DeclareDataLength(t *testing.T) {
-	t.Run("DeclareDataLength test", func(t *testing.T) {
-		_, err := c.DeclareDataLength(context.Background(), "http://127.0.0.1")
-		assert.Error(t, err, "DeclareDataLength fail without grpc")
-	})
-}
diff --git a/syncer/client/watch_client.go b/syncer/client/watch_client.go
deleted file mode 100644
index d140440..0000000
--- a/syncer/client/watch_client.go
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-
-package client
-
-import (
-	"context"
-	"encoding/json"
-	"fmt"
-	"net/http"
-	"net/url"
-	"strings"
-	"sync"
-	"time"
-
-	"github.com/apache/servicecomb-service-center/pkg/dump"
-	"github.com/apache/servicecomb-service-center/pkg/log"
-	"github.com/apache/servicecomb-service-center/server/alarm"
-	"github.com/gorilla/websocket"
-)
-
-const watchInstanceURL = "v4/syncer/watch"
-const wsScheme = "ws"
-
-var (
-	TenantHeader      = "X-Domain-Name"
-	HeaderContentType = "Content-Type"
-	HeaderUserAgent   = "User-Agent"
-)
-
-type WatchClient struct {
-	addr     string
-	wsDialer *websocket.Dialer
-	conn     *websocket.Conn
-	ready    bool
-	mux      sync.RWMutex
-}
-
-// NewWatchClient Get the client from the client caches with addr
-func NewWatchClient(addr string) (cli *WatchClient) {
-	cli = &WatchClient{
-		addr:     addr,
-		conn:     new(websocket.Conn),
-		wsDialer: new(websocket.Dialer),
-	}
-
-	return cli
-}
-
-func (c *WatchClient) GetDefaultHeaders() http.Header {
-	headers := http.Header{
-		HeaderContentType: []string{"application/json"},
-		HeaderUserAgent:   []string{"syncer-sc-client/1.0.0"},
-		TenantHeader:      []string{"defaut"},
-	}
-	return headers
-}
-
-func (c *WatchClient) WebsocketDial() error {
-	hosts := strings.Split(c.addr, "//")
-	wsHost := ""
-
-	if len(hosts) == 1 {
-		wsHost = hosts[0]
-	} else {
-		wsHost = hosts[1]
-	}
-
-	u := url.URL{
-		Scheme: wsScheme,
-		Host:   wsHost,
-		Path:   watchInstanceURL,
-	}
-
-	conn, _, err := c.wsDialer.Dial(u.String(), c.GetDefaultHeaders())
-
-	if err != nil {
-		return fmt.Errorf("watching instance dial catch an exception:%s", err.Error())
-	}
-
-	c.conn = conn
-
-	log.Info("watching instance dial is success connected ")
-
-	return nil
-}
-
-func (c *WatchClient) WatchInstances(callback func(*dump.WatchInstanceChangedEvent)) error {
-	c.mux.RLock()
-	connIsReady := c.ready
-	c.mux.RUnlock()
-
-	if connIsReady {
-		return nil
-	}
-
-	err := c.WebsocketDial()
-	if err != nil {
-		return err
-	}
-
-	c.mux.Lock()
-	c.ready = true
-	c.mux.Unlock()
-
-	go func() {
-		for {
-			messageType, message, err := c.conn.ReadMessage()
-			if err != nil {
-				log.Error("err occurred", err)
-				err = alarm.Raise(alarm.IDWebsocketOfScSyncerLost, alarm.AdditionalContext("%v", err))
-				if err != nil {
-					log.Error("alarm error", err)
-				}
-				break
-			}
-			if messageType == websocket.TextMessage {
-				var response dump.WatchInstanceChangedEvent
-				err := json.Unmarshal(message, &response)
-				if err != nil {
-					break
-				}
-				callback(&response)
-
-			}
-		}
-
-		log.Debug(fmt.Sprintf("close conn:%s", c.conn.RemoteAddr()))
-		err := c.conn.Close()
-
-		c.mux.Lock()
-		c.ready = false
-		c.mux.Unlock()
-
-		if err != nil {
-			log.Error("close conn error:%s", err)
-		}
-
-	}()
-
-	return err
-}
-
-func (c *WatchClient) WatchInstanceHeartbeat(callback func(*dump.WatchInstanceChangedEvent)) {
-	ticker := time.NewTicker(30 * time.Second)
-
-	go func() {
-		for {
-			select {
-			case <-context.Background().Done():
-				return
-			case <-ticker.C:
-				err := c.conn.WriteControl(websocket.PingMessage, []byte{}, time.Now().Add(5*time.Second))
-
-				if err != nil {
-					log.Error("fail to send ping to service center, try to conn again", err)
-
-					c.mux.RLock()
-					connIsReady := c.ready
-					c.mux.RUnlock()
-
-					if !connIsReady {
-						err = c.WatchInstances(callback)
-						if err != nil {
-							log.Error("", err)
-						}
-					}
-				}
-			}
-		}
-	}()
-}
diff --git a/syncer/client/watch_client_test.go b/syncer/client/watch_client_test.go
deleted file mode 100644
index 1c69d0a..0000000
--- a/syncer/client/watch_client_test.go
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-
-package client
-
-import (
-	"fmt"
-	"testing"
-
-	"github.com/apache/servicecomb-service-center/pkg/dump"
-	"github.com/apache/servicecomb-service-center/pkg/log"
-	"github.com/stretchr/testify/assert"
-)
-
-func TestWatchInstance(t *testing.T) {
-
-	addressWithPro := "http://127.0.0.1:8989"
-	addressWithoutPro := "127.0.0.1:8888"
-	cli := NewWatchClient(addressWithPro)
-	assert.Equal(t, addressWithPro, cli.addr)
-
-	cli = NewWatchClient(addressWithoutPro)
-	assert.Equal(t, addressWithoutPro, cli.addr)
-
-	err := cli.WatchInstances(fakeAddToQueue)
-	assert.Error(t, err)
-
-	cli.WatchInstanceHeartbeat(fakeAddToQueue)
-
-}
-
-func fakeAddToQueue(event *dump.WatchInstanceChangedEvent) {
-	log.Debug(fmt.Sprintf("success add instance event to queue: %v", event))
-}
diff --git a/syncer/cmd/daemon.go b/syncer/cmd/daemon.go
deleted file mode 100644
index 79f56c2..0000000
--- a/syncer/cmd/daemon.go
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package cmd
-
-import (
-	"context"
-
-	"github.com/apache/servicecomb-service-center/pkg/log"
-	"github.com/apache/servicecomb-service-center/syncer/config"
-	"github.com/apache/servicecomb-service-center/syncer/server"
-	"github.com/spf13/cobra"
-)
-
-var (
-	conf       = &config.Config{}
-	configFile = ""
-)
-
-var syncerCmd = &cobra.Command{
-	Use:   "daemon",
-	Short: "Start a syncer daemon",
-	Run:   runSyncer,
-}
-
-func init() {
-	rootCmd.AddCommand(syncerCmd)
-
-	syncerCmd.Flags().StringVar(&conf.Mode, "mode", conf.Mode,
-		"run mode")
-
-	syncerCmd.Flags().StringVar(&conf.Node, "node", conf.Node,
-		"node name")
-
-	syncerCmd.Flags().StringVar(&conf.Cluster, "cluster", conf.Cluster,
-		"cluster name")
-
-	syncerCmd.Flags().StringVar(&conf.Listener.BindAddr, "bind-addr", conf.Listener.BindAddr,
-		"address used to network with other Syncers")
-
-	syncerCmd.Flags().StringVar(&conf.Listener.RPCAddr, "rpc-addr", conf.Listener.RPCAddr,
-		"port used to synchronize data with other Syncers")
-
-	syncerCmd.Flags().StringVar(&conf.Listener.PeerAddr, "peer-addr", conf.Listener.PeerAddr,
-		"port used to communicate with other cluster members")
-
-	syncerCmd.Flags().StringVar(&conf.Join.Address, "join", "",
-		"address to join the network by specifying at least one existing member")
-
-	syncerCmd.Flags().StringVar(&conf.Registry.Address, "registry", conf.Registry.Address,
-		"address to monitor the registry")
-
-	syncerCmd.Flags().StringVar(&conf.Registry.Plugin, "plugin", conf.Registry.Plugin,
-		"plugin name of servicecenter")
-
-	syncerCmd.Flags().StringVar(&configFile, "config", "",
-		"configuration from file")
-}
-
-// runSyncer Runs the Syncer service.
-func runSyncer(cmd *cobra.Command, args []string) {
-	if conf.Join.Address != "" {
-		conf.Join.Enabled = true
-	}
-
-	defaultConfig := config.DefaultConfig()
-
-	if configFile != "" {
-		fromFile, err := config.LoadConfig(configFile)
-		if err != nil {
-			log.Error("load config file failed", err)
-			return
-		}
-		if fromFile != nil {
-			*defaultConfig = config.Merge(*defaultConfig, *fromFile)
-		}
-	}
-
-	*conf = config.Merge(*defaultConfig, *conf)
-	err := config.Verify(conf)
-	if err != nil {
-		log.Error("verify syncer config failed", err)
-		return
-	}
-
-	server.NewServer(conf).Run(context.Background())
-}
diff --git a/syncer/cmd/root.go b/syncer/cmd/root.go
deleted file mode 100644
index 1b84d0f..0000000
--- a/syncer/cmd/root.go
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package cmd
-
-import (
-	"log"
-
-	"github.com/spf13/cobra"
-)
-
-var rootCmd = &cobra.Command{
-	Use:   "syncer",
-	Short: "Syncer is a synchronization tool for mutilple service centers",
-	Long: "Syncer is a synchronization tool for mutilple service centers, supported: ServiceComb service-center, " +
-		"going to be supported: SpringCloud Eureka, Istio, K8S",
-}
-
-func Execute() error {
-	err := rootCmd.Execute()
-	if err != nil {
-		log.Println(err)
-	}
-	return err
-}
diff --git a/syncer/cmd/version.go b/syncer/cmd/version.go
deleted file mode 100644
index b00c42e..0000000
--- a/syncer/cmd/version.go
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package cmd
-
-import (
-	"github.com/apache/servicecomb-service-center/syncer/version"
-	"github.com/spf13/cobra"
-)
-
-var versionCmd = &cobra.Command{
-	Use:   "version",
-	Short: "Output the version of syncer",
-	Run:   outputVersion,
-}
-
-func init() {
-	rootCmd.AddCommand(versionCmd)
-}
-
-// output syncer version.
-func outputVersion(cmd *cobra.Command, args []string) {
-	version.Ver().Print()
-}
diff --git a/syncer/config/config.go b/syncer/config/config.go
deleted file mode 100644
index a04856a..0000000
--- a/syncer/config/config.go
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package config
-
-import (
-	"fmt"
-	"io/ioutil"
-	"os"
-	"path/filepath"
-	"strconv"
-
-	"errors"
-
-	"github.com/apache/servicecomb-service-center/pkg/log"
-	"github.com/apache/servicecomb-service-center/syncer/pkg/utils"
-	"gopkg.in/yaml.v2"
-	"k8s.io/apimachinery/pkg/util/uuid"
-)
-
-// DefaultConfig returns the default config
-func DefaultConfig() *Config {
-	hostname, err := os.Hostname()
-	if err != nil {
-		log.Error("error determining hostname", err)
-		hostname = string(uuid.NewUUID())
-	}
-
-	return &Config{
-		Mode:    ModeSingle,
-		Node:    hostname,
-		DataDir: defaultDataDir + hostname,
-		Listener: Listener{
-			BindAddr: "0.0.0.0:" + strconv.Itoa(defaultBindPort),
-			RPCAddr:  "0.0.0.0:" + strconv.Itoa(defaultRPCPort),
-			PeerAddr: "127.0.0.1:" + strconv.Itoa(defaultPeerPort),
-		},
-		Task: Task{
-			Kind: "ticker",
-			Params: []Label{
-				{
-					Key:   defaultTaskKey,
-					Value: defaultTaskValue,
-				},
-			},
-		},
-		Registry: Registry{
-			Address: "http://127.0.0.1:30100",
-			Plugin:  defaultDCPluginName,
-		},
-	}
-}
-
-// LoadConfig loads configuration from file
-func LoadConfig(filepath string) (*Config, error) {
-	if filepath == "" {
-		return nil, nil
-	}
-	if !(utils.IsFileExist(filepath)) {
-		err := errors.New("file is not exist")
-		log.Error(fmt.Sprintf("Load config from %s failed", filepath), err)
-		return nil, err
-	}
-
-	byteArr, err := ioutil.ReadFile(filepath)
-	if err != nil {
-		log.Error(fmt.Sprintf("Load config from %s failed", filepath), err)
-		return nil, err
-	}
-
-	conf := &Config{}
-	err = yaml.Unmarshal(byteArr, conf)
-	if err != nil {
-		log.Error(fmt.Sprintf("Unmarshal config file failed, content is %s", byteArr), err)
-		return nil, err
-	}
-	return conf, nil
-}
-
-func (c *Config) GetTLSConfig(name string) *TLSConfig {
-	return findInTLSConfigs(c.TLSConfigs, name)
-}
-
-func pathFromSSLEnvOrDefault(server, path string) string {
-	env := os.Getenv(defaultEnvSSLRoot)
-	if len(env) == 0 {
-		wd, _ := os.Getwd()
-		return filepath.Join(wd, defaultCertsDir, server, path)
-	}
-	return os.ExpandEnv(filepath.Join("$"+defaultEnvSSLRoot, server, path))
-}
diff --git a/syncer/config/config_test.go b/syncer/config/config_test.go
deleted file mode 100644
index dc443fc..0000000
--- a/syncer/config/config_test.go
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-package config
-
-import (
-	"io/ioutil"
-	"os"
-	"path/filepath"
-	"testing"
-
-	"github.com/apache/servicecomb-service-center/syncer/pkg/utils"
-
-	"github.com/stretchr/testify/assert"
-)
-
-func TestDefaultConfig(t *testing.T) {
-	conf := DefaultConfig()
-	assert.NotNil(t, conf)
-}
-
-func TestLoadConfig(t *testing.T) {
-	configFile := ""
-	conf, err := LoadConfig(configFile)
-	assert.Nil(t, conf)
-
-	configFile = "./test.yaml"
-	conf, err = LoadConfig(configFile)
-	assert.NotNil(t, err)
-
-	defer os.Remove(configFile)
-	err = createFile(configFile, notYAMLData())
-	assert.Nil(t, err)
-	conf, err = LoadConfig(configFile)
-	assert.NotNil(t, err)
-
-	err = createFile(configFile, correctConfiguration())
-	assert.Nil(t, err)
-	conf, err = LoadConfig(configFile)
-	assert.Nil(t, err)
-}
-
-func TestGetTLSConfig(t *testing.T) {
-	configFile := "./test.yaml"
-	defer os.Remove(configFile)
-	err := createFile(configFile, correctConfiguration())
-	assert.Nil(t, err)
-	conf, err := LoadConfig(configFile)
-	assert.Nil(t, err)
-
-	tlsConf := conf.GetTLSConfig(conf.Listener.TLSMount.Name)
-	assert.NotNil(t, tlsConf)
-}
-
-func TestMerge(t *testing.T) {
-	configFile := "./test.yaml"
-	defer os.Remove(configFile)
-	err := createFile(configFile, correctConfiguration())
-	assert.Nil(t, err)
-	conf, err := LoadConfig(configFile)
-	assert.Nil(t, err)
-
-	nConf := Merge(*conf, *conf, *DefaultConfig())
-	assert.NotNil(t, nConf)
-}
-
-func TestVerify(t *testing.T) {
-	conf := DefaultConfig()
-	conf.DataDir = ""
-	err := Verify(conf)
-	assert.Nil(t, err)
-
-	configFile := "./test.yaml"
-	defer os.Remove(configFile)
-	err = createFile(configFile, correctConfiguration())
-	assert.Nil(t, err)
-	conf, err = LoadConfig(configFile)
-	assert.Nil(t, err)
-	err = Verify(conf)
-	assert.Nil(t, err)
-
-	bindAddr := conf.Listener.BindAddr
-	conf.Listener.BindAddr = ""
-	err = Verify(conf)
-	conf.Listener.BindAddr = bindAddr
-	assert.NotNil(t, err)
-
-	rpcAddr := conf.Listener.RPCAddr
-	conf.Listener.RPCAddr = ""
-	err = Verify(conf)
-	conf.Listener.RPCAddr = rpcAddr
-	assert.NotNil(t, err)
-
-	peerAddr := conf.Listener.PeerAddr
-	conf.Listener.PeerAddr = ""
-	err = Verify(conf)
-	conf.Listener.PeerAddr = peerAddr
-	assert.NotNil(t, err)
-
-	conf.Listener.TLSMount.Enabled = true
-	err = Verify(conf)
-	assert.Nil(t, err)
-
-	conf.Listener.TLSMount.Name += "_test"
-	err = Verify(conf)
-	conf.Listener.TLSMount.Enabled = false
-	assert.NotNil(t, err)
-
-	conf.Registry.TLSMount.Enabled = true
-	err = Verify(conf)
-	assert.NotNil(t, err)
-
-	conf.Registry.TLSMount.Name += "_test"
-	err = Verify(conf)
-	conf.Registry.TLSMount.Enabled = false
-	assert.NotNil(t, err)
-
-	registry := conf.Registry.Address
-	conf.Registry.Address = "127.0.0.1:xxx"
-	err = Verify(conf)
-	conf.Registry.Address = registry
-	assert.NotNil(t, err)
-
-	conf.Join.Enabled = true
-	joinAddr := conf.Join.Address
-	conf.Join.Address = "http://127.0.0.1:9999"
-	err = Verify(conf)
-	conf.Join.Address = joinAddr
-	assert.NotNil(t, err)
-
-	conf.Join.RetryMax = -1
-	conf.Join.RetryInterval = "3mams"
-	err = Verify(conf)
-	conf.Join.Enabled = false
-	assert.Nil(t, err)
-
-	params := conf.Task.Params
-	conf.Task.Kind = ""
-	conf.Task.Params = []Label{{Key: "test", Value: "test"}, {Key: defaultTaskKey, Value: "3mams"}}
-	err = Verify(conf)
-	conf.Task.Params = params
-	assert.NotNil(t, err)
-}
-
-func createFile(path string, data []byte) error {
-	fileDir := filepath.Dir(path)
-	if !utils.IsDirExist(fileDir) {
-		err := os.MkdirAll(fileDir, 0640)
-		if err != nil {
-			return err
-		}
-	}
-	return ioutil.WriteFile(path, data, 0640)
-}
-
-func notYAMLData() []byte {
-	return []byte("xxxxxxxxxxxx")
-}
-
-func correctConfiguration() []byte {
-	return []byte(`# run mode, supports (single, cluster)
-mode: signle
-# node name, must be unique on the network
-node: syncer-node
-# Cluster name, clustering by this name
-cluster: syncer-cluster
-dataDir: ./syncer-data/
-listener:
-  # Address used to network with other Syncers in LAN
-  bindAddr: 0.0.0.0:30190
-  # Address used to network with other Syncers in WAN
-  advertiseAddr: ""
-  # Address used to synchronize data with other Syncers
-  rpcAddr: 0.0.0.0:30191
-  # Address used to communicate with other cluster peers
-  peerAddr: 127.0.0.1:30192
-  tlsMount:
-    enabled: false
-    name: syncer
-join:
-  enabled: false
-  # Address to join the network by specifying at least one existing member
-  address: 127.0.0.1:30190
-  # Limit the maximum of RetryJoin, default is 0, means no limit
-  retryMax: 3
-  retryInterval: 30s
-task:
-  kind: ticker
-  params:
-    # Time interval between timing tasks, default is 30s
-    - key: interval
-      value: 30s
-registry:
-  plugin: servicecenter
-  address: http://127.0.0.1:30100
-  tlsMount:
-    enabled: false
-    name: servicecenter
-tlsConfigs:
-  - name: syncer
-    verifyPeer: true
-    minVersion: TLSv1.2
-    caFile: ./certs/trust.cer
-    certFile: ./certs/server.cer
-    keyFile: ./certs/server_key.pem
-    passphrase: ""
-    ciphers:
-      - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
-      - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
-      - TLS_RSA_WITH_AES_256_GCM_SHA384
-      - TLS_RSA_WITH_AES_128_GCM_SHA256
-  - name: servicecenter
-    verifyPeer: false
-    caFile: ./certs/trust.cer
-    certFile: ./certs/server.cer
-    keyFile: ./certs/server_key.pem
-`)
-}
diff --git a/syncer/config/const.go b/syncer/config/const.go
deleted file mode 100644
index d6dafee..0000000
--- a/syncer/config/const.go
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package config
-
-const (
-	defaultBindPort          = 30190
-	defaultRPCPort           = 30191
-	defaultPeerPort          = 30192
-	defaultTaskKind          = "ticker"
-	defaultTaskKey           = "interval"
-	defaultTaskValue         = "30s"
-	defaultDataDir           = "./syncer-data/"
-	defaultDCPluginName      = "servicecenter"
-	defaultRetryJoinMax      = 3
-	defaultRetryJoinInterval = "30s"
-
-	defaultEnvSSLRoot = "SSL_ROOT"
-	defaultCertsDir   = "certs"
-	defaultCAName     = "trust.cer"
-	defaultCertName   = "server.cer"
-	defaultKeyName    = "server_key.pem"
-	// ModeSingle run as a single server
-	ModeSingle = "single"
-	// ModeCluster run as a cluster peer
-	ModeCluster = "cluster"
-)
-
-// Config is the configuration that can be set for Syncer. Some of these
-// configurations are exposed as command-line flags.
-type Config struct {
-	Mode       string       `yaml:"mode"`
-	Node       string       `yaml:"node"`
-	Cluster    string       `yaml:"cluster"`
-	DataDir    string       `yaml:"dataDir"`
-	Listener   Listener     `yaml:"listener"`
-	Join       Join         `yaml:"join"`
-	Task       Task         `yaml:"task"`
-	Registry   Registry     `yaml:"registry"`
-	TLSConfigs []*TLSConfig `yaml:"tlsConfigs"`
-}
-
-// Listener Configuration for Syncer listener
-type Listener struct {
-	BindAddr      string `yaml:"bindAddr"`
-	AdvertiseAddr string `yaml:"advertiseAddr"`
-	RPCAddr       string `yaml:"rpcAddr"`
-	PeerAddr      string `yaml:"peerAddr"`
-	TLSMount      Mount  `yaml:"tlsMount"`
-}
-
-// Join Configuration for Syncer join the network
-type Join struct {
-	Enabled       bool   `yaml:"enabled"`
-	Address       string `yaml:"address"`
-	RetryMax      int    `yaml:"retryMax"`
-	RetryInterval string `yaml:"retryInterval"`
-}
-
-// Task
-type Task struct {
-	Kind   string  `yaml:"kind"`
-	Params []Label `yaml:"params"`
-}
-
-// Label pair of key and value
-type Label struct {
-	Key   string
-	Value string
-}
-
-// Registry configuration
-type Registry struct {
-	// Address is the service registry address.
-	Address  string `json:"address"`
-	Plugin   string `yaml:"plugin"`
-	TLSMount Mount  `yaml:"tlsMount"`
-}
-
-// Mount Specifying config and purpose
-type Mount struct {
-	Enabled bool   `yaml:"enabled"`
-	Name    string `yaml:"name"`
-}
-
-// TLSConfig tls configuration
-type TLSConfig struct {
-	Name       string   `yaml:"name"`
-	VerifyPeer bool     `yaml:"verifyPeer"`
-	MinVersion string   `yaml:"minVersion"`
-	Passphrase string   `yaml:"passphrase"`
-	CAFile     string   `yaml:"caFile"`
-	CertFile   string   `yaml:"certFile"`
-	KeyFile    string   `yaml:"keyFile"`
-	Ciphers    []string `yaml:"ciphers"`
-}
diff --git a/syncer/config/merge.go b/syncer/config/merge.go
deleted file mode 100644
index 125bd5f..0000000
--- a/syncer/config/merge.go
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package config
-
-import (
-	"time"
-)
-
-// Merge multiple configurations into one
-func Merge(configs ...Config) (conf Config) {
-	for _, config := range configs {
-		conf = merge(conf, config)
-	}
-	return
-}
-
-func merge(src, dst Config) Config {
-	src.Mode = mergeString(src.Mode, dst.Mode)
-	src.Node = mergeString(src.Node, dst.Node)
-	src.Cluster = mergeString(src.Cluster, dst.Cluster)
-	src.DataDir = mergeString(src.DataDir, dst.DataDir)
-
-	src.Listener.BindAddr = mergeString(src.Listener.BindAddr, dst.Listener.BindAddr)
-	src.Listener.RPCAddr = mergeString(src.Listener.RPCAddr, dst.Listener.RPCAddr)
-	src.Listener.PeerAddr = mergeString(src.Listener.PeerAddr, dst.Listener.PeerAddr)
-	src.Listener.TLSMount.Enabled = mergeBool(src.Listener.TLSMount.Enabled, dst.Listener.TLSMount.Enabled)
-	src.Listener.TLSMount.Name = mergeString(src.Listener.TLSMount.Name, dst.Listener.TLSMount.Name)
-
-	src.Join.Enabled = mergeBool(src.Join.Enabled, dst.Join.Enabled)
-	src.Join.Address = mergeString(src.Join.Address, dst.Join.Address)
-	src.Join.RetryMax = mergeInt(src.Join.RetryMax, dst.Join.RetryMax)
-	src.Join.RetryInterval = mergeTimeString(src.Join.RetryInterval, dst.Join.RetryInterval)
-
-	src.Task.Kind = mergeString(src.Task.Kind, dst.Task.Kind)
-	src.Task.Params = mergeLabels(src.Task.Params, dst.Task.Params)
-
-	src.Registry.Address = mergeString(src.Registry.Address, dst.Registry.Address)
-	src.Registry.Plugin = mergeString(src.Registry.Plugin, dst.Registry.Plugin)
-	src.Registry.TLSMount.Enabled = mergeBool(src.Registry.TLSMount.Enabled, dst.Registry.TLSMount.Enabled)
-	src.Registry.TLSMount.Name = mergeString(src.Registry.TLSMount.Name, dst.Registry.TLSMount.Name)
-	src.TLSConfigs = mergeTLSConfigs(src.TLSConfigs, dst.TLSConfigs)
-	return src
-}
-
-func mergeString(src, dst string) string {
-	if dst != "" {
-		return dst
-	}
-	return src
-}
-
-func mergeInt(src, dst int) int {
-	if dst != 0 {
-		return dst
-	}
-	return src
-}
-
-func mergeBool(src, dst bool) bool {
-	return dst
-}
-
-func mergeTimeString(src, dst string) string {
-	_, err := time.ParseDuration(dst)
-	if err != nil {
-		return src
-	}
-	return dst
-}
-
-func mergeLabels(src, dst []Label) []Label {
-	if len(src) == 0 {
-		return dst[:]
-	}
-
-	merges := src[:]
-	for _, dv := range dst {
-		if findInLabels(src, dv.Key) == nil {
-			merges = append(merges, dv)
-		}
-	}
-	return merges
-}
-
-func findInLabels(labels []Label, key string) *Label {
-	for _, item := range labels {
-		if item.Key == key {
-			return &item
-		}
-	}
-	return nil
-}
-
-func mergeTLSConfigs(src, dst []*TLSConfig) []*TLSConfig {
-	if len(src) == 0 {
-		return dst[:]
-	}
-
-	merges := src[:]
-	for _, dv := range dst {
-		if findInTLSConfigs(src, dv.Name) == nil {
-			merges = append(merges, dv)
-		}
-	}
-	return merges
-}
-
-func findInTLSConfigs(list []*TLSConfig, name string) *TLSConfig {
-	for _, item := range list {
-		if item.Name == name {
-			return item
-		}
-	}
-	return nil
-}
diff --git a/syncer/config/verify.go b/syncer/config/verify.go
deleted file mode 100644
index 92a59e1..0000000
--- a/syncer/config/verify.go
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package config
-
-import (
-	"crypto/md5"
-	"fmt"
-	"net"
-	"net/url"
-	"path/filepath"
-	"sort"
-	"strconv"
-	"strings"
-	"time"
-
-	"github.com/apache/servicecomb-service-center/pkg/log"
-	"github.com/apache/servicecomb-service-center/syncer/pkg/utils"
-	"github.com/go-chassis/foundation/tlsutil"
-	"github.com/pkg/errors"
-)
-
-// Verify Provide config verification
-func Verify(c *Config) (err error) {
-	if err = verifyListener(&c.Listener); err != nil {
-		return
-	}
-
-	if err = verifyJoin(&c.Join); err != nil {
-		return
-	}
-
-	if err = verifyTask(&c.Task); err != nil {
-		return
-	}
-
-	if err = verifyRegistry(&c.Registry); err != nil {
-		return
-	}
-	if c.Listener.TLSMount.Enabled {
-		listenerTLS := c.GetTLSConfig(c.Listener.TLSMount.Name)
-		if listenerTLS == nil {
-			err = errors.Errorf("listener tls config notfound, name = %s", c.Listener.TLSMount.Name)
-			return
-		}
-		if err = verifyTLSConfig(listenerTLS); err == nil {
-			return
-		}
-	}
-
-	if c.Registry.TLSMount.Enabled {
-		registryTLS := c.GetTLSConfig(c.Listener.TLSMount.Name)
-		if registryTLS == nil {
-			err = errors.Errorf("registry tls config notfound, name = %s", c.Registry.TLSMount.Name)
-			return
-		}
-		if err = verifyTLSConfig(registryTLS); err == nil {
-			return
-		}
-	}
-
-	if c.Cluster == "" {
-		endpoints := strings.Split(c.Registry.Address, ",")
-		sort.Strings(endpoints)
-		str := strings.Join(endpoints, ",")
-		c.Cluster = fmt.Sprintf("%x", md5.Sum([]byte(str)))
-	}
-
-	if c.DataDir == "" {
-		c.DataDir = defaultDataDir + c.Node
-	}
-	c.DataDir = filepath.Dir(c.DataDir)
-	return nil
-}
-
-func verifyListener(listener *Listener) (err error) {
-	bindHost, bindPort, bErr := utils.SplitHostPort(listener.BindAddr, defaultBindPort)
-	if bErr != nil {
-		err = errors.Wrapf(bErr, "verify bind address failed, url is %s", listener.BindAddr)
-		return
-	}
-	listener.BindAddr = bindHost + ":" + strconv.Itoa(bindPort)
-
-	rpcHost, rpcPort, rErr := utils.SplitHostPort(listener.RPCAddr, defaultRPCPort)
-	if rErr != nil {
-		err = errors.Wrapf(rErr, "verify rpc address failed, url is %s", listener.RPCAddr)
-		return
-	}
-	listener.RPCAddr = rpcHost + ":" + strconv.Itoa(rpcPort)
-
-	peerHost, peerPort, pErr := utils.SplitHostPort(listener.PeerAddr, defaultPeerPort)
-	if pErr != nil {
-		err = errors.Wrapf(pErr, "verify peer address failed, url is %s", listener.PeerAddr)
-		return
-	}
-	listener.PeerAddr = peerHost + ":" + strconv.Itoa(peerPort)
-	return
-}
-
-func verifyJoin(join *Join) (err error) {
-	if !join.Enabled {
-		return
-	}
-	endpoints := strings.Split(join.Address, ",")
-	for _, addr := range endpoints {
-		_, _, err1 := net.SplitHostPort(addr)
-		if err1 != nil {
-			err = errors.Wrapf(err1, "Verify joinAddr failed, urls has %s", addr)
-			return
-		}
-	}
-
-	if join.RetryMax < 0 {
-		join.RetryMax = defaultRetryJoinMax
-	}
-
-	if _, err1 := time.ParseDuration(join.RetryInterval); err1 != nil {
-		log.Warn(fmt.Sprintf("join retry interval '%s' is wrong", join.RetryInterval))
-		join.RetryInterval = defaultRetryJoinInterval
-	}
-	return
-}
-
-func verifyTask(task *Task) (err error) {
-	if task.Kind == "" {
-		task.Kind = defaultTaskKind
-	}
-
-	if task.Kind == defaultTaskKind {
-		for _, label := range task.Params {
-			if label.Key != defaultTaskKey {
-				continue
-			}
-			_, err1 := time.ParseDuration(label.Value)
-			if err1 != nil {
-				err = errors.Wrapf(err1, "Verify task params failed, key = %s, value = %s", label.Key, label.Value)
-				return
-			}
-		}
-	}
-	return
-}
-
-func verifyRegistry(r *Registry) (err error) {
-	endpoints := strings.Split(r.Address, ",")
-	for _, addr := range endpoints {
-		_, err = url.Parse(addr)
-		if err != nil {
-			log.Error(fmt.Sprintf("Verify registry endpoints failed, urls has %s", addr), err)
-			return err
-		}
-	}
-	return nil
-}
-
-func verifyTLSConfig(conf *TLSConfig) (err error) {
-	if conf.CAFile == "" || !utils.IsFileExist(conf.CAFile) {
-		conf.CAFile = pathFromSSLEnvOrDefault(conf.Name, defaultCAName)
-		if !utils.IsFileExist(conf.CAFile) {
-			err = errors.Errorf("tls ca file '%s' is not found", conf.CAFile)
-			return
-		}
-	}
-
-	if conf.CertFile == "" || !utils.IsFileExist(conf.CertFile) {
-		conf.CertFile = pathFromSSLEnvOrDefault(conf.Name, defaultCertName)
-		if !utils.IsFileExist(conf.CertFile) {
-			err = errors.Errorf("tls cert file '%s' is not found", conf.CertFile)
-			return
-		}
-	}
-
-	if conf.KeyFile == "" || !utils.IsFileExist(conf.KeyFile) {
-		conf.KeyFile = pathFromSSLEnvOrDefault(conf.Name, defaultKeyName)
-		if !utils.IsFileExist(conf.KeyFile) {
-			err = errors.Errorf("tls key file '%s' is not found", conf.KeyFile)
-			return
-		}
-	}
-
-	for _, cipher := range conf.Ciphers {
-		if _, ok := tlsutil.TLSCipherSuiteMap[cipher]; !ok {
-			err = errors.Errorf("cipher %s not exist", cipher)
-			return
-		}
-	}
-	return
-}
diff --git a/syncer/etcd/etcd.go b/syncer/etcd/etcd.go
deleted file mode 100644
index 93389ac..0000000
--- a/syncer/etcd/etcd.go
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package etcd
-
-import (
-	"context"
-
-	clientv3 "go.etcd.io/etcd/client/v3"
-	"go.etcd.io/etcd/server/v3/embed"
-	"go.etcd.io/etcd/server/v3/etcdserver/api/v3client"
-
-	"github.com/apache/servicecomb-service-center/pkg/log"
-	"github.com/apache/servicecomb-service-center/syncer/pkg/utils"
-	"github.com/pkg/errors"
-)
-
-// Server etcd server
-type Server struct {
-	conf    *embed.Config
-	etcd    *embed.Etcd
-	running *utils.AtomicBool
-
-	readyCh chan struct{}
-	stopCh  chan struct{}
-}
-
-// NewServer new etcd server with options
-func NewServer(ops ...Option) (*Server, error) {
-	conf, err := toEtcdConfig(ops...)
-	if err != nil {
-		return nil, errors.Wrap(err, "options to etcd config failed")
-	}
-	return &Server{
-		conf:    conf,
-		running: utils.NewAtomicBool(false),
-		readyCh: make(chan struct{}),
-		stopCh:  make(chan struct{}),
-	}, nil
-}
-
-// Start etcd server
-func (s *Server) Start(ctx context.Context) {
-	s.running.DoToReverse(false, func() {
-		etcd, err := embed.StartEtcd(s.conf)
-		if err != nil {
-			log.Error("etcd: start server failed", err)
-			close(s.stopCh)
-			return
-		}
-		s.etcd = etcd
-		go s.waitNotify(ctx)
-	})
-}
-
-// AddOptions add some options when server not running
-func (s *Server) AddOptions(ops ...Option) error {
-	if s.running.Bool() {
-		return errors.New("etcd server was running")
-	}
-	return mergeConfig(s.conf, toConfig(ops...))
-}
-
-// Ready Returns a channel that will be closed when etcd is ready
-func (s *Server) Ready() <-chan struct{} {
-	return s.readyCh
-}
-
-// Stopped Returns a channel that will be closed when etcd is stopped
-func (s *Server) Stopped() <-chan struct{} {
-	return s.stopCh
-}
-
-// Storage returns etcd storage
-func (s *Server) Storage() *clientv3.Client {
-	return v3client.New(s.etcd.Server)
-}
-
-// IsLeader Check leader
-func (s *Server) IsLeader() bool {
-	if s.etcd == nil || s.etcd.Server == nil {
-		return false
-	}
-	return s.etcd.Server.Leader() == s.etcd.Server.ID()
-}
-
-// Stop etcd server
-func (s *Server) Stop() {
-	s.running.DoToReverse(true, func() {
-		if s.etcd != nil {
-			log.Info("etcd: begin shutdown")
-			s.etcd.Close()
-			close(s.stopCh)
-		}
-		log.Info("etcd: shutdown complete")
-	})
-}
-
-func (s *Server) waitNotify(ctx context.Context) {
-	select {
-	// Be returns when the server is readied
-	case <-s.etcd.Server.ReadyNotify():
-		log.Info("etcd: start server success")
-		close(s.readyCh)
-
-	// Be returns when the server is stopped
-	case <-s.etcd.Server.StopNotify():
-		log.Warn("etcd: server stopped, quitting")
-		s.Stop()
-
-	// Returns an error when running goroutine fails in the etcd startup process
-	case err := <-s.etcd.Err():
-		log.Error("etcd: server happened error, quitting", err)
-		s.Stop()
-
-	case <-ctx.Done():
-		log.Warn("etcd: cancel server by context")
-		s.Stop()
-	}
-}
diff --git a/syncer/etcd/etcd_test.go b/syncer/etcd/etcd_test.go
deleted file mode 100644
index 4032092..0000000
--- a/syncer/etcd/etcd_test.go
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package etcd
-
-import (
-	"context"
-	"os"
-	"testing"
-	"time"
-
-	"github.com/pkg/errors"
-	"github.com/stretchr/testify/assert"
-)
-
-func TestETCDServer(t *testing.T) {
-	defer os.RemoveAll("test-data")
-	svr, err := NewServer(
-		WithName("test"),
-		WithDataDir("test-data/a"),
-		WithPeerAddr("127.0.0.1:8090"),
-	)
-	assert.Nil(t, err)
-
-	ctx, cancel := context.WithCancel(context.Background())
-	err = startServer(ctx, svr)
-	assert.Nil(t, err)
-
-	svr.IsLeader()
-	svr.Storage()
-
-	err = svr.AddOptions(WithAddPeers("defalt", "127.0.0.1:8092"))
-	cancel()
-	assert.NotNil(t, err)
-
-	svr.Stop()
-
-	svr, err = NewServer(
-		WithName("test"),
-		WithDataDir("test-data/b"),
-		WithPeerAddr("127.0.0.1:8091"),
-	)
-	assert.Nil(t, err)
-
-	err = svr.AddOptions(WithAddPeers("defalt", "127.0.0.1:8092"))
-	assert.Nil(t, err)
-
-	ctx, cancel = context.WithCancel(context.Background())
-	err = startServer(ctx, svr)
-	cancel()
-	assert.NotNil(t, err)
-
-	<-time.After(time.Second * 3)
-}
-
-func startServer(ctx context.Context, svr *Server) (err error) {
-	svr.Start(ctx)
-	select {
-	case <-svr.Ready():
-	case <-svr.Stopped():
-		err = errors.New("start etcd server failed")
-	case <-time.After(time.Second * 3):
-		err = errors.New("start etcd server timeout")
-	}
-	return
-}
diff --git a/syncer/etcd/option.go b/syncer/etcd/option.go
deleted file mode 100644
index 8cb0a42..0000000
--- a/syncer/etcd/option.go
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package etcd
-
-import (
-	"fmt"
-	"net/url"
-
-	"go.etcd.io/etcd/server/v3/embed"
-	"go.etcd.io/etcd/server/v3/etcdserver"
-	"go.etcd.io/etcd/server/v3/etcdserver/api/v3compactor"
-
-	"github.com/apache/servicecomb-service-center/pkg/log"
-)
-
-type config struct {
-	name     string
-	dataDir  string
-	peerAddr string
-	peers    map[string]string
-}
-
-// Option to etcd config
-type Option func(*config)
-
-// WithName returns name option
-func WithName(name string) Option {
-	return func(c *config) { c.name = name }
-}
-
-// WithDataDir returns data dir option
-func WithDataDir(dir string) Option {
-	return func(c *config) { c.dataDir = dir }
-}
-
-// WithPeerAddr returns peer address option
-func WithPeerAddr(peerAddr string) Option {
-	return func(c *config) { c.peerAddr = peerAddr }
-}
-
-// WithAddPeers returns add peers option
-func WithAddPeers(name, addr string) Option {
-	return func(c *config) {
-		c.peers[name] = addr
-	}
-}
-
-func toConfig(ops ...Option) *config {
-	c := &config{peers: map[string]string{}}
-	for _, op := range ops {
-		op(c)
-	}
-	return c
-}
-
-func toEtcdConfig(ops ...Option) (*embed.Config, error) {
-	conf := embed.NewConfig()
-	conf.EnableV2 = false
-	conf.EnablePprof = false
-	conf.QuotaBackendBytes = etcdserver.MaxQuotaBytes
-	conf.AutoCompactionMode = v3compactor.ModePeriodic
-	conf.AutoCompactionRetention = "1h"
-
-	conf.ACUrls = nil
-	conf.LCUrls = nil
-
-	err := mergeConfig(conf, toConfig(ops...))
-	if err != nil {
-		return nil, err
-	}
-	return conf, nil
-}
-
-func mergeConfig(src *embed.Config, dst *config) error {
-	if dst.name != "" {
-		src.Name = dst.name
-	}
-
-	if dst.dataDir != "" {
-		src.Dir = dst.dataDir
-	}
-
-	proto := "http://"
-	if dst.peerAddr != "" {
-		peer, err := url.Parse(proto + dst.peerAddr)
-		if err != nil {
-			log.Error(fmt.Sprintf("parse peer listener '%s' failed", dst.peerAddr), err)
-			return err
-		}
-		src.APUrls = []url.URL{*peer}
-		src.LPUrls = []url.URL{*peer}
-		src.InitialCluster = src.Name + "=" + peer.String()
-	}
-
-	if len(dst.peers) > 0 {
-		initialCluster := ""
-		for key, val := range dst.peers {
-			initialCluster += key + "=" + proto + val + ","
-		}
-		src.InitialCluster = initialCluster[:len(initialCluster)-1]
-	}
-	return nil
-}
diff --git a/syncer/grpc/grpc.go b/syncer/grpc/grpc.go
deleted file mode 100644
index b72b12d..0000000
--- a/syncer/grpc/grpc.go
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package grpc
-
-import (
-	"context"
-	"math"
-	"net"
-
-	"github.com/apache/servicecomb-service-center/pkg/log"
-	"github.com/apache/servicecomb-service-center/pkg/rpc"
-	"github.com/apache/servicecomb-service-center/syncer/pkg/utils"
-	"github.com/pkg/errors"
-	"google.golang.org/grpc"
-	"google.golang.org/grpc/credentials"
-)
-
-// Server struct
-type Server struct {
-	server   *grpc.Server
-	listener net.Listener
-	running  *utils.AtomicBool
-
-	readyCh chan struct{}
-	stopCh  chan struct{}
-}
-
-// NewServer new grpc server with options
-func NewServer(ops ...Option) (*Server, error) {
-	conf := toGRPCConfig(ops...)
-	var srv *grpc.Server
-	if conf.tlsConfig != nil {
-		srv = grpc.NewServer(grpc.Creds(credentials.NewTLS(conf.tlsConfig)), grpc.MaxRecvMsgSize(math.MaxInt32), grpc.MaxSendMsgSize(math.MaxInt32))
-	} else {
-		srv = grpc.NewServer(grpc.MaxRecvMsgSize(math.MaxInt32), grpc.MaxSendMsgSize(math.MaxInt32))
-	}
-
-	rpc.RegisterGRpcServer(srv)
-
-	ls, err := net.Listen("tcp", conf.addr)
-	if err != nil {
-		return nil, errors.Wrapf(err, "grpc: listen failed, addr = %s", conf.addr)
-	}
-
-	return &Server{
-		server:   srv,
-		listener: ls,
-		running:  utils.NewAtomicBool(false),
-		readyCh:  make(chan struct{}),
-		stopCh:   make(chan struct{}),
-	}, nil
-}
-
-// Start grpc server
-func (s *Server) Start(ctx context.Context) {
-	s.running.DoToReverse(false, func() {
-		go func() {
-			err := s.server.Serve(s.listener)
-			if err != nil {
-				log.Error("grpc: start server failed", err)
-				s.Stop()
-			}
-		}()
-		close(s.readyCh)
-		go s.wait(ctx)
-	})
-}
-
-// Ready Returns a channel that will be closed when etcd is ready
-func (s *Server) Ready() <-chan struct{} {
-	return s.readyCh
-}
-
-// Stopped Returns a channel that will be closed when etcd is stopped
-func (s *Server) Stopped() <-chan struct{} {
-	return s.stopCh
-}
-
-// Stop etcd server
-func (s *Server) Stop() {
-	s.running.DoToReverse(true, func() {
-		if s.server != nil {
-			log.Info("grpc: begin shutdown")
-			s.server.Stop()
-			close(s.stopCh)
-		}
-		log.Info("grpc: shutdown complete")
-	})
-}
-
-func (s *Server) wait(ctx context.Context) {
-	select {
-	case <-s.stopCh:
-		log.Warn("grpc: server stopped, exited")
-	case <-ctx.Done():
-		log.Warn("grpc: cancel server by context")
-		s.Stop()
-	}
-}
-
-// InjectClient inject grpc client to proto module
-func InjectClient(injection func(conn *grpc.ClientConn), ops ...Option) error {
-	conf := toGRPCConfig(ops...)
-
-	var conn *grpc.ClientConn
-	var err error
-
-	if conf.tlsConfig != nil {
-		conn, err = grpc.Dial(conf.addr, grpc.WithTransportCredentials(credentials.NewTLS(conf.tlsConfig)),
-			grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(math.MaxInt32), grpc.MaxCallSendMsgSize(math.MaxInt32)))
-	} else {
-		conn, err = grpc.Dial(conf.addr, grpc.WithInsecure(),
-			grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(math.MaxInt32), grpc.MaxCallSendMsgSize(math.MaxInt32)))
-	}
-
-	if err != nil {
-		return errors.Wrapf(err, "grpc: create grpc client conn failed, addr = %s", conf.addr)
-	}
-
-	injection(conn)
-	return nil
-}
diff --git a/syncer/grpc/grpc_test.go b/syncer/grpc/grpc_test.go
deleted file mode 100644
index 429b4f1..0000000
--- a/syncer/grpc/grpc_test.go
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package grpc
-
-import (
-	"context"
-	"errors"
-	"testing"
-	"time"
-
-	"github.com/apache/servicecomb-service-center/pkg/rpc"
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-	"github.com/stretchr/testify/assert"
-	ggrpc "google.golang.org/grpc"
-)
-
-type testServer struct{}
-
-func (t *testServer) DeclareDataLength(context.Context, *pb.DeclareRequest) (*pb.DeclareResponse, error) {
-	return &pb.DeclareResponse{}, nil
-}
-
-func (t *testServer) IncrementPull(context.Context, *pb.IncrementPullRequest) (*pb.SyncData, error) {
-	return &pb.SyncData{}, nil
-}
-
-func (t *testServer) Pull(context.Context, *pb.PullRequest) (*pb.SyncData, error) {
-	return &pb.SyncData{}, nil
-}
-
-func TestGRPCServer(t *testing.T) {
-	syncSvr := &testServer{}
-	addr := "127.0.0.1:9099"
-	svr, err := NewServer(
-		WithAddr(addr),
-		WithTLSConfig(nil),
-	)
-	assert.Nil(t, err)
-
-	rpc.RegisterService(func(s *ggrpc.Server) {
-		pb.RegisterSyncServer(s, syncSvr)
-	})
-
-	err = startServer(context.Background(), svr)
-	assert.Nil(t, err)
-
-	err = InjectClient(func(conn *ggrpc.ClientConn) {}, WithAddr(addr))
-	assert.Nil(t, err)
-
-	svr.Stop()
-}
-
-func startServer(ctx context.Context, svr *Server) (err error) {
-	svr.Start(ctx)
-	select {
-	case <-svr.Ready():
-	case <-svr.Stopped():
-		err = errors.New("start grpc server failed")
-	case <-time.After(time.Second * 3):
-		err = errors.New("start grpc server timeout")
-	}
-	return
-}
diff --git a/syncer/grpc/option.go b/syncer/grpc/option.go
deleted file mode 100644
index e5ca425..0000000
--- a/syncer/grpc/option.go
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package grpc
-
-import (
-	"crypto/tls"
-)
-
-type config struct {
-	addr      string
-	tlsConfig *tls.Config
-}
-
-// Option to grpc config
-type Option func(*config)
-
-// WithAddr returns address option
-func WithAddr(addr string) Option {
-	return func(c *config) { c.addr = addr }
-}
-
-// WithTLSConfig returns tls config option
-func WithTLSConfig(conf *tls.Config) Option {
-	return func(c *config) { c.tlsConfig = conf }
-}
-
-func toGRPCConfig(ops ...Option) *config {
-	conf := &config{}
-	for _, op := range ops {
-		op(conf)
-	}
-	return conf
-}
diff --git a/syncer/images/AccountServerReply.jpg b/syncer/images/AccountServerReply.jpg
deleted file mode 100644
index c05ab8c..0000000
Binary files a/syncer/images/AccountServerReply.jpg and /dev/null differ
diff --git a/syncer/images/EurekaAccountServerSuccess.jpg b/syncer/images/EurekaAccountServerSuccess.jpg
deleted file mode 100644
index 50b0a98..0000000
Binary files a/syncer/images/EurekaAccountServerSuccess.jpg and /dev/null differ
diff --git a/syncer/images/EurekaServerHasAll.jpg b/syncer/images/EurekaServerHasAll.jpg
deleted file mode 100644
index 339c70b..0000000
Binary files a/syncer/images/EurekaServerHasAll.jpg and /dev/null differ
diff --git a/syncer/images/EurekaServerSuccess.jpg b/syncer/images/EurekaServerSuccess.jpg
deleted file mode 100644
index 5672b56..0000000
Binary files a/syncer/images/EurekaServerSuccess.jpg and /dev/null differ
diff --git a/syncer/images/HelloServerDiscoverySuccess.jpg b/syncer/images/HelloServerDiscoverySuccess.jpg
deleted file mode 100644
index 3e51c2a..0000000
Binary files a/syncer/images/HelloServerDiscoverySuccess.jpg and /dev/null differ
diff --git a/syncer/images/HelloServerResult.jpg b/syncer/images/HelloServerResult.jpg
deleted file mode 100644
index 61ef0a2..0000000
Binary files a/syncer/images/HelloServerResult.jpg and /dev/null differ
diff --git a/syncer/images/MultiServicecenters.png b/syncer/images/MultiServicecenters.png
deleted file mode 100644
index 194aded..0000000
Binary files a/syncer/images/MultiServicecenters.png and /dev/null differ
diff --git a/syncer/images/ServiceCenterHelloServerSuccess.jpg b/syncer/images/ServiceCenterHelloServerSuccess.jpg
deleted file mode 100644
index 5a0ee93..0000000
Binary files a/syncer/images/ServiceCenterHelloServerSuccess.jpg and /dev/null differ
diff --git a/syncer/images/ServiceCenterServerHasAll.jpg b/syncer/images/ServiceCenterServerHasAll.jpg
deleted file mode 100644
index 2596cb7..0000000
Binary files a/syncer/images/ServiceCenterServerHasAll.jpg and /dev/null differ
diff --git a/syncer/images/ServiceCenterServerSuccess.jpg b/syncer/images/ServiceCenterServerSuccess.jpg
deleted file mode 100644
index 7d0774c..0000000
Binary files a/syncer/images/ServiceCenterServerSuccess.jpg and /dev/null differ
diff --git a/syncer/images/SyncerArchitecture.png b/syncer/images/SyncerArchitecture.png
deleted file mode 100644
index 95b8f27..0000000
Binary files a/syncer/images/SyncerArchitecture.png and /dev/null differ
diff --git a/syncer/pkg/mock/mockplugin/instance.go b/syncer/pkg/mock/mockplugin/instance.go
deleted file mode 100644
index a5e2e42..0000000
--- a/syncer/pkg/mock/mockplugin/instance.go
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package mockplugin
-
-import (
-	"context"
-
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-)
-
-var (
-	registerInstance   func(ctx context.Context, domainProject, serviceId string, instance *pb.SyncInstance) (string, error)
-	unregisterInstance func(ctx context.Context, domainProject, serviceId, instanceId string) error
-	heartbeat          func(ctx context.Context, domainProject, serviceId, instanceId string) error
-)
-
-func SetRegisterInstance(handler func(ctx context.Context, domainProject, serviceId string, instance *pb.SyncInstance) (string, error)) {
-	registerInstance = handler
-}
-
-func SetUnregisterInstance(handler func(ctx context.Context, domainProject, serviceId, instanceId string) error) {
-	unregisterInstance = handler
-}
-
-func SetHeartbeat(handler func(ctx context.Context, domainProject, serviceId, instanceId string) error) {
-	heartbeat = handler
-}
-
-func (c *mockPlugin) RegisterInstance(ctx context.Context, domainProject, serviceID string, instance *pb.SyncInstance) (string, error) {
-	if registerInstance != nil {
-		return registerInstance(ctx, domainProject, serviceID, instance)
-	}
-	return "4d41a637471f11e9888cfa163eca30e0", nil
-}
-
-func (c *mockPlugin) UnregisterInstance(ctx context.Context, domainProject, serviceID, instanceID string) error {
-	if unregisterInstance != nil {
-		return unregisterInstance(ctx, domainProject, serviceID, instanceID)
-	}
-	return nil
-}
-
-func (c *mockPlugin) Heartbeat(ctx context.Context, domainProject, serviceID, instanceID string) error {
-	if heartbeat != nil {
-		return heartbeat(ctx, domainProject, serviceID, instanceID)
-	}
-	return nil
-}
diff --git a/syncer/pkg/mock/mockplugin/service.go b/syncer/pkg/mock/mockplugin/service.go
deleted file mode 100644
index f80745e..0000000
--- a/syncer/pkg/mock/mockplugin/service.go
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package mockplugin
-
-import (
-	"context"
-
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-)
-
-var (
-	createServiceHandler func(ctx context.Context, domainProject string, service *pb.SyncService) (string, error)
-	deleteService        func(ctx context.Context, domainProject, serviceId string) error
-	serviceExistence     func(ctx context.Context, domainProject string, service *pb.SyncService) (string, error)
-)
-
-func SetCreateService(handler func(ctx context.Context, domainProject string, service *pb.SyncService) (string, error)) {
-	createServiceHandler = handler
-}
-
-func SetDeleteService(handler func(ctx context.Context, domainProject, serviceId string) error) {
-	deleteService = handler
-}
-
-func SetServiceExistence(handler func(ctx context.Context, domainProject string, source *pb.SyncService) (string, error)) {
-	serviceExistence = handler
-}
-
-func (c *mockPlugin) CreateService(ctx context.Context, domainProject string, service *pb.SyncService) (string, error) {
-	if createServiceHandler != nil {
-		return createServiceHandler(ctx, domainProject, service)
-	}
-	return "5db1b794aa6f8a875d6e68110260b5491ee7e223", nil
-}
-
-func (c *mockPlugin) DeleteService(ctx context.Context, domainProject, serviceID string) error {
-	if createServiceHandler != nil {
-		return deleteService(ctx, domainProject, serviceID)
-	}
-	return nil
-}
-
-func (c *mockPlugin) ServiceExistence(ctx context.Context, domainProject string, service *pb.SyncService) (string, error) {
-	if serviceExistence != nil {
-		return serviceExistence(ctx, domainProject, service)
-	}
-	return "5db1b794aa6f8a875d6e68110260b5491ee7e223", nil
-}
diff --git a/syncer/pkg/mock/mockplugin/servicecenter.go b/syncer/pkg/mock/mockplugin/servicecenter.go
deleted file mode 100644
index 76fe6ba..0000000
--- a/syncer/pkg/mock/mockplugin/servicecenter.go
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package mockplugin
-
-import (
-	"context"
-
-	"github.com/apache/servicecomb-service-center/syncer/plugins"
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-)
-
-const PluginName = "testmock"
-
-var (
-	scCacheHandler func(ctx context.Context) (*pb.SyncData, error)
-)
-
-func SetGetAll(handler func(ctx context.Context) (*pb.SyncData, error)) {
-	scCacheHandler = handler
-}
-
-func init() {
-	plugins.RegisterPlugin(&plugins.Plugin{
-		Kind: plugins.PluginServicecenter,
-		Name: PluginName,
-		New:  New,
-	})
-}
-
-type adaptor struct{}
-
-func New() plugins.PluginInstance {
-	return &adaptor{}
-}
-
-func (*adaptor) New(opts ...plugins.SCConfigOption) (plugins.Servicecenter, error) {
-	return &mockPlugin{}, nil
-}
-
-type mockPlugin struct {
-}
-
-func NewGetAll(ctx context.Context) (*pb.SyncData, error) {
-	return &pb.SyncData{
-		Services: []*pb.SyncService{
-			{
-				ServiceId:     "5db1b794aa6f8a875d6e68110260b5491ee7e223",
-				App:           "default",
-				Name:          "SERVICECENTER",
-				Version:       "1.1.0",
-				Status:        pb.SyncService_UP,
-				DomainProject: "default/default",
-				PluginName:    PluginName,
-			}, {
-				ServiceId:     "5db1b794aa6f8a875d6e68110260b5491ee7e211",
-				App:           "default",
-				Name:          "SERVICECENTER",
-				Version:       "1.1.0",
-				Status:        pb.SyncService_UP,
-				DomainProject: "default/default",
-				PluginName:    PluginName,
-			},
-		},
-		Instances: []*pb.SyncInstance{
-			{
-				InstanceId: "4d41a637471f11e9888cfa163eca30ab",
-				ServiceId:  "5db1b794aa6f8a875d6e68110260b5491ee7e223",
-				Endpoints: []string{
-					"http://127.0.0.1:30100",
-				},
-				HostName: "testmock",
-				Status:   pb.SyncInstance_UP,
-				HealthCheck: &pb.HealthCheck{
-					Mode:     pb.HealthCheck_PUSH,
-					Interval: 30,
-					Times:    3,
-				},
-				Version:    "1.1.0",
-				PluginName: PluginName,
-			}, {
-				InstanceId: "4d41a637471f11e9888cfa163eca30e0",
-				ServiceId:  "5db1b794aa6f8a875d6e68110260b5491ee7e223",
-				Endpoints: []string{
-					"http://127.0.0.1:30100",
-				},
-				HostName: "testmock",
-				Status:   pb.SyncInstance_UP,
-				HealthCheck: &pb.HealthCheck{
-					Mode:     pb.HealthCheck_PUSH,
-					Interval: 30,
-					Times:    3,
-				},
-				Version:    "1.1.0",
-				PluginName: PluginName,
-			}, {
-				InstanceId: "4d41a637471f11e9888cfa163eca30ab",
-				ServiceId:  "5db1b794aa6f8a875d6e68110260b5491ee7e211",
-				Endpoints: []string{
-					"http://127.0.0.1:30100",
-				},
-				HostName: "testmock",
-				Status:   pb.SyncInstance_UP,
-				HealthCheck: &pb.HealthCheck{
-					Mode:     pb.HealthCheck_PUSH,
-					Interval: 30,
-					Times:    3,
-				},
-				Version:    "1.1.0",
-				PluginName: PluginName,
-			},
-		},
-	}, nil
-}
-
-func (c *mockPlugin) GetAll(ctx context.Context) (*pb.SyncData, error) {
-	if scCacheHandler != nil {
-		return scCacheHandler(ctx)
-	}
-	return &pb.SyncData{
-		Services: []*pb.SyncService{
-			{
-				ServiceId:     "5db1b794aa6f8a875d6e68110260b5491ee7e223",
-				App:           "default",
-				Name:          "SERVICECENTER",
-				Version:       "1.1.0",
-				Status:        pb.SyncService_UP,
-				DomainProject: "default/default",
-				PluginName:    PluginName,
-			},
-		},
-		Instances: []*pb.SyncInstance{
-			{
-				InstanceId: "4d41a637471f11e9888cfa163eca30e0",
-				ServiceId:  "5db1b794aa6f8a875d6e68110260b5491ee7e223",
-				Endpoints: []string{
-					"http://127.0.0.1:30100",
-				},
-				HostName: "testmock",
-				Status:   pb.SyncInstance_UP,
-				HealthCheck: &pb.HealthCheck{
-					Mode:     pb.HealthCheck_PUSH,
-					Interval: 30,
-					Times:    3,
-				},
-				Version:    "1.1.0",
-				PluginName: PluginName,
-			},
-		},
-	}, nil
-}
diff --git a/syncer/pkg/mock/mockservicecenter/instance.go b/syncer/pkg/mock/mockservicecenter/instance.go
deleted file mode 100644
index bac12a4..0000000
--- a/syncer/pkg/mock/mockservicecenter/instance.go
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package mockservicecenter
-
-import (
-	"net/http"
-
-	"github.com/apache/servicecomb-service-center/pkg/log"
-)
-
-func (m *mockServer) DiscoveryInstances(rw http.ResponseWriter, req *http.Request) {
-	_, err := rw.Write([]byte(`{
-  "instances": [
-    {
-      "instanceId": "7a6be9f861a811e9b3f6fa163eca30e0",
-      "serviceId": "4042a6a3e5a2893698ae363ea99a69eb63fc51cd",
-      "endpoints": [
-        "rest://192.168.88.75:30100/"
-      ],
-      "hostName": "chenzhu",
-      "status": "UP",
-      "healthCheck": {
-        "mode": "push",
-        "interval": 30,
-        "times": 3
-      },
-      "timestamp": "1555571184",
-      "modTimestamp": "1555571184",
-      "version": "0.0.1"
-    },
-    {
-      "instanceId": "8e0fe4b961a811e981a6fa163e86b81a",
-      "serviceId": "4042a6a3e5a2893698ae363ea99a69eb63fc51cd",
-      "endpoints": [
-        "rest://192.168.88.109:30100/"
-      ],
-      "hostName": "sunlisen",
-      "status": "UP",
-      "healthCheck": {
-        "mode": "push",
-        "interval": 30,
-        "times": 3
-      },
-      "timestamp": "1555571221",
-      "modTimestamp": "1555571221",
-      "version": "0.0.1"
-    }
-  ]
-}`))
-	if err != nil {
-		log.Error("", err)
-	}
-}
-
-func (m *mockServer) RegisterInstance(rw http.ResponseWriter, req *http.Request) {
-	_, err := rw.Write([]byte(`{"instanceId": "8e0fe4b961a811e981a6fa163e86b81a"}`))
-	if err != nil {
-		log.Error("", err)
-	}
-}
-
-func (m *mockServer) UnregisterInstance(rw http.ResponseWriter, req *http.Request) {
-	_, err := rw.Write([]byte(`{"instanceId": "8e0fe4b961a811e981a6fa163e86b81a"}`))
-	if err != nil {
-		log.Error("", err)
-	}
-}
-
-func (m *mockServer) Heartbeat(rw http.ResponseWriter, req *http.Request) {
-	_, err := rw.Write([]byte(`{"instanceId": "8e0fe4b961a811e981a6fa163e86b81a"}`))
-	if err != nil {
-		log.Error("", err)
-	}
-}
diff --git a/syncer/pkg/mock/mockservicecenter/service.go b/syncer/pkg/mock/mockservicecenter/service.go
deleted file mode 100644
index 36c7fd5..0000000
--- a/syncer/pkg/mock/mockservicecenter/service.go
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package mockservicecenter
-
-import (
-	"net/http"
-
-	"github.com/apache/servicecomb-service-center/pkg/log"
-)
-
-func (m *mockServer) ServiceExistence(rw http.ResponseWriter, req *http.Request) {
-	_, err := rw.Write([]byte(`{
-    "serviceId": "4042a6a3e5a2893698ae363ea99a69eb63fc51cd"
-}`))
-	if err != nil {
-		log.Error("", err)
-	}
-}
-
-func (m *mockServer) CreateService(rw http.ResponseWriter, req *http.Request) {
-	_, err := rw.Write([]byte(`{
-    "serviceId": "4042a6a3e5a2893698ae363ea99a69eb63fc51cd"
-}`))
-	if err != nil {
-		log.Error("", err)
-	}
-}
-
-func (m *mockServer) DeleteService(rw http.ResponseWriter, req *http.Request) {
-	_, err := rw.Write([]byte(`{
-    "serviceId": "4042a6a3e5a2893698ae363ea99a69eb63fc51cc"
-}`))
-	if err != nil {
-		log.Error("", err)
-	}
-}
diff --git a/syncer/pkg/mock/mockservicecenter/servicecenter.go b/syncer/pkg/mock/mockservicecenter/servicecenter.go
deleted file mode 100644
index 212010a..0000000
--- a/syncer/pkg/mock/mockservicecenter/servicecenter.go
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package mockservicecenter
-
-import (
-	"errors"
-	"net/http"
-	"net/http/httptest"
-	"strconv"
-
-	"github.com/apache/servicecomb-service-center/pkg/log"
-	"github.com/apache/servicecomb-service-center/pkg/rest"
-	"github.com/apache/servicecomb-service-center/server/interceptor"
-)
-
-const (
-	WantStatus  = "X-Want-Status"
-	WantContent = "X-Want-Content"
-)
-
-func NewMockServer() *httptest.Server {
-	ms := &mockServer{}
-	interceptor.RegisterInterceptFunc(ms.WantHandler)
-	rest.RegisterServant(ms)
-	return httptest.NewServer(rest.GetRouter())
-}
-
-type mockServer struct{}
-
-func (m *mockServer) URLPatterns() []rest.Route {
-	return []rest.Route{
-		{Method: http.MethodGet, Path: "/v4/:project/admin/dump", Func: m.GetAll},
-		{Method: http.MethodGet, Path: "/v4/:project/registry/existence", Func: m.ServiceExistence},
-		{Method: http.MethodPost, Path: "/v4/:project/registry/microservices", Func: m.CreateService},
-		{Method: http.MethodDelete, Path: "/v4/:project/registry/microservices/:serviceId", Func: m.DeleteService},
-		{Method: http.MethodGet, Path: "/v4/:project/registry/instances", Func: m.DiscoveryInstances},
-		{Method: http.MethodPost, Path: "/v4/:project/registry/microservices/:serviceId/instances", Func: m.RegisterInstance},
-		{Method: http.MethodDelete, Path: "/v4/:project/registry/microservices/:serviceId/instances/:instanceId", Func: m.UnregisterInstance},
-		{Method: http.MethodPut, Path: "/v4/:project/registry/microservices/:serviceId/instances/:instanceId/heartbeat", Func: m.Heartbeat},
-	}
-}
-
-func (m *mockServer) WantHandler(rw http.ResponseWriter, req *http.Request) error {
-	statusCode, err := strconv.Atoi(req.Header.Get(WantStatus))
-	if err != nil || statusCode == 0 {
-		statusCode = http.StatusOK
-	}
-	rw.WriteHeader(statusCode)
-	data := req.Header.Get(WantContent)
-	if data == "" {
-		return nil
-	}
-	_, err = rw.Write([]byte(data))
-	if err != nil {
-		log.Error("", err)
-	}
-	return errors.New(data)
-}
-
-func (m *mockServer) GetAll(rw http.ResponseWriter, req *http.Request) {
-	_, err := rw.Write([]byte(`{
-  "cache": {
-    "services": [
-      {
-        "key": "/cse-sr/ms/files/default/default/4042a6a3e5a2893698ae363ea99a69eb63fc51cd",
-        "rev": 5,
-        "cluster": "sr-0",
-        "value": {
-          "serviceId": "4042a6a3e5a2893698ae363ea99a69eb63fc51cd",
-          "appId": "default",
-          "serviceName": "SERVICECENTER",
-          "version": "0.0.1",
-          "level": "BACK",
-          "schemas": [
-            "servicecenter.grpc.api.ServiceCtrl",
-            "servicecenter.grpc.api.ServiceInstanceCtrl"
-          ],
-          "status": "UP",
-          "properties": {
-            "allowCrossApp": "true"
-          },
-          "timestamp": "1555571184",
-          "alias": "SERVICECENTER",
-          "modTimestamp": "1555571184",
-          "environment": "production"
-        }
-      }
-    ],
-    "serviceIndexes": [
-      {
-        "key": "/cse-sr/ms/indexes/default/default/production/default/SERVICECENTER/0.0.1",
-        "rev": 5,
-        "cluster": "sr-0",
-        "value": "4042a6a3e5a2893698ae363ea99a69eb63fc51cd"
-      }
-    ],
-    "serviceAliases": [
-      {
-        "key": "/cse-sr/ms/alias/default/default/production/default/SERVICECENTER/0.0.1",
-        "rev": 5,
-        "cluster": "sr-0",
-        "value": "4042a6a3e5a2893698ae363ea99a69eb63fc51cd"
-      }
-    ],
-    "instances": [
-      {
-        "key": "/cse-sr/inst/files/default/default/4042a6a3e5a2893698ae363ea99a69eb63fc51cd/7a6be9f861a811e9b3f6fa163eca30e0",
-        "rev": 8,
-        "cluster": "sr-0",
-        "value": {
-          "instanceId": "7a6be9f861a811e9b3f6fa163eca30e0",
-          "serviceId": "4042a6a3e5a2893698ae363ea99a69eb63fc51cd",
-          "endpoints": [
-            "rest://192.168.88.75:30100/"
-          ],
-          "hostName": "chenzhu",
-          "status": "UP",
-          "healthCheck": {
-            "mode": "push",
-            "interval": 30,
-            "times": 3
-          },
-          "timestamp": "1555571184",
-          "modTimestamp": "1555571184",
-          "version": "0.0.1"
-        }
-      },
-      {
-        "key": "/cse-sr/inst/files/default/default/4042a6a3e5a2893698ae363ea99a69eb63fc51cd/8e0fe4b961a811e981a6fa163e86b81a",
-        "rev": 9,
-        "cluster": "sr-0",
-        "value": {
-          "instanceId": "8e0fe4b961a811e981a6fa163e86b81a",
-          "serviceId": "4042a6a3e5a2893698ae363ea99a69eb63fc51cd",
-          "endpoints": [
-            "rest://192.168.88.109:30100/"
-          ],
-          "hostName": "sunlisen",
-          "status": "UP",
-          "healthCheck": {
-            "mode": "push",
-            "interval": 30,
-            "times": 3
-          },
-          "timestamp": "1555571221",
-          "modTimestamp": "1555571221",
-          "version": "0.0.1"
-        }
-      }
-    ]
-  }
-}`))
-	if err != nil {
-		log.Error("", err)
-	}
-}
diff --git a/syncer/pkg/mock/mocksotrage/etcd.go b/syncer/pkg/mock/mocksotrage/etcd.go
deleted file mode 100644
index b66d45d..0000000
--- a/syncer/pkg/mock/mocksotrage/etcd.go
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package mocksotrage
-
-import (
-	"context"
-	"errors"
-	"os"
-
-	"github.com/apache/servicecomb-service-center/syncer/etcd"
-	clientv3 "go.etcd.io/etcd/client/v3"
-)
-
-const (
-	defaultName           = "etcd_mock"
-	defaultDataDir        = "mock-data/"
-	defaultListenPeerAddr = "127.0.0.1:30993"
-)
-
-type MockServer struct {
-	etcd *etcd.Server
-}
-
-func NewKVServer() (svr *MockServer, err error) {
-	agent, err1 := etcd.NewServer(defaultOptions()...)
-	if err1 != nil {
-		return nil, err
-	}
-	go agent.Start(context.Background())
-	select {
-	case <-agent.Ready():
-	case <-agent.Stopped():
-		return nil, errors.New("start etcd mock server failed")
-	}
-	return &MockServer{agent}, nil
-}
-
-func (m *MockServer) Storage() *clientv3.Client {
-	return m.etcd.Storage()
-}
-
-func (m *MockServer) Stop() {
-	m.etcd.Stop()
-	os.RemoveAll(defaultDataDir)
-}
-
-func defaultOptions() []etcd.Option {
-	return []etcd.Option{
-		etcd.WithPeerAddr(defaultListenPeerAddr),
-		etcd.WithName(defaultName),
-		etcd.WithDataDir(defaultDataDir + defaultName),
-	}
-}
diff --git a/syncer/pkg/mock/mocksotrage/storage.go b/syncer/pkg/mock/mocksotrage/storage.go
deleted file mode 100644
index 11b7284..0000000
--- a/syncer/pkg/mock/mocksotrage/storage.go
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package mocksotrage
-
-import (
-	"sync"
-
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-)
-
-var (
-	defaultMapping = make(pb.SyncMapping, 0)
-)
-
-func New() *Storage {
-	return &Storage{
-		data: &pb.SyncData{},
-		maps: make(map[string]pb.SyncMapping),
-	}
-}
-
-// Storage of Syncer
-type Storage struct {
-	data *pb.SyncData
-	// mapping table for other servicecenter instances
-	maps map[string]pb.SyncMapping
-	lock sync.RWMutex
-}
-
-// UpdateData Update data to storage
-func (s *Storage) UpdateData(data *pb.SyncData) {
-	s.lock.Lock()
-	s.data = data
-	s.lock.Unlock()
-}
-
-// GetData Get data from storage
-func (s *Storage) GetData() (data *pb.SyncData) {
-	s.lock.RLock()
-	data = s.data
-	s.lock.RUnlock()
-	return
-}
-
-// UpdateMapByCluster update map to storage by clusterName of other cluster
-func (s *Storage) UpdateMapByCluster(clusterName string, mapping pb.SyncMapping) {
-	s.lock.Lock()
-	s.maps[clusterName] = mapping
-	s.lock.Unlock()
-}
-
-// GetMapByCluster get map by clusterName of other cluster
-func (s *Storage) GetMapByCluster(clusterName string) (mapping pb.SyncMapping) {
-	s.lock.RLock()
-	data, ok := s.maps[clusterName]
-	if !ok {
-		data = defaultMapping
-	}
-	s.lock.RUnlock()
-	return data
-}
-
-func (s *Storage) UpdateMaps(maps pb.SyncMapping) {
-	s.lock.Lock()
-	mappings := make(map[string]pb.SyncMapping)
-	for _, item := range maps {
-		mapping, ok := mappings[item.ClusterName]
-		if !ok {
-			mapping = make(pb.SyncMapping, 0, 10)
-		}
-		mapping = append(mapping, item)
-		mappings[item.ClusterName] = mapping
-	}
-	s.maps = mappings
-	s.lock.Unlock()
-}
-
-// GetMaps Get maps from storage
-func (s *Storage) GetMaps() (mapping pb.SyncMapping) {
-	s.lock.RLock()
-	mapping = make(pb.SyncMapping, 0, 10)
-	for _, data := range s.maps {
-		if data != nil {
-			mapping = append(mapping, data...)
-		}
-	}
-	s.lock.RUnlock()
-	return
-}
diff --git a/syncer/pkg/syssig/signal.go b/syncer/pkg/syssig/signal.go
deleted file mode 100644
index b4eda86..0000000
--- a/syncer/pkg/syssig/signal.go
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package syssig
-
-import (
-	"context"
-	"fmt"
-	"os"
-	"os/signal"
-	"sync"
-	"syscall"
-
-	"github.com/apache/servicecomb-service-center/pkg/log"
-)
-
-var (
-	once       sync.Once
-	lock       sync.RWMutex
-	handlerMap = map[os.Signal][]func(){
-		syscall.SIGHUP:  {},
-		syscall.SIGINT:  {},
-		syscall.SIGKILL: {},
-		syscall.SIGTERM: {},
-	}
-)
-
-// Run start system signal listening
-func Run(ctx context.Context) {
-	once.Do(func() {
-		listenSignals := make([]os.Signal, 0, 10)
-		for key := range handlerMap {
-			listenSignals = append(listenSignals, key)
-		}
-
-		sigChan := make(chan os.Signal, 1)
-		signal.Notify(sigChan, listenSignals...)
-
-		select {
-		case <-ctx.Done():
-
-		case sig := <-sigChan:
-			log.Info(fmt.Sprintf("system signal: %s", sig.String()))
-			calls := callbacks(sig)
-			for _, call := range calls {
-				call()
-			}
-		}
-
-	})
-}
-
-// AddSignalsHandler add system signal listener with types
-func AddSignalsHandler(handler func(), signals ...os.Signal) error {
-	for _, sig := range signals {
-		lock.RLock()
-		handlers, ok := handlerMap[sig]
-		lock.RUnlock()
-		if !ok {
-			return fmt.Errorf("system signal %s is not notify", sig.String())
-		}
-		handlers = append(handlers, handler)
-		lock.Lock()
-		handlerMap[sig] = handlers
-		lock.Unlock()
-	}
-	return nil
-}
-
-// callbacks Callback system listeners
-func callbacks(signal os.Signal) []func() {
-	lock.RLock()
-	calls := handlerMap[signal]
-	lock.RUnlock()
-	return calls
-}
diff --git a/syncer/pkg/syssig/signal_test.go b/syncer/pkg/syssig/signal_test.go
deleted file mode 100644
index 03d89b5..0000000
--- a/syncer/pkg/syssig/signal_test.go
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-package syssig
-
-import (
-	"context"
-	"syscall"
-	"testing"
-	"time"
-
-	"github.com/apache/servicecomb-service-center/pkg/log"
-)
-
-func TestSignalsHandler(t *testing.T) {
-	err := AddSignalsHandler(func() {}, syscall.SIGHUP, syscall.SIGINT, syscall.SIGKILL, syscall.SIGTERM)
-	if err != nil {
-		log.Error("", err)
-	}
-	err = AddSignalsHandler(func() {}, syscall.Signal(999))
-	if err != nil {
-		log.Error("", err)
-	}
-	ctx, cancel := context.WithCancel(context.Background())
-	go func() { Run(ctx) }()
-	time.Sleep(time.Second)
-	cancel()
-}
diff --git a/syncer/pkg/ticker/ticker.go b/syncer/pkg/ticker/ticker.go
deleted file mode 100644
index fa9846d..0000000
--- a/syncer/pkg/ticker/ticker.go
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package ticker
-
-import (
-	"context"
-	"sync"
-	"time"
-
-	"github.com/apache/servicecomb-service-center/pkg/log"
-)
-
-// TaskTicker task of ticker struct
-type TaskTicker struct {
-	interval time.Duration
-	handler  func(ctx context.Context)
-	once     sync.Once
-	ticker   *time.Ticker
-}
-
-// NewTaskTicker new task ticker with interval
-func NewTaskTicker(interval int, handler func(ctx context.Context)) *TaskTicker {
-	return &TaskTicker{
-		interval: time.Second * time.Duration(interval),
-		handler:  handler,
-	}
-}
-
-// Start start task ticker
-func (t *TaskTicker) Start(ctx context.Context) {
-	t.once.Do(func() {
-		t.handler(ctx)
-		t.ticker = time.NewTicker(t.interval)
-		for {
-			select {
-			case <-t.ticker.C:
-				t.handler(ctx)
-			case <-ctx.Done():
-				t.Stop()
-				return
-			}
-		}
-	})
-}
-
-// Start stop task ticker
-func (t *TaskTicker) Stop() {
-	if t.ticker == nil {
-		return
-	}
-	t.ticker.Stop()
-	log.Info("ticker stop")
-	t.ticker = nil
-}
diff --git a/syncer/pkg/ticker/ticker_test.go b/syncer/pkg/ticker/ticker_test.go
deleted file mode 100644
index 50374b3..0000000
--- a/syncer/pkg/ticker/ticker_test.go
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-package ticker
-
-import (
-	"context"
-	"testing"
-	"time"
-)
-
-func TestNewTaskTicker(t *testing.T) {
-	ticker := NewTaskTicker(2, func(ctx context.Context) {
-		t.Log("test new task ticker over")
-	})
-	ctx, cancel := context.WithCancel(context.Background())
-	go func() {
-		ticker.Start(ctx)
-	}()
-	time.Sleep(time.Second * 3)
-	ticker.Stop()
-	cancel()
-}
diff --git a/syncer/pkg/utils/addr.go b/syncer/pkg/utils/addr.go
deleted file mode 100644
index 6694981..0000000
--- a/syncer/pkg/utils/addr.go
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package utils
-
-import (
-	"net"
-	"strconv"
-	"strings"
-)
-
-// SplitHostPort returns the parts of the address and port. If the port does not exist, use defaultPort.
-func SplitHostPort(address string, defaultPort int) (string, int, error) {
-	_, _, err := net.SplitHostPort(address)
-	if ae, ok := err.(*net.AddrError); ok && ae.Err == "missing port in address" {
-		index := strings.LastIndexByte(address, ':')
-		return SplitAddress(address[:index+1] + strconv.Itoa(defaultPort))
-	}
-	return ResolveAddr(address)
-}
-
-// SplitAddress returns the parts of the address and port.
-func SplitAddress(address string) (string, int, error) {
-	_, _, err := net.SplitHostPort(address)
-	if err != nil {
-		return "", 0, err
-	}
-	return ResolveAddr(address)
-}
-
-// ResolveAddr Resolve the address with tcp.
-func ResolveAddr(address string) (string, int, error) {
-	addr, err := net.ResolveTCPAddr("tcp", address)
-	if err != nil {
-		return "", 0, err
-	}
-
-	return addr.IP.String(), addr.Port, nil
-}
diff --git a/syncer/pkg/utils/addr_test.go b/syncer/pkg/utils/addr_test.go
deleted file mode 100644
index bf5ba78..0000000
--- a/syncer/pkg/utils/addr_test.go
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-package utils
-
-import "testing"
-
-func TestSplitHostPort(t *testing.T) {
-	_, _, err := SplitHostPort("", 0)
-	if err != nil {
-		t.Logf("split host port failed, error: %s", err)
-	}
-}
diff --git a/syncer/pkg/utils/atomic_bool.go b/syncer/pkg/utils/atomic_bool.go
deleted file mode 100644
index 0ce466c..0000000
--- a/syncer/pkg/utils/atomic_bool.go
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package utils
-
-import (
-	"sync"
-	"sync/atomic"
-)
-
-// AtomicBool struct
-type AtomicBool struct {
-	m      sync.Mutex
-	status uint32
-}
-
-// NewAtomicBool returns an atomic bool
-func NewAtomicBool(b bool) *AtomicBool {
-	var status uint32
-	if b {
-		status = 1
-	}
-	return &AtomicBool{status: status}
-}
-
-// Bool returns a bool value
-func (a *AtomicBool) Bool() bool {
-	return atomic.LoadUint32(&a.status)&1 == 1
-}
-
-// DoToReverse Do something and reverse the status
-func (a *AtomicBool) DoToReverse(when bool, fn func()) {
-	if a.Bool() != when {
-		return
-	}
-
-	a.m.Lock()
-	atomic.StoreUint32(&a.status, a.status^1)
-	fn()
-	a.m.Unlock()
-}
diff --git a/syncer/pkg/utils/atomic_bool_test.go b/syncer/pkg/utils/atomic_bool_test.go
deleted file mode 100644
index e4455aa..0000000
--- a/syncer/pkg/utils/atomic_bool_test.go
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package utils
-
-import (
-	"testing"
-
-	"github.com/stretchr/testify/assert"
-)
-
-func TestAtomicBool(t *testing.T) {
-	b := NewAtomicBool(false)
-	assert.False(t, b.Bool())
-
-	b.DoToReverse(false, func() {})
-	assert.True(t, b.Bool())
-
-	b.DoToReverse(true, func() {})
-	assert.False(t, b.Bool())
-
-	nb := NewAtomicBool(true)
-	assert.True(t, nb.Bool())
-
-	nb.DoToReverse(false, func() {})
-	assert.True(t, nb.Bool())
-
-	nb.DoToReverse(true, func() {})
-	assert.False(t, nb.Bool())
-}
diff --git a/syncer/pkg/utils/error.go b/syncer/pkg/utils/error.go
deleted file mode 100644
index 19e922f..0000000
--- a/syncer/pkg/utils/error.go
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package utils
-
-import (
-	"errors"
-)
-
-var (
-	ErrServiceSearch  = errors.New("service does not exist")
-	ErrActionInvalid  = errors.New("action invalid")
-	ErrMappingSearch  = errors.New("mapping does not exist")
-	ErrInstanceDelete = errors.New("delete instance failed")
-	ErrChannelSearch  = errors.New("channel does not exist")
-)
diff --git a/syncer/pkg/utils/files.go b/syncer/pkg/utils/files.go
deleted file mode 100644
index 318b59f..0000000
--- a/syncer/pkg/utils/files.go
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package utils
-
-import (
-	"os"
-	"path/filepath"
-)
-
-// IsDirExist checks if a dir exists
-func IsDirExist(path string) bool {
-	fi, err := os.Stat(path)
-	return err == nil && fi.IsDir() || os.IsExist(err)
-}
-
-// IsFileExist checks if a file exists
-func IsFileExist(path string) bool {
-	fi, err := os.Stat(path)
-	return err == nil && !fi.IsDir() || os.IsExist(err)
-}
-
-// OpenFile if file not exist auto create
-func OpenFile(path string) (*os.File, error) {
-	if IsFileExist(path) {
-		return os.Create(path)
-	}
-
-	dir := filepath.Dir(path)
-	if !IsDirExist(dir) {
-		err := os.MkdirAll(dir, 0666)
-		if err != nil {
-			return nil, err
-		}
-	}
-	return os.Create(path)
-}
diff --git a/syncer/pkg/utils/files_test.go b/syncer/pkg/utils/files_test.go
deleted file mode 100644
index 0eee21c..0000000
--- a/syncer/pkg/utils/files_test.go
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-package utils
-
-import (
-	"os"
-	"path/filepath"
-	"testing"
-)
-
-func TestExist(t *testing.T) {
-	if IsDirExist("./test/file") {
-		t.Error("dir exist failed")
-	}
-
-	if IsFileExist("./test/file") {
-		t.Error("file exist failed")
-	}
-}
-
-func TestOpenFile(t *testing.T) {
-	fileName := "file"
-	f, err := OpenFile(fileName)
-	if err != nil {
-		t.Errorf("open file failed: %s", err)
-	}
-	f.Close()
-
-	f, err = OpenFile(fileName)
-	if err != nil {
-		t.Errorf("open file failed: %s", err)
-	}
-	f.Close()
-	os.RemoveAll(fileName)
-
-	fileName = "./test/file"
-	f, err = OpenFile(fileName)
-	if err != nil {
-		t.Logf("open file failed: %s", err)
-	}
-	f.Close()
-	os.RemoveAll(filepath.Dir(fileName))
-}
diff --git a/syncer/plugins/eureka/eureka.go b/syncer/plugins/eureka/eureka.go
deleted file mode 100644
index 550a2ec..0000000
--- a/syncer/plugins/eureka/eureka.go
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package eureka
-
-import (
-	"context"
-	"encoding/json"
-	"errors"
-	"io/ioutil"
-	"net/http"
-
-	"github.com/apache/servicecomb-service-center/client"
-
-	"github.com/apache/servicecomb-service-center/pkg/util"
-	"github.com/apache/servicecomb-service-center/syncer/plugins"
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-)
-
-const (
-	PluginName = "eureka"
-
-	apiApplications = "/apps"
-)
-
-func init() {
-	// Register self as a repository plugin
-	plugins.RegisterPlugin(&plugins.Plugin{
-		Kind: plugins.PluginServicecenter,
-		Name: PluginName,
-		New:  New,
-	})
-}
-
-type adaptor struct{}
-
-func New() plugins.PluginInstance {
-	return &adaptor{}
-}
-
-// New repository with endpoints
-func (*adaptor) New(opts ...plugins.SCConfigOption) (plugins.Servicecenter, error) {
-	cfg := plugins.ToSCConfig(opts...)
-	client, err := client.NewLBClient(cfg.Endpoints, cfg.Merge())
-	if err != nil {
-		return nil, err
-	}
-	return &Client{LBClient: client, Cfg: cfg}, nil
-}
-
-type Client struct {
-	*client.LBClient
-	Cfg client.Config
-}
-
-// GetAll get and transform eureka data to SyncData
-func (c *Client) GetAll(ctx context.Context) (*pb.SyncData, error) {
-	method := http.MethodGet
-	headers := c.CommonHeaders(method)
-	resp, err := c.RestDoWithContext(ctx, method, apiApplications, headers, nil)
-	if err != nil {
-		return nil, err
-	}
-	defer resp.Body.Close()
-
-	body, err := ioutil.ReadAll(resp.Body)
-	if err != nil {
-		return nil, err
-	}
-
-	if resp.StatusCode != http.StatusOK {
-		return nil, c.toError(body)
-	}
-
-	data := &eurekaData{}
-	err = json.Unmarshal(body, data)
-	if err != nil {
-		return nil, err
-	}
-
-	return toSyncData(data), nil
-}
-
-// CommonHeaders Set the common header of the request
-func (c *Client) CommonHeaders(method string) http.Header {
-	var headers = make(http.Header)
-	if len(c.Cfg.Token) > 0 {
-		headers.Set("X-Auth-Token", c.Cfg.Token)
-	}
-	headers.Set("Accept", " application/json")
-	headers.Set("Content-Type", "application/json")
-	if method == http.MethodPut {
-		headers.Set("x-netflix-discovery-replication", "true")
-	}
-	return headers
-}
-
-// toError response body to error
-func (c *Client) toError(body []byte) error {
-	return errors.New(util.BytesToStringWithNoCopy(body))
-}
diff --git a/syncer/plugins/eureka/instance.go b/syncer/plugins/eureka/instance.go
deleted file mode 100644
index 3d5f8fd..0000000
--- a/syncer/plugins/eureka/instance.go
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package eureka
-
-import (
-	"context"
-	"encoding/json"
-	"fmt"
-	"io/ioutil"
-	"net/http"
-	"net/url"
-
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-)
-
-const (
-	apiInstances = "/apps/%s"
-	apiInstance  = "/apps/%s/%s"
-)
-
-// RegisterInstance register instance to servicecenter
-func (c *Client) RegisterInstance(ctx context.Context, domainProject, serviceID string, syncInstance *pb.SyncInstance) (string, error) {
-	instance := toInstance(serviceID, syncInstance)
-	method := http.MethodPost
-	headers := c.CommonHeaders(method)
-	body, err := json.Marshal(&InstanceRequest{Instance: instance})
-	if err != nil {
-		return "", err
-	}
-
-	apiURL := fmt.Sprintf(apiInstances, serviceID)
-	resp, err := c.RestDoWithContext(ctx, method, apiURL, headers, body)
-	if err != nil {
-		return "", err
-	}
-	defer resp.Body.Close()
-
-	body, err = ioutil.ReadAll(resp.Body)
-	if err != nil {
-		return "", err
-	}
-	if resp.StatusCode != http.StatusNoContent {
-		return "", c.toError(body)
-	}
-
-	return instance.InstanceID, nil
-}
-
-// UnregisterInstance unregister instance from servicecenter
-func (c *Client) UnregisterInstance(ctx context.Context, domainProject, serviceID, instanceID string) error {
-	method := http.MethodDelete
-	headers := c.CommonHeaders(method)
-
-	apiURL := fmt.Sprintf(apiInstance, serviceID, instanceID)
-	resp, err := c.RestDoWithContext(ctx, method, apiURL, headers, nil)
-	if err != nil {
-		return err
-	}
-	defer resp.Body.Close()
-
-	body, err := ioutil.ReadAll(resp.Body)
-	if err != nil {
-		return err
-	}
-
-	if resp.StatusCode != http.StatusOK {
-		return c.toError(body)
-	}
-
-	return nil
-}
-
-// Heartbeat sends heartbeat to servicecenter
-func (c *Client) Heartbeat(ctx context.Context, domainProject, serviceID, instanceID string) error {
-	method := http.MethodPut
-	headers := c.CommonHeaders(method)
-	apiURL := fmt.Sprintf(apiInstance, serviceID, instanceID) + "?" + url.Values{"status": {UP}}.Encode()
-	resp, err := c.RestDoWithContext(ctx, method, apiURL, headers, nil)
-	if err != nil {
-		return err
-	}
-	defer resp.Body.Close()
-
-	body, err := ioutil.ReadAll(resp.Body)
-	if err != nil {
-		return err
-	}
-
-	if resp.StatusCode != http.StatusOK {
-		return c.toError(body)
-	}
-
-	return nil
-}
diff --git a/syncer/plugins/eureka/service.go b/syncer/plugins/eureka/service.go
deleted file mode 100644
index 82aa9e1..0000000
--- a/syncer/plugins/eureka/service.go
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package eureka
-
-import (
-	"context"
-
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-)
-
-// CreateService Eureka's application is created with instance and does not need to be processed here.
-func (c *Client) CreateService(ctx context.Context, domainProject string, syncService *pb.SyncService) (string, error) {
-	return syncService.Name, nil
-}
-
-// DeleteService Eureka's application is created with instance and does not need to be processed here.
-func (c *Client) DeleteService(context.Context, string, string) error {
-	return nil
-}
-
-// ServiceExistence Eureka's application is created with instance and does not need to be processed here.
-func (c *Client) ServiceExistence(ctx context.Context, domainProject string, syncService *pb.SyncService) (string, error) {
-	return syncService.Name, nil
-}
diff --git a/syncer/plugins/eureka/transform.go b/syncer/plugins/eureka/transform.go
deleted file mode 100644
index 3e039f7..0000000
--- a/syncer/plugins/eureka/transform.go
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package eureka
-
-import (
-	"encoding/json"
-	"errors"
-	"fmt"
-	"net/url"
-	"strconv"
-	"strings"
-
-	"github.com/apache/servicecomb-service-center/pkg/log"
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-)
-
-const (
-	eurekaInstanceFormat = "%s:%s:%d"
-
-	defaultApp = "eureka"
-
-	// The name is limited to "Netflix" or "Amazon" or "MyOwn"
-	// by the enumeration type in the interface of eureka
-	// "com.netflix.appinfo.DataCenterInfo".
-	// Here, "MyOwn" is used as the default.
-	defaultDataCenterInfoName = "MyOwn"
-
-	// Class is used the static variable "MY_DATA_CENTER_INFO_TYPE_MARKER"
-	// defined in eureka "com.netflix.discovery.converters.jackson",
-	// that is kept for backward compatibility
-	defaultDataCenterInfoClass = "com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo"
-
-	expansionDatasource = "datasource"
-)
-
-// toSyncData transform eureka service cache to SyncData
-func toSyncData(eureka *eurekaData) (data *pb.SyncData) {
-	apps := eureka.APPS.Applications
-	data = &pb.SyncData{
-		Services:  make([]*pb.SyncService, 0, len(apps)),
-		Instances: make([]*pb.SyncInstance, 0, 10),
-	}
-
-	for _, app := range apps {
-		service := toSyncService(app)
-
-		instances := toSyncInstances(service.ServiceId, app.Instances)
-		if len(instances) == 0 {
-			continue
-		}
-
-		data.Services = append(data.Services, service)
-		data.Instances = append(data.Instances, instances...)
-	}
-	return
-}
-
-// toSyncService transform eureka application to SyncService
-func toSyncService(app *Application) (service *pb.SyncService) {
-	appName := strings.ToLower(app.Name)
-	service = &pb.SyncService{
-		ServiceId:     appName,
-		Name:          appName,
-		App:           defaultApp,
-		Version:       "0.0.1",
-		DomainProject: "default/default",
-		Status:        pb.SyncService_UP,
-		PluginName:    PluginName,
-	}
-	return
-}
-
-//  toSyncInstances transform eureka instances to SyncInstances
-func toSyncInstances(serviceID string, instances []*Instance) []*pb.SyncInstance {
-	instList := make([]*pb.SyncInstance, 0, len(instances))
-	for _, inst := range instances {
-		if inst.Status != UP {
-			continue
-		}
-
-		instList = append(instList, toSyncInstance(serviceID, inst))
-	}
-	return instList
-}
-
-// toSyncInstance transform eureka instance to SyncInstance
-func toSyncInstance(serviceID string, instance *Instance) (syncInstance *pb.SyncInstance) {
-	syncInstance = &pb.SyncInstance{
-		InstanceId: instance.InstanceID,
-		ServiceId:  serviceID,
-		Endpoints:  make([]string, 0, 2),
-		HostName:   instance.HostName,
-		PluginName: PluginName,
-		Version:    "latest",
-	}
-
-	switch instance.Status {
-	case UP:
-		syncInstance.Status = pb.SyncInstance_UP
-	case DOWN:
-		syncInstance.Status = pb.SyncInstance_DOWN
-	case STARTING:
-		syncInstance.Status = pb.SyncInstance_STARTING
-	case OUTOFSERVICE:
-		syncInstance.Status = pb.SyncInstance_OUTOFSERVICE
-	default:
-		syncInstance.Status = pb.SyncInstance_UNKNOWN
-	}
-
-	if instance.Port.Enabled.Bool() {
-		syncInstance.Endpoints = append(syncInstance.Endpoints, fmt.Sprintf("http://%s:%d", instance.IPAddr, instance.Port.Port))
-	}
-
-	if instance.SecurePort.Enabled.Bool() {
-		syncInstance.Endpoints = append(syncInstance.Endpoints, fmt.Sprintf("https://%s:%d", instance.IPAddr, instance.SecurePort.Port))
-	}
-
-	if instance.HealthCheckURL != "" {
-		syncInstance.HealthCheck = &pb.HealthCheck{
-			Interval: 30,
-			Times:    3,
-			Url:      instance.HealthCheckURL,
-		}
-	}
-
-	content, err := json.Marshal(instance)
-	if err != nil {
-		log.Error("transform sc service to syncer service failed", err)
-		return
-	}
-	syncInstance.Expansions = []*pb.Expansion{{
-		Kind:   expansionDatasource,
-		Bytes:  content,
-		Labels: map[string]string{},
-	}}
-	return
-}
-
-// toInstance transform SyncInstance to eureka instance
-func toInstance(serviceID string, syncInstance *pb.SyncInstance) (instance *Instance) {
-	instance = &Instance{}
-	if syncInstance.PluginName == PluginName && len(syncInstance.Expansions) > 0 {
-		matches := pb.Expansions(syncInstance.Expansions).Find(expansionDatasource, map[string]string{})
-		if len(matches) > 0 {
-			err := json.Unmarshal(matches[0].Bytes, instance)
-			if err == nil {
-				return
-			}
-			log.Error(fmt.Sprintf("proto unmarshal %s instance, instanceID = %s, kind = %v, content = %v failed",
-				PluginName, syncInstance.InstanceId, matches[0].Kind, matches[0].Bytes), err)
-		}
-	}
-	instance.InstanceID = syncInstance.InstanceId
-	instance.APP = serviceID
-	instance.Status = pb.SyncInstance_Status_name[int32(syncInstance.Status)]
-	instance.OverriddenStatus = UNKNOWN
-	instance.DataCenterInfo = &DataCenterInfo{
-		Name:  defaultDataCenterInfoName,
-		Class: defaultDataCenterInfoClass,
-	}
-
-	instance.Metadata = &MetaData{
-		Map: map[string]string{"instanceId": syncInstance.InstanceId},
-	}
-
-	ipAddr := ""
-	for _, ep := range syncInstance.Endpoints {
-		addr, err := url.Parse(ep)
-		if err != nil {
-			log.Error("parse the endpoint of eureka`s instance failed", err)
-			continue
-		}
-		hostname := addr.Hostname()
-		if ipAddr != "" || ipAddr != hostname {
-			log.Error("eureka`s ipAddr must be unique in endpoints", err)
-		}
-		ipAddr = hostname
-
-		port := &Port{}
-		port.Port, err = strconv.Atoi(addr.Port())
-		if err != nil {
-			log.Error("Illegal value of port", err)
-			continue
-		}
-		port.Enabled.Set(true)
-
-		switch addr.Scheme {
-		case "http":
-			instance.Port = port
-			instance.VipAddress = serviceID
-		case "https":
-			instance.SecurePort = port
-			instance.SecureVipAddress = ep
-		}
-	}
-	log.Error(ipAddr, errors.New("sc to eureka hostname failed"))
-	instance.IPAddr = ipAddr
-	instance.HostName = ipAddr
-
-	if syncInstance.HealthCheck != nil {
-		instance.HealthCheckURL = syncInstance.HealthCheck.Url
-	}
-
-	instArr := strings.Split(syncInstance.InstanceId, ":")
-	if len(instArr) != 3 {
-		if instance.Port != nil && instance.Port.Enabled.Bool() {
-			instance.InstanceID = fmt.Sprintf(eurekaInstanceFormat, ipAddr, instance.APP, instance.Port.Port)
-		} else if instance.SecurePort != nil && instance.SecurePort.Enabled.Bool() {
-			instance.InstanceID = fmt.Sprintf(eurekaInstanceFormat, ipAddr, instance.APP, instance.SecurePort.Port)
-		}
-	}
-	return
-}
diff --git a/syncer/plugins/eureka/type.go b/syncer/plugins/eureka/type.go
deleted file mode 100644
index f1fcc88..0000000
--- a/syncer/plugins/eureka/type.go
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package eureka
-
-import (
-	"encoding/json"
-	"strconv"
-)
-
-const (
-	UNKNOWN      = "UNKNOWN"
-	UP           = "UP"
-	DOWN         = "DOWN"
-	STARTING     = "STARTING"
-	OUTOFSERVICE = "OUTOFSERVICE"
-)
-
-type eurekaData struct {
-	APPS *Applications `json:"applications"`
-}
-
-type Applications struct {
-	VersionsDelta string         `json:"versions__delta"`
-	AppsHashcode  string         `json:"apps__hashcode"`
-	Applications  []*Application `json:"application,omitempty"`
-}
-
-type Application struct {
-	Name      string      `json:"name"`
-	Instances []*Instance `json:"instance"`
-}
-
-type InstanceRequest struct {
-	Instance *Instance `json:"instance"`
-}
-
-type Instance struct {
-	InstanceID                    string          `json:"instanceId"`
-	HostName                      string          `json:"hostName"`
-	APP                           string          `json:"app"`
-	IPAddr                        string          `json:"ipAddr"`
-	Status                        string          `json:"status"`
-	OverriddenStatus              string          `json:"overriddenStatus,omitempty"`
-	Port                          *Port           `json:"port,omitempty"`
-	SecurePort                    *Port           `json:"securePort,omitempty"`
-	CountryID                     int             `json:"countryId,omitempty"`
-	DataCenterInfo                *DataCenterInfo `json:"dataCenterInfo"`
-	LeaseInfo                     *LeaseInfo      `json:"leaseInfo,omitempty"`
-	Metadata                      *MetaData       `json:"metadata,omitempty"`
-	HomePageURL                   string          `json:"homePageUrl,omitempty"`
-	StatusPageURL                 string          `json:"statusPageUrl,omitempty"`
-	HealthCheckURL                string          `json:"healthCheckUrl,omitempty"`
-	VipAddress                    string          `json:"vipAddress,omitempty"`
-	SecureVipAddress              string          `json:"secureVipAddress,omitempty"`
-	IsCoordinatingDiscoveryServer BoolString      `json:"isCoordinatingDiscoveryServer,omitempty"`
-	LastUpdatedTimestamp          string          `json:"lastUpdatedTimestamp,omitempty"`
-	LastDirtyTimestamp            string          `json:"lastDirtyTimestamp,omitempty"`
-	ActionType                    string          `json:"actionType,omitempty"`
-}
-
-type DataCenterInfo struct {
-	Name     string              `json:"name"`
-	Class    string              `json:"@class"`
-	Metadata *DataCenterMetadata `json:"metadata,omitempty"`
-}
-
-type DataCenterMetadata struct {
-	AmiLaunchIndex   string `json:"ami-launch-index,omitempty"`
-	LocalHostname    string `json:"local-hostname,omitempty"`
-	AvailabilityZone string `json:"availability-zone,omitempty"`
-	InstanceID       string `json:"instance-id,omitempty"`
-	PublicIpv4       string `json:"public-ipv4,omitempty"`
-	PublicHostname   string `json:"public-hostname,omitempty"`
-	AmiManifestPath  string `json:"ami-manifest-path,omitempty"`
-	LocalIpv4        string `json:"local-ipv4,omitempty"`
-	Hostname         string `json:"hostname,omitempty"`
-	AmiID            string `json:"ami-id,omitempty"`
-	InstanceType     string `json:"instance-type,omitempty"`
-}
-
-type LeaseInfo struct {
-	RenewalIntervalInSecs  int  `json:"renewalIntervalInSecs,omitempty"`
-	DurationInSecs         int  `json:"durationInSecs,omitempty"`
-	RegistrationTimestamp  int  `json:"registrationTimestamp,omitempty"`
-	LastRenewalTimestamp   int  `json:"lastRenewalTimestamp,omitempty"`
-	EvictionDurationInSecs uint `json:"evictionDurationInSecs,omitempty"`
-	EvictionTimestamp      int  `json:"evictionTimestamp,omitempty"`
-	ServiceUpTimestamp     int  `json:"serviceUpTimestamp,omitempty"`
-}
-
-type Port struct {
-	Port    int        `json:"$"`
-	Enabled BoolString `json:"@enabled"`
-}
-
-type MetaData struct {
-	Map   map[string]string
-	Class string
-}
-
-func (s *MetaData) MarshalJSON() ([]byte, error) {
-	newMap := make(map[string]string)
-	for key, value := range s.Map {
-		newMap[key] = value
-	}
-	if s.Class != "" {
-		newMap["@class"] = s.Class
-	}
-	return json.Marshal(&newMap)
-}
-
-func (s *MetaData) UnmarshalJSON(data []byte) error {
-	newMap := make(map[string]string)
-	err := json.Unmarshal(data, &newMap)
-	if err != nil {
-		return err
-	}
-
-	s.Map = newMap
-	if val, ok := s.Map["@class"]; ok {
-		s.Class = val
-		delete(s.Map, "@class")
-	}
-	return nil
-}
-
-type BoolString string
-
-func (b *BoolString) Set(value bool) {
-	str := strconv.FormatBool(value)
-	*b = BoolString(str)
-}
-
-func (b BoolString) Bool() bool {
-	enabled, err := strconv.ParseBool(string(b))
-	if err != nil {
-		return false
-	}
-	return enabled
-}
diff --git a/syncer/plugins/export.go b/syncer/plugins/export.go
deleted file mode 100644
index 7bea87b..0000000
--- a/syncer/plugins/export.go
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package plugins
-
-type PluginType int
-
-const (
-	PluginServicecenter PluginType = iota
-	pluginTotal
-
-	BUILDIN = "buildin"
-	STATIC  = "static"
-	DYNAMIC = "dynamic"
-)
-
-func (p PluginType) String() string {
-	switch p {
-	case PluginServicecenter:
-		return "servicecenter"
-	default:
-		return ""
-	}
-}
-
-func (m Manager) Servicecenter() Adaptor {
-	return m.Instance(PluginServicecenter).(Adaptor)
-}
diff --git a/syncer/plugins/option.go b/syncer/plugins/option.go
deleted file mode 100644
index 67fbfa2..0000000
--- a/syncer/plugins/option.go
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package plugins
-
-import (
-	"github.com/apache/servicecomb-service-center/client"
-)
-
-type scOption struct {
-	endpoints     []string
-	tlsEnabled    bool
-	tlsVerifyPeer bool
-	tlsPassphrase string
-	tlsCAFile     string
-	tlsCertFile   string
-	tlsKeyFile    string
-}
-
-type SCConfigOption func(*scOption)
-
-func WithEndpoints(endpoints []string) SCConfigOption {
-	return func(c *scOption) { c.endpoints = endpoints }
-}
-
-func WithTLSEnabled(tlsEnabled bool) SCConfigOption {
-	return func(c *scOption) { c.tlsEnabled = tlsEnabled }
-}
-
-func WithTLSVerifyPeer(tlsVerifyPeer bool) SCConfigOption {
-	return func(c *scOption) { c.tlsVerifyPeer = tlsVerifyPeer }
-}
-
-func WithTLSPassphrase(tlsPassphrase string) SCConfigOption {
-	return func(c *scOption) { c.tlsPassphrase = tlsPassphrase }
-}
-
-func WithTLSCAFile(tlsCAFile string) SCConfigOption {
-	return func(c *scOption) { c.tlsCAFile = tlsCAFile }
-}
-
-func WithTLSCertFile(tlsCertFile string) SCConfigOption {
-	return func(c *scOption) { c.tlsCertFile = tlsCertFile }
-}
-
-func WithTLSKeyFile(tlsKeyFile string) SCConfigOption {
-	return func(c *scOption) { c.tlsKeyFile = tlsKeyFile }
-}
-
-func ToSCConfig(opts ...SCConfigOption) client.Config {
-	op := scOption{}
-	for _, opt := range opts {
-		opt(&op)
-	}
-	conf := client.Config{Endpoints: op.endpoints}
-	if op.tlsEnabled {
-		conf.VerifyPeer = op.tlsVerifyPeer
-		conf.CAFile = op.tlsCAFile
-		conf.CertFile = op.tlsCertFile
-		conf.CertKeyFile = op.tlsKeyFile
-		conf.CertKeyPWD = op.tlsPassphrase
-	}
-	return conf
-}
diff --git a/syncer/plugins/plugin.go b/syncer/plugins/plugin.go
deleted file mode 100644
index c0ffe5f..0000000
--- a/syncer/plugins/plugin.go
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package plugins
-
-import (
-	pg "plugin"
-	"sync"
-
-	"github.com/apache/servicecomb-service-center/pkg/plugin"
-)
-
-var (
-	pluginMgr    Manager
-	pluginConfig map[string]string
-)
-
-type Manager map[PluginType]*pluginMap
-
-type PluginInstance interface{}
-
-type pluginMap struct {
-	plugins  map[string]*Plugin
-	dynamic  bool
-	instance PluginInstance
-	lock     sync.RWMutex
-}
-
-type Plugin struct {
-	Kind PluginType
-	Name string
-	New  func() PluginInstance
-}
-
-func init() {
-	pluginMgr = make(Manager, pluginTotal)
-	for t := PluginType(0); t != pluginTotal; t++ {
-		pluginMgr[t] = &pluginMap{plugins: map[string]*Plugin{}}
-	}
-
-	pluginConfig = make(map[string]string, pluginTotal)
-}
-
-func (m Manager) Register(p *Plugin) {
-	pm, ok := m[p.Kind]
-	if !ok {
-		pm = &pluginMap{plugins: map[string]*Plugin{}}
-	}
-	pm.plugins[p.Name] = p
-	m[p.Kind] = pm
-}
-
-func (m Manager) Get(pn PluginType, name string) *Plugin {
-	pm, ok := m[pn]
-	if !ok {
-		return nil
-	}
-	return pm.plugins[name]
-}
-
-func (m Manager) Instance(pn PluginType) PluginInstance {
-	pm := m[pn]
-	pm.lock.RLock()
-	if pm.instance != nil {
-		pm.lock.RUnlock()
-		return pm.instance
-	}
-	pm.lock.RUnlock()
-
-	pm.lock.Lock()
-	if pm.instance != nil {
-		pm.lock.Unlock()
-		return pm.instance
-	}
-	m.New(pn)
-	pm.lock.Unlock()
-	return pm.instance
-}
-
-func (m Manager) New(pn PluginType) {
-	var (
-		//title = Static
-		f func() PluginInstance
-	)
-
-	wi := m[pn]
-	p := m.existDynamicPlugin(pn)
-	if p != nil {
-		wi.dynamic = true
-		//title = Dynamic
-		f = p.New
-	} else {
-		wi.dynamic = false
-		pm, ok := m[pn]
-		if !ok {
-			return
-		}
-
-		name, ok := pluginConfig[pn.String()]
-		if !ok {
-			name = BUILDIN
-		}
-
-		p, ok = pm.plugins[name]
-		if !ok {
-			return
-		}
-
-		f = p.New
-	}
-	wi.instance = f()
-}
-
-func (m Manager) existDynamicPlugin(pn PluginType) *Plugin {
-	pm, ok := m[pn]
-	if !ok {
-		return nil
-	}
-	// 'buildin' implement of all plugins should call DynamicPluginFunc()
-	if plugin.GetLoader().Exist(pn.String()) {
-		return pm.plugins[BUILDIN]
-	}
-	return nil
-}
-
-func DynamicPluginFunc(pn PluginType, funcName string) pg.Symbol {
-	if wi, ok := pluginMgr[pn]; ok && !wi.dynamic {
-		return nil
-	}
-
-	f, err := plugin.FindFunc(pn.String(), funcName)
-	if err != nil {
-		return nil
-	}
-	return f
-}
-func Plugins() Manager {
-	return pluginMgr
-}
-
-func RegisterPlugin(p *Plugin) {
-	pluginMgr.Register(p)
-}
-
-func LoadPlugins() {
-	for t := PluginType(0); t != pluginTotal; t++ {
-		pluginMgr.Instance(t)
-	}
-}
-
-func SetPluginConfig(key, val string) {
-	pluginConfig[key] = val
-}
diff --git a/syncer/plugins/plugin_test.go b/syncer/plugins/plugin_test.go
deleted file mode 100644
index c39262b..0000000
--- a/syncer/plugins/plugin_test.go
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-//package plugins_test
-package plugins
-
-import (
-	"context"
-	"testing"
-
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-)
-
-type mockPlugin struct{}
-
-func newAdaptor() PluginInstance { return &mockAdaptor{} }
-
-type mockAdaptor struct{}
-
-func (*mockAdaptor) New(opts ...SCConfigOption) (Servicecenter, error) {
-	return &mockRepository{}, nil
-}
-
-type mockRepository struct{}
-
-func (r *mockRepository) GetAll(ctx context.Context) (data *pb.SyncData, err error) { return }
-
-func (r *mockRepository) CreateService(ctx context.Context, domainProject string, service *pb.SyncService) (str string, err error) {
-	return
-}
-
-func (r *mockRepository) DeleteService(ctx context.Context, domainProject, serviceId string) (err error) {
-	return
-}
-
-func (r *mockRepository) ServiceExistence(ctx context.Context, domainProject string, service *pb.SyncService) (str string, err error) {
-	return
-}
-
-func (r *mockRepository) RegisterInstance(ctx context.Context, domainProject, serviceId string, instance *pb.SyncInstance) (str string, err error) {
-	return
-}
-
-func (r *mockRepository) UnregisterInstance(ctx context.Context, domainProject, serviceId, instanceId string) (err error) {
-	return
-}
-
-func (r *mockRepository) Heartbeat(ctx context.Context, domainProject, serviceId, instanceId string) (err error) {
-	return
-}
-
-func TestManager_New(t *testing.T) {
-	pm := Plugins()
-
-	notfound := PluginType(999)
-	t.Log(notfound.String())
-
-	p := pm.Get(notfound, BUILDIN)
-	if p != nil {
-		t.Fatalf("get %s %s failed", notfound, BUILDIN)
-	}
-
-	instanceNil := pm.Instance(PluginServicecenter)
-	if instanceNil != pm.Instance(PluginServicecenter) {
-		t.Fatalf("instance storage plugin: %s failed", PluginServicecenter)
-	}
-
-	getNil := pm.Get(PluginServicecenter, BUILDIN)
-	if getNil != nil {
-		t.Fatalf("get %s %s failed", PluginServicecenter, BUILDIN)
-	}
-
-	RegisterPlugin(&Plugin{Kind: PluginServicecenter, Name: "mock", New: newAdaptor})
-	SetPluginConfig(PluginServicecenter.String(), "mock")
-
-	repositoryInstance := pm.Instance(PluginServicecenter)
-	if repositoryInstance != pm.Instance(PluginServicecenter) {
-		t.Fatalf("instance storage plugin: %s failed", PluginServicecenter)
-	}
-	pm.Servicecenter()
-
-	RegisterPlugin(&Plugin{Kind: notfound, Name: "mock", New: func() PluginInstance { return &mockPlugin{} }})
-
-	LoadPlugins()
-
-	DynamicPluginFunc(notfound, "mock")
-}
diff --git a/syncer/plugins/servicecenter.go b/syncer/plugins/servicecenter.go
deleted file mode 100644
index 44b441f..0000000
--- a/syncer/plugins/servicecenter.go
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package plugins
-
-import (
-	"context"
-
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-)
-
-// Adaptor the plugin adaptor of repository
-type Adaptor interface {
-	New(opts ...SCConfigOption) (Servicecenter, error)
-}
-
-// Servicecenter servicecenter interface
-type Servicecenter interface {
-	GetAll(ctx context.Context) (*pb.SyncData, error)
-	CreateService(ctx context.Context, domainProject string, service *pb.SyncService) (string, error)
-	DeleteService(ctx context.Context, domainProject, serviceID string) error
-	ServiceExistence(ctx context.Context, domainProject string, service *pb.SyncService) (string, error)
-	RegisterInstance(ctx context.Context, domainProject, serviceID string, instance *pb.SyncInstance) (string, error)
-	UnregisterInstance(ctx context.Context, domainProject, serviceID, instanceID string) error
-	Heartbeat(ctx context.Context, domainProject, serviceID, instanceID string) error
-}
diff --git a/syncer/plugins/servicecenter/instance.go b/syncer/plugins/servicecenter/instance.go
deleted file mode 100644
index 7a32514..0000000
--- a/syncer/plugins/servicecenter/instance.go
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package servicecenter
-
-import (
-	"context"
-
-	"github.com/apache/servicecomb-service-center/pkg/util"
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-)
-
-// RegisterInstance register instance to servicecenter
-func (c *Client) RegisterInstance(ctx context.Context, domainProject, serviceID string, syncInstance *pb.SyncInstance) (string, error) {
-	instance := toInstance(syncInstance)
-	instance.InstanceId = ""
-	instance.ServiceId = serviceID
-	domain, project := util.FromDomainProject(domainProject)
-	instanceID, err := c.cli.RegisterInstance(ctx, domain, project, serviceID, instance)
-	if err != nil {
-		return "", err
-	}
-	return instanceID, nil
-}
-
-// UnregisterInstance unregister instance from servicecenter
-func (c *Client) UnregisterInstance(ctx context.Context, domainProject, serviceID, instanceID string) error {
-	domain, project := util.FromDomainProject(domainProject)
-	err := c.cli.UnregisterInstance(ctx, domain, project, serviceID, instanceID)
-	if err != nil {
-		return err
-	}
-	return nil
-}
-
-// Heartbeat sends heartbeat to servicecenter
-func (c *Client) Heartbeat(ctx context.Context, domainProject, serviceID, instanceID string) error {
-	domain, project := util.FromDomainProject(domainProject)
-	err := c.cli.Heartbeat(ctx, domain, project, serviceID, instanceID)
-	if err != nil {
-		return err
-	}
-	return nil
-}
diff --git a/syncer/plugins/servicecenter/instance_test.go b/syncer/plugins/servicecenter/instance_test.go
deleted file mode 100644
index 726eca3..0000000
--- a/syncer/plugins/servicecenter/instance_test.go
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-package servicecenter
-
-import (
-	"context"
-	"testing"
-
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-)
-
-func TestClient_RegisterInstance(t *testing.T) {
-	svr, repo := newServiceCenter(t)
-	_, err := repo.RegisterInstance(context.Background(), "default/deault",
-		"4042a6a3e5a2893698ae363ea99a69eb63fc51cd", &pb.SyncInstance{})
-	if err != nil {
-		t.Errorf("register instance failed, error: %s", err)
-	}
-
-	svr.Close()
-	_, err = repo.RegisterInstance(context.Background(), "default/deault",
-		"4042a6a3e5a2893698ae363ea99a69eb63fc51cd", &pb.SyncInstance{})
-	if err != nil {
-		t.Logf("register instance failed, error: %s", err)
-	}
-}
-
-func TestClient_UnregisterInstance(t *testing.T) {
-	svr, repo := newServiceCenter(t)
-	err := repo.UnregisterInstance(context.Background(), "default/deault",
-		"4042a6a3e5a2893698ae363ea99a69eb63fc51cd", "7a6be9f861a811e9b3f6fa163eca30e0")
-	if err != nil {
-		t.Errorf("unregister instance failed, error: %s", err)
-	}
-
-	svr.Close()
-	err = repo.UnregisterInstance(context.Background(), "default/deault",
-		"4042a6a3e5a2893698ae363ea99a69eb63fc51cd", "7a6be9f861a811e9b3f6fa163eca30e0")
-	if err != nil {
-		t.Logf("unregister instance failed, error: %s", err)
-	}
-}
-
-func TestClient_Heartbeat(t *testing.T) {
-	svr, repo := newServiceCenter(t)
-	err := repo.Heartbeat(context.Background(), "default/deault",
-		"4042a6a3e5a2893698ae363ea99a69eb63fc51cd", "7a6be9f861a811e9b3f6fa163eca30e0")
-	if err != nil {
-		t.Errorf("send instance heartbeat failed, error: %s", err)
-	}
-
-	svr.Close()
-	err = repo.Heartbeat(context.Background(), "default/deault",
-		"4042a6a3e5a2893698ae363ea99a69eb63fc51cd", "7a6be9f861a811e9b3f6fa163eca30e0")
-	if err != nil {
-		t.Logf("send instance heartbeat, error: %s", err)
-	}
-}
diff --git a/syncer/plugins/servicecenter/schemas.go b/syncer/plugins/servicecenter/schemas.go
deleted file mode 100644
index b5e1f98..0000000
--- a/syncer/plugins/servicecenter/schemas.go
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package servicecenter
-
-import (
-	"context"
-
-	pb "github.com/go-chassis/cari/discovery"
-)
-
-// CreateSchemas Create schemas to servicecenter
-func (c *Client) CreateSchemas(ctx context.Context, domain, project, serviceID string, schemas []*pb.Schema) error {
-	err := c.cli.CreateSchemas(ctx, domain, project, serviceID, schemas)
-	if err != nil {
-		return err
-	}
-	return nil
-}
-
-// GetSchemasByServiceID Get schemas by serviceId from servicecenter
-func (c *Client) GetSchemasByServiceID(ctx context.Context, domain, project, serviceID string) ([]*pb.Schema, error) {
-	schemas, err := c.cli.GetSchemasByServiceID(ctx, domain, project, serviceID)
-	if err != nil {
-		return nil, err
-	}
-	return schemas, nil
-}
diff --git a/syncer/plugins/servicecenter/service.go b/syncer/plugins/servicecenter/service.go
deleted file mode 100644
index e422df1..0000000
--- a/syncer/plugins/servicecenter/service.go
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package servicecenter
-
-import (
-	"context"
-	"fmt"
-
-	"github.com/apache/servicecomb-service-center/pkg/log"
-	"github.com/apache/servicecomb-service-center/pkg/util"
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-	pbsc "github.com/apache/servicecomb-service-center/syncer/proto/sc"
-	scpb "github.com/go-chassis/cari/discovery"
-	"google.golang.org/protobuf/proto"
-)
-
-// CreateService creates the service of servicecenter
-func (c *Client) CreateService(ctx context.Context, domainProject string, syncService *pb.SyncService) (string, error) {
-	service := toService(syncService)
-	service.ServiceId = ""
-	domain, project := util.FromDomainProject(domainProject)
-	serviceID, err := c.cli.CreateService(ctx, domain, project, service)
-	if err != nil {
-		log.Debug(fmt.Sprintf("create service err %v", err))
-		return "", err
-	}
-
-	matches := pb.Expansions(syncService.Expansions).Find(expansionSchema, map[string]string{})
-	if len(matches) > 0 {
-		schemas := make([]*scpb.Schema, 0, len(matches))
-		for _, expansion := range matches {
-			schema := &pbsc.Schema{}
-			err1 := proto.Unmarshal(expansion.Bytes, schema)
-			if err1 != nil {
-				log.Error(fmt.Sprintf("proto unmarshal %s service schema, serviceID = %s, kind = %v, content = %v failed",
-					PluginName, serviceID, expansion.Kind, expansion.Bytes), err1)
-			}
-			schematised := &scpb.Schema{
-				SchemaId: schema.SchemaId,
-				Summary:  schema.Summary,
-				Schema:   schema.Schema,
-			}
-			schemas = append(schemas, schematised)
-		}
-		err := c.CreateSchemas(ctx, domain, project, serviceID, schemas)
-		if err != nil {
-			log.Error(fmt.Sprintf("create service schemas failed, serviceID = %s", serviceID), err)
-		}
-	}
-
-	return serviceID, nil
-}
-
-// DeleteService deletes service from servicecenter
-func (c *Client) DeleteService(ctx context.Context, domainProject, serviceID string) error {
-	domain, project := util.FromDomainProject(domainProject)
-	err := c.cli.DeleteService(ctx, domain, project, serviceID)
-	if err != nil {
-		return err
-	}
-	return nil
-}
-
-// ServiceExistence Checkes service exists in servicecenter
-func (c *Client) ServiceExistence(ctx context.Context, domainProject string, syncService *pb.SyncService) (string, error) {
-	service := toService(syncService)
-	domain, project := util.FromDomainProject(domainProject)
-	serviceID, err := c.cli.ServiceExistence(ctx, domain, project, service.AppId, service.ServiceName, service.Version, service.Environment)
-	if err != nil {
-		return "", err
-	}
-	return serviceID, nil
-}
diff --git a/syncer/plugins/servicecenter/service_test.go b/syncer/plugins/servicecenter/service_test.go
deleted file mode 100644
index b8d10f3..0000000
--- a/syncer/plugins/servicecenter/service_test.go
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-package servicecenter
-
-import (
-	"context"
-	"testing"
-
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-)
-
-func TestClient_CreateService(t *testing.T) {
-	svr, repo := newServiceCenter(t)
-	_, err := repo.CreateService(context.Background(), "default/deault", &pb.SyncService{})
-	if err != nil {
-		t.Errorf("create service failed, error: %s", err)
-	}
-
-	svr.Close()
-	_, err = repo.CreateService(context.Background(), "default/deault", &pb.SyncService{})
-	if err != nil {
-		t.Logf("create service failed, error: %s", err)
-	}
-}
-
-func TestClient_ServiceExistence(t *testing.T) {
-	svr, repo := newServiceCenter(t)
-	_, err := repo.ServiceExistence(context.Background(), "default/deault", &pb.SyncService{})
-	if err != nil {
-		t.Errorf("check service existence failed, error: %s", err)
-	}
-
-	svr.Close()
-	_, err = repo.ServiceExistence(context.Background(), "default/deault", &pb.SyncService{})
-	if err != nil {
-		t.Logf("check service existence failed, error: %s", err)
-	}
-}
-
-func TestClient_DeleteService(t *testing.T) {
-	svr, repo := newServiceCenter(t)
-	err := repo.DeleteService(context.Background(), "default/deault",
-		"4042a6a3e5a2893698ae363ea99a69eb63fc51cd")
-	if err != nil {
-		t.Errorf("delete service failed, error: %s", err)
-	}
-
-	svr.Close()
-	err = repo.DeleteService(context.Background(), "default/deault",
-		"4042a6a3e5a2893698ae363ea99a69eb63fc51cd")
-	if err != nil {
-		t.Logf("delete service failed, error: %s", err)
-	}
-}
diff --git a/syncer/plugins/servicecenter/servicecenter.go b/syncer/plugins/servicecenter/servicecenter.go
deleted file mode 100644
index 41833d2..0000000
--- a/syncer/plugins/servicecenter/servicecenter.go
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package servicecenter
-
-import (
-	"context"
-	"fmt"
-
-	sc "github.com/apache/servicecomb-service-center/client"
-
-	"github.com/apache/servicecomb-service-center/pkg/log"
-	"github.com/apache/servicecomb-service-center/syncer/plugins"
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-	scpb "github.com/go-chassis/cari/discovery"
-)
-
-const PluginName = "servicecenter"
-
-func init() {
-	// Register self as a repository plugin
-	plugins.RegisterPlugin(&plugins.Plugin{
-		Kind: plugins.PluginServicecenter,
-		Name: PluginName,
-		New:  New,
-	})
-}
-
-type adaptor struct{}
-
-func New() plugins.PluginInstance {
-	return &adaptor{}
-}
-
-// New repository with endpoints
-func (*adaptor) New(opts ...plugins.SCConfigOption) (plugins.Servicecenter, error) {
-	cli, err := sc.NewSCClient(plugins.ToSCConfig(opts...))
-	if err != nil {
-		return nil, err
-	}
-	return &Client{cli: cli}, nil
-}
-
-type Client struct {
-	cli *sc.Client
-}
-
-// GetAll get and transform servicecenter data to SyncData
-func (c *Client) GetAll(ctx context.Context) (*pb.SyncData, error) {
-	cache, err := c.cli.GetScCache(ctx)
-	if err != nil {
-		return nil, err
-	}
-
-	schemas := make([]*scpb.Schema, 0, len(cache.Microservices))
-	for _, service := range cache.Microservices {
-		if len(service.Value.Schemas) == 0 {
-			continue
-		}
-
-		domain, project := getDomainProjectFromServiceKey(service.Key)
-		if domain == "" {
-			continue
-		}
-
-		ss, err := c.cli.GetSchemasByServiceID(ctx, domain, project, service.Value.ServiceId)
-		if err != nil {
-			log.Warn(fmt.Sprintf("get schemas by serviceId failed: %s", err))
-			continue
-		}
-		schemas = append(schemas, ss...)
-	}
-	return toSyncData(cache, schemas), nil
-}
diff --git a/syncer/plugins/servicecenter/servicecenter_test.go b/syncer/plugins/servicecenter/servicecenter_test.go
deleted file mode 100644
index 5ce8460..0000000
--- a/syncer/plugins/servicecenter/servicecenter_test.go
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-package servicecenter
-
-import (
-	"context"
-	"net/http/httptest"
-	"testing"
-
-	"github.com/apache/servicecomb-service-center/syncer/pkg/mock/mockservicecenter"
-	"github.com/apache/servicecomb-service-center/syncer/plugins"
-)
-
-func TestClient_GetAll(t *testing.T) {
-	_, sc := newServiceCenter(t)
-	_, err := sc.GetAll(context.Background())
-	if err != nil {
-		t.Errorf("get all from %s server failed, error: %s", PluginName, err)
-	}
-
-	_, err = sc.GetAll(context.Background())
-	if err != nil {
-		t.Logf("get all from %s server failed, error: %s", PluginName, err)
-	}
-}
-
-func newServiceCenter(t *testing.T) (*httptest.Server, plugins.Servicecenter) {
-	plugins.SetPluginConfig(plugins.PluginServicecenter.String(), PluginName)
-	adaptor := plugins.Plugins().Servicecenter()
-	if adaptor == nil {
-		t.Errorf("get repository adaptor %s failed", PluginName)
-	}
-	svr := mockservicecenter.NewMockServer()
-	if svr == nil {
-		t.Error("new httptest server failed")
-	}
-
-	repo, err := adaptor.New(plugins.WithEndpoints([]string{svr.URL}))
-	if err != nil {
-		t.Errorf("new repository %s failed, error: %s", PluginName, err)
-	}
-	return svr, repo
-}
diff --git a/syncer/plugins/servicecenter/transform.go b/syncer/plugins/servicecenter/transform.go
deleted file mode 100644
index 96c264a..0000000
--- a/syncer/plugins/servicecenter/transform.go
+++ /dev/null
@@ -1,493 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package servicecenter
-
-import (
-	"fmt"
-	"net/url"
-	"strconv"
-	"strings"
-
-	"github.com/apache/servicecomb-service-center/pkg/dump"
-	"github.com/apache/servicecomb-service-center/pkg/log"
-	pb "github.com/apache/servicecomb-service-center/syncer/proto"
-	pbsc "github.com/apache/servicecomb-service-center/syncer/proto/sc"
-	scpb "github.com/go-chassis/cari/discovery"
-	"google.golang.org/protobuf/proto"
-)
-
-const (
-	expansionDatasource = "datasource"
-	expansionSchema     = "schema"
-)
-
-// toSyncData transform service-center service cache to SyncData
-func toSyncData(cache *dump.Cache, schemas []*scpb.Schema) (data *pb.SyncData) {
-	data = &pb.SyncData{
-		Services:  make([]*pb.SyncService, 0, len(cache.Microservices)),
-		Instances: make([]*pb.SyncInstance, 0, len(cache.Instances)),
-	}
-
-	for _, service := range cache.Microservices {
-		domain, project := getDomainProjectFromServiceKey(service.Key)
-		if domain == "" {
-			continue
-		}
-		syncService := toSyncService(service.Value)
-		syncService.DomainProject = domain + "/" + project
-		syncService.Expansions = append(syncService.Expansions, schemaExpansions(service.Value, schemas)...)
-
-		syncInstances := toSyncInstances(syncService.ServiceId, cache.Instances)
-		if len(syncInstances) == 0 {
-			continue
-		}
-
-		data.Services = append(data.Services, syncService)
-		data.Instances = append(data.Instances, syncInstances...)
-	}
-	return
-}
-
-// toSyncService transform service-center service to SyncService
-func toSyncService(service *scpb.MicroService) (syncService *pb.SyncService) {
-	syncService = &pb.SyncService{
-		ServiceId:   service.ServiceId,
-		App:         service.AppId,
-		Name:        service.ServiceName,
-		Version:     service.Version,
-		Environment: service.Environment,
-		PluginName:  PluginName,
-	}
-	switch service.Status {
-	case scpb.MS_UP:
-		syncService.Status = pb.SyncService_UP
-	case scpb.MS_DOWN:
-		syncService.Status = pb.SyncService_DOWN
-	default:
-		syncService.Status = pb.SyncService_UNKNOWN
-	}
-
-	serviceInpbsc := ServiceCopy(service)
-	content, err := proto.Marshal(serviceInpbsc)
-	if err != nil {
-		log.Error("transform sc service to syncer service failed", err)
-		return
-	}
-
-	syncService.Expansions = []*pb.Expansion{{
-		Kind:   expansionDatasource,
-		Bytes:  content,
-		Labels: map[string]string{},
-	}}
-	return
-}
-
-//  toSyncInstances transform service-center instances to SyncInstances
-func toSyncInstances(serviceID string, instances []*dump.Instance) (syncInstances []*pb.SyncInstance) {
-	for _, inst := range instances {
-		if inst.Value.Status != scpb.MSI_UP {
-			continue
-		}
-
-		if inst.Value.ServiceId == serviceID {
-			syncInstances = append(syncInstances, toSyncInstance(serviceID, inst.Value))
-		}
-	}
-	return
-}
-
-// toSyncInstance transform service-center instance to SyncInstance
-func toSyncInstance(serviceID string, instance *scpb.MicroServiceInstance) (syncInstance *pb.SyncInstance) {
-	syncInstance = &pb.SyncInstance{
-		InstanceId: instance.InstanceId,
-		ServiceId:  serviceID,
-		Endpoints:  make([]string, 0, len(instance.Endpoints)),
-		HostName:   instance.HostName,
-		Version:    instance.Version,
-		PluginName: PluginName,
-	}
-	switch instance.Status {
-	case scpb.MSI_UP:
-		syncInstance.Status = pb.SyncInstance_UP
-	case scpb.MSI_DOWN:
-		syncInstance.Status = pb.SyncInstance_DOWN
-	case scpb.MSI_STARTING:
-		syncInstance.Status = pb.SyncInstance_STARTING
-	case scpb.MSI_OUTOFSERVICE:
-		syncInstance.Status = pb.SyncInstance_OUTOFSERVICE
-	default:
-		syncInstance.Status = pb.SyncInstance_UNKNOWN
-	}
-
-	for _, ep := range instance.Endpoints {
-		endpoint := ep
-		addr, err := url.Parse(ep)
-		if err != nil {
-			log.Error("parse sc instance endpoint failed", err)
-			continue
-		}
-		if addr.Scheme == "rest" {
-			prefix := "http://"
-			b, _ := strconv.ParseBool(addr.Query().Get("sslEnabled"))
-			if b {
-				prefix = "https://"
-			}
-			endpoint = strings.Replace(ep, addr.Scheme+"://", prefix, 1)
-		}
-		syncInstance.Endpoints = append(syncInstance.Endpoints, endpoint)
-	}
-
-	if instance.HealthCheck != nil {
-		syncInstance.HealthCheck = &pb.HealthCheck{
-			Port:     instance.HealthCheck.Port,
-			Interval: instance.HealthCheck.Interval,
-			Times:    instance.HealthCheck.Times,
-			Url:      instance.HealthCheck.Url,
-		}
-	}
-
-	instaceInpbsc := InstanceCopy(instance)
-	content, err := proto.Marshal(instaceInpbsc)
-	if err != nil {
-		log.Error("transform sc instance to syncer instance failed", err)
-		return
-	}
-
-	syncInstance.Expansions = []*pb.Expansion{{
-		Kind:   expansionDatasource,
-		Bytes:  content,
-		Labels: map[string]string{},
-	}}
-	return
-}
-
-func schemaExpansions(service *scpb.MicroService, schemas []*scpb.Schema) (expansions []*pb.Expansion) {
-	for _, val := range schemas {
-		if !inSlice(service.Schemas, val.SchemaId) {
-			continue
-		}
-
-		schemaInpbsc := SchemaCopy(val)
-		content, err := proto.Marshal(schemaInpbsc)
-		if err != nil {
-			log.Error(fmt.Sprintf("proto marshal schemas failed, app = %s, service = %s, version = %s datasource = %s",
-				service.AppId, service.ServiceName, service.Version, expansionSchema), err)
-			continue
-		}
-		expansions = append(expansions, &pb.Expansion{
-			Kind:   expansionSchema,
-			Bytes:  content,
-			Labels: map[string]string{},
-		})
-	}
-	return
-}
-
-// toService transform SyncService to service-center service
-func toService(syncService *pb.SyncService) (service *scpb.MicroService) {
-	service = &scpb.MicroService{}
-	serviceInpbsc := &pbsc.MicroService{}
-	var err error
-	if syncService.PluginName == PluginName && len(syncService.Expansions) > 0 {
-		matches := pb.Expansions(syncService.Expansions).Find(expansionDatasource, map[string]string{})
-		if len(matches) > 0 {
-			err = proto.Unmarshal(matches[0].Bytes, serviceInpbsc)
-			if err == nil {
-				service = ServiceCopyRe(serviceInpbsc)
-				service.ServiceId = syncService.ServiceId
-				return
-			}
-			log.Error(fmt.Sprintf("proto unmarshal %s service, serviceID = %s, kind = %v, content = %v failed",
-				PluginName, serviceInpbsc.ServiceId, matches[0].Kind, matches[0].Bytes), err)
-		}
-	}
-	service.AppId = syncService.App
-	service.ServiceId = syncService.ServiceId
-	service.ServiceName = syncService.Name
-	service.Version = syncService.Version
-	service.Status = pb.SyncService_Status_name[int32(syncService.Status)]
-	service.Environment = syncService.Environment
-	return
-}
-
-// toInstance transform SyncInstance to service-center instance
-func toInstance(syncInstance *pb.SyncInstance) (instance *scpb.MicroServiceInstance) {
-	instance = &scpb.MicroServiceInstance{}
-	instaceInpbsc := &pbsc.MicroServiceInstance{}
-	if syncInstance.PluginName == PluginName && len(syncInstance.Expansions) > 0 {
-		matches := pb.Expansions(syncInstance.Expansions).Find(expansionDatasource, map[string]string{})
-		if len(matches) > 0 {
-			err := proto.Unmarshal(matches[0].Bytes, instaceInpbsc)
-			if err == nil {
-				instance = InstanceCopyRe(instaceInpbsc)
-				instance.InstanceId = syncInstance.InstanceId
-				instance.ServiceId = syncInstance.ServiceId
-				return
-			}
-			log.Error(fmt.Sprintf("proto unmarshal %s instance, instanceID = %s, kind = %v, content = %v failed",
-				PluginName, instance.InstanceId, matches[0].Kind, matches[0].Bytes), err)
-
-		}
-	}
-	instance.InstanceId = syncInstance.InstanceId
-	instance.ServiceId = syncInstance.ServiceId
-	instance.Endpoints = make([]string, 0, len(syncInstance.Endpoints))
-	instance.HostName = syncInstance.HostName
-	instance.Version = syncInstance.Version
-	instance.Status = pb.SyncInstance_Status_name[int32(syncInstance.Status)]
-
-	for _, ep := range syncInstance.Endpoints {
-		addr, err := url.Parse(ep)
-		if err != nil {
-			log.Error("parse sc instance endpoint failed", err)
-			continue
-		}
-		endpoint := ""
-		switch addr.Scheme {
-		case "http":
-			endpoint = strings.Replace(ep, "http://", "rest://", 1)
-		case "https":
-			endpoint = strings.Replace(ep, "https://", "rest://", 1) + "?sslEnabled=true"
-		case "rest", "highway":
-			endpoint = ep
-		}
-		instance.Endpoints = append(instance.Endpoints, endpoint)
-	}
-
-	if syncInstance.HealthCheck != nil && syncInstance.HealthCheck.Mode != pb.HealthCheck_UNKNOWN {
-		instance.HealthCheck = &scpb.HealthCheck{
-			Mode:     pb.HealthCheck_Modes_name[int32(syncInstance.HealthCheck.Mode)],
-			Port:     syncInstance.HealthCheck.Port,
-			Interval: syncInstance.HealthCheck.Interval,
-			Times:    syncInstance.HealthCheck.Times,
-			Url:      syncInstance.HealthCheck.Url,
-		}
-	}
-	return
-}
-
-func getDomainProjectFromServiceKey(serviceKey string) (string, string) {
-	tenant := strings.Split(serviceKey, "/")
-	if len(tenant) < 6 {
-		return "", ""
-	}
-	return tenant[4], tenant[5]
-}
-
-func inSlice(slice []string, val string) bool {
-	for _, item := range slice {
-		if item == val {
-			return true
-		}
-	}
-	return false
-}
-
-func ServiceCopy(service *scpb.MicroService) *pbsc.MicroService {
-	var serviceInpbsc pbsc.MicroService
-	if service != nil {
-		paths := []*pbsc.ServicePath{}
-		if len(service.Paths) > 0 {
-			for i, path := range service.Paths {
-				paths[i].Path = path.Path
-				paths[i].Property = path.Property
-			}
-		}
-		providers := []*pbsc.MicroServiceKey{}
-		if len(service.Providers) > 0 {
-			for i, provider := range service.Providers {
-				providers[i].Tenant = provider.Tenant
-				providers[i].Environment = provider.Environment
-				providers[i].AppId = provider.AppId
-				providers[i].ServiceName = provider.ServiceName
-				providers[i].Alias = provider.Alias
-				providers[i].Version = provider.Version
-			}
-		}
-		var frameWorkProperty pbsc.FrameWork
-		if service.Framework != nil {
-			frameWorkProperty = pbsc.FrameWork{
-				Name:    service.Framework.Name,
-				Version: service.Framework.Version,
-			}
-		}
-		serviceInpbsc = pbsc.MicroService{
-			ServiceId:    service.ServiceId,
-			AppId:        service.AppId,
-			ServiceName:  service.ServiceName,
-			Version:      service.Version,
-			Description:  service.Description,
-			Level:        service.Level,
-			Schemas:      service.Schemas,
-			Paths:        paths,
-			Status:       service.Status,
-			Properties:   service.Properties,
-			Timestamp:    service.Timestamp,
-			Providers:    providers,
-			Alias:        service.Alias,
-			LBStrategy:   service.LBStrategy,
-			ModTimestamp: service.ModTimestamp,
-			Environment:  service.Environment,
-			RegisterBy:   service.RegisterBy,
-			Framework:    &frameWorkProperty,
-		}
-	}
-	return &serviceInpbsc
-}
-
-func ServiceCopyRe(service *pbsc.MicroService) *scpb.MicroService {
-	var serviceInpbsc scpb.MicroService
-	if service != nil {
-		paths := []*scpb.ServicePath{}
-		if len(service.Paths) > 0 {
-			for i, path := range service.Paths {
-				paths[i].Path = path.Path
-				paths[i].Property = path.Property
-			}
-		}
-		providers := []*scpb.MicroServiceKey{}
-		if len(service.Providers) > 0 {
-			for i, provider := range service.Providers {
-				providers[i].Tenant = provider.Tenant
-				providers[i].Environment = provider.Environment
-				providers[i].AppId = provider.AppId
-				providers[i].ServiceName = provider.ServiceName
-				providers[i].Alias = provider.Alias
-				providers[i].Version = provider.Version
-			}
-		}
-		var frameWorkProperty scpb.FrameWork
-		if service.Framework != nil {
-			frameWorkProperty = scpb.FrameWork{
-				Name:    service.Framework.Name,
-				Version: service.Framework.Version,
-			}
-		}
-		serviceInpbsc = scpb.MicroService{
-			ServiceId:    service.ServiceId,
-			AppId:        service.AppId,
-			ServiceName:  service.ServiceName,
-			Version:      service.Version,
-			Description:  service.Description,
-			Level:        service.Level,
-			Schemas:      service.Schemas,
-			Paths:        paths,
-			Status:       service.Status,
-			Properties:   service.Properties,
-			Timestamp:    service.Timestamp,
-			Providers:    providers,
-			Alias:        service.Alias,
-			LBStrategy:   service.LBStrategy,
-			ModTimestamp: service.ModTimestamp,
-			Environment:  service.Environment,
-			RegisterBy:   service.RegisterBy,
-			Framework:    &frameWorkProperty,
-		}
-	}
-	return &serviceInpbsc
-}
-
-func InstanceCopy(instance *scpb.MicroServiceInstance) *pbsc.MicroServiceInstance {
-	var instanceInpbs pbsc.MicroServiceInstance
-	if instance != nil {
-		var healthCheck pbsc.HealthCheck
-		if instance.HealthCheck != nil {
-			healthCheck = pbsc.HealthCheck{
-				Mode:     instance.HealthCheck.Mode,
-				Port:     instance.HealthCheck.Port,
-				Interval: instance.HealthCheck.Interval,
-				Times:    instance.HealthCheck.Times,
-				Url:      instance.HealthCheck.Url,
-			}
-		}
-		var dataCenterInfo pbsc.DataCenterInfo
-		if instance.DataCenterInfo != nil {
-			dataCenterInfo = pbsc.DataCenterInfo{
-				Name:          instance.DataCenterInfo.Name,
-				Region:        instance.DataCenterInfo.Region,
-				AvailableZone: instance.DataCenterInfo.AvailableZone,
-			}
-		}
-		instanceInpbs = pbsc.MicroServiceInstance{
-			InstanceId:     instance.InstanceId,
-			ServiceId:      instance.ServiceId,
-			Endpoints:      instance.Endpoints,
-			HostName:       instance.HostName,
-			Status:         instance.Status,
-			Properties:     instance.Properties,
-			HealthCheck:    &healthCheck,
-			Timestamp:      instance.Timestamp,
-			DataCenterInfo: &dataCenterInfo,
-			ModTimestamp:   instance.ModTimestamp,
-			Version:        instance.Version,
-		}
-	}
-	return &instanceInpbs
-}
-
-func InstanceCopyRe(instance *pbsc.MicroServiceInstance) *scpb.MicroServiceInstance {
-	var instanceInpbs scpb.MicroServiceInstance
-	if instance != nil {
-		var healthCheck scpb.HealthCheck
-		if instance.HealthCheck != nil {
-			healthCheck = scpb.HealthCheck{
-				Mode:     instance.HealthCheck.Mode,
-				Port:     instance.HealthCheck.Port,
-				Interval: instance.HealthCheck.Interval,
-				Times:    instance.HealthCheck.Times,
-				Url:      instance.HealthCheck.Url,
-			}
-		}
-		var dataCenterInfo scpb.DataCenterInfo
-		if instance.DataCenterInfo != nil {
-			dataCenterInfo = scpb.DataCenterInfo{
-				Name:          instance.DataCenterInfo.Name,
-				Region:        instance.DataCenterInfo.Region,
-				AvailableZone: instance.DataCenterInfo.AvailableZone,
-			}
-		}
-		instanceInpbs = scpb.MicroServiceInstance{
-			InstanceId:   instance.InstanceId,
-			ServiceId:    instance.ServiceId,
-			Endpoints:    instance.Endpoints,
-			HostName:     instance.HostName,
-			Status:       instance.Status,
-			Properties:   instance.Properties,
-			HealthCheck:  &healthCheck,
-			Timestamp:    instance.Timestamp,
-			ModTimestamp: instance.ModTimestamp,
-			Version:      instance.Version,
-		}
-		if instance.DataCenterInfo != nil && instance.DataCenterInfo.Name != "" {
-			instanceInpbs.DataCenterInfo = &dataCenterInfo
-		}
-	}
-	return &instanceInpbs
-}
-
-func SchemaCopy(schema *scpb.Schema) *pbsc.Schema {
-	var schemaInpbsc pbsc.Schema
-	if schema != nil {
-		schemaInpbsc = pbsc.Schema{
-			SchemaId: schema.SchemaId,
-			Summary:  schema.Summary,
-			Schema:   schema.Schema,
-		}
-	}
-	return &schemaInpbsc
-}
diff --git a/syncer/plugins/servicecenter/transform_test.go b/syncer/plugins/servicecenter/transform_test.go
deleted file mode 100644
index 50c668b..0000000
--- a/syncer/plugins/servicecenter/transform_test.go
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-
-package servicecenter
-
-import (
-	pbsc "github.com/apache/servicecomb-service-center/syncer/proto/sc"
-	scpb "github.com/go-chassis/cari/discovery"
-	"github.com/stretchr/testify/assert"
-
-	"testing"
-)
-
-func TestTransform_ServiceCopy(t *testing.T) {
-	t.Run("value will copy from scpb.MicroService to pbsc.MicroService", func(t *testing.T) {
-		service := scpb.MicroService{
-			ServiceId: "1234567",
-		}
-		serviceInpbsc := ServiceCopy(&service)
-		assert.NotNil(t, serviceInpbsc.ServiceId, "serviceId is not nil")
-		assert.Equal(t, "1234567", serviceInpbsc.ServiceId)
-	})
-	t.Run("more values will copy from scpb.MicroService to pbsc.MicroService", func(t *testing.T) {
-		service := scpb.MicroService{
-			ServiceId:   "1234567",
-			AppId:       "appid",
-			ServiceName: "service",
-		}
-		serviceInpbsc := ServiceCopy(&service)
-		assert.NotNil(t, serviceInpbsc.ServiceId, "serviceId is not nil")
-		assert.Equal(t, "1234567", serviceInpbsc.ServiceId)
-		assert.Equal(t, "appid", serviceInpbsc.AppId)
-		assert.Equal(t, "service", serviceInpbsc.ServiceName)
-	})
-}
-
-func TestTransform_ServiceCopyRe(t *testing.T) {
-	t.Run("value will copy from pbsc.MicroService to scpb.MicroService", func(t *testing.T) {
-		service := pbsc.MicroService{
-			ServiceId: "1234567",
-		}
-		serviceInpbsc := ServiceCopyRe(&service)
-		assert.NotNil(t, serviceInpbsc.ServiceId, "serviceId is not nil")
-		assert.Equal(t, "1234567", serviceInpbsc.ServiceId)
-	})
-	t.Run("more values will copy from pbsc.MicroService to scpb.MicroService", func(t *testing.T) {
-		service := pbsc.MicroService{
-			ServiceId:   "1234567",
-			AppId:       "appid",
-			ServiceName: "service",
-		}
-		serviceInpbsc := ServiceCopyRe(&service)
-		assert.NotNil(t, serviceInpbsc.ServiceId, "serviceId is not nil")
-		assert.Equal(t, "1234567", serviceInpbsc.ServiceId)
-		assert.Equal(t, "appid", serviceInpbsc.AppId)
-		assert.Equal(t, "service", serviceInpbsc.ServiceName)
-	})
-}
-
-func TestTransform_InstanceCopy(t *testing.T) {
-	t.Run("value will copy from scpb.MicroServiceInstance to pbsc.MicroServiceInstance", func(t *testing.T) {
-		instance := scpb.MicroServiceInstance{
-			ServiceId: "1234567",
-		}
-		instanceInpbsc := InstanceCopy(&instance)
-		assert.NotNil(t, instanceInpbsc.ServiceId, "serviceId is not nil")
-		assert.Equal(t, "1234567", instanceInpbsc.ServiceId)
-	})
-	t.Run("more values will copy from scpb.MicroServiceInstance to pbsc.MicroServiceInstance", func(t *testing.T) {
-		instance := scpb.MicroServiceInstance{
-			ServiceId:  "1234567",
-			InstanceId: "7654321",
-		}
-		instanceInpbsc := InstanceCopy(&instance)
-		assert.NotNil(t, instanceInpbsc.ServiceId, "serviceId is not nil")
-		assert.Equal(t, "1234567", instanceInpbsc.ServiceId)
-		assert.Equal(t, "7654321", instanceInpbsc.InstanceId)
-	})
-}
-
-func TestTransform_InstanceCopyRe(t *testing.T) {
-	t.Run("value will copy from pbsc.MicroServiceInstance to scpb.MicroServiceInstance", func(t *testing.T) {
-		instance := pbsc.MicroServiceInstance{
-			ServiceId: "1234567",
-		}
-		instanceInpbsc := InstanceCopyRe(&instance)
-		assert.NotNil(t, instanceInpbsc.ServiceId, "serviceId is not nil")
-		assert.Equal(t, "1234567", instanceInpbsc.ServiceId)
-	})
-	t.Run("value will copy from pbsc.MicroServiceInstance to scpb.MicroServiceInstance", func(t *testing.T) {
-		instance := pbsc.MicroServiceInstance{
-			ServiceId:  "1234567",
-			InstanceId: "7654321",
-		}
-		instanceInpbsc := InstanceCopyRe(&instance)
-		assert.NotNil(t, instanceInpbsc.ServiceId, "serviceId is not nil")
-		assert.Equal(t, "1234567", instanceInpbsc.ServiceId)
-		assert.Equal(t, "7654321", instanceInpbsc.InstanceId)
-	})
-}
-
-func TestTransform_SchemaCopy(t *testing.T) {
-	t.Run("value will copy from scpb.Schema to pbsc.Schema", func(t *testing.T) {
-		schema := scpb.Schema{
-			SchemaId: "1234567",
-		}
-		instanceInpbsc := SchemaCopy(&schema)
-		assert.NotNil(t, instanceInpbsc.SchemaId, "schemaId is not nil")
-		assert.Equal(t, "1234567", instanceInpbsc.SchemaId)
-	})
-}
diff --git a/syncer/proto/sc/servicecenter.pb.go b/syncer/proto/sc/servicecenter.pb.go
deleted file mode 100644
index 1a2864f..0000000
--- a/syncer/proto/sc/servicecenter.pb.go
+++ /dev/null
@@ -1,1059 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// versions:
-// 	protoc-gen-go v1.25.0
-// 	protoc        v3.11.0
-// source: servicecenter.proto
-
-package sc
-
-import (
-	reflect "reflect"
-	sync "sync"
-
-	proto "github.com/golang/protobuf/proto"
-	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-)
-
-const (
-	// Verify that this generated code is sufficiently up-to-date.
-	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
-	// Verify that runtime/protoimpl is sufficiently up-to-date.
-	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
-)
-
-// This is a compile-time assertion that a sufficiently up-to-date version
-// of the legacy proto package is being used.
-const _ = proto.ProtoPackageIsVersion4
-
-type Schema struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	SchemaId string `protobuf:"bytes,1,opt,name=schemaId,proto3" json:"schemaId,omitempty"`
-	Summary  string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"`
-	Schema   string `protobuf:"bytes,3,opt,name=schema,proto3" json:"schema,omitempty"`
-}
-
-func (x *Schema) Reset() {
-	*x = Schema{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_servicecenter_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *Schema) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Schema) ProtoMessage() {}
-
-func (x *Schema) ProtoReflect() protoreflect.Message {
-	mi := &file_servicecenter_proto_msgTypes[0]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use Schema.ProtoReflect.Descriptor instead.
-func (*Schema) Descriptor() ([]byte, []int) {
-	return file_servicecenter_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *Schema) GetSchemaId() string {
-	if x != nil {
-		return x.SchemaId
-	}
-	return ""
-}
-
-func (x *Schema) GetSummary() string {
-	if x != nil {
-		return x.Summary
-	}
-	return ""
-}
-
-func (x *Schema) GetSchema() string {
-	if x != nil {
-		return x.Schema
-	}
-	return ""
-}
-
-type MicroService struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	ServiceId    string             `protobuf:"bytes,1,opt,name=serviceId,proto3" json:"serviceId,omitempty"`
-	AppId        string             `protobuf:"bytes,2,opt,name=appId,proto3" json:"appId,omitempty"`
-	ServiceName  string             `protobuf:"bytes,3,opt,name=serviceName,proto3" json:"serviceName,omitempty"`
-	Version      string             `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"`
-	Description  string             `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"`
-	Level        string             `protobuf:"bytes,6,opt,name=level,proto3" json:"level,omitempty"`
-	Schemas      []string           `protobuf:"bytes,7,rep,name=schemas,proto3" json:"schemas,omitempty"`
-	Paths        []*ServicePath     `protobuf:"bytes,10,rep,name=paths,proto3" json:"paths,omitempty"`
-	Status       string             `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"`
-	Properties   map[string]string  `protobuf:"bytes,9,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-	Timestamp    string             `protobuf:"bytes,11,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
-	Providers    []*MicroServiceKey `protobuf:"bytes,12,rep,name=providers,proto3" json:"providers,omitempty"`
-	Alias        string             `protobuf:"bytes,13,opt,name=alias,proto3" json:"alias,omitempty"`
-	LBStrategy   map[string]string  `protobuf:"bytes,14,rep,name=LBStrategy,proto3" json:"LBStrategy,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-	ModTimestamp string             `protobuf:"bytes,15,opt,name=modTimestamp,proto3" json:"modTimestamp,omitempty"`
-	Environment  string             `protobuf:"bytes,16,opt,name=environment,proto3" json:"environment,omitempty"`
-	RegisterBy   string             `protobuf:"bytes,17,opt,name=registerBy,proto3" json:"registerBy,omitempty"`
-	Framework    *FrameWork         `protobuf:"bytes,18,opt,name=framework,proto3" json:"framework,omitempty"`
-}
-
-func (x *MicroService) Reset() {
-	*x = MicroService{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_servicecenter_proto_msgTypes[1]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *MicroService) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*MicroService) ProtoMessage() {}
-
-func (x *MicroService) ProtoReflect() protoreflect.Message {
-	mi := &file_servicecenter_proto_msgTypes[1]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use MicroService.ProtoReflect.Descriptor instead.
-func (*MicroService) Descriptor() ([]byte, []int) {
-	return file_servicecenter_proto_rawDescGZIP(), []int{1}
-}
-
-func (x *MicroService) GetServiceId() string {
-	if x != nil {
-		return x.ServiceId
-	}
-	return ""
-}
-
-func (x *MicroService) GetAppId() string {
-	if x != nil {
-		return x.AppId
-	}
-	return ""
-}
-
-func (x *MicroService) GetServiceName() string {
-	if x != nil {
-		return x.ServiceName
-	}
-	return ""
-}
-
-func (x *MicroService) GetVersion() string {
-	if x != nil {
-		return x.Version
-	}
-	return ""
-}
-
-func (x *MicroService) GetDescription() string {
-	if x != nil {
-		return x.Description
-	}
-	return ""
-}
-
-func (x *MicroService) GetLevel() string {
-	if x != nil {
-		return x.Level
-	}
-	return ""
-}
-
-func (x *MicroService) GetSchemas() []string {
-	if x != nil {
-		return x.Schemas
-	}
-	return nil
-}
-
-func (x *MicroService) GetPaths() []*ServicePath {
-	if x != nil {
-		return x.Paths
-	}
-	return nil
-}
-
-func (x *MicroService) GetStatus() string {
-	if x != nil {
-		return x.Status
-	}
-	return ""
-}
-
-func (x *MicroService) GetProperties() map[string]string {
-	if x != nil {
-		return x.Properties
-	}
-	return nil
-}
-
-func (x *MicroService) GetTimestamp() string {
-	if x != nil {
-		return x.Timestamp
-	}
-	return ""
-}
-
-func (x *MicroService) GetProviders() []*MicroServiceKey {
-	if x != nil {
-		return x.Providers
-	}
-	return nil
-}
-
-func (x *MicroService) GetAlias() string {
-	if x != nil {
-		return x.Alias
-	}
-	return ""
-}
-
-func (x *MicroService) GetLBStrategy() map[string]string {
-	if x != nil {
-		return x.LBStrategy
-	}
-	return nil
-}
-
-func (x *MicroService) GetModTimestamp() string {
-	if x != nil {
-		return x.ModTimestamp
-	}
-	return ""
-}
-
-func (x *MicroService) GetEnvironment() string {
-	if x != nil {
-		return x.Environment
-	}
-	return ""
-}
-
-func (x *MicroService) GetRegisterBy() string {
-	if x != nil {
-		return x.RegisterBy
-	}
-	return ""
-}
-
-func (x *MicroService) GetFramework() *FrameWork {
-	if x != nil {
-		return x.Framework
-	}
-	return nil
-}
-
-type MicroServiceInstance struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	InstanceId     string            `protobuf:"bytes,1,opt,name=instanceId,proto3" json:"instanceId,omitempty"`
-	ServiceId      string            `protobuf:"bytes,2,opt,name=serviceId,proto3" json:"serviceId,omitempty"`
-	Endpoints      []string          `protobuf:"bytes,3,rep,name=endpoints,proto3" json:"endpoints,omitempty"`
-	HostName       string            `protobuf:"bytes,4,opt,name=hostName,proto3" json:"hostName,omitempty"`
-	Status         string            `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"`
-	Properties     map[string]string `protobuf:"bytes,6,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-	HealthCheck    *HealthCheck      `protobuf:"bytes,7,opt,name=healthCheck,proto3" json:"healthCheck,omitempty"`
-	Timestamp      string            `protobuf:"bytes,8,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
-	DataCenterInfo *DataCenterInfo   `protobuf:"bytes,9,opt,name=dataCenterInfo,proto3" json:"dataCenterInfo,omitempty"`
-	ModTimestamp   string            `protobuf:"bytes,10,opt,name=modTimestamp,proto3" json:"modTimestamp,omitempty"`
-	Version        string            `protobuf:"bytes,11,opt,name=version,proto3" json:"version,omitempty"`
-}
-
-func (x *MicroServiceInstance) Reset() {
-	*x = MicroServiceInstance{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_servicecenter_proto_msgTypes[2]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *MicroServiceInstance) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*MicroServiceInstance) ProtoMessage() {}
-
-func (x *MicroServiceInstance) ProtoReflect() protoreflect.Message {
-	mi := &file_servicecenter_proto_msgTypes[2]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use MicroServiceInstance.ProtoReflect.Descriptor instead.
-func (*MicroServiceInstance) Descriptor() ([]byte, []int) {
-	return file_servicecenter_proto_rawDescGZIP(), []int{2}
-}
-
-func (x *MicroServiceInstance) GetInstanceId() string {
-	if x != nil {
-		return x.InstanceId
-	}
-	return ""
-}
-
-func (x *MicroServiceInstance) GetServiceId() string {
-	if x != nil {
-		return x.ServiceId
-	}
-	return ""
-}
-
-func (x *MicroServiceInstance) GetEndpoints() []string {
-	if x != nil {
-		return x.Endpoints
-	}
-	return nil
-}
-
-func (x *MicroServiceInstance) GetHostName() string {
-	if x != nil {
-		return x.HostName
-	}
-	return ""
-}
-
-func (x *MicroServiceInstance) GetStatus() string {
-	if x != nil {
-		return x.Status
-	}
-	return ""
-}
-
-func (x *MicroServiceInstance) GetProperties() map[string]string {
-	if x != nil {
-		return x.Properties
-	}
-	return nil
-}
-
-func (x *MicroServiceInstance) GetHealthCheck() *HealthCheck {
-	if x != nil {
-		return x.HealthCheck
-	}
-	return nil
-}
-
-func (x *MicroServiceInstance) GetTimestamp() string {
-	if x != nil {
-		return x.Timestamp
-	}
-	return ""
-}
-
-func (x *MicroServiceInstance) GetDataCenterInfo() *DataCenterInfo {
-	if x != nil {
-		return x.DataCenterInfo
-	}
-	return nil
-}
-
-func (x *MicroServiceInstance) GetModTimestamp() string {
-	if x != nil {
-		return x.ModTimestamp
-	}
-	return ""
-}
-
-func (x *MicroServiceInstance) GetVersion() string {
-	if x != nil {
-		return x.Version
-	}
-	return ""
-}
-
-type ServicePath struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Path     string            `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
-	Property map[string]string `protobuf:"bytes,2,rep,name=property,proto3" json:"property,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-}
-
-func (x *ServicePath) Reset() {
-	*x = ServicePath{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_servicecenter_proto_msgTypes[3]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *ServicePath) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ServicePath) ProtoMessage() {}
-
-func (x *ServicePath) ProtoReflect() protoreflect.Message {
-	mi := &file_servicecenter_proto_msgTypes[3]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use ServicePath.ProtoReflect.Descriptor instead.
-func (*ServicePath) Descriptor() ([]byte, []int) {
-	return file_servicecenter_proto_rawDescGZIP(), []int{3}
-}
-
-func (x *ServicePath) GetPath() string {
-	if x != nil {
-		return x.Path
-	}
-	return ""
-}
-
-func (x *ServicePath) GetProperty() map[string]string {
-	if x != nil {
-		return x.Property
-	}
-	return nil
-}
-
-type MicroServiceKey struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Tenant      string `protobuf:"bytes,1,opt,name=tenant,proto3" json:"tenant,omitempty"`
-	Environment string `protobuf:"bytes,2,opt,name=environment,proto3" json:"environment,omitempty"`
-	AppId       string `protobuf:"bytes,3,opt,name=appId,proto3" json:"appId,omitempty"`
-	ServiceName string `protobuf:"bytes,4,opt,name=serviceName,proto3" json:"serviceName,omitempty"`
-	Alias       string `protobuf:"bytes,5,opt,name=alias,proto3" json:"alias,omitempty"`
-	Version     string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"`
-}
-
-func (x *MicroServiceKey) Reset() {
-	*x = MicroServiceKey{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_servicecenter_proto_msgTypes[4]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *MicroServiceKey) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*MicroServiceKey) ProtoMessage() {}
-
-func (x *MicroServiceKey) ProtoReflect() protoreflect.Message {
-	mi := &file_servicecenter_proto_msgTypes[4]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use MicroServiceKey.ProtoReflect.Descriptor instead.
-func (*MicroServiceKey) Descriptor() ([]byte, []int) {
-	return file_servicecenter_proto_rawDescGZIP(), []int{4}
-}
-
-func (x *MicroServiceKey) GetTenant() string {
-	if x != nil {
-		return x.Tenant
-	}
-	return ""
-}
-
-func (x *MicroServiceKey) GetEnvironment() string {
-	if x != nil {
-		return x.Environment
-	}
-	return ""
-}
-
-func (x *MicroServiceKey) GetAppId() string {
-	if x != nil {
-		return x.AppId
-	}
-	return ""
-}
-
-func (x *MicroServiceKey) GetServiceName() string {
-	if x != nil {
-		return x.ServiceName
-	}
-	return ""
-}
-
-func (x *MicroServiceKey) GetAlias() string {
-	if x != nil {
-		return x.Alias
-	}
-	return ""
-}
-
-func (x *MicroServiceKey) GetVersion() string {
-	if x != nil {
-		return x.Version
-	}
-	return ""
-}
-
-type FrameWork struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Name    string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
-	Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
-}
-
-func (x *FrameWork) Reset() {
-	*x = FrameWork{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_servicecenter_proto_msgTypes[5]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *FrameWork) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*FrameWork) ProtoMessage() {}
-
-func (x *FrameWork) ProtoReflect() protoreflect.Message {
-	mi := &file_servicecenter_proto_msgTypes[5]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use FrameWork.ProtoReflect.Descriptor instead.
-func (*FrameWork) Descriptor() ([]byte, []int) {
-	return file_servicecenter_proto_rawDescGZIP(), []int{5}
-}
-
-func (x *FrameWork) GetName() string {
-	if x != nil {
-		return x.Name
-	}
-	return ""
-}
-
-func (x *FrameWork) GetVersion() string {
-	if x != nil {
-		return x.Version
-	}
-	return ""
-}
-
-type HealthCheck struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Mode     string `protobuf:"bytes,1,opt,name=mode,proto3" json:"mode,omitempty"`
-	Port     int32  `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"`
-	Interval int32  `protobuf:"varint,3,opt,name=interval,proto3" json:"interval,omitempty"`
-	Times    int32  `protobuf:"varint,4,opt,name=times,proto3" json:"times,omitempty"`
-	Url      string `protobuf:"bytes,5,opt,name=url,proto3" json:"url,omitempty"`
-}
-
-func (x *HealthCheck) Reset() {
-	*x = HealthCheck{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_servicecenter_proto_msgTypes[6]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *HealthCheck) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*HealthCheck) ProtoMessage() {}
-
-func (x *HealthCheck) ProtoReflect() protoreflect.Message {
-	mi := &file_servicecenter_proto_msgTypes[6]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use HealthCheck.ProtoReflect.Descriptor instead.
-func (*HealthCheck) Descriptor() ([]byte, []int) {
-	return file_servicecenter_proto_rawDescGZIP(), []int{6}
-}
-
-func (x *HealthCheck) GetMode() string {
-	if x != nil {
-		return x.Mode
-	}
-	return ""
-}
-
-func (x *HealthCheck) GetPort() int32 {
-	if x != nil {
-		return x.Port
-	}
-	return 0
-}
-
-func (x *HealthCheck) GetInterval() int32 {
-	if x != nil {
-		return x.Interval
-	}
-	return 0
-}
-
-func (x *HealthCheck) GetTimes() int32 {
-	if x != nil {
-		return x.Times
-	}
-	return 0
-}
-
-func (x *HealthCheck) GetUrl() string {
-	if x != nil {
-		return x.Url
-	}
-	return ""
-}
-
-type DataCenterInfo struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Name          string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
-	Region        string `protobuf:"bytes,2,opt,name=region,proto3" json:"region,omitempty"`
-	AvailableZone string `protobuf:"bytes,3,opt,name=availableZone,proto3" json:"availableZone,omitempty"`
-}
-
-func (x *DataCenterInfo) Reset() {
-	*x = DataCenterInfo{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_servicecenter_proto_msgTypes[7]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *DataCenterInfo) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*DataCenterInfo) ProtoMessage() {}
-
-func (x *DataCenterInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_servicecenter_proto_msgTypes[7]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use DataCenterInfo.ProtoReflect.Descriptor instead.
-func (*DataCenterInfo) Descriptor() ([]byte, []int) {
-	return file_servicecenter_proto_rawDescGZIP(), []int{7}
-}
-
-func (x *DataCenterInfo) GetName() string {
-	if x != nil {
-		return x.Name
-	}
-	return ""
-}
-
-func (x *DataCenterInfo) GetRegion() string {
-	if x != nil {
-		return x.Region
-	}
-	return ""
-}
-
-func (x *DataCenterInfo) GetAvailableZone() string {
-	if x != nil {
-		return x.AvailableZone
-	}
-	return ""
-}
-
-var File_servicecenter_proto protoreflect.FileDescriptor
-
-var file_servicecenter_proto_rawDesc = []byte{
-	0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x2e,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x73, 0x63, 0x22, 0x56, 0x0a, 0x06, 0x53, 0x63, 0x68,
-	0x65, 0x6d, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x49, 0x64, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x49, 0x64, 0x12,
-	0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68,
-	0x65, 0x6d, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d,
-	0x61, 0x22, 0x93, 0x06, 0x0a, 0x0c, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69,
-	0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64,
-	0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72,
-	0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73,
-	0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69,
-	0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
-	0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
-	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x06, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x63,
-	0x68, 0x65, 0x6d, 0x61, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x73, 0x63, 0x68,
-	0x65, 0x6d, 0x61, 0x73, 0x12, 0x25, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x0a, 0x20,
-	0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x63, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
-	0x50, 0x61, 0x74, 0x68, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73,
-	0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61,
-	0x74, 0x75, 0x73, 0x12, 0x40, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65,
-	0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x63, 0x2e, 0x4d, 0x69, 0x63,
-	0x72, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72,
-	0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65,
-	0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
-	0x6d, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
-	0x61, 0x6d, 0x70, 0x12, 0x31, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73,
-	0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x63, 0x2e, 0x4d, 0x69, 0x63, 0x72,
-	0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, 0x72, 0x6f,
-	0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18,
-	0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x40, 0x0a, 0x0a,
-	0x4c, 0x42, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b,
-	0x32, 0x20, 0x2e, 0x73, 0x63, 0x2e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69,
-	0x63, 0x65, 0x2e, 0x4c, 0x42, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x45, 0x6e, 0x74,
-	0x72, 0x79, 0x52, 0x0a, 0x4c, 0x42, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x22,
-	0x0a, 0x0c, 0x6d, 0x6f, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0f,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x6f, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
-	0x6d, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e,
-	0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e,
-	0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72,
-	0x42, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74,
-	0x65, 0x72, 0x42, 0x79, 0x12, 0x33, 0x0a, 0x09, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x77, 0x6f, 0x72,
-	0x6b, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x63, 0x2e, 0x46, 0x72, 0x61,
-	0x6d, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x52, 0x09,
-	0x66, 0x72, 0x61, 0x6d, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f,
-	0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
-	0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
-	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
-	0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4c, 0x42, 0x53, 0x74,
-	0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
-	0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a,
-	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61,
-	0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfa, 0x03, 0x0a, 0x14, 0x4d, 0x69, 0x63, 0x72,
-	0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65,
-	0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64,
-	0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c,
-	0x0a, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
-	0x09, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08,
-	0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
-	0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x12, 0x48, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x06,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x63, 0x2e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x53,
-	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x50,
-	0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a,
-	0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x0b, 0x68, 0x65,
-	0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x0f, 0x2e, 0x73, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b,
-	0x52, 0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x1c, 0x0a,
-	0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3a, 0x0a, 0x0e, 0x64,
-	0x61, 0x74, 0x61, 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x09, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x63, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x43, 0x65, 0x6e,
-	0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x43, 0x65, 0x6e,
-	0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x6f, 0x64, 0x54, 0x69,
-	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d,
-	0x6f, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76,
-	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65,
-	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
-	0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
-	0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
-	0x3a, 0x02, 0x38, 0x01, 0x22, 0x99, 0x01, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
-	0x50, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x39, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70,
-	0x65, 0x72, 0x74, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x63, 0x2e,
-	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x2e, 0x50, 0x72, 0x6f, 0x70,
-	0x65, 0x72, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65,
-	0x72, 0x74, 0x79, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x45,
-	0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
-	0x22, 0xb3, 0x01, 0x0a, 0x0f, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b,
-	0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x14,
-	0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61,
-	0x70, 0x70, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e,
-	0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69,
-	0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18,
-	0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x18, 0x0a, 0x07,
-	0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76,
-	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x41, 0x0a, 0x11, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x57,
-	0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e,
-	0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
-	0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x79, 0x0a, 0x0b, 0x48, 0x65, 0x61,
-	0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04,
-	0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74,
-	0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01,
-	0x28, 0x05, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05,
-	0x74, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x69, 0x6d,
-	0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x03, 0x75, 0x72, 0x6c, 0x22, 0x62, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x43, 0x65, 0x6e, 0x74,
-	0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65,
-	0x67, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69,
-	0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5a,
-	0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x76, 0x61, 0x69, 0x6c,
-	0x61, 0x62, 0x6c, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x73, 0x63,
-	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
-
-var (
-	file_servicecenter_proto_rawDescOnce sync.Once
-	file_servicecenter_proto_rawDescData = file_servicecenter_proto_rawDesc
-)
-
-func file_servicecenter_proto_rawDescGZIP() []byte {
-	file_servicecenter_proto_rawDescOnce.Do(func() {
-		file_servicecenter_proto_rawDescData = protoimpl.X.CompressGZIP(file_servicecenter_proto_rawDescData)
-	})
-	return file_servicecenter_proto_rawDescData
-}
-
-var file_servicecenter_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
-var file_servicecenter_proto_goTypes = []interface{}{
-	(*Schema)(nil),               // 0: sc.Schema
-	(*MicroService)(nil),         // 1: sc.MicroService
-	(*MicroServiceInstance)(nil), // 2: sc.MicroServiceInstance
-	(*ServicePath)(nil),          // 3: sc.ServicePath
-	(*MicroServiceKey)(nil),      // 4: sc.MicroServiceKey
-	(*FrameWork)(nil),            // 5: sc.FrameWork
-	(*HealthCheck)(nil),          // 6: sc.HealthCheck
-	(*DataCenterInfo)(nil),       // 7: sc.DataCenterInfo
-	nil,                          // 8: sc.MicroService.PropertiesEntry
-	nil,                          // 9: sc.MicroService.LBStrategyEntry
-	nil,                          // 10: sc.MicroServiceInstance.PropertiesEntry
-	nil,                          // 11: sc.ServicePath.PropertyEntry
-}
-var file_servicecenter_proto_depIdxs = []int32{
-	3,  // 0: sc.MicroService.paths:type_name -> sc.ServicePath
-	8,  // 1: sc.MicroService.properties:type_name -> sc.MicroService.PropertiesEntry
-	4,  // 2: sc.MicroService.providers:type_name -> sc.MicroServiceKey
-	9,  // 3: sc.MicroService.LBStrategy:type_name -> sc.MicroService.LBStrategyEntry
-	5,  // 4: sc.MicroService.framework:type_name -> sc.FrameWork
-	10, // 5: sc.MicroServiceInstance.properties:type_name -> sc.MicroServiceInstance.PropertiesEntry
-	6,  // 6: sc.MicroServiceInstance.healthCheck:type_name -> sc.HealthCheck
-	7,  // 7: sc.MicroServiceInstance.dataCenterInfo:type_name -> sc.DataCenterInfo
-	11, // 8: sc.ServicePath.property:type_name -> sc.ServicePath.PropertyEntry
-	9,  // [9:9] is the sub-list for method output_type
-	9,  // [9:9] is the sub-list for method input_type
-	9,  // [9:9] is the sub-list for extension type_name
-	9,  // [9:9] is the sub-list for extension extendee
-	0,  // [0:9] is the sub-list for field type_name
-}
-
-func init() { file_servicecenter_proto_init() }
-func file_servicecenter_proto_init() {
-	if File_servicecenter_proto != nil {
-		return
-	}
-	if !protoimpl.UnsafeEnabled {
-		file_servicecenter_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Schema); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_servicecenter_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*MicroService); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_servicecenter_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*MicroServiceInstance); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_servicecenter_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ServicePath); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_servicecenter_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*MicroServiceKey); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_servicecenter_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FrameWork); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_servicecenter_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*HealthCheck); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_servicecenter_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DataCenterInfo); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-	}
-	type x struct{}
-	out := protoimpl.TypeBuilder{
-		File: protoimpl.DescBuilder{
-			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
-			RawDescriptor: file_servicecenter_proto_rawDesc,
-			NumEnums:      0,
-			NumMessages:   12,
-			NumExtensions: 0,
-			NumServices:   0,
-		},
-		GoTypes:           file_servicecenter_proto_goTypes,
-		DependencyIndexes: file_servicecenter_proto_depIdxs,
-		MessageInfos:      file_servicecenter_proto_msgTypes,
-	}.Build()
-	File_servicecenter_proto = out.File
-	file_servicecenter_proto_rawDesc = nil
-	file_servicecenter_proto_goTypes = nil
-	file_servicecenter_proto_depIdxs = nil
-}
diff --git a/syncer/proto/sc/servicecenter.proto b/syncer/proto/sc/servicecenter.proto
deleted file mode 100644
index 6738642..0000000
--- a/syncer/proto/sc/servicecenter.proto
+++ /dev/null
@@ -1,77 +0,0 @@
-syntax = "proto3";
-package sc;
-option go_package = ".;sc";
-
-message Schema {
-  string schemaId = 1;
-  string summary = 2;
-  string schema = 3;
-}
-
-message MicroService {
-  string serviceId = 1;
-  string appId = 2;
-  string serviceName = 3;
-  string version = 4;
-  string description = 5;
-  string level = 6;
-  repeated string schemas = 7;
-  repeated ServicePath paths = 10;
-  string status = 8;
-  map<string, string> properties = 9;
-  string timestamp = 11;
-  repeated MicroServiceKey providers = 12;
-  string alias = 13;
-  map<string, string> LBStrategy = 14;
-  string modTimestamp = 15;
-  string environment = 16;
-  string registerBy = 17;
-  FrameWork framework = 18;
-}
-
-message MicroServiceInstance {
-  string instanceId = 1;
-  string serviceId = 2;
-  repeated string endpoints = 3;
-  string hostName = 4;
-  string status = 5;
-  map<string, string> properties = 6;
-  HealthCheck healthCheck = 7;
-  string timestamp = 8;
-  DataCenterInfo dataCenterInfo = 9;
-  string modTimestamp = 10;
-  string version = 11;
-}
-
-message ServicePath {
-  string path = 1;
-  map<string, string> property = 2;
-}
-
-message MicroServiceKey {
-    string tenant = 1;
-    string environment = 2;
-    string appId = 3;
-    string serviceName = 4;
-    string alias = 5;
-    string version = 6;
-}
-
-message FrameWork {
-  string name = 1;
-  string version = 2;
-}
-
-message HealthCheck {
-  string mode = 1;
-  int32 port = 2;
-  int32 interval = 3;
-  int32 times = 4;
-  string url = 5;
-}
-
-message DataCenterInfo {
-  string name = 1;
-  string region = 2;
-  string availableZone = 3;
-}
\ No newline at end of file
diff --git a/syncer/proto/syncer.pb.go b/syncer/proto/syncer.pb.go
deleted file mode 100644
index 00b1f28..0000000
--- a/syncer/proto/syncer.pb.go
+++ /dev/null
@@ -1,1413 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// versions:
-// 	protoc-gen-go v1.25.0
-// 	protoc        v3.11.0
-// source: syncer.proto
-
-package proto
-
-import (
-	context "context"
-	reflect "reflect"
-	sync "sync"
-
-	proto "github.com/golang/protobuf/proto"
-	grpc "google.golang.org/grpc"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
-	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-)
-
-const (
-	// Verify that this generated code is sufficiently up-to-date.
-	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
-	// Verify that runtime/protoimpl is sufficiently up-to-date.
-	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
-)
-
-// This is a compile-time assertion that a sufficiently up-to-date version
-// of the legacy proto package is being used.
-const _ = proto.ProtoPackageIsVersion4
-
-type SyncService_Status int32
-
-const (
-	SyncService_UNKNOWN SyncService_Status = 0
-	SyncService_UP      SyncService_Status = 1
-	SyncService_DOWN    SyncService_Status = 2
-)
-
-// Enum value maps for SyncService_Status.
-var (
-	SyncService_Status_name = map[int32]string{
-		0: "UNKNOWN",
-		1: "UP",
-		2: "DOWN",
-	}
-	SyncService_Status_value = map[string]int32{
-		"UNKNOWN": 0,
-		"UP":      1,
-		"DOWN":    2,
-	}
-)
-
-func (x SyncService_Status) Enum() *SyncService_Status {
-	p := new(SyncService_Status)
-	*p = x
-	return p
-}
-
-func (x SyncService_Status) String() string {
-	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
-}
-
-func (SyncService_Status) Descriptor() protoreflect.EnumDescriptor {
-	return file_syncer_proto_enumTypes[0].Descriptor()
-}
-
-func (SyncService_Status) Type() protoreflect.EnumType {
-	return &file_syncer_proto_enumTypes[0]
-}
-
-func (x SyncService_Status) Number() protoreflect.EnumNumber {
-	return protoreflect.EnumNumber(x)
-}
-
-// Deprecated: Use SyncService_Status.Descriptor instead.
-func (SyncService_Status) EnumDescriptor() ([]byte, []int) {
-	return file_syncer_proto_rawDescGZIP(), []int{5, 0}
-}
-
-type SyncInstance_Status int32
-
-const (
-	SyncInstance_UNKNOWN      SyncInstance_Status = 0
-	SyncInstance_UP           SyncInstance_Status = 1
-	SyncInstance_DOWN         SyncInstance_Status = 2
-	SyncInstance_STARTING     SyncInstance_Status = 3
-	SyncInstance_OUTOFSERVICE SyncInstance_Status = 4
-)
-
-// Enum value maps for SyncInstance_Status.
-var (
-	SyncInstance_Status_name = map[int32]string{
-		0: "UNKNOWN",
-		1: "UP",
-		2: "DOWN",
-		3: "STARTING",
-		4: "OUTOFSERVICE",
-	}
-	SyncInstance_Status_value = map[string]int32{
-		"UNKNOWN":      0,
-		"UP":           1,
-		"DOWN":         2,
-		"STARTING":     3,
-		"OUTOFSERVICE": 4,
-	}
-)
-
-func (x SyncInstance_Status) Enum() *SyncInstance_Status {
-	p := new(SyncInstance_Status)
-	*p = x
-	return p
-}
-
-func (x SyncInstance_Status) String() string {
-	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
-}
-
-func (SyncInstance_Status) Descriptor() protoreflect.EnumDescriptor {
-	return file_syncer_proto_enumTypes[1].Descriptor()
-}
-
-func (SyncInstance_Status) Type() protoreflect.EnumType {
-	return &file_syncer_proto_enumTypes[1]
-}
-
-func (x SyncInstance_Status) Number() protoreflect.EnumNumber {
-	return protoreflect.EnumNumber(x)
-}
-
-// Deprecated: Use SyncInstance_Status.Descriptor instead.
-func (SyncInstance_Status) EnumDescriptor() ([]byte, []int) {
-	return file_syncer_proto_rawDescGZIP(), []int{6, 0}
-}
-
-type HealthCheck_Modes int32
-
-const (
-	HealthCheck_UNKNOWN HealthCheck_Modes = 0
-	HealthCheck_PUSH    HealthCheck_Modes = 1
-	HealthCheck_PULL    HealthCheck_Modes = 2
-)
-
-// Enum value maps for HealthCheck_Modes.
-var (
-	HealthCheck_Modes_name = map[int32]string{
-		0: "UNKNOWN",
-		1: "PUSH",
-		2: "PULL",
-	}
-	HealthCheck_Modes_value = map[string]int32{
-		"UNKNOWN": 0,
-		"PUSH":    1,
-		"PULL":    2,
-	}
-)
-
-func (x HealthCheck_Modes) Enum() *HealthCheck_Modes {
-	p := new(HealthCheck_Modes)
-	*p = x
-	return p
-}
-
-func (x HealthCheck_Modes) String() string {
-	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
-}
-
-func (HealthCheck_Modes) Descriptor() protoreflect.EnumDescriptor {
-	return file_syncer_proto_enumTypes[2].Descriptor()
-}
-
-func (HealthCheck_Modes) Type() protoreflect.EnumType {
-	return &file_syncer_proto_enumTypes[2]
-}
-
-func (x HealthCheck_Modes) Number() protoreflect.EnumNumber {
-	return protoreflect.EnumNumber(x)
-}
-
-// Deprecated: Use HealthCheck_Modes.Descriptor instead.
-func (HealthCheck_Modes) EnumDescriptor() ([]byte, []int) {
-	return file_syncer_proto_rawDescGZIP(), []int{8, 0}
-}
-
-type PullRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	ServiceName string `protobuf:"bytes,1,opt,name=serviceName,proto3" json:"serviceName,omitempty"`
-	Options     string `protobuf:"bytes,2,opt,name=options,proto3" json:"options,omitempty"`
-	Time        string `protobuf:"bytes,3,opt,name=time,proto3" json:"time,omitempty"`
-	Addr        string `protobuf:"bytes,4,opt,name=addr,proto3" json:"addr,omitempty"`
-}
-
-func (x *PullRequest) Reset() {
-	*x = PullRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_syncer_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *PullRequest) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*PullRequest) ProtoMessage() {}
-
-func (x *PullRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_syncer_proto_msgTypes[0]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use PullRequest.ProtoReflect.Descriptor instead.
-func (*PullRequest) Descriptor() ([]byte, []int) {
-	return file_syncer_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *PullRequest) GetServiceName() string {
-	if x != nil {
-		return x.ServiceName
-	}
-	return ""
-}
-
-func (x *PullRequest) GetOptions() string {
-	if x != nil {
-		return x.Options
-	}
-	return ""
-}
-
-func (x *PullRequest) GetTime() string {
-	if x != nil {
-		return x.Time
-	}
-	return ""
-}
-
-func (x *PullRequest) GetAddr() string {
-	if x != nil {
-		return x.Addr
-	}
-	return ""
-}
-
-type IncrementPullRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Addr   string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
-	Length int64  `protobuf:"varint,2,opt,name=length,proto3" json:"length,omitempty"`
-}
-
-func (x *IncrementPullRequest) Reset() {
-	*x = IncrementPullRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_syncer_proto_msgTypes[1]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *IncrementPullRequest) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*IncrementPullRequest) ProtoMessage() {}
-
-func (x *IncrementPullRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_syncer_proto_msgTypes[1]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use IncrementPullRequest.ProtoReflect.Descriptor instead.
-func (*IncrementPullRequest) Descriptor() ([]byte, []int) {
-	return file_syncer_proto_rawDescGZIP(), []int{1}
-}
-
-func (x *IncrementPullRequest) GetAddr() string {
-	if x != nil {
-		return x.Addr
-	}
-	return ""
-}
-
-func (x *IncrementPullRequest) GetLength() int64 {
-	if x != nil {
-		return x.Length
-	}
-	return 0
-}
-
-type DeclareRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
-}
-
-func (x *DeclareRequest) Reset() {
-	*x = DeclareRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_syncer_proto_msgTypes[2]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *DeclareRequest) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*DeclareRequest) ProtoMessage() {}
-
-func (x *DeclareRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_syncer_proto_msgTypes[2]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use DeclareRequest.ProtoReflect.Descriptor instead.
-func (*DeclareRequest) Descriptor() ([]byte, []int) {
-	return file_syncer_proto_rawDescGZIP(), []int{2}
-}
-
-func (x *DeclareRequest) GetAddr() string {
-	if x != nil {
-		return x.Addr
-	}
-	return ""
-}
-
-type DeclareResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	SyncDataLength int64 `protobuf:"varint,1,opt,name=syncDataLength,proto3" json:"syncDataLength,omitempty"`
-}
-
-func (x *DeclareResponse) Reset() {
-	*x = DeclareResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_syncer_proto_msgTypes[3]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *DeclareResponse) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*DeclareResponse) ProtoMessage() {}
-
-func (x *DeclareResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_syncer_proto_msgTypes[3]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use DeclareResponse.ProtoReflect.Descriptor instead.
-func (*DeclareResponse) Descriptor() ([]byte, []int) {
-	return file_syncer_proto_rawDescGZIP(), []int{3}
-}
-
-func (x *DeclareResponse) GetSyncDataLength() int64 {
-	if x != nil {
-		return x.SyncDataLength
-	}
-	return 0
-}
-
-type SyncData struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Services  []*SyncService  `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"`
-	Instances []*SyncInstance `protobuf:"bytes,2,rep,name=instances,proto3" json:"instances,omitempty"`
-}
-
-func (x *SyncData) Reset() {
-	*x = SyncData{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_syncer_proto_msgTypes[4]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *SyncData) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SyncData) ProtoMessage() {}
-
-func (x *SyncData) ProtoReflect() protoreflect.Message {
-	mi := &file_syncer_proto_msgTypes[4]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use SyncData.ProtoReflect.Descriptor instead.
-func (*SyncData) Descriptor() ([]byte, []int) {
-	return file_syncer_proto_rawDescGZIP(), []int{4}
-}
-
-func (x *SyncData) GetServices() []*SyncService {
-	if x != nil {
-		return x.Services
-	}
-	return nil
-}
-
-func (x *SyncData) GetInstances() []*SyncInstance {
-	if x != nil {
-		return x.Instances
-	}
-	return nil
-}
-
-type SyncService struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	ServiceId     string             `protobuf:"bytes,1,opt,name=serviceId,proto3" json:"serviceId,omitempty"`
-	App           string             `protobuf:"bytes,2,opt,name=app,proto3" json:"app,omitempty"`
-	Name          string             `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
-	Version       string             `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"`
-	Status        SyncService_Status `protobuf:"varint,5,opt,name=status,proto3,enum=proto.SyncService_Status" json:"status,omitempty"`
-	DomainProject string             `protobuf:"bytes,6,opt,name=domainProject,proto3" json:"domainProject,omitempty"`
-	Environment   string             `protobuf:"bytes,7,opt,name=environment,proto3" json:"environment,omitempty"`
-	PluginName    string             `protobuf:"bytes,8,opt,name=pluginName,proto3" json:"pluginName,omitempty"`
-	Expansions    []*Expansion       `protobuf:"bytes,9,rep,name=expansions,proto3" json:"expansions,omitempty"`
-}
-
-func (x *SyncService) Reset() {
-	*x = SyncService{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_syncer_proto_msgTypes[5]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *SyncService) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SyncService) ProtoMessage() {}
-
-func (x *SyncService) ProtoReflect() protoreflect.Message {
-	mi := &file_syncer_proto_msgTypes[5]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use SyncService.ProtoReflect.Descriptor instead.
-func (*SyncService) Descriptor() ([]byte, []int) {
-	return file_syncer_proto_rawDescGZIP(), []int{5}
-}
-
-func (x *SyncService) GetServiceId() string {
-	if x != nil {
-		return x.ServiceId
-	}
-	return ""
-}
-
-func (x *SyncService) GetApp() string {
-	if x != nil {
-		return x.App
-	}
-	return ""
-}
-
-func (x *SyncService) GetName() string {
-	if x != nil {
-		return x.Name
-	}
-	return ""
-}
-
-func (x *SyncService) GetVersion() string {
-	if x != nil {
-		return x.Version
-	}
-	return ""
-}
-
-func (x *SyncService) GetStatus() SyncService_Status {
-	if x != nil {
-		return x.Status
-	}
-	return SyncService_UNKNOWN
-}
-
-func (x *SyncService) GetDomainProject() string {
-	if x != nil {
-		return x.DomainProject
-	}
-	return ""
-}
-
-func (x *SyncService) GetEnvironment() string {
-	if x != nil {
-		return x.Environment
-	}
-	return ""
-}
-
-func (x *SyncService) GetPluginName() string {
-	if x != nil {
-		return x.PluginName
-	}
-	return ""
-}
-
-func (x *SyncService) GetExpansions() []*Expansion {
-	if x != nil {
-		return x.Expansions
-	}
-	return nil
-}
-
-type SyncInstance struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	InstanceId  string              `protobuf:"bytes,1,opt,name=instanceId,proto3" json:"instanceId,omitempty"`
-	ServiceId   string              `protobuf:"bytes,2,opt,name=serviceId,proto3" json:"serviceId,omitempty"`
-	Endpoints   []string            `protobuf:"bytes,3,rep,name=endpoints,proto3" json:"endpoints,omitempty"`
-	HostName    string              `protobuf:"bytes,4,opt,name=hostName,proto3" json:"hostName,omitempty"`
-	Status      SyncInstance_Status `protobuf:"varint,5,opt,name=status,proto3,enum=proto.SyncInstance_Status" json:"status,omitempty"`
-	HealthCheck *HealthCheck        `protobuf:"bytes,6,opt,name=healthCheck,proto3" json:"healthCheck,omitempty"`
-	Version     string              `protobuf:"bytes,7,opt,name=version,proto3" json:"version,omitempty"`
-	PluginName  string              `protobuf:"bytes,8,opt,name=pluginName,proto3" json:"pluginName,omitempty"`
-	Expansions  []*Expansion        `protobuf:"bytes,9,rep,name=expansions,proto3" json:"expansions,omitempty"`
-}
-
-func (x *SyncInstance) Reset() {
-	*x = SyncInstance{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_syncer_proto_msgTypes[6]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *SyncInstance) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SyncInstance) ProtoMessage() {}
-
-func (x *SyncInstance) ProtoReflect() protoreflect.Message {
-	mi := &file_syncer_proto_msgTypes[6]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use SyncInstance.ProtoReflect.Descriptor instead.
-func (*SyncInstance) Descriptor() ([]byte, []int) {
-	return file_syncer_proto_rawDescGZIP(), []int{6}
-}
-
-func (x *SyncInstance) GetInstanceId() string {
-	if x != nil {
-		return x.InstanceId
-	}
-	return ""
-}
-
-func (x *SyncInstance) GetServiceId() string {
-	if x != nil {
-		return x.ServiceId
-	}
-	return ""
-}
-
-func (x *SyncInstance) GetEndpoints() []string {
-	if x != nil {
-		return x.Endpoints
-	}
-	return nil
-}
-
-func (x *SyncInstance) GetHostName() string {
-	if x != nil {
-		return x.HostName
-	}
-	return ""
-}
-
-func (x *SyncInstance) GetStatus() SyncInstance_Status {
-	if x != nil {
-		return x.Status
-	}
-	return SyncInstance_UNKNOWN
-}
-
-func (x *SyncInstance) GetHealthCheck() *HealthCheck {
-	if x != nil {
-		return x.HealthCheck
-	}
-	return nil
-}
-
-func (x *SyncInstance) GetVersion() string {
-	if x != nil {
-		return x.Version
-	}
-	return ""
-}
-
-func (x *SyncInstance) GetPluginName() string {
-	if x != nil {
-		return x.PluginName
-	}
-	return ""
-}
-
-func (x *SyncInstance) GetExpansions() []*Expansion {
-	if x != nil {
-		return x.Expansions
-	}
-	return nil
-}
-
-type Expansion struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Kind   string            `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"`
-	Bytes  []byte            `protobuf:"bytes,2,opt,name=bytes,proto3" json:"bytes,omitempty"`
-	Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-}
-
-func (x *Expansion) Reset() {
-	*x = Expansion{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_syncer_proto_msgTypes[7]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *Expansion) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Expansion) ProtoMessage() {}
-
-func (x *Expansion) ProtoReflect() protoreflect.Message {
-	mi := &file_syncer_proto_msgTypes[7]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use Expansion.ProtoReflect.Descriptor instead.
-func (*Expansion) Descriptor() ([]byte, []int) {
-	return file_syncer_proto_rawDescGZIP(), []int{7}
-}
-
-func (x *Expansion) GetKind() string {
-	if x != nil {
-		return x.Kind
-	}
-	return ""
-}
-
-func (x *Expansion) GetBytes() []byte {
-	if x != nil {
-		return x.Bytes
-	}
-	return nil
-}
-
-func (x *Expansion) GetLabels() map[string]string {
-	if x != nil {
-		return x.Labels
-	}
-	return nil
-}
-
-type HealthCheck struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Mode     HealthCheck_Modes `protobuf:"varint,1,opt,name=mode,proto3,enum=proto.HealthCheck_Modes" json:"mode,omitempty"`
-	Port     int32             `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"`
-	Interval int32             `protobuf:"varint,3,opt,name=interval,proto3" json:"interval,omitempty"`
-	Times    int32             `protobuf:"varint,4,opt,name=times,proto3" json:"times,omitempty"`
-	Url      string            `protobuf:"bytes,5,opt,name=url,proto3" json:"url,omitempty"`
-}
-
-func (x *HealthCheck) Reset() {
-	*x = HealthCheck{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_syncer_proto_msgTypes[8]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *HealthCheck) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*HealthCheck) ProtoMessage() {}
-
-func (x *HealthCheck) ProtoReflect() protoreflect.Message {
-	mi := &file_syncer_proto_msgTypes[8]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use HealthCheck.ProtoReflect.Descriptor instead.
-func (*HealthCheck) Descriptor() ([]byte, []int) {
-	return file_syncer_proto_rawDescGZIP(), []int{8}
-}
-
-func (x *HealthCheck) GetMode() HealthCheck_Modes {
-	if x != nil {
-		return x.Mode
-	}
-	return HealthCheck_UNKNOWN
-}
-
-func (x *HealthCheck) GetPort() int32 {
-	if x != nil {
-		return x.Port
-	}
-	return 0
-}
-
-func (x *HealthCheck) GetInterval() int32 {
-	if x != nil {
-		return x.Interval
-	}
-	return 0
-}
-
-func (x *HealthCheck) GetTimes() int32 {
-	if x != nil {
-		return x.Times
-	}
-	return 0
-}
-
-func (x *HealthCheck) GetUrl() string {
-	if x != nil {
-		return x.Url
-	}
-	return ""
-}
-
-type MappingEntry struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	ClusterName string `protobuf:"bytes,1,opt,name=clusterName,proto3" json:"clusterName,omitempty"`
-	//    Tenant tenant = 2;
-	DomainProject string `protobuf:"bytes,2,opt,name=domainProject,proto3" json:"domainProject,omitempty"`
-	OrgServiceID  string `protobuf:"bytes,3,opt,name=orgServiceID,proto3" json:"orgServiceID,omitempty"`
-	OrgInstanceID string `protobuf:"bytes,4,opt,name=orgInstanceID,proto3" json:"orgInstanceID,omitempty"`
-	CurServiceID  string `protobuf:"bytes,5,opt,name=curServiceID,proto3" json:"curServiceID,omitempty"`
-	CurInstanceID string `protobuf:"bytes,6,opt,name=curInstanceID,proto3" json:"curInstanceID,omitempty"`
-}
-
-func (x *MappingEntry) Reset() {
-	*x = MappingEntry{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_syncer_proto_msgTypes[9]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *MappingEntry) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*MappingEntry) ProtoMessage() {}
-
-func (x *MappingEntry) ProtoReflect() protoreflect.Message {
-	mi := &file_syncer_proto_msgTypes[9]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use MappingEntry.ProtoReflect.Descriptor instead.
-func (*MappingEntry) Descriptor() ([]byte, []int) {
-	return file_syncer_proto_rawDescGZIP(), []int{9}
-}
-
-func (x *MappingEntry) GetClusterName() string {
-	if x != nil {
-		return x.ClusterName
-	}
-	return ""
-}
-
-func (x *MappingEntry) GetDomainProject() string {
-	if x != nil {
-		return x.DomainProject
-	}
-	return ""
-}
-
-func (x *MappingEntry) GetOrgServiceID() string {
-	if x != nil {
-		return x.OrgServiceID
-	}
-	return ""
-}
-
-func (x *MappingEntry) GetOrgInstanceID() string {
-	if x != nil {
-		return x.OrgInstanceID
-	}
-	return ""
-}
-
-func (x *MappingEntry) GetCurServiceID() string {
-	if x != nil {
-		return x.CurServiceID
-	}
-	return ""
-}
-
-func (x *MappingEntry) GetCurInstanceID() string {
-	if x != nil {
-		return x.CurInstanceID
-	}
-	return ""
-}
-
-var File_syncer_proto protoreflect.FileDescriptor
-
-var file_syncer_proto_rawDesc = []byte{
-	0x0a, 0x0c, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x71, 0x0a, 0x0b, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e,
-	0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69,
-	0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
-	0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
-	0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
-	0x74, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x04, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x22, 0x42, 0x0a, 0x14, 0x49, 0x6e, 0x63, 0x72,
-	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
-	0x61, 0x64, 0x64, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x24, 0x0a, 0x0e,
-	0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12,
-	0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x64,
-	0x64, 0x72, 0x22, 0x39, 0x0a, 0x0f, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x79, 0x6e, 0x63, 0x44, 0x61, 0x74,
-	0x61, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73,
-	0x79, 0x6e, 0x63, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x6d, 0x0a,
-	0x08, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2e, 0x0a, 0x08, 0x73, 0x65, 0x72,
-	0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52,
-	0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x09, 0x69, 0x6e, 0x73,
-	0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63,
-	0x65, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0xe1, 0x02, 0x0a,
-	0x0b, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09,
-	0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70,
-	0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x70, 0x12, 0x12, 0x0a, 0x04,
-	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
-	0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x06, 0x73, 0x74,
-	0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53,
-	0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a,
-	0x0d, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x06,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x6a,
-	0x65, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65,
-	0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f,
-	0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e,
-	0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69,
-	0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, 0x70,
-	0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x27, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75,
-	0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x06,
-	0x0a, 0x02, 0x55, 0x50, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x02,
-	0x22, 0xa5, 0x03, 0x0a, 0x0c, 0x53, 0x79, 0x6e, 0x63, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63,
-	0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49,
-	0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12,
-	0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03,
-	0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x1a, 0x0a,
-	0x08, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x08, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61,
-	0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x53,
-	0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x34, 0x0a,
-	0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x06, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74,
-	0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68,
-	0x65, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a,
-	0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a,
-	0x0a, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28,
-	0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73,
-	0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22,
-	0x47, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b,
-	0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x55, 0x50, 0x10, 0x01, 0x12, 0x08,
-	0x0a, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52,
-	0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x55, 0x54, 0x4f, 0x46, 0x53,
-	0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x04, 0x22, 0xa6, 0x01, 0x0a, 0x09, 0x45, 0x78, 0x70,
-	0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x79,
-	0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73,
-	0x12, 0x34, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
-	0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06,
-	0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73,
-	0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
-	0x01, 0x22, 0xbd, 0x01, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63,
-	0x6b, 0x12, 0x2c, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32,
-	0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68,
-	0x65, 0x63, 0x6b, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12,
-	0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70,
-	0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12,
-	0x14, 0x0a, 0x05, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05,
-	0x74, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x28, 0x0a, 0x05, 0x4d, 0x6f, 0x64, 0x65, 0x73,
-	0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a,
-	0x04, 0x50, 0x55, 0x53, 0x48, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x55, 0x4c, 0x4c, 0x10,
-	0x02, 0x22, 0xea, 0x01, 0x0a, 0x0c, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74,
-	0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d,
-	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
-	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x72,
-	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x6f, 0x6d,
-	0x61, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72,
-	0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x0c, 0x6f, 0x72, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x44, 0x12, 0x24,
-	0x0a, 0x0d, 0x6f, 0x72, 0x67, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x18,
-	0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x72, 0x67, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e,
-	0x63, 0x65, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69,
-	0x63, 0x65, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x53,
-	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x49,
-	0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0d, 0x63, 0x75, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x32, 0xbc,
-	0x01, 0x0a, 0x04, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x2d, 0x0a, 0x04, 0x50, 0x75, 0x6c, 0x6c, 0x12,
-	0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63,
-	0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x11, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72,
-	0x65, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x15, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x61,
-	0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x0d,
-	0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x6c, 0x6c, 0x12, 0x1b, 0x2e,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50,
-	0x75, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x42, 0x09, 0x5a,
-	0x07, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
-
-var (
-	file_syncer_proto_rawDescOnce sync.Once
-	file_syncer_proto_rawDescData = file_syncer_proto_rawDesc
-)
-
-func file_syncer_proto_rawDescGZIP() []byte {
-	file_syncer_proto_rawDescOnce.Do(func() {
-		file_syncer_proto_rawDescData = protoimpl.X.CompressGZIP(file_syncer_proto_rawDescData)
-	})
-	return file_syncer_proto_rawDescData
-}
-
-var file_syncer_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
-var file_syncer_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
-var file_syncer_proto_goTypes = []interface{}{
-	(SyncService_Status)(0),      // 0: proto.SyncService.Status
-	(SyncInstance_Status)(0),     // 1: proto.SyncInstance.Status
-	(HealthCheck_Modes)(0),       // 2: proto.HealthCheck.Modes
-	(*PullRequest)(nil),          // 3: proto.PullRequest
-	(*IncrementPullRequest)(nil), // 4: proto.IncrementPullRequest
-	(*DeclareRequest)(nil),       // 5: proto.DeclareRequest
-	(*DeclareResponse)(nil),      // 6: proto.DeclareResponse
-	(*SyncData)(nil),             // 7: proto.SyncData
-	(*SyncService)(nil),          // 8: proto.SyncService
-	(*SyncInstance)(nil),         // 9: proto.SyncInstance
-	(*Expansion)(nil),            // 10: proto.Expansion
-	(*HealthCheck)(nil),          // 11: proto.HealthCheck
-	(*MappingEntry)(nil),         // 12: proto.MappingEntry
-	nil,                          // 13: proto.Expansion.LabelsEntry
-}
-var file_syncer_proto_depIdxs = []int32{
-	8,  // 0: proto.SyncData.services:type_name -> proto.SyncService
-	9,  // 1: proto.SyncData.instances:type_name -> proto.SyncInstance
-	0,  // 2: proto.SyncService.status:type_name -> proto.SyncService.Status
-	10, // 3: proto.SyncService.expansions:type_name -> proto.Expansion
-	1,  // 4: proto.SyncInstance.status:type_name -> proto.SyncInstance.Status
-	11, // 5: proto.SyncInstance.healthCheck:type_name -> proto.HealthCheck
-	10, // 6: proto.SyncInstance.expansions:type_name -> proto.Expansion
-	13, // 7: proto.Expansion.labels:type_name -> proto.Expansion.LabelsEntry
-	2,  // 8: proto.HealthCheck.mode:type_name -> proto.HealthCheck.Modes
-	3,  // 9: proto.Sync.Pull:input_type -> proto.PullRequest
-	5,  // 10: proto.Sync.DeclareDataLength:input_type -> proto.DeclareRequest
-	4,  // 11: proto.Sync.IncrementPull:input_type -> proto.IncrementPullRequest
-	7,  // 12: proto.Sync.Pull:output_type -> proto.SyncData
-	6,  // 13: proto.Sync.DeclareDataLength:output_type -> proto.DeclareResponse
-	7,  // 14: proto.Sync.IncrementPull:output_type -> proto.SyncData
-	12, // [12:15] is the sub-list for method output_type
-	9,  // [9:12] is the sub-list for method input_type
-	9,  // [9:9] is the sub-list for extension type_name
-	9,  // [9:9] is the sub-list for extension extendee
-	0,  // [0:9] is the sub-list for field type_name
-}
-
-func init() { file_syncer_proto_init() }
-func file_syncer_proto_init() {
-	if File_syncer_proto != nil {
-		return
-	}
-	if !protoimpl.UnsafeEnabled {
-		file_syncer_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*PullRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_syncer_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IncrementPullRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_syncer_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeclareRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_syncer_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DeclareResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_syncer_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SyncData); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_syncer_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SyncService); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_syncer_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SyncInstance); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_syncer_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Expansion); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
... 5184 lines suppressed ...