From 016e7580ff00f1fa67248818813a062b845ae1fa Mon Sep 17 00:00:00 2001 From: SWtheWhite Date: Wed, 8 Nov 2023 12:01:21 +0900 Subject: [PATCH 01/28] refactor: all code refactored(divide and unite) --- CamDevice/main.py | 8 + CamDevice/utils/image_creater/cv2.py | 54 + CamDevice/utils/image_creater/pi.py | 31 + CamDevice/utils/image_sender.py | 47 + Daily_Accessor.txt | 0 Data_Folder/Daily_Accessor.txt | 0 Data_Folder/Today_Accessor.txt | 0 Data_Folder/nCnt.txt | 0 Makerspace.py | 74 -- SSCCounter.py | 57 - SSCCounter_Re/index.html | 33 - SSCCounter_Re/main.css | 26 - WebServer/__pycache__/main.cpython-310.pyc | Bin 0 -> 2513 bytes WebServer/__pycache__/yolo.cpython-310.pyc | Bin 0 -> 2614 bytes WebServer/main.py | 76 ++ WebServer/static/css/contribute.css | 764 ++++++++++++ WebServer/static/css/contribute2 | 1080 +++++++++++++++++ .../static}/css/main(Ver_2).css | 0 {static => WebServer/static}/css/main.css | 0 {static => WebServer/static}/css/new.css | 0 .../static}/images/0 people.png | Bin .../static}/images/1 people.png | Bin .../static}/images/2 people.png | Bin .../static}/images/3 people.png | Bin .../static}/images/3analysis.jpg | Bin .../static}/images/4 people.png | Bin .../static}/images/5 people.png | Bin .../static}/images/6 people.png | Bin .../static}/images/Kakao_lion.png | Bin .../static}/images/SSCC_logo.png | Bin .../static}/images/SSCC_logo_rev.png | Bin .../static}/images/analysis.jpg | Bin .../static}/images/analysis_outdoor.jpg | Bin .../static}/images/discord.png | Bin .../static}/images/facebook.png | Bin .../static}/images/humidity.png | Bin .../static}/images/instagram.png | Bin {static => WebServer/static}/images/kakao.png | Bin {static => WebServer/static}/images/logo.png | Bin .../static}/images/notion.png | Bin .../static}/images/people.png | Bin .../static}/images/photo_out.jpg | Bin .../static}/images/temperature.png | Bin WebServer/temp/analysis.jpg | Bin 0 -> 120892 bytes photo.jpg => WebServer/temp/photo.jpg | Bin WebServer/templates/Contribute.html | 41 + {templates => WebServer/templates}/docs.html | 0 {templates => WebServer/templates}/image.html | 0 .../templates}/index(Ver_8).html | 21 +- .../templates}/manager.html | 0 {templates => WebServer/templates}/new.html | 0 {templates => WebServer/templates}/test.html | 0 .../count/__pycache__/yolo.cpython-310.pyc | Bin 0 -> 2717 bytes WebServer/utils/count/yolo.py | 92 ++ WebServer/utils/count/yolo_test.py | 17 + .../yolo_data}/yolov3.cfg | 0 .../yolo_data}/yolov3.md | 0 Yolo_Analysis.py | 112 -- __pycache__/Makerspace.cpython-310.pyc | Bin 2385 -> 0 bytes __pycache__/Yolov3_Analysis.cpython-39.pyc | Bin 1841 -> 0 bytes __pycache__/nCnt_Server.cpython-310.pyc | Bin 2545 -> 0 bytes __pycache__/nCnt_Server.cpython-39.pyc | Bin 1811 -> 0 bytes nCnt.txt | 1 - nCnt_Server.py | 81 -- templates/index(Ver_8).html | 116 -- 65 files changed, 2215 insertions(+), 516 deletions(-) create mode 100644 CamDevice/main.py create mode 100644 CamDevice/utils/image_creater/cv2.py create mode 100644 CamDevice/utils/image_creater/pi.py create mode 100644 CamDevice/utils/image_sender.py delete mode 100644 Daily_Accessor.txt delete mode 100644 Data_Folder/Daily_Accessor.txt delete mode 100644 Data_Folder/Today_Accessor.txt delete mode 100644 Data_Folder/nCnt.txt delete mode 100644 Makerspace.py delete mode 100644 SSCCounter.py delete mode 100644 SSCCounter_Re/index.html delete mode 100644 SSCCounter_Re/main.css create mode 100644 WebServer/__pycache__/main.cpython-310.pyc create mode 100644 WebServer/__pycache__/yolo.cpython-310.pyc create mode 100644 WebServer/main.py create mode 100644 WebServer/static/css/contribute.css create mode 100644 WebServer/static/css/contribute2 rename {static => WebServer/static}/css/main(Ver_2).css (100%) rename {static => WebServer/static}/css/main.css (100%) rename {static => WebServer/static}/css/new.css (100%) rename {static => WebServer/static}/images/0 people.png (100%) rename {static => WebServer/static}/images/1 people.png (100%) rename {static => WebServer/static}/images/2 people.png (100%) rename {static => WebServer/static}/images/3 people.png (100%) rename {static => WebServer/static}/images/3analysis.jpg (100%) rename {static => WebServer/static}/images/4 people.png (100%) rename {static => WebServer/static}/images/5 people.png (100%) rename {static => WebServer/static}/images/6 people.png (100%) rename {static => WebServer/static}/images/Kakao_lion.png (100%) rename {static => WebServer/static}/images/SSCC_logo.png (100%) rename {static => WebServer/static}/images/SSCC_logo_rev.png (100%) rename {static => WebServer/static}/images/analysis.jpg (100%) rename {static => WebServer/static}/images/analysis_outdoor.jpg (100%) rename {static => WebServer/static}/images/discord.png (100%) rename {static => WebServer/static}/images/facebook.png (100%) rename {static => WebServer/static}/images/humidity.png (100%) rename {static => WebServer/static}/images/instagram.png (100%) rename {static => WebServer/static}/images/kakao.png (100%) rename {static => WebServer/static}/images/logo.png (100%) rename {static => WebServer/static}/images/notion.png (100%) rename {static => WebServer/static}/images/people.png (100%) rename {static => WebServer/static}/images/photo_out.jpg (100%) rename {static => WebServer/static}/images/temperature.png (100%) create mode 100644 WebServer/temp/analysis.jpg rename photo.jpg => WebServer/temp/photo.jpg (100%) create mode 100644 WebServer/templates/Contribute.html rename {templates => WebServer/templates}/docs.html (100%) rename {templates => WebServer/templates}/image.html (100%) rename {SSCCounter_Re => WebServer/templates}/index(Ver_8).html (82%) rename {templates => WebServer/templates}/manager.html (100%) rename {templates => WebServer/templates}/new.html (100%) rename {templates => WebServer/templates}/test.html (100%) create mode 100644 WebServer/utils/count/__pycache__/yolo.cpython-310.pyc create mode 100644 WebServer/utils/count/yolo.py create mode 100644 WebServer/utils/count/yolo_test.py rename {Yolo_Folder => WebServer/yolo_data}/yolov3.cfg (100%) rename {Yolo_Folder => WebServer/yolo_data}/yolov3.md (100%) delete mode 100644 Yolo_Analysis.py delete mode 100644 __pycache__/Makerspace.cpython-310.pyc delete mode 100644 __pycache__/Yolov3_Analysis.cpython-39.pyc delete mode 100644 __pycache__/nCnt_Server.cpython-310.pyc delete mode 100644 __pycache__/nCnt_Server.cpython-39.pyc delete mode 100644 nCnt.txt delete mode 100644 nCnt_Server.py delete mode 100644 templates/index(Ver_8).html diff --git a/CamDevice/main.py b/CamDevice/main.py new file mode 100644 index 0000000..60ea185 --- /dev/null +++ b/CamDevice/main.py @@ -0,0 +1,8 @@ +from utils.image_sender import ImageSender + +if __name__ == "__main__": + # 클래스 인스턴스 생성 및 실행 + upload_url = 'http://localhost:8000/uploadfile' + upload_filename = 'photo.jpg' + image_sender = ImageSender(upload_url, upload_filename, "cv") + image_sender.run() diff --git a/CamDevice/utils/image_creater/cv2.py b/CamDevice/utils/image_creater/cv2.py new file mode 100644 index 0000000..1c9be8d --- /dev/null +++ b/CamDevice/utils/image_creater/cv2.py @@ -0,0 +1,54 @@ +import cv2 + + +class CvImageCreater: + def __init__(self, ksize=12): + self.ksize = ksize + self.blur_enabled = True + + def blurImage(self, frame, x, y, w, h): + roi = frame[y:y+h, x:x+w] + roi = cv2.blur(roi, (self.ksize, self.ksize)) + frame[y:y+h, x:x+w] = roi + + def toggleBlur(self): + self.blur_enabled = not self.blur_enabled + + def createImage(self): + cam = cv2.VideoCapture(0) + + if not cam.isOpened(): + print('No camera!') + return + + try: + ret, frame = cam.read() + if not ret: + print('No frame') + return + + key = cv2.waitKey(1) + print(key) + print(self.blur_enabled) + + if key == -1 and self.blur_enabled: + x, y, w, h = 450, 400, 80, 10 + for _ in range(8): + self.blurImage(frame, x, y, w, h) + x += 3 + y += h + self.blurImage(frame, 390, 460, 40, 20) + + fliped = cv2.flip(frame, -1) + cv2.imwrite('photo.jpg', fliped) + + except KeyboardInterrupt: + print('Image creation interrupted') + + finally: + cam.release() + + +if __name__ == "__main__": + image_creater = CvImageCreater() + image_creater.createImage() diff --git a/CamDevice/utils/image_creater/pi.py b/CamDevice/utils/image_creater/pi.py new file mode 100644 index 0000000..8218517 --- /dev/null +++ b/CamDevice/utils/image_creater/pi.py @@ -0,0 +1,31 @@ +from picamera2 import Picamera2 +import time + +import cv2 + + +class PiImageCreater: + def __init__(self, ksize, cam): + self.ksize = ksize + self.cam = cam + + def blurImage(self, frame, x, y, w, h): + roi = frame[y:y+h, x:x+w] + roi = cv2.blur(roi, (self.ksize, self.ksize)) + frame[y:y+h, x:x+w] = roi + + def toggleBlur(self): + self.blur_enabled = not self.blur_enabled + + def createImage(self): + try: + self.cam.capture_file("photo.jpg") + except KeyboardInterrupt: + print('Image creation interrupted') + + +if __name__ == "__main__": + picam2 = Picamera2() + picam2.start() + image_creater = PiImageCreater(12, picam2) + image_creater.createImage() diff --git a/CamDevice/utils/image_sender.py b/CamDevice/utils/image_sender.py new file mode 100644 index 0000000..72fd955 --- /dev/null +++ b/CamDevice/utils/image_sender.py @@ -0,0 +1,47 @@ +import requests +import time +from datetime import datetime + +from utils.image_creater.cv2 import CvImageCreater +from utils.image_creater.pi import PiImageCreater + + +class ImageSender: + def __init__(self, upload_url, upload_filename, camera_type): + self.upload_url = upload_url + self.upload_filename = upload_filename + if camera_type == "cv": + self.image_creater = CvImageCreater() + else: + self.image_creater = PiImageCreater() + + def send_img(self): + try: + # 이미지 파일을 열고 서버에 업로드 + with open(self.upload_filename, 'rb') as f: + r = requests.post(self.upload_url, files={'file': f}) + return r + except Exception as e: + print(f"Error sending image: {e}") + return None + + def toggle_blur(self): + self.image_creater.toggleBlur() # ImageCreater의 블러 토글 호출 + + def run(self): + print("ImageSender.py Activate") + while True: + try: + # 이미지 생성 + self.image_creater.createImage() + + # 이미지 업로드 시도 + r = self.send_img() + if r is not None: + print(datetime.now(), r.text) + + # 2초 대기 + time.sleep(2) + except KeyboardInterrupt: + print("ImageSender.py 종료") + break diff --git a/Daily_Accessor.txt b/Daily_Accessor.txt deleted file mode 100644 index e69de29..0000000 diff --git a/Data_Folder/Daily_Accessor.txt b/Data_Folder/Daily_Accessor.txt deleted file mode 100644 index e69de29..0000000 diff --git a/Data_Folder/Today_Accessor.txt b/Data_Folder/Today_Accessor.txt deleted file mode 100644 index e69de29..0000000 diff --git a/Data_Folder/nCnt.txt b/Data_Folder/nCnt.txt deleted file mode 100644 index e69de29..0000000 diff --git a/Makerspace.py b/Makerspace.py deleted file mode 100644 index dfd04d0..0000000 --- a/Makerspace.py +++ /dev/null @@ -1,74 +0,0 @@ -#  -*- coding: utf-8 -*- -from fastapi import FastAPI, Request, File, UploadFile -from fastapi.responses import HTMLResponse -from fastapi.staticfiles import StaticFiles -from fastapi.templating import Jinja2Templates -from datetime import datetime - -app = FastAPI() - -# ============ Function ============ - -Accessor, Today= "NULL", "Restart" - -def Check(): - global ncnt_people, standard_time - with open("nCnt.txt", "r") as file: - for line in file.readlines(): - info_list = line.split("/") - ncnt_people = info_list[0] - standard_time = info_list[1] - -def Accessor_Count(): - if Today != datetime.now().date(): - with open("Daily_Accessor.txt", "a", encoding = "utf8") as Accessor_Report_File: - Accessor_Report_File.write("{0} / {1}명".format(Today, Accessor)) - Accessor = 0 - Today == datetime.now().date() - - Accessor += 1 - with open("Today_Accessor.txt", "w", encoding = "utf8") as report_file: - report_file.write("{0}/{1}".format(datetime.now(), Accessor)) - -# ============ Machine ============ - -app.mount("/static", StaticFiles(directory="static"), name="static") - -templates = Jinja2Templates(directory="templates") - -@app.get("/", response_class=HTMLResponse) -# , ncnt_people: str, current_time: str, standard_time: str): -async def Page(request: Request): - global ncnt_people, standard_time, temp, hum, lamp - Check() - Accessor_Count() - current_time = str(datetime.now() )[0:21] # 필요한 부분 가공 - print(current_time) - if int(ncnt_people) <= 6: - countable = 1 - else: - countable = 0 - # FastAPI로 new.html에 변수 값 전달 - return templates.TemplateResponse("index(Ver_8).html", {"request": request, "Accessor": Accessor, "People_Count": int(ncnt_people), "Countable": countable, "last_time": current_time, "get_time": current_time, "Get_Time": standard_time}) - -# @app.get("/Image", response_class=HTMLResponse) -# # , ncnt_people: str, current_time: str, standard_time: str): -# async def Page(request: Request): -# return templates.TemplateResponse("image.html", {"request": request}) - -@app.get("/nCnt") -async def nCnt(): - global ncnt_people, standard_time - Check() - Accessor_Count() - current_time = str(datetime.now() )[0:21] # 필요한 부분 가공 - print(ncnt_people) - return {"people_count": ncnt_people, "last_time": current_time, "get_time": standard_time} - -@app.post("/uploadfile/") -async def create_upload_file(file: UploadFile = File(...)): - contents = await file.read() - with open(file.filename, "wb") as f: - f.write(contents) - - return {"filename": file.filename} \ No newline at end of file diff --git a/SSCCounter.py b/SSCCounter.py deleted file mode 100644 index 267cc73..0000000 --- a/SSCCounter.py +++ /dev/null @@ -1,57 +0,0 @@ -import requests -import time -import cv2 -import numpy as np -from datetime import datetime - -url = 'http://114.71.48.94:80/uploadfile' -filename = 'photo.jpg' -ksize = 20 # 블러 처리에 사용할 커널 크기 - -def send_img(): - cap = cv2.VideoCapture(0) - if cap.isOpened(): - while True: - ret, frame = cap.read() - if ret: - if cv2.waitKey(1) == -1: - x,y,w,h = 390, 325, 80, 100 # 관심영역 선택 - roi = frame[y:y+h, x:x+w] # 관심영역 지정 - roi = cv2.blur(roi, (ksize, ksize)) # 블러(모자이크) 처리 - frame[y:y+h, x:x+w] = roi # 원본 이미지에 적용 - - x,y,w,h = 342, 390, 40, 70 # 관심영역 선택 - roi = frame[y:y+h, x:x+w] # 관심영역 지정 - roi = cv2.blur(roi, (ksize, ksize)) # 블러(모자이크) 처리 - frame[y:y+h, x:x+w] = roi # 원본 이미지에 적용 - - fliped = cv2.flip(frame, -1) - cv2.imwrite('photo.jpg', fliped) # 이미지 저장 - break - else: - print('no frame') - break - else: - print('no camera!') - cap.release() - img = "photo.jpg" # 이미지 경로 - - - with open(filename, 'rb') as f: - r = requests.post(url, files={'file': f}) - - print(datetime.now(),end=" ") - print(r.text,end="\n\n") - -send_img() -while True: - try: - send_img() - except: - print("{0} !Send Error!".format(datetime.now()), end = "\n\n") - #if datetime.now().second % 1 == 0: - # try: - # send_img() - # except: - # print("{0} !Send Error!".format(datetime.now()), end = "\n\n") - time.sleep(0.3) \ No newline at end of file diff --git a/SSCCounter_Re/index.html b/SSCCounter_Re/index.html deleted file mode 100644 index 81f4b82..0000000 --- a/SSCCounter_Re/index.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - 동방 출력 페이지 - - - - - - - - - -
-
-
- -
-
-

SSCCounter

-
-

