[VOL-3996] Updating Image Protos

Change-Id: Id293cca9ea9b68ec337e73e9d4a9e3ad444e335c
diff --git a/.gitignore b/.gitignore
index 66eab6e..1bd5b4e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,3 +23,5 @@
 *coverage.xml
 *results.xml
 
+#editors
+.idea/
diff --git a/VERSION b/VERSION
index ee74734..627a3f4 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-4.1.0
+4.1.1
diff --git a/go/inter_container/inter_container.pb.go b/go/inter_container/inter_container.pb.go
index a0957f1..04f2b14 100644
--- a/go/inter_container/inter_container.pb.go
+++ b/go/inter_container/inter_container.pb.go
@@ -162,6 +162,15 @@
 // Membership from public import voltha_protos/voltha.proto
 type Membership = voltha.Membership
 
+// DeviceImageDownloadRequest from public import voltha_protos/voltha.proto
+type DeviceImageDownloadRequest = voltha.DeviceImageDownloadRequest
+
+// DeviceImageRequest from public import voltha_protos/voltha.proto
+type DeviceImageRequest = voltha.DeviceImageRequest
+
+// DeviceImageResponse from public import voltha_protos/voltha.proto
+type DeviceImageResponse = voltha.DeviceImageResponse
+
 // FlowMetadata from public import voltha_protos/voltha.proto
 type FlowMetadata = voltha.FlowMetadata
 
diff --git a/go/voltha/device.pb.go b/go/voltha/device.pb.go
index 2499fd1..957af8f 100644
--- a/go/voltha/device.pb.go
+++ b/go/voltha/device.pb.go
@@ -91,7 +91,7 @@
 }
 
 func (ImageDownload_ImageDownloadState) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{7, 0}
+	return fileDescriptor_200940f73d155856, []int{6, 0}
 }
 
 type ImageDownload_ImageDownloadFailureReason int32
@@ -128,7 +128,7 @@
 }
 
 func (ImageDownload_ImageDownloadFailureReason) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{7, 1}
+	return fileDescriptor_200940f73d155856, []int{6, 1}
 }
 
 type ImageDownload_ImageActivateState int32
@@ -165,7 +165,151 @@
 }
 
 func (ImageDownload_ImageActivateState) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{7, 2}
+	return fileDescriptor_200940f73d155856, []int{6, 2}
+}
+
+type ImageState_ImageDownloadState int32
+
+const (
+	ImageState_DOWNLOAD_UNKNOWN     ImageState_ImageDownloadState = 0
+	ImageState_DOWNLOAD_SUCCEEDED   ImageState_ImageDownloadState = 1
+	ImageState_DOWNLOAD_REQUESTED   ImageState_ImageDownloadState = 2
+	ImageState_DOWNLOAD_STARTED     ImageState_ImageDownloadState = 3
+	ImageState_DOWNLOAD_FAILED      ImageState_ImageDownloadState = 4
+	ImageState_DOWNLOAD_UNSUPPORTED ImageState_ImageDownloadState = 5
+	ImageState_DOWNLOAD_CANCELLING  ImageState_ImageDownloadState = 6
+	ImageState_DOWNLOAD_CANCELLED   ImageState_ImageDownloadState = 7
+)
+
+var ImageState_ImageDownloadState_name = map[int32]string{
+	0: "DOWNLOAD_UNKNOWN",
+	1: "DOWNLOAD_SUCCEEDED",
+	2: "DOWNLOAD_REQUESTED",
+	3: "DOWNLOAD_STARTED",
+	4: "DOWNLOAD_FAILED",
+	5: "DOWNLOAD_UNSUPPORTED",
+	6: "DOWNLOAD_CANCELLING",
+	7: "DOWNLOAD_CANCELLED",
+}
+
+var ImageState_ImageDownloadState_value = map[string]int32{
+	"DOWNLOAD_UNKNOWN":     0,
+	"DOWNLOAD_SUCCEEDED":   1,
+	"DOWNLOAD_REQUESTED":   2,
+	"DOWNLOAD_STARTED":     3,
+	"DOWNLOAD_FAILED":      4,
+	"DOWNLOAD_UNSUPPORTED": 5,
+	"DOWNLOAD_CANCELLING":  6,
+	"DOWNLOAD_CANCELLED":   7,
+}
+
+func (x ImageState_ImageDownloadState) String() string {
+	return proto.EnumName(ImageState_ImageDownloadState_name, int32(x))
+}
+
+func (ImageState_ImageDownloadState) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{12, 0}
+}
+
+type ImageState_ImageFailureReason int32
+
+const (
+	ImageState_NO_ERROR               ImageState_ImageFailureReason = 0
+	ImageState_INVALID_URL            ImageState_ImageFailureReason = 1
+	ImageState_DEVICE_BUSY            ImageState_ImageFailureReason = 2
+	ImageState_INSUFFICIENT_SPACE     ImageState_ImageFailureReason = 3
+	ImageState_UNKNOWN_ERROR          ImageState_ImageFailureReason = 4
+	ImageState_CANCELLED_ON_REQUEST   ImageState_ImageFailureReason = 5
+	ImageState_CANCELLED_ON_ONU_STATE ImageState_ImageFailureReason = 6
+	ImageState_VENDOR_DEVICE_MISMATCH ImageState_ImageFailureReason = 7
+	ImageState_OMCI_TRANSFER_ERROR    ImageState_ImageFailureReason = 8
+	ImageState_IMAGE_REFUSED_BY_ONU   ImageState_ImageFailureReason = 9
+)
+
+var ImageState_ImageFailureReason_name = map[int32]string{
+	0: "NO_ERROR",
+	1: "INVALID_URL",
+	2: "DEVICE_BUSY",
+	3: "INSUFFICIENT_SPACE",
+	4: "UNKNOWN_ERROR",
+	5: "CANCELLED_ON_REQUEST",
+	6: "CANCELLED_ON_ONU_STATE",
+	7: "VENDOR_DEVICE_MISMATCH",
+	8: "OMCI_TRANSFER_ERROR",
+	9: "IMAGE_REFUSED_BY_ONU",
+}
+
+var ImageState_ImageFailureReason_value = map[string]int32{
+	"NO_ERROR":               0,
+	"INVALID_URL":            1,
+	"DEVICE_BUSY":            2,
+	"INSUFFICIENT_SPACE":     3,
+	"UNKNOWN_ERROR":          4,
+	"CANCELLED_ON_REQUEST":   5,
+	"CANCELLED_ON_ONU_STATE": 6,
+	"VENDOR_DEVICE_MISMATCH": 7,
+	"OMCI_TRANSFER_ERROR":    8,
+	"IMAGE_REFUSED_BY_ONU":   9,
+}
+
+func (x ImageState_ImageFailureReason) String() string {
+	return proto.EnumName(ImageState_ImageFailureReason_name, int32(x))
+}
+
+func (ImageState_ImageFailureReason) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{12, 1}
+}
+
+type ImageState_ImageActivationState int32
+
+const (
+	ImageState_IMAGE_UNKNOWN             ImageState_ImageActivationState = 0
+	ImageState_IMAGE_INACTIVE            ImageState_ImageActivationState = 1
+	ImageState_IMAGE_ACTIVATING          ImageState_ImageActivationState = 2
+	ImageState_IMAGE_ACTIVE              ImageState_ImageActivationState = 3
+	ImageState_IMAGE_COMMITTING          ImageState_ImageActivationState = 4
+	ImageState_IMAGE_COMMITTED           ImageState_ImageActivationState = 5
+	ImageState_IMAGE_ACTIVATION_ABORTING ImageState_ImageActivationState = 6
+	ImageState_IMAGE_ACTIVATION_ABORTED  ImageState_ImageActivationState = 7
+	ImageState_IMAGE_COMMIT_ABORTING     ImageState_ImageActivationState = 8
+	ImageState_IMAGE_COMMIT_ABORTED      ImageState_ImageActivationState = 9
+	ImageState_IMAGE_DOWNLOADING         ImageState_ImageActivationState = 10
+)
+
+var ImageState_ImageActivationState_name = map[int32]string{
+	0:  "IMAGE_UNKNOWN",
+	1:  "IMAGE_INACTIVE",
+	2:  "IMAGE_ACTIVATING",
+	3:  "IMAGE_ACTIVE",
+	4:  "IMAGE_COMMITTING",
+	5:  "IMAGE_COMMITTED",
+	6:  "IMAGE_ACTIVATION_ABORTING",
+	7:  "IMAGE_ACTIVATION_ABORTED",
+	8:  "IMAGE_COMMIT_ABORTING",
+	9:  "IMAGE_COMMIT_ABORTED",
+	10: "IMAGE_DOWNLOADING",
+}
+
+var ImageState_ImageActivationState_value = map[string]int32{
+	"IMAGE_UNKNOWN":             0,
+	"IMAGE_INACTIVE":            1,
+	"IMAGE_ACTIVATING":          2,
+	"IMAGE_ACTIVE":              3,
+	"IMAGE_COMMITTING":          4,
+	"IMAGE_COMMITTED":           5,
+	"IMAGE_ACTIVATION_ABORTING": 6,
+	"IMAGE_ACTIVATION_ABORTED":  7,
+	"IMAGE_COMMIT_ABORTING":     8,
+	"IMAGE_COMMIT_ABORTED":      9,
+	"IMAGE_DOWNLOADING":         10,
+}
+
+func (x ImageState_ImageActivationState) String() string {
+	return proto.EnumName(ImageState_ImageActivationState_name, int32(x))
+}
+
+func (ImageState_ImageActivationState) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{12, 2}
 }
 
 type Port_PortType int32
@@ -205,7 +349,7 @@
 }
 
 func (Port_PortType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{9, 0}
+	return fileDescriptor_200940f73d155856, []int{13, 0}
 }
 
 type SimulateAlarmRequest_OperationType int32
@@ -230,7 +374,7 @@
 }
 
 func (SimulateAlarmRequest_OperationType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{13, 0}
+	return fileDescriptor_200940f73d155856, []int{17, 0}
 }
 
 // A Device Type
@@ -581,26 +725,47 @@
 	return 0
 }
 
