Save 37% off PRO during our Black Friday Sale! »

メガネとBluetooth Low Energyでお喋りする

Bcbc80799bc32840662a366768318a9b?s=47 KOBA789
November 20, 2021

メガネとBluetooth Low Energyでお喋りする

Kernel/VM 探検隊 online part4 で発表したスライドです。
https://kernelvm.connpass.com/event/225573/

コードやデモは以下にあります。
https://github.com/KOBA789/memex

この解析作業の模様は一部録画があります。合わせてご覧ください。
https://www.youtube.com/watch?v=9B1MZC_yb1g

Bcbc80799bc32840662a366768318a9b?s=128

KOBA789

November 20, 2021
Tweet

Transcript

  1. KOBA789 ϝΨωͱ 
 #MVFUPPUI-PX&OFSHZͰ 
 ͓஻Γ͢Δ ͋Δ͍͸42-ͰύέοτΛղੳ͢Δํ๏

  2. KOBA789 ͓͔͛͞·Ͱब৬͠·ͨ͠ ‣ ࢓ࣄ ‣ 3VTUͰਓ޻Ӵ੕ͷιϑτ΢ΣΞΛॻ͍ͨΓ ‣ झຯ ‣ ࣗ࡞%#.4Λ࡞ͬͨΓ

    ‣ ϒϥ΢βͰಈ͘ి࣓ϦϨʔճ࿏$"% 
 γϛϡϨʔλΛ࡞ͬͨΓ 
 ʢ,FSOFM7.୳ݕୂPOMJOFQBSUͷͱ͖ͷωλʣ ‣ :PV5VCFS׆ಈΛ΍ͬͨΓ΍Βͳ͔ͬͨΓ
  3. ,0#" ϝΨωͱ 
 #MVFUPPUI-PX&OFSHZͰ 
 ͓஻Γ͢Δ ͋Δ͍͸42-ͰύέοτΛղੳ͢Δํ๏

  4. #-&Λ஻ΔϝΨω https://twitter.com/hikalium/status/1453308702560165888

  5. ਺೔ޙ

  6. #-&Λ஻ΔϝΨω ങͬͪͬͨ w ֤छηϯαʔ෇͖ w Ճ଎౓ηϯαʔ w δϟΠϩηϯαʔ w ےిηϯαʔʢ·͹͖ͨͱ͔ʣ

    w 8FC4PDLFUͷ࢓༷͕ެ։͞Ε͍ͯΔ https://twitter.com/KOBA789/status/1454285016129687553
  7. #-&Λ஻ΔϝΨω ങͬͪͬͨ w ֤छηϯαʔ෇͖ w Ճ଎౓ηϯαʔ w δϟΠϩηϯαʔ w ےిηϯαʔʢ·͹͖ͨͱ͔ʣ

    w 8FC4PDLFUͷ࢓༷͕ެ։͞Ε͍ͯΔ https://twitter.com/KOBA789/status/1454285016129687553
  8. #-&Λ஻ΔϝΨω ങͬͪͬͨ w ֤छηϯαʔ෇͖ w Ճ଎౓ηϯαʔ w δϟΠϩηϯαʔ w ےిηϯαʔʢ·͹͖ͨͱ͔ʣ

    w 8FC4PDLFUͷ࢓༷͕ެ։͞Ε͍ͯΔ https://twitter.com/KOBA789/status/1454285016129687553 🤔#-&Ͱ͸ͳ͍ͷ͔ʁ
  9. Ͳ͏͍͏͜ͱͩͬͯ͹Α ઐ༻ͷΞϓϦ͕#-&ͱ8FC4PDLFUΛϓϩΩγ͍ͯ͠Δ 👓 📱 💻 #MVFUPPUI-PX&OFSHZ ʢඇެ։ʣ 8FC4PDLFU ʢެ։ʣ ઐ༻J04ΞϓϦ

    84αʔόʔ
  10. ͓ͱͳ͘͠8FC4PDLFU࢖͑͹Α͘ͳ͍ʁ ͍΍ͳΜ͡Όʂ w J04ΞϓϦΛ࢖͏ͷ͕μϧ͍ w ͓खܰͳΞόλʔ؀ڥ͕΄͍͠Μ͡Ό w ཧ૝తʹ͸.BD#PPL୆Ͱ׬݁ͯ͠΄͍͠ w ͳΜ͔ᚒͳͷͰղੳ͍ͨ͠

    w ࢓༷ඇެ։༡ͼߕ൹͕͋Δ
  11. ͱ͍͏Θ͚Ͱղੳ͢Δ͜ͱʹ

  12. ͳʹ͸ͱ΋͋ΕύέοτΛΩϟϓνϟ ͔͠͠Ͳ͏΍ͬͯʁ w ެࣜͷΞϓϦͷ௨৴Λ೷͖͍ͨ w ͔͠͠ಈ࡞؀ڥ͸J04 w 8JSF4IBSLͱ͔ͳ͍ w ύέοτΩϟϓνϟͰ͖Δͷʁ

  13. J04Ͱͷ#-&ύέοτΩϟϓνϟ ࣮͸"QQMF७ਖ਼ͷ։ൃπʔϧͰͰ͖Δ w J04ଆʹ։ൃ༻ͷϓϩϑΝΠϧΛΠϯετʔϧ͢Δ w IUUQTEFWFMPQFSBQQMFDPNCVHSFQPSUJOHQSP fi MFTBOEMPHT w J1IPOFͱ.BD#PPLΛ64#έʔϒϧͰ઀ଓ͢Δ

    w NBD04ଆͰ1BDLFU-PHHFSΛىಈ͢Δ w "EEJUJPOBM5PPMTʹೖͬͯΔ w ύέοτ͕ͲΜͲΜྲྀΕͯ͘Δʂɹָ͍͠ʂʂ
  14. ׆͖ͷ͍͍ύέοτͷ༷ࢠ ઈົʹ࢖͍ͮΒ͍6*͕ͩɺͪΌΜͱ࠾औͰ͖Δ

  15. ύέοτ؍࡯ ͳΜ͔༷ࢠ͕͓͔͍͠ w #-&ͱ͍͑͹ɺ("55Ͱ஋͕ 
 $IBSBDUFSJTUJD͝ͱʹೖ͍ͬͯΔ͜ͱ͕ଟ͍ w 9࣠ํ޲ͷՃ଎౓ͷ$IBSBDUFSJTUJDɺͷΑ͏ʹ w ͜ͷϝΨω͸ͭͷCZUFͷ$IBSBDUFSJTUJDʹ

    
 શ෦Λԡ͠ࠐΜͰ͍ΔΑ͏ͩ w ͦΕͧΕͷ஋͕ͲͷΦϑηοτʹೖ͍ͬͯΔͷ͔ 
 Θ͔ΒΜ
  16. 14 18 dd 6a 3f 6b 7f 6c 9b ff

    88 6f c5 b4 61 41 30 9e 0a ab 14 18 dd 67 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 9e 0b ab 14 18 dd 68 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 9e 0a ab 14 18 dd 65 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 ae 0c ab 14 18 dd 66 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 30 8d 0a ab 14 18 dd 63 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 30 7e 08 ab 14 18 dd 64 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 30 6f 0b ab 14 18 dd 61 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 30 81 09 ab 14 18 dd 62 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 de 0c ab 14 18 dd 5f 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 08 08 ab 14 18 dd 60 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 3b 0f ab 14 18 dd 5d 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 31 e2 00 ab 14 18 dd 5e 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 31 76 05 ab 14 18 dd 5b 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 30 64 02 ab 14 18 dd 5c 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 4b 1a 0e ab 14 18 dd 59 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 42 30 fe 04 ab 14 18 dd 5a 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 42 31 00 07 ab 14 18 dd 57 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 42 31 a1 06 ab 14 18 dd 58 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 31 e0 05 ab 14 18 dd 55 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 31 5c 03 ab 14 18 dd 56 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 30 0b 0b ab 14 18 dd 53 3f 6b 7f 6c 9b ff 88 6f c5 b4 60 40 30 c6 0a ab 14 18 dd 54 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 31 99 03 ab
  17. 14 18 dd 6a 3f 6b 7f 6c 9b ff

    88 6f c5 b4 61 41 30 9e 0a ab 14 18 dd 67 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 9e 0b ab 14 18 dd 68 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 9e 0a ab 14 18 dd 65 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 ae 0c ab 14 18 dd 66 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 30 8d 0a ab 14 18 dd 63 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 30 7e 08 ab 14 18 dd 64 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 30 6f 0b ab 14 18 dd 61 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 30 81 09 ab 14 18 dd 62 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 de 0c ab 14 18 dd 5f 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 08 08 ab 14 18 dd 60 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 3b 0f ab 14 18 dd 5d 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 31 e2 00 ab 14 18 dd 5e 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 31 76 05 ab 14 18 dd 5b 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 30 64 02 ab 14 18 dd 5c 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 4b 1a 0e ab 14 18 dd 59 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 42 30 fe 04 ab 14 18 dd 5a 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 42 31 00 07 ab 14 18 dd 57 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 42 31 a1 06 ab 14 18 dd 58 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 31 e0 05 ab 14 18 dd 55 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 31 5c 03 ab 14 18 dd 56 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 30 0b 0b ab 14 18 dd 53 3f 6b 7f 6c 9b ff 88 6f c5 b4 60 40 30 c6 0a ab 14 18 dd 54 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 31 99 03 ab γʔέϯε൪߸ͷΑ͏͕ͩɺ 
 ୯ௐ૿Ճ͡Όͳ͍
  18. 14 18 dd 6a 3f 6b 7f 6c 9b ff

    88 6f c5 b4 61 41 30 9e 0a ab 14 18 dd 67 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 9e 0b ab 14 18 dd 68 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 9e 0a ab 14 18 dd 65 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 ae 0c ab 14 18 dd 66 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 30 8d 0a ab 14 18 dd 63 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 30 7e 08 ab 14 18 dd 64 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 30 6f 0b ab 14 18 dd 61 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 30 81 09 ab 14 18 dd 62 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 de 0c ab 14 18 dd 5f 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 08 08 ab 14 18 dd 60 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 3b 0f ab 14 18 dd 5d 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 31 e2 00 ab 14 18 dd 5e 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 31 76 05 ab 14 18 dd 5b 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 30 64 02 ab 14 18 dd 5c 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 4b 1a 0e ab 14 18 dd 59 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 42 30 fe 04 ab 14 18 dd 5a 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 42 31 00 07 ab 14 18 dd 57 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 42 31 a1 06 ab 14 18 dd 58 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 31 e0 05 ab 14 18 dd 55 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 31 5c 03 ab 14 18 dd 56 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 30 0b 0b ab 14 18 dd 53 3f 6b 7f 6c 9b ff 88 6f c5 b4 60 40 30 c6 0a ab 14 18 dd 54 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 40 31 99 03 ab Ճ଎౓ηϯαʔͷ஋ͬΆ͍͕ɺ 
 ࣠ͳͷʹCZUFʁ
  19. ղੳͷ࣌ؒͩʂ

  20. ղੳͷํ਑ جຊ͸໨ྗ w ͳΜΒ͔ͷ஋͕903͞ΕͯͨΓͦ͠͏͕ͩɺ 
 ͦΜͳʹ೉͍͜͠ͱ͸͍ͯ͠ͳ͍͸ͣ w ϝΨωʹຒΊࠐΊΔαΠζͷϓϩηοαͰ 
 Ͱ͖Δ͜ͱʹ͸ݶք͕͋Δ

    w 8FC4PDLFUͷσʔλͱಉ࣌ʹΩϟϓνϟͯ͠ɺ 
 ԣʹฒ΂ͯάοͱᛀΉ
  21. Ωϟϓνϟ͢Δ΍ͭΛ࡞Δ 8FC4PDLFUฤ w /PEFKTͰࡶʹॻ͘ w ʢ׬ʣ

  22. Ωϟϓνϟ͢Δ΍ͭΛ࡞Δ #MVFUPPUI-PX&OFSHZฤ w ಉ࣌ʹΩϟϓνϟ͢Δͱ͍͏͜ͱ͸ɺ 
 J04Ͱ΍Δ͔͠ͳ͍ w ͭ·Γ1BDLFU-PHHFS͔͠ͳ͍ w 1BDLFU-PHHFS͸Ωϟϓνϟ݁ՌΛอଘͰ͖Δ

    w CUTOPPQܗࣜ
  23. CUTOPPQ ύέοτΩϟϓνϟͷه࿥ܗࣜ w ύʔεͰ͖ΔϥΠϒϥϦΛ୳͚ͨ͠Ͳແ͔ͬͨ w ࢓ํͳ͍ͷͰࣗྗͰύʔε w ݻఆ௕ͷϑΝΠϧϔομͷ͋ͱʹɺ 
 Մม௕ͷϨίʔυ͕ฒͿ͚ͩ

    w 3VTUͰద౰ʹॻ͍ͨΒ͙͢Ͱ͖ͨ
  24. ద౰ͳμϯϓ͕ಘΒΕͨ ద౰ͳ8FC4PDLFUμϯϓʢ+40/ʣ ద౰ͳ#-&μϯϓʢ$47ʣ

  25. ໨ྗΛ׆༻͢Δʹ͸ՄࢹԽ͕େࣄ Ͳ͏΍ͬͯՄࢹԽ͢Δ͔ w ,0#"͸1ZUIPO͕ॻ͚ͳ͍ 
 ʢॻ͖ͨ͘ͳ͍ʣ w NBUQMPUMJCͱ͔࢖͑ͳ͍ w 42-ͷΤίγεςϜʹ͸

    
 ศརͳՄࢹԽπʔϧ͕͍ͬͺ͍ w ͖ͬ͞ͷμϯϓΛ42-%#ʹ 
 ೖΕΕ͹͍͍ͷͰ͸ʁ
  26. #EBTI &MFDUSPO੡ͷ͓खܰμογϡϘʔυΞϓϦ w IUUQTHJUIVCDPNCEBTIBQQCEBTI w ͱʹ͔͘άϥϑ͕ࡶʹඳ͚Δ

  27. άϥϑΛඳ͍ͯோΊΔ w ૒ํʹߦ൪߸Λ෇༩ͨ͠ͷͰɺ 
 ͦΕͰ+0*/ w ͜ΕҐ૬߹ͬͯΜͷ͔ʁ w Ωϟϓνϟ։࢝λΠϛϯά͕ 


    ἧͬͯͳ͍ͷͰઈର߹ͬͯͳ͍
  28. άϥϑͷҐ૬Λἧ͑Δ ͳʹΛ໨ҹʹҐ૬Λἧ͑Δ͔ w ·͹͖ͨͨ͠ͱ͖͚ͩมԽ͢ΔΦΫςοτ͕͋Δ w ϫϯγϣοτͳͷͰҐ૬߹Θͤʹ࢖͍΍͍͢ 14 18 dd 7f

    3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 c9 0c ab 14 18 dd 80 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 e8 0c ab 14 18 dd 7d 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 eb 0f ab 14 18 dd 7e 3f 7b bb 6c 9b ff 88 6f c5 b4 61 41 30 5d 03 ab 14 18 dd 7b 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 8b 0e ab 14 18 dd 7c 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 42 30 eb 0e ab 14 18 dd 79 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 42 31 ab 07 ab 14 18 dd 7a 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 42 31 ab 06 ab 14 18 dd 77 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 31 0b 02 ab 14 18 dd 78 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 1b 0a ab 14 18 dd 75 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 1b 00 ab 14 18 dd 76 3f 6b 7f 6c 9b ff 88 6f c5 b4 61 41 30 9c 03 ab
  29. ·͹͖ͨͬΆύϥϝʔλΛՄࢹԽ ஋ͷେখ͸ͱ΋͔͘ɺͪΐͬͱಈ͔ͨ͠ΒॏͳΓͦ͏

  30. Ґ૬͕ἧͬͨͷͰάοͱᛀΜͰ͍͘ ·ͣ͸γʔέϯε൪߸ w 8FC4PDLFUଆͷγʔέϯε൪߸ͱ#-&ଆͷγʔέϯε൪߸ͬΆ͍ 
 ΦΫςοτΛฒ΂Δ w ͳΜ͔ΪβΪβ͍ͯ͠Δ w 903ͬΆ͍

    w ܏͖͕ٯ w ิ਺ʁ w ((s^126)+1)%256Ͱͨ͠ w 5IBOLT!YSFLLVTV
  31. Ճ଎౓ͷϏοτ਺Λௐ΂Δ όΠτʹ࣠ऩΊ͍ͯΔՄೳੑ͕͋Δ w ϝΨωΛ੩ஔ͢Δ w ॏྗՃ଎౓ΛಘΔ w ϊΠζʹΑΔ༳Β͔͗Β෼ղೳΛಘΔ w ϝΨωΛڧ͘ৼΓճ͢

    w ࠷େ஋ΛಘΔ w CJUͬΆ͍ͱ͍͏͜ͱ͕Θ͔Δ w ΍ͬͺΓόΠτʹԡ͠ࠐΜͰΔ
  32. όΠτͷ಺༁Λௐ΂Δ ͜͏͍͏ͱ͖ʹ42-͕ศརͳΜͰ͢Α w ੜͷ஋͕มԽ͍ͯ͠ͳ͍ͷʹ 
 903͞Εͨ஋͕มԽ͢Δ͜ͱ͸ͳ͍ w ࣠͋ͨΓCJUͳͷͰɺ 
 CJUΞϥΠϯ͞Ε͍ͯΔ͜ͱΛظ଴͢Δ

    w ͢΂ͯͷ૊Έ߹ΘͤͰ 
 ୯ࣹͷؔ܎ʹ͋ΔϏοτྻΛ୳͢
  33. 9࣠ͷ্CJU͕Ͳ͜ʹ૬౰͢Δ͔ௐ΂Δ 9࣠ͷੜͷ஋Ͱɺ903͞Εͨ஋Λ(3061#: w ͡Όͳ͍஋͕͋Δྻ͸ 
 9࣠ͱؔ܎ແ͍ྻ

  34. ؔ܎ͷ͋Δྻ͕ߜΓࠐΊͨΒϒϧʔτϑΥʔε ,0#"͸਺ֶ͕Ͱ͖ͳ͍ w y=(x^a)+b というエンコードを期待する w ͨ͘͞Μͷ Y Z ͷ૊͔ΒB

    CΛٻΊΔ w ࿈ཱํఔࣜͱͯ͠ղ͚ͦ͏ͳؾ΋͢Δ w ߴʑ ͷ୳ࡧൣғͳͷͰྗۀͰղ͘ for (let a = 0; a < max; a ++) { for (let b = 0; b < max; b ++) { if (constraints.every(([o, e]) => (((o ^ a) + b) % max) === e)) { console.log(a, b); } } }
  35. Ճ଎౓ηϯαʔͷ஋Λ 
 खʹೖΕ·ͨ͠🎉

  36. ΊͰͨ͠ΊͰͨ͠ʁ

  37. #-&Ͱ͓͠Ό΂Γ 
 Ͱ͖ΔΑ͏ʹͳͬͨͷͰ

  38. #-&Ͱ௨৴͢ΔΞϓϦΛ ॻ͖͍ͨ

  39. #MVF;

  40. $PSF#MVFUPPUI

  41. 8FC#MVFUPPUI

  42. 8FC#MVFUPPUI ΢Σϒϒϥ΢βͰ#MVFUPPUI-PX&OFSHZ͕஻ΕΔʂ w ϒϥ΢βͰϝΨωͱ͓͠Ό΂Γ͢Δͧʂ w ྫʹΑͬͯ'JSFGPY͸৐ΓؾͰͳ͍ w ΢Σϒඪ४ʹͳΔ͔͸͔ͳΓո͍͚͠Ͳɺ 
 ༡Ϳ͚ͩͳΒ͍͍Ͱ͠ΐ͏

  43. σϞ https://github.com/KOBA789/memex