-
-
- - \ No newline at end of file diff --git a/SSCCounter_Re/main.css b/SSCCounter_Re/main.css deleted file mode 100644 index fb484a9..0000000 --- a/SSCCounter_Re/main.css +++ /dev/null @@ -1,26 +0,0 @@ -header { - background-color: black; -} -#header-grid { - display: grid; - grid-template-columns: repeat(10, 1fr); - font-size: 3em; - text-align: center; -} - -#header-Back-Icon { - grid-column: 1/3; - color: white; - padding-left: 5%; -} - -#header-text { - grid-column: 3/9; - color: white; - /* text-align: center; */ - /* font-weight: 600; */ -} - -#empty { - grid-column: 9/11; -} \ No newline at end of file diff --git a/WebServer/__pycache__/main.cpython-310.pyc b/WebServer/__pycache__/main.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4992e6bcd4330ad7fdc2b640817f228ab0fb569a GIT binary patch literal 2513 zcmZuy-ESL35Z~Q9pU;k+I3LYN8(Ozes1dbWK(th)qAD#df~aajtFDl&i+7V=dLQoI zx*?V=rE-vvP{kiWkm5J`hQt%kyz>X#D^DqXdX&$C z#hjRvjyU|7i6fG&FflLQ*s?))*yxVFraLCeMt1~uniI!irxW5$v(r3C-Vkr~skFq& z9$lg0ZE3@9?}$@d8QATpa283WvWu~-*lG5fm*~qkZ=~5<@F)flTvXH-p#{ z$X94uxW4q&m$zinjH3kSBa7P8egm}$Ovk?Pqc!jSB^fpYPaBadfYE*^7ts7}9K@eV zEgL#k?ZegD2F&ZQ!ZX~%531|ZU%jW3_VoYg8Y`!hJ+8?P?UQd< zmvm`|b_ipd33ibHwJwr7BpRgzUu_9n+dG*)`H6_k&lY0gF44|TRycin18{d8Ry|;q z?81^N!uDzuNXrHC?1$~AziwS9w`a=bOP4N{%ZrOwuAsXY%2$<&)$v{Qt>UHy6Qs~< z-18%uj;K~tA5NSE!rw~LOjG%hR!|-!wW4@E&3eg3)bQgplLS&WD~uOmX#~L&CI);Y zYDBs|h|&|HX2A0K*;*)t@70!*_1gI}SI?aO`0}~SwV_*5)$YjUMX4SF7kYkFZEmC) z6W~d(PNspdO-30l&}r(xca%DNCC2_$bD(NxYv`=s;Kpgc0dU9(Ul}NDz{HNcP^LLO z#7>%p^-8yzujLDNA{GpjuL)otQOuQQJ<`WIB!FqUP_fh@(4`{{0Em`#?Irh(7v`X^ zkXc-Xp-~WwI0*b`^(2V?v4OD75>v;3c}{B;%16~c?CXudOOiCJ26fVaw)5h_W`ym^ zxVHifx+mxy0m|k8MqS!v8r^repOOKq}LrpmFX~bwXsjb_9^? z+6Gc?XJ6Z~I~Kf5?Sahh(j#}zH5Vi}oMhu?#%Pr_XuO$v+g2_98D?tV85TBYL zTMO;6D?@u}VrG1=FmpC_3hXP8HTWEK?xkI<(9iR@ri|n?kap>nDyyy~anu0miwFCF z1;hAO24;ZyVSmyL0YeG)DM7ap4s1bT>Y)rU7HS*`CIURg2&oDZtoZ>kRbWR~BK--- z66{WFv%p-MXQ~Plh+E6t0xQtxYt_`o?`z>h_t4C^xCG22aAt?}$)E*xsip!XYitJU zpvQhJc3B5%phK}}??Bnw@b=(pjNG#%DX)VR-@7n`g?2uLW7!MsY_*0RqL#At<MS^rX4aLjC4``cGZzyNC`wYga`5C6`(0vi#yW0#6>Jg=A=?~f z6Rbez_wtrH2ZG8mo?U@D@S48D#3($v!hWF;KYV;&Ssk{EL}AhK$)Oxfp$pzl@Qvp@H6co0aL5eZErv6NuOD(V2|XjG=V#jIRX9fW+X#y%@%#7063iD#=GcW}&(UuS;E8 hV9bJA+jCi-xy&g}vpfZ!7VHu&6id{#VV<3*{{dShXVL%w literal 0 HcmV?d00001 diff --git a/WebServer/__pycache__/yolo.cpython-310.pyc b/WebServer/__pycache__/yolo.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b44cf3052dee4f4e3d28e98af774e2b7edcc80f GIT binary patch literal 2614 zcmZuz-ESMm5#QbW;E_B^6eWuKaFU`ZTCiv&HwcgxF#J(lZj8!wQMpKbNN_#fF3F>h zcl6%T6p1~+fKs$55FqVa8?+GnmOr6S{SWeT8nc3an zTwJSF2(-Wa`;lm@67nBpUT+#OccCYHKsezvB+l}mIt+LgYD3M@DETGf8rMG~Tt8)w z&gl_p8w=1Ooi@!a?xi9PhQi00*Bb-oF7)IFKm>6pCt#Oy_8D=srA4r2a1(fgm%yr( z+t1=Kejrler?K>PP`qq7HlU-|$t@r$8PGGPsA5W+Ykwpz^nrG!&k2l;Kaegh_Ogmu zb50(RQwow2C$N*&@hRB2Z0IT)Ux%LT0O=7$J}qaUFdzyX-y+-O&+G*QRk}b;h`btl zQz6~R8;YdOa<+Ffr@>b=*Ao$TzaroMbbly#;O!qLll`CFJh=Jp&+mP3Z~y4%{{46y zr9$q1B#w`SdD<%+=FxohuwO`N7p6dotkh<>PtuXez zFu4tbOHD|l=D&O|*LV~;B`G}K5oxYPB6Vs#kshMg9due^$W9C9ejE956hYDje==UK zNb*`dPDkU^Ey7INx-8>zdm@5fKTX_`m-ZdY@Aj6Xa#w=QNi3gBymrz;fu(dh$LT6{kI#8Hx_bCt7A^rOZm{fDJS_CRerBlhoKiSc7@I&#bDC9pB&$NVq1RO90r}L;R@4goJK3sQ<#1De z&$dZcPpz}Es)NRws;f1aX{ZLbp6l{YX$97mw}~ok!0pP`3%&xpS@0VLU%iqy3*Nqx zZvwxrn!LIT7Yy`Uz;CF{D}GDW&Z?@Vwp3GX_VgkG`>dMUs&PsSt_t!s9KE>t;wMEG zYO1Der74})KG(BtUe0#Xm2_3rPU$Iy*rwU8+Ev>x$rn_%VD0WU`9#lJ*;dxfHaX31 zs2g7rz5+Ht!dJi4|E^_k@p|_5>{rTARh)$kz$#9kGq7Q(9bWl>z%KNx4zCfs?J}Uv z76HFETLiebd3A13a=C(6wm^ofz^@ypl&@`&7U2!l;OkpUjg1S9HL&>>TIEfYK#UDu zf%C1-OO$*>qKZz^^)KkOP6_^=k%&%krwzWT=$t`j{-Ji@*|s{4ITA97qu$3izW(1} zWpt;lNqoxJ3iTb zu9qu7oZ4|1A3v1w@X^rg2??-H94is&qX=HAQ|iWY;z=&+FrTw%@!06>XTE>^n%Pn;^CR5#!v@W)M_ z3WY@A0yBj{gnP#by<-tNh7Y(cmv~ozUV(QjOK05pcmSzP@Z6FJh{vRJ;yU_VQjDJk^^9IQDbNv-q zrR>~h?3K=DyKf-tn?Ai!{4hE!GzGpM!XU->!{&%c6fhM~wZK6@)l5sF!a}{Jncjo% zfqx3(k=I4qlbS z1s5;wn>$c#eh9q$5t6H$(>8N0Nu|U`2n8*k6feUugCSNqiQh5p(nXo_$5O&syZC96 z*AlqW99~AjI$AL7751GnUQHKEr+gQ;Do*kGD64WDxkJzI2a)K2JZS*2A^SRH+=3Id z;cP5zw)IA?UsnQ`q5k2eaoxP)y2F@{Lmb<#`(o^cONm^=&C!4PK9XxUu6&UQI(SS8 uB85dPYL)D}#cbPH=D~=@!_ib?y)05x2*1l#Zrxh?aU1dP%Aidf+W!H$BZ>+D literal 0 HcmV?d00001 diff --git a/WebServer/main.py b/WebServer/main.py new file mode 100644 index 0000000..5f985d7 --- /dev/null +++ b/WebServer/main.py @@ -0,0 +1,76 @@ +#  -*- coding: utf-8 -*- +from fastapi import FastAPI, Request, File, UploadFile +from fastapi.responses import HTMLResponse +from fastapi.staticfiles import StaticFiles +from fastapi.templating import Jinja2Templates +from datetime import datetime +import time +import asyncio + +from utils.count.yolo import YoloDetector + + +yolo_machine = YoloDetector( + "./yolo_data/yolov3.weights", "./yolo_data/yolov3.cfg", "darknet") +print("yolo ready") + +status = {"people_count": -1, "analysis_time": "init time"} + +async def count(): + while True: + try: + standard_time, ncnt_people = yolo_machine.run_machine() + status["people_count"], status["analysis_time"] = ncnt_people, standard_time + except: + print( + f"시간: {datetime.now()} >>> SSCCount: Error!") + await asyncio.sleep(2) + +## Backend ## + +#app = FastAPI(docs_url=None, redoc_url=None) +app = FastAPI() + +app.mount("/static", StaticFiles(directory="static"), name="static") +templates = Jinja2Templates(directory="templates") + +@app.on_event("startup") +async def start_polling(): + asyncio.create_task(count()) + + +@app.get("/", response_class=HTMLResponse) +async def Page(request: Request): + SSCCount, Standard_Time = status["people_count"], status["analysis_time"] + current_time = str(datetime.now())[0:21] # 필요한 부분 가공 + print("새로고침", current_time) + if int(SSCCount) <= 6: + countable = 1 + else: + countable = 0 + + # FastAPI로 new.html에 변수 값 전달 + return templates.TemplateResponse("index(Ver_8).html", {"request": request, "People_Count": int(SSCCount), "Countable": countable, "last_time": current_time, "get_time": current_time, "Get_Time": Standard_Time}) + + +@app.get("/contributor", response_class=HTMLResponse) +async def ContributorPage(request: Request): + return templates.TemplateResponse("Contribute.html", {"request": request}) + + +@app.get("/SSCCounter.json") +async def nCnt(): + Standard_Time, SSCCount = yolo_machine.run_machine() + print(SSCCount) + + return {"people_count": SSCCount, "analysis_time": Standard_Time} + + +@app.post("/uploadfile/") +async def create_upload_file(file: UploadFile = File(...)): + contents = await file.read() + + with open("./temp/"+file.filename, "wb") as f: + f.write(contents) + + return {"filename": file.filename} diff --git a/WebServer/static/css/contribute.css b/WebServer/static/css/contribute.css new file mode 100644 index 0000000..10d6d91 --- /dev/null +++ b/WebServer/static/css/contribute.css @@ -0,0 +1,764 @@ +/***** MAIN SETTING ******/ +@font-face { + font-family: 'BMJUA'; + src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_one@1.0/BMJUA.woff') format('woff'); + font-weight: normal; + font-style: normal; +} +body, html { + font-family: 'BMJUA', sans-serif; + height: 100%; + margin: 0; + user-select : none; +} + +h2{ + margin: 0; + text-align: center; + font-size: 4vw; +} + +h3 { + font-size: 3vw; +} +h4 { + font-size: 2vw; +} +span { + font-size: 2vw; +} +@media (max-width: 1000px) { + h2 { + font-size: 15invw; + } + h3 { + font-size: 10vw; + } + h4 { + font-size: 8vw; + } + img { + width: 50% + } +} + +a{ + text-decoration-line: none; +} + +.sscc { + color: white; + text-decoration-line: none; +} + +.sscc:hover { + color: red; + text-decoration: underline; +} + +.explain{ + position: absolute; + opacity: 0; + color: white; + font-size: 2vw; + text-shadow: -1px 0 #00000088, 0 1px #00000088, 1px 0 #00000088, 0 -1px #00000088; +} + +/** PAGE **/ +.page { + padding-top: 5%; + background-clip: padding-box; + width: 100%; + padding-bottom: 10%; +} + +.page img{ + -webkit-user-drag: none; + max-height: 100%; + max-width: 100%; +} + + +/***** HEADER ******/ +header { + width: 100%; + background-color: #000000de; +} + +.floating { + color: aliceblue; + position: fixed; + text-align: center; + top: 0; + z-index: 10; + + display: grid; + grid-template-columns: repeat(8, 1fr); + width: 100%; + height: 100px; + align-items: center; + justify-content: center; +} + +.floating a { + color: aliceblue; + text-decoration-line: none; +} + +.title { + grid-column: 1/4; +} + +.lists { + grid-column: 4/9; +} + +/* The sidepanel menu */ +.sidepanel { + height: 100%; /* Specify a height */ + width: 0; /* 0 width - change this with JavaScript */ + position: fixed; /* Stay in place */ + z-index: 11; /* Stay on top */ + top: 0; + right: 0; + background-color: #111; /* Black*/ + overflow-x: hidden; /* Disable horizontal scroll */ + padding-top: 60px; /* Place content 60px from the top */ + transition: 0.5s; /* 0.5 second transition effect to slide in the sidepanel */ +} + +/* The sidepanel links */ +.sidepanel a { + padding: 8px 8px 8px 32px; + text-decoration: none; + font-size: 25px; + color: #818181; + display: block; + transition: 0.3s; +} + +/* When you mouse over the navigation links, change their color */ +.sidepanel a:hover { + color: #f1f1f1; +} + +/* Position and style the close button (top right corner) */ +.sidepanel .closebtn { + position: absolute; + top: 0; + right: 70%; + font-size: 36px; + margin-left: 5%; +} + +/* Style the button that is used to open the sidepanel */ +.openbtn { + grid-column: 8/9; + width: 100%; + font-size: 40px; + cursor: pointer; + background-color: #00000000; + color: white; + border: none; +} + +/***** FOOTER ******/ +footer { + height: 50px; + display: flex; + align-items: center; + justify-content: center; + text-align: center; +} + +/***** SSCC ******/ +#SSCC.page { + background-color: black; + padding-top: 100px; + padding-bottom: 0; +} + +/** Collage **/ +.collage { + display: grid; + grid-template-columns: repeat(8, 1fr); + grid-template-rows: repeat(6, 1fr); + width: 100%; + height: 100%; + grid-gap: 10px; +} + +.gomtv { + display: flex; + align-items: center; + justify-content: center; + text-align: center; + background-image: url("../images/gomtv/1.jpg"); + background-size: cover; + background-position: center; + grid-column: 1/3; + grid-row: 1/3; +} + +.gomtv:hover { + transform: scale(1.1) translate(7%, 7%); + transition: .5s; + border: #6e6e6e; + filter: brightness(0.5); + -webkit-filter: brightness(0.5); +} + +.gomtv:hover .explain{ + opacity: 1; +} + +.sw_contest { + display: flex; + align-items: center; + justify-content: center; + text-align: center; + background-image: url("../images/sw_contest/1.jpg"); + background-size: cover; + background-position: center; + grid-column: 4/7; + grid-row: 5/7; +} + +.sw_contest:hover { + transform: scale(1.1) translate(0%, -7%); + transition: .5s; + border: #6e6e6e; + filter: brightness(0.5); + -webkit-filter: brightness(0.5); +} + +.sw_contest:hover .explain{ + opacity: 1; +} + +.smartfarm_ideaton { + display: flex; + align-items: center; + justify-content: center; + text-align: center; + background-image: url("../images/smartfarm ideaton/1.jpg"); + background-size: cover; + background-position: center; + grid-column: 1/4; + grid-row: 3/7; +} + +.smartfarm_ideaton:hover { + transform: scale(1.05) translate(5%, -5%); + transition: .5s; + border: #6e6e6e; + filter: brightness(0.5); + -webkit-filter: brightness(0.5); +} + +.smartfarm_ideaton:hover .explain{ + opacity: 1; +} + +.ideathon { + display: flex; + align-items: center; + justify-content: center; + text-align: center; + background-image: url("../images/ideathon/1.png"); + background-size: cover; + background-position: center; + grid-column: 3/6; + grid-row: 1/3; +} + +.ideathon:hover { + transform: scale(1.1) translate(0%, 7%); + transition: .5s; + border: #6e6e6e; + filter: brightness(0.5); + -webkit-filter: brightness(0.5); +} + +.ideathon:hover .explain{ + opacity: 1; +} + +.logo { + display: flex; + justify-content: center; + text-align: center; + background-color: aliceblue; + grid-column: 4/6; + grid-row: 3/5; +} + +.mentoring { +display: flex; + align-items: center; + justify-content: center; + text-align: center; + background-image: url("../images/mentoring/1.png"); + background-size: cover; + background-position: center; + grid-column: 7/9; + grid-row: 5/7; +} + +.mentoring:hover { + transform: scale(1.1) translate(-7%, -7%); + transition: .5s; + border: #6e6e6e; + filter: brightness(0.5); + -webkit-filter: brightness(0.5); +} + +.mentoring:hover .explain{ + opacity: 1; +} + +.iot { + display: flex; + align-items: center; + justify-content: center; + text-align: center; + background-image: url("../images/iot/1.png"); + background-size: cover; + background-position: center; + grid-column: 6/9; + grid-row: 1/5; + text-align: center; +} + +.iot:hover { + transform: scale(1.05) translate(-5%, 5%); + transition: .5s; + border: #6e6e6e; + filter: brightness(0.5); + -webkit-filter: brightness(0.5); +} + +.iot:hover .explain{ + opacity: 1; +} +/** Slide **/ +* { + box-sizing: border-box; +} + +/* Position the image container (needed to position the left and right arrows) */ +.slide { + margin-top: 50px; + position: relative; +} + +/* Hide the images by default */ +.mySlides { + display: none; +} + +/* Add a pointer when hovering over the thumbnail images */ +.cursor { + cursor: pointer; +} + +/* Next & previous buttons */ +.prev, +.next { + cursor: pointer; + position: absolute; + top: 40%; + width: auto; + padding: 16px; + margin-top: -50px; + color: white; + font-weight: bold; + font-size: 20px; + border-radius: 0 3px 3px 0; + user-select: none; + -webkit-user-select: none; +} + +/* Position the "next button" to the right */ +.next { + right: 0; + border-radius: 3px 0 0 3px; +} + +/* Number text (1/3 etc) */ +.numbertext { + color: #f2f2f2; + font-size: 12px; + padding: 8px 12px; + position: absolute; + top: 0; +} + +/* Container for image text */ +.caption-container { + text-align: center; + background-color: #222; + padding: 2px 16px; + color: white; +} + +.row:after { + content: ""; + display: table; + clear: both; +} + +/* Six columns side by side */ +.column { + float: left; + width: 16.66%; +} + +/* Add a transparency effect for thumnbail images */ +.demo { + opacity: 0.6; +} + +.active, +.demo:hover { + opacity: 1; +} + +/***** About ******/ +#About.page { + background-color: black; +} +.about_grid { + padding-top: 100px; + padding-bottom: 50px; + display : grid; + grid-template-columns: repeat(8, 1fr); + place-items: center; +} + +.about_image{ + padding: 25px; + grid-column: 2/5; +} + +.about_text{ + padding: 25px; + color: white; + grid-column: 5/8; + text-align: left; + padding-bottom: 0; +} + + .about_text p { + font-size: 15pt; + } + + /***** Study ******/ + @import url('https://fonts.googleapis.com/css?family=Montserrat'); + + .study_grid { + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + height: 800px; + } + + .study-card body { + background-color: grey; + font-family: Montserrat, sans-serif; + } + + + +/** CARD **/ +.card-container { + background-color: white; + border-radius: 5px; + color: #B3B8CD; + box-shadow: 0px 10px 20px -10px black; + padding-top: 30px; + text-align: center; + vertical-align: middle; + margin: 10%; +} + +.study-contents { + position: absolute; + top: 200px; +} + +.study-card h3 { + margin: 10px 0; + color: black; +} + +.study-card h6 { + margin: 5px 0; + text-transform: uppercase; + color: black; +} + +.study-card h4 { + font-size: 9px; + margin: 5px; + text-transform: uppercase; +} + +.study-card p { + font-size: 0.8vw; + line-height: 1.5em; + color: #6d6a8a; +} + + + + .card-container .picture { + border-radius: 5%; + padding: 7px; + position: inherit; + width: 70%; + } + + + +.skills { + background-color: #1F1A36; + text-align: left; + padding: 15px; + margin-top: 30px; + width: inherit; +} +/* + .skills ul { + list-style-type: none; + margin: 0; + padding: 0; + } + + .skills ul li { + border: 1px solid #2D2747; + border-radius: 2px; + display: inline-block; + font-size: 0.1vw; + margin: 0 7px 7px 0; + padding: 7px; + } + */ + + .skills p { + border: 1px solid #2D2747; + border-radius: 2px; + display: inline-grid; + font-size: 0.01vw; + margin: 0 7px 7px 0; + padding: 7px; + } + + + +#study-title { + background-color: #222222; + background-clip: padding-box; + text-align: center; + color: whitesmoke; + padding-bottom: 0; + margin-bottom: 5%; +} + + +/***** Benefit ******/ + +#Benefit { + display: grid; + font-size: 3vw; + color: white; + text-align: center; + vertical-align: middle; +} + + #Benefit p { + line-height: 1.9em + } + +/***** Contact ******/ + +#Contact.page { + background-color: #d3d3d3; + padding-bottom : 50px; +} + +.contact_grid { + + display : grid; + grid-template-columns: repeat(6, 1fr); + grid-template-rows:repeat(1, 1fr); + justify-items: center; +} + +.contact_image { + grid-row: 1/2; + grid-column: 3/5; + margin: 0px auto; + position: relative +} +.hall { + position: absolute; + top: 0px; + left: 0px; + opacity: 0; +transition: opacity 0.5s linear; +} + +.contact_image:hover .hall { + opacity: 1; +} + +.contact_way { + grid-row: 2/3; + grid-column: 4/6; +} + +.contact_link { + grid-row: 2/3; + grid-column: 2/4; +} + +.contact_grid a{ + color:#020042; + text-decoration: none; + font-weight: bold; +} + +.contact_grid a:visited{ + color:gray; + text-decoration: none; +} + +.contact_grid a:hover{ + color:pink; + text-decoration: none; +} +.detail_contact{ + display: grid; + grid-template-columns: 1fr 2fr; + grid-template-rows: repeat(3, 1fr); +} + + +/***** Legacy ******/ +.grid-item2x { + background-image: url("../images/farewell/1.jpg"); + background-size: cover; + background-position: center; + grid-column: 1/2; + grid-row: 2/5; +} + +.grid-item5x { + grid-column: 3/6; + grid-row: 1/3; +} + +.multi section{ + column-count : 2; +} +.multi h2{ +break-before : column; +} +.no-col{ +column-span : all; +} +.ACT { + display: none; +} +/** media-query **/ +@media (max-width: 1000px) { + .floating{ + border-bottom: solid aliceblue; + } + .title img{ + display: none; + } + + .lists{ + display: none; + } + h2{ + font-size: 17vw; + } + #SSCC.page{ + height: none; + } + .collage{ + display: none; + } + .ACT { + display: block; + } + + .about_grid { + display: block; + grid-template-columns: none; + grid-template-rows: none; + text-align: center; + height:100%; + } + .study_grid { + display: block; + grid-template-columns: none; + grid-template-rows: none; + height:100%; + } + + .study_grid p { + font-size: 13pt; + line-height: 1.3em; + } + + .card-container { + margin: 10%; + } + .card-container p { + font-size: 3vw; + } + .contact_grid { + display: block; + grid-template-columns: none; + grid-template-rows: none; + text-align: center; + } + .detail_contact{ + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: repeat(3, 1fr); + } + + + #Benefit p { + font-size: 5vw; + margin-bottom: 10%; + } + #Benefit h2 { + margin-bottom: 10%; + } + .contact_way{ + margin-top: 10%; + } + .line-change { + display: none; + } + +} +@media (min-width: 1000px) { + #SSCC.page{ + height: 95%; + } + .openbtn{ + display: none; + } +} + +@media (min-width: 1460px) { + .line-change { + display: none; + } +} diff --git a/WebServer/static/css/contribute2 b/WebServer/static/css/contribute2 new file mode 100644 index 0000000..9eaa5bf --- /dev/null +++ b/WebServer/static/css/contribute2 @@ -0,0 +1,1080 @@ +/* [0] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.0.woff2) format('woff2'); + unicode-range: U+f9ca-fa0b, U+ff03-ff05, U+ff07, U+ff0a-ff0b, U+ff0d-ff19, U+ff1b, U+ff1d, U+ff20-ff5b, U+ff5d, U+ffe0-ffe3, U+ffe5-ffe6; +} +/* [1] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.1.woff2) format('woff2'); + unicode-range: U+f92f-f980, U+f982-f9c9; +} +/* [2] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.2.woff2) format('woff2'); + unicode-range: U+d723-d728, U+d72a-d733, U+d735-d748, U+d74a-d74f, U+d752-d753, U+d755-d757, U+d75a-d75f, U+d762-d764, U+d766-d768, U+d76a-d76b, U+d76d-d76f, U+d771-d787, U+d789-d78b, U+d78d-d78f, U+d791-d797, U+d79a, U+d79c, U+d79e-d7a3, U+f900-f909, U+f90b-f92e; +} +/* [3] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.3.woff2) format('woff2'); + unicode-range: U+d679-d68b, U+d68e-d69e, U+d6a0, U+d6a2-d6a7, U+d6a9-d6c3, U+d6c6-d6c7, U+d6c9-d6cb, U+d6cd-d6d3, U+d6d5-d6d6, U+d6d8-d6e3, U+d6e5-d6e7, U+d6e9-d6fb, U+d6fd-d717, U+d719-d71f, U+d721-d722; +} +/* [4] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.4.woff2) format('woff2'); + unicode-range: U+d5bc-d5c7, U+d5ca-d5cb, U+d5cd-d5cf, U+d5d1-d5d7, U+d5d9-d5da, U+d5dc, U+d5de-d5e3, U+d5e6-d5e7, U+d5e9-d5eb, U+d5ed-d5f6, U+d5f8, U+d5fa-d5ff, U+d602-d603, U+d605-d607, U+d609-d60f, U+d612-d613, U+d616-d61b, U+d61d-d637, U+d63a-d63b, U+d63d-d63f, U+d641-d647, U+d64a-d64c, U+d64e-d653, U+d656-d657, U+d659-d65b, U+d65d-d666, U+d668, U+d66a-d678; +} +/* [5] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.5.woff2) format('woff2'); + unicode-range: U+d507, U+d509-d50b, U+d50d-d513, U+d515-d53b, U+d53e-d53f, U+d541-d543, U+d545-d54c, U+d54e, U+d550, U+d552-d557, U+d55a-d55b, U+d55d-d55f, U+d561-d564, U+d566-d567, U+d56a, U+d56c, U+d56e-d573, U+d576-d577, U+d579-d583, U+d585-d586, U+d58a-d5a4, U+d5a6-d5bb; +} +/* [6] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.6.woff2) format('woff2'); + unicode-range: U+d464-d477, U+d47a-d47b, U+d47d-d47f, U+d481-d487, U+d489-d48a, U+d48c, U+d48e-d4e7, U+d4e9-d503, U+d505-d506; +} +/* [7] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.7.woff2) format('woff2'); + unicode-range: U+d3bf-d3c7, U+d3ca-d3cf, U+d3d1-d3eb, U+d3ee-d3ef, U+d3f1-d3f3, U+d3f5-d3fb, U+d3fd-d400, U+d402-d45b, U+d45d-d463; +} +/* [8] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.8.woff2) format('woff2'); + unicode-range: U+d2ff, U+d302-d304, U+d306-d30b, U+d30f, U+d311-d313, U+d315-d31b, U+d31e, U+d322-d324, U+d326-d327, U+d32a-d32b, U+d32d-d32f, U+d331-d337, U+d339-d33c, U+d33e-d37b, U+d37e-d37f, U+d381-d383, U+d385-d38b, U+d38e-d390, U+d392-d397, U+d39a-d39b, U+d39d-d39f, U+d3a1-d3a7, U+d3a9-d3aa, U+d3ac, U+d3ae-d3b3, U+d3b5-d3b7, U+d3b9-d3bb, U+d3bd-d3be; +} +/* [9] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.9.woff2) format('woff2'); + unicode-range: U+d257-d27f, U+d281-d29b, U+d29d-d29f, U+d2a1-d2ab, U+d2ad-d2b7, U+d2ba-d2bb, U+d2bd-d2bf, U+d2c1-d2c7, U+d2c9-d2ef, U+d2f2-d2f3, U+d2f5-d2f7, U+d2f9-d2fe; +} +/* [10] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.10.woff2) format('woff2'); + unicode-range: U+d1b4, U+d1b6-d1f3, U+d1f5-d22b, U+d22e-d22f, U+d231-d233, U+d235-d23b, U+d23d-d240, U+d242-d256; +} +/* [11] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.11.woff2) format('woff2'); + unicode-range: U+d105-d12f, U+d132-d133, U+d135-d137, U+d139-d13f, U+d141-d142, U+d144, U+d146-d14b, U+d14e-d14f, U+d151-d153, U+d155-d15b, U+d15e-d187, U+d189-d19f, U+d1a2-d1a3, U+d1a5-d1a7, U+d1a9-d1af, U+d1b2-d1b3; +} +/* [12] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.12.woff2) format('woff2'); + unicode-range: U+d04b-d04f, U+d051-d057, U+d059-d06b, U+d06d-d06f, U+d071-d073, U+d075-d07b, U+d07e-d0a3, U+d0a6-d0a7, U+d0a9-d0ab, U+d0ad-d0b3, U+d0b6, U+d0b8, U+d0ba-d0bf, U+d0c2-d0c3, U+d0c5-d0c7, U+d0c9-d0cf, U+d0d2, U+d0d6-d0db, U+d0de-d0df, U+d0e1-d0e3, U+d0e5-d0eb, U+d0ee-d0f0, U+d0f2-d104; +} +/* [13] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.13.woff2) format('woff2'); + unicode-range: U+cfa2-cfc3, U+cfc5-cfdf, U+cfe2-cfe3, U+cfe5-cfe7, U+cfe9-cff4, U+cff6-cffb, U+cffd-cfff, U+d001-d003, U+d005-d017, U+d019-d033, U+d036-d037, U+d039-d03b, U+d03d-d04a; +} +/* [14] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.14.woff2) format('woff2'); + unicode-range: U+cef0-cef3, U+cef6, U+cef9-ceff, U+cf01-cf03, U+cf05-cf07, U+cf09-cf0f, U+cf11-cf12, U+cf14-cf1b, U+cf1d-cf1f, U+cf21-cf2f, U+cf31-cf53, U+cf56-cf57, U+cf59-cf5b, U+cf5d-cf63, U+cf66, U+cf68, U+cf6a-cf6f, U+cf71-cf84, U+cf86-cf8b, U+cf8d-cfa1; +} +/* [15] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.15.woff2) format('woff2'); + unicode-range: U+ce3c-ce57, U+ce5a-ce5b, U+ce5d-ce5f, U+ce61-ce67, U+ce6a, U+ce6c, U+ce6e-ce73, U+ce76-ce77, U+ce79-ce7b, U+ce7d-ce83, U+ce85-ce88, U+ce8a-ce8f, U+ce91-ce93, U+ce95-ce97, U+ce99-ce9f, U+cea2, U+cea4-ceab, U+cead-cee3, U+cee6-cee7, U+cee9-ceeb, U+ceed-ceef; +} +/* [16] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.16.woff2) format('woff2'); + unicode-range: U+cd92-cd93, U+cd96-cd97, U+cd99-cd9b, U+cd9d-cda3, U+cda6-cda8, U+cdaa-cdaf, U+cdb1-cdc3, U+cdc5-cdcb, U+cdcd-cde7, U+cde9-ce03, U+ce05-ce1f, U+ce22-ce34, U+ce36-ce3b; +} +/* [17] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.17.woff2) format('woff2'); + unicode-range: U+ccef-cd07, U+cd0a-cd0b, U+cd0d-cd1a, U+cd1c, U+cd1e-cd2b, U+cd2d-cd5b, U+cd5d-cd77, U+cd79-cd91; +} +/* [18] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.18.woff2) format('woff2'); + unicode-range: U+cc3f-cc43, U+cc46-cc47, U+cc49-cc4b, U+cc4d-cc53, U+cc55-cc58, U+cc5a-cc5f, U+cc61-cc97, U+cc9a-cc9b, U+cc9d-cc9f, U+cca1-cca7, U+ccaa, U+ccac, U+ccae-ccb3, U+ccb6-ccb7, U+ccb9-ccbb, U+ccbd-cccf, U+ccd1-cce3, U+cce5-ccee; +} +/* [19] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.19.woff2) format('woff2'); + unicode-range: U+cb91-cbd3, U+cbd5-cbe3, U+cbe5-cc0b, U+cc0e-cc0f, U+cc11-cc13, U+cc15-cc1b, U+cc1d-cc20, U+cc23-cc27, U+cc2a-cc2b, U+cc2d, U+cc2f, U+cc31-cc37, U+cc3a, U+cc3c; +} +/* [20] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.20.woff2) format('woff2'); + unicode-range: U+caf4-cb47, U+cb4a-cb90; +} +/* [21] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.21.woff2) format('woff2'); + unicode-range: U+ca4a-ca4b, U+ca4e-ca4f, U+ca51-ca53, U+ca55-ca5b, U+ca5d-ca60, U+ca62-ca83, U+ca85-cabb, U+cabe-cabf, U+cac1-cac3, U+cac5-cacb, U+cacd-cad0, U+cad2, U+cad4-cad8, U+cada-caf3; +} +/* [22] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.22.woff2) format('woff2'); + unicode-range: U+c996-c997, U+c99a-c99c, U+c99e-c9bf, U+c9c2-c9c3, U+c9c5-c9c7, U+c9c9-c9cf, U+c9d2, U+c9d4, U+c9d7-c9d8, U+c9db, U+c9de-c9df, U+c9e1-c9e3, U+c9e5-c9e6, U+c9e8-c9eb, U+c9ee-c9f0, U+c9f2-c9f7, U+c9f9-ca0b, U+ca0d-ca28, U+ca2a-ca49; +} +/* [23] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.23.woff2) format('woff2'); + unicode-range: U+c8e9-c8f4, U+c8f6-c8fb, U+c8fe-c8ff, U+c901-c903, U+c905-c90b, U+c90e-c910, U+c912-c917, U+c919-c92b, U+c92d-c94f, U+c951-c953, U+c955-c96b, U+c96d-c973, U+c975-c987, U+c98a-c98b, U+c98d-c98f, U+c991-c995; +} +/* [24] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.24.woff2) format('woff2'); + unicode-range: U+c841-c84b, U+c84d-c86f, U+c872-c873, U+c875-c877, U+c879-c87f, U+c882-c884, U+c887-c88a, U+c88d-c8c3, U+c8c5-c8df, U+c8e1-c8e8; +} +/* [25] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.25.woff2) format('woff2'); + unicode-range: U+c779-c77b, U+c77e-c782, U+c786, U+c78b, U+c78d, U+c78f, U+c792-c793, U+c795, U+c797, U+c799-c79f, U+c7a2, U+c7a7-c7ab, U+c7ae-c7bb, U+c7bd-c7c0, U+c7c2-c7c7, U+c7c9-c7dc, U+c7de-c7ff, U+c802-c803, U+c805-c807, U+c809, U+c80b-c80f, U+c812, U+c814, U+c817-c81b, U+c81e-c81f, U+c821-c823, U+c825-c82e, U+c830-c837, U+c839-c83b, U+c83d-c840; +} +/* [26] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.26.woff2) format('woff2'); + unicode-range: U+c6bb-c6bf, U+c6c2, U+c6c4, U+c6c6-c6cb, U+c6ce-c6cf, U+c6d1-c6d3, U+c6d5-c6db, U+c6dd-c6df, U+c6e1-c6e7, U+c6e9-c6eb, U+c6ed-c6ef, U+c6f1-c6f8, U+c6fa-c703, U+c705-c707, U+c709-c70b, U+c70d-c716, U+c718, U+c71a-c71f, U+c722-c723, U+c725-c727, U+c729-c734, U+c736-c73b, U+c73e-c73f, U+c741-c743, U+c745-c74b, U+c74e-c750, U+c752-c757, U+c759-c773, U+c776-c777; +} +/* [27] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.27.woff2) format('woff2'); + unicode-range: U+c5f5-c5fb, U+c5fe, U+c602-c605, U+c607, U+c609-c60f, U+c611-c61a, U+c61c-c623, U+c626-c627, U+c629-c62b, U+c62d, U+c62f-c632, U+c636, U+c638, U+c63a-c63f, U+c642-c643, U+c645-c647, U+c649-c652, U+c656-c65b, U+c65d-c65f, U+c661-c663, U+c665-c677, U+c679-c67b, U+c67d-c693, U+c696-c697, U+c699-c69b, U+c69d-c6a3, U+c6a6, U+c6a8, U+c6aa-c6af, U+c6b2-c6b3, U+c6b5-c6b7, U+c6b9-c6ba; +} +/* [28] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.28.woff2) format('woff2'); + unicode-range: U+c517-c527, U+c52a-c52b, U+c52d-c52f, U+c531-c538, U+c53a, U+c53c, U+c53e-c543, U+c546-c547, U+c54b, U+c54d-c552, U+c556, U+c55a-c55b, U+c55d, U+c55f, U+c562-c563, U+c565-c567, U+c569-c56f, U+c572, U+c574, U+c576-c57b, U+c57e-c57f, U+c581-c583, U+c585-c586, U+c588-c58b, U+c58e, U+c590, U+c592-c596, U+c599-c5b3, U+c5b6-c5b7, U+c5ba, U+c5be-c5c3, U+c5ca-c5cb, U+c5cd, U+c5cf, U+c5d2-c5d3, U+c5d5-c5d7, U+c5d9-c5df, U+c5e1-c5e2, U+c5e4, U+c5e6-c5eb, U+c5ef, U+c5f1-c5f3; +} +/* [29] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.29.woff2) format('woff2'); + unicode-range: U+c475-c4ef, U+c4f2-c4f3, U+c4f5-c4f7, U+c4f9-c4ff, U+c502-c50b, U+c50d-c516; +} +/* [30] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.30.woff2) format('woff2'); + unicode-range: U+c3d0-c3d7, U+c3da-c3db, U+c3dd-c3de, U+c3e1-c3ec, U+c3ee-c3f3, U+c3f5-c42b, U+c42d-c463, U+c466-c474; +} +/* [31] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.31.woff2) format('woff2'); + unicode-range: U+c32b-c367, U+c36a-c36b, U+c36d-c36f, U+c371-c377, U+c37a-c37b, U+c37e-c383, U+c385-c387, U+c389-c3cf; +} +/* [32] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.32.woff2) format('woff2'); + unicode-range: U+c26a-c26b, U+c26d-c26f, U+c271-c273, U+c275-c27b, U+c27e-c287, U+c289-c28f, U+c291-c297, U+c299-c29a, U+c29c-c2a3, U+c2a5-c2a7, U+c2a9-c2ab, U+c2ad-c2b3, U+c2b6, U+c2b8, U+c2ba-c2bb, U+c2bd-c2db, U+c2de-c2df, U+c2e1-c2e2, U+c2e5-c2ea, U+c2ee, U+c2f0, U+c2f2-c2f5, U+c2f7, U+c2fa-c2fb, U+c2fd-c2ff, U+c301-c307, U+c309-c30c, U+c30e-c312, U+c315-c323, U+c325-c328, U+c32a; +} +/* [33] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.33.woff2) format('woff2'); + unicode-range: U+c1bc-c1c3, U+c1c5-c1df, U+c1e1-c1fb, U+c1fd-c203, U+c205-c20c, U+c20e, U+c210-c217, U+c21a-c21b, U+c21d-c21e, U+c221-c227, U+c229-c22a, U+c22c, U+c22e, U+c230, U+c233-c24f, U+c251-c257, U+c259-c269; +} +/* [34] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.34.woff2) format('woff2'); + unicode-range: U+c101-c11b, U+c11f, U+c121-c123, U+c125-c12b, U+c12e, U+c132-c137, U+c13a-c13b, U+c13d-c13f, U+c141-c147, U+c14a, U+c14c-c153, U+c155-c157, U+c159-c15b, U+c15d-c166, U+c169-c16f, U+c171-c177, U+c179-c18b, U+c18e-c18f, U+c191-c193, U+c195-c19b, U+c19d-c19e, U+c1a0, U+c1a2-c1a4, U+c1a6-c1bb; +} +/* [35] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.35.woff2) format('woff2'); + unicode-range: U+c049-c057, U+c059-c05b, U+c05d-c05f, U+c061-c067, U+c069-c08f, U+c091-c0ab, U+c0ae-c0af, U+c0b1-c0b3, U+c0b5, U+c0b7-c0bb, U+c0be, U+c0c2-c0c7, U+c0ca-c0cb, U+c0cd-c0cf, U+c0d1-c0d7, U+c0d9-c0da, U+c0dc, U+c0de-c0e3, U+c0e5-c0eb, U+c0ed-c0f3, U+c0f6, U+c0f8, U+c0fa-c0ff; +} +/* [36] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.36.woff2) format('woff2'); + unicode-range: U+bfa7-bfaf, U+bfb1-bfc4, U+bfc6-bfcb, U+bfce-bfcf, U+bfd1-bfd3, U+bfd5-bfdb, U+bfdd-c048; +} +/* [37] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.37.woff2) format('woff2'); + unicode-range: U+bf07, U+bf09-bf3f, U+bf41-bf4f, U+bf52-bf54, U+bf56-bfa6; +} +/* [38] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.38.woff2) format('woff2'); + unicode-range: U+be56, U+be58, U+be5c-be5f, U+be62-be63, U+be65-be67, U+be69-be74, U+be76-be7b, U+be7e-be7f, U+be81-be8e, U+be90, U+be92-bea7, U+bea9-becf, U+bed2-bed3, U+bed5-bed6, U+bed9-bee3, U+bee6-bf06; +} +/* [39] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.39.woff2) format('woff2'); + unicode-range: U+bdb0-bdd3, U+bdd5-bdef, U+bdf1-be0b, U+be0d-be0f, U+be11-be13, U+be15-be43, U+be46-be47, U+be49-be4b, U+be4d-be53; +} +/* [40] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.40.woff2) format('woff2'); + unicode-range: U+bd03, U+bd06, U+bd08, U+bd0a-bd0f, U+bd11-bd22, U+bd25-bd47, U+bd49-bd58, U+bd5a-bd7f, U+bd82-bd83, U+bd85-bd87, U+bd8a-bd8f, U+bd91-bd92, U+bd94, U+bd96-bd98, U+bd9a-bdaf; +} +/* [41] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.41.woff2) format('woff2'); + unicode-range: U+bc4e-bc83, U+bc86-bc87, U+bc89-bc8b, U+bc8d-bc93, U+bc96, U+bc98, U+bc9b-bc9f, U+bca2-bca3, U+bca5-bca7, U+bca9-bcb2, U+bcb4-bcbb, U+bcbe-bcbf, U+bcc1-bcc3, U+bcc5-bccc, U+bcce-bcd0, U+bcd2-bcd4, U+bcd6-bcf3, U+bcf7, U+bcf9-bcfb, U+bcfd-bd02; +} +/* [42] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.42.woff2) format('woff2'); + unicode-range: U+bb90-bba3, U+bba5-bbab, U+bbad-bbbf, U+bbc1-bbf7, U+bbfa-bbfb, U+bbfd-bbfe, U+bc01-bc07, U+bc09-bc0a, U+bc0e, U+bc10, U+bc12-bc13, U+bc17, U+bc19-bc1a, U+bc1e, U+bc20-bc23, U+bc26, U+bc28, U+bc2a-bc2c, U+bc2e-bc2f, U+bc32-bc33, U+bc35-bc37, U+bc39-bc3f, U+bc41-bc42, U+bc44, U+bc46-bc48, U+bc4a-bc4d; +} +/* [43] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.43.woff2) format('woff2'); + unicode-range: U+bae6-bafb, U+bafd-bb17, U+bb19-bb33, U+bb37, U+bb39-bb3a, U+bb3d-bb43, U+bb45-bb46, U+bb48, U+bb4a-bb4f, U+bb51-bb53, U+bb55-bb57, U+bb59-bb62, U+bb64-bb8f; +} +/* [44] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.44.woff2) format('woff2'); + unicode-range: U+ba30-ba37, U+ba3a-ba3b, U+ba3d-ba3f, U+ba41-ba47, U+ba49-ba4a, U+ba4c, U+ba4e-ba53, U+ba56-ba57, U+ba59-ba5b, U+ba5d-ba63, U+ba65-ba66, U+ba68-ba6f, U+ba71-ba73, U+ba75-ba77, U+ba79-ba84, U+ba86, U+ba88-baa7, U+baaa, U+baad-baaf, U+bab1-bab7, U+baba, U+babc, U+babe-bae5; +} +/* [45] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.45.woff2) format('woff2'); + unicode-range: U+b96e-b973, U+b976-b977, U+b979-b97b, U+b97d-b983, U+b986, U+b988, U+b98a-b98d, U+b98f-b9ab, U+b9ae-b9af, U+b9b1-b9b3, U+b9b5-b9bb, U+b9be, U+b9c0, U+b9c2-b9c7, U+b9ca-b9cb, U+b9cd, U+b9d2-b9d7, U+b9da, U+b9dc, U+b9df-b9e0, U+b9e2, U+b9e6-b9e7, U+b9e9-b9f3, U+b9f6, U+b9f8, U+b9fb-ba2f; +} +/* [46] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.46.woff2) format('woff2'); + unicode-range: U+b8bf-b8cb, U+b8cd-b8e0, U+b8e2-b8e7, U+b8ea-b8eb, U+b8ed-b8ef, U+b8f1-b8f7, U+b8fa, U+b8fc, U+b8fe-b903, U+b905-b917, U+b919-b91f, U+b921-b93b, U+b93d-b957, U+b95a-b95b, U+b95d-b95f, U+b961-b967, U+b969-b96c; +} +/* [47] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.47.woff2) format('woff2'); + unicode-range: U+b80d-b80f, U+b811-b817, U+b81a, U+b81c-b823, U+b826-b827, U+b829-b82b, U+b82d-b833, U+b836, U+b83a-b83f, U+b841-b85b, U+b85e-b85f, U+b861-b863, U+b865-b86b, U+b86e, U+b870, U+b872-b8af, U+b8b1-b8be; +} +/* [48] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.48.woff2) format('woff2'); + unicode-range: U+b74d-b75f, U+b761-b763, U+b765-b774, U+b776-b77b, U+b77e-b77f, U+b781-b783, U+b785-b78b, U+b78e, U+b792-b796, U+b79a-b79b, U+b79d-b7a7, U+b7aa, U+b7ae-b7b3, U+b7b6-b7c8, U+b7ca-b7eb, U+b7ee-b7ef, U+b7f1-b7f3, U+b7f5-b7fb, U+b7fe, U+b802-b806, U+b80a-b80b; +} +/* [49] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.49.woff2) format('woff2'); + unicode-range: U+b6a7-b6aa, U+b6ac-b6b0, U+b6b2-b6ef, U+b6f1-b727, U+b72a-b72b, U+b72d-b72e, U+b731-b737, U+b739-b73a, U+b73c-b743, U+b745-b74c; +} +/* [50] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.50.woff2) format('woff2'); + unicode-range: U+b605-b60f, U+b612-b617, U+b619-b624, U+b626-b69b, U+b69e-b6a3, U+b6a5-b6a6; +} +/* [51] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.51.woff2) format('woff2'); + unicode-range: U+b55f, U+b562-b583, U+b585-b59f, U+b5a2-b5a3, U+b5a5-b5a7, U+b5a9-b5b2, U+b5b5-b5ba, U+b5bd-b604; +} +/* [52] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.52.woff2) format('woff2'); + unicode-range: U+b4a5-b4b6, U+b4b8-b4bf, U+b4c1-b4c7, U+b4c9-b4db, U+b4de-b4df, U+b4e1-b4e2, U+b4e5-b4eb, U+b4ee, U+b4f0, U+b4f2-b513, U+b516-b517, U+b519-b51a, U+b51d-b523, U+b526, U+b528, U+b52b-b52f, U+b532-b533, U+b535-b537, U+b539-b53f, U+b541-b544, U+b546-b54b, U+b54d-b54f, U+b551-b55b, U+b55d-b55e; +} +/* [53] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.53.woff2) format('woff2'); + unicode-range: U+b3f8-b3fb, U+b3fd-b40f, U+b411-b417, U+b419-b41b, U+b41d-b41f, U+b421-b427, U+b42a-b42b, U+b42d-b44f, U+b452-b453, U+b455-b457, U+b459-b45f, U+b462-b464, U+b466-b46b, U+b46d-b47f, U+b481-b4a3; +} +/* [54] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.54.woff2) format('woff2'); + unicode-range: U+b342-b353, U+b356-b357, U+b359-b35b, U+b35d-b35e, U+b360-b363, U+b366, U+b368, U+b36a-b36d, U+b36f, U+b372-b373, U+b375-b377, U+b379-b37f, U+b381-b382, U+b384, U+b386-b38b, U+b38d-b3c3, U+b3c6-b3c7, U+b3c9-b3ca, U+b3cd-b3d3, U+b3d6, U+b3d8, U+b3da-b3f7; +} +/* [55] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.55.woff2) format('woff2'); + unicode-range: U+b27c-b283, U+b285-b28f, U+b292-b293, U+b295-b297, U+b29a-b29f, U+b2a1-b2a4, U+b2a7-b2a9, U+b2ab, U+b2ad-b2c7, U+b2ca-b2cb, U+b2cd-b2cf, U+b2d1-b2d7, U+b2da, U+b2dc, U+b2de-b2e3, U+b2e7, U+b2e9-b2ea, U+b2ef-b2f3, U+b2f6, U+b2f8, U+b2fa-b2fb, U+b2fd-b2fe, U+b302-b303, U+b305-b307, U+b309-b30f, U+b312, U+b316-b31b, U+b31d-b341; +} +/* [56] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.56.woff2) format('woff2'); + unicode-range: U+b1d6-b1e7, U+b1e9-b1fc, U+b1fe-b203, U+b206-b207, U+b209-b20b, U+b20d-b213, U+b216-b21f, U+b221-b257, U+b259-b273, U+b275-b27b; +} +/* [57] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.57.woff2) format('woff2'); + unicode-range: U+b120-b122, U+b126-b127, U+b129-b12b, U+b12d-b133, U+b136, U+b138, U+b13a-b13f, U+b142-b143, U+b145-b14f, U+b151-b153, U+b156-b157, U+b159-b177, U+b17a-b17b, U+b17d-b17f, U+b181-b187, U+b189-b18c, U+b18e-b191, U+b195-b1a7, U+b1a9-b1cb, U+b1cd-b1d5; +} +/* [58] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.58.woff2) format('woff2'); + unicode-range: U+b05f-b07b, U+b07e-b07f, U+b081-b083, U+b085-b08b, U+b08d-b097, U+b09b, U+b09d-b09f, U+b0a2-b0a7, U+b0aa, U+b0b0, U+b0b2, U+b0b6-b0b7, U+b0b9-b0bb, U+b0bd-b0c3, U+b0c6-b0c7, U+b0ca-b0cf, U+b0d1-b0df, U+b0e1-b0e4, U+b0e6-b107, U+b10a-b10b, U+b10d-b10f, U+b111-b112, U+b114-b117, U+b119-b11a, U+b11c-b11f; +} +/* [59] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.59.woff2) format('woff2'); + unicode-range: U+afac-afb7, U+afba-afbb, U+afbd-afbf, U+afc1-afc6, U+afca-afcc, U+afce-afd3, U+afd5-afe7, U+afe9-afef, U+aff1-b00b, U+b00d-b00f, U+b011-b013, U+b015-b01b, U+b01d-b027, U+b029-b043, U+b045-b047, U+b049, U+b04b, U+b04d-b052, U+b055-b056, U+b058-b05c, U+b05e; +} +/* [60] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.60.woff2) format('woff2'); + unicode-range: U+af03-af07, U+af09-af2b, U+af2e-af33, U+af35-af3b, U+af3e-af40, U+af44-af47, U+af4a-af5c, U+af5e-af63, U+af65-af7f, U+af81-afab; +} +/* [61] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.61.woff2) format('woff2'); + unicode-range: U+ae56-ae5b, U+ae5e-ae60, U+ae62-ae64, U+ae66-ae67, U+ae69-ae6b, U+ae6d-ae83, U+ae85-aebb, U+aebf, U+aec1-aec3, U+aec5-aecb, U+aece, U+aed0, U+aed2-aed7, U+aed9-aef3, U+aef5-af02; +} +/* [62] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.62.woff2) format('woff2'); + unicode-range: U+ad9c-ada3, U+ada5-adbf, U+adc1-adc3, U+adc5-adc7, U+adc9-add2, U+add4-addb, U+addd-addf, U+ade1-ade3, U+ade5-adf7, U+adfa-adfb, U+adfd-adff, U+ae02-ae07, U+ae0a, U+ae0c, U+ae0e-ae13, U+ae15-ae2f, U+ae31-ae33, U+ae35-ae37, U+ae39-ae3f, U+ae42, U+ae44, U+ae46-ae49, U+ae4b, U+ae4f, U+ae51-ae53, U+ae55; +} +/* [63] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.63.woff2) format('woff2'); + unicode-range: U+ace2-ace3, U+ace5-ace6, U+ace9-acef, U+acf2, U+acf4, U+acf7-acfb, U+acfe-acff, U+ad01-ad03, U+ad05-ad0b, U+ad0d-ad10, U+ad12-ad1b, U+ad1d-ad33, U+ad35-ad48, U+ad4a-ad4f, U+ad51-ad6b, U+ad6e-ad6f, U+ad71-ad72, U+ad77-ad7c, U+ad7e, U+ad80, U+ad82-ad87, U+ad89-ad8b, U+ad8d-ad8f, U+ad91-ad9b; +} +/* [64] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.64.woff2) format('woff2'); + unicode-range: U+ac25-ac2c, U+ac2e, U+ac30, U+ac32-ac37, U+ac39-ac3f, U+ac41-ac4c, U+ac4e-ac6f, U+ac72-ac73, U+ac75-ac76, U+ac79-ac7f, U+ac82, U+ac84-ac88, U+ac8a-ac8b, U+ac8d-ac8f, U+ac91-ac93, U+ac95-ac9b, U+ac9d-ac9e, U+aca1-aca7, U+acab, U+acad-acaf, U+acb1-acb7, U+acba-acbb, U+acbe-acc0, U+acc2-acc3, U+acc5-acdf; +} +/* [65] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.65.woff2) format('woff2'); + unicode-range: U+99df, U+99ed, U+99f1, U+99ff, U+9a01, U+9a08, U+9a0e-9a0f, U+9a19, U+9a2b, U+9a30, U+9a36-9a37, U+9a40, U+9a43, U+9a45, U+9a4d, U+9a55, U+9a57, U+9a5a-9a5b, U+9a5f, U+9a62, U+9a65, U+9a69-9a6a, U+9aa8, U+9ab8, U+9ad3, U+9ae5, U+9aee, U+9b1a, U+9b27, U+9b2a, U+9b31, U+9b3c, U+9b41-9b45, U+9b4f, U+9b54, U+9b5a, U+9b6f, U+9b8e, U+9b91, U+9b9f, U+9bab, U+9bae, U+9bc9, U+9bd6, U+9be4, U+9be8, U+9c0d, U+9c10, U+9c12, U+9c15, U+9c25, U+9c32, U+9c3b, U+9c47, U+9c49, U+9c57, U+9ce5, U+9ce7, U+9ce9, U+9cf3-9cf4, U+9cf6, U+9d09, U+9d1b, U+9d26, U+9d28, U+9d3b, U+9d51, U+9d5d, U+9d60-9d61, U+9d6c, U+9d72, U+9da9, U+9daf, U+9db4, U+9dc4, U+9dd7, U+9df2, U+9df8-9dfa, U+9e1a, U+9e1e, U+9e75, U+9e79, U+9e7d, U+9e7f, U+9e92-9e93, U+9e97, U+9e9d, U+9e9f, U+9ea5, U+9eb4-9eb5, U+9ebb, U+9ebe, U+9ec3, U+9ecd-9ece, U+9ed4, U+9ed8, U+9edb-9edc, U+9ede, U+9ee8, U+9ef4, U+9f07-9f08, U+9f0e, U+9f13, U+9f20, U+9f3b, U+9f4a-9f4b, U+9f4e, U+9f52, U+9f5f, U+9f61, U+9f67, U+9f6a, U+9f6c, U+9f77, U+9f8d, U+9f90, U+9f95, U+9f9c, U+ac02-ac03, U+ac05-ac06, U+ac09-ac0f, U+ac17-ac18, U+ac1b, U+ac1e-ac1f, U+ac21-ac23; +} +/* [66] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.66.woff2) format('woff2'); + unicode-range: U+96a7-96a8, U+96aa, U+96b1, U+96b7, U+96bb, U+96c0-96c1, U+96c4-96c5, U+96c7, U+96c9, U+96cb-96ce, U+96d5-96d6, U+96d9, U+96db-96dc, U+96e2-96e3, U+96e8-96ea, U+96ef-96f0, U+96f2, U+96f6-96f7, U+96f9, U+96fb, U+9700, U+9706-9707, U+9711, U+9713, U+9716, U+9719, U+971c, U+971e, U+9727, U+9730, U+9732, U+9739, U+973d, U+9742, U+9744, U+9748, U+9756, U+975c, U+9761, U+9769, U+976d, U+9774, U+9777, U+977a, U+978b, U+978d, U+978f, U+97a0, U+97a8, U+97ab, U+97ad, U+97c6, U+97cb, U+97dc, U+97f6, U+97fb, U+97ff-9803, U+9805-9806, U+9808, U+980a, U+980c, U+9810-9813, U+9817-9818, U+982d, U+9830, U+9838-9839, U+983b, U+9846, U+984c-984e, U+9854, U+9858, U+985a, U+985e, U+9865, U+9867, U+986b, U+986f, U+98af, U+98b1, U+98c4, U+98c7, U+98db-98dc, U+98e1-98e2, U+98ed-98ef, U+98f4, U+98fc-98fe, U+9903, U+9909-990a, U+990c, U+9910, U+9913, U+9918, U+991e, U+9920, U+9928, U+9945, U+9949, U+994b-994d, U+9951-9952, U+9954, U+9957, U+9996, U+999d, U+99a5, U+99a8, U+99ac-99ae, U+99b1, U+99b3-99b4, U+99b9, U+99c1, U+99d0-99d2, U+99d5, U+99d9, U+99dd; +} +/* [67] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.67.woff2) format('woff2'); + unicode-range: U+920d, U+9210-9212, U+9217, U+921e, U+9234, U+923a, U+923f-9240, U+9245, U+9249, U+9257, U+925b, U+925e, U+9262, U+9264-9266, U+9283, U+9285, U+9291, U+9293, U+9296, U+9298, U+929c, U+92b3, U+92b6-92b7, U+92b9, U+92cc, U+92cf, U+92d2, U+92e4, U+92ea, U+92f8, U+92fc, U+9304, U+9310, U+9318, U+931a, U+931e-9322, U+9324, U+9326, U+9328, U+932b, U+932e-932f, U+9348, U+934a-934b, U+934d, U+9354, U+935b, U+936e, U+9375, U+937c, U+937e, U+938c, U+9394, U+9396, U+939a, U+93a3, U+93a7, U+93ac-93ad, U+93b0, U+93c3, U+93d1, U+93de, U+93e1, U+93e4, U+93f6, U+9404, U+9418, U+9425, U+942b, U+9435, U+9438, U+9444, U+9451-9452, U+945b, U+947d, U+947f, U+9583, U+9589, U+958f, U+9591-9592, U+9594, U+9598, U+95a3-95a5, U+95a8, U+95ad, U+95b1, U+95bb-95bc, U+95c7, U+95ca, U+95d4-95d6, U+95dc, U+95e1-95e2, U+961c, U+9621, U+962a, U+962e, U+9632, U+963b, U+963f-9640, U+9642, U+9644, U+964b-964d, U+9650, U+965b-965f, U+9662-9664, U+966a, U+9670, U+9673, U+9675-9678, U+967d, U+9685-9686, U+968a-968b, U+968d-968e, U+9694-9695, U+9698-9699, U+969b-969c, U+96a3; +} +/* [68] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.68.woff2) format('woff2'); + unicode-range: U+8fa8, U+8fad, U+8faf-8fb2, U+8fc2, U+8fc5, U+8fce, U+8fd4, U+8fe6, U+8fea-8feb, U+8fed, U+8ff0, U+8ff2, U+8ff7, U+8ff9, U+8ffd, U+9000-9003, U+9005-9006, U+9008, U+900b, U+900d, U+900f-9011, U+9014-9015, U+9017, U+9019, U+901d-9023, U+902e, U+9031-9032, U+9035, U+9038, U+903c, U+903e, U+9041-9042, U+9047, U+904a-904b, U+904d-904e, U+9050-9051, U+9054-9055, U+9059, U+905c-905e, U+9060-9061, U+9063, U+9069, U+906d-906f, U+9072, U+9075, U+9077-9078, U+907a, U+907c-907d, U+907f-9084, U+9087-9088, U+908a, U+908f, U+9091, U+9095, U+9099, U+90a2-90a3, U+90a6, U+90a8, U+90aa, U+90af-90b1, U+90b5, U+90b8, U+90c1, U+90ca, U+90de, U+90e1, U+90ed, U+90f5, U+9102, U+9112, U+9115, U+9119, U+9127, U+912d, U+9132, U+9149-914e, U+9152, U+9162, U+9169-916a, U+916c, U+9175, U+9177-9178, U+9187, U+9189, U+918b, U+918d, U+9192, U+919c, U+91ab-91ac, U+91ae-91af, U+91b1, U+91b4-91b5, U+91c0, U+91c7, U+91c9, U+91cb, U+91cf-91d0, U+91d7-91d8, U+91dc-91dd, U+91e3, U+91e7, U+91ea, U+91f5; +} +/* [69] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.69.woff2) format('woff2'); + unicode-range: U+8c6a-8c6b, U+8c79-8c7a, U+8c82, U+8c8a, U+8c8c, U+8c9d-8c9e, U+8ca0-8ca2, U+8ca7-8cac, U+8caf-8cb0, U+8cb3-8cb4, U+8cb6-8cb8, U+8cbb-8cbd, U+8cbf-8cc4, U+8cc7-8cc8, U+8cca, U+8cd1, U+8cd3, U+8cda, U+8cdc, U+8cde, U+8ce0, U+8ce2-8ce4, U+8ce6, U+8cea, U+8ced, U+8cf4, U+8cfb-8cfd, U+8d04-8d05, U+8d07-8d08, U+8d0a, U+8d0d, U+8d13, U+8d16, U+8d64, U+8d66, U+8d6b, U+8d70, U+8d73-8d74, U+8d77, U+8d85, U+8d8a, U+8d99, U+8da3, U+8da8, U+8db3, U+8dba, U+8dbe, U+8dc6, U+8dcb-8dcc, U+8dcf, U+8ddb, U+8ddd, U+8de1, U+8de3, U+8de8, U+8df3, U+8e0a, U+8e0f-8e10, U+8e1e, U+8e2a, U+8e30, U+8e35, U+8e42, U+8e44, U+8e47-8e4a, U+8e59, U+8e5f-8e60, U+8e74, U+8e76, U+8e81, U+8e87, U+8e8a, U+8e8d, U+8eaa-8eac, U+8ec0, U+8ecb-8ecc, U+8ed2, U+8edf, U+8eeb, U+8ef8, U+8efb, U+8efe, U+8f03, U+8f05, U+8f09, U+8f12-8f15, U+8f1b-8f1f, U+8f26-8f27, U+8f29-8f2a, U+8f2f, U+8f33, U+8f38-8f39, U+8f3b, U+8f3e-8f3f, U+8f44-8f45, U+8f49, U+8f4d-8f4e, U+8f5d, U+8f5f, U+8f62, U+8f9b-8f9c, U+8fa3, U+8fa6; +} +/* [70] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.70.woff2) format('woff2'); + unicode-range: U+8941, U+8944, U+895f, U+8964, U+896a, U+8972, U+8981, U+8983, U+8986-8987, U+898f, U+8993, U+8996, U+89a1, U+89a9-89aa, U+89b2, U+89ba, U+89bd, U+89c0, U+89d2, U+89e3, U+89f4, U+89f8, U+8a02-8a03, U+8a08, U+8a0a, U+8a0c, U+8a0e, U+8a13, U+8a16-8a17, U+8a1b, U+8a1d, U+8a1f, U+8a23, U+8a25, U+8a2a, U+8a2d, U+8a31, U+8a34, U+8a36, U+8a3a-8a3b, U+8a50, U+8a54-8a55, U+8a5b, U+8a5e, U+8a60, U+8a62-8a63, U+8a66, U+8a6d-8a6e, U+8a70, U+8a72-8a73, U+8a75, U+8a79, U+8a85, U+8a87, U+8a8c-8a8d, U+8a93, U+8a95, U+8a98, U+8aa0-8aa1, U+8aa3-8aa6, U+8aa8, U+8aaa, U+8ab0, U+8ab2, U+8ab9, U+8abc, U+8abe-8abf, U+8ac2, U+8ac4, U+8ac7, U+8acb, U+8acd, U+8acf, U+8ad2, U+8ad6, U+8adb-8adc, U+8ae1, U+8ae6-8ae7, U+8aea-8aeb, U+8aed-8aee, U+8af1, U+8af6-8af8, U+8afa, U+8afe, U+8b00-8b02, U+8b04, U+8b0e, U+8b10, U+8b14, U+8b16-8b17, U+8b19-8b1b, U+8b1d, U+8b20, U+8b28, U+8b2b-8b2c, U+8b33, U+8b39, U+8b41, U+8b49, U+8b4e-8b4f, U+8b58, U+8b5a, U+8b5c, U+8b66, U+8b6c, U+8b6f-8b70, U+8b74, U+8b77, U+8b7d, U+8b80, U+8b8a, U+8b90, U+8b92-8b93, U+8b96, U+8b9a, U+8c37, U+8c3f, U+8c41, U+8c46, U+8c48, U+8c4a, U+8c4c, U+8c55, U+8c5a, U+8c61; +} +/* [71] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.71.woff2) format('woff2'); + unicode-range: U+858f, U+8591, U+8594, U+859b, U+85a6, U+85a8-85aa, U+85af-85b0, U+85ba, U+85c1, U+85c9, U+85cd-85cf, U+85d5, U+85dc-85dd, U+85e4-85e5, U+85e9-85ea, U+85f7, U+85fa-85fb, U+85ff, U+8602, U+8606-8607, U+860a, U+8616-8617, U+861a, U+862d, U+863f, U+864e, U+8650, U+8654-8655, U+865b-865c, U+865e-865f, U+8667, U+8679, U+868a, U+868c, U+8693, U+86a3-86a4, U+86a9, U+86c7, U+86cb, U+86d4, U+86d9, U+86db, U+86df, U+86e4, U+86ed, U+86fe, U+8700, U+8702-8703, U+8708, U+8718, U+871a, U+871c, U+874e, U+8755, U+8757, U+875f, U+8766, U+8768, U+8774, U+8776, U+8778, U+8782, U+878d, U+879f, U+87a2, U+87b3, U+87ba, U+87c4, U+87e0, U+87ec, U+87ef, U+87f2, U+87f9, U+87fb, U+87fe, U+8805, U+881f, U+8822-8823, U+8831, U+8836, U+883b, U+8840, U+8846, U+884d, U+8852-8853, U+8857, U+8859, U+885b, U+885d, U+8861-8863, U+8868, U+886b, U+8870, U+8872, U+8877, U+887e-887f, U+8881-8882, U+8888, U+888b, U+888d, U+8892, U+8896-8897, U+889e, U+88ab, U+88b4, U+88c1-88c2, U+88cf, U+88d4-88d5, U+88d9, U+88dc-88dd, U+88df, U+88e1, U+88e8, U+88f3-88f5, U+88f8, U+88fd, U+8907, U+8910, U+8912-8913, U+8918-8919, U+8925, U+892a, U+8936, U+8938, U+893b; +} +/* [72] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.72.woff2) format('woff2'); + unicode-range: U+82a6, U+82a9, U+82ac-82af, U+82b3, U+82b7-82b9, U+82bb-82bd, U+82bf, U+82d1-82d2, U+82d4-82d5, U+82d7, U+82db, U+82de-82df, U+82e1, U+82e5-82e7, U+82fd-82fe, U+8301-8305, U+8309, U+8317, U+8328, U+832b, U+832f, U+8331, U+8334-8336, U+8338-8339, U+8340, U+8347, U+8349-834a, U+834f, U+8351-8352, U+8373, U+8377, U+837b, U+8389-838a, U+838e, U+8396, U+8398, U+839e, U+83a2, U+83a9-83ab, U+83bd, U+83c1, U+83c5, U+83c9-83ca, U+83cc, U+83d3, U+83d6, U+83dc, U+83e9, U+83eb, U+83ef-83f2, U+83f4, U+83f9, U+83fd, U+8403-8404, U+840a, U+840c-840e, U+8429, U+842c, U+8431, U+8438, U+843d, U+8449, U+8457, U+845b, U+8461, U+8463, U+8466, U+846b-846c, U+846f, U+8475, U+847a, U+8490, U+8494, U+8499, U+849c, U+84a1, U+84b2, U+84b8, U+84bb-84bc, U+84bf-84c0, U+84c2, U+84c4, U+84c6, U+84c9, U+84cb, U+84cd, U+84d1, U+84da, U+84ec, U+84ee, U+84f4, U+84fc, U+8511, U+8513-8514, U+8517-8518, U+851a, U+851e, U+8521, U+8523, U+8525, U+852c-852d, U+852f, U+853d, U+853f, U+8541, U+8543, U+8549, U+854e, U+8553, U+8559, U+8563, U+8568-856a, U+856d, U+8584, U+8587; +} +/* [73] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.73.woff2) format('woff2'); + unicode-range: U+8033, U+8036, U+803d, U+803f, U+8043, U+8046, U+804a, U+8056, U+8058, U+805a, U+805e, U+806f-8070, U+8072-8073, U+8077, U+807d-807f, U+8084-8087, U+8089, U+808b-808c, U+8096, U+809b, U+809d, U+80a1-80a2, U+80a5, U+80a9-80aa, U+80af, U+80b1-80b2, U+80b4, U+80ba, U+80c3-80c4, U+80cc, U+80ce, U+80da-80db, U+80de, U+80e1, U+80e4-80e5, U+80f1, U+80f4, U+80f8, U+80fd, U+8102, U+8105-8108, U+810a, U+8118, U+811a-811b, U+8123, U+8129, U+812b, U+812f, U+8139, U+813e, U+814b, U+814e, U+8150-8151, U+8154-8155, U+8165-8166, U+816b, U+8170-8171, U+8178-817a, U+817f-8180, U+8188, U+818a, U+818f, U+819a, U+819c-819d, U+81a0, U+81a3, U+81a8, U+81b3, U+81b5, U+81ba, U+81bd-81c0, U+81c2, U+81c6, U+81cd, U+81d8, U+81df, U+81e3, U+81e5, U+81e7-81e8, U+81ed, U+81f3-81f4, U+81fa-81fc, U+81fe, U+8205, U+8208, U+820a, U+820c-820d, U+8212, U+821b-821c, U+821e-821f, U+8221, U+822a-822c, U+8235-8237, U+8239, U+8240, U+8245, U+8247, U+8259, U+8264, U+8266, U+826e-826f, U+8271, U+8276, U+8278, U+827e, U+828b, U+828d-828e, U+8292, U+8299-829a, U+829d, U+829f, U+82a5; +} +/* [74] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.74.woff2) format('woff2'); + unicode-range: U+7d2f-7d30, U+7d33, U+7d35, U+7d39-7d3a, U+7d42-7d46, U+7d50, U+7d5e, U+7d61-7d62, U+7d66, U+7d68, U+7d6a, U+7d6e, U+7d71-7d73, U+7d76, U+7d79, U+7d7f, U+7d8e-7d8f, U+7d93, U+7d9c, U+7da0, U+7da2, U+7dac-7dad, U+7db1-7db2, U+7db4-7db5, U+7db8, U+7dba-7dbb, U+7dbd-7dbf, U+7dc7, U+7dca-7dcb, U+7dd6, U+7dd8, U+7dda, U+7ddd-7dde, U+7de0-7de1, U+7de3, U+7de8-7de9, U+7dec, U+7def, U+7df4, U+7dfb, U+7e09-7e0a, U+7e15, U+7e1b, U+7e1d-7e1f, U+7e21, U+7e23, U+7e2b, U+7e2e-7e2f, U+7e31, U+7e37, U+7e3d-7e3e, U+7e43, U+7e46-7e47, U+7e52, U+7e54-7e55, U+7e5e, U+7e61, U+7e69-7e6b, U+7e6d, U+7e70, U+7e79, U+7e7c, U+7e82, U+7e8c, U+7e8f, U+7e93, U+7e96, U+7e98, U+7e9b-7e9c, U+7f36, U+7f38, U+7f3a, U+7f4c, U+7f50, U+7f54-7f55, U+7f6a-7f6b, U+7f6e, U+7f70, U+7f72, U+7f75, U+7f77, U+7f79, U+7f85, U+7f88, U+7f8a, U+7f8c, U+7f94, U+7f9a, U+7f9e, U+7fa4, U+7fa8-7fa9, U+7fb2, U+7fb8-7fb9, U+7fbd, U+7fc1, U+7fc5, U+7fca, U+7fcc, U+7fce, U+7fd2, U+7fd4-7fd5, U+7fdf-7fe1, U+7fe9, U+7feb, U+7ff0, U+7ff9, U+7ffc, U+8000-8001, U+8003, U+8006, U+8009, U+800c, U+8010, U+8015, U+8017-8018, U+802d; +} +/* [75] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.75.woff2) format('woff2'); + unicode-range: U+7a49, U+7a4d-7a4e, U+7a57, U+7a61-7a62, U+7a69, U+7a6b, U+7a70, U+7a74, U+7a76, U+7a79, U+7a7d, U+7a7f, U+7a81, U+7a84, U+7a88, U+7a92-7a93, U+7a95, U+7a98, U+7a9f, U+7aa9-7aaa, U+7aae-7aaf, U+7aba, U+7ac4-7ac5, U+7ac7, U+7aca, U+7ad7, U+7ad9, U+7add, U+7adf-7ae0, U+7ae3, U+7ae5, U+7aea, U+7aed, U+7aef, U+7af6, U+7af9-7afa, U+7aff, U+7b0f, U+7b11, U+7b19, U+7b1b, U+7b1e, U+7b20, U+7b26, U+7b2d, U+7b39, U+7b46, U+7b49, U+7b4b-7b4d, U+7b4f-7b52, U+7b54, U+7b56, U+7b60, U+7b6c, U+7b6e, U+7b75, U+7b7d, U+7b87, U+7b8b, U+7b8f, U+7b94-7b95, U+7b97, U+7b9a, U+7b9d, U+7ba1, U+7bad, U+7bb1, U+7bb4, U+7bb8, U+7bc0-7bc1, U+7bc4, U+7bc6-7bc7, U+7bc9, U+7bd2, U+7be0, U+7be4, U+7be9, U+7c07, U+7c12, U+7c1e, U+7c21, U+7c27, U+7c2a-7c2b, U+7c3d-7c3f, U+7c43, U+7c4c-7c4d, U+7c60, U+7c64, U+7c6c, U+7c73, U+7c83, U+7c89, U+7c92, U+7c95, U+7c97-7c98, U+7c9f, U+7ca5, U+7ca7, U+7cae, U+7cb1-7cb3, U+7cb9, U+7cbe, U+7cca, U+7cd6, U+7cde-7ce0, U+7ce7, U+7cfb, U+7cfe, U+7d00, U+7d02, U+7d04-7d08, U+7d0a-7d0b, U+7d0d, U+7d10, U+7d14, U+7d17-7d1b, U+7d20-7d21, U+7d2b-7d2c, U+7d2e; +} +/* [76] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.76.woff2) format('woff2'); + unicode-range: U+7704, U+7708-7709, U+770b, U+771e, U+7720, U+7729, U+7737-7738, U+773a, U+773c, U+7740, U+774d, U+775b, U+7761, U+7763, U+7766, U+776b, U+7779, U+777e-777f, U+778b, U+7791, U+779e, U+77a5, U+77ac-77ad, U+77b0, U+77b3, U+77bb-77bc, U+77bf, U+77d7, U+77db-77dc, U+77e2-77e3, U+77e9, U+77ed-77ef, U+7802, U+7812, U+7825-7827, U+782c, U+7832, U+7834, U+7845, U+784f, U+785d, U+786b-786c, U+786f, U+787c, U+7881, U+7887, U+788c-788e, U+7891, U+7897, U+78a3, U+78a7, U+78a9, U+78ba-78bc, U+78c1, U+78c5, U+78ca-78cb, U+78ce, U+78d0, U+78e8, U+78ec, U+78ef, U+78f5, U+78fb, U+7901, U+790e, U+7916, U+792a-792c, U+793a, U+7940-7941, U+7947-7949, U+7950, U+7956-7957, U+795a-795d, U+7960, U+7965, U+7968, U+796d, U+797a, U+797f, U+7981, U+798d-798e, U+7991, U+79a6-79a7, U+79aa, U+79ae, U+79b1, U+79b3, U+79b9, U+79bd-79c1, U+79c9-79cb, U+79d2, U+79d5, U+79d8, U+79df, U+79e4, U+79e6-79e7, U+79e9, U+79fb, U+7a00, U+7a05, U+7a08, U+7a0b, U+7a0d, U+7a14, U+7a17, U+7a19-7a1a, U+7a1c, U+7a1f-7a20, U+7a2e, U+7a31, U+7a36-7a37, U+7a3b-7a3d, U+7a3f-7a40, U+7a46; +} +/* [77] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.77.woff2) format('woff2'); + unicode-range: U+7482-7483, U+7487, U+7489, U+748b, U+7498, U+749c, U+749e-749f, U+74a1, U+74a3, U+74a5, U+74a7-74a8, U+74aa, U+74b0, U+74b2, U+74b5, U+74b9, U+74bd, U+74bf, U+74c6, U+74ca, U+74cf, U+74d4, U+74d8, U+74da, U+74dc, U+74e0, U+74e2-74e3, U+74e6, U+74ee, U+74f7, U+7501, U+7504, U+7511, U+7515, U+7518, U+751a-751b, U+7523, U+7525-7526, U+752b-752c, U+7531, U+7533, U+7538, U+753a, U+7547, U+754c, U+754f, U+7551, U+7553-7554, U+7559, U+755b-755d, U+7562, U+7565-7566, U+756a, U+756f-7570, U+7575-7576, U+7578, U+757a, U+757f, U+7586-7587, U+758a-758b, U+758e-758f, U+7591, U+759d, U+75a5, U+75ab, U+75b1-75b3, U+75b5, U+75b8-75b9, U+75bc-75be, U+75c2, U+75c5, U+75c7, U+75cd, U+75d2, U+75d4-75d5, U+75d8-75d9, U+75db, U+75e2, U+75f0, U+75f2, U+75f4, U+75fa, U+75fc, U+7600, U+760d, U+7619, U+761f-7622, U+7624, U+7626, U+763b, U+7642, U+764c, U+764e, U+7652, U+7656, U+7661, U+7664, U+7669, U+766c, U+7670, U+7672, U+7678, U+7686-7687, U+768e, U+7690, U+7693, U+76ae, U+76ba, U+76bf, U+76c2-76c3, U+76c6, U+76c8, U+76ca, U+76d2, U+76d6, U+76db-76dc, U+76de-76df, U+76e1, U+76e3-76e4, U+76e7, U+76f2, U+76fc, U+76fe, U+7701; +} +/* [78] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.78.woff2) format('woff2'); + unicode-range: U+7230, U+7232, U+7235, U+723a-723b, U+723d-723e, U+7240, U+7246-7248, U+724c, U+7252, U+7258-7259, U+725b, U+725d, U+725f, U+7261-7262, U+7267, U+7272, U+727d, U+7280-7281, U+72a2, U+72a7, U+72ac, U+72af, U+72c0, U+72c2, U+72c4, U+72ce, U+72d0, U+72d7, U+72d9, U+72e1, U+72e9, U+72f8-72f9, U+72fc-72fd, U+730a, U+7316, U+731b-731d, U+7325, U+7329-732b, U+7336-7337, U+733e-733f, U+7344-7345, U+7350, U+7352, U+7357, U+7368, U+736a, U+7370, U+7372, U+7375, U+7378, U+737a-737b, U+7384, U+7386-7387, U+7389, U+738e, U+7394, U+7396-7398, U+739f, U+73a7, U+73a9, U+73ad, U+73b2-73b3, U+73b9, U+73c0, U+73c2, U+73c9-73ca, U+73cc-73cd, U+73cf, U+73d6, U+73d9, U+73dd-73de, U+73e0, U+73e3-73e6, U+73e9-73ea, U+73ed, U+73f7, U+73f9, U+73fd-73fe, U+7401, U+7403, U+7405, U+7407, U+7409, U+7413, U+741b, U+7420-7422, U+7425-7426, U+7428, U+742a-742c, U+742e-7430, U+7433-7436, U+7438, U+743a, U+743f-7441, U+7443-7444, U+744b, U+7455, U+7457, U+7459-745c, U+745e-7460, U+7462, U+7464-7465, U+7468-746a, U+746f, U+747e; +} +/* [79] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.79.woff2) format('woff2'); + unicode-range: U+6f8d-6f8e, U+6f90, U+6f94, U+6f97, U+6fa3-6fa4, U+6fa7, U+6fae-6faf, U+6fb1, U+6fb3, U+6fb9, U+6fbe, U+6fc0-6fc3, U+6fca, U+6fd5, U+6fda, U+6fdf-6fe1, U+6fe4, U+6fe9, U+6feb-6fec, U+6fef, U+6ff1, U+6ffe, U+7001, U+7005-7006, U+7009, U+700b, U+700f, U+7011, U+7015, U+7018, U+701a-701f, U+7023, U+7027-7028, U+702f, U+7037, U+703e, U+704c, U+7050-7051, U+7058, U+705d, U+7070, U+7078, U+707c-707d, U+7085, U+708a, U+708e, U+7092, U+7098-709a, U+70a1, U+70a4, U+70ab-70ad, U+70af, U+70b3, U+70b7-70b9, U+70c8, U+70cb, U+70cf, U+70d8-70d9, U+70dd, U+70df, U+70f1, U+70f9, U+70fd, U+7104, U+7109, U+710c, U+7119-711a, U+711e, U+7126, U+7130, U+7136, U+7147, U+7149-714a, U+714c, U+714e, U+7150, U+7156, U+7159, U+715c, U+715e, U+7164-7167, U+7169, U+716c, U+716e, U+717d, U+7184, U+7189-718a, U+718f, U+7192, U+7194, U+7199, U+719f, U+71a2, U+71ac, U+71b1, U+71b9-71ba, U+71be, U+71c1, U+71c3, U+71c8-71c9, U+71ce, U+71d0, U+71d2, U+71d4-71d5, U+71df, U+71e5-71e7, U+71ed-71ee, U+71fb-71fc, U+71fe-7200, U+7206, U+7210, U+721b, U+722a, U+722c-722d; +} +/* [80] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.80.woff2) format('woff2'); + unicode-range: U+6d5a, U+6d5c, U+6d63, U+6d66, U+6d69-6d6a, U+6d6c, U+6d6e, U+6d74, U+6d78-6d79, U+6d7f, U+6d85, U+6d87-6d89, U+6d8c-6d8e, U+6d91, U+6d93, U+6d95, U+6daf, U+6db2, U+6db5, U+6dc0, U+6dc3-6dc7, U+6dcb, U+6dcf, U+6dd1, U+6dd8-6dda, U+6dde, U+6de1, U+6de8, U+6dea-6deb, U+6dee, U+6df1, U+6df3, U+6df5, U+6df7-6dfb, U+6e17, U+6e19-6e1b, U+6e1f-6e21, U+6e23-6e26, U+6e2b-6e2d, U+6e32, U+6e34, U+6e36, U+6e38, U+6e3a, U+6e3c-6e3e, U+6e43-6e44, U+6e4a, U+6e4d, U+6e56, U+6e58, U+6e5b-6e5c, U+6e5e-6e5f, U+6e67, U+6e6b, U+6e6e-6e6f, U+6e72-6e73, U+6e7a, U+6e90, U+6e96, U+6e9c-6e9d, U+6e9f, U+6ea2, U+6ea5, U+6eaa-6eab, U+6eaf, U+6eb1, U+6eb6, U+6eba, U+6ec2, U+6ec4-6ec5, U+6ec9, U+6ecb-6ecc, U+6ece, U+6ed1, U+6ed3-6ed4, U+6eef, U+6ef4, U+6ef8, U+6efe-6eff, U+6f01-6f02, U+6f06, U+6f0f, U+6f11, U+6f14-6f15, U+6f20, U+6f22-6f23, U+6f2b-6f2c, U+6f31-6f32, U+6f38, U+6f3f, U+6f41, U+6f51, U+6f54, U+6f57-6f58, U+6f5a-6f5b, U+6f5e-6f5f, U+6f62, U+6f64, U+6f6d-6f6e, U+6f70, U+6f7a, U+6f7c-6f7e, U+6f81, U+6f84, U+6f88; +} +/* [81] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.81.woff2) format('woff2'); + unicode-range: U+6ada-6adb, U+6af6, U+6afb, U+6b04, U+6b0a, U+6b0c, U+6b12, U+6b16, U+6b20-6b21, U+6b23, U+6b32, U+6b3a, U+6b3d-6b3e, U+6b46-6b47, U+6b4e, U+6b50, U+6b5f, U+6b61-6b62, U+6b64-6b66, U+6b6a, U+6b72, U+6b77-6b78, U+6b7b, U+6b7f, U+6b83-6b84, U+6b86, U+6b89-6b8a, U+6b96, U+6b98, U+6b9e, U+6bae-6baf, U+6bb2, U+6bb5, U+6bb7, U+6bba, U+6bbc, U+6bbf, U+6bc1, U+6bc5-6bc6, U+6bcb, U+6bcf, U+6bd2-6bd3, U+6bd6-6bd8, U+6bdb, U+6beb-6bec, U+6c08, U+6c0f, U+6c13, U+6c23, U+6c37-6c38, U+6c3e, U+6c40-6c42, U+6c4e, U+6c50, U+6c55, U+6c57, U+6c5a, U+6c5d-6c60, U+6c68, U+6c6a, U+6c6d, U+6c70, U+6c72, U+6c76, U+6c7a, U+6c7d-6c7e, U+6c81-6c83, U+6c85-6c88, U+6c8c, U+6c90, U+6c92-6c96, U+6c99-6c9b, U+6cab, U+6cae, U+6cb3, U+6cb8-6cb9, U+6cbb-6cbf, U+6cc1-6cc2, U+6cc4, U+6cc9-6cca, U+6ccc, U+6cd3, U+6cd7, U+6cdb, U+6ce1-6ce3, U+6ce5, U+6ce8, U+6ceb, U+6cee-6cf0, U+6cf3, U+6d0b-6d0c, U+6d11, U+6d17, U+6d19, U+6d1b, U+6d1e, U+6d25, U+6d27, U+6d29, U+6d32, U+6d35-6d36, U+6d38-6d39, U+6d3b, U+6d3d-6d3e, U+6d41, U+6d59; +} +/* [82] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.82.woff2) format('woff2'); + unicode-range: U+67f0-67f1, U+67f3-67f6, U+67fb, U+67fe, U+6812-6813, U+6816-6817, U+6821-6822, U+682f, U+6838-6839, U+683d, U+6840-6843, U+6848, U+684e, U+6850-6851, U+6853-6854, U+686d, U+6876, U+687f, U+6881, U+6885, U+688f, U+6893-6894, U+6897, U+689d, U+689f, U+68a1-68a2, U+68a7-68a8, U+68ad, U+68af-68b1, U+68b3, U+68b5-68b6, U+68c4-68c5, U+68c9, U+68cb, U+68cd, U+68d2, U+68d5, U+68d7-68d8, U+68da, U+68df-68e0, U+68e7-68e8, U+68ee, U+68f2, U+68f9-68fa, U+6900, U+6905, U+690d-690e, U+6912, U+6927, U+6930, U+693d, U+693f, U+694a, U+6953-6955, U+6957, U+6959-695a, U+695e, U+6960-6963, U+6968, U+696b, U+696d-696f, U+6975, U+6977-6979, U+6995, U+699b-699c, U+69a5, U+69a7, U+69ae, U+69b4, U+69bb, U+69c1, U+69c3, U+69cb-69cd, U+69d0, U+69e8, U+69ea, U+69fb, U+69fd, U+69ff, U+6a02, U+6a0a, U+6a11, U+6a13, U+6a17, U+6a19, U+6a1e-6a1f, U+6a21, U+6a23, U+6a35, U+6a38-6a3a, U+6a3d, U+6a44, U+6a48, U+6a4b, U+6a52-6a53, U+6a58-6a59, U+6a5f, U+6a61, U+6a6b, U+6a80, U+6a84, U+6a89, U+6a8d-6a8e, U+6a97, U+6a9c, U+6aa3, U+6ab3, U+6abb, U+6ac2-6ac3, U+6ad3; +} +/* [83] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.83.woff2) format('woff2'); + unicode-range: U+6607, U+6609-660a, U+660c, U+660f-6611, U+6613-6615, U+661e, U+6620, U+6627-6628, U+662d, U+6630-6631, U+6634, U+6636, U+663a-663b, U+6641, U+6643-6644, U+6649, U+664b, U+664f, U+6659, U+665b, U+665d-665f, U+6664-6669, U+666b, U+666e-666f, U+6673-6674, U+6676-6678, U+6684, U+6687-6689, U+668e, U+6690-6691, U+6696-6698, U+669d, U+66a0, U+66a2, U+66ab, U+66ae, U+66b2-66b4, U+66b9, U+66bb, U+66be, U+66c4, U+66c6-66c7, U+66c9, U+66d6, U+66d9, U+66dc-66dd, U+66e0, U+66e6, U+66f0, U+66f2-66f4, U+66f7, U+66f9-66fa, U+66fc, U+66fe-66ff, U+6703, U+670b, U+670d, U+6714-6715, U+6717, U+671b, U+671d-671f, U+6726-6727, U+672a-672b, U+672d-672e, U+6731, U+6736, U+673a, U+673d, U+6746, U+6749, U+674e-6751, U+6753, U+6756, U+675c, U+675e-675f, U+676d, U+676f-6770, U+6773, U+6775, U+6777, U+677b, U+677e-677f, U+6787, U+6789, U+678b, U+678f-6790, U+6793, U+6795, U+679a, U+679d, U+67af-67b0, U+67b3, U+67b6-67b8, U+67be, U+67c4, U+67cf-67d4, U+67da, U+67dd, U+67e9, U+67ec, U+67ef; +} +/* [84] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.84.woff2) format('woff2'); + unicode-range: U+6392, U+6396, U+6398, U+639b, U+63a0-63a2, U+63a5, U+63a7-63aa, U+63c0, U+63c4, U+63c6, U+63cf, U+63d6, U+63da-63db, U+63e1, U+63ed-63ee, U+63f4, U+63f6-63f7, U+640d, U+640f, U+6414, U+6416-6417, U+641c, U+6422, U+642c-642d, U+643a, U+643e, U+6458, U+6460, U+6469, U+646f, U+6478-647a, U+6488, U+6491-6493, U+649a, U+649e, U+64a4-64a5, U+64ab, U+64ad-64ae, U+64b0, U+64b2, U+64bb, U+64c1, U+64c4-64c5, U+64c7, U+64ca, U+64cd-64ce, U+64d2, U+64d4, U+64d8, U+64da, U+64e1-64e2, U+64e5-64e7, U+64ec, U+64f2, U+64f4, U+64fa, U+64fe, U+6500, U+6504, U+6518, U+651d, U+6523, U+652a-652c, U+652f, U+6536-6539, U+653b, U+653e, U+6548, U+654d-654f, U+6551, U+6556-6557, U+655e, U+6562-6563, U+6566, U+656c-656d, U+6572, U+6574-6575, U+6577-6578, U+657e, U+6582-6583, U+6585, U+658c, U+6590-6591, U+6597, U+6599, U+659b-659c, U+659f, U+65a1, U+65a4-65a5, U+65a7, U+65ab-65ac, U+65af, U+65b7, U+65bc-65bd, U+65c1, U+65c5, U+65cb-65cc, U+65cf, U+65d2, U+65d7, U+65e0, U+65e3, U+65e6, U+65e8-65e9, U+65ec-65ed, U+65f1, U+65f4, U+65fa-65fd, U+65ff, U+6606; +} +/* [85] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.85.woff2) format('woff2'); + unicode-range: U+614c, U+6153, U+6155, U+6158-6159, U+615d, U+615f, U+6162-6164, U+6167-6168, U+616b, U+616e, U+6170, U+6176-6177, U+617d-617e, U+6181-6182, U+618a, U+618e, U+6190-6191, U+6194, U+6198-619a, U+61a4, U+61a7, U+61a9, U+61ab-61ac, U+61ae, U+61b2, U+61b6, U+61ba, U+61be, U+61c3, U+61c7-61cb, U+61e6, U+61f2, U+61f6-61f8, U+61fa, U+61fc, U+61ff-6200, U+6207-6208, U+620a, U+620c-620e, U+6212, U+6216, U+621a, U+621f, U+6221, U+622a, U+622e, U+6230-6231, U+6234, U+6236, U+623e-623f, U+6241, U+6247-6249, U+624d, U+6253, U+6258, U+626e, U+6271, U+6276, U+6279, U+627c, U+627f-6280, U+6284, U+6289-628a, U+6291-6292, U+6295, U+6297-6298, U+629b, U+62ab, U+62b1, U+62b5, U+62b9, U+62bc-62bd, U+62c2, U+62c7-62c9, U+62cc-62cd, U+62cf-62d0, U+62d2-62d4, U+62d6-62d9, U+62db-62dc, U+62ec-62ef, U+62f1, U+62f3, U+62f7, U+62fe-62ff, U+6301, U+6307, U+6309, U+6311, U+632b, U+632f, U+633a-633b, U+633d-633e, U+6349, U+634c, U+634f-6350, U+6355, U+6367-6368, U+636e, U+6372, U+6377, U+637a-637b, U+637f, U+6383, U+6388-6389, U+638c; +} +/* [86] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.86.woff2) format('woff2'); + unicode-range: U+5f11, U+5f13-5f15, U+5f17-5f18, U+5f1b, U+5f1f, U+5f26-5f27, U+5f29, U+5f31, U+5f35, U+5f3a, U+5f3c, U+5f48, U+5f4a, U+5f4c, U+5f4e, U+5f56-5f57, U+5f59, U+5f5b, U+5f62, U+5f66-5f67, U+5f69-5f6d, U+5f70-5f71, U+5f77, U+5f79, U+5f7c, U+5f7f-5f81, U+5f85, U+5f87, U+5f8a-5f8b, U+5f90-5f92, U+5f98-5f99, U+5f9e, U+5fa0-5fa1, U+5fa8-5faa, U+5fae, U+5fb5, U+5fb9, U+5fbd, U+5fc5, U+5fcc-5fcd, U+5fd6-5fd9, U+5fe0, U+5feb, U+5ff5, U+5ffd, U+5fff, U+600f, U+6012, U+6016, U+601c, U+6020-6021, U+6025, U+6028, U+602a, U+602f, U+6041-6043, U+604d, U+6050, U+6052, U+6055, U+6059, U+605d, U+6062-6065, U+6068-606a, U+606c-606d, U+606f-6070, U+6085, U+6089, U+608c-608d, U+6094, U+6096, U+609a-609b, U+609f-60a0, U+60a3-60a4, U+60a7, U+60b0, U+60b2-60b4, U+60b6, U+60b8, U+60bc-60bd, U+60c7, U+60d1, U+60da, U+60dc, U+60df-60e1, U+60f0-60f1, U+60f6, U+60f9-60fb, U+6101, U+6106, U+6108-6109, U+610d-610e, U+6115, U+611a, U+6127, U+6130, U+6134, U+6137, U+613c, U+613e-613f, U+6142, U+6144, U+6147-6148, U+614a-614b; +} +/* [87] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.87.woff2) format('woff2'); + unicode-range: U+5c40, U+5c45-5c46, U+5c48, U+5c4b, U+5c4d-5c4e, U+5c51, U+5c5b, U+5c60, U+5c62, U+5c64-5c65, U+5c6c, U+5c6f, U+5c79, U+5c90-5c91, U+5ca1, U+5ca9, U+5cab-5cac, U+5cb1, U+5cb3, U+5cb5, U+5cb7-5cb8, U+5cba, U+5cbe, U+5cc0, U+5cd9, U+5ce0, U+5ce8, U+5cef-5cf0, U+5cf4, U+5cf6, U+5cfb, U+5cfd, U+5d07, U+5d0d-5d0e, U+5d11, U+5d14, U+5d16-5d17, U+5d19, U+5d27, U+5d29, U+5d4b-5d4c, U+5d50, U+5d69, U+5d6c, U+5d6f, U+5d87, U+5d8b, U+5d9d, U+5da0, U+5da2, U+5daa, U+5db8, U+5dba, U+5dbc-5dbd, U+5dcd, U+5dd2, U+5dd6, U+5de1-5de2, U+5de5-5de8, U+5deb, U+5dee, U+5df1-5df4, U+5df7, U+5dfd-5dfe, U+5e03, U+5e06, U+5e11, U+5e16, U+5e19, U+5e1b, U+5e1d, U+5e25, U+5e2b, U+5e2d, U+5e33, U+5e36, U+5e38, U+5e3d, U+5e3f-5e40, U+5e44-5e45, U+5e47, U+5e4c, U+5e55, U+5e5f, U+5e61-5e63, U+5e72, U+5e77-5e79, U+5e7b-5e7e, U+5e84, U+5e87, U+5e8a, U+5e8f, U+5e95, U+5e97, U+5e9a, U+5e9c, U+5ea0, U+5ea7, U+5eab, U+5ead, U+5eb5-5eb8, U+5ebe, U+5ec2, U+5ec8-5eca, U+5ed0, U+5ed3, U+5ed6, U+5eda-5edb, U+5edf-5ee0, U+5ee2-5ee3, U+5eec, U+5ef3, U+5ef6-5ef7, U+5efa-5efb, U+5f01, U+5f04, U+5f0a; +} +/* [88] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.88.woff2) format('woff2'); + unicode-range: U+59be, U+59c3, U+59c6, U+59c9, U+59cb, U+59d0-59d1, U+59d3-59d4, U+59d9-59da, U+59dc-59dd, U+59e6, U+59e8, U+59ea, U+59ec, U+59ee, U+59f8, U+59fb, U+59ff, U+5a01, U+5a03, U+5a11, U+5a18, U+5a1b-5a1c, U+5a1f-5a20, U+5a25, U+5a29, U+5a36, U+5a3c, U+5a41, U+5a46, U+5a49, U+5a5a, U+5a62, U+5a66, U+5a92, U+5a9a-5a9b, U+5aa4, U+5ac1-5ac2, U+5ac4, U+5ac9, U+5acc, U+5ae1, U+5ae6, U+5ae9, U+5b05, U+5b09, U+5b0b-5b0c, U+5b16, U+5b2a, U+5b40, U+5b43, U+5b51, U+5b54-5b55, U+5b58, U+5b5a, U+5b5c-5b5d, U+5b5f, U+5b63-5b64, U+5b69, U+5b6b, U+5b70-5b71, U+5b75, U+5b7a, U+5b7c, U+5b85, U+5b87-5b88, U+5b8b, U+5b8f, U+5b93, U+5b95-5b99, U+5b9b-5b9c, U+5ba2-5ba6, U+5bac, U+5bae, U+5bb0, U+5bb3-5bb5, U+5bb8-5bb9, U+5bbf-5bc0, U+5bc2-5bc7, U+5bcc, U+5bd0, U+5bd2-5bd4, U+5bd7, U+5bde-5bdf, U+5be1-5be2, U+5be4-5be9, U+5beb-5bec, U+5bee-5bef, U+5bf5-5bf6, U+5bf8, U+5bfa, U+5c01, U+5c04, U+5c07-5c0b, U+5c0d-5c0e, U+5c16, U+5c19, U+5c24, U+5c28, U+5c31, U+5c38-5c3c, U+5c3e-5c3f; +} +/* [89] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.89.woff2) format('woff2'); + unicode-range: U+5703-5704, U+5708, U+570d, U+5712-5713, U+5716, U+5718, U+572d, U+573b, U+5740, U+5742, U+5747, U+574a, U+574d-574e, U+5750-5751, U+5761, U+5764, U+5766, U+576a, U+576e, U+5770, U+5775, U+577c, U+5782, U+5788, U+578b, U+5793, U+57a0, U+57a2-57a3, U+57c3, U+57c7-57c8, U+57cb, U+57df-57e0, U+57f0, U+57f4, U+57f7, U+57f9-57fa, U+57fc, U+5800, U+5802, U+5805-5806, U+5808-580a, U+581e, U+5821, U+5824, U+5827, U+582a, U+582f-5831, U+5835, U+583a, U+584a-584b, U+584f, U+5851, U+5854, U+5857-5858, U+585a, U+585e, U+5861-5862, U+5864, U+5875, U+5879, U+587c, U+587e, U+5883, U+5885, U+5889, U+5893, U+589c, U+589e-589f, U+58a8-58a9, U+58ae, U+58b3, U+58ba-58bb, U+58be, U+58c1, U+58c5, U+58c7, U+58ce, U+58d1, U+58d3, U+58d5, U+58d8-58d9, U+58de-58df, U+58e4, U+58ec, U+58ef, U+58f9-58fb, U+58fd, U+590f, U+5914-5915, U+5919, U+5922, U+592d-592e, U+5931, U+5937, U+593e, U+5944, U+5947-5949, U+594e-5951, U+5954-5955, U+5957, U+595a, U+5960, U+5962, U+5967, U+596a-596e, U+5974, U+5978, U+5982-5984, U+598a, U+5993, U+5996-5997, U+5999, U+59a5, U+59a8, U+59ac, U+59b9, U+59bb; +} +/* [90] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.90.woff2) format('woff2'); + unicode-range: U+539a, U+53a0, U+53a5-53a6, U+53ad, U+53bb, U+53c3, U+53c8-53cb, U+53cd, U+53d4, U+53d6-53d7, U+53db, U+53e1-53e3, U+53e5, U+53e9-53ed, U+53f1, U+53f3, U+53f8, U+5403-5404, U+540a, U+540e-5411, U+541b, U+541d, U+541f-5420, U+5426, U+5429, U+542b, U+5433, U+5438-5439, U+543b-543c, U+543e, U+5442, U+5448, U+544a, U+5451, U+5468, U+546a, U+5471, U+5473, U+5475, U+547b-547d, U+5480, U+5486, U+548e, U+5490, U+54a4, U+54a8, U+54ab-54ac, U+54b3, U+54b8, U+54bd, U+54c0, U+54c4, U+54c8-54c9, U+54e1, U+54e5, U+54e8, U+54ed-54ee, U+54f2, U+54fa, U+5504, U+5506-5507, U+550e, U+5510, U+551c, U+552f, U+5531, U+5535, U+553e, U+5544, U+5546, U+554f, U+5553, U+5556, U+555e, U+5563, U+557c, U+5580, U+5584, U+5586-5587, U+5589-558a, U+5598-559a, U+559c-559d, U+55a7, U+55a9-55ac, U+55ae, U+55c5, U+55c7, U+55d4, U+55da, U+55dc, U+55df, U+55e3-55e4, U+55fd-55fe, U+5606, U+5609, U+5614, U+5617, U+562f, U+5632, U+5634, U+5636, U+5653, U+5668, U+566b, U+5674, U+5686, U+56a5, U+56ac, U+56ae, U+56b4, U+56bc, U+56ca, U+56cd, U+56d1, U+56da-56db, U+56de, U+56e0, U+56f0, U+56f9-56fa; +} +/* [91] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.91.woff2) format('woff2'); + unicode-range: U+516e, U+5175-5178, U+517c, U+5180, U+5186, U+518a, U+518d, U+5192, U+5195, U+5197, U+51a0, U+51a5, U+51aa, U+51ac, U+51b6-51b7, U+51bd, U+51c4, U+51c6, U+51c9, U+51cb-51cd, U+51dc-51de, U+51e1, U+51f0-51f1, U+51f6, U+51f8-51f9, U+51fd, U+5200, U+5203, U+5207-5208, U+520a, U+520e, U+5211, U+5217, U+521d, U+5224-5225, U+522a, U+522e, U+5230, U+5236-523b, U+5243, U+5247, U+524a-524c, U+5254, U+5256, U+525b, U+525d, U+5261, U+5269-526a, U+526f, U+5272, U+5275, U+527d, U+527f, U+5283, U+5287-5289, U+528d, U+5291-5292, U+529f, U+52a3-52a4, U+52a9-52ab, U+52be, U+52c1, U+52c3, U+52c5, U+52c7, U+52c9, U+52cd, U+52d2, U+52d6, U+52d8-52d9, U+52db, U+52dd-52df, U+52e2-52e4, U+52f3, U+52f5, U+52f8, U+52fa-52fb, U+52fe-52ff, U+5305, U+5308, U+530d, U+530f-5310, U+5315, U+5319, U+5320-5321, U+5323, U+532a, U+532f, U+5339, U+533f-5341, U+5343-5344, U+5347-534a, U+534d, U+5351-5354, U+535a, U+535c, U+535e, U+5360, U+5366, U+5368, U+536f-5371, U+5374-5375, U+5377, U+537d, U+537f, U+5384, U+5393, U+5398; +} +/* [92] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.92.woff2) format('woff2'); + unicode-range: U+4f43, U+4f46-4f48, U+4f4d-4f51, U+4f55, U+4f59-4f5a, U+4f69, U+4f6f-4f70, U+4f73, U+4f76, U+4f7a, U+4f7e-4f7f, U+4f81, U+4f83-4f84, U+4f86, U+4f88, U+4f8a-4f8b, U+4f8d, U+4f8f, U+4f91, U+4f96, U+4f98, U+4f9b, U+4f9d, U+4fae-4faf, U+4fb5-4fb6, U+4fbf, U+4fc2-4fc4, U+4fc9-4fca, U+4fce, U+4fd1, U+4fd3-4fd4, U+4fd7, U+4fda, U+4fdf-4fe0, U+4fee-4fef, U+4ff1, U+4ff3, U+4ff5, U+4ff8, U+4ffa, U+5002, U+5006, U+5009, U+500b, U+500d, U+5011-5012, U+5016, U+5019-501a, U+501c, U+501e-501f, U+5021, U+5023-5024, U+5026-5028, U+502a-502d, U+503b, U+5043, U+5047-5049, U+504f, U+5055, U+505a, U+505c, U+5065, U+5074-5076, U+5078, U+5080, U+5085, U+508d, U+5091, U+5098-5099, U+50ac-50ad, U+50b2-50b3, U+50b5, U+50b7, U+50be, U+50c5, U+50c9-50ca, U+50d1, U+50d5-50d6, U+50da, U+50de, U+50e5, U+50e7, U+50ed, U+50f9, U+50fb, U+50ff-5101, U+5104, U+5106, U+5109, U+5112, U+511f, U+5121, U+512a, U+5132, U+5137, U+513a, U+513c, U+5140-5141, U+5143-5148, U+514b-514e, U+5152, U+515c, U+5162, U+5169-516b, U+516d; +} +/* [93] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.93.woff2) format('woff2'); + unicode-range: U+338c-339c, U+339f-33a0, U+33a2-33cb, U+33cf-33d0, U+33d3, U+33d6, U+33d8, U+33db-33dd, U+4e01, U+4e03, U+4e07-4e08, U+4e11, U+4e14-4e15, U+4e18-4e19, U+4e1e, U+4e32, U+4e38-4e39, U+4e42-4e43, U+4e45, U+4e4d-4e4f, U+4e56, U+4e58-4e59, U+4e5d-4e5e, U+4e6b, U+4e6d, U+4e73, U+4e76-4e77, U+4e7e, U+4e82, U+4e86, U+4e88, U+4e8e, U+4e90-4e92, U+4e94-4e95, U+4e98, U+4e9b, U+4e9e, U+4ea1-4ea2, U+4ea4-4ea6, U+4ea8, U+4eab, U+4ead-4eae, U+4eb6, U+4ec0-4ec1, U+4ec4, U+4ec7, U+4ecb, U+4ecd, U+4ed4-4ed5, U+4ed7-4ed9, U+4edd, U+4edf, U+4ee4, U+4ef0, U+4ef2, U+4ef6-4ef7, U+4efb, U+4f01, U+4f09, U+4f0b, U+4f0d-4f11, U+4f2f, U+4f34, U+4f36, U+4f38, U+4f3a, U+4f3c-4f3d; +} +/* [94] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.94.woff2) format('woff2'); + unicode-range: U+3136, U+3138, U+313a-3140, U+3143-3144, U+3150, U+3152, U+3154-3156, U+3158-315b, U+315d-315f, U+3162, U+3164-318c, U+318e, U+3200-321b, U+3231, U+3239, U+3251-325a, U+3260-327b, U+327e-327f, U+328a-3290, U+3294, U+329e, U+32a5, U+3380-3384, U+3388-338b; +} +/* [95] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.95.woff2) format('woff2'); + unicode-range: U+2f7d, U+2f7f-2f8b, U+2f8e-2f90, U+2f92-2f97, U+2f99-2fa0, U+2fa2-2fa3, U+2fa5-2fa9, U+2fac-2fb1, U+2fb3-2fbc, U+2fc1-2fca, U+2fcd-2fd4, U+3003, U+3012-3019, U+301c, U+301e-3020, U+3036, U+3041, U+3043, U+3045, U+3047, U+3049, U+304e, U+3050, U+3052, U+3056, U+305a, U+305c, U+305e, U+3062, U+3065, U+306c, U+3070-307d, U+3080, U+3085, U+3087, U+308e, U+3090-3091, U+30a1, U+30a5, U+30a9, U+30ae, U+30b1-30b2, U+30b4, U+30b6, U+30bc-30be, U+30c2, U+30c5, U+30cc, U+30d2, U+30d4, U+30d8-30dd, U+30e4, U+30e6, U+30e8, U+30ee, U+30f0-30f2, U+30f4-30f6, U+3133, U+3135; +} +/* [96] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.96.woff2) format('woff2'); + unicode-range: U+2541-254b, U+25a4-25a9, U+25b1, U+25b5, U+25b9, U+25bf, U+25c1, U+25c3, U+25c9-25ca, U+25cc, U+25ce, U+25d0-25d1, U+25e6, U+25ef, U+260f, U+261d, U+261f, U+262f, U+2660, U+2664, U+2667-2669, U+266d, U+266f, U+2716, U+271a, U+273d, U+2756, U+2776-277f, U+278a-2793, U+2963, U+2965, U+2ac5-2ac6, U+2acb-2acc, U+2f00, U+2f04, U+2f06, U+2f08, U+2f0a-2f0b, U+2f11-2f12, U+2f14, U+2f17-2f18, U+2f1c-2f1d, U+2f1f-2f20, U+2f23-2f26, U+2f28-2f29, U+2f2b, U+2f2d, U+2f2f-2f32, U+2f38, U+2f3c-2f40, U+2f42-2f4c, U+2f4f-2f52, U+2f54-2f58, U+2f5a-2f66, U+2f69-2f70, U+2f72-2f76, U+2f78, U+2f7a-2f7c; +} +/* [97] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.97.woff2) format('woff2'); + unicode-range: U+2479-2487, U+249c-24d1, U+24d3-24d7, U+24d9-24e9, U+24eb-24f4, U+2500-2501, U+2503, U+250c-2513, U+2515-2516, U+2518-2540; +} +/* [98] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.98.woff2) format('woff2'); + unicode-range: U+215b-215e, U+2162-2169, U+2170-2179, U+2195-2199, U+21b0-21b4, U+21bc, U+21c0, U+21c4-21c5, U+21cd, U+21cf-21d4, U+21e0-21e3, U+21e6-21e9, U+2200, U+2202-2203, U+2206-2209, U+220b-220c, U+220f, U+2211, U+2213, U+221a, U+221d-2220, U+2222, U+2225-2227, U+2229-222c, U+222e, U+2234-2237, U+223d, U+2243, U+2245, U+2248, U+2250-2253, U+225a, U+2260-2262, U+2264-2267, U+226a-226b, U+226e-2273, U+2276-2277, U+2279-227b, U+2280-2287, U+228a-228b, U+2295-2297, U+22a3-22a5, U+22bb-22bc, U+22ce-22cf, U+22da-22db, U+22ee-22ef, U+2306, U+2312, U+2314, U+2467-2478; +} +/* [99] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.99.woff2) format('woff2'); + unicode-range: U+81-82, U+84, U+a2-a5, U+a7-a8, U+aa, U+ac-ad, U+b1-b3, U+b6, U+b8-ba, U+bc-be, U+c0, U+c2, U+c6-cb, U+ce-d0, U+d4, U+d8-d9, U+db-dc, U+de-df, U+e6, U+eb, U+ee-f0, U+f4, U+f7-f9, U+fb, U+fe-ff, U+111, U+126-127, U+132-133, U+138, U+13f-142, U+149-14b, U+152-153, U+166-167, U+2bc, U+2c7, U+2d0, U+2d8-2d9, U+2db-2dd, U+391-394, U+396-3a1, U+3a3-3a9, U+3b2-3b6, U+3b8, U+3bc, U+3be-3c1, U+3c3-3c9, U+2010, U+2015-2016, U+2018-2019, U+201b, U+201f-2021, U+2025, U+2030, U+2033-2036, U+203c, U+203e, U+2042, U+2074, U+207a-207f, U+2081-2084, U+2109, U+2113, U+2116, U+2121, U+2126, U+212b, U+2153-2154; +} +/* [100] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.100.woff2) format('woff2'); + unicode-range: U+e8, U+2da, U+2160, U+2194, U+3054, U+3058, U+306d, U+3086, U+308d, U+30ac, U+30bb, U+30c4, U+30cd-30ce, U+30e2, U+3132, U+3146, U+3149, U+339d, U+4e3b, U+4f0a, U+4fdd, U+4fe1, U+5409, U+540c, U+5834, U+592a-592b, U+5b9a, U+5dde, U+5e0c, U+5e73, U+5f0f, U+60f3, U+653f, U+661f, U+662f, U+667a, U+683c, U+6b4c, U+6c11, U+767c, U+76ee, U+76f4, U+77f3, U+79d1, U+7a7a, U+7b2c, U+7d22, U+8207, U+8a00, U+8a71, U+9280, U+9580, U+958b, U+96c6, U+9762, U+98df, U+9ed1, U+ac2d, U+adc8, U+add3, U+af48, U+b014, U+b134-b135, U+b158, U+b2aa, U+b35f, U+b6a4, U+b9cf, U+bb63, U+bd23, U+be91, U+c29b, U+c3f4, U+c42c, U+c55c, U+c573, U+c58f, U+c78c, U+c7dd, U+c8f5, U+cad1, U+cc48, U+cf10, U+cf20, U+d03c, U+d07d, U+d2a0, U+d30e, U+d38d, U+d3a8, U+d3c8, U+d5e5, U+d5f9, U+d6e4, U+f90a, U+ff02, U+ff1c; +} +/* [101] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.101.woff2) format('woff2'); + unicode-range: U+3b1, U+2466, U+25a1, U+25a3, U+261c, U+3008-3009, U+305b, U+305d, U+3069, U+30a7, U+30ba, U+30cf, U+30ef, U+3151, U+3157, U+4e4b, U+4e5f, U+4e8c, U+4eca, U+4ed6, U+4f5b, U+50cf, U+5149, U+5165, U+5171, U+5229, U+529b, U+5316, U+539f, U+53f2, U+571f, U+5728, U+58eb, U+591c, U+5b78, U+5c11, U+5c55, U+5ddd, U+5e02, U+5fb7, U+60c5, U+610f, U+611f, U+6625, U+66f8, U+6797, U+679c, U+682a, U+6d2a, U+706b, U+7406, U+767b, U+76f8, U+77e5, U+7acb, U+898b, U+8a69, U+8def, U+8fd1, U+901a, U+90e8, U+91cd, U+975e, U+ae14, U+ae6c, U+aec0, U+afc7, U+afc9, U+b01c, U+b028, U+b308, U+b311, U+b314, U+b31c, U+b524, U+b560, U+b764, U+b920, U+b9e3, U+bd48, U+be7d, U+c0db, U+c231, U+c270, U+c2e3, U+c37d, U+c3ed, U+c530, U+c6a5, U+c6dc, U+c7a4, U+c954, U+c974, U+d000, U+d565, U+d667, U+d6c5, U+d79d, U+ff1e; +} +/* [102] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.102.woff2) format('woff2'); + unicode-range: U+131, U+2032, U+2465, U+2642, U+3048, U+3051, U+3083-3084, U+308f, U+30c0, U+30d1, U+30d3, U+30d6, U+30df, U+30e7, U+3153, U+4e16, U+4e8b, U+4ee5, U+5206, U+52a0, U+52d5, U+53e4, U+53ef, U+54c1, U+57ce, U+597d, U+5b8c, U+5ea6, U+5f8c, U+5f97, U+6210, U+6240, U+624b, U+6728, U+6bd4, U+7236, U+7269, U+7279, U+738b, U+7528, U+7530, U+767e, U+798f, U+8005, U+8a18, U+90fd, U+91cc, U+9577, U+9593, U+98a8, U+ac20, U+acf6, U+ad90, U+af5d, U+af80, U+afcd, U+aff0, U+b0a1, U+b0b5, U+b1fd, U+b2fc, U+b380, U+b51b, U+b584, U+b5b3, U+b8fd, U+b93c, U+b9f4, U+bb44, U+bc08, U+bc27, U+bc49, U+be55, U+be64, U+bfb0, U+bfc5, U+c178, U+c21f, U+c314, U+c4f1, U+c58d, U+c664, U+c698, U+c6a7, U+c6c1, U+c9ed, U+cac0, U+cacc, U+cad9, U+ccb5, U+cdcc, U+d0e4, U+d143, U+d320, U+d330, U+d54d, U+ff06, U+ff1f, U+ff5e; +} +/* [103] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.103.woff2) format('woff2'); + unicode-range: U+b4, U+20a9, U+20ac, U+2190, U+24d8, U+2502, U+2514, U+2592, U+25c7-25c8, U+2663, U+3060, U+3064, U+3081, U+3088, U+30a3, U+30a6, U+30aa, U+30b5, U+30c7, U+30ca-30cb, U+30d0, U+30e3, U+30e5, U+339e, U+4e09, U+4eac, U+4f5c, U+5167-5168, U+516c, U+51fa, U+5408, U+540d, U+591a, U+5b57, U+6211, U+65b9, U+660e, U+6642, U+6700, U+6b63, U+6e2f, U+7063, U+7532, U+793e, U+81ea, U+8272, U+82b1, U+897f, U+8eca, U+91ce, U+ac38, U+ad76, U+ae84, U+aecc, U+b07d, U+b0b1, U+b215, U+b2a0, U+b310, U+b3d7, U+b52a, U+b618, U+b775, U+b797, U+bcd5, U+bd59, U+be80, U+bea8, U+bed1, U+bee4-bee5, U+c060, U+c2ef, U+c329, U+c3dc, U+c597, U+c5bd, U+c5e5, U+c69c, U+c9d6, U+ca29, U+ca5c, U+ca84, U+cc39, U+cc3b, U+ce89, U+cee5, U+cf65, U+cf85, U+d058, U+d145, U+d22d, U+d325, U+d37d, U+d3ad, U+d769, U+ff0c; +} +/* [104] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.104.woff2) format('woff2'); + unicode-range: U+2161, U+2228, U+2299, U+2464, U+2517, U+2640, U+3042, U+304a, U+3053, U+3061, U+307f, U+3082, U+308c, U+3092, U+30a8, U+30ab, U+30ad, U+30b0, U+30b3, U+30b7, U+30c1, U+30c6, U+30c9, U+30d5, U+30d7, U+30de, U+30e0-30e1, U+30ec-30ed, U+4e0b, U+4e0d, U+4ee3, U+53f0, U+548c, U+5b89, U+5bb6, U+5c0f, U+611b, U+6771, U+6aa2, U+6bcd, U+6c34, U+6cd5, U+6d77, U+767d, U+795e, U+8ecd, U+9999, U+9ad8, U+ac07, U+ac1a, U+ac40, U+ad0c, U+ad88, U+ada4, U+ae01, U+ae65, U+aebd, U+aec4, U+afe8, U+b139, U+b205, U+b383, U+b38c, U+b42c, U+b461, U+b55c, U+b78f, U+b8fb, U+b9f7, U+bafc, U+bc99, U+bed8, U+bfcd, U+c0bf, U+c0f9, U+c167, U+c204, U+c20f, U+c22f, U+c258, U+c298, U+c2bc, U+c388, U+c501, U+c50c, U+c5b9, U+c5ce, U+c641, U+c648, U+c73d, U+ca50, U+ca61, U+cc4c, U+ceac, U+d0d4, U+d5f7, U+d6d7, U+ff1a; +} +/* [105] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.105.woff2) format('woff2'); + unicode-range: U+2103, U+2463, U+25c6, U+25cb, U+266c, U+3001, U+300a, U+3046, U+304c-304d, U+304f, U+3055, U+3059, U+3063, U+3066-3068, U+306f, U+3089, U+30b8, U+30bf, U+314f, U+4e0a, U+570b, U+5730, U+5916, U+5929, U+5c71, U+5e74, U+5fc3, U+601d, U+6027, U+63d0, U+6709, U+6734, U+751f, U+7684, U+82f1, U+9053, U+91d1, U+97f3, U+ac2f, U+ac4d, U+adc4, U+ade4, U+ae41, U+ae4d-ae4e, U+aed1, U+afb9, U+b0e0, U+b299, U+b365, U+b46c, U+b480, U+b4c8, U+b7b4, U+b819, U+b918, U+baab, U+bab9, U+be8f, U+bed7, U+c0ec, U+c19f, U+c1a5, U+c3d9, U+c464, U+c53d, U+c553, U+c570, U+c5cc, U+c633, U+c6a4, U+c7a3, U+c7a6, U+c886, U+c9d9-c9da, U+c9ec, U+ca0c, U+cc21, U+cd1b, U+cd78, U+cdc4, U+cef8, U+cfe4, U+d0a5, U+d0b5, U+d0ec, U+d15d, U+d188, U+d23c, U+d2ac, U+d729, U+d79b, U+ff01, U+ff08-ff09, U+ff5c; +} +/* [106] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.106.woff2) format('woff2'); + unicode-range: U+2039-203a, U+223c, U+25b3, U+25b7, U+25bd, U+25cf, U+266a, U+3002, U+300b, U+304b, U+3057, U+305f, U+306a-306b, U+307e, U+308a-308b, U+3093, U+30a2, U+30af, U+30b9, U+30c3, U+30c8, U+30e9-30eb, U+33a1, U+4e00, U+524d, U+5357, U+5b50, U+7121, U+884c, U+9751, U+ac94, U+aebe, U+aecd, U+af08, U+af41, U+af49, U+b010, U+b053, U+b109, U+b11b, U+b128, U+b154, U+b291, U+b2e6, U+b301, U+b385, U+b525, U+b5b4, U+b729, U+b72f, U+b738, U+b7ff, U+b837, U+b975, U+ba67, U+bb47, U+bc1f, U+bd90, U+bfd4, U+c27c, U+c324, U+c379, U+c3e0, U+c465, U+c53b, U+c58c, U+c610, U+c653, U+c6cd, U+c813, U+c82f, U+c999, U+c9e0, U+cac4, U+cad3, U+cbd4, U+cc10, U+cc22, U+ccb8, U+ccbc, U+cda5, U+ce84, U+cea3, U+cf67, U+cfe1, U+d241, U+d30d, U+d31c, U+d391, U+d401, U+d479, U+d5c9, U+d5db, U+d649, U+d6d4; +} +/* [107] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.107.woff2) format('woff2'); + unicode-range: U+b0, U+e9, U+2193, U+2462, U+260e, U+261e, U+300e-300f, U+3044, U+30a4, U+30fb-30fc, U+314d, U+5973, U+6545, U+6708, U+7537, U+ac89, U+ac9c, U+acc1, U+ad04, U+ad75, U+ad7d, U+ae45, U+ae61, U+af42, U+b0ab, U+b0af, U+b0b3, U+b12c, U+b194, U+b1a8, U+b220, U+b258, U+b284, U+b2ff, U+b315, U+b371, U+b3d4-b3d5, U+b460, U+b527, U+b534, U+b810, U+b818, U+b98e, U+ba55, U+bbac, U+bc0b, U+bc40, U+bca1, U+bccd, U+bd93, U+be54, U+be5a, U+bf08, U+bf50, U+bf55, U+bfdc, U+c0c0, U+c0d0, U+c0f4, U+c100, U+c11e, U+c170, U+c20d, U+c274, U+c290, U+c308, U+c369, U+c539, U+c587, U+c5ff, U+c6ec, U+c70c, U+c7ad, U+c7c8, U+c83c, U+c881, U+cb48, U+cc60, U+ce69, U+ce6b, U+ce75, U+cf04, U+cf08, U+cf55, U+cf70, U+cffc, U+d0b7, U+d1a8, U+d2c8, U+d384, U+d47c, U+d48b, U+d5dd, U+d5e8, U+d720, U+d759, U+f981; +} +/* [108] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.108.woff2) format('woff2'); + unicode-range: U+e0, U+e2, U+395, U+3b7, U+3ba, U+2460-2461, U+25a0, U+3010-3011, U+306e, U+30f3, U+314a, U+314c, U+5927, U+65b0, U+7e41, U+97d3, U+9ad4, U+ad49, U+ae0b, U+ae0d, U+ae43, U+ae5d, U+aecf, U+af3c, U+af64, U+afd4, U+b080, U+b084, U+b0c5, U+b10c, U+b1e8, U+b2ac, U+b36e, U+b451, U+b515, U+b540, U+b561, U+b6ab, U+b6b1, U+b72c, U+b730, U+b744, U+b800, U+b8ec, U+b8f0, U+b904, U+b968, U+b96d, U+b987, U+b9d9, U+bb36, U+bb49, U+bc2d, U+bc43, U+bcf6, U+bd89, U+be57, U+be61, U+bed4, U+c090, U+c130, U+c148, U+c19c, U+c2f9, U+c36c, U+c37c, U+c384, U+c3df, U+c575, U+c584, U+c660, U+c719, U+c816, U+ca4d, U+ca54, U+cabc, U+cb49, U+cc14, U+cff5, U+d004, U+d038, U+d0b4, U+d0d3, U+d0e0, U+d0ed, U+d131, U+d1b0, U+d31f, U+d33d, U+d3a0, U+d3ab, U+d514, U+d584, U+d6a1, U+d6cc, U+d749, U+d760, U+d799; +} +/* [109] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.109.woff2) format('woff2'); + unicode-range: U+24, U+60, U+3b9, U+3bb, U+3bd, U+2191, U+2606, U+300c-300d, U+3131, U+3134, U+3139, U+3141-3142, U+3148, U+3161, U+3163, U+321c, U+4eba, U+5317, U+ac31, U+ac77, U+ac9f, U+acb9, U+acf0-acf1, U+acfd, U+ad73, U+af3d, U+b00c, U+b04a, U+b057, U+b0c4, U+b188, U+b1cc, U+b214, U+b2db, U+b2ee, U+b304, U+b4ed, U+b518, U+b5bc, U+b625, U+b69c-b69d, U+b7ac, U+b801, U+b86c, U+b959, U+b95c, U+b985, U+ba48, U+bb58, U+bc0c, U+bc38, U+bc85, U+bc9a, U+bf40, U+c068, U+c0bd, U+c0cc, U+c12f, U+c149, U+c1e0, U+c22b, U+c22d, U+c250, U+c2fc, U+c300, U+c313, U+c370, U+c3d8, U+c557, U+c580, U+c5e3, U+c62e, U+c634, U+c6f0, U+c74d, U+c783, U+c78e, U+c796, U+c7bc, U+c92c, U+ca4c, U+cc1c, U+cc54, U+cc59, U+ce04, U+cf30, U+cfc4, U+d140, U+d321, U+d38c, U+d399, U+d54f, U+d587, U+d5d0, U+d6e8, U+d770; +} +/* [110] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.110.woff2) format('woff2'); + unicode-range: U+d7, U+ea, U+fc, U+2192, U+25bc, U+3000, U+3137, U+3145, U+315c, U+7f8e, U+ac13, U+ac71, U+ac90, U+acb8, U+ace7, U+ad7f, U+ae50, U+aef4, U+af34, U+afbc, U+b048, U+b09a, U+b0ad, U+b0bc, U+b113, U+b125, U+b141, U+b20c, U+b2d9, U+b2ed, U+b367, U+b369, U+b374, U+b3cb, U+b4ec, U+b611, U+b760, U+b81b, U+b834, U+b8b0, U+b8e1, U+b989, U+b9d1, U+b9e1, U+b9fa, U+ba4d, U+ba78, U+bb35, U+bb54, U+bbf9, U+bc11, U+bcb3, U+bd05, U+bd95, U+bdd4, U+be10, U+bed0, U+bf51, U+c0d8, U+c232, U+c2b7, U+c2eb, U+c378, U+c500, U+c52c, U+c549, U+c568, U+c598, U+c5c9, U+c61b, U+c639, U+c67c, U+c717, U+c78a, U+c80a, U+c90c-c90d, U+c950, U+c9e7, U+cbe4, U+cca9, U+cce4, U+cdb0, U+ce78, U+ce94, U+ce98, U+cf8c, U+d018, U+d034, U+d0f1, U+d1b1, U+d280, U+d2f8, U+d338, U+d380, U+d3b4, U+d610, U+d69f, U+d6fc, U+d758; +} +/* [111] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.111.woff2) format('woff2'); + unicode-range: U+e7, U+2022, U+203b, U+25c0, U+2605, U+2661, U+3147, U+318d, U+672c, U+8a9e, U+acaa, U+acbc, U+ad1c, U+ae4a, U+ae5c, U+b044, U+b054, U+b0c8-b0c9, U+b2a6, U+b2d0, U+b35c, U+b364, U+b428, U+b454, U+b465, U+b4b7, U+b4e3, U+b51c, U+b5a1, U+b784, U+b790, U+b7ab, U+b7f4, U+b82c, U+b835, U+b8e9, U+b8f8, U+b9d8, U+b9f9, U+ba5c, U+ba64, U+babd, U+bb18, U+bb3b, U+bbff, U+bc0d, U+bc45, U+bc97, U+bcbc, U+be45, U+be75, U+be7c, U+bfcc, U+c0b6, U+c0f7, U+c14b, U+c2b4, U+c30d, U+c4f8, U+c5bb, U+c5d1, U+c5e0, U+c5ee, U+c5fd, U+c606, U+c6c5, U+c6e0, U+c708, U+c81d, U+c820, U+c824, U+c878, U+c918, U+c96c, U+c9e4, U+c9f1, U+cc2e, U+cd09, U+cea1, U+cef5, U+cef7, U+cf64, U+cf69, U+cfe8, U+d035, U+d0ac, U+d230, U+d234, U+d2f4, U+d31d, U+d575, U+d578, U+d608, U+d614, U+d718, U+d751, U+d761, U+d78c, U+d790; +} +/* [112] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.112.woff2) format('woff2'); + unicode-range: U+2665, U+3160, U+4e2d, U+6587, U+65e5, U+ac12, U+ac14, U+ac16, U+ac81, U+ad34, U+ade0, U+ae54, U+aebc, U+af2c, U+afc0, U+afc8, U+b04c, U+b08c, U+b099, U+b0a9, U+b0ac, U+b0ae, U+b0b8, U+b123, U+b179, U+b2e5, U+b2f7, U+b4c0, U+b531, U+b538, U+b545, U+b550, U+b5a8, U+b6f0, U+b728, U+b73b, U+b7ad, U+b7ed, U+b809, U+b864, U+b86d, U+b871, U+b9bf, U+b9f5, U+ba40, U+ba4b, U+ba58, U+ba87, U+baac, U+bbc0, U+bc16, U+bc34, U+bd07, U+bd99, U+be59, U+bfd0, U+c058, U+c0e4, U+c0f5, U+c12d, U+c139, U+c228, U+c529, U+c5c7, U+c635, U+c637, U+c735, U+c77d, U+c787, U+c789, U+c8c4, U+c989, U+c98c, U+c9d0, U+c9d3, U+cc0c, U+cc99, U+cd0c, U+cd2c, U+cd98, U+cda4, U+ce59, U+ce60, U+ce6d, U+cea0, U+d0d0-d0d1, U+d0d5, U+d14d, U+d1a4, U+d29c, U+d2f1, U+d301, U+d39c, U+d3bc, U+d4e8, U+d540, U+d5ec, U+d640, U+d750; +} +/* [113] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.113.woff2) format('woff2'); + unicode-range: U+5e, U+25b2, U+25b6, U+314e, U+ac24, U+ace1, U+ace4, U+ae68, U+af2d, U+b0d0, U+b0e5, U+b150, U+b155, U+b193, U+b2c9, U+b2dd, U+b3c8, U+b3fc, U+b410, U+b458, U+b4dd, U+b5a0, U+b5a4, U+b5bb, U+b7b5, U+b838, U+b840, U+b86f, U+b8f9, U+b960, U+b9e5, U+bab8, U+bb50, U+bc1d, U+bc24-bc25, U+bca8, U+bcbd, U+bd04, U+bd10, U+bd24, U+be48, U+be5b, U+be68, U+c05c, U+c12c, U+c140, U+c15c, U+c168, U+c194, U+c219, U+c27d, U+c2a8, U+c2f1, U+c2f8, U+c368, U+c554-c555, U+c559, U+c564, U+c5d8, U+c5fc, U+c625, U+c65c, U+c6b1, U+c728, U+c794, U+c84c, U+c88c, U+c8e0, U+c8fd, U+c998, U+c9dd, U+cc0d, U+cc30, U+ceec, U+cf13, U+cf1c, U+cf5c, U+d050, U+d07c, U+d0a8, U+d134, U+d138, U+d154, U+d1f4, U+d2bc, U+d329, U+d32c, U+d3d0, U+d3f4, U+d3fc, U+d56b, U+d5cc, U+d600-d601, U+d639, U+d6c8, U+d754, U+d765; +} +/* [114] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.114.woff2) format('woff2'); + unicode-range: U+3c-3d, U+2026, U+24d2, U+314b, U+ac11, U+acf3, U+ad74, U+ad81, U+adf9, U+ae34, U+af43, U+afb8, U+b05d, U+b07c, U+b110, U+b118, U+b17c, U+b180, U+b18d, U+b192, U+b2cc, U+b355, U+b378, U+b4a4, U+b4ef, U+b78d, U+b799, U+b7a9, U+b7fd, U+b807, U+b80c, U+b839, U+b9b4, U+b9db, U+ba3c, U+bab0, U+bba4, U+bc94, U+be4c, U+c154, U+c1c4, U+c26c, U+c2ac, U+c2ed, U+c4f4, U+c55e, U+c561, U+c571, U+c5b5, U+c5c4, U+c654-c655, U+c695, U+c6e8, U+c6f9, U+c724, U+c751, U+c775, U+c7a0, U+c7c1, U+c874, U+c880, U+c9d5, U+c9f8, U+cabd, U+cc29, U+cc2c, U+cca8, U+ccab, U+ccd0, U+ce21, U+ce35, U+ce7c, U+ce90, U+cee8, U+cef4, U+cfe0, U+d070, U+d0b9, U+d0c1, U+d0c4, U+d0c8, U+d15c, U+d1a1, U+d2c0, U+d300, U+d314, U+d3ed, U+d478, U+d480, U+d48d, U+d508, U+d53d, U+d5e4, U+d611, U+d61c, U+d68d, U+d6a8, U+d798; +} +/* [115] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.115.woff2) format('woff2'); + unicode-range: U+23, U+25, U+5f, U+a9, U+ac08, U+ac78, U+aca8, U+acac, U+ace8, U+ad70, U+adc0, U+addc, U+b137, U+b140, U+b208, U+b290, U+b2f5, U+b3c5, U+b3cc, U+b420, U+b429, U+b529, U+b530, U+b77d, U+b79c, U+b7a8, U+b7c9, U+b7f0, U+b7fc, U+b828, U+b860, U+b9ad, U+b9c1, U+b9c9, U+b9dd-b9de, U+b9e8, U+ba38-ba39, U+babb, U+bc00, U+bc8c, U+bca0, U+bca4, U+bcd1, U+bcfc, U+bd09, U+bdf0, U+be60, U+c0ad, U+c0b4, U+c0bc, U+c190, U+c1fc, U+c220, U+c288, U+c2b9, U+c2f6, U+c528, U+c545, U+c558, U+c5bc, U+c5d4, U+c600, U+c644, U+c6c0, U+c6c3, U+c721, U+c798, U+c7a1, U+c811, U+c838, U+c871, U+c904, U+c990, U+c9dc, U+cc38, U+cc44, U+cca0, U+cd1d, U+cd95, U+cda9, U+ce5c, U+cf00, U+cf58, U+d150, U+d22c, U+d305, U+d328, U+d37c, U+d3f0, U+d551, U+d5a5, U+d5c8, U+d5d8, U+d63c, U+d64d, U+d669, U+d734, U+d76c; +} +/* [116] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.116.woff2) format('woff2'); + unicode-range: U+26, U+2b, U+3e, U+40, U+7e, U+ac01, U+ac19, U+ac1d, U+aca0, U+aca9, U+acb0, U+ad8c, U+ae09, U+ae38, U+ae40, U+aed8, U+b09c, U+b0a0, U+b108, U+b204, U+b298, U+b2d8, U+b2eb-b2ec, U+b2f4, U+b313, U+b358, U+b450, U+b4e0, U+b54c, U+b610, U+b780, U+b78c, U+b791, U+b8e8, U+b958, U+b974, U+b984, U+b9b0, U+b9bc-b9bd, U+b9ce, U+ba70, U+bbfc, U+bc0f, U+bc15, U+bc1b, U+bc31, U+bc95, U+bcc0, U+bcc4, U+bd81, U+bd88, U+c0c8, U+c11d, U+c13c, U+c158, U+c18d, U+c1a1, U+c21c, U+c4f0, U+c54a, U+c560, U+c5b8, U+c5c8, U+c5f4, U+c628, U+c62c, U+c678, U+c6cc, U+c808, U+c810, U+c885, U+c88b, U+c900, U+c988, U+c99d, U+c9c8, U+cc3d-cc3e, U+cc45, U+cd08, U+ce20, U+cee4, U+d074, U+d0a4, U+d0dd, U+d2b9, U+d3b8, U+d3c9, U+d488, U+d544, U+d559, U+d56d, U+d588, U+d615, U+d648, U+d655, U+d658, U+d65c; +} +/* [117] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.117.woff2) format('woff2'); + unicode-range: U+d, U+48, U+7c, U+ac10, U+ac15, U+ac74, U+ac80, U+ac83, U+acc4, U+ad11, U+ad50, U+ad6d, U+adfc, U+ae00, U+ae08, U+ae4c, U+b0a8, U+b124, U+b144, U+b178, U+b274, U+b2a5, U+b2e8, U+b2f9, U+b354, U+b370, U+b418, U+b41c, U+b4f1, U+b514, U+b798, U+b808, U+b824-b825, U+b8cc, U+b978, U+b9d0, U+b9e4, U+baa9, U+bb3c, U+bc18, U+bc1c, U+bc30, U+bc84, U+bcf5, U+bcf8, U+bd84, U+be0c, U+be14, U+c0b0, U+c0c9, U+c0dd, U+c124, U+c2dd, U+c2e4, U+c2ec, U+c54c, U+c57c-c57d, U+c591, U+c5c5-c5c6, U+c5ed, U+c608, U+c640, U+c6b8, U+c6d4, U+c784, U+c7ac, U+c800-c801, U+c9c1, U+c9d1, U+cc28, U+cc98, U+cc9c, U+ccad, U+cd5c, U+cd94, U+cd9c, U+cde8, U+ce68, U+cf54, U+d0dc, U+d14c, U+d1a0, U+d1b5, U+d2f0, U+d30c, U+d310, U+d398, U+d45c, U+d50c, U+d53c, U+d560, U+d568, U+d589, U+d604, U+d6c4, U+d788; +} +/* [118] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.118.woff2) format('woff2'); + unicode-range: U+39, U+49, U+4d-4e, U+a0, U+ac04, U+ac1c, U+ac70, U+ac8c, U+acbd, U+acf5, U+acfc, U+ad00, U+ad6c, U+adf8, U+b098, U+b0b4, U+b294, U+b2c8, U+b300, U+b3c4, U+b3d9, U+b4dc, U+b4e4, U+b77c, U+b7ec, U+b85d, U+b97c, U+b9c8, U+b9cc, U+ba54, U+ba74, U+ba85, U+baa8, U+bb34, U+bb38, U+bbf8, U+bc14, U+bc29, U+bc88, U+bcf4, U+bd80, U+be44, U+c0c1, U+c11c, U+c120, U+c131, U+c138, U+c18c, U+c218, U+c2b5, U+c2e0, U+c544, U+c548, U+c5b4, U+c5d0, U+c5ec, U+c5f0, U+c601, U+c624, U+c694, U+c6a9, U+c6b0, U+c6b4, U+c6d0, U+c704, U+c720, U+c73c, U+c740, U+c744, U+c74c, U+c758, U+c77c, U+c785, U+c788, U+c790-c791, U+c7a5, U+c804, U+c815, U+c81c, U+c870, U+c8fc, U+c911, U+c9c4, U+ccb4, U+ce58, U+ce74, U+d06c, U+d0c0, U+d130, U+d2b8, U+d3ec, U+d504, U+d55c, U+d569, U+d574, U+d638, U+d654, U+d68c; +} +/* [119] */ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64px_1hVWr0wuPNGmlQNMEfD4.119.woff2) format('woff2'); + unicode-range: U+20-22, U+27-2a, U+2c-38, U+3a-3b, U+3f, U+41-47, U+4a-4c, U+4f-5d, U+61-7b, U+7d, U+a1, U+ab, U+ae, U+b7, U+bb, U+bf, U+2013-2014, U+201c-201d, U+2122, U+ac00, U+ace0, U+ae30, U+b2e4, U+b85c, U+b9ac, U+c0ac, U+c2a4, U+c2dc, U+c774, U+c778, U+c9c0, U+d558; +} diff --git a/static/css/main(Ver_2).css b/WebServer/static/css/main(Ver_2).css similarity index 100% rename from static/css/main(Ver_2).css rename to WebServer/static/css/main(Ver_2).css diff --git a/static/css/main.css b/WebServer/static/css/main.css similarity index 100% rename from static/css/main.css rename to WebServer/static/css/main.css diff --git a/static/css/new.css b/WebServer/static/css/new.css similarity index 100% rename from static/css/new.css rename to WebServer/static/css/new.css diff --git a/static/images/0 people.png b/WebServer/static/images/0 people.png similarity index 100% rename from static/images/0 people.png rename to WebServer/static/images/0 people.png diff --git a/static/images/1 people.png b/WebServer/static/images/1 people.png similarity index 100% rename from static/images/1 people.png rename to WebServer/static/images/1 people.png diff --git a/static/images/2 people.png b/WebServer/static/images/2 people.png similarity index 100% rename from static/images/2 people.png rename to WebServer/static/images/2 people.png diff --git a/static/images/3 people.png b/WebServer/static/images/3 people.png similarity index 100% rename from static/images/3 people.png rename to WebServer/static/images/3 people.png diff --git a/static/images/3analysis.jpg b/WebServer/static/images/3analysis.jpg similarity index 100% rename from static/images/3analysis.jpg rename to WebServer/static/images/3analysis.jpg diff --git a/static/images/4 people.png b/WebServer/static/images/4 people.png similarity index 100% rename from static/images/4 people.png rename to WebServer/static/images/4 people.png diff --git a/static/images/5 people.png b/WebServer/static/images/5 people.png similarity index 100% rename from static/images/5 people.png rename to WebServer/static/images/5 people.png diff --git a/static/images/6 people.png b/WebServer/static/images/6 people.png similarity index 100% rename from static/images/6 people.png rename to WebServer/static/images/6 people.png diff --git a/static/images/Kakao_lion.png b/WebServer/static/images/Kakao_lion.png similarity index 100% rename from static/images/Kakao_lion.png rename to WebServer/static/images/Kakao_lion.png diff --git a/static/images/SSCC_logo.png b/WebServer/static/images/SSCC_logo.png similarity index 100% rename from static/images/SSCC_logo.png rename to WebServer/static/images/SSCC_logo.png diff --git a/static/images/SSCC_logo_rev.png b/WebServer/static/images/SSCC_logo_rev.png similarity index 100% rename from static/images/SSCC_logo_rev.png rename to WebServer/static/images/SSCC_logo_rev.png diff --git a/static/images/analysis.jpg b/WebServer/static/images/analysis.jpg similarity index 100% rename from static/images/analysis.jpg rename to WebServer/static/images/analysis.jpg diff --git a/static/images/analysis_outdoor.jpg b/WebServer/static/images/analysis_outdoor.jpg similarity index 100% rename from static/images/analysis_outdoor.jpg rename to WebServer/static/images/analysis_outdoor.jpg diff --git a/static/images/discord.png b/WebServer/static/images/discord.png similarity index 100% rename from static/images/discord.png rename to WebServer/static/images/discord.png diff --git a/static/images/facebook.png b/WebServer/static/images/facebook.png similarity index 100% rename from static/images/facebook.png rename to WebServer/static/images/facebook.png diff --git a/static/images/humidity.png b/WebServer/static/images/humidity.png similarity index 100% rename from static/images/humidity.png rename to WebServer/static/images/humidity.png diff --git a/static/images/instagram.png b/WebServer/static/images/instagram.png similarity index 100% rename from static/images/instagram.png rename to WebServer/static/images/instagram.png diff --git a/static/images/kakao.png b/WebServer/static/images/kakao.png similarity index 100% rename from static/images/kakao.png rename to WebServer/static/images/kakao.png diff --git a/static/images/logo.png b/WebServer/static/images/logo.png similarity index 100% rename from static/images/logo.png rename to WebServer/static/images/logo.png diff --git a/static/images/notion.png b/WebServer/static/images/notion.png similarity index 100% rename from static/images/notion.png rename to WebServer/static/images/notion.png diff --git a/static/images/people.png b/WebServer/static/images/people.png similarity index 100% rename from static/images/people.png rename to WebServer/static/images/people.png diff --git a/static/images/photo_out.jpg b/WebServer/static/images/photo_out.jpg similarity index 100% rename from static/images/photo_out.jpg rename to WebServer/static/images/photo_out.jpg diff --git a/static/images/temperature.png b/WebServer/static/images/temperature.png similarity index 100% rename from static/images/temperature.png rename to WebServer/static/images/temperature.png diff --git a/WebServer/temp/analysis.jpg b/WebServer/temp/analysis.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34046158b6062b991abe79503e014784641bd8da GIT binary patch literal 120892 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 x#`aCuqSAV9()|Jk(kD_Z~n literal 0 HcmV?d00001 diff --git a/photo.jpg b/WebServer/temp/photo.jpg similarity index 100% rename from photo.jpg rename to WebServer/temp/photo.jpg diff --git a/WebServer/templates/Contribute.html b/WebServer/templates/Contribute.html new file mode 100644 index 0000000..b9c9f2c --- /dev/null +++ b/WebServer/templates/Contribute.html @@ -0,0 +1,41 @@ + + + + + + Contributor + + + + + + + + + +

