exiftool_vendored 9.45.0 → 9.46.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of exiftool_vendored might be problematic. Click here for more details.

Files changed (1073) hide show
  1. checksums.yaml +8 -8
  2. data/bin/Image-ExifTool-9.46/Changes +6444 -0
  3. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/MANIFEST +0 -0
  4. data/bin/Image-ExifTool-9.46/META.yml +27 -0
  5. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/Makefile.PL +0 -0
  6. data/bin/Image-ExifTool-9.46/README +228 -0
  7. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/exif2iptc.args +0 -0
  8. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/exif2xmp.args +0 -0
  9. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/gps2xmp.args +0 -0
  10. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/iptc2exif.args +0 -0
  11. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/iptc2xmp.args +0 -0
  12. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/iptcCore.args +0 -0
  13. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/pdf2xmp.args +0 -0
  14. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/xmp2exif.args +0 -0
  15. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/xmp2gps.args +0 -0
  16. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/xmp2iptc.args +0 -0
  17. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/xmp2pdf.args +0 -0
  18. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/config_files/ExifTool_config +0 -0
  19. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/config_files/convert_regions.config +0 -0
  20. data/bin/Image-ExifTool-9.46/exiftool +5767 -0
  21. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/fmt_files/gpx.fmt +0 -0
  22. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/fmt_files/gpx_wpt.fmt +0 -0
  23. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/fmt_files/kml.fmt +0 -0
  24. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/ExifTool.html +0 -0
  25. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/MIE1.1-20070121.pdf +0 -0
  26. data/bin/Image-ExifTool-9.46/html/Shift.html +173 -0
  27. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/AFCP.html +0 -0
  28. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/AIFF.html +0 -0
  29. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/APE.html +0 -0
  30. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/APP12.html +0 -0
  31. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/ASF.html +0 -0
  32. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Apple.html +0 -0
  33. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/BMP.html +0 -0
  34. data/bin/Image-ExifTool-9.46/html/TagNames/Canon.html +8322 -0
  35. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/CanonCustom.html +0 -0
  36. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/CanonRaw.html +0 -0
  37. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/CanonVRD.html +0 -0
  38. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Casio.html +0 -0
  39. data/bin/Image-ExifTool-9.46/html/TagNames/Composite.html +673 -0
  40. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/DICOM.html +0 -0
  41. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/DNG.html +0 -0
  42. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/DPX.html +0 -0
  43. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/DV.html +0 -0
  44. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/DarwinCore.html +0 -0
  45. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/DjVu.html +0 -0
  46. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/EXE.html +0 -0
  47. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/EXIF.html +0 -0
  48. data/bin/Image-ExifTool-9.46/html/TagNames/Extra.html +309 -0
  49. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/FLAC.html +0 -0
  50. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/FLIR.html +0 -0
  51. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Flash.html +0 -0
  52. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/FlashPix.html +0 -0
  53. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Font.html +0 -0
  54. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/FotoStation.html +0 -0
  55. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/FujiFilm.html +0 -0
  56. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/GE.html +0 -0
  57. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/GIF.html +0 -0
  58. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/GIMP.html +0 -0
  59. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/GPS.html +0 -0
  60. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/GeoTiff.html +0 -0
  61. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/H264.html +0 -0
  62. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/HP.html +0 -0
  63. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/HTML.html +0 -0
  64. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/ICC_Profile.html +0 -0
  65. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/ID3.html +0 -0
  66. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/IPTC.html +0 -0
  67. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/ITC.html +0 -0
  68. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/JFIF.html +0 -0
  69. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/JPEG.html +0 -0
  70. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/JVC.html +0 -0
  71. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Jpeg2000.html +0 -0
  72. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Kodak.html +0 -0
  73. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/KyoceraRaw.html +0 -0
  74. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/LNK.html +0 -0
  75. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Leaf.html +0 -0
  76. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/M2TS.html +0 -0
  77. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/MIE.html +0 -0
  78. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/MIFF.html +0 -0
  79. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/MNG.html +0 -0
  80. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/MPC.html +0 -0
  81. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/MPEG.html +0 -0
  82. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/MPF.html +0 -0
  83. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/MWG.html +0 -0
  84. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/MXF.html +0 -0
  85. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Matroska.html +0 -0
  86. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Microsoft.html +0 -0
  87. data/bin/Image-ExifTool-9.46/html/TagNames/Minolta.html +2568 -0
  88. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/MinoltaRaw.html +0 -0
  89. data/bin/Image-ExifTool-9.46/html/TagNames/Nikon.html +4498 -0
  90. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/NikonCapture.html +0 -0
  91. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/NikonCustom.html +0 -0
  92. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/OOXML.html +0 -0
  93. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Ogg.html +0 -0
  94. data/bin/Image-ExifTool-9.46/html/TagNames/Olympus.html +3401 -0
  95. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/OpenEXR.html +0 -0
  96. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PDF.html +0 -0
  97. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PGF.html +0 -0
  98. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PICT.html +0 -0
  99. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PLIST.html +0 -0
  100. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PNG.html +0 -0
  101. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PSP.html +0 -0
  102. data/bin/Image-ExifTool-9.46/html/TagNames/Panasonic.html +1599 -0
  103. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PanasonicRaw.html +0 -0
  104. data/bin/Image-ExifTool-9.46/html/TagNames/Pentax.html +4528 -0
  105. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PhaseOne.html +0 -0
  106. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PhotoCD.html +0 -0
  107. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PhotoMechanic.html +0 -0
  108. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Photoshop.html +0 -0
  109. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PostScript.html +0 -0
  110. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PrintIM.html +0 -0
  111. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Qualcomm.html +0 -0
  112. data/bin/Image-ExifTool-9.46/html/TagNames/QuickTime.html +3438 -0
  113. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/RIFF.html +0 -0
  114. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/RSRC.html +0 -0
  115. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/RTF.html +0 -0
  116. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Radiance.html +0 -0
  117. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Rawzor.html +0 -0
  118. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Real.html +0 -0
  119. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Reconyx.html +0 -0
  120. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Ricoh.html +0 -0
  121. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Samsung.html +0 -0
  122. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Sanyo.html +0 -0
  123. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Scalado.html +0 -0
  124. data/bin/Image-ExifTool-9.46/html/TagNames/Shortcuts.html +240 -0
  125. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Sigma.html +0 -0
  126. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/SigmaRaw.html +0 -0
  127. data/bin/Image-ExifTool-9.46/html/TagNames/Sony.html +5721 -0
  128. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/SonyIDC.html +0 -0
  129. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Stim.html +0 -0
  130. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Theora.html +0 -0
  131. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Torrent.html +0 -0
  132. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Unknown.html +0 -0
  133. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Vorbis.html +0 -0
  134. data/bin/Image-ExifTool-9.46/html/TagNames/XMP.html +7939 -0
  135. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/ZIP.html +0 -0
  136. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/iWork.html +0 -0
  137. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/index.html +0 -0
  138. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/style.css +0 -0
  139. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/ancient_history.html +0 -0
  140. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/canon_raw.html +0 -0
  141. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/commentary.html +0 -0
  142. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/config.html +0 -0
  143. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/data_members.html +0 -0
  144. data/bin/Image-ExifTool-9.46/html/exiftool_pod.html +2370 -0
  145. data/bin/Image-ExifTool-9.46/html/faq.html +1435 -0
  146. data/bin/Image-ExifTool-9.46/html/filename.html +294 -0
  147. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/geotag.html +0 -0
  148. data/bin/Image-ExifTool-9.46/html/history.html +377 -0
  149. data/bin/Image-ExifTool-9.46/html/htmldump.html +733 -0
  150. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/idiosyncracies.html +0 -0
  151. data/bin/Image-ExifTool-9.46/html/index.html +1283 -0
  152. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/install.html +0 -0
  153. data/bin/Image-ExifTool-9.46/html/metafiles.html +274 -0
  154. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/overview.png +0 -0
  155. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/standards.html +0 -0
  156. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/struct.html +0 -0
  157. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/style.css +0 -0
  158. data/bin/Image-ExifTool-9.46/html/under.html +126 -0
  159. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/verbose.html +0 -0
  160. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/writing.html +0 -0
  161. data/bin/Image-ExifTool-9.46/lib/File/RandomAccess.pm +378 -0
  162. data/bin/Image-ExifTool-9.46/lib/File/RandomAccess.pod +231 -0
  163. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool.pm +6916 -0
  164. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool.pod +2406 -0
  165. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/AES.pm +501 -0
  166. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/AFCP.pm +284 -0
  167. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/AIFF.pm +271 -0
  168. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/APE.pm +262 -0
  169. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/APP12.pm +322 -0
  170. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/ASF.pm +884 -0
  171. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Apple.pm +113 -0
  172. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/BMP.pm +179 -0
  173. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/BZZ.pm +472 -0
  174. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/BigTIFF.pm +282 -0
  175. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/BuildTagLookup.pm +2425 -0
  176. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Canon.pm +7983 -0
  177. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/CanonCustom.pm +2523 -0
  178. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/CanonRaw.pm +931 -0
  179. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/CanonVRD.pm +1481 -0
  180. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/CaptureOne.pm +235 -0
  181. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Casio.pm +2013 -0
  182. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Charset.pm +396 -0
  183. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Arabic.pm +0 -0
  184. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Baltic.pm +0 -0
  185. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Cyrillic.pm +0 -0
  186. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Greek.pm +0 -0
  187. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Hebrew.pm +0 -0
  188. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/JIS.pm +0 -0
  189. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Latin.pm +0 -0
  190. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Latin2.pm +0 -0
  191. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacArabic.pm +0 -0
  192. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacChineseCN.pm +0 -0
  193. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacChineseTW.pm +0 -0
  194. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacCroatian.pm +0 -0
  195. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacCyrillic.pm +0 -0
  196. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacGreek.pm +0 -0
  197. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacHebrew.pm +0 -0
  198. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacIceland.pm +0 -0
  199. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacJapanese.pm +0 -0
  200. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacKorean.pm +0 -0
  201. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacLatin2.pm +0 -0
  202. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacRSymbol.pm +0 -0
  203. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacRoman.pm +0 -0
  204. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacRomanian.pm +0 -0
  205. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacThai.pm +0 -0
  206. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacTurkish.pm +0 -0
  207. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/PDFDoc.pm +0 -0
  208. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/ShiftJIS.pm +0 -0
  209. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Symbol.pm +0 -0
  210. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Thai.pm +0 -0
  211. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Turkish.pm +0 -0
  212. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Vietnam.pm +0 -0
  213. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/DICOM.pm +3874 -0
  214. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/DNG.pm +835 -0
  215. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/DPX.pm +151 -0
  216. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/DV.pm +319 -0
  217. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/DarwinCore.pm +317 -0
  218. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/DjVu.pm +376 -0
  219. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/EXE.pm +1228 -0
  220. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Exif.pm +4596 -0
  221. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/FLAC.pm +296 -0
  222. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/FLIR.pm +1232 -0
  223. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Fixup.pm +354 -0
  224. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Flash.pm +755 -0
  225. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/FlashPix.pm +1882 -0
  226. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Font.pm +643 -0
  227. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/FotoStation.pm +259 -0
  228. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/FujiFilm.pm +1088 -0
  229. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/GE.pm +80 -0
  230. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/GIF.pm +542 -0
  231. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/GIMP.pm +258 -0
  232. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/GPS.pm +514 -0
  233. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/GeoTiff.pm +2187 -0
  234. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Geotag.pm +1176 -0
  235. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/H264.pm +1102 -0
  236. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/HP.pm +262 -0
  237. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/HTML.pm +576 -0
  238. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/HtmlDump.pm +895 -0
  239. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/ICC_Profile.pm +999 -0
  240. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/ID3.pm +1532 -0
  241. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/IPTC.pm +1244 -0
  242. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/ITC.pm +215 -0
  243. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Import.pm +308 -0
  244. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/InDesign.pm +277 -0
  245. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/JPEG.pm +522 -0
  246. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/JPEGDigest.pm +2511 -0
  247. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/JVC.pm +130 -0
  248. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Jpeg2000.pm +873 -0
  249. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Kodak.pm +2014 -0
  250. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/KyoceraRaw.pm +173 -0
  251. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/LNK.pm +723 -0
  252. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/cs.pm +1586 -0
  253. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/de.pm +7356 -0
  254. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/en_ca.pm +557 -0
  255. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/en_gb.pm +572 -0
  256. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/es.pm +4017 -0
  257. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/fi.pm +2856 -0
  258. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/fr.pm +4738 -0
  259. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/it.pm +7918 -0
  260. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/ja.pm +5815 -0
  261. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/ko.pm +2332 -0
  262. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/nl.pm +3220 -0
  263. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/pl.pm +1140 -0
  264. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/ru.pm +769 -0
  265. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/sv.pm +639 -0
  266. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/tr.pm +544 -0
  267. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/zh_cn.pm +1329 -0
  268. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/zh_tw.pm +802 -0
  269. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Leaf.pm +515 -0
  270. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/M2TS.pm +725 -0
  271. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MIE.pm +2561 -0
  272. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MIEUnits.pod +377 -0
  273. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MIFF.pm +279 -0
  274. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MNG.pm +684 -0
  275. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MPC.pm +156 -0
  276. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MPEG.pm +736 -0
  277. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MPF.pm +289 -0
  278. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MWG.pm +748 -0
  279. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MXF.pm +3032 -0
  280. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MakerNotes.pm +1598 -0
  281. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Matroska.pm +891 -0
  282. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Microsoft.pm +879 -0
  283. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Minolta.pm +2861 -0
  284. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MinoltaRaw.pm +534 -0
  285. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Nikon.pm +6145 -0
  286. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/NikonCapture.pm +911 -0
  287. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/NikonCustom.pm +4405 -0
  288. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/OOXML.pm +409 -0
  289. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Ogg.pm +237 -0
  290. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Olympus.pm +3630 -0
  291. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/OpenEXR.pm +324 -0
  292. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PDF.pm +2327 -0
  293. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PGF.pm +143 -0
  294. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PICT.pm +1260 -0
  295. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PLIST.pm +453 -0
  296. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PNG.pm +1161 -0
  297. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PPM.pm +169 -0
  298. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PSP.pm +305 -0
  299. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Panasonic.pm +2205 -0
  300. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PanasonicRaw.pm +535 -0
  301. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Pentax.pm +5792 -0
  302. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PhaseOne.pm +557 -0
  303. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PhotoCD.pm +507 -0
  304. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PhotoMechanic.pm +256 -0
  305. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Photoshop.pm +629 -0
  306. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PostScript.pm +693 -0
  307. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PrintIM.pm +125 -0
  308. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Qualcomm.pm +1344 -0
  309. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/QuickTime.pm +3910 -0
  310. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/README +0 -0
  311. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/RIFF.pm +1332 -0
  312. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/RSRC.pm +241 -0
  313. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/RTF.pm +383 -0
  314. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Radiance.pm +144 -0
  315. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Rawzor.pm +190 -0
  316. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Real.pm +736 -0
  317. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Reconyx.pm +190 -0
  318. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Ricoh.pm +1039 -0
  319. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Samsung.pm +846 -0
  320. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Sanyo.pm +439 -0
  321. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Scalado.pm +141 -0
  322. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Shift.pl +594 -0
  323. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Shortcuts.pm +298 -0
  324. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Sigma.pm +574 -0
  325. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/SigmaRaw.pm +649 -0
  326. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Sony.pm +7072 -0
  327. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/SonyIDC.pm +330 -0
  328. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Stim.pm +196 -0
  329. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/TagInfoXML.pm +794 -0
  330. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/TagLookup.pm +8365 -0
  331. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/TagNames.pod +26883 -0
  332. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Theora.pm +145 -0
  333. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Torrent.pm +317 -0
  334. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Unknown.pm +66 -0
  335. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Vorbis.pm +237 -0
  336. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/WriteCanonRaw.pl +637 -0
  337. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/WriteExif.pl +3685 -0
  338. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/WriteIPTC.pl +702 -0
  339. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/WritePDF.pl +765 -0
  340. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/WritePNG.pl +376 -0
  341. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/WritePhotoshop.pl +266 -0
  342. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/WritePostScript.pl +777 -0
  343. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/WriteQuickTime.pl +344 -0
  344. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/WriteXMP.pl +1318 -0
  345. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Writer.pl +5851 -0
  346. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/XMP.pm +3755 -0
  347. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/XMP2.pl +1303 -0
  348. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/XMPStruct.pl +814 -0
  349. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/ZIP.pm +623 -0
  350. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/iWork.pm +223 -0
  351. data/bin/Image-ExifTool-9.46/perl-Image-ExifTool.spec +105 -0
  352. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/AFCP.t +0 -0
  353. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/AFCP_2.out +0 -0
  354. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/AFCP_3.out +0 -0
  355. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/AIFF.t +0 -0
  356. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/AIFF_2.out +0 -0
  357. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/APE.t +0 -0
  358. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/APE_2.out +0 -0
  359. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/APE_3.out +0 -0
  360. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ASF.t +0 -0
  361. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ASF_2.out +0 -0
  362. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/BMP.t +0 -0
  363. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/BMP_2.out +0 -0
  364. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/BigTIFF.t +0 -0
  365. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/BigTIFF_2.out +0 -0
  366. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Canon.t +0 -0
  367. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonRaw.t +0 -0
  368. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonRaw_2.out +0 -0
  369. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonRaw_4.out +0 -0
  370. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonRaw_5.out +0 -0
  371. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonRaw_6.out +0 -0
  372. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonRaw_7.out +0 -0
  373. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD.t +0 -0
  374. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_11.out +0 -0
  375. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_12.out +0 -0
  376. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_2.out +0 -0
  377. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_3.out +0 -0
  378. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_4.out +0 -0
  379. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_5.out +0 -0
  380. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_6.out +0 -0
  381. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_7.out +0 -0
  382. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_8.out +0 -0
  383. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_9.out +0 -0
  384. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Canon_2.out +0 -0
  385. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Canon_3.out +0 -0
  386. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Casio.t +0 -0
  387. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Casio_2.out +0 -0
  388. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Casio_3.out +0 -0
  389. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Casio_4.out +0 -0
  390. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Casio_5.out +0 -0
  391. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Casio_6.out +0 -0
  392. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DICOM.t +0 -0
  393. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DICOM_2.out +0 -0
  394. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DNG.t +0 -0
  395. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DNG_2.out +0 -0
  396. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DNG_3.out +0 -0
  397. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DPX.t +0 -0
  398. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DPX_2.out +0 -0
  399. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DV.t +0 -0
  400. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DV_2.out +0 -0
  401. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DjVu.t +0 -0
  402. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DjVu_2.out +0 -0
  403. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/EXE.t +0 -0
  404. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/EXE_2.out +0 -0
  405. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/EXE_3.out +0 -0
  406. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/EXE_4.out +0 -0
  407. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool.t +0 -0
  408. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_16.out +0 -0
  409. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_17.out +0 -0
  410. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_2.out +0 -0
  411. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_20.out +0 -0
  412. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_21.out +0 -0
  413. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_22.out +0 -0
  414. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_23.out +0 -0
  415. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_24.out +0 -0
  416. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_25.out +0 -0
  417. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_26.out +0 -0
  418. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_3.out +0 -0
  419. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_4.out +0 -0
  420. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_5.out +0 -0
  421. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_6.out +0 -0
  422. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_7.out +0 -0
  423. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_8.out +0 -0
  424. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_9.out +0 -0
  425. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FLAC.t +0 -0
  426. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FLAC_2.out +0 -0
  427. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FLAC_3.out +0 -0
  428. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FLIR.t +0 -0
  429. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FLIR_2.out +0 -0
  430. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FLIR_3.out +0 -0
  431. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Flash.t +0 -0
  432. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FlashPix.t +0 -0
  433. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FlashPix_2.out +0 -0
  434. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Flash_2.out +0 -0
  435. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Flash_3.out +0 -0
  436. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Font.t +0 -0
  437. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Font_2.out +0 -0
  438. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Font_3.out +0 -0
  439. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Font_4.out +0 -0
  440. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Font_5.out +0 -0
  441. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Font_6.out +0 -0
  442. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Font_7.out +0 -0
  443. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FotoStation.t +0 -0
  444. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FotoStation_2.out +0 -0
  445. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FotoStation_3.out +0 -0
  446. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FujiFilm.t +0 -0
  447. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FujiFilm_2.out +0 -0
  448. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FujiFilm_3.out +0 -0
  449. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FujiFilm_4.out +0 -0
  450. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FujiFilm_5.out +0 -0
  451. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GE.t +0 -0
  452. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GE_2.out +0 -0
  453. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GE_3.out +0 -0
  454. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GIF.t +0 -0
  455. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GIF_2.out +0 -0
  456. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GIF_3.out +0 -0
  457. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GIF_4.out +0 -0
  458. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GIMP.t +0 -0
  459. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GIMP_2.out +0 -0
  460. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GPS.t +0 -0
  461. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GPS_2.out +0 -0
  462. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GPS_3.out +0 -0
  463. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GeoTiff.t +0 -0
  464. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GeoTiff_2.out +0 -0
  465. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GeoTiff_3.out +0 -0
  466. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Geotag.t +0 -0
  467. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Geotag_2.out +0 -0
  468. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Geotag_3.out +0 -0
  469. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Geotag_5.out +0 -0
  470. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Geotag_6.out +0 -0
  471. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Geotag_7.out +0 -0
  472. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Geotag_8.out +0 -0
  473. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Geotag_9.out +0 -0
  474. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/HTML.t +0 -0
  475. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/HTML_2.out +0 -0
  476. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/IPTC.t +0 -0
  477. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/IPTC_2.out +0 -0
  478. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/IPTC_4.out +0 -0
  479. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/IPTC_5.out +0 -0
  480. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/IPTC_6.out +0 -0
  481. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/IPTC_7.out +0 -0
  482. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/IPTC_8.out +0 -0
  483. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ITC.t +0 -0
  484. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ITC_2.out +0 -0
  485. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/InDesign.t +0 -0
  486. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/InDesign_2.out +0 -0
  487. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/InDesign_3.out +0 -0
  488. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/InDesign_4.out +0 -0
  489. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/JVC.t +0 -0
  490. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/JVC_2.out +0 -0
  491. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/JVC_3.out +0 -0
  492. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Jpeg2000.t +0 -0
  493. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Jpeg2000_2.out +0 -0
  494. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Jpeg2000_3.out +0 -0
  495. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Jpeg2000_4.out +0 -0
  496. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Kodak.t +0 -0
  497. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Kodak_2.out +0 -0
  498. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Kodak_3.out +0 -0
  499. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/KyoceraRaw.t +0 -0
  500. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/KyoceraRaw_2.out +0 -0
  501. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/LNK.t +0 -0
  502. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/LNK_2.out +0 -0
  503. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang.t +0 -0
  504. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_1.out +0 -0
  505. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_10.out +0 -0
  506. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_11.out +0 -0
  507. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_12.out +0 -0
  508. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_13.out +0 -0
  509. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_14.out +0 -0
  510. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_15.out +0 -0
  511. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_16.out +0 -0
  512. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_17.out +0 -0
  513. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_18.out +0 -0
  514. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_2.out +0 -0
  515. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_3.out +0 -0
  516. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_4.out +0 -0
  517. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_5.out +0 -0
  518. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_6.out +0 -0
  519. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_7.out +0 -0
  520. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_8.out +0 -0
  521. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_9.out +0 -0
  522. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/M2TS.t +0 -0
  523. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/M2TS_2.out +0 -0
  524. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MIE.t +0 -0
  525. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MIE_2.out +0 -0
  526. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MIE_3.out +0 -0
  527. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MIE_5.out +0 -0
  528. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MIE_6.out +0 -0
  529. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MIFF.t +0 -0
  530. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MIFF_2.out +0 -0
  531. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MP3.t +0 -0
  532. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MP3_2.out +0 -0
  533. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MWG.t +0 -0
  534. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MWG_2.out +0 -0
  535. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MWG_3.out +0 -0
  536. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MWG_4.out +0 -0
  537. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MWG_5.out +0 -0
  538. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MWG_6.out +0 -0
  539. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MXF.t +0 -0
  540. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MXF_2.out +0 -0
  541. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Matroska.t +0 -0
  542. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Matroska_2.out +0 -0
  543. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Minolta.t +0 -0
  544. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Minolta_2.out +0 -0
  545. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Minolta_3.out +0 -0
  546. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Minolta_4.out +0 -0
  547. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Nikon.t +0 -0
  548. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Nikon_2.out +0 -0
  549. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Nikon_3.out +0 -0
  550. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Nikon_4.out +0 -0
  551. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Nikon_5.out +0 -0
  552. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Nikon_7.out +0 -0
  553. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Nikon_8.out +0 -0
  554. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Olympus.t +0 -0
  555. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Olympus_2.out +0 -0
  556. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Olympus_3.out +0 -0
  557. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Olympus_4.out +0 -0
  558. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Olympus_5.out +0 -0
  559. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Olympus_6.out +0 -0
  560. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Olympus_7.out +0 -0
  561. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/OpenEXR.t +0 -0
  562. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/OpenEXR_2.out +0 -0
  563. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF.t +0 -0
  564. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_10.out +0 -0
  565. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_11.out +0 -0
  566. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_12.out +0 -0
  567. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_14.out +0 -0
  568. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_15.out +0 -0
  569. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_16.out +0 -0
  570. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_17.out +0 -0
  571. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_18.out +0 -0
  572. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_19.out +0 -0
  573. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_2.out +0 -0
  574. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_20.out +0 -0
  575. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_22.out +0 -0
  576. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_4.out +0 -0
  577. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_5.out +0 -0
  578. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_6.out +0 -0
  579. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_7.out +0 -0
  580. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_8.out +0 -0
  581. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_9.out +0 -0
  582. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PGF.t +0 -0
  583. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PGF_2.out +0 -0
  584. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PICT.t +0 -0
  585. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PICT_2.out +0 -0
  586. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PLIST.t +0 -0
  587. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PLIST_2.out +0 -0
  588. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PLIST_3.out +0 -0
  589. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PNG.t +0 -0
  590. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PNG_2.out +0 -0
  591. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PNG_3.out +0 -0
  592. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PNG_4.out +0 -0
  593. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PNG_5.out +0 -0
  594. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PPM.t +0 -0
  595. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PPM_2.out +0 -0
  596. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PPM_3.out +0 -0
  597. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PSP.t +0 -0
  598. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PSP_2.out +0 -0
  599. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Panasonic.t +0 -0
  600. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Panasonic_2.out +0 -0
  601. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Panasonic_3.out +0 -0
  602. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Panasonic_4.out +0 -0
  603. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Panasonic_5.out +0 -0
  604. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Pentax.t +0 -0
  605. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Pentax_2.out +0 -0
  606. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Pentax_3.out +0 -0
  607. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Pentax_4.out +0 -0
  608. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PhotoCD.t +0 -0
  609. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PhotoCD_2.out +0 -0
  610. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PhotoMechanic.t +0 -0
  611. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PhotoMechanic_2.out +0 -0
  612. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PhotoMechanic_3.out +0 -0
  613. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Photoshop.t +0 -0
  614. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Photoshop_2.out +0 -0
  615. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Photoshop_3.out +0 -0
  616. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PostScript.t +0 -0
  617. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PostScript_2.out +0 -0
  618. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PostScript_3.out +0 -0
  619. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/QuickTime.t +0 -0
  620. data/bin/Image-ExifTool-9.46/t/QuickTime_2.out +131 -0
  621. data/bin/Image-ExifTool-9.46/t/QuickTime_3.out +72 -0
  622. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/QuickTime_4.out +0 -0
  623. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/QuickTime_5.out +0 -0
  624. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/RIFF.t +0 -0
  625. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/RIFF_2.out +0 -0
  626. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/RIFF_3.out +0 -0
  627. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/RIFF_4.out +0 -0
  628. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/RTF.t +0 -0
  629. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/RTF_2.out +0 -0
  630. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Radiance.t +0 -0
  631. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Radiance_2.out +0 -0
  632. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Real.t +0 -0
  633. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Real_2.out +0 -0
  634. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Real_3.out +0 -0
  635. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Real_4.out +0 -0
  636. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Ricoh.t +0 -0
  637. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Ricoh_2.out +0 -0
  638. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Ricoh_3.out +0 -0
  639. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Ricoh_4.out +0 -0
  640. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sanyo.t +0 -0
  641. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sanyo_2.out +0 -0
  642. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sanyo_3.out +0 -0
  643. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sigma.t +0 -0
  644. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sigma_2.out +0 -0
  645. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sigma_3.out +0 -0
  646. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sigma_4.out +0 -0
  647. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sigma_5.out +0 -0
  648. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sony.t +0 -0
  649. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sony_2.out +0 -0
  650. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sony_3.out +0 -0
  651. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sony_5.out +0 -0
  652. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/TestLib.pm +0 -0
  653. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Torrent.t +0 -0
  654. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Torrent_2.out +0 -0
  655. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Unknown.t +0 -0
  656. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Unknown_2.out +0 -0
  657. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Unknown_3.out +0 -0
  658. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Vorbis.t +0 -0
  659. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Vorbis_2.out +0 -0
  660. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer.t +0 -0
  661. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_10.out +0 -0
  662. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_11.out +0 -0
  663. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_13.out +0 -0
  664. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_14.out +0 -0
  665. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_15.out +0 -0
  666. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_16.out +0 -0
  667. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_17.out +0 -0
  668. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_18.out +0 -0
  669. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_19.out +0 -0
  670. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_2.out +0 -0
  671. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_22.out +0 -0
  672. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_24.out +0 -0
  673. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_25.out +0 -0
  674. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_26.out +0 -0
  675. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_27.out +0 -0
  676. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_28.out +0 -0
  677. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_29.out +0 -0
  678. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_30.out +0 -0
  679. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_31.out +0 -0
  680. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_32.out +0 -0
  681. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_33.out +0 -0
  682. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_34.out +0 -0
  683. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_35.out +0 -0
  684. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_36.out +0 -0
  685. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_37.out +0 -0
  686. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_38.out +0 -0
  687. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_39.out +0 -0
  688. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_4.out +0 -0
  689. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_40.out +0 -0
  690. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_41.out +0 -0
  691. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_42.out +0 -0
  692. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_43.out +0 -0
  693. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_44.out +0 -0
  694. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_45.out +0 -0
  695. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_46.out +0 -0
  696. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_47.out +0 -0
  697. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_48.out +0 -0
  698. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_50.out +0 -0
  699. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_51.out +0 -0
  700. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_52.out +0 -0
  701. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_53.out +0 -0
  702. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_54.out +0 -0
  703. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_6.out +0 -0
  704. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_7.out +0 -0
  705. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_9.out +0 -0
  706. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP.t +0 -0
  707. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_10.out +0 -0
  708. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_11.out +0 -0
  709. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_12.out +0 -0
  710. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_13.out +0 -0
  711. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_14.out +0 -0
  712. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_15.out +0 -0
  713. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_16.out +0 -0
  714. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_17.out +0 -0
  715. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_18.out +0 -0
  716. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_19.out +0 -0
  717. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_2.out +0 -0
  718. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_20.out +0 -0
  719. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_21.out +0 -0
  720. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_22.out +0 -0
  721. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_23.out +0 -0
  722. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_24.out +0 -0
  723. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_25.out +0 -0
  724. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_26.out +0 -0
  725. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_27.out +0 -0
  726. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_28.out +0 -0
  727. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_29.out +0 -0
  728. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_3.out +0 -0
  729. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_30.out +0 -0
  730. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_31.out +0 -0
  731. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_32.out +0 -0
  732. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_34.out +0 -0
  733. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_36.out +0 -0
  734. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_37.out +0 -0
  735. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_39.out +0 -0
  736. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_40.out +0 -0
  737. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_41.out +0 -0
  738. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_5.out +0 -0
  739. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_6.out +0 -0
  740. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_7.out +0 -0
  741. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_8.out +0 -0
  742. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_9.out +0 -0
  743. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ZIP.t +0 -0
  744. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ZIP_2.out +0 -0
  745. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ZIP_3.out +0 -0
  746. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ZIP_4.out +0 -0
  747. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ZIP_5.out +0 -0
  748. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ZIP_6.out +0 -0
  749. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ZIP_7.out +0 -0
  750. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/AFCP.jpg +0 -0
  751. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/AIFF.aif +0 -0
  752. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/APE.ape +0 -0
  753. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/APE.mpc +0 -0
  754. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/ASF.wmv +0 -0
  755. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/BMP.bmp +0 -0
  756. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/BigTIFF.btf +0 -0
  757. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Canon.jpg +0 -0
  758. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Canon1DmkIII.jpg +0 -0
  759. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/CanonRaw.cr2 +0 -0
  760. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/CanonRaw.crw +0 -0
  761. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/CanonVRD.vrd +0 -0
  762. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/CaptureOne.eip +0 -0
  763. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Casio.jpg +0 -0
  764. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Casio2.jpg +0 -0
  765. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/CasioQVCI.jpg +0 -0
  766. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/DICOM.dcm +0 -0
  767. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/DNG.dng +0 -0
  768. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/DPX.dpx +0 -0
  769. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/DV.dv +0 -0
  770. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/DjVu.djvu +0 -0
  771. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/EXE.elf +0 -0
  772. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/EXE.exe +0 -0
  773. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/EXE.macho +0 -0
  774. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/ExifTool.jpg +0 -0
  775. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/ExifTool.tif +0 -0
  776. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/ExtendedXMP.jpg +0 -0
  777. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/FLAC.flac +0 -0
  778. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/FLAC.ogg +0 -0
  779. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/FLIR.fpf +0 -0
  780. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/FLIR.jpg +0 -0
  781. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Flash.flv +0 -0
  782. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Flash.swf +0 -0
  783. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/FlashPix.ppt +0 -0
  784. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Font.afm +0 -0
  785. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Font.dfont +0 -0
  786. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Font.pfa +0 -0
  787. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Font.pfb +0 -0
  788. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Font.pfm +0 -0
  789. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Font.ttf +0 -0
  790. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/FotoStation.jpg +0 -0
  791. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/FujiFilm.jpg +0 -0
  792. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/FujiFilm.raf +0 -0
  793. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/GE.jpg +0 -0
  794. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/GIF.gif +0 -0
  795. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/GIMP.xcf +0 -0
  796. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/GPS.jpg +0 -0
  797. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/GeoTiff.tif +0 -0
  798. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Geotag.gpx +0 -0
  799. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Geotag.igc +0 -0
  800. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Geotag.kml +0 -0
  801. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Geotag.log +0 -0
  802. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Geotag.xml +0 -0
  803. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Geotag2.log +0 -0
  804. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/HTML.html +0 -0
  805. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/IPTC.jpg +0 -0
  806. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/ITC.itc +0 -0
  807. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/InDesign.indd +0 -0
  808. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/JVC.jpg +0 -0
  809. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/JVC2.jpg +0 -0
  810. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Jpeg2000.j2c +0 -0
  811. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Jpeg2000.jp2 +0 -0
  812. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Kodak.jpg +0 -0
  813. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/KyoceraRaw.raw +0 -0
  814. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/LNK.lnk +0 -0
  815. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/M2TS.mts +0 -0
  816. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/MIE.mie +0 -0
  817. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/MIFF.miff +0 -0
  818. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/MP3.mp3 +0 -0
  819. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/MWG.jpg +0 -0
  820. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/MXF.mxf +0 -0
  821. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Matroska.mkv +0 -0
  822. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Minolta.jpg +0 -0
  823. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Minolta.mrw +0 -0
  824. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Nikon.jpg +0 -0
  825. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Nikon.nef +0 -0
  826. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/NikonD2Hs.jpg +0 -0
  827. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/NikonD70.jpg +0 -0
  828. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/OOXML.docx +0 -0
  829. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Olympus.jpg +0 -0
  830. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Olympus2.jpg +0 -0
  831. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/OlympusE1.jpg +0 -0
  832. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/OpenDoc.ods +0 -0
  833. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/OpenEXR.exr +0 -0
  834. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PDF.pdf +0 -0
  835. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PDF2.pdf +0 -0
  836. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PGF.pgf +0 -0
  837. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PICT.pict +0 -0
  838. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PLIST-bin.plist +0 -0
  839. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PLIST-xml.plist +0 -0
  840. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PNG.png +0 -0
  841. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PPM.ppm +0 -0
  842. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PSP.psp +0 -0
  843. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Panasonic.jpg +0 -0
  844. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Panasonic.rw2 +0 -0
  845. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Pentax.avi +0 -0
  846. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Pentax.jpg +0 -0
  847. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PhotoCD.pcd +0 -0
  848. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PhotoMechanic.jpg +0 -0
  849. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Photoshop.psd +0 -0
  850. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PostScript.eps +0 -0
  851. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/QuickTime.m4a +0 -0
  852. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/QuickTime.mov +0 -0
  853. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/RIFF.avi +0 -0
  854. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/RIFF.wav +0 -0
  855. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/RIFF.webp +0 -0
  856. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/RTF.rtf +0 -0
  857. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Radiance.hdr +0 -0
  858. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Real.ra +0 -0
  859. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Real.ram +0 -0
  860. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Real.rm +0 -0
  861. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Ricoh.jpg +0 -0
  862. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Ricoh2.jpg +0 -0
  863. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Sanyo.jpg +0 -0
  864. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Sigma.jpg +0 -0
  865. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Sigma.x3f +0 -0
  866. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/SigmaDP2.x3f +0 -0
  867. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Sony.jpg +0 -0
  868. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Sony.pmp +0 -0
  869. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Torrent.torrent +0 -0
  870. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Unknown.jpg +0 -0
  871. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Vorbis.ogg +0 -0
  872. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Writer.jpg +0 -0
  873. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/XMP.inx +0 -0
  874. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/XMP.jpg +0 -0
  875. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/XMP.svg +0 -0
  876. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/XMP.xml +0 -0
  877. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/XMP.xmp +0 -0
  878. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/XMP2.xmp +0 -0
  879. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/XMP3.xmp +0 -0
  880. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/XMP4.xmp +0 -0
  881. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/XMP5.xmp +0 -0
  882. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/ZIP.gz +0 -0
  883. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/ZIP.zip +0 -0
  884. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/iWork.numbers +0 -0
  885. data/lib/exiftool_vendored/version.rb +1 -1
  886. metadata +886 -886
  887. data/bin/Image-ExifTool-9.45/Changes +0 -6430
  888. data/bin/Image-ExifTool-9.45/META.yml +0 -27
  889. data/bin/Image-ExifTool-9.45/README +0 -228
  890. data/bin/Image-ExifTool-9.45/exiftool +0 -5767
  891. data/bin/Image-ExifTool-9.45/html/Shift.html +0 -173
  892. data/bin/Image-ExifTool-9.45/html/TagNames/Canon.html +0 -8302
  893. data/bin/Image-ExifTool-9.45/html/TagNames/Composite.html +0 -672
  894. data/bin/Image-ExifTool-9.45/html/TagNames/Extra.html +0 -308
  895. data/bin/Image-ExifTool-9.45/html/TagNames/Minolta.html +0 -2568
  896. data/bin/Image-ExifTool-9.45/html/TagNames/Nikon.html +0 -4495
  897. data/bin/Image-ExifTool-9.45/html/TagNames/Olympus.html +0 -3400
  898. data/bin/Image-ExifTool-9.45/html/TagNames/Panasonic.html +0 -1585
  899. data/bin/Image-ExifTool-9.45/html/TagNames/Pentax.html +0 -4527
  900. data/bin/Image-ExifTool-9.45/html/TagNames/QuickTime.html +0 -3397
  901. data/bin/Image-ExifTool-9.45/html/TagNames/Shortcuts.html +0 -239
  902. data/bin/Image-ExifTool-9.45/html/TagNames/Sony.html +0 -5721
  903. data/bin/Image-ExifTool-9.45/html/TagNames/XMP.html +0 -7927
  904. data/bin/Image-ExifTool-9.45/html/exiftool_pod.html +0 -2370
  905. data/bin/Image-ExifTool-9.45/html/faq.html +0 -1434
  906. data/bin/Image-ExifTool-9.45/html/filename.html +0 -282
  907. data/bin/Image-ExifTool-9.45/html/history.html +0 -362
  908. data/bin/Image-ExifTool-9.45/html/htmldump.html +0 -732
  909. data/bin/Image-ExifTool-9.45/html/index.html +0 -1283
  910. data/bin/Image-ExifTool-9.45/html/metafiles.html +0 -266
  911. data/bin/Image-ExifTool-9.45/html/under.html +0 -124
  912. data/bin/Image-ExifTool-9.45/lib/File/RandomAccess.pm +0 -378
  913. data/bin/Image-ExifTool-9.45/lib/File/RandomAccess.pod +0 -231
  914. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool.pm +0 -6894
  915. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool.pod +0 -2406
  916. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/AES.pm +0 -501
  917. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/AFCP.pm +0 -284
  918. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/AIFF.pm +0 -271
  919. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/APE.pm +0 -262
  920. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/APP12.pm +0 -322
  921. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/ASF.pm +0 -884
  922. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Apple.pm +0 -113
  923. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/BMP.pm +0 -179
  924. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/BZZ.pm +0 -472
  925. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/BigTIFF.pm +0 -282
  926. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/BuildTagLookup.pm +0 -2421
  927. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Canon.pm +0 -7985
  928. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/CanonCustom.pm +0 -2523
  929. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/CanonRaw.pm +0 -931
  930. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/CanonVRD.pm +0 -1481
  931. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/CaptureOne.pm +0 -235
  932. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Casio.pm +0 -2013
  933. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Charset.pm +0 -396
  934. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/DICOM.pm +0 -3874
  935. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/DNG.pm +0 -835
  936. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/DPX.pm +0 -151
  937. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/DV.pm +0 -319
  938. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/DarwinCore.pm +0 -317
  939. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/DjVu.pm +0 -376
  940. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/EXE.pm +0 -1228
  941. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Exif.pm +0 -4596
  942. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/FLAC.pm +0 -296
  943. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/FLIR.pm +0 -1232
  944. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Fixup.pm +0 -354
  945. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Flash.pm +0 -755
  946. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/FlashPix.pm +0 -1882
  947. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Font.pm +0 -643
  948. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/FotoStation.pm +0 -259
  949. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/FujiFilm.pm +0 -1088
  950. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/GE.pm +0 -80
  951. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/GIF.pm +0 -542
  952. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/GIMP.pm +0 -258
  953. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/GPS.pm +0 -514
  954. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/GeoTiff.pm +0 -2187
  955. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Geotag.pm +0 -1176
  956. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/H264.pm +0 -1102
  957. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/HP.pm +0 -262
  958. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/HTML.pm +0 -576
  959. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/HtmlDump.pm +0 -895
  960. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/ICC_Profile.pm +0 -999
  961. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/ID3.pm +0 -1532
  962. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/IPTC.pm +0 -1244
  963. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/ITC.pm +0 -215
  964. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Import.pm +0 -308
  965. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/InDesign.pm +0 -277
  966. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/JPEG.pm +0 -522
  967. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/JPEGDigest.pm +0 -2511
  968. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/JVC.pm +0 -130
  969. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Jpeg2000.pm +0 -873
  970. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Kodak.pm +0 -2014
  971. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/KyoceraRaw.pm +0 -173
  972. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/LNK.pm +0 -723
  973. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/cs.pm +0 -1586
  974. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/de.pm +0 -7356
  975. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/en_ca.pm +0 -557
  976. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/en_gb.pm +0 -572
  977. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/es.pm +0 -4017
  978. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/fi.pm +0 -2856
  979. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/fr.pm +0 -4720
  980. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/it.pm +0 -7918
  981. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/ja.pm +0 -5815
  982. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/ko.pm +0 -2332
  983. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/nl.pm +0 -3220
  984. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/pl.pm +0 -1140
  985. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/ru.pm +0 -769
  986. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/sv.pm +0 -639
  987. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/tr.pm +0 -544
  988. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/zh_cn.pm +0 -1329
  989. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/zh_tw.pm +0 -802
  990. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Leaf.pm +0 -515
  991. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/M2TS.pm +0 -725
  992. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MIE.pm +0 -2561
  993. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MIEUnits.pod +0 -377
  994. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MIFF.pm +0 -279
  995. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MNG.pm +0 -684
  996. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MPC.pm +0 -156
  997. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MPEG.pm +0 -736
  998. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MPF.pm +0 -289
  999. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MWG.pm +0 -748
  1000. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MXF.pm +0 -3032
  1001. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MakerNotes.pm +0 -1598
  1002. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Matroska.pm +0 -891
  1003. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Microsoft.pm +0 -879
  1004. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Minolta.pm +0 -2859
  1005. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MinoltaRaw.pm +0 -534
  1006. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Nikon.pm +0 -6141
  1007. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/NikonCapture.pm +0 -911
  1008. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/NikonCustom.pm +0 -4405
  1009. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/OOXML.pm +0 -409
  1010. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Ogg.pm +0 -237
  1011. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Olympus.pm +0 -3628
  1012. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/OpenEXR.pm +0 -324
  1013. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PDF.pm +0 -2327
  1014. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PGF.pm +0 -143
  1015. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PICT.pm +0 -1260
  1016. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PLIST.pm +0 -453
  1017. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PNG.pm +0 -1161
  1018. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PPM.pm +0 -169
  1019. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PSP.pm +0 -305
  1020. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Panasonic.pm +0 -2180
  1021. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PanasonicRaw.pm +0 -535
  1022. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Pentax.pm +0 -5788
  1023. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PhaseOne.pm +0 -557
  1024. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PhotoCD.pm +0 -507
  1025. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PhotoMechanic.pm +0 -256
  1026. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Photoshop.pm +0 -629
  1027. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PostScript.pm +0 -693
  1028. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PrintIM.pm +0 -125
  1029. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Qualcomm.pm +0 -1344
  1030. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/QuickTime.pm +0 -3849
  1031. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/RIFF.pm +0 -1332
  1032. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/RSRC.pm +0 -241
  1033. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/RTF.pm +0 -383
  1034. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Radiance.pm +0 -144
  1035. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Rawzor.pm +0 -190
  1036. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Real.pm +0 -736
  1037. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Reconyx.pm +0 -190
  1038. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Ricoh.pm +0 -1039
  1039. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Samsung.pm +0 -846
  1040. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Sanyo.pm +0 -439
  1041. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Scalado.pm +0 -141
  1042. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Shift.pl +0 -594
  1043. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Shortcuts.pm +0 -293
  1044. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Sigma.pm +0 -574
  1045. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/SigmaRaw.pm +0 -649
  1046. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Sony.pm +0 -7072
  1047. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/SonyIDC.pm +0 -330
  1048. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Stim.pm +0 -196
  1049. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/TagInfoXML.pm +0 -794
  1050. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/TagLookup.pm +0 -8351
  1051. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/TagNames.pod +0 -26867
  1052. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Theora.pm +0 -145
  1053. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Torrent.pm +0 -317
  1054. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Unknown.pm +0 -66
  1055. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Vorbis.pm +0 -237
  1056. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/WriteCanonRaw.pl +0 -637
  1057. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/WriteExif.pl +0 -3685
  1058. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/WriteIPTC.pl +0 -702
  1059. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/WritePDF.pl +0 -765
  1060. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/WritePNG.pl +0 -376
  1061. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/WritePhotoshop.pl +0 -266
  1062. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/WritePostScript.pl +0 -777
  1063. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/WriteQuickTime.pl +0 -344
  1064. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/WriteXMP.pl +0 -1318
  1065. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Writer.pl +0 -5851
  1066. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/XMP.pm +0 -3755
  1067. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/XMP2.pl +0 -1299
  1068. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/XMPStruct.pl +0 -814
  1069. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/ZIP.pm +0 -623
  1070. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/iWork.pm +0 -223
  1071. data/bin/Image-ExifTool-9.45/perl-Image-ExifTool.spec +0 -105
  1072. data/bin/Image-ExifTool-9.45/t/QuickTime_2.out +0 -130
  1073. data/bin/Image-ExifTool-9.45/t/QuickTime_3.out +0 -71
