From b1d17ac407158c32d75be443c5508e9ff3365a9e Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Sat, 2 Sep 2023 23:31:17 +0200 Subject: [PATCH 01/10] try fix --- bin/dockerize | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/dockerize b/bin/dockerize index 8949bd773..7346c9261 100755 --- a/bin/dockerize +++ b/bin/dockerize @@ -6,7 +6,7 @@ IMAGE_NAME=${image_name:-promethai-${STAGE}-promethai-backend-memory} REPO_NAME="${AWS_REPOSITORY}/${IMAGE_NAME}" FULL_IMAGE_NAME="${REPO_NAME}:${VERSION}" -APP_DIR=${app_dir:-"./level_2"} # Updated this line +APP_DIR=${app_dir:-"./level_2/"} # Updated this line PUBLISH=${publish:-false} From c3154a673422dc65c51ec5ff57cb86ed0f6116f6 Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Sat, 2 Sep 2023 23:33:02 +0200 Subject: [PATCH 02/10] try fix --- bin/dockerize | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/dockerize b/bin/dockerize index 7346c9261..e4c321741 100755 --- a/bin/dockerize +++ b/bin/dockerize @@ -6,7 +6,7 @@ IMAGE_NAME=${image_name:-promethai-${STAGE}-promethai-backend-memory} REPO_NAME="${AWS_REPOSITORY}/${IMAGE_NAME}" FULL_IMAGE_NAME="${REPO_NAME}:${VERSION}" -APP_DIR=${app_dir:-"./level_2/"} # Updated this line +APP_DIR=${app_dir:-"/level_2/"} # Updated this line PUBLISH=${publish:-false} From 7f7b26844acb8bd2869a00b74cc8e99bd0a04318 Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Sat, 2 Sep 2023 23:33:19 +0200 Subject: [PATCH 03/10] try fix --- bin/dockerize | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/dockerize b/bin/dockerize index e4c321741..3abdacf40 100755 --- a/bin/dockerize +++ b/bin/dockerize @@ -6,7 +6,7 @@ IMAGE_NAME=${image_name:-promethai-${STAGE}-promethai-backend-memory} REPO_NAME="${AWS_REPOSITORY}/${IMAGE_NAME}" FULL_IMAGE_NAME="${REPO_NAME}:${VERSION}" -APP_DIR=${app_dir:-"/level_2/"} # Updated this line +APP_DIR=${app_dir:-"level_2/"} # Updated this line PUBLISH=${publish:-false} From e80a30c422ca3c217ad3521f539a3dbcaa995bab Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Sat, 2 Sep 2023 23:48:24 +0200 Subject: [PATCH 04/10] try fix --- .github/workflows/cd.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml index e03a3bd45..f6d5a64bf 100644 --- a/.github/workflows/cd.yaml +++ b/.github/workflows/cd.yaml @@ -48,7 +48,7 @@ jobs: aws_account_id: ${{ env.AWS_ACCOUNT_ID_DEV }} should_publish: true ecr_image_repo_name: promethai-dev-backend-promethai-backend-memory - dockerfile_location: ./level_2 + dockerfile_location: /level_2/ - name: Export Docker image tag id: export-promethai-docker-tag run: | From e42eedc34647ac5a49cc2a247ad6bf185fdc1dd4 Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Sat, 2 Sep 2023 23:49:03 +0200 Subject: [PATCH 05/10] try fix --- .github/workflows/cd.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml index f6d5a64bf..c662d0ba4 100644 --- a/.github/workflows/cd.yaml +++ b/.github/workflows/cd.yaml @@ -48,7 +48,7 @@ jobs: aws_account_id: ${{ env.AWS_ACCOUNT_ID_DEV }} should_publish: true ecr_image_repo_name: promethai-dev-backend-promethai-backend-memory - dockerfile_location: /level_2/ + dockerfile_location: level_2/ - name: Export Docker image tag id: export-promethai-docker-tag run: | From 4a63e4057f22dbd59e5cb85d4cbca3667127c1e2 Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Sat, 2 Sep 2023 23:54:04 +0200 Subject: [PATCH 06/10] try fix --- .github/workflows/cd.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml index c662d0ba4..9048afb3c 100644 --- a/.github/workflows/cd.yaml +++ b/.github/workflows/cd.yaml @@ -48,7 +48,7 @@ jobs: aws_account_id: ${{ env.AWS_ACCOUNT_ID_DEV }} should_publish: true ecr_image_repo_name: promethai-dev-backend-promethai-backend-memory - dockerfile_location: level_2/ + dockerfile_location: level_2/. - name: Export Docker image tag id: export-promethai-docker-tag run: | From b368ee707fecaded2a6d7b60fe00505103f8db04 Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Sun, 3 Sep 2023 00:00:53 +0200 Subject: [PATCH 07/10] try fix --- bin/dockerize | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/bin/dockerize b/bin/dockerize index 3abdacf40..d5fd748f6 100755 --- a/bin/dockerize +++ b/bin/dockerize @@ -1,3 +1,10 @@ +set -euo pipefail + +AWS_REGION=${region:-eu-west-1} +AWS_DEPLOYMENT_ACCOUNT=${account:-463722570299} +AWS_REPOSITORY=${repo:-"${AWS_DEPLOYMENT_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com"} + + STAGE=${stage:-"dev"} SHA_SHORT="$(git rev-parse --short HEAD)" CUR_DATE="$(date +%Y%m%d%H%M%S)" From f0db050274311aa27b4f1fe75a854fcb7263ffd6 Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Sun, 3 Sep 2023 10:58:43 +0200 Subject: [PATCH 08/10] update flow for the docker image --- bin/dockerize | 1 - level_2/entrypoint.sh | 2 +- level_2/fetch_secret.py | 75 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 level_2/fetch_secret.py diff --git a/bin/dockerize b/bin/dockerize index d5fd748f6..a8f465360 100755 --- a/bin/dockerize +++ b/bin/dockerize @@ -4,7 +4,6 @@ AWS_REGION=${region:-eu-west-1} AWS_DEPLOYMENT_ACCOUNT=${account:-463722570299} AWS_REPOSITORY=${repo:-"${AWS_DEPLOYMENT_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com"} - STAGE=${stage:-"dev"} SHA_SHORT="$(git rev-parse --short HEAD)" CUR_DATE="$(date +%Y%m%d%H%M%S)" diff --git a/level_2/entrypoint.sh b/level_2/entrypoint.sh index e711b832f..6eabf9c7c 100755 --- a/level_2/entrypoint.sh +++ b/level_2/entrypoint.sh @@ -1,6 +1,6 @@ #!/bin/bash export ENVIRONMENT -#python fetch_secret.py +python fetch_secret.py # Start Gunicorn gunicorn -w 2 -k uvicorn.workers.UvicornWorker -t 120 --bind=0.0.0.0:8000 --bind=0.0.0.0:443 --log-level debug api:app \ No newline at end of file diff --git a/level_2/fetch_secret.py b/level_2/fetch_secret.py new file mode 100644 index 000000000..6c422d1af --- /dev/null +++ b/level_2/fetch_secret.py @@ -0,0 +1,75 @@ +import os +from dotenv import load_dotenv +from api import start_api_server + +# API_ENABLED = os.environ.get("API_ENABLED", "False").lower() == "true" +import boto3 + +environment = os.getenv("AWS_ENV", "dev") + + + +def fetch_secret(secret_name, region_name, env_file_path): + session = boto3.session.Session() + client = session.client(service_name="secretsmanager", region_name=region_name) + + try: + response = client.get_secret_value(SecretId=secret_name) + except Exception as e: + print(f"Error retrieving secret: {e}") + return None + + if "SecretString" in response: + secret = response["SecretString"] + else: + secret = response["SecretBinary"] + + with open(env_file_path, "w") as env_file: + env_file.write(secret) + + if os.path.exists(env_file_path): + print(f"The .env file is located at: {os.path.abspath(env_file_path)}") + load_dotenv() + PINECONE_API_KEY = os.getenv("PINECONE_API_KEY", "") + + print("LEN OF PINECONE_API_KEY", len(PINECONE_API_KEY)) + else: + print("The .env file was not found.") + return "Success in loading env files" + + +env_file = ".env" +if os.path.exists(env_file): + # Load default environment variables (.env) + load_dotenv() + print("Talk to the AI!") + + +else: + secrets = fetch_secret( + f"promethai-{environment}-backend-secretso-promethaijs-dotenv", + "eu-west-1", + ".env", + ) + if secrets: + print(secrets) + load_dotenv() + + +# Check if "dev" is present in the task ARN +if "dev" in environment: + # Fetch the secret + secrets = fetch_secret( + f"promethai-dev-backend-secretso-promethaijs-dotenv", + "eu-west-1", + ".env", + ) + load_dotenv() +elif "prd" in environment: + # Fetch the secret + secrets = fetch_secret( + f"promethai-prd-backend-secretso-promethaijs-dotenv", + "eu-west-1", + ".env", + ) + load_dotenv() From a04f2de58f237885e826b42121838fdda697e162 Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Mon, 4 Sep 2023 20:49:59 +0200 Subject: [PATCH 09/10] update flow for the docker image --- assets/topoteretes_logo.png | Bin 0 -> 27320 bytes level_2/api.py | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 assets/topoteretes_logo.png diff --git a/assets/topoteretes_logo.png b/assets/topoteretes_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ebdbc9a20ac24a7204ec40c8f79fc9d975a94426 GIT binary patch literal 27320 zcmcFqgJJ*}f`<~}{-uu2!f{}qX4J9ij001;PI1Lj306~ct36zX@N90hu zmiR^CiM#Cs08|YBT_iwW0SoaaiI0gk7I-zxzDfK8cEadm0H8jN>cS2J051AE8W?;4 z$xf@1C;QiTl}$IO(xtQQq22}!oN(d59g3q_hp~_I+?x^BHc7<_2%U#|py_1o@w|Pg z<%9!V*ZzVG`^QH30`>Ekesm4){+J4Disvc6HLkS5(i;GZ2 zxO{!h*`FbPsed~@F6lwi*Vi^&L__#O!60WE9g;dI%XRpkCKJix^S;$vAJh;vRo%vX zobp@9V_H)X5D|+;0#0I-B$tmhK=0rbdt`7L)8l=RF*$(dK*AyrIy7JIOI1_BFi3k_ z5I0P^wv@KY4**&qV352vid2M51Gro9wxJ_Boz(&<15`RF|0?h-5q=WwN!&USXk5<8 zk8qowjz^9ekq*{#sTEY{P}Qg6pG%)}rk(Aom_NHU!r|fWE+!t`@5kI%aWrUADptdB zm=uvD$;}Sn7@^S`=`q_!M|euItIu5Dw|L^`U)3zytWHfWUwJ=RdZuev6vB!1TBx|0 z{Vsb}uK$7$?sTB&YHCqHMSiJN^lAHW`*k}448)T`qj610DF5mv2rqhBb8^KTxGK(d zoxE%1iSWU#ggAh>s^|I?y%_+Q4vf{neU9KN53?;*Z9yjhw|T8Ur#|c6ofvcWjeevY ztf7pX#WtphX>(xXL897h)&s%77#VOu4&t_bayCl)!}q$e#Hzh<1>pGg6oe|~s=;L> zO2^y6zHds#WW2G^U^_hti=8FbAO&$t;GZnM4pE=KCU`{64TExPab%V1i=UQ7I0Lrw zNSLzIgSdbwj{>F1-Jw=W8u5cqB4A2rDl@Ry34h?kIQk8D#{yL;t0B|M)cXi7p_g zzyRlt)$-ohB26~2O8!xIijE*8EC_ph@ArXz^$oEt0zs|l6OVgHhk#hQP)MRIKITKx zHd(bSa0v#LIN%!=5q>MCbvU-YvS>p(F9*^R;~~=9HEubhd-1k{=~+NEY2+x$%`rmF zVx9i#&*NwqACOUM!ub8>B@F{>7SBDBOE7_?91O-L35tipAs;8*8;TdxoY*gwJBBFA zgEdA3jg($I zSR4HK`MoW6#|Vak0F(9)2%FKD$v3FSRE*PgAt)LsmJHMh_hWcm+WmcUcu4yZTiWRg zOpXDVUBeDm_!=H@+_Ui2!AYmvE`UL#pw7p%(U?xIzc2`J)E^_L&c_mzbR(XQw9x7= zP8-;bL`#fTN*M8rrpd>6a>)@lgl#ooQd#bPqRiKb_9Z!`1b4Aorm`?bJCgtyBx3yS zH`lIb2InGSFG{K2By_ZbP62QiDhn4!L_k8w6emmJJdg zV#n#}?#Z>J3Unyeywh#7`Sr-E9jFIp`4u9Oo8Y!|&S@G_EHQR$y(vg7rY+>WUSC&V zzYm-U8)Z9!34(!b61y@ufq@sN`5$Hgz^z19NE zV~jGI%s9&7vQ6o=b*my009aU_au$x}8fQXd&9@Q4Lk+XcOxz(i z(BY)`>JFL`RKV~QZ4|4GqP@!`O9>+ZI>$;Z(s5f$A*$gKS)Y6pu*j+^jEq_*E0blW zZx=TSfbQ@WMAV2uHJIpm0wRkk;e0NOE@)KLlRta0CNu zdJ0MxgKR$`+<-MDe6|A6zp6m}x`KLDDu_l(!Jn!5wh&O<#P19T-AI@W0PubuXZ-xp ztpbV1+i~&hdC?c3t0pQUsz?CfA|dC-TA&!)i(1h{$jqp=mJtXewD>&L!&!r-0|d`5 zA2$}c(SI-?*Le7vg89dtiwmdPFa+00-$|~K(n~Y7^|j`e)273bGnJN8b~&3-*@BvR zHz^1SX=MOZ3prUOmo8hFzhM+l2Tv3b5V-T^!(qQgTP5NT-Ri@s<<_Hu342cH!KJD- zJ$$O&=Ad74mv-bCgBOV%iCz_9*D8!_-dU(7LNTU;0*e&9)$^D3hj))$@Ae0wSoOw_ z>(C6}GFK~$z5X{d+RdXU2^wRSTVDH3P)Y>DK>#&3iST5sUMXdYTT!hd1RArqXN_#R zy8OHBQMbM)N+;j2X4wK&)T)RZW)7#AcUU?>!0EJoF&bai4>yVajd8Qt*XZjGXQNRq zPy*w$rUIMS({c1kImC8Fh-d=*E$OcNgoED401HEW!ab6Gg3SsKQ=~j0AfDN*)-!2N z#c2V+alVxXnloo?r;XW85kJ!i2(1;?(ajwbu>C;H2@?0GDf3&P*=I* zl^myVe_tiP9*pvGr4VhjyeRaob`m?qX1hLq!^|>*2ZRE>!a^g+3bZ*+RgUzcNl~3Yve9wnTva6`4AF$} z03Mi2d{iicJQ(a!zgqJSMk=XACTtj4Gw-qaqkZ&Sm+#m!^rQFvTRAI3LqqQ$z1N?x z@LmuPdwJk!ao);&m1Rl0Hc@wKet8kKMi?HTQr47U-&e4hlrMg+N{wV(?xKoZ6r?pu zwjf>Os4Gh(ukaJ9($s9S6RX)WYrnG3utAUrYTJJ3}>xUL5B)^R4wZ%Af zEkUT_cr;iqG`AQ}F^Z%7cn0}J+L1+2ry2X6*H=#m2~(N}C2uc^-xF+myRJ+`&--g$ z{$}ZYzEh^>)pwxq?9lC=qMsOVm0d-UA$~K#$=5t7I*)9mN~AEKQM#)uP@aqlDh5f| zz)O_jgU!?=xaq3E5jFS2t1nezgwn36wtensav(Sn7yFPiQ6!?8A}l0UFiH&%Nr6$? zN#>v<%c@T8ax<=BTdP3nlYzyj~22(6Ay5YGFQb!F*{o)glK@e{LScU3u@gF7AolEr08O`;qGGUG~(quW^ zr&w6|SLR~p2>lW5649Xk{zwdlr2S>ABv~)ps?YI5<0(oU+H_}B%B&}H7?FS}qq+GN z!^e`2+9tV1+e>%CTK@b`*uUeip`e%Jwdh5;$mm`=z5WU@+F57#o8scP8|X+j?!6RU z>8kTsZYyOf6DxY>_uEDMs+2XVONz2`J7f81qmuG<#~F&}!n8s02>gz1oHIEow>S4V za$d2uQXs3$6{qbxNKC`r*8{_9D~-^zC450}D6KX5r!#h63s1q9F>$_+q?DqOfMn_U zFXmDV4c)es40ms;A+$HOaI`!fu9>_unuK1|G(wTf?j(ObgQ%2)H&7|Xl&@A}{o*|Z zaTzX^119j*=%C_6vAwGk_^Z}O#$)Tj7n`&S1ZS+2A~W=zX2O#J*O+%Pk@S!>sDcTw zU@s)fopjTNU^k{)t;hpweVEXEOcBpN`P?)TDK6NaLnlg`V$I$lLcJP$7=fe&JnfO4 zNc$!D7GgGXw<6g0k+>gd4D7GS0HyUKr>AW<$QUn`fEgn*K;?9RbAm7*#)+`xLRUx+ zqY^ce+lg={uoY5(Q#nJNnrHC+T~ArmJ#~@ujb2I8b%N2eb92h*D*6cb>b~Mb8G%Yi zhOKuuLG~rwG_$DPL#=IE6462^c(6HYB_$>0x}-JB)~?6+t9WAY=PX7=ByE8FzH^h* z8)Y`n(@LyJO*9i1<=L)Y|9+B>)H{hZm)jvTNWG>iQQIY7E@B#RQQE%&>cP@%X)&Ch zDzRKP$>+_PE zB?C08I>vd6Hcx}bNQVmDB2t0k6;Lh7s@BW>d3Z)DFaPSfyBo-aHheq}U8f`3>%2M$b zH=5Pn=LR-Qm6;zk(^HjiF~M>}*qD|O6Kx4QC&;x?0=h1DoMkZKJ~wY4`zxUsLQJQA zRWN|o%(f>Hia-9)EK#Y7ZLUWz?hUDDUNhPdO{rN}lx$jKNSpeR0@46FEVFvB%raEk zCeRedo@Z4Q#c5V1wAIsm()3X8(zBtHInNpRy7w!i;>j0s@_1v?a^lf=+V}RN-~(%4 zOo8!4O<>x{yegjtPo%AB&H&ZgdWrB?R$T^TQUHB@0QJb*`%U*r@g28wk>a|2Lzi;) z9`Pju;r#YlP^Y(vLtQLRSn=S=uOztfLjc$SH{Q-Te_kt^6th}J*^;HhxKz{~sInaV z@0juTu|Aj}8w5K*Rp%V$VR5;b?fQ@&=@z*dj=2Jp3D^L2@3=`wBhs<}9QJp&f8=>pN)%3>! z3aDsLRf_kl8cqm*3MhZh`A8h+~jd@g8rL@~olq3osJ zzmKc^H~zkj<-NWcb;G|X-%CqJJp1aC+IG&Bno~v@T)*~p+UY~7%hMD!Rkbg$+n|N< zM|kd-PYs{(It9Kd`8Z8!RHr4fhef6C#d8?#8Km8y*feZbsJ~^#edvCJRgviFvro%K zLxE%B4+;uJFB}fI;1vB8&_un^qQf$J_P|fe%Z8DXF?E3Y=zTn9NaRC%Q_~r5pCaVm zd+~=cZdTfi|FyrDuT%3^AWxlAmHVq8%r#a|s2sV^>OwnkZ}vONTqmZPczp8 zJ~g-5-;EE2Q6*MG6O-(h%eq~4fd*WDY6^<+)QNph<B9`q$Vm*v<-? z8%NxR=Ace{dj})ZT#;?s)U%;b$Z`iK0-Wjn4n}fo^A}lWkcO=wZ>yx)Ce7wZYy@C{ zZ=-Z!_uJY2Ku=juqu>pv;P#hefe=2o;*M;0@_Bi`Y79E#_IPUkqETQGD6fEkT!yed zaPgd;w*Q`%c#Sk!59tTo9nBO;gj6MxJ{i=BA7IXVSgI+l(cu~+QzaM)1;NQ2K=sC& zT$L!!H;+?cfdH0mGj1lD5QT$|dyNUgM7)nr0wr73No*C=QMmjKvD@^JkI{md&mt%~ z6Ljv-ZRO+*oTc)WcMimFf^^8a>@TK*)4k93!zzj%d-KjiqAQeFEuYrPOpAh*j+rux zw2=MuP4dtD7>y&5Fw!lz6WXfl6rzI0eYjm?>WpHfwXgGh$3#)W)bK6^%j5#U`1uD>{!Z~B!yA(?vQv^?Ne2HqOy{Q#E+GEr*5*f%J7SQ~MjnvXe^da5j zUzQOP0H?9vt$}_i4YscGnD{PkZHC{`d5=6LOb^<^JYJ$D%>Kqn`*)W9K?*Vt$i|~t z^s>2_hohKoN--|vJX`GO&82lxOIB67^1alu>O1Y?aV9PaCSDe-NrmOM5WrHcFG1Sa zgf_v12gWpA3dTcP;jZ!`#J2cF66u_LUn_6p_A;tN1_&ddpVvArPi)^j$yFQW2X z{C+iHb*&X$&nG^!%bLHVVme?XCS+1JUDvZ7vK8`ThY;Np9)qrbaN~ubDE&z z!(mBf>sjG%-*1oTMk0Oc&SC=F{^Wyn#rN_}dm>+@-^ktQ{LwDvF*FzxwOaQw(TO(P z+ehv3BLzjDGbP=?;f}N9MAI-g3!^WZ__~~dky6Cdcov3Huj$xaukxiY?cAFuPdson z*)FVNF*7@h62i0J|MWj4ZnTtZx_YOp2lt0`$bv>;1*5o?y8k5|D7^rTK5%;K(0%c>Kh-+YOOFxExY{g_LY@ zzY{Vxf+|q^Z8Kn#_&sMYWv_-$^!m@t8&0#(b%I+|UF<@#%(z=&7tJmGau?qxIf!kY zg=&z0$mr`0<@YpQ1kG-pGkWlze^o=&Dfx%Ck>7`*A!^_W?mKB< z>+sj7H{RMkMN2fwk=1X%+f#-1LB=6w9>{Qi=I}ch7)0mI#us^&+Q9VLIL%qY1apEW z$HLwNw2J!2NqwbgM;lkk?*p|#(Pkjb_XU>EufF58;SNC<_vPJ!@d=TK|0=Ea2z6Iu z?{8y(yTyr$yu$32N0qjMQ0Y?4`>2yP3fe-NxQq99pGO9&BQ2uW(oVD6up}Lzl1Y^j z?0R>4X#1`G?(DV0=^l($|Dl2ktJ`Skug7Q(dIT+m`}1f#*%)}2ip4Dn5n81kppMMh zqQgG$Xb2!FJybp2tUa*1^Hcl6hxP!jP3`GGDr#CGtReEnLWI|3MS@S`nv1bO9t``r z^Nq8YXLz(6m{1*0xGLV}mbc6`Xxsgh_3Gm2USPKWgWyT_a{3OW$do)TddUSe7E5^I zd>X0&aS56>mCIZF8@kZdW60tw6>N-jrV<3zs7Vx_I)BM%yQ-NRO3-t7aU7pJmi$NU z^7U=$Qi>juq#p_Ku`^1-qmp)&_uUBZNi*1g<(!;(%#@MHGeZvsi;9XaTmE#^{d(Gn zjWc}r=!>6VJhy=YPub0E5-+)y1YZy|rsiFwW;d_>n312JGRAV*5MNl}8qZJr<55rk z_ia^ocaAMM*@IAJ8$r>qF{2B*25cNixIucXK`_Jr{@-U8qThJ{kN|wl2sTbnb$2H( z^wrI}BW)JPd17*1zq;c9SLDxY<{eIO4?EX?ga$Mc6YJdig;`AuZw?rBDvxj}m9wXs z1%LGS^Oe1XN~3F*?jm!j9}5=k4@a%}%wp$HHNYvKo+gVwR zx+{p|tJ)<$l_fjLD7o1QxUliA?h`vbFC(LJKWciFpK-zOgvhxFEy;Ouq!G%P((Wt6q-O zWDec4Eo{J8A8PViRNf5Q_pd@h$B0HpK-EHS|E{0)|Md3Lb>$)NX0m6bKy!t6RKdFR zr_YCz8Uw~;aH=#c6IH4oMOy+m|5fbp#F`nHJFlhncTcS2pN2%Pc459CiAQIg4N@Qp zcDUv>0wYyPBKRh0#V{4(dL&GfJgS)O7RMX3k*29u|4X^Wjn4k?K?0Ko(9?IPk=i{q zq76B=s$IgUoTMrBn&RD~Bh>`(L|^OSMi?K=cPZJyT!_mAsc{|V!YF_W0wS*NZsg>E zpJe5{8ECTknFQ(=3QQL6$)?E~YC6X9R#{Reu)h9R_*8xM>8r4>x=4+&Wx*a{7}0B8 zeB11c+#sTz^!AphX!yR^a8g?X+A@g8cUmL;_7^c0-?{SZl9bWJ301J3)DNB@g8(!; zI4dhX>r<%B9e$4Q$krV2gQb+w+ut3+yuEKsb0Cw1BQZ-7BQ~GlLi{KIy%(RGvHDl- zpX|q>w6CW;gSyT93;eu&+SktTT(WSsfQ3ore-EA)q&vlvr&7DUx%<`qaQWA?%rp&u zzxKD)AC#Dk|ra;V{UeXCm~Cj4i6my&F@hIIB@Rku8f$!7hYB_Y4TsL6n3L|<1TUhs^jRr z-MZ^P-PJLNlK}1?h$jAn3M=gg^DaA zHAi6*+2Zaht@^Ju?qn?0-7zu6iP|S4_b8}!kvU;Mh}_d?!O*M6Y{oRUB!KjKiXs_; zni)lHx)tYTaAags*`~oD?}xPCY~GaD(cGh*uQqCNlV9eBgXUXXj|H&?v2CLOqziwd ze7#dLCg!2@HU$ZhbfSXCj#O+IYcf|(swCy!Pz$v>Hv$Cx9zZ;vxLLBk|3L(_O$Y6q zs?G`IvE7y_C>9=QettfN0*nA=e|$w%EYplHXrvyKvu#)dfcyb5ijq$0#v;DV+#>dk z$J&X_)9q+V_Nym>7b_6(F2Fd$%^2UroI1| zN0L)~GgrA*NvnMyMw9SsJP`hFUz?@;gUJQkz+I~G4gVw)WZi*O%&Y+M99ZmEo+CMU z=V2QAh~ehGQB0BxT(*LhKU>^pp~6lgP);vzQb$7whJU(lnNdv1)c?OK!`lp&@%%Xb zu8&fzZ(fe_Pc6DJmgo#RJON?$^-fk@W%FSG5HW0#$j@#f^(gj0$B1oMsoBACLIKYh zdG&)o_}?9TrZa?4O&d8Ehdeg?Id@-?9{~2CO!^;U*lT4265n_0dNdD3L;zd zTS?Ir&sklV7i4;7WF(@+vA22?C7FdN`OVgXIl7+A&2WzQvjc#uGlqALW7*niQ$=E+ zZ=%#{ULhGwgG@?R*!v-KO3bp{JTY3cU?;B@3MuIeqBTdPu8Nu^p|DOAoG z5J_YzEMv28d@2?ksv!+DT zb=pQ_snke*@?rLBtcE3ER0&xO>=g$?7H-9yTPZSr_#(tyO zO1t(hkPl+tm9e2<4QJ0rpQ~6lD9OGl{gwAa%XcHM%)!`;$`}lwaTlsJ>lqR~u{eZ% z)W3u2h|R!E0fL_|kCPtAPA}3SFJGV2Un(RlhvVZrCHhh*5Yb_DqUiKq^BZgo$Y~~% zKUc-)bxyWAam-6Rk|Yuji~gmu4`NI12YpYUYH^M&sGud9U{X)Ub-&de`>)I@KJZW_ zUR*!_LF|SpHKF{P-aNI&rTLY3V!)ibN0dS;kxH`Ka*h9a?@Hk+C56V+(I4AwmzZZb zKq$BxsQwLDTd0*mZMl7I&}MNmOY(Qn2Bp=Q9;}dBpSkj2IId!!aW01daKj?Yr2_z5I7h_BiQS>&Z)ocGTgrDA!OsSdv8X`X2SfTS)Mr@nTqHZ;wM zVR=J~@!Q>;k$t&i2F56*MaG(8+#J}yZXRAxB>G z=Px`p36bYTur0rwm@svtEKfx0`H|D)YCm8zYq9e-pW{ngqFTQ{M9>U-`G5{Z0xT*e z+4-fOG@S%3d~tVo&vONlya{vu8#;!L$$c;hgjI7Uc$cR^sX~4iqP2cXQjySP$^MDEQ#(EZ{6dHd_@dv32)UU+iD^z7&p^`2JGC3}ff?)K&iur>5^%RkrsaSurk z0M?mf#Z)gS7I3LFan#mjwl4k!L-#ZNMnu7&*V(4y7u*+WEIp>pH}QiGqsHJ(mw|&` zaD&j4hDH~i&C@zZG9Ut4KLFF4R>>9*Rh_zskkpJ#M1if6kT{htEo%=wmzXd3tEIsM zg)dKt+lq6d!6E6qZFq?~vYO3tM|#C4vLk$eYJAaW+r~;HIkP1V1r1mDlA6aTN_kuB z`|j|Df@>}b&_O%#^V=l%40$Cr$%6~nFa)dnGL^}D*@6Yar3ou{u74p3*#SA!-@EJ& zPplPW0$_p_`BUKw;lnohVJE!;o%p!AVLCenf&?E;K|hOWbh1{NN;fw~10HSIHuPr} zM)8~{C{ZXKi0J$@XZh=`aXTpTtNzY?T|YRr!Ms85+#mAQKu)WYQkW?t##x7V;71T0 z2Q3hR5t=8HNC`?t;%4X5?F9$8DCaX<$PCOw|J_Ae2o_Rk>gpMTOZYPCHar(`T@H-m zAmIGxUyc*}^GOF|!;M)|Ch-9VkqekPLRidS(s_cq^ojkoSzmaZU{?;PL^Px0S8)Iw z7*%?;lFt^4JiSWFZsRQs@hoD9WZJ++v*8 zJWZnJK8onOiCdR$Z`qMuyM@{#-rA&H&)4uEZ&~wSC;e=EUrqb~8>q9CmV0*V(G+E= z-z~@94}UNJ?ivarRWJE7&4;yADH5eJBASWLjmy#f!On~Rf~&Q`Y=0fKvJKozp@j}O z%{sPM4h*7-5K_2|$eAI2cziN$dQz1q$1e{d=sTEpCUzc7rUq;8AmK6vnR(DTl>*wP5 zlX-ZnDQJh)cFB512@$K~@pAVphRf4+Pd)yfQGJ)aR+OiB&tV-4LnuG}tkG=MO#o;} zoehw8>(W*KcQ@Z+vNSN;+M)|zb=udQ^;#b1U;5r&49}>+>lJ{z^G}?EgS$~hj0d%} z(tht&UUH%}=)W;P%58e?bsKr~#^Kfi`Nw95fXw;6*2e1vluSS9p_N$8#2LDh<>T$I z^qPXyageD$0U3tvL+ouF78T5Pt%6F3!w49Y zRPg^tQm-ids-qzwG0hZfRdJEo=xc_YKwxvl&>v*K%m#lvjA%qvr&;Fpu z-_8ezAk=;_nx~EP6K#Oi^(H+2#$0co7qPoYT%uC-` z)f44pQ!3&0ru(9i#gii$Kgp9F*#EUqB5vB>C^w5@_X=bQTB@AnyC|AqauG-q=q@U9 zm|*}qAPaXtXgdZvOlY4Fd|%z3SW&3 ziBBz~`1-x(CXzZB1XvvWyOq@Ik4^pZ{iDrGO*bG##=K3NPB>ub&AYqSLa;4)vEIZ6 zl{_swsrTxJGI)_GKI!2yyZ`!)E=PDLK~6>GgZ4J%zLEGPy8<+(Y%!rf%E)gzi&h&N z7!2=zy$-={#p(=Jz3b0M#A%uKzTTpL)qu~AurmZA8gcXVa0L(4c|50}sj^!$UN-%+ zngCRU6+TP~T!#?y+~uvVc$}3Ub(h~0p+dYDw`yk8U-&nNudZkY->Z=(CTvC*M{6h= z1^!z>@tjpgABXxpeyk72Fgb^RU8BalQZTp^*I}1kEexBTDvLJ+BE%75l@UVI+%5?v>u zr@N))u~LVF2k^YWZqeT;%@>{I!%c2VDiQ^4`B%^6C<{Y=D6^^KtU1R{3eomiv8nuUi79lCCfat>x~xK5wzq0{Ti3j+8;9G))dAc z;RnX=8_9Lqf8AzhHL+V}n|Y`BiV2Fye8w*{#f>k|ajA0lnaT8(CkB;t1d7(+A%c(6 zBuDUsdkbpz9=VZCAmWLncNt~?_YCM=LKNQ z%RU_$eWWhv+_6g=+P8gvhP9q>@-LUf)l}Rm+MqH8mnd=(LHL|4m`Uzn9pxat`_JFq zcCM7cW#L(2>u4N+q+MmrnzVC!Mj8_zWqA3nF5H7d+iMR!zguSO;NVabT=ezd$SRSh zAg1ym-U3e~vSh!EeQ~jf%YzCHC#7h;#uA4iYmzMZXKS)WYiE?)t0QTR2SHvxm6B7Tt5$m!DmSct^qd<}-I4*IbK;ejH*@7#OiAUvJ&*pz zyUN-O%WKi5YLyxL_WrCHFcF~tg@RT#QF}jj_;u#r*@xCii7_axc%4E^9uFpxzCT}h z>MlL7^6!xwa6Tv3=DF965nU0cm1pD%>F-huuu_{=b`mprv6xx?Qe9p_LFdi9*EKd$ zzWV|{r~B_s&TMFfZKCMq@n<>2%mW3orXKlxEwultz{u2s-4RCK+OfW5aahobu4AFg zb^YiNqhTp>Uq)m5%?C;Yxj7HJ*lzHBUEnk>fDQLDlBLL)N@Sc;!D_R#(0Kf#Yy8+jxl z$3*eP?Tb56Y$*nfqG;@CDJN%l`=!S|u*cW7{@ap0FIgVuD@3-my6QNnixe!nR`d*3 z)rY;)s9MvB)T!g8uf#J@+_T3^1OLXKO2B&77biU44!?TP*8lr)?;f9w4fi##VhI`! zUwUZF(pfDSadE!=8j@>;(Ck#vt0vXZz)lMrXmd`P<$N6f? zwVM1i_@DuEb?B^V$=OYqL>cY4tPe=W7zSJ4JN zk&|pVN&BzM)-ElsiU=aJf6Uk$i4DG5^I3Uf52Nfp#7T*i=v6*`cK#s|LCM@NLO*&5 zMbn7IgZ3rTjV_{_u@^K%;O&^qiiyX(s+n}9@+Q0I)MzWOB$JRX4Z$=KbNu-7g~Do1 z_Zk;{0I7it?(d3dx1EmJs5udQS6E74F|8T-m)8D?_1X;*m{QVYWW(9erm!}YpO}v| zY0wzRI=_Bshm_CZ-szVPsiyUQ6`*ou;4{#ciH34D-+3gUzZ5proK(yI%l8z*B>sN z)PC{o_M0VaI=@Mrlx5EAG1(+nuLh3H_{iH2$+UiZ&ej!7M5$@{ULCgIYt_^+8=HUi zo5k!&Kw$)v9}3D4X2C|E#k@FGd+QlP0F{u|>S3ANM`Mr0>q3vB>Toj;k@S`AX&bs+ zc6z|9Rt11iy67d??EIO+s*N~*QMjP{T<|X7me`0HJTj~dL}pRWzREMZ`>}gKwz1>n z>voGO2faiVH4fZ)8wo}1q&^e4d#$GT&9USseAM2`tu+$0xnkCVq0LN>FPbI5QEv=K z+nkh|Y0^c`WrGl>=_#X#?VrDT0wNB%mH{0nW-Kp7JGYIi1J8A=B8x?vO{Yo*C|;x2 zLV2fbO)hn&y+ypA`=lB@HE-LjMXP`|3M&e(av&YdEr&mTI?v=Ne_!(NDDEQCTJLTu z-l*+H!V;T7cG&Wl%7()i{g86jBS9WMIE8~ZIlpeP4`O%h+D<&nqH{;|ay;mR#0QD0 zy5!HL0bvlLq~_^ISTEVF-aO<~@%n%9b2FEST996MJf$KTr8mn*CK1{X)cl1m2Rgo2 zEq8}R(T2bm`Q^|U?@gjg6uadG3At>Wm~@+DfD#@=s^?+SQU*+TYeS}ND=i(0?m_jk zRdq?!rS+KakehtQU|GRS|N7M$ZeUCSco-q9kzHXSYW1yPpj zxKk|(bG^%CCPz9>%_>jN1G4M)w0Kh;%deRf5~X&&`duVYozb@6q`?*|L?0n&(Z?SY zkrk{$6eV>&xgQZE6@`z=<)7fnZ~^$~naLnjn@$R9u}Df`n2K|p0fe9_qdHEFm?>u! z^a>s&JBDt!0N0Jjsz2iM$p32e_*#!=8f$5{r))^z9VC-b9y3CBMyt{2yb=|WkF1Y5 zCB{26D6D7}X)Z7Q0v|3cSvZKN>s0eGUHG?skrEE$GKNP@RB7h7M!eIaQe=V>H1kNN zvk(@nf(eVwk6koh&F-tb-c0i>)C4WWC6rO8@LI~11mqm_8|V5oxEhGB{$Q6;N|bTA z@2#(~6R8pkjaCV>*nXDAi4S(Aej>QvpdYnAnlqIyUo(w9n07eG++1#VQo7m-4HBVJ zyIN>>yvWIR>QA-+zMM8qnmA>>N~lt)EBA@C-6wDlEk@|qa350@yKnPQA|^B|7-J9a z<$fj?KQevnsV06Ui zVFV}RLP>1Ebny)iX%+JLBExYujQfX>iT2w(Q+2&1mO4weoFS--BeSzQ<+obyTzpVm z<--1o_K)ZZeioF=VfnH8wG=H#+MQ)% z3jKxb0!rH7&h#pj>Up7iE>8UdU*GdG+Uqa;;d6eGDez5Sl8GR{!Hgi6qaNXcIX^WA z6P9y->saq?9laJvN~BgM!lQ6A{RC7a_=Z*LTrN&iDN-;aFA6b~=J;Y?W`ArkjVO`t zMjE@IUe2FO&Th_2YF6K2fEHjS%%Fxn76}nDAqFR>m|%7LsSvrf!}Cw?zj12AD_5bV zP%qRxr6?0`5mi*WNW4P~&nUzEVF*{W{6@qym{21w=-W>`RR5x{(;61K-V)kvXVz)| z#?hx{R8%yOxoJAzf)HwR?cf|9IgG|Y?luI-CA=mONAH+b=XbV$lqvn3*g+0 z31X4ken|hBh4}BUTl?6$nGff?JEVJx=5RU>UPjal%%!aOO$Yq%9v9-Onl2H!V zDE6}m_&45+Uc8%*&)h=1Dfe&os~56(lJ)cnkF>CIvLIHsp!JbMO(ZeFZO80}07Sr{ ztFN7tDEF=$TJ_onVGuXWeJj)H^fFzLkfh}_H~C+PQs^*_(M}I3xGGbdZ<(G)8c%v< zd`UigP6}#VY%ITGjOtMOM%v9Sp&LNKzI5L{i^> zn_I244T&^ZZ2b9wA+i{&+AQ6T7^glqT7O4eiaSEPywwbv15(Z0FTKG8G$q3)Sdg`j z)&%j$jwB=P#1{{ITqK}H_2ALUBOl>V$_X*rz#n<8uC6R8k@AT~5B-@)g%gd^+3xHP zE9RY(TRwNUv(K840deog{Qh(nqRMBKZD&GFnR&b>s|?>NiFGL1F;>^N0kZ@`A`&^1 zKf$Y&B1SNt&R^q++oLS1gkR)U!+KVk+{7@LpeYzaH9dG-{~)+Lx=dPTo@wlW1!ycK zFR(<VM zh^&thl+CUXIlFiEx5E?n9)z)LmiH*Os8{{pdlFI56}hff{K!5RTVvl9>UfPuN`ua% ztD$@7FhsYQVpawtTTJwZY=+U_Tw?{XQhF%Y>t<9xN9d&T1*bLnaZ;zfT{4nBX|kvw zm>B&(Y2`H5==&_&O6T!N=&Xcz`>3b6YeYq$$s5EMKTFPx`+G^>l1-`j6k5aKDo{?- zL=sR5Ni!p@+Sh03MdtC<1c@f!&2iaCeq>@@tmdG@&%67{(oxz(q5!20Q-QLX(hwNO z;8iJNSko#0BNXgOu4ai+>RIyJ99 zwPW8%Z!@7r0eVxbI)>b?6dLepi9EJKl^>u7WNIu!b7kZ*U~b@(ZQhh=8J?Q$p$Ckjqq;D`pLE``=sPYk86 z`9AHio!nDJd!Ya_5oP|$gPB@l7M#em^kN1^oZgCMOV$v#MVx(xwdc|QN|{>(>Jc^O zu8B;NWX%fks27!5a@`0mG@W|kQP-z|);o|0@YuU_A_{J>R`35`fANx|Ll{Oo8NYGr z!=}Fx$WivMM_8RBjoS}Nfg_f6i2;XQ5GGx+H&)%~#SDnpVu|l{^DnxS+(-I_M<8u> zS}0(vajX2p99A(NUB^zkqufN(LQx8R7^vl5JYVnRQqG)8lx?U7kpNV#u30e{FrjPp zTn#JEK#M{v%@%7B6bs@z1FFVUxcic;+RmSEh0 zJWX9>xDLO#VLnNn6VPgotIC)EPBK1HAolXtj7}2Q>%=B|r1>VY8P&~R#Ao%V))yS* z;D`FFCbeIi*QF>%hj|vZM*NQ9?QFEjB>Ic{sC>#ErUy6lj_M1KGk_F;hWf5x#q&(?v; z8a1fo;X&@l^&aSEjNnqtFXs8f%8XuHQOitT>&%g|+9)b;K1vZg=x~Slyy*R${%!HI zN_~U<cP?{7Xs`P{}oREB1({WrgY~%X}Yu+CzSBN zBHVFJIl!r5}UsT>b$>X|2U6rl<7iC zUV{Cx#`=Kk>PD4CbM7giR4~tQlTo0O*27*ExtM5o5`vXd_wJT`wJ3Cmj0;L#v zM0a^w99=R9q~6#0GF{3+*Pz95qCxGH$hDU77E#XPQj!$W)_D8C06D`Vu+K&+nzmyr z>W)kHBu43~;zCQi1T;@iIN|B3hEKe2>YUBHAIT{S*PWOvk_}@2 zSg;s2X~WX3C6F0v*08=egGD3jcg7bgAFcFX>~8knefzq~Aa*}*y$}2%gO)6eZlma# z^+jGb2*Yh0o$&KalM%B+z~~d3_uxgnn~o`}$vg zd2lZ|G#MN!Ut#suPV=nqj$A01B@sfz2HMXSgb3}6BhOlbj<+I|W5V0Br*>N@;n+$` zh-a)2pHF?S@t#a?#AcL=-HIAKc+ermfUMzGV^91>&4iqz^uIwnM9=T{4>cI?wuJ=7 zG5>uo0uB4QeZ(nV`O)#~r9l6$y?wefr;zoBODDbWJ|@|6Mls9|tRFD;Q+hxMphl=l zhet9oGckU)&RR&F^J$d+-cJMu*V=0Q=u5VkRr3(lxjF*!V;^*$GtfHVbB$u^7Pj+! zsbl7CdTqTvuV6xE%;4DlAvcYqXiE(GW^o#@+x40uMgDWYqhM{fTmEJZ?e4h^iYL>L?({X$%>{) z+9aE1M~!XG6x{xOH{7!zG1#7u@^r=Na^3Xu!@Q~SLRL8vs^}TK&aO20@rXnH);2ehsGNWaXuxMX@h@0jVx|h_OsIV<#N@C|#;I0qagZ)< z&GlqlqZsGB0r|u!+Ddwp%Z-$^LIm zvsd22JIUKf?xp zYCC~3O2%P6b2~&bj>JsmNm^xl8yrTBw6O~;m6st~r zFx3>L5hB59fCj9}&cgAohwFjZJIM*joi{t=cnct6jv5QKN5E zYwyrj?NY6x6xG^F?Ny^{RTZUtpML&_Z+?Ap?>+aNd!BoqGhS!!>@2dg6{Ez8|94n8 zsurw+hErsErrU(3_(L9CLB1EE^O?5wmiuh?Y>XErrZ)7-ASf!IcYvDJzc@qxJR0bs za3v<>jVwtdYWj)cmXAWF4kAzKAtc!NsCu~59Ja_=w~3!gn4-?bhdzFEo>AbPJrj>C zx=d+<6;N z^#MD^7pC4&i@LSf`@JZ%bl5@TI5YoPb!k&|6W#r}Go`LFrSPTaZWuRCFx8Wr^hfS= zd70`gSoNo2(qNR9DtRJzUm=tnzihNoR7BOIg58sA`uanmaEfiRw4})c zKZ*E3D`i(0ICcWW!p%x(I==mp7BWS|GD5*+&;{qU=kgW<4Vr*guZc~O%~psjJN;Ec@=Q-L%xTKz*9> zQ5b@&`=R(YU*{~Tc>895(FRJ5(F2-}ro4iNiJF3wH!hSsUmAXL9xXGJ;(Qrs`W$*2 z37D4>CPv{u;Q3D4sE{FB`@!Y&MIo7S>YL2vZ7Ld-h@#pr+Fp}0;l2s#39mP%#o18= za-wF}eJfJt1{AD7S6PDbIR@S1J6VjES@{5FL8Q18o8S) zTq)^)Dr+_W+x~6%aTrGSVD^o4aUA6_bVF*AZ{*1PJ@1EYB2cZIAeDmD#6l-~sx0ZT z><)kd)m^<}^pjgnMdiU>8!J;mRY%!8Rb02l*Ws`ospE{_+*-?Gr*Cn!^ddAPNfL0& zCp?)776EcSxo=dZj!UcADxXXwL7t-*0;d;g+*fH62^>e9tJ!4&2$hprUMTm*JqLf-cc{8^N5$Mn-sqYLX#Z*plj1vBk@@yvcR@J z4blbjOR27&_v7EcLVR2w*!gY51>_U{%iROp@oh_LHt!64@ZzJwm-H+r07;Mp)a3h( z3!SZG&@5{77Z76#kW^*paAJ~yz9yRdy?p(y^kkN!kOeHL*!fVqkkD|6Aqd1G^KkTu zMS9HARhL_=%Jgm==~Lru0mZWMd3Hc>$qfB@x}QntX_X#Sv?62Yz}txQDODqq9ls3M zW@Yr#Io91_9$mIEDAZMb+$Qw|D)qJm2m38bC!te5CS$G^=CSoDx!##BHhE7!YJ}NE z-H0C2&8odTN)Q_8D$+)hsR*|R~j}l`R1f8Ex_t! z(5hsY$kpJn+&lR$%Jdke_-wn(EvKT*3^BT;$Ml~de^6Vm(^Wm+UoBs_V_p2VTrwQG z=P3`gK;rSac7T=f;NEs%JRSgN=mO0|8xGX!_v({PkVHQoa)tXz+vHKHAUIIN zK`hgn7&eTNX9d~)TDHcGXq{9%yi(T=0;|`vt@oz<;>9agtR#cj&E1A&gyJe#ELMIN z^_9XYy1XVo+zGi7vz_%TM?huc3iz`Jt_5bqFfuQoY)ZpX7aK*J@o?++C-ylVb$7Wn zD_MX@hI#6H7%vP1^3ZPYli!ykm?5FLaRm-V7IfZOhQuPMj3CA8+a~hP2KjdsiFy(P z1kAj zX80&3E;*b)yA^J+ny@x znMdXxnRk5Z(i}x{6|>8=TBgtkEJD`vkN=ayHtI`E)|BgOAZJ=tP`-PK3GNRS~wcjM31lM}le6uY$o$bp0xn)y-O3**} zqAvj*ghIL-cj;lNJ{~zj_VZXeKlX0wl>+v@Wa-%w-W1Ta*Vi_W+H2f|tS#j2UpcFN z@A&qgeMZCHnes?=wj}djvhMu}SA9yzP^<1IPd`l?2f>fB^|R?UL)|x^@nrW?7(Lqt zAHH}x*c-1ce!Qrs=C_fm7e7 zU2^&S_Jm32N)!LpnEyChm=5dQu4g&cenu0cJ4aQ%hJ1XlDfs%D7_RTjqXM92^*13_ z+r2r=CG~RNVUS+k5`oLr>JVSz>q{mL_j+%G5@`li6J`=w>)i~mjA zfA|`NTlL!At9KEiv-JNR2W;m#=~@8bV+mUwe&HvSg>%-4lhYmdDpj%*ro22$r}z zg?66gT3kOlVaY}d%8kmRR0n}kRSsG9AbC-12gkRZS|NI}0W?;EMNR{sC*Vt$MPtYp z52=lI?IPbs>rpzf+X|$9{+Db~6Ads+w;cOXi2Ow;?x`L85i?YlEHyrB^fpmCZriCa zbMsKY-Hs7gmtJ`!qnZ@#){RpV9$jhM52|g5mi+uOk(N1Ug@^Tcr>2@b1P1`#! ztAZ@Ht0qw;HMVc=K&QSZ`%bV=!cP7O9ZR`$wfK_xaKZUid5Os{2RoQ~gdcwU^)(lD z12LxojuIQ@xM$(f3r0s|r=5lOeswwh)(}}03d1935TZRC-9}nphU(;sqy%&pwz^|p zJdD0%x2h7m*Ca`uLVnA+QVhwB^Si~emg?LcNZte zuU_vNzh6f2&F_PruVnFvG1xDO0h3U(|0JCQ6<#vV&A1?Sf0H`iqC&&>RiA)UH`8lE>!PSs&0csnkPD)%2&3 zgH>EDFQ#dLFFIe@PS(A=^fl+S6eU-Fc4y-DjG}_VSAmQt59iHkmUgoTD~fSCbg)QI z@9ZxU6A{wrhy!*%>0b>sdzj%d_!w!zZ zRSt}T8SVO~{FP;4XE{BY2v(|T)_nwItMz=2wT6IKz-4)7+LF7$tq$+s6tO;kyqV5t zb|iYK(O29ls?7=bc$dm3VgvF-g8GRMF^C$zGbPU6?yTnM2@p}dI(d&Zb?as}(YPj< z?|Siw&9)se24hLGr0har%L>!1RgW9&8#?hJpVrWJV+iEx0jg^sKA~3Cq06oR3WXHo z;Qn3F{pKA0NM2kz$gX-ta*EsN*0fcCCE^-)i;597*pW6;>MKGNHC0dk-*IES--F*; zr`}q_3d5hRdOZ`_v>8>1^#%O_Ha|NN=vtc<1*=I;Vp*@3W;mz6~tr4ziI(0qm7M&sH4 z)t;c#$Ag6{9XdSOY&nS$)q{HqU$^krH}kjBw?DoFgS%sPVWc&QEgmCr}dQs%JK>y7-cD#}8qmpIR9xoqwhYLyjRPd~adZ`9M(rYQq--D)?r`HvyYXgkDh6qZ zRH7M5&d8hcBjLCSQT1J97IE7nO>A9!Vt$~3tz;HlPr1g(vC}oC5w?&NIw=A}D*(<4^i3>kWZrk_hxU1~Yso)4Jb9>z<(pmk*ZwN8BtY zP1Dm=k&I$uZf1x{00k`_2ten}spf-@9~#_%C~+q7frrWYzlnZwRJ*^Mt?B92T$-qt zdEQeex)`~jmNOb{-ca&9OCaIEw2TaZfb)Ko^2~h6Oz$newuzPVR)~X<$VV@Xr?Y`X zkZOt&-*VbIx3P0^j>y*>i=-4=ElNRey)0iRoX)yc#f(+q|bW9jbfR6gg0# zvnVxbko7s)C($~hK3$l`jxWu=A@8JX>FUuwh3-Y@oA&lF+l5IHdVc`ZA!qaKcckiL z-6z{po(EU9I=JfJIrrbN=&4uMK9OuF4)}#(gW0-(4yq@G+&f(ceF>$UuRs+UZmw8&}r!tN=WXxo_=y>f7VX7r$t z4;uf}GCd)2XqBOg#3abgbH{b493e8iV8i_l+_Bjq(Q}c#{z0XRov^9Cm5?k;9LP1l zt1*HI5~Qg+lieNVy%qRF^SqKG50#^BzX=6`Il`~pg)hFE@qS!y5V|cLmQFW_u2yWH ze-WZ0Zg~L|=<-&Z;1WgzTHrPdc$ihF!t-;5=-2yMrkUp%k9#nggc5JAqF*_{?jlY87q!Rht)pNgIn(wf98`wZ<4HboLnLEXh?l zX&0wvTXbG31-RF~X0KW&86UQEJN}djxwKKe$=l)(H+!tV?xnH7TZX}froi`jbL5d7 ztHTtXr#EPljW@x^Zvd>tW{5<1SyW4UOfBfz8E1Y%iQ;WBWxH18s4LenwGmvqTKL!$ zGK+MWZnBfNseXpelhxdwXnP(%Jd3Ej+n~Q02aR#s)3kq?aGwwz=b0F@s>g&E z%%};(5BEC0JfVZeGp{7vv<@|rOIWmb;lXZ5yk1rDwc)PZI#^K9rT=JMC39lMPs8x^ z@zVKQwyB#Uqh;vB?&>ACtxpY@-LlFS-{(FTP9qoHeQUkf)Rh^2DnF*}#cpvxZTw?s zCyGy5Rp3atwbrrG+^%C6LcHoZ%W5gP619q*z~p@XMHtXNU?f|hc$k~E~8^EF3F}! zL_PPbUk)uQa#UcEExY$ZvEd=VuI_#@dtA1p_ z!-vZ2$4XM{wZOW(iu?Dhf`kj6ARpFz-c`R)E>T`D&`Yw8#P{SP zMhTcLP=mZoi(1W-pEVhYu-0$b(;-K}1Q+A)ls-**rzSmDlh+w!PJzOQu>YKTQ|_5e z^TN7>Ev%m!p%mnME}ZJQ+L#_^fw zBb=$|tl*r10%68s?6BG2K%G}JPxX&%0p7esO*ly_08YW_sDi4;3>OOtO!W8a>|PaP z+-Hm)Sn%&;IBfH-9G?Nk)2B0EG)Mg5NZ!xbH__M2G^cIf)!u+-NtNaj{5AMIDEjpu z!zo1Sg|>b;JC(zr@#!ma-FR*ByTZR;Rx;deNRR zuIiNKCnl|#Eql;HF_Tl=DI5~ky;oc3^7_|Vo+4xw^gQn66i4I>1MAOdSOv_`>;;^{ z*I8=#YpMy|Br+&X^z`Gah2{g_;-Vr!tBfw;vzSkt{pW#4^b)nMU#*nJL$}L0Dr`zC zyZ|DYYPt4fMEmgbCrH@hhpHD@#nJ1UT5RA_3eF39AHxN3Wpa(o)*+V|1PRIW$EFfZ$Qsg%Eu&Itat&H%W_$m|+eHfm>27_TqBgCVxdA(3ej6SYf+o`EAQgS4JqpqJ-A*AN5@ zQf_y#!<-~|rP`h4k#O?faV>qlkDg;rh-UZ?g|n5R0EwY(oeYiA0fSlHUeNRRV{BOY4eeb) zT^Nkgqd{Mc7#M~r0zg8MFhK)-1+m!z7JH^wVrKc0YLyGa@v#WqTx!PyP!DL!v@g)< zz}3b##)Qn!;@r!?TVe)?U#n#-c&8#6H8<2wUYl+y{TJ z-QtsT2d3@3}*z{WnLv(SLZPlm05H3ZAcJ zs8NAIZ%C>od=FK=y~~{AH?5I7m21C*TE6Fadi8|o@>WP1`v({2Tse6?sZfHmyXLQ5 zo!kw5{gzm;gT`GsGlD$e6F!t{TXVkIxo;V4N0wzx#H4g<-rLQq)VSSa)j${gNSv(Q zlMVJ?e(B*V1W8r_$0mPIe*a3JdX0%d8ZxOe^MPHBFsVUiMpM+Y@>8f99<`EiXiuBu z^Lg`#vRd$x4n}dQlhw1iMwoyyjwk8&2Mo*a{=8xUQKGP_mP8uHWVAjw2877XF zM8d%_6BJ|;;g4{qA&Ht-q!J}4;Ua7W!D00sR@`8rowZ*)7X;_WndW}G(oXz%mWp00 zzoNfOb)2OqP~3l2_^HfDQR9+@3LYc{iCt@MAwJ9oB9P6WQ!d*3O1D|61(WfoTTer(W}J6rssmdMAmVaag+2WHc!;R$fnz&bS}#r zz3PE3138}&cJ1!wUC3BCEAB*;sp*3)AJ40y?=rKt%JvmN1ar!bUuK!AH}$7(meYFj z& zB1u35bCN2-v5hGOL8_(9u=wC);qk?G`pW1@=*dB`bBjwZSmbgp>eWF?-oe?^pJ5T| zAV|EZ-o;`Lq11Lqypw#q^VHWY715+-Pz-pL{i~!E=YNJ>Wgtl4P<&Zh9KW`-6z3ni zqRlJe8{AIMEt$>vhh#_j-R{K5XQH&C-d(;7atmD_e~so02-=-hyE+@;1HULql>DnE ztDS5X0v~$IECa>AS4vZ9tUpZ)^ND*MT0Cd>CT|)PsZ-fo0UFb1E%{QSB-%erjlFMD zO3v$d`nj#24nR-rQ+}n+xopu=f4gN!A#+6rg@%GgGJ|59hsUha=Z;lUU12(J z6z2_v(OPg6-dB|34T#-_!+BAA&cvKANEVbqoGU~kaie0bT+~5siR-h$-&NpHdPffO zR4e`ih0KCou?hc37|iZ%I8%X~B7wp+n16ptB|x{#^}55hsvA1!{XfLT!v{T8j4On` zZl)ACG@f88$4O85;md~s?O5+lNnF4F@-@SruJ&OJmN=Md4lYFAV7BOw&7IkKiiD#` zQQe&$SduJIxF+pMyZhPV8$z@A;`+ceFMilhvRuinG+4l`G!fM|km*<6EdSN=dcSp> zC6n0ftl4`#%Akh`q=AcJaHULNx2pYgu_k9w>OA$4vRpV96!pa^V-+|nLgMcWogVVH z&6qKwC`(AQkBXq9lvAYJ@kM^^?jIb=?*XClUJSpyaTEf{fDw^qBHuFEV(Is6Kd*hO z4B$zlC{W!sf9V%!OX!WQnVEoxY`Xq%SEV&YB%A?+>Ne(=)HUnJb4b@~qsSw7=a)}r z#HV!QySW!b{;q`jM)u|>-8Fy$K;kiae(C&OxooVSr5`Y83loke#_(RLfXwwO5-=|> zrv$-Sb>BwAuw2Q@wsnlo$RgtsHsIuX&%OxH?qP zI+o1(?w7dwv%-yA0Q7HlPVHD*{*K5S5nA*s!VFL@n11=9#PuB)jpHohylU@;ABGbE z(auEI&RWx`r=_Q+Y%%NU7DMJG8Oq5F*QtU8LqWZGB{-CF&1vX4!GwR3P-S%HSj;C( z0V&g}r2hv^3UP#!HL}5zvgNzBZ z^fWx26dQV9dAu2ZkA<-~PDOD}`*npV0((!Z`@a!5B)p5GO*E69 zLs%hWUE4eMs+m&^PW7!W1k)vQsv4XzZ0F8VHvglU1Og7FzLN!a&U@>2x5p`$G_~r% z{Jjf|R`=lGp!hp+vmp7>U^J9m*RD*fWRk;3^c`92cXnWQ1K`ycl~6M_?B1Ev{fd(p*&N=#KL-AHCv*eIdnzzMx8jT?Jht;vSA0 z=@|u_uJ}Ck=*i9u-g?M9$M{%%#SzrjEJY;*v#TYAfJaxuSFjai5x9`X&CzXtSiFWD z(XX+2vsDZLYTcEja3IXDQX)hBgQlX0i<9O`4#JCmL?}(24l-r({GyoYi2>5 z0z^zR(zN1B{L3dv;`GL>PpAI<(fqxUp75W2(|DqCTfF?;&pC^jN}d$Nv-MkAZavZG zERo#7>{Q~6L@{U{`!V@}yaxyZCMI}sxco42HJ*U6WF{CgH(rYzPRSd#x@9@Ash?v1 zZdt-ukr|@V%`-BZ3>TNVpdI}%1BOFOWM!;V`A?#5Y;ZMtolZRByL`gH{h+6G+!I}D zmLr^Zu&=y_r4c3m$T*t-3&q#hgc+Bbmy!Wp3;1w~FrDqk^+txrlslPRS%i4L%QFdW z<%7Lb4?^Li0AU14{bvma!}u62iqjgY`{qjZ%!Jrezg;sVg0GbdXl#&1b+wz7zgA)t z|AsNbr~Y#(hM9oL8~z;#g%2-jEA~2U)*w36-k+zMAWWFmt0CVV;e~;><}pp0v5UhECe_9E59zmFakcyln~SPJ@qQy?zF#P%uO$>eQ7L0 zNA?ER#Uuq=JISy;G0A#~n7{LY98B`d zryvYSTK^gnw@k+eb^t{=U!JaIT%9k3EajkNAD4BA4F@hoZ5D1VDV%+S;$(enPBfENx zq#h|00%y9vsc3;g$K-k3uts87D}Y8Jgh$NdFd`PzU1p6Cu&y_xEhkHf9nHxE1dYTY z5g1|O)>qo7cYCt;u(nl5Xq*ec{;_hOf({Gc*7w)RR@^9+%YKTPwg9PN6l_Jm2x_oH zyPF(PNG6RjHJeCg5}D?B78!-0<0D&M|dc(t83!2qnVz;Zjp)Oe(Y^6ng`ZoIX&#@QH4N?(+gu#g_Q(_s_ z(b)xw&zr7nOfq)vAImE09R$ah-XZGxZG~i?WhbG(N@zGRg{tfTWvO%Im>|1g$MB9Eze! z&(r{U17l;zgb|`^ej&uWNM@A!6x_(tD1~+AHqTwE*p%3-;{WxqKvH4yf!;04m|N8t z_XHPb9K8(1YNpzQ*!ubW=Tq6P?LA9uBIOzx|rk1bWo)+{A} zl4%I=tsBPmRG$Am&_PQ>NC9#&seTsfI7G1Zy_`wxs1@;yZQrN*;I3qoDEPF%TVD$^ z4!M}jOJoEyp}+#TU-tq7kKi&w4jusawm?j`@`4ItEw$C%vl1UOcmg7nHxS|!17o;P z=OuzK87P;J>c3?{E#2su%9_yXcr?iY(5V8X=!R)9#foYDJk?;*G_g`P(wwQhoeDq) zy7sH(j<}wTMEASn4tb8&@_1PKv));}d{2ETZ)E%ifADYry2^0sXPMeK1NQ_!6t~?+ zmK<;CxVSzqBhQ?a9J-qFQ5F07A<;AX8$+BXyvEQ z0u(|5{YMFTS#5gt4c~-kc!@+zCAAh!*EF~nxK=?$_3N*v`}FKb#mzXwd$E};1XzqE zaIU({vm?qQEo9%8L=W$fXCviTrH2qspo)KE@W@#8+QYu-Vzt(+M;>&yB6u~HD<^G{ z!a#o|FrYwG+^=p?7qgzHZGW1fcwWLlauF(8gI6BOpa;rUfo}(pR`1U=&=e)IM_rM$ zj2VVIv=4HA4hQw4Ss`6q0JRM2DM*nCWLWkWjhret305V%JAv8I^PO_;Z$o;L#)F~h zUKNH^HP8YeSCG8!I5Q`nb!aoky}Qw#q%aH->2Q7&s(zI)O!Zgq@2BnYiN-A+iE|N$ h1`5#s-!FbBnnFUgIOor=<@SH8=xdv3)oD1y{vVbgu_*um literal 0 HcmV?d00001 diff --git a/level_2/api.py b/level_2/api.py index 083e87e9d..8ddc33686 100644 --- a/level_2/api.py +++ b/level_2/api.py @@ -23,7 +23,11 @@ load_dotenv() OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "") app = FastAPI(debug=True) +from auth.cognito.JWTBearer import JWTBearer +from auth.auth import jwks +auth = JWTBearer(jwks) +from fastapi import Depends class ImageResponse(BaseModel): success: bool message: str From 27df32e421eeaca6162bf1e4b086948f0fe7b651 Mon Sep 17 00:00:00 2001 From: Vasilije <8619304+Vasilije1990@users.noreply.github.com> Date: Mon, 4 Sep 2023 20:51:15 +0200 Subject: [PATCH 10/10] update flow for the docker image --- .github/workflows/cd_prd.yaml | 68 +++++++++++++++++------------------ 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/.github/workflows/cd_prd.yaml b/.github/workflows/cd_prd.yaml index 97b943ad2..5b7f0247a 100644 --- a/.github/workflows/cd_prd.yaml +++ b/.github/workflows/cd_prd.yaml @@ -23,38 +23,38 @@ jobs: steps: - name: Take code from repo uses: actions/checkout@v3 - - name: Set environment variable for stage - id: set-env - run: | - if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then - echo "STAGE=prd" >> $GITHUB_ENV - echo "::set-output name=stage::prd" - else - echo "STAGE=dev" >> $GITHUB_ENV - echo "::set-output name=stage::dev" - fi - - name: Use output - run: echo "The stage is ${{ steps.set-env.outputs.stage }}" - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v1 - with: - role-to-assume: ${{ env.AWS_ROLE_DEV_CICD }} - aws-region: eu-west-1 - - name: Create Docker image and push to ECR - uses: ./.github/actions/image_builder - id: generate-promethai-docker - with: - stage: prd - aws_account_id: ${{ env.AWS_ACCOUNT_ID_DEV }} - should_publish: true - ecr_image_repo_name: promethai-prd-backend-promethai-backend-memory - dockerfile_location: ./level_2 - - name: Export Docker image tag - id: export-promethai-docker-tag - run: | - export DOCKER_TAG=$(cat /tmp/.DOCKER_IMAGE_VERSION) - echo "Docker tag is: $DOCKER_TAG" - echo "promethai_docker_tag_backend=$DOCKER_TAG" >> $GITHUB_OUTPUT +# - name: Set environment variable for stage +# id: set-env +# run: | +# if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then +# echo "STAGE=prd" >> $GITHUB_ENV +# echo "::set-output name=stage::prd" +# else +# echo "STAGE=dev" >> $GITHUB_ENV +# echo "::set-output name=stage::dev" +# fi +# - name: Use output +# run: echo "The stage is ${{ steps.set-env.outputs.stage }}" +# - name: Configure AWS credentials +# uses: aws-actions/configure-aws-credentials@v1 +# with: +# role-to-assume: ${{ env.AWS_ROLE_DEV_CICD }} +# aws-region: eu-west-1 +# - name: Create Docker image and push to ECR +# uses: ./.github/actions/image_builder +# id: generate-promethai-docker +# with: +# stage: prd +# aws_account_id: ${{ env.AWS_ACCOUNT_ID_DEV }} +# should_publish: true +# ecr_image_repo_name: promethai-prd-backend-promethai-backend-memory +# dockerfile_location: ./level_2 +# - name: Export Docker image tag +# id: export-promethai-docker-tag +# run: | +# export DOCKER_TAG=$(cat /tmp/.DOCKER_IMAGE_VERSION) +# echo "Docker tag is: $DOCKER_TAG" +# echo "promethai_docker_tag_backend=$DOCKER_TAG" >> $GITHUB_OUTPUT # - name: Create Tag and Release # runs-on: ubuntu-latest @@ -78,8 +78,8 @@ jobs: # with: # tag_name: ${{ steps.bump_version_and_push_tag.outputs.tag }} # release_name: Release ${{ steps.bump_version_and_push_tag.outputs.tag }} - outputs: - promethai_docker_tag_backend: ${{ steps.export-promethai-docker-tag.outputs.promethai_docker_tag_backend }} +# outputs: +# promethai_docker_tag_backend: ${{ steps.export-promethai-docker-tag.outputs.promethai_docker_tag_backend }} # apply_tf: # name: Trigger terraform apply workflow