+

Developer

+







+

Team Leader

+

36기 백승우

+

+

Machine & Server

+

40기 원영진

+

+

Web

+

36기 백승우

+







+ + + + + +

@sscc_ssu

+
+
+ + + + \ No newline at end of file diff --git a/templates/docs.html b/WebServer/templates/docs.html similarity index 100% rename from templates/docs.html rename to WebServer/templates/docs.html diff --git a/templates/image.html b/WebServer/templates/image.html similarity index 100% rename from templates/image.html rename to WebServer/templates/image.html diff --git a/SSCCounter_Re/index(Ver_8).html b/WebServer/templates/index(Ver_8).html similarity index 82% rename from SSCCounter_Re/index(Ver_8).html rename to WebServer/templates/index(Ver_8).html index 59eac00..a7a682f 100644 --- a/SSCCounter_Re/index(Ver_8).html +++ b/WebServer/templates/index(Ver_8).html @@ -28,21 +28,8 @@ Board -   -

@@ -59,7 +46,9 @@

{{Accessor}}

-visitor counter + + @@ -107,8 +96,8 @@

{{Humidity}}

Kakao Image - - © 2022 SoongSil Computing Club + + © 2023 SoongSil Computing Club diff --git a/templates/manager.html b/WebServer/templates/manager.html similarity index 100% rename from templates/manager.html rename to WebServer/templates/manager.html diff --git a/templates/new.html b/WebServer/templates/new.html similarity index 100% rename from templates/new.html rename to WebServer/templates/new.html diff --git a/templates/test.html b/WebServer/templates/test.html similarity index 100% rename from templates/test.html rename to WebServer/templates/test.html diff --git a/WebServer/utils/count/__pycache__/yolo.cpython-310.pyc b/WebServer/utils/count/__pycache__/yolo.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..faece3c336095b07dfb49b650f225a60414d12d1 GIT binary patch literal 2717 zcmZuz-H#kc5%2E#*x9eUy}j={CpiTqSOj;M2oylh*~UH-EA~0!j1rF$P3ES1cV|62 zv+n8jeb6IWI!7Q-r0@s{=$5ze#B2V7yz$Pw^1>1xc#e>cs@eOnrSzz4ySlontGcUx zy-B@ZA<+KyKnvj1Y^L#Uaxeh&D2f_)b5pgHK)Mdc4$mkocLCMbvH@NwXaPyeC zCa1fkWsO0H?6hd^a9;@(_C6lb?E80fe7MKPQWhZ>=|*5iAAtxaT|Dxm%yr% z*B&NOa!V)?s6+-PD4sVQThP(#^ePZVdh~>8s+l%M#&3uRy=R=5BLZXV*Q8C0y_{m! z9+6w*n1ZCl3G8I-1QcwXH*^(^&q7aEfOLo^ACxmt=n)N$FOg;Pd-j-tDjlOHL|%>j zLm|D`?~Am>a<;yi)9`beo2iJ}pOdfO+~^A)`Wt)c{>G0tw>N+AlN)c`*x22@c{3Tt zO300O#on%vPhd1uVU%tJIKOcSC$K&^%qv%;FjYa)A8b|8EgOhU7;T;&wVpqvb&hPjaH~bYo|x^-xyYao}IT>V1QaTp{GBDYvZ&-GfUGRdEdzFtdu#5 z_E^t=OJk53tj#dfFv~u+v$7^V^Tg8S5v6d!Ft&k~Ml`E*NLGbjgI?E_TjT>To6=M8 z>t@q>nnTun#Fk0cP|itNH$Y=XH}nk5GE{3x2NP zs~7V5g0Ef37l5DD^SrtW$p-q1z|ZN03w}x0PpW!RFX?%`&@qb$YA01y)6HXAa8;1c z;OOz@eNVmr)M^{QTeLO!8#5!S9QllRSR zFbdq`rsk2}rr1x-f`PUg>g1xk2v$F&DS zrb*m+@5%BpzHJ@8)*9YHGO-=!E>w8hMcUva?JAJ<+Bp^L;om8khF%)cGYA15vms~br zK4z9{+Wy7vTiXx4oA>X%b9ehaZ};AfyLa=-otTS*Z7CD!mcstN43%iT zQa}c5gwOyO86F8ak3lS;W2GSS(-ii#y9K1=)_%wfOzHXnMp5dT7^Z6i4yA6nSnY*8 zb*lhY?U0K&5UFeJ6}}s=$Sw2Y6$z8rwTrt+0ibXbP;)DnS}-dRjlF}5(P2*abK1@6 zK~4`L0*nS+tHwdByn#ptk&uXAd1Yb{Ux3_-{5=unRsirVC$LvwUjchl6KA|+uLnn& z;=QFY5S!JQ%^K7`tr=6yG)!tzhXEKCkm%3`ejvx*WK%H9p0fYivkqvOMuSyAZqhmE z>`doX7=MqNr%jNVr{+_zO4(_Rv8N_GT73avU-apP_YkAQ_ojf^4`HCNjMxZ)i2}3& zxE62-;F=i<9$k2XX=ZldFT!6Cj!Dnbrna~Ruwlbj0{F3&&7G6d#E!N{>=;3qX}gWD zYI$djCpE?w_^5G~`h#wwk|OVo@H&)dc!K0Zs5^=4&T8@>*Wf++4)F53NG_6U_$^@n z^SjUf{kLa7UHjE$wzjslwY9c({s6<=YuVaYfBgvG$W%#* literal 0 HcmV?d00001 diff --git a/WebServer/utils/count/yolo.py b/WebServer/utils/count/yolo.py new file mode 100644 index 0000000..2b015b6 --- /dev/null +++ b/WebServer/utils/count/yolo.py @@ -0,0 +1,92 @@ +import cv2 +import numpy as np +from datetime import datetime + + +class YoloDetector: + def __init__(self, weights_path, cfg_path, framework): + # YOLO 네트워크 불러오기 + self.net = cv2.dnn.readNet(weights_path, cfg_path, framework) + self.layer_names = self.net.getLayerNames() + self.output_layers = [self.layer_names[i - 1] + for i in self.net.getUnconnectedOutLayers()] + + def detect_objects(self, frame, size, score_threshold, nms_threshold): + # 사물 class + classes = ["person"] + # 이미지의 높이, 너비, 채널 받아오기 + height, width, channels = frame.shape + # 네트워크에 넣기 위한 전처리 + blob = cv2.dnn.blobFromImage( + frame, 0.00392, (size, size), (0, 0, 0), True, crop=False) + # 전처리된 blob 네트워크에 입력, readNet으로 만든 객체에 .setInput 함수로 적용 + self.net.setInput(blob) + # 결과 받아오기 + outs = self.net.forward(self.output_layers) + + # 결과 데이터를 저장할 리스트들 + class_ids = [] + confidences = [] + boxes = [] + + for out in outs: + for detection in out: + scores = detection[5:] + class_id = np.argmax(scores) + confidence = scores[class_id] + if confidence > 0.1: # 신뢰도가 0.1보다 큰 경우에만 객체를 탐지로 인정 + center_x = int(detection[0] * width) + center_y = int(detection[1] * height) + + w = int(detection[2] * width) + h = int(detection[3] * height) + + x = int(center_x - w / 2) + y = int(center_y - h / 2) + + boxes.append([x, y, w, h]) + confidences.append(float(confidence)) + class_ids.append(class_id) + + # Non-Maximum Suppression (NMS)를 사용하여 중복된 탐지 박스를 제거 + indexes = cv2.dnn.NMSBoxes( + boxes, confidences, score_threshold=score_threshold, nms_threshold=nms_threshold) + + ncnt_people = 0 + + for i in range(len(boxes)): + if i in indexes: + x, y, w, h = boxes[i] + class_name = "person" + label = f"{class_name} {confidences[i]:.2f}" + color = (0, 255, 0) + try: + class_name = classes[class_ids[i]] + if class_name == "person": + ncnt_people += 1 # 사람이 인식되면 ncnt_people 변수 +1 + cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2) + cv2.rectangle( + frame, (x-1, y), (x + len(class_name) * 13 + 65, y - 25), color, -1) + cv2.putText(frame, label, (x, y - 8), + cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 0), 2) + except IndexError: + pass + cv2.imwrite('./temp/analysis.jpg', frame) # 이미지 저장 + + return ncnt_people + + def run_machine(self): + current_time = str(datetime.now()) # 현재시간 측정 + standard_time = current_time[11:19] # 기준 시간 설정 (시, 분) + + img = "./temp/photo.jpg" # 이미지 경로 + frame = cv2.imread(img) # 이미지 읽어오기 + + # 입력 사이즈 리스트 (Yolov3에서 사용되는 네트워크 입력 이미지 사이즈) + size_list = [320, 416, 608] + ncnt_people = self.detect_objects( + frame=frame, size=size_list[2], score_threshold=0.4, nms_threshold=0.4) # 이미지 분석 + + print("시간: {0} >>> SSCCount: {1} 명".format(datetime.now(), ncnt_people)) + + return standard_time, ncnt_people \ No newline at end of file diff --git a/WebServer/utils/count/yolo_test.py b/WebServer/utils/count/yolo_test.py new file mode 100644 index 0000000..fb245c5 --- /dev/null +++ b/WebServer/utils/count/yolo_test.py @@ -0,0 +1,17 @@ +from datetime import datetime +import time + +from yolo import YoloDetector + +if __name__ == "__main__": + yolo_machine = YoloDetector( + "./Yolo_Folder/yolov3.weights", "./Yolo_Folder/yolov3.cfg", "darknet") + print("yolo ready") + + while True: + try: + standard_time, ncnt_people = yolo_machine.run_machine() + except: + print( + f"시간: {datetime.now()} >>> SSCCount: Error!") + time.sleep(1) \ No newline at end of file diff --git a/Yolo_Folder/yolov3.cfg b/WebServer/yolo_data/yolov3.cfg similarity index 100% rename from Yolo_Folder/yolov3.cfg rename to WebServer/yolo_data/yolov3.cfg diff --git a/Yolo_Folder/yolov3.md b/WebServer/yolo_data/yolov3.md similarity index 100% rename from Yolo_Folder/yolov3.md rename to WebServer/yolo_data/yolov3.md diff --git a/Yolo_Analysis.py b/Yolo_Analysis.py deleted file mode 100644 index 22362e7..0000000 --- a/Yolo_Analysis.py +++ /dev/null @@ -1,112 +0,0 @@ -# -*- coding: utf-8 -*- - -# ============ Set ============ - -import cv2 -import numpy as np -from datetime import datetime -import time - -# 변수 지정 -previous_time, standard_time, ncnt_people = 0, 0, 0 -ksize = 20 # 블러 처리에 사용할 커널 크기 - -# 사물 class -classes = ["person"] -# classes = ["person", "bench", "umbrella", "handbag","bottle", "chair", "bed", "dining table", -# "laptop", "remote", "keyboard", "cell phone", "microwave", "refrigerator", "book"] - -# Yolov3 네트워크 블러오기 -net = cv2.dnn.readNet("./Yolo_Folder/yolov3.weights", "./Yolo_Folder/yolov3.cfg") -layer_names = net.getLayerNames() -output_layers = [layer_names[i - 1] for i in net.getUnconnectedOutLayers()] - - - -# ============ Function ============ - -# Yolov3 분석 함수 -def yolo(frame, size, score_threshold, nms_threshold): - global ncnt_people - height, width, channels = frame.shape # 이미지의 높이, 너비, 채널 받아오기 - blob = cv2.dnn.blobFromImage(frame, 0.00392, (size, size), (0, 0, 0), True, crop=False) # 네트워크에 넣기 위한 전처리 - net.setInput(blob) # 전치리된 blob 네트워크에 입력 - outs = net.forward(output_layers) # 결과 받아오기 - # 각각의 데이터를 저장할 빈 리스트 - class_ids = [] - confidences = [] - boxes = [] - for out in outs: - for detection in out: - scores = detection[5:] - class_id = np.argmax(scores) - confidence = scores[class_id] - if confidence > 0.1: - # 탐지된 객체의 너비, 높이 및 중앙 좌표값 찾기 - center_x = int(detection[0] * width) - center_y = int(detection[1] * height) - w = int(detection[2] * width) - h = int(detection[3] * height) - # 객체의 사각형 테두리 중 좌상단 좌표값 찾기 - x = int(center_x - w / 2) - y = int(center_y - h / 2) - boxes.append([x, y, w, h]) - confidences.append(float(confidence)) - class_ids.append(class_id) - indexes = cv2.dnn.NMSBoxes(boxes, confidences, score_threshold=score_threshold, nms_threshold=nms_threshold)# 후보 박스(x, y, width, height)와 confidence(상자가 물체일 확률) 출력 - ncnt_people = 0 - for i in range(len(boxes)): - if i in indexes: - x, y, w, h = boxes[i] - class_name = "People" - label = f"{class_name} {confidences[i]:.2f}" - color = (0, 255, 0) - try: # 인식된 사물 분석 시도 - class_name = classes[class_ids[i]] - # if class_name = "refrigerator": - if class_name == "person": - ncnt_people += 1 # 사람이 인식되면 ncnt_people 변수 +1 - cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2) - cv2.rectangle(frame, (x-1, y), (x + len(class_name) * 13 + 65, y -25), color, -1) - cv2.putText(frame, label, (x, y - 8), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 0), 2) - except IndexError: # 오류 발생시 pass - pass - cv2.imwrite('./static/images/analysis.jpg', frame) # 이미지 저장 - return frame - -def machine(): - global previous_time, ncnt_people, standard_time - moment_time = str(datetime.now()) # 현재시간 측정 - current_time = int(moment_time[14:16]) # 현재 분 값 저장"temperature": temp, "humidity": hum, "lamp": lamp, - #if previous_time != current_time: # 기존 값과 다를 경우 - previous_time = current_time # 기존 값에 새로운 분 값 저장 - standard_time = moment_time[11:19] # 기준 시간 설정 (시, 분) - - img = "photo.jpg" # 이미지 경로 - frame = cv2.imread(img) # 이미지 읽어오기z - size_list = [320, 416, 608] # 입력 사이즈 리스트 (Yolov3에서 사용되는 네트워크 입력 이미지 사이즈) - frame = yolo(frame=frame, size=size_list[2], score_threshold=0.4, nms_threshold=0.4) # 이미지 분석 - print("시간: {0} >>> SSCCount: {1} 명".format(datetime.now(), ncnt_people)) - with open("nCnt.txt", "w", encoding = "utf8") as report_file: - report_file.write("{0}/{1}/{2}".format(ncnt_people, standard_time, "0")) - # print("시간: {0} >>> {1} 명".format(datetime.now(), ncnt_people)) - - - -# ============ Machine ============ - -while True: - # TIME = datetime.now().second - with open("nCnt.txt", "r") as file: - for line in file.readlines(): - info_list = line.split("/") - Refresh = info_list[2] - if Refresh == "1": - try: - machine() - except AttributeError: - print("시간: {0} >>> SSCCount: AttributeError!".format(datetime.now())) - time.sleep(1) - except: - print("시간: {0} >>> SSCCount: Error!".format(datetime.now())) - time.sleep(1) \ No newline at end of file diff --git a/__pycache__/Makerspace.cpython-310.pyc b/__pycache__/Makerspace.cpython-310.pyc deleted file mode 100644 index 0c3171752a3df5419eecb06448a89f6e415ae2e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2385 zcmai0OK%)S5T5SodF<}2yREJET0<@Ve%8Zq)+&3 zg29TDe16XY`*D8irqNk=2HqJRRyvo1LS0(DS~@qxy-iW5l3k8sQPyweaTajwcSz}7 zS-XDihA8qZEpXhpsR9*+Xf0qk`9+l84KA#SB##57RW65)iW1SGK3lnU?V1k<6e^G^ z#FNL52^|;O613uL5DF0IbeBFkwPOs7AsHFV#&?rDWI%?Lnfq?U`A!K4Qgig3Vlr6dNkbyLgrEV)uHmA!LyUp;*ixl-AN65pGPt+5&|~JyItw zH2T+>7jhO<{|(;HU{!_!m`29X92py?yr39@$xY7o%_mbDP>WkbTNwi~q9cIlFm$O4 zz`bzd>R*Heb440v9Prz0gPRZE-#HCW7sbQ#JAeN4Scg)2VB2o5WjuI! zr>$)V7Ik5A$0;p6L)Kt+X{Om$$uL)C6UWw;jFc$tekPMZbxeO|e5KwEk!Mo%G&|g} z)^Es4jftS6UWsG4*~EBOZz>^+IiNQ;h+N=oho+PR6O}uxacf|xdSxHb z0q|5cxc$@_Q3$NFQgIB?cxHpBLNpbnT--nRrI5Xgoy9vUi93!wi{{fHd~a2=tpd%j zY3zdAz_S|orZn|RcU@FH-~AkVYglMJ%@7S_X%-nKODk8l_R#GvV*dLxKi*Bq=DQi2`FQ@jrz>bzoc^bG49234eO5uPBeF z6w*OUdu%!2JJdgk;2o5%AkV9WJ&8K3E;{#pE5R()DPEeu6PFdkgqz# qx?s7VBpKg~#iy8+#TgKD;9~W&smomIy0gtX^=ON_ZTK{~^W<;Q@+|TI diff --git a/__pycache__/Yolov3_Analysis.cpython-39.pyc b/__pycache__/Yolov3_Analysis.cpython-39.pyc deleted file mode 100644 index a2d06e2b7caa95bc8ce5174e515b9984ba8c1e17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1841 zcmZt`J#QN~lsw&?q|=9GTec*}K!c)-I#`A?bV-w@iH)RioFI15cq8^hfeJj6ipw`j-8<-`1l^*_apg&TFpZ+{`_T* z{0`V3hIoJ2Kzs&Ed;x$Uf@9>L?bx@7HNbv>qHX)wAq8TeSiVc$VL*!M`0lwKgeLhw53mQTSRTGMVyxk%XI{6gTTo?F zTjIQQv!aAbtKtd92ryRymX!u5E5q_&RaEH?diHBpRaMx3%4(`cT!Ox~Iw-5l(s5bU zL1RMI)dZY0RD%?s+k8WMAXn-j*Ri&8S&5t(pVdM6bN#ima-}5zeVH@Fxtmv$3<9=U-D5+;fj4c3JV{T@ zM;Ltnof$vhJd-HE(W&_)rv`)PJ|V({)4m*XDu(d!bd8O~CF#2lX#!9G4ZeC3Qi z1;UuFZN|yw3QtD&jJz%|Ds@Rvd5@*LQWv)pz8`RiGTD`I(9i#_&=yOz8}Pv>IM9WN zNg&dcGNPTWI0?YQ+Wqyy8d@PHX7F=e_K#(@wZQRXz1a2``#1Q#3h zK)LMBx!dZJagzM z+7{6vgc!@QqqXFnoxs7v86V2sAXw@u={4S5N_oX66Si0~_6!nPtpSxANN zZ00!>K*%o>Dk0D)VZNK+p#Wnh1yIx8rIud`DU;CP4lb~<#`_u%H9pXI>=z>wKNZ}C z_&_taVY;Dq;$V};+6kc(^SmFP0duq3HvPE*n0N#LSyeobJ?vRFHnRk?3N-9i1Lrf} zr*Iu+6C@hIZNP4D3s)^8`ypP!9|7M54*wLacB|YxDDAM_Q99;V0q0!<=FDl4(}1i| z$xScSwE>l@rj@UmPR>oQ)h#&tl0h*Tl!}rEyJr%De_)Il5AUUA8a~f+D_tKYWH+Wa R%;OeS045LDszZ!Z)_>io=yd=9 diff --git a/__pycache__/nCnt_Server.cpython-310.pyc b/__pycache__/nCnt_Server.cpython-310.pyc deleted file mode 100644 index c340c2fc21bd64c55f185d67bdca55a300fd81ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2545 zcmaJ?&2JM&6yKRyuh;fEaXtv4gl}lOEwzC|g;Z2p1yMk46cJj=s+F~P#$>~OF*|9% z*b*r87$Nmoaj=j13;GB2zu0R}oO|O?`rg@wfaY$ z|Lz#ZU)Y(v3efoqp6om^3~q1|8WHhGL_HcYk42_u67h#Qds1SDp#k9w{O}6{Jcsnxi~GJlviCL2^ufN^ z(S5O{eX(PEvHk)-J|Kee6WgRs_(@?x7N_{>7X?`JFt^qW_snaoqig2H>wc!bUcH$Y zZ;MBpB2&3}JqSf!{yq&8pJUr4xpU*rci-L?S(?Nd_A6`3S3wJ-8FZ&_1@VS|>5hof z&{x`Jb7-g_5-TqCY@W2T=B5n2k`&O!rpqLNX6%_3W;DJSG;Da5;mLjkqX1n_x9Q7c zJ)>*%$-uZ~{5;(wUDBtV4M>kFrpzvU0f-fR%P&4E-v#VVxVHfzZmby>jqKbOAqL*} z;6a~juDr41sNmI&d%yhdQK8W(oc0 z^jmoZ9Gzk#(-3*q@C_)HcpybfCGrV$%-DxyOKJ?6#A#gOO+oG&QjaSky|31J_g6*g#GBURxh+)gKzkwFQwp-R^lQS@fEP=^coNVQVR0aSs z10!cKw1lDBnCRmZA?Luo%X9|0)7q3$#G@5TEhGtMpiv*1MV!T4^&beFFROu}&n$DE z*u)_gG3jwC&x5m5(@ek_0QQY6iCf@(cVQ_^co2r{0+|1S!BD1xvu`SMCF-`vA z`8xrFUFJFIuy{IWc?O*FEJlh4iX%V7&_`%=RdD+*k)NUixjnf{UGK~3 zDugqHl0K`kiK?J(?yJgV8nO-pTv)V(pY5$F8{n77hxaXY4gBM!Xvb-6YMn==YSbkj zvwiDfPN>70V!uJ-IRW)G2F6WL&l`BUbqP4*<_>!~+oN3ydR*v(7OMic2B6HunAG9e z1{FR#slp0o+<^ZrXnVECx~vZx@ZM2ZCr5D`M+F2(Tw0OHt(k=gQdFs`YK zliRHX4r8n`uOda7NY&ILPud4+ozJ#lW+j@#`s%N4z&sgphd!I4HM&5S-cEsVFTE`@ zc?H*4^ongzDL)M)g}!8H5CVzR^JYfD`dFhgiIV8ejr~KZ$AmIj#K`P8GSYddh(tI? z66dGs-T{{L7{H&0SBOw@hGNG+EcLn3C)P951b%;*?Zk%lnb)FbUx^aF8Hz8Fs2OV5 iB1qckre$W+g-V$^uzTAn6Q@`sj#Hx!s}Y+mk$(Y$PCxnp diff --git a/__pycache__/nCnt_Server.cpython-39.pyc b/__pycache__/nCnt_Server.cpython-39.pyc deleted file mode 100644 index 6a1b91f7989109c10105189174f9910a9f83b899..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1811 zcmZ`)&2Ah;5bo~jnVsDo+v{Iq2LcEXSqXUo}vTGxU{{Um+)|dcBfE#Ehnv#D8Vslt`gj6a(UnY$Yc$k`Uw~VfJ!!Gf80GG19Cw}D0?FBYBx+#K#9fK+t8Aocp^gu43~SV^F~VB$wfU3i1z7d2{juXUTav>+U?O*U*aWVuP4K?h-8-b*dq2JgtIiZFR z=#WCrHvz=G1FG*xe!>bafhp6t2&F%`$`057STs!;oChNYoHRDZ94x{lNjZ^(&ng#(H3M2X|k_JvtN3PQ8%c32c-cYOO#Lr~uJS@E~{s z$N1P_HI{G2y9(E|da3>h11RL{ zWuaIwu*)yJ0Ube&Z*}+AZ*(`qSt*73y$#Ebp4$*lfE@rIGmagtr(iGrDH!V?>C`~$ zy2IHpDGLK^)|T%4x74`=rW(~B7uCl#@4yPp*K+{r_O zL~8u25VKdw)k*i&8pST=C-HF;;|{fMU}kQTx$0o}a%cqZO1yDZISPfJqyC(3tp~by z%5rQ7UX`GBJm0m#9Ggy`;Wv3H4>R>G9=LuN%neYdyIJ6cttHlC5$nu`wABddzXeyP AGXMYp diff --git a/nCnt.txt b/nCnt.txt deleted file mode 100644 index 7977ad7..0000000 --- a/nCnt.txt +++ /dev/null @@ -1 +0,0 @@ -6/21:23:09/0 \ No newline at end of file diff --git a/nCnt_Server.py b/nCnt_Server.py deleted file mode 100644 index edad76f..0000000 --- a/nCnt_Server.py +++ /dev/null @@ -1,81 +0,0 @@ -#  -*- coding: utf-8 -*- -from fastapi import FastAPI, Request, File, UploadFile -from fastapi.responses import HTMLResponse -from fastapi.staticfiles import StaticFiles -from fastapi.templating import Jinja2Templates -from datetime import datetime - -app = FastAPI(docs_url=None, redoc_url=None) - - -SSCCount, Standard_Time, Refresh = 0, 0, 0#, temp, hum, lamp -# ============ Function ============ -def check(): - global SSCCount, Standard_Time, Refresh - with open("nCnt.txt", "r") as file: - for line in file.readlines(): - info_list = line.split("/") - SSCCount, Standard_Time, Refresh = map(str, info_list) - # SSCCount = info_list[0] - # Standard_Time = info_list[1] - -# ============ Machine ============ - -app.mount("/static", StaticFiles(directory="static"), name="static") - -templates = Jinja2Templates(directory="templates") - -@app.get("/", response_class=HTMLResponse) -# , SSCCount: str, current_time: str, Standard_Time: str): -async def Page(request: Request): - global SSCCount, Standard_Time, Refresh#, temp, hum, lamp - check() - current_time = str(datetime.now() )[0:21] # 필요한 부분 가공 - print(current_time) - if int(SSCCount) <= 6: - countable = 1 - else: - countable = 0 - # FastAPI로 new.html에 변수 값 전달 - return templates.TemplateResponse("index(Ver_8).html", {"request": request, "People_Count": int(SSCCount), "Countable": countable, "last_time": current_time, "get_time": current_time, "Get_Time": Standard_Time}) - -@app.get("/SSCCounter.json") -async def nCnt(): - global SSCCount, Standard_Time#, temp, hum, lamp - check() - current_time = str(datetime.now() )[0:21] # 필요한 부분 가공 - print(SSCCount) - return {"people_count": SSCCount, "last_time": current_time, "get_time": Standard_Time} - -@app.get("/manager.page", response_class=HTMLResponse) -async def Page(request: Request): - global SSCCount, Standard_Time, Refresh#, temp, hum, lamp - check() - current_time = str(datetime.now() )[0:21] # 필요한 부분 가공 - print(current_time) - if int(SSCCount) <= 6: - countable = 1 - else: - countable = 0 - # FastAPI로 new.html에 변수 값 전달 - return templates.TemplateResponse("manager.html", {"request": request, "People_Count": int(SSCCount), "Countable": countable, "last_time": current_time, "get_time": current_time, "Get_Time": Standard_Time}) - -@app.get("/manager.Image", response_class=HTMLResponse) -# , SSCCount: str, current_time: str, Standard_Time: str): -async def Page(request: Request): - return templates.TemplateResponse("image.html", {"request": request}) - -@app.get("/manager.docs", response_class=HTMLResponse) -async def Page(request: Request): - return templates.TemplateResponse("docs.html", {"request": request}) - -@app.post("/uploadfile/") -async def create_upload_file(file: UploadFile = File(...)): - contents = await file.read() - global SSCCount, Standard_Time - with open("nCnt.txt", "w", encoding = "utf8") as report_file: - report_file.write("{0}/{1}/{2}".format(SSCCount, Standard_Time, "1")) - with open(file.filename, "wb") as f: - f.write(contents) - - return {"filename": file.filename} \ No newline at end of file diff --git a/templates/index(Ver_8).html b/templates/index(Ver_8).html deleted file mode 100644 index 35c2580..0000000 --- a/templates/index(Ver_8).html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - 동방 출력 페이지 - - - - - - - - -
- - -
- - - - SSCC - - Board - -   - -
- -
-

