æè¿ãååãšã®äŒè©±ã®äžã§ã RTSãžã£ã³ã«ã®ããŸããŸãªã²ãŒã ã«ã€ããŠè°è«ããŸãããã3çªç®ã®ãã³ãµãã¯ãã®ãªãªãŒã¹ããªãéãå»ã£ãã®ãçåã«æããŸããã æ°ååŸã1ã€ã®æ€çŽ¢ã¯ãšãªã
ãŸããå±±ãã¢ãã¡ããã«è¡ããªããã°...
TL; DRïŒãµãŒããŒã䜿çšæ¹æ³ãããã³ãœãŒã¹ã³ãŒãã¯GitHubã§å ¥æã§ããŸã ã
æåã®ã¹ããã
ãããã³ã«ã®äžè¬çãªæ§é ãç解ããã«ã¯ãã²ãŒã ã¯ã©ã€ã¢ã³ããšå ¬åŒãµãŒããŒã®éã§çèŽãããæåã®4ã€ã®ãã±ããã§ååã§ãã ã ããç§ãã¡ã¯æã£ãŠããŸãïŒ
- éåžžã®TCP / IPã®äžã«æ§ç¯ããããããã¯ãŒã¯ãããã³ã«
- æå·åãŸãã¯é£èªåãªã
- çªå·ãæãäœããã®ããæãé«ããã®ãžãšé çªã«éä¿¡ãããã
ãã±ããããããŒã¯åžžã«æ£ç¢ºã«14ãã€ãã§ããã€ããŒããµã€ãºïŒ1ïŒãã³ãã³ãã³ãŒãïŒ2ïŒãããã³ãã±ããã¢ãã¬ã¹æå®çšã®2ã€ã®ãã¬ãŒã€ãŒèå¥åïŒ3.4ïŒãå«ãŸããŠããŸãã ç°¡åãª
ãŸããè¡ã®åã«ã¯ãã®é·ãããããŸãïŒ5ïŒã ç¹å®ã®ã³ãã³ãã³ãŒãã«å¿ããŠãããŒã¿åœ¢åŒãç°ãªããè¡ã®ãµã€ãºã1ã2ããŸãã¯4ãã€ãã§ç€ºãããããšã¯æ³šç®ã«å€ããŸãã
æ°ããã²ãŒã ã«ãŒã ã®äœæã«é¢ããå ¬ééç¥ãæ€èšããŠãã ããã
ããããŒããµã€ãºãã³ãã³ããããã³éä¿¡è ïŒ1,2,3ïŒã§å§ãŸããŸãããåä¿¡è èå¥åããããŸããïŒ4ïŒã ãã®ã¡ãã»ãŒãžã§ã¯ããå šå¡ã«éä¿¡ããæå³ããŸãããä»ã®ããŒã ã«ãšã£ãŠã¯ãèªåã®éšå±ã®å šå¡ã«ããæå³ããå ŽåããããŸãã æåã®è¡ïŒ5ïŒã«ã¯ãååããã¹ã¯ãŒããããã³ã²ãŒã ã®ã¿ã€ããšã«ãŒã ã®äœæè ïŒãã¹ãïŒã®ã¯ã©ã€ã¢ã³ãã®ããŒãžã§ã³ã«é¢ããæ å ±ãå«ãŸããŠããŸãã å€ãåºåãã«ã¯ãã¿ãæå\ tã䜿çšãããŸããããã¯09hã§ãã 次ã«ãéšå±ã«é¢ããæ å ±ãèšèŒãããè¡ïŒ6ïŒãç¶ããŸããããã¯ãéšå±ããªã¹ãã«è¡šç€ºããããã«å¿ èŠã§ãã ã¹ããŒã¿ã¹ãã©ã€ããã¬ã€ã€ãŒã®æ°ãã³ã³ãã¥ãŒã¿ãŒã®å¯ŸæŠçžæãã¯ããŒãºãããã¹ããããããã«2ã€ã®å€ãå«ãŸããŸãã ããã§ã¯ã瞊ç·ãã»ãã¬ãŒã¿ã®åœ¹å²ãæãããŸãã ãã®åŸã«ããããã4ãã€ãã®2ã€ã®å®æ°
èªæžããçãã質åãäºæ³ããŠãç§ã¯ããã«æ³šæãã...
- ã¯ããå宀ã®ãã¹ã¯ãŒãã¯ãµãŒããŒäžã®ãã¹ãŠã®ãã¬ãŒã€ãŒã«éä¿¡ãããŸãã
ïŒèšäºã ã³ãµãã¯ã«ã¯ç§å¯ããããŸãã ããåç §ïŒ - ããããã²ãŒã ã«ã¯ã«ãŒã ã®äœæè ã®ãã¹ãåã¯å¿ èŠãããŸããã ãã¹ãŠã®ãã±ããã¯ãµãŒããŒãä»ããŠéä¿¡ãããŸãã
ããã§ã¯ããã£ãšèå³æ·±ãç¹ã«ç§»ããŸãããã
翻蚳ã®é£ãã
æåã«ã TCPã®&&ããŒã¿ ãã£ã«ã¿ãŒã䜿çšããŠWiresharkã®ãã±ãããåæãã ACKã®ãããªã空ã®ããã±ãããç®ã®åã§ç¹æ» ããªãããã«ããŸããã ããæç¹ã§ã暪åãã«ãªã£ãããšãå€æããŸãããDCERPCãããã³ã«ãã±ããã® TCPãã€ããŒãã05h 00hãã€ãã§å§ãŸããã±ãããWiresharkã誀ã£ãŠåãå ¥ããããšãå€æããŸããã ç¹ã«ãããã¯ãéšå±ã«å ¥ã£ããã¬ãŒã€ãŒã«é¢ããéç¥ãå«ããã±ããã«åœ±é¿ããŸããã åžžã«ããããŒã®åŸã«æ£ç¢ºã«5ãã€ããå«ãŸããŸãã ããã«ãããWiresharkã¯TCPè² è·ãDataã§ã¯ãªã[Malformed PacketïŒDCERPC]ãšããŠããŒã¯ãããã±ãããé衚瀺ã«ããŸãã
ãã®å Žåãæ£ããã®ã¯æ°ããtcp.payloadãã£ã«ã¿ãŒã䜿çšããããšã§ãã Wiresharkããã®è² è·ãã©ã®ããã«è§£éãããã«é¢ä¿ãªãããã€ããŒããæã€ãã¹ãŠã®TCPãã±ããã衚瀺ããŸãã
ã·ãªã¢ã«åã®é²å
ãããã¯ãŒã¯ãããã³ã«ãéã«ãããšãåªå é äœã®ç°ãªãããŸããŸãªäººãããŸããŸãªã¿ã€ãã³ã°ã§ããã«åãçµãã ããšã¯æããã§ããã å€æ°ãæž¡ã3çš®é¡ã®è¡ãåºå¥ã§ããŸãã
- ã³ã³ãã¯ããªåŒŠ
è¡ã®é·ãã¯1ãã€ãã§ç€ºãããè¡ã«ã¯å€æ°ã®ååãå«ãŸãããã£ãŒã«ãã¯åçŽããŒã§åºåãããŸãïŒps=1337|pw=42|pg=12
- äžéç·
è¡ã®é·ãã¯2ãã€ãã§ç€ºããïŒä»¥äžã ã¿ã€ãShortã®æ° ãšåŒã°ã ãŸãïŒãå€ã¯ã¿ãã§åºåãããååã¯ãããŸããïŒ"MyRoom"\t"secret"\t0AFFE
- å¯å€§ãªåŒŠ
ç¹æ®ãªæååãå®éã«ã¯ãå€æ°åãšãã®andå€ã亀äºã«ãªã£ãæååã®é åã§ãã 1次å 圢åŒã®äžçš®ã®é£æ³é å ã ãã®äžã®åè¡ïŒé·ãïŒïŒã®é·ãã¯ã Intåã®æ°ã§ç€ºãããŸãã ãã®åœ¢åŒã®è©³çŽ°ãªèª¬æã¯ããµãŒããŒã®ãœãŒã¹ã³ãŒãã®ã³ã¡ã³ãã«èšèŒãããŠããŸãã
äŸ
è¡ã®é·ãã瀺ãæ°åã¯ãèµ€ãé»è²ã®åºåãèšå·ã§ ããŒã¯ãããŠããŸãã
æåŸã®äŸã¯ãéšå±ã®äœæè ãã²ãŒã ãé¢ãããšãã«ããã¹ãã®åœ¹å²ããã¬ãŒã€ãŒã®1人ã«ç§»ãããšãèŠå¶ããããã±ãŒãžããåãããŠããŸãã ç§ãç解ããŠããããã«ããã®æ©èœã¯ã²ãŒã ã®ãªãªãŒã¹åŸã«ããã«éçºãããŸããã æããã«ãããŒã¿è»¢éå¹çã®åé¡ã¯ãå ã®ãšã³ãžã³ã§ãããã¯ãŒã¯ãããã³ã«ãäœæãããšãã»ã©æ·±å»ã§ã¯ãããŸããã§ããã
ããããªãããã¡ãŒ
å€ãã®ãã±ããã®çµããã§ããã€ããŒãã¯4ã€ãŸãã¯6ã€ã®ãŒããã€ãã§çµãããŸãã ãã ããç¹å®ã®ããã±ãŒãžïŒç¹ã«ãã³ãã³ãã³ãŒã0xc8ããã³0x19dãäœ¿çš ïŒã§ã¯ãããŒã¿ãäºæãããããã¢ããããããšããããŸãã ãããã®ããã±ãŒãžã®1ã€ã§ããããŒãã£ããã®ã¡ãã»ãŒãžã®1ã€ã®æçãèŠã€ãããŸã§ãããããã©ãããæ¥ãŠããªãå¿ èŠãªã®ããç解ã§ããŸããã§ããã
ã©ããããå ¬åŒãµãŒããŒã¯ãéä¿¡åã«å¿çãã±ãããæžã蟌ãŸãããããã¡ãŒãåžžã«ãŒãã«ãããšã¯éãããæ®ãã®ãã€ãã¯çµäºãã€ãã§å€±ãããå¯èœæ§ããããŸãã 幞ããªããšã«ãã²ãŒã ã¯ã©ã€ã¢ã³ãèªäœã§ã¯ãããã¯ãšã©ãŒã«ã€ãªãããŸããã ããããããã§ãéçºã®ããŒã¹ãšå質管çã®ã¬ãã«ã«ã€ããŠäœããè¿°ã¹ãŠããŸãã
ããŸãç¥ããªã-ãã匷åãªãµãŒããŒ
...ãŸãã¯ã æªãã»ã©è¯ã ãã 䜿çšãããŠãããããã³ã«ã«é¢ããéåžžã«å€ãã®ç¥èãåŸãåŸããœãŒã¹ã³ãŒãã®éã¯å¢ããªããªãã溶ãå§ããŸããã ã€ã³ã¿ãŒãã§ã€ã¹ã¯ç°¡çŽ åããããµãŒããŒãä¿åã匷å¶ãããããŒã¿ïŒããšãã°ããããŒã®ç¶æ ãæ°ããå°çã«è»¢éããïŒãåæãããªããªããæååãšããŠä¿åããå§ããŸããã ãã±ããã®åãã€ãã®çºä¿¡å ãšå®å ãç¥ãå¿ èŠã¯ãããŸããã ãªãã€ã¬ã¯ãå ãšæ¹æ³ãç解ããã ãã§ãã
ãµãŒããŒã¯ãä»ã®ã¯ã©ã€ã¢ã³ããã以åã«åä¿¡ããããŒã¿ã§ã»ãšãã©ã®èŠæ±ã«å¿çããããç¹å¥ãªããã±ãŒãžã䜿çšããŠç®çã®ã¯ã©ã€ã¢ã³ããåŒã³åºããèŠæ±è ã«å¿çããªãã€ã¬ã¯ãããŸãã å¯èœãªå Žåã¯ããªãã·ã§ã³ã®æååãçç¥ããnullãã€ãã«çœ®ãæããŸããã ãŸã第äžã«ãããã¯ãã¬ã€ã€ãŒã®ã¬ãŒãã£ã³ã°ããã€ã³ãæ°ãããã³åå©ã«é¢ããããŒã¿ã«é¢ä¿ããŸãã
å Žåã«ãã£ãŠã¯ãå¹ åºããããã±ãããªã¬ãŒãã¯ã©ã€ã¢ã³ãåŽã®ãšã©ãŒãçæããããšãããããŸããã ç¹ã«ãã³ãã³ãã³ãŒã0x1b3ãš0x1b4
䞊ã¶
ç§ã«ãšã£ãŠç¹ã«é£ããã£ãã®ã¯ãã²ãŒã ã®èµ·åãšåæã®åŽé¢ã§ããã ããŒãæã«ãã±ãããªã¬ãŒãåŠçããã®ã§ãã²ãŒã äžã«ãã¹ãŠã®ã¯ã©ã€ã¢ã³ãã0x4b0ã³ãã³ãã³ãŒãã§ãã±ãããéä¿¡ããããšã«æ°ä»ããŸããã ãã®å Žåãã«ãŒã ã®äœæè ã®çªå·ã¯èå¥åã®1ã€ã®ãã£ãŒã«ãã«ããã2çªç®ã®ãã£ãŒã«ãã¯ç©ºã§ãã ããããè«ççã«ã¢ãããŒãããããã
代ããã«ããµãŒããŒèªäœããã±ããã®ãœãŒã¹ãç£èŠãããã¹ããéåžžã®ãã¬ãŒã€ãŒãã確èªããå¿ èŠããããŸãã
ãšããã§ãã²ãŒã äžã«ãã¹ããå€æŽãããšã泚æã
åæ©çãªLAN
äžè«ã«åããŠãã¯ã©ã€ã¢ã³ãã«ã¯ããŒã«ã«ãããã¯ãŒã¯ã§ã®å®å šãªã²ãŒã ã«å¿ èŠãªæ©èœããŸã ãããŸãã ãããã¯ãŒã¯ãã©ãã£ãã¯ãåæãããšãå€ãã®TCPãã±ããã®äžã§ãã«ãŒã ã®äœæè ãUDPãä»ããŠãã¬ãŒã€ãŒã®æ°ãšã«ãŒã ã®ã¹ããŒã¿ã¹ã«é¢ããéç¥ãéä¿¡ããŠããããšã«æ°ä»ããŸããã
ããã«ãã¯ã©ã€ã¢ã³ããå解ãããšãã«ãäŸå€ãçºçããŠãšã©ãŒããã¹ãã衚瀺ãããšãã«åŒã³åºãããé¢æ°ã«ééããŸããã 圌女ã®åŒã³åºããæ©ããŠã圌女ã«éä¿¡ãããããã¹ããåæãããšãäŸå€ãçºçããããã·ãŒãžã£ã®å®éã®ååãå€å¥ã§ããŸãã çµæã«å°ãé©ãããç§ã¯åŒŠã§éãã ã
ããã«ç§ãèŠããã®ããããŸãïŒ
function LanPublicServerGetRegIDFrom
function LanPublicServerGetRegIDTo
function LanPublicServerGetRegMessage
function LanPublicServerGetClientTeamByIndex
function LanPublicServerGetClientTeamByClientID
function LanPublicServerGetClientSpecByIndex
function LanPublicServerGetClientSpecByClientID
function LanPublicServerGetClientInfoToParserByIndex
function LanPublicServerGetClientInfoToParserByClientID
function LanPublicServerGetSessionInfoToParserByIndex
function LanPublicServerGetSessionInfoToParserByClientID
function LanPublicServerGetClientsCount
function LanPublicServerGetSessionsCount
function LanPublicServerGetClientIndexByClientID
function LanPublicServerGetClientIndexByClientNick
function LanPublicServerGetSessionIndexByClientID
function LanPublicServerProfScore
function LanPublicServerProfCountry
function LanPublicServerProfGamesPlayed
function LanPublicServerProfGamesWin
function LanPublicServerProfLastGameTime
function LanPublicServerProfInfo
function LanMyInfoHost
function LanMyInfoIP
function LanMyInfoID
function LanMyInfoSpec
function LanMyInfoName
function LanMyInfoPlayer
function LanGetServerInfoToParser
function LanIpToString
function LanIpToInt
function LanGetClientsCount
function LanGetClientIDByIndex
function LanGetClientHostByIndex
function LanGetClientNameByIndex
function LanGetClientSpecByIndex
function LanGetClientIndexByID
function LanGetClientPlayerNameByIndex
function LanSelectParser
function LanGetParserID
function LanGetSendDataThreadCount
function LanGetSendDataThreadEnabled
function LanGetNoDelayOption
function LanGetOptimizedPackage
function LanGetOptimizedPackageDef
2ã€ã®éžæè¢ããããŸããéçºè ããã®ãããªãŠãŒã¢ã¢ãæã£ãŠãããããã«ããã¬ã€ã€ãŒã²ãŒã ã«æ¥ç¶ãããŠãããã¹ãŠã®ãã®ã«ç¥èªLANãæ®éçã«äœ¿çšããŠããŸããã
C ++ãAsioããã³ç¡å·ã®è
æåã«ã¯ãã¹ãã©ãããã©ãŒã ãµãŒããŒãäœæãããããã¯ãŒã¯ããã°ã©ãã³ã°ã®ç¥èãåºããããšãç®æšã«èšå®ãããããå®è£ ã«C ++èšèªãšAsioã©ã€ãã©ãªãéžæããŸããã åŸè ã«ãããéåææ§ãšããåçŽãªã³ãŒããæ¯æããŠããã«ãã¹ã¬ãããšé¢é£ããããŒã¿ã¢ã¯ã»ã¹æ©èœãæŸæ£ããããšãã§ããŸããã åºç€ãšããŠãç§ã¯ã©ã€ãã©ãªãŒã»ãªããžããªãŒã®äŸã®1ã€ã®ãœãŒã¹ã»ã³ãŒããåããŸããã
ç§ã«ãšã£ãŠéçºã®æãèå³æ·±ãåŽé¢ã¯ããã±ããã®éåæéä¿¡äžã®ããŒã¿ãããã¡ã®å¯çšæ§ã®åé¡ã§ããã åæã«ãå²ãåœãŠã®æ°ãæå°éã«æããã¡ã¢ãªå ã®ããŒã¿ãã³ããŒããããšããŸããã ãã¹ãŠã«å ããŠããµãŒããŒã«ã¯ããã±ãããåä¿¡ããããã®ããªã倧ããªãããã¡ãå¿ èŠã§ãã ã²ãŒã ã®éå§åã«ãããããŒã¿ãéä¿¡ãããšãã®TCPãã€ããŒãã®ãµã€ãºã¯800ãããã€ããè¶ ããããšããããŸãã
ãã®çµæã次ã®ããã«ããã±ãŒãžã®èªã¿åããäœæãéä¿¡ã®ããã»ã¹ãå®è£ ããŸããã
- æ°ããã¯ã©ã€ã¢ã³ããæ¥ç¶ãããšããµãŒããŒã¯ã std :: vector <unsigned char>ã¿ã€ãã®ååã«å€§ããïŒ1 MiBïŒãããã¡ãŒïŒ
以é ãBufferãšåŒã³ãŸã ïŒãå«ãSessionã¯ã©ã¹ã®ãªããžã§ã¯ããäœæããŸãã - éåæèªã¿åãæäœãå®äºããåŸããã®ã¢ãã¬ã¹ã¯ãã®ãããã¡ãŒã«ã¡ã€ã³ãã±ããåŠçæ©èœã«è»¢éãããŸãã 次ã®èªã¿åãæäœã¯ããã®é¢æ°ã®å®äºåŸã«ã®ã¿éå§ãããåŠçæéã®ãããã¡å ã®ããŒã¿ã®å®å šæ§ãä¿èšŒããŸãã
- åŠçã®éå§æã«ã Packetã¯ã©ã¹ã®ãªããžã§ã¯ããäœæãããŸããããã¯ãããŒã¿ã®èªã¿åããšã·ãªã¢ã«åã®ããã®ã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããŸãã ããã«ããããµãŒããŒã®å¿çã¯ãã¹ãŠã»ãã·ã§ã³ãªããžã§ã¯ãã®åããããã¡ã«æžã蟌ãŸãããã±ããã®éä¿¡è ã«å²ãåœãŠãããŸãã
- ããã±ãŒãžã«å¯Ÿãããã¹ãŠã®æäœãå®äºãããšãsendé¢æ°ã¯std :: make_shared <Buffer>ã䜿çšããŠãããã¡ãŒãå²ãåœãŠãŸãã åæã«ãå¿çãã±ããã®æ£ç¢ºãªãµã€ãºãèæ ®ããŠã ã»ãã·ã§ã³å ã®åããããã¡ãŒã®å埩åããããã¡ãŒã³ã³ã¹ãã©ã¯ã¿ãŒã«æž¡ãããŸãïŒèšé²äžã«ãã±ããããããç£èŠããŸãïŒã ã€ãŸã 1åã®æäœã§ãæåã«ãã±ãããšãã€ã³ã¿ãŒã®å¶åŸ¡ãããã¯ã«ååãªã¡ã¢ãªãïŒ äžåºŠã« ïŒå²ãåœãŠãŠãããéä¿¡ãã¹ã倧ããªãããã¡ãŒããæ£ç¢ºã«ãã€ãæ°ãã³ããŒããŸãã
- æ°ãããããã¡ã¯ãã¿ã€ãstd :: shared_ptr <Buffer> ïŒ
以é BufPtrãšåŒã¶ ïŒã®åä¿¡ãã€ã³ã¿ã䜿çšããŠããã±ããã®éä¿¡å ãšãªããã¹ãŠã®ã¯ã©ã€ã¢ã³ãã®Sessionãªããžã§ã¯ãã«æž¡ãããŸãã ããã§ãã¿ã€ãstd :: deque <BufPtr>ã®ããŒã«ã«ãã¥ãŒã«é 眮ãããŸãã ããããã®ã¯ã©ã€ã¢ã³ãã®ãã¥ãŒã«ããã€ã³ããã¯ã¹ã®åã³ããŒã¯ãåç §ã«ãŠã³ã¿ãŒãå¢ãããŸãã ãã®åŸããã±ããåŠçã¯çµäºããæåã®ã»ãã·ã§ã³ãããã¡ã¯æ¬¡ã®ãã±ãããåä¿¡ããæºåãæŽããŸãã - ãã±ããã®éåæèšé²ïŒéä¿¡ïŒæäœãå®äºãããšããã€ã³ã¿ãŒã¯å®å ã¯ã©ã€ã¢ã³ãã®ããŒã«ã«ã»ãã·ã§ã³ãã¥ãŒããåé€ãããåç §ã«ãŠã³ã¿ãŒãäžãããŸãã ãã±ããããã¥ãŒã«å ¥ã£ãŠãããã¹ãŠã®ã¯ã©ã€ã¢ã³ãã«éä¿¡ããããšããã«ãã«ãŠã³ã¿ãŒã¯ãŒãã«ãªã»ãããããã¹ããŒããã€ã³ã¿ãŒã¯ããèªäœã§ã¡ã¢ãªã解æŸããŸãã
ã©ã®ããã«å€æããŠããã©ã ãåŒãããŸããŸãªã³ã³ãããC ++æšæºãžã®ã¹ããŒããã€ã³ã¿ã®è¿œå ã«ããããã®ãããªã·ã¹ãã ã®èšèšã®è€éããå€§å¹ ã«è»œæžãããŸããã ãµãŒããŒãäœæãããšãã«ãç足ã¯æãããŸããã§ããã
ã·ã£ãã¿ãŒã¹ããŒããã¹ã
ãµãŒããŒã§ã®äœæ¥ãçµäºããåºæ¬çãªæ©èœããã¹ãããåŸãé·ãæéããããŠãã¹ããééããåŸããµãŒããŒã®å®å®æ§ãšåæã確èªããããšã«ããŸããã ãããè¡ãããã«ãããŒã«ã«ãããã¯ãŒã¯äžã«3人ã®ãã¬ãŒã€ãŒãš5ã€ã®è€éãªAIãåããéšå±ãäœæããŸããã ãã¹ãã§ã¯ãããããµã€ãºããããžããæ°ã人å£ãããã³éæ»ææéã«é¢ããæ倧ãã©ã¡ãŒã¿ãŒãéžæããŸããã ã²ãŒã ãéå§ããæ°ååŸã«ã¿ã¹ã¯ãããŒãžã£ãŒã®ãã¹ãã³ã³ãã¥ãŒã¿ãŒã§ã²ãŒã ããã»ã¹ãåæ¢ããŠãäºæããªãã·ã£ããããŠã³ãã·ãã¥ã¬ãŒãããŸããã ãã®åŸãæ®ãã®2人ã®ã¯ã©ã€ã¢ã³ãã¯ãäžæ©äžæŸçœ®ãããŸããã
çµéšè±å¯ãªãã¬ã€ã€ãŒã¯ããããã次ã«äœãèµ·ãã£ããããã§ã«æšæž¬ããŠããã§ãããã ã€ãŸãããµãŒããŒã¯ãã¹ãã«åæ ŒããŸãããã
ãããã«
å ¬åŒãµãŒããŒã®ãã©ãã¯ããã¯ã¹ãã³ããŒããããã»ã¹ã«èå³ãããããšãé¡ã£ãŠããŸãã ãŸããã²ãŒã ã®éçºè ããã¬ã€ã€ãŒã«åæ ããæçµçã«ããŒã«ã«ãããã¯ãŒã¯ã§ãã«ã