@@ -0,0 +1,1176 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: Geotag.pm
3
+ #
4
+ # Description: Geotagging utility routines
5
+ #
6
+ # Revisions: 2009/04/01 - P. Harvey Created
7
+ # 2009/09/27 - PH Added Geosync feature
8
+ # 2009/06/25 - PH Read Garmin TCX track logs
9
+ # 2009/09/11 - PH Read ITC GPS track logs
10
+ # 2012/01/08 - PH Extract orientation information from PTNTHPR
11
+ # 2012/05/08 - PH Read Winplus Beacon .TXT files
12
+ #
13
+ # References: 1) http://www.topografix.com/GPX/1/1/
14
+ # 2) http://www.gpsinformation.org/dale/nmea.htm#GSA
15
+ # 3) http://code.google.com/apis/kml/documentation/kmlreference.html
16
+ # 4) http://www.fai.org/gliding/system/files/tech_spec_gnss.pdf
17
+ #------------------------------------------------------------------------------
18
+
19
+ package Image::ExifTool::Geotag;
20
+
21
+ use strict;
22
+ use vars qw($VERSION);
23
+ use Image::ExifTool qw(:Public);
24
+
25
+ $VERSION = '1.39';
26
+
27
+ sub JITTER() { return 2 } # maximum time jitter
28
+
29
+ sub SetGeoValues($$;$);
30
+ sub PrintFix($@);
31
+
32
+ # XML tags that we recognize (keys are forced to lower case)
33
+ my %xmlTag = (
34
+ lat => 'lat', # GPX
35
+ latitude => 'lat', # Garmin
36
+ latitudedegrees => 'lat', # Garmin TCX
37
+ lon => 'lon', # GPX
38
+ longitude => 'lon', # Garmin
39
+ longitudedegrees => 'lon', # Garmin TCX
40
+ ele => 'alt', # GPX
41
+ elevation => 'alt', # PH
42
+ alt => 'alt', # PH
43
+ altitude => 'alt', # Garmin
44
+ altitudemeters => 'alt', # Garmin TCX
45
+ 'time' => 'time', # GPX/Garmin
46
+ fix => 'fixtype', # GPX
47
+ hdop => 'hdop', # GPX
48
+ vdop => 'vdop', # GPX
49
+ pdop => 'pdop', # GPX
50
+ sat => 'nsats', # GPX
51
+ when => 'time', # KML
52
+ coordinates => 'coords', # KML
53
+ coord => 'coords', # KML, as written by Google Location History
54
+ course => 'dir', # (written by Arduino)
55
+ pitch => 'pitch', # (written by Arduino)
56
+ roll => 'roll', # (written by Arduino)
57
+ # XML containers (fix is reset at the opening tag of these properties)
58
+ wpt => '', # GPX
59
+ trkpt => '', # GPX
60
+ rtept => '', # GPX
61
+ trackpoint => '', # Garmin
62
+ placemark => '', # KML
63
+ );
64
+
65
+ # fix information keys which must be interpolated around a circle
66
+ my %cyclical = (lon => 1, track => 1, dir => 1, roll => 1);
67
+
68
+ # fix information keys for each of our general categories
69
+ my %fixInfoKeys = (
70
+ 'pos' => [ 'lat', 'lon' ],
71
+ track => [ 'track', 'speed' ],
72
+ alt => [ 'alt' ],
73
+ orient => [ 'dir', 'pitch', 'roll' ],
74
+ );
75
+
76
+ my %isOrient = ( dir => 1, pitch => 1, roll => 1 ); # test for orientation key
77
+
78
+ my $secPerDay = 24 * 3600; # a useful constant
79
+
80
+ #------------------------------------------------------------------------------
81
+ # Load GPS track log file
82
+ # Inputs: 0) ExifTool ref, 1) track log data or file name
83
+ # Returns: geotag hash data reference or error string
84
+ # - the geotag hash has the following members:
85
+ # Points - hash of GPS fix information hashes keyed by Unix time
86
+ # Times - list of sorted Unix times (keys of Points hash)
87
+ # NoDate - flag if some points have no date (ie. referenced to 1970:01:01)
88
+ # IsDate - flag if some points have date
89
+ # Has - hash of flags for available information (track, orient, alt)
90
+ # - the fix information hash may contain:
91
+ # lat - signed latitude (required)
92
+ # lon - signed longitude (required)
93
+ # alt - signed altitude
94
+ # time - fix time in UTC as XML string
95
+ # fixtype- type of fix ('none'|'2d'|'3d'|'dgps'|'pps')
96
+ # pdop - dilution of precision
97
+ # hdop - horizontal DOP
98
+ # vdop - vertical DOP
99
+ # sats - comma-separated list of active satellites
100
+ # nsats - number of active satellites
101
+ # track - track heading (deg true)
102
+ # dir - image direction (deg true)
103
+ # pitch - pitch angle (deg)
104
+ # roll - roll angle (deg)
105
+ # speed - speed (knots)
106
+ # first - flag set for first fix of track
107
+ # - concatenates new data with existing track data stored in ExifTool NEW_VALUE
108
+ # for the Geotag tag
109
+ sub LoadTrackLog($$;$)
110
+ {
111
+ local ($_, $/, *EXIFTOOL_TRKFILE);
112
+ my ($et, $val) = @_;
113
+ my ($raf, $from, $time, $isDate, $noDate, $noDateChanged, $lastDate, $dateFlarm);
114
+ my ($nmeaStart, $fixSecs, @fixTimes, $lastFix, %nmea);
115
+ my ($canCut, $cutPDOP, $cutHDOP, $cutSats);
116
+
117
+ unless (eval 'require Time::Local') {
118
+ return 'Geotag feature requires Time::Local installed';
119
+ }
120
+ # add data to existing track
121
+ my $geotag = $et->GetNewValues('Geotag') || { };
122
+ # get lookup for available information types
123
+ my $has = $$geotag{Has};
124
+ $has or $has = $$geotag{Has} = { 'pos' => 1 };
125
+ my $format = '';
126
+ # is $val track log data?
127
+ if ($val =~ /^(\xef\xbb\xbf)?<(\?xml|gpx)[\s>]/) {
128
+ $format = 'XML';
129
+ $/ = '>'; # set input record separator to '>' for XML/GPX data
130
+ } elsif ($val =~ /(\x0d\x0a|\x0d|\x0a)/) {
131
+ $/ = $1;
132
+ } else {
133
+ # $val is track file name
134
+ open EXIFTOOL_TRKFILE, $val or return "Error opening GPS file '$val'";
135
+ $raf = new File::RandomAccess(\*EXIFTOOL_TRKFILE);
136
+ unless ($raf->Read($_, 256)) {
137
+ close EXIFTOOL_TRKFILE;
138
+ return "Empty track file '$val'";
139
+ }
140
+ # look for XML or GPX header (might as well allow UTF-8 BOM)
141
+ if (/^(\xef\xbb\xbf)?<(\?xml|gpx)[\s>]/) {
142
+ $format = 'XML';
143
+ $/ = '>'; # set input record separator to '>' for XML/GPX data
144
+ } elsif (/(\x0d\x0a|\x0d|\x0a)/) {
145
+ $/ = $1;
146
+ } else {
147
+ close EXIFTOOL_TRKFILE;
148
+ return "Invalid track file '$val'";
149
+ }
150
+ $raf->Seek(0,0);
151
+ $from = "file '$val'";
152
+ }
153
+ unless ($from) {
154
+ # set up RAF for reading log file in memory
155
+ $raf = new File::RandomAccess(\$val);
156
+ $from = 'data';
157
+ }
158
+ # initialize track points lookup
159
+ my $points = $$geotag{Points};
160
+ $points or $points = $$geotag{Points} = { };
161
+
162
+ # initialize cuts
163
+ my $maxHDOP = $et->Options('GeoMaxHDOP');
164
+ my $maxPDOP = $et->Options('GeoMaxPDOP');
165
+ my $minSats = $et->Options('GeoMinSats');
166
+ my $isCut = $maxHDOP || $maxPDOP || $minSats;
167
+
168
+ my $numPoints = 0;
169
+ my $skipped = 0;
170
+ my $lastSecs = 0;
171
+ my $fix = { };
172
+ for (;;) {
173
+ $raf->ReadLine($_) or last;
174
+ # determine file format
175
+ if (not $format) {
176
+ if (/^<(\?xml|gpx)[\s>]/) { # look for XML or GPX header
177
+ $format = 'XML';
178
+ # check for NMEA sentence
179
+ # (must ONLY start with ones that have timestamps! ie. not GSA or PTNTHPR!)
180
+ } elsif (/^\$(GP(RMC|GGA|GLL)|PMGNTRK),/) {
181
+ $format = 'NMEA';
182
+ $nmeaStart = $2 || $1; # save type of first sentence
183
+ } elsif (/^A(FLA|XSY|FIL)/) {
184
+ # (don't set format yet because we want to read HFDTE first)
185
+ $nmeaStart = 'B' ;
186
+ next;
187
+ } elsif (/^HFDTE(\d{2})(\d{2})(\d{2})/) {
188
+ my $year = $3 + ($3 >= 70 ? 1900 : 2000);
189
+ $dateFlarm = Time::Local::timegm(0,0,0,$1,$2-1,$year-1900);
190
+ $nmeaStart = 'B' ;
191
+ $format = 'IGC';
192
+ next;
193
+ } elsif ($nmeaStart and /^B/) {
194
+ # parse IGC fixes without a date
195
+ $format = 'IGC';
196
+ } elsif (/^TP,D,/) {
197
+ $format = 'Winplus';
198
+ } else {
199
+ # search only first 50 lines of file for a valid fix
200
+ last if ++$skipped > 50;
201
+ next;
202
+ }
203
+ }
204
+ #
205
+ # XML format (GPX, KML, Garmin XML/TCX etc)
206
+ #
207
+ if ($format eq 'XML') {
208
+ my ($arg, $tok, $td);
209
+ s/\s*=\s*(['"])\s*/=$1/g; # remove unnecessary white space in attributes
210
+ # Workaround for KML generated by Google Location History:
211
+ # lat/lon/alt are space-separated; we want commas.
212
+ s{(\S+)\s+(\S+)\s+(\S+)(</gx:coord>)}{$1,$2,$3$4};
213
+ foreach $arg (split) {
214
+ # parse attributes (ie. GPX 'lat' and 'lon')
215
+ # (note: ignore namespace prefixes if they exist)
216
+ if ($arg =~ /^(\w+:)?(\w+)=(['"])(.*?)\3/g) {
217
+ my $tag = $xmlTag{lc $2};
218
+ if ($tag) {
219
+ $$fix{$tag} = $4;
220
+ $$has{orient} = 1 if $isOrient{$tag};
221
+ }
222
+ }
223
+ # loop through XML elements
224
+ while ($arg =~ m{([^<>]*)<(/)?(\w+:)?(\w+)(>|$)}g) {
225
+ my $tag = $xmlTag{$tok = lc $4};
226
+ # parse as a simple property if this element has a value
227
+ if (defined $tag and not $tag) {
228
+ # a containing property was opened or closed
229
+ if (not $2) {
230
+ # opened: start a new fix
231
+ $lastFix = $fix = { };
232
+ next;
233
+ } elsif ($fix and $lastFix and %$fix) {
234
+ # closed: transfer additional tags from current fix
235
+ foreach (keys %$fix) {
236
+ $$lastFix{$_} = $$fix{$_} unless defined $$lastFix{$_};
237
+ }
238
+ undef $lastFix;
239
+ }
240
+ }
241
+ if (length $1) {
242
+ if ($tag) {
243
+ if ($tag eq 'coords') {
244
+ # read KML "Point" coordinates
245
+ @$fix{'lon','lat','alt'} = split ',', $1;
246
+ } else {
247
+ $$fix{$tag} = $1;
248
+ $$has{orient} = 1 if $isOrient{$tag};
249
+ }
250
+ }
251
+ next;
252
+ } elsif ($tok eq 'td') {
253
+ $td = 1;
254
+ }
255
+ # validate and store GPS fix
256
+ if (defined $$fix{lat} and defined $$fix{lon} and $$fix{'time'} and
257
+ $$fix{lat} =~ /^[+-]?\d+\.?\d*/ and
258
+ $$fix{lon} =~ /^[+-]?\d+\.?\d*/ and
259
+ $$fix{'time'} =~ /^(\d{4})-(\d+)-(\d+)T(\d+):(\d+):(\d+)(\.\d+)?(.*)/)
260
+ {
261
+ $time = Time::Local::timegm($6,$5,$4,$3,$2-1,$1-1900);
262
+ $time += $7 if $7; # add fractional seconds
263
+ my $tz = $8;
264
+ # adjust for time zone (otherwise assume UTC)
265
+ # - allow timezone of +-HH:MM, +-H:MM, +-HHMM or +-HH since
266
+ # the spec is unclear about timezone format
267
+ if ($tz =~ /^([-+])(\d+):(\d{2})\b/ or $tz =~ /^([-+])(\d{2})(\d{2})?\b/) {
268
+ $tz = ($2 * 60 + ($3 || 0)) * 60;
269
+ $tz *= -1 if $1 eq '+'; # opposite sign to change back to UTC
270
+ $time += $tz;
271
+ }
272
+ # validate altitude
273
+ undef $$fix{alt} if defined $$fix{alt} and $$fix{alt} !~ /^[+-]?\d+\.?\d*/;
274
+ $isDate = 1;
275
+ $canCut= 1 if defined $$fix{pdop} or defined $$fix{hdop} or defined $$fix{nsats};
276
+ $$has{alt} = 1 if $$fix{alt}; # set "has altitude" flag if appropriate
277
+ $$points{$time} = $fix;
278
+ push @fixTimes, $time; # save times of all fixes in order
279
+ $fix = { };
280
+ ++$numPoints;
281
+ }
282
+ }
283
+ }
284
+ # last ditch check KML description for timestamp (assume it is UTC)
285
+ $$fix{'time'} = "$1T$2Z" if $td and not $$fix{'time'} and
286
+ /[\s>](\d{4}-\d{2}-\d{2})[T ](\d{2}:\d{2}:\d{2}(\.\d+)?)/;
287
+ next;
288
+ #
289
+ # Winplus Beacon text file
290
+ #
291
+ } elsif ($format eq 'Winplus') {
292
+ /^TP,D,\s*([-+]?\d+\.\d*),\s*([-+]?\d+\.\d*),\s*(\d+)\/(\d+)\/(\d{4}),\s*(\d+):(\d+):(\d+)/ or next;
293
+ $$fix{lat} = $1;
294
+ $$fix{lon} = $2;
295
+ $time = Time::Local::timegm($8,$7,$6,$4,$3-1,$5-1900);
296
+ $isDate = 1;
297
+ $$points{$time} = $fix;
298
+ push @fixTimes, $time;
299
+ $fix = { };
300
+ ++$numPoints;
301
+ next;
302
+ }
303
+ my (%fix, $secs, $date, $nmea);
304
+ if ($format eq 'NMEA') {
305
+ # ignore unrecognized NMEA sentences
306
+ next unless /^\$(GP(RMC|GGA|GLL|GSA)|PMGNTRK|PTNTHPR),/;
307
+ $nmea = $2 || $1;
308
+ }
309
+ #
310
+ # IGC (flarm) (ref 4)
311
+ #
312
+ if ($format eq 'IGC') {
313
+ # B0939564531208N00557021EA007670089100207
314
+ # BHHMMSSDDMMmmmNDDDMMmmmEAaaaaaAAAAAxxyy
315
+ # HH MM SS DD MM mmm DDD MM mmm aaaaa AAAAA
316
+ # 1 2 3 4 5 6 7 8 9 10 11 12 13 14
317
+ /^B(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{3})([NS])(\d{3})(\d{2})(\d{3})([EW])([AV])(\d{5})(\d{5})/ or next;
318
+ $fix{lat} = ($4 + ($5 + $6/1000)/60) * ($7 eq 'N' ? 1 : -1);
319
+ $fix{lon} = ($8 + ($9 +$10/1000)/60) * ($11 eq 'E' ? 1 : -1);
320
+ $fix{alt} = $12 eq 'A' ? $14 : undef;
321
+ $secs = (($1 * 60) + $2) * 60 + $3;
322
+ # wrap to next day if necessary
323
+ if ($dateFlarm) {
324
+ $dateFlarm += $secPerDay if $secs < $lastSecs - JITTER();
325
+ $date = $dateFlarm;
326
+ }
327
+ $nmea = 'B';
328
+ #
329
+ # NMEA RMC sentence (contains date)
330
+ #
331
+ } elsif ($nmea eq 'RMC') {
332
+ # $GPRMC,092204.999,A,4250.5589,S,14718.5084,E,0.00,89.68,211200,,*25
333
+ # $GPRMC,hhmmss.sss,A/V,ddmm.mmmm,N/S,ddmmm.mmmm,E/W,spd(knots),dir(deg),DDMMYY,,*cs
334
+ /^\$GPRMC,(\d{2})(\d{2})(\d+)(\.\d+)?,A,(\d*?)(\d{1,2}\.\d+),([NS]),(\d*?)(\d{1,2}\.\d+),([EW]),(\d*\.?\d*),(\d*\.?\d*),(\d{2})(\d{2})(\d+)/ or next;
335
+ next if $13 > 31 or $14 > 12 or $15 > 99; # validate day/month/year
336
+ $fix{lat} = (($5 || 0) + $6/60) * ($7 eq 'N' ? 1 : -1);
337
+ $fix{lon} = (($8 || 0) + $9/60) * ($10 eq 'E' ? 1 : -1);
338
+ $fix{speed} = $11 if length $11;
339
+ $fix{track} = $12 if length $12;
340
+ my $year = $15 + ($15 >= 70 ? 1900 : 2000);
341
+ $secs = (($1 * 60) + $2) * 60 + $3;
342
+ $secs += $4 if $4; # add fractional seconds
343
+ $date = Time::Local::timegm(0,0,0,$13,$14-1,$year-1900);
344
+ #
345
+ # NMEA GGA sentence (no date)
346
+ #
347
+ } elsif ($nmea eq 'GGA') {
348
+ # $GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,,,,0000*1F
349
+ # $GPGGA,hhmmss.sss,ddmm.mmmm,N/S,dddmm.mmmm,E/W,0=invalid,sats,hdop,alt,M,...
350
+ /^\$GPGGA,(\d{2})(\d{2})(\d+)(\.\d+)?,(\d*?)(\d{1,2}\.\d+),([NS]),(\d*?)(\d{1,2}\.\d+),([EW]),[1-6],(\d+)?,(\.\d+|\d+\.?\d*)?,(-?\d+\.?\d*)?,M?,/ or next;
351
+ $fix{lat} = (($5 || 0) + $6/60) * ($7 eq 'N' ? 1 : -1);
352
+ $fix{lon} = (($8 || 0) + $9/60) * ($10 eq 'E' ? 1 : -1);
353
+ $fix{nsats} = $11;
354
+ $fix{hdop} = $12;
355
+ $fix{alt} = $13;
356
+ $secs = (($1 * 60) + $2) * 60 + $3;
357
+ $secs += $4 if $4; # add fractional seconds
358
+ $canCut = 1;
359
+ #
360
+ # NMEA GLL sentence (no date)
361
+ #
362
+ } elsif ($nmea eq 'GLL') {
363
+ # $GPGLL,4250.5589,S,14718.5084,E,092204.999,A*2D
364
+ # $GPGLL,ddmm.mmmm,N/S,dddmm.mmmm,E/W,hhmmss.sss,A/V*cs
365
+ /^\$GPGLL,(\d*?)(\d{1,2}\.\d+),([NS]),(\d*?)(\d{1,2}\.\d+),([EW]),(\d{2})(\d{2})(\d+)(\.\d+),A/ or next;
366
+ $fix{lat} = (($1 || 0) + $2/60) * ($3 eq 'N' ? 1 : -1);
367
+ $fix{lon} = (($4 || 0) + $5/60) * ($6 eq 'E' ? 1 : -1);
368
+ $secs = (($7 * 60) + $8) * 60 + $9;
369
+ $secs += $10 if $10; # add fractional seconds
370
+ #
371
+ # NMEA GSA sentence (satellite status, no date)
372
+ #
373
+ } elsif ($nmea eq 'GSA') {
374
+ # $GPGSA,A,3,04,05,,,,,,,,,,,pdop,hdop,vdop*HH
375
+ /^\$GPGSA,[AM],([23]),((?:\d*,){11}(?:\d*)),(\d+\.?\d*|\.\d+)?,(\d+\.?\d*|\.\d+)?,(\d+\.?\d*|\.\d+)?\*/ or next;
376
+ @fix{qw(fixtype sats pdop hdop vdop)} = ($1.'d',$2,$3,$4,$5);
377
+ # count the number of acquired satellites
378
+ my @a = ($fix{sats} =~ /\d+/g);
379
+ $fix{nsats} = scalar @a;
380
+ $canCut = 1;
381
+ #
382
+ # Magellan eXplorist PMGNTRK (Proprietary MaGellaN TRacK) sentence (optional date)
383
+ #
384
+ } elsif ($nmea eq 'PMGNTRK') {
385
+ # $PMGNTRK,4415.026,N,07631.091,W,00092,M,185031.06,A,,020409*65
386
+ # $PMGNTRK,ddmm.mmm,N/S,dddmm.mmm,E/W,alt,F/M,hhmmss.ss,A/V,trkname,DDMMYY*cs
387
+ /^\$PMGNTRK,(\d+)(\d{2}\.\d+),([NS]),(\d+)(\d{2}\.\d+),([EW]),(-?\d+\.?\d*),([MF]),(\d{2})(\d{2})(\d+)(\.\d+)?,A,(?:[^,]*,(\d{2})(\d{2})(\d+))?/ or next;
388
+ $fix{lat} = ($1 + $2/60) * ($3 eq 'N' ? 1 : -1);
389
+ $fix{lon} = ($4 + $5/60) * ($6 eq 'E' ? 1 : -1);
390
+ $fix{alt} = $8 eq 'M' ? $7 : $7 * 12 * 0.0254;
391
+ $secs = (($9 * 60) + $10) * 60 + $11;
392
+ $secs += $12 if $12; # add fractional seconds
393
+ if (defined $15) {
394
+ next if $13 > 31 or $14 > 12 or $15 > 99; # validate day/month/year
395
+ # optional date is available in PMGNTRK sentence
396
+ my $year = $15 + ($15 >= 70 ? 1900 : 2000);
397
+ $date = Time::Local::timegm(0,0,0,$13,$14-1,$year-1900);
398
+ }
399
+ #
400
+ # Honeywell HMR3000 PTNTHPR (Heading Pitch Roll) sentence (no date)
401
+ # (ref http://www.gpsarea.com/uploadfile/download/introduce/hmr3000_manual.pdf)
402
+ #
403
+ } elsif ($nmea eq 'PTNTHPR') {
404
+ # $PTNTHPR,85.9,N,-0.9,N,0.8,N*HH
405
+ # $PTNTHPR,heading,heading status,pitch,pitch status,roll,roll status,*cs
406
+ # status: L=low alarm, M=low warning, N=normal, O=high warning
407
+ # P=high alarm, C=tuning analog circuit
408
+ # (ignore this information on any alarm status)
409
+ /^\$PTNTHPR,(-?[\d.]+),[MNO],(-?[\d.]+),[MNO],(-?[\d.]+),[MNO],/ or next;
410
+ @fix{qw(dir pitch roll)} = ($1,$2,$3);
411
+
412
+ } else {
413
+ next; # this shouldn't happen
414
+ }
415
+ # remember the NMEA formats we successfully read
416
+ $nmea{$nmea} = 1;
417
+ # use last date if necessary (and appropriate)
418
+ if (defined $secs and not defined $date and defined $lastDate) {
419
+ # wrap to next day if necessary
420
+ if ($secs < $lastSecs - JITTER()) {
421
+ $lastSecs -= $secPerDay;
422
+ $lastDate += $secPerDay;
423
+ }
424
+ # use earlier date only if we are within 10 seconds
425
+ if ($secs - $lastSecs < 10) {
426
+ # last date is close, use it for this fix
427
+ $date = $lastDate;
428
+ } else {
429
+ # last date is old, discard it
430
+ undef $lastDate;
431
+ undef $lastSecs;
432
+ }
433
+ }
434
+ # save our last date/time
435
+ if (defined $date) {
436
+ $lastDate = $date;
437
+ $lastSecs = $secs;
438
+ }
439
+ #
440
+ # Add NMEA/IGC fix to our lookup
441
+ # (this is much more complicated than it needs to be because
442
+ # the stupid NMEA format provides no end-of-fix indication)
443
+ #
444
+ # assumptions for each NMEA sentence:
445
+ # - we only parse a time if we get a lat/lon
446
+ # - we always get a time if we have a date
447
+ if ($nmea eq $nmeaStart or (defined $secs and (not defined $fixSecs or
448
+ # don't combine sentences that are outside 10 seconds apart
449
+ ($secs >= $fixSecs and $secs - $fixSecs >= 10) or
450
+ ($secs < $fixSecs and $secs + $secPerDay - $fixSecs >= 10))))
451
+ {
452
+ # start a new fix
453
+ $fix = \%fix;
454
+ $fixSecs = $secs;
455
+ undef $noDateChanged;
456
+ # does this fix have a date/time or time stamp?
457
+ if (defined $date) {
458
+ $fix{isDate} = $isDate = 1;
459
+ $time = $date + $secs;
460
+ } elsif (defined $secs) {
461
+ $time = $secs;
462
+ $noDate = $noDateChanged = 1;
463
+ } else {
464
+ next; # wait until we have a time before adding to lookup
465
+ }
466
+ } else {
467
+ # add new data to existing fix (but don't overwrite earlier values to
468
+ # keep the coordinates in sync with the fix time)
469
+ foreach (keys %fix) {
470
+ $$fix{$_} = $fix{$_} unless defined $$fix{$_};
471
+ }
472
+ if (defined $date) {
473
+ next if $$fix{isDate};
474
+ # move this fix to the proper date
475
+ if (defined $fixSecs) {
476
+ delete $$points{$fixSecs};
477
+ pop @fixTimes if @fixTimes and $fixTimes[-1] == $fixSecs;
478
+ --$numPoints;
479
+ # if we wrapped to the next day since the start of this fix,
480
+ # we must shift the date back to the day of $fixSecs
481
+ $date -= $secPerDay if $secs < $fixSecs;
482
+ } else {
483
+ $fixSecs = $secs;
484
+ }
485
+ $time = $date + $fixSecs;
486
+ $$fix{isDate} = $isDate = 1;
487
+ # revert noDate flag if it was set for this fix
488
+ $noDate = 0 if $noDateChanged;
489
+ } elsif (defined $secs and not defined $fixSecs) {
490
+ $time = $fixSecs = $secs;
491
+ $noDate = $noDateChanged = 1;
492
+ } else {
493
+ next; # wait until we have a time
494
+ }
495
+ }
496
+ # add fix to our lookup
497
+ $$points{$time} = $fix;
498
+ push @fixTimes, $time; # save time of all fixes in order
499
+ ++$numPoints;
500
+ }
501
+ $raf->Close();
502
+
503
+ # set date flags
504
+ if ($noDate and not $$geotag{NoDate}) {
505
+ if ($isDate) {
506
+ $et->Warn('Fixes are date-less -- will use time-only interpolation');
507
+ } else {
508
+ $et->Warn('Some fixes are date-less -- may use time-only interpolation');
509
+ }
510
+ $$geotag{NoDate} = 1;
511
+ }
512
+ $$geotag{IsDate} = 1 if $isDate;
513
+
514
+ # cut bad fixes if necessary
515
+ if ($isCut and $canCut) {
516
+ $cutPDOP = $cutHDOP = $cutSats = 0;
517
+ my @goodTimes;
518
+ foreach (@fixTimes) {
519
+ $fix = $$points{$_} or next;
520
+ if ($maxPDOP and $$fix{pdop} and $$fix{pdop} > $maxPDOP) {
521
+ delete $$points{$_};
522
+ ++$cutPDOP;
523
+ } elsif ($maxHDOP and $$fix{hdop} and $$fix{hdop} > $maxHDOP) {
524
+ delete $$points{$_};
525
+ ++$cutHDOP;
526
+ } elsif ($minSats and defined $$fix{nsats} and $$fix{nsats} ne '' and
527
+ $$fix{nsats} < $minSats)
528
+ {
529
+ delete $$points{$_};
530
+ ++$cutSats;
531
+ } else {
532
+ push @goodTimes, $_;
533
+ }
534
+ }
535
+ @fixTimes = @goodTimes; # update fix times
536
+ $numPoints -= $cutPDOP;
537
+ $numPoints -= $cutHDOP;
538
+ $numPoints -= $cutSats;
539
+ }
540
+ # mark first fix of the track
541
+ while (@fixTimes) {
542
+ $fix = $$points{$fixTimes[0]} or shift(@fixTimes), next;
543
+ $$fix{first} = 1;
544
+ last;
545
+ }
546
+ my $verbose = $et->Options('Verbose');
547
+ if ($verbose) {
548
+ my $out = $et->Options('TextOut');
549
+ print $out "Loaded $numPoints points from GPS track log $from\n";
550
+ print $out "Ignored $cutPDOP points due to GeoMaxPDOP cut\n" if $cutPDOP;
551
+ print $out "Ignored $cutHDOP points due to GeoMaxHDOP cut\n" if $cutHDOP;
552
+ print $out "Ignored $cutSats points due to GeoMinSats cut\n" if $cutSats;
553
+ if ($numPoints and $verbose > 1) {
554
+ print $out ' GPS track start: ' . Image::ExifTool::ConvertUnixTime($fixTimes[0]) . " UTC\n";
555
+ if ($verbose > 3) {
556
+ print $out PrintFix($points, $_) foreach @fixTimes;
557
+ }
558
+ print $out ' GPS track end: ' . Image::ExifTool::ConvertUnixTime($fixTimes[-1]) . " UTC\n";
559
+ }
560
+ }
561
+ if ($numPoints) {
562
+ # reset timestamp list to force it to be regenerated
563
+ delete $$geotag{Times};
564
+ # set flags for available information
565
+ $$has{alt} = 1 if $nmea{GGA} or $nmea{PMGNTRK} or $nmea{B}; # alt
566
+ $$has{track} = 1 if $nmea{RMC}; # track, speed
567
+ $$has{orient} = 1 if $nmea{PTNTHPR}; # dir, pitch, roll
568
+ return $geotag; # success!
569
+ }
570
+ return "No track points found in GPS $from";
571
+ }
572
+
573
+ #------------------------------------------------------------------------------
574
+ # Apply Geosync time correction
575
+ # Inputs: 0) ExifTool ref, 1) Unix UTC time value
576
+ # Returns: sync time difference (and updates input time), or undef if no sync
577
+ sub ApplySyncCorr($$)
578
+ {
579
+ my ($et, $time) = @_;
580
+ my $sync = $et->GetNewValues('Geosync');
581
+ if (ref $sync eq 'HASH') {
582
+ my $syncTimes = $$sync{Times};
583
+ if ($syncTimes) {
584
+ # find the nearest 2 sync points
585
+ my ($i0, $i1) = (0, scalar(@$syncTimes) - 1);
586
+ while ($i1 > $i0 + 1) {
587
+ my $pt = int(($i0 + $i1) / 2);
588
+ if ($time < $$syncTimes[$pt]) {
589
+ $i1 = $pt;
590
+ } else {
591
+ $i0 = $pt;
592
+ }
593
+ }
594
+ my ($t0, $t1) = ($$syncTimes[$i0], $$syncTimes[$i1]);
595
+ # interpolate/extrapolate to account for linear camera clock drift
596
+ my $syncPoints = $$sync{Points};
597
+ my $f = $t1 == $t0 ? 0 : ($time - $t0) / ($t1 - $t0);
598
+ $sync = $$syncPoints{$t1} * $f + $$syncPoints{$t0} * (1 - $f);
599
+ } else {
600
+ $sync = $$sync{Offset}; # use fixed time offset
601
+ }
602
+ $_[1] += $sync;
603
+ } else {
604
+ undef $sync;
605
+ }
606
+ return $sync;
607
+ }
608
+
609
+ #------------------------------------------------------------------------------
610
+ # Scan outwards for a fix containing the requested parameter
611
+ # Inputs: 0) name of fix parameter, 1) reference to list of fix times,
612
+ # 2) reference to fix points hash, 3) index of starting time,
613
+ # 4) direction to scan (-1 or +1), 5) maximum time difference
614
+ # Returns: 0) time for fix containing requested information (or undef)
615
+ # 1) the corresponding fix, 2) the value of the requested fix parameter
616
+ sub ScanOutwards($$$$$$)
617
+ {
618
+ my ($key, $times, $points, $i, $dir, $maxSecs) = @_;
619
+ my $t0 = $$times[$i];
620
+ for (;;) {
621
+ $i += $dir;
622
+ last if $i < 0 or $i >= scalar @$times;
623
+ my $t = $$times[$i];
624
+ last if abs($t - $t0) > $maxSecs; # don't look too far
625
+ my $p = $$points{$t};
626
+ my $v = $$p{$key};
627
+ return($t,$p,$v) if defined $v;
628
+ }
629
+ return();
630
+ }
631
+
632
+ #------------------------------------------------------------------------------
633
+ # Find nearest fix containing the specified parameter
634
+ # Inputs: 0) ExifTool ref, 1) name of fix parameter, 2) reference to list of fix times,
635
+ # 3) reference to fix points hash, 4) index of starting time,
636
+ # 5) direction to scan (-1, +1 or undef), 6) maximum time difference
637
+ # Returns: reference to fix hash or undef
638
+ sub FindFix($$$$$$$)
639
+ {
640
+ my ($et, $key, $times, $points, $i, $dir, $maxSecs) = @_;
641
+ my ($t,$p);
642
+ if ($dir) {
643
+ ($t,$p) = ScanOutwards($key, $times, $points, $i, $dir, $maxSecs);
644
+ } else {
645
+ my ($t1, $p1) = ScanOutwards($key, $times, $points, $i, -1, $maxSecs);
646
+ my ($t2, $p2) = ScanOutwards($key, $times, $points, $i, 1, $maxSecs);
647
+ if (defined $t1) {
648
+ if (defined $t2) {
649
+ # both surrounding points are valid, so take the closest one
650
+ ($t, $p) = ($t - $t1 < $t2 - $t) ? ($t1, $p1) : ($t2, $p2);
651
+ } else {
652
+ ($t, $p) = ($t1, $p1);
653
+ }
654
+ } elsif (defined $t2) {
655
+ ($t, $p) = ($t2, $p2);
656
+ }
657
+ }
658
+ if (defined $p and $$et{OPTIONS}{Verbose} > 2) {
659
+ $et->VPrint(2, " Taking $key from fix:\n", PrintFix($points, $t))
660
+ }
661
+ return $p;
662
+ }
663
+
664
+ #------------------------------------------------------------------------------
665
+ # Set new geotagging values according to date/time
666
+ # Inputs: 0) ExifTool object ref, 1) date/time value (or undef to delete tags)
667
+ # 2) optional write group
668
+ # Returns: error string, or '' on success
669
+ # Notes: Uses track data stored in ExifTool NEW_VALUE for Geotag tag
670
+ sub SetGeoValues($$;$)
671
+ {
672
+ local $_;
673
+ my ($et, $val, $writeGroup) = @_;
674
+ my $geotag = $et->GetNewValues('Geotag');
675
+ my $verbose = $et->Options('Verbose');
676
+ my ($fix, $time, $fsec, $noDate, $secondTry, $iExt, $iDir);
677
+
678
+ # remove date if none of our fixes had date information
679
+ $val =~ s/^\S+\s+// if $val and $geotag and not $$geotag{IsDate};
680
+
681
+ # maximum time (sec) from nearest GPS fix when position is still considered valid
682
+ my $geoMaxIntSecs = $et->Options('GeoMaxIntSecs');
683
+ my $geoMaxExtSecs = $et->Options('GeoMaxExtSecs');
684
+
685
+ # use 30 minutes for a default
686
+ defined $geoMaxIntSecs or $geoMaxIntSecs = 1800;
687
+ defined $geoMaxExtSecs or $geoMaxExtSecs = 1800;
688
+
689
+ my $times = $$geotag{Times};
690
+ my $points = $$geotag{Points};
691
+ my $has = $$geotag{Has};
692
+ my $err = '';
693
+ # loop to try date/time value first, then time-only value
694
+ while (defined $val) {
695
+ unless (defined $geotag) {
696
+ $err = 'No GPS track loaded';
697
+ last;
698
+ }
699
+ unless ($times) {
700
+ # generate sorted timestamp list for binary search
701
+ my @times = sort { $a <=> $b } keys %$points;
702
+ $times = $$geotag{Times} = \@times;
703
+ }
704
+ unless ($times and @$times) {
705
+ $err = 'GPS track is empty';
706
+ last;
707
+ }
708
+ unless (eval 'require Time::Local') {
709
+ $err = 'Geotag feature requires Time::Local installed';
710
+ last;
711
+ }
712
+ # convert date/time to UTC
713
+ my ($year,$mon,$day,$hr,$min,$sec,$fs,$tz,$t0,$t1,$t2);
714
+ if ($val =~ /^(\d{4}):(\d+):(\d+)\s+(\d+):(\d+):(\d+)(\.\d*)?(Z|([-+])(\d+):(\d+))?/) {
715
+ # valid date/time value
716
+ ($year,$mon,$day,$hr,$min,$sec,$fs,$tz,$t0,$t1,$t2) = ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11);
717
+ } elsif ($val =~ /^(\d{2}):(\d+):(\d+)(\.\d*)?(Z|([-+])(\d+):(\d+))?/) {
718
+ # valid time-only value
719
+ ($hr,$min,$sec,$fs,$tz,$t0,$t1,$t2) = ($1,$2,$3,$4,$5,$6,$7,$8);
720
+ # use Jan. 2 to avoid going negative after tz adjustment
721
+ ($year,$mon,$day) = (1970,1,2);
722
+ $noDate = 1;
723
+ } else {
724
+ $err = 'Invalid date/time (use YYYY:mm:dd HH:MM:SS[.ss][+/-HH:MM|Z])';
725
+ last;
726
+ }
727
+ if ($tz) {
728
+ $time = Time::Local::timegm($sec,$min,$hr,$day,$mon-1,$year-1900);
729
+ # use timezone from date/time value
730
+ if ($tz ne 'Z') {
731
+ my $tzmin = $t1 * 60 + $t2;
732
+ $time -= ($t0 eq '-' ? -$tzmin : $tzmin) * 60;
733
+ }
734
+ } else {
735
+ # assume local timezone
736
+ $time = Image::ExifTool::TimeLocal($sec,$min,$hr,$day,$mon-1,$year-1900);
737
+ }
738
+ # add fractional seconds
739
+ $time += $fs if $fs and $fs ne '.';
740
+
741
+ # bring UTC time back to Jan. 1 if no date is given
742
+ $time %= $secPerDay if $noDate;
743
+
744
+ # apply time synchronization if available
745
+ my $sync = ApplySyncCorr($et, $time);
746
+
747
+ # save fractional seconds string
748
+ $fsec = ($time =~ /(\.\d+)$/) ? $1 : '';
749
+
750
+ if ($et->Options('Verbose') > 1 and not $secondTry) {
751
+ my $out = $et->Options('TextOut');
752
+ my $str = "$fsec UTC";
753
+ $str .= sprintf(" (incl. Geosync offset of %+.3f sec)", $sync) if defined $sync;
754
+ unless ($tz) {
755
+ my $tzs = Image::ExifTool::TimeZoneString([$sec,$min,$hr,$day,$mon-1,$year-1900],$time);
756
+ $str .= " (local timezone is $tzs)";
757
+ }
758
+ print $out ' Geotime value: ' . Image::ExifTool::ConvertUnixTime(int $time) . "$str\n";
759
+ }
760
+ # interpolate GPS track at $time
761
+ if ($time < $$times[0]) {
762
+ if ($time < $$times[0] - $geoMaxExtSecs) {
763
+ $err or $err = 'Time is too far before track';
764
+ } else {
765
+ $fix = $$points{$$times[0]};
766
+ $iExt = 0; $iDir = 1;
767
+ $et->VPrint(2, " Taking pos from fix:\n",
768
+ PrintFix($points, $$times[0])) if $verbose > 2;
769
+ }
770
+ } elsif ($time > $$times[-1]) {
771
+ if ($time > $$times[-1] + $geoMaxExtSecs) {
772
+ $err or $err = 'Time is too far beyond track';
773
+ } else {
774
+ $fix = $$points{$$times[-1]};
775
+ $iExt = $#$times; $iDir = -1;
776
+ $et->VPrint(2, " Taking pos from fix:\n",
777
+ PrintFix($points, $$times[-1])) if $verbose > 2;
778
+ }
779
+ } else {
780
+ # find nearest 2 points in time
781
+ my ($i0, $i1) = (0, scalar(@$times) - 1);
782
+ while ($i1 > $i0 + 1) {
783
+ my $pt = int(($i0 + $i1) / 2);
784
+ if ($time < $$times[$pt]) {
785
+ $i1 = $pt;
786
+ } else {
787
+ $i0 = $pt;
788
+ }
789
+ }
790
+ # do linear interpolation for position
791
+ my $t0 = $$times[$i0];
792
+ my $t1 = $$times[$i1];
793
+ my $p1 = $$points{$t1};
794
+ # check to see if we are extrapolating before the first entry in a track
795
+ my $maxSecs = ($$p1{first} and $geoMaxIntSecs) ? $geoMaxExtSecs : $geoMaxIntSecs;
796
+ # don't interpolate if fixes are too far apart
797
+ if ($t1 - $t0 > $maxSecs) {
798
+ # treat as an extrapolation -- use nearest fix if close enough
799
+ my $tn;
800
+ if ($time - $t0 < $t1 - $time) {
801
+ $tn = $t0;
802
+ $iExt = $i0;
803
+ } else {
804
+ $tn = $t1;
805
+ $iExt = $i1;
806
+ }
807
+ if (abs($time - $tn) > $geoMaxExtSecs) {
808
+ $err or $err = 'Time is too far from nearest GPS fix';
809
+ } else {
810
+ $fix = $$points{$tn};
811
+ $et->VPrint(2, " Taking pos from fix:\n",
812
+ PrintFix($points, $tn)) if $verbose > 2;
813
+ }
814
+ } else {
815
+ my $f0 = $t1 == $t0 ? 0 : ($time - $t0) / ($t1 - $t0);
816
+ my $p0 = $$points{$t0};
817
+ $et->VPrint(2, " Interpolating pos between fixes (f=$f0):\n",
818
+ PrintFix($points, $t0, $t1)) if $verbose > 2;
819
+ $fix = { };
820
+ # loop through available fix information categories
821
+ # (pos, track, alt, orient)
822
+ my ($category, $key);
823
+ Category: foreach $category (qw{pos track alt orient}) {
824
+ next unless $$has{$category};
825
+ my ($f, $p0b, $p1b, $f0b);
826
+ # loop through specific fix information keys
827
+ # (lat, lon, alt, track, speed, dir, pitch, roll)
828
+ foreach $key (@{$fixInfoKeys{$category}}) {
829
+ my $v0 = $$p0{$key};
830
+ my $v1 = $$p1{$key};
831
+ if (defined $v0 and defined $v1) {
832
+ $f = $f0;
833
+ } elsif (defined $f0b) {
834
+ $v0 = $$p0b{$key};
835
+ $v1 = $$p1b{$key};
836
+ next unless defined $v0 and defined $v1;
837
+ $f = $f0b;
838
+ } else {
839
+ # scan outwards looking for fixes with the required information
840
+ # (NOTE: SHOULD EVENTUALLY DO THIS FOR EXTRAPOLATION TOO!)
841
+ my ($t0b, $t1b);
842
+ if (defined $v0) {
843
+ $t0b = $t0; $p0b = $p0;
844
+ } else {
845
+ ($t0b,$p0b,$v0) = ScanOutwards($key,$times,$points,$i0,-1,$maxSecs);
846
+ next Category unless defined $t0b;
847
+ }
848
+ if (defined $v1) {
849
+ $t1b = $t1; $p1b = $p1;
850
+ } else {
851
+ ($t1b,$p1b,$v1) = ScanOutwards($key,$times,$points,$i1,1,$maxSecs);
852
+ next Category unless defined $t1b;
853
+ }
854
+ # re-calculate the interpolation factor
855
+ $f = $f0b = $t1b == $t0b ? 0 : ($time - $t0b) / ($t1b - $t0b);
856
+ $et->VPrint(2, " Interpolating $category between fixes (f=$f):\n",
857
+ PrintFix($points, $t0b, $t1b)) if $verbose > 2;
858
+ }
859
+ # must interpolate cyclical values differently
860
+ if ($cyclical{$key} and abs($v1 - $v0) > 180) {
861
+ # the acute angle spans the discontinuity, so add
862
+ # 360 degrees to the smaller angle before interpolating
863
+ $v0 < $v1 ? $v0 += 360 : $v1 += 360;
864
+ $$fix{$key} = $v1 * $f + $v0 * (1 - $f);
865
+ # longitude and roll ranges are -180 to 180, others are 0 to 360
866
+ my $max = ($key eq 'lon' or $key eq 'roll') ? 180 : 360;
867
+ $$fix{$key} -= 360 if $$fix{$key} >= $max;
868
+ } else {
869
+ # simple linear interpolation
870
+ $$fix{$key} = $v1 * $f + $v0 * (1 - $f);
871
+ }
872
+ }
873
+ }
874
+ }
875
+ }
876
+ if ($fix) {
877
+ $err = ''; # success!
878
+ } elsif ($$geotag{NoDate} and not $noDate and $val =~ s/^\S+\s+//) {
879
+ # try again with no date since some of our track points are date-less
880
+ $secondTry = 1;
881
+ next;
882
+ }
883
+ last;
884
+ }
885
+ if ($fix) {
886
+ my ($gpsDate, $gpsAlt, $gpsAltRef);
887
+ my @t = gmtime(int $time);
888
+ my $gpsTime = sprintf('%.2d:%.2d:%.2d', $t[2], $t[1], $t[0]) . $fsec;
889
+ # write GPSDateStamp if date included in track log, otherwise delete it
890
+ $gpsDate = sprintf('%.2d:%.2d:%.2d', $t[5]+1900, $t[4]+1, $t[3]) unless $noDate;
891
+ # write GPSAltitude tags if altitude included in track log, otherwise delete them
892
+ if (defined $$fix{alt}) {
893
+ $gpsAlt = abs $$fix{alt};
894
+ $gpsAltRef = ($$fix{alt} < 0 ? 1 : 0);
895
+ } elsif ($$has{alt} and defined $iExt) {
896
+ my $tFix = FindFix($et,'alt',$times,$points,$iExt,$iDir,$geoMaxExtSecs);
897
+ if ($tFix) {
898
+ $gpsAlt = abs $$tFix{alt};
899
+ $gpsAltRef = ($$tFix{alt} < 0 ? 1 : 0);
900
+ }
901
+ }
902
+ # set new GPS tag values (EXIF, or XMP if write group is 'xmp')
903
+ my ($xmp, $exif, @r);
904
+ my %opts = ( Type => 'ValueConv' ); # write ValueConv values
905
+ if ($writeGroup) {
906
+ $opts{Group} = $writeGroup;
907
+ $xmp = ($writeGroup =~ /xmp/i);
908
+ $exif = ($writeGroup =~ /^(exif|gps)$/i);
909
+ }
910
+ # (capture error messages by calling SetNewValue in list context)
911
+ @r = $et->SetNewValue(GPSLatitude => $$fix{lat}, %opts);
912
+ @r = $et->SetNewValue(GPSLongitude => $$fix{lon}, %opts);
913
+ @r = $et->SetNewValue(GPSAltitude => $gpsAlt, %opts);
914
+ @r = $et->SetNewValue(GPSAltitudeRef => $gpsAltRef, %opts);
915
+ if ($$has{track}) {
916
+ my $tFix = $fix;
917
+ if (not defined $$fix{track} and defined $iExt) {
918
+ my $p = FindFix($et,'track',$times,$points,$iExt,$iDir,$geoMaxExtSecs);
919
+ $tFix = $p if $p;
920
+ }
921
+ @r = $et->SetNewValue(GPSTrack => $$tFix{track}, %opts);
922
+ @r = $et->SetNewValue(GPSTrackRef => (defined $$tFix{track} ? 'T' : undef), %opts);
923
+ @r = $et->SetNewValue(GPSSpeed => $$tFix{speed}, %opts);
924
+ @r = $et->SetNewValue(GPSSpeedRef => (defined $$tFix{speed} ? 'N' : undef), %opts);
925
+ }
926
+ if ($$has{orient}) {
927
+ my $tFix = $fix;
928
+ if (not defined $$fix{dir} and defined $iExt) {
929
+ my $p = FindFix($et,'dir',$times,$points,$iExt,$iDir,$geoMaxExtSecs);
930
+ $tFix = $p if $p;
931
+ }
932
+ @r = $et->SetNewValue(GPSImgDirection => $$tFix{dir}, %opts);
933
+ @r = $et->SetNewValue(GPSImgDirectionRef => (defined $$tFix{dir} ? 'T' : undef), %opts);
934
+ # Note: GPSPitch and GPSRoll are non-standard, and must be user-defined
935
+ @r = $et->SetNewValue(GPSPitch => $$tFix{pitch}, %opts);
936
+ @r = $et->SetNewValue(GPSRoll => $$tFix{roll}, %opts);
937
+ }
938
+ unless ($xmp) {
939
+ @r = $et->SetNewValue(GPSLatitudeRef => ($$fix{lat} > 0 ? 'N' : 'S'), %opts);
940
+ @r = $et->SetNewValue(GPSLongitudeRef => ($$fix{lon} > 0 ? 'E' : 'W'), %opts);
941
+ @r = $et->SetNewValue(GPSDateStamp => $gpsDate, %opts);
942
+ @r = $et->SetNewValue(GPSTimeStamp => $gpsTime, %opts);
943
+ # set options to edit XMP:GPSDateTime only if it already exists
944
+ $opts{EditOnly} = 1;
945
+ $opts{Group} = 'XMP';
946
+ }
947
+ unless ($exif) {
948
+ @r = $et->SetNewValue(GPSDateTime => "$gpsDate $gpsTime", %opts);
949
+ }
950
+ } else {
951
+ my %opts;
952
+ $opts{Replace} = 2 if defined $val; # remove existing new values
953
+ $opts{Group} = $writeGroup if $writeGroup;
954
+
955
+ # reset any GPS values we might have already set
956
+ foreach (qw(GPSLatitude GPSLatitudeRef GPSLongitude GPSLongitudeRef
957
+ GPSAltitude GPSAltitudeRef GPSDateStamp GPSTimeStamp GPSDateTime
958
+ GPSTrack GPSTrackRef GPSSpeed GPSSpeedRef
959
+ GPSImgDirection GPSImgDirectionRef GPSPitch GPSRoll))
960
+ {
961
+ my @r = $et->SetNewValue($_, undef, %opts);
962
+ }
963
+ }
964
+ return $err;
965
+ }
966
+
967
+ #------------------------------------------------------------------------------
968
+ # Convert Geotagging time synchronization value
969
+ # Inputs: 0) exiftool object ref,
970
+ # 1) time difference string ("[+-]DD MM:HH:SS.ss"), geosync'd file name,
971
+ # "GPSTIME@IMAGETIME", or "GPSTIME@FILENAME"
972
+ # Returns: geosync hash
973
+ # Notes: calling this routine with more than one geosync'd file causes time drift
974
+ # correction to be implemented
975
+ sub ConvertGeosync($$)
976
+ {
977
+ my ($et, $val) = @_;
978
+ my $sync = $et->GetNewValues('Geosync') || { };
979
+ my ($syncFile, $gpsTime, $imgTime);
980
+
981
+ if ($val =~ /(.*?)\@(.*)/) {
982
+ $gpsTime = $1;
983
+ if (-f $2) {
984
+ $syncFile = $2;
985
+ } else {
986
+ $imgTime = $2;
987
+ }
988
+ # (take care because "-f '1:30'" crashes ActivePerl 5.10)
989
+ } elsif ($val !~ /^\d/ or $val !~ /:/) {
990
+ $syncFile = $val if -f $val;
991
+ }
992
+ if ($gpsTime or defined $syncFile) {
993
+ # (this is a time synchronization vector)
994
+ if (defined $syncFile) {
995
+ # check the following tags in order to obtain the image timestamp
996
+ my @timeTags = qw(SubSecDateTimeOriginal SubSecCreateDate SubSecModifyDate
997
+ DateTimeOriginal CreateDate ModifyDate FileModifyDate);
998
+ my $info = ImageInfo($syncFile, { PrintConv => 0 }, @timeTags,
999
+ 'GPSDateTime', 'GPSTimeStamp');
1000
+ $$info{Error} and warn("$$info{Err}\n"), return undef;
1001
+ $gpsTime or $gpsTime = $$info{GPSDateTime} || $$info{GPSTimeStamp};
1002
+ my $tag;
1003
+ foreach $tag (@timeTags) {
1004
+ if ($$info{$tag}) {
1005
+ $imgTime = $$info{$tag};
1006
+ $et->VPrint(2, "Geosyncing with $tag from '$syncFile'\n");
1007
+ last;
1008
+ }
1009
+ }
1010
+ $gpsTime or warn("No GPSTimeStamp in '$syncFile\n"), return undef;
1011
+ $imgTime or warn("No image timestamp in '$syncFile'\n"), return undef;
1012
+ }
1013
+ # add date to date-less timestamps
1014
+ my ($imgDateTime, $gpsDateTime, $noDate);
1015
+ if ($imgTime =~ /^(\d+:\d+:\d+)\s+\d+/) {
1016
+ $imgDateTime = $imgTime;
1017
+ my $date = $1;
1018
+ if ($gpsTime =~ /^\d+:\d+:\d+\s+\d+/) {
1019
+ $gpsDateTime = $gpsTime;
1020
+ } else {
1021
+ $gpsDateTime = "$date $gpsTime";
1022
+ }
1023
+ } elsif ($gpsTime =~ /^(\d+:\d+:\d+)\s+\d+/) {
1024
+ $imgDateTime = "$1 $imgTime";
1025
+ $gpsDateTime = $gpsTime;
1026
+ } else {
1027
+ # use a today's date (so hopefully the DST setting will be intuitive)
1028
+ my @tm = localtime;
1029
+ my $date = sprintf('%.4d:%.2d:%.2d', $tm[5]+1900, $tm[4]+1, $tm[3]);
1030
+ $gpsDateTime = "$date $gpsTime";
1031
+ $imgDateTime = "$date $imgTime";
1032
+ $noDate = 1;
1033
+ }
1034
+ # calculate Unix seconds since the epoch
1035
+ my $imgSecs = Image::ExifTool::GetUnixTime($imgDateTime, 1);
1036
+ defined $imgSecs or warn("Invalid image time '$imgTime'\n"), return undef;
1037
+ my $gpsSecs = Image::ExifTool::GetUnixTime($gpsDateTime, 1);
1038
+ defined $gpsSecs or warn("Invalid GPS time '$gpsTime'\n"), return undef;
1039
+ # add fractional seconds
1040
+ $gpsSecs += $1 if $gpsTime =~ /(\.\d+)/;
1041
+ $imgSecs += $1 if $imgTime =~ /(\.\d+)/;
1042
+ # shift dates within 12 hours of each other if either timestamp was date-less
1043
+ if ($gpsDateTime ne $gpsTime or $imgDateTime ne $imgTime) {
1044
+ my $diff = ($imgSecs - $gpsSecs) % (24 * 3600);
1045
+ $diff -= 24 * 3600 if $diff > 12 * 3600;
1046
+ $diff += 24 * 3600 if $diff < -12 * 3600;
1047
+ if ($gpsDateTime ne $gpsTime) {
1048
+ $gpsSecs = $imgSecs - $diff;
1049
+ } else {
1050
+ $imgSecs = $gpsSecs + $diff;
1051
+ }
1052
+ }
1053
+ # save the synchronization offset
1054
+ $$sync{Offset} = $gpsSecs - $imgSecs;
1055
+ # save this synchronization point if either timestamp had a date
1056
+ unless ($noDate) {
1057
+ $$sync{Points} or $$sync{Points} = { };
1058
+ $$sync{Points}{$imgSecs} = $$sync{Offset};
1059
+ # print verbose output
1060
+ if ($et->Options('Verbose') > 1) {
1061
+ # print GPS and image timestamps in UTC
1062
+ my $gps = Image::ExifTool::ConvertUnixTime($gpsSecs);
1063
+ my $img = Image::ExifTool::ConvertUnixTime($imgSecs);
1064
+ $gps .= $1 if $gpsTime =~ /(\.\d+)/;
1065
+ $img .= $1 if $imgTime =~ /(\.\d+)/;
1066
+ $et->VPrint(1, "Added Geosync point:\n",
1067
+ " GPS time stamp: $gps UTC\n",
1068
+ " Image date/time: $img UTC\n");
1069
+ }
1070
+ # save sorted list of image sync times if we have more than one
1071
+ my @times = keys %{$$sync{Points}};
1072
+ if (@times > 1) {
1073
+ @times = sort { $a <=> $b } @times;
1074
+ $$sync{Times} = \@times;
1075
+ }
1076
+ }
1077
+ } else {
1078
+ # (this is a simple time difference)
1079
+ my @vals = $val =~ /(?=\d|\.\d)\d*(?:\.\d*)?/g; # (allow decimal values too)
1080
+ @vals or warn("Invalid value (please refer to geotag documentation)\n"), return undef;
1081
+ my $secs = 0;
1082
+ my $mult;
1083
+ foreach $mult (1, 60, 3600, $secPerDay) {
1084
+ $secs += $mult * pop(@vals);
1085
+ last unless @vals;
1086
+ }
1087
+ # set constant sync offset
1088
+ $$sync{Offset} = $val =~ /^\s*-/ ? -$secs : $secs;
1089
+ }
1090
+ return $sync;
1091
+ }
1092
+
1093
+ #------------------------------------------------------------------------------
1094
+ # Print fix information
1095
+ # Inputs: 0) lookup for all fix points, 1-n) list of fix times
1096
+ # Returns: fix string (including leading indent and trailing newline)
1097
+ sub PrintFix($@)
1098
+ {
1099
+ local $_;
1100
+ my $points = shift;
1101
+ my $str = '';
1102
+ while (@_) {
1103
+ my $time = shift;
1104
+ $str .= ' ' . Image::ExifTool::ConvertUnixTime($time) . ' UTC -';
1105
+ my $fix = $$points{$time};
1106
+ if ($fix) {
1107
+ foreach (sort keys %$fix) {
1108
+ $str .= " $_=$$fix{$_}" unless $_ eq 'time';
1109
+ }
1110
+ }
1111
+ $str .= "\n";
1112
+ }
1113
+ return $str;
1114
+ }
1115
+
1116
+ #------------------------------------------------------------------------------
1117
+ 1; # end
1118
+
1119
+ __END__
1120
+
1121
+ =head1 NAME
1122
+
1123
+ Image::ExifTool::Geotag - Geotagging utility routines
1124
+
1125
+ =head1 SYNOPSIS
1126
+
1127
+ This module is used by Image::ExifTool
1128
+
1129
+ =head1 DESCRIPTION
1130
+
1131
+ This module loads GPS track logs, interpolates to determine position based
1132
+ on time, and sets new GPS values for geotagging images. Currently supported
1133
+ formats are GPX, NMEA RMC/GGA/GLL, KML, IGC, Garmin XML and TCX, Magellan
1134
+ PMGNTRK, Honeywell PTNTHPR, and Winplus Beacon text files.
1135
+
1136
+ Methods in this module should not be called directly. Instead, the Geotag
1137
+ feature is accessed by writing the values of the ExifTool Geotag, Geosync
1138
+ and Geotime tags (see the L<Extra Tags|Image::ExifTool::TagNames/Extra Tags>
1139
+ in the tag name documentation).
1140
+
1141
+ =head1 NOTES
1142
+
1143
+ To take advantage of attitude information in the PTNTHPR NMEA sentence, two
1144
+ user-defined tags, GPSPitch and GPSRoll, must be active.
1145
+
1146
+ =head1 AUTHOR
1147
+
1148
+ Copyright 2003-2014, Phil Harvey (phil at owl.phy.queensu.ca)
1149
+
1150
+ This library is free software; you can redistribute it and/or modify it
1151
+ under the same terms as Perl itself.
1152
+
1153
+ =head1 REFERENCES
1154
+
1155
+ =over 4
1156
+
1157
+ =item L<http://www.topografix.com/GPX/1/1/>
1158
+
1159
+ =item L<http://www.gpsinformation.org/dale/nmea.htm#GSA>
1160
+
1161
+ =item L<http://code.google.com/apis/kml/documentation/kmlreference.html>
1162
+
1163
+ =item L<http://www.fai.org/gliding/system/files/tech_spec_gnss.pdf>
1164
+
1165
+ =back
1166
+
1167
+ =head1 ACKNOWLEDGEMENTS
1168
+
1169
+ Thanks to Lionel Genet for the ability to read IGC format track logs.
1170
+
1171
+ =head1 SEE ALSO
1172
+
1173
+ L<Image::ExifTool::TagNames/Extra Tags>,
1174
+ L<Image::ExifTool(3pm)|Image::ExifTool>
1175
+
1176
+ =cut