-// Describes instance of software image on the device
+//Object representing an image
 type Image struct {
-	Name            string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
-	Version         string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
-	Hash            string `protobuf:"bytes,3,opt,name=hash,proto3" json:"hash,omitempty"`
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// Version, this is the sole identifier of the image. it's the vendor specified OMCI version
+	// must be known at the time of initiating a download, activate, commit image on an onu.
+	Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
+	// hash of the image to be verified against
+	// Deprecated in voltha 2.8, will be removed
+	Hash uint32 `protobuf:"varint,3,opt,name=hash,proto3" json:"hash,omitempty"`
+	// Deprecated in voltha 2.8, will be removed
 	InstallDatetime string `protobuf:"bytes,4,opt,name=install_datetime,json=installDatetime,proto3" json:"install_datetime,omitempty"`
 	// The active software image is one that is currently loaded and executing
 	// in the ONU or circuit pack. Under normal operation, one software image
 	// is always active while the other is inactive. Under no circumstances are
 	// both software images allowed to be active at the same time
+	// Deprecated in voltha 2.8, will be removed
 	IsActive bool `protobuf:"varint,5,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"`
 	// The committed software image is loaded and executed upon reboot of the
 	// ONU and/or circuit pack. During normal operation, one software image is
 	// always committed, while the other is uncommitted.
+	// Deprecated in voltha 2.8, will be removed
 	IsCommitted bool `protobuf:"varint,6,opt,name=is_committed,json=isCommitted,proto3" json:"is_committed,omitempty"`
 	// A software image is valid if it has been verified to be an executable
 	// code image. The verification mechanism is not subject to standardization;
 	// however, it should include at least a data integrity (e.g., CRC) check of
 	// the entire code image.
-	IsValid              bool     `protobuf:"varint,7,opt,name=is_valid,json=isValid,proto3" json:"is_valid,omitempty"`
+	// Deprecated in voltha 2.8, will be removed
+	IsValid bool `protobuf:"varint,7,opt,name=is_valid,json=isValid,proto3" json:"is_valid,omitempty"`
+	// URL where the image is available
+	// URL MUST be fully qualified,
+	// including filename, username and password
+	Url string `protobuf:"bytes,8,opt,name=url,proto3" json:"url,omitempty"`
+	// Represents the vendor/device mfr
+	// Needs to match the vendor of the device the image will be installed on
+	// optional, if not matched no check will be performed
+	Vendor string `protobuf:"bytes,9,opt,name=vendor,proto3" json:"vendor,omitempty"`
+	// Represents the ONU Image CRC value.
+	// Default to value 0 if not specified.
+	// If different then 0 it's used to verify the image retrieved from outside before sending it to the ONU.
+	// Calculation of this needs to be done according to ITU-T I.363.5 as per OMCI spec (section A.2.27)
+	Crc32                uint32   `protobuf:"varint,10,opt,name=crc32,proto3" json:"crc32,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
@@ -645,11 +810,11 @@
 	return ""
 }
 
-func (m *Image) GetHash() string {
+func (m *Image) GetHash() uint32 {
 	if m != nil {
 		return m.Hash
 	}
-	return ""
+	return 0
 }
 
 func (m *Image) GetInstallDatetime() string {
@@ -680,47 +845,29 @@
 	return false
 }
 
-// List of software on the device
-type Images struct {
-	Image                []*Image `protobuf:"bytes,1,rep,name=image,proto3" json:"image,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
-}
-
-func (m *Images) Reset()         { *m = Images{} }
-func (m *Images) String() string { return proto.CompactTextString(m) }
-func (*Images) ProtoMessage()    {}
-func (*Images) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{6}
-}
-
-func (m *Images) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_Images.Unmarshal(m, b)
-}
-func (m *Images) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_Images.Marshal(b, m, deterministic)
-}
-func (m *Images) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Images.Merge(m, src)
-}
-func (m *Images) XXX_Size() int {
-	return xxx_messageInfo_Images.Size(m)
-}
-func (m *Images) XXX_DiscardUnknown() {
-	xxx_messageInfo_Images.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Images proto.InternalMessageInfo
-
-func (m *Images) GetImage() []*Image {
+func (m *Image) GetUrl() string {
 	if m != nil {
-		return m.Image
+		return m.Url
 	}
-	return nil
+	return ""
 }
 
-//TODO: ImageDownload is not actively used (05/19/2020).  When this is tackled, can remove extra/unnecessary fields.
+func (m *Image) GetVendor() string {
+	if m != nil {
+		return m.Vendor
+	}
+	return ""
+}
+
+func (m *Image) GetCrc32() uint32 {
+	if m != nil {
+		return m.Crc32
+	}
+	return 0
+}
+
+// Older version of the API please see DeviceImageDownloadRequest
+// Deprecated in voltha 2.8, will be removed
 type ImageDownload struct {
 	// Device Identifier
 	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
@@ -758,7 +905,7 @@
 func (m *ImageDownload) String() string { return proto.CompactTextString(m) }
 func (*ImageDownload) ProtoMessage()    {}
 func (*ImageDownload) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{7}
+	return fileDescriptor_200940f73d155856, []int{6}
 }
 
 func (m *ImageDownload) XXX_Unmarshal(b []byte) error {
@@ -870,6 +1017,7 @@
 	return 0
 }
 
+// Deprecated in voltha 2.8, will be removed
 type ImageDownloads struct {
 	Items                []*ImageDownload `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"`
 	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
@@ -881,7 +1029,7 @@
 func (m *ImageDownloads) String() string { return proto.CompactTextString(m) }
 func (*ImageDownloads) ProtoMessage()    {}
 func (*ImageDownloads) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{8}
+	return fileDescriptor_200940f73d155856, []int{7}
 }
 
 func (m *ImageDownloads) XXX_Unmarshal(b []byte) error {
@@ -909,6 +1057,282 @@
 	return nil
 }
 
+type Images struct {
+	Image                []*Image `protobuf:"bytes,1,rep,name=image,proto3" json:"image,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Images) Reset()         { *m = Images{} }
+func (m *Images) String() string { return proto.CompactTextString(m) }
+func (*Images) ProtoMessage()    {}
+func (*Images) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{8}
+}
+
+func (m *Images) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Images.Unmarshal(m, b)
+}
+func (m *Images) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Images.Marshal(b, m, deterministic)
+}
+func (m *Images) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Images.Merge(m, src)
+}
+func (m *Images) XXX_Size() int {
+	return xxx_messageInfo_Images.Size(m)
+}
+func (m *Images) XXX_DiscardUnknown() {
+	xxx_messageInfo_Images.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Images proto.InternalMessageInfo
+
+func (m *Images) GetImage() []*Image {
+	if m != nil {
+		return m.Image
+	}
+	return nil
+}
+
+// OnuImage represents the OMCI information as per OMCI spec
+// the information will be populates exactly as extracted from the device.
+type OnuImage struct {
+	//image version
+	Version     string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
+	IsCommited  bool   `protobuf:"varint,2,opt,name=isCommited,proto3" json:"isCommited,omitempty"`
+	IsActive    bool   `protobuf:"varint,3,opt,name=isActive,proto3" json:"isActive,omitempty"`
+	IsValid     bool   `protobuf:"varint,4,opt,name=isValid,proto3" json:"isValid,omitempty"`
+	ProductCode string `protobuf:"bytes,5,opt,name=productCode,proto3" json:"productCode,omitempty"`
+	// Hash is computed by the ONU and is optional as per OMCI spec (paragraph 9.1.4)
+	// No assumption should be made on the existence of this attribute at any time.
+	Hash                 string   `protobuf:"bytes,6,opt,name=hash,proto3" json:"hash,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OnuImage) Reset()         { *m = OnuImage{} }
+func (m *OnuImage) String() string { return proto.CompactTextString(m) }
+func (*OnuImage) ProtoMessage()    {}
+func (*OnuImage) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{9}
+}
+
+func (m *OnuImage) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OnuImage.Unmarshal(m, b)
+}
+func (m *OnuImage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OnuImage.Marshal(b, m, deterministic)
+}
+func (m *OnuImage) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OnuImage.Merge(m, src)
+}
+func (m *OnuImage) XXX_Size() int {
+	return xxx_messageInfo_OnuImage.Size(m)
+}
+func (m *OnuImage) XXX_DiscardUnknown() {
+	xxx_messageInfo_OnuImage.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OnuImage proto.InternalMessageInfo
+
+func (m *OnuImage) GetVersion() string {
+	if m != nil {
+		return m.Version
+	}
+	return ""
+}
+
+func (m *OnuImage) GetIsCommited() bool {
+	if m != nil {
+		return m.IsCommited
+	}
+	return false
+}
+
+func (m *OnuImage) GetIsActive() bool {
+	if m != nil {
+		return m.IsActive
+	}
+	return false
+}
+
+func (m *OnuImage) GetIsValid() bool {
+	if m != nil {
+		return m.IsValid
+	}
+	return false
+}
+
+func (m *OnuImage) GetProductCode() string {
+	if m != nil {
+		return m.ProductCode
+	}
+	return ""
+}
+
+func (m *OnuImage) GetHash() string {
+	if m != nil {
+		return m.Hash
+	}
+	return ""
+}
+
+type OnuImages struct {
+	Items                []*OnuImage `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *OnuImages) Reset()         { *m = OnuImages{} }
+func (m *OnuImages) String() string { return proto.CompactTextString(m) }
+func (*OnuImages) ProtoMessage()    {}
+func (*OnuImages) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{10}
+}
+
+func (m *OnuImages) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OnuImages.Unmarshal(m, b)
+}
+func (m *OnuImages) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OnuImages.Marshal(b, m, deterministic)
+}
+func (m *OnuImages) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OnuImages.Merge(m, src)
+}
+func (m *OnuImages) XXX_Size() int {
+	return xxx_messageInfo_OnuImages.Size(m)
+}
+func (m *OnuImages) XXX_DiscardUnknown() {
+	xxx_messageInfo_OnuImages.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OnuImages proto.InternalMessageInfo
+
+func (m *OnuImages) GetItems() []*OnuImage {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+type DeviceImageState struct {
+	DeviceId             string      `protobuf:"bytes,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
+	ImageState           *ImageState `protobuf:"bytes,2,opt,name=imageState,proto3" json:"imageState,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *DeviceImageState) Reset()         { *m = DeviceImageState{} }
+func (m *DeviceImageState) String() string { return proto.CompactTextString(m) }
+func (*DeviceImageState) ProtoMessage()    {}
+func (*DeviceImageState) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{11}
+}
+
+func (m *DeviceImageState) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceImageState.Unmarshal(m, b)
+}
+func (m *DeviceImageState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceImageState.Marshal(b, m, deterministic)
+}
+func (m *DeviceImageState) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceImageState.Merge(m, src)
+}
+func (m *DeviceImageState) XXX_Size() int {
+	return xxx_messageInfo_DeviceImageState.Size(m)
+}
+func (m *DeviceImageState) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceImageState.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceImageState proto.InternalMessageInfo
+
+func (m *DeviceImageState) GetDeviceId() string {
+	if m != nil {
+		return m.DeviceId
+	}
+	return ""
+}
+
+func (m *DeviceImageState) GetImageState() *ImageState {
+	if m != nil {
+		return m.ImageState
+	}
+	return nil
+}
+
+type ImageState struct {
+	// image version
+	Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
+	// Download state
+	DownloadState ImageState_ImageDownloadState `protobuf:"varint,2,opt,name=download_state,json=downloadState,proto3,enum=voltha.ImageState_ImageDownloadState" json:"download_state,omitempty"`
+	// Image Operation Failure reason (use for both Download and Activate)
+	Reason ImageState_ImageFailureReason `protobuf:"varint,3,opt,name=reason,proto3,enum=voltha.ImageState_ImageFailureReason" json:"reason,omitempty"`
+	// Image activation state
+	ImageState           ImageState_ImageActivationState `protobuf:"varint,4,opt,name=image_state,json=imageState,proto3,enum=voltha.ImageState_ImageActivationState" json:"image_state,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *ImageState) Reset()         { *m = ImageState{} }
+func (m *ImageState) String() string { return proto.CompactTextString(m) }
+func (*ImageState) ProtoMessage()    {}
+func (*ImageState) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{12}
+}
+
+func (m *ImageState) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ImageState.Unmarshal(m, b)
+}
+func (m *ImageState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ImageState.Marshal(b, m, deterministic)
+}
+func (m *ImageState) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ImageState.Merge(m, src)
+}
+func (m *ImageState) XXX_Size() int {
+	return xxx_messageInfo_ImageState.Size(m)
+}
+func (m *ImageState) XXX_DiscardUnknown() {
+	xxx_messageInfo_ImageState.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ImageState proto.InternalMessageInfo
+
+func (m *ImageState) GetVersion() string {
+	if m != nil {
+		return m.Version
+	}
+	return ""
+}
+
+func (m *ImageState) GetDownloadState() ImageState_ImageDownloadState {
+	if m != nil {
+		return m.DownloadState
+	}
+	return ImageState_DOWNLOAD_UNKNOWN
+}
+
+func (m *ImageState) GetReason() ImageState_ImageFailureReason {
+	if m != nil {
+		return m.Reason
+	}
+	return ImageState_NO_ERROR
+}
+
+func (m *ImageState) GetImageState() ImageState_ImageActivationState {
+	if m != nil {
+		return m.ImageState
+	}
+	return ImageState_IMAGE_UNKNOWN
+}
+
 type Port struct {
 	PortNo     uint32                  `protobuf:"varint,1,opt,name=port_no,json=portNo,proto3" json:"port_no,omitempty"`
 	Label      string                  `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"`
@@ -936,7 +1360,7 @@
 func (m *Port) String() string { return proto.CompactTextString(m) }
 func (*Port) ProtoMessage()    {}
 func (*Port) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{9}
+	return fileDescriptor_200940f73d155856, []int{13}
 }
 
 func (m *Port) XXX_Unmarshal(b []byte) error {
@@ -1067,7 +1491,7 @@
 func (m *Port_PeerPort) String() string { return proto.CompactTextString(m) }
 func (*Port_PeerPort) ProtoMessage()    {}
 func (*Port_PeerPort) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{9, 0}
+	return fileDescriptor_200940f73d155856, []int{13, 0}
 }
 
 func (m *Port_PeerPort) XXX_Unmarshal(b []byte) error {
@@ -1113,7 +1537,7 @@
 func (m *Ports) String() string { return proto.CompactTextString(m) }
 func (*Ports) ProtoMessage()    {}
 func (*Ports) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{10}
+	return fileDescriptor_200940f73d155856, []int{14}
 }
 
 func (m *Ports) XXX_Unmarshal(b []byte) error {
@@ -1163,7 +1587,7 @@
 	Images       *Images `protobuf:"bytes,9,opt,name=images,proto3" json:"images,omitempty"`
 	SerialNumber string  `protobuf:"bytes,10,opt,name=serial_number,json=serialNumber,proto3" json:"serial_number,omitempty"`
 	VendorId     string  `protobuf:"bytes,24,opt,name=vendor_id,json=vendorId,proto3" json:"vendor_id,omitempty"`
-	// Addapter that takes care of device
+	// Adapter that takes care of device
 	Adapter string `protobuf:"bytes,11,opt,name=adapter,proto3" json:"adapter,omitempty"`
 	// Device contact on vlan (if 0, no vlan)
 	Vlan uint32 `protobuf:"varint,12,opt,name=vlan,proto3" json:"vlan,omitempty"`
@@ -1195,7 +1619,7 @@
 func (m *Device) String() string { return proto.CompactTextString(m) }
 func (*Device) ProtoMessage()    {}
 func (*Device) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{11}
+	return fileDescriptor_200940f73d155856, []int{15}
 }
 
 func (m *Device) XXX_Unmarshal(b []byte) error {
@@ -1460,7 +1884,7 @@
 func (m *Device_ProxyAddress) String() string { return proto.CompactTextString(m) }
 func (*Device_ProxyAddress) ProtoMessage()    {}
 func (*Device_ProxyAddress) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{11, 0}
+	return fileDescriptor_200940f73d155856, []int{15, 0}
 }
 
 func (m *Device_ProxyAddress) XXX_Unmarshal(b []byte) error {
@@ -1541,7 +1965,7 @@
 func (m *Devices) String() string { return proto.CompactTextString(m) }
 func (*Devices) ProtoMessage()    {}
 func (*Devices) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{12}
+	return fileDescriptor_200940f73d155856, []int{16}
 }
 
 func (m *Devices) XXX_Unmarshal(b []byte) error {
@@ -1590,7 +2014,7 @@
 func (m *SimulateAlarmRequest) String() string { return proto.CompactTextString(m) }
 func (*SimulateAlarmRequest) ProtoMessage()    {}
 func (*SimulateAlarmRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_200940f73d155856, []int{13}
+	return fileDescriptor_200940f73d155856, []int{17}
 }
 
 func (m *SimulateAlarmRequest) XXX_Unmarshal(b []byte) error {
@@ -1686,6 +2110,9 @@
 	proto.RegisterEnum("voltha.ImageDownload_ImageDownloadState", ImageDownload_ImageDownloadState_name, ImageDownload_ImageDownloadState_value)
 	proto.RegisterEnum("voltha.ImageDownload_ImageDownloadFailureReason", ImageDownload_ImageDownloadFailureReason_name, ImageDownload_ImageDownloadFailureReason_value)
 	proto.RegisterEnum("voltha.ImageDownload_ImageActivateState", ImageDownload_ImageActivateState_name, ImageDownload_ImageActivateState_value)
+	proto.RegisterEnum("voltha.ImageState_ImageDownloadState", ImageState_ImageDownloadState_name, ImageState_ImageDownloadState_value)
+	proto.RegisterEnum("voltha.ImageState_ImageFailureReason", ImageState_ImageFailureReason_name, ImageState_ImageFailureReason_value)
+	proto.RegisterEnum("voltha.ImageState_ImageActivationState", ImageState_ImageActivationState_name, ImageState_ImageActivationState_value)
 	proto.RegisterEnum("voltha.Port_PortType", Port_PortType_name, Port_PortType_value)
 	proto.RegisterEnum("voltha.SimulateAlarmRequest_OperationType", SimulateAlarmRequest_OperationType_name, SimulateAlarmRequest_OperationType_value)
 	proto.RegisterType((*DeviceType)(nil), "voltha.DeviceType")
@@ -1694,9 +2121,13 @@
 	proto.RegisterType((*PmGroupConfig)(nil), "voltha.PmGroupConfig")
 	proto.RegisterType((*PmConfigs)(nil), "voltha.PmConfigs")
 	proto.RegisterType((*Image)(nil), "voltha.Image")
-	proto.RegisterType((*Images)(nil), "voltha.Images")
 	proto.RegisterType((*ImageDownload)(nil), "voltha.ImageDownload")
 	proto.RegisterType((*ImageDownloads)(nil), "voltha.ImageDownloads")
+	proto.RegisterType((*Images)(nil), "voltha.Images")
+	proto.RegisterType((*OnuImage)(nil), "voltha.OnuImage")
+	proto.RegisterType((*OnuImages)(nil), "voltha.OnuImages")
+	proto.RegisterType((*DeviceImageState)(nil), "voltha.DeviceImageState")
+	proto.RegisterType((*ImageState)(nil), "voltha.ImageState")
 	proto.RegisterType((*Port)(nil), "voltha.Port")
 	proto.RegisterType((*Port_PeerPort)(nil), "voltha.Port.PeerPort")
 	proto.RegisterType((*Ports)(nil), "voltha.Ports")
@@ -1709,152 +2140,174 @@
 func init() { proto.RegisterFile("voltha_protos/device.proto", fileDescriptor_200940f73d155856) }
 
 var fileDescriptor_200940f73d155856 = []byte{
-	// 2341 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x58, 0xcd, 0x72, 0xdb, 0xb8,
-	0x1d, 0x8f, 0x64, 0x8b, 0x12, 0xff, 0xfa, 0x30, 0x83, 0x38, 0x09, 0x63, 0xd7, 0xe3, 0x54, 0xd9,
-	0x4e, 0x9d, 0xa4, 0xb1, 0xd3, 0x64, 0x67, 0x77, 0x7b, 0xe8, 0x4c, 0x64, 0x89, 0x4e, 0x38, 0x75,
-	0x25, 0x17, 0x92, 0xbc, 0x6d, 0x2f, 0x1c, 0x5a, 0x84, 0x6c, 0x4e, 0x48, 0x42, 0x01, 0x28, 0xd9,
-	0xde, 0x5b, 0x67, 0xa7, 0x3d, 0xf5, 0xd6, 0x5b, 0x9f, 0xa0, 0x6f, 0xb0, 0xc7, 0xf6, 0x05, 0x76,
-	0xfa, 0x0e, 0xed, 0xa5, 0x4f, 0xb0, 0xe7, 0x0e, 0x00, 0x42, 0x22, 0x9d, 0x34, 0xdb, 0xbd, 0xd8,
-	0xc4, 0xef, 0xff, 0x01, 0xe0, 0x07, 0xfc, 0x3f, 0x20, 0xd8, 0x5a, 0xd0, 0x28, 0xbd, 0xf0, 0xbd,
-	0x19, 0xa3, 0x29, 0xe5, 0x07, 0x01, 0x59, 0x84, 0x13, 0xb2, 0x2f, 0x47, 0xc8, 0x50, 0xb2, 0xad,
-	0x07, 0xe7, 0x94, 0x9e, 0x47, 0xe4, 0x40, 0xa2, 0x67, 0xf3, 0xe9, 0x81, 0x9f, 0x5c, 0x2b, 0x95,
-	0xad, 0x1b, 0xe6, 0x13, 0x1a, 0xc7, 0x34, 0xc9, 0x64, 0x76, 0x51, 0x16, 0x93, 0xd4, 0xcf, 0x24,
-	0xbb, 0x45, 0x09, 0x9d, 0x91, 0x64, 0x1a, 0xd1, 0x4b, 0xef, 0xe7, 0x2f, 0x95, 0x42, 0xfb, 0xef,
-	0x65, 0x80, 0x9e, 0x5c, 0xca, 0xe8, 0x7a, 0x46, 0x50, 0x0b, 0xca, 0x61, 0x60, 0x97, 0x1e, 0x96,
-	0xf6, 0x4c, 0x5c, 0x0e, 0x03, 0xb4, 0x0d, 0xe6, 0x82, 0x24, 0x01, 0x65, 0x5e, 0x18, 0xd8, 0x15,
-	0x09, 0xd7, 0x14, 0xe0, 0x06, 0x68, 0x07, 0x60, 0x29, 0xe4, 0xb6, 0xf1, 0x70, 0x6d, 0xcf, 0xc4,
-	0xa6, 0x96, 0x72, 0x64, 0x43, 0xd5, 0x0f, 0xfc, 0x59, 0x4a, 0x98, 0x5d, 0x96, 0x96, 0x7a, 0x88,
-	0x3e, 0x07, 0xdb, 0x9f, 0x4c, 0xc8, 0x2c, 0xe5, 0xde, 0xd9, 0x3c, 0x7a, 0xeb, 0xc9, 0x25, 0xcd,
-	0x67, 0x81, 0x9f, 0x12, 0x7b, 0xed, 0x61, 0x69, 0xaf, 0x86, 0xef, 0x66, 0xf2, 0xc3, 0x79, 0xf4,
-	0xf6, 0x28, 0xa2, 0x97, 0x63, 0x29, 0x44, 0x3d, 0xd8, 0xd5, 0x86, 0x7e, 0x10, 0x78, 0x8c, 0xc4,
-	0x74, 0x41, 0xf2, 0xe6, 0xdc, 0x5e, 0x97, 0xf6, 0xdb, 0x99, 0x5a, 0x27, 0x08, 0xb0, 0x54, 0x5a,
-	0x39, 0xe1, 0xe8, 0x18, 0x1e, 0x69, 0x2f, 0x41, 0xc8, 0xc8, 0x24, 0xf5, 0x22, 0x7a, 0x1e, 0x4e,
-	0xfc, 0x48, 0x7a, 0xe2, 0x7a, 0x25, 0x55, 0xe9, 0x49, 0x4f, 0xd8, 0x93, 0x9a, 0xc7, 0x4a, 0x51,
-	0x78, 0xe3, 0xca, 0x5d, 0xfb, 0x73, 0xa8, 0xaf, 0x08, 0xe4, 0x68, 0x0f, 0x2a, 0x61, 0x4a, 0x62,
-	0x6e, 0x97, 0x1e, 0xae, 0xed, 0xd5, 0x5f, 0xa0, 0x7d, 0x75, 0x02, 0xfb, 0x2b, 0x1d, 0xac, 0x14,
-	0xda, 0xff, 0x28, 0x41, 0xed, 0x24, 0xee, 0xd2, 0x64, 0x1a, 0x9e, 0x23, 0x04, 0xeb, 0x89, 0x1f,
-	0x93, 0x8c, 0x7a, 0xf9, 0x8d, 0x9e, 0xc2, 0x7a, 0x7a, 0x3d, 0x23, 0x92, 0xbd, 0xd6, 0x8b, 0xfb,
-	0xda, 0x93, 0xb6, 0xd9, 0x3f, 0x89, 0xa5, 0x3b, 0xa9, 0x24, 0xd8, 0x26, 0x89, 0x7f, 0x16, 0x91,
-	0x20, 0xa3, 0x50, 0x0f, 0xd1, 0x2e, 0xd4, 0xb9, 0x1f, 0xcf, 0x22, 0xe2, 0x4d, 0x19, 0x79, 0x27,
-	0x09, 0x6a, 0x62, 0x50, 0xd0, 0x11, 0x23, 0xef, 0xda, 0x5f, 0x80, 0xa1, 0x5c, 0xa1, 0x3a, 0x54,
-	0xbb, 0x83, 0x71, 0x7f, 0xe4, 0x60, 0xeb, 0x16, 0x32, 0xa1, 0xf2, 0xba, 0x33, 0x7e, 0xed, 0x58,
-	0x25, 0xf1, 0x39, 0x1c, 0x75, 0x46, 0x8e, 0x55, 0x56, 0x2a, 0xfd, 0x91, 0xf3, 0xdb, 0x91, 0xb5,
-	0xd6, 0xfe, 0x4b, 0x09, 0x9a, 0x27, 0xf1, 0x6b, 0x46, 0xe7, 0xb3, 0x6c, 0x1f, 0x3b, 0x00, 0xe7,
-	0x62, 0xe8, 0xe5, 0x76, 0x63, 0x4a, 0xa4, 0x2f, 0xb6, 0xb4, 0x14, 0xcb, 0xa5, 0x94, 0xe5, 0x52,
-	0x94, 0x58, 0xac, 0xe4, 0x23, 0x9b, 0x78, 0x02, 0xd5, 0x98, 0xa4, 0x2c, 0x9c, 0x88, 0x13, 0x16,
-	0xc4, 0x5a, 0x37, 0xe9, 0xc0, 0x5a, 0xa1, 0xfd, 0x87, 0x32, 0x98, 0x1a, 0xe5, 0xef, 0x5d, 0xe9,
-	0x1f, 0x43, 0x23, 0x20, 0x53, 0x7f, 0x1e, 0xa5, 0xf9, 0x45, 0xd4, 0x33, 0x4c, 0x2e, 0x63, 0x17,
-	0xaa, 0x72, 0x4d, 0x7a, 0x19, 0x87, 0x95, 0xff, 0x7c, 0xf7, 0xed, 0x4e, 0x09, 0x6b, 0x14, 0x3d,
-	0x81, 0xa6, 0xb0, 0xf5, 0xe8, 0x82, 0x30, 0x16, 0x06, 0x44, 0xdd, 0x3a, 0xad, 0xd6, 0x10, 0xb2,
-	0x41, 0x26, 0x42, 0xcf, 0xc0, 0x90, 0x66, 0xdc, 0xae, 0xc8, 0x85, 0xdf, 0x5d, 0x2d, 0x3c, 0x47,
-	0x1c, 0xce, 0x94, 0xf2, 0x1b, 0x35, 0xbe, 0x67, 0xa3, 0xe8, 0x01, 0xd4, 0x62, 0xff, 0xca, 0xe3,
-	0x6f, 0xc9, 0xa5, 0xbc, 0xad, 0x4d, 0x5c, 0x8d, 0xfd, 0xab, 0xe1, 0x5b, 0x72, 0xd9, 0xfe, 0x67,
-	0x09, 0x2a, 0x6e, 0xec, 0x9f, 0x93, 0x0f, 0xde, 0x2c, 0x1b, 0xaa, 0x0b, 0xc2, 0x78, 0x48, 0x13,
-	0x1d, 0x9a, 0xd9, 0x50, 0x68, 0x5f, 0xf8, 0xfc, 0x42, 0xee, 0xdb, 0xc4, 0xf2, 0x1b, 0x3d, 0x06,
-	0x2b, 0x4c, 0x78, 0xea, 0x47, 0x91, 0x27, 0x6e, 0x7c, 0x1a, 0xc6, 0x6a, 0xc3, 0x26, 0xde, 0xc8,
-	0xf0, 0x5e, 0x06, 0x8b, 0x7c, 0x11, 0x72, 0xcf, 0x9f, 0xa4, 0xe1, 0x82, 0xc8, 0x7c, 0x51, 0xc3,
-	0xb5, 0x90, 0x77, 0xe4, 0x58, 0x30, 0x1f, 0x72, 0x4f, 0x64, 0xae, 0x30, 0x4d, 0x49, 0x60, 0x1b,
-	0x52, 0x5e, 0x0f, 0x79, 0x57, 0x43, 0x62, 0x47, 0x21, 0xf7, 0x16, 0x7e, 0x14, 0x06, 0x59, 0xfc,
-	0x55, 0x43, 0x7e, 0x2a, 0x86, 0xed, 0x67, 0x60, 0xc8, 0x0d, 0x71, 0xf4, 0x08, 0x2a, 0xa1, 0xf8,
-	0xca, 0x42, 0xac, 0xa9, 0x09, 0x92, 0x62, 0xac, 0x64, 0xed, 0x7f, 0x57, 0xa1, 0x29, 0x81, 0x1e,
-	0xbd, 0x4c, 0x22, 0xea, 0x07, 0xef, 0x5d, 0x04, 0x4d, 0x4c, 0x39, 0x47, 0x8c, 0x05, 0x6b, 0x73,
-	0x16, 0x65, 0xbb, 0x17, 0x9f, 0x02, 0x99, 0xb0, 0x49, 0x16, 0x35, 0xe2, 0x13, 0x0d, 0xa0, 0x15,
-	0x64, 0x3e, 0x3d, 0x9e, 0x8a, 0x4c, 0x51, 0x91, 0x01, 0xba, 0x57, 0x58, 0x87, 0x9e, 0xb6, 0x38,
-	0x1a, 0x0a, 0x7d, 0xdc, 0x0c, 0xf2, 0x43, 0xf4, 0x08, 0x9a, 0x72, 0xcd, 0x9e, 0x3e, 0x13, 0x43,
-	0x4e, 0xdf, 0x90, 0xe0, 0x69, 0x76, 0x30, 0x8f, 0xc1, 0xd2, 0x56, 0x24, 0xf0, 0xce, 0xae, 0x45,
-	0xae, 0x53, 0x67, 0xbe, 0xb1, 0xc2, 0x0f, 0x05, 0x8c, 0xde, 0x80, 0xc1, 0x88, 0xcf, 0x69, 0x62,
-	0xd7, 0xe4, 0xc2, 0x9e, 0xff, 0x1f, 0x0b, 0x3b, 0xf2, 0xc3, 0x68, 0xce, 0x08, 0x96, 0x76, 0x38,
-	0xb3, 0x47, 0x3f, 0x85, 0x0d, 0x3f, 0x08, 0xc2, 0x34, 0xa4, 0x89, 0x1f, 0x79, 0x61, 0x32, 0xa5,
-	0xb6, 0x29, 0xd7, 0xd6, 0x5a, 0xc1, 0x6e, 0x32, 0xa5, 0x2a, 0xc7, 0x2c, 0x88, 0x37, 0x91, 0x37,
-	0xd4, 0x06, 0x79, 0x74, 0x20, 0xa0, 0x2c, 0x2f, 0x6c, 0x83, 0x19, 0x51, 0x91, 0x62, 0x83, 0x90,
-	0xd9, 0x75, 0x55, 0x48, 0x24, 0xd0, 0x0b, 0x19, 0x72, 0xa1, 0xae, 0x08, 0x50, 0x74, 0x36, 0xbe,
-	0x97, 0x4e, 0x79, 0xa1, 0xfc, 0x94, 0x28, 0x3a, 0x41, 0x1a, 0x2b, 0x2e, 0xb7, 0xc1, 0x9c, 0x86,
-	0x11, 0xf1, 0x78, 0xf8, 0x15, 0xb1, 0x9b, 0x92, 0x9f, 0x9a, 0x00, 0x86, 0xe1, 0x57, 0xa4, 0xfd,
-	0x4d, 0x09, 0xd0, 0xfb, 0xc7, 0x81, 0x36, 0xc1, 0xea, 0x0d, 0xbe, 0xec, 0x1f, 0x0f, 0x3a, 0x3d,
-	0x6f, 0xdc, 0xff, 0x55, 0x7f, 0xf0, 0x65, 0xdf, 0xba, 0x85, 0xee, 0x01, 0x5a, 0xa2, 0xc3, 0x71,
-	0xb7, 0xeb, 0x38, 0x3d, 0xa7, 0x67, 0x95, 0x0a, 0x38, 0x76, 0x7e, 0x33, 0x76, 0x86, 0x23, 0xa7,
-	0x67, 0x95, 0x0b, 0x5e, 0x86, 0xa3, 0x0e, 0x16, 0xe8, 0x1a, 0xba, 0x03, 0x1b, 0x4b, 0xf4, 0xa8,
-	0xe3, 0x1e, 0x3b, 0x3d, 0x6b, 0x1d, 0xd9, 0xb0, 0x99, 0x9b, 0x70, 0x38, 0x3e, 0x39, 0x19, 0x48,
-	0xf5, 0x4a, 0xc1, 0x79, 0xb7, 0xd3, 0xef, 0x3a, 0xc7, 0xc2, 0xc2, 0x68, 0xff, 0xa9, 0x04, 0x5b,
-	0xff, 0xfb, 0xbc, 0x50, 0x03, 0x6a, 0xfd, 0x81, 0xe7, 0x60, 0x3c, 0x10, 0x89, 0x7b, 0x03, 0xea,
-	0x6e, 0xff, 0xb4, 0x73, 0xec, 0xf6, 0xbc, 0x31, 0x3e, 0xb6, 0x4a, 0x02, 0xe8, 0x39, 0xa7, 0x6e,
-	0xd7, 0xf1, 0x0e, 0xc7, 0xc3, 0xdf, 0x59, 0x65, 0x31, 0x8d, 0xdb, 0x1f, 0x8e, 0x8f, 0x8e, 0xdc,
-	0xae, 0xeb, 0xf4, 0x47, 0xde, 0xf0, 0xa4, 0xd3, 0x75, 0xac, 0x35, 0x74, 0x1b, 0x9a, 0x19, 0x01,
-	0x99, 0xb3, 0x75, 0xd4, 0x04, 0x73, 0xb5, 0x90, 0x4a, 0xfb, 0xcf, 0x9a, 0xc2, 0xc2, 0x11, 0x08,
-	0x43, 0xf7, 0xd7, 0x9d, 0xd7, 0x4e, 0x8e, 0x3f, 0x04, 0x2d, 0x05, 0xb9, 0xfd, 0x4e, 0x77, 0xe4,
-	0x9e, 0x8a, 0x3a, 0xb2, 0x09, 0x96, 0xc2, 0x24, 0xd2, 0x19, 0xb9, 0xfd, 0xd7, 0x56, 0x19, 0x59,
-	0xd0, 0xc8, 0xa1, 0x8e, 0x62, 0x4d, 0x21, 0xd8, 0x39, 0x75, 0xb0, 0x54, 0x5b, 0x5f, 0x39, 0x54,
-	0xa0, 0x5c, 0xce, 0x2f, 0xa1, 0x55, 0xa0, 0x85, 0xa3, 0xa7, 0xba, 0xfe, 0x96, 0x8b, 0xd9, 0xb6,
-	0xa0, 0xa6, 0x4b, 0xf0, 0x37, 0x15, 0x58, 0x3f, 0xa1, 0x2c, 0x45, 0xf7, 0xa1, 0x3a, 0xa3, 0x2c,
-	0xf5, 0x12, 0x2a, 0x13, 0x44, 0x13, 0x1b, 0x62, 0xd8, 0xa7, 0x68, 0x13, 0x2a, 0x91, 0x7f, 0x46,
-	0xa2, 0x2c, 0x4b, 0xa8, 0x01, 0x7a, 0x9c, 0x55, 0xe6, 0x35, 0x79, 0x53, 0x57, 0x19, 0x9d, 0xb2,
-	0x54, 0xfe, 0xc9, 0xd5, 0xe5, 0x5f, 0x40, 0xdd, 0x0f, 0xe2, 0x30, 0x29, 0xa4, 0x0a, 0x7b, 0x3f,
-	0xeb, 0xdf, 0x3a, 0x42, 0x24, 0x29, 0xdc, 0x97, 0xed, 0x03, 0x06, 0x7f, 0x89, 0x08, 0x53, 0x3a,
-	0x23, 0x4c, 0x5a, 0xce, 0xb9, 0xcc, 0x0a, 0x39, 0xd3, 0xc1, 0x8c, 0xb0, 0xa1, 0x94, 0x68, 0x53,
-	0xba, 0x44, 0x44, 0x18, 0xa8, 0x06, 0xd3, 0xcb, 0x12, 0xa9, 0x89, 0x6b, 0x0a, 0x70, 0x03, 0x41,
-	0xd1, 0x8c, 0x10, 0xc6, 0xed, 0xda, 0x8d, 0x82, 0x24, 0x97, 0x4f, 0x08, 0x13, 0x1f, 0x58, 0xe9,
-	0x88, 0x8a, 0xcd, 0xae, 0xbc, 0x99, 0x3f, 0x79, 0x4b, 0x52, 0x2e, 0xa3, 0xdf, 0xc0, 0x26, 0xbb,
-	0x3a, 0x51, 0x80, 0x48, 0xd8, 0xec, 0x2a, 0x4b, 0x47, 0x20, 0x85, 0x55, 0x76, 0xa5, 0xd2, 0xd0,
-	0x36, 0x98, 0xec, 0xca, 0x23, 0x8c, 0x51, 0xc6, 0x65, 0xc8, 0x1b, 0xb8, 0xc6, 0xae, 0x1c, 0x39,
-	0x16, 0x6e, 0xd3, 0x95, 0xdb, 0x86, 0x72, 0x9b, 0xe6, 0xdd, 0xa6, 0xda, 0x6d, 0x53, 0xb9, 0x4d,
-	0x57, 0x6e, 0xd3, 0xa5, 0xdb, 0x96, 0x72, 0x9b, 0x6a, 0xb7, 0xcf, 0xa1, 0x46, 0xa7, 0x33, 0x4f,
-	0x1c, 0x9e, 0xbd, 0xf1, 0xb0, 0x24, 0x77, 0x97, 0x6f, 0x7a, 0xb5, 0x10, 0x57, 0xe9, 0x74, 0x26,
-	0xb6, 0xb9, 0xf5, 0x0a, 0x6a, 0x7a, 0xcb, 0x45, 0xd6, 0x4a, 0x37, 0x58, 0xcb, 0x5d, 0x91, 0x72,
-	0xfe, 0x8a, 0xb4, 0x39, 0xd4, 0xf4, 0x99, 0x8b, 0xee, 0x68, 0x15, 0x01, 0x16, 0x34, 0x9c, 0xd1,
-	0x1b, 0x07, 0xf7, 0x9d, 0x91, 0xd7, 0xef, 0xbb, 0x56, 0xa9, 0x80, 0x8c, 0xfb, 0xae, 0x6a, 0xa7,
-	0x4e, 0x06, 0x7d, 0x6f, 0x70, 0x3c, 0xb2, 0xd6, 0x96, 0x83, 0xfe, 0x58, 0x05, 0xde, 0xa9, 0x23,
-	0x14, 0x85, 0xac, 0x92, 0x1b, 0xf6, 0xc7, 0x96, 0xd1, 0x7e, 0x0a, 0x15, 0x31, 0x29, 0x47, 0xed,
-	0x62, 0xbf, 0xd9, 0xc8, 0x1f, 0xa6, 0xbe, 0xe6, 0x7f, 0xad, 0x83, 0xa1, 0xfa, 0x4f, 0x74, 0x77,
-	0x55, 0x04, 0x75, 0xbb, 0x22, 0x6a, 0xe1, 0x83, 0x5c, 0xab, 0xb9, 0x14, 0xa8, 0x0b, 0xfc, 0x00,
-	0xd6, 0x19, 0xa5, 0x69, 0xb1, 0x13, 0x92, 0x10, 0x6a, 0x83, 0x39, 0xf3, 0x19, 0x49, 0x52, 0xc1,
-	0xd7, 0x7a, 0xde, 0xb4, 0xa6, 0x70, 0x79, 0xd9, 0x5a, 0x99, 0x8e, 0x66, 0x6f, 0x53, 0xb0, 0xb7,
-	0xec, 0x95, 0x94, 0xf0, 0x44, 0x45, 0xdb, 0x0e, 0x18, 0xea, 0xfd, 0xa0, 0xde, 0x1a, 0x5a, 0x29,
-	0x03, 0xd1, 0x36, 0x54, 0x62, 0x1a, 0x90, 0x48, 0x15, 0x48, 0x2d, 0x55, 0x18, 0x7a, 0x0e, 0xd6,
-	0x85, 0xcf, 0x82, 0x4b, 0x9f, 0xad, 0x0a, 0x69, 0x35, 0xaf, 0xb7, 0xa1, 0xc5, 0xba, 0xa4, 0x3e,
-	0x07, 0x6b, 0x1a, 0xb2, 0xb8, 0x60, 0x51, 0x2b, 0x58, 0x68, 0xb1, 0xb6, 0x78, 0x06, 0x86, 0xac,
-	0x35, 0x2a, 0x10, 0xea, 0x2f, 0x5a, 0x85, 0xec, 0xc2, 0x97, 0xeb, 0x55, 0x4a, 0xa2, 0x4d, 0xe4,
-	0x84, 0x85, 0x7e, 0xe4, 0x25, 0xf3, 0xf8, 0x8c, 0x30, 0x19, 0x21, 0x4b, 0xef, 0x0d, 0x25, 0xeb,
-	0x4b, 0x91, 0xe0, 0x72, 0xf5, 0xd2, 0xb2, 0x0b, 0x5c, 0x2e, 0x1f, 0x5c, 0xbb, 0xab, 0x17, 0x55,
-	0x3d, 0xaf, 0xb1, 0x7c, 0x58, 0x21, 0x58, 0x5f, 0x44, 0x7e, 0x22, 0xe3, 0xa9, 0x89, 0xe5, 0xb7,
-	0x28, 0xcd, 0xb1, 0x3f, 0x11, 0xef, 0x25, 0x46, 0xb8, 0x8a, 0x26, 0x13, 0x43, 0xec, 0x4f, 0x3a,
-	0x0a, 0x41, 0x8f, 0xa0, 0x11, 0xce, 0x16, 0x9f, 0x2e, 0x35, 0x44, 0x4c, 0x99, 0x6f, 0x6e, 0xe1,
-	0xba, 0x40, 0x8b, 0x4a, 0x9f, 0x2d, 0x95, 0x36, 0x72, 0x4a, 0x9f, 0x69, 0xa5, 0x4f, 0xa0, 0x79,
-	0x41, 0x79, 0xea, 0xf9, 0x49, 0xa0, 0x42, 0xf0, 0xae, 0xd6, 0x12, 0x70, 0x27, 0x09, 0x64, 0x94,
-	0xed, 0x00, 0x90, 0xab, 0x94, 0xf9, 0x9e, 0xcf, 0xce, 0xb9, 0x7d, 0x5f, 0x3d, 0x11, 0x24, 0xd2,
-	0x61, 0xe7, 0x1c, 0xbd, 0x82, 0xe6, 0x8c, 0xd1, 0xab, 0xeb, 0xe5, 0x54, 0x77, 0x24, 0xd5, 0xdb,
-	0xc5, 0x87, 0xd4, 0xfe, 0x89, 0xd0, 0xc9, 0x26, 0xc6, 0x8d, 0x59, 0x6e, 0x74, 0x33, 0xe5, 0x5a,
-	0x3f, 0x20, 0xe5, 0xbe, 0x2a, 0xa6, 0xdc, 0xdb, 0x1f, 0x4f, 0xb9, 0x9a, 0xff, 0x7c, 0xe6, 0xdd,
-	0x59, 0x36, 0x5f, 0xf7, 0x0a, 0x57, 0x38, 0xeb, 0xa8, 0x5c, 0x68, 0x4d, 0x68, 0x92, 0x88, 0x47,
-	0x67, 0x36, 0x07, 0x92, 0x73, 0x6c, 0xeb, 0x39, 0xba, 0x4a, 0xfa, 0xa1, 0x69, 0x9a, 0x93, 0xbc,
-	0x0c, 0xfd, 0x0c, 0x8c, 0xc9, 0x9c, 0xa7, 0x34, 0xb6, 0x5f, 0x49, 0x86, 0x36, 0xf7, 0xd5, 0xaf,
-	0x07, 0xfb, 0xfa, 0xd7, 0x83, 0xfd, 0x4e, 0x72, 0x8d, 0x33, 0x1d, 0xf4, 0x05, 0xc0, 0x2c, 0xce,
-	0xfa, 0x33, 0x6e, 0x7f, 0x5d, 0x92, 0x26, 0xb7, 0x6f, 0xbe, 0x2d, 0xf8, 0x61, 0xe5, 0x5f, 0xdf,
-	0x7d, 0xbb, 0x73, 0x0b, 0x9b, 0xb3, 0xe5, 0x03, 0xea, 0x18, 0x36, 0x54, 0x77, 0xa6, 0xfb, 0x4c,
-	0x6e, 0xff, 0xb1, 0xf4, 0x91, 0xe2, 0x7a, 0x58, 0x17, 0x2e, 0x0c, 0xd5, 0x5d, 0xe3, 0x56, 0x58,
-	0xa8, 0xcf, 0x5b, 0x5f, 0x97, 0xa1, 0x91, 0x3f, 0xbb, 0x8f, 0x27, 0xdd, 0x5d, 0xa8, 0x67, 0xc2,
-	0x55, 0x7a, 0xc2, 0x10, 0xac, 0x7e, 0xb0, 0xd8, 0x01, 0x98, 0x5c, 0xf8, 0x49, 0x42, 0x22, 0x61,
-	0xbe, 0xa6, 0x1e, 0x94, 0x19, 0xe2, 0x06, 0x68, 0x0f, 0x2c, 0x2d, 0x56, 0xef, 0xce, 0x2c, 0x51,
-	0x35, 0x71, 0x2b, 0xc3, 0xe5, 0x1b, 0xcc, 0x0d, 0xd0, 0x01, 0xdc, 0xd1, 0x9a, 0x29, 0x61, 0x71,
-	0x98, 0xf8, 0xa2, 0xbd, 0xcd, 0x7e, 0xf3, 0x40, 0x99, 0x68, 0xb4, 0x92, 0xa0, 0xbb, 0x60, 0xd0,
-	0x64, 0x2e, 0x1c, 0x1a, 0xd2, 0x61, 0x85, 0x26, 0x73, 0x37, 0x40, 0x9f, 0x40, 0x4b, 0xc0, 0x9c,
-	0x70, 0x91, 0x31, 0x74, 0xf9, 0x6d, 0xe2, 0x06, 0x4d, 0xe6, 0x43, 0x05, 0xba, 0xc1, 0xa1, 0x29,
-	0x22, 0x59, 0xee, 0xbf, 0x7d, 0x00, 0x55, 0x75, 0xa5, 0x45, 0xfc, 0x14, 0x72, 0x79, 0xab, 0x78,
-	0xe5, 0x75, 0x36, 0xff, 0xdb, 0x1a, 0x6c, 0x0e, 0xc3, 0x78, 0x1e, 0xf9, 0x29, 0xe9, 0x44, 0x3e,
-	0x8b, 0x31, 0x79, 0x37, 0x27, 0x3c, 0x7d, 0xef, 0x81, 0xf3, 0x23, 0x30, 0xc3, 0x24, 0x08, 0x27,
-	0x7e, 0x4a, 0xf5, 0x4f, 0x30, 0x2b, 0x40, 0xd4, 0xb3, 0x30, 0x49, 0xa7, 0x9a, 0x36, 0x13, 0x1b,
-	0x62, 0xa8, 0x76, 0x20, 0x53, 0xb5, 0x60, 0x5c, 0x3d, 0xe3, 0xd5, 0x63, 0xaf, 0x31, 0xcb, 0xaa,
-	0x9c, 0x7c, 0xc9, 0xb7, 0xa1, 0x29, 0xf6, 0xb9, 0x3a, 0x3a, 0xc5, 0x54, 0x9d, 0x26, 0xf3, 0x9e,
-	0x3e, 0xbd, 0x97, 0x70, 0x2f, 0x4c, 0x44, 0x66, 0x25, 0xde, 0x59, 0x98, 0xaa, 0x9a, 0xed, 0x31,
-	0x11, 0x93, 0x82, 0xb2, 0x0a, 0xbe, 0x93, 0x49, 0x0f, 0xc3, 0x54, 0xd6, 0x6f, 0xac, 0xba, 0xf1,
-	0x4a, 0xc0, 0xc2, 0x69, 0x2a, 0x79, 0xab, 0x60, 0x35, 0x10, 0xab, 0x4d, 0xc8, 0xa5, 0x47, 0xde,
-	0x05, 0x32, 0x45, 0x57, 0xb0, 0x91, 0x90, 0x4b, 0xe7, 0x9d, 0x78, 0x8a, 0xdf, 0x56, 0x7c, 0xe7,
-	0xf3, 0xac, 0x7a, 0xa4, 0x6c, 0x48, 0xca, 0x73, 0x39, 0xf6, 0x0d, 0x98, 0x22, 0x52, 0xd5, 0xc9,
-	0x82, 0x8c, 0xbb, 0x27, 0x9a, 0xe3, 0x0f, 0x31, 0x2a, 0x03, 0x5e, 0x6a, 0xcb, 0x86, 0x6e, 0x65,
-	0xdc, 0xfe, 0x09, 0x34, 0x0b, 0x32, 0x64, 0x42, 0x05, 0x77, 0xdc, 0xa1, 0xa3, 0x7e, 0x37, 0xe9,
-	0x1e, 0x3b, 0x1d, 0x6c, 0x95, 0x0e, 0x87, 0x70, 0x87, 0xb2, 0x73, 0xd9, 0x81, 0x4c, 0x28, 0x0b,
-	0xb2, 0xb9, 0x0e, 0x1b, 0xa7, 0xf2, 0xbf, 0xe2, 0xe9, 0xf7, 0xfb, 0xe7, 0x61, 0x7a, 0x31, 0x3f,
-	0x13, 0x09, 0xe0, 0x40, 0x6b, 0x1e, 0x28, 0xcd, 0x67, 0xd9, 0xef, 0x76, 0x8b, 0x4f, 0x0f, 0xce,
-	0x69, 0x86, 0x9d, 0x19, 0x12, 0x7c, 0xf9, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8e, 0x96, 0xa4,
-	0xa3, 0x51, 0x14, 0x00, 0x00,
+	// 2701 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xcb, 0x72, 0x1b, 0xc7,
+	0xd5, 0x16, 0x40, 0x62, 0x80, 0x39, 0xb8, 0x70, 0xd4, 0x22, 0xa5, 0x11, 0x69, 0xfe, 0xd2, 0x0f,
+	0xd9, 0xbf, 0x69, 0xe9, 0x17, 0xa9, 0x48, 0x2e, 0xdb, 0x59, 0xb8, 0x4a, 0x20, 0x30, 0x94, 0xa6,
+	0x42, 0x0d, 0x98, 0x06, 0x40, 0xc7, 0xd9, 0x4c, 0x0d, 0x31, 0x4d, 0x72, 0x4a, 0x83, 0x19, 0xa8,
+	0x67, 0x40, 0x52, 0xde, 0xa5, 0x5c, 0xc9, 0x2a, 0x55, 0x59, 0x64, 0x95, 0x3c, 0x41, 0x96, 0xd9,
+	0x79, 0x99, 0xbc, 0x80, 0xab, 0xf2, 0x0c, 0xc9, 0x26, 0x0f, 0x90, 0xf2, 0x3a, 0xd5, 0xb7, 0xb9,
+	0x90, 0x92, 0xec, 0x54, 0xa5, 0x52, 0xd9, 0x90, 0xd3, 0xdf, 0xb9, 0x74, 0xf7, 0xe9, 0x3e, 0x5f,
+	0x9f, 0x6e, 0xc0, 0xfa, 0x59, 0x1c, 0xa6, 0xa7, 0x9e, 0x3b, 0xa7, 0x71, 0x1a, 0x27, 0x3b, 0x3e,
+	0x39, 0x0b, 0xa6, 0x64, 0x9b, 0xb7, 0x90, 0x26, 0x64, 0xeb, 0xb7, 0x4f, 0xe2, 0xf8, 0x24, 0x24,
+	0x3b, 0x1c, 0x3d, 0x5a, 0x1c, 0xef, 0x78, 0xd1, 0x6b, 0xa1, 0xb2, 0x7e, 0xc9, 0x7c, 0x1a, 0xcf,
+	0x66, 0x71, 0x24, 0x65, 0x66, 0x59, 0x36, 0x23, 0xa9, 0x27, 0x25, 0x77, 0xca, 0x92, 0x78, 0x4e,
+	0xa2, 0xe3, 0x30, 0x3e, 0x77, 0x7f, 0xf4, 0x44, 0x28, 0x74, 0xff, 0x54, 0x05, 0x18, 0xf0, 0xa1,
+	0x8c, 0x5f, 0xcf, 0x09, 0xea, 0x40, 0x35, 0xf0, 0xcd, 0xca, 0xdd, 0xca, 0x96, 0x8e, 0xab, 0x81,
+	0x8f, 0x36, 0x40, 0x3f, 0x23, 0x91, 0x1f, 0x53, 0x37, 0xf0, 0xcd, 0x1a, 0x87, 0x1b, 0x02, 0xb0,
+	0x7d, 0xb4, 0x09, 0x90, 0x09, 0x13, 0x53, 0xbb, 0xbb, 0xb4, 0xa5, 0x63, 0x5d, 0x49, 0x13, 0x64,
+	0x42, 0xdd, 0xf3, 0xbd, 0x79, 0x4a, 0xa8, 0x59, 0xe5, 0x96, 0xaa, 0x89, 0x3e, 0x05, 0xd3, 0x9b,
+	0x4e, 0xc9, 0x3c, 0x4d, 0xdc, 0xa3, 0x45, 0xf8, 0xd2, 0xe5, 0x43, 0x5a, 0xcc, 0x7d, 0x2f, 0x25,
+	0xe6, 0xd2, 0xdd, 0xca, 0x56, 0x03, 0xaf, 0x49, 0xf9, 0xee, 0x22, 0x7c, 0xb9, 0x17, 0xc6, 0xe7,
+	0x13, 0x2e, 0x44, 0x03, 0xb8, 0xa3, 0x0c, 0x3d, 0xdf, 0x77, 0x29, 0x99, 0xc5, 0x67, 0xa4, 0x68,
+	0x9e, 0x98, 0xcb, 0xdc, 0x7e, 0x43, 0xaa, 0xf5, 0x7c, 0x1f, 0x73, 0xa5, 0xdc, 0x49, 0x82, 0xf6,
+	0xe1, 0x9e, 0xf2, 0xe2, 0x07, 0x94, 0x4c, 0x53, 0x37, 0x8c, 0x4f, 0x82, 0xa9, 0x17, 0x72, 0x4f,
+	0x89, 0x1a, 0x49, 0x9d, 0x7b, 0x52, 0x1d, 0x0e, 0xb8, 0xe6, 0xbe, 0x50, 0x64, 0xde, 0x12, 0xe1,
+	0xae, 0xfb, 0x29, 0x34, 0xf3, 0x00, 0x26, 0x68, 0x0b, 0x6a, 0x41, 0x4a, 0x66, 0x89, 0x59, 0xb9,
+	0xbb, 0xb4, 0xd5, 0x7c, 0x8c, 0xb6, 0xc5, 0x0a, 0x6c, 0xe7, 0x3a, 0x58, 0x28, 0x74, 0xff, 0x5c,
+	0x81, 0xc6, 0xc1, 0xac, 0x1f, 0x47, 0xc7, 0xc1, 0x09, 0x42, 0xb0, 0x1c, 0x79, 0x33, 0x22, 0x43,
+	0xcf, 0xbf, 0xd1, 0x03, 0x58, 0x4e, 0x5f, 0xcf, 0x09, 0x8f, 0x5e, 0xe7, 0xf1, 0x2d, 0xe5, 0x49,
+	0xd9, 0x6c, 0x1f, 0xcc, 0xb8, 0x3b, 0xae, 0xc4, 0xa2, 0x4d, 0x22, 0xef, 0x28, 0x24, 0xbe, 0x0c,
+	0xa1, 0x6a, 0xa2, 0x3b, 0xd0, 0x4c, 0xbc, 0xd9, 0x3c, 0x24, 0xee, 0x31, 0x25, 0xaf, 0x78, 0x80,
+	0xda, 0x18, 0x04, 0xb4, 0x47, 0xc9, 0xab, 0xee, 0x67, 0xa0, 0x09, 0x57, 0xa8, 0x09, 0xf5, 0xfe,
+	0x70, 0xe2, 0x8c, 0x2d, 0x6c, 0x5c, 0x43, 0x3a, 0xd4, 0x9e, 0xf5, 0x26, 0xcf, 0x2c, 0xa3, 0xc2,
+	0x3e, 0x47, 0xe3, 0xde, 0xd8, 0x32, 0xaa, 0x42, 0xc5, 0x19, 0x5b, 0x3f, 0x1b, 0x1b, 0x4b, 0xdd,
+	0xdf, 0x56, 0xa0, 0x7d, 0x30, 0x7b, 0x46, 0xe3, 0xc5, 0x5c, 0xce, 0x63, 0x13, 0xe0, 0x84, 0x35,
+	0xdd, 0xc2, 0x6c, 0x74, 0x8e, 0x38, 0x6c, 0x4a, 0x99, 0x98, 0x0f, 0xa5, 0xca, 0x87, 0x22, 0xc4,
+	0x6c, 0x24, 0xef, 0x98, 0xc4, 0x7d, 0xa8, 0xcf, 0x48, 0x4a, 0x83, 0x29, 0x5b, 0x61, 0x16, 0x58,
+	0xe3, 0x72, 0x38, 0xb0, 0x52, 0xe8, 0xfe, 0xa2, 0x0a, 0xba, 0x42, 0x93, 0x2b, 0x5b, 0xfa, 0x7f,
+	0xa1, 0xe5, 0x93, 0x63, 0x6f, 0x11, 0xa6, 0xc5, 0x41, 0x34, 0x25, 0xc6, 0x87, 0x71, 0x07, 0xea,
+	0x7c, 0x4c, 0x6a, 0x18, 0xbb, 0xb5, 0xbf, 0x7f, 0xf7, 0xed, 0x66, 0x05, 0x2b, 0x14, 0xdd, 0x87,
+	0x36, 0xb3, 0x75, 0xe3, 0x33, 0x42, 0x69, 0xe0, 0x13, 0xb1, 0xeb, 0x94, 0x5a, 0x8b, 0xc9, 0x86,
+	0x52, 0x84, 0x1e, 0x82, 0xc6, 0xcd, 0x12, 0xb3, 0xc6, 0x07, 0xbe, 0x96, 0x0f, 0xbc, 0x10, 0x38,
+	0x2c, 0x95, 0x8a, 0x13, 0xd5, 0xbe, 0x67, 0xa2, 0xe8, 0x36, 0x34, 0x66, 0xde, 0x85, 0x9b, 0xbc,
+	0x24, 0xe7, 0x7c, 0xb7, 0xb6, 0x71, 0x7d, 0xe6, 0x5d, 0x8c, 0x5e, 0x92, 0xf3, 0xee, 0x6f, 0xaa,
+	0x50, 0xb3, 0x67, 0xde, 0x09, 0x79, 0xe3, 0xce, 0x32, 0xa1, 0x7e, 0x46, 0x68, 0x12, 0xc4, 0x91,
+	0x4a, 0x4d, 0xd9, 0x64, 0xda, 0xa7, 0x5e, 0x72, 0xca, 0xe7, 0xdd, 0xc6, 0xfc, 0x1b, 0x7d, 0x04,
+	0x46, 0x10, 0x25, 0xa9, 0x17, 0x86, 0x2e, 0xdb, 0xf1, 0x69, 0x30, 0x13, 0x13, 0xd6, 0xf1, 0x8a,
+	0xc4, 0x07, 0x12, 0x66, 0x7c, 0x11, 0x24, 0xae, 0x37, 0x4d, 0x83, 0x33, 0xc2, 0xf9, 0xa2, 0x81,
+	0x1b, 0x41, 0xd2, 0xe3, 0x6d, 0x16, 0xf9, 0x20, 0x71, 0x19, 0x73, 0x05, 0x69, 0x4a, 0x7c, 0x53,
+	0xe3, 0xf2, 0x66, 0x90, 0xf4, 0x15, 0xc4, 0x66, 0x14, 0x24, 0xee, 0x99, 0x17, 0x06, 0xbe, 0xcc,
+	0xbf, 0x7a, 0x90, 0x1c, 0xb2, 0x26, 0x32, 0x60, 0x69, 0x41, 0x43, 0xb3, 0xc1, 0x3b, 0x66, 0x9f,
+	0xe8, 0x26, 0x68, 0x82, 0x6d, 0x4c, 0x9d, 0x83, 0xb2, 0x85, 0x56, 0xa1, 0x36, 0xa5, 0xd3, 0x27,
+	0x8f, 0x4d, 0xe0, 0x93, 0x10, 0x8d, 0xee, 0xdf, 0xea, 0xd0, 0xe6, 0x11, 0x19, 0xc4, 0xe7, 0x51,
+	0x18, 0x7b, 0xfe, 0x95, 0x9d, 0xa1, 0x22, 0x55, 0x2d, 0x44, 0x4a, 0xf6, 0xba, 0x94, 0xf7, 0x6a,
+	0xc0, 0xd2, 0x94, 0x4e, 0x65, 0x1a, 0xb1, 0x4f, 0x34, 0x84, 0x8e, 0x2f, 0x7d, 0xba, 0x49, 0xca,
+	0xa8, 0xa3, 0xc6, 0x33, 0x76, 0x4b, 0xad, 0x5c, 0xa9, 0xdb, 0x72, 0x6b, 0xc4, 0xf4, 0x71, 0xdb,
+	0x2f, 0x36, 0xd1, 0x3d, 0x68, 0x07, 0x4c, 0xc9, 0x55, 0x8b, 0xa4, 0xf1, 0xee, 0x5b, 0x1c, 0x3c,
+	0x94, 0x2b, 0xf5, 0x11, 0x18, 0xca, 0x8a, 0xf8, 0xee, 0xd1, 0x6b, 0x46, 0x7e, 0x62, 0x13, 0xac,
+	0xe4, 0xf8, 0x2e, 0x83, 0xd1, 0x73, 0xd0, 0x28, 0xf1, 0x92, 0x38, 0xe2, 0xd1, 0xeb, 0x3c, 0x7e,
+	0xf4, 0x03, 0x06, 0xb6, 0xe7, 0x05, 0xe1, 0x82, 0x12, 0xcc, 0xed, 0xb0, 0xb4, 0x47, 0x1f, 0xc2,
+	0x8a, 0xe7, 0xfb, 0x41, 0x1a, 0xc4, 0x91, 0x17, 0xba, 0x41, 0x74, 0x1c, 0xcb, 0xd8, 0x77, 0x72,
+	0xd8, 0x8e, 0x8e, 0x63, 0x41, 0x3a, 0x67, 0xc4, 0x9d, 0xf2, 0x2d, 0xcb, 0x57, 0xa2, 0xc1, 0x48,
+	0xe7, 0x8c, 0x48, 0xa2, 0xd8, 0x00, 0x3d, 0x8c, 0x19, 0xe7, 0xfa, 0x01, 0x35, 0x9b, 0xe2, 0x64,
+	0xe1, 0xc0, 0x20, 0xa0, 0xc8, 0x86, 0xa6, 0x08, 0x80, 0x08, 0x67, 0xeb, 0x7b, 0xc3, 0xc9, 0x77,
+	0x98, 0x97, 0x12, 0x11, 0x4e, 0xe0, 0xc6, 0x22, 0x96, 0x1b, 0xa0, 0x1f, 0x07, 0x21, 0x71, 0x93,
+	0xe0, 0x2b, 0x62, 0xb6, 0x79, 0x7c, 0x1a, 0x0c, 0x18, 0x05, 0x5f, 0x91, 0xee, 0x37, 0x15, 0x40,
+	0x57, 0x97, 0x03, 0xad, 0x82, 0x31, 0x18, 0x7e, 0xe1, 0xec, 0x0f, 0x7b, 0x03, 0x77, 0xe2, 0xfc,
+	0xc4, 0x19, 0x7e, 0xe1, 0x18, 0xd7, 0xd0, 0x4d, 0x40, 0x19, 0x3a, 0x9a, 0xf4, 0xfb, 0x96, 0x35,
+	0xb0, 0x06, 0x46, 0xa5, 0x84, 0x63, 0xeb, 0xa7, 0x13, 0x6b, 0x34, 0xb6, 0x06, 0x46, 0xb5, 0xe4,
+	0x65, 0x34, 0xee, 0x61, 0x86, 0x2e, 0xa1, 0x1b, 0xb0, 0x92, 0xa1, 0x7b, 0x3d, 0x7b, 0xdf, 0x1a,
+	0x18, 0xcb, 0xc8, 0x84, 0xd5, 0x42, 0x87, 0xa3, 0xc9, 0xc1, 0xc1, 0x90, 0xab, 0xd7, 0x4a, 0xce,
+	0xfb, 0x3d, 0xa7, 0x6f, 0xed, 0x33, 0x0b, 0xad, 0xfb, 0xab, 0x0a, 0xac, 0xbf, 0x7d, 0xbd, 0x50,
+	0x0b, 0x1a, 0xce, 0xd0, 0xb5, 0x30, 0x1e, 0x32, 0x26, 0x5f, 0x81, 0xa6, 0xed, 0x1c, 0xf6, 0xf6,
+	0xed, 0x81, 0x3b, 0xc1, 0xfb, 0x46, 0x85, 0x01, 0x03, 0xeb, 0xd0, 0xee, 0x5b, 0xee, 0xee, 0x64,
+	0xf4, 0xa5, 0x51, 0x65, 0xdd, 0xd8, 0xce, 0x68, 0xb2, 0xb7, 0x67, 0xf7, 0x6d, 0xcb, 0x19, 0xbb,
+	0xa3, 0x83, 0x5e, 0xdf, 0x32, 0x96, 0xd0, 0x75, 0x68, 0xcb, 0x00, 0x48, 0x67, 0xcb, 0xa8, 0x0d,
+	0x7a, 0x3e, 0x90, 0x5a, 0xf7, 0xd7, 0x2a, 0x84, 0xa5, 0x25, 0x60, 0x86, 0xf6, 0x8b, 0xde, 0x33,
+	0xab, 0x10, 0x3f, 0x04, 0x1d, 0x01, 0xd9, 0x4e, 0xaf, 0x3f, 0xb6, 0x0f, 0xd9, 0xc1, 0xb2, 0x0a,
+	0x86, 0xc0, 0x38, 0xd2, 0x1b, 0xdb, 0xce, 0x33, 0xa3, 0x8a, 0x0c, 0x68, 0x15, 0x50, 0x4b, 0x44,
+	0x4d, 0x20, 0xd8, 0x3a, 0xb4, 0x30, 0x57, 0x5b, 0xce, 0x1d, 0x0a, 0x90, 0x0f, 0xe7, 0x73, 0xe8,
+	0x94, 0xc2, 0x92, 0xa0, 0x07, 0xea, 0x40, 0xae, 0x96, 0xe9, 0xb7, 0xa4, 0xa6, 0xce, 0xe4, 0x87,
+	0xa0, 0x71, 0x3c, 0x41, 0xf7, 0xa0, 0xc6, 0x77, 0x91, 0x3c, 0xc7, 0xdb, 0x25, 0x33, 0x2c, 0x64,
+	0xdd, 0x3f, 0x56, 0xa0, 0x31, 0x8c, 0x16, 0x82, 0x68, 0x0b, 0xa4, 0x5a, 0x29, 0x93, 0xea, 0xff,
+	0x00, 0x28, 0x92, 0x23, 0x3e, 0xa7, 0x97, 0x06, 0x2e, 0x20, 0x68, 0x1d, 0x32, 0x92, 0x94, 0xe7,
+	0x5e, 0x4e, 0x9a, 0x26, 0x28, 0x06, 0x94, 0xa5, 0x4d, 0x46, 0x88, 0x77, 0xa1, 0x39, 0xa7, 0xb1,
+	0xbf, 0x98, 0xa6, 0xfd, 0xd8, 0x27, 0xb2, 0x3a, 0x2b, 0x42, 0x19, 0x99, 0x0b, 0xfa, 0xe0, 0xdf,
+	0xdd, 0x27, 0xa0, 0xab, 0x11, 0x27, 0xe8, 0xff, 0xca, 0xc5, 0x4a, 0x76, 0xd4, 0x28, 0x0d, 0x15,
+	0x96, 0x29, 0x18, 0xa2, 0x7e, 0xb1, 0x4b, 0x89, 0x25, 0x6a, 0x58, 0x37, 0x23, 0xd1, 0x86, 0x00,
+	0x6c, 0x1f, 0x3d, 0x86, 0x42, 0x0e, 0xf2, 0x19, 0x17, 0x4a, 0xa1, 0xdc, 0x49, 0x31, 0x53, 0x19,
+	0x41, 0x43, 0xc1, 0xff, 0xdb, 0xc3, 0xb9, 0x7f, 0x85, 0x6f, 0x45, 0x85, 0xf4, 0xc1, 0xd5, 0x0e,
+	0x7e, 0x00, 0xd9, 0x7e, 0x9e, 0x91, 0xe3, 0xd2, 0xbb, 0xbd, 0xbc, 0x99, 0x11, 0x9f, 0x97, 0xa9,
+	0x6a, 0x99, 0xfb, 0xf8, 0xf0, 0x6d, 0x3e, 0x64, 0x92, 0x04, 0x71, 0x74, 0x75, 0xfe, 0x7f, 0xf9,
+	0xaf, 0x27, 0xa3, 0x5b, 0x70, 0xe3, 0x32, 0x19, 0xb1, 0x4c, 0xd4, 0xde, 0xc2, 0x52, 0xf5, 0xee,
+	0x3f, 0xd4, 0x94, 0xfe, 0x63, 0xec, 0x64, 0xc2, 0x6a, 0x36, 0x00, 0x77, 0xe8, 0xa8, 0x18, 0x18,
+	0x35, 0xb4, 0x0e, 0x37, 0x4b, 0x92, 0xa1, 0x33, 0x71, 0x45, 0x51, 0xab, 0x31, 0xd9, 0xa1, 0xe5,
+	0x0c, 0x86, 0xd8, 0x95, 0x1d, 0xbf, 0xb0, 0x47, 0x2f, 0x7a, 0xe3, 0xfe, 0x73, 0xa3, 0xce, 0x26,
+	0x3d, 0x7c, 0xd1, 0xb7, 0xdd, 0x31, 0xee, 0x39, 0xa3, 0x3d, 0x0b, 0xcb, 0xae, 0x1a, 0xac, 0x2b,
+	0x45, 0x3f, 0x7b, 0x93, 0x91, 0x35, 0x70, 0x77, 0xbf, 0x64, 0x4e, 0x0d, 0xbd, 0xfb, 0xbb, 0x2a,
+	0xac, 0xbe, 0x69, 0xb9, 0xff, 0xdd, 0xac, 0x98, 0xe9, 0xf5, 0x87, 0x2f, 0x5e, 0xd8, 0x63, 0x49,
+	0x8b, 0x19, 0x57, 0x4a, 0x94, 0x2f, 0xdd, 0x26, 0xdc, 0x2e, 0xbb, 0x1c, 0x3a, 0x6e, 0x6f, 0x77,
+	0x28, 0xa8, 0x54, 0x43, 0xef, 0x81, 0xf9, 0x66, 0x31, 0x5b, 0x46, 0x74, 0x1b, 0xd6, 0x8a, 0x1e,
+	0x73, 0xc3, 0x42, 0x10, 0x8a, 0x22, 0x6b, 0x60, 0xe8, 0x68, 0x0d, 0xae, 0x0b, 0x89, 0xda, 0x19,
+	0xcc, 0x00, 0xba, 0xdf, 0xd4, 0x60, 0xf9, 0x20, 0xa6, 0x29, 0xba, 0x05, 0xf5, 0x79, 0x4c, 0x53,
+	0x37, 0x8a, 0x79, 0x7e, 0xb7, 0xb1, 0xc6, 0x9a, 0x4e, 0xcc, 0xca, 0xb7, 0xd0, 0x3b, 0x22, 0xa1,
+	0xac, 0xc3, 0x44, 0x03, 0x7d, 0x24, 0x2f, 0x43, 0x22, 0x49, 0xf3, 0x22, 0x3a, 0xa6, 0x29, 0xff,
+	0x53, 0xb8, 0x0a, 0xfd, 0x18, 0x9a, 0x9e, 0x3f, 0x0b, 0xa2, 0x52, 0x31, 0x66, 0x6e, 0xcb, 0x2b,
+	0x73, 0x8f, 0x89, 0x44, 0x4a, 0xf2, 0x1b, 0x1b, 0x06, 0x2f, 0x43, 0x98, 0x69, 0x3c, 0x27, 0x94,
+	0x5b, 0x2e, 0x12, 0x4e, 0x9c, 0x05, 0xd3, 0xe1, 0x9c, 0xd0, 0x11, 0x97, 0x28, 0xd3, 0x38, 0x43,
+	0xca, 0x7c, 0x58, 0xbf, 0xc4, 0x87, 0x0f, 0xa0, 0x36, 0x27, 0x84, 0x26, 0x66, 0xe3, 0xd2, 0x1d,
+	0x80, 0x0f, 0x9f, 0x10, 0xca, 0x3e, 0xb0, 0xd0, 0x61, 0x97, 0x24, 0x7a, 0xe1, 0xce, 0xbd, 0xe9,
+	0x4b, 0x92, 0x26, 0xbc, 0xbe, 0xd2, 0xb0, 0x4e, 0x2f, 0x0e, 0x04, 0xc0, 0x6a, 0x64, 0x7a, 0x21,
+	0x0b, 0x3e, 0xe0, 0xc2, 0x3a, 0xbd, 0x10, 0x85, 0xde, 0x06, 0xe8, 0xf4, 0xc2, 0x25, 0x94, 0xc6,
+	0x34, 0xe1, 0x45, 0x95, 0x86, 0x1b, 0xf4, 0xc2, 0xe2, 0x6d, 0xe6, 0x36, 0xcd, 0xdd, 0xb6, 0x84,
+	0xdb, 0xb4, 0xe8, 0x36, 0x55, 0x6e, 0xdb, 0xc2, 0x6d, 0x9a, 0xbb, 0x4d, 0x33, 0xb7, 0x1d, 0xe1,
+	0x36, 0x55, 0x6e, 0x1f, 0x41, 0x23, 0x3e, 0x9e, 0xbb, 0x6c, 0xf1, 0xcc, 0x15, 0x4e, 0xf4, 0x6b,
+	0xdb, 0xc5, 0x77, 0x06, 0x25, 0xc4, 0xf5, 0xf8, 0x78, 0xce, 0xa6, 0xb9, 0xfe, 0x14, 0x1a, 0x6a,
+	0xca, 0xef, 0x3e, 0x45, 0x0a, 0x5b, 0xa4, 0x5a, 0xdc, 0x22, 0xdd, 0x04, 0x1a, 0x6a, 0xcd, 0xd9,
+	0x85, 0x34, 0xcf, 0x26, 0x03, 0x5a, 0xd6, 0xf8, 0xb9, 0x85, 0x1d, 0x6b, 0xec, 0x3a, 0x8e, 0x6d,
+	0x54, 0x4a, 0xc8, 0xc4, 0xb1, 0xc5, 0x0d, 0xf6, 0x80, 0xe5, 0xff, 0xfe, 0xd8, 0x58, 0xca, 0x1a,
+	0xce, 0x44, 0x94, 0x36, 0x87, 0x16, 0x53, 0x64, 0xb2, 0x5a, 0xa1, 0xe9, 0x4c, 0x0c, 0xad, 0xfb,
+	0x00, 0x6a, 0xac, 0xd3, 0x04, 0x75, 0xcb, 0xa7, 0x66, 0xab, 0xb8, 0x98, 0xea, 0xc4, 0xfc, 0x7d,
+	0x13, 0x34, 0x71, 0x64, 0xa2, 0xb5, 0xfc, 0x9a, 0xa1, 0x6e, 0x88, 0xec, 0xb6, 0x71, 0xbb, 0x70,
+	0xbb, 0xcf, 0x04, 0x62, 0x03, 0xdf, 0x86, 0x65, 0x1a, 0xc7, 0x69, 0xf9, 0xf2, 0xc9, 0x21, 0xd4,
+	0x05, 0x7d, 0xee, 0x51, 0x12, 0xa5, 0xae, 0x2c, 0x08, 0x32, 0xd3, 0x86, 0xc0, 0xf9, 0x66, 0xeb,
+	0x48, 0x1d, 0x15, 0xbd, 0x55, 0x16, 0xbd, 0xec, 0x7a, 0x2a, 0x84, 0x07, 0x22, 0xdb, 0x36, 0xb3,
+	0x4b, 0x54, 0xad, 0xe8, 0x4d, 0xdd, 0xa5, 0x36, 0xa0, 0x36, 0x8b, 0x7d, 0x12, 0x8a, 0x1a, 0x42,
+	0x49, 0x05, 0x86, 0x1e, 0x81, 0x71, 0xea, 0x51, 0xff, 0xdc, 0xa3, 0xf9, 0x55, 0xa5, 0x5e, 0xd4,
+	0x5b, 0x51, 0x62, 0x75, 0x69, 0x79, 0x04, 0xc6, 0x71, 0x40, 0x67, 0x25, 0x8b, 0x46, 0xc9, 0x42,
+	0x89, 0x95, 0xc5, 0x43, 0xd0, 0xf8, 0x19, 0x29, 0x12, 0xa1, 0xf9, 0xb8, 0x53, 0x3a, 0x5a, 0x93,
+	0x6c, 0xbc, 0x42, 0x89, 0xdd, 0xcc, 0x13, 0x42, 0x03, 0x2f, 0x74, 0xa3, 0xc5, 0xec, 0x88, 0x50,
+	0x9e, 0x21, 0x99, 0xf7, 0x96, 0x90, 0x39, 0x5c, 0xc4, 0x62, 0x99, 0x3f, 0x6e, 0x99, 0xa5, 0x58,
+	0x66, 0x6f, 0x5c, 0x77, 0xf2, 0x47, 0xac, 0x66, 0x51, 0x23, 0x7b, 0xcb, 0x42, 0xb0, 0x7c, 0x16,
+	0x7a, 0x11, 0xcf, 0xa7, 0x36, 0xe6, 0xdf, 0xec, 0xf2, 0x33, 0xf3, 0xa6, 0xae, 0xe7, 0xfb, 0x94,
+	0x24, 0x22, 0x9b, 0x74, 0x0c, 0x33, 0x6f, 0xda, 0x13, 0x08, 0xba, 0x07, 0xad, 0x60, 0x7e, 0xf6,
+	0x71, 0xa6, 0xc1, 0x72, 0x4a, 0x7f, 0x7e, 0x0d, 0x37, 0x19, 0x5a, 0x56, 0xfa, 0x24, 0x53, 0x5a,
+	0x29, 0x28, 0x7d, 0xa2, 0x94, 0xde, 0x87, 0xf6, 0x69, 0x9c, 0xa4, 0xae, 0x17, 0xf9, 0x22, 0x05,
+	0xd7, 0x94, 0x16, 0x83, 0x7b, 0x91, 0xcf, 0xb3, 0x6c, 0x13, 0x80, 0x5c, 0xa4, 0xd4, 0x73, 0x3d,
+	0x7a, 0x92, 0x98, 0xb7, 0xc4, 0xab, 0x0c, 0x47, 0x7a, 0xf4, 0x24, 0x41, 0x4f, 0xa1, 0x3d, 0xa7,
+	0xf1, 0xc5, 0xeb, 0xac, 0xab, 0x1b, 0x3c, 0xd4, 0x1b, 0xe5, 0xb7, 0xab, 0xed, 0x03, 0xa6, 0x23,
+	0x3b, 0xc6, 0xad, 0x79, 0xa1, 0x75, 0x99, 0x72, 0x8d, 0x7f, 0x81, 0x72, 0x9f, 0x96, 0x29, 0xf7,
+	0xfa, 0xbb, 0x29, 0x57, 0xc5, 0xbf, 0xc8, 0xbc, 0x9b, 0x59, 0x05, 0x77, 0xb3, 0xb4, 0x85, 0x65,
+	0x85, 0x66, 0x43, 0x67, 0x1a, 0x47, 0x11, 0x99, 0xa6, 0xaa, 0x0f, 0xc4, 0xfb, 0xd8, 0x50, 0x7d,
+	0xf4, 0x85, 0xf4, 0x4d, 0xdd, 0xb4, 0xa7, 0x45, 0x19, 0xfa, 0x7f, 0xd0, 0xa6, 0x8b, 0x24, 0x8d,
+	0x67, 0xe6, 0x53, 0x1e, 0xa1, 0xd5, 0x6d, 0xf1, 0x60, 0xbb, 0xad, 0x1e, 0x6c, 0xb7, 0x7b, 0xd1,
+	0x6b, 0x2c, 0x75, 0xd0, 0x67, 0x00, 0xf3, 0x99, 0xbc, 0x01, 0x27, 0xe6, 0xd7, 0x15, 0x6e, 0x72,
+	0xfd, 0xf2, 0x73, 0x4e, 0xb2, 0x5b, 0xfb, 0xeb, 0x77, 0xdf, 0x6e, 0x5e, 0xc3, 0xfa, 0x3c, 0x7b,
+	0xb3, 0xda, 0x87, 0x15, 0x51, 0x54, 0xaa, 0x52, 0x35, 0x31, 0x7f, 0x59, 0x79, 0xc7, 0xf5, 0x65,
+	0xb7, 0xc9, 0x5c, 0x68, 0xe2, 0xfd, 0x02, 0x77, 0x82, 0xd2, 0x0d, 0x68, 0xfd, 0xeb, 0x2a, 0xb4,
+	0x8a, 0x6b, 0xf7, 0x6e, 0xd2, 0xbd, 0x03, 0x4d, 0x29, 0xcc, 0xe9, 0x09, 0x83, 0x9f, 0xbf, 0x11,
+	0x6f, 0x02, 0x4c, 0x4f, 0xbd, 0x28, 0x22, 0x21, 0x33, 0x17, 0x0f, 0x45, 0xba, 0x44, 0x6c, 0x1f,
+	0x6d, 0x81, 0xa1, 0xc4, 0xe2, 0xa9, 0x4f, 0x12, 0x55, 0x1b, 0x77, 0x24, 0xce, 0x9f, 0xbd, 0x6c,
+	0x1f, 0xed, 0xc0, 0x0d, 0xa5, 0x99, 0x12, 0x3a, 0x0b, 0x22, 0x5e, 0x29, 0xc9, 0x8b, 0x0c, 0x92,
+	0xa2, 0x71, 0x2e, 0x41, 0x6b, 0xa0, 0xc5, 0xd1, 0x82, 0x39, 0xd4, 0xc4, 0xcb, 0x4e, 0x1c, 0x2d,
+	0x6c, 0x1f, 0xbd, 0x0f, 0x1d, 0x06, 0x27, 0x24, 0x61, 0x8c, 0xa1, 0x8e, 0xdf, 0x36, 0x6e, 0xc5,
+	0xd1, 0x62, 0x24, 0x40, 0xdb, 0xdf, 0xd5, 0x59, 0x26, 0xf3, 0xf9, 0x77, 0x77, 0xa0, 0x2e, 0xb6,
+	0x34, 0xcb, 0x9f, 0x12, 0x97, 0x77, 0xca, 0x5b, 0x5e, 0xb1, 0xf9, 0x1f, 0x96, 0x60, 0x75, 0x14,
+	0xcc, 0x16, 0xa1, 0x97, 0x92, 0x5e, 0xe8, 0xd1, 0x19, 0x26, 0xaf, 0x16, 0x24, 0x49, 0xaf, 0x3c,
+	0x21, 0xbd, 0x07, 0x7a, 0x10, 0xf9, 0xc1, 0xd4, 0x4b, 0x63, 0xf5, 0xea, 0x9d, 0x03, 0xec, 0x3c,
+	0x0b, 0xa2, 0xf4, 0x58, 0x85, 0x4d, 0xc7, 0x1a, 0x6b, 0x8a, 0x19, 0x70, 0xaa, 0x66, 0x11, 0x17,
+	0x2f, 0xa7, 0xe2, 0x7d, 0xad, 0x35, 0x97, 0xa7, 0x1c, 0x7f, 0x3c, 0xed, 0x42, 0x9b, 0xcd, 0x33,
+	0x5f, 0x3a, 0x79, 0xe5, 0x8b, 0xa3, 0xc5, 0x40, 0xad, 0xde, 0x13, 0xb8, 0x19, 0x44, 0x8c, 0x59,
+	0x89, 0x7b, 0x14, 0xa4, 0xe2, 0xcc, 0x76, 0x29, 0xcb, 0x49, 0x16, 0xb2, 0x1a, 0xbe, 0x21, 0xa5,
+	0xbb, 0x41, 0xca, 0xcf, 0x6f, 0x2c, 0xae, 0x18, 0x35, 0x9f, 0x06, 0xc7, 0x29, 0x8f, 0x5b, 0x0d,
+	0x8b, 0x06, 0x1b, 0x6d, 0x44, 0xce, 0x5d, 0xf2, 0xca, 0xe7, 0x14, 0x5d, 0xc3, 0x5a, 0x44, 0xce,
+	0xad, 0x57, 0x3e, 0xba, 0x0f, 0xd7, 0x45, 0xbc, 0x8b, 0x3c, 0x2b, 0x9e, 0x81, 0x56, 0x78, 0xc8,
+	0x0b, 0x1c, 0xfb, 0x1c, 0x74, 0x96, 0xa9, 0x62, 0x65, 0x81, 0xe7, 0xdd, 0x7d, 0x15, 0xe3, 0x37,
+	0x45, 0x94, 0x27, 0x3c, 0xd7, 0xe6, 0x05, 0x5d, 0x6e, 0xdc, 0xfd, 0x00, 0xda, 0x25, 0x19, 0xd2,
+	0xa1, 0x86, 0x7b, 0xf6, 0xc8, 0x12, 0x4f, 0xd5, 0xfd, 0x7d, 0xab, 0x87, 0x8d, 0xca, 0xee, 0x08,
+	0x6e, 0xc4, 0xf4, 0x84, 0x57, 0x20, 0xd3, 0x98, 0xfa, 0xb2, 0xaf, 0xdd, 0xd6, 0x21, 0xff, 0x2f,
+	0xe2, 0xf4, 0xf3, 0xed, 0x93, 0x20, 0x3d, 0x5d, 0x1c, 0x31, 0x02, 0xd8, 0x51, 0x9a, 0x3b, 0x42,
+	0xf3, 0xa1, 0xfc, 0xa9, 0xe4, 0xec, 0xe3, 0x9d, 0x93, 0x58, 0x62, 0x47, 0x1a, 0x07, 0x9f, 0xfc,
+	0x33, 0x00, 0x00, 0xff, 0xff, 0x07, 0x84, 0x3f, 0x04, 0xc4, 0x19, 0x00, 0x00,
 }
diff --git a/go/voltha/voltha.pb.go b/go/voltha/voltha.pb.go
index e69957a..7e9a2a5 100644
--- a/go/voltha/voltha.pb.go
+++ b/go/voltha/voltha.pb.go
@@ -2135,6 +2135,174 @@
 	return ""
 }
 
+type DeviceImageDownloadRequest struct {
+	// Device Id
+	// allows for operations on multiple devices.
+	DeviceId []*common.ID `protobuf:"bytes,1,rep,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
+	//The image for the device containing all the information
+	Image *Image `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"`
+	//Activate the image if the download to the device is successful
+	ActivateOnSuccess bool `protobuf:"varint,3,opt,name=activateOnSuccess,proto3" json:"activateOnSuccess,omitempty"`
+	//Automatically commit the image if the activation on the device is successful
+	CommitOnSuccess      bool     `protobuf:"varint,4,opt,name=commitOnSuccess,proto3" json:"commitOnSuccess,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeviceImageDownloadRequest) Reset()         { *m = DeviceImageDownloadRequest{} }
+func (m *DeviceImageDownloadRequest) String() string { return proto.CompactTextString(m) }
+func (*DeviceImageDownloadRequest) ProtoMessage()    {}
+func (*DeviceImageDownloadRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{15}
+}
+
+func (m *DeviceImageDownloadRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceImageDownloadRequest.Unmarshal(m, b)
+}
+func (m *DeviceImageDownloadRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceImageDownloadRequest.Marshal(b, m, deterministic)
+}
+func (m *DeviceImageDownloadRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceImageDownloadRequest.Merge(m, src)
+}
+func (m *DeviceImageDownloadRequest) XXX_Size() int {
+	return xxx_messageInfo_DeviceImageDownloadRequest.Size(m)
+}
+func (m *DeviceImageDownloadRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceImageDownloadRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceImageDownloadRequest proto.InternalMessageInfo
+
+func (m *DeviceImageDownloadRequest) GetDeviceId() []*common.ID {
+	if m != nil {
+		return m.DeviceId
+	}
+	return nil
+}
+
+func (m *DeviceImageDownloadRequest) GetImage() *Image {
+	if m != nil {
+		return m.Image
+	}
+	return nil
+}
+
+func (m *DeviceImageDownloadRequest) GetActivateOnSuccess() bool {
+	if m != nil {
+		return m.ActivateOnSuccess
+	}
+	return false
+}
+
+func (m *DeviceImageDownloadRequest) GetCommitOnSuccess() bool {
+	if m != nil {
+		return m.CommitOnSuccess
+	}
+	return false
+}
+
+type DeviceImageRequest struct {
+	//Device Id
+	//allows for operations on multiple adapters.
+	DeviceId []*common.ID `protobuf:"bytes,1,rep,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
+	// Image Version, this is the sole identifier of the image. it's the vendor specified OMCI version
+	// must be known at the time of initiating a download, activate, commit image on an onu.
+	Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
+	//Automatically commit the image if the activation on the device is successful
+	CommitOnSuccess      bool     `protobuf:"varint,3,opt,name=commitOnSuccess,proto3" json:"commitOnSuccess,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeviceImageRequest) Reset()         { *m = DeviceImageRequest{} }
+func (m *DeviceImageRequest) String() string { return proto.CompactTextString(m) }
+func (*DeviceImageRequest) ProtoMessage()    {}
+func (*DeviceImageRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{16}
+}
+
+func (m *DeviceImageRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceImageRequest.Unmarshal(m, b)
+}
+func (m *DeviceImageRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceImageRequest.Marshal(b, m, deterministic)
+}
+func (m *DeviceImageRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceImageRequest.Merge(m, src)
+}
+func (m *DeviceImageRequest) XXX_Size() int {
+	return xxx_messageInfo_DeviceImageRequest.Size(m)
+}
+func (m *DeviceImageRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceImageRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceImageRequest proto.InternalMessageInfo
+
+func (m *DeviceImageRequest) GetDeviceId() []*common.ID {
+	if m != nil {
+		return m.DeviceId
+	}
+	return nil
+}
+
+func (m *DeviceImageRequest) GetVersion() string {
+	if m != nil {
+		return m.Version
+	}
+	return ""
+}
+
+func (m *DeviceImageRequest) GetCommitOnSuccess() bool {
+	if m != nil {
+		return m.CommitOnSuccess
+	}
+	return false
+}
+
+type DeviceImageResponse struct {
+	//Image state for the different devices
+	DeviceImageStates    []*DeviceImageState `protobuf:"bytes,1,rep,name=device_image_states,json=deviceImageStates,proto3" json:"device_image_states,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *DeviceImageResponse) Reset()         { *m = DeviceImageResponse{} }
+func (m *DeviceImageResponse) String() string { return proto.CompactTextString(m) }
+func (*DeviceImageResponse) ProtoMessage()    {}
+func (*DeviceImageResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{17}
+}
+
+func (m *DeviceImageResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceImageResponse.Unmarshal(m, b)
+}
+func (m *DeviceImageResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceImageResponse.Marshal(b, m, deterministic)
+}
+func (m *DeviceImageResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceImageResponse.Merge(m, src)
+}
+func (m *DeviceImageResponse) XXX_Size() int {
+	return xxx_messageInfo_DeviceImageResponse.Size(m)
+}
+func (m *DeviceImageResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceImageResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceImageResponse proto.InternalMessageInfo
+
+func (m *DeviceImageResponse) GetDeviceImageStates() []*DeviceImageState {
+	if m != nil {
+		return m.DeviceImageStates
+	}
+	return nil
+}
+
 // Additional information required to process flow at device adapters
 type FlowMetadata struct {
 	// Meters associated with flow-update to adapter
@@ -2148,7 +2316,7 @@
 func (m *FlowMetadata) String() string { return proto.CompactTextString(m) }
 func (*FlowMetadata) ProtoMessage()    {}
 func (*FlowMetadata) Descriptor() ([]byte, []int) {
-	return fileDescriptor_e084f1a60ce7016c, []int{15}
+	return fileDescriptor_e084f1a60ce7016c, []int{18}
 }
 
 func (m *FlowMetadata) XXX_Unmarshal(b []byte) error {
@@ -2195,177 +2363,198 @@
 	proto.RegisterType((*SelfTestResponse)(nil), "voltha.SelfTestResponse")
 	proto.RegisterType((*OfAgentSubscriber)(nil), "voltha.OfAgentSubscriber")
 	proto.RegisterType((*Membership)(nil), "voltha.Membership")
+	proto.RegisterType((*DeviceImageDownloadRequest)(nil), "voltha.DeviceImageDownloadRequest")
+	proto.RegisterType((*DeviceImageRequest)(nil), "voltha.DeviceImageRequest")
+	proto.RegisterType((*DeviceImageResponse)(nil), "voltha.DeviceImageResponse")
 	proto.RegisterType((*FlowMetadata)(nil), "voltha.FlowMetadata")
 }
 
 func init() { proto.RegisterFile("voltha_protos/voltha.proto", fileDescriptor_e084f1a60ce7016c) }
 
 var fileDescriptor_e084f1a60ce7016c = []byte{
-	// 2613 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5b, 0x6f, 0x1b, 0xc7,
-	0xf5, 0x17, 0x75, 0xd7, 0x21, 0x25, 0x91, 0x43, 0x5d, 0x68, 0x4a, 0xb2, 0xad, 0xc9, 0x4d, 0x51,
-	0x62, 0xd2, 0xb1, 0x9c, 0x20, 0xff, 0xf8, 0x1f, 0x34, 0xba, 0x59, 0x61, 0x6d, 0x99, 0xec, 0x52,
-	0xb2, 0xd3, 0x36, 0x06, 0xb1, 0xe4, 0x0e, 0xa9, 0x85, 0x97, 0x5c, 0x76, 0x77, 0x28, 0x5b, 0x30,
-	0x82, 0x02, 0xe9, 0x25, 0x7d, 0xcf, 0x7b, 0x9f, 0x5a, 0x14, 0xe8, 0x77, 0xc9, 0x43, 0xd1, 0xa7,
-	0xbe, 0x16, 0x7d, 0xe8, 0x27, 0xc8, 0x73, 0x31, 0x67, 0x66, 0xc9, 0x5d, 0xee, 0xae, 0x24, 0xa6,
-	0x01, 0xfa, 0x24, 0xed, 0x39, 0x67, 0x7e, 0xe7, 0x36, 0x73, 0xe6, 0xec, 0x59, 0x42, 0xfe, 0xdc,
-	0xb6, 0xf8, 0x99, 0x5e, 0xeb, 0x3a, 0x36, 0xb7, 0xdd, 0xa2, 0x7c, 0x2a, 0xe0, 0x13, 0x99, 0x96,
-	0x4f, 0xf9, 0xf5, 0x96, 0x6d, 0xb7, 0x2c, 0x56, 0xd4, 0xbb, 0x66, 0x51, 0xef, 0x74, 0x6c, 0xae,
-	0x73, 0xd3, 0xee, 0xb8, 0x52, 0x2a, 0xbf, 0xa6, 0xb8, 0xf8, 0x54, 0xef, 0x35, 0x8b, 0xac, 0xdd,
-	0xe5, 0x17, 0x8a, 0x99, 0x0b, 0xc2, 0xb7, 0x19, 0x57, 0xe0, 0xf9, 0x21, 0xc5, 0x0d, 0xbb, 0xdd,
-	0xb6, 0x3b, 0xd1, 0xbc, 0x33, 0xa6, 0x5b, 0xfc, 0x4c, 0xf1, 0x68, 0x90, 0x67, 0xd9, 0x2d, 0xb3,
-	0xa1, 0x5b, 0x35, 0x83, 0x9d, 0x9b, 0x0d, 0x16, 0xbd, 0x3e, 0xc0, 0x5b, 0x0b, 0xf2, 0x74, 0x43,
-	0xef, 0x72, 0xe6, 0x28, 0xe6, 0xad, 0x20, 0xd3, 0xee, 0xb2, 0x4e, 0xd3, 0xb2, 0x5f, 0xd6, 0x3e,
-	0xd8, 0x89, 0x11, 0x68, 0x37, 0xcc, 0x5a, 0xdb, 0xac, 0xd7, 0x8c, 0xba, 0x12, 0xd8, 0x8c, 0x10,
-	0xd0, 0x2d, 0xdd, 0x69, 0x0f, 0x44, 0x6e, 0x06, 0x45, 0xd8, 0x2b, 0x5e, 0x6b, 0xd8, 0x9d, 0xa6,
-	0xd9, 0x92, 0x7c, 0xfa, 0xa7, 0x04, 0x24, 0x0f, 0xd0, 0xe4, 0x23, 0xc7, 0xee, 0x75, 0xc9, 0x32,
-	0x8c, 0x9b, 0x46, 0x2e, 0x71, 0x3b, 0xb1, 0x35, 0xb7, 0x37, 0xf5, 0xef, 0xef, 0xbf, 0xdb, 0x48,
-	0x68, 0xe3, 0xa6, 0x41, 0x4a, 0xb0, 0x18, 0x74, 0xde, 0xcd, 0x8d, 0xdf, 0x9e, 0xd8, 0x4a, 0xde,
-	0x5b, 0x2e, 0xa8, 0x2c, 0x3e, 0x96, 0x6c, 0x89, 0xb5, 0x37, 0xf7, 0xcf, 0xef, 0xbf, 0xdb, 0x98,
-	0x14, 0x58, 0xda, 0x82, 0xe5, 0xe7, 0xb8, 0x64, 0x07, 0x66, 0x3c, 0x88, 0x09, 0x84, 0x58, 0xf0,
-	0x20, 0xc2, 0x6b, 0x3d, 0x49, 0xfa, 0x7f, 0x90, 0xf2, 0x59, 0xe9, 0x92, 0x77, 0x61, 0xca, 0xe4,
-	0xac, 0xed, 0xe6, 0x12, 0x08, 0x91, 0x0d, 0x42, 0xa0, 0x90, 0x26, 0x25, 0xe8, 0x1f, 0x13, 0x40,
-	0x0e, 0xcf, 0x59, 0x87, 0x3f, 0x34, 0x2d, 0xce, 0x1c, 0xad, 0x67, 0xb1, 0x47, 0xec, 0x82, 0x7e,
-	0x93, 0x80, 0xec, 0x10, 0xf9, 0xe4, 0xa2, 0xcb, 0xc8, 0x02, 0x40, 0x13, 0x29, 0x35, 0xdd, 0xb2,
-	0xd2, 0x63, 0x24, 0x05, 0xb3, 0x0d, 0x9d, 0xb3, 0x96, 0xed, 0x5c, 0xa4, 0x13, 0x24, 0x0d, 0x29,
-	0xb7, 0x57, 0xaf, 0xf5, 0x29, 0xe3, 0x84, 0xc0, 0xc2, 0x8b, 0xae, 0x59, 0x63, 0x02, 0xaa, 0xc6,
-	0x2f, 0xba, 0x2c, 0x3d, 0x41, 0x96, 0x21, 0x23, 0x83, 0xec, 0x27, 0x4f, 0x0a, 0xb2, 0xf4, 0xc7,
-	0x4f, 0x9e, 0xa2, 0x26, 0x2c, 0x0e, 0x19, 0x42, 0x3e, 0x83, 0x89, 0x17, 0xec, 0x02, 0xd3, 0xb0,
-	0x70, 0xaf, 0xe0, 0x39, 0x17, 0xf6, 0xa2, 0x10, 0xe1, 0x81, 0x26, 0x96, 0x92, 0x25, 0x98, 0x3a,
-	0xd7, 0xad, 0x1e, 0xcb, 0x8d, 0x8b, 0x54, 0x6a, 0xf2, 0x81, 0xfe, 0x25, 0x01, 0x49, 0xdf, 0x92,
-	0xb8, 0x6c, 0xaf, 0xc0, 0x34, 0xeb, 0xe8, 0x75, 0x4b, 0xae, 0x9e, 0xd5, 0xd4, 0x13, 0x59, 0x83,
-	0x39, 0xe5, 0x80, 0x69, 0xe4, 0x26, 0x10, 0x78, 0x56, 0x12, 0x4a, 0x06, 0xd9, 0x00, 0x18, 0xb8,
-	0x95, 0x9b, 0x44, 0xee, 0x1c, 0x52, 0x30, 0xae, 0x77, 0x60, 0xca, 0xe9, 0x59, 0xcc, 0xcd, 0x4d,
-	0x61, 0xc6, 0x56, 0x63, 0x9c, 0xd2, 0xa4, 0x14, 0xfd, 0x14, 0x52, 0x3e, 0x8e, 0x4b, 0xee, 0xc0,
-	0x8c, 0x4c, 0x4b, 0x28, 0xe5, 0x7e, 0x00, 0x4f, 0x86, 0xbe, 0x80, 0xd4, 0xbe, 0xed, 0xb0, 0x52,
-	0xc7, 0xe5, 0x7a, 0xa7, 0xc1, 0xc8, 0xdb, 0x90, 0x34, 0xd5, 0xff, 0xb5, 0x61, 0x8f, 0xc1, 0xe3,
-	0x94, 0x0c, 0xb2, 0x03, 0xd3, 0xb2, 0x00, 0xa0, 0xe7, 0xc9, 0x7b, 0x4b, 0x9e, 0x96, 0xcf, 0x91,
-	0x5a, 0xe5, 0x3a, 0xef, 0xb9, 0x7b, 0x53, 0x62, 0x87, 0x8e, 0x69, 0x4a, 0x94, 0x3e, 0x80, 0x79,
-	0xbf, 0x32, 0x97, 0x6c, 0x07, 0x77, 0x67, 0x1f, 0xc4, 0x2f, 0xe5, 0x6d, 0xcf, 0x0f, 0x61, 0xb1,
-	0xdc, 0x6e, 0x98, 0x27, 0xcc, 0xe5, 0x1a, 0xfb, 0x55, 0x8f, 0xb9, 0x9c, 0x2c, 0x0c, 0xb2, 0x82,
-	0xe9, 0x20, 0x30, 0xd9, 0xeb, 0x99, 0x86, 0x4a, 0x25, 0xfe, 0x4f, 0x7f, 0x0d, 0x29, 0xb9, 0xc4,
-	0xed, 0xda, 0x1d, 0x97, 0x91, 0x9f, 0xc0, 0xb4, 0xc3, 0xdc, 0x9e, 0xc5, 0xd5, 0xa6, 0x79, 0xc7,
-	0xd3, 0xe9, 0x97, 0x0a, 0x3c, 0x68, 0x28, 0xae, 0xa9, 0x65, 0xb4, 0x00, 0x24, 0xcc, 0x25, 0x49,
-	0x98, 0xa9, 0x9e, 0xee, 0xef, 0x1f, 0x56, 0xab, 0xe9, 0x31, 0xf1, 0xf0, 0x70, 0xb7, 0xf4, 0xf8,
-	0x54, 0x3b, 0x4c, 0x27, 0xe8, 0x73, 0x98, 0x7d, 0x2a, 0xf6, 0x54, 0x95, 0x85, 0x0d, 0xfe, 0x18,
-	0x52, 0xb2, 0x0c, 0xc9, 0x53, 0xa0, 0x62, 0x99, 0x2d, 0xa8, 0xca, 0xb3, 0x2b, 0x78, 0xfb, 0xf8,
-	0xff, 0xe7, 0x63, 0x5a, 0x52, 0x1f, 0x3c, 0xee, 0xcd, 0xa8, 0x6d, 0x4b, 0xff, 0x31, 0x09, 0xd3,
-	0x4f, 0xd1, 0x03, 0x72, 0x0b, 0x66, 0xce, 0x99, 0xe3, 0x9a, 0x76, 0x27, 0x98, 0x37, 0x8f, 0x4a,
-	0x3e, 0x82, 0x59, 0x55, 0x59, 0xbd, 0xaa, 0xb4, 0xe8, 0x79, 0xbf, 0x2b, 0xe9, 0xfe, 0x9a, 0xd2,
-	0x97, 0x8d, 0x2a, 0x6a, 0x13, 0xff, 0x7d, 0x51, 0x9b, 0xbc, 0x6e, 0x51, 0x23, 0x9f, 0x41, 0x4a,
-	0x1d, 0x27, 0x71, 0x64, 0xbc, 0x93, 0x41, 0x82, 0x2b, 0xc5, 0xe1, 0xf1, 0xaf, 0x4e, 0x1a, 0x7d,
-	0xb2, 0x4b, 0xf6, 0x61, 0x5e, 0x21, 0xb4, 0xb0, 0x2e, 0xe6, 0xa6, 0x63, 0xcb, 0xa1, 0x1f, 0x43,
-	0xa9, 0x55, 0xb5, 0x74, 0x1f, 0xe6, 0xe5, 0xc1, 0xf5, 0x0e, 0xd8, 0x4c, 0xec, 0x01, 0x0b, 0x80,
-	0x30, 0xff, 0xf9, 0xfc, 0x19, 0x64, 0x06, 0xf7, 0x93, 0xce, 0xf5, 0xba, 0xee, 0xb2, 0xdc, 0xba,
-	0x02, 0x12, 0x9c, 0xc2, 0xb1, 0x59, 0x97, 0xe6, 0x1c, 0xe8, 0x5c, 0xdf, 0x4b, 0x0b, 0xa0, 0xa4,
-	0xaf, 0x9e, 0x68, 0x8b, 0x42, 0x4a, 0x08, 0xa9, 0xd5, 0xe4, 0x19, 0x64, 0xfd, 0x37, 0x9a, 0x07,
-	0xba, 0xa1, 0x52, 0x84, 0xa0, 0xb8, 0x95, 0x2e, 0x85, 0x45, 0xb3, 0xa4, 0x98, 0x42, 0xa0, 0x7f,
-	0x4e, 0x40, 0xba, 0xca, 0xac, 0xe6, 0xf5, 0x0e, 0xd0, 0xb0, 0xa4, 0x9f, 0xe0, 0x3f, 0x40, 0x15,
-	0x58, 0x08, 0x72, 0xe2, 0x0f, 0x0f, 0xc9, 0xc0, 0xfc, 0x93, 0xf2, 0x49, 0xad, 0x7a, 0x5a, 0xa9,
-	0x94, 0xb5, 0x93, 0xc3, 0x83, 0xf4, 0xb8, 0x20, 0x9d, 0x3e, 0x79, 0xf4, 0xa4, 0xfc, 0xec, 0x49,
-	0xed, 0x50, 0xd3, 0xca, 0x5a, 0x7a, 0x82, 0x96, 0x21, 0x53, 0x6e, 0xee, 0xb6, 0x58, 0x87, 0x57,
-	0x7b, 0x75, 0xb7, 0xe1, 0x98, 0x75, 0xe6, 0x88, 0x32, 0x6b, 0x37, 0x75, 0x41, 0xec, 0x17, 0x32,
-	0x6d, 0x4e, 0x51, 0x4a, 0x86, 0x28, 0xd1, 0xea, 0xc6, 0xef, 0x17, 0x8c, 0x59, 0x49, 0x28, 0x19,
-	0xf4, 0x01, 0xc0, 0x31, 0x6b, 0xd7, 0x99, 0xe3, 0x9e, 0x99, 0x5d, 0x81, 0x84, 0xbb, 0xa6, 0xd6,
-	0xd1, 0xdb, 0xcc, 0x43, 0x42, 0xca, 0x13, 0xbd, 0xcd, 0xd4, 0xa1, 0x1e, 0xf7, 0x0e, 0x35, 0x3d,
-	0x84, 0xd4, 0x43, 0xcb, 0x7e, 0x79, 0xcc, 0xb8, 0x2e, 0x72, 0x41, 0x3e, 0x84, 0xe9, 0x36, 0xf3,
-	0x15, 0xe4, 0x8d, 0x82, 0xbf, 0x83, 0xb1, 0x9b, 0xdd, 0x1a, 0xb2, 0x55, 0x0d, 0xd0, 0x94, 0xf0,
-	0xbd, 0xbf, 0xdd, 0x85, 0x79, 0x79, 0xb0, 0xab, 0xcc, 0x11, 0x49, 0x22, 0xcf, 0x60, 0xfe, 0x88,
-	0x71, 0x9f, 0x61, 0x2b, 0x05, 0xd9, 0xe5, 0x15, 0xbc, 0x2e, 0xaf, 0x70, 0x28, 0xba, 0xbc, 0x7c,
-	0xff, 0x64, 0x0c, 0x64, 0x69, 0xfe, 0xeb, 0xbf, 0xff, 0xeb, 0xdb, 0xf1, 0x25, 0x42, 0xb0, 0x61,
-	0x3c, 0xff, 0xa0, 0xd8, 0x1e, 0xe0, 0x3c, 0x87, 0xf4, 0x69, 0xd7, 0xd0, 0x39, 0xf3, 0x61, 0x47,
-	0x60, 0xe4, 0x63, 0xf4, 0xd1, 0x0d, 0xc4, 0x5e, 0xa5, 0x11, 0xd8, 0x9f, 0x24, 0xb6, 0xc9, 0x01,
-	0xcc, 0x1d, 0x31, 0xae, 0x8a, 0x54, 0x9c, 0xcd, 0xfd, 0x3a, 0x20, 0xe5, 0xe8, 0x22, 0x62, 0xce,
-	0x91, 0x19, 0x85, 0x49, 0x9e, 0x43, 0xe6, 0xb1, 0xe9, 0xf2, 0xe0, 0x05, 0x12, 0x87, 0xb6, 0x1c,
-	0x75, 0x93, 0xb8, 0xf4, 0x06, 0x82, 0x66, 0x49, 0xc6, 0x33, 0xd4, 0xec, 0x23, 0x55, 0x61, 0xf1,
-	0x88, 0x05, 0xd0, 0x09, 0x14, 0x54, 0xff, 0x5b, 0x3a, 0xc8, 0x47, 0x5e, 0x4d, 0xf4, 0x26, 0xe2,
-	0xe5, 0xc8, 0x4a, 0x08, 0xaf, 0xf8, 0xda, 0x34, 0xbe, 0x22, 0x1a, 0xa4, 0x84, 0xcd, 0xbb, 0x5e,
-	0x21, 0x8d, 0x33, 0x37, 0x3d, 0x54, 0x86, 0x5d, 0x9a, 0x43, 0x64, 0x42, 0xd2, 0x1e, 0x72, 0xbf,
-	0x18, 0x33, 0x20, 0x02, 0xf3, 0x71, 0xb0, 0xae, 0xc6, 0x21, 0xaf, 0x44, 0x56, 0x68, 0x97, 0xde,
-	0x42, 0xfc, 0x1b, 0x64, 0xd5, 0xc3, 0x1f, 0x2a, 0xf0, 0xe4, 0x97, 0x90, 0x3e, 0x62, 0x41, 0x2d,
-	0x81, 0x80, 0x44, 0x97, 0x7e, 0xfa, 0x26, 0xe2, 0xde, 0x24, 0xeb, 0x31, 0xb8, 0x32, 0x2e, 0x4d,
-	0x58, 0x09, 0xf9, 0x50, 0xb1, 0x1d, 0xee, 0x46, 0xc7, 0x5c, 0xc9, 0xa1, 0x04, 0xdd, 0x46, 0x0d,
-	0x6f, 0x12, 0x7a, 0x99, 0x86, 0x62, 0x17, 0xd1, 0x5e, 0xc1, 0xd2, 0xb0, 0x13, 0x02, 0x84, 0x2c,
-	0x47, 0x20, 0x97, 0x8c, 0x7c, 0x36, 0x82, 0x4c, 0xef, 0xa3, 0xbe, 0x02, 0x79, 0xff, 0x6a, 0x7d,
-	0xc5, 0xd7, 0xe2, 0x4f, 0x4d, 0x78, 0xf8, 0xbb, 0x04, 0xac, 0x1e, 0x62, 0x33, 0x78, 0x6d, 0xed,
-	0x71, 0xa7, 0xeb, 0x01, 0x1a, 0xf0, 0x21, 0xdd, 0x19, 0xc5, 0x80, 0xa2, 0xea, 0x44, 0xbf, 0x49,
-	0x40, 0xee, 0xc0, 0x74, 0x7f, 0x14, 0x43, 0xfe, 0x1f, 0x0d, 0xf9, 0x88, 0xde, 0x1f, 0xc9, 0x10,
-	0x43, 0x6a, 0x27, 0x46, 0x44, 0xce, 0x45, 0x9d, 0x0c, 0xe6, 0x9c, 0x04, 0x8a, 0x23, 0xf2, 0xaf,
-	0x99, 0xf1, 0x26, 0x62, 0xfd, 0x26, 0x01, 0xeb, 0xb2, 0x96, 0x85, 0x14, 0x9d, 0xa0, 0x19, 0xeb,
-	0x21, 0x05, 0x48, 0x97, 0x6b, 0x62, 0x5d, 0xbf, 0x83, 0x26, 0xbc, 0x43, 0xaf, 0x61, 0x82, 0xa8,
-	0x78, 0xbf, 0x4d, 0xc0, 0x46, 0x84, 0x15, 0xc7, 0xa2, 0xb2, 0x4b, 0x33, 0xd6, 0x02, 0x66, 0x20,
-	0xe3, 0xd8, 0x36, 0xae, 0xb0, 0xa2, 0x80, 0x56, 0x6c, 0xd1, 0x37, 0x2e, 0xb5, 0x42, 0xde, 0x1f,
-	0xc2, 0x8c, 0x16, 0xac, 0x86, 0x42, 0x8e, 0xaa, 0x82, 0x31, 0xcf, 0x86, 0x6d, 0x71, 0xe9, 0x7b,
-	0xa8, 0xeb, 0x2d, 0x72, 0x1d, 0x5d, 0x84, 0xc3, 0x5a, 0x64, 0x6e, 0x55, 0xe3, 0xe4, 0x57, 0xb6,
-	0x1a, 0x8a, 0xbf, 0x14, 0xa2, 0x77, 0x51, 0xe1, 0x36, 0xd9, 0xba, 0x32, 0xc4, 0xaa, 0x87, 0x23,
-	0xdf, 0x26, 0x60, 0x33, 0x26, 0xd7, 0x88, 0x29, 0x23, 0xbd, 0x19, 0xad, 0xf0, 0x3a, 0x59, 0xdf,
-	0x41, 0x93, 0xee, 0xd0, 0x6b, 0x9b, 0x24, 0x82, 0x5e, 0x86, 0xa4, 0x88, 0xc5, 0x55, 0x85, 0x79,
-	0x31, 0xd8, 0x7a, 0xba, 0x74, 0x15, 0x95, 0x65, 0xc8, 0xa2, 0xa7, 0xcc, 0xab, 0xc4, 0x65, 0x98,
-	0x1f, 0x00, 0x96, 0x8c, 0x78, 0xc8, 0xe4, 0x20, 0xcc, 0x11, 0x57, 0x9d, 0x84, 0x33, 0x0d, 0x97,
-	0x9c, 0x42, 0x5a, 0x63, 0x0d, 0xbb, 0xd3, 0x30, 0x2d, 0xe6, 0x99, 0xe9, 0x5f, 0x1b, 0x1b, 0x8f,
-	0x75, 0xc4, 0x5c, 0xa1, 0x61, 0x4c, 0xe1, 0xf8, 0x21, 0x5e, 0xf3, 0x11, 0x57, 0xc5, 0x50, 0x8b,
-	0xef, 0xc1, 0x90, 0xa5, 0x21, 0x4f, 0xe5, 0xdd, 0xf0, 0x53, 0x48, 0xed, 0x3b, 0x4c, 0xe7, 0xca,
-	0x34, 0x32, 0xb4, 0x3a, 0x84, 0xa6, 0x1a, 0x1b, 0x3a, 0x1c, 0x37, 0x61, 0xd2, 0x33, 0x48, 0xc9,
-	0x22, 0x1c, 0x61, 0x55, 0x9c, 0x93, 0x6f, 0x20, 0xde, 0x06, 0x5d, 0x8b, 0xb2, 0xce, 0x2b, 0xab,
-	0x3f, 0x87, 0x79, 0x55, 0x55, 0x47, 0x40, 0x56, 0x77, 0x23, 0x5d, 0x8f, 0x44, 0xf6, 0xea, 0xe4,
-	0x33, 0x48, 0x69, 0xac, 0x6e, 0xdb, 0xfc, 0x47, 0xb3, 0xd9, 0x41, 0x38, 0x01, 0x7c, 0xc0, 0x2c,
-	0xc6, 0x7f, 0x40, 0x30, 0xb6, 0xa3, 0x81, 0x0d, 0x84, 0x23, 0x75, 0xc8, 0x3c, 0xb4, 0x9d, 0x06,
-	0x1b, 0x19, 0xfd, 0x5d, 0x44, 0x7f, 0x63, 0x7b, 0x33, 0x12, 0xbd, 0x29, 0x30, 0x6b, 0x4a, 0x47,
-	0x0f, 0xe6, 0x0f, 0xec, 0x97, 0x1d, 0xcb, 0xd6, 0x8d, 0x52, 0x5b, 0x6f, 0xb1, 0xc1, 0xdd, 0x85,
-	0x8f, 0x1e, 0x2f, 0xbf, 0xec, 0xa9, 0x2d, 0x77, 0x99, 0x83, 0x13, 0x51, 0xf1, 0x3a, 0x42, 0x3f,
-	0x42, 0x4d, 0x77, 0xe9, 0x7b, 0x91, 0x9a, 0x4c, 0x01, 0x51, 0x33, 0x14, 0x86, 0x5b, 0x7c, 0x2d,
-	0x1a, 0xfd, 0xaf, 0xc4, 0x06, 0xfa, 0x3a, 0x01, 0x2b, 0x47, 0x8c, 0x07, 0x74, 0xc8, 0xd9, 0x46,
-	0xbc, 0x01, 0x51, 0x64, 0xfa, 0x09, 0x1a, 0x70, 0x9f, 0xdc, 0x1b, 0xc1, 0x80, 0xa2, 0x2b, 0x35,
-	0xf5, 0xb0, 0x15, 0x0b, 0xe0, 0x8d, 0xa8, 0x5d, 0x15, 0x32, 0x32, 0x8a, 0xfb, 0xa4, 0x29, 0x1b,
-	0xcd, 0x00, 0x92, 0x3b, 0x94, 0xd7, 0x28, 0x6d, 0x2e, 0x7d, 0x1f, 0xd5, 0xbd, 0x4d, 0xde, 0xbc,
-	0x8e, 0x3a, 0xf2, 0x0a, 0xb2, 0xfb, 0xa2, 0x67, 0xb6, 0xae, 0xe9, 0x61, 0x64, 0x82, 0x95, 0x87,
-	0xdb, 0x23, 0x79, 0xf8, 0x87, 0x04, 0x64, 0x77, 0x1b, 0xdc, 0x3c, 0xd7, 0x39, 0x43, 0x2d, 0xf2,
-	0x3e, 0x18, 0x51, 0xf5, 0x3e, 0xaa, 0xfe, 0x94, 0x7e, 0x3c, 0x4a, 0x6a, 0x25, 0xb9, 0x87, 0xfa,
-	0xc4, 0x46, 0xfb, 0x7d, 0x02, 0x32, 0x1a, 0x3b, 0x67, 0x0e, 0xff, 0x9f, 0x18, 0xe2, 0xa0, 0x6a,
-	0x61, 0x48, 0x05, 0x16, 0x07, 0xb7, 0x4d, 0xb8, 0x27, 0x9f, 0xf7, 0x2c, 0x92, 0xcd, 0x38, 0x45,
-	0x95, 0xeb, 0x24, 0x1f, 0xa9, 0x52, 0x36, 0xe1, 0xcf, 0x21, 0xeb, 0x43, 0x54, 0x03, 0xac, 0x20,
-	0x6a, 0xa6, 0x8f, 0xea, 0xb1, 0xe9, 0x3b, 0x88, 0xbc, 0x49, 0x6e, 0x45, 0x23, 0x7b, 0x23, 0x33,
-	0x97, 0x74, 0x60, 0x59, 0x46, 0x6b, 0x58, 0x41, 0x18, 0x34, 0xb6, 0x10, 0xa9, 0x0e, 0x93, 0x5e,
-	0xa5, 0x4c, 0x04, 0xe8, 0xd4, 0x1f, 0xa0, 0xeb, 0x35, 0xb0, 0x97, 0x47, 0x49, 0x36, 0xae, 0x0c,
-	0x96, 0x82, 0xb0, 0xa3, 0xf4, 0x4e, 0x5b, 0xa8, 0x80, 0x92, 0xdb, 0xb1, 0x0a, 0xbc, 0x9e, 0xe9,
-	0x4b, 0xbf, 0xf5, 0x72, 0x36, 0x16, 0xd7, 0x4e, 0x64, 0xc3, 0xf3, 0x35, 0x37, 0xee, 0xee, 0x96,
-	0x83, 0x39, 0xa2, 0xe1, 0x84, 0x62, 0x20, 0x3f, 0x14, 0x99, 0x10, 0x1e, 0xdd, 0x44, 0xb8, 0x35,
-	0x72, 0x23, 0x0a, 0x4e, 0xf6, 0x03, 0x35, 0x48, 0x0f, 0x2c, 0x56, 0x41, 0x89, 0x33, 0x79, 0x29,
-	0x62, 0x9e, 0xe7, 0x7a, 0xe3, 0x09, 0xb2, 0x3c, 0xa4, 0x44, 0x85, 0xe4, 0x21, 0xa4, 0xab, 0xdc,
-	0x61, 0x7a, 0xbb, 0xa2, 0x37, 0x5e, 0x30, 0xee, 0x96, 0x7b, 0x9c, 0xac, 0x04, 0x22, 0x2d, 0x19,
-	0xe5, 0x1e, 0x8f, 0xdd, 0x40, 0x63, 0x5b, 0x09, 0x72, 0x88, 0x6d, 0x15, 0x33, 0xcf, 0x99, 0x02,
-	0x2a, 0x75, 0x2e, 0x99, 0x4f, 0x84, 0xf1, 0x4b, 0x1d, 0x3a, 0x76, 0x37, 0x41, 0x1e, 0x41, 0x56,
-	0xc1, 0xec, 0x9f, 0xe9, 0x9d, 0x16, 0xc3, 0xa9, 0x62, 0xbc, 0xcb, 0xb9, 0x00, 0x92, 0x6f, 0x09,
-	0x82, 0x9d, 0xc2, 0x42, 0x3f, 0x21, 0xf2, 0xbb, 0x55, 0xb0, 0xf1, 0x0f, 0x87, 0x2b, 0x6e, 0xb3,
-	0xaa, 0x68, 0x79, 0x39, 0xc9, 0xc8, 0x1e, 0xcd, 0xff, 0x8d, 0x24, 0x6a, 0x0e, 0x9a, 0x8f, 0x22,
-	0xd2, 0xdb, 0xa8, 0x22, 0x4f, 0xfb, 0x09, 0x09, 0x8c, 0x55, 0xc5, 0x21, 0x7b, 0x8a, 0x76, 0xfb,
-	0xd1, 0x23, 0x07, 0x03, 0xfe, 0x2f, 0x1f, 0x61, 0xc3, 0x03, 0xa8, 0xd2, 0x70, 0x03, 0x32, 0xb2,
-	0x58, 0xfc, 0x30, 0xc3, 0xdf, 0x42, 0x15, 0xb7, 0xf2, 0x97, 0xa8, 0x10, 0xd6, 0x1b, 0x90, 0x91,
-	0xbd, 0xd0, 0x95, 0x5a, 0xe2, 0xf6, 0x93, 0xf2, 0x65, 0xfb, 0x32, 0x5f, 0xd4, 0xc1, 0x08, 0x7c,
-	0xfd, 0xb9, 0xf2, 0x60, 0x04, 0x22, 0x16, 0x3a, 0x18, 0x01, 0x2d, 0xe4, 0x31, 0x36, 0xf4, 0x78,
-	0xf5, 0xb8, 0xd1, 0x0d, 0xbd, 0xe4, 0x79, 0x5d, 0x22, 0x59, 0x8b, 0xbf, 0x78, 0x5c, 0xf2, 0x05,
-	0xcc, 0x7a, 0x63, 0xdf, 0x00, 0x58, 0x2e, 0x6e, 0x7e, 0x4c, 0xdf, 0x46, 0xd8, 0xdb, 0xf4, 0x66,
-	0x24, 0xac, 0xcb, 0xac, 0x66, 0x8d, 0x0b, 0xb4, 0xa7, 0xd8, 0x1f, 0x05, 0xc6, 0xe6, 0xc3, 0xef,
-	0xb7, 0xa1, 0xb9, 0x7a, 0xb8, 0xf2, 0x88, 0x63, 0x24, 0xe4, 0xd4, 0x8b, 0xad, 0x59, 0x27, 0x5f,
-	0x02, 0x39, 0x62, 0x7c, 0x68, 0x72, 0x3e, 0x34, 0x04, 0x8b, 0x1a, 0xae, 0x87, 0xe3, 0x11, 0xc4,
-	0xc6, 0x39, 0x3d, 0x71, 0x61, 0xbe, 0x6a, 0xb6, 0x7b, 0x96, 0xce, 0x19, 0xae, 0x27, 0xeb, 0xfd,
-	0x40, 0xf8, 0xc9, 0xea, 0x5b, 0x57, 0xdc, 0x9d, 0x1f, 0x1a, 0x4c, 0x04, 0x63, 0xa4, 0x90, 0x6a,
-	0x02, 0x49, 0xec, 0xcc, 0x7d, 0x98, 0xeb, 0x8f, 0xc8, 0xc9, 0x0d, 0x4f, 0x61, 0x68, 0x78, 0x9e,
-	0x8f, 0x67, 0xd1, 0x31, 0x72, 0x0c, 0x20, 0xdf, 0xaa, 0x70, 0x88, 0x94, 0xf2, 0x77, 0x04, 0xb1,
-	0x1b, 0x5a, 0xbd, 0x8e, 0xd2, 0x05, 0x61, 0xe3, 0x60, 0xb5, 0x7a, 0x61, 0x56, 0xef, 0x52, 0x23,
-	0xe0, 0x0d, 0xde, 0xfa, 0xce, 0x3f, 0x28, 0xfa, 0x96, 0x0b, 0xc0, 0x2f, 0x20, 0x29, 0x8a, 0xc7,
-	0x2b, 0x8e, 0xdf, 0xdd, 0xc8, 0x8a, 0x17, 0x39, 0xf9, 0x19, 0xae, 0xcb, 0x1a, 0x66, 0xd3, 0x64,
-	0x4e, 0x7e, 0xc9, 0xa3, 0x6b, 0x8c, 0xf7, 0x9c, 0x0e, 0x72, 0x5d, 0xba, 0x86, 0xc0, 0xcb, 0x24,
-	0xeb, 0x05, 0xd4, 0x0f, 0x75, 0x02, 0xc9, 0xaa, 0xef, 0xb1, 0x3f, 0xb6, 0xf5, 0x3e, 0xf0, 0xc5,
-	0x9a, 0x1b, 0x42, 0xf5, 0xc3, 0x9c, 0x41, 0xb6, 0xca, 0x75, 0x87, 0x7b, 0x9f, 0x37, 0x45, 0x4b,
-	0x6a, 0x77, 0x48, 0xff, 0xcb, 0xef, 0xd0, 0x67, 0xcf, 0xc1, 0x61, 0x0e, 0x9c, 0x16, 0x55, 0x32,
-	0x68, 0x7f, 0xa2, 0xeb, 0x0a, 0xcc, 0x1a, 0x7e, 0x19, 0x12, 0xc7, 0xe4, 0x93, 0xc4, 0xf6, 0x9e,
-	0x05, 0x59, 0xdb, 0x69, 0xe1, 0x8d, 0xd1, 0xb0, 0x1d, 0x43, 0xe1, 0xec, 0xa5, 0xe4, 0xcc, 0xbd,
-	0x82, 0x3f, 0x7d, 0xf8, 0x45, 0xa1, 0x65, 0xf2, 0xb3, 0x5e, 0x5d, 0x44, 0xa7, 0xe8, 0x49, 0xaa,
-	0x9f, 0xa0, 0xdc, 0xf1, 0x7e, 0x90, 0x72, 0xbf, 0xd8, 0xb2, 0x15, 0xed, 0xaf, 0xe3, 0x2b, 0x65,
-	0x0f, 0xef, 0xa9, 0x7f, 0x84, 0x5f, 0x19, 0xaf, 0x4c, 0x54, 0x26, 0x2b, 0x53, 0x95, 0xe9, 0xca,
-	0x4c, 0x65, 0xb6, 0x3e, 0x8d, 0x6b, 0x77, 0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0xb4, 0x0e, 0xe5,
-	0xbc, 0xdc, 0x22, 0x00, 0x00,
+	// 2900 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x49, 0x73, 0x1b, 0xc7,
+	0x15, 0x16, 0xb8, 0xf3, 0x01, 0x24, 0x81, 0x06, 0x17, 0x08, 0x24, 0xb5, 0xb4, 0x6c, 0x89, 0xa6,
+	0x2d, 0xc0, 0x5a, 0xac, 0x72, 0xec, 0xb8, 0x62, 0x6e, 0xa2, 0x11, 0x4b, 0x02, 0x32, 0x20, 0x25,
+	0x27, 0xb1, 0x0a, 0x35, 0xc0, 0x34, 0xc0, 0x29, 0x01, 0x18, 0x64, 0xa6, 0x41, 0x49, 0xa5, 0x72,
+	0xa5, 0xe2, 0x2c, 0x76, 0xce, 0xbe, 0xe7, 0x94, 0x54, 0xaa, 0x72, 0xc9, 0x7f, 0xc8, 0xdd, 0xa7,
+	0x9c, 0x72, 0x4d, 0xe5, 0x90, 0x5f, 0xe0, 0x73, 0xaa, 0x5f, 0x77, 0x03, 0x33, 0x98, 0x19, 0x2e,
+	0xb2, 0xab, 0x72, 0x22, 0xa7, 0xfb, 0xf5, 0xf7, 0xbd, 0x7e, 0xdd, 0x6f, 0xe9, 0x6e, 0x40, 0xfe,
+	0xd8, 0x69, 0xf3, 0x23, 0xb3, 0xd6, 0x73, 0x1d, 0xee, 0x78, 0x45, 0xf9, 0x55, 0xc0, 0x2f, 0x32,
+	0x25, 0xbf, 0xf2, 0x6b, 0x2d, 0xc7, 0x69, 0xb5, 0x59, 0xd1, 0xec, 0xd9, 0x45, 0xb3, 0xdb, 0x75,
+	0xb8, 0xc9, 0x6d, 0xa7, 0xeb, 0x49, 0xa9, 0xfc, 0xaa, 0xea, 0xc5, 0xaf, 0x7a, 0xbf, 0x59, 0x64,
+	0x9d, 0x1e, 0x7f, 0xa9, 0x3a, 0x73, 0x41, 0xf8, 0x0e, 0xe3, 0x0a, 0x3c, 0x3f, 0x42, 0xdc, 0x70,
+	0x3a, 0x1d, 0xa7, 0x1b, 0xdd, 0x77, 0xc4, 0xcc, 0x36, 0x3f, 0x52, 0x7d, 0x34, 0xd8, 0xd7, 0x76,
+	0x5a, 0x76, 0xc3, 0x6c, 0xd7, 0x2c, 0x76, 0x6c, 0x37, 0x58, 0xf4, 0xf8, 0x40, 0xdf, 0x6a, 0xb0,
+	0xcf, 0xb4, 0xcc, 0x1e, 0x67, 0xae, 0xea, 0xbc, 0x1c, 0xec, 0x74, 0x7a, 0xac, 0xdb, 0x6c, 0x3b,
+	0xcf, 0x6b, 0xb7, 0xee, 0xc4, 0x08, 0x74, 0x1a, 0x76, 0xad, 0x63, 0xd7, 0x6b, 0x56, 0x5d, 0x09,
+	0x5c, 0x8d, 0x10, 0x30, 0xdb, 0xa6, 0xdb, 0x19, 0x8a, 0x5c, 0x0a, 0x8a, 0xb0, 0x17, 0xbc, 0xd6,
+	0x70, 0xba, 0x4d, 0xbb, 0x25, 0xfb, 0xe9, 0x9f, 0x13, 0x90, 0xdc, 0x45, 0x95, 0xf7, 0x5d, 0xa7,
+	0xdf, 0x23, 0x4b, 0x30, 0x66, 0x5b, 0xb9, 0xc4, 0x95, 0xc4, 0xc6, 0xec, 0xf6, 0xe4, 0x7f, 0xbf,
+	0xfb, 0x76, 0x3d, 0x61, 0x8c, 0xd9, 0x16, 0x29, 0xc1, 0x42, 0x70, 0xf2, 0x5e, 0x6e, 0xec, 0xca,
+	0xf8, 0x46, 0xf2, 0xf6, 0x52, 0x41, 0xad, 0xe2, 0x03, 0xd9, 0x2d, 0xb1, 0xb6, 0x67, 0xff, 0xfd,
+	0xdd, 0xb7, 0xeb, 0x13, 0x02, 0xcb, 0x98, 0x6f, 0xfb, 0x7b, 0x3c, 0x72, 0x07, 0xa6, 0x35, 0xc4,
+	0x38, 0x42, 0xcc, 0x6b, 0x88, 0xf0, 0x58, 0x2d, 0x49, 0x7f, 0x04, 0x29, 0x9f, 0x96, 0x1e, 0x79,
+	0x0b, 0x26, 0x6d, 0xce, 0x3a, 0x5e, 0x2e, 0x81, 0x10, 0xd9, 0x20, 0x04, 0x0a, 0x19, 0x52, 0x82,
+	0xfe, 0x29, 0x01, 0x64, 0xef, 0x98, 0x75, 0xf9, 0x7d, 0xbb, 0xcd, 0x99, 0x6b, 0xf4, 0xdb, 0xec,
+	0x53, 0xf6, 0x92, 0x7e, 0x95, 0x80, 0xec, 0x48, 0xf3, 0xc1, 0xcb, 0x1e, 0x23, 0xf3, 0x00, 0x4d,
+	0x6c, 0xa9, 0x99, 0xed, 0x76, 0xfa, 0x02, 0x49, 0xc1, 0x4c, 0xc3, 0xe4, 0xac, 0xe5, 0xb8, 0x2f,
+	0xd3, 0x09, 0x92, 0x86, 0x94, 0xd7, 0xaf, 0xd7, 0x06, 0x2d, 0x63, 0x84, 0xc0, 0xfc, 0xb3, 0x9e,
+	0x5d, 0x63, 0x02, 0xaa, 0xc6, 0x5f, 0xf6, 0x58, 0x7a, 0x9c, 0x2c, 0x41, 0x46, 0x1a, 0xd9, 0xdf,
+	0x3c, 0x21, 0x9a, 0xe5, 0x7c, 0xfc, 0xcd, 0x93, 0xd4, 0x86, 0x85, 0x11, 0x45, 0xc8, 0xc7, 0x30,
+	0xfe, 0x8c, 0xbd, 0xc4, 0x65, 0x98, 0xbf, 0x5d, 0xd0, 0x93, 0x0b, 0xcf, 0xa2, 0x10, 0x31, 0x03,
+	0x43, 0x0c, 0x25, 0x8b, 0x30, 0x79, 0x6c, 0xb6, 0xfb, 0x2c, 0x37, 0x26, 0x96, 0xd2, 0x90, 0x1f,
+	0xf4, 0xaf, 0x09, 0x48, 0xfa, 0x86, 0xc4, 0xad, 0xf6, 0x32, 0x4c, 0xb1, 0xae, 0x59, 0x6f, 0xcb,
+	0xd1, 0x33, 0x86, 0xfa, 0x22, 0xab, 0x30, 0xab, 0x26, 0x60, 0x5b, 0xb9, 0x71, 0x04, 0x9e, 0x91,
+	0x0d, 0x25, 0x8b, 0xac, 0x03, 0x0c, 0xa7, 0x95, 0x9b, 0xc0, 0xde, 0x59, 0x6c, 0x41, 0xbb, 0xde,
+	0x84, 0x49, 0xb7, 0xdf, 0x66, 0x5e, 0x6e, 0x12, 0x57, 0x6c, 0x25, 0x66, 0x52, 0x86, 0x94, 0xa2,
+	0x1f, 0x41, 0xca, 0xd7, 0xe3, 0x91, 0x9b, 0x30, 0x2d, 0x97, 0x25, 0xb4, 0xe4, 0x7e, 0x00, 0x2d,
+	0x43, 0x9f, 0x41, 0x6a, 0xc7, 0x71, 0x59, 0xa9, 0xeb, 0x71, 0xb3, 0xdb, 0x60, 0xe4, 0x3a, 0x24,
+	0x6d, 0xf5, 0x7f, 0x6d, 0x74, 0xc6, 0xa0, 0x7b, 0x4a, 0x16, 0xb9, 0x03, 0x53, 0x32, 0x00, 0xe0,
+	0xcc, 0x93, 0xb7, 0x17, 0x35, 0xcb, 0x27, 0xd8, 0x5a, 0xe5, 0x26, 0xef, 0x7b, 0xdb, 0x93, 0x62,
+	0x87, 0x5e, 0x30, 0x94, 0x28, 0xfd, 0x10, 0xe6, 0xfc, 0x64, 0x1e, 0xd9, 0x0c, 0xee, 0xce, 0x01,
+	0x88, 0x5f, 0x4a, 0x6f, 0xcf, 0xf7, 0x60, 0xa1, 0xdc, 0x69, 0xd8, 0x07, 0xcc, 0xe3, 0x06, 0xfb,
+	0x55, 0x9f, 0x79, 0x9c, 0xcc, 0x0f, 0x57, 0x05, 0x97, 0x83, 0xc0, 0x44, 0xbf, 0x6f, 0x5b, 0x6a,
+	0x29, 0xf1, 0x7f, 0xfa, 0x6b, 0x48, 0xc9, 0x21, 0x5e, 0xcf, 0xe9, 0x7a, 0x8c, 0xfc, 0x04, 0xa6,
+	0x5c, 0xe6, 0xf5, 0xdb, 0x5c, 0x6d, 0x9a, 0x1b, 0x9a, 0xd3, 0x2f, 0x15, 0xf8, 0x30, 0x50, 0xdc,
+	0x50, 0xc3, 0x68, 0x01, 0x48, 0xb8, 0x97, 0x24, 0x61, 0xba, 0x7a, 0xb8, 0xb3, 0xb3, 0x57, 0xad,
+	0xa6, 0x2f, 0x88, 0x8f, 0xfb, 0x5b, 0xa5, 0x07, 0x87, 0xc6, 0x5e, 0x3a, 0x41, 0x9f, 0xc2, 0xcc,
+	0x63, 0xb1, 0xa7, 0xaa, 0x2c, 0xac, 0xf0, 0xfb, 0x90, 0x92, 0x61, 0x48, 0x7a, 0x81, 0xb2, 0x65,
+	0xb6, 0xa0, 0x22, 0xcf, 0x96, 0xe8, 0xdb, 0xc1, 0xff, 0x3f, 0xb9, 0x60, 0x24, 0xcd, 0xe1, 0xe7,
+	0xf6, 0xb4, 0xda, 0xb6, 0xf4, 0x5f, 0x13, 0x30, 0xf5, 0x18, 0x67, 0x40, 0x2e, 0xc3, 0xf4, 0x31,
+	0x73, 0x3d, 0xdb, 0xe9, 0x06, 0xd7, 0x4d, 0xb7, 0x92, 0x7b, 0x30, 0xa3, 0x22, 0xab, 0x8e, 0x4a,
+	0x0b, 0x7a, 0xf6, 0x5b, 0xb2, 0xdd, 0x1f, 0x53, 0x06, 0xb2, 0x51, 0x41, 0x6d, 0xfc, 0xfb, 0x07,
+	0xb5, 0x89, 0xb3, 0x06, 0x35, 0xf2, 0x31, 0xa4, 0x94, 0x3b, 0x09, 0x97, 0xd1, 0x9e, 0x41, 0x82,
+	0x23, 0x85, 0xf3, 0xf8, 0x47, 0x27, 0xad, 0x41, 0xb3, 0x47, 0x76, 0x60, 0x4e, 0x21, 0xb4, 0x30,
+	0x2e, 0xe6, 0xa6, 0x62, 0xc3, 0xa1, 0x1f, 0x43, 0xd1, 0xaa, 0x58, 0xba, 0x03, 0x73, 0xd2, 0x71,
+	0xb5, 0x83, 0x4d, 0xc7, 0x3a, 0x58, 0x00, 0x84, 0xf9, 0xfd, 0xf3, 0x67, 0x90, 0x19, 0xe6, 0x27,
+	0x93, 0x9b, 0x75, 0xd3, 0x63, 0xb9, 0x35, 0x05, 0x24, 0x7a, 0x0a, 0x0f, 0xed, 0xba, 0x54, 0x67,
+	0xd7, 0xe4, 0xe6, 0x76, 0x5a, 0x00, 0x25, 0x7d, 0xf1, 0xc4, 0x58, 0x10, 0x52, 0x42, 0x48, 0x8d,
+	0x26, 0x4f, 0x20, 0xeb, 0xcf, 0x68, 0x1a, 0x74, 0x5d, 0x2d, 0x11, 0x82, 0xe2, 0x56, 0x3a, 0x11,
+	0x16, 0xd5, 0x92, 0x62, 0x0a, 0x81, 0xfe, 0x25, 0x01, 0xe9, 0x2a, 0x6b, 0x37, 0xcf, 0xe6, 0x40,
+	0xa3, 0x92, 0xfe, 0x06, 0xbf, 0x03, 0x55, 0x60, 0x3e, 0xd8, 0x13, 0xef, 0x3c, 0x24, 0x03, 0x73,
+	0x8f, 0xca, 0x07, 0xb5, 0xea, 0x61, 0xa5, 0x52, 0x36, 0x0e, 0xf6, 0x76, 0xd3, 0x63, 0xa2, 0xe9,
+	0xf0, 0xd1, 0xa7, 0x8f, 0xca, 0x4f, 0x1e, 0xd5, 0xf6, 0x0c, 0xa3, 0x6c, 0xa4, 0xc7, 0x69, 0x19,
+	0x32, 0xe5, 0xe6, 0x56, 0x8b, 0x75, 0x79, 0xb5, 0x5f, 0xf7, 0x1a, 0xae, 0x5d, 0x67, 0xae, 0x08,
+	0xb3, 0x4e, 0xd3, 0x14, 0x8d, 0x83, 0x40, 0x66, 0xcc, 0xaa, 0x96, 0x92, 0x25, 0x42, 0xb4, 0xca,
+	0xf8, 0x83, 0x80, 0x31, 0x23, 0x1b, 0x4a, 0x16, 0xfd, 0x10, 0xe0, 0x21, 0xeb, 0xd4, 0x99, 0xeb,
+	0x1d, 0xd9, 0x3d, 0x81, 0x84, 0xbb, 0xa6, 0xd6, 0x35, 0x3b, 0x4c, 0x23, 0x61, 0xcb, 0x23, 0xb3,
+	0xc3, 0x94, 0x53, 0x8f, 0x69, 0xa7, 0xa6, 0xff, 0x48, 0x40, 0x5e, 0x5a, 0xba, 0xd4, 0x31, 0x5b,
+	0x6c, 0xd7, 0x79, 0xde, 0x6d, 0x3b, 0xa6, 0xa5, 0x83, 0xd6, 0x0d, 0x7f, 0x6e, 0x90, 0x71, 0x0f,
+	0x0a, 0xaa, 0xd0, 0x2a, 0xed, 0xfa, 0xf2, 0xc4, 0x35, 0x98, 0xb4, 0x05, 0x80, 0x8a, 0x0a, 0x73,
+	0xda, 0xce, 0x88, 0x6a, 0xc8, 0x3e, 0xf2, 0x0e, 0x64, 0xcc, 0x06, 0xb7, 0x8f, 0x4d, 0xce, 0xca,
+	0xdd, 0x6a, 0xbf, 0xd1, 0x60, 0x9e, 0x87, 0x19, 0x67, 0xc6, 0x08, 0x77, 0x90, 0x0d, 0x58, 0x10,
+	0x4c, 0x36, 0x1f, 0xca, 0x4e, 0xa0, 0xec, 0x68, 0x33, 0xfd, 0x4d, 0x02, 0x88, 0x6f, 0x12, 0xe7,
+	0x56, 0x3e, 0x37, 0x8c, 0x45, 0xd2, 0x32, 0x83, 0x20, 0x14, 0xa1, 0xc3, 0x78, 0xb4, 0x0e, 0x35,
+	0xc8, 0x06, 0x54, 0x50, 0x1b, 0xf0, 0x13, 0xc8, 0x6a, 0x1d, 0x44, 0x7b, 0xcd, 0xe3, 0x26, 0x67,
+	0x3a, 0x85, 0xe4, 0x82, 0x1e, 0x8d, 0x23, 0x45, 0x32, 0x62, 0x86, 0x2a, 0x29, 0x86, 0x2d, 0x1e,
+	0xdd, 0x83, 0xd4, 0xfd, 0xb6, 0xf3, 0xfc, 0x21, 0xe3, 0xa6, 0xf0, 0x1a, 0xf2, 0x1e, 0x4c, 0x75,
+	0x98, 0x2f, 0x75, 0xae, 0x17, 0xfc, 0xb5, 0xa6, 0xd3, 0xec, 0xd5, 0xb0, 0x5b, 0x45, 0x6b, 0x43,
+	0x09, 0xdf, 0xfe, 0xfb, 0x3d, 0x98, 0x93, 0x21, 0xb8, 0xca, 0x5c, 0xc1, 0x41, 0x9e, 0xc0, 0xdc,
+	0x3e, 0xe3, 0xbe, 0x2d, 0xb4, 0x5c, 0x90, 0xf5, 0x78, 0x41, 0xd7, 0xe3, 0x85, 0x3d, 0x51, 0x8f,
+	0xe7, 0x07, 0x31, 0x6c, 0x28, 0x4b, 0xf3, 0x5f, 0xfe, 0xf3, 0x3f, 0xdf, 0x8c, 0x2d, 0x12, 0x82,
+	0xa5, 0xfd, 0xf1, 0xad, 0x62, 0x67, 0x88, 0xf3, 0x14, 0xd2, 0x87, 0x3d, 0xcb, 0xe4, 0xcc, 0x87,
+	0x1d, 0x81, 0x91, 0x8f, 0xe1, 0xa3, 0xeb, 0x88, 0xbd, 0x42, 0x23, 0xb0, 0x3f, 0x48, 0x6c, 0x92,
+	0x5d, 0x98, 0xdd, 0x67, 0x5c, 0xa5, 0x93, 0x38, 0x9d, 0x07, 0x11, 0x5b, 0xca, 0xd1, 0x05, 0xc4,
+	0x9c, 0x25, 0xd3, 0x0a, 0x93, 0x3c, 0x85, 0xcc, 0x03, 0xdb, 0xe3, 0xc1, 0x54, 0x1f, 0x87, 0xb6,
+	0x14, 0x95, 0xf3, 0x3d, 0x7a, 0x11, 0x41, 0xb3, 0x24, 0xa3, 0x15, 0xb5, 0x07, 0x48, 0x55, 0x58,
+	0xd8, 0x67, 0x01, 0x74, 0xe2, 0xdb, 0x83, 0xf9, 0xc8, 0x22, 0x82, 0x5e, 0x42, 0xbc, 0x1c, 0x59,
+	0x0e, 0xe1, 0x15, 0x5f, 0xd9, 0xd6, 0x17, 0xc4, 0x80, 0x94, 0xd0, 0x79, 0x4b, 0xa7, 0xbc, 0x38,
+	0x75, 0xd3, 0x23, 0x09, 0xd3, 0xa3, 0x39, 0x44, 0x26, 0x24, 0xad, 0x91, 0x07, 0x69, 0x93, 0x01,
+	0x11, 0x98, 0x0f, 0x82, 0x19, 0x30, 0x0e, 0x79, 0x39, 0x32, 0x97, 0x7a, 0xf4, 0x32, 0xe2, 0x5f,
+	0x24, 0x2b, 0x1a, 0x7f, 0x24, 0x15, 0x93, 0x5f, 0x42, 0x7a, 0x9f, 0x05, 0x59, 0x02, 0x06, 0x89,
+	0x4e, 0xd2, 0xf4, 0x0d, 0xc4, 0xbd, 0x44, 0xd6, 0x62, 0x70, 0xa5, 0x5d, 0x9a, 0xb0, 0x1c, 0x9a,
+	0x43, 0xc5, 0x71, 0xb9, 0x17, 0x6d, 0x73, 0x25, 0x87, 0x12, 0x74, 0x13, 0x19, 0xde, 0x20, 0xf4,
+	0x24, 0x86, 0x62, 0x0f, 0xd1, 0x5e, 0xc0, 0xe2, 0xe8, 0x24, 0x04, 0x08, 0x59, 0x8a, 0x40, 0x2e,
+	0x59, 0xf9, 0x6c, 0x44, 0x33, 0xbd, 0x8b, 0x7c, 0x05, 0xf2, 0xce, 0xe9, 0x7c, 0xc5, 0x57, 0xe2,
+	0x4f, 0x4d, 0xcc, 0xf0, 0xf7, 0x09, 0x58, 0xd9, 0xc3, 0xb2, 0xfd, 0xcc, 0xec, 0x71, 0xde, 0xf5,
+	0x21, 0x2a, 0xf0, 0x1e, 0xbd, 0x73, 0x1e, 0x05, 0x8a, 0xea, 0xcc, 0xf0, 0x55, 0x02, 0x72, 0xbb,
+	0xb6, 0xf7, 0x83, 0x28, 0xf2, 0x63, 0x54, 0xe4, 0x1e, 0xbd, 0x7b, 0x2e, 0x45, 0x2c, 0xc9, 0x4e,
+	0xac, 0x88, 0x35, 0x17, 0x71, 0x32, 0xb8, 0xe6, 0x24, 0x10, 0x1c, 0xb1, 0xff, 0x8c, 0x2b, 0xde,
+	0x44, 0xac, 0xdf, 0x26, 0x60, 0x4d, 0xc6, 0xb2, 0x10, 0xd1, 0x01, 0xaa, 0xb1, 0x16, 0x22, 0xc0,
+	0x76, 0x39, 0x26, 0x76, 0xea, 0x37, 0x51, 0x85, 0x1b, 0xf4, 0x0c, 0x2a, 0x88, 0x88, 0xf7, 0xbb,
+	0x04, 0xac, 0x47, 0x68, 0xf1, 0x50, 0x44, 0x76, 0xa9, 0xc6, 0x6a, 0x40, 0x0d, 0xec, 0x78, 0xe8,
+	0x58, 0xa7, 0x68, 0x51, 0x40, 0x2d, 0x36, 0xe8, 0xb5, 0x13, 0xb5, 0x90, 0xf9, 0x43, 0xa8, 0xd1,
+	0x82, 0x95, 0x90, 0xc9, 0x91, 0x2a, 0x68, 0xf3, 0x6c, 0x58, 0x17, 0x8f, 0xbe, 0x8d, 0x5c, 0x6f,
+	0x92, 0xb3, 0x70, 0x11, 0x0e, 0xab, 0x91, 0x6b, 0xab, 0x4a, 0x5c, 0x3f, 0xd9, 0x4a, 0xc8, 0xfe,
+	0x52, 0x88, 0xbe, 0x8b, 0x84, 0x9b, 0x64, 0xe3, 0x54, 0x13, 0xab, 0x6a, 0x9b, 0x7c, 0x93, 0x80,
+	0xab, 0x31, 0x6b, 0x8d, 0x98, 0xd2, 0xd2, 0x57, 0xa3, 0x09, 0xcf, 0xb2, 0xea, 0x77, 0x50, 0xa5,
+	0x9b, 0xf4, 0xcc, 0x2a, 0x09, 0xa3, 0x97, 0x21, 0x29, 0x6c, 0x71, 0x5a, 0x60, 0x5e, 0x08, 0x96,
+	0x14, 0x1e, 0x5d, 0x41, 0xb2, 0x0c, 0x59, 0xd0, 0x64, 0x3a, 0x12, 0x97, 0x61, 0x6e, 0x08, 0x58,
+	0xb2, 0xe2, 0x21, 0x93, 0x43, 0x33, 0x47, 0xa4, 0x3a, 0x09, 0x67, 0x5b, 0x1e, 0x39, 0x84, 0xb4,
+	0xc1, 0x1a, 0x4e, 0xb7, 0x61, 0xb7, 0x99, 0x56, 0xd3, 0x3f, 0x36, 0xd6, 0x1e, 0x6b, 0x88, 0xb9,
+	0x4c, 0xc3, 0x98, 0x62, 0xe2, 0x7b, 0x98, 0xe6, 0x23, 0x52, 0xc5, 0xc8, 0x61, 0x4c, 0xc3, 0x90,
+	0xc5, 0x91, 0x99, 0xca, 0xdc, 0xf0, 0x53, 0x48, 0xed, 0xb8, 0xcc, 0xe4, 0x4a, 0x35, 0x32, 0x32,
+	0x3a, 0x84, 0xa6, 0x0a, 0x1b, 0x3a, 0x6a, 0x37, 0xa1, 0xd2, 0x13, 0x48, 0xc9, 0x20, 0x1c, 0xa1,
+	0x55, 0xdc, 0x24, 0xaf, 0x21, 0xde, 0x3a, 0x5d, 0x8d, 0xd2, 0x4e, 0x87, 0xd5, 0x9f, 0xc3, 0x9c,
+	0x8a, 0xaa, 0xe7, 0x40, 0x56, 0xb9, 0x91, 0xae, 0x45, 0x22, 0xeb, 0x38, 0xf9, 0x04, 0x52, 0x06,
+	0xab, 0x3b, 0x0e, 0xff, 0xc1, 0x74, 0x76, 0x11, 0x4e, 0x00, 0xef, 0xb2, 0x36, 0xe3, 0xaf, 0x61,
+	0x8c, 0xcd, 0x68, 0x60, 0x0b, 0xe1, 0x48, 0x1d, 0x32, 0xf7, 0x1d, 0xb7, 0xc1, 0xce, 0x8d, 0xfe,
+	0x16, 0xa2, 0x5f, 0xdb, 0xbc, 0x1a, 0x89, 0xde, 0x14, 0x98, 0x35, 0xc5, 0xd1, 0x87, 0x39, 0x7d,
+	0xe4, 0xc1, 0x5a, 0x7b, 0x98, 0xbb, 0x02, 0xc7, 0xa1, 0xfc, 0x92, 0xa6, 0x2d, 0xf7, 0x98, 0x8b,
+	0x77, 0xd7, 0xa2, 0xc2, 0xa7, 0xf7, 0x90, 0xe9, 0x5d, 0xfa, 0x76, 0x24, 0x93, 0xac, 0xf8, 0x2d,
+	0x85, 0xe1, 0x15, 0x5f, 0x89, 0x23, 0xd9, 0x17, 0x62, 0x03, 0x7d, 0x99, 0x80, 0xe5, 0x7d, 0xc6,
+	0x03, 0x1c, 0xf2, 0x16, 0x2a, 0x5e, 0x81, 0xa8, 0x66, 0xfa, 0x01, 0x2a, 0x70, 0x97, 0xdc, 0x3e,
+	0x87, 0x02, 0x45, 0x4f, 0x32, 0xf5, 0xb1, 0x14, 0x0b, 0xe0, 0x9d, 0x93, 0x5d, 0x05, 0x32, 0x72,
+	0x9e, 0xe9, 0x93, 0xa6, 0x2c, 0x34, 0x03, 0x48, 0xde, 0xc8, 0xba, 0x46, 0xb1, 0x79, 0xf4, 0x1d,
+	0xa4, 0xbb, 0x4e, 0xde, 0x38, 0x0b, 0x1d, 0x79, 0x01, 0xd9, 0x1d, 0x51, 0x33, 0xb7, 0xcf, 0x38,
+	0xc3, 0xc8, 0x05, 0x56, 0x33, 0xdc, 0x3c, 0xd7, 0x0c, 0xbf, 0x4e, 0x40, 0x76, 0x4b, 0x1d, 0x67,
+	0x91, 0x45, 0xe6, 0x83, 0x73, 0x52, 0xef, 0x20, 0xf5, 0x47, 0xf4, 0xfd, 0xf3, 0x2c, 0xad, 0x6c,
+	0xee, 0x23, 0x9f, 0xd8, 0x68, 0x7f, 0x48, 0x40, 0xc6, 0x60, 0xc7, 0xcc, 0xe5, 0xff, 0x17, 0x45,
+	0x5c, 0xa4, 0x16, 0x8a, 0x7c, 0x9d, 0x80, 0xa5, 0x80, 0xa7, 0x1d, 0x38, 0xca, 0xa3, 0x69, 0xc4,
+	0x21, 0x78, 0xe4, 0x1a, 0x22, 0xbf, 0x1a, 0x21, 0xa3, 0x8f, 0xd8, 0xba, 0x7c, 0x21, 0xd7, 0x47,
+	0xf5, 0x43, 0x1d, 0xbc, 0xa2, 0xd6, 0x4d, 0x9e, 0xc0, 0x3d, 0xf2, 0x1c, 0xe6, 0xf5, 0xbe, 0x57,
+	0x3e, 0x97, 0x8f, 0x84, 0x3f, 0x03, 0x75, 0xec, 0x8e, 0x54, 0xd4, 0xf2, 0x4f, 0x4d, 0x39, 0xdc,
+	0x1f, 0x13, 0x70, 0x71, 0xab, 0xee, 0x0c, 0xd6, 0xa2, 0xe5, 0x9a, 0xd6, 0xd0, 0x0e, 0xaf, 0xad,
+	0x44, 0xac, 0x17, 0x2a, 0x25, 0x4c, 0x41, 0x59, 0xeb, 0x4b, 0x3a, 0x6d, 0x84, 0xc7, 0x90, 0xda,
+	0x67, 0xbc, 0xdc, 0xed, 0x97, 0xe4, 0xb7, 0xdf, 0xff, 0x32, 0x9a, 0x6d, 0xd0, 0x4d, 0x6f, 0x20,
+	0xc7, 0x55, 0x72, 0x39, 0x72, 0x0f, 0x38, 0xdd, 0xbe, 0xc6, 0x7d, 0x05, 0x73, 0x81, 0xad, 0xff,
+	0xfa, 0xd3, 0xba, 0x85, 0x94, 0x6f, 0xd3, 0xb8, 0x65, 0xd5, 0x17, 0x46, 0x8a, 0x59, 0x6c, 0xb2,
+	0xe7, 0x90, 0xdc, 0xc1, 0x6b, 0x99, 0xef, 0x49, 0x5d, 0x44, 0xea, 0xb7, 0x68, 0xdc, 0xb2, 0xca,
+	0xbb, 0x1f, 0x1f, 0x71, 0x05, 0x16, 0x86, 0xb5, 0x54, 0xf8, 0xc4, 0x39, 0xb8, 0x0d, 0x93, 0x47,
+	0x4d, 0x8a, 0xf0, 0x6b, 0x24, 0x1f, 0x69, 0x4c, 0x79, 0xc4, 0x7c, 0x0a, 0x59, 0x1f, 0xa2, 0xba,
+	0x48, 0x8f, 0x59, 0xa6, 0x41, 0xf7, 0x29, 0xcb, 0xd4, 0xd3, 0x57, 0xf7, 0x1e, 0xe9, 0xc2, 0x92,
+	0x8c, 0x05, 0xa3, 0x04, 0x61, 0xd0, 0xd8, 0x34, 0xab, 0xce, 0x4f, 0xf4, 0x34, 0x32, 0x61, 0xa0,
+	0x43, 0xbf, 0x81, 0xce, 0x76, 0x3c, 0x3b, 0xd9, 0x4a, 0xf2, 0x58, 0xc6, 0x60, 0x31, 0x08, 0x7b,
+	0x9e, 0x93, 0xc1, 0x06, 0x12, 0x50, 0x72, 0x25, 0x96, 0x40, 0x9f, 0x08, 0x3e, 0xf7, 0x6b, 0x2f,
+	0xef, 0xe8, 0xe3, 0x8a, 0xe5, 0x6c, 0xf8, 0x9e, 0xdf, 0x8b, 0xab, 0x4c, 0xe5, 0x03, 0x01, 0x31,
+	0xf0, 0xfe, 0x6d, 0x28, 0x3f, 0x62, 0x99, 0x10, 0x1e, 0xbd, 0x8a, 0x70, 0xab, 0xe4, 0x62, 0x14,
+	0x9c, 0xac, 0x76, 0x6b, 0x90, 0x1e, 0x6a, 0xac, 0x8c, 0x12, 0xa7, 0xf2, 0x62, 0xc4, 0xbb, 0x82,
+	0xa7, 0x2f, 0xdf, 0xc8, 0xd2, 0x08, 0x89, 0x32, 0xc9, 0x7d, 0x48, 0x57, 0xb9, 0xcb, 0xcc, 0x4e,
+	0xc5, 0x6c, 0x3c, 0x63, 0xdc, 0x2b, 0xf7, 0x39, 0x59, 0x0e, 0x58, 0x5a, 0x76, 0x94, 0xfb, 0x3c,
+	0x76, 0x03, 0x5d, 0xd8, 0x48, 0x90, 0x3d, 0x3c, 0x34, 0x30, 0xfb, 0x98, 0x29, 0xa0, 0x52, 0xf7,
+	0x84, 0xdb, 0xb7, 0x30, 0x7e, 0xa9, 0x4b, 0x2f, 0xbc, 0x9b, 0x20, 0x9f, 0x42, 0x56, 0xc1, 0xec,
+	0x1c, 0x99, 0xdd, 0x16, 0xc3, 0xd7, 0x8d, 0xf8, 0x29, 0xe7, 0x02, 0x48, 0xbe, 0x21, 0x08, 0x76,
+	0x88, 0x09, 0xc2, 0xff, 0x7e, 0x1e, 0x3c, 0xd6, 0x86, 0xcd, 0x15, 0xb7, 0x59, 0x95, 0xb5, 0xf4,
+	0x9a, 0x64, 0xe4, 0x09, 0xc4, 0xff, 0x56, 0x1b, 0xf5, 0x1e, 0x93, 0x8f, 0x6a, 0xa4, 0x57, 0x90,
+	0x22, 0x4f, 0x07, 0x0b, 0x12, 0x78, 0xde, 0x11, 0x4e, 0xf6, 0x18, 0xf5, 0xf6, 0xa3, 0x47, 0x5e,
+	0x7b, 0xf9, 0x5f, 0x60, 0xc3, 0x8a, 0x07, 0x50, 0xa5, 0xe2, 0x16, 0x64, 0x64, 0xb0, 0x78, 0x3d,
+	0xc5, 0xdf, 0x44, 0x8a, 0xcb, 0xf9, 0x13, 0x28, 0x84, 0xf6, 0x16, 0x64, 0x64, 0xa5, 0x7f, 0x2a,
+	0x4b, 0xdc, 0x7e, 0x52, 0x73, 0xd9, 0x3c, 0x69, 0x2e, 0xca, 0x31, 0x02, 0xaf, 0xd0, 0xa7, 0x3a,
+	0x46, 0xc0, 0x62, 0x21, 0xc7, 0x08, 0xb0, 0x90, 0x07, 0x78, 0x5c, 0x8d, 0xc8, 0xaa, 0xf3, 0x81,
+	0xa2, 0xcb, 0xd3, 0x67, 0x20, 0xb2, 0x1a, 0x5f, 0x56, 0x79, 0xe4, 0x33, 0x98, 0xd1, 0xcf, 0x4f,
+	0x01, 0xb0, 0x5c, 0xdc, 0x3b, 0x16, 0xbd, 0x8e, 0xb0, 0x57, 0xe8, 0xa5, 0x48, 0x58, 0x8f, 0xb5,
+	0x9b, 0x35, 0x2e, 0xd0, 0x1e, 0x63, 0xf5, 0x1f, 0x78, 0xbe, 0x1b, 0xbd, 0xbd, 0x09, 0xbd, 0xef,
+	0x85, 0x23, 0x8f, 0x70, 0x23, 0x21, 0xa7, 0xae, 0x6d, 0xec, 0x3a, 0xf9, 0x1c, 0xc8, 0x3e, 0xe3,
+	0x23, 0x2f, 0x78, 0x23, 0x57, 0xbc, 0x51, 0x8f, 0x7c, 0x61, 0x7b, 0x04, 0xb1, 0xf1, 0xbd, 0x90,
+	0x78, 0x30, 0x57, 0xb5, 0x3b, 0xfd, 0xb6, 0xc9, 0x19, 0x8e, 0x27, 0x6b, 0x03, 0x43, 0xf8, 0x9b,
+	0x75, 0x96, 0x8f, 0xa9, 0x68, 0x43, 0xd7, 0x6e, 0x41, 0x1b, 0x29, 0xa4, 0x9a, 0x40, 0x12, 0x3b,
+	0x73, 0x07, 0x66, 0x07, 0x4f, 0x75, 0xe4, 0xe2, 0xa0, 0x38, 0x1a, 0x7d, 0xc4, 0xcb, 0xc7, 0x77,
+	0xd1, 0x0b, 0xe4, 0x21, 0x80, 0xbc, 0x33, 0xc0, 0x2b, 0xd2, 0x94, 0xbf, 0x22, 0x88, 0xdd, 0xd0,
+	0xea, 0xb2, 0x85, 0xce, 0x0b, 0x1d, 0x87, 0xa3, 0xd5, 0x75, 0x90, 0xba, 0x29, 0x38, 0x07, 0xde,
+	0xf0, 0x4e, 0xe3, 0xf8, 0x56, 0xd1, 0x37, 0x5c, 0x00, 0x7e, 0x06, 0x49, 0x11, 0x3c, 0x5e, 0x70,
+	0x7c, 0xff, 0x27, 0xcb, 0xda, 0x72, 0xf2, 0xe7, 0x00, 0x3d, 0xd6, 0xb0, 0x9b, 0x36, 0x73, 0xf3,
+	0x8b, 0xba, 0xdd, 0x60, 0xbc, 0xef, 0x76, 0xb1, 0xd7, 0xa3, 0xab, 0x08, 0xbc, 0x44, 0xb2, 0xda,
+	0xa0, 0x7e, 0xa8, 0x03, 0x48, 0x56, 0x7d, 0x9f, 0x83, 0x47, 0x09, 0xfd, 0x43, 0x83, 0x58, 0x75,
+	0x43, 0xa8, 0x7e, 0x98, 0x23, 0xc8, 0x56, 0xb9, 0xe9, 0x72, 0xfd, 0x33, 0x0b, 0x51, 0x75, 0x3a,
+	0x5d, 0x32, 0xf8, 0x05, 0xca, 0xc8, 0xcf, 0x2f, 0x86, 0xce, 0x1c, 0xf0, 0x16, 0x15, 0x32, 0xe8,
+	0xe0, 0xbd, 0xc2, 0x13, 0x98, 0x35, 0x7c, 0xa1, 0x16, 0x6e, 0xf2, 0x41, 0x62, 0x73, 0xbb, 0x0d,
+	0x59, 0xc7, 0x6d, 0x61, 0xc6, 0x68, 0x38, 0xae, 0xa5, 0x70, 0xb6, 0x53, 0xf2, 0x45, 0xa9, 0x82,
+	0x3f, 0xc1, 0xfa, 0x45, 0xa1, 0x65, 0xf3, 0xa3, 0x7e, 0x5d, 0x58, 0xa7, 0xa8, 0x25, 0xd5, 0x4f,
+	0xe1, 0x6e, 0xea, 0x1f, 0xc6, 0xdd, 0x2d, 0xb6, 0x1c, 0xd5, 0xf6, 0xb7, 0xb1, 0xe5, 0xb2, 0xc6,
+	0x7b, 0xec, 0x7f, 0xa0, 0xaa, 0x8c, 0x55, 0xc6, 0x2b, 0x13, 0x95, 0xc9, 0xca, 0x54, 0x65, 0xba,
+	0x32, 0x53, 0x9f, 0xc2, 0xb1, 0x77, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0x87, 0x9b, 0x36, 0xf4,
+	0x64, 0x27, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -2444,12 +2633,16 @@
 	DownloadImage(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*common.OperationResp, error)
 	// Get image download status on a device
 	// The request retrieves progress on device and updates db record
+	// Deprecated in voltha 2.8, will be removed
 	GetImageDownloadStatus(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*ImageDownload, error)
 	// Get image download db record
+	// Deprecated in voltha 2.8, will be removed
 	GetImageDownload(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*ImageDownload, error)
 	// List image download db records for a given device
+	// Deprecated in voltha 2.8, will be removed
 	ListImageDownloads(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*ImageDownloads, error)
 	// Cancel an existing image download process on a device
+	// Deprecated in voltha 2.8, will be removed
 	CancelImageDownload(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*common.OperationResp, error)
 	// Activate the specified image at a standby partition
 	// to active partition.
@@ -2458,6 +2651,7 @@
 	// If no reboot, then a reboot is required to make the
 	// activated image running on device
 	// Note that the call is expected to be non-blocking.
+	// Deprecated in voltha 2.8, will be removed
 	ActivateImageUpdate(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*common.OperationResp, error)
 	// Revert the specified image at standby partition
 	// to active partition, and revert to previous image
@@ -2466,7 +2660,36 @@
 	// If no reboot, then a reboot is required to make the
 	// previous image running on device
 	// Note that the call is expected to be non-blocking.
+	// Deprecated in voltha 2.8, will be removed
 	RevertImageUpdate(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*common.OperationResp, error)
+	// Downloads a certain image to the standby partition of the devices
+	// Note that the call is expected to be non-blocking.
+	DownloadImageToDevice(ctx context.Context, in *DeviceImageDownloadRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error)
+	// Get image status on a number of devices devices
+	// Polled from northbound systems to get state of download/activate/commit
+	GetImageStatus(ctx context.Context, in *DeviceImageRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error)
+	// Aborts the upgrade of an image on a device
+	// To be used carefully, stops any further operations for the Image on the given devices
+	// Might also stop if possible existing work, but no guarantees are given,
+	// depends on implementation and procedure status.
+	AbortImageUpgradeToDevice(ctx context.Context, in *DeviceImageRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error)
+	// Get Both Active and Standby image for a given device
+	GetOnuImages(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*OnuImages, error)
+	// Activate the specified image from a standby partition
+	// to active partition.
+	// Depending on the device implementation, this call
+	// may or may not cause device reboot.
+	// If no reboot, then a reboot is required to make the
+	// activated image running on device
+	// Note that the call is expected to be non-blocking.
+	ActivateImage(ctx context.Context, in *DeviceImageRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error)
+	// Commit the specified image to be default.
+	// Depending on the device implementation, this call
+	// may or may not cause device reboot.
+	// If no reboot, then a reboot is required to make the
+	// activated image running on device upon next reboot
+	// Note that the call is expected to be non-blocking.
+	CommitImage(ctx context.Context, in *DeviceImageRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error)
 	// List ports of a device
 	ListDevicePorts(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*Ports, error)
 	// List pm config of a device
@@ -2837,6 +3060,60 @@
 	return out, nil
 }
 
+func (c *volthaServiceClient) DownloadImageToDevice(ctx context.Context, in *DeviceImageDownloadRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error) {
+	out := new(DeviceImageResponse)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/DownloadImageToDevice", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) GetImageStatus(ctx context.Context, in *DeviceImageRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error) {
+	out := new(DeviceImageResponse)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetImageStatus", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) AbortImageUpgradeToDevice(ctx context.Context, in *DeviceImageRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error) {
+	out := new(DeviceImageResponse)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/AbortImageUpgradeToDevice", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) GetOnuImages(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*OnuImages, error) {
+	out := new(OnuImages)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetOnuImages", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ActivateImage(ctx context.Context, in *DeviceImageRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error) {
+	out := new(DeviceImageResponse)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ActivateImage", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) CommitImage(ctx context.Context, in *DeviceImageRequest, opts ...grpc.CallOption) (*DeviceImageResponse, error) {
+	out := new(DeviceImageResponse)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/CommitImage", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *volthaServiceClient) ListDevicePorts(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*Ports, error) {
 	out := new(Ports)
 	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListDevicePorts", in, out, opts...)
@@ -3226,12 +3503,16 @@
 	DownloadImage(context.Context, *ImageDownload) (*common.OperationResp, error)
 	// Get image download status on a device
 	// The request retrieves progress on device and updates db record
+	// Deprecated in voltha 2.8, will be removed
 	GetImageDownloadStatus(context.Context, *ImageDownload) (*ImageDownload, error)
 	// Get image download db record
+	// Deprecated in voltha 2.8, will be removed
 	GetImageDownload(context.Context, *ImageDownload) (*ImageDownload, error)
 	// List image download db records for a given device
+	// Deprecated in voltha 2.8, will be removed
 	ListImageDownloads(context.Context, *common.ID) (*ImageDownloads, error)
 	// Cancel an existing image download process on a device
+	// Deprecated in voltha 2.8, will be removed
 	CancelImageDownload(context.Context, *ImageDownload) (*common.OperationResp, error)
 	// Activate the specified image at a standby partition
 	// to active partition.
@@ -3240,6 +3521,7 @@
 	// If no reboot, then a reboot is required to make the
 	// activated image running on device
 	// Note that the call is expected to be non-blocking.
+	// Deprecated in voltha 2.8, will be removed
 	ActivateImageUpdate(context.Context, *ImageDownload) (*common.OperationResp, error)
 	// Revert the specified image at standby partition
 	// to active partition, and revert to previous image
@@ -3248,7 +3530,36 @@
 	// If no reboot, then a reboot is required to make the
 	// previous image running on device
 	// Note that the call is expected to be non-blocking.
+	// Deprecated in voltha 2.8, will be removed
 	RevertImageUpdate(context.Context, *ImageDownload) (*common.OperationResp, error)
+	// Downloads a certain image to the standby partition of the devices
+	// Note that the call is expected to be non-blocking.
+	DownloadImageToDevice(context.Context, *DeviceImageDownloadRequest) (*DeviceImageResponse, error)
+	// Get image status on a number of devices devices
+	// Polled from northbound systems to get state of download/activate/commit
+	GetImageStatus(context.Context, *DeviceImageRequest) (*DeviceImageResponse, error)
+	// Aborts the upgrade of an image on a device
+	// To be used carefully, stops any further operations for the Image on the given devices
+	// Might also stop if possible existing work, but no guarantees are given,
+	// depends on implementation and procedure status.
+	AbortImageUpgradeToDevice(context.Context, *DeviceImageRequest) (*DeviceImageResponse, error)
+	// Get Both Active and Standby image for a given device
+	GetOnuImages(context.Context, *common.ID) (*OnuImages, error)
+	// Activate the specified image from a standby partition
+	// to active partition.
+	// Depending on the device implementation, this call
+	// may or may not cause device reboot.
+	// If no reboot, then a reboot is required to make the
+	// activated image running on device
+	// Note that the call is expected to be non-blocking.
+	ActivateImage(context.Context, *DeviceImageRequest) (*DeviceImageResponse, error)
+	// Commit the specified image to be default.
+	// Depending on the device implementation, this call
+	// may or may not cause device reboot.
+	// If no reboot, then a reboot is required to make the
+	// activated image running on device upon next reboot
+	// Note that the call is expected to be non-blocking.
+	CommitImage(context.Context, *DeviceImageRequest) (*DeviceImageResponse, error)
 	// List ports of a device
 	ListDevicePorts(context.Context, *common.ID) (*Ports, error)
 	// List pm config of a device
@@ -3405,6 +3716,24 @@
 func (*UnimplementedVolthaServiceServer) RevertImageUpdate(ctx context.Context, req *ImageDownload) (*common.OperationResp, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method RevertImageUpdate not implemented")
 }
+func (*UnimplementedVolthaServiceServer) DownloadImageToDevice(ctx context.Context, req *DeviceImageDownloadRequest) (*DeviceImageResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DownloadImageToDevice not implemented")
+}
+func (*UnimplementedVolthaServiceServer) GetImageStatus(ctx context.Context, req *DeviceImageRequest) (*DeviceImageResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetImageStatus not implemented")
+}
+func (*UnimplementedVolthaServiceServer) AbortImageUpgradeToDevice(ctx context.Context, req *DeviceImageRequest) (*DeviceImageResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method AbortImageUpgradeToDevice not implemented")
+}
+func (*UnimplementedVolthaServiceServer) GetOnuImages(ctx context.Context, req *common.ID) (*OnuImages, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetOnuImages not implemented")
+}
+func (*UnimplementedVolthaServiceServer) ActivateImage(ctx context.Context, req *DeviceImageRequest) (*DeviceImageResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ActivateImage not implemented")
+}
+func (*UnimplementedVolthaServiceServer) CommitImage(ctx context.Context, req *DeviceImageRequest) (*DeviceImageResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CommitImage not implemented")
+}
 func (*UnimplementedVolthaServiceServer) ListDevicePorts(ctx context.Context, req *common.ID) (*Ports, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method ListDevicePorts not implemented")
 }
@@ -4124,6 +4453,114 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _VolthaService_DownloadImageToDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeviceImageDownloadRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).DownloadImageToDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/DownloadImageToDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).DownloadImageToDevice(ctx, req.(*DeviceImageDownloadRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_GetImageStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeviceImageRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetImageStatus(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetImageStatus",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetImageStatus(ctx, req.(*DeviceImageRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_AbortImageUpgradeToDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeviceImageRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).AbortImageUpgradeToDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/AbortImageUpgradeToDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).AbortImageUpgradeToDevice(ctx, req.(*DeviceImageRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_GetOnuImages_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetOnuImages(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetOnuImages",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetOnuImages(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ActivateImage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeviceImageRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ActivateImage(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ActivateImage",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ActivateImage(ctx, req.(*DeviceImageRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_CommitImage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeviceImageRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).CommitImage(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/CommitImage",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).CommitImage(ctx, req.(*DeviceImageRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _VolthaService_ListDevicePorts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(common.ID)
 	if err := dec(in); err != nil {
@@ -4787,6 +5224,30 @@
 			Handler:    _VolthaService_RevertImageUpdate_Handler,
 		},
 		{
+			MethodName: "DownloadImageToDevice",
+			Handler:    _VolthaService_DownloadImageToDevice_Handler,
+		},
+		{
+			MethodName: "GetImageStatus",
+			Handler:    _VolthaService_GetImageStatus_Handler,
+		},
+		{
+			MethodName: "AbortImageUpgradeToDevice",
+			Handler:    _VolthaService_AbortImageUpgradeToDevice_Handler,
+		},
+		{
+			MethodName: "GetOnuImages",
+			Handler:    _VolthaService_GetOnuImages_Handler,
+		},
+		{
+			MethodName: "ActivateImage",
+			Handler:    _VolthaService_ActivateImage_Handler,
+		},
+		{
+			MethodName: "CommitImage",
+			Handler:    _VolthaService_CommitImage_Handler,
+		},
+		{
 			MethodName: "ListDevicePorts",
 			Handler:    _VolthaService_ListDevicePorts_Handler,
 		},
diff --git a/protos/voltha_protos/device.proto b/protos/voltha_protos/device.proto
index 142f8e9..9e65bee 100644
--- a/protos/voltha_protos/device.proto
+++ b/protos/voltha_protos/device.proto
@@ -70,38 +70,65 @@
     uint32 max_skew = 7; //Default value is set to 5 seconds
 }
 
-// Describes instance of software image on the device
+//Object representing an image
 message Image {
+
     string name = 1;                // software patch name
-    string version = 2;             // version of software
-    string hash = 3;                // md5 hash
+
+    // Version, this is the sole identifier of the image. it's the vendor specified OMCI version
+    // must be known at the time of initiating a download, activate, commit image on an onu.
+    string version = 2;
+
+    // hash of the image to be verified against
+    // Deprecated in voltha 2.8, will be removed
+    uint32 hash = 3;
+
+    // Deprecated in voltha 2.8, will be removed
     string install_datetime = 4;    // combined date and time expressed in UTC.
-                                    // use ISO 8601 format for date and time
+    // use ISO 8601 format for date and time
 
     // The active software image is one that is currently loaded and executing
     // in the ONU or circuit pack. Under normal operation, one software image
     // is always active while the other is inactive. Under no circumstances are
     // both software images allowed to be active at the same time
+    // Deprecated in voltha 2.8, will be removed
     bool is_active = 5;             // True if the image is active
 
     // The committed software image is loaded and executed upon reboot of the
     // ONU and/or circuit pack. During normal operation, one software image is
     // always committed, while the other is uncommitted.
+    // Deprecated in voltha 2.8, will be removed
     bool is_committed = 6;          // True if the image is committed
 
     // A software image is valid if it has been verified to be an executable
     // code image. The verification mechanism is not subject to standardization;
     // however, it should include at least a data integrity (e.g., CRC) check of
     // the entire code image.
+    // Deprecated in voltha 2.8, will be removed
     bool is_valid = 7;              // True if the image is valid
+
+    // URL where the image is available
+    // URL MUST be fully qualified,
+    // including filename, username and password
+    string url = 8;
+
+    // Represents the vendor/device mfr
+    // Needs to match the vendor of the device the image will be installed on
+    // optional, if not matched no check will be performed
+    string vendor = 9;
+
+    // Represents the ONU Image CRC value.
+    // Default to value 0 if not specified.
+    // If different then 0 it's used to verify the image retrieved from outside before sending it to the ONU.
+    // Calculation of this needs to be done according to ITU-T I.363.5 as per OMCI spec (section A.2.27)
+    uint32 crc32 = 10;
+
+    //TODO augment with RecommendedWindowsSize, Timeout and other valuable attributes.
+
 }
 
-// List of software on the device
-message Images {
-    repeated Image image = 1;
-}
-
-//TODO: ImageDownload is not actively used (05/19/2020).  When this is tackled, can remove extra/unnecessary fields.
+// Older version of the API please see DeviceImageDownloadRequest
+// Deprecated in voltha 2.8, will be removed
 message ImageDownload {
     enum ImageDownloadState {
         DOWNLOAD_UNKNOWN = 0;
@@ -172,10 +199,91 @@
     uint32 file_size = 13;
 }
 
+// Deprecated in voltha 2.8, will be removed
 message ImageDownloads {
     repeated ImageDownload items = 2;
 }
 
+message Images {
+    repeated Image image = 1;
+}
+
+// OnuImage represents the OMCI information as per OMCI spec
+// the information will be populates exactly as extracted from the device.
+message OnuImage {
+    //image version
+    string version = 1;
+    bool isCommited = 2;
+    bool isActive = 3;
+    bool isValid = 4;
+    string productCode = 5;
+    // Hash is computed by the ONU and is optional as per OMCI spec (paragraph 9.1.4)
+    // No assumption should be made on the existence of this attribute at any time.
+    string hash = 6;
+}
+
+message OnuImages {
+    repeated OnuImage items = 1;
+}
+
+message DeviceImageState {
+    string device_id = 1;
+    ImageState imageState = 2;
+}
+
+message ImageState {
+    enum ImageDownloadState {
+        DOWNLOAD_UNKNOWN = 0;
+        DOWNLOAD_SUCCEEDED = 1;
+        DOWNLOAD_REQUESTED = 2;
+        DOWNLOAD_STARTED = 3;
+        DOWNLOAD_FAILED = 4;
+        DOWNLOAD_UNSUPPORTED = 5;
+        DOWNLOAD_CANCELLING = 6;
+        DOWNLOAD_CANCELLED = 7;
+    }
+
+    enum ImageFailureReason {
+        NO_ERROR = 0;
+        INVALID_URL = 1;
+        DEVICE_BUSY = 2;
+        INSUFFICIENT_SPACE = 3; // VOLTHA ONU ADAPTER has no more space to store images
+        UNKNOWN_ERROR = 4; // Used also for Checksum failure on ONU
+        CANCELLED_ON_REQUEST = 5;
+        CANCELLED_ON_ONU_STATE = 6;
+        VENDOR_DEVICE_MISMATCH = 7;
+        OMCI_TRANSFER_ERROR = 8;
+        IMAGE_REFUSED_BY_ONU = 9;
+    }
+
+    enum ImageActivationState {
+        IMAGE_UNKNOWN = 0;
+        IMAGE_INACTIVE = 1;
+        IMAGE_ACTIVATING = 2; // Happens during Reboot of the ONU after activate call.
+        IMAGE_ACTIVE = 3;
+        IMAGE_COMMITTING = 4;
+        IMAGE_COMMITTED = 5;
+        IMAGE_ACTIVATION_ABORTING = 6;
+        IMAGE_ACTIVATION_ABORTED = 7;
+        IMAGE_COMMIT_ABORTING = 8;
+        IMAGE_COMMIT_ABORTED = 9;
+        IMAGE_DOWNLOADING = 10;
+    }
+
+    // image version
+    string version = 1;
+
+    // Download state
+    ImageDownloadState download_state = 2;
+
+    // Image Operation Failure reason (use for both Download and Activate)
+    ImageFailureReason reason= 3;
+
+    // Image activation state
+    ImageActivationState image_state = 4;
+
+}
+
 message Port {
     enum PortType {
         UNKNOWN = 0;
@@ -249,7 +357,7 @@
     string serial_number = 10 [(access) = READ_ONLY];
     string vendor_id = 24 [(access) = READ_ONLY];
 
-    // Addapter that takes care of device
+    // Adapter that takes care of device
     string adapter = 11 [(access) = READ_ONLY];
 
     // Device contact on vlan (if 0, no vlan)
@@ -302,6 +410,7 @@
     PmConfigs pm_configs = 131 [(child_node) = {}];
 
     repeated ImageDownload image_downloads = 133 [(child_node) = {key: "name"}];
+
 }
 
 message Devices {
diff --git a/protos/voltha_protos/voltha.proto b/protos/voltha_protos/voltha.proto
index c2d5459..56bcf18 100644
--- a/protos/voltha_protos/voltha.proto
+++ b/protos/voltha_protos/voltha.proto
@@ -162,6 +162,42 @@
     string id = 2;
 }
 
+message DeviceImageDownloadRequest {
+
+    // Device Id
+    // allows for operations on multiple devices.
+    repeated common.ID device_id = 1;
+
+    //The image for the device containing all the information
+    Image image = 2;
+
+    //Activate the image if the download to the device is successful
+    bool activateOnSuccess = 3;
+
+    //Automatically commit the image if the activation on the device is successful
+    bool commitOnSuccess = 4;
+}
+
+message DeviceImageRequest {
+
+    //Device Id
+    //allows for operations on multiple adapters.
+    repeated common.ID device_id = 1;
+
+    // Image Version, this is the sole identifier of the image. it's the vendor specified OMCI version
+    // must be known at the time of initiating a download, activate, commit image on an onu.
+    string version = 2;
+
+    //Automatically commit the image if the activation on the device is successful
+    bool commitOnSuccess = 3;
+}
+
+message DeviceImageResponse {
+
+    //Image state for the different devices
+    repeated DeviceImageState device_image_states = 1;
+}
+
 // Additional information required to process flow at device adapters
 message FlowMetadata {
     // Meters associated with flow-update to adapter
@@ -369,18 +405,19 @@
     }
 
     // Delete a device
-    rpc DeleteDevice(common.ID) returns(google.protobuf.Empty) {
+    rpc DeleteDevice (common.ID) returns (google.protobuf.Empty) {
         option (google.api.http) = {
             delete: "/api/v1/devices/{id}/delete"
         };
     }
 
     // Forcefully delete a device
-    rpc ForceDeleteDevice(common.ID) returns(google.protobuf.Empty) {
+    rpc ForceDeleteDevice (common.ID) returns (google.protobuf.Empty) {
         option (google.api.http) = {
             delete: "/api/v1/devices/{id}/force_delete"
         };
     }
+
     // Request an image download to the standby partition
     // of a device.
     // Note that the call is expected to be non-blocking.
@@ -393,6 +430,7 @@
 
     // Get image download status on a device
     // The request retrieves progress on device and updates db record
+    // Deprecated in voltha 2.8, will be removed
     rpc GetImageDownloadStatus(ImageDownload) returns(ImageDownload) {
         option (google.api.http) = {
             get: "/api/v1/devices/{id}/image_downloads/{name}/status"
@@ -400,6 +438,7 @@
     }
 
     // Get image download db record
+    // Deprecated in voltha 2.8, will be removed
     rpc GetImageDownload(ImageDownload) returns(ImageDownload) {
         option (google.api.http) = {
             get: "/api/v1/devices/{id}/image_downloads/{name}"
@@ -407,6 +446,7 @@
     }
 
     // List image download db records for a given device
+    // Deprecated in voltha 2.8, will be removed
     rpc ListImageDownloads(common.ID) returns(ImageDownloads) {
         option (google.api.http) = {
             get: "/api/v1/devices/{id}/image_downloads"
@@ -414,6 +454,7 @@
     }
 
     // Cancel an existing image download process on a device
+    // Deprecated in voltha 2.8, will be removed
     rpc CancelImageDownload(ImageDownload) returns(common.OperationResp) {
         option (google.api.http) = {
             delete: "/api/v1/devices/{id}/image_downloads/{name}"
@@ -427,6 +468,7 @@
     // If no reboot, then a reboot is required to make the
     // activated image running on device
     // Note that the call is expected to be non-blocking.
+    // Deprecated in voltha 2.8, will be removed
     rpc ActivateImageUpdate(ImageDownload) returns(common.OperationResp) {
         option (google.api.http) = {
             post: "/api/v1/devices/{id}/image_downloads/{name}/image_update"
@@ -441,6 +483,7 @@
     // If no reboot, then a reboot is required to make the
     // previous image running on device
     // Note that the call is expected to be non-blocking.
+    // Deprecated in voltha 2.8, will be removed
     rpc RevertImageUpdate(ImageDownload) returns(common.OperationResp) {
         option (google.api.http) = {
             post: "/api/v1/devices/{id}/image_downloads/{name}/image_revert"
@@ -448,15 +491,75 @@
         };
     }
 
+    // Downloads a certain image to the standby partition of the devices
+    // Note that the call is expected to be non-blocking.
+    rpc DownloadImageToDevice (DeviceImageDownloadRequest) returns (DeviceImageResponse) {
+        option (google.api.http) = {
+            get: "/api/v1/devices/images/download_images"
+        };
+    }
+
+    // Get image status on a number of devices devices
+    // Polled from northbound systems to get state of download/activate/commit
+    rpc GetImageStatus (DeviceImageRequest) returns (DeviceImageResponse) {
+        option (google.api.http) = {
+            get: "/api/v1/devices/images/images_status"
+        };
+    }
+
+    // Aborts the upgrade of an image on a device
+    // To be used carefully, stops any further operations for the Image on the given devices
+    // Might also stop if possible existing work, but no guarantees are given,
+    // depends on implementation and procedure status.
+    rpc AbortImageUpgradeToDevice (DeviceImageRequest) returns (DeviceImageResponse) {
+        option (google.api.http) = {
+            get: "/api/v1/devices/images/abort_upgrade_images"
+        };
+    }
+
+    // Get Both Active and Standby image for a given device
+    rpc GetOnuImages (common.ID) returns (OnuImages) {
+        option (google.api.http) = {
+            get: "/api/v1/devices/{id}/onu_images"
+        };
+    }
+
+    // Activate the specified image from a standby partition
+    // to active partition.
+    // Depending on the device implementation, this call
+    // may or may not cause device reboot.
+    // If no reboot, then a reboot is required to make the
+    // activated image running on device
+    // Note that the call is expected to be non-blocking.
+    rpc ActivateImage (DeviceImageRequest) returns (DeviceImageResponse) {
+        option (google.api.http) = {
+            post: "/api/v1/devices/images/activate_images"
+            body: "*"
+        };
+    }
+
+    // Commit the specified image to be default.
+    // Depending on the device implementation, this call
+    // may or may not cause device reboot.
+    // If no reboot, then a reboot is required to make the
+    // activated image running on device upon next reboot
+    // Note that the call is expected to be non-blocking.
+    rpc CommitImage (DeviceImageRequest) returns (DeviceImageResponse) {
+        option (google.api.http) = {
+            post: "/api/v1/devices/images/commit_images"
+            body: "*"
+        };
+    }
+
     // List ports of a device
-    rpc ListDevicePorts(common.ID) returns(Ports) {
+    rpc ListDevicePorts (common.ID) returns (Ports) {
         option (google.api.http) = {
             get: "/api/v1/devices/{id}/ports"
         };
     }
 
     // List pm config of a device
-    rpc ListDevicePmConfigs(common.ID) returns(PmConfigs) {
+    rpc ListDevicePmConfigs (common.ID) returns (PmConfigs) {
         option (google.api.http) = {
             get: "/api/v1/devices/{id}/pm_configs"
         };
diff --git a/voltha.pb b/voltha.pb
index e5b8114..f89745b 100644
--- a/voltha.pb
+++ b/voltha.pb
Binary files differ