├── .nvmrc ├── api ├── requirements.txt ├── .npmignore ├── docker-requirements.txt ├── package.json ├── s3.py ├── README.md ├── Dockerfile ├── app.py ├── serverless.yml └── cases.py ├── .idea ├── .gitignore ├── encodings.xml ├── vcs.xml ├── jsLibraryMappings.xml ├── misc.xml ├── modules.xml ├── markdown.xml ├── case-ing.iml └── inspectionProfiles │ └── Project_Default.xml ├── clear-sheet.js ├── cypress.config.js ├── package.json ├── cypress ├── support │ ├── e2e.js │ └── commands.js ├── plugins │ └── index.js ├── e2e │ └── spec.cy.js └── js │ ├── courts.js │ └── caseTypes.js ├── create-fixtures.js ├── cypress-partial.js ├── .github └── workflows │ ├── update-sheet-manually.yml │ └── update-sheet-cron.yml ├── .gitignore ├── README.md └── yarn.lock /.nvmrc: -------------------------------------------------------------------------------- 1 | v16 2 | -------------------------------------------------------------------------------- /api/requirements.txt: -------------------------------------------------------------------------------- 1 | gspread==5.1.1 2 | boto3==1.20.29 3 | -------------------------------------------------------------------------------- /api/.npmignore: -------------------------------------------------------------------------------- 1 | # Serverless directories 2 | .serverless 3 | .venv -------------------------------------------------------------------------------- /api/docker-requirements.txt: -------------------------------------------------------------------------------- 1 | numpy==1.22.0 2 | requests-toolbelt==0.9.1 3 | scikit-learn==1.0.2 4 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /clear-sheet.js: -------------------------------------------------------------------------------- 1 | const env = require('./cypress.env.json'); 2 | const axios = require('axios'); 3 | 4 | axios 5 | .delete(`${env.CYPRESS_LAMBDA_API_URL}/cases`) 6 | .catch(e => console.error(e)) 7 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /api/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "case-ing-api", 3 | "dependencies": { 4 | "serverless-python-requirements": "^5.4.0" 5 | }, 6 | "devDependencies": { 7 | "serverless-offline": "^11.0.3" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /.idea/jsLibraryMappings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /cypress.config.js: -------------------------------------------------------------------------------- 1 | const { defineConfig } = require("cypress"); 2 | 3 | module.exports = defineConfig({ 4 | fixturesFolder: "cypress/fixtures", 5 | chromeWebSecurity: false, 6 | retries: 20, 7 | responseTimeout: 300000, 8 | e2e: { 9 | supportFile: false, 10 | }, 11 | }); 12 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/markdown.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/case-ing.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "case-ing", 3 | "version": "1.0.0", 4 | "description": "Case-ing", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "cypress run", 8 | "test": "cypress open", 9 | "fixture": "node create-fixtures.js", 10 | "clear": "node clear-sheet.js" 11 | }, 12 | "repository": "git@github.com:iicdii/case-ing.git", 13 | "author": "Harim Kim ", 14 | "license": "MIT", 15 | "dependencies": { 16 | "axios": "^1.0.0", 17 | "cypress": "^10.9.0", 18 | "dayjs": "^1.11.5" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /api/s3.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import boto3 3 | import json 4 | 5 | s3 = boto3.client("s3") 6 | 7 | 8 | def upload(event, context): 9 | data = json.loads(event["body"]) 10 | name = data["name"] 11 | image = data["file"] 12 | image = image[image.find(",") + 1 :] 13 | dec = base64.b64decode(image + "===") 14 | s3.put_object( 15 | Bucket="case-ing-assets", 16 | Key=name, 17 | Body=dec, 18 | ContentType="image/png", 19 | ContentEncoding="base64", 20 | ) 21 | 22 | body = {"messsage": "success"} 23 | 24 | response = { 25 | "statusCode": 200, 26 | "headers": {"Content-Type": "application/json"}, 27 | "body": json.dumps(body), 28 | } 29 | 30 | return response 31 | -------------------------------------------------------------------------------- /cypress/support/e2e.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/e2e.js is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.js using ES2015 syntax: 17 | import './commands' 18 | 19 | // Alternatively you can use CommonJS syntax: 20 | // require('./commands') -------------------------------------------------------------------------------- /api/README.md: -------------------------------------------------------------------------------- 1 | # Serverless - AWS Python Docker 2 | 3 | This project has been generated using the `aws-pyhton-docker` template from the [Serverless framework](https://www.serverless.com/). 4 | 5 | For detailed instructions, please refer to the [documentation](https://www.serverless.com/framework/docs/providers/aws/). 6 | 7 | ## Deployment instructions 8 | 9 | > **Requirements**: Docker. In order to build images locally and push them to ECR, you need to have Docker installed on your local machine. Please refer to [official documentation](https://docs.docker.com/get-docker/). 10 | 11 | In order to deploy your service, run the following command 12 | 13 | ``` 14 | sls deploy 15 | ``` 16 | 17 | ## Test your service 18 | 19 | After successful deployment, you can test your service remotely by using the following command: 20 | 21 | ``` 22 | sls invoke --function hello 23 | ``` 24 | -------------------------------------------------------------------------------- /cypress/plugins/index.js: -------------------------------------------------------------------------------- 1 | /// 2 | // *********************************************************** 3 | // This example plugins/index.js can be used to load plugins 4 | // 5 | // You can change the location of this file or turn off loading 6 | // the plugins file with the 'pluginsFile' configuration option. 7 | // 8 | // You can read more here: 9 | // https://on.cypress.io/plugins-guide 10 | // *********************************************************** 11 | 12 | // This function is called when a project is opened or re-opened (e.g. due to 13 | // the project's config changing) 14 | 15 | /** 16 | * @type {Cypress.PluginConfig} 17 | */ 18 | // eslint-disable-next-line no-unused-vars 19 | module.exports = (on, config) => { 20 | // `on` is used to hook into various events Cypress emits 21 | // `config` is the resolved Cypress config 22 | return config 23 | } 24 | -------------------------------------------------------------------------------- /cypress/support/commands.js: -------------------------------------------------------------------------------- 1 | // *********************************************** 2 | // This example commands.js shows you how to 3 | // create various custom commands and overwrite 4 | // existing commands. 5 | // 6 | // For more comprehensive examples of custom 7 | // commands please read more here: 8 | // https://on.cypress.io/custom-commands 9 | // *********************************************** 10 | // 11 | // 12 | // -- This is a parent command -- 13 | // Cypress.Commands.add('login', (email, password) => { ... }) 14 | // 15 | // 16 | // -- This is a child command -- 17 | // Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) 18 | // 19 | // 20 | // -- This is a dual command -- 21 | // Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) 22 | // 23 | // 24 | // -- This will overwrite an existing command -- 25 | // Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) -------------------------------------------------------------------------------- /api/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM public.ecr.aws/lambda/python:3.8 2 | 3 | # Install OS packages for Pillow-SIMD 4 | RUN yum -y install tar gzip zlib freetype-devel \ 5 | gcc \ 6 | ghostscript \ 7 | lcms2-devel \ 8 | libffi-devel \ 9 | libimagequant-devel \ 10 | libjpeg-devel \ 11 | libraqm-devel \ 12 | libtiff-devel \ 13 | libwebp-devel \ 14 | make \ 15 | openjpeg2-devel \ 16 | rh-python36 \ 17 | rh-python36-python-virtualenv \ 18 | sudo \ 19 | tcl-devel \ 20 | tk-devel \ 21 | tkinter \ 22 | which \ 23 | xorg-x11-server-Xvfb \ 24 | zlib-devel \ 25 | && yum clean all 26 | 27 | COPY docker-requirements.txt ./requirements.txt 28 | RUN pip3 install -r requirements.txt --target ./ 29 | # Replace Pillow with Pillow-SIMD to take advantage of AVX2 30 | RUN pip3 uninstall -y pillow && CC="cc -mavx2" pip3 install -U --force-reinstall pillow-simd 31 | 32 | 33 | COPY app.py ./app.py 34 | COPY model ./model 35 | 36 | # You can overwrite command in `serverless.yml` template 37 | CMD ["app.handler"] 38 | -------------------------------------------------------------------------------- /api/app.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pickle 3 | import base64 4 | import io 5 | from PIL import Image 6 | from requests_toolbelt.multipart import decoder 7 | 8 | 9 | def handler(event, context): 10 | # 이벤트에서 이미지 받아오기 11 | content_type = event["headers"]["content-type"] 12 | body_dec = base64.b64decode(event['body']) 13 | 14 | multipart_data = decoder.MultipartDecoder(body_dec, content_type) 15 | binary_content = [] 16 | 17 | for part in multipart_data.parts: 18 | binary_content.append(part.content) 19 | 20 | imageStream = io.BytesIO(binary_content[0]) 21 | img = Image.open(imageStream) 22 | 23 | # 캡챠 예측하기 24 | model = pickle.load(open('./model/model.pickle', 'rb')) 25 | edges = np.linspace(0, 120, 6+1) 26 | letters = [] 27 | for start, end in zip(edges[:-1], edges[1:]): 28 | box = (start, 0, end, 40) 29 | cropped = img.crop(box) 30 | cropped.load() 31 | croppedArray = np.array(cropped) 32 | letters.append(croppedArray.flatten()) 33 | 34 | pred = model.predict(letters) 35 | answer = ''.join(pred) 36 | 37 | response = { 38 | "statusCode": 200, 39 | "body": answer 40 | } 41 | 42 | return response 43 | -------------------------------------------------------------------------------- /api/serverless.yml: -------------------------------------------------------------------------------- 1 | plugins: 2 | - serverless-offline 3 | - serverless-python-requirements 4 | 5 | package: 6 | exclude: 7 | - venv/** 8 | 9 | custom: 10 | pythonRequirements: 11 | dockerizePip: true 12 | 13 | service: case-ing-api 14 | # app and org for use with dashboard.serverless.com 15 | #app: your-app-name 16 | #org: your-org-name 17 | 18 | frameworkVersion: '3' 19 | 20 | provider: 21 | name: aws 22 | runtime: python3.8 23 | lambdaHashingVersion: 20201221 24 | ecr: 25 | images: 26 | predict_captcha: 27 | path: ./ 28 | platform: linux/amd64 29 | stage: prod 30 | region: ap-northeast-2 31 | iam: 32 | role: arn:aws:iam::545918303703:role/lambda-and-s3-full-access 33 | 34 | functions: 35 | captcha-cracker: 36 | image: 37 | name: predict_captcha 38 | events: 39 | - httpApi: 40 | path: /predict 41 | method: post 42 | environment: 43 | CUDA_VISIBLE_DEVICES: -1 44 | google-sheet: 45 | handler: cases.read 46 | events: 47 | - httpApi: 48 | path: /cases 49 | method: get 50 | google-sheet-update: 51 | handler: cases.update 52 | events: 53 | - httpApi: 54 | path: /cases 55 | method: post 56 | google-sheet-clear: 57 | handler: cases.clear 58 | events: 59 | - httpApi: 60 | path: /cases 61 | method: delete 62 | upload-s3: 63 | handler: s3.upload 64 | events: 65 | - httpApi: 66 | path: /upload 67 | method: post 68 | -------------------------------------------------------------------------------- /create-fixtures.js: -------------------------------------------------------------------------------- 1 | const env = require('./cypress.env.json'); 2 | const axios = require('axios'); 3 | const fs = require('fs'); 4 | 5 | const FIXTURE_FOLDER_PATH = './cypress/fixtures'; 6 | const SPEC_FOLDER_PATH = './cypress/e2e'; 7 | 8 | if (!fs.existsSync(FIXTURE_FOLDER_PATH)){ 9 | fs.mkdirSync(FIXTURE_FOLDER_PATH); 10 | } 11 | 12 | const chunkArray = (array, chunk_size) => 13 | Array(Math.ceil(array.length / chunk_size)) 14 | .fill() 15 | .map((_, index) => index * chunk_size) 16 | .map(begin => array.slice(begin, begin + chunk_size)) 17 | 18 | axios 19 | .get(`${env.CYPRESS_LAMBDA_API_URL}/cases`) 20 | .then(res => { 21 | // 배열의 자식 배열에 로우 인덱스를 추가함 22 | const indexedArray = res.data.data.slice(1).map((arr, i) => { 23 | arr.unshift(i+2); 24 | return arr; 25 | }); 26 | // 5개 단위로 배열을 쪼갬 27 | const items = chunkArray(indexedArray, 5); 28 | const spec = fs.readFileSync(`${SPEC_FOLDER_PATH}/spec.cy.js`, 'utf8'); 29 | // 5개 단위로 `spec_chunk_1.cy.js`, `spec_chunk_2.cy.js`, ... 를 생성 30 | items.forEach((cases, i) => { 31 | fs.writeFileSync(`${FIXTURE_FOLDER_PATH}/cases_chunk_${i}.json`, JSON.stringify(cases)); 32 | console.info(`${FIXTURE_FOLDER_PATH}/cases_chunk_${i}.json created`); 33 | // 원본 spec인 경우 새 스펙 생성 안함 34 | if (i === 0) return; 35 | const newSpec = spec.replace('cases_chunk_0.json', `cases_chunk_${i}.json`); 36 | fs.writeFileSync(`${SPEC_FOLDER_PATH}/spec_chunk_${i}.cy.js`, newSpec, 'utf8'); 37 | console.info(`${SPEC_FOLDER_PATH}/spec_chunk_${i}.cy.js created`); 38 | }); 39 | }) 40 | .catch(e => console.error(e)) 41 | -------------------------------------------------------------------------------- /api/cases.py: -------------------------------------------------------------------------------- 1 | import gspread 2 | import io 3 | import json 4 | 5 | 6 | SCOPES = ['https://www.googleapis.com/auth/spreadsheets'] 7 | SPREADSHEET_ID = '1_CDB4m-BthVbpITxKjwEE82CrKkqu6go98nKCgG1hhw' 8 | 9 | def read(event, context): 10 | gc = gspread.service_account(filename='./certification/service-account.json') 11 | doc = gc.open_by_key(SPREADSHEET_ID) 12 | worksheet = doc.get_worksheet(1) 13 | list_of_lists = worksheet.get_values() 14 | 15 | body = { 16 | "data": list_of_lists 17 | } 18 | 19 | response = { 20 | "statusCode": 200, 21 | "headers": { 22 | "Content-Type": "application/json" 23 | }, 24 | "body": json.dumps(body) 25 | } 26 | 27 | return response 28 | 29 | def update(event, context): 30 | input = json.loads(event['body']) 31 | print(input) 32 | cell_range = input['range'] 33 | update_values = input['values'] 34 | 35 | gc = gspread.service_account(filename='./certification/service-account.json') 36 | doc = gc.open_by_key(SPREADSHEET_ID) 37 | worksheet = doc.get_worksheet(0) 38 | worksheet.update(cell_range, update_values, raw=False) 39 | 40 | body = { 41 | "messsage" : "success" 42 | } 43 | 44 | response = { 45 | "statusCode": 200, 46 | "headers": { 47 | "Content-Type": "application/json" 48 | }, 49 | "body": json.dumps(body) 50 | } 51 | 52 | return response 53 | 54 | def clear(event, context): 55 | gc = gspread.service_account(filename='./certification/service-account.json') 56 | doc = gc.open_by_key(SPREADSHEET_ID) 57 | worksheet = doc.get_worksheet(0) 58 | worksheet.batch_clear(["A2:G3000"]) 59 | 60 | body = { 61 | "messsage" : "success" 62 | } 63 | 64 | response = { 65 | "statusCode": 200, 66 | "headers": { 67 | "Content-Type": "application/json" 68 | }, 69 | "body": json.dumps(body) 70 | } 71 | 72 | return response 73 | -------------------------------------------------------------------------------- /cypress-partial.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Primitive load-balancer to split Cypress specs across multiple runners. This script assumes that 3 | * all your specs are in the folder '/cypress/e2e'. It uses the number of 4 | * tests per spec file as sole criteria to split specs between runners. 5 | * 6 | * This script accepts two arguments: the total number of runners and the index (starting from 0) of 7 | * the current runner. Example: 8 | * $ node cypress-partial.js 5 2 9 | * This command asks for specs to give to the third runner of five runners. 10 | * The output of the script is a coma-separated list of specs that can be given to Cypress. Example: 11 | * cypress/e2e/some.spec.ts,cypress/e2e/another.spec.ts 12 | * 13 | * Let's assume you have five runners (virtual machines) to run specs in parallel on your CI, and 14 | * each runner knows its number (from 0 to 4). So the third runner must execute its spec as 15 | * following: 16 | * $ cypress run --spec $(node cypress-partial.js 5 2) 17 | * 18 | * Here as example for GitHub actions: 19 | * 20 | * jobs: 21 | * e2e: 22 | * runs-on: ubuntu-latest 23 | * strategy: 24 | * fail-fast: false 25 | * matrix: 26 | * containers: [ 0, 1, 2, 3, 4 ] 27 | * steps: 28 | * - name: E2E 29 | * run: cypress run --spec $(node cypress-partial.js 5 ${{ matrix.containers }}) 30 | */ 31 | 32 | const fs = require('fs/promises'); 33 | 34 | const specDir = 'cypress/e2e'; 35 | const testPattern = /(^|\s)(it|test)\(/g; 36 | 37 | const [ totalRunners, thisRunner ] = process.argv.splice(2); 38 | 39 | fs.readdir(specDir).then(async files => { 40 | const nbTests = {}; 41 | 42 | for (const file of files) { 43 | nbTests[file] = await testCount(file); 44 | } 45 | 46 | const chunks = []; 47 | 48 | Object 49 | .entries(nbTests) 50 | .sort((a, b) => b[1] - a[1]) 51 | .map(entry => entry[0]) 52 | .map(file => `${specDir}/${file}`) 53 | .forEach((file, index) => { 54 | const chunk = index % totalRunners; 55 | chunks[chunk] ||= []; 56 | chunks[chunk].push(file); 57 | }); 58 | 59 | if (!chunks[thisRunner]) return false; 60 | 61 | const output = chunks[thisRunner].join(','); 62 | return console.log(output); 63 | }); 64 | 65 | async function testCount(filename) { 66 | const content = await fs.readFile(`${specDir}/${filename}`, 'utf8'); 67 | return content.match(testPattern).length; 68 | } 69 | -------------------------------------------------------------------------------- /.github/workflows/update-sheet-manually.yml: -------------------------------------------------------------------------------- 1 | name: Update Sheet Manually 2 | on: workflow_dispatch 3 | 4 | env: 5 | CYPRESS_LAMBDA_API_URL: ${{ secrets.CYPRESS_LAMBDA_API_URL }} 6 | CYPRESS_S3_BUCKET_URL: ${{ secrets.CYPRESS_S3_BUCKET_URL }} 7 | 8 | jobs: 9 | create-fixtures: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v3 13 | - uses: actions/setup-node@v3 14 | with: 15 | node-version: '16' 16 | - name: Write the cypress.env.json file 📝 17 | # use quotes around the secret, as its value 18 | # is simply inserted as a string into the command 19 | run: | 20 | echo '${{ secrets.CYPRESS_ENV_CI }}' > cypress.env.json 21 | - name: yarn install 22 | run: | 23 | yarn install --frozen-lockfile 24 | - name: yarn fixture 25 | run: | 26 | yarn fixture 27 | - name: yarn clear 28 | run: | 29 | yarn clear 30 | - uses: actions/upload-artifact@main 31 | with: 32 | name: fixtures 33 | path: cypress/fixtures 34 | - uses: actions/upload-artifact@main 35 | with: 36 | name: specs 37 | path: cypress/e2e 38 | 39 | cypress-run: 40 | runs-on: ubuntu-latest 41 | needs: create-fixtures 42 | strategy: 43 | fail-fast: false 44 | matrix: 45 | containers: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49] 46 | steps: 47 | - uses: actions/checkout@v3 48 | - uses: actions/setup-node@v3 49 | with: 50 | node-version: '16' 51 | - name: Write the cypress.env.json file 📝 52 | # use quotes around the secret, as its value 53 | # is simply inserted as a string into the command 54 | run: | 55 | echo '${{ secrets.CYPRESS_ENV_CI }}' > cypress.env.json 56 | - uses: actions/download-artifact@main 57 | with: 58 | name: fixtures 59 | path: cypress/fixtures 60 | - uses: actions/download-artifact@main 61 | with: 62 | name: specs 63 | path: cypress/e2e 64 | - name: yarn install 65 | run: | 66 | yarn install --frozen-lockfile 67 | - name: Validate test filename 68 | id: validator 69 | shell: bash 70 | run: | 71 | if [ "$(node cypress-partial.js 50 ${{ matrix.containers }})" == "" ]; then 72 | echo ::set-output name=should-run::false 73 | else 74 | echo ::set-output name=should-run::true 75 | fi 76 | - name: Get result 77 | run: echo "${{steps.validator.outputs.should-run}}" 78 | - name: Cypress run 79 | if: ${{ steps.validator.outputs.should-run == 'true' }} 80 | run: | 81 | yarn start --spec $(node cypress-partial.js 50 ${{ matrix.containers }}) 82 | 83 | delete-artifacts: 84 | runs-on: ubuntu-latest 85 | needs: cypress-run 86 | if: ${{ always() }} 87 | steps: 88 | - uses: geekyeggo/delete-artifact@v1 89 | with: 90 | name: | 91 | fixtures 92 | specs 93 | -------------------------------------------------------------------------------- /.github/workflows/update-sheet-cron.yml: -------------------------------------------------------------------------------- 1 | name: Update Sheet Cron 2 | on: 3 | schedule: 4 | - cron: '0 15 * * 0,1,2,3,4' 5 | 6 | env: 7 | CYPRESS_LAMBDA_API_URL: ${{ secrets.CYPRESS_LAMBDA_API_URL }} 8 | CYPRESS_S3_BUCKET_URL: ${{ secrets.CYPRESS_S3_BUCKET_URL }} 9 | 10 | jobs: 11 | create-fixtures: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v3 15 | - uses: actions/setup-node@v3 16 | with: 17 | node-version: '16' 18 | - name: Write the cypress.env.json file 📝 19 | # use quotes around the secret, as its value 20 | # is simply inserted as a string into the command 21 | run: | 22 | echo '${{ secrets.CYPRESS_ENV_CI }}' > cypress.env.json 23 | - name: yarn install 24 | run: | 25 | yarn install --frozen-lockfile 26 | - name: yarn fixture 27 | run: | 28 | yarn fixture 29 | - name: yarn clear 30 | run: | 31 | yarn clear 32 | - uses: actions/upload-artifact@main 33 | with: 34 | name: fixtures 35 | path: cypress/fixtures 36 | - uses: actions/upload-artifact@main 37 | with: 38 | name: specs 39 | path: cypress/e2e 40 | 41 | cypress-run: 42 | runs-on: ubuntu-latest 43 | needs: create-fixtures 44 | strategy: 45 | fail-fast: false 46 | matrix: 47 | containers: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49] 48 | steps: 49 | - uses: actions/checkout@v3 50 | - uses: actions/setup-node@v3 51 | with: 52 | node-version: '16' 53 | - name: Write the cypress.env.json file 📝 54 | # use quotes around the secret, as its value 55 | # is simply inserted as a string into the command 56 | run: | 57 | echo '${{ secrets.CYPRESS_ENV_CI }}' > cypress.env.json 58 | - uses: actions/download-artifact@main 59 | with: 60 | name: fixtures 61 | path: cypress/fixtures 62 | - uses: actions/download-artifact@main 63 | with: 64 | name: specs 65 | path: cypress/e2e 66 | - name: yarn install 67 | run: | 68 | yarn install --frozen-lockfile 69 | - name: Validate test filename 70 | id: validator 71 | shell: bash 72 | run: | 73 | if [ "$(node cypress-partial.js 50 ${{ matrix.containers }})" == "" ]; then 74 | echo ::set-output name=should-run::false 75 | else 76 | echo ::set-output name=should-run::true 77 | fi 78 | - name: Get result 79 | run: echo "${{steps.validator.outputs.should-run}}" 80 | - name: Cypress run 81 | if: ${{ steps.validator.outputs.should-run == 'true' }} 82 | run: | 83 | yarn start --spec $(node cypress-partial.js 50 ${{ matrix.containers }}) 84 | 85 | delete-artifacts: 86 | runs-on: ubuntu-latest 87 | needs: cypress-run 88 | if: ${{ always() }} 89 | steps: 90 | - uses: geekyeggo/delete-artifact@v1 91 | with: 92 | name: | 93 | fixtures 94 | specs 95 | 96 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider 2 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 3 | 4 | # User-specific stuff 5 | .idea/**/workspace.xml 6 | .idea/**/tasks.xml 7 | .idea/**/usage.statistics.xml 8 | .idea/**/dictionaries 9 | .idea/**/shelf 10 | 11 | # AWS User-specific 12 | .idea/**/aws.xml 13 | 14 | # Generated files 15 | .idea/**/contentModel.xml 16 | 17 | # Sensitive or high-churn files 18 | .idea/**/dataSources/ 19 | .idea/**/dataSources.ids 20 | .idea/**/dataSources.local.xml 21 | .idea/**/sqlDataSources.xml 22 | .idea/**/dynamic.xml 23 | .idea/**/uiDesigner.xml 24 | .idea/**/dbnavigator.xml 25 | 26 | # Gradle 27 | .idea/**/gradle.xml 28 | .idea/**/libraries 29 | 30 | # Gradle and Maven with auto-import 31 | # When using Gradle or Maven with auto-import, you should exclude module files, 32 | # since they will be recreated, and may cause churn. Uncomment if using 33 | # auto-import. 34 | # .idea/artifacts 35 | # .idea/compiler.xml 36 | # .idea/jarRepositories.xml 37 | # .idea/modules.xml 38 | # .idea/*.iml 39 | # .idea/modules 40 | # *.iml 41 | # *.ipr 42 | 43 | # CMake 44 | cmake-build-*/ 45 | 46 | # Mongo Explorer plugin 47 | .idea/**/mongoSettings.xml 48 | 49 | # File-based project format 50 | *.iws 51 | 52 | # IntelliJ 53 | out/ 54 | 55 | # mpeltonen/sbt-idea plugin 56 | .idea_modules/ 57 | 58 | # JIRA plugin 59 | atlassian-ide-plugin.xml 60 | 61 | # Cursive Clojure plugin 62 | .idea/replstate.xml 63 | 64 | # SonarLint plugin 65 | .idea/sonarlint/ 66 | 67 | # Crashlytics plugin (for Android Studio and IntelliJ) 68 | com_crashlytics_export_strings.xml 69 | crashlytics.properties 70 | crashlytics-build.properties 71 | fabric.properties 72 | 73 | # Editor-based Rest Client 74 | .idea/httpRequests 75 | 76 | # Android studio 3.1+ serialized cache file 77 | .idea/caches/build_file_checksums.ser 78 | 79 | # Logs 80 | logs 81 | *.log 82 | npm-debug.log* 83 | yarn-debug.log* 84 | yarn-error.log* 85 | lerna-debug.log* 86 | 87 | # Diagnostic reports (https://nodejs.org/api/report.html) 88 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 89 | 90 | # Runtime data 91 | pids 92 | *.pid 93 | *.seed 94 | *.pid.lock 95 | 96 | # Directory for instrumented libs generated by jscoverage/JSCover 97 | lib-cov 98 | 99 | # Coverage directory used by tools like istanbul 100 | coverage 101 | *.lcov 102 | 103 | # nyc test coverage 104 | .nyc_output 105 | 106 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 107 | .grunt 108 | 109 | # Bower dependency directory (https://bower.io/) 110 | bower_components 111 | 112 | # node-waf configuration 113 | .lock-wscript 114 | 115 | # Compiled binary addons (https://nodejs.org/api/addons.html) 116 | build/Release 117 | 118 | # Dependency directories 119 | node_modules/ 120 | jspm_packages/ 121 | 122 | # TypeScript v1 declaration files 123 | typings/ 124 | 125 | # TypeScript cache 126 | *.tsbuildinfo 127 | 128 | # Optional npm cache directory 129 | .npm 130 | 131 | # Optional eslint cache 132 | .eslintcache 133 | 134 | # Microbundle cache 135 | .rpt2_cache/ 136 | .rts2_cache_cjs/ 137 | .rts2_cache_es/ 138 | .rts2_cache_umd/ 139 | 140 | # Optional REPL history 141 | .node_repl_history 142 | 143 | # Output of 'npm pack' 144 | *.tgz 145 | 146 | # Yarn Integrity file 147 | .yarn-integrity 148 | 149 | # dotenv environment variables file 150 | .env 151 | .env.test 152 | 153 | # parcel-bundler cache (https://parceljs.org/) 154 | .cache 155 | 156 | # Next.js build output 157 | .next 158 | 159 | # Nuxt.js build / generate output 160 | .nuxt 161 | dist 162 | 163 | # Gatsby files 164 | .cache/ 165 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 166 | # https://nextjs.org/blog/next-9-1#public-directory-support 167 | # public 168 | 169 | # vuepress build output 170 | .vuepress/dist 171 | 172 | # Serverless directories 173 | .serverless/ 174 | 175 | # FuseBox cache 176 | .fusebox/ 177 | 178 | # DynamoDB Local files 179 | .dynamodb/ 180 | 181 | # TernJS port file 182 | .tern-port 183 | 184 | # Byte-compiled / optimized / DLL files 185 | __pycache__/ 186 | *.py[cod] 187 | 188 | # Mac 189 | .DS_Store 190 | 191 | # Cypress 192 | cypress/fixtures/*.json 193 | cypress/screenshots 194 | cypress/e2e/spec_chunk_**.js 195 | cypress.env.json 196 | 197 | # Python 198 | venv 199 | 200 | # Others 201 | *.h5 202 | *.pickle 203 | service-account.json 204 | -------------------------------------------------------------------------------- /cypress/e2e/spec.cy.js: -------------------------------------------------------------------------------- 1 | const dayjs = require('dayjs'); 2 | const minMax = require('dayjs/plugin/minMax') 3 | dayjs.extend(minMax); 4 | 5 | const courts = require('../js/courts'); 6 | const caseTypes = require('../js/caseTypes'); 7 | const cases = require('../fixtures/cases_chunk_0.json'); 8 | 9 | const LAMBDA_API_URL = Cypress.env('CYPRESS_LAMBDA_API_URL'); 10 | const S3_BUCKET_URL = Cypress.env('CYPRESS_S3_BUCKET_URL'); 11 | const SCREENSHOT_URL = `${S3_BUCKET_URL}/screenshots`; 12 | const caseLookup = {}; 13 | const doneCaseLookup = {}; 14 | 15 | describe('Search case', function () { 16 | cases.forEach(([rowIndex, court, caseNumber, manager]) => { 17 | it(`[${rowIndex}] Search and Update sheet`, function() { 18 | cy.visit({ 19 | url: 'https://safind.scourt.go.kr/sf/mysafind.jsp', 20 | headers: { 21 | 'Accept-Language': 'ko,en;q=0.9,ko-KR;q=0.8,en-US;q=0.7' 22 | }, 23 | retryOnStatusCodeFailure: true 24 | }); 25 | 26 | cy.get('img').each(($img) => { 27 | cy.wrap($img).scrollIntoView().should('be.visible'); 28 | 29 | expect($img[0].naturalWidth).to.be.greaterThan(0); 30 | expect($img[0].naturalHeight).to.be.greaterThan(0); 31 | }); 32 | 33 | cy.get('#sch_bub_nm').then(elem => { 34 | elem.get(0).options.length = 0; 35 | expect(elem.get(0).options).length(0); 36 | 37 | for (const {name, value} of courts) { 38 | elem.append(new Option(name, value)); 39 | } 40 | 41 | expect(elem.get(0).options).length(courts.length); 42 | }); 43 | cy.wait(500); 44 | 45 | // 법원 선택 46 | const courtToSelect = courts.find(n => n.name === court); 47 | cy.get('#sch_bub_nm') 48 | .select(courtToSelect.value) 49 | .should('have.value', courtToSelect.value); 50 | 51 | const [caseYear, caseSerialNumber] = caseNumber.match(/[0-9]+/g); 52 | const [caseType] = caseNumber.match(/([가-힣])+/g); 53 | 54 | cy.get('#sel_sa_year') 55 | .select(caseYear) 56 | .should('have.value', caseYear); 57 | 58 | cy.get('#sa_gubun').then(elem => { 59 | elem.get(0).options.length = 0; 60 | expect(elem.get(0).options).length(0); 61 | 62 | const caseTypeIdxToSelect = caseTypes.findIndex(n => n.name === caseType); 63 | elem.append( 64 | new Option(caseTypes[caseTypeIdxToSelect].name, caseTypes[caseTypeIdxToSelect].value) 65 | ); 66 | expect(elem.get(0).options).length(1); 67 | }); 68 | cy.wait(500); 69 | 70 | // 사건번호 입력 71 | cy.get('#sa_serial') 72 | .type(caseSerialNumber) 73 | .should('have.value', caseSerialNumber); 74 | 75 | // 당사자명 입력 76 | cy.get('#ds_nm') 77 | .type(manager) 78 | .should('have.value', manager); 79 | 80 | cy.document().then($document => { 81 | cy 82 | .get('#captcha') 83 | .find('img') 84 | .should('have.attr', 'src', '/sf/captchaImg?t=image') 85 | .then(async $img => { 86 | const canvas = $document.createElement("canvas"); 87 | const ctx = canvas.getContext("2d"); 88 | canvas.width = $img.width(); 89 | canvas.height = $img.height(); 90 | ctx.drawImage($img.get(0), 0, 0, $img.width(), $img.height()); 91 | 92 | let blob; 93 | await new Cypress.Promise((resolve) => { 94 | canvas.toBlob(function (b) { 95 | blob = b; 96 | resolve(b); 97 | }, 'image/wbmp'); 98 | }); 99 | 100 | const formData = new FormData(); 101 | formData.append("image", blob); 102 | 103 | // 자동입력방지 문자 해석하기 104 | cy.request({ 105 | method: 'POST', 106 | url: `${LAMBDA_API_URL}/predict`, 107 | body: formData, 108 | headers: { 109 | 'content-type': 'multipart/form-data', 110 | }, 111 | }) 112 | .then((response) => { 113 | const number = new TextDecoder().decode(response.body); 114 | expect(number).length(6); 115 | 116 | // 자동입력방지 문자 입력 117 | cy.get('#answer') 118 | .type(number) 119 | .should('have.value', number); 120 | }); 121 | }); 122 | }); 123 | 124 | 125 | function finalStep() { 126 | cy.get('li.subTab2').click(); 127 | cy.get('#subTab2 .tableHor tbody tr').then(elem => { 128 | expect(elem.length).gt(0); 129 | }); 130 | cy.get('#subTab2 .tableHor tbody tr').last().prev().then(function (prevElem) { 131 | const [prevDateElem,,prevResultElem] = prevElem.children(); 132 | const prevDate = prevDateElem.innerText.trim(); 133 | const prevResultDate = prevResultElem.innerText.trim().substr(0, 10); 134 | 135 | cy.get('#subTab2 .tableHor tbody tr').last().then(function (elem) { 136 | const [dateElem,,resultElem] = elem.children(); 137 | const date = dateElem.innerText.trim(); 138 | const resultDate = resultElem.innerText.trim().substr(0, 10); 139 | const finalDate = dayjs.max( 140 | [prevDate, prevResultDate, date, resultDate] 141 | .filter(n => n) 142 | .filter(n => dayjs(n).isValid()) 143 | .map(n => dayjs(n)) 144 | ).format('YYYY. MM. DD'); 145 | 146 | // 최종 변경일자에 기입할 날짜 147 | expect(finalDate.length).gt(0); 148 | 149 | const filename = `${caseNumber}`; 150 | cy.get('#subTab2 .tableHor').screenshot(filename, { 151 | onAfterScreenshot($el, {name, path}) { 152 | caseLookup[rowIndex] = [ 153 | court, caseNumber, manager, path, name, finalDate 154 | ]; 155 | }, 156 | }); 157 | }); 158 | }); 159 | } 160 | 161 | const alertStub = cy.stub(); 162 | cy.on('window:alert', alertStub); 163 | cy.get('.tableVer .redBtn').click().then(() => { 164 | const alertChain = alertStub.getCall(0); 165 | if ((alertChain || {}).lastArg !== '사건이 존재하지 않습니다.') { 166 | finalStep(); 167 | } 168 | }); 169 | }); 170 | }); 171 | 172 | afterEach(() => { 173 | Object.keys(caseLookup).forEach((rowIndex) => { 174 | // 이미 시트에 업데이트 한 사건은 스킵 175 | if (doneCaseLookup[rowIndex]) return; 176 | const today = dayjs().format('YYYY-MM-DD'); 177 | const [ 178 | court, caseNumber, manager, imgPath, filename, date 179 | ] = caseLookup[rowIndex]; 180 | 181 | cy.readFile(imgPath, 'base64').then(img => { 182 | // 스크린샷 s3에 업로드 183 | cy.request({ 184 | method: 'POST', 185 | url: `${LAMBDA_API_URL}/upload`, 186 | body: JSON.stringify({ 187 | name: `screenshots/${filename}.png`, 188 | file: img, 189 | }), 190 | headers: { 191 | 'content-type': 'application/json', 192 | }, 193 | }) 194 | .then((response) => { 195 | expect(response.status).eq(200); 196 | }); 197 | }); 198 | 199 | // 구글 시트 업데이트 200 | cy.request({ 201 | method: 'POST', 202 | url: `${LAMBDA_API_URL}/cases`, 203 | body: { 204 | range: `A${rowIndex}:G${rowIndex}`, 205 | values: [[ 206 | court, 207 | caseNumber, 208 | manager, 209 | dayjs(date).format('YYYY-MM-DD'), 210 | today, 211 | `=HYPERLINK("${SCREENSHOT_URL}/${filename}.png", "이미지 링크")`, 212 | `='사건 목록'!D${rowIndex}` 213 | ]], 214 | }, 215 | headers: { 216 | 'content-type': 'application/json', 217 | }, 218 | }) 219 | .then((response) => { 220 | expect(response.status).eq(200); 221 | doneCaseLookup[rowIndex] = true; 222 | }); 223 | }); 224 | }); 225 | }); 226 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # case-ing 2 | 대법원 나의 사건 조회 자동화 API & 크롤러 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | case-ing는 case + ~ing의 합성어로 여러개의 사건 진행현황을 쉽게 조회하도록 도와주는 15 | 자동화 도구입니다. 16 | 17 | ## 사용된 기술 18 | - [Cypress](https://www.cypress.io/) - 크롤링 19 | - [Scikit-learn](https://scikit-learn.org/) - Captcha 학습, 분석 20 | - [Serverless Framework](https://www.serverless.com/) - Captcha 분석 API, 구글 스프레드시트 조회/수정 API 생성 21 | 22 | ## 요구사항 23 | - Node.js >= 14 24 | - yarn v1.x 25 | - Docker 26 | 27 | ## 폴더 구조 28 | ``` 29 | case-ing 30 | └── api 31 | │ └──certification 32 | │ │ └─ service-account.json # 구글 스프레드시트 인증을 위한 파일 33 | │ └──model 34 | │ │ └─ model.pickle # 미리 학습된 scikit-learn 모델 35 | │ ├─ app.py # 캡챠 handler 36 | │ ├─ cases.py # 구글 스프레드시트 Read, Update handler 37 | │ ├─ docker-requirements.txt # 캡챠 handler 도커 배포에 필요한 패키지 정의 38 | │ ├─ Dockerfile # 캡챠 도커파일 39 | │ ├─ requirements.txt # 구글 스프레드시트 handler 배포에 필요한 패키지 정의 40 | │ ├─ s3.py # s3 업로드 handler 41 | │ └─ serverless.yml # 서버리스 설정파일 42 | └── cypress 43 | │ └──fixtures # 사건들이 create-fixtures.js 실행 후 여기에 생성됨 44 | │ └──e2e 45 | │ │ └─ spec.cy.js # 자동화 메인 스크립트 46 | │ └──js 47 | │ │ ├─ caseTypes.js # 대법원 홈페이지에서 추출한 사건 구분 데이터 48 | │ │ └─ courts.js # 대법원 홈페이지에서 추출한 법원 데이터 49 | │ └──plugins 50 | │ └─ index.js 51 | ├─ create-fixtures.js # 구글 스프레드시트를 조회해서 필요한 fixtures를 생성함 52 | ├─ cypress-partial.js # Cypress 병렬 실행용 스크립트 53 | └─ cypress.env.json # 환경변수 저장소 54 | ``` 55 | 56 | ## 사전 준비 57 | 58 | ### 1. 구글 스프레드시트 생성 59 | 60 | #### 사건 진행현황 시트 생성 61 | 자동화 입력이 끝난 후 결과가 기록될 시트입니다. 62 | 63 | sheet_a 64 | 65 | #### 사건 목록 시트 생성 66 | 조회하고 싶은 사건을 입력할 시트입니다. 67 | 68 | sheet_b 69 | 70 | #### 스프레드시트 id 입력 71 | `api/cases.py`의 `SPREADSHEET_ID`에 생성한 스프레드시트의 id를 입력합니다. 스프레드시트의 id는 72 | 스프레드시트가 열려있는 탭의 URL의 중간에 있는 유니크 아이디를 가져옵니다. 73 | 74 | `https://docs.google.com/spreadsheets/d/여기에 스프레드시트 id가 있습니다/edit#gid=0` 75 | 76 | ### 2. 서비스 계정 생성 및 스프레드시트 편집자 권한 부여 77 | 구글 개발자 콘솔에서 프로젝트를 만들고 [Google Sheets API](https://developers.google.com/sheets/api)를 활성화합니다. 78 | 79 | 그 후 서비스 계정의 API 키를 생성 및 다운로드 받은 후 `api/certification/service-account.json`에 서비스 키를 저장합니다. 80 | 81 | 위 작업이 끝나면 스프레드시트 우측 상단의 공유 버튼을 클릭합니다. 82 | 83 | share 84 | 85 | 공유 모달에서 서비스 계정의 이메일을 입력하고 편집자 권한을 부여합니다. 86 | 87 | ### 3. Captcha 우회용 Scikit-learn 학습 88 | 캡챠 예측에 필요한 모델을 학습시킨 후 `api/model/model.pickle`에 모델을 저장합니다. 89 | 90 | 이 레포에서는 학습 모델을 따로 제공하지 않습니다. 91 | 92 | ### 4. S3 버킷 생성 93 | 사건 진행 내용 스크린샷을 저장할 S3 버킷을 생성합니다. 94 | 95 | ### 5. IAM 역할 생성 96 | 정책 예) 97 | - `AWSLambdaBasicExecutionRole` 98 | - `AmazonS3FullAccess` 99 | - `AWSLambda_FullAccess` 100 | 101 | IAM 역할을 생성한 후 `api/serverless.yml`에 ARN을 입력합니다. (키: `provider.iam.role`) 102 | 103 | ## 서버리스 백엔드 준비하기 104 | 서버리스 백엔드는 캡챠 예측, 구글 스프레드 시트 조회 & 업데이트를 위해 필요하며, 서버리스 프레임워크를 통해 배포됩니다. 105 | 106 | ### 시작하기 107 | 서버리스는 `api/serverless.yml`에 기재된 `frameworkVersion`의 메이저 버전과 일치해야 합니다. 108 | 109 | ~~현재는 설정이 2.xx 버전 기준이므로 `@latest-2` 태그를 붙여서 글로벌로 패키지 설치를 진행합니다.~~ 110 | 111 | 현재 최신 버전인 3 버전으로 글로벌 설치를 진행합니다. 112 | 113 | ```shell 114 | npm install -g serverless@latest 115 | ``` 116 | 117 | 서버리스 배포를 위해 aws-cli를 통한 프로필 설정을 진행해주세요. 이미 설정이 되있다면 넘어가셔도 됩니다. 118 | 119 | ```shell 120 | $ aws configure 121 | AWS Access Key ID: foo 122 | AWS Secret Access Key: bar 123 | Default region name [us-west-2]: ap-northeast-2 124 | Default output format [None]: 125 | ``` 126 | 127 | ### 테스트 (local) 128 | 로컬 환경에서 테스트 하는 방법을 설명합니다. 노드, 파이썬 패키지 설치와 도커 빌드 과정이 필요합니다. 129 | 130 | #### 노드 패키지 설치 131 | ```shell 132 | cd api 133 | yarn install 134 | ``` 135 | 136 | #### 파이썬 패키지 설치 137 | 파이썬 패키지의 전역 설치를 피하기 위해 가상환경을 구성합니다. 138 | 139 | `venv`, `virtualenv` 등의 선택지가 있는데 여기선 `virtualenv`를 사용하겠습니다. ([`virtualenv` 설치 가이드](https://virtualenv.pypa.io/en/latest/installation.html)) 140 | 141 | ```shell 142 | cd api 143 | virtualenv venv 144 | source venv/bin/activate 145 | ``` 146 | 147 | * `activate`는 가상 환경에 설치한 파이썬과 패키지를 시스템에 설치된 것보다 먼저 사용하도록 환경 변수를 구성하는 역할을 148 | 하므로 반드시 실행해야 합니다. 149 | 150 | ```shell 151 | pip3 install -r requirements.txt 152 | deactivate 153 | ``` 154 | 155 | 캡챠 예측 API의 경우 `serverless-offline`으로 로컬에서 테스트가 불가능하므로 별도 빌드 작업이 필요합니다. 156 | 157 | ```shell 158 | docker buildx build --platform linux/amd64 -t predict-captcha . 159 | ``` 160 | * `--platform linux/amd64` 플래그를 붙이면 맥북 M1 환경에서도 빌드가 가능해집니다. 161 | 162 | #### 테스트 실행 163 | 164 | ```shell 165 | cd api 166 | sls offline 167 | ``` 168 | 169 | http://localhost:3000/cases 에 `GET` 요청을 보내서 스프레드시트의 데이터를 읽어올 수 있는지 테스트 해봅니다. 170 | 171 | ```shell 172 | cd api 173 | docker run -p 9000:8080 predict-captcha:latest 174 | ``` 175 | 176 | http://localhost:9000/2015-03-31/functions/function/invocations 에 `POST` 요청을 보내서 응답이 오는지 테스트 해봅니다. 177 | 178 | 아래 이미지는 POST 요청 예시입니다. 179 | 180 | example 181 | 182 | 캡챠 예측 API의 경우 로컬에서 에러가 발생할 수 있습니다. 이런 경우 아래 서술할 beta 환경에 배포 후 테스트를 진행할 수도 183 | 있습니다. 184 | 185 | ### 테스트 (beta) 186 | 베타에서 테스트 하는 방법을 설명합니다. 노드 패키지 설치 후 서버리스에 `beta` 환경으로 배포합니다. 배포를 진행하기 전에 187 | 도커 실행이 필요합니다. 188 | 189 | ```shell 190 | cd api 191 | yarn install 192 | serverless deploy --stage beta 193 | ``` 194 | 195 | 서버리스 배포가 완료되면 배포된 URL이 콘솔에 뜰텐데 해당 URL로 요청을 보내봅니다. 아래는 예시입니다. 196 | 197 | - (GET) https://xxxxxxxxx.execute-api.ap-northeast-2.amazonaws.com/cases 198 | - (POST) https://xxxxxxxxx.execute-api.ap-northeast-2.amazonaws.com/predict 199 | 200 | 아래는 캡챠 API에 대한 요청 및 응답 예시입니다. 201 | 202 | body_example 203 | 204 | ### 배포 205 | 206 | 캡챠 예측의 경우 다른 API와 다르게 약 1GB가 넘는 의존성이 필요하므로 도커 이미지로 빌드됩니다. 207 | 208 | 도커 이미지 빌드를 위해 도커를 실행합니다. 도커가 없다면 [공식 홈페이지](https://www.docker.com/products/docker-desktop/)에서 설치해주세요. 209 | 210 | ``` 211 | cd api 212 | yarn install 213 | sls deploy 214 | ``` 215 | 216 | ## Cypress 자동화 준비하기 217 | 218 | ### 1. 루트 경로에 cypress.env.json 생성 219 | ```json 220 | { 221 | "CYPRESS_LAMBDA_API_URL": "", 222 | "CYPRESS_S3_BUCKET_URL": "" 223 | } 224 | ``` 225 | 226 | - URL 마지막에 `/`는 적지 않습니다. 227 | - CYPRESS_LAMBDA_API_URL은 앞에서 배포된 서버리스 백엔드의 URL Endpoint를 기입합니다. 228 | 229 | ### 2. Actions Secrets 입력 230 | 231 | 깃허브 메뉴의 Settings -> Secrets -> Actions 에 들어가서 `CYPRESS_ENV_CI` 키를 아래와 같이 생성합니다. 232 | 233 | ```json 234 | { 235 | "CYPRESS_LAMBDA_API_URL": "", 236 | "CYPRESS_S3_BUCKET_URL": "" 237 | } 238 | ``` 239 | 240 | 여기서 입력한 json 데이터는 workflow 실행 중 아래 명령어에 의해 자동으로 생성됩니다. 241 | 242 | ```shell 243 | echo '${{ secrets.CYPRESS_ENV_CI }}' > cypress.env.json 244 | ``` 245 | 246 | ## Cypress 자동화 테스트 247 | ```shell 248 | node create-fixtures.js 249 | yarn test 250 | ``` 251 | 252 | ## GitHub Actions workflow 253 | 254 | - `.github/workflows/update-sheet-cron.yml` 255 | - 일정 주기에 따라 실행되는 워크플로우입니다. 256 | - `.github/workflows/update-sheet-manually.yml` 257 | - 수동으로 실행하는 워크플로우입니다. 258 | 259 | 더 많은 사건을 빠르게 처리하기 위해 GitHub Actions의 Job Matrix에 여러개의 기기를 두어 병렬 실행을 하도록 260 | 구성되어있습니다. [Cypress에서 제공하는 github-action](https://github.com/cypress-io/github-action)에서도 병렬 실행을 261 | 제공하고 있지만, 유료 플랜을 사용하지 않는 경우 제한이 걸려있기 때문에 별도의 Node.js 스크립트를 사용해서 병렬 실행을 262 | 하도록 구성하였습니다. `create-fixtures.js`와 `cypress-partial.js`에서 관련 코드를 확인할 수 있습니다. 263 | 264 | 실제 워크플로우 실행은 아래와 같은 단계로 구성됩니다. 265 | 266 | ### 1. 픽스쳐 생성 (create-fixtures) 267 | ```shell 268 | node create-fixtures.js 269 | ``` 270 | 271 | - Serverless를 통해 배포된 Lambda API에서 스프레드시트 데이터를 받아옴 272 | - `cypress/fixtures` 폴더에 5개 단위로 `cases_chunk_.json`를 생성함. 5개씩 나누는 이유는 Cypress 병렬 실행을 위함임. 273 | - `cypress/e2e` 폴더에 5개 단위로 `spec_chunk_.cy.js`를 생성함. 274 | 275 | 이후 최신 정보를 유지하기위해 구글 스프레드시트의 사건 진행현황 시트 데이터를 초기화합니다. 276 | 277 | ### 2. 자동화 메인 스크립트 실행 (cypress-run) 278 | ```shell 279 | yarn start --spec $(node cypress-partial.js n ${{ matrix.containers }}) 280 | ``` 281 | - `n`개의 러너 중 해당 러너가 실행해야 할 번호의 spec을 실행 282 | 283 | ### 3. 아티펙트 삭제 (delete-artifacts) 284 | 워크플로우 실행중에 artifact에 보관한 파일들을 삭제합니다. 해당 작업을 진행하지 않으면 실행한 데이터가 남아서 285 | 개인정보가 유출 위험이 존재하며 깃허브에 보관 비용을 낼 수도 있습니다. 286 | 287 | ## spec.cy.js 프로세스 설명 288 | 289 | ### 1. 나의 사건 조회 페이지 접속 290 | ### 2. 페이지 안의 모든 이미지들이 불러와졌는지 검사 291 | 가끔 캡챠 이미지가 깨질때가 있는데 미리 검사해서 실패시 빠른 재시도를 할 수 있음 292 | 293 | ### 3. 사건 번호 / 법원 데이터 강제 입력 294 | EUC-KR 인코딩으로 인해 깨진 데이터들을 아래의 파일에서 직접 넣어줌 295 | 296 | - `cypress/js/caseTypes.js` 297 | - `cypress/js/courts.js` 298 | 299 | ### 4. 자동입력방지 문자 입력 300 | Lambda API에 캡챠 이미지를 전송하여 예측된 숫자를 입력함 301 | 단, 정확도가 100%가 아니므로 실패시 최대 20번까지 재시도함 302 | 303 | ### 5. 사건 진행내역 스크린샷 캡쳐 304 | ### 6. S3에 스크린샷 업로드 305 | ### 7. 구글 시트 업데이트 306 | Lambda API를 통해 사건 별로 S3 이미지 링크를 시트에 업데이트 307 | -------------------------------------------------------------------------------- /cypress/js/courts.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | { 3 | name: "가평군법원", 4 | value: "214803", 5 | }, 6 | { 7 | name: "강릉지원", 8 | value: "000261", 9 | }, 10 | { 11 | name: "강진군법원", 12 | value: "512951", 13 | }, 14 | { 15 | name: "강화군법원", 16 | value: "240811", 17 | }, 18 | { 19 | name: "거제시법원", 20 | value: "422931", 21 | }, 22 | { 23 | name: "거창지원", 24 | value: "000424", 25 | }, 26 | { 27 | name: "경산시법원", 28 | value: "310895", 29 | }, 30 | { 31 | name: "고령군법원", 32 | value: "310896", 33 | }, 34 | { 35 | name: "고성군법원", 36 | value: "263848", 37 | }, 38 | { 39 | name: "고성군법원(경)", 40 | value: "422932", 41 | }, 42 | { 43 | name: "고양지원", 44 | value: "214807", 45 | }, 46 | { 47 | name: "고창군법원", 48 | value: "522977", 49 | }, 50 | { 51 | name: "고흥군법원", 52 | value: "513953", 53 | }, 54 | { 55 | name: "곡성군법원", 56 | value: "510941", 57 | }, 58 | { 59 | name: "광명시법원", 60 | value: "250825", 61 | }, 62 | { 63 | name: "광양시법원", 64 | value: "513956", 65 | }, 66 | { 67 | name: "광주고등법원", 68 | value: "000500", 69 | }, 70 | { 71 | name: "광주고등법원(전주재판부)", 72 | value: "000502", 73 | }, 74 | { 75 | name: "광주고등법원(제주재판부)", 76 | value: "000501", 77 | }, 78 | { 79 | name: "광주시법원", 80 | value: "251827", 81 | }, 82 | { 83 | name: "광주가정법원", 84 | value: "000515", 85 | }, 86 | { 87 | name: "광주가정법원 목포지원", 88 | value: "000599", 89 | }, 90 | { 91 | name: "광주가정법원 순천지원", 92 | value: "000591", 93 | }, 94 | { 95 | name: "광주가정법원 장흥지원", 96 | value: "000590", 97 | }, 98 | { 99 | name: "광주가정법원 해남지원", 100 | value: "000592", 101 | }, 102 | { 103 | name: "광주지방법원", 104 | value: "000510", 105 | }, 106 | { 107 | name: "광주지방법원 목포지원", 108 | value: "000511", 109 | }, 110 | { 111 | name: "광주지방법원 장흥지원", 112 | value: "000512", 113 | }, 114 | { 115 | name: "광주지방법원 순천지원", 116 | value: "000513", 117 | }, 118 | { 119 | name: "광주지방법원 해남지원", 120 | value: "000514", 121 | }, 122 | { 123 | name: "괴산군법원", 124 | value: "270862", 125 | }, 126 | { 127 | name: "구례군법원", 128 | value: "513955", 129 | }, 130 | { 131 | name: "구미시법원", 132 | value: "313901", 133 | }, 134 | { 135 | name: "군산지원", 136 | value: "000521", 137 | }, 138 | { 139 | name: "군위군법원", 140 | value: "315905", 141 | }, 142 | { 143 | name: "금산군법원", 144 | value: "280872", 145 | }, 146 | { 147 | name: "김제시법원", 148 | value: "520972", 149 | }, 150 | { 151 | name: "김포시법원", 152 | value: "240812", 153 | }, 154 | { 155 | name: "김해시법원", 156 | value: "420923", 157 | }, 158 | { 159 | name: "나주시법원", 160 | value: "510943", 161 | }, 162 | { 163 | name: "남양주시법원", 164 | value: "214804", 165 | }, 166 | { 167 | name: "남원지원", 168 | value: "000523", 169 | }, 170 | { 171 | name: "남해군법원", 172 | value: "421928", 173 | }, 174 | { 175 | name: "단양군법원", 176 | value: "272865", 177 | }, 178 | { 179 | name: "담양군법원", 180 | value: "510946", 181 | }, 182 | { 183 | name: "당진시법원", 184 | value: "285881", 185 | }, 186 | { 187 | name: "대구가정법원", 188 | value: "000318", 189 | }, 190 | { 191 | name: "대구가정법원 경주지원", 192 | value: "000390", 193 | }, 194 | { 195 | name: "대구가정법원 김천지원", 196 | value: "000391", 197 | }, 198 | { 199 | name: "대구가정법원 상주지원", 200 | value: "000392", 201 | }, 202 | { 203 | name: "대구가정법원 안동지원", 204 | value: "000399", 205 | }, 206 | { 207 | name: "대구가정법원 의성지원", 208 | value: "000393", 209 | }, 210 | { 211 | name: "대구가정법원 영덕지원", 212 | value: "000394", 213 | }, 214 | { 215 | name: "대구가정법원 포항지원", 216 | value: "000395", 217 | }, 218 | { 219 | name: "대구고등법원", 220 | value: "000300", 221 | }, 222 | { 223 | name: "대구지방법원", 224 | value: "000310", 225 | }, 226 | { 227 | name: "대구지방법원 안동지원", 228 | value: "000311", 229 | }, 230 | { 231 | name: "대구지방법원 경주지원", 232 | value: "000312", 233 | }, 234 | { 235 | name: "대구지방법원 포항지원", 236 | value: "000317", 237 | }, 238 | { 239 | name: "대구지방법원 김천지원", 240 | value: "000313", 241 | }, 242 | { 243 | name: "대구지방법원 상주지원", 244 | value: "000314", 245 | }, 246 | { 247 | name: "대구지방법원 의성지원", 248 | value: "000315", 249 | }, 250 | { 251 | name: "대구지방법원 영덕지원", 252 | value: "000316", 253 | }, 254 | { 255 | name: "대구지방법원 서부지원", 256 | value: "000320", 257 | }, 258 | { 259 | name: "대법원", 260 | value: "000100", 261 | }, 262 | { 263 | name: "대전가정법원", 264 | value: "000286", 265 | }, 266 | { 267 | name: "대전가정법원 공주지원", 268 | value: "000295", 269 | }, 270 | { 271 | name: "대전가정법원 논산지원", 272 | value: "000293", 273 | }, 274 | { 275 | name: "대전가정법원 서산지원", 276 | value: "000296", 277 | }, 278 | { 279 | name: "대전가정법원 천안지원", 280 | value: "000294", 281 | }, 282 | { 283 | name: "대전가정법원 홍성지원", 284 | value: "000292", 285 | }, 286 | { 287 | name: "대전고등법원", 288 | value: "000600", 289 | }, 290 | { 291 | name: "대전고등법원(청주재판부)", 292 | value: "000601", 293 | }, 294 | { 295 | name: "대전지방법원", 296 | value: "000280", 297 | }, 298 | { 299 | name: "대전지방법원 홍성지원", 300 | value: "000281", 301 | }, 302 | { 303 | name: "대전지방법원 공주지원", 304 | value: "000284", 305 | }, 306 | { 307 | name: "대전지방법원 논산지원", 308 | value: "000282", 309 | }, 310 | { 311 | name: "대전지방법원 서산지원", 312 | value: "000285", 313 | }, 314 | { 315 | name: "대전지방법원 천안지원", 316 | value: "000283", 317 | }, 318 | { 319 | name: "동두천시법원", 320 | value: "214808", 321 | }, 322 | { 323 | name: "동해시법원", 324 | value: "261846", 325 | }, 326 | { 327 | name: "마산시법원", 328 | value: "마산시법원", 329 | }, 330 | { 331 | name: "마산지원", 332 | value: "000431", 333 | }, 334 | { 335 | name: "무안군법원", 336 | value: "511949", 337 | }, 338 | { 339 | name: "무주군법원", 340 | value: "520973", 341 | }, 342 | { 343 | name: "문경시법원", 344 | value: "314903", 345 | }, 346 | { 347 | name: "밀양지원", 348 | value: "000423", 349 | }, 350 | { 351 | name: "법원행정처", 352 | value: "000110", 353 | }, 354 | { 355 | name: "보령시법원", 356 | value: "281874", 357 | }, 358 | { 359 | name: "보성군법원", 360 | value: "513952", 361 | }, 362 | { 363 | name: "보은군법원", 364 | value: "270861", 365 | }, 366 | { 367 | name: "봉화군법원", 368 | value: "311898", 369 | }, 370 | { 371 | name: "부산고등법원", 372 | value: "000400", 373 | }, 374 | { 375 | name: "부산고등법원(울산재판부)", 376 | value: "000402", 377 | }, 378 | { 379 | name: "부산고등법원(창원재판부)", 380 | value: "000401", 381 | }, 382 | { 383 | name: "부산지방법원", 384 | value: "000410", 385 | }, 386 | { 387 | name: "부산지방법원 동부지원", 388 | value: "000412", 389 | }, 390 | { 391 | name: "부산지방법원 서부지원", 392 | value: "000414", 393 | }, 394 | { 395 | name: "부산가정법원", 396 | value: "000413", 397 | }, 398 | { 399 | name: "부안군법원", 400 | value: "522976", 401 | }, 402 | { 403 | name: "부여군법원", 404 | value: "282876", 405 | }, 406 | { 407 | name: "사천시법원", 408 | value: "421927", 409 | }, 410 | { 411 | name: "산청군법원", 412 | value: "421929", 413 | }, 414 | { 415 | name: "삼척시법원", 416 | value: "261845", 417 | }, 418 | { 419 | name: "서귀포시법원", 420 | value: "530991", 421 | }, 422 | { 423 | name: "서울가정법원", 424 | value: "000230", 425 | }, 426 | { 427 | name: "서울고등법원", 428 | value: "000200", 429 | }, 430 | { 431 | name: "서울고등법원(춘천재판부)", 432 | value: "000201", 433 | }, 434 | { 435 | name: "서울고등법원(인천재판부)", 436 | value: "000202", 437 | }, 438 | { 439 | name: "서울남부지방법원", 440 | value: "000212", 441 | }, 442 | { 443 | name: "서울동부지방법원", 444 | value: "000211", 445 | }, 446 | { 447 | name: "서울북부지방법원", 448 | value: "000213", 449 | }, 450 | { 451 | name: "서울서부지방법원", 452 | value: "000215", 453 | }, 454 | { 455 | name: "서울중앙지방법원", 456 | value: "000210", 457 | }, 458 | { 459 | name: "서울행정법원", 460 | value: "000220", 461 | }, 462 | { 463 | name: "서울회생법원", 464 | value: "000221", 465 | }, 466 | { 467 | name: "서천군법원", 468 | value: "281873", 469 | }, 470 | { 471 | name: "성남지원", 472 | value: "000251", 473 | }, 474 | { 475 | name: "성주군법원", 476 | value: "310894", 477 | }, 478 | { 479 | name: "세종특별자치시법원", 480 | value: "280871", 481 | }, 482 | { 483 | name: "속초지원", 484 | value: "000263", 485 | }, 486 | { 487 | name: "수원가정법원", 488 | value: "000302", 489 | }, 490 | { 491 | name: "수원가정법원 성남지원", 492 | value: "000303", 493 | }, 494 | { 495 | name: "수원가정법원 안산지원", 496 | value: "000322", 497 | }, 498 | { 499 | name: "수원가정법원 안양지원", 500 | value: "000306", 501 | }, 502 | { 503 | name: "수원가정법원 여주지원", 504 | value: "000304", 505 | }, 506 | { 507 | name: "수원가정법원 평택지원", 508 | value: "000305", 509 | }, 510 | { 511 | name: "수원고등법원", 512 | value: "000800", 513 | }, 514 | { 515 | name: "수원지방법원", 516 | value: "000250", 517 | }, 518 | { 519 | name: "순창군법원", 520 | value: "523979", 521 | }, 522 | { 523 | name: "아산시법원", 524 | value: "283877", 525 | }, 526 | { 527 | name: "안산지원", 528 | value: "250826", 529 | }, 530 | { 531 | name: "안성시법원", 532 | value: "250821", 533 | }, 534 | { 535 | name: "안양지원", 536 | value: "000254", 537 | }, 538 | { 539 | name: "양구군법원", 540 | value: "260843", 541 | }, 542 | { 543 | name: "양산시법원", 544 | value: "411911", 545 | }, 546 | { 547 | name: "양양군법원", 548 | value: "263849", 549 | }, 550 | { 551 | name: "양평군법원", 552 | value: "252828", 553 | }, 554 | { 555 | name: "여수시법원", 556 | value: "513954", 557 | }, 558 | { 559 | name: "여주지원", 560 | value: "000252", 561 | }, 562 | { 563 | name: "연천군법원", 564 | value: "214805", 565 | }, 566 | { 567 | name: "영광군법원", 568 | value: "510942", 569 | }, 570 | { 571 | name: "영동지원", 572 | value: "000273", 573 | }, 574 | { 575 | name: "영암군법원", 576 | value: "511948", 577 | }, 578 | { 579 | name: "영양군법원", 580 | value: "316907", 581 | }, 582 | { 583 | name: "영월지원", 584 | value: "000264", 585 | }, 586 | { 587 | name: "영주시법원", 588 | value: "311897", 589 | }, 590 | { 591 | name: "영천시법원", 592 | value: "310892", 593 | }, 594 | { 595 | name: "예산군법원", 596 | value: "281875", 597 | }, 598 | { 599 | name: "예천군법원", 600 | value: "314902", 601 | }, 602 | { 603 | name: "오산시법원", 604 | value: "250824", 605 | }, 606 | { 607 | name: "옥천군법원", 608 | value: "273866", 609 | }, 610 | { 611 | name: "완도군법원", 612 | value: "514958", 613 | }, 614 | { 615 | name: "용인시법원", 616 | value: "250823", 617 | }, 618 | { 619 | name: "울산가정법원", 620 | value: "000477", 621 | }, 622 | { 623 | name: "울산지방법원", 624 | value: "000411", 625 | }, 626 | { 627 | name: "울진군법원", 628 | value: "316906", 629 | }, 630 | { 631 | name: "원주지원", 632 | value: "000262", 633 | }, 634 | { 635 | name: "음성군법원", 636 | value: "271864", 637 | }, 638 | { 639 | name: "의령군법원", 640 | value: "420924", 641 | }, 642 | { 643 | name: "의정부지방법원", 644 | value: "000214", 645 | }, 646 | { 647 | name: "이천시법원", 648 | value: "252829", 649 | }, 650 | { 651 | name: "익산시법원", 652 | value: "521975", 653 | }, 654 | { 655 | name: "인제군법원", 656 | value: "260841", 657 | }, 658 | { 659 | name: "인천가정법원", 660 | value: "000228", 661 | }, 662 | { 663 | name: "인천가정법원 부천지원", 664 | value: "000229", 665 | }, 666 | { 667 | name: "인천지방법원", 668 | value: "000240", 669 | }, 670 | { 671 | name: "인천지방법원 부천지원", 672 | value: "000241", 673 | }, 674 | { 675 | name: "임실군법원", 676 | value: "520974", 677 | }, 678 | { 679 | name: "장성군법원", 680 | value: "510944", 681 | }, 682 | { 683 | name: "장수군법원", 684 | value: "523978", 685 | }, 686 | { 687 | name: "전주지방법원", 688 | value: "000520", 689 | }, 690 | { 691 | name: "정선군법원", 692 | value: "264851", 693 | }, 694 | { 695 | name: "정읍지원", 696 | value: "000522", 697 | }, 698 | { 699 | name: "제주지방법원", 700 | value: "000530", 701 | }, 702 | { 703 | name: "제천지원", 704 | value: "000272", 705 | }, 706 | { 707 | name: "진도군법원", 708 | value: "514959", 709 | }, 710 | { 711 | name: "진안군법원", 712 | value: "520971", 713 | }, 714 | { 715 | name: "진주지원", 716 | value: "000421", 717 | }, 718 | { 719 | name: "진천군법원", 720 | value: "270863", 721 | }, 722 | { 723 | name: "창녕군법원", 724 | value: "423933", 725 | }, 726 | { 727 | name: "창원남부시법원", 728 | value: "420922", 729 | }, 730 | { 731 | name: "창원지방법원", 732 | value: "000420", 733 | }, 734 | { 735 | name: "철원군법원", 736 | value: "214806", 737 | }, 738 | { 739 | name: "청도군법원", 740 | value: "310891", 741 | }, 742 | { 743 | name: "청송군법원", 744 | value: "315904", 745 | }, 746 | { 747 | name: "청양군법원", 748 | value: "284878", 749 | }, 750 | { 751 | name: "청주지방법원", 752 | value: "000270", 753 | }, 754 | { 755 | name: "춘천지방법원", 756 | value: "000260", 757 | }, 758 | { 759 | name: "충주지원", 760 | value: "000271", 761 | }, 762 | { 763 | name: "칠곡군법원", 764 | value: "310893", 765 | }, 766 | { 767 | name: "태백시법원", 768 | value: "264852", 769 | }, 770 | { 771 | name: "태안군법원", 772 | value: "285879", 773 | }, 774 | { 775 | name: "통영지원", 776 | value: "000422", 777 | }, 778 | { 779 | name: "특허법원", 780 | value: "000700", 781 | }, 782 | { 783 | name: "파주시법원", 784 | value: "214801", 785 | }, 786 | { 787 | name: "평창군법원", 788 | value: "264853", 789 | }, 790 | { 791 | name: "평택지원", 792 | value: "000253", 793 | }, 794 | { 795 | name: "포천시법원", 796 | value: "214802", 797 | }, 798 | { 799 | name: "하동군법원", 800 | value: "421926", 801 | }, 802 | { 803 | name: "함안군법원", 804 | value: "420921", 805 | }, 806 | { 807 | name: "함양군법원", 808 | value: "424935", 809 | }, 810 | { 811 | name: "함평군법원", 812 | value: "511947", 813 | }, 814 | { 815 | name: "합천군법원", 816 | value: "424934", 817 | }, 818 | { 819 | name: "홍천군법원", 820 | value: "260842", 821 | }, 822 | { 823 | name: "화순군법원", 824 | value: "510945", 825 | }, 826 | { 827 | name: "화천군법원", 828 | value: "260844", 829 | }, 830 | { 831 | name: "횡성군법원", 832 | value: "262847", 833 | }, 834 | ]; 835 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@cypress/request@^2.88.10": 6 | version "2.88.10" 7 | resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.10.tgz#b66d76b07f860d3a4b8d7a0604d020c662752cce" 8 | integrity sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg== 9 | dependencies: 10 | aws-sign2 "~0.7.0" 11 | aws4 "^1.8.0" 12 | caseless "~0.12.0" 13 | combined-stream "~1.0.6" 14 | extend "~3.0.2" 15 | forever-agent "~0.6.1" 16 | form-data "~2.3.2" 17 | http-signature "~1.3.6" 18 | is-typedarray "~1.0.0" 19 | isstream "~0.1.2" 20 | json-stringify-safe "~5.0.1" 21 | mime-types "~2.1.19" 22 | performance-now "^2.1.0" 23 | qs "~6.5.2" 24 | safe-buffer "^5.1.2" 25 | tough-cookie "~2.5.0" 26 | tunnel-agent "^0.6.0" 27 | uuid "^8.3.2" 28 | 29 | "@cypress/xvfb@^1.2.4": 30 | version "1.2.4" 31 | resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" 32 | integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== 33 | dependencies: 34 | debug "^3.1.0" 35 | lodash.once "^4.1.1" 36 | 37 | "@types/node@*": 38 | version "17.0.8" 39 | resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.8.tgz#50d680c8a8a78fe30abe6906453b21ad8ab0ad7b" 40 | integrity sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg== 41 | 42 | "@types/node@^14.14.31": 43 | version "14.18.5" 44 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.5.tgz#0dd636fe7b2c6055cbed0d4ca3b7fb540f130a96" 45 | integrity sha512-LMy+vDDcQR48EZdEx5wRX1q/sEl6NdGuHXPnfeL8ixkwCOSZ2qnIyIZmcCbdX0MeRqHhAcHmX+haCbrS8Run+A== 46 | 47 | "@types/sinonjs__fake-timers@8.1.1": 48 | version "8.1.1" 49 | resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" 50 | integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== 51 | 52 | "@types/sizzle@^2.3.2": 53 | version "2.3.3" 54 | resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" 55 | integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== 56 | 57 | "@types/yauzl@^2.9.1": 58 | version "2.9.2" 59 | resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.2.tgz#c48e5d56aff1444409e39fa164b0b4d4552a7b7a" 60 | integrity sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA== 61 | dependencies: 62 | "@types/node" "*" 63 | 64 | aggregate-error@^3.0.0: 65 | version "3.1.0" 66 | resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" 67 | integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== 68 | dependencies: 69 | clean-stack "^2.0.0" 70 | indent-string "^4.0.0" 71 | 72 | ansi-colors@^4.1.1: 73 | version "4.1.1" 74 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 75 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 76 | 77 | ansi-escapes@^4.3.0: 78 | version "4.3.2" 79 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" 80 | integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== 81 | dependencies: 82 | type-fest "^0.21.3" 83 | 84 | ansi-regex@^5.0.1: 85 | version "5.0.1" 86 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 87 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 88 | 89 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 90 | version "4.3.0" 91 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 92 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 93 | dependencies: 94 | color-convert "^2.0.1" 95 | 96 | arch@^2.2.0: 97 | version "2.2.0" 98 | resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" 99 | integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== 100 | 101 | asn1@~0.2.3: 102 | version "0.2.6" 103 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" 104 | integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== 105 | dependencies: 106 | safer-buffer "~2.1.0" 107 | 108 | assert-plus@1.0.0, assert-plus@^1.0.0: 109 | version "1.0.0" 110 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 111 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 112 | 113 | astral-regex@^2.0.0: 114 | version "2.0.0" 115 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" 116 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== 117 | 118 | async@^3.2.0: 119 | version "3.2.2" 120 | resolved "https://registry.yarnpkg.com/async/-/async-3.2.2.tgz#2eb7671034bb2194d45d30e31e24ec7e7f9670cd" 121 | integrity sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g== 122 | 123 | asynckit@^0.4.0: 124 | version "0.4.0" 125 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 126 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 127 | 128 | at-least-node@^1.0.0: 129 | version "1.0.0" 130 | resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" 131 | integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== 132 | 133 | aws-sign2@~0.7.0: 134 | version "0.7.0" 135 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 136 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= 137 | 138 | aws4@^1.8.0: 139 | version "1.11.0" 140 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" 141 | integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== 142 | 143 | axios@^1.0.0: 144 | version "1.0.0" 145 | resolved "https://registry.yarnpkg.com/axios/-/axios-1.0.0.tgz#16ded6096c1d37650db9f6a8d48a2f7c1bb58622" 146 | integrity sha512-SsHsGFN1qNPFT5QhSoSD37SHDfGyLSW5AESmyLk2JeCMHv5g0I9g0Hz/zQHx2KNe0jGXh2q2hAm7OdkXm360CA== 147 | dependencies: 148 | follow-redirects "^1.15.0" 149 | form-data "^4.0.0" 150 | proxy-from-env "^1.1.0" 151 | 152 | balanced-match@^1.0.0: 153 | version "1.0.2" 154 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 155 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 156 | 157 | base64-js@^1.3.1: 158 | version "1.5.1" 159 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 160 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 161 | 162 | bcrypt-pbkdf@^1.0.0: 163 | version "1.0.2" 164 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 165 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= 166 | dependencies: 167 | tweetnacl "^0.14.3" 168 | 169 | blob-util@^2.0.2: 170 | version "2.0.2" 171 | resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" 172 | integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== 173 | 174 | bluebird@^3.7.2: 175 | version "3.7.2" 176 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" 177 | integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== 178 | 179 | brace-expansion@^1.1.7: 180 | version "1.1.11" 181 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 182 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 183 | dependencies: 184 | balanced-match "^1.0.0" 185 | concat-map "0.0.1" 186 | 187 | buffer-crc32@~0.2.3: 188 | version "0.2.13" 189 | resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" 190 | integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= 191 | 192 | buffer@^5.6.0: 193 | version "5.7.1" 194 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" 195 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== 196 | dependencies: 197 | base64-js "^1.3.1" 198 | ieee754 "^1.1.13" 199 | 200 | cachedir@^2.3.0: 201 | version "2.3.0" 202 | resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" 203 | integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== 204 | 205 | caseless@~0.12.0: 206 | version "0.12.0" 207 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 208 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 209 | 210 | chalk@^4.1.0: 211 | version "4.1.2" 212 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 213 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 214 | dependencies: 215 | ansi-styles "^4.1.0" 216 | supports-color "^7.1.0" 217 | 218 | check-more-types@^2.24.0: 219 | version "2.24.0" 220 | resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" 221 | integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= 222 | 223 | ci-info@^3.2.0: 224 | version "3.3.0" 225 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" 226 | integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== 227 | 228 | clean-stack@^2.0.0: 229 | version "2.2.0" 230 | resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" 231 | integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== 232 | 233 | cli-cursor@^3.1.0: 234 | version "3.1.0" 235 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" 236 | integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== 237 | dependencies: 238 | restore-cursor "^3.1.0" 239 | 240 | cli-table3@~0.6.1: 241 | version "0.6.1" 242 | resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.1.tgz#36ce9b7af4847f288d3cdd081fbd09bf7bd237b8" 243 | integrity sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA== 244 | dependencies: 245 | string-width "^4.2.0" 246 | optionalDependencies: 247 | colors "1.4.0" 248 | 249 | cli-truncate@^2.1.0: 250 | version "2.1.0" 251 | resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" 252 | integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== 253 | dependencies: 254 | slice-ansi "^3.0.0" 255 | string-width "^4.2.0" 256 | 257 | color-convert@^2.0.1: 258 | version "2.0.1" 259 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 260 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 261 | dependencies: 262 | color-name "~1.1.4" 263 | 264 | color-name@~1.1.4: 265 | version "1.1.4" 266 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 267 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 268 | 269 | colorette@^2.0.16: 270 | version "2.0.16" 271 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" 272 | integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== 273 | 274 | colors@1.4.0: 275 | version "1.4.0" 276 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" 277 | integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== 278 | 279 | combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: 280 | version "1.0.8" 281 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 282 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 283 | dependencies: 284 | delayed-stream "~1.0.0" 285 | 286 | commander@^5.1.0: 287 | version "5.1.0" 288 | resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" 289 | integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== 290 | 291 | common-tags@^1.8.0: 292 | version "1.8.2" 293 | resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" 294 | integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== 295 | 296 | concat-map@0.0.1: 297 | version "0.0.1" 298 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 299 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 300 | 301 | core-util-is@1.0.2: 302 | version "1.0.2" 303 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 304 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 305 | 306 | cross-spawn@^7.0.0: 307 | version "7.0.3" 308 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 309 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 310 | dependencies: 311 | path-key "^3.1.0" 312 | shebang-command "^2.0.0" 313 | which "^2.0.1" 314 | 315 | cypress@^10.9.0: 316 | version "10.9.0" 317 | resolved "https://registry.yarnpkg.com/cypress/-/cypress-10.9.0.tgz#273a61a6304766f9d6423e5ac8d4a9a11ed8b485" 318 | integrity sha512-MjIWrRpc+bQM9U4kSSdATZWZ2hUqHGFEQTF7dfeZRa4MnalMtc88FIE49USWP2ZVtfy5WPBcgfBX+YorFqGElA== 319 | dependencies: 320 | "@cypress/request" "^2.88.10" 321 | "@cypress/xvfb" "^1.2.4" 322 | "@types/node" "^14.14.31" 323 | "@types/sinonjs__fake-timers" "8.1.1" 324 | "@types/sizzle" "^2.3.2" 325 | arch "^2.2.0" 326 | blob-util "^2.0.2" 327 | bluebird "^3.7.2" 328 | buffer "^5.6.0" 329 | cachedir "^2.3.0" 330 | chalk "^4.1.0" 331 | check-more-types "^2.24.0" 332 | cli-cursor "^3.1.0" 333 | cli-table3 "~0.6.1" 334 | commander "^5.1.0" 335 | common-tags "^1.8.0" 336 | dayjs "^1.10.4" 337 | debug "^4.3.2" 338 | enquirer "^2.3.6" 339 | eventemitter2 "6.4.7" 340 | execa "4.1.0" 341 | executable "^4.1.1" 342 | extract-zip "2.0.1" 343 | figures "^3.2.0" 344 | fs-extra "^9.1.0" 345 | getos "^3.2.1" 346 | is-ci "^3.0.0" 347 | is-installed-globally "~0.4.0" 348 | lazy-ass "^1.6.0" 349 | listr2 "^3.8.3" 350 | lodash "^4.17.21" 351 | log-symbols "^4.0.0" 352 | minimist "^1.2.6" 353 | ospath "^1.2.2" 354 | pretty-bytes "^5.6.0" 355 | proxy-from-env "1.0.0" 356 | request-progress "^3.0.0" 357 | semver "^7.3.2" 358 | supports-color "^8.1.1" 359 | tmp "~0.2.1" 360 | untildify "^4.0.0" 361 | yauzl "^2.10.0" 362 | 363 | dashdash@^1.12.0: 364 | version "1.14.1" 365 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 366 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= 367 | dependencies: 368 | assert-plus "^1.0.0" 369 | 370 | dayjs@^1.10.4: 371 | version "1.10.7" 372 | resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" 373 | integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== 374 | 375 | dayjs@^1.11.5: 376 | version "1.11.5" 377 | resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.5.tgz#00e8cc627f231f9499c19b38af49f56dc0ac5e93" 378 | integrity sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA== 379 | 380 | debug@^3.1.0: 381 | version "3.2.7" 382 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 383 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 384 | dependencies: 385 | ms "^2.1.1" 386 | 387 | debug@^4.1.1, debug@^4.3.2: 388 | version "4.3.3" 389 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" 390 | integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== 391 | dependencies: 392 | ms "2.1.2" 393 | 394 | delayed-stream@~1.0.0: 395 | version "1.0.0" 396 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 397 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 398 | 399 | ecc-jsbn@~0.1.1: 400 | version "0.1.2" 401 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 402 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= 403 | dependencies: 404 | jsbn "~0.1.0" 405 | safer-buffer "^2.1.0" 406 | 407 | emoji-regex@^8.0.0: 408 | version "8.0.0" 409 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 410 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 411 | 412 | end-of-stream@^1.1.0: 413 | version "1.4.4" 414 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 415 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 416 | dependencies: 417 | once "^1.4.0" 418 | 419 | enquirer@^2.3.6: 420 | version "2.3.6" 421 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" 422 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 423 | dependencies: 424 | ansi-colors "^4.1.1" 425 | 426 | escape-string-regexp@^1.0.5: 427 | version "1.0.5" 428 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 429 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 430 | 431 | eventemitter2@6.4.7: 432 | version "6.4.7" 433 | resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" 434 | integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== 435 | 436 | execa@4.1.0: 437 | version "4.1.0" 438 | resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" 439 | integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== 440 | dependencies: 441 | cross-spawn "^7.0.0" 442 | get-stream "^5.0.0" 443 | human-signals "^1.1.1" 444 | is-stream "^2.0.0" 445 | merge-stream "^2.0.0" 446 | npm-run-path "^4.0.0" 447 | onetime "^5.1.0" 448 | signal-exit "^3.0.2" 449 | strip-final-newline "^2.0.0" 450 | 451 | executable@^4.1.1: 452 | version "4.1.1" 453 | resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" 454 | integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== 455 | dependencies: 456 | pify "^2.2.0" 457 | 458 | extend@~3.0.2: 459 | version "3.0.2" 460 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 461 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 462 | 463 | extract-zip@2.0.1: 464 | version "2.0.1" 465 | resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" 466 | integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== 467 | dependencies: 468 | debug "^4.1.1" 469 | get-stream "^5.1.0" 470 | yauzl "^2.10.0" 471 | optionalDependencies: 472 | "@types/yauzl" "^2.9.1" 473 | 474 | extsprintf@1.3.0: 475 | version "1.3.0" 476 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 477 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= 478 | 479 | extsprintf@^1.2.0: 480 | version "1.4.1" 481 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" 482 | integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== 483 | 484 | fd-slicer@~1.1.0: 485 | version "1.1.0" 486 | resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" 487 | integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= 488 | dependencies: 489 | pend "~1.2.0" 490 | 491 | figures@^3.2.0: 492 | version "3.2.0" 493 | resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" 494 | integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== 495 | dependencies: 496 | escape-string-regexp "^1.0.5" 497 | 498 | follow-redirects@^1.15.0: 499 | version "1.15.2" 500 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" 501 | integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== 502 | 503 | forever-agent@~0.6.1: 504 | version "0.6.1" 505 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 506 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= 507 | 508 | form-data@^4.0.0: 509 | version "4.0.0" 510 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 511 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 512 | dependencies: 513 | asynckit "^0.4.0" 514 | combined-stream "^1.0.8" 515 | mime-types "^2.1.12" 516 | 517 | form-data@~2.3.2: 518 | version "2.3.3" 519 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 520 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 521 | dependencies: 522 | asynckit "^0.4.0" 523 | combined-stream "^1.0.6" 524 | mime-types "^2.1.12" 525 | 526 | fs-extra@^9.1.0: 527 | version "9.1.0" 528 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" 529 | integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== 530 | dependencies: 531 | at-least-node "^1.0.0" 532 | graceful-fs "^4.2.0" 533 | jsonfile "^6.0.1" 534 | universalify "^2.0.0" 535 | 536 | fs.realpath@^1.0.0: 537 | version "1.0.0" 538 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 539 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 540 | 541 | get-stream@^5.0.0, get-stream@^5.1.0: 542 | version "5.2.0" 543 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" 544 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 545 | dependencies: 546 | pump "^3.0.0" 547 | 548 | getos@^3.2.1: 549 | version "3.2.1" 550 | resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" 551 | integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== 552 | dependencies: 553 | async "^3.2.0" 554 | 555 | getpass@^0.1.1: 556 | version "0.1.7" 557 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 558 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= 559 | dependencies: 560 | assert-plus "^1.0.0" 561 | 562 | glob@^7.1.3: 563 | version "7.2.0" 564 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 565 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 566 | dependencies: 567 | fs.realpath "^1.0.0" 568 | inflight "^1.0.4" 569 | inherits "2" 570 | minimatch "^3.0.4" 571 | once "^1.3.0" 572 | path-is-absolute "^1.0.0" 573 | 574 | global-dirs@^3.0.0: 575 | version "3.0.0" 576 | resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" 577 | integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== 578 | dependencies: 579 | ini "2.0.0" 580 | 581 | graceful-fs@^4.1.6, graceful-fs@^4.2.0: 582 | version "4.2.9" 583 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" 584 | integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== 585 | 586 | has-flag@^4.0.0: 587 | version "4.0.0" 588 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 589 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 590 | 591 | http-signature@~1.3.6: 592 | version "1.3.6" 593 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" 594 | integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== 595 | dependencies: 596 | assert-plus "^1.0.0" 597 | jsprim "^2.0.2" 598 | sshpk "^1.14.1" 599 | 600 | human-signals@^1.1.1: 601 | version "1.1.1" 602 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" 603 | integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== 604 | 605 | ieee754@^1.1.13: 606 | version "1.2.1" 607 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 608 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 609 | 610 | indent-string@^4.0.0: 611 | version "4.0.0" 612 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" 613 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== 614 | 615 | inflight@^1.0.4: 616 | version "1.0.6" 617 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 618 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 619 | dependencies: 620 | once "^1.3.0" 621 | wrappy "1" 622 | 623 | inherits@2: 624 | version "2.0.4" 625 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 626 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 627 | 628 | ini@2.0.0: 629 | version "2.0.0" 630 | resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" 631 | integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== 632 | 633 | is-ci@^3.0.0: 634 | version "3.0.1" 635 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" 636 | integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== 637 | dependencies: 638 | ci-info "^3.2.0" 639 | 640 | is-fullwidth-code-point@^3.0.0: 641 | version "3.0.0" 642 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 643 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 644 | 645 | is-installed-globally@~0.4.0: 646 | version "0.4.0" 647 | resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" 648 | integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== 649 | dependencies: 650 | global-dirs "^3.0.0" 651 | is-path-inside "^3.0.2" 652 | 653 | is-path-inside@^3.0.2: 654 | version "3.0.3" 655 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 656 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 657 | 658 | is-stream@^2.0.0: 659 | version "2.0.1" 660 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 661 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 662 | 663 | is-typedarray@~1.0.0: 664 | version "1.0.0" 665 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 666 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 667 | 668 | is-unicode-supported@^0.1.0: 669 | version "0.1.0" 670 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 671 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 672 | 673 | isexe@^2.0.0: 674 | version "2.0.0" 675 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 676 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 677 | 678 | isstream@~0.1.2: 679 | version "0.1.2" 680 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 681 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 682 | 683 | jsbn@~0.1.0: 684 | version "0.1.1" 685 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 686 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 687 | 688 | json-schema@0.4.0: 689 | version "0.4.0" 690 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" 691 | integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== 692 | 693 | json-stringify-safe@~5.0.1: 694 | version "5.0.1" 695 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 696 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 697 | 698 | jsonfile@^6.0.1: 699 | version "6.1.0" 700 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" 701 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== 702 | dependencies: 703 | universalify "^2.0.0" 704 | optionalDependencies: 705 | graceful-fs "^4.1.6" 706 | 707 | jsprim@^2.0.2: 708 | version "2.0.2" 709 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" 710 | integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== 711 | dependencies: 712 | assert-plus "1.0.0" 713 | extsprintf "1.3.0" 714 | json-schema "0.4.0" 715 | verror "1.10.0" 716 | 717 | lazy-ass@^1.6.0: 718 | version "1.6.0" 719 | resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" 720 | integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= 721 | 722 | listr2@^3.8.3: 723 | version "3.14.0" 724 | resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" 725 | integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== 726 | dependencies: 727 | cli-truncate "^2.1.0" 728 | colorette "^2.0.16" 729 | log-update "^4.0.0" 730 | p-map "^4.0.0" 731 | rfdc "^1.3.0" 732 | rxjs "^7.5.1" 733 | through "^2.3.8" 734 | wrap-ansi "^7.0.0" 735 | 736 | lodash.once@^4.1.1: 737 | version "4.1.1" 738 | resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" 739 | integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= 740 | 741 | lodash@^4.17.21: 742 | version "4.17.21" 743 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 744 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 745 | 746 | log-symbols@^4.0.0: 747 | version "4.1.0" 748 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 749 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 750 | dependencies: 751 | chalk "^4.1.0" 752 | is-unicode-supported "^0.1.0" 753 | 754 | log-update@^4.0.0: 755 | version "4.0.0" 756 | resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" 757 | integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== 758 | dependencies: 759 | ansi-escapes "^4.3.0" 760 | cli-cursor "^3.1.0" 761 | slice-ansi "^4.0.0" 762 | wrap-ansi "^6.2.0" 763 | 764 | lru-cache@^6.0.0: 765 | version "6.0.0" 766 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 767 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 768 | dependencies: 769 | yallist "^4.0.0" 770 | 771 | merge-stream@^2.0.0: 772 | version "2.0.0" 773 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 774 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 775 | 776 | mime-db@1.51.0: 777 | version "1.51.0" 778 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" 779 | integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== 780 | 781 | mime-types@^2.1.12, mime-types@~2.1.19: 782 | version "2.1.34" 783 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" 784 | integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== 785 | dependencies: 786 | mime-db "1.51.0" 787 | 788 | mimic-fn@^2.1.0: 789 | version "2.1.0" 790 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 791 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 792 | 793 | minimatch@^3.0.4: 794 | version "3.0.4" 795 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 796 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 797 | dependencies: 798 | brace-expansion "^1.1.7" 799 | 800 | minimist@^1.2.6: 801 | version "1.2.6" 802 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" 803 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== 804 | 805 | ms@2.1.2: 806 | version "2.1.2" 807 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 808 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 809 | 810 | ms@^2.1.1: 811 | version "2.1.3" 812 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 813 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 814 | 815 | npm-run-path@^4.0.0: 816 | version "4.0.1" 817 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 818 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 819 | dependencies: 820 | path-key "^3.0.0" 821 | 822 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 823 | version "1.4.0" 824 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 825 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 826 | dependencies: 827 | wrappy "1" 828 | 829 | onetime@^5.1.0: 830 | version "5.1.2" 831 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 832 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 833 | dependencies: 834 | mimic-fn "^2.1.0" 835 | 836 | ospath@^1.2.2: 837 | version "1.2.2" 838 | resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" 839 | integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= 840 | 841 | p-map@^4.0.0: 842 | version "4.0.0" 843 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" 844 | integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== 845 | dependencies: 846 | aggregate-error "^3.0.0" 847 | 848 | path-is-absolute@^1.0.0: 849 | version "1.0.1" 850 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 851 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 852 | 853 | path-key@^3.0.0, path-key@^3.1.0: 854 | version "3.1.1" 855 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 856 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 857 | 858 | pend@~1.2.0: 859 | version "1.2.0" 860 | resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" 861 | integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= 862 | 863 | performance-now@^2.1.0: 864 | version "2.1.0" 865 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 866 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= 867 | 868 | pify@^2.2.0: 869 | version "2.3.0" 870 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 871 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= 872 | 873 | pretty-bytes@^5.6.0: 874 | version "5.6.0" 875 | resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" 876 | integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== 877 | 878 | proxy-from-env@1.0.0: 879 | version "1.0.0" 880 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" 881 | integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= 882 | 883 | proxy-from-env@^1.1.0: 884 | version "1.1.0" 885 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" 886 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== 887 | 888 | psl@^1.1.28: 889 | version "1.8.0" 890 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" 891 | integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== 892 | 893 | pump@^3.0.0: 894 | version "3.0.0" 895 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 896 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 897 | dependencies: 898 | end-of-stream "^1.1.0" 899 | once "^1.3.1" 900 | 901 | punycode@^2.1.1: 902 | version "2.1.1" 903 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 904 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 905 | 906 | qs@~6.5.2: 907 | version "6.5.2" 908 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 909 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 910 | 911 | request-progress@^3.0.0: 912 | version "3.0.0" 913 | resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" 914 | integrity sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4= 915 | dependencies: 916 | throttleit "^1.0.0" 917 | 918 | restore-cursor@^3.1.0: 919 | version "3.1.0" 920 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" 921 | integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== 922 | dependencies: 923 | onetime "^5.1.0" 924 | signal-exit "^3.0.2" 925 | 926 | rfdc@^1.3.0: 927 | version "1.3.0" 928 | resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" 929 | integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== 930 | 931 | rimraf@^3.0.0: 932 | version "3.0.2" 933 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 934 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 935 | dependencies: 936 | glob "^7.1.3" 937 | 938 | rxjs@^7.5.1: 939 | version "7.5.1" 940 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.1.tgz#af73df343cbcab37628197f43ea0c8256f54b157" 941 | integrity sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ== 942 | dependencies: 943 | tslib "^2.1.0" 944 | 945 | safe-buffer@^5.0.1, safe-buffer@^5.1.2: 946 | version "5.2.1" 947 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 948 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 949 | 950 | safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 951 | version "2.1.2" 952 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 953 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 954 | 955 | semver@^7.3.2: 956 | version "7.3.5" 957 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" 958 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== 959 | dependencies: 960 | lru-cache "^6.0.0" 961 | 962 | shebang-command@^2.0.0: 963 | version "2.0.0" 964 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 965 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 966 | dependencies: 967 | shebang-regex "^3.0.0" 968 | 969 | shebang-regex@^3.0.0: 970 | version "3.0.0" 971 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 972 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 973 | 974 | signal-exit@^3.0.2: 975 | version "3.0.6" 976 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" 977 | integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== 978 | 979 | slice-ansi@^3.0.0: 980 | version "3.0.0" 981 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" 982 | integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== 983 | dependencies: 984 | ansi-styles "^4.0.0" 985 | astral-regex "^2.0.0" 986 | is-fullwidth-code-point "^3.0.0" 987 | 988 | slice-ansi@^4.0.0: 989 | version "4.0.0" 990 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" 991 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== 992 | dependencies: 993 | ansi-styles "^4.0.0" 994 | astral-regex "^2.0.0" 995 | is-fullwidth-code-point "^3.0.0" 996 | 997 | sshpk@^1.14.1: 998 | version "1.16.1" 999 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" 1000 | integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== 1001 | dependencies: 1002 | asn1 "~0.2.3" 1003 | assert-plus "^1.0.0" 1004 | bcrypt-pbkdf "^1.0.0" 1005 | dashdash "^1.12.0" 1006 | ecc-jsbn "~0.1.1" 1007 | getpass "^0.1.1" 1008 | jsbn "~0.1.0" 1009 | safer-buffer "^2.0.2" 1010 | tweetnacl "~0.14.0" 1011 | 1012 | string-width@^4.1.0, string-width@^4.2.0: 1013 | version "4.2.3" 1014 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1015 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1016 | dependencies: 1017 | emoji-regex "^8.0.0" 1018 | is-fullwidth-code-point "^3.0.0" 1019 | strip-ansi "^6.0.1" 1020 | 1021 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1022 | version "6.0.1" 1023 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1024 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1025 | dependencies: 1026 | ansi-regex "^5.0.1" 1027 | 1028 | strip-final-newline@^2.0.0: 1029 | version "2.0.0" 1030 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 1031 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 1032 | 1033 | supports-color@^7.1.0: 1034 | version "7.2.0" 1035 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1036 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1037 | dependencies: 1038 | has-flag "^4.0.0" 1039 | 1040 | supports-color@^8.1.1: 1041 | version "8.1.1" 1042 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 1043 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 1044 | dependencies: 1045 | has-flag "^4.0.0" 1046 | 1047 | throttleit@^1.0.0: 1048 | version "1.0.0" 1049 | resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" 1050 | integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw= 1051 | 1052 | through@^2.3.8: 1053 | version "2.3.8" 1054 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1055 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 1056 | 1057 | tmp@~0.2.1: 1058 | version "0.2.1" 1059 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" 1060 | integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== 1061 | dependencies: 1062 | rimraf "^3.0.0" 1063 | 1064 | tough-cookie@~2.5.0: 1065 | version "2.5.0" 1066 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" 1067 | integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== 1068 | dependencies: 1069 | psl "^1.1.28" 1070 | punycode "^2.1.1" 1071 | 1072 | tslib@^2.1.0: 1073 | version "2.3.1" 1074 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" 1075 | integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== 1076 | 1077 | tunnel-agent@^0.6.0: 1078 | version "0.6.0" 1079 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 1080 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 1081 | dependencies: 1082 | safe-buffer "^5.0.1" 1083 | 1084 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 1085 | version "0.14.5" 1086 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 1087 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= 1088 | 1089 | type-fest@^0.21.3: 1090 | version "0.21.3" 1091 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" 1092 | integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== 1093 | 1094 | universalify@^2.0.0: 1095 | version "2.0.0" 1096 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" 1097 | integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== 1098 | 1099 | untildify@^4.0.0: 1100 | version "4.0.0" 1101 | resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" 1102 | integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== 1103 | 1104 | uuid@^8.3.2: 1105 | version "8.3.2" 1106 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" 1107 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 1108 | 1109 | verror@1.10.0: 1110 | version "1.10.0" 1111 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 1112 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= 1113 | dependencies: 1114 | assert-plus "^1.0.0" 1115 | core-util-is "1.0.2" 1116 | extsprintf "^1.2.0" 1117 | 1118 | which@^2.0.1: 1119 | version "2.0.2" 1120 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1121 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1122 | dependencies: 1123 | isexe "^2.0.0" 1124 | 1125 | wrap-ansi@^6.2.0: 1126 | version "6.2.0" 1127 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" 1128 | integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== 1129 | dependencies: 1130 | ansi-styles "^4.0.0" 1131 | string-width "^4.1.0" 1132 | strip-ansi "^6.0.0" 1133 | 1134 | wrap-ansi@^7.0.0: 1135 | version "7.0.0" 1136 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1137 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1138 | dependencies: 1139 | ansi-styles "^4.0.0" 1140 | string-width "^4.1.0" 1141 | strip-ansi "^6.0.0" 1142 | 1143 | wrappy@1: 1144 | version "1.0.2" 1145 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1146 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1147 | 1148 | yallist@^4.0.0: 1149 | version "4.0.0" 1150 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1151 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1152 | 1153 | yauzl@^2.10.0: 1154 | version "2.10.0" 1155 | resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" 1156 | integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= 1157 | dependencies: 1158 | buffer-crc32 "~0.2.3" 1159 | fd-slicer "~1.1.0" 1160 | -------------------------------------------------------------------------------- /cypress/js/caseTypes.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | { name: '감도', value: 'cr' }, 3 | { name: '감모', value: 'cr' }, 4 | { name: '감오', value: 'cr' }, 5 | { name: '감초', value: 'cr' }, 6 | { name: '그', value: 'hg' }, 7 | { name: '누', value: 'hs' }, 8 | { name: '다', value: 'cv' }, 9 | { name: '도', value: 'cr' }, 10 | { name: '동도', value: 'cr' }, 11 | { name: '동어', value: 'gb' }, 12 | { name: '동오', value: 'cr' }, 13 | { name: '동초', value: 'cr' }, 14 | { name: '동터', value: 'gb' }, 15 | { name: '두', value: 'hs' }, 16 | { name: '마', value: 'hg' }, 17 | { name: '머', value: 'cv' }, 18 | { name: '모', value: 'cr' }, 19 | { name: '무', value: 'hg' }, 20 | { name: '므', value: 'ks' }, 21 | { name: '바', value: 'hg' }, 22 | { name: '보도', value: 'cr' }, 23 | { name: '보모', value: 'cr' }, 24 | { name: '보오', value: 'cr' }, 25 | { name: '보초', value: 'cr' }, 26 | { name: '부', value: 'hg' }, 27 | { name: '비단', value: 'et' }, 28 | { name: '비합', value: 'et' }, 29 | { name: '사', value: 'hg' }, 30 | { name: '성로', value: 'gb' }, 31 | { name: '성모', value: 'gb' }, 32 | { name: '성초', value: 'gb' }, 33 | { name: '수', value: 'hs' }, 34 | { name: '수흐', value: 'hg' }, 35 | { name: '스', value: 'hg' }, 36 | { name: '아', value: 'et' }, 37 | { name: '어', value: 'gb' }, 38 | { name: '오', value: 'cr' }, 39 | { name: '으', value: 'hg' }, 40 | { name: '인', value: 'et' }, 41 | { name: '인라', value: 'hg' }, 42 | { name: '인마', value: 'hg' }, 43 | { name: '인카', value: 'et' }, 44 | { name: '재감도', value: 'cr' }, 45 | { name: '재고약', value: 'cr' }, 46 | { name: '재그', value: 'hg' }, 47 | { name: '재누', value: 'hs' }, 48 | { name: '재다', value: 'cv' }, 49 | { name: '재도', value: 'cr' }, 50 | { name: '재동어', value: 'gb' }, 51 | { name: '재두', value: 'hs' }, 52 | { name: '재마', value: 'hg' }, 53 | { name: '재무', value: 'hg' }, 54 | { name: '재므', value: 'ks' }, 55 | { name: '재부', value: 'hg' }, 56 | { name: '재수', value: 'hs' }, 57 | { name: '재스', value: 'hg' }, 58 | { name: '재아', value: 'et' }, 59 | { name: '재으', value: 'hg' }, 60 | { name: '재카기', value: 'et' }, 61 | { name: '재카담', value: 'et' }, 62 | { name: '재카경', value: 'ka' }, 63 | { name: '재후', value: 'pt' }, 64 | { name: '전도', value: 'cr' }, 65 | { name: '전모', value: 'cr' }, 66 | { name: '전오', value: 'cr' }, 67 | { name: '전초', value: 'cr' }, 68 | { name: '정스', value: 'hg' }, 69 | { name: '주', value: 'et' }, 70 | { name: '준재므', value: 'ks' }, 71 | { name: '준재스', value: 'hg' }, 72 | { name: '즈기', value: 'ka' }, 73 | { name: '즈단', value: 'ka' }, 74 | { name: '즈합', value: 'ka' }, 75 | { name: '책', value: 'et' }, 76 | { name: '초', value: 'cr' }, 77 | { name: '초기', value: 'cr' }, 78 | { name: '초보', value: 'cr' }, 79 | { name: '초사', value: 'cr' }, 80 | { name: '초적', value: 'cr' }, 81 | { name: '초치', value: 'cr' }, 82 | { name: '추', value: 'hs' }, 83 | { name: '치도', value: 'cr' }, 84 | { name: '치모', value: 'cr' }, 85 | { name: '치오', value: 'cr' }, 86 | { name: '치초', value: 'cr' }, 87 | { name: '카경', value: 'ka' }, 88 | { name: '카구', value: 'ka' }, 89 | { name: '카기', value: 'ka' }, 90 | { name: '카기전', value: 'ka' }, 91 | { name: '카담', value: 'ka' }, 92 | { name: '카명', value: 'ka' }, 93 | { name: '카불', value: 'ka' }, 94 | { name: '카소', value: 'ka' }, 95 | { name: '카열', value: 'et' }, 96 | { name: '카임', value: 'ka' }, 97 | { name: '카정', value: 'ka' }, 98 | { name: '카합', value: 'ka' }, 99 | { name: '카확', value: 'ka' }, 100 | { name: '코', value: 'cr' }, 101 | { name: '터', value: 'gb' }, 102 | { name: '트', value: 'sb' }, 103 | { name: '후', value: 'pt' }, 104 | { name: '흐', value: 'hg' }, 105 | { name: '히', value: 'hg' }, 106 | { name: '다', value: 'cv' }, 107 | { name: '재다', value: 'cv' }, 108 | { name: '머', value: 'cv' }, 109 | { name: '두', value: 'hs' }, 110 | { name: '재두', value: 'hs' }, 111 | { name: '누', value: 'hs' }, 112 | { name: '재누', value: 'hs' }, 113 | { name: '수', value: 'hs' }, 114 | { name: '재수', value: 'hs' }, 115 | { name: '추', value: 'hs' }, 116 | { name: '도', value: 'cr' }, 117 | { name: '감도', value: 'cr' }, 118 | { name: '동도', value: 'cr' }, 119 | { name: '보도', value: 'cr' }, 120 | { name: '보모', value: 'cr' }, 121 | { name: '보오', value: 'cr' }, 122 | { name: '보초', value: 'cr' }, 123 | { name: '전도', value: 'cr' }, 124 | { name: '전모', value: 'cr' }, 125 | { name: '전오', value: 'cr' }, 126 | { name: '전초', value: 'cr' }, 127 | { name: '재도', value: 'cr' }, 128 | { name: '재감도', value: 'cr' }, 129 | { name: '재고약', value: 'cr' }, 130 | { name: '초적', value: 'cr' }, 131 | { name: '초보', value: 'cr' }, 132 | { name: '초기', value: 'cr' }, 133 | { name: '초사', value: 'cr' }, 134 | { name: '감초', value: 'cr' }, 135 | { name: '모', value: 'cr' }, 136 | { name: '감모', value: 'cr' }, 137 | { name: '오', value: 'cr' }, 138 | { name: '감오', value: 'cr' }, 139 | { name: '동오', value: 'cr' }, 140 | { name: '초', value: 'cr' }, 141 | { name: '동초', value: 'cr' }, 142 | { name: '초치', value: 'cr' }, 143 | { name: '치도', value: 'cr' }, 144 | { name: '치모', value: 'cr' }, 145 | { name: '치오', value: 'cr' }, 146 | { name: '치초', value: 'cr' }, 147 | { name: '코', value: 'cr' }, 148 | { name: '므', value: 'ks' }, 149 | { name: '재므', value: 'ks' }, 150 | { name: '준재므', value: 'ks' }, 151 | { name: '마', value: 'hg' }, 152 | { name: '무', value: 'hg' }, 153 | { name: '스', value: 'hg' }, 154 | { name: '흐', value: 'hg' }, 155 | { name: '히', value: 'hg' }, 156 | { name: '수흐', value: 'hg' }, 157 | { name: '재마', value: 'hg' }, 158 | { name: '재무', value: 'hg' }, 159 | { name: '재스', value: 'hg' }, 160 | { name: '정스', value: 'hg' }, 161 | { name: '준재스', value: 'hg' }, 162 | { name: '그', value: 'hg' }, 163 | { name: '부', value: 'hg' }, 164 | { name: '재부', value: 'hg' }, 165 | { name: '으', value: 'hg' }, 166 | { name: '재으', value: 'hg' }, 167 | { name: '재그', value: 'hg' }, 168 | { name: '바', value: 'hg' }, 169 | { name: '사', value: 'hg' }, 170 | { name: '인라', value: 'hg' }, 171 | { name: '인마', value: 'hg' }, 172 | { name: '후', value: 'pt' }, 173 | { name: '재후', value: 'pt' }, 174 | { name: '비단', value: 'et' }, 175 | { name: '비합', value: 'et' }, 176 | { name: '아', value: 'et' }, 177 | { name: '인', value: 'et' }, 178 | { name: '인카', value: 'et' }, 179 | { name: '재아', value: 'et' }, 180 | { name: '재카기', value: 'et' }, 181 | { name: '재카담', value: 'et' }, 182 | { name: '주', value: 'et' }, 183 | { name: '책', value: 'et' }, 184 | { name: '카열', value: 'et' }, 185 | { name: '즈기', value: 'ka' }, 186 | { name: '즈단', value: 'ka' }, 187 | { name: '즈합', value: 'ka' }, 188 | { name: '카경', value: 'ka' }, 189 | { name: '재카경', value: 'ka' }, 190 | { name: '카구', value: 'ka' }, 191 | { name: '카기', value: 'ka' }, 192 | { name: '카담', value: 'ka' }, 193 | { name: '카명', value: 'ka' }, 194 | { name: '카불', value: 'ka' }, 195 | { name: '카소', value: 'ka' }, 196 | { name: '카임', value: 'ka' }, 197 | { name: '카정', value: 'ka' }, 198 | { name: '카합', value: 'ka' }, 199 | { name: '카기전', value: 'ka' }, 200 | { name: '카확', value: 'ka' }, 201 | { name: '트', value: 'sb' }, 202 | { name: '어', value: 'gb' }, 203 | { name: '동어', value: 'gb' }, 204 | { name: '재동어', value: 'gb' }, 205 | { name: '터', value: 'gb' }, 206 | { name: '동터', value: 'gb' }, 207 | { name: '성로', value: 'gb' }, 208 | { name: '성모', value: 'gb' }, 209 | { name: '성초', value: 'gb' }, 210 | { name: '감노', value: 'cr' }, 211 | { name: '감로', value: 'cr' }, 212 | { name: '감초', value: 'cr' }, 213 | { name: '구', value: 'hs' }, 214 | { name: '구단', value: 'hs' }, 215 | { name: '구합', value: 'hs' }, 216 | { name: '나', value: 'cv' }, 217 | { name: '너', value: 'ks' }, 218 | { name: '노', value: 'cr' }, 219 | { name: '누', value: 'hs' }, 220 | { name: '동노', value: 'cr' }, 221 | { name: '동초', value: 'cr' }, 222 | { name: '라', value: 'hg' }, 223 | { name: '로', value: 'cr' }, 224 | { name: '루', value: 'hg' }, 225 | { name: '르', value: 'ks' }, 226 | { name: '머', value: 'cv' }, 227 | { name: '보', value: 'cr' }, 228 | { name: '보노', value: 'cr' }, 229 | { name: '보로', value: 'cr' }, 230 | { name: '보초', value: 'cr' }, 231 | { name: '브', value: 'hg' }, 232 | { name: '비단', value: 'et' }, 233 | { name: '비합', value: 'et' }, 234 | { name: '성로', value: 'gb' }, 235 | { name: '성모', value: 'gb' }, 236 | { name: '성초', value: 'gb' }, 237 | { name: '수', value: 'hs' }, 238 | { name: '아', value: 'et' }, 239 | { name: '인', value: 'et' }, 240 | { name: '인라', value: 'hg' }, 241 | { name: '인마', value: 'hg' }, 242 | { name: '인카', value: 'et' }, 243 | { name: '자', value: 'et' }, 244 | { name: '재감노', value: 'cr' }, 245 | { name: '재고약', value: 'cr' }, 246 | { name: '재구', value: 'hs' }, 247 | { name: '재구단', value: 'hs' }, 248 | { name: '재구합', value: 'hs' }, 249 | { name: '재나', value: 'cv' }, 250 | { name: '재너', value: 'ks' }, 251 | { name: '재노', value: 'cr' }, 252 | { name: '재누', value: 'hs' }, 253 | { name: '재라', value: 'hg' }, 254 | { name: '재루', value: 'hg' }, 255 | { name: '재르', value: 'ks' }, 256 | { name: '재머', value: 'cv' }, 257 | { name: '재브', value: 'hg' }, 258 | { name: '재수', value: 'hs' }, 259 | { name: '재아', value: 'et' }, 260 | { name: '재카기', value: 'et' }, 261 | { name: '재카담', value: 'et' }, 262 | { name: '재카경', value: 'ka' }, 263 | { name: '전노', value: 'cr' }, 264 | { name: '전로', value: 'cr' }, 265 | { name: '전초', value: 'cr' }, 266 | { name: '정드', value: 'et' }, 267 | { name: '정명', value: 'et' }, 268 | { name: '정브', value: 'hg' }, 269 | { name: '주', value: 'et' }, 270 | { name: '준재구', value: 'hs' }, 271 | { name: '준재나', value: 'cv' }, 272 | { name: '준재누', value: 'hs' }, 273 | { name: '준재르', value: 'ks' }, 274 | { name: '준재머', value: 'cv' }, 275 | { name: '즈기', value: 'ka' }, 276 | { name: '즈단', value: 'ka' }, 277 | { name: '즈합', value: 'ka' }, 278 | { name: '책', value: 'et' }, 279 | { name: '초', value: 'cr' }, 280 | { name: '초기', value: 'cr' }, 281 | { name: '초보', value: 'cr' }, 282 | { name: '초사', value: 'cr' }, 283 | { name: '초재', value: 'cr' }, 284 | { name: '초적', value: 'cr' }, 285 | { name: '초치', value: 'cr' }, 286 | { name: '치노', value: 'cr' }, 287 | { name: '치로', value: 'cr' }, 288 | { name: '치초', value: 'cr' }, 289 | { name: '카', value: 'ka' }, 290 | { name: '카경', value: 'ka' }, 291 | { name: '카구', value: 'ka' }, 292 | { name: '카기', value: 'ka' }, 293 | { name: '카기전', value: 'ka' }, 294 | { name: '카담', value: 'ka' }, 295 | { name: '카명', value: 'ka' }, 296 | { name: '카불', value: 'ka' }, 297 | { name: '카소', value: 'ka' }, 298 | { name: '카열', value: 'et' }, 299 | { name: '카임', value: 'ka' }, 300 | { name: '카정', value: 'ka' }, 301 | { name: '카합', value: 'ka' }, 302 | { name: '카확', value: 'ka' }, 303 | { name: '코', value: 'cr' }, 304 | { name: '토', value: 'cr' }, 305 | { name: '나', value: 'cv' }, 306 | { name: '머', value: 'cv' }, 307 | { name: '재나', value: 'cv' }, 308 | { name: '재머', value: 'cv' }, 309 | { name: '준재나', value: 'cv' }, 310 | { name: '준재머', value: 'cv' }, 311 | { name: '누', value: 'hs' }, 312 | { name: '재누', value: 'hs' }, 313 | { name: '준재누', value: 'hs' }, 314 | { name: '구단', value: 'hs' }, 315 | { name: '구합', value: 'hs' }, 316 | { name: '재구단', value: 'hs' }, 317 | { name: '재구합', value: 'hs' }, 318 | { name: '준재구', value: 'hs' }, 319 | { name: '구', value: 'hs' }, 320 | { name: '재구', value: 'hs' }, 321 | { name: '수', value: 'hs' }, 322 | { name: '재수', value: 'hs' }, 323 | { name: '감노', value: 'cr' }, 324 | { name: '감로', value: 'cr' }, 325 | { name: '감초', value: 'cr' }, 326 | { name: '노', value: 'cr' }, 327 | { name: '로', value: 'cr' }, 328 | { name: '보', value: 'cr' }, 329 | { name: '보노', value: 'cr' }, 330 | { name: '보로', value: 'cr' }, 331 | { name: '보초', value: 'cr' }, 332 | { name: '동노', value: 'cr' }, 333 | { name: '전노', value: 'cr' }, 334 | { name: '전로', value: 'cr' }, 335 | { name: '전초', value: 'cr' }, 336 | { name: '재노', value: 'cr' }, 337 | { name: '재감노', value: 'cr' }, 338 | { name: '재고약', value: 'cr' }, 339 | { name: '초', value: 'cr' }, 340 | { name: '동초', value: 'cr' }, 341 | { name: '초기', value: 'cr' }, 342 | { name: '초보', value: 'cr' }, 343 | { name: '초사', value: 'cr' }, 344 | { name: '초재', value: 'cr' }, 345 | { name: '초적', value: 'cr' }, 346 | { name: '초치', value: 'cr' }, 347 | { name: '치노', value: 'cr' }, 348 | { name: '치로', value: 'cr' }, 349 | { name: '치초', value: 'cr' }, 350 | { name: '코', value: 'cr' }, 351 | { name: '토', value: 'cr' }, 352 | { name: '르', value: 'ks' }, 353 | { name: '너', value: 'ks' }, 354 | { name: '재르', value: 'ks' }, 355 | { name: '재너', value: 'ks' }, 356 | { name: '준재르', value: 'ks' }, 357 | { name: '라', value: 'hg' }, 358 | { name: '루', value: 'hg' }, 359 | { name: '브', value: 'hg' }, 360 | { name: '인라', value: 'hg' }, 361 | { name: '인마', value: 'hg' }, 362 | { name: '정브', value: 'hg' }, 363 | { name: '재라', value: 'hg' }, 364 | { name: '재루', value: 'hg' }, 365 | { name: '재브', value: 'hg' }, 366 | { name: '비단', value: 'et' }, 367 | { name: '비합', value: 'et' }, 368 | { name: '아', value: 'et' }, 369 | { name: '인', value: 'et' }, 370 | { name: '인카', value: 'et' }, 371 | { name: '자', value: 'et' }, 372 | { name: '재아', value: 'et' }, 373 | { name: '재카기', value: 'et' }, 374 | { name: '재카담', value: 'et' }, 375 | { name: '정드', value: 'et' }, 376 | { name: '정명', value: 'et' }, 377 | { name: '주', value: 'et' }, 378 | { name: '책', value: 'et' }, 379 | { name: '카열', value: 'et' }, 380 | { name: '즈기', value: 'ka' }, 381 | { name: '즈단', value: 'ka' }, 382 | { name: '즈합', value: 'ka' }, 383 | { name: '카', value: 'ka' }, 384 | { name: '카경', value: 'ka' }, 385 | { name: '재카경', value: 'ka' }, 386 | { name: '카구', value: 'ka' }, 387 | { name: '카기', value: 'ka' }, 388 | { name: '카담', value: 'ka' }, 389 | { name: '카명', value: 'ka' }, 390 | { name: '카불', value: 'ka' }, 391 | { name: '카소', value: 'ka' }, 392 | { name: '카임', value: 'ka' }, 393 | { name: '카정', value: 'ka' }, 394 | { name: '카합', value: 'ka' }, 395 | { name: '카기전', value: 'ka' }, 396 | { name: '카확', value: 'ka' }, 397 | { name: '성로', value: 'gb' }, 398 | { name: '성모', value: 'gb' }, 399 | { name: '성초', value: 'gb' }, 400 | { name: '구', value: 'hs' }, 401 | { name: '구단', value: 'hs' }, 402 | { name: '구합', value: 'hs' }, 403 | { name: '아', value: 'et' }, 404 | { name: '인', value: 'et' }, 405 | { name: '인라', value: 'hg' }, 406 | { name: '인마', value: 'hg' }, 407 | { name: '인카', value: 'et' }, 408 | { name: '자', value: 'et' }, 409 | { name: '재구', value: 'hs' }, 410 | { name: '재구단', value: 'hs' }, 411 | { name: '재구합', value: 'hs' }, 412 | { name: '재아', value: 'et' }, 413 | { name: '준재구', value: 'hs' }, 414 | { name: '카열', value: 'et' }, 415 | { name: '구단', value: 'hs' }, 416 | { name: '구합', value: 'hs' }, 417 | { name: '재구단', value: 'hs' }, 418 | { name: '재구합', value: 'hs' }, 419 | { name: '준재구', value: 'hs' }, 420 | { name: '구', value: 'hs' }, 421 | { name: '재구', value: 'hs' }, 422 | { name: '인라', value: 'hg' }, 423 | { name: '인마', value: 'hg' }, 424 | { name: '아', value: 'et' }, 425 | { name: '자', value: 'et' }, 426 | { name: '재아', value: 'et' }, 427 | { name: '카열', value: 'et' }, 428 | { name: '인', value: 'et' }, 429 | { name: '인카', value: 'et' }, 430 | { name: '나', value: 'cv' }, 431 | { name: '머', value: 'cv' }, 432 | { name: '재나', value: 'cv' }, 433 | { name: '재머', value: 'cv' }, 434 | { name: '재카경', value: 'ka' }, 435 | { name: '재허', value: 'pt' }, 436 | { name: '준재나', value: 'cv' }, 437 | { name: '준재머', value: 'cv' }, 438 | { name: '즈기', value: 'ka' }, 439 | { name: '즈단', value: 'ka' }, 440 | { name: '즈합', value: 'ka' }, 441 | { name: '카', value: 'ka' }, 442 | { name: '카경', value: 'ka' }, 443 | { name: '카구', value: 'ka' }, 444 | { name: '카기', value: 'ka' }, 445 | { name: '카기전', value: 'ka' }, 446 | { name: '카담', value: 'ka' }, 447 | { name: '카명', value: 'ka' }, 448 | { name: '카불', value: 'ka' }, 449 | { name: '카소', value: 'ka' }, 450 | { name: '카열', value: 'et' }, 451 | { name: '카임', value: 'ka' }, 452 | { name: '카정', value: 'ka' }, 453 | { name: '카합', value: 'ka' }, 454 | { name: '카허', value: 'et' }, 455 | { name: '카확', value: 'ka' }, 456 | { name: '허', value: 'pt' }, 457 | { name: '허', value: 'pt' }, 458 | { name: '재허', value: 'pt' }, 459 | { name: '나', value: 'cv' }, 460 | { name: '머', value: 'cv' }, 461 | { name: '재나', value: 'cv' }, 462 | { name: '재머', value: 'cv' }, 463 | { name: '준재나', value: 'cv' }, 464 | { name: '준재머', value: 'cv' }, 465 | { name: '재카경', value: 'ka' }, 466 | { name: '즈기', value: 'ka' }, 467 | { name: '즈단', value: 'ka' }, 468 | { name: '즈합', value: 'ka' }, 469 | { name: '카', value: 'ka' }, 470 | { name: '카경', value: 'ka' }, 471 | { name: '카구', value: 'ka' }, 472 | { name: '카기', value: 'ka' }, 473 | { name: '카기전', value: 'ka' }, 474 | { name: '카담', value: 'ka' }, 475 | { name: '카명', value: 'ka' }, 476 | { name: '카불', value: 'ka' }, 477 | { name: '카소', value: 'ka' }, 478 | { name: '카임', value: 'ka' }, 479 | { name: '카정', value: 'ka' }, 480 | { name: '카합', value: 'ka' }, 481 | { name: '카확', value: 'ka' }, 482 | { name: '카열', value: 'et' }, 483 | { name: '카허', value: 'et' }, 484 | { name: '가단', value: 'cv' }, 485 | { name: '가합', value: 'cv' }, 486 | { name: '가소', value: 'cv' }, 487 | { name: '간회단', value: 'whp' }, 488 | { name: '간회합', value: 'whp' }, 489 | { name: '개기', value: 'whp' }, 490 | { name: '개보', value: 'whp' }, 491 | { name: '개확', value: 'whp' }, 492 | { name: '개회', value: 'whp' }, 493 | { name: '국승', value: 'whp' }, 494 | { name: '국지', value: 'whp' }, 495 | { name: '나', value: 'cv' }, 496 | { name: '라', value: 'hg' }, 497 | { name: '루', value: 'hg' }, 498 | { name: '머', value: 'cv' }, 499 | { name: '브', value: 'hg' }, 500 | { name: '비단', value: 'et' }, 501 | { name: '비합', value: 'et' }, 502 | { name: '아', value: 'et' }, 503 | { name: '인', value: 'et' }, 504 | { name: '인라', value: 'hg' }, 505 | { name: '인마', value: 'hg' }, 506 | { name: '인카', value: 'et' }, 507 | { name: '자', value: 'et' }, 508 | { name: '재가단', value: 'cv' }, 509 | { name: '재가소', value: 'cv' }, 510 | { name: '재가합', value: 'cv' }, 511 | { name: '재나', value: 'cv' }, 512 | { name: '재라', value: 'hg' }, 513 | { name: '재루', value: 'hg' }, 514 | { name: '재머', value: 'cv' }, 515 | { name: '재브', value: 'hg' }, 516 | { name: '재아', value: 'et' }, 517 | { name: '재카경', value: 'ka' }, 518 | { name: '재카기', value: 'et' }, 519 | { name: '재카담', value: 'et' }, 520 | { name: '정드', value: 'et' }, 521 | { name: '정명', value: 'et' }, 522 | { name: '정브', value: 'hg' }, 523 | { name: '주', value: 'et' }, 524 | { name: '준재가단', value: 'cv' }, 525 | { name: '준재가소', value: 'cv' }, 526 | { name: '준재가합', value: 'cv' }, 527 | { name: '준재나', value: 'cv' }, 528 | { name: '준재머', value: 'cv' }, 529 | { name: '즈기', value: 'ka' }, 530 | { name: '즈단', value: 'ka' }, 531 | { name: '즈합', value: 'ka' }, 532 | { name: '책', value: 'et' }, 533 | { name: '카경', value: 'ka' }, 534 | { name: '카구', value: 'ka' }, 535 | { name: '카기', value: 'ka' }, 536 | { name: '카기전', value: 'ka' }, 537 | { name: '카단', value: 'ka' }, 538 | { name: '카담', value: 'ka' }, 539 | { name: '카명', value: 'ka' }, 540 | { name: '카불', value: 'ka' }, 541 | { name: '카소', value: 'ka' }, 542 | { name: '카열', value: 'et' }, 543 | { name: '카임', value: 'ka' }, 544 | { name: '카정', value: 'ka' }, 545 | { name: '카조', value: 'jj' }, 546 | { name: '카합', value: 'ka' }, 547 | { name: '카확', value: 'ka' }, 548 | { name: '하기', value: 'whp' }, 549 | { name: '하단', value: 'whp' }, 550 | { name: '하면', value: 'whp' }, 551 | { name: '하합', value: 'whp' }, 552 | { name: '하확', value: 'whp' }, 553 | { name: '호', value: 'et' }, 554 | { name: '호기', value: 'et' }, 555 | { name: '호명', value: 'et' }, 556 | { name: '호파', value: 'et' }, 557 | { name: '호협', value: 'et' }, 558 | { name: '회기', value: 'whp' }, 559 | { name: '회단', value: 'whp' }, 560 | { name: '회합', value: 'whp' }, 561 | { name: '회확', value: 'whp' }, 562 | { name: '개회', value: 'whp' }, 563 | { name: '개확', value: 'whp' }, 564 | { name: '개보', value: 'whp' }, 565 | { name: '개기', value: 'whp' }, 566 | { name: '간회단', value: 'whp' }, 567 | { name: '회단', value: 'whp' }, 568 | { name: '간회합', value: 'whp' }, 569 | { name: '회합', value: 'whp' }, 570 | { name: '회확', value: 'whp' }, 571 | { name: '회기', value: 'whp' }, 572 | { name: '하확', value: 'whp' }, 573 | { name: '하기', value: 'whp' }, 574 | { name: '하단', value: 'whp' }, 575 | { name: '하합', value: 'whp' }, 576 | { name: '하면', value: 'whp' }, 577 | { name: '국승', value: 'whp' }, 578 | { name: '국지', value: 'whp' }, 579 | { name: '가단', value: 'cv' }, 580 | { name: '가합', value: 'cv' }, 581 | { name: '가소', value: 'cv' }, 582 | { name: '나', value: 'cv' }, 583 | { name: '머', value: 'cv' }, 584 | { name: '재가단', value: 'cv' }, 585 | { name: '재가합', value: 'cv' }, 586 | { name: '재가소', value: 'cv' }, 587 | { name: '재나', value: 'cv' }, 588 | { name: '재머', value: 'cv' }, 589 | { name: '준재가단', value: 'cv' }, 590 | { name: '준재가합', value: 'cv' }, 591 | { name: '준재가소', value: 'cv' }, 592 | { name: '준재나', value: 'cv' }, 593 | { name: '준재머', value: 'cv' }, 594 | { name: '라', value: 'hg' }, 595 | { name: '루', value: 'hg' }, 596 | { name: '브', value: 'hg' }, 597 | { name: '인라', value: 'hg' }, 598 | { name: '인마', value: 'hg' }, 599 | { name: '재라', value: 'hg' }, 600 | { name: '재루', value: 'hg' }, 601 | { name: '재브', value: 'hg' }, 602 | { name: '정브', value: 'hg' }, 603 | { name: '비단', value: 'et' }, 604 | { name: '비합', value: 'et' }, 605 | { name: '아', value: 'et' }, 606 | { name: '인', value: 'et' }, 607 | { name: '인카', value: 'et' }, 608 | { name: '책', value: 'et' }, 609 | { name: '호', value: 'et' }, 610 | { name: '호기', value: 'et' }, 611 | { name: '호명', value: 'et' }, 612 | { name: '호파', value: 'et' }, 613 | { name: '호협', value: 'et' }, 614 | { name: '자', value: 'et' }, 615 | { name: '재아', value: 'et' }, 616 | { name: '재카기', value: 'et' }, 617 | { name: '재카담', value: 'et' }, 618 | { name: '정드', value: 'et' }, 619 | { name: '정명', value: 'et' }, 620 | { name: '주', value: 'et' }, 621 | { name: '카열', value: 'et' }, 622 | { name: '즈기', value: 'ka' }, 623 | { name: '즈단', value: 'ka' }, 624 | { name: '즈합', value: 'ka' }, 625 | { name: '카경', value: 'ka' }, 626 | { name: '재카경', value: 'ka' }, 627 | { name: '카구', value: 'ka' }, 628 | { name: '카기', value: 'ka' }, 629 | { name: '카단', value: 'ka' }, 630 | { name: '카담', value: 'ka' }, 631 | { name: '카명', value: 'ka' }, 632 | { name: '카불', value: 'ka' }, 633 | { name: '카소', value: 'ka' }, 634 | { name: '카임', value: 'ka' }, 635 | { name: '카정', value: 'ka' }, 636 | { name: '카합', value: 'ka' }, 637 | { name: '카기전', value: 'ka' }, 638 | { name: '카확', value: 'ka' }, 639 | { name: '카조', value: 'jj' }, 640 | { name: '과', value: 'gw' }, 641 | { name: '너', value: 'ks' }, 642 | { name: '느단', value: 'ks' }, 643 | { name: '느합', value: 'ks' }, 644 | { name: '동버', value: 'gb' }, 645 | { name: '동버집', value: 'gb' }, 646 | { name: '동서', value: 'gb' }, 647 | { name: '동저', value: 'gb' }, 648 | { name: '동처', value: 'gb' }, 649 | { name: '동처집', value: 'gb' }, 650 | { name: '동커', value: 'gb' }, 651 | { name: '드', value: 'ks' }, 652 | { name: '드단', value: 'ks' }, 653 | { name: '드합', value: 'ks' }, 654 | { name: '라', value: 'hg' }, 655 | { name: '루', value: 'hg' }, 656 | { name: '르', value: 'ks' }, 657 | { name: '버', value: 'gb' }, 658 | { name: '버집', value: 'gb' }, 659 | { name: '브', value: 'hg' }, 660 | { name: '서', value: 'gb' }, 661 | { name: '성', value: 'gb' }, 662 | { name: '성로', value: 'gb' }, 663 | { name: '성모', value: 'gb' }, 664 | { name: '성초', value: 'gb' }, 665 | { name: '인', value: 'et' }, 666 | { name: '인라', value: 'hg' }, 667 | { name: '인마', value: 'hg' }, 668 | { name: '인카', value: 'et' }, 669 | { name: '자', value: 'et' }, 670 | { name: '재너', value: 'ks' }, 671 | { name: '재느단', value: 'ks' }, 672 | { name: '재느합', value: 'ks' }, 673 | { name: '재동버', value: 'gb' }, 674 | { name: '재동서', value: 'gb' }, 675 | { name: '재드', value: 'ks' }, 676 | { name: '재드단', value: 'ks' }, 677 | { name: '재드합', value: 'ks' }, 678 | { name: '재라', value: 'hg' }, 679 | { name: '재루', value: 'hg' }, 680 | { name: '재르', value: 'ks' }, 681 | { name: '재버', value: 'gb' }, 682 | { name: '재브', value: 'hg' }, 683 | { name: '저', value: 'gb' }, 684 | { name: '정드', value: 'et' }, 685 | { name: '정명', value: 'et' }, 686 | { name: '정브', value: 'hg' }, 687 | { name: '준재느단', value: 'ks' }, 688 | { name: '준재느합', value: 'ks' }, 689 | { name: '준재드단', value: 'ks' }, 690 | { name: '준재드합', value: 'ks' }, 691 | { name: '준재르', value: 'ks' }, 692 | { name: '즈기', value: 'ka' }, 693 | { name: '즈단', value: 'ka' }, 694 | { name: '즈합', value: 'ka' }, 695 | { name: '처', value: 'gb' }, 696 | { name: '처집', value: 'gb' }, 697 | { name: '카구', value: 'ka' }, 698 | { name: '카열', value: 'et' }, 699 | { name: '커', value: 'gb' }, 700 | { name: '크', value: 'sb' }, 701 | { name: '푸', value: 'sb' }, 702 | { name: '푸집', value: 'sb' }, 703 | { name: '푸초', value: 'sb' }, 704 | { name: '호', value: 'et' }, 705 | { name: '호기', value: 'et' }, 706 | { name: '호명', value: 'et' }, 707 | { name: '호파', value: 'et' }, 708 | { name: '호협', value: 'et' }, 709 | { name: '후감', value: 'ks' }, 710 | { name: '후개', value: 'ks' }, 711 | { name: '후기', value: 'ks' }, 712 | { name: '드단', value: 'ks' }, 713 | { name: '드합', value: 'ks' }, 714 | { name: '너', value: 'ks' }, 715 | { name: '느단', value: 'ks' }, 716 | { name: '느합', value: 'ks' }, 717 | { name: '르', value: 'ks' }, 718 | { name: '재드단', value: 'ks' }, 719 | { name: '재드합', value: 'ks' }, 720 | { name: '재너', value: 'ks' }, 721 | { name: '재느단', value: 'ks' }, 722 | { name: '재느합', value: 'ks' }, 723 | { name: '재르', value: 'ks' }, 724 | { name: '준재드단', value: 'ks' }, 725 | { name: '준재드합', value: 'ks' }, 726 | { name: '준재느단', value: 'ks' }, 727 | { name: '준재느합', value: 'ks' }, 728 | { name: '준재르', value: 'ks' }, 729 | { name: '드', value: 'ks' }, 730 | { name: '재드', value: 'ks' }, 731 | { name: '후감', value: 'ks' }, 732 | { name: '후개', value: 'ks' }, 733 | { name: '후기', value: 'ks' }, 734 | { name: '라', value: 'hg' }, 735 | { name: '루', value: 'hg' }, 736 | { name: '브', value: 'hg' }, 737 | { name: '인라', value: 'hg' }, 738 | { name: '인마', value: 'hg' }, 739 | { name: '정브', value: 'hg' }, 740 | { name: '재라', value: 'hg' }, 741 | { name: '재루', value: 'hg' }, 742 | { name: '재브', value: 'hg' }, 743 | { name: '과', value: 'gw' }, 744 | { name: '인', value: 'et' }, 745 | { name: '인카', value: 'et' }, 746 | { name: '자', value: 'et' }, 747 | { name: '정드', value: 'et' }, 748 | { name: '정명', value: 'et' }, 749 | { name: '호', value: 'et' }, 750 | { name: '호기', value: 'et' }, 751 | { name: '호명', value: 'et' }, 752 | { name: '호파', value: 'et' }, 753 | { name: '호협', value: 'et' }, 754 | { name: '카열', value: 'et' }, 755 | { name: '크', value: 'sb' }, 756 | { name: '푸', value: 'sb' }, 757 | { name: '푸집', value: 'sb' }, 758 | { name: '푸초', value: 'sb' }, 759 | { name: '버', value: 'gb' }, 760 | { name: '재버', value: 'gb' }, 761 | { name: '버집', value: 'gb' }, 762 | { name: '동버집', value: 'gb' }, 763 | { name: '동버', value: 'gb' }, 764 | { name: '재동버', value: 'gb' }, 765 | { name: '서', value: 'gb' }, 766 | { name: '동서', value: 'gb' }, 767 | { name: '재동서', value: 'gb' }, 768 | { name: '저', value: 'gb' }, 769 | { name: '동저', value: 'gb' }, 770 | { name: '처', value: 'gb' }, 771 | { name: '처집', value: 'gb' }, 772 | { name: '동처', value: 'gb' }, 773 | { name: '동처집', value: 'gb' }, 774 | { name: '커', value: 'gb' }, 775 | { name: '동커', value: 'gb' }, 776 | { name: '성', value: 'gb' }, 777 | { name: '성로', value: 'gb' }, 778 | { name: '성모', value: 'gb' }, 779 | { name: '성초', value: 'gb' }, 780 | { name: '즈기', value: 'ka' }, 781 | { name: '즈단', value: 'ka' }, 782 | { name: '즈합', value: 'ka' }, 783 | { name: '카구', value: 'ka' }, 784 | { name: '과', value: 'gw' }, 785 | { name: '너', value: 'ks' }, 786 | { name: '느단', value: 'ks' }, 787 | { name: '느합', value: 'ks' }, 788 | { name: '동버', value: 'gb' }, 789 | { name: '동버집', value: 'gb' }, 790 | { name: '동서', value: 'gb' }, 791 | { name: '동저', value: 'gb' }, 792 | { name: '동처', value: 'gb' }, 793 | { name: '동커', value: 'gb' }, 794 | { name: '동처집', value: 'gb' }, 795 | { name: '드', value: 'ks' }, 796 | { name: '드단', value: 'ks' }, 797 | { name: '드합', value: 'ks' }, 798 | { name: '버', value: 'gb' }, 799 | { name: '버집', value: 'gb' }, 800 | { name: '서', value: 'gb' }, 801 | { name: '성', value: 'gb' }, 802 | { name: '성로', value: 'gb' }, 803 | { name: '성모', value: 'gb' }, 804 | { name: '성초', value: 'gb' }, 805 | { name: '인', value: 'et' }, 806 | { name: '인라', value: 'hg' }, 807 | { name: '인마', value: 'hg' }, 808 | { name: '인카', value: 'et' }, 809 | { name: '자', value: 'et' }, 810 | { name: '재너', value: 'ks' }, 811 | { name: '재느단', value: 'ks' }, 812 | { name: '재느합', value: 'ks' }, 813 | { name: '재동버', value: 'gb' }, 814 | { name: '재동서', value: 'gb' }, 815 | { name: '재드', value: 'ks' }, 816 | { name: '재드단', value: 'ks' }, 817 | { name: '재드합', value: 'ks' }, 818 | { name: '재버', value: 'gb' }, 819 | { name: '저', value: 'gb' }, 820 | { name: '정드', value: 'et' }, 821 | { name: '정명', value: 'et' }, 822 | { name: '정브', value: 'hg' }, 823 | { name: '준재느단', value: 'ks' }, 824 | { name: '준재느합', value: 'ks' }, 825 | { name: '준재드단', value: 'ks' }, 826 | { name: '준재드합', value: 'ks' }, 827 | { name: '즈기', value: 'ka' }, 828 | { name: '즈단', value: 'ka' }, 829 | { name: '즈합', value: 'ka' }, 830 | { name: '처', value: 'gb' }, 831 | { name: '처집', value: 'gb' }, 832 | { name: '카구', value: 'ka' }, 833 | { name: '카열', value: 'et' }, 834 | { name: '커', value: 'gb' }, 835 | { name: '푸', value: 'sb' }, 836 | { name: '푸집', value: 'sb' }, 837 | { name: '푸초', value: 'sb' }, 838 | { name: '호', value: 'et' }, 839 | { name: '호기', value: 'et' }, 840 | { name: '호명', value: 'et' }, 841 | { name: '호파', value: 'et' }, 842 | { name: '호협', value: 'et' }, 843 | { name: '후감', value: 'ks' }, 844 | { name: '후개', value: 'ks' }, 845 | { name: '후기', value: 'ks' }, 846 | { name: '드단', value: 'ks' }, 847 | { name: '드합', value: 'ks' }, 848 | { name: '너', value: 'ks' }, 849 | { name: '느단', value: 'ks' }, 850 | { name: '느합', value: 'ks' }, 851 | { name: '재드단', value: 'ks' }, 852 | { name: '재드합', value: 'ks' }, 853 | { name: '재너', value: 'ks' }, 854 | { name: '재느단', value: 'ks' }, 855 | { name: '재느합', value: 'ks' }, 856 | { name: '준재드단', value: 'ks' }, 857 | { name: '준재드합', value: 'ks' }, 858 | { name: '준재느단', value: 'ks' }, 859 | { name: '준재느합', value: 'ks' }, 860 | { name: '드', value: 'ks' }, 861 | { name: '재드', value: 'ks' }, 862 | { name: '후감', value: 'ks' }, 863 | { name: '후개', value: 'ks' }, 864 | { name: '후기', value: 'ks' }, 865 | { name: '인라', value: 'hg' }, 866 | { name: '인마', value: 'hg' }, 867 | { name: '정브', value: 'hg' }, 868 | { name: '과', value: 'gw' }, 869 | { name: '인', value: 'et' }, 870 | { name: '자', value: 'et' }, 871 | { name: '카열', value: 'et' }, 872 | { name: '인카', value: 'et' }, 873 | { name: '정드', value: 'et' }, 874 | { name: '정명', value: 'et' }, 875 | { name: '호', value: 'et' }, 876 | { name: '호기', value: 'et' }, 877 | { name: '호명', value: 'et' }, 878 | { name: '호파', value: 'et' }, 879 | { name: '호협', value: 'et' }, 880 | { name: '푸', value: 'sb' }, 881 | { name: '푸집', value: 'sb' }, 882 | { name: '푸초', value: 'sb' }, 883 | { name: '버', value: 'gb' }, 884 | { name: '재버', value: 'gb' }, 885 | { name: '버집', value: 'gb' }, 886 | { name: '동버집', value: 'gb' }, 887 | { name: '동버', value: 'gb' }, 888 | { name: '재동버', value: 'gb' }, 889 | { name: '서', value: 'gb' }, 890 | { name: '동서', value: 'gb' }, 891 | { name: '재동서', value: 'gb' }, 892 | { name: '저', value: 'gb' }, 893 | { name: '동저', value: 'gb' }, 894 | { name: '처', value: 'gb' }, 895 | { name: '처집', value: 'gb' }, 896 | { name: '동처', value: 'gb' }, 897 | { name: '동처집', value: 'gb' }, 898 | { name: '커', value: 'gb' }, 899 | { name: '동커', value: 'gb' }, 900 | { name: '성', value: 'gb' }, 901 | { name: '성로', value: 'gb' }, 902 | { name: '성모', value: 'gb' }, 903 | { name: '성초', value: 'gb' }, 904 | { name: '즈기', value: 'ka' }, 905 | { name: '즈단', value: 'ka' }, 906 | { name: '즈합', value: 'ka' }, 907 | { name: '카구', value: 'ka' }, 908 | { name: '가단', value: 'cv' }, 909 | { name: '가소', value: 'cv' }, 910 | { name: '가합', value: 'cv' }, 911 | { name: '감고', value: 'cr' }, 912 | { name: '감노', value: 'cr' }, 913 | { name: '감로', value: 'cr' }, 914 | { name: '감초', value: 'cr' }, 915 | { name: '고단', value: 'cr' }, 916 | { name: '고약', value: 'ym' }, 917 | { name: '고약전', value: 'wey' }, 918 | { name: '고정', value: 'cr' }, 919 | { name: '고합', value: 'cr' }, 920 | { name: '과', value: 'gw' }, 921 | { name: '나', value: 'cv' }, 922 | { name: '노', value: 'cr' }, 923 | { name: '동고', value: 'cr' }, 924 | { name: '동노', value: 'cr' }, 925 | { name: '동서', value: 'gb' }, 926 | { name: '동초', value: 'cr' }, 927 | { name: '동커', value: 'gb' }, 928 | { name: '라', value: 'hg' }, 929 | { name: '로', value: 'cr' }, 930 | { name: '루', value: 'hg' }, 931 | { name: '머', value: 'cv' }, 932 | { name: '보', value: 'cr' }, 933 | { name: '보고', value: 'cr' }, 934 | { name: '보노', value: 'cr' }, 935 | { name: '보로', value: 'cr' }, 936 | { name: '보초', value: 'cr' }, 937 | { name: '브', value: 'hg' }, 938 | { name: '비단', value: 'et' }, 939 | { name: '비합', value: 'et' }, 940 | { name: '서', value: 'gb' }, 941 | { name: '성', value: 'gb' }, 942 | { name: '성로', value: 'gb' }, 943 | { name: '성모', value: 'gb' }, 944 | { name: '성초', value: 'gb' }, 945 | { name: '인', value: 'et' }, 946 | { name: '인라', value: 'hg' }, 947 | { name: '인마', value: 'hg' }, 948 | { name: '인카', value: 'et' }, 949 | { name: '자', value: 'et' }, 950 | { name: '재가단', value: 'cv' }, 951 | { name: '재가소', value: 'cv' }, 952 | { name: '재가합', value: 'cv' }, 953 | { name: '재감고', value: 'cr' }, 954 | { name: '재감노', value: 'cr' }, 955 | { name: '재고단', value: 'cr' }, 956 | { name: '재고약', value: 'cr' }, 957 | { name: '재고정', value: 'cr' }, 958 | { name: '재고합', value: 'cr' }, 959 | { name: '재나', value: 'cv' }, 960 | { name: '재노', value: 'cr' }, 961 | { name: '재동서', value: 'gb' }, 962 | { name: '재라', value: 'hg' }, 963 | { name: '재루', value: 'hg' }, 964 | { name: '재머', value: 'cv' }, 965 | { name: '재브', value: 'hg' }, 966 | { name: '재카기', value: 'et' }, 967 | { name: '재카경', value: 'ka' }, 968 | { name: '재카담', value: 'et' }, 969 | { name: '저', value: 'gb' }, 970 | { name: '전고', value: 'cr' }, 971 | { name: '전노', value: 'cr' }, 972 | { name: '전로', value: 'cr' }, 973 | { name: '전초', value: 'cr' }, 974 | { name: '정드', value: 'et' }, 975 | { name: '정명', value: 'et' }, 976 | { name: '정브', value: 'hg' }, 977 | { name: '주', value: 'et' }, 978 | { name: '준재가단', value: 'cv' }, 979 | { name: '준재가소', value: 'cv' }, 980 | { name: '준재가합', value: 'cv' }, 981 | { name: '준재나', value: 'cv' }, 982 | { name: '준재머', value: 'cv' }, 983 | { name: '즈기', value: 'ka' }, 984 | { name: '즈단', value: 'ka' }, 985 | { name: '즈합', value: 'ka' }, 986 | { name: '책', value: 'et' }, 987 | { name: '차', value: 'dc' }, 988 | { name: '차전', value: 'wdc' }, 989 | { name: '초', value: 'cr' }, 990 | { name: '초기', value: 'cr' }, 991 | { name: '초보', value: 'cr' }, 992 | { name: '초사', value: 'cr' }, 993 | { name: '초적', value: 'cr' }, 994 | { name: '초치', value: 'cr' }, 995 | { name: '치고', value: 'cr' }, 996 | { name: '치노', value: 'cr' }, 997 | { name: '치로', value: 'cr' }, 998 | { name: '치초', value: 'cr' }, 999 | { name: '카', value: 'ka' }, 1000 | { name: '카경', value: 'ka' }, 1001 | { name: '카구', value: 'ka' }, 1002 | { name: '카공', value: 'go' }, 1003 | { name: '카기', value: 'ka' }, 1004 | { name: '카기전', value: 'ka' }, 1005 | { name: '카단', value: 'ka' }, 1006 | { name: '카담', value: 'ka' }, 1007 | { name: '카명', value: 'ka' }, 1008 | { name: '카불', value: 'ka' }, 1009 | { name: '카소', value: 'ka' }, 1010 | { name: '카열', value: 'et' }, 1011 | { name: '카임', value: 'ka' }, 1012 | { name: '카정', value: 'ka' }, 1013 | { name: '카조', value: 'jj' }, 1014 | { name: '카합', value: 'ka' }, 1015 | { name: '카확', value: 'ka' }, 1016 | { name: '커', value: 'gb' }, 1017 | { name: '코', value: 'cr' }, 1018 | { name: '크', value: 'sb' }, 1019 | { name: '타기', value: 'gj' }, 1020 | { name: '타배', value: 'gj' }, 1021 | { name: '타인', value: 'gj' }, 1022 | { name: '타채', value: 'gj' }, 1023 | { name: '호', value: 'et' }, 1024 | { name: '호기', value: 'et' }, 1025 | { name: '호명', value: 'et' }, 1026 | { name: '호파', value: 'et' }, 1027 | { name: '호협', value: 'et' }, 1028 | { name: '가단', value: 'cv' }, 1029 | { name: '가합', value: 'cv' }, 1030 | { name: '가소', value: 'cv' }, 1031 | { name: '나', value: 'cv' }, 1032 | { name: '머', value: 'cv' }, 1033 | { name: '재가단', value: 'cv' }, 1034 | { name: '재가합', value: 'cv' }, 1035 | { name: '재가소', value: 'cv' }, 1036 | { name: '재나', value: 'cv' }, 1037 | { name: '재머', value: 'cv' }, 1038 | { name: '준재가단', value: 'cv' }, 1039 | { name: '준재가합', value: 'cv' }, 1040 | { name: '준재가소', value: 'cv' }, 1041 | { name: '준재나', value: 'cv' }, 1042 | { name: '준재머', value: 'cv' }, 1043 | { name: '타기', value: 'gj' }, 1044 | { name: '타배', value: 'gj' }, 1045 | { name: '타인', value: 'gj' }, 1046 | { name: '타채', value: 'gj' }, 1047 | { name: '고단', value: 'cr' }, 1048 | { name: '고합', value: 'cr' }, 1049 | { name: '고정', value: 'cr' }, 1050 | { name: '감고', value: 'cr' }, 1051 | { name: '동고', value: 'cr' }, 1052 | { name: '노', value: 'cr' }, 1053 | { name: '감노', value: 'cr' }, 1054 | { name: '동노', value: 'cr' }, 1055 | { name: '보고', value: 'cr' }, 1056 | { name: '보노', value: 'cr' }, 1057 | { name: '보로', value: 'cr' }, 1058 | { name: '보초', value: 'cr' }, 1059 | { name: '전고', value: 'cr' }, 1060 | { name: '전노', value: 'cr' }, 1061 | { name: '전로', value: 'cr' }, 1062 | { name: '전초', value: 'cr' }, 1063 | { name: '재고단', value: 'cr' }, 1064 | { name: '재고정', value: 'cr' }, 1065 | { name: '재고합', value: 'cr' }, 1066 | { name: '재감고', value: 'cr' }, 1067 | { name: '재고약', value: 'cr' }, 1068 | { name: '재노', value: 'cr' }, 1069 | { name: '재감노', value: 'cr' }, 1070 | { name: '초적', value: 'cr' }, 1071 | { name: '초보', value: 'cr' }, 1072 | { name: '초기', value: 'cr' }, 1073 | { name: '초사', value: 'cr' }, 1074 | { name: '감초', value: 'cr' }, 1075 | { name: '로', value: 'cr' }, 1076 | { name: '감로', value: 'cr' }, 1077 | { name: '보', value: 'cr' }, 1078 | { name: '코', value: 'cr' }, 1079 | { name: '초', value: 'cr' }, 1080 | { name: '동초', value: 'cr' }, 1081 | { name: '초치', value: 'cr' }, 1082 | { name: '치고', value: 'cr' }, 1083 | { name: '치노', value: 'cr' }, 1084 | { name: '치로', value: 'cr' }, 1085 | { name: '치초', value: 'cr' }, 1086 | { name: '고약', value: 'ym' }, 1087 | { name: '고약전', value: 'wey' }, 1088 | { name: '차', value: 'dc' }, 1089 | { name: '차전', value: 'wdc' }, 1090 | { name: '카공', value: 'go' }, 1091 | { name: '라', value: 'hg' }, 1092 | { name: '루', value: 'hg' }, 1093 | { name: '브', value: 'hg' }, 1094 | { name: '인라', value: 'hg' }, 1095 | { name: '인마', value: 'hg' }, 1096 | { name: '재라', value: 'hg' }, 1097 | { name: '재루', value: 'hg' }, 1098 | { name: '재브', value: 'hg' }, 1099 | { name: '정브', value: 'hg' }, 1100 | { name: '과', value: 'gw' }, 1101 | { name: '비단', value: 'et' }, 1102 | { name: '비합', value: 'et' }, 1103 | { name: '인', value: 'et' }, 1104 | { name: '인카', value: 'et' }, 1105 | { name: '책', value: 'et' }, 1106 | { name: '호', value: 'et' }, 1107 | { name: '호기', value: 'et' }, 1108 | { name: '호명', value: 'et' }, 1109 | { name: '호파', value: 'et' }, 1110 | { name: '호협', value: 'et' }, 1111 | { name: '자', value: 'et' }, 1112 | { name: '재카기', value: 'et' }, 1113 | { name: '재카담', value: 'et' }, 1114 | { name: '정드', value: 'et' }, 1115 | { name: '정명', value: 'et' }, 1116 | { name: '주', value: 'et' }, 1117 | { name: '카열', value: 'et' }, 1118 | { name: '카조', value: 'jj' }, 1119 | { name: '즈기', value: 'ka' }, 1120 | { name: '즈단', value: 'ka' }, 1121 | { name: '즈합', value: 'ka' }, 1122 | { name: '카', value: 'ka' }, 1123 | { name: '카경', value: 'ka' }, 1124 | { name: '재카경', value: 'ka' }, 1125 | { name: '카구', value: 'ka' }, 1126 | { name: '카기', value: 'ka' }, 1127 | { name: '카단', value: 'ka' }, 1128 | { name: '카담', value: 'ka' }, 1129 | { name: '카명', value: 'ka' }, 1130 | { name: '카불', value: 'ka' }, 1131 | { name: '카소', value: 'ka' }, 1132 | { name: '카임', value: 'ka' }, 1133 | { name: '카정', value: 'ka' }, 1134 | { name: '카합', value: 'ka' }, 1135 | { name: '카기전', value: 'ka' }, 1136 | { name: '카확', value: 'ka' }, 1137 | { name: '크', value: 'sb' }, 1138 | { name: '서', value: 'gb' }, 1139 | { name: '동서', value: 'gb' }, 1140 | { name: '재동서', value: 'gb' }, 1141 | { name: '커', value: 'gb' }, 1142 | { name: '동커', value: 'gb' }, 1143 | { name: '성', value: 'gb' }, 1144 | { name: '성로', value: 'gb' }, 1145 | { name: '성모', value: 'gb' }, 1146 | { name: '성초', value: 'gb' }, 1147 | { name: '저', value: 'gb' }, 1148 | { name: '가단', value: 'cv' }, 1149 | { name: '가소', value: 'cv' }, 1150 | { name: '가합', value: 'cv' }, 1151 | { name: '간회단', value: 'whp' }, 1152 | { name: '간회합', value: 'whp' }, 1153 | { name: '감고', value: 'cr' }, 1154 | { name: '감노', value: 'cr' }, 1155 | { name: '감로', value: 'cr' }, 1156 | { name: '감초', value: 'cr' }, 1157 | { name: '개기', value: 'whp' }, 1158 | { name: '개보', value: 'whp' }, 1159 | { name: '개확', value: 'whp' }, 1160 | { name: '개회', value: 'whp' }, 1161 | { name: '고단', value: 'cr' }, 1162 | { name: '고약', value: 'ym' }, 1163 | { name: '고약전', value: 'wey' }, 1164 | { name: '고정', value: 'cr' }, 1165 | { name: '고합', value: 'cr' }, 1166 | { name: '과', value: 'gw' }, 1167 | { name: '구', value: 'hs' }, 1168 | { name: '구단', value: 'hs' }, 1169 | { name: '구합', value: 'hs' }, 1170 | { name: '국승', value: 'whp' }, 1171 | { name: '국지', value: 'whp' }, 1172 | { name: '나', value: 'cv' }, 1173 | { name: '너', value: 'ks' }, 1174 | { name: '노', value: 'cr' }, 1175 | { name: '느단', value: 'ks' }, 1176 | { name: '느합', value: 'ks' }, 1177 | { name: '동고', value: 'cr' }, 1178 | { name: '동노', value: 'cr' }, 1179 | { name: '동버', value: 'gb' }, 1180 | { name: '동버집', value: 'gb' }, 1181 | { name: '동서', value: 'gb' }, 1182 | { name: '동저', value: 'gb' }, 1183 | { name: '동처', value: 'gb' }, 1184 | { name: '동처집', value: 'gb' }, 1185 | { name: '동초', value: 'cr' }, 1186 | { name: '동커', value: 'gb' }, 1187 | { name: '드', value: 'ks' }, 1188 | { name: '드단', value: 'ks' }, 1189 | { name: '드합', value: 'ks' }, 1190 | { name: '라', value: 'hg' }, 1191 | { name: '로', value: 'cr' }, 1192 | { name: '루', value: 'hg' }, 1193 | { name: '르', value: 'ks' }, 1194 | { name: '머', value: 'cv' }, 1195 | { name: '버', value: 'gb' }, 1196 | { name: '버집', value: 'gb' }, 1197 | { name: '보', value: 'cr' }, 1198 | { name: '보고', value: 'cr' }, 1199 | { name: '보노', value: 'cr' }, 1200 | { name: '보로', value: 'cr' }, 1201 | { name: '보초', value: 'cr' }, 1202 | { name: '브', value: 'hg' }, 1203 | { name: '비단', value: 'et' }, 1204 | { name: '비합', value: 'et' }, 1205 | { name: '서', value: 'gb' }, 1206 | { name: '성', value: 'gb' }, 1207 | { name: '성로', value: 'gb' }, 1208 | { name: '성모', value: 'gb' }, 1209 | { name: '성초', value: 'gb' }, 1210 | { name: '아', value: 'et' }, 1211 | { name: '인', value: 'et' }, 1212 | { name: '인라', value: 'hg' }, 1213 | { name: '인마', value: 'hg' }, 1214 | { name: '인카', value: 'et' }, 1215 | { name: '자', value: 'et' }, 1216 | { name: '재가단', value: 'cv' }, 1217 | { name: '재가소', value: 'cv' }, 1218 | { name: '재가합', value: 'cv' }, 1219 | { name: '재감고', value: 'cr' }, 1220 | { name: '재감노', value: 'cr' }, 1221 | { name: '재고단', value: 'cr' }, 1222 | { name: '재고약', value: 'cr' }, 1223 | { name: '재고정', value: 'cr' }, 1224 | { name: '재고합', value: 'cr' }, 1225 | { name: '재구', value: 'hs' }, 1226 | { name: '재구단', value: 'hs' }, 1227 | { name: '재구합', value: 'hs' }, 1228 | { name: '재나', value: 'cv' }, 1229 | { name: '재너', value: 'ks' }, 1230 | { name: '재노', value: 'cr' }, 1231 | { name: '재느단', value: 'ks' }, 1232 | { name: '재느합', value: 'ks' }, 1233 | { name: '재동버', value: 'gb' }, 1234 | { name: '재동서', value: 'gb' }, 1235 | { name: '재드', value: 'ks' }, 1236 | { name: '재드단', value: 'ks' }, 1237 | { name: '재드합', value: 'ks' }, 1238 | { name: '재라', value: 'hg' }, 1239 | { name: '재루', value: 'hg' }, 1240 | { name: '재르', value: 'ks' }, 1241 | { name: '재머', value: 'cv' }, 1242 | { name: '재버', value: 'gb' }, 1243 | { name: '재브', value: 'hg' }, 1244 | { name: '재아', value: 'et' }, 1245 | { name: '재카기', value: 'et' }, 1246 | { name: '재카경', value: 'ka' }, 1247 | { name: '재카담', value: 'et' }, 1248 | { name: '저', value: 'gb' }, 1249 | { name: '전고', value: 'cr' }, 1250 | { name: '전노', value: 'cr' }, 1251 | { name: '전로', value: 'cr' }, 1252 | { name: '전초', value: 'cr' }, 1253 | { name: '정드', value: 'et' }, 1254 | { name: '정명', value: 'et' }, 1255 | { name: '정브', value: 'hg' }, 1256 | { name: '주', value: 'et' }, 1257 | { name: '준재가단', value: 'cv' }, 1258 | { name: '준재가소', value: 'cv' }, 1259 | { name: '준재가합', value: 'cv' }, 1260 | { name: '준재구', value: 'hs' }, 1261 | { name: '준재나', value: 'cv' }, 1262 | { name: '준재느단', value: 'ks' }, 1263 | { name: '준재느합', value: 'ks' }, 1264 | { name: '준재드단', value: 'ks' }, 1265 | { name: '준재드합', value: 'ks' }, 1266 | { name: '준재르', value: 'ks' }, 1267 | { name: '준재머', value: 'cv' }, 1268 | { name: '즈기', value: 'ka' }, 1269 | { name: '즈단', value: 'ka' }, 1270 | { name: '즈합', value: 'ka' }, 1271 | { name: '차', value: 'dc' }, 1272 | { name: '차전', value: 'wdc' }, 1273 | { name: '책', value: 'et' }, 1274 | { name: '처', value: 'gb' }, 1275 | { name: '처집', value: 'gb' }, 1276 | { name: '초', value: 'cr' }, 1277 | { name: '초기', value: 'cr' }, 1278 | { name: '초보', value: 'cr' }, 1279 | { name: '초사', value: 'cr' }, 1280 | { name: '초적', value: 'cr' }, 1281 | { name: '초치', value: 'cr' }, 1282 | { name: '치고', value: 'cr' }, 1283 | { name: '치노', value: 'cr' }, 1284 | { name: '치로', value: 'cr' }, 1285 | { name: '치초', value: 'cr' }, 1286 | { name: '카', value: 'ka' }, 1287 | { name: '카경', value: 'ka' }, 1288 | { name: '카구', value: 'ka' }, 1289 | { name: '카공', value: 'go' }, 1290 | { name: '카기', value: 'ka' }, 1291 | { name: '카기전', value: 'ka' }, 1292 | { name: '카단', value: 'ka' }, 1293 | { name: '카담', value: 'ka' }, 1294 | { name: '카명', value: 'ka' }, 1295 | { name: '카불', value: 'ka' }, 1296 | { name: '카소', value: 'ka' }, 1297 | { name: '카열', value: 'et' }, 1298 | { name: '카임', value: 'ka' }, 1299 | { name: '카정', value: 'ka' }, 1300 | { name: '카조', value: 'jj' }, 1301 | { name: '카합', value: 'ka' }, 1302 | { name: '카확', value: 'ka' }, 1303 | { name: '커', value: 'gb' }, 1304 | { name: '코', value: 'cr' }, 1305 | { name: '크', value: 'sb' }, 1306 | { name: '타기', value: 'gj' }, 1307 | { name: '타배', value: 'gj' }, 1308 | { name: '타인', value: 'gj' }, 1309 | { name: '타채', value: 'gj' }, 1310 | { name: '푸', value: 'sb' }, 1311 | { name: '푸집', value: 'sb' }, 1312 | { name: '푸초', value: 'sb' }, 1313 | { name: '하기', value: 'whp' }, 1314 | { name: '하단', value: 'whp' }, 1315 | { name: '하면', value: 'whp' }, 1316 | { name: '하합', value: 'whp' }, 1317 | { name: '하확', value: 'whp' }, 1318 | { name: '호', value: 'et' }, 1319 | { name: '호기', value: 'et' }, 1320 | { name: '호명', value: 'et' }, 1321 | { name: '호파', value: 'et' }, 1322 | { name: '호협', value: 'et' }, 1323 | { name: '회기', value: 'whp' }, 1324 | { name: '회단', value: 'whp' }, 1325 | { name: '회합', value: 'whp' }, 1326 | { name: '회확', value: 'whp' }, 1327 | { name: '후감', value: 'ks' }, 1328 | { name: '후개', value: 'ks' }, 1329 | { name: '후기', value: 'ks' }, 1330 | { name: '가단', value: 'cv' }, 1331 | { name: '가합', value: 'cv' }, 1332 | { name: '가소', value: 'cv' }, 1333 | { name: '나', value: 'cv' }, 1334 | { name: '머', value: 'cv' }, 1335 | { name: '재가단', value: 'cv' }, 1336 | { name: '재가합', value: 'cv' }, 1337 | { name: '재가소', value: 'cv' }, 1338 | { name: '재나', value: 'cv' }, 1339 | { name: '재머', value: 'cv' }, 1340 | { name: '준재가단', value: 'cv' }, 1341 | { name: '준재가합', value: 'cv' }, 1342 | { name: '준재가소', value: 'cv' }, 1343 | { name: '준재나', value: 'cv' }, 1344 | { name: '준재머', value: 'cv' }, 1345 | { name: '구단', value: 'hs' }, 1346 | { name: '구합', value: 'hs' }, 1347 | { name: '재구단', value: 'hs' }, 1348 | { name: '재구합', value: 'hs' }, 1349 | { name: '준재구', value: 'hs' }, 1350 | { name: '구', value: 'hs' }, 1351 | { name: '재구', value: 'hs' }, 1352 | { name: '타기', value: 'gj' }, 1353 | { name: '타배', value: 'gj' }, 1354 | { name: '타인', value: 'gj' }, 1355 | { name: '타채', value: 'gj' }, 1356 | { name: '고단', value: 'cr' }, 1357 | { name: '고합', value: 'cr' }, 1358 | { name: '고정', value: 'cr' }, 1359 | { name: '감고', value: 'cr' }, 1360 | { name: '동고', value: 'cr' }, 1361 | { name: '노', value: 'cr' }, 1362 | { name: '감노', value: 'cr' }, 1363 | { name: '동노', value: 'cr' }, 1364 | { name: '보고', value: 'cr' }, 1365 | { name: '보노', value: 'cr' }, 1366 | { name: '보로', value: 'cr' }, 1367 | { name: '보초', value: 'cr' }, 1368 | { name: '전고', value: 'cr' }, 1369 | { name: '전노', value: 'cr' }, 1370 | { name: '전로', value: 'cr' }, 1371 | { name: '전초', value: 'cr' }, 1372 | { name: '재고단', value: 'cr' }, 1373 | { name: '재고약', value: 'cr' }, 1374 | { name: '재고정', value: 'cr' }, 1375 | { name: '재고합', value: 'cr' }, 1376 | { name: '재감고', value: 'cr' }, 1377 | { name: '재노', value: 'cr' }, 1378 | { name: '재감노', value: 'cr' }, 1379 | { name: '초적', value: 'cr' }, 1380 | { name: '초보', value: 'cr' }, 1381 | { name: '초기', value: 'cr' }, 1382 | { name: '초사', value: 'cr' }, 1383 | { name: '초치', value: 'cr' }, 1384 | { name: '치고', value: 'cr' }, 1385 | { name: '치노', value: 'cr' }, 1386 | { name: '치로', value: 'cr' }, 1387 | { name: '치초', value: 'cr' }, 1388 | { name: '감초', value: 'cr' }, 1389 | { name: '로', value: 'cr' }, 1390 | { name: '감로', value: 'cr' }, 1391 | { name: '보', value: 'cr' }, 1392 | { name: '코', value: 'cr' }, 1393 | { name: '초', value: 'cr' }, 1394 | { name: '동초', value: 'cr' }, 1395 | { name: '고약', value: 'ym' }, 1396 | { name: '고약전', value: 'wey' }, 1397 | { name: '드단', value: 'ks' }, 1398 | { name: '드합', value: 'ks' }, 1399 | { name: '너', value: 'ks' }, 1400 | { name: '느단', value: 'ks' }, 1401 | { name: '느합', value: 'ks' }, 1402 | { name: '르', value: 'ks' }, 1403 | { name: '재드단', value: 'ks' }, 1404 | { name: '재드합', value: 'ks' }, 1405 | { name: '재너', value: 'ks' }, 1406 | { name: '재느단', value: 'ks' }, 1407 | { name: '재느합', value: 'ks' }, 1408 | { name: '재르', value: 'ks' }, 1409 | { name: '준재드단', value: 'ks' }, 1410 | { name: '준재드합', value: 'ks' }, 1411 | { name: '준재느단', value: 'ks' }, 1412 | { name: '준재느합', value: 'ks' }, 1413 | { name: '준재르', value: 'ks' }, 1414 | { name: '드', value: 'ks' }, 1415 | { name: '재드', value: 'ks' }, 1416 | { name: '후감', value: 'ks' }, 1417 | { name: '후개', value: 'ks' }, 1418 | { name: '후기', value: 'ks' }, 1419 | { name: '차', value: 'dc' }, 1420 | { name: '차전', value: 'wdc' }, 1421 | { name: '카공', value: 'go' }, 1422 | { name: '라', value: 'hg' }, 1423 | { name: '루', value: 'hg' }, 1424 | { name: '브', value: 'hg' }, 1425 | { name: '인라', value: 'hg' }, 1426 | { name: '인마', value: 'hg' }, 1427 | { name: '재라', value: 'hg' }, 1428 | { name: '재루', value: 'hg' }, 1429 | { name: '재브', value: 'hg' }, 1430 | { name: '정브', value: 'hg' }, 1431 | { name: '과', value: 'gw' }, 1432 | { name: '카조', value: 'jj' }, 1433 | { name: '개회', value: 'whp' }, 1434 | { name: '개확', value: 'whp' }, 1435 | { name: '개보', value: 'whp' }, 1436 | { name: '개기', value: 'whp' }, 1437 | { name: '간회단', value: 'whp' }, 1438 | { name: '회단', value: 'whp' }, 1439 | { name: '간회합', value: 'whp' }, 1440 | { name: '회합', value: 'whp' }, 1441 | { name: '회확', value: 'whp' }, 1442 | { name: '회기', value: 'whp' }, 1443 | { name: '하확', value: 'whp' }, 1444 | { name: '하기', value: 'whp' }, 1445 | { name: '하단', value: 'whp' }, 1446 | { name: '하합', value: 'whp' }, 1447 | { name: '하면', value: 'whp' }, 1448 | { name: '국승', value: 'whp' }, 1449 | { name: '국지', value: 'whp' }, 1450 | { name: '비단', value: 'et' }, 1451 | { name: '비합', value: 'et' }, 1452 | { name: '아', value: 'et' }, 1453 | { name: '인', value: 'et' }, 1454 | { name: '인카', value: 'et' }, 1455 | { name: '책', value: 'et' }, 1456 | { name: '호', value: 'et' }, 1457 | { name: '호기', value: 'et' }, 1458 | { name: '호명', value: 'et' }, 1459 | { name: '호파', value: 'et' }, 1460 | { name: '호협', value: 'et' }, 1461 | { name: '자', value: 'et' }, 1462 | { name: '재아', value: 'et' }, 1463 | { name: '재카기', value: 'et' }, 1464 | { name: '재카담', value: 'et' }, 1465 | { name: '정드', value: 'et' }, 1466 | { name: '정명', value: 'et' }, 1467 | { name: '주', value: 'et' }, 1468 | { name: '카열', value: 'et' }, 1469 | { name: '크', value: 'sb' }, 1470 | { name: '푸', value: 'sb' }, 1471 | { name: '푸집', value: 'sb' }, 1472 | { name: '푸초', value: 'sb' }, 1473 | { name: '버', value: 'gb' }, 1474 | { name: '재버', value: 'gb' }, 1475 | { name: '버집', value: 'gb' }, 1476 | { name: '동버집', value: 'gb' }, 1477 | { name: '동버', value: 'gb' }, 1478 | { name: '재동버', value: 'gb' }, 1479 | { name: '서', value: 'gb' }, 1480 | { name: '동서', value: 'gb' }, 1481 | { name: '재동서', value: 'gb' }, 1482 | { name: '저', value: 'gb' }, 1483 | { name: '동저', value: 'gb' }, 1484 | { name: '처', value: 'gb' }, 1485 | { name: '처집', value: 'gb' }, 1486 | { name: '동처', value: 'gb' }, 1487 | { name: '동처집', value: 'gb' }, 1488 | { name: '커', value: 'gb' }, 1489 | { name: '동커', value: 'gb' }, 1490 | { name: '성', value: 'gb' }, 1491 | { name: '성로', value: 'gb' }, 1492 | { name: '성모', value: 'gb' }, 1493 | { name: '성초', value: 'gb' }, 1494 | { name: '즈기', value: 'ka' }, 1495 | { name: '즈단', value: 'ka' }, 1496 | { name: '즈합', value: 'ka' }, 1497 | { name: '카', value: 'ka' }, 1498 | { name: '카경', value: 'ka' }, 1499 | { name: '재카경', value: 'ka' }, 1500 | { name: '카구', value: 'ka' }, 1501 | { name: '카기', value: 'ka' }, 1502 | { name: '카단', value: 'ka' }, 1503 | { name: '카담', value: 'ka' }, 1504 | { name: '카명', value: 'ka' }, 1505 | { name: '카불', value: 'ka' }, 1506 | { name: '카소', value: 'ka' }, 1507 | { name: '카임', value: 'ka' }, 1508 | { name: '카정', value: 'ka' }, 1509 | { name: '카합', value: 'ka' }, 1510 | { name: '카기전', value: 'ka' }, 1511 | { name: '카확', value: 'ka' }, 1512 | { name: '가단', value: 'cv' }, 1513 | { name: '가소', value: 'cv' }, 1514 | { name: '가합', value: 'cv' }, 1515 | { name: '간회단', value: 'whp' }, 1516 | { name: '간회합', value: 'whp' }, 1517 | { name: '감고', value: 'cr' }, 1518 | { name: '감초', value: 'cr' }, 1519 | { name: '개기', value: 'whp' }, 1520 | { name: '개보', value: 'whp' }, 1521 | { name: '개회', value: 'whp' }, 1522 | { name: '개확', value: 'whp' }, 1523 | { name: '고단', value: 'cr' }, 1524 | { name: '고약', value: 'ym' }, 1525 | { name: '고약전', value: 'wey' }, 1526 | { name: '고정', value: 'cr' }, 1527 | { name: '고합', value: 'cr' }, 1528 | { name: '과', value: 'gw' }, 1529 | { name: '구단', value: 'hs' }, 1530 | { name: '구합', value: 'hs' }, 1531 | { name: '국승', value: 'whp' }, 1532 | { name: '국지', value: 'whp' }, 1533 | { name: '나', value: 'cv' }, 1534 | { name: '너', value: 'ks' }, 1535 | { name: '노', value: 'cr' }, 1536 | { name: '느단', value: 'ks' }, 1537 | { name: '느합', value: 'ks' }, 1538 | { name: '동고', value: 'cr' }, 1539 | { name: '동노', value: 'cr' }, 1540 | { name: '동버', value: 'gb' }, 1541 | { name: '동버집', value: 'gb' }, 1542 | { name: '동서', value: 'gb' }, 1543 | { name: '동저', value: 'gb' }, 1544 | { name: '동처', value: 'gb' }, 1545 | { name: '동처집', value: 'gb' }, 1546 | { name: '동초', value: 'cr' }, 1547 | { name: '동커', value: 'gb' }, 1548 | { name: '드', value: 'ks' }, 1549 | { name: '드단', value: 'ks' }, 1550 | { name: '드합', value: 'ks' }, 1551 | { name: '라', value: 'hg' }, 1552 | { name: '로', value: 'cr' }, 1553 | { name: '루', value: 'hg' }, 1554 | { name: '르', value: 'ks' }, 1555 | { name: '머', value: 'cv' }, 1556 | { name: '버', value: 'gb' }, 1557 | { name: '버집', value: 'gb' }, 1558 | { name: '보', value: 'cr' }, 1559 | { name: '보고', value: 'cr' }, 1560 | { name: '보노', value: 'cr' }, 1561 | { name: '보로', value: 'cr' }, 1562 | { name: '보초', value: 'cr' }, 1563 | { name: '브', value: 'hg' }, 1564 | { name: '비단', value: 'et' }, 1565 | { name: '비합', value: 'et' }, 1566 | { name: '서', value: 'gb' }, 1567 | { name: '성', value: 'gb' }, 1568 | { name: '성로', value: 'gb' }, 1569 | { name: '성모', value: 'gb' }, 1570 | { name: '성초', value: 'gb' }, 1571 | { name: '아', value: 'et' }, 1572 | { name: '인', value: 'et' }, 1573 | { name: '인라', value: 'hg' }, 1574 | { name: '인마', value: 'hg' }, 1575 | { name: '인카', value: 'et' }, 1576 | { name: '자', value: 'et' }, 1577 | { name: '재가단', value: 'cv' }, 1578 | { name: '재가소', value: 'cv' }, 1579 | { name: '재가합', value: 'cv' }, 1580 | { name: '재감고', value: 'cr' }, 1581 | { name: '재고단', value: 'cr' }, 1582 | { name: '재고약', value: 'cr' }, 1583 | { name: '재고정', value: 'cr' }, 1584 | { name: '재고합', value: 'cr' }, 1585 | { name: '재구', value: 'hs' }, 1586 | { name: '재구단', value: 'hs' }, 1587 | { name: '재구합', value: 'hs' }, 1588 | { name: '재나', value: 'cv' }, 1589 | { name: '재너', value: 'ks' }, 1590 | { name: '재노', value: 'cr' }, 1591 | { name: '재느단', value: 'ks' }, 1592 | { name: '재느합', value: 'ks' }, 1593 | { name: '재동버', value: 'gb' }, 1594 | { name: '재동서', value: 'gb' }, 1595 | { name: '재드', value: 'ks' }, 1596 | { name: '재드단', value: 'ks' }, 1597 | { name: '재드합', value: 'ks' }, 1598 | { name: '재라', value: 'hg' }, 1599 | { name: '재루', value: 'hg' }, 1600 | { name: '재머', value: 'cv' }, 1601 | { name: '재버', value: 'gb' }, 1602 | { name: '재브', value: 'hg' }, 1603 | { name: '재아', value: 'et' }, 1604 | { name: '재카기', value: 'et' }, 1605 | { name: '재카경', value: 'ka' }, 1606 | { name: '재카담', value: 'et' }, 1607 | { name: '저', value: 'gb' }, 1608 | { name: '전고', value: 'cr' }, 1609 | { name: '전노', value: 'cr' }, 1610 | { name: '전로', value: 'cr' }, 1611 | { name: '전초', value: 'cr' }, 1612 | { name: '정드', value: 'et' }, 1613 | { name: '정명', value: 'et' }, 1614 | { name: '정브', value: 'hg' }, 1615 | { name: '주', value: 'et' }, 1616 | { name: '준재가단', value: 'cv' }, 1617 | { name: '준재가소', value: 'cv' }, 1618 | { name: '준재가합', value: 'cv' }, 1619 | { name: '준재구', value: 'hs' }, 1620 | { name: '준재나', value: 'cv' }, 1621 | { name: '준재느단', value: 'ks' }, 1622 | { name: '준재느합', value: 'ks' }, 1623 | { name: '준재드단', value: 'ks' }, 1624 | { name: '준재드합', value: 'ks' }, 1625 | { name: '준재머', value: 'cv' }, 1626 | { name: '즈기', value: 'ka' }, 1627 | { name: '즈단', value: 'ka' }, 1628 | { name: '즈합', value: 'ka' }, 1629 | { name: '책', value: 'et' }, 1630 | { name: '차', value: 'dc' }, 1631 | { name: '차전', value: 'wdc' }, 1632 | { name: '처', value: 'gb' }, 1633 | { name: '처집', value: 'gb' }, 1634 | { name: '초', value: 'cr' }, 1635 | { name: '초기', value: 'cr' }, 1636 | { name: '초보', value: 'cr' }, 1637 | { name: '초사', value: 'cr' }, 1638 | { name: '초적', value: 'cr' }, 1639 | { name: '초치', value: 'cr' }, 1640 | { name: '치고', value: 'cr' }, 1641 | { name: '치초', value: 'cr' }, 1642 | { name: '카', value: 'ka' }, 1643 | { name: '카경', value: 'ka' }, 1644 | { name: '카구', value: 'ka' }, 1645 | { name: '카공', value: 'go' }, 1646 | { name: '카기', value: 'ka' }, 1647 | { name: '카기전', value: 'ka' }, 1648 | { name: '카단', value: 'ka' }, 1649 | { name: '카담', value: 'ka' }, 1650 | { name: '카명', value: 'ka' }, 1651 | { name: '카불', value: 'ka' }, 1652 | { name: '카소', value: 'ka' }, 1653 | { name: '카열', value: 'et' }, 1654 | { name: '카임', value: 'ka' }, 1655 | { name: '카정', value: 'ka' }, 1656 | { name: '카조', value: 'jj' }, 1657 | { name: '카합', value: 'ka' }, 1658 | { name: '카확', value: 'ka' }, 1659 | { name: '커', value: 'gb' }, 1660 | { name: '코', value: 'cr' }, 1661 | { name: '크', value: 'sb' }, 1662 | { name: '타기', value: 'gj' }, 1663 | { name: '타배', value: 'gj' }, 1664 | { name: '타인', value: 'gj' }, 1665 | { name: '타채', value: 'gj' }, 1666 | { name: '푸', value: 'sb' }, 1667 | { name: '푸집', value: 'sb' }, 1668 | { name: '푸초', value: 'sb' }, 1669 | { name: '하기', value: 'whp' }, 1670 | { name: '하단', value: 'whp' }, 1671 | { name: '하면', value: 'whp' }, 1672 | { name: '하합', value: 'whp' }, 1673 | { name: '하확', value: 'whp' }, 1674 | { name: '호', value: 'et' }, 1675 | { name: '호기', value: 'et' }, 1676 | { name: '호명', value: 'et' }, 1677 | { name: '호파', value: 'et' }, 1678 | { name: '호협', value: 'et' }, 1679 | { name: '회기', value: 'whp' }, 1680 | { name: '회단', value: 'whp' }, 1681 | { name: '회합', value: 'whp' }, 1682 | { name: '회확', value: 'whp' }, 1683 | { name: '후감', value: 'ks' }, 1684 | { name: '후개', value: 'ks' }, 1685 | { name: '후기', value: 'ks' }, 1686 | { name: '가단', value: 'cv' }, 1687 | { name: '가합', value: 'cv' }, 1688 | { name: '가소', value: 'cv' }, 1689 | { name: '나', value: 'cv' }, 1690 | { name: '로', value: 'cr' }, 1691 | { name: '머', value: 'cv' }, 1692 | { name: '재가단', value: 'cv' }, 1693 | { name: '재가합', value: 'cv' }, 1694 | { name: '재가소', value: 'cv' }, 1695 | { name: '재나', value: 'cv' }, 1696 | { name: '재머', value: 'cv' }, 1697 | { name: '준재가단', value: 'cv' }, 1698 | { name: '준재가합', value: 'cv' }, 1699 | { name: '준재가소', value: 'cv' }, 1700 | { name: '준재나', value: 'cv' }, 1701 | { name: '준재머', value: 'cv' }, 1702 | { name: '구단', value: 'hs' }, 1703 | { name: '구합', value: 'hs' }, 1704 | { name: '재구', value: 'hs' }, 1705 | { name: '재구단', value: 'hs' }, 1706 | { name: '재구합', value: 'hs' }, 1707 | { name: '준재구', value: 'hs' }, 1708 | { name: '타기', value: 'gj' }, 1709 | { name: '타배', value: 'gj' }, 1710 | { name: '타인', value: 'gj' }, 1711 | { name: '타채', value: 'gj' }, 1712 | { name: '고단', value: 'cr' }, 1713 | { name: '고합', value: 'cr' }, 1714 | { name: '고정', value: 'cr' }, 1715 | { name: '감고', value: 'cr' }, 1716 | { name: '동고', value: 'cr' }, 1717 | { name: '노', value: 'cr' }, 1718 | { name: '동노', value: 'cr' }, 1719 | { name: '보', value: 'cr' }, 1720 | { name: '보고', value: 'cr' }, 1721 | { name: '보노', value: 'cr' }, 1722 | { name: '보로', value: 'cr' }, 1723 | { name: '보초', value: 'cr' }, 1724 | { name: '전고', value: 'cr' }, 1725 | { name: '전노', value: 'cr' }, 1726 | { name: '전로', value: 'cr' }, 1727 | { name: '전초', value: 'cr' }, 1728 | { name: '재고단', value: 'cr' }, 1729 | { name: '재고약', value: 'cr' }, 1730 | { name: '재고정', value: 'cr' }, 1731 | { name: '재고합', value: 'cr' }, 1732 | { name: '재감고', value: 'cr' }, 1733 | { name: '재노', value: 'cr' }, 1734 | { name: '초적', value: 'cr' }, 1735 | { name: '초보', value: 'cr' }, 1736 | { name: '초기', value: 'cr' }, 1737 | { name: '초사', value: 'cr' }, 1738 | { name: '감초', value: 'cr' }, 1739 | { name: '코', value: 'cr' }, 1740 | { name: '초', value: 'cr' }, 1741 | { name: '동초', value: 'cr' }, 1742 | { name: '초치', value: 'cr' }, 1743 | { name: '치고', value: 'cr' }, 1744 | { name: '치초', value: 'cr' }, 1745 | { name: '고약', value: 'ym' }, 1746 | { name: '고약전', value: 'wey' }, 1747 | { name: '드단', value: 'ks' }, 1748 | { name: '드합', value: 'ks' }, 1749 | { name: '너', value: 'ks' }, 1750 | { name: '느단', value: 'ks' }, 1751 | { name: '느합', value: 'ks' }, 1752 | { name: '드', value: 'ks' }, 1753 | { name: '르', value: 'ks' }, 1754 | { name: '재드단', value: 'ks' }, 1755 | { name: '재드합', value: 'ks' }, 1756 | { name: '재너', value: 'ks' }, 1757 | { name: '재느단', value: 'ks' }, 1758 | { name: '재느합', value: 'ks' }, 1759 | { name: '준재드단', value: 'ks' }, 1760 | { name: '준재드합', value: 'ks' }, 1761 | { name: '준재느단', value: 'ks' }, 1762 | { name: '준재느합', value: 'ks' }, 1763 | { name: '재드', value: 'ks' }, 1764 | { name: '후감', value: 'ks' }, 1765 | { name: '후개', value: 'ks' }, 1766 | { name: '후기', value: 'ks' }, 1767 | { name: '차', value: 'dc' }, 1768 | { name: '차전', value: 'wdc' }, 1769 | { name: '카공', value: 'go' }, 1770 | { name: '라', value: 'hg' }, 1771 | { name: '루', value: 'hg' }, 1772 | { name: '브', value: 'hg' }, 1773 | { name: '인라', value: 'hg' }, 1774 | { name: '인마', value: 'hg' }, 1775 | { name: '재라', value: 'hg' }, 1776 | { name: '재루', value: 'hg' }, 1777 | { name: '재브', value: 'hg' }, 1778 | { name: '정브', value: 'hg' }, 1779 | { name: '과', value: 'gw' }, 1780 | { name: '카조', value: 'jj' }, 1781 | { name: '개회', value: 'whp' }, 1782 | { name: '개확', value: 'whp' }, 1783 | { name: '개보', value: 'whp' }, 1784 | { name: '개기', value: 'whp' }, 1785 | { name: '간회단', value: 'whp' }, 1786 | { name: '회단', value: 'whp' }, 1787 | { name: '간회합', value: 'whp' }, 1788 | { name: '회합', value: 'whp' }, 1789 | { name: '회확', value: 'whp' }, 1790 | { name: '회기', value: 'whp' }, 1791 | { name: '하확', value: 'whp' }, 1792 | { name: '하기', value: 'whp' }, 1793 | { name: '하단', value: 'whp' }, 1794 | { name: '하합', value: 'whp' }, 1795 | { name: '하면', value: 'whp' }, 1796 | { name: '국승', value: 'whp' }, 1797 | { name: '국지', value: 'whp' }, 1798 | { name: '비단', value: 'et' }, 1799 | { name: '비합', value: 'et' }, 1800 | { name: '아', value: 'et' }, 1801 | { name: '인', value: 'et' }, 1802 | { name: '인카', value: 'et' }, 1803 | { name: '책', value: 'et' }, 1804 | { name: '호', value: 'et' }, 1805 | { name: '호기', value: 'et' }, 1806 | { name: '호명', value: 'et' }, 1807 | { name: '호파', value: 'et' }, 1808 | { name: '호협', value: 'et' }, 1809 | { name: '자', value: 'et' }, 1810 | { name: '재아', value: 'et' }, 1811 | { name: '재카기', value: 'et' }, 1812 | { name: '재카담', value: 'et' }, 1813 | { name: '정드', value: 'et' }, 1814 | { name: '정명', value: 'et' }, 1815 | { name: '주', value: 'et' }, 1816 | { name: '카열', value: 'et' }, 1817 | { name: '크', value: 'sb' }, 1818 | { name: '푸', value: 'sb' }, 1819 | { name: '푸집', value: 'sb' }, 1820 | { name: '푸초', value: 'sb' }, 1821 | { name: '버', value: 'gb' }, 1822 | { name: '재버', value: 'gb' }, 1823 | { name: '버집', value: 'gb' }, 1824 | { name: '동버집', value: 'gb' }, 1825 | { name: '동버', value: 'gb' }, 1826 | { name: '재동버', value: 'gb' }, 1827 | { name: '서', value: 'gb' }, 1828 | { name: '동서', value: 'gb' }, 1829 | { name: '재동서', value: 'gb' }, 1830 | { name: '저', value: 'gb' }, 1831 | { name: '동저', value: 'gb' }, 1832 | { name: '처', value: 'gb' }, 1833 | { name: '처집', value: 'gb' }, 1834 | { name: '동처', value: 'gb' }, 1835 | { name: '동처집', value: 'gb' }, 1836 | { name: '커', value: 'gb' }, 1837 | { name: '동커', value: 'gb' }, 1838 | { name: '성', value: 'gb' }, 1839 | { name: '성로', value: 'gb' }, 1840 | { name: '성모', value: 'gb' }, 1841 | { name: '성초', value: 'gb' }, 1842 | { name: '즈기', value: 'ka' }, 1843 | { name: '즈단', value: 'ka' }, 1844 | { name: '즈합', value: 'ka' }, 1845 | { name: '카', value: 'ka' }, 1846 | { name: '카경', value: 'ka' }, 1847 | { name: '재카경', value: 'ka' }, 1848 | { name: '카구', value: 'ka' }, 1849 | { name: '카기', value: 'ka' }, 1850 | { name: '카단', value: 'ka' }, 1851 | { name: '카담', value: 'ka' }, 1852 | { name: '카명', value: 'ka' }, 1853 | { name: '카불', value: 'ka' }, 1854 | { name: '카소', value: 'ka' }, 1855 | { name: '카임', value: 'ka' }, 1856 | { name: '카정', value: 'ka' }, 1857 | { name: '카합', value: 'ka' }, 1858 | { name: '카기전', value: 'ka' }, 1859 | { name: '카확', value: 'ka' }, 1860 | { name: '가단', value: 'cv' }, 1861 | { name: '가소', value: 'cv' }, 1862 | { name: '가합', value: 'cv' }, 1863 | { name: '감고', value: 'cr' }, 1864 | { name: '감노', value: 'cr' }, 1865 | { name: '감로', value: 'cr' }, 1866 | { name: '감초', value: 'cr' }, 1867 | { name: '개기', value: 'whp' }, 1868 | { name: '개보', value: 'whp' }, 1869 | { name: '개확', value: 'whp' }, 1870 | { name: '개회', value: 'whp' }, 1871 | { name: '고단', value: 'cr' }, 1872 | { name: '고약', value: 'ym' }, 1873 | { name: '고약전', value: 'wey' }, 1874 | { name: '고정', value: 'cr' }, 1875 | { name: '고합', value: 'cr' }, 1876 | { name: '과', value: 'gw' }, 1877 | { name: '구단', value: 'hs' }, 1878 | { name: '구합', value: 'hs' }, 1879 | { name: '나', value: 'cv' }, 1880 | { name: '너', value: 'ks' }, 1881 | { name: '노', value: 'cr' }, 1882 | { name: '느단', value: 'ks' }, 1883 | { name: '느합', value: 'ks' }, 1884 | { name: '동고', value: 'cr' }, 1885 | { name: '동노', value: 'cr' }, 1886 | { name: '동버', value: 'gb' }, 1887 | { name: '동버집', value: 'gb' }, 1888 | { name: '동서', value: 'gb' }, 1889 | { name: '동저', value: 'gb' }, 1890 | { name: '동처', value: 'gb' }, 1891 | { name: '동처집', value: 'gb' }, 1892 | { name: '동초', value: 'cr' }, 1893 | { name: '동커', value: 'gb' }, 1894 | { name: '드', value: 'ks' }, 1895 | { name: '드단', value: 'ks' }, 1896 | { name: '드합', value: 'ks' }, 1897 | { name: '라', value: 'hg' }, 1898 | { name: '로', value: 'cr' }, 1899 | { name: '루', value: 'hg' }, 1900 | { name: '르', value: 'ks' }, 1901 | { name: '머', value: 'cv' }, 1902 | { name: '버', value: 'gb' }, 1903 | { name: '버집', value: 'gb' }, 1904 | { name: '보', value: 'cr' }, 1905 | { name: '보고', value: 'cr' }, 1906 | { name: '보노', value: 'cr' }, 1907 | { name: '보로', value: 'cr' }, 1908 | { name: '보초', value: 'cr' }, 1909 | { name: '브', value: 'hg' }, 1910 | { name: '비단', value: 'et' }, 1911 | { name: '비합', value: 'et' }, 1912 | { name: '서', value: 'gb' }, 1913 | { name: '성', value: 'gb' }, 1914 | { name: '성로', value: 'gb' }, 1915 | { name: '성모', value: 'gb' }, 1916 | { name: '성초', value: 'gb' }, 1917 | { name: '아', value: 'et' }, 1918 | { name: '인', value: 'et' }, 1919 | { name: '인라', value: 'hg' }, 1920 | { name: '인마', value: 'hg' }, 1921 | { name: '인카', value: 'et' }, 1922 | { name: '자', value: 'et' }, 1923 | { name: '재가단', value: 'cv' }, 1924 | { name: '재가소', value: 'cv' }, 1925 | { name: '재가합', value: 'cv' }, 1926 | { name: '재감고', value: 'cr' }, 1927 | { name: '재감노', value: 'cr' }, 1928 | { name: '재고단', value: 'cr' }, 1929 | { name: '재고약', value: 'cr' }, 1930 | { name: '재고정', value: 'cr' }, 1931 | { name: '재고합', value: 'cr' }, 1932 | { name: '재구단', value: 'hs' }, 1933 | { name: '재구합', value: 'hs' }, 1934 | { name: '재나', value: 'cv' }, 1935 | { name: '재너', value: 'ks' }, 1936 | { name: '재노', value: 'cr' }, 1937 | { name: '재느단', value: 'ks' }, 1938 | { name: '재느합', value: 'ks' }, 1939 | { name: '재동버', value: 'gb' }, 1940 | { name: '재동서', value: 'gb' }, 1941 | { name: '재드', value: 'ks' }, 1942 | { name: '재드단', value: 'ks' }, 1943 | { name: '재드합', value: 'ks' }, 1944 | { name: '재라', value: 'hg' }, 1945 | { name: '재루', value: 'hg' }, 1946 | { name: '재르', value: 'ks' }, 1947 | { name: '재머', value: 'cv' }, 1948 | { name: '재버', value: 'gb' }, 1949 | { name: '재브', value: 'hg' }, 1950 | { name: '재아', value: 'et' }, 1951 | { name: '재카기', value: 'et' }, 1952 | { name: '재카경', value: 'ka' }, 1953 | { name: '재카담', value: 'et' }, 1954 | { name: '저', value: 'gb' }, 1955 | { name: '전고', value: 'cr' }, 1956 | { name: '전노', value: 'cr' }, 1957 | { name: '전로', value: 'cr' }, 1958 | { name: '전초', value: 'cr' }, 1959 | { name: '정드', value: 'et' }, 1960 | { name: '정명', value: 'et' }, 1961 | { name: '정브', value: 'hg' }, 1962 | { name: '주', value: 'et' }, 1963 | { name: '준재가단', value: 'cv' }, 1964 | { name: '준재가소', value: 'cv' }, 1965 | { name: '준재가합', value: 'cv' }, 1966 | { name: '준재나', value: 'cv' }, 1967 | { name: '준재느단', value: 'ks' }, 1968 | { name: '준재느합', value: 'ks' }, 1969 | { name: '준재드단', value: 'ks' }, 1970 | { name: '준재드합', value: 'ks' }, 1971 | { name: '준재르', value: 'ks' }, 1972 | { name: '준재머', value: 'cv' }, 1973 | { name: '즈기', value: 'ka' }, 1974 | { name: '즈단', value: 'ka' }, 1975 | { name: '즈합', value: 'ka' }, 1976 | { name: '책', value: 'et' }, 1977 | { name: '차', value: 'dc' }, 1978 | { name: '차전', value: 'wdc' }, 1979 | { name: '처', value: 'gb' }, 1980 | { name: '처집', value: 'gb' }, 1981 | { name: '초', value: 'cr' }, 1982 | { name: '초기', value: 'cr' }, 1983 | { name: '초보', value: 'cr' }, 1984 | { name: '초사', value: 'cr' }, 1985 | { name: '초적', value: 'cr' }, 1986 | { name: '초치', value: 'cr' }, 1987 | { name: '치고', value: 'cr' }, 1988 | { name: '치노', value: 'cr' }, 1989 | { name: '치로', value: 'cr' }, 1990 | { name: '치초', value: 'cr' }, 1991 | { name: '카', value: 'ka' }, 1992 | { name: '카경', value: 'ka' }, 1993 | { name: '카구', value: 'ka' }, 1994 | { name: '카공', value: 'go' }, 1995 | { name: '카기', value: 'ka' }, 1996 | { name: '카기전', value: 'ka' }, 1997 | { name: '카단', value: 'ka' }, 1998 | { name: '카담', value: 'ka' }, 1999 | { name: '카명', value: 'ka' }, 2000 | { name: '카불', value: 'ka' }, 2001 | { name: '카소', value: 'ka' }, 2002 | { name: '카열', value: 'et' }, 2003 | { name: '카임', value: 'ka' }, 2004 | { name: '카정', value: 'ka' }, 2005 | { name: '카조', value: 'jj' }, 2006 | { name: '카합', value: 'ka' }, 2007 | { name: '카확', value: 'ka' }, 2008 | { name: '커', value: 'gb' }, 2009 | { name: '코', value: 'cr' }, 2010 | { name: '타기', value: 'gj' }, 2011 | { name: '타배', value: 'gj' }, 2012 | { name: '타인', value: 'gj' }, 2013 | { name: '타채', value: 'gj' }, 2014 | { name: '하단', value: 'whp' }, 2015 | { name: '하면', value: 'whp' }, 2016 | { name: '호', value: 'et' }, 2017 | { name: '호기', value: 'et' }, 2018 | { name: '호명', value: 'et' }, 2019 | { name: '호파', value: 'et' }, 2020 | { name: '호협', value: 'et' }, 2021 | { name: '후감', value: 'ks' }, 2022 | { name: '후개', value: 'ks' }, 2023 | { name: '후기', value: 'ks' }, 2024 | { name: '가단', value: 'cv' }, 2025 | { name: '가합', value: 'cv' }, 2026 | { name: '가소', value: 'cv' }, 2027 | { name: '나', value: 'cv' }, 2028 | { name: '머', value: 'cv' }, 2029 | { name: '재가단', value: 'cv' }, 2030 | { name: '재가합', value: 'cv' }, 2031 | { name: '재가소', value: 'cv' }, 2032 | { name: '재나', value: 'cv' }, 2033 | { name: '재머', value: 'cv' }, 2034 | { name: '준재가단', value: 'cv' }, 2035 | { name: '준재가합', value: 'cv' }, 2036 | { name: '준재가소', value: 'cv' }, 2037 | { name: '준재나', value: 'cv' }, 2038 | { name: '준재머', value: 'cv' }, 2039 | { name: '구단', value: 'hs' }, 2040 | { name: '구합', value: 'hs' }, 2041 | { name: '재구단', value: 'hs' }, 2042 | { name: '재구합', value: 'hs' }, 2043 | { name: '타기', value: 'gj' }, 2044 | { name: '타배', value: 'gj' }, 2045 | { name: '타인', value: 'gj' }, 2046 | { name: '타채', value: 'gj' }, 2047 | { name: '고단', value: 'cr' }, 2048 | { name: '고합', value: 'cr' }, 2049 | { name: '고정', value: 'cr' }, 2050 | { name: '감고', value: 'cr' }, 2051 | { name: '동고', value: 'cr' }, 2052 | { name: '노', value: 'cr' }, 2053 | { name: '감노', value: 'cr' }, 2054 | { name: '동노', value: 'cr' }, 2055 | { name: '보고', value: 'cr' }, 2056 | { name: '보노', value: 'cr' }, 2057 | { name: '보로', value: 'cr' }, 2058 | { name: '보초', value: 'cr' }, 2059 | { name: '전고', value: 'cr' }, 2060 | { name: '전노', value: 'cr' }, 2061 | { name: '전로', value: 'cr' }, 2062 | { name: '전초', value: 'cr' }, 2063 | { name: '재고단', value: 'cr' }, 2064 | { name: '재고약', value: 'cr' }, 2065 | { name: '재고정', value: 'cr' }, 2066 | { name: '재고합', value: 'cr' }, 2067 | { name: '재감고', value: 'cr' }, 2068 | { name: '재노', value: 'cr' }, 2069 | { name: '재감노', value: 'cr' }, 2070 | { name: '초적', value: 'cr' }, 2071 | { name: '초보', value: 'cr' }, 2072 | { name: '초기', value: 'cr' }, 2073 | { name: '초사', value: 'cr' }, 2074 | { name: '감초', value: 'cr' }, 2075 | { name: '로', value: 'cr' }, 2076 | { name: '감로', value: 'cr' }, 2077 | { name: '보', value: 'cr' }, 2078 | { name: '코', value: 'cr' }, 2079 | { name: '초', value: 'cr' }, 2080 | { name: '동초', value: 'cr' }, 2081 | { name: '초치', value: 'cr' }, 2082 | { name: '치고', value: 'cr' }, 2083 | { name: '치노', value: 'cr' }, 2084 | { name: '치로', value: 'cr' }, 2085 | { name: '치초', value: 'cr' }, 2086 | { name: '고약', value: 'ym' }, 2087 | { name: '고약전', value: 'wey' }, 2088 | { name: '드단', value: 'ks' }, 2089 | { name: '드합', value: 'ks' }, 2090 | { name: '너', value: 'ks' }, 2091 | { name: '느단', value: 'ks' }, 2092 | { name: '느합', value: 'ks' }, 2093 | { name: '르', value: 'ks' }, 2094 | { name: '재드단', value: 'ks' }, 2095 | { name: '재드합', value: 'ks' }, 2096 | { name: '재너', value: 'ks' }, 2097 | { name: '재느단', value: 'ks' }, 2098 | { name: '재느합', value: 'ks' }, 2099 | { name: '재르', value: 'ks' }, 2100 | { name: '준재드단', value: 'ks' }, 2101 | { name: '준재드합', value: 'ks' }, 2102 | { name: '준재느단', value: 'ks' }, 2103 | { name: '준재느합', value: 'ks' }, 2104 | { name: '준재르', value: 'ks' }, 2105 | { name: '드', value: 'ks' }, 2106 | { name: '재드', value: 'ks' }, 2107 | { name: '후감', value: 'ks' }, 2108 | { name: '후개', value: 'ks' }, 2109 | { name: '후기', value: 'ks' }, 2110 | { name: '차', value: 'dc' }, 2111 | { name: '차전', value: 'wdc' }, 2112 | { name: '카공', value: 'go' }, 2113 | { name: '라', value: 'hg' }, 2114 | { name: '루', value: 'hg' }, 2115 | { name: '브', value: 'hg' }, 2116 | { name: '인라', value: 'hg' }, 2117 | { name: '인마', value: 'hg' }, 2118 | { name: '재라', value: 'hg' }, 2119 | { name: '재루', value: 'hg' }, 2120 | { name: '재브', value: 'hg' }, 2121 | { name: '정브', value: 'hg' }, 2122 | { name: '과', value: 'gw' }, 2123 | { name: '카조', value: 'jj' }, 2124 | { name: '개기', value: 'whp' }, 2125 | { name: '개보', value: 'whp' }, 2126 | { name: '개확', value: 'whp' }, 2127 | { name: '개회', value: 'whp' }, 2128 | { name: '하단', value: 'whp' }, 2129 | { name: '하면', value: 'whp' }, 2130 | { name: '버', value: 'gb' }, 2131 | { name: '재버', value: 'gb' }, 2132 | { name: '버집', value: 'gb' }, 2133 | { name: '동버집', value: 'gb' }, 2134 | { name: '동버', value: 'gb' }, 2135 | { name: '재동버', value: 'gb' }, 2136 | { name: '서', value: 'gb' }, 2137 | { name: '동서', value: 'gb' }, 2138 | { name: '재동서', value: 'gb' }, 2139 | { name: '저', value: 'gb' }, 2140 | { name: '동저', value: 'gb' }, 2141 | { name: '처', value: 'gb' }, 2142 | { name: '처집', value: 'gb' }, 2143 | { name: '동처', value: 'gb' }, 2144 | { name: '동처집', value: 'gb' }, 2145 | { name: '커', value: 'gb' }, 2146 | { name: '동커', value: 'gb' }, 2147 | { name: '성', value: 'gb' }, 2148 | { name: '성로', value: 'gb' }, 2149 | { name: '성모', value: 'gb' }, 2150 | { name: '성초', value: 'gb' }, 2151 | { name: '비단', value: 'et' }, 2152 | { name: '비합', value: 'et' }, 2153 | { name: '아', value: 'et' }, 2154 | { name: '인', value: 'et' }, 2155 | { name: '인카', value: 'et' }, 2156 | { name: '책', value: 'et' }, 2157 | { name: '호', value: 'et' }, 2158 | { name: '호기', value: 'et' }, 2159 | { name: '호명', value: 'et' }, 2160 | { name: '호파', value: 'et' }, 2161 | { name: '호협', value: 'et' }, 2162 | { name: '자', value: 'et' }, 2163 | { name: '재아', value: 'et' }, 2164 | { name: '재카기', value: 'et' }, 2165 | { name: '재카담', value: 'et' }, 2166 | { name: '정드', value: 'et' }, 2167 | { name: '정명', value: 'et' }, 2168 | { name: '주', value: 'et' }, 2169 | { name: '카열', value: 'et' }, 2170 | { name: '즈기', value: 'ka' }, 2171 | { name: '즈단', value: 'ka' }, 2172 | { name: '즈합', value: 'ka' }, 2173 | { name: '카', value: 'ka' }, 2174 | { name: '카경', value: 'ka' }, 2175 | { name: '재카경', value: 'ka' }, 2176 | { name: '카구', value: 'ka' }, 2177 | { name: '카기', value: 'ka' }, 2178 | { name: '카단', value: 'ka' }, 2179 | { name: '카담', value: 'ka' }, 2180 | { name: '카명', value: 'ka' }, 2181 | { name: '카불', value: 'ka' }, 2182 | { name: '카소', value: 'ka' }, 2183 | { name: '카임', value: 'ka' }, 2184 | { name: '카정', value: 'ka' }, 2185 | { name: '카합', value: 'ka' }, 2186 | { name: '카기전', value: 'ka' }, 2187 | { name: '카확', value: 'ka' }, 2188 | { name: '가단', value: 'cv' }, 2189 | { name: '가소', value: 'cv' }, 2190 | { name: '과', value: 'gw' }, 2191 | { name: '머', value: 'cv' }, 2192 | { name: '인', value: 'et' }, 2193 | { name: '인라', value: 'hg' }, 2194 | { name: '인마', value: 'hg' }, 2195 | { name: '인카', value: 'et' }, 2196 | { name: '자', value: 'et' }, 2197 | { name: '재가소', value: 'cv' }, 2198 | { name: '재머', value: 'cv' }, 2199 | { name: '재카기', value: 'et' }, 2200 | { name: '재카경', value: 'ka' }, 2201 | { name: '재카담', value: 'et' }, 2202 | { name: '준재가소', value: 'cv' }, 2203 | { name: '준재머', value: 'cv' }, 2204 | { name: '차', value: 'dc' }, 2205 | { name: '차전', value: 'wdc' }, 2206 | { name: '책', value: 'et' }, 2207 | { name: '카경', value: 'ka' }, 2208 | { name: '카구', value: 'ka' }, 2209 | { name: '카기', value: 'ka' }, 2210 | { name: '카기전', value: 'ka' }, 2211 | { name: '카단', value: 'ka' }, 2212 | { name: '카담', value: 'ka' }, 2213 | { name: '카소', value: 'ka' }, 2214 | { name: '카열', value: 'et' }, 2215 | { name: '카임', value: 'ka' }, 2216 | { name: '카정', value: 'ka' }, 2217 | { name: '카확', value: 'ka' }, 2218 | { name: '호', value: 'et' }, 2219 | { name: '호기', value: 'et' }, 2220 | { name: '호명', value: 'et' }, 2221 | { name: '호파', value: 'et' }, 2222 | { name: '호협', value: 'et' }, 2223 | { name: '가단', value: 'cv' }, 2224 | { name: '가소', value: 'cv' }, 2225 | { name: '머', value: 'cv' }, 2226 | { name: '재가소', value: 'cv' }, 2227 | { name: '재머', value: 'cv' }, 2228 | { name: '준재가소', value: 'cv' }, 2229 | { name: '준재머', value: 'cv' }, 2230 | { name: '차', value: 'dc' }, 2231 | { name: '차전', value: 'wdc' }, 2232 | { name: '카경', value: 'ka' }, 2233 | { name: '재카경', value: 'ka' }, 2234 | { name: '카구', value: 'ka' }, 2235 | { name: '카기', value: 'ka' }, 2236 | { name: '카기전', value: 'ka' }, 2237 | { name: '카단', value: 'ka' }, 2238 | { name: '카담', value: 'ka' }, 2239 | { name: '카소', value: 'ka' }, 2240 | { name: '카임', value: 'ka' }, 2241 | { name: '카정', value: 'ka' }, 2242 | { name: '카확', value: 'ka' }, 2243 | { name: '인라', value: 'hg' }, 2244 | { name: '인마', value: 'hg' }, 2245 | { name: '과', value: 'gw' }, 2246 | { name: '책', value: 'et' }, 2247 | { name: '호', value: 'et' }, 2248 | { name: '호기', value: 'et' }, 2249 | { name: '호명', value: 'et' }, 2250 | { name: '호파', value: 'et' }, 2251 | { name: '호협', value: 'et' }, 2252 | { name: '자', value: 'et' }, 2253 | { name: '재카기', value: 'et' }, 2254 | { name: '재카담', value: 'et' }, 2255 | { name: '카열', value: 'et' }, 2256 | { name: '인', value: 'et' }, 2257 | { name: '인카', value: 'et' }, 2258 | { name: '가단', value: 'cv' }, 2259 | { name: '가소', value: 'cv' }, 2260 | { name: '가합', value: 'cv' }, 2261 | { name: '감고', value: 'cr' }, 2262 | { name: '감초', value: 'cr' }, 2263 | { name: '고단', value: 'cr' }, 2264 | { name: '고약', value: 'ym' }, 2265 | { name: '고약전', value: 'wey' }, 2266 | { name: '고정', value: 'cr' }, 2267 | { name: '고합', value: 'cr' }, 2268 | { name: '과', value: 'gw' }, 2269 | { name: '나', value: 'cv' }, 2270 | { name: '너', value: 'ks' }, 2271 | { name: '노', value: 'cr' }, 2272 | { name: '느단', value: 'ks' }, 2273 | { name: '느합', value: 'ks' }, 2274 | { name: '동고', value: 'cr' }, 2275 | { name: '동노', value: 'cr' }, 2276 | { name: '동버', value: 'gb' }, 2277 | { name: '동버집', value: 'gb' }, 2278 | { name: '동저', value: 'gb' }, 2279 | { name: '동처', value: 'gb' }, 2280 | { name: '동처집', value: 'gb' }, 2281 | { name: '동초', value: 'cr' }, 2282 | { name: '드', value: 'ks' }, 2283 | { name: '드단', value: 'ks' }, 2284 | { name: '드합', value: 'ks' }, 2285 | { name: '머', value: 'cv' }, 2286 | { name: '버', value: 'gb' }, 2287 | { name: '버집', value: 'gb' }, 2288 | { name: '보', value: 'cr' }, 2289 | { name: '보고', value: 'cr' }, 2290 | { name: '보노', value: 'cr' }, 2291 | { name: '보로', value: 'cr' }, 2292 | { name: '보초', value: 'cr' }, 2293 | { name: '비단', value: 'et' }, 2294 | { name: '비합', value: 'et' }, 2295 | { name: '성', value: 'gb' }, 2296 | { name: '성로', value: 'gb' }, 2297 | { name: '성모', value: 'gb' }, 2298 | { name: '성초', value: 'gb' }, 2299 | { name: '인', value: 'et' }, 2300 | { name: '인라', value: 'hg' }, 2301 | { name: '인마', value: 'hg' }, 2302 | { name: '인카', value: 'et' }, 2303 | { name: '자', value: 'et' }, 2304 | { name: '재가단', value: 'cv' }, 2305 | { name: '재가소', value: 'cv' }, 2306 | { name: '재가합', value: 'cv' }, 2307 | { name: '재감고', value: 'cr' }, 2308 | { name: '재고단', value: 'cr' }, 2309 | { name: '재고약', value: 'cr' }, 2310 | { name: '재고정', value: 'cr' }, 2311 | { name: '재고합', value: 'cr' }, 2312 | { name: '재너', value: 'ks' }, 2313 | { name: '재느단', value: 'ks' }, 2314 | { name: '재느합', value: 'ks' }, 2315 | { name: '재동버', value: 'gb' }, 2316 | { name: '재드', value: 'ks' }, 2317 | { name: '재드단', value: 'ks' }, 2318 | { name: '재드합', value: 'ks' }, 2319 | { name: '재머', value: 'cv' }, 2320 | { name: '재버', value: 'gb' }, 2321 | { name: '재카기', value: 'et' }, 2322 | { name: '재카경', value: 'ka' }, 2323 | { name: '재카담', value: 'et' }, 2324 | { name: '저', value: 'gb' }, 2325 | { name: '전고', value: 'cr' }, 2326 | { name: '전노', value: 'cr' }, 2327 | { name: '전로', value: 'cr' }, 2328 | { name: '전초', value: 'cr' }, 2329 | { name: '정드', value: 'et' }, 2330 | { name: '정명', value: 'et' }, 2331 | { name: '주', value: 'et' }, 2332 | { name: '준재가단', value: 'cv' }, 2333 | { name: '준재가소', value: 'cv' }, 2334 | { name: '준재가합', value: 'cv' }, 2335 | { name: '준재느단', value: 'ks' }, 2336 | { name: '준재느합', value: 'ks' }, 2337 | { name: '준재드단', value: 'ks' }, 2338 | { name: '준재드합', value: 'ks' }, 2339 | { name: '준재르', value: 'ks' }, 2340 | { name: '준재머', value: 'cv' }, 2341 | { name: '즈기', value: 'ka' }, 2342 | { name: '즈단', value: 'ka' }, 2343 | { name: '즈합', value: 'ka' }, 2344 | { name: '차', value: 'dc' }, 2345 | { name: '차전', value: 'wdc' }, 2346 | { name: '책', value: 'et' }, 2347 | { name: '처', value: 'gb' }, 2348 | { name: '처집', value: 'gb' }, 2349 | { name: '초', value: 'cr' }, 2350 | { name: '초기', value: 'cr' }, 2351 | { name: '초보', value: 'cr' }, 2352 | { name: '초사', value: 'cr' }, 2353 | { name: '초적', value: 'cr' }, 2354 | { name: '초치', value: 'cr' }, 2355 | { name: '치고', value: 'cr' }, 2356 | { name: '치초', value: 'cr' }, 2357 | { name: '카', value: 'ka' }, 2358 | { name: '카경', value: 'ka' }, 2359 | { name: '카구', value: 'ka' }, 2360 | { name: '카공', value: 'go' }, 2361 | { name: '카기', value: 'ka' }, 2362 | { name: '카기전', value: 'ka' }, 2363 | { name: '카단', value: 'ka' }, 2364 | { name: '카담', value: 'ka' }, 2365 | { name: '카명', value: 'ka' }, 2366 | { name: '카불', value: 'ka' }, 2367 | { name: '카소', value: 'ka' }, 2368 | { name: '카열', value: 'et' }, 2369 | { name: '카임', value: 'ka' }, 2370 | { name: '카정', value: 'ka' }, 2371 | { name: '카조', value: 'jj' }, 2372 | { name: '카합', value: 'ka' }, 2373 | { name: '카확', value: 'ka' }, 2374 | { name: '코', value: 'cr' }, 2375 | { name: '타기', value: 'gj' }, 2376 | { name: '타배', value: 'gj' }, 2377 | { name: '타인', value: 'gj' }, 2378 | { name: '타채', value: 'gj' }, 2379 | { name: '호', value: 'et' }, 2380 | { name: '호기', value: 'et' }, 2381 | { name: '호명', value: 'et' }, 2382 | { name: '호파', value: 'et' }, 2383 | { name: '호협', value: 'et' }, 2384 | { name: '후감', value: 'ks' }, 2385 | { name: '후개', value: 'ks' }, 2386 | { name: '후기', value: 'ks' }, 2387 | { name: '가단', value: 'cv' }, 2388 | { name: '가합', value: 'cv' }, 2389 | { name: '가소', value: 'cv' }, 2390 | { name: '나', value: 'cv' }, 2391 | { name: '머', value: 'cv' }, 2392 | { name: '재가단', value: 'cv' }, 2393 | { name: '재가합', value: 'cv' }, 2394 | { name: '재가소', value: 'cv' }, 2395 | { name: '재머', value: 'cv' }, 2396 | { name: '준재가단', value: 'cv' }, 2397 | { name: '준재가합', value: 'cv' }, 2398 | { name: '준재가소', value: 'cv' }, 2399 | { name: '준재머', value: 'cv' }, 2400 | { name: '타기', value: 'gj' }, 2401 | { name: '타배', value: 'gj' }, 2402 | { name: '타인', value: 'gj' }, 2403 | { name: '타채', value: 'gj' }, 2404 | { name: '고단', value: 'cr' }, 2405 | { name: '고합', value: 'cr' }, 2406 | { name: '고정', value: 'cr' }, 2407 | { name: '감고', value: 'cr' }, 2408 | { name: '동고', value: 'cr' }, 2409 | { name: '노', value: 'cr' }, 2410 | { name: '동노', value: 'cr' }, 2411 | { name: '보', value: 'cr' }, 2412 | { name: '보고', value: 'cr' }, 2413 | { name: '보노', value: 'cr' }, 2414 | { name: '보로', value: 'cr' }, 2415 | { name: '보초', value: 'cr' }, 2416 | { name: '전고', value: 'cr' }, 2417 | { name: '전노', value: 'cr' }, 2418 | { name: '전로', value: 'cr' }, 2419 | { name: '전초', value: 'cr' }, 2420 | { name: '재고단', value: 'cr' }, 2421 | { name: '재고약', value: 'cr' }, 2422 | { name: '재고정', value: 'cr' }, 2423 | { name: '재고합', value: 'cr' }, 2424 | { name: '재감고', value: 'cr' }, 2425 | { name: '초적', value: 'cr' }, 2426 | { name: '초보', value: 'cr' }, 2427 | { name: '초기', value: 'cr' }, 2428 | { name: '초사', value: 'cr' }, 2429 | { name: '감초', value: 'cr' }, 2430 | { name: '코', value: 'cr' }, 2431 | { name: '초', value: 'cr' }, 2432 | { name: '동초', value: 'cr' }, 2433 | { name: '초치', value: 'cr' }, 2434 | { name: '치고', value: 'cr' }, 2435 | { name: '치초', value: 'cr' }, 2436 | { name: '고약', value: 'ym' }, 2437 | { name: '고약전', value: 'wey' }, 2438 | { name: '드단', value: 'ks' }, 2439 | { name: '드합', value: 'ks' }, 2440 | { name: '너', value: 'ks' }, 2441 | { name: '느단', value: 'ks' }, 2442 | { name: '느합', value: 'ks' }, 2443 | { name: '재드단', value: 'ks' }, 2444 | { name: '재드합', value: 'ks' }, 2445 | { name: '재너', value: 'ks' }, 2446 | { name: '재느단', value: 'ks' }, 2447 | { name: '재느합', value: 'ks' }, 2448 | { name: '준재드단', value: 'ks' }, 2449 | { name: '준재드합', value: 'ks' }, 2450 | { name: '준재느단', value: 'ks' }, 2451 | { name: '준재느합', value: 'ks' }, 2452 | { name: '준재르', value: 'ks' }, 2453 | { name: '드', value: 'ks' }, 2454 | { name: '재드', value: 'ks' }, 2455 | { name: '후감', value: 'ks' }, 2456 | { name: '후개', value: 'ks' }, 2457 | { name: '후기', value: 'ks' }, 2458 | { name: '차', value: 'dc' }, 2459 | { name: '차전', value: 'wdc' }, 2460 | { name: '카공', value: 'go' }, 2461 | { name: '인라', value: 'hg' }, 2462 | { name: '인마', value: 'hg' }, 2463 | { name: '과', value: 'gw' }, 2464 | { name: '카조', value: 'jj' }, 2465 | { name: '버', value: 'gb' }, 2466 | { name: '재버', value: 'gb' }, 2467 | { name: '버집', value: 'gb' }, 2468 | { name: '동버집', value: 'gb' }, 2469 | { name: '동버', value: 'gb' }, 2470 | { name: '재동버', value: 'gb' }, 2471 | { name: '저', value: 'gb' }, 2472 | { name: '동저', value: 'gb' }, 2473 | { name: '처', value: 'gb' }, 2474 | { name: '처집', value: 'gb' }, 2475 | { name: '동처', value: 'gb' }, 2476 | { name: '동처집', value: 'gb' }, 2477 | { name: '성', value: 'gb' }, 2478 | { name: '성로', value: 'gb' }, 2479 | { name: '성모', value: 'gb' }, 2480 | { name: '성초', value: 'gb' }, 2481 | { name: '즈기', value: 'ka' }, 2482 | { name: '즈단', value: 'ka' }, 2483 | { name: '즈합', value: 'ka' }, 2484 | { name: '카', value: 'ka' }, 2485 | { name: '카경', value: 'ka' }, 2486 | { name: '재카경', value: 'ka' }, 2487 | { name: '카구', value: 'ka' }, 2488 | { name: '카기', value: 'ka' }, 2489 | { name: '카단', value: 'ka' }, 2490 | { name: '카담', value: 'ka' }, 2491 | { name: '카명', value: 'ka' }, 2492 | { name: '카불', value: 'ka' }, 2493 | { name: '카소', value: 'ka' }, 2494 | { name: '카임', value: 'ka' }, 2495 | { name: '카정', value: 'ka' }, 2496 | { name: '카합', value: 'ka' }, 2497 | { name: '카기전', value: 'ka' }, 2498 | { name: '카확', value: 'ka' }, 2499 | { name: '비단', value: 'et' }, 2500 | { name: '비합', value: 'et' }, 2501 | { name: '인', value: 'et' }, 2502 | { name: '인카', value: 'et' }, 2503 | { name: '책', value: 'et' }, 2504 | { name: '자', value: 'et' }, 2505 | { name: '재카기', value: 'et' }, 2506 | { name: '재카담', value: 'et' }, 2507 | { name: '정드', value: 'et' }, 2508 | { name: '정명', value: 'et' }, 2509 | { name: '주', value: 'et' }, 2510 | { name: '카열', value: 'et' }, 2511 | { name: '호', value: 'et' }, 2512 | { name: '호기', value: 'et' }, 2513 | { name: '호명', value: 'et' }, 2514 | { name: '호파', value: 'et' }, 2515 | { name: '호협', value: 'et' } 2516 | ]; 2517 | --------------------------------------------------------------------------------