- 동아리방
실시간 상황판 -

-
-
- 마지막 업데이트 : {{get_time}} -   - -
- {{Accessor}} -
- - - - -
-
- -
-
-
- -

몇 명?

- {% if Countable == 1%} - main Image - {% else %} - main Image - {% endif %} -

{{People_Count}}

-

마지막 측정: {{Get_Time}}

-   - -
- -
-
- - - - \ No newline at end of file From 432e9c793056fdee21662a7674f47406051185a6 Mon Sep 17 00:00:00 2001 From: SW Baek Date: Wed, 15 Nov 2023 15:57:47 +0900 Subject: [PATCH 02/28] feat: Create Dockerfile --- Dockerfile | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6957ac2 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +FROM python:3.11.1 + +WORKDIR /code + +COPY ./requirements.txt /code/requirements.txt + +RUN pip install --no-cache-dir -r /code/requirements.txt + + +COPY ./app /code/app + +CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] From 0b42b048e813998a83ef4fd5277153d01ec90223 Mon Sep 17 00:00:00 2001 From: SW Baek Date: Wed, 15 Nov 2023 15:58:49 +0900 Subject: [PATCH 03/28] fix: Update Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6957ac2..ac3a384 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,4 +9,4 @@ RUN pip install --no-cache-dir -r /code/requirements.txt COPY ./app /code/app -CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] +CMD ["uvicorn", "WebServer.main:app", "--host", "0.0.0.0", "--port", "8000"] From e300fa88f0d0418107666df7cbba44320364092d Mon Sep 17 00:00:00 2001 From: SW Baek Date: Wed, 15 Nov 2023 15:59:55 +0900 Subject: [PATCH 04/28] feat: Add requirement.txt --- requirement.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 requirement.txt diff --git a/requirement.txt b/requirement.txt new file mode 100644 index 0000000..f2651c2 --- /dev/null +++ b/requirement.txt @@ -0,0 +1,18 @@ +annotated-types==0.6.0 +anyio==3.7.1 +click==8.1.7 +exceptiongroup==1.1.3 +fastapi==0.104.1 +h11==0.14.0 +idna==3.4 +Jinja2==3.1.2 +MarkupSafe==2.1.3 +numpy==1.26.1 +opencv-python==4.8.1.78 +pydantic==2.4.2 +pydantic_core==2.10.1 +python-multipart==0.0.6 +sniffio==1.3.0 +starlette==0.27.0 +typing_extensions==4.8.0 +uvicorn==0.24.0.post1 From 0e2b84553fdb8fc9d5460af26af17c5b4ed66ccd Mon Sep 17 00:00:00 2001 From: SW Baek Date: Wed, 15 Nov 2023 16:06:09 +0900 Subject: [PATCH 05/28] Feat: Create main.yml --- .github/workflows/main.yml | 61 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..35bde3a --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,61 @@ +name: Docker Test + +on: + push: + branches: [ main ] + +env: + DOCKER_IMAGE: ghcr.io/${{ github.actor }}/myproject + VERSION: ${{ github.sha }} + NAME: newdevelop + +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup docker buildx + id: buildx + uses: docker/setup-buildx-action@v1 + + - name: Cache docker layers + uses: actions/cache@v2 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ env.VERSION }} + restore-keys: | + ${{ runner.os }}-buildx- + - name: Login to ghcr + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GHCR_TOKEN }} + + - name: Build and push + id: docker_build + uses: docker/build-push-action@v2 + with: + builder: ${{ steps.buildx.outputs.name }} + push: true + tags: ${{ env.DOCKER_IMAGE }}:latest + + deploy: + needs: build + name: Deploy + runs-on: [ self-hosted ] + steps: + - name: Login to ghcr + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GHCR_TOKEN }} + + - name: Docker run + run: | + docker stop ${{ env.NAME }} && docker rm ${{ env.NAME }} && docker rmi ${{ env.DOCKER_IMAGE }}:latest + docker run -d -p 3000:3000 --name newproject --restart always ${{ env.DOCKER_IMAGE }}:latest From 34108d377d05bb663e946eb636e809f19366684d Mon Sep 17 00:00:00 2001 From: SW Baek Date: Wed, 15 Nov 2023 16:11:55 +0900 Subject: [PATCH 06/28] Fix: Update main.yml (lowercase) --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 35bde3a..2ec5e5e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -5,7 +5,7 @@ on: branches: [ main ] env: - DOCKER_IMAGE: ghcr.io/${{ github.actor }}/myproject + DOCKER_IMAGE: ghcr.io/swthewhite/myproject:latest VERSION: ${{ github.sha }} NAME: newdevelop From 6bab2dcb7e2ad41d387aad8ddbc04db0f75eaa51 Mon Sep 17 00:00:00 2001 From: SW Baek Date: Wed, 15 Nov 2023 16:13:04 +0900 Subject: [PATCH 07/28] fix: Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2ec5e5e..5c62c41 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -5,7 +5,7 @@ on: branches: [ main ] env: - DOCKER_IMAGE: ghcr.io/swthewhite/myproject:latest + DOCKER_IMAGE: ghcr.io/swthewhite/myproject VERSION: ${{ github.sha }} NAME: newdevelop From add1a13a54bad79e425ac07323b896743233f81d Mon Sep 17 00:00:00 2001 From: SW Baek Date: Wed, 15 Nov 2023 22:26:35 +0900 Subject: [PATCH 08/28] fix: Update Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index ac3a384..a500935 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,6 +7,6 @@ COPY ./requirements.txt /code/requirements.txt RUN pip install --no-cache-dir -r /code/requirements.txt -COPY ./app /code/app +COPY . /code CMD ["uvicorn", "WebServer.main:app", "--host", "0.0.0.0", "--port", "8000"] From 7e68a36736bebc5c2d718ec174fd0c1e5e437fa4 Mon Sep 17 00:00:00 2001 From: SW Baek Date: Wed, 15 Nov 2023 22:27:00 +0900 Subject: [PATCH 09/28] fix: Rename requirement.txt to requirements.txt --- requirement.txt => requirements.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename requirement.txt => requirements.txt (100%) diff --git a/requirement.txt b/requirements.txt similarity index 100% rename from requirement.txt rename to requirements.txt From 35d9adc3bd4798d115b1bab2d12e3918bd2c9c70 Mon Sep 17 00:00:00 2001 From: SW Baek Date: Wed, 15 Nov 2023 22:56:16 +0900 Subject: [PATCH 10/28] fix: Update Dockerfile --- Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index a500935..d2f0203 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,8 @@ COPY ./requirements.txt /code/requirements.txt RUN pip install --no-cache-dir -r /code/requirements.txt - COPY . /code -CMD ["uvicorn", "WebServer.main:app", "--host", "0.0.0.0", "--port", "8000"] +WORKDIR /code/WebServer + +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] From 6e300a69f0c23ac9a3bb7ab399ab1fd7e3b05c51 Mon Sep 17 00:00:00 2001 From: SW Baek Date: Wed, 15 Nov 2023 23:01:04 +0900 Subject: [PATCH 11/28] fix: Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5c62c41..73d94f4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -58,4 +58,4 @@ jobs: - name: Docker run run: | docker stop ${{ env.NAME }} && docker rm ${{ env.NAME }} && docker rmi ${{ env.DOCKER_IMAGE }}:latest - docker run -d -p 3000:3000 --name newproject --restart always ${{ env.DOCKER_IMAGE }}:latest + docker run -d -p 3000:3000 --name ${{ env.NAME }} --restart always ${{ env.DOCKER_IMAGE }}:latest From ce93a61828f81d550f3bcbf7b2b93b4823fca55e Mon Sep 17 00:00:00 2001 From: SW Baek Date: Wed, 15 Nov 2023 23:16:33 +0900 Subject: [PATCH 12/28] fix: Update Dockerfile --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index d2f0203..22c6d3e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,4 +10,5 @@ COPY . /code WORKDIR /code/WebServer -CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] +#CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] +CMD ["/bin/bash"] From d9cd6fa6845112d3451f2a3a7605794f63010a4d Mon Sep 17 00:00:00 2001 From: SW Baek Date: Wed, 15 Nov 2023 23:24:49 +0900 Subject: [PATCH 13/28] fix: Update Dockerfile --- Dockerfile | 3 --- 1 file changed, 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 22c6d3e..e743d37 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,6 +9,3 @@ RUN pip install --no-cache-dir -r /code/requirements.txt COPY . /code WORKDIR /code/WebServer - -#CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] -CMD ["/bin/bash"] From f614bdb7da301678ea532bf55ea3e4725a94c46a Mon Sep 17 00:00:00 2001 From: SW Baek Date: Wed, 15 Nov 2023 23:44:14 +0900 Subject: [PATCH 14/28] fix: Update Dockerfile --- Dockerfile | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Dockerfile b/Dockerfile index e743d37..9116560 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,8 +4,16 @@ WORKDIR /code COPY ./requirements.txt /code/requirements.txt +RUN apt-get update +RUN apt-get -y install libgl1-mesa-glx wget RUN pip install --no-cache-dir -r /code/requirements.txt COPY . /code +WORKDIR /code/WebServer/yolo_data + +RUN wget https://pjreddie.com/media/files/yolov3.weights + WORKDIR /code/WebServer + +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] From 18f7da08067d002e08cebd27bcd9f362e0ec573a Mon Sep 17 00:00:00 2001 From: SW Baek Date: Wed, 15 Nov 2023 23:51:47 +0900 Subject: [PATCH 15/28] fix: Update Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9116560..6e64755 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,4 +16,4 @@ RUN wget https://pjreddie.com/media/files/yolov3.weights WORKDIR /code/WebServer -CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "3000"] From 1dbf613f8fb514483e05340ae490616b3876f36c Mon Sep 17 00:00:00 2001 From: SW Baek Date: Sat, 18 Nov 2023 13:19:08 +0900 Subject: [PATCH 16/28] fix: 307error fixed, docs invisible --- WebServer/main.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WebServer/main.py b/WebServer/main.py index 5f985d7..fd2bda9 100644 --- a/WebServer/main.py +++ b/WebServer/main.py @@ -28,8 +28,8 @@ async def count(): ## Backend ## -#app = FastAPI(docs_url=None, redoc_url=None) -app = FastAPI() +app = FastAPI(docs_url=None, redoc_url=None) +#app = FastAPI() app.mount("/static", StaticFiles(directory="static"), name="static") templates = Jinja2Templates(directory="templates") @@ -66,7 +66,7 @@ async def nCnt(): return {"people_count": SSCCount, "analysis_time": Standard_Time} -@app.post("/uploadfile/") +@app.post("/uploadfile") async def create_upload_file(file: UploadFile = File(...)): contents = await file.read() From 74238257ed832c6f438d28f9703272bd96453c38 Mon Sep 17 00:00:00 2001 From: SW Baek Date: Sat, 18 Nov 2023 13:38:31 +0900 Subject: [PATCH 17/28] docs: new version(v0.2.0) document --- README.md | 162 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 93 insertions(+), 69 deletions(-) diff --git a/README.md b/README.md index ec99d9e..a8a0a74 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# SSCCounter-v0.1.0 +# SSCCounter-v0.2.0
image @@ -7,14 +7,14 @@ [![Hits](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=http%3A%2F%2Fssccounter.shop&count_bg=%2379C83D&title_bg=%23555555&icon=airplayvideo.svg&icon_color=%23E7E7E7&title=hits&edge_flat=false)](https://hits.seeyoufarm.com)
-# SSCCounter Web Page v0.1.0 -> **숭실대학교 컴퓨터 동아리 (SSCC: SoongSil ComputingClub)**
**개발기간: 2022.06 ~ 2023.05** +# SSCCounter Web Page v0.2.0 +> **숭실대학교 컴퓨터 동아리 (SSCC: SoongSil ComputingClub)**
**개발기간: 2022.06 ~ 2023.11** ## 배포 주소 -> **웹페이지** : [http://www.ssccounter.shop/](http://www.ssccounter.shop/)
-> **프론트 서버** : [http://www.ssccounter.shop/uploadfile/](http://www.ssccounter.shop/uploadfile/)
-> **Json 요청** : [http://www.ssccounter.shop/ssccounter.json/](http://www.ssccounter.shop/ssccounter.json/) +> **웹페이지** : [http://www.ssccounter.sscc.run/](http://www.ssccounter.sscc.run/)
+> **프론트 서버** : [http://www.ssccounter.sscc.run/uploadfile/](http://www.ssccounter.sscc.run/uploadfile/)
+> **Json 요청** : [http://www.ssccounter.sscc.run/ssccounter.json/](http://www.ssccounter.sscc.run/ssccounter.json/) ## 웹개발팀 소개 @@ -26,7 +26,7 @@ | [@SWtheWhite](https://github.com/SWtheWhite) | [@AI-WonYJ](https://github.com/AI-WonYJ) | | 숭실대학교 전자정보공학부 (it융합전공) 4학년 | 숭실대학교 AI융합학부 2학년 | | SSCC 36th | SSCC 40th | -| Design & Front | HardWare & Web Server | +| PM & WEB | HardWare & WEB | ## 프로젝트 소개 @@ -52,18 +52,24 @@ For building and running the application you need: ### Installation ``` bash -$ git clone https://github.com/AI-WonYJ/SSCCounter.git -$ cd SSCCounter/Newest_Version +$ git clone https://github.com/SoongSilComputingClub/SSCCounter.git +$ cd SSCCounter +$ apt-get update +$ apt-get -y install libgl1-mesa-glx wget $ pip install -r requirements.txt + +$ cd WebServer/yolo_data +$ wget https://pjreddie.com/media/files/yolov3.weights ``` -#### YOLOv3 Model +#### CamDevice ``` -$ cd YOLO_Folder +$ cd CamDevice ``` -#### Frontend +#### WebServer ``` -$ uvicorn SSCCounter_WebServer:app --reload --port=8000 --host=0.0.0.0 +$ cd WebServer +$ uvicorn main:app --reload --port=3000 --host=0.0.0.0 ``` --- @@ -117,19 +123,25 @@ $ uvicorn SSCCounter_WebServer:app --reload --port=8000 --host=0.0.0.0 --- ## 도입 예정 기능 및 성능 개선 📝 -### ⭐️ Web Page 개편 -* [ ] UX/UI를 더욱 눈에 띄도록 메인 페이지를 개편 +### ⭐️ log 기능 추가 +* [ ] logging 기능 추가 + +### ⭐️ Database 추가 +* [ ] log 기록을 위한 Database 추가 + +### ⭐️ 인터페이스 개선 +* [ ] UX/UI를 더욱 눈에 띄도록 메인 페이지를 개선 -### ⭐️ APP 출시 +### ⭐️ API 활용 계획 수립 * [ ] URL 접속이 아닌, APP을 통해 확인할 수 있는 APP 서비스 출시 * [ ] PUSH 알림 등으로 더욱 간편하게 확인 -### ⭐️ 동아리방 환경 정보 제공 기능 추가 -* [ ] 온도 및 습도 정보와 공기 오염도를 확인할 수 있는 기능 추가 - ### ⭐️ 로그인 기능 추가 * [ ] 동아리 외부인이 접속할 수 없도록 로그인 기능 추가 +### ⭐️ 동아리방 환경 정보 제공 기능 추가 +* [ ] 온도 및 습도 정보와 공기 오염도를 확인할 수 있는 기능 추가 + ### ⭐️ AI 인원수 예측 기능 추가 * [ ] 요일과 날씨, 학교 행사 정보 등을 이용해 동아리방 인원수를 예측 @@ -141,57 +153,69 @@ $ uvicorn SSCCounter_WebServer:app --reload --port=8000 --host=0.0.0.0 ### 디렉토리 구조 ```bash +. ├── README.md +├── Dockerfile +├── LICENSE ├── requirements.txt -├── photo.jpg -├── SSCCounter webpage image.jpg -├── Arduino_Serial_test.py -├── SSCCounter_RP4.py -├── SSCCounter_Analysis.py -├── SSCCounter_WebServer.py -├── Module -│   ├── data_handler.py -│   ├── yolov3.py -├── Data_Folder -│   ├── nCnt.txt -├── Yolo_Folder -│   ├── yolov3.cfg -│   ├── yolov3.md : yolov3.weight 다운로드 방법 -├── templates -│   ├── index(Ver_8).html : 메인 webpage -│   ├── docs.html : 개발자용 webpage -│   ├── image.html -│   ├── manager.html -│   ├── new.html -│   ├── test.html -└── static - ├── css - │   ├── main(Ver_2).css - │   ├── main.css - │   └── new.css - └── images - ├── 0 people.png - ├── 1 people.png - ├── 2 people.png - ├── 3 people.png - ├── 4 people.png - ├── 5 people.png - ├── 6 people.png - ├── people.png - ├── Kakao_lion.png - ├── SSCC_logo.png - ├── SSCC_logo_rev.png - ├── discord.png - ├── facebook.png - ├── humidity.png - ├── instagram.png - ├── kakao.png - ├── logo.png - ├── notion.png - ├── temperature.png - ├── analysis.jpg - ├── analysis3.jpg - ├── analysis_outdoor.jpg - └── photo_out.jpg +├── CamDevice +│   ├── main.py +│   └── utils +│   ├── image_creater +│   │   ├── cv2.py +│   │   └── pi.py +│   └── image_sender.py +└── WebServer +    ├── main.py +    ├── static +    │   ├── css +    │   │   ├── contribute.css +    │   │   ├── contribute2 +    │   │   ├── main(Ver_2).css +    │   │   ├── main.css +    │   │   └── new.css +    │   └── images +    │   ├── 0 people.png +    │   ├── 1 people.png +    │   ├── 2 people.png +    │   ├── 3 people.png +    │   ├── 3analysis.jpg +    │   ├── 4 people.png +    │   ├── 5 people.png +    │   ├── 6 people.png +    │   ├── Kakao_lion.png +    │   ├── SSCC_logo.png +    │   ├── SSCC_logo_rev.png +    │   ├── analysis.jpg +    │   ├── analysis_outdoor.jpg +    │   ├── discord.png +    │   ├── facebook.png +    │   ├── humidity.png +    │   ├── instagram.png +    │   ├── kakao.png +    │   ├── logo.png +    │   ├── notion.png +    │   ├── people.png +    │   ├── photo_out.jpg +    │   └── temperature.png +    ├── temp +    │   ├── analysis.jpg +    │   └── photo.jpg +    ├── templates +    │   ├── Contribute.html +    │   ├── docs.html +    │   ├── image.html +    │   ├── index(Ver_8).html +    │   ├── manager.html +    │   ├── new.html +    │   └── test.html +    ├── utils +    │   └── count +    │   ├── yolo.py +    │   └── yolo_test.py +    └── yolo_data +    ├── yolov3.cfg + ├── yolov3.weights +    └── yolov3.md ``` From 3d715be532b1bf8c98fc852ae02f94a6fd3ab316 Mon Sep 17 00:00:00 2001 From: SW Baek Date: Sat, 18 Nov 2023 13:40:47 +0900 Subject: [PATCH 18/28] fix: upload port changed --- CamDevice/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CamDevice/main.py b/CamDevice/main.py index 60ea185..67e3852 100644 --- a/CamDevice/main.py +++ b/CamDevice/main.py @@ -2,7 +2,7 @@ if __name__ == "__main__": # 클래스 인스턴스 생성 및 실행 - upload_url = 'http://localhost:8000/uploadfile' + upload_url = 'http://localhost:3000/uploadfile' upload_filename = 'photo.jpg' image_sender = ImageSender(upload_url, upload_filename, "cv") image_sender.run() From 98bdfc54987e43e8256d724701f34e25ced3edd2 Mon Sep 17 00:00:00 2001 From: SW Baek Date: Sat, 18 Nov 2023 14:28:14 +0900 Subject: [PATCH 19/28] fix: WebServer(/SSCCounter.json) optimized --- WebServer/main.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/WebServer/main.py b/WebServer/main.py index fd2bda9..5e672e5 100644 --- a/WebServer/main.py +++ b/WebServer/main.py @@ -24,6 +24,7 @@ async def count(): except: print( f"시간: {datetime.now()} >>> SSCCount: Error!") + # 2초마다 갱신 await asyncio.sleep(2) ## Backend ## @@ -49,7 +50,7 @@ async def Page(request: Request): else: countable = 0 - # FastAPI로 new.html에 변수 값 전달 + # index.html에 변수 값 전달 return templates.TemplateResponse("index(Ver_8).html", {"request": request, "People_Count": int(SSCCount), "Countable": countable, "last_time": current_time, "get_time": current_time, "Get_Time": Standard_Time}) @@ -60,7 +61,7 @@ async def ContributorPage(request: Request): @app.get("/SSCCounter.json") async def nCnt(): - Standard_Time, SSCCount = yolo_machine.run_machine() + SSCCount, Standard_Time = status["people_count"], status["analysis_time"] print(SSCCount) return {"people_count": SSCCount, "analysis_time": Standard_Time} From 602748a55596593c38493bca4b0d63e7203154dd Mon Sep 17 00:00:00 2001 From: SW Baek Date: Sat, 18 Nov 2023 18:13:38 +0900 Subject: [PATCH 20/28] docs: fix url link --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a8a0a74..c034379 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,9 @@ ## 배포 주소 -> **웹페이지** : [http://www.ssccounter.sscc.run/](http://www.ssccounter.sscc.run/)
-> **프론트 서버** : [http://www.ssccounter.sscc.run/uploadfile/](http://www.ssccounter.sscc.run/uploadfile/)
-> **Json 요청** : [http://www.ssccounter.sscc.run/ssccounter.json/](http://www.ssccounter.sscc.run/ssccounter.json/) +> **웹페이지** : [http://ssccounter.sscc.run/](http://www.ssccounter.sscc.run/)
+> **프론트 서버** : [http://ssccounter.sscc.run/uploadfile/](http://www.ssccounter.sscc.run/uploadfile/)
+> **Json 요청** : [http://ssccounter.sscc.run/ssccounter.json/](http://www.ssccounter.sscc.run/ssccounter.json/) ## 웹개발팀 소개 From cfbf2cf9b3ee1330df33c2f6d50f81835609dda8 Mon Sep 17 00:00:00 2001 From: SW Baek Date: Sat, 18 Nov 2023 18:23:57 +0900 Subject: [PATCH 21/28] fix: change UTC to KST --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index 6e64755..9df09ac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,6 +4,7 @@ WORKDIR /code COPY ./requirements.txt /code/requirements.txt +RUN timedatectl set-timezone Asia/Seoul RUN apt-get update RUN apt-get -y install libgl1-mesa-glx wget RUN pip install --no-cache-dir -r /code/requirements.txt From de6e131da08826a4b63d5d9299d93bb3725c63d7 Mon Sep 17 00:00:00 2001 From: SW Baek Date: Sat, 18 Nov 2023 18:27:40 +0900 Subject: [PATCH 22/28] fix: time option --- Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9df09ac..684b4d6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,9 @@ WORKDIR /code COPY ./requirements.txt /code/requirements.txt -RUN timedatectl set-timezone Asia/Seoul +ENV TZ=Asia/Seoul +RUN apt-get install -y tzdata + RUN apt-get update RUN apt-get -y install libgl1-mesa-glx wget RUN pip install --no-cache-dir -r /code/requirements.txt From 8528209ebc61dcf85eac7df4c19d202b49ee7368 Mon Sep 17 00:00:00 2001 From: SW Baek Date: Sat, 18 Nov 2023 18:31:24 +0900 Subject: [PATCH 23/28] fix: time option2 --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 684b4d6..37192e9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,8 +4,9 @@ WORKDIR /code COPY ./requirements.txt /code/requirements.txt -ENV TZ=Asia/Seoul +ARG DEBIAN_FRONTEND=noninteractive RUN apt-get install -y tzdata +RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime RUN apt-get update RUN apt-get -y install libgl1-mesa-glx wget From 34bd507c48d820ff590d884d9d765d250d950c72 Mon Sep 17 00:00:00 2001 From: SWtheWhite Date: Fri, 29 Dec 2023 16:38:51 +0900 Subject: [PATCH 24/28] docs: v0.2.0 update --- README.md | 83 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index c034379..291b375 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,25 @@ -# SSCCounter-v0.2.0 +# 📃 SSCCounter README
-image - + +image + + [![Hits](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=http%3A%2F%2Fssccounter.shop&count_bg=%2379C83D&title_bg=%23555555&icon=airplayvideo.svg&icon_color=%23E7E7E7&title=hits&edge_flat=false)](https://hits.seeyoufarm.com) +
-# SSCCounter Web Page v0.2.0 -> **숭실대학교 컴퓨터 동아리 (SSCC: SoongSil ComputingClub)**
**개발기간: 2022.06 ~ 2023.11** +> **숭실대학교 컴퓨터 동아리 (SoongSil ComputingClub)**
+> **개발기간: 2022.06 ~** +> **Version: 0.2.0** ## 배포 주소 - > **웹페이지** : [http://ssccounter.sscc.run/](http://www.ssccounter.sscc.run/)
> **프론트 서버** : [http://ssccounter.sscc.run/uploadfile/](http://www.ssccounter.sscc.run/uploadfile/)
> **Json 요청** : [http://ssccounter.sscc.run/ssccounter.json/](http://www.ssccounter.sscc.run/ssccounter.json/) -## 웹개발팀 소개 - +## 팀원 구성
| 백승우 | 원영진 | @@ -27,16 +29,23 @@ | 숭실대학교 전자정보공학부 (it융합전공) 4학년 | 숭실대학교 AI융합학부 2학년 | | SSCC 36th | SSCC 40th | | PM & WEB | HardWare & WEB | + +| 백승우 | 원영진 | 이종인 | +| :------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| | | | +| [@SWtheWhite](https://github.com/SWtheWhite) | [@AI-WonYJ](https://github.com/AI-WonYJ) | [@bell-person-ii](https://github.com/bell-person-ii) | +| SSCC 36th | SSCC 40th | SSCC 39th | +| PM & WEB | HardWare & WEB | WEB | +
- -## 프로젝트 소개 -SSCCounter은 동아리방 인원수 카운터 머신입니다. 기존에 많은 사람들이 동아리방에 몇명이나 있는지 문의하는 글이 자주 올라왔었는데, 하루에도 2~3번 씩 올라오는 문의 글로 인해, 중요한 공지 글을 확인하기 힘들었다. 이를 해결하기 위해 동아리방 사용 인원수를 알려주는 머신이 있으면 좋겠다는 요청에 진행된 '2022 여름방학 Smart동방 프로젝트' 중 'nCnt' 개발 프로젝트에서 시작되었습니다. 현재는 Smart동방 프로젝트가 종료됨에 따라 'SSCCounter'라는 이름으로 변경되었으며, 매일 평균 30명 이상이 서비스를 이용하는 동아리 핵심 프로젝트로 진행되고 있습니다. +## 프로젝트 소개 +SSCCounter은 동아리방 인원수 카운터 머신입니다. 기존에 많은 사람들이 동아리방에 몇명이나 있는지 문의하는 글이 자주 올라왔었는데, 하루에도 2~3번 씩 올라오는 문의 글로 인해, 중요한 공지 글을 확인하기 힘들었다. 이를 해결하기 위해 동아리방 사용 인원수를 알려주는 머신이 있으면 좋겠다는 요청에 진행된 '2022 여름방학 Smart동방 프로젝트' 중 'nCnt' 개발 프로젝트에서 시작되었습니다. 현재는 Smart동방 프로젝트가 종료됨에 따라 'SSCCounter'라는 이름으로 변경되었으며, 매일 평균 30명 이상이 서비스를 이용하는 동아리 핵심 프로젝트로 진행되고 있습니다. -#### SSCCounter uses 'YOLOv3 Object Detection Neural Network'. +### SSCCounter uses 'YOLOv3 Object Detection Neural Network'. You can easily check the number of people using the club room by analyzing the images processed by YOLOv3. Thanks to real-time analysis of the club room images, you can instantly verify the number of people without any delays. -#### SSCCounter's website will give you a check-friendly environment. +### SSCCounter's website will give you a check-friendly environment. Our website supports the following component. 1. Last refresh time. @@ -62,18 +71,17 @@ $ cd WebServer/yolo_data $ wget https://pjreddie.com/media/files/yolov3.weights ``` #### CamDevice -``` +```bash $ cd CamDevice +$ python3 main.py ``` #### WebServer -``` +```bash $ cd WebServer $ uvicorn main:app --reload --port=3000 --host=0.0.0.0 ``` ---- - ## Stacks 🐈 ### Environment @@ -112,47 +120,63 @@ $ uvicorn main:app --reload --port=3000 --host=0.0.0.0 ## 주요 기능 📦 ### ⭐️ 동아리 인원수를 숫자와 이미지로 확인 가능 -- 숫자뿐만 아니라 이미지 또한 인원수에 따라 변하게 하여 한눈에 확인 가능 +* [x] 숫자뿐만 아니라 이미지 또한 인원수에 따라 변하게 하여 한눈에 확인 가능 ### ⭐️ 동아리 홍보 페이지 연계 -- 아이콘을 클릭하면 동아리 홍보 페이지나, 소셜 네트워크 페이지로 연결 +* [x] 아이콘을 클릭하면 동아리 홍보 페이지나, 소셜 네트워크 페이지로 연결 ### ⭐️ 새로고침 버튼 -- 간편하게 버튼 하나로 동아리방 인원수를 새로고침 +* [x] 간편하게 버튼 하나로 동아리방 인원수를 새로고침 + +--- +## 릴리즈 버젼 +### Version 0.1.0 +* [x] Device: capture image +* [x] Analysis: get people count from image +* [x] WebServer: show people count +### Version 0.2.0 +* [x] Refactor: e.v.e.r.y.(Divide and Unite) +* [x] Add: Dockerfile +* [x] Add: Requirements.txt +* [x] Feat: Github Action +* [x] Update: README.md +* [x] Fix: 307error +* [x] Fix: upload port + --- ## 도입 예정 기능 및 성능 개선 📝 -### ⭐️ log 기능 추가 +### 0. log 기능 추가 * [ ] logging 기능 추가 -### ⭐️ Database 추가 +### 1. Database 추가 * [ ] log 기록을 위한 Database 추가 -### ⭐️ 인터페이스 개선 +### 2. 인터페이스 개선 * [ ] UX/UI를 더욱 눈에 띄도록 메인 페이지를 개선 -### ⭐️ API 활용 계획 수립 +### 3. API 활용 계획 수립 * [ ] URL 접속이 아닌, APP을 통해 확인할 수 있는 APP 서비스 출시 * [ ] PUSH 알림 등으로 더욱 간편하게 확인 -### ⭐️ 로그인 기능 추가 +### 4. 로그인 기능 추가 * [ ] 동아리 외부인이 접속할 수 없도록 로그인 기능 추가 -### ⭐️ 동아리방 환경 정보 제공 기능 추가 +### 5. 동아리방 환경 정보 제공 기능 추가 * [ ] 온도 및 습도 정보와 공기 오염도를 확인할 수 있는 기능 추가 -### ⭐️ AI 인원수 예측 기능 추가 +### 6. AI 인원수 예측 기능 추가 * [ ] 요일과 날씨, 학교 행사 정보 등을 이용해 동아리방 인원수를 예측 -### ⭐️ YOLO 모델 업그레이드 +### 7. YOLO 모델 업그레이드 * [ ] YOLOv3 -> YOLOv4, 5, ... 8 중 상위 모델로 업그레이드 --- ## 아키텍쳐 ### 디렉토리 구조 -```bash +``` . ├── README.md ├── Dockerfile @@ -217,5 +241,4 @@ $ uvicorn main:app --reload --port=3000 --host=0.0.0.0    ├── yolov3.cfg ├── yolov3.weights    └── yolov3.md - ``` From 8a7694533a25c4f61fa2bca79a5ad92e56b85107 Mon Sep 17 00:00:00 2001 From: SW Baek Date: Fri, 29 Dec 2023 16:40:41 +0900 Subject: [PATCH 25/28] fix: table fixed --- README.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/README.md b/README.md index 291b375..9e13999 100644 --- a/README.md +++ b/README.md @@ -21,15 +21,6 @@ ## 팀원 구성
- -| 백승우 | 원영진 | -| :------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------: | -| | | -| [@SWtheWhite](https://github.com/SWtheWhite) | [@AI-WonYJ](https://github.com/AI-WonYJ) | -| 숭실대학교 전자정보공학부 (it융합전공) 4학년 | 숭실대학교 AI융합학부 2학년 | -| SSCC 36th | SSCC 40th | -| PM & WEB | HardWare & WEB | - | 백승우 | 원영진 | 이종인 | | :------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | | | | From 1b2f760f9780b776df7bd66e11373aa00ce39460 Mon Sep 17 00:00:00 2001 From: SW Baek Date: Fri, 29 Dec 2023 16:41:41 +0900 Subject: [PATCH 26/28] fix: README table fixed --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9e13999..f10fe61 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ ## 팀원 구성
+ | 백승우 | 원영진 | 이종인 | | :------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | | | | From d433a6b005efac272464bcc99add32aa7022f76b Mon Sep 17 00:00:00 2001 From: SW Baek Date: Fri, 29 Dec 2023 17:04:32 +0900 Subject: [PATCH 27/28] fix: README update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f10fe61..316c180 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@
> **숭실대학교 컴퓨터 동아리 (SoongSil ComputingClub)**
-> **개발기간: 2022.06 ~** +> **개발기간: 2022.06~**
> **Version: 0.2.0** ## 배포 주소 From fa54e0b777602b42eb2927a9aaeb2447fb1bbf02 Mon Sep 17 00:00:00 2001 From: SW Baek Date: Thu, 18 Apr 2024 00:35:20 +0900 Subject: [PATCH 28/28] fix: README update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 316c180..709583a 100644 --- a/README.md +++ b/README.md @@ -161,7 +161,7 @@ $ uvicorn main:app --reload --port=3000 --host=0.0.0.0 ### 6. AI 인원수 예측 기능 추가 * [ ] 요일과 날씨, 학교 행사 정보 등을 이용해 동아리방 인원수를 예측 -### 7. YOLO 모델 업그레이드 +### ~~7. YOLO 모델 업그레이드~~ * [ ] YOLOv3 -> YOLOv4, 5, ... 8 중 상위 모델로 업그레이드 ---