홈
자유게시판
질문답변
정보
강좌
게임매뉴얼
게임리뷰
게임팁
오픈케이스
PLAYSTATION
게시판
정보
게임정보
자료실
코드
PSVITA/PSP
게시판
정보
게임정보
자료실
코드
XBOX
게시판
정보
게임정보
자료실
코드
Wii
게시판
정보
게임정보
자료실
코드
NDS/SWITCH
게시판
정보
게임정보
자료실
코드
기타기종
SEGA게시판
SEGA자료실
SEGA코드
에뮬게시판
에뮬코드
GBA자료실
MD/GG자료실
SFC/FC자료실
NEOGEO자료실
아케이드자료실
커뮤니티
출석체크
가입인사
취미사진
중고장터
유머
플래시게임
포인트경매
클럽
파이널판타지
위닝일레븐
슈퍼로봇대전
그란투리스모
그란투리스모
PSP클럽
하드로더
XBOX게시판
[한글화 기초 강좌 3편] 실제 게임에서의 한글화 과정 #2
꼼수
2012-06-03 오전 11:31:17 Hit. 10160
- 첨부파일
* 다운로드시 5포인트가 차감됩니다.
001 Monkey Island 1 SE.rar
002 Monkey Island 1 SE.rar
안녕하세요 꼼수입니다.
지난번 강좌에 이어서 이번에는 직결식 으로 폰트를 구현하는 것에 대한 방법을 포스팅 해 보려고 합니다.
폰트에 대해서는 저도 전문적인 지식이 많은 편은 아니니 양해해 주시고 보시기 바랍니다.
먼저 직결식을 사용하는 이유는 폰트시스템의 제약으로 인해서 멀티 바이트 언어를 지원하지 않거나
등등의 이유로 한글화등을 하려고 할때 많이 사용되는 방식 입니다.
1. 직결식은 보통의 폰트와 무엇이 다른가?
일반적인 폰트의 구조는 글자 1개에 해당하는 폰트가 1:1 맵핑이 되는 구조입니다.
즉 완성형 2350여개의 글자는 각 고유의 한글 한글자 마다 그 글자에 해당하는 고유 폰트 데이터가 존재한다는 뜻입니다.
그런 반면에 직결식은 한글의 특징을 살려서 폰트의 데이터를 최소화 한 형태라고 보시면 됩니다.
즉, 우리가 사용하는 한글은 구조적으로 엄청 우수한 구조로 되어 있는 것은 잘 알고 계실겁니다.
이 구조를 활용해서 초성, 중성, 종성 3가지 형태로 분류하고 폰트를 제작한뒤 초성, 중성, 종성을 합쳐서 글자를 제작하는
방식입니다.
직결식에서는 대략 70여개 내외의 폰트를 가지고 한글 구현이 가능합니다. (놀랍지요..^^)
2. 직결식 폰트의 구현 예
직결식으로 한글패치가 된 게임은 생각보다 많이 있습니다. 대표적으로 최근에 여러분들도 많이 하셨을 것으로 예상되는
폴아웃 3, 오블리비언 등이 대표적으로 직결식으로 한글패치가 제작된 게임입니다.
아래 그림은 실제 폴아웃3에서 사용하는 한글폰트의 데이터 파일입니다.
분명 한글은 한글인데 자음과 모음의 형태로만 보입니다.
센스가 좋으신 분들은 폴아웃3를 하시면서 느끼셨겠지만 한글 폰트가 약간 이상(?) 하다는 것을 느끼신 분이
계실지 모르겠네요. 직결식에서는 몇가지 단점이 있습니다. 그중에 하나가 완성형 폰트는 각각의 고유의 글자에
맞춰서 모양을 알맞게 조정이 가능한 반면에 직결식으로 구현하면 초성,중성,종성에서 쓰이는 글자의 폰트에 고유하게
글자가 표현되기 때문에 일부 글자에서는 약간 부자연 스러운 폰트 모양을 볼 수 있습니다.
그리고 두번째가 자막을 구현하게 될때 완성형에서는 2바이트면 한글 표현이 가능하지만 직결식에서는 초성 + 중성 + 종성
형태로 표현이 되기 때문에 한글 한자를 표현할때 필요한 바이트가 가변이 됩니다. 종성이 없는 글자는 2바이트 종성이
있는 글자는 3바이트 이런식으로 실제 자막에서의 글자수를 많이 사용합니다. 게임내에서 자막 글자수가 제한이 있는경우는
더욱더 직결식 폰트로 구현하게 될때 한글의 글자수 제약이 있을 수 있게 되는 것입니다.
3. 직결식 폰트 제작
이전 강좌에 이어서 원숭이 섬의 비밀 1 SE의 폰트를 직결식으로 뜯어 고쳐 봅시다..
아래는 리눅스 쪽 한글폰트로 공개되어 있는 은진폰트에서 부터 초성,중성,종성을 적절하게 포토샵으로 가져왔습니다.
나중에 가져오고 보니 은진폰트도 완전 직결식이 아니라 일부글자 조합할때 글자 모양이 아주 보기 안좋네요.
일단 원리만 설명하는 거니 실제 폰트는 나중에 다시 뜯어 고치던지 해야 겠습니다.
4. 폰트 좌표 및 데이터의 수정
직결식 폰트는 이미 존재하는 영문 폰트를 그대로 유지하고 안쓰는 영역에서 한글을 추가하는 형태로 작업을 하였습니다.
따라서, 기존에 사용하는 154개의 폰트에서 한글 글자수 만큼을 더 사용할 수 있도록 FONT 파일을 뜯어 고치는 작업을
하였습니다. 앞부분 폰트의 개수를 나타내는 원본에서의 0x9a 부분이 0xd9로 변경된 부분이 그 부분입니다.
그리고, 각각의 한글 글자와 자막에서의 실제 데이터와의 맵핑이 필요한데 다음과 같이 맵핑을 하게 수정하였습니다.
1) 초성 (19자)
ㄱ : 0x2 (0x9a)
ㄲ : 0x3 (0x9b)
ㄴ : 0x4 (0x9c)
ㄷ : 0x5 (0x9d)
ㄸ : 0x6 (0x9e)
ㄹ : 0x7 (0x9f),
ㅁ : 0x8 (0xa0)
ㅂ : 0x9 (0xa1)
ㅃ : 0xb (0xa2)
ㅅ : 0xc (0xa3)
ㅆ : 0xd (0xa4)
ㅇ : 0xe (0xa5)
ㅈ : 0xf (0xa6)
ㅉ : 0x10 (0xa7)
ㅊ : 0x11 (0xa8)
ㅋ : 0x12 (0xa9)
ㅌ : 0x13 (0xaa)
ㅍ : 0x14 (0xab)
ㅎ : 0x15 (0xac)
2) 중성 (21자)
ㅏ : 0x16 (0xad)
ㅑ : 0x17 (0xae)
ㅓ : 0x18 (0xaf)
ㅕ : 0x19 (0xb0)
ㅗ : 0x1a (0xb1)
ㅛ : 0x1b (0xb2)
ㅜ : 0x1c (0xb3)
ㅠ : 0x1d (0xb4)
ㅡ : 0x1e (0xb5)
ㅣ : 0x1f (0xb6)
ㅐ : 0x7f (0xb7)
ㅒ : 0x80 (0xb8)
ㅔ : 0x81 (0xb9)
ㅖ : 0x82 (0xba)
ㅘ : 0x83 (0xbb)
ㅙ : 0x84 (0xbc)
ㅚ : 0x86 (0xbd)
ㅝ : 0x87 (0xbe)
ㅞ : 0x88 (0xbf)
ㅟ : 0x89 (0xc0)
ㅢ : 0x8a (0xc1)
3) 종성 (23자)
ㄱ : 0x8b (0xc2)
ㄲ : 0x8c (0xc3)
ㄴ : 0x8d (0xc4)
ㄷ : 0x8e (0xc5)
ㄹ : 0x8f (0xc6)
ㅁ : 0x90 (0xc7)
ㅂ : 0x91 (0xc8)
ㅅ : 0x92 (0xc9)
ㅆ : 0x93 (0xca)
ㅇ : 0x94 (0xcb)
ㅈ : 0x95 (0xcc)
ㅊ : 0x96 (0xcd)
ㅋ : 0x9a (0xce)
ㅌ : 0x9b (0xcf)
ㅍ : 0x9c (0xd0)
ㅎ : 0x9d (0xd1)
ㄵ : 0x9e (0xd2)
ㄶ : 0x9f (0xd3)
ㄺ : 0xa0 (0xd4)
ㄻ : 0xa2 (0xd5)
ㄼ : 0xa3 (0xd6)
ㅀ : 0xa4 (0xd7)
ㅄ : 0xa5 (0xd8)
폰트를 수정했으니 좌표도 수정해야 하는데 이것은 이전강좌에서 설명 드렸으니 패스 하도록 하겠습니다.
첨부한 파일을 원본과 비교해 보시기 바랍니다.
5. 메뉴의 부분 한글화
자 이제 한글폰트를 이전과 다르게 직결식으로 구현하고 각 폰트의 데이터를 알맞게 수정하였습니다.
메뉴의 Play a New Game 부분을 한글로 새로운게임으로 수정해 보도록 하겠습니다.
새로운게임을 표현하려면 직결식으로 데이터를 수정해 보면 다음과 같이 됩니다.
제일 뒤에 00은 자막의 끝을 나타내는 문자입니다.
새로운게임 = 0c 7f 07 1a 0e 1c 8d 02 81 0e 1f 90 00
그럼 메뉴 자막 파일인 uiText.info 파일의 데이터를 직결식으로 풀어쓴 데이터로 다음과 같이 변경합니다.
6. 구동확인
자 수정된 파일을 XBOX360에 넣고 구동해 보면 다음과 같이 글자가 나옵니다.
이것은 각각의 글자가 그냥 한글자로 표현되기 때문에 밀려서 나오게 됩니다.
직결식에서는 2글자 또는 3글자가 한글자로 표현되어야 하기 때문에 여기서 또 한가지의 수정이 필요합니다.
중성, 종성 폰트는 출력시 X 좌표를 -축으로 보내 버려야 합니다.
즉, 중성과 종성 폰트는 반드시 초성이 있기 때문에 초성 데이터가 출력한 곳의 좌표에 폰트를 출력해야 합니다.
여기서 몇가지 트릭이 필요하게 되는데 X축 조정이 가능한 가변 폰트 시스템에서만 이런 형태의 출력이 가능하다는
점입니다.
7. 중성, 종성 폰트의 X축 출력 변경
이제 중성, 종성 폰트의 출력시 X 축 좌표 수정이 필요한데 실제 수정은 -로 조정하는 것인데 이것은 게임마다 다 다르기
때문에 수정해 보면서 값을 분석해내서 수정하는 방법밖에는 없습니다.
저는 폰트의 X크기를 결정하는 부분으로 분석한 부분을 -로 보내니까 X축이 -쪽으로 출력되는 것을 확인 하였고
이때 글자가 뒤집혀 출력되는 것을 확인하였습니다. (즉, X START, X END 좌표가 -로 되어서 뒤집힙니다.)
따라서, X축을 -쪽으로 출력하기 위해서는 X START, X END 부분도 뒤집어 주어야 정상 글자로 표시가 됩니다.
아래가 중성폰트 데이터 부분인데 X START, X END 부분과 뒷부분 X 출력사이즈 결정하는 곳을 -로 조정했습니다.
아 -의 데이터 표현은 컴퓨터에서는 보수형태를 취하기 때문에 HEX로 -48(10진수) 은 0xFFFF - 0x30 = 0xFFCF 이런형태가
되어 버립니다.(잘 모르겠으면 스터디..ㅠㅠ)
추가적으로 uiText.info 파일의 다른 메인메뉴 글자도 한글화 해 봅니다..
1 : 0x12700 : 새로운게임 : 0c 7f 07 1a 0e 1c 8d 02 81 0e 1f 90 00
2 : 0x12d00 : 이어서하기 : 0e 1f 0e 18 0c 18 15 16 02 1f 00
3 : 0x4900 : 도움말 & 옵션 : 05 1a 0e 1c 90 08 16 8f 20 26 20 0e 1a 91 0c 19 8d 00
4 : 0x13300 : 게임라이브러리 : 02 81 0e 1f 90 07 16 0e 1f 09 1e 07 18 07 1f 00
5 : 0x100 : 도전과제 : 05 1a 0f 18 8d 02 83 0f 81 00
6 : 0x5500 : 점수판 : 0f 18 90 0c 1c 14 16 8d 00
8. 구동확인
수정된 파일을 XBOX360에 복사하고 구동을 해 봅니다. 다음과 같이 한글 비스무리하게 출력이 되네요
글자가 완전 직결식 폰트가 아니라서 표현이 글자표현이 매끄럽지 못한 부분도 있네요.
이런건 보면서 직접 좌표를 수정해 주거나 폰트 데이터를 수정해 가면서 매끄럽게 수정 해야지요
이래서 그래픽 수정 전문가가 필요한데 안습이네요;;
첨부파일은 001 파일은 중성, 종성 폰트의 X출력 변경전 파일이며, 002 파일은 중성, 종성 폰트의 X출력 변경후 파일입니다.....
Lv.17 / 대령 . 꼼수 (cec202)
( 409 / 2000 ) 20%
포 인 트 : 14409 P
가 입 일 : 2007-05-07 오후 5:25:14
최종접속일 : 2021-12-18 오후 11:33:40
7
0
불량게시글신고
글쓰기
수정
삭제
목록
사랑하며살자
추천
2012-06-03 11:33:53
대단하신 분이군요
저는 기계분야라 이런쪽은 문외한인데,
멋집니다. 많은 사람들이 좋은게임을 한글로 즐길수 있게 해주셔서 감사합니다.
·댓글
추천
2012-06-03 12:15:19
볼때마다 외계어가...^^:
봐도 뭔지 하나도 모르겠네요..ㅋㅋ
엑박계에 계셔서 햄볶아요~ 항상 감사합니다^^
·댓글
추천
2012-06-03 17:47:16
저한테도 외계어로 밖에 보이질 않아요..
·댓글
팹기넥스
추천
2012-06-03 12:36:47
아 이런거군나 암튼 매번한글화 감사드려요^^ 전 봐도 못해요
·댓글
사악한멋쟁이
추천
2012-06-03 14:17:48
읽어봐도 이해가... 대단한 강좌 감사합니다. 읽어봤더니 머리가 아프네요.ㅋㅋ 클릭 더 추천 !!
·댓글
Bittersweet1
추천
2012-06-03 17:07:36
꼼수님 감사합니다~ ㅎㅎ
·댓글
냐옹아
추천
2012-06-03 21:17:29
이건 어느나라 언어인가요??? 정말 이런거 하시는분 대단한거 같네요.. 꼼수님 짱!!ㅎ
·댓글
knocker5
추천
2012-06-04 12:26:56
아....무슨 말인지 잘 모르겠네요 ㅎㅎㅎ 일단 추천
·댓글
슥하군
추천
2012-06-04 13:57:50
숫자랑 영어가 조합되면..외계어가 되는구나..ㅜㅜ 잘봤습니다.
·댓글
산시인
추천
2012-06-09 02:29:46
헐 대단하십니다...ㅡㅡ;;
엄청난 노가다가 들어 가야겠네요...
알듯 말듯 이제 조금 궁금증이 풀려 가는듯 합니다...추천 꾸욱~~~^^
·댓글
jyumarion
추천
2012-06-17 08:57:06
숫자가 조합되어서 이렇게 문자가 되는거 같은데...
참 신기하네요. 대단하십니다.
·댓글
글쓰기
수정
삭제
목록
기타
더스트 피드백 및 오역에 관한 생각입니다.
8
skyneto
2012.08.22
4348
기타
혹시 무선패드 차지킷 사용하시는분들 봐주세요 ^^
8
prakia
2012.08.16
1814
기타
[공략] 다크사이더스2 공략영상입니다!!
6
チョキチョキ
2012.08.15
32081
기타
HDTV 사용시 연결기기명 사용
2
best_min
2012.08.08
1791
기타
드뎌 고민 끝에...
7
kcgm
2012.08.04
2114
기타
플레이 아시아 5$ 할인쿠폰 올립니다.
2
사악한멋쟁이
2012.07.21
4559
기타
글리치 입문
3
아빈슬론
2012.07.17
1496
기타
신형 슬림 엑박 글리치 최고의 골치거리 하나 해결..
3
겐시로
2012.07.14
1931
기타
엑박신형에 구형하드 설치
꾸숑
2012.07.09
1383
기타
PlayWorks PS2000 Digital판매하는 곳이나 판매할 유져분!!
kwanho123
2012.06.30
1231
기타
ㅎㅎ 패드한개 주문했습니다
4
xbox360임
2012.06.20
1510
기타
글한번 올려봅니당
6
저련
2012.06.07
4721
기타
[한글화 기초 강좌 3편] 실제 게임에서의 한글화 과정 #2
11
꼼수
2012.06.03
10161
기타
쓸때 없는 질문 드립니다 ~! ㅎㅎㅎㅎㅎㅎ
5
adaef24
2012.06.01
1338
기타
시링으로 고스트리콘 팀 모집합니다.
3
nanaharu
2012.05.22
1370
기타
[한글화 기초 강좌 3편] 실제 게임에서의 한글화 과정 #1
17
꼼수
2012.05.20
10822
기타
[한글화 기초 강좌 2편] 폰트의 종류 및 차이점
11
꼼수
2012.05.10
7651
기타
계급장 받아가세요.(프로필사진입니다.)
11
XBOX720s
2012.05.09
1949
기타
쩌새님, 엘샤다이 한글화에 대한 피드백입니다...
3
쿠오바디스
2012.05.09
2168
기타
파이널 판타지아 프로필사진.......자작..
8
XBOX720s
2012.05.09
2029
운영자
님
글쓰기
<<
11
12
13
14
15
16
17
18
19
20
>>
ID저장
AUTO
회원가입
비번찾기
실시간 포인트 랭킹
1
Lv.98
골룸포션
108P
2
Lv.36
폭력배
84P
3
Lv.21
ting
23P
4
Lv.20
DKnoa
16P
5
Lv.27
Wayfarer
15P
6
Lv.16
metamorphic
10P
7
Lv.19
한바퀴
10P
8
Lv.20
잡상인
10P
9
Lv.17
꿈꾸는행복
10P
10
Lv.17
ff13
10P
11
Lv.20
Nick_*
10P
12
Lv.16
바나나라떼
10P
13
Lv.15
제이벌
10P
14
Lv.24
마환
9P
15
Lv.21
미르다람쥐
9P
16
Lv.35
트럼푸
8P
17
Lv.23
검은튤립
8P
18
Lv.44
써니와조쉬
8P
19
Lv.11
미누빠빠
8P
20
Lv.32
에수카
7P
21
Lv.23
칸타타
7P
22
Lv.11
비타사랑123
7P
23
Lv.20
고로
7P
24
Lv.18
가을속으로
6P
25
Lv.16
유지광
6P
26
Lv.23
멀티짱
6P
27
Lv.24
레환사
6P
28
Lv.21
유니트가이버
6P
29
Lv.30
콩나물밥
6P
30
Lv.17
갯바위
6P
어제 포인트 랭킹
1
Lv.98
골룸포션
111P
2
Lv.36
폭력배
46P
3
Lv.21
ting
30P
4
Lv.15
이나사마
14P
5
Lv.17
브가걸
10P
6
Lv.23
검은튤립
9P
7
Lv.27
Wayfarer
9P
8
Lv.17
ninekid
9P
9
Lv.35
트럼푸
8P
10
Lv.24
마환
8P
11
Lv.44
써니와조쉬
8P
12
Lv.17
앵엥앵엥
8P
13
Lv.21
미르다람쥐
8P
14
Lv.32
에수카
7P
15
Lv.16
브레인짱돌
7P
16
Lv.18
가을속으로
7P
17
Lv.16
냉동개구리
7P
18
Lv.15
Todaystyle
7P
19
Lv.21
아레스혼
6P
20
Lv.21
유니트가이버
6P
21
Lv.5
breakholic
6P
22
Lv.30
콩나물밥
6P
23
Lv.21
쪽빛푸른
6P
24
Lv.15
바비킹
6P
25
Lv.21
oo77
6P
26
Lv.17
레메넨스
6P
27
Lv.11
건전로리
6P
28
Lv.17
diskman
6P
29
Lv.11
미누빠빠
6P
30
Lv.27
느작호랑이
6P
31
Lv.21
재혀니쥐
5P
32
Lv.19
사야오빠
5P
33
Lv.20
4l
5P
34
Lv.9
머신건
5P
35
Lv.17
분석자
5P
36
Lv.18
하즈키료2
5P
37
Lv.16
행갱이
5P
38
Lv.17
ff13
5P
39
Lv.19
글록
5P
40
Lv.24
레환사
5P
41
Lv.15
레트로수집가
5P
42
Lv.17
꿈꾸는행복
5P
43
Lv.19
히로
5P
44
Lv.15
사방벽
5P
45
Lv.16
FbConan
5P
46
Lv.24
OGs
5P
47
Lv.20
잡상인
5P
48
Lv.12
en2
5P
49
Lv.10
원조식인돼지
5P
50
Lv.19
한바퀴
5P
최근글
요즘 핫 한 곳 (신고접수)
여기서 하시면 되겠습니다 (신고접수)
XALL LAUNCH N64 에뮬레이터 실행시 이미지 ...
남자들이 이용할수 있는곳 (신고접수)
ps3 외장하드 인식 문제
[XBOX360] XBOX LIVE 제한
괜찮은곳 (신고접수)
이곳에서 (신고접수)
게임설치 방법 좀 알려주세요.
플스 5 커펌 (신고접수)
여자랑 플스5 같이하기 (신고접수)
존나 조아!!!!! (신고접수)
스위치입문자가 질문한번 올려봅니다!
[XBOX360] 외장형 USB 부팅 속도
스텔라 블레이스 잼있나요? (신고접수)
11.0 떴네요
플스5 커펌 (신고접수)
남자들이 이용할수 있는곳 (신고접수)
스위치2가 내년에 나올 것 같다는데..
[PS4] 11.00 탈옥 곧 될 것 같습니다.
플스4는 어떤 커펌이라도 아직 랜덤으로 셧다...
만나보시길 바랍니다. (신고접수)
레벨 36 달성했습니다.
구형 스위치 커펌 가능 한가요?
활용해 보시길 바랍니다. (신고접수)
[PS4]현재 11.0 탈옥방법 및 진행상황 업데이...
여기서 하시면 되겠습니다 (신고접수)
여기서 하시면 되겠습니다 (신고접수)
ps3 ㅋㅍ 4.85 오랜만에 켜니 듀쇽3가 무선연...
[PS4] 드디어 11.00 탈옥 방법 공개
최근댓글
죽지도 않고 또 왔네.
라이브 골드는 어디에서 구입하나요? 기간은 ...
100% 메모리 카드 문제임 뻥 메모리 임 5000...
게임중 라이브는 골드 등록 해야 될겁니다.
https://switzzi.tistory.com/21 18년 이...
꾸역꾸역 계속 기어나오네.
욕도 아깝다.
애라이 욕도 아까운 시끼.
죄송합니다.저도 커펌 방법에 대해선 잘 몰라...
전 열번에 한번 정도 발생하던데 bh님 기기는...
커펌은 가능 버전 기기만 있으면 pc랑 연결해...
체감상 한 40번에 한번정도 느낌이네요
요즘 스위치는 최신 올레드까지 다 커펌됩니...
현재 모바일 2050급이라고 소문이 돌던데..노...
좋은 정보 감사합니다.
그렇군요.어서 영구 커펌 같은 게 나와야 할 ...
아슈람1님이 (2024/05/07 20:25)에 삭제 하였...
축하드려요~~~
은근히 자주 발생합니다. 펌웨어 버젼과 관계...
축하드립니다~
애쓴다..애써.
진급 축하드립니다.
진급을 축하 드립니다.
폭풍질주 진급축하드립니다^^
축하드립니다
PS4 펌웨어만 11.00 이하이면 됩니다.
결론은 플레이디스크를 내장에 컨텐츠 데이터...
보통은 1번 디스크를 내장 하드 250기가에 설...
GTA5를 삼돌이에서 할때 최적의 퍼포먼스를 ...
진급 축하드려요~
탈옥해서 사용하고 싶은데, 그러면 당근...
아 그런가요? 일단 저도 좀 더 해봐야겠네요 ...
고마해라
애쓴다.
저도 같은 증상인데 저 같은 경우에는 원래 ...
자드님은 사랑입니다.^^*
360S에서 DVD 타이틀 GTA5 읽는 속도가 예전...
오로라 지정 경로에 425307E0폴더 저장 DLC :...
플스4에서 CD로 구동한건가요? 화질이 좋아 ...
혹시 구하셨으면 저도 공유 요청드립니다ㅠㅠ...
Copyright ⓒ 2000 - 2019 by
FINALFANTASIA.COM / FAFAN.KR
All rights reserved.