
How to fix GetPrototype to GetMessageClass on TensorFlow
ããã¯ã....é£æåºŠé«ãã£ãã
ãšã³ãžãã¢ã§ããªãã®ã«ããããäœãšãããèªåãèªç»èªè³ãããã§ããã
çºç«¯ã¯ä»¥äžèšäºã§ãã
ããã¯ããã§ãå¿
èŠãªæªçœ®ãªãã§ãããééã£ã¡ããããã
(Protobufãå€ã4.xã«æ»ãã°çºçããªããšã©ãŒã ã£ãããææ°ã®6.31ãåºãŠãã以äžå·»ãæ»ããŠåºå®ããèªäœããæ¬æ¥è¯ããªãããããããšã©ãŒã®æ§æ ŒèªäœããããŠããããçš®é¡ã®ãã®)
ãã ãä»åºŠã¯TensorFlowåŽãã€ããŠãããããâŠãŠåé¡ãçºçããèš³ã§ããçŸæç¹ã§å ·äœçã«åäœäžè¯èµ·ããèš³ãããªãã®ã§ããããšã«ãããšã©ãŒè¡šç€ºã ãã¯åºãŠããŸããã
AttributeError: 'MessageFactory' object has no attribute 'GetPrototype'æåãç°¡åããšæã£ããããããæ§è³ªæªãã£ããâŠ
çµéèªäœãCursorå çã«ç·æ¬ããŠããããŸãããéäžã§ãèªåãäœãã£ãŠããããããªããªããããèŠæŠããŸãããããã
ã¡ãªã¿ã«ã以äžã®æµãã«å ¥ãåã«ãåå ãtensorflowãããâŠåœããã¯ä»ããŠããŸãããããã®äºæž¬ãåºæ¥ãçµç·¯ããŸãè²ã ããã®ã§ãããææ©èŠããããŠããªãã®ã§å²æããŸãã
ãã®å¡ãã®åœããããã£ãŠããã以äžã®æµãã«æã£ãŠããããšãåºæ¥ãã®ã§ãããã®åœãããä»ããããâŠçç±ã¯ã身ãèããªãçµéšå€ãçµéšåçãªãã®ã§ãã
æ¿ç¥ããŸããããããŸã§ã®çµç·¯ãšããªãäžé£ã®äœæ¥ãå¿ èŠã ã£ãã®ããæåããèŠçŽããŸãã
ä»åã®ç®ç
ComfyUI èµ·åäžãç¹å®ã®æäœäžã«çºçããŠããã以äžã®ãšã©ãŒãè§£æ¶ããããšã
`AttributeError: 'MessageFactory' object has no attribute 'GetPrototype'`ãšã©ãŒã®æ ¹æ¬åå
`GetPrototype` ãšã¯ïŒ
ãã㯠Google ã® Protocol BuffersïŒprotobufïŒ ãšããã©ã€ãã©ãªã§äœ¿ãããŠããã¡ãœããåã§ãã
`MessageFactory` ã¯ã©ã¹ã®äžéšãšããŠååšããç¹å®ã®ã¡ãã»ãŒãžã¿ã€ãã®ããããã¿ã€ããïŒã²ãªåœ¢ãšãªãã€ã³ã¹ã¿ã³ã¹ïŒãååŸããããã«äœ¿ãããŠããŸããã
ãªããšã©ãŒã«ãªã£ãã®ãïŒ
protobuf ã©ã€ãã©ãªã¯ããŒãžã§ã³ã¢ãããéããŠãããprotobuf 4.x 以éïŒçŸåšã® 6.x ãå«ãïŒã§ã`GetPrototype` ã¡ãœããã¯éæšå¥šãŸãã¯åé€ãããŸããã
(äœããå®éã«ã¯Protbuf5.29.4以åã§ãã®ãšã©ãŒã¯åºãªãã6.31ã§åããŠåºã)代ããã« `GetMessageClass` ãªã©ã®æ°ããã¡ãœããã䜿ãããã«å€æŽãããŸããã
ä»åã®ç°å¢ã«ã¯æ°ããããŒãžã§ã³ã® protobuf (6.31.0) ãã€ã³ã¹ããŒã«ãããŠããŸããããComfyUI ç°å¢å ã®ã©ããïŒComfyUIæ¬äœãã«ã¹ã¿ã ããŒãããããã¯ä»ã®äŸåã©ã€ãã©ãªïŒããå€ãããŒãžã§ã³ã® protobuf ãåæãšããã³ãŒããæã£ãŠãããååšããªã `GetPrototype` ã¡ãœãããåŒã³åºãããšããŠãšã©ãŒãçºçããŠããŸããã
ãšã©ãŒçºçç®æã®ç¹å®ã詊ã¿ãçµç·¯
`GetPrototype` ã䜿ã£ãŠããã³ãŒããæ¢ã
ãšã©ãŒã¡ãã»ãŒãžã¯ Python ã® `AttributeError` ã§ããããPythonã³ãŒãã®ã©ãã§ `GetPrototype` ãåŒã°ããŠãããç¹å®ããå¿ èŠããããŸããã
ãŸããPythonã©ã€ãã©ãªïŒsite-packagesïŒã ComfyUIæ¬äœã® Python ãã¡ã€ã«ïŒ`.py`ïŒã察象㫠`GetPrototype` ãå šææ€çŽ¢ããŸããã
ãããã該åœãã Python ã³ãŒãã¯èŠã€ãããŸããã§ããã
次ã«ãæ€çŽ¢å¯Ÿè±¡ã C++ ããããã¡ã€ã«ïŒ`.h`ïŒãä»ã®ããã¹ããã¡ã€ã«ã«åºãããšãããTensorFlow ã«å«ãŸãã protobuf ã® C++ ããããã¡ã€ã«ã« `GetPrototype` ã®èšè¿°ã倿°èŠã€ãããŸãããããã¯ãprotobuf ã®å éš C++ å®è£ ã§äœ¿ãããŠããååã§ããããšã瀺ããŠããŸããããçŽæ¥ãšã©ãŒã®åå ãšãªã Python ã³ãŒãã®å Žæã¯ç¹å®ã§ããŸããã§ããã
çµè«
Python ã³ãŒãå ã§çŽæ¥ `MessageFactory.GetPrototype` ãšæžãããŠããå Žæã¯ç¹å®ã§ããŸããã§ããããäœããã®ã³ãŒãïŒããããå€ãã«ã¹ã¿ã ããŒããã©ã€ãã©ãªïŒããæ°ãã protobuf ããŒãžã§ã³ãšäºææ§ã®ãªãæ¹æ³ã§ `MessageFactory` ã䜿ãããšããŠããããšãåå ãšå€æããŸããã
解決çã®æ€èšãšæ¡çš
protobuf ã®ããŒãžã§ã³ãäžãã
ãšã©ãŒãåºãªãå€ãããŒãžã§ã³ïŒäŸ: 3.xç³»ïŒã«æ»ãæ¹æ³ã§ããããã¯æãç°¡åãªè§£æ±ºçã®äžã€ã§ããããŠãŒã¶ãŒæ§ããå€ã protobuf ã«äžããã¯åºæ¥ãªãããšã®ããšã§ããã®ã§ããã®æ¹æ³ã¯æ¡çšããŸããã§ããã
ãšã©ãŒãåºãã³ãŒããä¿®æ£ãã
ãããšã©ãŒãåºããŠããã³ãŒããç¹å®ã§ããã°ããã®äžã§ `GetPrototype` ã `GetMessageClass` ã«æžãæããã®ãçæ³ã§ããããããã³ãŒãã®å Žæç¹å®ãé£ãããç¹ã«ã«ã¹ã¿ã ããŒãã®å Žåã¯èªåã§ä¿®æ£ããã®ãé£ããå ŽåããããŸãã
Monkey Patch ã䜿ãïŒæ¡çšããæ¹æ³ïŒ
ãšã©ãŒãåºããŠããã³ãŒããä¿®æ£ããããšãªããæ°ãã protobuf ã©ã€ãã©ãªã«äžæçã« `GetPrototype` ã¡ãœããã远å ããŠããŸãæ¹æ³ã§ãã
`GetPrototype` ãåŒã°ããããå éšçã«æ°ãã `GetMessageClass` ãå®è¡ããããã«ããŸãã
ããã«ãããå€ãã³ãŒã㯠`GetPrototype` ãåŒãã§ããšã©ãŒã«ãªãããæ°ãã API (`GetMessageClass`) ã®æ©èœã䜿ãããšãã§ããŸãã
Monkey Patch ã®å®è£ ãš ComfyUI ãžã®é©çšæé
ãããã³ãŒãã®äœæ:
`monkey_patch_protobuf.py` ãšãã Python ãã¡ã€ã«ãäœæããŸããã
ãã®ãã¡ã€ã«ã«ã¯ã`MessageFactory` ã¯ã©ã¹ã« `GetPrototype` ã¡ãœããã远å ããã³ãŒããæžãããŠããŸãã
ComfyUI èµ·ååã«ããããé©çšããæ¹æ³ã®æ€èš:
ComfyUI ãèµ·åãããšã©ãŒãåºãã³ãŒããå®è¡ãããåã«ã`monkey_patch_protobuf.py` ã import ããå¿ èŠããããŸããã
åœåãComfyUI ã® `main.py` ã®å é ã« `import monkey_patch_protobuf` ã远å ããããšãèããŸããããComfyUI ã®èµ·åæ¹æ³ã«ãã£ãŠã¯é£ãããããå¥ã®æ¹æ³ãæ€èšããŸããã
Python ã® `runpy` ã¢ãžã¥ãŒã«ã䜿ã£ãŠãããããã¡ã€ã«ã import ããåŸã« ComfyUI ã® `main.py` ãã¢ãžã¥ãŒã«ãšããŠå®è¡ããæ¹æ³ãæ¡çšããŸããã
èµ·åã¹ã¯ãªããã®äœæ:
`run_comfyui_with_patch.py` ãšãã Python ãã¡ã€ã«ãäœæããŸããã
ãã®ãã¡ã€ã«ã¯ã`monkey_patch_protobuf` ã import ããåŸã`runpy.run_module('main', run_name='main')` ã§ ComfyUI æ¬äœãèµ·åããŸãã
åœå `'ComfyUI.main'` ãšæå®ã㊠`ModuleNotFoundError` ãçºçããŸãããã`sys.path` ã®èª¿æ»ãããComfyUI ã®åã蟌㿠Python ç°å¢ã§ã¯ `D:\USERFILES\ComfyUI\ComfyUI` ãã¢ãžã¥ãŒã«æ€çŽ¢ãã¹ã®å é ã«æ¥ãããã`main.py` ã `'main'` ãšããååã§çŽæ¥ import ã§ããããšãåãããŸããã
ãã¡ã€ã«ã®é 眮:
Python ã `run_comfyui_with_patch.py` ãš `monkey_patch_protobuf.py` ãèŠã€ããããããã«ããããã `D:\USERFILES\ComfyUI\ComfyUI` ãã£ã¬ã¯ããªã«é 眮ããŸãããïŒãã®ãã£ã¬ã¯ããªã `sys.path` ã®å é ã«æ¥ãããïŒ
ããããã¡ã€ã«ã®äœæ:
ComfyUI ãèµ·åããããã® `start_comfyui_with_patch.bat` ãäœæããŸããã
ãã®ããããã¡ã€ã«ã§ã¯ãç°å¢å€æ°ã®èšå®ã`PYTHONPATH` ã®èšå®ïŒ`D:\USERFILES\ComfyUI\ComfyUI` ãæå®ïŒããããŠçµ¶å¯Ÿãã¹ã䜿ã£ãŠ `run_comfyui_with_patch.py` ã Python ã§å®è¡ããã³ãã³ããèšè¿°ããŸããã
ãã¹ã®æå®ãã¹ïŒçžå¯Ÿãã¹ã®åé¡ïŒãããšã©ãŒã確èªã§ããªãåé¡ïŒ`pause` ã®è¿œå ïŒãªã©ããããŸããããæçµçã«çµ¶å¯Ÿãã¹ã䜿ã£ãä¿¡é Œæ§ã®é«ãããããã¡ã€ã«ã«ãªããŸããã
çµæ
äœæãã `monkey_patch_protobuf.py` ãš `run_comfyui_with_patch.py` ã `D:\USERFILES\ComfyUI\ComfyUI` ãã£ã¬ã¯ããªã«çœ®ãã`start_comfyui_with_patch.bat` ãå®è¡ããããšã§ãmonkey patch ãé©çšãããç¶æ ã§ ComfyUI ãèµ·åããããã«ãªããŸããã
ããã«ãããProtocol Buffers ã® `AttributeError: 'MessageFactory' object has no attribute 'GetPrototype'` ãšãããšã©ãŒã¯çºçããªããªãïŒãŸãã¯ããšã©ãŒãåºããŠããå€ãã³ãŒããæ£ããåäœããããã«ãªãïŒããšãæåŸ ãããŸãã
ããããäžé£ã®äœæ¥ã§è¡ã£ãããšãšãããããã®ã¹ããããå¿
èŠã ã£ãçç±ã®èŠçŽã§ãã
äœãäžæãªç¹ãããã°ãé æ
®ãªã質åããŠãã ããã
äžã«ãããæ€åºãèªäœããã壮絶ã«èŠæŠããŸãããã ã£ãŠãèŠã€ããããããããã該åœããéšåããçµå±ã以äžã®ã¹ã¯ãªãããèªäœããŠããŸãã
æ€åºã®çºã«äœ¿çšããã¹ã¯ãªãã
import os
search_dir = r"D:\USERFILES\ComfyUI"
keyword = "GetPrototype"
# æ€çŽ¢ãããæ¡åŒµåããªã¹ãã§æå®
target_exts = [
".py", ".txt", ".json", ".yaml", ".yml", ".md", ".ini", ".cfg", ".toml",
".js", ".ts", ".c", ".cpp", ".h", ".hpp"
]
for root, dirs, files in os.walk(search_dir):
for file in files:
if any(file.endswith(ext) for ext in target_exts):
file_path = os.path.join(root, file)
try:
with open(file_path, encoding="utf-8", errors="ignore") as f:
for i, line in enumerate(f, 1):
if keyword in line:
print(f"{file_path}:{i}: {line.strip()}")
except Exception as e:
print(f"Error reading {file_path}: {e}")
çµå±Pythonéšåã«ã¯GetPrototypeã®å®çŸ©ããªãã£ããã§ããããã£ãšèŠã€ãã£ãã®ã以äžã§ãâŠããããããããã ããããããã¯ã
D:\USERFILES\ComfyUI\search_getprototype.py:7: keyword = "GetPrototype"
D:\USERFILES\ComfyUI\python_embeded\Lib\site-packages\tensorflow\include\google\protobuf\dynamic_message.h:128: const Message* GetPrototype(const Descriptor* type) override;
D:\USERFILES\ComfyUI\python_embeded\Lib\site-packages\tensorflow\include\google\protobuf\dynamic_message.h:139: const Message* GetPrototypeNoLock(const Descriptor* type);
D:\USERFILES\ComfyUI\python_embeded\Lib\site-packages\tensorflow\include\google\protobuf\extension_set.h:811: const MessageLite* GetPrototypeForLazyMessage(const MessageLite* extendee,
D:\USERFILES\ComfyUI\python_embeded\Lib\site-packages\tensorflow\include\google\protobuf\message.h:641: // factory->GetPrototype(field->message_type()) MUST return an instance of
D:\USERFILES\ComfyUI\python_embeded\Lib\site-packages\tensorflow\include\google\protobuf\message.h:1286: // Some implementations do not support all types. GetPrototype() will
D:\USERFILES\ComfyUI\python_embeded\Lib\site-packages\tensorflow\include\google\protobuf\message.h:1291: virtual const Message* GetPrototype(const Descriptor* type) = 0;
D:\USERFILES\ComfyUI\python_embeded\Lib\site-packages\tensorflow\include\google\protobuf\message.h:1295: // MessageFactory::generated_factory()->GetPrototype(
D:\USERFILES\ComfyUI\python_embeded\Lib\site-packages\tensorflow\include\google\protobuf\message.h:1299: // pool, GetPrototype() will return nullptr. (You can also check if a
D:\USERFILES\ComfyUI\python_embeded\Lib\site-packages\tensorflow\include\google\protobuf\message.h:1303: // This factory is 100% thread-safe; calling GetPrototype() does not modify
D:\USERFILES\ComfyUI\python_embeded\Lib\site-packages\tensorflow\include\google\protobuf\message.h:1310: // time, to be placed in generated_factory. The first time GetPrototype()
D:\USERFILES\ComfyUI\python_embeded\Lib\site-packages\tensorflow\include\google\protobuf\reflection.h:208: reflection->GetMessageFactory()->GetPrototype(field->message_type());
D:\USERFILES\ComfyUI\python_embeded\Lib\site-packages\tensorflow\include\google\protobuf\reflection.h:269: reflection->GetMessageFactory()->GetPrototype(field->message_type());
D:\USERFILES\ComfyUI\python_embeded\Lib\site-packages\tensorflow\include\google\protobuf\compiler\cpp\service.h:103: void GenerateGetPrototype(RequestOrResponse which, io::Printer* printer);
D:\USERFILES\ComfyUI\python_embeded\Lib\site-packages\tensorflow\include\google\protobuf\compiler\java\service.h:108: void GenerateGetPrototype(RequestOrResponse which, io::Printer* printer);
D:\USERFILES\ComfyUI\python_embeded\Lib\site-packages\tensorflow\include\google\protobuf\io\coded_stream.h:477: // GetPrototype() MUST return non-NULL for any Descriptor which can be found
D:\USERFILES\ComfyUI\python_embeded\Lib\site-packages\tensorflow\include\google\protobuf\io\coded_stream.h:483: // GetPrototype() is given a Descriptor which resides in
(base) PS D:\USERFILES\ComfyUI>
ã§ããããèžãŸããŠãäžã®æµãã®å¯Ÿçã«åãã£ãŠããèš³ã§ãã
ä¹ ã ã«åºãŸããããmonkey patchâŠä»¥åreForgeã®èŠå察çã§äœã£ããã§ãããããã以æ¥ã ãäžå¿ãäžèšã«å ¬éããŠãããŸãã
# monkey_patch_protobuf.py
from google.protobuf.message_factory import MessageFactory
def get_message_class(self, descriptor):
return self.GetMessageClass(descriptor)
MessageFactory.GetPrototype = get_message_classimport monkey_patch_protobuf
import runpy
runpy.run_module('main', run_name='__main__') # â ãã®3è¡ç®ã 'main' ã«ãªã£ãŠãããç¢ºèªæ¹ããŠããããªæ»ããã察çãæ»ãåºããŠãããCursorå çãæ¹ããŠããããâŠãšã³ãžãã¢ã§ããªãç§ãããããäœãšãåºæ¥ãŠããŸãèš³ã§ãããã
ãã ããã®æ¹åã«Cursorå çãèªå°ããã®ã¯ãç§ã®ãèãæ¹ãâŠã€ãŸãããã³ãããšã³ãžãã¢ãªã³ã°ã®æè¡ã§ã¯ããèš³ã§ãããããã¯èªç»èªè³ããŠããéšåã§ããããã
察ç以åã®æ¹æ³ã§èµ·åãããšä»¥äžã®æ§ã«ãªãèš³ã§ãããšã©ãŒèªäœããœãŒã¹ãç¹å®ããŠãããã ããâŠããã¯ããããããã

å°ã察çåŸã®ããããã¡ã€ã«ã¯ä»¥äžã§ãã以äžã¯ãFlux1çšã§ãããåè¿°ããŠããããã«ãç§ã¯torch.compileæé©åã®çºã«ãFlux1ãšHiDreamãåç»ããããã¢ãã«ããšã«ç°å¢ãåãæ¿ããŠããŸãã
(SDXLã§ã¯torch.compileã䜿çšããªãçºãã©ã®ç°å¢ã§ãå
±éã«äœ¿ãããäœããSD1.5ã¯sage-atttentionãæªå¯Ÿå¿(äœãå®èµ°ã¯ãã)ã®çºãxformerså°çšç°å¢ãå¥éçšæããŠãã)
set PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:32,garbage_collection_threshold:0.8
set TORCH_COMPILE_DEBUG=0
set TORCH_COMPILE_OPT_LEVEL=2
set TORCH_LOGS=recompiles,dynamo,inductor
set TORCH_INDUCTOR_VERBOSE=1
set TORCH_DYNAMO_CONFIG=force_parameter_static_shapes=false
set TRITON_CACHE_DIR=D:\USERFILES\Flux1\triton
set TORCH_HOME=D:\USERFILES\Flux1\torch
set TORCHINDUCTOR_CACHE_DIR=D:\USERFILES\Flux1\Inductor
set TEMP=D:\USERFILES\Flux1\Temp
set PYTHONPATH=D:\USERFILES\ComfyUI\ComfyUI
D:\USERFILES\ComfyUI\python_embeded\python.exe -m pip install -U protobuf
D:\USERFILES\ComfyUI\python_embeded\python.exe D:\USERFILES\ComfyUI\ComfyUI\run_comfyui_with_patch.py --use-sage-attention --windows-standalone-build --output-directory D:\USERFILES\A1111\outputs\ComfyUI
å°ãTensorFlowåŽãå®å šã«GetMessageClassããžãã¯ã«åãæ¿ããã°ããã®å¯Ÿçã¯äžèŠã«ãªããŸãããã€ã«ãªããããããŸãããã©ããå°ãªããšãææ°ã®2.19.0ã§ã¯ããŸã æªå¯Ÿå¿ãšããäºã§ãã
âŠ
仿¥ã®BGMã¯âŠå®å šæèŠDreamerãæ¢ããæ¢ããèšãã€ã€ãçµå±åªããTAKAãããªã®ã§ãæè¿ãŸã§æåŸã«ããç¶ããŠããŸããããéã«æ¢ããŸããããæ¬åœã«ããããŠã代ããã«å¿è«ããã§ãã
ONE OK ROCK: Wasted Nights
ææ©ã代åè©ãšåããŠãåæ²âŠã ãã©ãåãåããåã«é²ã¿ç¶ããTAKAããã®æ§æ ŒããããŠãããã€ãŸã§ããæ€åŠãã§æéãæ¢ãŸã£ãããã«ã€ã¡ãŒãžçžãããŠããã®ã¯å¥œããããªãã§ãããã
ã¢ãŒãã³ã°åšãã ã£ãŠããã€ãŸã§ãLOVEãã·ãŒã³ãšTHEãŽãŒãã ãã§èªãããŠããããã£ã¡ãšããŠãããåãã€ãŸã§ãããã§æèšæ¢ãŸã£ãŠãã ããããŠæããŸããããã
ONE OK ROCK - å®å šæèŠDreamer [THIS IS MY BUDOKAN ?! 2010.11.28]
ãã ããããåæ²ã§ããäºã«ã¯éããããŸããããã®äžæ²ã ãã§ã圌ãã¯é³æ¥œå²ã«ååãæ®ããŸãã
圌ããšèŠªäº€ãããRADWIMPSã®æŽæ¬¡éãããã圌ãäžã§ã®å¥œããªæ²ãšããŠãã¹ãã ãã©ããšèšãã€ã€ãããäžããŠããŸããçç±ãããªãºã ããšããçç±ã¯ããããããã§ããããã«ã¯ã©ã€ã ã¯å«ãã§ããããã«ã¯ã©ã€ã ã§ã¯ãç§ã¯ããã«ãªãºã ããšã«ããåããŸãã
å¿è«ãæ¢ã«è³Œå ¥æžã¿ã§ããããŸã ããŒã©ãŒå°ãšåããããã¬ãŒãã³ã°ã¯ããŠããŸããããã£ãšèºãæ»ããªããšããã£ã¡ã®å¿èãã€ããŠããããªãã
ãã«ã¯ã©ã€ã ã§åãããæ²...ã¯ãããšã¯ç§ã¯ããã§ããã
2000幎代åé ã«Vããã¯çã§äžäžã颚é¡ããäžå³¶ååããã®åæ²ãã€ããŽã§ã€ã¿ãŒããåœæã¯TAKUIå矩ã§ããã2010幎代ã«ã¯ãããããã«ãæ·±ãé¢ããããšã«ãªããŸããã
ããäžã€ã¯ããã£ã±ãããâŠãšã«ãããªãºã ãè¯ããã§ãã
ã¢ãŒãã³ã°åšã'14 ãWhat is LOVE?ã(Dance Shot Ver.)
ã€ããâããã®æ²ã«ããŠã¯ããªãºã ã¯çµæ§çŽ çŽã§ãããã®äººã®è»¢èª¿å¹ããŸãã£ãæ»ãå¹ããŠããªãºã ã®æ²ããããã¯ããã§å¥œãã§ããããã«ã¯ã©ã€ã ã§å¿èã«ãèã«ãè² è·ãããŠãæã«ããããŸæ»ãããŠããã£ã¡ãä»ããŠãããããã§ããããã«ã¯ã©ã€ã ã§å€§äºãªã®ã¯ãšã«ãããªãºã âŠããŒããã€ã¯å šè¬ããã§ããã©ãç»ãã«ã¯ç»ãä¹ã®ãªãºã ã£ãŠãã®ããããã§ããã