From f1392109b2ac3cac715715a6b58f4bbe9556fbbd Mon Sep 17 00:00:00 2001 From: river Date: Sun, 12 Mar 2023 08:47:44 +0800 Subject: [PATCH 1/9] feat: add test for audio api --- code/handlers/event_action.go | 5 +++-- code/handlers/handler.go | 5 +++-- code/handlers/init.go | 4 ++-- code/main.go | 4 ++-- code/services/{ => openai}/gpt3.go | 2 +- code/services/{ => openai}/gpt3_test.go | 24 ++++++++++++++++++------ code/services/openai/test_file/test.mp3 | Bin 0 -> 161324 bytes code/services/sessionCache.go | 17 +++++++++-------- 8 files changed, 38 insertions(+), 23 deletions(-) rename code/services/{ => openai}/gpt3.go (99%) rename code/services/{ => openai}/gpt3_test.go (63%) create mode 100644 code/services/openai/test_file/test.mp3 diff --git a/code/handlers/event_action.go b/code/handlers/event_action.go index 44b93362..3e9f4158 100644 --- a/code/handlers/event_action.go +++ b/code/handlers/event_action.go @@ -7,6 +7,7 @@ import ( "os" "start-feishubot/initialization" "start-feishubot/services" + "start-feishubot/services/openai" "start-feishubot/utils" "start-feishubot/utils/audio" ) @@ -93,7 +94,7 @@ func (*RolePlayAction) Execute(a *ActionInfo) bool { if system, foundSystem := utils.EitherCutPrefix(a.info.qParsed, "/system ", "角色扮演 "); foundSystem { a.handler.sessionCache.Clear(*a.info.sessionId) - systemMsg := append([]services.Messages{}, services.Messages{ + systemMsg := append([]openai.Messages{}, openai.Messages{ Role: "system", Content: system, }) a.handler.sessionCache.SetMsg(*a.info.sessionId, systemMsg) @@ -160,7 +161,7 @@ type MessageAction struct { /*消息*/ func (*MessageAction) Execute(a *ActionInfo) bool { msg := a.handler.sessionCache.GetMsg(*a.info.sessionId) - msg = append(msg, services.Messages{ + msg = append(msg, openai.Messages{ Role: "user", Content: a.info.qParsed, }) completions, err := a.handler.gpt.Completions(msg) diff --git a/code/handlers/handler.go b/code/handlers/handler.go index 5833d231..1569e4cd 100644 --- a/code/handlers/handler.go +++ b/code/handlers/handler.go @@ -6,6 +6,7 @@ import ( "fmt" "start-feishubot/initialization" "start-feishubot/services" + "start-feishubot/services/openai" "strings" larkcard "github.com/larksuite/oapi-sdk-go/v3/card" @@ -26,7 +27,7 @@ func chain(data *ActionInfo, actions ...Action) bool { type MessageHandler struct { sessionCache services.SessionServiceCacheInterface msgCache services.MsgCacheInterface - gpt *services.ChatGPT + gpt *openai.ChatGPT config initialization.Config } @@ -156,7 +157,7 @@ func (m MessageHandler) msgReceivedHandler(ctx context.Context, event *larkim.P2 var _ MessageHandlerInterface = (*MessageHandler)(nil) -func NewMessageHandler(gpt *services.ChatGPT, +func NewMessageHandler(gpt *openai.ChatGPT, config initialization.Config) MessageHandlerInterface { return &MessageHandler{ sessionCache: services.GetSessionCache(), diff --git a/code/handlers/init.go b/code/handlers/init.go index 333e43f1..aae30651 100644 --- a/code/handlers/init.go +++ b/code/handlers/init.go @@ -3,7 +3,7 @@ package handlers import ( "context" "start-feishubot/initialization" - "start-feishubot/services" + "start-feishubot/services/openai" larkcard "github.com/larksuite/oapi-sdk-go/v3/card" larkim "github.com/larksuite/oapi-sdk-go/v3/service/im/v1" @@ -24,7 +24,7 @@ const ( // handlers 所有消息类型类型的处理器 var handlers MessageHandlerInterface -func InitHandlers(gpt *services.ChatGPT, config initialization.Config) { +func InitHandlers(gpt *openai.ChatGPT, config initialization.Config) { handlers = NewMessageHandler(gpt, config) } diff --git a/code/main.go b/code/main.go index 8c5bdb83..aed97448 100644 --- a/code/main.go +++ b/code/main.go @@ -6,7 +6,7 @@ import ( "log" "start-feishubot/handlers" "start-feishubot/initialization" - "start-feishubot/services" + "start-feishubot/services/openai" larkcard "github.com/larksuite/oapi-sdk-go/v3/card" @@ -26,7 +26,7 @@ func main() { pflag.Parse() config := initialization.LoadConfig(*cfg) initialization.LoadLarkClient(*config) - gpt := services.NewChatGPT(*config) + gpt := openai.NewChatGPT(*config) handlers.InitHandlers(gpt, *config) eventHandler := dispatcher.NewEventDispatcher( diff --git a/code/services/gpt3.go b/code/services/openai/gpt3.go similarity index 99% rename from code/services/gpt3.go rename to code/services/openai/gpt3.go index ee0c2908..f57daded 100644 --- a/code/services/gpt3.go +++ b/code/services/openai/gpt3.go @@ -1,4 +1,4 @@ -package services +package openai import ( "bytes" diff --git a/code/services/gpt3_test.go b/code/services/openai/gpt3_test.go similarity index 63% rename from code/services/gpt3_test.go rename to code/services/openai/gpt3_test.go index a909e904..8ff76944 100644 --- a/code/services/gpt3_test.go +++ b/code/services/openai/gpt3_test.go @@ -1,4 +1,4 @@ -package services +package openai import ( "fmt" @@ -7,7 +7,7 @@ import ( ) func TestCompletions(t *testing.T) { - config := initialization.LoadConfig("../config.yaml") + config := initialization.LoadConfig("../../config.yaml") msgs := []Messages{ {Role: "system", Content: "你是一个专业的翻译官,负责中英文翻译。"}, @@ -25,18 +25,30 @@ func TestCompletions(t *testing.T) { } func TestGenerateOneImage(t *testing.T) { - config := initialization.LoadConfig("../config.yaml") - + config := initialization.LoadConfig("../../config.yaml") gpt := NewChatGPT(*config) prompt := "a red apple" size := "256x256" - imageURL, err := gpt.GenerateOneImage(prompt, size) if err != nil { t.Errorf("TestGenerateOneImage failed with error: %v", err) } - if imageURL == "" { t.Errorf("TestGenerateOneImage returned empty imageURL") } } + +func TestAudioToText(t *testing.T) { + config := initialization.LoadConfig("../../config.yaml") + gpt := NewChatGPT(*config) + audio := "./test_file/test.mp3" + text, err := gpt.AudioToText(audio) + if err != nil { + t.Errorf("TestAudioToText failed with error: %v", err) + } + fmt.Printf("TestAudioToText returned text: %s \n", text) + if text == "" { + t.Errorf("TestAudioToText returned empty text") + } + +} diff --git a/code/services/openai/test_file/test.mp3 b/code/services/openai/test_file/test.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..2295221a3aed9c607d2a75f027034e77fb9ae27e GIT binary patch literal 161324 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 literal 0 HcmV?d00001 diff --git a/code/services/sessionCache.go b/code/services/sessionCache.go index 054ecb74..67a9d9c7 100644 --- a/code/services/sessionCache.go +++ b/code/services/sessionCache.go @@ -2,6 +2,7 @@ package services import ( "encoding/json" + "start-feishubot/services/openai" "time" "github.com/patrickmn/go-cache" @@ -17,9 +18,9 @@ type PicSetting struct { type Resolution string type SessionMeta struct { - Mode SessionMode `json:"mode"` - Msg []Messages `json:"msg,omitempty"` - PicSetting PicSetting `json:"pic_setting,omitempty"` + Mode SessionMode `json:"mode"` + Msg []openai.Messages `json:"msg,omitempty"` + PicSetting PicSetting `json:"pic_setting,omitempty"` } const ( @@ -34,8 +35,8 @@ const ( ) type SessionServiceCacheInterface interface { - GetMsg(sessionId string) []Messages - SetMsg(sessionId string, msg []Messages) + GetMsg(sessionId string) []openai.Messages + SetMsg(sessionId string, msg []openai.Messages) SetMode(sessionId string, mode SessionMode) GetMode(sessionId string) SessionMode SetPicResolution(sessionId string, resolution Resolution) @@ -68,7 +69,7 @@ func (s *SessionService) SetMode(sessionId string, mode SessionMode) { s.cache.Set(sessionId, sessionMeta, maxCacheTime) } -func (s *SessionService) GetMsg(sessionId string) (msg []Messages) { +func (s *SessionService) GetMsg(sessionId string) (msg []openai.Messages) { sessionContext, ok := s.cache.Get(sessionId) if !ok { return nil @@ -77,7 +78,7 @@ func (s *SessionService) GetMsg(sessionId string) (msg []Messages) { return sessionMeta.Msg } -func (s *SessionService) SetMsg(sessionId string, msg []Messages) { +func (s *SessionService) SetMsg(sessionId string, msg []openai.Messages) { maxLength := 4096 maxCacheTime := time.Hour * 12 @@ -142,7 +143,7 @@ func GetSessionCache() SessionServiceCacheInterface { return sessionServices } -func getStrPoolTotalLength(strPool []Messages) int { +func getStrPoolTotalLength(strPool []openai.Messages) int { var total int for _, v := range strPool { bytes, _ := json.Marshal(v) From a3988b4b1300838003c63803785c6f22a7e9628d Mon Sep 17 00:00:00 2001 From: river Date: Sun, 12 Mar 2023 09:34:16 +0800 Subject: [PATCH 2/9] feat: add image variation api --- code/services/openai/audio.go | 66 +++++++ code/services/openai/common.go | 168 ++++++++++++++++ code/services/openai/gpt3.go | 252 ------------------------ code/services/openai/gpt3_test.go | 18 +- code/services/openai/picture.go | 141 +++++++++++++ code/services/openai/test_file/test.mp3 | Bin 161324 -> 0 bytes code/services/openai/test_file/test.png | Bin 0 -> 30971 bytes code/services/openai/test_file/test.wav | Bin 0 -> 40398 bytes 8 files changed, 392 insertions(+), 253 deletions(-) create mode 100644 code/services/openai/audio.go create mode 100644 code/services/openai/common.go create mode 100644 code/services/openai/picture.go delete mode 100644 code/services/openai/test_file/test.mp3 create mode 100644 code/services/openai/test_file/test.png create mode 100644 code/services/openai/test_file/test.wav diff --git a/code/services/openai/audio.go b/code/services/openai/audio.go new file mode 100644 index 00000000..1d843e4d --- /dev/null +++ b/code/services/openai/audio.go @@ -0,0 +1,66 @@ +package openai + +import ( + "bytes" + "fmt" + "io" + "mime/multipart" + "os" +) + +type AudioToTextRequestBody struct { + File string `json:"file"` + Model string `json:"model"` + ResponseFormat string `json:"response_format"` +} + +type AudioToTextResponseBody struct { + Text string `json:"text"` +} + +func audioMultipartForm(request AudioToTextRequestBody, w *multipart.Writer) error { + f, err := os.Open(request.File) + if err != nil { + return fmt.Errorf("opening audio file: %w", err) + } + + fw, err := w.CreateFormFile("file", f.Name()) + if err != nil { + return fmt.Errorf("creating form file: %w", err) + } + + if _, err = io.Copy(fw, f); err != nil { + return fmt.Errorf("reading from opened audio file: %w", err) + } + + fw, err = w.CreateFormField("model") + if err != nil { + return fmt.Errorf("creating form field: %w", err) + } + + modelName := bytes.NewReader([]byte(request.Model)) + if _, err = io.Copy(fw, modelName); err != nil { + return fmt.Errorf("writing model name: %w", err) + } + w.Close() + + return nil +} + +func (gpt ChatGPT) AudioToText(audio string) (string, error) { + requestBody := AudioToTextRequestBody{ + File: audio, + Model: "whisper-1", + ResponseFormat: "text", + } + audioToTextResponseBody := &AudioToTextResponseBody{} + err := gpt.sendRequestWithBodyType(gpt.ApiUrl+"/v1/audio/transcriptions", + "POST", formVoiceDataBody, requestBody, audioToTextResponseBody) + //fmt.Println(audioToTextResponseBody) + if err != nil { + //fmt.Println(err) + return "", err + } + + return audioToTextResponseBody.Text, nil +} diff --git a/code/services/openai/common.go b/code/services/openai/common.go new file mode 100644 index 00000000..854a811d --- /dev/null +++ b/code/services/openai/common.go @@ -0,0 +1,168 @@ +package openai + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "io/ioutil" + "mime/multipart" + "net/http" + "net/url" + "start-feishubot/initialization" + "start-feishubot/services/loadbalancer" + "strings" + "time" +) + +type ChatGPT struct { + Lb *loadbalancer.LoadBalancer + ApiKey []string + ApiUrl string + HttpProxy string +} +type requestBodyType int + +const ( + jsonBody requestBodyType = iota + formVoiceDataBody + formPictureDataBody +) + +func (gpt ChatGPT) doAPIRequestWithRetry(url, method string, bodyType requestBodyType, + requestBody interface{}, responseBody interface{}, client *http.Client, maxRetries int) error { + var api *loadbalancer.API + var requestBodyData []byte + var err error + var writer *multipart.Writer + + switch bodyType { + case jsonBody: + api = gpt.Lb.GetAPI() + requestBodyData, err = json.Marshal(requestBody) + if err != nil { + return err + } + case formVoiceDataBody: + api = gpt.Lb.GetAPI() + formBody := &bytes.Buffer{} + writer = multipart.NewWriter(formBody) + err = audioMultipartForm(requestBody.(AudioToTextRequestBody), writer) + if err != nil { + return err + } + err = writer.Close() + if err != nil { + return err + } + requestBodyData = formBody.Bytes() + + case formPictureDataBody: + api = gpt.Lb.GetAPI() + formBody := &bytes.Buffer{} + writer = multipart.NewWriter(formBody) + err = pictureMultipartForm(requestBody.(ImageVariantRequestBody), writer) + if err != nil { + return err + } + err = writer.Close() + if err != nil { + return err + } + requestBodyData = formBody.Bytes() + + default: + return errors.New("unknown request body type") + } + + if api == nil { + return errors.New("no available API") + } + + req, err := http.NewRequest(method, url, bytes.NewReader(requestBodyData)) + if err != nil { + return err + } + + req.Header.Set("Content-Type", "application/json") + if bodyType == formVoiceDataBody || bodyType == formPictureDataBody { + req.Header.Set("Content-Type", writer.FormDataContentType()) + } + req.Header.Set("Authorization", "Bearer "+api.Key) + + var response *http.Response + var retry int + for retry = 0; retry <= maxRetries; retry++ { + response, err = client.Do(req) + //fmt.Println("req", req) + //fmt.Println("response", response, "err", err) + if err != nil || response.StatusCode < 200 || response.StatusCode >= 300 { + gpt.Lb.SetAvailability(api.Key, false) + if retry == maxRetries { + break + } + time.Sleep(time.Duration(retry+1) * time.Second) + } else { + break + } + } + if response != nil { + defer response.Body.Close() + } + + if response == nil || response.StatusCode < 200 || response.StatusCode >= 300 { + return fmt.Errorf("%s api failed after %d retries", strings.ToUpper(method), retry) + } + + body, err := ioutil.ReadAll(response.Body) + if err != nil { + return err + } + + err = json.Unmarshal(body, responseBody) + if err != nil { + return err + } + + gpt.Lb.SetAvailability(api.Key, true) + return nil +} + +func (gpt ChatGPT) sendRequestWithBodyType(link, method string, bodyType requestBodyType, + requestBody interface{}, responseBody interface{}) error { + var err error + client := &http.Client{Timeout: 110 * time.Second} + if gpt.HttpProxy == "" { + err = gpt.doAPIRequestWithRetry(link, method, bodyType, + requestBody, responseBody, client, 3) + } else { + proxyUrl, err := url.Parse(gpt.HttpProxy) + if err != nil { + return err + } + transport := &http.Transport{ + Proxy: http.ProxyURL(proxyUrl), + } + proxyClient := &http.Client{ + Transport: transport, + Timeout: 110 * time.Second, + } + err = gpt.doAPIRequestWithRetry(link, method, bodyType, + requestBody, responseBody, proxyClient, 3) + } + + return err +} + +func NewChatGPT(config initialization.Config) *ChatGPT { + apiKeys := config.OpenaiApiKeys + apiUrl := config.OpenaiApiUrl + httpProxy := config.HttpProxy + lb := loadbalancer.NewLoadBalancer(apiKeys) + return &ChatGPT{ + Lb: lb, + ApiKey: apiKeys, + ApiUrl: apiUrl, + HttpProxy: httpProxy, + } +} diff --git a/code/services/openai/gpt3.go b/code/services/openai/gpt3.go index f57daded..fdf13e72 100644 --- a/code/services/openai/gpt3.go +++ b/code/services/openai/gpt3.go @@ -1,20 +1,7 @@ package openai import ( - "bytes" - "encoding/json" "errors" - "fmt" - "io" - "io/ioutil" - "mime/multipart" - "net/http" - "net/url" - "os" - "start-feishubot/initialization" - "start-feishubot/services/loadbalancer" - "strings" - "time" ) const ( @@ -53,153 +40,6 @@ type ChatGPTRequestBody struct { FrequencyPenalty int `json:"frequency_penalty"` PresencePenalty int `json:"presence_penalty"` } -type ChatGPT struct { - Lb *loadbalancer.LoadBalancer - ApiKey []string - ApiUrl string - HttpProxy string -} - -type ImageGenerationRequestBody struct { - Prompt string `json:"prompt"` - N int `json:"n"` - Size string `json:"size"` - ResponseFormat string `json:"response_format"` -} - -type ImageGenerationResponseBody struct { - Created int64 `json:"created"` - Data []struct { - Base64Json string `json:"b64_json"` - } `json:"data"` -} - -type AudioToTextRequestBody struct { - File string `json:"file"` - Model string `json:"model"` - ResponseFormat string `json:"response_format"` -} - -type AudioToTextResponseBody struct { - Text string `json:"text"` -} - -type requestBodyType int - -const ( - jsonBody requestBodyType = iota - formDataBody -) - -func (gpt ChatGPT) doAPIRequestWithRetry(url, method string, bodyType requestBodyType, - requestBody interface{}, responseBody interface{}, client *http.Client, maxRetries int) error { - var api *loadbalancer.API - var requestBodyData []byte - var err error - var writer *multipart.Writer - - switch bodyType { - case jsonBody: - api = gpt.Lb.GetAPI() - requestBodyData, err = json.Marshal(requestBody) - if err != nil { - return err - } - case formDataBody: - api = gpt.Lb.GetAPI() - formBody := &bytes.Buffer{} - writer = multipart.NewWriter(formBody) - err = audioMultipartForm(requestBody.(AudioToTextRequestBody), writer) - if err != nil { - return err - } - err = writer.Close() - if err != nil { - return err - } - requestBodyData = formBody.Bytes() - default: - return errors.New("unknown request body type") - } - - if api == nil { - return errors.New("no available API") - } - - req, err := http.NewRequest(method, url, bytes.NewReader(requestBodyData)) - if err != nil { - return err - } - - req.Header.Set("Content-Type", "application/json") - if bodyType == formDataBody { - req.Header.Set("Content-Type", writer.FormDataContentType()) - } - req.Header.Set("Authorization", "Bearer "+api.Key) - - var response *http.Response - var retry int - for retry = 0; retry <= maxRetries; retry++ { - response, err = client.Do(req) - //fmt.Println("req", req) - //fmt.Println("response", response, "err", err) - if err != nil || response.StatusCode < 200 || response.StatusCode >= 300 { - gpt.Lb.SetAvailability(api.Key, false) - if retry == maxRetries { - break - } - time.Sleep(time.Duration(retry+1) * time.Second) - } else { - break - } - } - if response != nil { - defer response.Body.Close() - } - - if response == nil || response.StatusCode < 200 || response.StatusCode >= 300 { - return fmt.Errorf("%s api failed after %d retries", strings.ToUpper(method), retry) - } - - body, err := ioutil.ReadAll(response.Body) - if err != nil { - return err - } - - err = json.Unmarshal(body, responseBody) - if err != nil { - return err - } - - gpt.Lb.SetAvailability(api.Key, true) - return nil -} - -func (gpt ChatGPT) sendRequestWithBodyType(link, method string, bodyType requestBodyType, - requestBody interface{}, responseBody interface{}) error { - var err error - client := &http.Client{Timeout: 110 * time.Second} - if gpt.HttpProxy == "" { - err = gpt.doAPIRequestWithRetry(link, method, bodyType, - requestBody, responseBody, client, 3) - } else { - proxyUrl, err := url.Parse(gpt.HttpProxy) - if err != nil { - return err - } - transport := &http.Transport{ - Proxy: http.ProxyURL(proxyUrl), - } - proxyClient := &http.Client{ - Transport: transport, - Timeout: 110 * time.Second, - } - err = gpt.doAPIRequestWithRetry(link, method, bodyType, - requestBody, responseBody, proxyClient, 3) - } - - return err -} func (gpt ChatGPT) Completions(msg []Messages) (resp Messages, err error) { requestBody := ChatGPTRequestBody{ @@ -224,95 +64,3 @@ func (gpt ChatGPT) Completions(msg []Messages) (resp Messages, err error) { } return resp, err } - -// audioMultipartForm creates a form with audio file contents and the name of the model to use for -// audio processing. -func audioMultipartForm(request AudioToTextRequestBody, w *multipart.Writer) error { - f, err := os.Open(request.File) - if err != nil { - return fmt.Errorf("opening audio file: %w", err) - } - - fw, err := w.CreateFormFile("file", f.Name()) - if err != nil { - return fmt.Errorf("creating form file: %w", err) - } - - if _, err = io.Copy(fw, f); err != nil { - return fmt.Errorf("reading from opened audio file: %w", err) - } - - fw, err = w.CreateFormField("model") - if err != nil { - return fmt.Errorf("creating form field: %w", err) - } - - modelName := bytes.NewReader([]byte(request.Model)) - if _, err = io.Copy(fw, modelName); err != nil { - return fmt.Errorf("writing model name: %w", err) - } - w.Close() - - return nil -} - -func (gpt ChatGPT) GenerateImage(prompt string, size string, n int) ([]string, error) { - requestBody := ImageGenerationRequestBody{ - Prompt: prompt, - N: n, - Size: size, - ResponseFormat: "b64_json", - } - - imageResponseBody := &ImageGenerationResponseBody{} - err := gpt.sendRequestWithBodyType(gpt.ApiUrl+"/v1/images/generations", - "POST", jsonBody, requestBody, imageResponseBody) - - if err != nil { - return nil, err - } - - var b64Pool []string - for _, data := range imageResponseBody.Data { - b64Pool = append(b64Pool, data.Base64Json) - } - return b64Pool, nil -} - -func (gpt ChatGPT) GenerateOneImage(prompt string, size string) (string, error) { - b64s, err := gpt.GenerateImage(prompt, size, 1) - if err != nil { - return "", err - } - return b64s[0], nil -} - -func (gpt ChatGPT) AudioToText(audio string) (string, error) { - requestBody := AudioToTextRequestBody{ - File: audio, - Model: "whisper-1", - ResponseFormat: "text", - } - audioToTextResponseBody := &AudioToTextResponseBody{} - err := gpt.sendRequestWithBodyType(gpt.ApiUrl+"/v1/audio/transcriptions", - "POST", formDataBody, requestBody, audioToTextResponseBody) - //fmt.Println(audioToTextResponseBody) - if err != nil { - //fmt.Println(err) - return "", err - } - - return audioToTextResponseBody.Text, nil -} -func NewChatGPT(config initialization.Config) *ChatGPT { - apiKeys := config.OpenaiApiKeys - apiUrl := config.OpenaiApiUrl - httpProxy := config.HttpProxy - lb := loadbalancer.NewLoadBalancer(apiKeys) - return &ChatGPT{ - Lb: lb, - ApiKey: apiKeys, - ApiUrl: apiUrl, - HttpProxy: httpProxy, - } -} diff --git a/code/services/openai/gpt3_test.go b/code/services/openai/gpt3_test.go index 8ff76944..668b0801 100644 --- a/code/services/openai/gpt3_test.go +++ b/code/services/openai/gpt3_test.go @@ -41,7 +41,7 @@ func TestGenerateOneImage(t *testing.T) { func TestAudioToText(t *testing.T) { config := initialization.LoadConfig("../../config.yaml") gpt := NewChatGPT(*config) - audio := "./test_file/test.mp3" + audio := "./test_file/test.wav" text, err := gpt.AudioToText(audio) if err != nil { t.Errorf("TestAudioToText failed with error: %v", err) @@ -52,3 +52,19 @@ func TestAudioToText(t *testing.T) { } } + +func TestVariateOneImage(t *testing.T) { + config := initialization.LoadConfig("../../config.yaml") + gpt := NewChatGPT(*config) + image := "./test_file/test.png" + size := "256x256" + imageBs64, err := gpt.GenerateOneImageVariation(image, size) + if err != nil { + t.Errorf("TestVariateOneImage failed with error: %v", err) + } + //fmt.Printf("TestVariateOneImage returned imageBs64: %s \n", imageBs64) + if imageBs64 == "" { + t.Errorf("TestVariateOneImage returned empty imageURL") + } + +} diff --git a/code/services/openai/picture.go b/code/services/openai/picture.go new file mode 100644 index 00000000..562d6b8d --- /dev/null +++ b/code/services/openai/picture.go @@ -0,0 +1,141 @@ +package openai + +import ( + "fmt" + "io" + "mime/multipart" + "os" +) + +type ImageGenerationRequestBody struct { + Prompt string `json:"prompt"` + N int `json:"n"` + Size string `json:"size"` + ResponseFormat string `json:"response_format"` +} + +type ImageResponseBody struct { + Created int64 `json:"created"` + Data []struct { + Base64Json string `json:"b64_json"` + } `json:"data"` +} + +type ImageVariantRequestBody struct { + Image string `json:"image"` + N int `json:"n"` + Size string `json:"size"` + ResponseFormat string `json:"response_format"` +} + +func (gpt ChatGPT) GenerateImage(prompt string, size string, n int) ([]string, error) { + requestBody := ImageGenerationRequestBody{ + Prompt: prompt, + N: n, + Size: size, + ResponseFormat: "b64_json", + } + + imageResponseBody := &ImageResponseBody{} + err := gpt.sendRequestWithBodyType(gpt.ApiUrl+"/v1/images/generations", + "POST", jsonBody, requestBody, imageResponseBody) + + if err != nil { + return nil, err + } + + var b64Pool []string + for _, data := range imageResponseBody.Data { + b64Pool = append(b64Pool, data.Base64Json) + } + return b64Pool, nil +} + +func (gpt ChatGPT) GenerateOneImage(prompt string, size string) (string, error) { + b64s, err := gpt.GenerateImage(prompt, size, 1) + if err != nil { + return "", err + } + return b64s[0], nil +} + +func (gpt ChatGPT) GenerateOneImageWithDefaultSize(prompt string) (string, error) { + return gpt.GenerateOneImage(prompt, "512x512") +} + +func (gpt ChatGPT) GenerateImageVariation(images string, size string, n int) ([]string, error) { + requestBody := ImageVariantRequestBody{ + Image: images, + N: n, + Size: size, + ResponseFormat: "b64_json", + } + + imageResponseBody := &ImageResponseBody{} + err := gpt.sendRequestWithBodyType(gpt.ApiUrl+"/v1/images/variations", + "POST", formPictureDataBody, requestBody, imageResponseBody) + + if err != nil { + return nil, err + } + + var b64Pool []string + for _, data := range imageResponseBody.Data { + b64Pool = append(b64Pool, data.Base64Json) + } + return b64Pool, nil +} + +func (gpt ChatGPT) GenerateOneImageVariation(images string, size string) (string, error) { + b64s, err := gpt.GenerateImageVariation(images, size, 1) + if err != nil { + return "", err + } + return b64s[0], nil +} + +func pictureMultipartForm(request ImageVariantRequestBody, + w *multipart.Writer) error { + + f, err := os.Open(request.Image) + if err != nil { + return fmt.Errorf("opening audio file: %w", err) + } + fw, err := w.CreateFormFile("image", f.Name()) + if err != nil { + return fmt.Errorf("creating form file: %w", err) + } + if _, err = io.Copy(fw, f); err != nil { + return fmt.Errorf("reading from opened audio file: %w", err) + } + + err = w.WriteField("size", request.Size) + if err != nil { + return fmt.Errorf("writing size: %w", err) + } + + err = w.WriteField("n", fmt.Sprintf("%d", request.N)) + if err != nil { + return fmt.Errorf("writing n: %w", err) + } + + err = w.WriteField("response_format", request.ResponseFormat) + if err != nil { + return fmt.Errorf("writing response_format: %w", err) + } + + //fw, err = w.CreateFormField("model") + //if err != nil { + // return fmt.Errorf("creating form field: %w", err) + //} + //modelName := bytes.NewReader([]byte(request.Model)) + //if _, err = io.Copy(fw, modelName); err != nil { + // return fmt.Errorf("writing model name: %w", err) + //} + + //fmt.Printf("w.FormDataContentType(): %s ", w.FormDataContentType()) + + w.Close() + + return nil +} diff --git a/code/services/openai/test_file/test.mp3 b/code/services/openai/test_file/test.mp3 deleted file mode 100644 index 2295221a3aed9c607d2a75f027034e77fb9ae27e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161324 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 diff --git a/code/services/openai/test_file/test.png b/code/services/openai/test_file/test.png new file mode 100644 index 0000000000000000000000000000000000000000..82bffdac50fe31b46c5c2a55399b5c121809d1d0 GIT binary patch literal 30971 zcmV(~K+nI4P)`Zj)s9PDJXksUens+xx2oBa%kxC{FjG*JU29TVOEQJZ?C4F zBOxLGQ0gl{-5=ZCg>+;p?)ks;8!>VNXRu zL`0pTrog(ii*skFmx`8}pIuv6N=!~fH!rBHvA3(D85kK)KsJVIT}Vb#bTBqK++m&o03ZNK zL_t(|+Kie1Z`#Td#rYg}d5%Qw3*e?+2B1I%=y3V(68^kjf z9mn!O{defi9FA@+h(oi z`+mFA_WfF|iKy3`cn@##{Yt*uZFgIz{9p+PgOvecV}DM0&PTqR?xsfm#eV-UL%`{0 zWB?!pHbMaU^DJ@t|CYxY1VZ5D_8S3wFZADh%x=00fbyq}MzyX{Z8U^IE&!;s)9LiX zeg_O7yhrtT_Zss3PDM171+y`&!cduMdNmkAI+DfNYX0kA;+jROn-)xTY*(VxGM zE<9ine3U$J^YQoWMgTxR36@;yj;%XHLat87b`C%A(o`=^C(@yQzqQBh{0B}GF z!QnmBZ++u}-Rc(>koR+Sfac%Eg<3#Lz&L>aO#(n{uoy=MIEhGBw`&OuX04Ymx3`6U zECGOj_p`_sQ%k_;L?HTC&@b`>1Q5^#ZQn+xZ5^LF;9Pu=-nHK1~}&erSUXKtOsO-$(Z2I3D6D zCg^wiB*3nSXJy4y8Ut*^0Gs6|G$egNfV%3fc0Jn(R=RQU*H+YzYI6yP>SOig9!Lie z!ItW&|8xsDO1!Mdkm$-YiUtVC=Ryoxe|*yPQ>F_+ApKrGK>p+5a5%v;9@7J2f{r+$ z-LBC6^s{LIo5ON>2oGVWKmYa( zy3X_Bd-Gz%OW-S%BmZ3?5DoZH_b2J+PmQXipYj769*yqTdNu8T9`#QcAP{&X5a?5S zTM$&B+q3{lzYth1#Yi1r5!8$cD4p7SZij&WT+1IyGpF5{fzc{Fur2_oezZVoaoyvr zYu=;s*KVZh%YpQNR{M9f$Hik=+U@#nU+V%N!Tysu^v?|e0_amb9~DXcPCMY?a9Bcr zP$Hl<5Cpn=YFAJTP=CH(@3TxcJ3gERO5q$(5Xh-Nb=9rQ*xe=n_mO7S{ZknY!}Id_Id~41o)T~_@Xg>PUBT+7ko_9+ReicR7pVfs z6aW$AqJNzxQ6WD-#wTA~@J_M3sm?<}7r=k#|9{hH*jTIrDK^os#Z z35>M_$^fAKUEL1^@dH*YJ0`oSSM05PS%%UeH{4}bO{*W`6D5!q4ECiyfYML`YZt0t ztX;@ILXfE0PZ4marv7Yd+kZ*_M14+~{LhaFV5|<1kLThI0nj%+pbrOVJU>4?i2Qr3 zhnN;%9eANa@bGQm$-legNd1OM0|zfPfC@ip0S-Y1`3rGCR?;s3n1Alz;@vnb|P<4FDN!ZWc2^uoz$^s$J{-j0N;qWecFM zn>_PBDd``NpJ)IecoIJI`NZskWA;Zw;2*vi07Hm3>Meo?nVn$+rajPMnp9%x4ggTY zv2#i>Ofd$)HKu`VU)lxtZZ6FDLk>Zv`V*snFdHEGx(2O5QRY8YK~ey~0AL%y82WAc z=W~%S{vU;?f#69j00LNZ(GLrt2n0bNUn;}H@DRrj_d}z7a?fwY0?)<-BHx9~8R`JJ zd)OnT`}Gtn7YJ?+vS$Jrl(KzEz5+;${+3a{c;VdC66uaXa)tm5fC0$Y9bilYNd709 ze9bYWg(FWqKmtS{`(uDl#R7I!9zfvUiJweJK-)m0hl1x z2JplRC`CoZQ@K9rfLI9xG7^dYv3<%Ldfeg#+m>f8oRSduQU?U%f<14jcKQ*Xb(xxT z(*YfTga_PG{$E%FX;Rwn3IxeOFaNXv%m~EfP9|FXY<-ga_G`O+Z4fvU00Q-Mb0mS# z0f05`Wr(r}z(WlX#78ACl%qzhr!8|tum=SF9$JB*v74eWko7u`PI%vZw2~7*eoSDH zumijp{iX&|BR(y;K=*}m0a*QW?Qp7}$$!1Re#E-I76hRp00cax{tNj;!4jC5_)9v# z@IF5BKij`Zm;8?vKv*1>{o=#`olTgaO4B!20;Y6HV-T2KP?`W#wFcV%UT%vvAi`6# zY%@&k?QiJ_FxC-Rn}2}n7yXZj-Xjpa8WRu!!aMT5VNl^s0sf7D3j*U_c9v ziviJ%#~qy#LpvciS@umP-|yJZI6S^#cq${%jXu#5ko3D6u;wq-0b)S;r~26eWX6L5 zL_gC1*z0}2yzKQJjR};&NRl6F`ulwKYzbHg$ObSxQtt(4!cNFbdCH`urv}Y43%_PB zsSX|%f078^-fASk=|L@kHGpK-0p#UNnig%q6@jMz)3kBof0+Svi?;@#{7XaN)gT}P z+4s!$H!Al4b`f!av%gWw5zw^K5u zBNPiPW>)^<+v4;7^FI3{OHcL!>;BRWh^c=&0u4gviMu zNKfP!Hz0-l{}>BAnHnH~t1BTu1O6?Kyh3*Yz z#)#$Cy{&(EFn2Nh3E5_q&{B3!A)x0$-3VH(7S-R~HLB>J=pc3d!-iv!n&KDv*X@q8 zzsP480^9`+fV;c9BLsi|46mnd5CAg%74pT~p*sopL-(^};f0v-&%0MtE0zC%Fg}`e?Z;U5aKGl2f4nWj*I&BlYWRjDykw0;P zT_{!nZTX9n@qekjtVei|K57F=x|iJcia+h>Uoq=dq?4z^7t1R)uYx{qcTWeDq+Y%jwk(VGPL@b2jz*KRWND%`kQH&*3 z)|kM}jrT+T|9`o?R`-64=6tw&CU8!I$XdPnvAZ`=KxV<;HNpsfDi_xfb2RbnxjYF4 zI%fj@t+g6gtV7stL@Sa57i~swwGpubLtDN-cM*_)cLJO2d_Rds8!R0>1?>Qzfz{zx z^jr}G@(J!C0ij^#B7rA?TCkvia#3og#M-H@#2b{mU;;;8j-P}+;egJ$fzCGJD|Xzm z37r}NDggE=mUqiLd&Q0JB0?r$m+0G3;M-*5cSssnVZ&*oKi&O!_jm9MM*+h?hyt^k zP*9tR2xisUXl9uaPNqU&SO5WQAI4vz0teHxp$mRm=BI^!Bf$!}%&3tf>0Vg{lmpMO>r z1fx^#!1B`^u30MqiIRxm$Ux5i3XMtP% z+S=m2ka-Ce{!qQ%;MZy$SuO>8+d|u-?j?7k)@&T26m<$PmV_o%fMp7xdPP4GT?9D4 z!gujPL&hdk3b@I_Cz`%@{vujV1FQzL91;$cf)UV<1U}Qu$w>gu;b_SFil2E5TRcff znvFWGR?F~f7j|n+NVUHf;(gnSQCyrzC`||g7A2S{yt0o5U(LTIS7TmyS2Cb|2SLv_ z+|m3#^o#FD_=_kE2m}AY=ir`bG9d?|eOMp3crao}KbJs1NPyk+KUMp~^!Jn=%-`v> zI;~oapUKS?Alij4;h#r7u(3`h(*&D!)8N{i-kSLd|1bu!p88d$dG$(@ugTxXzM^=m z0F!{zfNToL!u(FO}bX^+vy3ypE&pxs$b0SXV9A5;QwMO#&_L` zvK66QaVG)Wt8P{{nB~mQ5m2pEU%jHp=b?8f(gJruhgJqqiVQ6J3I1Sw-iML|4xt{> z#`ka-9|y6?)|C!8x@h-GL6cZ<+kKfb_MfZgQ~c)r9W7JNLvn{5#$NyaSL$B$-b-K| z+Odq1=tppDE0Lx8>J^pY{lxG9-vFAF*0eDWTbsKwegn)$qruffY7alt3FQp7=069V z?7YOy&Sc?F6|jyypVRk|`GWZ+f4+(TWAgyT&sGE-4_bGW z9`VEc0wO6Ii7Z+a3}o8F>bmSlp3L$Gf2#n@3G^em$(HThbocgRtB={A9|3I>+uRJ4 zfH^XsH@{rBQ2zvwLTy9%@Bm6K2te>pCeOxz?N~C!ul+clO%NxW*y)XcUqBFiQq+sY zoIoXjR!)E2R{>b;x8f(*-~E+kWma9TuW_TD%?EB=i9F0dwi_b=pUn~A@rwXzs(#h9 zi|dHOWB0rEUI27}XQW?Yz-sn&7}@V^C@HTh;fJo({7Jp2%MuD2DuF#Eu<@> ze+Y$X(d!+MMV2ey-O(YBt*=`T{po3gOYUW&I-v)E02P3_KZ4&RGJj^?j}4gHfv5lm zaWCeXKeF%=@DnM5&UCm5YTFbVe#_&qC|MfeD)_+|S+2`rGg*O3AY z|6H?Dg#SSM7xiYH3NRNS0XuEzY6TQmzePv_jiQ0OArz!NS)u~DR|Zg?Be=H4xO61~ zf7jKcLnL70(x1v7>L(O4zrv>r_!7wBcNI7!0M%xk zzYE)+H{~DG2C+BvNf;8&ygX~vtEU!&=CIO29CV)=o*6>daznWj+`#pH( zy79~a5PDRC#b zWI+U6J+dG?=%rA{?*H9N^$9Kj3e-SK03E>NM-o;K3|Tndfop6-H~x84sc;)UvL9Tl z1lAnbEzQ3t-m|4)8pZz;SzvcC3p5ne&02CxH8M##Q;Z6$yafoAVRD zPiLD<2Y1+d!FDO&C-%p~2YvG3IcTK+$4X$O{yGq#_#uD^I#7%L8wb=ZR2G2CfTLQw z-4Oz)@I@&GI0aAuq*nN04x|EL`g(&DAe38`;kL(1xUb+ZAo`Ng6}>IT0KDSeO8(&= zl0K%MjsPbB+5NEr3;Rdre=7jX03icbJCBd;PQ}t-$O2iUfQb`8Uo)HGZ&C+HXPV8h ze9$I-`h1MPZs41|>Uomn4N-YRo|3#wlZ6R9f&{&DzTJB536KwH_*)$jfR%IErqq5p zyo&%Hzi7YqcR8@3I2;3-%nl6Wmapi{!TR-J_NJ}8 zndeFRbahg#{#vGuTo}kj5`5ODB#Bwc0Ur+u1C90bP^1BWyTbvL3)J5Jhj`;j{JT;G zAQJe7HvYHMs1)AsL$c8A+3?ExC0YauEYyHSJr3m-#|^wQzoJ*G!|XZ1U(3~OCd-#o z3BtGSv*Xus{$?fNKlEyVmQ?U3Yul$RoB#yB5Kx7g7Tr*R9o&vX@%!F`;-4t~$^7(@ zU*UMY>cYnrKPk8gr|#HQ<{o(5V^lLxpddu@URWvN!)|#Vj85cwH=B*kRb@7riw0Zm z5650kNyMuzR}wBI0SZ{_sTvAEa8%?C&f4$*CxCt2e}0R9QLX@ogF*ERd;PBi9$(#C zJ3zN5Zk&emSd45Gb`ru^h-0ab<(BXgHDW*>t!6$Rpy55dpUrB2f4uye&?%g20F7W`EW{^QoXa>bU2}Rn+D~RqnPX*pWyA(|kr@J2(DD?jlek%aQ0S5hS)BV8%EngnLf7RldB`GR$>_(QjmX_B{ z+4cHc27=Fe@PvQ;C;a&aomlZNAdm=l`Mn{p%;_0;Qt0*&g#yAC1@w0|RCEq-)^2eK zT_Rwm(AE0U7;5f@(e!}sjbI*J^8C}M$K%hhT8C;*iymEE2YwgSnoVOM|KloS|BM^g z_4T+bpF%$CU^tmc72i3#d{6;ghhXtu0?q~U#5Ssip8{yJ3a}*TCh&f_s2=d6{6+aA z9*}K>sB<0se|r4!`t!-E(NLO4k&S^ZPG(U~^T2VJu}A1(el{yOaG6wVt&eAwo`pv~ z!VCDvBv6my02RQaGa3MlfHq^GtJdut=6<#Ji@Uowvv|ROLIH^0H&s2;hOyu4&!vU4 zUaEDt7URB>e}~@rIUn<~+8ubkd|_U6>ET)6=5Kygl{yuAso64VE&I7Ik{=~%=z~peHe{n9bI@b^?DFm364>tida}4GKT3vWgIJ@!s1t56i|MBU@C>ybW(&=A}D= zf1UP+lKK~GjF7qmQSA9?O*S!0%Z+yBrh(uEQEdpj*w@I;trdi?UstMn$PH(_!WpRU z4mU1#(cMWgfsU^lpwWoR1~Qio?Ml4h;*(H70v?aA4^Is$(d3=m2P+x=ot?|8{8!iG zzHGr4Q=UZ-^AB)%x6*3AG-LVeFYyu}=}{$wZPNh#U^WA_8+@!B|69SqPCKx`b8f)P z!!f(x=+dEw@Vo!eCv;*L^n{PPE|D$S-CfrH*IySOE-%k`I{3#?qG98mV>e^yk%#{S z1rZnjW8`X>5?7Welf)oNAc7$vh(xGcl2solMDK3USNm!&6mK8gD*XTd<(=-Cgh^oC z8zAVqyV75$PtSBujO_Pc+I`?Ejz1|xFrD2+_WvsR`xzY~^Orn;Uur{uS{zsA-#hM7 z+Wk!);O|ujWFQ+JKN^jXuiP2MI|_1n`Tc#8^O_4uYeC{D3hu4wkEq>lhqB3Kz25wM zKZ6RC2uFtRpD^<;ugbhLpjI#Gjg$iLIpG23dtZxy3|(S+W=Wu?Q7i(1Y)@2d}qI`Yh{P?ciJ-Z^{d5IvJ=Q%0r}qY)qJE0e3t~Ph-&t z0oFig-`x*Cf{zcX;H0Mg0e32@UXv=TK zJdk-n5U`{Bt1Y>JwEk+PW(g0nzaPB)Of637Og+vV7^ba30YA=uT%!i=wzwY}=`hkx z`=F$NqUhyCo}{5hsq;fW)O783|MS}m607D7be+wE!2q~N=9ewajjloR+u~aRUJr?| zKnBYy_~?FggT1evnjyvirSL`3wcMRYC~M&C#|7s<@vyK>y+%RWH~-?`?C}6|?{iAPHs^K$AbK2sIt(ILHe42>84N zXkfeA=a!cV?p+uDgu9={D-{S52LhMIBBm|sd*+!yQotsq5n>vkfruof93|tfNcujT zs*u@ZvqeoMbr4@)4tY^gHe%mj$~4vRZDeud{5S$62B;u7V8B5Im4L(z_M`&5e)0$@ z3IBd%_#>lhmxQQCTv;;f_n`q4M&pKvXw<(I$(a|F$sk6Xl;?-nnd8e5f~EYa8mZtu zSvhF9*-`$$=bv15P<9NI_|N0ZOUi+$LqK9y-;NkY76GL&sMQJ{z@xLQhmRLc^vR)U z&zWo4=u+mxCBszaxLU13bO5!ZpOEJR1z7$tOh~5Hjuo&(a-d1-wLED=DPS$-ra!^g zDHAD#!sH$D--^Mg!`+Hh0I&ma1~C1}A-TwEIL>?^tBGqFAFLG>pu+tn&+poTg=Th* zrj#WwXhB8+6u`M)JiZTvoB+%^-`AWBK@!xB#GiY>p$zyTb z8w|M+p{7e3SL)iPVNS|9AQxXT;l9oU6d{T$x#T(270v!j*_)5eCco&d90%}43IWJ} zJ$VLL-*?j~DF7;f1~}ds2X^#K$@{}4`#ju)XY9%AH>4)c4ek?#*R)J;pg)b#k*R|IQ$L99xGDy@uVgfM3|g$#FW_M+sP@ul!hJq#XI3~*UU zgJ=y}F6pKbpO}F#pn#`bxJj4rcR3ic^w!9fSG=jP+t7R{VuS)CLH=k%exp}+-S4>C z3qCf=@TrrZrnqS#V|8|LfU@}2n&tv>;q|aAQY3T**-waGxE|G0-i}>>H1PT`d7cBQ zsL3)gyyy=mgyEF)Tbgb->5-v{2;ET#+%1#MiWR^U*@%Hw7`kVV%%4b}|h;*L9qpn7LltbKcrt77NcY zxpfVUn5UR+v6<)&pc`N5fS!;)mf}}q`G5!H%Mqn$*X6v?9>q9NIH06&YVtp_0?x0g zQ<$4xsSB67Fza56Mj!!tUe14)cUN*mP7aZ5x-0q#@X<=c#B=23hV9U^g|+zN30S{p z(@tF1XCO>>XL{Nz=|Cx{ zwy;Tjc$Vqz;_^b+LHdIDvD$x<+apy{Kqk2s>o+&@d85A2?SIoO>p*6L0ur(dNCiyh zRI z);pFAf9sZZZ%jW3hC|;Jw1`i7#O+pyZmhxIY4I8QNcL*BLCzf$n$?S`a|EuGpc~7he#PF*GV5Y6 z=nMuUR003GqgH(Y)zB4Q#Z-bqBk1K zVT`X08fWxJws5?5M8`0-Tx(Y;dVm)Bx%sQyQMQ4g zfc73>%UkL|AtgZgS)I~@9* zp9qNx2-whWMQyRIloDVu<~i(1`f8>E)iU*&0-CuN4x-;Q%b76G11BJ$%IiYh`aixO zUm|!%J-a8Ix)8Iv=)v@aag zJ0o*2WFBmYdI&YOx7B{Z1rFA)DA>zIuNE7~e(V3A`M_h*1qy_ic>tjx^*qkUV^%&$!ZH(NDp+L{WFMF#8_)ncHH-rd zXgdxHpt%uag;XwF0AUK+lMqp)s%UE2?Fi`L*1-f_ftaxza3Y@K^6@|LSz?q0UC(hn z3V~t)LB5oOrv4f=$Qg6mM7=H zWz02#K&+Qc2x)Q573tL!XaOB~p#>%gEO0@FJg1J7;G+m8?ctU>&XW3~`oFS&rF!uE zxU7WF0pNEim_@(|BFH>o@|=xuJWRN|h_{&m=L5fkoZt^k#DHm-LEyVrSBYVO8-Wwj zkpZ4%A-dbHfC3;qo^{+jxVz^%o@L7OX{Zn~0i`e16ZS9oKEK5k&HZKj=3#~$$XRK1?OG8uk;co;u()9BZ)U<9b<0RltXk~fUHWj4BY_Ce`SxZ&mw3%PM>lQ`p4SSi%t|UtjW|HaAD79@D z;gV@OrsY}42M`mcV@d%SW0=qY1BpesEdX2Ye_Qt7+$!8~(k$1!)r3U!-cO` zTYbDgelFHyGu7n8aJ|bB=ih@*1n~wpW0|wFGf!m+h}7L#I_s8UVjwew>F3~@VQ_{8 zC+|CB@Ah}98A8E{=J*^Yu(_N1RZ-7I{dYmr$2*wv#y^?HpPkJ>Y-{NF(ol znbe?hYJW29zz4|ekWBI0CQCZVZbPekt<5a4bvN}QFPe>9WO}}ZXt*?T+c$jpK!(o9 ziXHDaY(WH<0QZolsrPib7yfUK|7b_t>oXU0(i)1{_`v(scHs2$>02eZI#3YXrXJ*< z+^t>|5yvw776+YbnF~BYkMN$n-AXvjoMcIP_F#uu?0Ma^EMe-SGD#9Dh+A@o2eGh^ zfXFl|Afv~QE8L$m#+!#lv48x#^w;vfH#_hF19l|f^Xcga4&ZH3v?xw4FYi`#^2vNE zvyW3o0mEKr$RYnBlmYoo(h0I4P|EI>Sr){G5zQVz<1E6rORI$XmyZ_mg&f|%@?r4_ zWYt=a_1M#nZTV^U>HHn~cLe{PTjL|*4^{%Mw)3F9EJ*xc(FFDP_jk|B6|ptd@xuYM za*$6mz=?{^ywwSUP8bFix+7G{1eWjm8Ueo6cAVMKNW&SFF0CL^V`NKh!-N(%aE97T zHS#3Oo2`!bqW^8{{|*N>u)Plgp{?`({I)85s1gA3i{q2a?{|yE^J1}l$)Erend7Yo zM_a>rXW0AE0XI4_WDUUw1Ju%2W-y6E%j@bg_1r9um!rX%3rFu;o>3b^aKc1z=)fFm zpK-EbJ*>cODPvIkoq3gnxn&5;hv z5F6mQsppjD)9UkNo%h{X!~r zix^tGN~UB$!kzvEWK#XffEu6KVYxU!UWaH<&pbs*Q5xw@r0~y`+wE$@@);|z`v4vB8ZXZ$>yA%xR5PL2q`jMn?~Noh3sHeB*xnA};ZR5D>KzME z6@YO3&x+lT98r2A_+`Z?sNbIiNtm};&uO&?HJ-{;^qgRH(E$8?Hu-&I09ibl_%MMU zVuQ?q2H3eD4F;psx5FSbOsS==r#lf2dHV5bd0y2%i><2nt{;4jgmx8yi0ulK1<4hB z7T)|MOzZrlS+@vZ`(s!8HQ?7In9*S&&C|JWbB4S&R{j7uFQI=0X zi#iG@UW=bq73^qJ`C6O9eK}}sE_kp;EYuglcqR_^=jF-q8nky18L+YaUz>N&D-xr) z90M*arpq(KK#=7LB0sJo>vbRi!+HO2q{T3e{R#0s3FX;V@wdc`u658)REZE5_ONAN zbUh@CWPoQ>dzDxof+@@q75F;U@B`)J3mI^vr|)_&!r%xa9T~JfYbnS>+k6{g6?A-s6XyM4eA% z?%?k)91e#Ngo>WuSbUFdm_G=Da#J_L|B;*B$Wgg7`t@s|twq9t07ipEH6tESJ~cq6 z4=O|mh7}qe5zi!n4J7D(`sMGb?7D_-uvV(d?r7%187Nm<2#icu8=h}N zC|Pv?BRnp! zpkG&JO;Z5pAT@+ z=BI-auxALjW@xu7Bd$=)hwE3bWy!CPF57Vs4j3Iq;uHyLiSZ;EJp6K5qdHe29;{EA z7W_|$Apl3lStsx0%!@j$_*+cm#I*`=#Fiaos_lA?cFeGS z^Vh&pJu{^Wgy4*i-^Y?G#o5e@rC*%R9%WAQ)7yk-M*?08;>D&iC@iQ&+O07DHnH_+5GmM$9_!_~jUO9%wrX3^K%2Sk4JroM6h~hw$*?pChL9OP zq`JIs?9~IeY69D{=Jm++US$w86M?{2q2H_Mt|*7AkvBe^4ht|==?nSN&ZCw*$>qbU zJlD2J~$mow*r-@2&hl@bov1 z*G+A^eRJ#G8tvS<`1Q+65_V8*MuRID8&LsQ4)5vb(HE zYS98I#k)9ggj%!?kUUslUw9zTvJ{{bVXUi_676TR633-@{>*iIRnjZ_^^h6#zcKn@ zTqwiHU%pKyNuKx2An8wf<7nh2oXeT#H*KSRGxk{T!Pi^krkxwm0nM_BTbehiHs-x*Zyz+EFAMJHVgtU&zPzLwc!eu$x!nu1m2lZu2P$CP zj&B{_Z*Clmtx@-E@S9i&)nglphSuX1$2gD@%^secdx)4%yMwsJrZrM*vZSNNrcsE@ z8Y*9jzr!jM$aAC!T~(sxtAlKW5^nL2T{bUd87Sj~6-^TFCi!KWVNwx~SGa*tM1V7e zTwTg_kHdbS!`OckKA5zENsvwA+`ov-a43E6PHULokbJz1#}I*j|O`kH?xdCQrH#j^)b9i&%&;fCxC$ z0oq+Hu)YU@Fu(ktv8!Q9TuY*c*XQD&aDwZ%aY5h!AP6*Z zMX!+8wMdMJgiwnKRJ1)VzU9#F+=w%gW-l{dAwN&{I$ctL5!atgdN4=?`q;d5q`J2v z7B03VI0g?j;$%ARbVUbh>c=G45Q|hp z0mC}WDvli8{P)jyMPZ*jj%m^L;fn0&#udC8@NbP=Qh?07of zx4LB`$WD^zR6&t>nO(bSoe>XY!lEn7+@+GH$2ut>TmTS|lnIYLcGB9u z30m%Z_4}lWYs=IU;X?hN+JL2#tag*;4~UwhaNmL}=!T#Gae?;$<4jo_UDRsCX6<=c z3eTHFSsdq3PP%;hcJ_(*uhi$HIm4SKL}&2I8sftW+=`X}G_*Y*TCf4dw0vO);wO|J zS`hr#nK}~zr8g?ed|&{0!U9fM{ccxEPY-^QILMl2%K`g^_}jZ1&Hc|MP@!{se;?IZ zz6*k;&l+a}R?w#DDS)#X$>_pt}E$LM;XqyF~gbi}MNrFXc?G3MSx1lT@Sp_*oq- zUor3`4>}x)pPwYiZ<0g)MgibMu(dO3p925J>}&S#X}qGCo~r z%X8VTrupN;HoBo6>K&5*aZyg{-jC3va4cdKJ zO>(5l3m%^Ii3ho3`jsf4h;u~zd)_pt7_K0{8N>c*99guH?Xc5&&|^bCaf8=A(xXs- zn4eQ*oAPo~glBK8Ve@P_Usk6QA$&oASvrh1`CQSf5Fg8rX z_7Q2bnmShokRl8WXScQ`W$tWz5AM4*G}V6=s&JUAK>=fFnI`Dhw(x;=8YCSa32*1y zX}D{qtNFvjO=mOnj2Lu@jVO)HY;vC?QNB{WDL@8ev+x1Ssb|L4#x^uk44YVPgA}(7Vv5SN(CWXFWDJSTUm)?a?%G$SccV?>lrQxf=2^jAYA%z z0GW58rmU@{WLHWRq*H7!UkI0{dqBhL(9D*@lRS37QBhz^YDq=4+TgkUK)WQWMHA%}hP zw&$ArK?c4O2aT?=cDPH{75Xc|f2^#anNHh=i!U9SuIBS85aAhq&@QePBP-(MX<6N& zdmD}BcXwOqQ!>VHi2}fb^Vr32)N#l<`)-JQC=%<3Y8=o1=j>f+>}!q8UJ2)Kw+9aA zr93Jj{t@WfLF;P-sqTw(MI6p0QO;YFdPmLY$z^V?@FGTJ`JU zeyN4^=Nx+2gKvTe|LY+BYgejQFZd)E`18%Q7{NZA(+K;!OBrsfSXY_U~JCc*Y926<>?{meMf^1 zjV18`9suymV-cS6=X3$2;-CgD(jX)x2uCEs;GLem-rW9_dn}r^c4Ybq;n0Eq!xIL8 z0Oo%Sm9wa_$>zX1wJYxFzrh;JDgOSv~;m|E|m z5A8fYJT5}#)=T8*lqk@^erPFB0X+bGXcx=)C=-FHLM{lvvVFVz?fhMJ(3iI$@HPiJ zG^7BC1kbZ*-)B*yoZE={Q&Z{aN*1Gc`Op4c>uA00!7>w0c zC?IeLH8fN~x!cKZ@S_@#vc(cNCEzkP3|2{D*&iS77NtEKdclg}LfL>A3Kc+%1Rug1 z;{`H1BR{647MauAX96E2!3PL@Un`^v1osvoUPimmDgSd$5TpUrcYT^1JC%*tUr$PXl z0wgykZCEiBh!-dY3`GH48I!%Tm?9%Mf)0DezyCNt|4;!R6osCi3m;&x%DCZ@^B?4n z^A`)Kp$^ORVE*8vUd@6;57G z6dcO#C=Wqk1pxOvyh3wG=? zzyMBm{y!}de8B+`-w1P4*#QWMQ}BDnSrh!&=5~Sa0tO;~-)XKZF~4hcdxP%2*q0M* z2K`I97&KBlA|>|(f~j~s{1;DX2C6gNilstrJN_SE*Wa8rl0=0hgaQa$w)t6BaRP^P z6c?w8b!&N9&OsH|?y0CN{juNwv)p@cBqZ$3lC0OUF{XQZx?jKP>4y9vQo-fw6&N@J z>?xx{wt}Y^3pj`gT962EJIK#dJn5JUyibqGSHJh6KKw5#g8#BOqV|K>RZ-OvP`BD> z1Na4lG-hHj84PKJNQ?&)Uf~_M^!$#zziX=zwQ&P`!9WqB;)3uO7Jw9xIPgRTKm*08 zM#Na)^=!Mw*Vu}5ecC}MMI4u=#{8pu;+=T*ed9a~A^O-0}n(t$1xxZ@IZ(lNXvW8m(?vNcn<&fpq1{NM zU?nm#C4Em!l2O3oK=x}A6OJJVru>N2_ET*D@0j0@^^xr~xNQ?=3s88-o^ZwTr3h(; zS(rs%lsUOq6=y?!sv+Rr_dt9&vL8>RD2vtxE{j9vV=6%0FnPf|65OXaTzD2q$_%*v zguAB~)yu6`<~tc=JEWP}H9~^N&-dT&5et$2Oa#vQQGzEe`<s%01djac``u0Ce zBWTBm>Y;s4EWo)4STz9xSiiOd6>z}LXX$1jM~wgR2A}KM8Wt7uOn`UXiHqSD<~DZ# zeBjJzpiGn$OB`+iv$n!Si1e_C4O1k-0w%#lE(PR8g&qWipa6tI_Pt2=k+m!-{E0@~)f`g)hcC`k$&Ku?ioD9w+$SB}XV1X4aMhb}O13usL zd`PgEE&y*a9Y1vahVW?)1bXeWfR^-DT^>=jE^iKqCBF=SCz1vU>0g@Mnx?E=W(vaV zd#V`WfuW)x(Vr(`m@$Dk0J#u+KtTjJ6E(&c$(0gP9z{5=G}hNF`OE7c&lLl}$ag9t z?(b}NT1kF|J1Bq@Ft();pGiUDJze?lCJwag0si)Aw8n-NQkM87{xBFMTz-Cv-$4aH z>l0GtSaJga%Q!U0fT#lo0S=^dSO=#vcHVnKHf+z44Ahejvsu-ydPxLG4dj&#Fa~M> z$&0dM-lpO(0$?8oNvKJ50wY3{9*q;kBj)D_hDUlQ=hug(nWZ|JS{I~vLyCON4(rQP z^`pd|D$9Nefhl^K(h?G540M7*MC#WNs7ev&a1dxB9e@xkw&u6Cw9rvA?)jQyZ!^tz zT?z^a3@QE@4Q$n!*pv)EYE;e3Eo3eU#KBh8-=*!I!0`{jv)`EGe3UV~V z5m}+ll)&aBLo;!P@gy`*AY3vfsUmk(qX^sY6>qfuiz?n!_cgaJO17VKdkwvy!sR5S|gv5XNvo z1c;ocu74rTd+OV2aigE!k09y-9d`XQJ<_%4RhOB1+vI%58PhW^8|5Fw$_x8(z%CxV z!>cMmC&c>mETEcW>gjH)BSvV>8o`;dWFRav20aPaSp|dX2(pSO*7Opr`-s(Jv+Pxa z#CP@tE}v)@5iy4RpA!M1gE*=*vA_B4X&lx$q+cEkUl4@trB}EAb6y|?Bsz2eY*$(! z-xUfQ!wDk)bNhrrs*-fPfK>yIDGX)hBsDM-D*_FSc`(G=VFm|F0|r+wnF>h(%yc-m zmLoa z{&~o?C`nP_0R-Hw@qc?uw@L)FU; zr$9Rcc&ET|$%H$)7+@0-BPnL3EEN#2wUq|2uk)y)Sm;TSz%JJ}9KNv`%@pBtW_+7R zF(YLEhmkJgdSpc1K6ZnxmVUNpLW8{? zuS^_FV7kjx@G5b~x9TKx21LNh+iHNzqnX*Dn-s4cK8W}BF#k7Gzy;+Wd+-4Y)=^}C zV*~ffvVTf^)FX;&?^vfrZ42nuPqVP_CSFCF7Q(nqI!A{vNpid%&;anEKON{S+|e*z z)rXNAmB>{(ScJ%4(%NlE!b#*pPkab#BXF{ZRKjx6R-HGa^Uhaw9ozx&(Y8=8G1f z3nh#M>}>`Gu#CE6^TIoud6E>cIp8JGNqH2i-Ph{;dfEiYG<4dQmN^tKTQT)7GHi(1 z4I(1_AY9_JrV-uUJ^bhChSzTQdtMdg9SJrewAb^SyBgYC7sD0nrS)rQcvgY$x8ah; zt(i@5{swjlU3HGcm2tn!jqu#PtorC5uUQ_W8v5Uc`@x>QKG@rl+nQ{c+B@+Y8_BV; z?W*1FN^Ss9D2@8W08}x%0Rs?_^QFN92c5EFRuo&r280F@!LWztyNBm*kpJxs`bCH_ z3NT~3Z=bGu)li}f?zf43mo{IGXuBYQzI>@PEQR_Z?0({}|NK%ytIB{}>0|OF)8uD-EU(qnUUheYT!xMy85GyGX4lYcJ zBI5GQkE#w>ejWEdkjugjZxA4vwkEKKeD|J(4#_PgJPzwK} zgaVkOJD%)1Y4-`Ha3K(jh=1t-&&pwZHIVNE5_HOfj2}H)#&SPTmjAcORd2 z35RE~IoTQL(XdnQovpa#m({yD|2yS$ro7H%5f_fp!Z-c}h<4#Y1&nJa;ApDM$jb#HZ z==Q$cGj+f#f8Z7!fl|J|+rsSO)l%n=(>{+O0Sf|nalZz^O|t7ZZ~y%Htx5J4kb1Rx z^JsUYGWcuQ`Mkxqoh3%tB(@!qhwnNsQ{Qv0|+1R!*s0l9e$K`=n$5CyzjxO~2@2NBTc)DSiwb+t5n z>lwdRO5knA%YhZx2`y8deezuLQ<`r$BE?#4A<1R%%VCfMYr(Wi8a2;SvPDv=ONzE3 zEEyhxB{VJzYw+=~gZq;*u3+XZgkF#39gqTbw%PQV6R@9wnT@z+p80JJjblh29d9pl zy4!28w02$suH*Z3%~#Lu*9D@pea{>rC4#84mhO_KVWmn<=E_OX&-AVVqhk>gAGU8#W)Y$mDVDc=~%X z0(n6+p(mW?ut<;qf4J%V?`~2*llwdCcQHF-%c@#x08-#>mI4rfIbl`wi61=lwEvor z+Q9zBmhXoIgj{e>^H1d$=1t9J(L^2_H{1~KRI}Z#h$B}puOuAb!CEjm`PQXFthiWl z(U3OKgq&1mHr+1Wj;hiPR&IG5jlv#Fk7jW#kBXnZkjCe&}|Q zWir%qNN*7S4}2kOLOrp zi=D;oGnn^kiRfJgoh1amsXr!7aXB?71pkHj9~ufr0cDV!Znn##hC z6+>-4b=tKMJJ&%}s0dVBu+B>ahp83c(}Jh(FZCs-@-zV;|Lgn@ynKBy;gU6AfNFH( zal6;qnI97%OD|Wjha-GBL0-rJ>lw^^HCe*Sm;LuBjTl zS3QWznqyhd91KA4pOji+7HQ})Wm%k0n@HL59NMR0``=;FHEvFysA#|u85;*F1tHx4 z5`dD=8Y9@C))#oG=`*ecDn|(b1$6z!0Y5oyjeqlfHS@G7^YxtL9o?F%=j-bYGk6JD zjpsK|Ski^xw2YAN5QK{Ey8iWPV-_I$Q)7V){J;V5MmR+uG9#2&RnRFc=2A0`S-BSq ziGcxtPIM7vT+4$pL%q#6c$0|3b5c>tknKhyz;;{;%~y&8xmH?HsQir@87I3j@Czg?<4JX$YC;R#pLjIeJ|YSPCd)C;o|z z*iRpxp6e!iDb)QJGB35=9};)6?J5l9B82}CdKF8d3-ZP#)+mJ+*g_e(lv4#m%7Oz_ zs5^-OCiMNKVY}1CC;+QV0+fPGvd>cRK?h=>hV-_Qe^(QD_jtl7v@lp{3w1ZL6Kufzd*+|>DtU1V&nVBtO)QaP@Pjmy$ha;GI6AMiXa zAsr^V1S}tOrl?@+AP5_k2aO`g`MJFIIB~6N|D_iVU=g$>T~QHipUj`#KW$)kDz?Y@ zKpwq(G-p?TFdphUxi;SE#gEu!dw=K*uIGE(mVjz)D}7MO59suWi2hlO!TG;Z02KbP z5QG>f<~Ca<33>tL3wqDbkBWQwNNFuTUvt}jCK38Gx*wp05@Gk811P|bg zy!Qlf+6*Mjv{3=TmHfGv0Hoo6+SQGYUwPGLrzMt|b&9l50iH|?C0LmbkUcyLQSEFL zYt1LB0yRW+Jz}6&-2c<_(<8S?}rrW0ikQ0<9Uv3YCkMsHL4@)lp zY`rq)$;jI~uhq!-#sN&YACE*l5u%>=5GpuAtO>ChYV%0>=UhyYLg6VN8J<#Q0wLdc z+J?1qwgMD+E)TfS#+8D>A^VE)p4@NYVZQ`*ILHfkFo6Vl0=y~?^k_{ zI6r&Q=mB$$R-MZMfVoQ|i*M4No2&~hIAy;SRG+G*)PZnTH)I``%Bm`-9A5mn$*Ehx<6K){olmBy42%r-CGX@?9uX!PDYT{ zlgtyKI(lM#mMB#AUKU5wUV|wg*pc*DTOwGj9v9l-Np(=DRL%}LEsN=0k!zzRn}fjY z`hhfub%6FKI?#)HC!Iimq7rd1$Gz0_^&}<$sXPJHh8KGt@aI=l#Z?Y@_@ng!+*@__ z$biy&vrE%XJ}&J#|9X^_pB#U0LHX7{zI@gXk4Wi?1w;VbOhlOE4fmx`iP5&DmYgqR zZZgiz^2LnMY`IX*RxVq(m8)$&#Fwn5W)2FJvXZ(XjKBfpAsff#{0IIc0q~pp?3Bx= zoYt}M{&jxlr1IobtK(Dd&u4#FF?Ktje&x@(_E+s+ew%|o&+!CwKA*=PL;VRl>xgCx z(ub$bW4%!-oDe1@^LJNoqp{n@kAm}M6OOt79ai!Gp2qAzV_Y%db{`;=c-jS7AAh$lVS zp2acks1!*d!G8(>^Y`<}HT-{Y()lU>Pfw2;jpGM_9|T@e=-G&4AhXA$7Y^EU!%~_t z55!6d=#-=dXRdQr$=Oq@5W%Uy#@c}jr~hZ`Tv!`dk|^wlt{Ehm8+un_JS3o9Vxn~d z8T`-%%N8-SayA&}|Noq=?^Me(aK{PBjN?42x*n&hyHAbP3|k(Z5e7z-6aBX>oK4Qt z=Nhm8m}vdODgSeG4|ub%Z$ka=?(P?qZ!S^a5B1G0`ri-1KMMI@e;#W$2dEkSwO;?_ z=}|$D3u20Y3s-=siY&>4_;F_E$HEvGh%}pP&RdQNaL9&X{(Hrvd5v7)-#E04Cc_+{T;@4#4d|n(`S6kmoy&8=5&TW&IKjV03HtNNhmQ zeLcXSyEseLJ{l5Ozt~qSAI7TS%g7*F!NoN5f4YG1MHI!{FUJA?6Ws}%sTulUi4mZm z!Ke^UY?$QY+_D@v))@*XUCQD9pL4LBEk02|TTF@uDMS-$_ z`z6CbCI5~~qUGF+;DmfXec&)G_rq+hbzRI1`&0(Y<}2MJ;RMZ$*Z}_|!P{1j>+rnc zBQy#u7N*~AiNATo8JvI%`ml6}wJ8%GPzjQiN|(nU*}30H1GTWLr?{6|&cC*t-rcg? z9fH5CH}Jl~l*}yMI7c^j1?(m3wRG2Yj)i$h0ZM^Ob^)9(CFk}7NX+0r*8wr~vF=FH zBuqp%qkF}<#@?6_`1v{e4uUt^3M+X(G=wT?EkKBG<$*(E$H5I^PV^fo_H&puay}z} zP_hVRKK;7i3^Twz9Gd+4&kOSVacM<N_SbZAj`mOEfgsvF!Zf9N@D2-*>@ej8aVGIg$$V@G z>vZf~7p14k_&aywD2T8NY5-tku5$zy1ym+vV%&g&DwrD>NN97^kn64)T}8H^(;*v( z6LR6u2pDa@%{(A42Asf8$&$}#1@_o~7VFJ11QAoVE$NNrAYl&9CG)nm$f2+n zxLuVoTvaMab?4AD_&xoXqi?qZ*?=4&oL2hHNgm7siqk3nNo70!yk2^fy6-O+S|=CY zdU2l{!jJZ#BL7~NVH&6v0`*)yR0j9;rj8iUQ!B3?;eb{36oS2@1`Gh$GVueUFol|@ zrw|6vzyzXLjGQL!?l7)d_%Cw*CNh5uQ+EORPHtXp9(AyosGVc*g<-4I58|sbUJe;i zYmSX1AFU->?un{CGY7#4rswnIdbJ2Sn|+?`!P%+v6|!#^+H0bE&_K6|aZ@gT3!xoB z(6S#0=s#cnP)HaZQS;J601ZJ?xczhnVZw@F@;@XT7Pkn_v1v}iSf}ehZ9WVinogw~w%WP;doJOklW0tAa-~ z!Q70R%!KHu3V;DY-%%FVEV)&5Fayq}YV_#>02~>B8KlpZ`m;0;<;A2zVJ+68otFnq-*;9Xs~_g()4$0Z-YL7=!Far ziD;B_vsMoV2EY`M%$9SNiaJlpDXL_kowic3)X|z!tpzWep&%(V5d%rL&^3)`aW5|Q zZIgVZrel2V2`IFHKu1P^67W3Z}E%yCp6g&Vd#TQqKAk84WP6Up14<^yTPcdxE_+Z`y?E~!Q#Kcf0+Ax`U8<|$2 z+(J0fp=D9|kFP4onXLNQu5>$-YgrZ(#Mxo`Wz+#6sIWTmSjhlf18-3ai-nWw$!*Oy z+SvpRY)qn!V}$_%O6IkmlruCeeAhhhEun5=WT>0oEC5}~00K7E!l#?DRbk*)rH?=^ z1rY=;g?LA)(@<5S?r`c2z{wfT_puxU2I4}e48u_X12RZ4Vpib@D@`fJQg%yI5ejJ& zoo-?#cv-H@04gqwz5OK8lPUPSP%8=`J&+5UX2bGs(1U$KZr0nMlKGpKp7+oH=zH{| zu?Rj;Wit{#5XS++juID^3|)uRG|z{4DZm?nL^%8NElF2&&hj}eQ1YL>b6%435#|>n zzIA4PF_0;hDb>J>o0$rhBJyQx%sfDQ#u~4#L2~>BCrd8JWt9K%CzW8-fiwUW-7=q^ zH4O!Up7%&@Xu)(~D~pIV`S6B~A@hEIX8kvViqkJZAc?Gw zp5Orh+AA=ZU*(Y}#g@Q8arm43gB!>T#4CR^kDY;!E?RHR39?U@%cZ&W7Z5_zbx|*h z{TpSBuHKlf=u3RfaKLMLtzO-zHROt-R6W|sSf`)nq8ZI}YtrhXR)YvCwg}j}ll1K3 zi{VL+9L|ZOlK7(&LGp)VH=t-Zt4kUldcF1vc!RGD+hNxvoWgJ9zeNJGfFK70f#U;; z0{eb%LiJb8Ke5ml<>q1kv*2ez--jr5G8Yq{uZ?sX>dBU?C=Z;9ae5RWkY=5Ff8WO~ zOm!$yc%%^Twmg<*dA_2a4Tz*L2?74ngZJB;IxXU5r#hIkL7bBk?KiR?0q9rpr&3I; zWr1t5zY*Vm;^P~$Xbmy6@9!;x*(Vpt!^1?kM=uwUBUk}(y}CLS{Pufadku)$n8IWM zm8dN(Nrkr6=C=G@;{~+GF{d{+7kjF~{(L%1VbdUD5(zV%E9XpgQ65>F0?rA1RDlcC zDzphLu?fRPltQf(_}a{!Rx$`GQ46msPJU+qNbm1eHvaf{KfJex_YZC>_BRDkF)*aP8;Y3`(3N>kkY)(%2~c&Cisfiu+= z5CW`V^5@jB7;5B7dGLg}a1iu&_kUC*HMJiOhjLf!-rEln;UxzDON9Kx=s8r7efU*!X=!ML;CnN05}LB1!PQl z;W+26%%_e7+^zS$f5Ia0eW}DA{0YN|7}1<~uo000-0NklBnwYtzZJ26;RH92sx`SXP(Qfyv8z4I{m<;grnjhZZUt{{-G3iEv_R#=5AeiZ2 zJs|YGpi>bBHWG@%#ia_;g6e>JA*p&JxmC(i?f3sQ z_dI8uZM)khOxi)2c6&Yc?0487k6jAG@csS$C$5iU+61(%fgtH4^#9u4dhuH=`r)%92^j+X zp){b{9)$z;)6vB%%&>k80Qh7KiV_)S4#7D*$6|;EYe6TMU8d`1Y3eYw{0QFw?3)cM zIx_a;%1U-|FRY+dkWw&|pCvd+k3_m33X^S>4V9njIwb{vAl&7B0w-VnW}!Qg#tf5nW5v%+4T zhhGHS0+sWKnRDuaG|WxhMxOYD&Hz<$VHg0GLBNDQIAqV6ocyaJT-ZRNXv}G*q>P%3 zQdc0C$w6;|kl4*-tSB-+_rqM@nMi&pn8+-+(RVa~UZ$LAWY8y? zd;NRO5{mVDGSN|P?^1(b?1RH}B*RJT*N@Jht>?Gi{JzkIcc0-wT)XnZR|#M@lZ)`P zIb#D}j@$k8C{+^3%@q=kyfCEiVlX8lvb5y*QueV({}+o(j7`}%68`vQ)Ls1kqjtbV zIxsIcug}B}iwY9}9a2vIL&0F?(1&s=$YVGfjHMGJ&#FB!vq0X^+Zz7+@b~)nZ*vpD z+1*=Bu-~l_-=B;5Y=@JAkFRmzI_Y;ETA{BE0pE1hyXG7rL-Uo%T>i9lNsdxa;KhrR zE@T=(Yh%yCfO*H!A&d{FVhF3=)KO4kI$h7wllPu>b)Jp)0Mxl(3aKOM0dK>3Pd$O) z(0(S=d6ia}ktQ7sqU$~#xqK33(We2NHeC8Ab1N-9ZqCsCYS}Lw=K%0-f24swi>r^% zfr@!y6R1ny&F;I{P!Ile-ksaxCY{(dJBgqH2Ou#>*86^;Eux4 zag$`rV;voJZ~CGJZWQX9T>{GG(0{X}BQ11%VH23Kr-Y_NDHhI%(+6 ziGE+PoiDij5P+e-DJDQ*Q8e%7|Lc?$yA&1SogK*y@D$p1WRcDrx~5gW~BGrx=5 z`yU*{-Tnm)c*(LC$7iF<#q?;_Pv@uHs1OR^c~a9!xzNYs&)r>E2ZCo00C@#ukWDw% z1|nODhxl01fv2~2E7oXXYSJVs4ElFKL|FyIkc}Nacz|R5wp{=HX$|?zx8Gh|GVD!m zL^|KUOQnHyb6xdp$F9Qr`TV{+e`}OW?qf#+Xx?j$kEIdP23`izu~9hR9pzN_NMUh2 zlIin4C|7+P^WbV_1Ks_G3{qDN-3f{DcZSS6is}l?QWEnz?#m^P`bn^{v;dx7p+~0T zJ@pr*;|tB_k$oDBD9QIDq=e}`Su@Z4?OVseXDZTfSObYb0&r&Mq+4gQ=wbeOMy?Af za86x!EA1!!qqjjAATjB%vvxkgM&53GtmDg$Gzy0WvG#HT`cH_^B^Uwiggn=@4!p&E zj=X{JVrq5$`r-$IeSdYHw}Svb$~|p{U_R8LboXVXLS9Sb1J3`$(>OGhFkzO^TTL}4 z3N2aw6jS^?iUTJLpml$R1<)3~TMzF~+N_Q2@%j7R;)P&f zPf%P$2a@K<*JRS{#3l5Pt9NRhvMOZ z*_J=UTjA4#@#XIt*9O|imH>Y78zczGkIbkK%$m~|o&Y04d!g&8Y z79&*m1?l{k)P5o2Lfbpy_yEE6g2ILoVOd3OXG8J7j1@6C4`MoU;}olj%*sVop+EHB zKkkT39v@BSMiGsP)71DOINv0NA}+6;`~l(2?%`utxq?5uUF9MfKmLzQBgG=R2Y3x% zB$EQikJr>2YCW7V`x*k+D;U_8;Niud{FRduB}sgzM6%d%=UR_T7hXI#wS$PAtyyGo zrQJ_p0G~USV*cO-d?-Lpo+ux8E=JydIF9*)m13^k^aA}DUU+O8*6wvjCgY?DE<`4Jx)Il0x@OM9r2Gc0n?MM`~t!;?~u+{aKTLpwKfx-^@<~rixajpL`X0D0Ci47~`E2)9xZfT?rh#BjHV`fv z#Y5Nxuprk@S&T|ybDrZ9Wff0XeP{vb_$65(VF5)&ME>4H8sOL7(Af<)5ma5er=Dif z-S-qWUl6G4Id&@038C1Zgh$*EBFRov)d=*H3Ty#|5B)wI48uW^W&`t(dgDS+XJzRJ z1qZBzX}&4bWq{&wLcX9kxu;)7Zvf_*8Ky51{+5D{&b!xdnUO%B<_k#$e?=$S$dY~u z8^HZ4cKt0XEF7kcK4b$RKcZ&ZbG(VojYbbyW0Kq^- z`Q5{|g2K;BSdwVLrP4lJLoI2dd!|^I$?6dn4l|xYa5~-8V^-I^Ju+v-Uh{Yd^ZQmO z+kI`E`@a3To?QSX@2?Y{=^oqhK^Q|sV8L*DiR^BH03-qGLvF?(BEa6!szVfOjK7Hr zJx_p3_Eg2f?thVYn*M4Y^nY`gNUSr3oA3Y>%U~%_6Z!z?1Uam|t<%#dG@hBzhWSPM zN0I?_-_NGK#tte@*i;w+`GI~a+sVLbah*)ChxC&+_6;)gr>>hUUd7G^(9qaV;7c?R zQ7IHqXyXZ30nh|eBZ9<0yNc$)T4Hgi(_uo+Uq|Xc_O1vDf4uZ4=W%3bM5X#pW=5aO zR&W}}fu~Og{ev$3U^4DxOijJ-tTO*wB{p@@LlZB;J0H^LEHBF}m`~FY1$(B9ZpCdb zHNc<|`GE0T*L-B{{TfbfL+h~n2ILZ>Q6n1&JD+8A!_5w5N8627H=KaO@M%9Vpm2l3`WE8GmUdVB zqFwDn=LY{gNpcixo*RRhzo+qMMw~l;LsA&F^5#a1gNTdN3}GX&!09XJ*TQ>I<02Ad zrMzBi$-kTuc6ONF_&Wdd^77T;8B@TY2OA*-AdPrCE~PI_k{t^|#Vq{@QwR0OtcsjE zW&U*lfEKNK`U%wH1}QUgL&MKw_#+57Pw5?gJ%v|rcX057B;fpCxcLV+2f`phuJ$)l z4#3!ebO-|}Boi=}&hh9JkKB!ZfB;Ibhxw1w7Fob#2bzdl6X@lEAcLcKK2HB1^B+DN zok5Y3^RWcwjAc;V2RxWz`6p6{C@38V5?pWZ93!W1OCFZ9-m;*0ET4x43_c*x0Gj_j-l%3uCZO~m?}K%-xX#ThPM+<#b~-QC}@ zQu2xW;1GbjU(=Teu|+iI%7>ar*&Nv9+pUFAgw0qv&(c|V#duBXwiA@}+BJworU!%- zzmvT%QHmFzUl+tk3$lJF)_V&Is6rSm42SOs2l90V7oWITd-yf;X)Rz08FzPk_LCHF z5dv(O>nq5{*Y^j~Z)r81-QC^YUyQlox5_xlh%+&DC8;HzKfK0B;S5cm=TGzl*@upY zk0Xr;LF-5_^b12isfi3jP|SXX|2#P%M1TZ%({by$Bj7=tEh6~PPcMte#b24YW%CEZ z8hpKC0nht00peyzcr5kaQt-c~eR$8@;A)S+b>Aj+Yv6cCH9Kf3zuYv07>NaC&bcNQ z0(8WqElgL(1eNLPHttLPBZf)0y`M7M2+>;HR0=|AFlwLw}xA#%0swyQK-i0 zLOZ97@*qMMJ2s@!!v?92ZV~n<1kGIb+93v}%P<@tEhkpRBi=)!7ZH60#1*0FTJB0@ zU7fHM=pKXmW44%sQ%QPoz?hXh`|Ikvlt!Oj9ZTB>c&X_zF*4c=k*Hej_pOVSjtHfz zUC#*!kVGv=L)#H<#0lUMK{s|sJJ{M=I8W*(W`j>n_9J_#GQ|=?}}G z*ps#E@C?(%S*)!Uz^`dU!GH-|Ajpp5NSWAKuM1^*3{^jP5a5X9=-e5N(8@YWvz1wyFy7xgFqm5E~og3Q*v$RYypk0j-KDLiT3{ zP3^YGmz6DI2aVDRY&nE^Zl?3d#Br48-UmEQ;i@C*K^oU}W7#d4aaNm}aI#I;jd-0thn z6r~*P^vgwEtMU(cbu)|(dM|50iLA?vhrAUOUxRtE*Jj;VLXc58P(xrs1;pHO+CA|| zATCfL(B@5})IzCnax_`Oz!idE+0{)E6uX(G(=;XSWg#s}ogo6aE0uo;mR&3fhr3GH z)|%Z<=X&A=4>#CoVR7q1Swv5zBkoml5Nme&baDI?EODTS0%H_AFH&R+n{Rmda9Mg~ zA_c*(ZGgx_0-N&o5a9+iZm^Kv#F$mWBya7cqqMc&TOIi-&*jE_tiU0)4Tq1I4Ka8M zhdbuECO}KqLRu80v;f7F^x`(X3ICcLo&-${N8Nx(rU{VTM#q`a>1^sUgD-IQ(!jRS z`DDW31aGo>RbwSO{gkCiHnEAdqWoPbNn@%eLfAilNmM-YoW}Wo1E< zni}h(aUE1pA?h~lc;b+U4Sj~6f`&@;S=vt6)A_Li;h_h3I{75eOI^3g_39wSO(IS0 zP%Z;z0NIZ5H7iJQP@5ImfAsI8!xL^nQo_Lrhv=)+^GG8O#bPpPN}X4y*?=Sr(W#*! z%g6}qUR6N~s@!$pY!QgdYYE7ryoEy7AI<&0{La#AVuoj4h4s){+2ygKr}cw#0T&T0dFs^YZ5Rs-4gz7esy7vbX*25zjF- zGqL+?%1&ME@W`;yonS!K?3#?HTMTG-G-00>9!jQMf>F{jy9plRY}quoiv@+dkL%7t z_EI9O)Xwx8rn+eaQR9(VypVbwY*7)M+cpJkcHvbNK#(GXayM|+9F(UKxJs}~z>A&B z((7bZ)1iQZ!lE@sE5f`=VM*W9USc>@9S{*0!7ypvY+*ReB2w0wlbe^anRJ2#MhvX5 zdpz7#+F_~g+opk9-WGKVvgCfbjIr!V0YbsStE|ROEX%w)sdDQJ3+0DPxR(PDu~Z!y z-wNbXn`EZ(8~OwA4>lD0oES^HiV{%Sz_!wSpWE$5j<#=MtREgUG@?^*aR|>dV6-?8 z{_&*R_NCOV_Wp5kM`a2F@fk%r&fkUu%`EI$L63@xnena#oZH#l6&t z!m1+Z8%DCkoV>=(2$4(>91L;51Ps%&i+7T>IsO>o`i7UFk9J4kW3DyWPJF3Vj9Fnh z6k=JdN=cNC@WYUN|8VnsOV@l^<*<-NLnXNNa1fw>ssA7Wpeo2(1`9EGz>;U<`G#@; zhQdi{ns7KlD6@h0%i3^+{NSRF3vE5O$KlGt2rT{{=tdKM37~_-B@|`VBTIp>@RfQTfR zMN$+kS#rrilC6@uy1J_S7tML_c=i4usi$XG@jK_+XYaM%^{%zo4hI0wzW?sK-)z0| z%Eez@I8s*A{J;LkE3drrUtamIul&#d^U5p#`@$>P-G6)K#QW#+{wAw`|J1vu-#_TPZYJ5{r&4d`MXzt^0z#;ytwE2r zMjzV6J<_qY(3i=P1)GDk)i@xva(dQrtuB@Ym zXY>gxfLkH)r0hlUbrYv5Slgw;_WS6axYsANkY^9-cHr1w7K6VAmYN@UU}t{|l( zi^A_(ms-+;IO4f&dV9OGqTkgUEwCOvftq{yBnQBOlGL1@iP#wF?(XU`hGbT~kxjG; z%W`cOm)f*5@DC2kJhoE@0_sG=ce0MClNGc@e#&dygF0PB%lDq1uB-&wXoGbWWN{5| z$arrrICw@}FjnQwTuCh>pWYFh$VlI{g=gL=i+kmO92?2S=rV%DNFML%>g??9Mq+Po zM^?xYv}L3+#`^p51AX<4d4q3YMh=>=oI5z=+0fAFDECM}2I$})ElOYx7#RVVmPZ?r zA~!M#Px!`sg`Rk3p5dt(PJhEDcj)HIQ>=-I#M0o#J5i<48r}z~66}K{dT<5%@UVLL z6#ek9F{DS;!qc!BW{g-Z!jjzLSY=e9DUj1D?BGsqAW7QPC6{VX@gM^9%88#KFp`5^ z?ch^89lg;C4;TToPw|k;EPN?fAB$CPl#WltgEx&9y%%w7E!OKD(E1E}9gRi~a(#+c z3-KW~><{cdlYzjY*VO@L+8bT8)(7B^9Ou=Dz)!Stu1Uz5k?4aB+<}-YTH;O*>M86o z24oEsy}g~CFrsvyMx?_X#b=H@??FRf+Iye-DG&BDr-}$!38l!jfO^LdSG~q(+|!mK zo5np_z>RJGlijG(roiXbh{~N?!)NwN()1=eX(6AY51d$I5gAYA#K_GZJIF;Y@Y`7A z0)4$Ei<~(@LLQ>OdXlz~;}xwwQxlwHANq!doMXW6Iz>F_)#H8_8+Ck_eOn}-h#kDf zq}~nP!JXHTgjMuNksguB75iwPSmX|*^f$WU2#Z)D&{}==uqV&N4MKSgJEF$%!#7%M zvn{!|6_$#X?{TMhB4VfogP-9)q$4+;MFa#&G=be%qQCPaNGRGx8^0wFC^Ml^kDd!Q z(3;C3deFh=f%pRr`ZN$wZ-mfWyb+J|wZ!~jbjuG2)K44g)B$>m-~KA#fTz$E&tN$a zCt1h^qp>Rk!5GgN6^uh;FYf4X5A8j0!hwH-5n6x%ogtyG&pC`bN<0TufB(qH*x2A8 znVhxf&`@`GM@L^DGcp8uA!OhK5{0vz8kj1+!~v zG@y}PgAqk!8K+*+7x>ZE-QC_E+B!PAxqDb2fHV~gVtK~5v_PcK8&BVK7JMFOQL}dYWn&>rcba4 ziaz^wIXqMvcaH~EECtOrYX zcV|`@SHuc&gJf(BcF`}-G7AT?jK3nH;SgM5FY=5sq++-Jm1A(=3oy}>r{bm`JuTYC zQxGACoZwzF#tqiVWmtzMr6CLbdW+~C8lru$ixx+W*EBA{fKF^SYxoS=dewZ=(*u9l zLB@hfIO*zYYl{fO)6~f|v7pD1Ls1K?nwiWi+=Co+qoa%^IoAfUU>yh}9=W4tBrA@E z$Uv~c6ZF9W?f4#Nan$K8>SOf7T~`;Qlsrh5z-OJEtyv)_6Fc~hIN%I|So916tVT3- zF~^vhv{=n#efsqGGlCt<*vni%t+?<%h`|M`G6*|F4SvuvxY5&crAvkF^dlC(x{=1OhG+<2MHKx3BT~A6r&FOXtoehFiwV~Ki|xi_)o7p4%DG!QQ$ZD z5Is7Op*CJvSiOLR!wT<5N#5VI19u03RF`|tg z*qkE3xlP;Q&!>11UCarst?lj1J{=v5A?iV6o;|IIB1_tbMYe-K(ZDd=iXxZwU>Lo@wVpLfBa@pkbD5SObt0dF zjR_0d%+Pun1dd*=-hnY>#FaYa;1de$ZW23 ztwy%7!Dvb&n5Pj}sXuoy5|L$5l9@yvj5(er&a_hONfU^%!WbjI%-Yn_muJY)60eEZ z+`G7^wSCYYcgO*ok)mw}^c;MomPspkqkxwp9%adMlHpxMMEFc8^x%njKtb^u{i4RU z@|5(YyYK;?z^h!1Hzkk@0;}5LFS=t4@^YCE2%JEVd|jkX3? z;@WYn3}xFV(1hiQw_J_6-jZLLu^002RFtqXJizmGpHK(RkQlj!_90mm=;x^eKwlr0 zW1dqpI06rnl70~y$<_vDuHp$aAV9Cz!`i5)$S}`B3v$d*VKGmXo$S)O^obTVMI8~X zj=-b!(Mn5^sP0_!|DGl?#%yO+;yxD}y66vP7&|;dyK8TnXr_XunT%J5eO+pyIYxymA3Z5T`zu3kzVAP@hhC)WVI_qZ!{f=y z@Ub$HpK!^bI>8ofaF^?c19ShnA_~sTkVvH@smP=RLY@XXP*Fq>_g>Wwek4<(7t$$* zajS#+T+~W2-gC7DbB2v(DCGsOXd;-_T-buiMJAA zfvtnr6z}L(2DZpv@E6{rmf{*zf6>QU&x%Elw7{rbJ!UN!A`TMkU{PlHl~!SgF=G_M zhB|r5w-oi*9JbOXq9O2514c?h#y6Rzk9plVF{*gRlcXy*D^ja}L`zhIBH9=!MyPsi zk9}I`UC1z+%)5iVr_-lLG|@A4=qTV99+J zoaEXAM(jZ+y(zhOp&_2|JxLG0r}(08%)~~nS%*ISqu7RP_~?N81NNzlHlZ`{gqGmP zc09!jirBpqTk=5Y2Sv<`>Iz)JtB6y6G}e7;JOwhZe2NYIQPjt`TzkZ58(Q;>{?W?J zCPw8ZyZ9bb8M};YzQcezkP_ZU6Sd01;)oyZ55Lep74galQ5M{zJ4)ybo2ierR;;|J z3!6lRkJU^D0U2$OMQ<4i^x_s()M;gmOno8}Y@^UC3$vcs>>*ZAMCAAs z`_0BlE_Y~+H3;LLI;ePp?Mc6n((uTWGu24(x^#H$G!PM z)bgheY$R@+5wyhkpobZTtQxV;GiTz!5ey|w^o*5`UQi;|(@K=+k`M0=%b{gF<=#<( zceLcdy%`pHSAO^_ctRH?#P0cxrl8U)*I2b z5tF!(YCkP;1j@Gas=8^D3TS8_h+rf|jCkn*HY{S6p}>oEj#IT$t27wN%>igpGZy>J zmgr8n;nhe@m}H4Q*3rg-21mLUq2ChoA>V>aB!ny^h0WB4rQB0Qgj7+746)l@Jb?rW zN)b!+vu8YuKI%S<0%mf#3C55hsvmwTN9m!%)}kPe@t3}eIwd9s7-No1tO=QDv(4dg z5^;POS74W6G|9d35p9hx`O0K@Rx0c?~Ix#~H?GkFo0X5i~Yh!2wDZK(?;G+j^yvi8) z5?tZ?XbT!=RHTKZhygX&7If(@@P;464jS5^+lcT^8_=zOBRjQKn$qo$JZfc#&+vi0 zY!#fLEoEwYVS$-Rt6WcEkDP(qnLou58j<7*NXuLgF=}KKz1RSv@ICs(LtWrglej^{ zGiNz>xb{G*$k819h{+m09|9V;kSRib^RlG6Dl~kQp%`3az7maOFLcuo!*%#eONG#FCzeJTzEqPd)K|qlOKGh{x zaj#Xu-w(era>AoZ6MtBtRmw(x;yh3s)*O11HK33FK8N{FeNj`!wC#Bk)s?O!fFJVF-3;O$*1R&+VuENg8()v?$GcQAQs<5PhQ^ z-&5WXX2KgjRk}SBPGd+9AT1)wzRKs5xG?Vh78q?ID(_{9`-ESfWQv}F;xMMr8MR!M z={5H=^rtq_GPif=iCExS*dF(}-&5aQY2JrM{Sg-De)B%DWIuU`d#*`K?%iP=xrqOx z9`K=rXdU0FO&a}X%fz7;1pdPr&e|lwyO7`&ycQzQ_~X0Z{`x4p9PX8i3#p+$_ZpGL z)nZl(56~}3O`5pFzvOnV301U@*aQU{MSu=kq`K6eyRbot)}(r$qB|@{uWjSmVcBYS zM4_ASUiqX@lWQ$FDPcA8(coIdd$en{bDKS)7j1I6N4nCYUBV***obG*HhO3eIHN@_ zvbfKk#i+9_cL@#Ol$QI{+CXf3`p9SK*8CK)EmM8;q=t1$S`j8olnMg$!K(fY z?eQen!yz}WSQLKLn@KAD(>FCBTibHE5K}^*Fd{=K>1mo_a;4ca$qt0_qt;wB)Fg}T zoj!j|PDuQI{3P^_E09LpkQm<+f_RdyTH~j+KWrV|PQBtz4Qf7Imy3!g5%0lhV9V_l z_n@&4t&&}VBl>cUK5^r_wP$W&S9+a&B%-Rqg}#C8*BJPdioYMxjKDn z&5yND&y$?!|6^9gv(!574kNSnhjrAX60Jf8)~F#OHF%8CdN7<1^0Vk@$6er30#ZVz zEW_sE5-1{D$M@8aJLHC@bd4DzjkJUTEMdiAS$qpE>H5PqsdrcvZTue3`IdX1zR^DV z#x-R8=hx`*V^^6DCTNi?=bO@rQ7!yFyJ0u&QY3q4Z=|H6fB7DIa(x}`lC}Stb*YDa z{{MQ0UH@McFna&dxPI(bJVB)fdxionfMNVQ>``WiT#qCTwS@NE6th- zg}p*^T=ibA=H%JbBY7~@A%Smk4d!eSpNIAQcw1|uW$sle>ItTUO~1zseg&v_tvK>hlG{H6hq9*qnb)r&ljHcY*(nK=#w1_>oy;#G?nUy}U z4L#`N*`fB(Uq-RacCbTB8O~*hC;rp~=Qpw14GgxAIP!N@wE}y>2Vzu`J#yniRA4+@ z)FsE9E~7p73<(UO%irVYH?7CB!tcLMOiWHrOpInFegfPvgAAiDP=hoO5>fm%cx!7* zOH)%rLw#2KY;0`KN>fvFGrzmbZ^83hmHgcRbWLStdU|$tZf@bPWpQzSer9GmD^pVw z6QCL&9~%P=cpL|K44bjUGxW|*bW@s}8?w@vm4=4e+M1f$tkl$0SJ%|k9h8O!uz;qc zLm7;2>=h51r>ArAEM;Y3VLmH-&SgcYi;D{jb93MvAIE3#1dg_>z(Y$*Yb*B_{t`f2 zTT>IbYHBJgD=Ny%Z{92`D=jT6<62f$US3sIQ&V5x)Wq*L^Bbq*<8U)SzqGWnvbuUJ zE9>jGZ*Od@t*x%Etbl5ER{g;cZw1T?dMVx)hz_p!U48K34acI<1DBlG^H)AvTbr6{ zYpbfjSXNe2Qe1rFMrl^c$|@>gRE+v^aBzHlW(H1HR@T-wHa0i6w|927wgM;qoSns^ zMwRb?hleL8r=}*eLIm&|{l5FcpN>4DEk!9m=fPi`fy0J|s;aWG;^J%9E?v5K@j_P4 zXXWC>OP8)*Ehs1{si>%}ZES39?dsz97$zq0=F-yY>e|}v+gn@P+hC)tuiv`0x{7y= zIq>io2Z#p70-s#X5BzRAyy4B3miBgV^3R_Sa~$w@-dbB58*6JTDoRV?t+245;QIB# z!lJAc7nhb+R8&{j)ipGEfm*Ea{n+FAiYiqY|>EpS%*;!(YF)%(p zn-#{z#00D{BKfNo_!Q5zwego07+?I&1o(w@ejcr>tF^VhUgoY}zk2n`l}lNE4OZKZfn_h@YPyA19uPL~I=znx9`>oS0Zz+S;0*pO~1RpPuG- z|Lf||e*OB{v**rz@WI<}zw^$?lkdHE^ysOqoIhVwR8mr1&EHe#?_XFT{@7??G!zWKRH`mv9c5dC8$qEwt`anJ~(B3{awzajiM99w_qiH;6%uB}Z@E-dWqY;P|vE-l@@y|OYg!kFyrtgS6A zy>jKunPXWwe*DOhH{bl_FOM8KcI@QI4?Z}5{@S(j@}{QlZbsC?!sh1w{{8#=`}giW zdi3DI-riPL*4MFWY^=Y(uCB3hYHEJIzW&CIv9Z0qv9YSE?rykhYMP$Ddv|K8rDcBp z#ft|I=I6JzKK}U8qs`6x_n$xC+~lvk%*_oA)zlOfUA}zo-0|b@y?5luTW`Jg+N-a= z_163EpEz;+_}Q~JZZtHsv~+fkkFTt(uWxMZ?LB_{=+W*jIpOy0`FXO`z(8|zMMXoy zSXOFk3JZICx3;FI>+0IuiR<3p`T2YI*4IZyR#slV{N$6pth{*fo8Nr+;p4|opWeBH zjFFLnfyTyyg1o%br;i!_U_zy z@Ziy-yLTN|^Yg>Qg&6@$N*zwcyMv?)~)@0Yh$#RaCdiOV@b({3+K+AJ$vfZuYdj4Tfh3%d+(h%apug03zsk7xKUTv z(LwBwjm^!iucQ0cEk^pv%IxgWkh5h|Q)?@KNsl?Rw|8=Kc$gIiIdyiH%(StwyNd@t z{`kd3#jwj!I+VsH>VgM;K_bKukzvktg-ckkYP^5n&f z=g*%!dGzT1{Ra>3-@kKbc^MWN=VfJidGBZCj7J8~iUioe0ZY|OmEd_raW0b^`-c679>tF{&f z^7HfZPMu_Qwe0Fr6sZvId^dpGlc=1UT3kf>=B6HEjWIX3yu7hN%-p_B z48l31h?=>%k&&LBmX`W@RyLKDB_)N0*RFx%WLD0cAs&f=ix;n6Eh!JI>6IZQ;AT$zyq*kwv&GiUPh^7Aie<Sk@j`kGwD zDi-!jON)vwUCPTldp0lc>eb@n^76_`*8MP3S;?xK6-9qPV>v7|u6K5JclY=2+}YeD zmoc8myX1i7<;~4IckbN-A!BV~f>na?X2h45V_|Vt3Jb9wzAs(6c8xVwSy`;2UE`Bs zSbeZ6VXX}N8yook;X`JXy}ixN)zz69^pkhMN#x;s*k4(ho*o_T>1k@Ju4c4fzmArY zlG0L9=zTnJ?OJJRO-*AX`wI7FUD;}zza7J07J`4)PGn&IEia>Edz-qsIsOVZan;wy zY_YUN-bH(4q=^as!eMiBRTX2MHCtifjT@{ctE*k5vn~M_we|IkH?l3OSc(~yy%w2g zW@crDxVm%a{(Yhw8~M31b}yZsy zlMzbhZEj{aB@$M|YG-EluSPQKO;4|^z{l?H?c0ls!^7?EH8t$X8X5)%S61%dfBEwB z&wu;d=g+~x+zk(`wP6fY_=Wt-EO7Sh#fwEnH8t(+LqlYnv9W=Hj*iAgay4kWyGKW1 zguR<d5|%9PtBxH*Xde>Kk@P%mIakm6dI6*f}@H%6nj-t&PlCnavC>Eq#6L zGl`4QQF07BRdNQa_Nl4W)jM~dJo)s~&pvzpe0zIzw5I0rYxAlyYGJg`=?LW*4PJ-85$e0r7hd-k{_9!KltFp304NDPMte<_3Diq=w%(udSiT? zwMbiAV#|T%{XO-n3z~x+}?in?03KW!ykV0o6XIho~u{i ze*5qL{ujSEaiX$vYU;_8FTecmyRW|b=%e-Z{{D)J{CxI2`T2!~<>idzn>Pyz&YwSh z`osz5v8z|fC-@drj9~Vo>^nUDAgfGIFD|aFF_*D6SY0KPGRW9flE29=3k%cJLqnaN zjg2iWgM-V<`}kb&vC8Oh{s(kCqMbw&yF4~FQ1ut_Uy|qzxn2?uRi{Gb+xmzwDkP>6DLldym+ysq^5?P-_!)w zlB`r$Gpn#SVGl7i1zu)4W>}bFeo;S>%1NSE@L&l~;gS&_+{c(>{%LP#HfwF2np#`i z*|~FPV`FHjwDjc3H{bmE&)<6M{Q0J))zz0TzyA80Z~pYBXU`TF+uGQFojrT$QdwDZ zbALbcTu)DHYi%vLjT+_{PI+c#1_#^PSeGz+P`|Li8OGFqBNtB9}8X&Ieer znSq#5IMrh$#7}Z|c9QD`23A(~_U>n8W23*nq~zGKH{N*dwIfFg3I+!D_rLt|U;p*r z{_WduKmK@S1$J3078F!hbAm+HtE($7FDfc5ym_;wWoU@3vb@ZGsHLT{k{wi4RZ~-M z@5BV-ggpamKvor43*(G5VtI5Fn~000rPaePlpc9Wh2aRSiNQd`^FN;I(c+}<7^ zuc$b2;?-Aw`qS56KYO;RX>IMdzx_5VUwrZ4!PHcJeL+EfwuUb$VPDMYU{g~?1*MAR8&I%eDE?ju~?Kj?d`|XPto12%GoR6=uKD@wu;cFXGN*!-l{d1&xMn6`S1~xakexEJXJ*&Hxe<}cZv5s=PUKnLF>jE0 zdJf(^VJ9;Hu?A|+L9m;Z4BRrG@Q#2pDaRg2nQ=L%VaJ}bFmsxDm^T!4b$xxeZtd;e zx-~S!`jORsW21I7HL?EYbcg*NYanc8jC6H1G?bQJ%Sv(a&6_Y?mA!Z23>80v%C~%Q z>$?>0U^Ccdr%E*HcmF;y*^S~Bhxr;gWCZpI>=ve{cXn>y9vx-8v46;3QDtum$ZniX zOiy!SO73Qjj+fkLaQaLBVhzjAv%H)cj5#RY2$B!TKwjaN$c156J{D$1<_PN8kr@dy zGsG&h2l2ql-#2)@z01pcd#kIxz0J*>HxL`-cUCH{hdH6~tq)hS7;i<0foxNrmDq_h z!az%Ih@$rcqyA-NC9HTMJTF#PU_=pES%ZO;H+dr?tiMM_(8H>ox`qZ$K3ZEjZ35rS z3~wjM+>?|2{p8x_W_T?qxSADm0_*SEgSQ`?)4&#dGHc;Uuu#XWAY&21k*i{KiIY*s zD0Brzc4u!fGqbtLY|zla{OudUn(X|RC?<#FbFQpGIotGfmECqhL3YHE?X!u4cmwDD z-c_nQ194IVZg6@fbFogq7V6PLcJw>-%*t>ItDT+1>DpRnXH^wBg_EYHrkWbwiF9?b z-(aM2Uh4W2oaBwh#_DR$f-YXXa)s4*MfMhs@z~PBiV+s!%<%ylPVt$&@H_vo0h}P? zJF7+B8-k8POJ+haa+WwgzMZ|v>+9ouk2(<4)D&lLDmyx6XWgrDlENE4)*-A6YO;5i z6&1X}@Pv?2#k)e@7Lq;nwPV+{H**kKfe3It3l=yuuX-PR@{GJjhHh_XCYhUi^5pK_ zo*vFX!N}ZIQ*-_LjT^naD=VDvusY>EAMcl^raC)$b6A$0fLy!AySc)`;_OVPqJnvf z;>w6fgg<5gyzTlAe+P%GS&a&;GBe37_pu5CQAfwd#&3SJx7XHITFMxxuI8OVW#!eY zm6c;-oP*xW3X#iLT3no*Y;EP-kyF?6=gIbEWjC^O*7EEvl<1i6$^GObRxZp0Lk7sJD7g_W8b-tCo@)zl0Qa%%tV+2@~g z`ao_cLK+(@D>)TDbLQm9{Cqr29L8MFIS{Ak;NqNvd61PGrxC#(@fmps#Q5K5jvZzy zX8f)$qJDJr<;y?*aeck9(f4!(1?=!@Ynz)nIapkL^yrH(KK+z;S0f|c-OQ=Xr&U#) zqp-`Ws^ZkcRUkciTS7i2f|{Cmi_N}-kwfm|B#|-5dWBhtm5FOA#to54J9bwsE$G?Y z{HK5V>Z^r?>guakPi1cfK*vZYyN!?EzWwQ^fBfS|AMNceFSDP%cJ2E0sw(!koapE0 zU%y^n-rUTb%_^fVJMnF8Wn}R7D|SPk?y@(*%ZysH%SbkpqJxuBHkz9Y3XUCn>#ftLYijTVEYHqvZ9RYf$tN#fJbt{s-qlr9l$Uq@d~q=| ze06n638#+49C1cG)MV#btnt~2G6J!mv)Iv5)|+x?#(^znSKh9ImvG3g|X1s$j^6FRkgGX43Ifvo!Qkz7B%W=$Bs_+@Ga{%c66N2v%~7|@93znuc#Op zc=6)9@18vA?k+AqckalMci+8!ow^#1)ap zyBgjLc6AZe?d_a~kzM-xiFnpVte#|zw*`}vtnhq?$jXGXa8^Z}lP@o`*PNLd9&T$R z3$Lwx{q>h$uB|mSUAgkkJFmTV>{xa6DJK`<&+9xidIeRCMgvyYF7O zP+QAcUvDpwclk1_;(-COL}w>&wK#ueuTEaz1irqWJsk7-=qURZ_GLpu%t?!jyphGf zoYk=lURdC5bxBEo|BDyjeDmzt_;_XI>C?O=zI?g2cYU3`Byaol=F9Aid3Cj^>HPU4 zM~)vaD&n2|_;_b$S=r_6WWTJ8(`eqhH8-=usi!=8>v<~)%zROU_3?0GNI)x|j)`HC1~Ef{A%WGvn+@Sc#7 z>Y9|y&kDDS=pUtE0l?29j+ zJeiqkY|PL9)vw-qD=)9Hab{+B_hDA7JV{Pqm_A?Ue>zp54zRb@66cx3# z&Cc%ZJbd{0@xzCA@A58vdwYF-X2v<1H%6?!T(J`^)`$i?&e864u$YrZ^fS)U9~j9{ zFh=wc;ryHs@9LM9`ul5ZuV24-@%nW#jc>K?W^cTSoQ;iJxA-XvXYp(kn2k$Tk#%*| z)qJa}V$DEKCnvH-bhUs_*xSnts~kKW%>ayA-YZLvPXR_lNALp!uT)=GUX*d3MK4gq=GQtT}{L~^=_+Fot3o9uK@c}N@ zCNQIJcFL?&T(RIg&SucW-jVOD?iq3J_!*sK0p=f`!zr-`>+JeirRt%os>76OijZTpA$!r!s{fsn!0#_W26-JBk3m1%SvmK+^Gb^K% z_phKx7|ehm4S2S)GCe7Milc&uqd0I}>75PewlRq7WOfA&Y83Q;bzKMTSFNN#|l`qKsMAC zwt|Mino~RF zg>)xxJBcI7UKV^rI)O)P9)9K#?mk zSp_HNQhMXh$OUQCsXzFnN3tM%s^4juifH0HIJ6=ViCPKbFlwktwj9QxwBXIY=`(l< zoncdo+TcbukVBs&;V_PnmofnCMAS#WU?id}WyO$-95IEYuu5bw5{N=-^fiajn-;WZ z-q1@(p;m6`nXouZ8MlXJ1h>iz3Cd9xy2TOwlZ4lCAdv^WJsxKhYL%>0p46G z!D{pp2lE0el*9@=1tR5Ym00{tNYH|PhqJ4gWQFJ0lCap@ei0$`SF_qfLR=$4IE@JZ z2DeJma#!!jz#=8$A=#lNMFb&7WL5rj3lj6|H+Ukh?St>-gEzmXEw828~9 z`v$k+8EOxs5lf1Bqy(d~hdt`$le#1!H|BFQfnH%0(kI25QId;78(=~t;Uh87+d?0` z!W{*hxbi%_L+`|{5gQRgJ3Rx6+*mU=J8tM5>(0n-GOOiEQUCXOp@mVR6=LB&;v>8) zj@YY+Cah70625PX-VI*Cl8Rh_!9rURU zNczvcBO?(f2afscN8-aXwuHp}lJS<94H@c9pD>g-vAyj2nH%j!RoX|Asg1J~^Yns+ zU?gy8iT*&lY=|Q;&?ZGl$l&UZ56Q@nm^Ds<*N}xZN}_G>qG#x<4nFk{{eoGo@e}VT z3w=ozGJfdeTnV|paRl?e5GG_L*NVV_reKGw+T$u_t-&ItDJNkG{{)usPHvn9Bl?AJ z`aE!`J2>?ULt&F^Py2oImBuD$hvha{ANbcl|7W6=Zef5l% za4wbPiJq3?h`163@s)e}WGf_K7uLuor;^NHoRWHOOWg4^JQjFDg7(k`v=;qE%fJ#` zr138=w$USrVWc3D!kxa6VVGe2Au&b(R~ZsTd^-01j4_Mh_%5h}Y{C?ZiMG+HADbr=C5 zgTC}pM)I!_YP?~CcJLWKh-i(zUPFH{BcoVF!6NVc40#ckA(N{`ZQ@TH1PY`(V`)$D z5q=d-*b@APZczoVArl{gUJoIG;=(ruGpm|_E0~cMtmB{a;*NtpJEI)KrS18$`QSP qj1PI$&WLqc(IXMJ`UQ;I6td(-%a9ekpe=CND Date: Sun, 12 Mar 2023 09:41:10 +0800 Subject: [PATCH 3/9] refactor: clean code for part:judgeMsgType --- code/handlers/handler.go | 22 ++++++++++++++++++---- code/handlers/init.go | 15 --------------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/code/handlers/handler.go b/code/handlers/handler.go index 1569e4cd..3295ba9f 100644 --- a/code/handlers/handler.go +++ b/code/handlers/handler.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + larkcore "github.com/larksuite/oapi-sdk-go/v3/core" "start-feishubot/initialization" "start-feishubot/services" "start-feishubot/services/openai" @@ -101,18 +102,31 @@ func CommonProcessClearCache(cardMsg CardMsg, session services.SessionServiceCac return nil, nil, false } +func judgeMsgType(event *larkim.P2MessageReceiveV1) (string, error) { + msgType := event.Event.Message.MessageType + + switch *msgType { + case "text", "image", "audio": + return *msgType, nil + default: + return "", fmt.Errorf("unknown message type: %v", *msgType) + } + +} + func (m MessageHandler) msgReceivedHandler(ctx context.Context, event *larkim.P2MessageReceiveV1) error { handlerType := judgeChatType(event) if handlerType == "otherChat" { fmt.Println("unknown chat type") return nil } - msgType := judgeMsgType(event) - if msgType != "text" && msgType != "audio" { - fmt.Println("unknown msg type") + fmt.Println(larkcore.Prettify(event.Event.Message)) + + msgType, err := judgeMsgType(event) + if err != nil { + fmt.Printf("error getting message type: %v\n", err) return nil } - //fmt.Println(larkcore.Prettify(event.Event.Message)) content := event.Event.Message.Content msgId := event.Event.Message.MessageId diff --git a/code/handlers/init.go b/code/handlers/init.go index aae30651..649515cb 100644 --- a/code/handlers/init.go +++ b/code/handlers/init.go @@ -69,18 +69,3 @@ func judgeChatType(event *larkim.P2MessageReceiveV1) HandlerType { } return "otherChat" } - -func judgeMsgType(event *larkim.P2MessageReceiveV1) string { - msgType := event.Event.Message.MessageType - if *msgType == "text" { - return "text" - } - if *msgType == "image" { - return "image" - } - if *msgType == "audio" { - return "audio" - } - - return "" -} From eed1e337cea8d629d588205e8170df79dc1d99b9 Mon Sep 17 00:00:00 2001 From: river Date: Sun, 12 Mar 2023 10:06:24 +0800 Subject: [PATCH 4/9] feat: receive pictures automatically tip switches picture modes --- code/handlers/event_action.go | 10 ++++-- code/handlers/handler.go | 38 ++++++++++++++++++++++- code/handlers/msg.go | 57 ++++++++++++++++++++++++++++++----- 3 files changed, 94 insertions(+), 11 deletions(-) diff --git a/code/handlers/event_action.go b/code/handlers/event_action.go index 3e9f4158..3fae1632 100644 --- a/code/handlers/event_action.go +++ b/code/handlers/event_action.go @@ -134,8 +134,15 @@ func (*PicAction) Execute(a *ActionInfo) bool { return false } - // 生成图片 mode := a.handler.sessionCache.GetMode(*a.info.sessionId) + + // 收到一张图片,且不在图片创作模式下, 提醒是否切换到图片创作模式 + if a.info.msgType == "image" && mode != services.ModePicCreate { + sendPicModeCheckCard(*a.ctx, a.info.sessionId, a.info.msgId) + return false + } + + // 生成图片 if mode == services.ModePicCreate { resolution := a.handler.sessionCache.GetPicResolution(*a. info.sessionId) @@ -228,7 +235,6 @@ func (*AudioAction) Execute(a *ActionInfo) bool { sendMsg(*a.ctx, "🤖️:语音转换失败,请稍后再试~", a.info.msgId) return false } - //删除文件 //fmt.Println("text: ", text) a.info.qParsed = text return true diff --git a/code/handlers/handler.go b/code/handlers/handler.go index 3295ba9f..5d6c3758 100644 --- a/code/handlers/handler.go +++ b/code/handlers/handler.go @@ -54,7 +54,14 @@ func (m MessageHandler) cardHandler(_ context.Context, m.CommonProcessPicMore(cardMsg) }() } + if cardMsg.Kind == PicModeChangeKind { + newCard, err, done := CommonProcessPicModeChange(cardMsg, m.sessionCache) + if done { + return newCard, err + } + return nil, nil + } return nil, nil } @@ -102,6 +109,35 @@ func CommonProcessClearCache(cardMsg CardMsg, session services.SessionServiceCac return nil, nil, false } +func CommonProcessPicModeChange(cardMsg CardMsg, + session services.SessionServiceCacheInterface) ( + interface{}, error, bool) { + if cardMsg.Value == "1" { + sessionId := cardMsg.SessionId + session.Clear(sessionId) + session.SetMode(sessionId, + services.ModePicCreate) + session.SetPicResolution(sessionId, + services.Resolution256) + + newCard, _ := + newSendCard( + withHeader("🖼️ 已进入图片创作模式", larkcard.TemplateBlue), + withPicResolutionBtn(&sessionId), + withNote("提醒:在对话框中发送文本或图片,让AI生成相关的图片。")) + session.Clear(cardMsg.SessionId) + return newCard, nil, true + } + if cardMsg.Value == "0" { + newCard, _ := newSendCard( + withHeader("️🎒 机器人提醒", larkcard.TemplateGreen), + withMainMd("依旧保留此话题的上下文信息"), + withNote("我们可以继续探讨这个话题,期待和您聊天。如果您有其他问题或者想要讨论的话题,请告诉我哦"), + ) + return newCard, nil, true + } + return nil, nil, false +} func judgeMsgType(event *larkim.P2MessageReceiveV1) (string, error) { msgType := event.Event.Message.MessageType @@ -157,11 +193,11 @@ func (m MessageHandler) msgReceivedHandler(ctx context.Context, event *larkim.P2 &ProcessedUniqueAction{}, //避免重复处理 &ProcessMentionAction{}, //判断机器人是否应该被调用 &AudioAction{}, //语音处理 + &PicAction{}, //图片处理 &EmptyAction{}, //空消息处理 &ClearAction{}, //清除消息处理 &HelpAction{}, //帮助处理 &RolePlayAction{}, //角色扮演处理 - &PicAction{}, //图片处理 &MessageAction{}, //消息处理 } diff --git a/code/handlers/msg.go b/code/handlers/msg.go index 747296cf..025d2e79 100644 --- a/code/handlers/msg.go +++ b/code/handlers/msg.go @@ -17,9 +17,10 @@ type CardKind string type CardChatType string var ( - ClearCardKind = CardKind("clear") // 清空上下文 - PicResolutionKind = CardKind("pic_resolution") // 图片分辨率调整 - PicMoreKind = CardKind("pic_more") // 重新生成图片 + ClearCardKind = CardKind("clear") // 清空上下文 + PicModeChangeKind = CardKind("pic_mode_change") // 切换图片创作模式 + PicResolutionKind = CardKind("pic_resolution") // 图片分辨率调整 + PicMoreKind = CardKind("pic_more") // 重新生成图片 ) var ( @@ -256,7 +257,7 @@ func newMenu( } // 清除卡片按钮 -func withDoubleCheckBtn(sessionID *string) larkcard.MessageCardElement { +func withClearDoubleCheckBtn(sessionID *string) larkcard.MessageCardElement { confirmBtn := newBtn("确认清除", map[string]interface{}{ "value": "1", "kind": ClearCardKind, @@ -279,6 +280,32 @@ func withDoubleCheckBtn(sessionID *string) larkcard.MessageCardElement { return actions } + +func withPicModeDoubleCheckBtn(sessionID *string) larkcard. + MessageCardElement { + confirmBtn := newBtn("切换模式", map[string]interface{}{ + "value": "1", + "kind": PicModeChangeKind, + "chatType": UserChatType, + "sessionId": *sessionID, + }, larkcard.MessageCardButtonTypeDanger, + ) + cancelBtn := newBtn("我再想想", map[string]interface{}{ + "value": "0", + "kind": PicModeChangeKind, + "sessionId": *sessionID, + "chatType": UserChatType, + }, + larkcard.MessageCardButtonTypeDefault) + + actions := larkcard.NewMessageCardAction(). + Actions([]larkcard.MessageCardActionElement{confirmBtn, cancelBtn}). + Layout(larkcard.MessageCardActionLayoutBisected.Ptr()). + Build() + + return actions +} + func withOneBtn(btn *larkcard.MessageCardEmbedButton) larkcard. MessageCardElement { actions := larkcard.NewMessageCardAction(). @@ -290,7 +317,7 @@ func withOneBtn(btn *larkcard.MessageCardEmbedButton) larkcard. //新建对话按钮 -func withPicResolutionBtn(sessionID *string, msgID *string) larkcard. +func withPicResolutionBtn(sessionID *string) larkcard. MessageCardElement { cancelMenu := newMenu("默认分辨率", map[string]interface{}{ @@ -477,7 +504,7 @@ func sendClearCacheCheckCard(ctx context.Context, withHeader("🆑 机器人提醒", larkcard.TemplateBlue), withMainMd("您确定要清除对话上下文吗?"), withNote("请注意,这将开始一个全新的对话,您将无法利用之前话题的历史信息"), - withDoubleCheckBtn(sessionId)) + withClearDoubleCheckBtn(sessionId)) replyCard( ctx, msgId, @@ -501,8 +528,8 @@ func sendSystemInstructionCard(ctx context.Context, func sendPicCreateInstructionCard(ctx context.Context, sessionId *string, msgId *string) { newCard, _ := newSendCard( - withHeader("🖼️ 已进入图片创作模式", larkcard.TemplateBlue), - withPicResolutionBtn(sessionId, msgId), + withHeader("🖼️ 已进入图片创作模式", larkcard.TemplateBlue), + withPicResolutionBtn(sessionId), withNote("提醒:在对话框中发送文本或图片,让AI生成相关的图片。")) replyCard( ctx, @@ -511,6 +538,20 @@ func sendPicCreateInstructionCard(ctx context.Context, ) } +func sendPicModeCheckCard(ctx context.Context, + sessionId *string, msgId *string) { + newCard, _ := newSendCard( + withHeader("🖼️ 机器人提醒", larkcard.TemplateBlue), + withMainMd("收到图片,是否进入图片创作模式?"), + withNote("请注意,这将开始一个全新的对话,您将无法利用之前话题的历史信息"), + withPicModeDoubleCheckBtn(sessionId)) + replyCard( + ctx, + msgId, + newCard, + ) +} + func sendNewTopicCard(ctx context.Context, sessionId *string, msgId *string, content string) { newCard, _ := newSendCard( From 959366ae3efeaf21ca40c3742776688511b0885e Mon Sep 17 00:00:00 2001 From: river Date: Sun, 12 Mar 2023 14:49:25 +0800 Subject: [PATCH 5/9] feat: support png file variation --- code/handlers/common.go | 14 +++ code/handlers/event_action.go | 52 +++++++++- code/handlers/handler.go | 18 +++- code/handlers/msg.go | 63 +++++++++++- code/initialization/config.go | 15 ++- code/services/loadbalancer/loadbalancer.go | 10 +- code/services/openai/common.go | 12 ++- code/services/openai/gpt3_test.go | 17 +++- code/services/openai/picture.go | 108 +++++++++++++++++++++ code/services/openai/test_file/test.png | Bin 30971 -> 0 bytes 10 files changed, 287 insertions(+), 22 deletions(-) delete mode 100644 code/services/openai/test_file/test.png diff --git a/code/handlers/common.go b/code/handlers/common.go index 85c33137..0a594740 100644 --- a/code/handlers/common.go +++ b/code/handlers/common.go @@ -84,3 +84,17 @@ func parseFileKey(content string) string { fileKey := contentMap["file_key"].(string) return fileKey } + +func parseImageKey(content string) string { + var contentMap map[string]interface{} + err := json.Unmarshal([]byte(content), &contentMap) + if err != nil { + fmt.Println(err) + return "" + } + if contentMap["image_key"] == nil { + return "" + } + imageKey := contentMap["image_key"].(string) + return imageKey +} diff --git a/code/handlers/event_action.go b/code/handlers/event_action.go index 3fae1632..5245cd4a 100644 --- a/code/handlers/event_action.go +++ b/code/handlers/event_action.go @@ -19,6 +19,7 @@ type MsgInfo struct { chatId *string qParsed string fileKey string + imageKey string sessionId *string mention []*larkim.MentionEvent } @@ -136,12 +137,56 @@ func (*PicAction) Execute(a *ActionInfo) bool { mode := a.handler.sessionCache.GetMode(*a.info.sessionId) + fmt.Println("mode: ", mode) // 收到一张图片,且不在图片创作模式下, 提醒是否切换到图片创作模式 if a.info.msgType == "image" && mode != services.ModePicCreate { sendPicModeCheckCard(*a.ctx, a.info.sessionId, a.info.msgId) return false } + if a.info.msgType == "image" && mode == services.ModePicCreate { + //保存图片 + imageKey := a.info.imageKey + fmt.Printf("fileKey: %s \n", imageKey) + msgId := a.info.msgId + fmt.Println("msgId: ", *msgId) + req := larkim.NewGetMessageResourceReqBuilder().MessageId( + *msgId).FileKey(imageKey).Type("image").Build() + resp, err := initialization.GetLarkClient().Im.MessageResource.Get(context.Background(), req) + //fmt.Println(resp, err) + if err != nil { + //fmt.Println(err) + fmt.Sprintf("🤖️:图片解析失败,请稍后再试~\n错误信息: %v", err) + return false + } + f := fmt.Sprintf("%s.png", imageKey) + resp.WriteFile(f) + defer os.Remove(f) + resolution := a.handler.sessionCache.GetPicResolution(*a. + info.sessionId) + + // 生成图片变体 + fmt.Println("生成图片变体" + f) + openai.ConvertToRGBA(f, f) + openai.GetImageCompressionType(f) + err = openai.VerifyPngs([]string{f}) + if err != nil { + replyMsg(*a.ctx, fmt.Sprintf("🤖️:图片解析失败,请稍后再试~\n错误信息: %v", err), a.info.msgId) + return false + } + bs64, err := a.handler.gpt.GenerateOneImageVariation(f, resolution) + if err != nil { + replyMsg(*a.ctx, fmt.Sprintf( + "🤖️:图片生成失败,请稍后再试~\n错误信息: %v", err), a.info.msgId) + return false + } + replayImagePlainByBase64(*a.ctx, bs64, a.info.msgId) + return false + + //fmt.Println(resp) + + } + // 生成图片 if mode == services.ModePicCreate { resolution := a.handler.sessionCache.GetPicResolution(*a. @@ -153,10 +198,10 @@ func (*PicAction) Execute(a *ActionInfo) bool { "🤖️:图片生成失败,请稍后再试~\n错误信息: %v", err), a.info.msgId) return false } - replayImageByBase64(*a.ctx, bs64, a.info.msgId, a.info.sessionId, + replayImageCardByBase64(*a.ctx, bs64, a.info.msgId, a.info.sessionId, a.info.qParsed) - //replayImageByBase64(*a.ctx, "", a.info.msgId, a.info.qParsed) + //replayImageCardByBase64(*a.ctx, "", a.info.msgId, a.info.qParsed) return false } @@ -232,7 +277,8 @@ func (*AudioAction) Execute(a *ActionInfo) bool { text, err := a.handler.gpt.AudioToText(output) if err != nil { fmt.Println(err) - sendMsg(*a.ctx, "🤖️:语音转换失败,请稍后再试~", a.info.msgId) + + sendMsg(*a.ctx, fmt.Sprintf("🤖️:语音转换失败,请稍后再试~\n错误信息: %v", err), a.info.msgId) return false } //fmt.Println("text: ", text) diff --git a/code/handlers/handler.go b/code/handlers/handler.go index 5d6c3758..8954758d 100644 --- a/code/handlers/handler.go +++ b/code/handlers/handler.go @@ -38,6 +38,7 @@ func (m MessageHandler) cardHandler(_ context.Context, actionValue := cardAction.Action.Value actionValueJson, _ := json.Marshal(actionValue) json.Unmarshal(actionValueJson, &cardMsg) + fmt.Println("cardMsg: ", cardMsg) if cardMsg.Kind == ClearCardKind { newCard, err, done := CommonProcessClearCache(cardMsg, m.sessionCache) if done { @@ -46,10 +47,16 @@ func (m MessageHandler) cardHandler(_ context.Context, return nil, nil } if cardMsg.Kind == PicResolutionKind { - CommonProcessPicResolution(cardMsg, cardAction, m.sessionCache) + //todo: 暂时不允许 以图搜图 模式下的 再来一张 + //CommonProcessPicResolution(cardMsg, cardAction, m.sessionCache) return nil, nil } - if cardMsg.Kind == PicMoreKind { + if cardMsg.Kind == PicTextMoreKind { + go func() { + m.CommonProcessPicMore(cardMsg) + }() + } + if cardMsg.Kind == PicVarMoreKind { go func() { m.CommonProcessPicMore(cardMsg) }() @@ -72,7 +79,7 @@ func (m MessageHandler) CommonProcessPicMore(msg CardMsg) { //fmt.Println("msg: ", msg) question := msg.Value.(string) bs64, _ := m.gpt.GenerateOneImage(question, resolution) - replayImageByBase64(context.Background(), bs64, &msg.MsgId, + replayImageCardByBase64(context.Background(), bs64, &msg.MsgId, &msg.SessionId, question) } @@ -113,6 +120,7 @@ func CommonProcessPicModeChange(cardMsg CardMsg, session services.SessionServiceCacheInterface) ( interface{}, error, bool) { if cardMsg.Value == "1" { + sessionId := cardMsg.SessionId session.Clear(sessionId) session.SetMode(sessionId, @@ -124,8 +132,7 @@ func CommonProcessPicModeChange(cardMsg CardMsg, newSendCard( withHeader("🖼️ 已进入图片创作模式", larkcard.TemplateBlue), withPicResolutionBtn(&sessionId), - withNote("提醒:在对话框中发送文本或图片,让AI生成相关的图片。")) - session.Clear(cardMsg.SessionId) + withNote("提醒:回复文本或图片,让AI生成相关的图片。")) return newCard, nil, true } if cardMsg.Value == "0" { @@ -181,6 +188,7 @@ func (m MessageHandler) msgReceivedHandler(ctx context.Context, event *larkim.P2 chatId: chatId, qParsed: strings.Trim(parseContent(*content), " "), fileKey: parseFileKey(*content), + imageKey: parseImageKey(*content), sessionId: sessionId, mention: mention, } diff --git a/code/handlers/msg.go b/code/handlers/msg.go index 025d2e79..a98bc0d2 100644 --- a/code/handlers/msg.go +++ b/code/handlers/msg.go @@ -20,7 +20,8 @@ var ( ClearCardKind = CardKind("clear") // 清空上下文 PicModeChangeKind = CardKind("pic_mode_change") // 切换图片创作模式 PicResolutionKind = CardKind("pic_resolution") // 图片分辨率调整 - PicMoreKind = CardKind("pic_more") // 重新生成图片 + PicTextMoreKind = CardKind("pic_text_more") // 重新根据文本生成图片 + PicVarMoreKind = CardKind("pic_var_more") // 变量图片 ) var ( @@ -447,7 +448,7 @@ func replyImage(ctx context.Context, ImageKey *string, } -func replayImageByBase64(ctx context.Context, base64Str string, +func replayImageCardByBase64(ctx context.Context, base64Str string, msgId *string, sessionId *string, question string) error { imageKey, err := uploadImage(base64Str) if err != nil { @@ -463,6 +464,38 @@ func replayImageByBase64(ctx context.Context, base64Str string, return nil } +func replayImagePlainByBase64(ctx context.Context, base64Str string, + msgId *string) error { + imageKey, err := uploadImage(base64Str) + if err != nil { + return err + } + //example := "img_v2_041b28e3-5680-48c2-9af2-497ace79333g" + //imageKey := &example + //fmt.Println("imageKey", *imageKey) + err = replyImage(ctx, imageKey, msgId) + if err != nil { + return err + } + return nil +} + +func replayVariantImageByBase64(ctx context.Context, base64Str string, + msgId *string, sessionId *string) error { + imageKey, err := uploadImage(base64Str) + if err != nil { + return err + } + //example := "img_v2_041b28e3-5680-48c2-9af2-497ace79333g" + //imageKey := &example + //fmt.Println("imageKey", *imageKey) + err = sendVarImageCard(ctx, *imageKey, msgId, sessionId) + if err != nil { + return err + } + return nil +} + func sendMsg(ctx context.Context, msg string, chatId *string) error { //fmt.Println("sendMsg", msg, chatId) msg, i := processMessage(msg) @@ -530,7 +563,7 @@ func sendPicCreateInstructionCard(ctx context.Context, newCard, _ := newSendCard( withHeader("🖼️ 已进入图片创作模式", larkcard.TemplateBlue), withPicResolutionBtn(sessionId), - withNote("提醒:在对话框中发送文本或图片,让AI生成相关的图片。")) + withNote("提醒:回复文本或图片,让AI生成相关的图片。")) replyCard( ctx, msgId, @@ -611,7 +644,29 @@ func sendImageCard(ctx context.Context, imageKey string, //再来一张 withOneBtn(newBtn("再来一张", map[string]interface{}{ "value": question, - "kind": PicMoreKind, + "kind": PicTextMoreKind, + "chatType": UserChatType, + "msgId": *msgId, + "sessionId": *sessionId, + }, larkcard.MessageCardButtonTypePrimary)), + ) + replyCard( + ctx, + msgId, + newCard, + ) + return nil +} + +func sendVarImageCard(ctx context.Context, imageKey string, + msgId *string, sessionId *string) error { + newCard, _ := newSimpleSendCard( + withImageDiv(imageKey), + withSplitLine(), + //再来一张 + withOneBtn(newBtn("再来一张", map[string]interface{}{ + "value": imageKey, + "kind": PicVarMoreKind, "chatType": UserChatType, "msgId": *msgId, "sessionId": *sessionId, diff --git a/code/initialization/config.go b/code/initialization/config.go index a991e288..cb31d7d3 100644 --- a/code/initialization/config.go +++ b/code/initialization/config.go @@ -69,7 +69,8 @@ func getViperStringArray(key string, defaultValue []string) []string { if value == "" { return defaultValue } - return strings.Split(value, ",") + raw := strings.Split(value, ",") + return filterFormatKey(raw) } func getViperIntValue(key string, defaultValue int) int { @@ -119,3 +120,15 @@ func (config *Config) GetKeyFile() string { } return config.KeyFile } + +// 过滤出 "sk-" 开头的 key +func filterFormatKey(keys []string) []string { + var result []string + for _, key := range keys { + if strings.HasPrefix(key, "sk-") { + result = append(result, key) + } + } + return result + +} diff --git a/code/services/loadbalancer/loadbalancer.go b/code/services/loadbalancer/loadbalancer.go index 930482ba..3a367dc6 100644 --- a/code/services/loadbalancer/loadbalancer.go +++ b/code/services/loadbalancer/loadbalancer.go @@ -56,11 +56,11 @@ func (lb *LoadBalancer) GetAPI() *API { } } selectedAPI.Times++ - //fmt.Printf("API Availability:\n") - //for _, api := range lb.apis { - // fmt.Printf("%s: %v\n", api.Key, api.Available) - // fmt.Printf("%s: %d\n", api.Key, api.Times) - //} + fmt.Printf("API Availability:\n") + for _, api := range lb.apis { + fmt.Printf("%s: %v\n", api.Key, api.Available) + fmt.Printf("%s: %d\n", api.Key, api.Times) + } return selectedAPI } diff --git a/code/services/openai/common.go b/code/services/openai/common.go index 854a811d..aabd30cb 100644 --- a/code/services/openai/common.go +++ b/code/services/openai/common.go @@ -79,6 +79,8 @@ func (gpt ChatGPT) doAPIRequestWithRetry(url, method string, bodyType requestBod return errors.New("no available API") } + fmt.Println("api", api) + req, err := http.NewRequest(method, url, bytes.NewReader(requestBodyData)) if err != nil { return err @@ -94,9 +96,15 @@ func (gpt ChatGPT) doAPIRequestWithRetry(url, method string, bodyType requestBod var retry int for retry = 0; retry <= maxRetries; retry++ { response, err = client.Do(req) - //fmt.Println("req", req) - //fmt.Println("response", response, "err", err) + //fmt.Println("--------------------") + //fmt.Println("req", req.Header) + //fmt.Printf("response: %v", response) + // read body if err != nil || response.StatusCode < 200 || response.StatusCode >= 300 { + + body, _ := ioutil.ReadAll(response.Body) + fmt.Println("body", string(body)) + gpt.Lb.SetAvailability(api.Key, false) if retry == maxRetries { break diff --git a/code/services/openai/gpt3_test.go b/code/services/openai/gpt3_test.go index 668b0801..256321ca 100644 --- a/code/services/openai/gpt3_test.go +++ b/code/services/openai/gpt3_test.go @@ -56,13 +56,26 @@ func TestAudioToText(t *testing.T) { func TestVariateOneImage(t *testing.T) { config := initialization.LoadConfig("../../config.yaml") gpt := NewChatGPT(*config) - image := "./test_file/test.png" + image := "./test_file/img.png" size := "256x256" + compressionType, err := GetImageCompressionType(image) + if err != nil { + return + } + fmt.Println("compressionType: ", compressionType) + ConvertToRGBA(image, image) + + err = VerifyPngs([]string{image}) + if err != nil { + t.Errorf("TestVariateOneImage failed with error: %v", err) + return + } + imageBs64, err := gpt.GenerateOneImageVariation(image, size) if err != nil { t.Errorf("TestVariateOneImage failed with error: %v", err) } - //fmt.Printf("TestVariateOneImage returned imageBs64: %s \n", imageBs64) + fmt.Printf("TestVariateOneImage returned imageBs64: %s \n", imageBs64) if imageBs64 == "" { t.Errorf("TestVariateOneImage returned empty imageURL") } diff --git a/code/services/openai/picture.go b/code/services/openai/picture.go index 562d6b8d..b114bdc0 100644 --- a/code/services/openai/picture.go +++ b/code/services/openai/picture.go @@ -1,7 +1,10 @@ package openai import ( + "bufio" "fmt" + "image" + "image/png" "io" "mime/multipart" "os" @@ -124,6 +127,8 @@ func pictureMultipartForm(request ImageVariantRequestBody, return fmt.Errorf("writing response_format: %w", err) } + //err = w.WriteField("user", "user123456") + //fw, err = w.CreateFormField("model") //if err != nil { // return fmt.Errorf("creating form field: %w", err) @@ -139,3 +144,106 @@ func pictureMultipartForm(request ImageVariantRequestBody, return nil } + +func VerifyPngs(pngPaths []string) error { + foundPng := false + var expectedWidth, expectedHeight int + + for _, pngPath := range pngPaths { + f, err := os.Open(pngPath) + if err != nil { + return fmt.Errorf("os.Open: %v", err) + } + + fi, err := f.Stat() + if err != nil { + return fmt.Errorf("f.Stat: %v", err) + } + if fi.Size() > 4*1024*1024 { + return fmt.Errorf("image size too large, "+ + "must be under %d MB", 4) + } + + image, err := png.Decode(f) + if err != nil { + return fmt.Errorf("image must be valid png, png.Decode: %v", err) + } + width := image.Bounds().Dx() + height := image.Bounds().Dy() + if width != height { + return fmt.Errorf("found non-square image with dimensions %dx%d", width, height) + } + + if !foundPng { + foundPng = true + expectedWidth = width + expectedHeight = height + } else { + if width != expectedWidth || height != expectedHeight { + return fmt.Errorf("dimensions of all images must match, got both (%dx%d) and (%dx%d)", width, height, expectedWidth, expectedHeight) + } + } + } + + return nil +} + +func ConvertToRGBA(inputFilePath string, outputFilePath string) error { + // 打开输入文件 + inputFile, err := os.Open(inputFilePath) + if err != nil { + return fmt.Errorf("打开文件时出错:%w", err) + } + defer inputFile.Close() + + // 解码图像 + img, _, err := image.Decode(inputFile) + if err != nil { + return fmt.Errorf("解码图像时出错:%w", err) + } + + // 将图像转换为RGBA模式 + rgba := image.NewRGBA(img.Bounds()) + for x := 0; x < img.Bounds().Max.X; x++ { + for y := 0; y < img.Bounds().Max.Y; y++ { + rgba.Set(x, y, img.At(x, y)) + } + } + + // 创建输出文件 + outputFile, err := os.Create(outputFilePath) + if err != nil { + return fmt.Errorf("创建输出文件时出错:%w", err) + } + defer outputFile.Close() + + // 编码图像为 PNG 格式并写入输出文件 + if err := png.Encode(outputFile, rgba); err != nil { + return fmt.Errorf("编码图像时出错:%w", err) + } + + return nil +} + +func GetImageCompressionType(path string) (string, error) { + // 打开文件 + file, err := os.Open(path) + if err != nil { + return "", err + } + defer file.Close() + + // 创建 bufio.Reader + reader := bufio.NewReader(file) + + // 解码图像 + _, format, err := image.DecodeConfig(reader) + if err != nil { + fmt.Println("err: ", err) + return "", err + } + + fmt.Println("format: ", format) + // 返回压缩类型 + return format, nil +} diff --git a/code/services/openai/test_file/test.png b/code/services/openai/test_file/test.png deleted file mode 100644 index 82bffdac50fe31b46c5c2a55399b5c121809d1d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30971 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 Date: Sun, 12 Mar 2023 15:33:35 +0800 Subject: [PATCH 6/9] chore: remove unnecessary print statements --- code/go.mod | 1 + code/go.sum | 1 + code/handlers/event_action.go | 22 +++++----- code/handlers/handler.go | 5 +-- code/services/loadbalancer/loadbalancer.go | 10 ++--- code/services/openai/common.go | 2 - code/services/openai/gpt3_test.go | 30 +++++++++++++- code/services/openai/picture.go | 45 ++++++++++++++++++++- code/services/openai/test_file/img.png | Bin 0 -> 13697 bytes code/services/openai/test_file/test.jpg | Bin 0 -> 84666 bytes 10 files changed, 91 insertions(+), 25 deletions(-) create mode 100644 code/services/openai/test_file/img.png create mode 100644 code/services/openai/test_file/test.jpg diff --git a/code/go.mod b/code/go.mod index 9c3e4fdb..067725d3 100644 --- a/code/go.mod +++ b/code/go.mod @@ -12,6 +12,7 @@ require ( github.com/pion/opus v0.0.0-20230123082803-1052c3e89e58 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.14.0 + golang.org/x/image v0.0.0-20190802002840-cff245a6509b ) require ( diff --git a/code/go.sum b/code/go.sum index d1e28f10..56199cbe 100644 --- a/code/go.sum +++ b/code/go.sum @@ -250,6 +250,7 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= diff --git a/code/handlers/event_action.go b/code/handlers/event_action.go index 5245cd4a..6a8f7bed 100644 --- a/code/handlers/event_action.go +++ b/code/handlers/event_action.go @@ -136,8 +136,8 @@ func (*PicAction) Execute(a *ActionInfo) bool { } mode := a.handler.sessionCache.GetMode(*a.info.sessionId) + //fmt.Println("mode: ", mode) - fmt.Println("mode: ", mode) // 收到一张图片,且不在图片创作模式下, 提醒是否切换到图片创作模式 if a.info.msgType == "image" && mode != services.ModePicCreate { sendPicModeCheckCard(*a.ctx, a.info.sessionId, a.info.msgId) @@ -147,31 +147,33 @@ func (*PicAction) Execute(a *ActionInfo) bool { if a.info.msgType == "image" && mode == services.ModePicCreate { //保存图片 imageKey := a.info.imageKey - fmt.Printf("fileKey: %s \n", imageKey) + //fmt.Printf("fileKey: %s \n", imageKey) msgId := a.info.msgId - fmt.Println("msgId: ", *msgId) + //fmt.Println("msgId: ", *msgId) req := larkim.NewGetMessageResourceReqBuilder().MessageId( *msgId).FileKey(imageKey).Type("image").Build() resp, err := initialization.GetLarkClient().Im.MessageResource.Get(context.Background(), req) //fmt.Println(resp, err) if err != nil { //fmt.Println(err) - fmt.Sprintf("🤖️:图片解析失败,请稍后再试~\n错误信息: %v", err) + fmt.Sprintf("🤖️:图片下载失败,请稍后再试~\n 错误信息: %v", err) return false } + f := fmt.Sprintf("%s.png", imageKey) resp.WriteFile(f) defer os.Remove(f) resolution := a.handler.sessionCache.GetPicResolution(*a. info.sessionId) - // 生成图片变体 - fmt.Println("生成图片变体" + f) + openai.ConvertJpegToPNG(f) openai.ConvertToRGBA(f, f) - openai.GetImageCompressionType(f) + + //图片校验 err = openai.VerifyPngs([]string{f}) if err != nil { - replyMsg(*a.ctx, fmt.Sprintf("🤖️:图片解析失败,请稍后再试~\n错误信息: %v", err), a.info.msgId) + replyMsg(*a.ctx, fmt.Sprintf("🤖️:无法解析图片,请发送原图并尝试重新操作~"), + a.info.msgId) return false } bs64, err := a.handler.gpt.GenerateOneImageVariation(f, resolution) @@ -183,8 +185,6 @@ func (*PicAction) Execute(a *ActionInfo) bool { replayImagePlainByBase64(*a.ctx, bs64, a.info.msgId) return false - //fmt.Println(resp) - } // 生成图片 @@ -200,8 +200,6 @@ func (*PicAction) Execute(a *ActionInfo) bool { } replayImageCardByBase64(*a.ctx, bs64, a.info.msgId, a.info.sessionId, a.info.qParsed) - - //replayImageCardByBase64(*a.ctx, "", a.info.msgId, a.info.qParsed) return false } diff --git a/code/handlers/handler.go b/code/handlers/handler.go index 8954758d..0221b888 100644 --- a/code/handlers/handler.go +++ b/code/handlers/handler.go @@ -4,7 +4,6 @@ import ( "context" "encoding/json" "fmt" - larkcore "github.com/larksuite/oapi-sdk-go/v3/core" "start-feishubot/initialization" "start-feishubot/services" "start-feishubot/services/openai" @@ -38,7 +37,7 @@ func (m MessageHandler) cardHandler(_ context.Context, actionValue := cardAction.Action.Value actionValueJson, _ := json.Marshal(actionValue) json.Unmarshal(actionValueJson, &cardMsg) - fmt.Println("cardMsg: ", cardMsg) + //fmt.Println("cardMsg: ", cardMsg) if cardMsg.Kind == ClearCardKind { newCard, err, done := CommonProcessClearCache(cardMsg, m.sessionCache) if done { @@ -163,7 +162,7 @@ func (m MessageHandler) msgReceivedHandler(ctx context.Context, event *larkim.P2 fmt.Println("unknown chat type") return nil } - fmt.Println(larkcore.Prettify(event.Event.Message)) + //fmt.Println(larkcore.Prettify(event.Event.Message)) msgType, err := judgeMsgType(event) if err != nil { diff --git a/code/services/loadbalancer/loadbalancer.go b/code/services/loadbalancer/loadbalancer.go index 3a367dc6..930482ba 100644 --- a/code/services/loadbalancer/loadbalancer.go +++ b/code/services/loadbalancer/loadbalancer.go @@ -56,11 +56,11 @@ func (lb *LoadBalancer) GetAPI() *API { } } selectedAPI.Times++ - fmt.Printf("API Availability:\n") - for _, api := range lb.apis { - fmt.Printf("%s: %v\n", api.Key, api.Available) - fmt.Printf("%s: %d\n", api.Key, api.Times) - } + //fmt.Printf("API Availability:\n") + //for _, api := range lb.apis { + // fmt.Printf("%s: %v\n", api.Key, api.Available) + // fmt.Printf("%s: %d\n", api.Key, api.Times) + //} return selectedAPI } diff --git a/code/services/openai/common.go b/code/services/openai/common.go index aabd30cb..3f445b71 100644 --- a/code/services/openai/common.go +++ b/code/services/openai/common.go @@ -79,8 +79,6 @@ func (gpt ChatGPT) doAPIRequestWithRetry(url, method string, bodyType requestBod return errors.New("no available API") } - fmt.Println("api", api) - req, err := http.NewRequest(method, url, bytes.NewReader(requestBodyData)) if err != nil { return err diff --git a/code/services/openai/gpt3_test.go b/code/services/openai/gpt3_test.go index 256321ca..e014cff6 100644 --- a/code/services/openai/gpt3_test.go +++ b/code/services/openai/gpt3_test.go @@ -58,13 +58,40 @@ func TestVariateOneImage(t *testing.T) { gpt := NewChatGPT(*config) image := "./test_file/img.png" size := "256x256" + //compressionType, err := GetImageCompressionType(image) + //if err != nil { + // return + //} + //fmt.Println("compressionType: ", compressionType) + ConvertToRGBA(image, image) + err := VerifyPngs([]string{image}) + if err != nil { + t.Errorf("TestVariateOneImage failed with error: %v", err) + return + } + + imageBs64, err := gpt.GenerateOneImageVariation(image, size) + if err != nil { + t.Errorf("TestVariateOneImage failed with error: %v", err) + } + //fmt.Printf("TestVariateOneImage returned imageBs64: %s \n", imageBs64) + if imageBs64 == "" { + t.Errorf("TestVariateOneImage returned empty imageURL") + } +} + +func TestVariateOneImageWithJpg(t *testing.T) { + config := initialization.LoadConfig("../../config.yaml") + gpt := NewChatGPT(*config) + image := "./test_file/test.jpg" + size := "256x256" compressionType, err := GetImageCompressionType(image) if err != nil { return } fmt.Println("compressionType: ", compressionType) + //ConvertJPGtoPNG(image) ConvertToRGBA(image, image) - err = VerifyPngs([]string{image}) if err != nil { t.Errorf("TestVariateOneImage failed with error: %v", err) @@ -79,5 +106,4 @@ func TestVariateOneImage(t *testing.T) { if imageBs64 == "" { t.Errorf("TestVariateOneImage returned empty imageURL") } - } diff --git a/code/services/openai/picture.go b/code/services/openai/picture.go index b114bdc0..b12e3bd4 100644 --- a/code/services/openai/picture.go +++ b/code/services/openai/picture.go @@ -4,6 +4,7 @@ import ( "bufio" "fmt" "image" + "image/jpeg" "image/png" "io" "mime/multipart" @@ -166,7 +167,7 @@ func VerifyPngs(pngPaths []string) error { image, err := png.Decode(f) if err != nil { - return fmt.Errorf("image must be valid png, png.Decode: %v", err) + return fmt.Errorf("image must be valid png, got error: %v", err) } width := image.Bounds().Dx() height := image.Bounds().Dy() @@ -225,6 +226,48 @@ func ConvertToRGBA(inputFilePath string, outputFilePath string) error { return nil } +func ConvertJpegToPNG(jpgPath string) error { + // Open the JPEG file for reading + f, err := os.Open(jpgPath) + if err != nil { + return err + } + defer f.Close() + + // Check if the file is a JPEG image + _, err = jpeg.Decode(f) + if err != nil { + // The file is not a JPEG image, no need to convert it + return fmt.Errorf("file %s is not a JPEG image", jpgPath) + } + + // Reset the file pointer to the beginning of the file + _, err = f.Seek(0, 0) + if err != nil { + return err + } + + // Create a new PNG file for writing + pngPath := jpgPath[:len(jpgPath)-4] + ".png" // replace .jpg extension with .png + out, err := os.Create(pngPath) + if err != nil { + return err + } + defer out.Close() + + // Decode the JPEG image and encode it as PNG + img, err := jpeg.Decode(f) + if err != nil { + return err + } + err = png.Encode(out, img) + if err != nil { + return err + } + + return nil +} + func GetImageCompressionType(path string) (string, error) { // 打开文件 file, err := os.Open(path) diff --git a/code/services/openai/test_file/img.png b/code/services/openai/test_file/img.png new file mode 100644 index 0000000000000000000000000000000000000000..3071bd714edc8dd084b4be3efce7a251225c5d8c GIT binary patch literal 13697 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

R7m2yG;0uDQA7wbSh5Ami339`M~AxFW5l z`{{-on2y200YdicQ4jPEd^(qhA}eAV$HG7uqTe>z;l@nGMKMc!Ss`H%#zv))v?K9M zm)m@CRH67N;f13>w(3z)nS-066Rtzs@=V>wdh=qKN5bak92Q()$^lp~fP+Hc|80Ku zI+(3BusMc>)4D z+W(R*Y8gwYr0%b#N_uXY#up;#RW1&b%tU#6O^@sak=z4oJ4e? zhZz(KSgd2N1UAkTZl5bFf96~YQj4DU7P=pE9uOHCM z7VYlN9N-wsi~+t-E~-R)k9EfF0{GEyH1^_jJ#v)E^b=N1UU%1bKyV|zvHwGhf7X5B zs0(KQHP0^EEX}tEgh;&ABO;*^TO;@42t7@CWo3!E=A5SO?1%5>k1cL)7OhSj-!ixzKZ{f3g;vMd?`h*SB+$ zsDe_Xpnk_>uOeqCP}FgWp>N6b)je8P$q620I9?q3nkGZSj*c!YSa6WoDy*A^{MsRc zftT+kWaj;TY9!(?0>Sr3qY7Zi_Km&0jn~lc$dFgJW(8&C~F>xw#K%TGF=- z=P@eLYRNxwg^Z?Oc?ihQZ%hRT4|L61Gzw?Bl(ZnqgM-lf(hX$iWf&nM44bMIjCBQ= zcuN~X3q^J8IbEq@K1+$FtatYac$tII;b#Ld99}LjS&_mm>0`K_oJ=#$A6}vxC|FEJ z4lA@^wMC;pM{i{nXLNbXoGnOLggOFZy?ZHJew2D9zHd=Bym`}(9RKKpu_Lq@;?ZJu z)WQV6v>}>)G3}*1g|TW|NSNjM4XLBwbVX@Wg8NLEpxUlZ5RL&cWFY>T9b@`>=lbOJ z@$nIW8wlx-3>wXz-eHzb8BKZ!kTAHD>FVN8+R6PRP>qK$4}v?gon=NO$INFRJZXZb zpeNwj)Bx4=Ji~hD$(A_|dncJP7?DWBBhHtcwEspX2FnN147ZaoL&gwF${@9~FE3kwT0z`3@4 zQxZoij5>g6qZ;8#UmH7RBq{T;x3{;t2n=OBojqNlA={k$WO&LM%&AYyn~@oWnd$x( zd)^*hq4`|~D*+PIzTn_1kG0ca3Dv?^i$Bw{beLof;eiyNpe1Gk1hN)Z06Mih_eFvc zN@DN!=KGv~U~r}iHs@Fo_hK3zun9MP9{`3dR69ci{@}C^N2Krdy1EfVEIj|eRErKW zt2SLs+58a=kI1!OL3zE>O(6762a79d(OzHj&|*t3naD~({8UVo+CA|7z(&HV%9yF> zHyWT^u(!82zoE))-*zCYnkRb(*KZG=J)fKXBc!y<)YH`qFEH zoZ^|qr`Y*se6sPLiCqGfABWa&I@i$toZ}#d-0AH_N3$@U)iAuFh*|G!qeNlF4n3H}fMZ>#ot-JMzbO2tWsEF`|Kv(g>j9dCX;miVYgaDyU7+;?~s)`U=sfT9H!KRA!x&=4>%8MG@=SNYY9NQDKa{%f6G1C+Xfh@wt5} z$@6_VS>1d;2e?!3dnLmEulC(=G^yPLIb=J#L`uu?LQh9;cXubJ>-+VNs2e0AeLK3% ze9G{5ECmgGskg?Sj*getrzl`|JkAzM52zq=Op(h(6#N?G0>egzg}l958VE=2S(L zSmaRnijQnTlBijXY~&ERMQJV0)Mfag+sMW*<-4_^;ZBaSE6p%}@j%}toMae=x!0kttK?2mbv zuus&grUs3Bq9Z6s>FAkXbrwP0ty$BD3Ufq|ZMQ~sjN^%4=i+v&wy~8(s&0)e<&3S2 zIS_E#4?lU`G0h8T-pMu$5d_(}hm=J-2g=iX?7~mhiV>aJKvQ~;R{+xKP@YAT0(EH== z+nX=``kv;7>$nzVY1WN0ghEX<2HCe)Bq2HSE?QhCSPH~e)YdI+q`b9qMnYWLc*_dY zk)csCV#-}d?MgGPj5c`Dh~%61#x#<4a~*6`Qc5Ik<#tf>Y;!gA*3tl~hTPF2v4GJ} z>r766+G^D8zdNN&o=CY6lTcE2$kcH^iqp~vN)l3V2`uZX_Jiiz)l&&gV`g!eIiNN) zeZ3E_D{kiIPAg9Logn883sItY2$3;=gCx*7k$JAU-~ygYQwnU^I{iP+pP$P&mF83s z8{3(ik&M%#xp~#fXI1ZH0esv6sb6sbLY(rsS!4jVnKeC ztqGl~^>a8_R=(95h~cWHE&q-hF247&zP#Zo#BDdqxaDjR2oje-AOz)n;0^}cf4A(b zrx(;9A5QiC@1G7ER!@QU3y@{f@Nc^OMKI7c`gLeB9<;PnfDmM( z7!j5YW>z;>sn$_ce?W+Ivob0(8{jfoQ)(!4{Y$Y7I-~9xb1t$+*l^7{1Z8_E&cC}tA84F#MpWaD>BcFqb`1NrU$-s{+7tfI@7)K)TP$# z%Ucx~eC&cm!@B#;=%eNsyGIh+iB8-s@Lgm}%Aks%;%*zq5A*l}4VYyeJAiOYN=o$o z-UsddZn9WkaXbd>+0+4?A)ZwJYcbc6U!MqRrGF1 zybA##Ybhfksup7NdjgNFC_8$1SDIAd@k;;gF&;yja~Vf8wQ_=nNTnH+Ta!s6Pnm?led{Y zdV|?n>WrC+m&m0mM|9>juLw##!`m!fO z>nny40VYGLYWgKbEbH(2!8TYSe*)&c!GNPVIa^ieJZ*ozaD*@udI*|GXb2K z`Q>5y^rrk=5syT9!I@?b7-L~rB}+6?e;yrpTz>s?3Y;1nlnY?li1%~iMir6wc~|+D zW=j>U1yQv{b~8E(M43*Ww%EsQka9|uSVmG6^jzLMj0>Jb5brVSDjGd zOGN9st#CrnKXzpOq|3D!-EDP_dB#sB1vD_;I-T77qA;x!v8} zy}i8`O4IavR6w64XTg)49*q#u78AXu3+>JFfrwF1trnMkaN)vl6{J0nmxG&clbaIx zvCv~Npt%XhTxGiNp!TRKaiS6mZQp$vgq_j70u;KR?Mo$8|9-GxfO_-ANgq#sBtrw= zH+8PQkk1a%ToeE?eVE zi_vz)td5q}G<0y`Y@~xwrQE7YdCXa=6o~pWW~}Z2c6vN3rx`XYPc%)^=>7e<1rG=N zb%`Qf{ckp|phdSy;Vz6j3bOJ+cE{t6PuVDgJJ5p&kFaapN1j>5TFhyA@5gigkMlJ` zFRv9q4Y)uIXP3qbX1ulF5R3fwkl_kaFUO1Ac4(zNc=Pk}@Oa!CO*&K}1>j>A_U`Vi z`1lcJ^a0FY>P)<+pbz%zZ3-v$34`1U8N_81f47JzMf1SYvE6-Qd2Ng5n!Y;lbu6LK zV3acTRLQ5RuHXx8=Z9@{UEVS_iLR>WUrpe1do53do%Rjwxi8;pIqF`Mfb zpg=D4W8Lj4wydtH>3KN^A1^NhhAR_>-_RivxWz-|Va{Acanwo2Qyxg_xU^gb(1mvE z3nqK==0x{izKp{I$T(>U@kFp%KmK6K^*+O8Hzoe%V1UAd8480FLXRwtP8;{+r`oc^ zFV4ys+F*)qW-Z2{@BX*KB+n8PRZ!X_lW4-Rk!c6MeJ(TX94vEZIl>;m`Syzn2Sumq zi*ZmnIH8Kpeq{-dk2vUM;9#rJm0zQc{9o(~$xSCv>!)pYzJ}|+ooMtthZoNZ)DGww zWwkHFgj`E#aZ9FZfN&yvC9U83$QBA`E$sa-YCaCW*p%7X{>RZdMc37KQ8>1(#%yET zZfx6)ZQD*7+qP}HF`LG=|NZ^vDwi31oU`9|%{AvUZ4CX-c-pAda*rltvMIL=G4e|cdZ|CgKe!}i z`Nmn%M)}3bihp+=TVFdU%|NTq*-hFUD(MI5Q%U2f={fqQu=K>qE8E{)&W0c%yhl)r zpYh#P=jev+7U`J^-CHUkGD+-sZm6uCz#Dn`?O+kGZ`tX0hp@K73=)StZ-VVeC5ra3 zZRN^Pa-Ia_sx7m%gep8w+EjB6B^!XRE$gX**hqm&x%Ny{R4_w5crY^Tr9!6)1*3zw zz_Di9U!rr*g)(7VlPgdv8z^y_D~-WuIYg?~4T2HW1~4~QodQCzA_n4!kKiw)0$YB} zpr7jv=L}3qF9vSRLgqR&3P@1`qgSX-5-~LweZ3` z*QZ0Pnlfqp{ZW_^UyM1jNRiJ?MfBTf1iURFpXbf}`1a@aiaRd>lEY8g(Zxf@`mW9Z zUh>4OG}UI>$s2cC8vfZQ4TPgNUp*UUICmab+2%!hJw*vjJaWu+w&3MODSHQHu_}-IW=Tl)2jO?d|Ca z^O0RnZBTI-3mx2B9F+%LfW#3(zo?X7zC)QVUj%*I6(J%s=T?CM*H^>!n^Ya%}R9J%kZofhRZmll1$uRp7mD{76A0Nf{_ zk3Ma6?tEOjS-dGm8JL?xf4Yq0WX4h_P#`Il|+N>M}edt4K{zX8$f8k9m=Huecq*Z@)|d%ThtHGD%2I1 zLtzF352jGIm=P&(L(JO`;XMQ>zCj?}$mjh$m%TgAZbWYQx#~=!yaDgrGinuWsjB=! z@lzy%8T%Jpye)e=UV#)wJ@u`a(D&|}Z-v0^`c@t|@%Hz@=5?jZ zU*4_V+@4;Nj*yA?y+8L~W@h9BVi#DKFC(TKRTb4KjN6-q76t#b7zXJ@!Yi;>jGy`c zq#2O5L=Dz~xL69aoekJi^-|aXg*osY@xUm6O}j4I@8< z!s<2jg$n037lZ@^c{TPxY*Bl0i4hNNNQtpbuLTn-R?@D^z~I6z1FFgMmNRyd74p7o z(zm6xmC1%-B9RFN2_Bsm_oXZjt8m#F!-%@ZOj~K8qXr$iSe6_ot;pz zz|CPEYWGO>wad~Nvrn%30M+o5w4gO#+MvfVtnVK3FJf$ULcsj0#f**80n(pr#BvLbP`cyYXWwnPEC_2 z-DE}tOn>W21WjJ856cP6;tD6!V+9B`4vOepu3pM^weV>NwH}wl{3yv*!BiDXK^{oP zgQa|Jt|PqAA)CVbQ-c&O$8Tbaik*I@%%&@`Zv5%zmvJpb{wX0ZZm=uD>bBkhYx*G4)eojx&Z3n{fSu3Q#Cm>Uo@3qyi*j$&!5q`)%=!PA_0NiXOL@ zTg!(pKwW92-RJu-w!ThQHbBNbLN4LqA>#A2e?Gn;6BMD4T8;ckM(xSp3%)B2crZo= z$O%MnP@2DYYhgzq>?@FOq2ZyA&_bXzLqer;MkWz!su#1Rv(mkMs!=kp{PdXlLzME>|hdR#9d(_OZUW zPwSvv0k=gMS&tO^JvqJwZ?TURYLVN_6z!qN-+iiq8m$dZGhoWJrNVjHpisn-(AOdH z8xaw3?VG;1u+jYsh?#ANDNqyN={r{FD-yI9`%ReF)-s4ykz4p-i+Qr;6kXc>oHfTB zF=kxKMH}kS#3J?!LdXbHlR?J+W2w|B0Uy=RvxP6ov50nHui)c$`0F+^-rX{xU~q-c zIM)WV`n%OY8Qf<6+N#4$3wI5sCD-e4?xR~b05C1e zA0>!??RnrG2dZJ{(}0cY#|M$`*8{dbP*i4SFz*LowSlQH3h?RKb7wo^v<%Hk1xP`u z$__G;E8N(xMz$-z#cjq47z@rH888y3gIqqcBS(<-Mh78c6|3~-7A)SiGX@fuX?p2@ z18JqYZW^`#xl7|{Gm&df)@!>aA%o88CjP% zeq6qfO(W>Wte`JGP>#o|hZ5Yksbx%Ar&SH?)d9SapA*14JDMDx`mI$&EFz9&T6^<#5!fm zdqJKDAi)bY6nBaMIr~Oo8 z^wt*oRzgQ7n1iA*7){?VGGe%J6%wFvq;5#y!X#(j)faGWLDa}&tYTq;0d!WbzvK%- z8)+s3YR*;M?92@CKGD=n4RKAI08i!Yg{$gY*)nUHNF>jS6>ob0W;Mo(J-yK!>}j!l z6f8WUb5X?`6g2!ZGL!PQ=nJlN6DEF6X|%ZkeHQb(bG`y-&y!^^WDty)dX#aP>Criy z#^zPiO(%zR+bj~AU)V^+mfVCfv{N#BUoOGB14Iyop4G^X_m)>F(8@5OaF-^u5q z4EpNgXU!UU%9aUweLijvf!zG0`E1VDq~8kzA+NhXfhSk+XLpWQo5t{H{x)5D8c;Ub z{B1wGC=tW*wZ#eF|Lcb6Teot5UTZJNSYiyTwgMz_2;(z*S0iGYQAZY90gg!JYDIP- zCH*@kV-#dif1YJVK~3G{-X^>WUb9sh85W3-DnhL&^``wXm$q6Nrx6{2WD4Go{*H$a=1kxrIsZp&^Wr2ZXzRq;v#yngFpg|( zMYT9t5Nnk((&F55^Z-A6I6VFI-3B2p@C}XwA2)gEJVuA5fxODa=AwkD(G+S{PnioD zGIxClsdLl+G_{RI$UsUEKd+)m2{yHt6A3OD#J+97R$zx(;c!LOSy0m8U>0}j;y z+c`dcRQC0XuHeHXDL?;o++4C1b%*-|t1~{&*@7r9sdjiYlOyH?5uST(#oeiEb%X?w zd?yLHO19d5cc3_ntwCJTkMzPanLsxUl zg05*{Dr5z396J3_C9B)@7a?N~j^%AvS9^PVSC4MBTCJXs7oZ@zc&T$xLS=blFcW?^ zvkGnlgG@RJ+rtrlAB`iVluCRwnt~{hEIG*o`bQQ)i~soYf%~ZQUUKjJKM}tKRsy+16a6etZIh)k3hSKfjSqOYKg!>;(%%dH$QFHsWgSFz6b@W z(M!^|CJww9q(@iaf{aRpDYbp|Brym|3SRdtWbauenxA_! z&R`)<@RM`N>~h_yIw`nW8ybU-rwQs*7&OHNJ5{?bAq<}8vk7&c9mr-dv%S=SCsvNj60LKFgBLED z#xDPCaYew;Db56XKooRa<~$%)`nol1Rj0EZuzrhk11b?u=Dlc41rkxsQx>K&^cJq< z-y9e~4N?)^QN&@JzKRgrR4|8=O&}$qk}JHl$jBq!yvHCohdJyBFj*l2AxW@lr9sX% zWFF{wND|jZ#R#gA!8RJZ++I)AEknyh#J}IBiiyQN@ zNX{(jpGl4)uS;7+&mdl_kP{mgBt_x`WV{u%M%a*C%O_eAm9-wr zJMChP@`AD=kwaEnlw=rD_+RssJqE9#L6E|gYJxJcZ8s$mOU9|NisXuxJSBQ$qSPBA z^`C&Ij-|@w)7MuyX;=sdsXl{ybZGu_Px0{}59YI!@juD)LqDy-2bv5NwEn23ntHTU zO<1+33lTMo2Z|;Oi@a#CQg!PwKrEr7q0`F60vn7G?Tu()S9YC1Ayv@mdI`~rvB#P} z7a*1xYUUb{S5Xw4atZmt@Qs9MH0~F|Rhlo)3ICZRQ1cX4Ly4J(^?NZ?Z*`Wwlj#mC zb1vpr|3w=s*(HVh8K96M zfPk)*L1`Q}u?2*zP$!R7*O!c?RW4hxcWPIw$s$s4nM1n>M3BgX6Z+5y_gB|Ua5FRz zV9`_*IkQh6Ge+){E3vpZIWUR%AmTSBvO{ZRNcEo!>iB zftrK<&c!d&g#AP#fjQkQ_;8g&2XXs}rJ*Hcs0|Z!3VqAq+hyJnTbeFeRWvle*0 z`3NVnm5t5{r-()+W#p`Sb5;G!nfbJ`O)>CT@E;9!SNb%2kqF2E#*R8ol^r-oJB zgZW#Bkhlyf1l;A3xnY6TIU|lYqm+2z{K}&m0~T5q_$?DlwN|{5>cNWLf&F}_i91-r z9Hjh7$K$G|WgA<}g_aJ@)JphQa>eX3%BBkdiZo_Q$-Bm3Fp4d!B8dw5k#_XM@e+2Z zTtk*@S%UUxcU2lgta7cZ;=6U>EoXOUC*T+Yh!|`7ALmD9pa*E3dXc8LytBn~XRh5= z_GksvwrXaV)N{~%pf^1K(iyAx?(mW+*OOc2 zTNC`7bpYj-WORh)gZ$b@>X3WU*ykgueiB3K0Z7= zJU>4UpscMgt^Ig7rUqT)PEO>NPD<$LDQtIud8PZpH>0F*9!H|%W<9GIdRFQ;J#KcM zG7ho0-n;twxPr8}W~9DL-fBp=sZVOr3bNo2%;R$$crs90M4VnYf?kkKxJM%pSey}E zotgYh$`Auda1m3Uzvi}^S1XF#E4+@mr27?$>TZp9l^bpn65P8)e(wO!Hdn>P!Obh1 zeEiYGYwk>SnShkP&0Lp7^`v9Yg{!v{a(3>rj(0X~(lphyLx}M=;ygasgrao$X(Y=p zk4n-=N0}KPL9j3Zv0KHUU;?yI7LwemZdWPgzZjk#>EJimrI9qA4t@fi}Smbp$FD4?Tb8t-e{$cv!KSkX0Zd=QXLtjTv@AF|c z3L2S^_~#lxW?W=FaOnDXs)$IgWm^nfqVpP-v=of8C3v}weUp|;xnOzoink2%K=%A% z{VbJ9!!_}%ugy}F3j62M*7~`Tk(OTBe6^sQSF%kLbq$yDl7@CO37eTZrr=w|e;t6e z+JMUZy3w|f>!k%O!3`iWzt#RB67nR56;PGlgUbnvyp>#}K}Q=gS|eS{l_*Jb5y+l( z=+UPE{zBjfHk|p#&i2TyQuQ}E>cA2)e{#{y6h#d-86@1A+D$+&*#&?-8^>_hDpkgg zrjQi>rX-8(MozLFaT#*DZgS#-eJbGnh1{g%404>!Nh7WWT@7vV6Fo+Z56AnyZMgn? zL7J{_Dcw{{^Pq~>IuIuDXQ8w5@&O6lFS10q!>Jh6SJyqI)3pVz>8Q-JG=`ll-K?K9 z41O*T4}bK1Ur$N_qR4LqpufXTz7<%rE`O$5u-osVq*Z)x;FM!s1@~5xA{glo4%+lB zY_h6Yi4jlKu3FUYwX_oA{$uZ4$he0Bm9@rR@ayK;7FmKjJmgLOS9fD$)GP)#oetCz z=bbcAo6u@Bnul;l;a zBHj?(`Uh0s+4^oebSZac-0k%l*V%2fM09JvsZZ@cU;P`|{bK{3$J&%DW|R=YRjIB$ zl7CQ~s8s86hy{LI9ue7OYExKZ^GcJK|n0?dy)Sf2Y@(}O|yT-ed~H~8VWVuU0dOLl=cc*df>?r-FPQwgx_e@`D0i3E9$6w`K--B_G!aiwnVmy)h!hS8$0Yx|T9u^K6>wisM+}t?yX-_+R z@BS@);0{bS)IioH3f+h(39mKBX64TNH&~Z~4Z`fd8FEWLJ?Zo{A|7Z3HHDokF?!aP zeLs8>*TD9CuIE{|Wd7Upn=0q^O|&dP-u#NF(N-h*g-rDFWpNCw8{`vbZ*hJLPl1Fv z@H7&Nx&U?Ean9(-n-OQpg-@FvU{WkUECXV}&C42qqgAc{X;KLo>^7r78K?0U;jCkz z051*@hu9wk0=)cQwcs|!{&gaRSaG&@&t*K zB83Ej;=Czam)g%#Rtit5KGN~U$?{TVUM+_vyYcAq)?18|B5MApJQ|ui2`#m;E3*-xMv?8$q&>3hzUBcnRiZEOh%7K z8ntVXwu|G00`Bbh{r%(T=i6IH_RK}v_wPr|6~$i47~*L7*~JwS-Gtc8@qwoljQCY= zoakUnWI;{6Y}uEWvOxU$bNdkh$=Hfe*PrB*An70@w(9&_RUTL(3jATi3Lgx4F~W)Q z*+iAH%R$Wd`Fm~5|0LdE>SR`?Q;g&j!7nkqPjBQ0;~vq!J1)vAAc{yaGilnQK?}rU z7uT#^9UXjqe7cd9furR=Hz`M4wbs-@I^73NU+)!~X z&ntS5CjzO^R#8t7u~_VpGr1R@2UoSsZ;z!aes&t%jcj#`2)+`#X$LBXe3ed(kMr&- zrOHei3tp9Wz)%ob*!$q1`ud>)N~25As$%5+N5eD_H7jsHGhM62MVG_}&#WoEi_{6! zi1qq%&TA;4FM~3Ng0>4FbFi9Jqv391droTVapLD50bgbMLfz_g`>4+s^V}na#}S`E z#fX&@6!3gVF(3DWf=lwu5rt*QY!fiYukIXp_mYG8?d|Qo|Au^Sg8SDGUxL8&5TV|S z1xYAqf2;vJ_z?%|_UpG$>GD|G1iP^eZ~eNdqwc#eSU*Y0?U*7>_Kr|A7u^-pg`c`8 zG&+)nh>>g-^zOvM@QK5wnk78Q*im9g>fZk$*S+7rb)jg^ZK+!SX7fKixeIL+54~go zCi&c6_s{=2gaB|!Cr>A*xN(%GX7$hDbRPw9NjGpEX>+B}fp3_$V2b|1n%p>lXi*f? zo$EBZD(j5B=f-^3Cb$i@$(qy%?8|L5Fd@_|;aCf)r9D4jP~KIOEDgrWE2Yi3_W#=V zhaSKl?vtFO{S7`HPFS&NhGr^iQ&uF!ulod2{9*}Y5a7!X;l zDyt)6^%nu|o&3Of7b!{`3tH`bn5de{z6@V9qo_IRMgQ5+Rub#_nlms$T3lNMxELlj zkcx<4P-Dfune>J+V5+bn>E{a4YLr=Q0{4R_+4|xbDb^`74_{Z6>ctK*1UKo$j#{SZ z`Y+ql<-w9Wd&6^D0+sOhA!g6KqyW&}{~wCr^J?ksMRuBEB40tg83ci7_(oGvaobaC zytPE6w78XdCUOcNnfPZ|mjQ4&v~)Gay)RVg^>WcXnzQQbm(W$F&H6(}N{rHE6M| z;soaDwesp`Cr;FUUVH(jaKI4+c#KhtKrmpkV_!-riGPNQoYUpWhk~GqQtHOidpfLM zl@1E|aS|YT&J173wE_#q$4B<_H=J&rR8!`^OYsBU)SyR$Rrg`LV}uf0I>EX9o%o>Y zL25*m@I3YA~xhl zq%e5Y4{Qqfhk|C}gQS-mih)hEstof_?YU!<>N8;-%^s4ot?c^ed5k5_a=oS9_9r-lp}sSUhQBw z5GPgF9V}BwY;8F<)_zAMVNz`Yz6+Yi%-TFF<&Yhp@6KZqS4I{a7KXDyV?u#Y2B6Ed zppy;42B>S!JbN^fO@Eu4<{Y&)zPvqM>HFT@K0jCaQ(;XIOOZb7U_#KwiYl^8(JIC{ zn0vhew%*wsJ|0fatj9lh^DeqUF$5zH(Mj391F_-60F0wQZ=5W*ABPBW`}???l33y~ zgii?CcT}S}Va1YWI(>d2;*UBs!lpHl0)ywMnz&mos~sbc;6bYKF(4-v_WtSNQk)dbA(d&$>-UW{%o&VV}~5FwgZ%t^^h9q%yP zO?5id?0p1>?3(#0Q+v2(B%qZ(d&7NjCBtN53NNXCR015k7N z_xge1qQ4)M*~d75ONvy%1SL3{N`vTT#NZ*`wM)O@VH|0!06i9sgZpIIR)x2+BDf-o z(t~2XN6?_2QjG)-ZGGr|pc*8dZ+Ww@I9^qC$YJ3(pNLn=dN=2C${|+;nbHl$V2kTM z1WGm@1f~aygrUF%l}h1IdgLaV-t}ic^x$3{XiO_XauARXAZ1V!djYP@A2)ZiHMMpk zAfh;^M;@plJ`LVl_|pjRO#+p$PmPqSXl z3V=sCdV2)|uu1tSlVE+(Z`3_a(tZi|62piWI;h{N^^lC6v*6dt+mzx;x)^2r zyAdk1mxE~6+Cgw8qM%mGCt7GMJY^<*@93>DwJgI4VWJmP&{*y#WUrSw5Er6Hu)@f* z&A43krV-JoR(oa*XNk*Fx|CaLusUt1n3-YtdL9+{d^v1&(cRgejxQlb5K~?D&T1@m|PpHv90Q2#8Tvq@G;8RD11*j^ls5exVY0?ssPe$(d$^6CrGyD^o2tUod9~ z5mwuv*9lt4K+EpsNqr?eDo4(?k}tQae6xVm66`6}y7*O!{yub-Fb`++@1Ik1l5weg z{A7VIV(mfU!Qvu1G2>AAC*JC0zPWVQvak&Fcp);s`|~wPg(&P?F%K{AkTQmb>XFMN zLP&O=|GXvmSNb!4_l8q|Jlt9B$`g%z*{TF|h7Nw9?hP-@ylcaCtCpBz8Kle34{t?N z;l>2Z{_jQeh}Vu*gmsM862#XpS50HT!_50zP40C>P zB?Edg9+Ef{k|o`oOD)-W{R_}+whbB84Y&XPnXzYf^Kif1P5!Cf`6jfe0^(E|AMY#d z*FO_Q*_7ozVt4J3u1W7NKj?g)g>Gw={+df{LTo zBUWWTKh`$GMG=;y*D%0kJBRueT$ZYh_m0(#|>TjZ(b}@@bn#mCNeeFd5LXCh1DA^ zeq$zo5Z<>Z`r0yT?PKbYpSvk>9VfU4(}rxm`0x&J8kz&&K|SrOF`2vJNG3?{n#?)( z93710U=ogA9P5V+!G)QV7z#whL{0hqdRd6NQzbD3KzRs(f5*0mT%6d??7>xYYje~4 z^X2G2uVUlmWWhpoBkKi8yEV^Bm?-QPdw~Hmayh&E=ZB2J$5DTu50CNr&B5q@+=s71 zqECzZbbVcYR?LU{SL>HT3c6ufJjc+WL9!Fa17n70%ATFkvF7-Mmv zt5Ej3UV0lv5;^Zm2`NS{IHHby(r_sT1l}7it#(c%BL4T?AZTRq!i33RZmzFBPcXtI zb>PB#H0$jJ)G++JN1u`PWnL_Jx?Qryv5Gv#+L@y*I z33j($?ka?2ICe;@eXik>ItG^t)f<0Q>y_RD`A7yODo7B4H=!6R*iC{c(`nmpyy71H ze`JpsI!kJFM#q7Xtf}ez1A>V^t+cDdXx(6?i0jxD+WkjEO1}R2y$Dbr57e{-1aKnd zHxB1;j9%7iFV-oF3NE_f1QczvhQEkq1a4(#4?;r&%*dM=teiep*+MyYX|@?gw^QBC z*`l*hLks@^I9|924Nk5rI zc&x?*;MzeIC*Tfbfj;~B4N|r!mK(LTc6cYd6<56&JnNKd6n8Y92XdV=t@(1rxa!kr zmshWa$If&}pq6MiR7Dg%%Syx{aK29ANJl@(Oth?3atsY%#kB!#Uh;N+MRKMbG{p+_{ z023Zo1hugP<{&w2p+Xc^I^@-oV4pEcjf6~MbiE!Li8;q-JgHZ)2E#WbDBC-_M(-XS zIyH}C8&YBVq3;YmpQmSjK$SdjOrNFNE&p#hs1hA6eEsq&oR9M@^AVaRbxj(Zf>kZyu_W?w^|)KPrh{x663quJ^FYY*60%42KpgK|TxP@p_PR4COf3tqhl{E`*PfHI|< zkPWsrrm5!sG2`&Z{Vf%F!m32dS=1;kmO2ddOWkV(M-Bj8URqx#jSN610__2(B3CAzOzH5I9rL+>g2kzXzMESVIqcJa&bn4)BqU%3|GaDO z$BSz`6`H1)inyf?g{L=ANHJWS_lY3kIClvKF%|VvL~C=3yoxd_t65?6@)+X(Nk@%G zh{t6@T3sNYM_^2rNFtV1Q88z`Frt0;;eJ(WO#J2dwWF_qgRX&?%q!a$ctZ@i>V(ML zPsupbENRB>sN8{$&`_Rw)w=1;$YCl_I6rnZ=J^6b^@>Qe>xta6f(xF--2V}lG9;(I zx*H!eDo`w0heg!H0Dp4EsjyfN2G_hiO;KWskcjJCzOoMVf*Gt7nQ}xNG+n9HSX=QL z;AkU5fwRi3;*&sP2de&&9=wjHozP;k4ca|Ezx{YC{Cee{3)_P&1+Pj$Ijo0cSy|Ga2$>*K`v^?Gk`a1eNFHSq+n%dWo|6w@xM8GZxa z6ntnrxBX9Gyj{EA#t-F1$DeQ;5W%}u$*2gMG^h5^0a37cV^U+@O+?$-tecVP?R%gK zkAwu-aBEF`T2C8v4nvUUpdhl~kQbQ`n!;RG>(-KK!j_d$x$Bf6ogP{3;znBk9`w1W z;goOXLOimns0}nzz5rNK-j&gdP|$J`9`8|66DW5WX zUFWhi1P&NG?QcEifgZBQ?Crm0QwrxjKVo|P=ANi0HaWUwh_>Qxipq1BP0UQG;u9h$gP*$tWC=4>PT04dUEs zKs(zY!{qy4=Cbn%SY^E5O{!Pwz@kXiHbwbE_67Y4aXuQs!<-d-m4q9Kr2SD3TJ~kkjiM z99m>D<7Hk1swnr;MvdzR%m6dDP=RUye=|>I%(mDLwbiI;=d%zlFAc7q?KR6`ZMK3doSny}^DmOp?)j^I>y3E8C9 zw0MUV4lgI(UBn@2#9mRN5w2dpB`9SqaS1V4xGvu##}KluBM_x0L{sy1@)ALSzjqcC zbfSBgSG6f}%wvSw`*&U7R0zN=cS?Gq#3r`ILr%*6j)t7?#wOL2Mf=taG)Yy zDJaVPm!L$-YOuzE1Py|V(BHJ z_#nuLL{SJ{h984q)lGka0bf{l?e~(efb0T4=|x?8gkUDnYJA`Tx>#C<@81?d3^M|a z91z+<54vbK7!E4nE)cO*q3OonR1sBRJ?aBUN+d<|P{ujIERIbQG<}SZghl4Ylrg*R zp9VLfnD=B{(p2H&37O3?mf*^quankde3H%yQ2*9q)T{6M{hy2Ga^wGUA|i~ds_k2{qgd5^YZa|ynWsS2;^UxB`3?)LUW2rUzoxsm8!=&w$l972cC158QjKS z^I;5nU7VbpdAQkgNfgE3b@WVqw}SKxOI0Ffe}Bgfk9nwkNQSMVN$Lzy$UZ7n!Vi&G znrO;2CU+qMJ4KtsLF=<+X7do_%k7MvyW*FsoW%}C1udBxa)~nf|Rs#Q}`{3sQ7p;KD5L>gvE1)c_+T)mT*#l{vZQt(Q!{|9T!J(ChQ|Z+gQ` zGj$ClG$_9fp}hW(n9-2S-czlDnNrq31=F27+Lm0wfqDu8Q z2MSD|x*!Egjbs5iR?P8Rlh9vMz5;y8zmz1&`YWr%w@(tS?;Xwh52f5%+WXc?ES&wR zmKU_$cg{imo{R%kTd~O452HF|eR0_O7?2C1P5}iD1TI)G1qayLd`5fh!esJ+A%0V; zz%EXr5VdCi;lZV{y#L&qy|cSJBtqN#K_7TV0Dj|qA1_3xIC-KEBf$R@LLn0aWJ3Zw z&ON3tgO@=Ehp;XT8HwNfW*;b^0z@|=etr!%-VVqC(8BFMeC`PtN&x z$qpZ$TOTh)F1Ts#em?C++b^ru->YebR3(Un?RHr3n^r^5fR;@eZK5sirg$Kk~m9Dbi7M)4q%hAp9l1M=!w zfP~UDC)>(Q!|AzaN%~mB`ThO=1`taEsyGf0DFS&wR0*XeIc(;}mo&{P5c+VWGLQd+ zSSB~q$|j9(uY7J_CIP(x0$#4qyC}c?z!vk8VO;FGj>U*8CK!YzvD|!L2+>Bg#Mqcn z2>nyJ;&AM|gCs4IT_tZn+57y5_E%lZ=j+rJmR)%E)|?)lVZ>NeAPSq7?UoCtg*VBE ziB~1X?c(Zw5{b302;CLHmf$TSB4~h=5Es@Wtb=8-h4x2F?>69&jgKTr5tng`9TiQ1 z?tEa!lYH(HePGU3#?5Z~qrb9==CMJGueKeLj8BwU7Q4qINuG|W$2p%RRFUA=Wc}g8 zD|*wVPvh*3vJdLBpdHBL=2hAu86=qFQX85G9cL0MOd`jXZ>@JcHLCD`diwx65EEvx zevl^vZh*AbJGZMIub1h`sHmUDI9T!(TC!B=*a4~`f0@A?iQI6-2qA2q)l*FiX^~g^ zFIQ$RXBy3CU0q!T-0katolKp?H2-DrZ>09QuEbM$xGM|C*>9?bs@7J$t7K;Wj7EQj!2U4xF) zl`m6_84ppMKJUBEF8+jl7E-gGW~K8o%w$XH2cR+@9|?TD03_>hmVWvVx<;eoqT~bC zi&FGrT@@b(kAAKz3Mn|0tpe%==Q`AICDg<&m(gSCJ-EtW1RF<7w1D<`HL6e%N+`IT zA|X_BMN^>lBVEkBdBd@yUI+!YCR3}w2!fKO&%8^R8si2Jbk7%_tZy*l$MH!Ibr&Q+ zQq9ob(9?zv6isYMja*#{`94{45FVDok+tTpO#*HycCb&Bj_$8a{(<_P2wQeAfU_$6 zfHDuFOYC9i;al<0WL(aVPV2EzYfN@R>Fwuk=;yic)+g8zyBr9q`_U}sU8Mu z`K|?tDbs6rRemn+g0nMdXJezT3Qt7tfKK2cLdo#mrL03Jm~{EphhEeeO#e2V(EulI zu6tLHg30sVk}kc$iOqg}C9`hJziX`Fn>2;d8}SO?ZeN%Jjp^#Ja*JP$WuwmhHv0iKX|C=z2P%|4G7T}q zZENr_FbENw191u|v@nJGnp59iL36c_j;K;g5tB-X&z$(UM0fb@ID7U_qYks`Dm(i>cObqx zl6}TRsRxUkuNi7h4&$kIV>gPhztO-?2^OPa>Z$UCZaw4!o>zp$1ne*oi~de6@*mIH zsl4~QOf*E}fx)DUyu=L#@ma4d^tbf+CzD6q%}=6vc7xxK0h}RwesDZ1j@CxNfSc49 z1<(Lrj3Q*}1+6!BFNPd+RM>>`n9xk4A3!iv{!w!c1J1@EaPupH_v^LKPodvCi77EW z;6nEuq#A{`*MvavG2y=oOzR~)XxTbhxh4!HX`7H)Hep#c$HdQcMcqGA0szvuuk=~k z-1o$3aByzp{G^EYS23Ahh^mYg>EEK6&TWk#qW z4E2ppXrBNm90*+@3&cG_0MS^i3GOKb&iM$_WJd&dx>(3p=!dgz&;4I=6;+W6Pzp$I z0c;XC!a^T>was7?G=pddf07@l!>_)gp-E6$aY>AUf|@MZIIR`D{NCU(@Y+mCqL~Rf@oR!np|n7W=gGo3mk=)21UK-eNk`lBgQ-&0P8c(+KUXj!qXp8arP!#FLE%_7joabL`X%2 z3^`<;PvQV%T{N{#JXJje;khW|?uI=|y{2LqDBgq&jATsy|GzF+k|89O%!e0}tE;ICuk;iwW%?--&)^|+gpkNe@?%$fCE3^3H`0Q7& zVL$C4&DF$EokxjYVe>-}d4`db&DtO2godm$b_BdlkiF#7nH)uoN-B|dQt%xG1#Paa zMiyFAs#UA{UuBBZ<;JIWMhULu$miQNkg&Qvc)EMBmMKk!DZsG`;=&V22&xFQyldzh za=;J?W*Vvbb0)B})9d|mdvQ4p_{^(vEvmJZ$!a>*teY~tBNccn!Q7-7(hEy!!tJ7< z;GossNjQ|!m?(BT!DjQ8xwGtVZbZ<77XKtNr_oRa$3XgJl<%Gen}crtJ}d1%%gK5w zPTZ7$Mi<@$;nh$7ZoSuLVx^gifnGBwDKjhCmRT7NRtf`Uu}jjry^Xd{?#JB)Dal4p z^iEOg*n{Z%nMr2Bi6U#lX3H|siLXHjLn2q21nmHtX_Zkz&0wm@|6)pC1eu17Pc4i5 zGmgQs;EkKA&#SC%1=*+oS_VVvSJLph^USiDM)-$4ibkn3XQMQ>tXD;>M~>h7J+2Kh zfO#j0v-A2DqSi>lBjKCeq{o5Au(8wKc;;bXgCBM}eEDzzR4R6PwXRvm69CESv?z$n z892)%k2by9(+bdb)TNm3408=Qr&vc?yWbYb23nPcsxf049lhxTm%2VYLw-e?VRq}6 zS@4dnv>@(aUMp24(}RVAl`H5rGgvyHdn7d)xL=AAO<3`UlateN$$ft4bMd7U-=VQA z(GJvVkvmOn0)_!qn^SS*l(axg%Vp%=LzzFBuGANqC5lR;jhr&6KDy?buDpb7`)FBe z0ocJw>qQ=-&ct$m-%)EH9NwiD13b%~r-!CSIwIe?JRR(>aYwnFor_cgviw>0o(&N5 z(Yx|XR-wO;Ri}VPT_K>9(Y~n~8!daLD7myjdh!15z_)kD{KbAdC{Gogl0~VI%7ixf z6ql-NtOwm?E2sLwwzadj*AF;i(abIq@M3NWJ#r3W2CJsNOC>hoq;?|CX^h9G6hph> zgV$9RxA)-Yq29koP(_QC;(Y5GzX0E1m{%I{{aw&Qo~`N58}b@fkm_`E;#LcUU5&g+ zbX^d_`xasuxvQb8!3aCc_@eFZ+&S|~0?deN^u-arA^#{R5|0fZ3o80m94eM*y5`&K z=k5K!0D1z2{mimV^H9ip5FE@QXE*|D>4xcUkcDsH1=C|#3 z`}be3u^L`178w0t`<2NoG{#90#IcU!1d6b-D9)xC7DNH7p*77Eih}^>R(yT}-4JW- zV!j;f-k#!q5NMo2#-&dkF`y)r{*-mfI@MdHK>gghuD88)Q(F_v62KjSY1R_xa*eA3l628Z-of`@&n0Aa|3%x`(Wt=8uLA*3?lHJ$?Fgx7*#_-QC>W zJpXkwPm<>H1+O1_#uzT(q_4^JO6!Q8MqM{ZE*dIeHBk(Rn#B`hD1QxH09nK#I8l4+ ztBI^HX!BEb#DJG+)Q-~u(KU*4ecm17E1u@a_{=I_4E!9VnKF72Jhq_v6^*&Jz+Um9 zFK}%MaM4MCgSJOJrfNj2L>L-fLj46mzJLSH*7a$cejJwmzAT5RIG+#k`M&@F0RR7S W1bukm1X Date: Sun, 12 Mar 2023 15:42:54 +0800 Subject: [PATCH 7/9] feat: modify picture display to compact mode --- code/handlers/msg.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/handlers/msg.go b/code/handlers/msg.go index a98bc0d2..542f22a8 100644 --- a/code/handlers/msg.go +++ b/code/handlers/msg.go @@ -190,7 +190,8 @@ func withImageDiv(imageKey string) larkcard.MessageCardElement { Alt(larkcard.NewMessageCardPlainText().Content(""). Build()). Preview(true). - Mode(larkcard.MessageCardImageModelFitHorizontal). + Mode(larkcard.MessageCardImageModelCropCenter). + CompactWidth(true). Build() return imageElement } From 3e0bbd4ca3d43b0c9b2dc1d7ee64a463643fb454 Mon Sep 17 00:00:00 2001 From: river Date: Sun, 12 Mar 2023 15:43:26 +0800 Subject: [PATCH 8/9] chore: tidy go mod --- code/go.mod | 1 - code/go.sum | 1 - 2 files changed, 2 deletions(-) diff --git a/code/go.mod b/code/go.mod index 067725d3..9c3e4fdb 100644 --- a/code/go.mod +++ b/code/go.mod @@ -12,7 +12,6 @@ require ( github.com/pion/opus v0.0.0-20230123082803-1052c3e89e58 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.14.0 - golang.org/x/image v0.0.0-20190802002840-cff245a6509b ) require ( diff --git a/code/go.sum b/code/go.sum index 56199cbe..d1e28f10 100644 --- a/code/go.sum +++ b/code/go.sum @@ -250,7 +250,6 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= From 6709c77343d48d24233fc97399a3a1680e9f07bf Mon Sep 17 00:00:00 2001 From: river Date: Sun, 12 Mar 2023 15:54:26 +0800 Subject: [PATCH 9/9] chore: update help menu --- code/handlers/msg.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/code/handlers/msg.go b/code/handlers/msg.go index 542f22a8..c4d7d654 100644 --- a/code/handlers/msg.go +++ b/code/handlers/msg.go @@ -614,21 +614,25 @@ func sendHelpCard(ctx context.Context, "sessionId": *sessionId, }, larkcard.MessageCardButtonTypeDanger)), withSplitLine(), - withMainMd("**🥷 开启角色扮演模式**\n文本回复*角色扮演* 或 */system*+空格+角色信息"), + withMainMd("🥷 **角色扮演模式**\n文本回复*角色扮演* 或 */system*+空格+角色信息"), withSplitLine(), - withMainMd("**📮 常用角色管理** 🚧\n"+ + withMainMd("🎤 **AI语音对话**\n私聊模式下直接发送语音"), + withSplitLine(), + withMainMd("🎨 **图片创作模式**\n回复*图片创作* 或 */picture*"), + withSplitLine(), + withMainMd("👨‍💼 **常用角色管理** 🚧\n"+ " 文本回复 *角色管理* 或 */manage*"), withSplitLine(), - withMainMd("**🔃️ 历史话题回档** 🚧\n"+ + withMainMd("🔃️ **历史话题回档** 🚧\n"+ " 进入话题的回复详情页,文本回复 *恢复* 或 */reload*"), withSplitLine(), - withMainMd("**📤 话题内容导出** 🚧\n"+ + withMainMd("📤 **话题内容导出** 🚧\n"+ " 文本回复 *导出* 或 */export*"), withSplitLine(), - withMainMd("**🎰 连续对话与多话题模式**\n"+ + withMainMd("🎰 **连续对话与多话题模式**\n"+ " 点击对话框参与回复,可保持话题连贯。同时,单独提问即可开启全新新话题"), withSplitLine(), - withMainMd("**🎒 需要更多帮助**\n文本回复 *帮助* 或 */help*"), + withMainMd("🎒 **需要更多帮助**\n文本回复 *帮助* 或 */help*"), ) replyCard( ctx,

+=)|zW9bmcJqZA5f;T`~W;|z~ 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�d18r){G|`(y=M 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