typr 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/example/browser +45 -0
- data/example/grid +80 -0
- data/example/text +65 -0
- data/example/top500.csv +501 -0
- data/lib/browser.rb +431 -0
- data/lib/curses.rb +153 -0
- data/lib/frontend.rb +33 -0
- data/lib/graphical.rb +174 -0
- data/lib/grid.rb +431 -0
- data/lib/line.rb +99 -0
- data/lib/space.rb +85 -0
- data/lib/stack.rb +278 -0
- data/lib/terminal.rb +286 -0
- data/lib/text.rb +140 -0
- data/lib/typr.rb +55 -0
- data/share/mimetypes +1 -0
- metadata +73 -0
data/lib/text.rb
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# coding: utf-8
|
|
3
|
+
# frozen_string_literal: true
|
|
4
|
+
|
|
5
|
+
require 'stringio'
|
|
6
|
+
require_relative 'stack.rb'
|
|
7
|
+
|
|
8
|
+
module Typr
|
|
9
|
+
|
|
10
|
+
# A vertically scrollable text viewer with word-wrapping, header bar,
|
|
11
|
+
# row selection via hint characters, and search.
|
|
12
|
+
#
|
|
13
|
+
# Accepts String, IO, or StringIO input. Content is split into display
|
|
14
|
+
# rows by newlines and line width, then rendered as a sliding window.
|
|
15
|
+
#
|
|
16
|
+
# == Example
|
|
17
|
+
#
|
|
18
|
+
# text = Typr::Text.new(
|
|
19
|
+
# input: StringIO.new("Hello\nworld"),
|
|
20
|
+
# header: "My Doc",
|
|
21
|
+
# top: 2, left: 0.1, right: 0.9, bottom: -4,
|
|
22
|
+
# border: :round,
|
|
23
|
+
# colors: { header: [:yellow, :grey30] }
|
|
24
|
+
# )
|
|
25
|
+
# text.draw
|
|
26
|
+
|
|
27
|
+
class Text < Stack
|
|
28
|
+
|
|
29
|
+
## Tabstop width in spaces. Default: 2.
|
|
30
|
+
attr_accessor :tabspace
|
|
31
|
+
|
|
32
|
+
# Rebuilds the internal line buffer from +input+.
|
|
33
|
+
# Splits text at newlines and word boundaries to fit the current width.
|
|
34
|
+
# Pass nil to re-parse from the existing buffer (triggered on resize).
|
|
35
|
+
#
|
|
36
|
+
# text.build("one\ntwo three") # => #<Typr::Text ...>
|
|
37
|
+
# text << "appended line" # alias for build
|
|
38
|
+
|
|
39
|
+
def build input=nil
|
|
40
|
+
( @lines = [0]; input = "" ) if rebuild = !input
|
|
41
|
+
return self if rebuild && input == ""
|
|
42
|
+
input = StringIO.new( input.to_s.dup ) unless input.respond_to?(:read)
|
|
43
|
+
@tail = ""
|
|
44
|
+
until input.closed? or input.eof?
|
|
45
|
+
capacity = width - @margin.size - @tail.length
|
|
46
|
+
chunk = (capacity < 1) ? "x" : capacity
|
|
47
|
+
line = @tail + input.read(chunk)
|
|
48
|
+
if line.empty?
|
|
49
|
+
break
|
|
50
|
+
else
|
|
51
|
+
wrap_idx = line.index("\n") || line.rindex(" ") || line.length
|
|
52
|
+
wrap = [wrap_idx, line.length].min + 1
|
|
53
|
+
@data += line[0...wrap]
|
|
54
|
+
if wrap < line.length
|
|
55
|
+
@tail = line[wrap..-1]
|
|
56
|
+
@lines << @data.length
|
|
57
|
+
else
|
|
58
|
+
@tail = ""
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
break if rebuild && line[-1] == "\n"
|
|
62
|
+
end
|
|
63
|
+
until @tail.empty?
|
|
64
|
+
wrap_idx = @tail.index("\n") || @tail.rindex(" ") || @tail.length
|
|
65
|
+
wrap = [wrap_idx, @tail.length].min + 1
|
|
66
|
+
@data += @tail[0...wrap]
|
|
67
|
+
if wrap < @tail.length
|
|
68
|
+
@lines << @data.length
|
|
69
|
+
@tail = @tail[wrap..-1]
|
|
70
|
+
else
|
|
71
|
+
@tail = ""
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
@lines << @data.length unless @lines.last == @data.length
|
|
75
|
+
end
|
|
76
|
+
alias :<< :build
|
|
77
|
+
|
|
78
|
+
# Renders a single display row. Pass an Integer for a content row
|
|
79
|
+
# or +:header+ for the header bar.
|
|
80
|
+
#
|
|
81
|
+
# text.print(:header) # renders the header bar
|
|
82
|
+
# text.print(3) # renders row 3 of the current page
|
|
83
|
+
|
|
84
|
+
def print row=nil
|
|
85
|
+
header = ( row == :header )
|
|
86
|
+
return super unless row and @lines[ row + 1 ] unless header
|
|
87
|
+
show prepare( ( header ? @header : @page[ row-@start ] ), width )
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Returns word-boundary column offsets for a given page row.
|
|
91
|
+
# Used internally to place hint markers between words.
|
|
92
|
+
#
|
|
93
|
+
# text.positions(2) # => [0, 6, 10, ...]
|
|
94
|
+
|
|
95
|
+
def positions row
|
|
96
|
+
[0] + @page[row-1].chars.map.with_index{|c,i| i+1 if c == @separator}.compact
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Full draw cycle: rebuilds on resize, computes visible lines,
|
|
100
|
+
# and renders the viewport with borders and hints.
|
|
101
|
+
#
|
|
102
|
+
# text.draw
|
|
103
|
+
|
|
104
|
+
def draw
|
|
105
|
+
(build; @lastwidth = width) if width != @lastwidth
|
|
106
|
+
range = @lines[@start..@start+height]
|
|
107
|
+
page = StringIO.new @data[range.first..range.last]
|
|
108
|
+
@page=range[1..-1].map{|pos| page.read(pos-range.first-page.pos).rstrip}
|
|
109
|
+
super
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Total number of text lines in the buffer.
|
|
113
|
+
#
|
|
114
|
+
# text.rows # => 42
|
|
115
|
+
|
|
116
|
+
def rows; @lines.count end
|
|
117
|
+
|
|
118
|
+
# Placeholder for text search. Currently unimplemented.
|
|
119
|
+
#
|
|
120
|
+
# text.search("query") # => nil
|
|
121
|
+
|
|
122
|
+
def search query
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Creates a new Text widget.
|
|
126
|
+
#
|
|
127
|
+
# text = Typr::Text.new(input: "hello", header: "Title")
|
|
128
|
+
# text = Typr::Text.new(input: $stdin, tabspace: 4)
|
|
129
|
+
|
|
130
|
+
def initialize args={}
|
|
131
|
+
@tabspace = 2
|
|
132
|
+
@data, @lines, @tail = "", [0], ""
|
|
133
|
+
super args
|
|
134
|
+
@colors = { header: :yellow }.merge( @colors || {} )
|
|
135
|
+
@lastwidth = width
|
|
136
|
+
self << @input
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
end
|
data/lib/typr.rb
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# typr is a Ruby library for building interactive terminal-based user interfaces.
|
|
2
|
+
# It provides layout primitives, widgets, and event-driven interaction built on
|
|
3
|
+
# top of curses.
|
|
4
|
+
#
|
|
5
|
+
# == Widgets
|
|
6
|
+
#
|
|
7
|
+
# * Typr::Grid - Sortable, filterable table with formatted columns and row selection
|
|
8
|
+
# * Typr::Text - Scrollable text viewer with word/line picking and search
|
|
9
|
+
# * Typr::Browser - File-system directory browser with MIME type detection
|
|
10
|
+
# * Typr::Stack - Scrollable container with keyboard navigation and hint overlays
|
|
11
|
+
# * Typr::Space - Base layout primitive with border drawing
|
|
12
|
+
# * Typr::Line - Interactive prompt/input with colored questions and answers
|
|
13
|
+
#
|
|
14
|
+
# == Terminal Control
|
|
15
|
+
#
|
|
16
|
+
# Typr.init # Initialize terminal (hide cursor, enable key mode)
|
|
17
|
+
# Typr.clear # Clear entire screen
|
|
18
|
+
# Typr.clear :line # Clear current line only
|
|
19
|
+
# key = Typr.read(:key) # Read a single keypress
|
|
20
|
+
# line = Typr.read(:line) # Read a line of text input
|
|
21
|
+
# Typr.exit # Restore terminal state
|
|
22
|
+
#
|
|
23
|
+
# == Layout Properties
|
|
24
|
+
#
|
|
25
|
+
# All widgets accept +left+, +top+, +right+, +bottom+ as:
|
|
26
|
+
# Integer - absolute position
|
|
27
|
+
# Float - fraction of terminal (0.0..1.0)
|
|
28
|
+
# Proc - evaluated each layout pass
|
|
29
|
+
# Negative - offset from opposite edge (-1 = last row/col)
|
|
30
|
+
#
|
|
31
|
+
# == Example
|
|
32
|
+
#
|
|
33
|
+
# require 'typr'
|
|
34
|
+
#
|
|
35
|
+
# Typr.init
|
|
36
|
+
# grid = Typr::Grid.new(
|
|
37
|
+
# input: [['Alice', 30], ['Bob', 25]],
|
|
38
|
+
# header: ['Name', 'Age'],
|
|
39
|
+
# format: [:max, :right]
|
|
40
|
+
# )
|
|
41
|
+
# grid.draw
|
|
42
|
+
# key = Typr.read(:key)
|
|
43
|
+
# Typr.exit
|
|
44
|
+
#
|
|
45
|
+
# == Installation
|
|
46
|
+
#
|
|
47
|
+
# $ gem install typr
|
|
48
|
+
#
|
|
49
|
+
# Runtime dependency: unicode-display_width ~> 3.1
|
|
50
|
+
|
|
51
|
+
require_relative 'line'
|
|
52
|
+
require_relative 'stack'
|
|
53
|
+
require_relative 'grid'
|
|
54
|
+
require_relative 'text'
|
|
55
|
+
require_relative 'browser'
|
data/share/mimetypes
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{:efi=>:"application/vnd.microsoft.portable-executable", :mui=>:"application/vnd.microsoft.portable-executable", :log=>:"text/plain", :dat=>:"application/octet-stream", :stl=>:"application/sla", :lst=>:"text/plain", :cfg=>:"text/plain", :broken=>:"text/plain", :bin=>:"application/x-binary", :icd=>:"text/plain", :conf=>:"text/plain", :pub=>:"application/x-mspublisher", :list=>:"text/plain", :toml=>:"text/plain", :fish=>:"text/plain", :rc=>:"text/plain", :ini=>:"text/plain", :keymap=>:"text/plain", :menu=>:"text/plain", :modules=>:"text/plain", :files=>:"text/plain", :example=>:"text/plain", :disabled=>:"text/plain", :csh=>:"application/x-csh", :init=>:"text/plain", :crt=>:"application/pkix-cert", :cnf=>:"text/plain", :dist=>:"application/octet-stream", :sample=>:"text/x-shellscript", :hwdb=>:"text/plain", :vifm=>:"text/plain", :desktop=>:"text/plain", :lua=>:"text/x-lua", :blacklist=>:"text/plain", :defs=>:"text/plain", :rb=>:"text/x-ruby", :pdf=>:"application/pdf", :yaml=>:"text/plain", :types=>:"text/plain", :am=>:"text/plain", :in=>:"text/plain", :cc=>:"text/x-c", :status=>:"text/x-shellscript", :css=>:"text/css", :eot=>:"application/vnd.ms-fontobject", :js=>:"application/javascript", :png=>:"image/png", :html=>:"text/html", :torrent=>:"application/x-bittorrent", :xz=>:"application/x-xz", :info=>:"text/csv", :jpg=>:"image/jpeg", :iso=>:"application/x-iso9660-image", :zip=>:"application/zip", :asc=>:"application/pgp-signature", :gif=>:"image/gif", :rid=>:"text/csv", :md=>:"text/x-markdown", :csv=>:"text/csv", :json=>:"application/json", :rst=>:"text/plain", :po=>:"text/x-po", :cmake=>:"text/plain", :mk=>:"text/plain", :xml=>:"text/xml", :gradle=>:"text/plain", :pro=>:"text/plain", :jar=>:"application/java-archive", :properties=>:"text/plain", :icns=>:"image/x-icns", :plist=>:"text/xml", :credits=>:"text/plain", :sql=>:"application/x-sql", :xlsx=>:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", :mo=>:"application/x-gettext-translation", :motd=>:"text/plain", :ogg=>:"audio/ogg", :christmas=>:"text/plain", :easter=>:"text/plain", :halloween=>:"text/plain", :thanksgiving=>:"text/plain", :title=>:"text/plain", :ods=>:"application/vnd.oasis.opendocument.spreadsheet", :qhelp=>:"text/x-c", :ql=>:"text/plain", :props=>:"text/xml", :vcxproj=>:"text/xml", :sln=>:"text/plain", :cmd=>:"text/x-msdos-batch", :cpp=>:"text/x-c", :hpp=>:"text/x-c", :inc=>:"text/plain", :pl=>:"text/x-script.perl", :imp=>:"application/vnd.accpac.simply.imp", :jq=>:"text/plain", :bash=>:"text/plain", :prev=>:"text/x-file", :gch=>:"application/octet-stream", :sav=>:"text/plain", :gsav=>:"text/plain", :template=>:"text/plain", :cgi=>:"text/x-perl", :cbp=>:"text/xml", :local=>:"text/x-file", :dtb=>:"application/x-dtbook+xml", :dtbo=>:"application/octet-stream", :htm=>:"text/html", :ksh=>:"application/x-ksh", :def=>:"text/plain", :awk=>:"text/plain", :vim=>:"text/plain", :bashrc=>:"text/plain", :inputrc=>:"text/plain", :vimrc=>:"application/octet-stream", :gp=>:"text/plain", :patch=>:"text/x-diff", :history=>:"text/plain", :dep=>:"text/plain", :pp=>:"text/x-shellscript", :key=>:"text/plain", :swift=>:"text/plain", :kt=>:"text/plain", :webp=>:"image/webp", :kts=>:"text/plain", :xcworkspacedata=>:"text/xml", :pbxproj=>:"text/plain", :yml=>:"text/plain", :mjs=>:"application/javascript", :feature=>:"text/plain", :cuh=>:"text/x-c", :comp=>:"text/x-c", :gbnf=>:"text/plain", :jpeg=>:"image/jpeg", :gguf=>:"application/octet-stream", :inp=>:"application/octet-stream", :out=>:"text/plain", :last=>:"text/plain", :lock=>:"text/plain", :nix=>:"application/x-mix-transfer", :go=>:"text/plain", :proto=>:"text/plain", :sum=>:"text/plain", :bru=>:"text/plain", :tmpl=>:"text/plain", :ipynb=>:"application/json", :dockerfile=>:"text/plain", :build=>:"text/plain", :aio=>:"text/plain", :texi=>:"application/x-texinfo", :postinst=>:"text/x-shellscript", :prerm=>:"text/plain", :micro=>:"text/plain", :tcss=>:"text/plain", :iss=>:"application/x-wine-extension-ini", :nsi=>:"text/plain", :reg=>:"text/plain", :cs=>:"text/plain", :csproj=>:"text/plain", :axaml=>:"text/plain", :resx=>:"text/xml", :manifest=>:"text/cache-manifest", :xaml=>:"application/xaml+xml", :qrc=>:"text/plain", :ui=>:"text/xml", :logrotate=>:"text/plain", :manpages=>:"text/plain", :debhelper=>:"text/plain", :preinst=>:"text/plain", :upstart=>:"text/plain", :ebuild=>:"application/vnd.gentoo.ebuild", :spec=>:"text/plain", :tgl=>:"text/plain", :es=>:"application/x-esrehber", :marks=>:"text/plain", :me=>:"text/troff", :hlp=>:"application/hlp", :aux=>:"application/octet-stream", :prf=>:"application/pics-rules", :fon=>:"application/x-ms-ne-executable", :fnt=>:"application/octet-stream", :bdf=>:"application/x-font-bdf", :make=>:"text/plain", :bmp=>:"image/bmp", :pem=>:"text/plain", :typed=>:"text/plain", :br=>:"application/octet-stream", :poet=>:"text/plain", :regexgenerator=>:"text/plain", :rubycoder=>:"text/x-ruby", :rubytestunitcoder=>:"text/x-ruby", :biblicaltranslator=>:"text/plain", :astrologer=>:"text/plain", :default=>:"text/plain", :optparse=>:"text/x-ruby", :new=>:"text/plain", :gem=>:"application/x-tar", :gemspec=>:"text/plain", :hs=>:"text/plain", :erb=>:"text/plain", :sqlite=>:"application/vnd.sqlite3", :complete=>:"text/plain", :socks=>:"text/html", :libwww=>:"text/html", :agent=>:"text/plain", :nodb=>:"text/x-ruby", :wt=>:"text/plain", :nse=>:"text/html", :mkv=>:"video/x-matroska", :names=>:"text/plain", :kali=>:"text/plain", :tar=>:"application/x-tar", :pkg=>:"application/octet-stream", :ri=>:"application/octet-stream", :ldc=>:"application/octet-stream", :tplg=>:"application/octet-stream", :ddc=>:"application/octet-stream", :sfi=>:"application/octet-stream", :bseq=>:"application/octet-stream", :img=>:"application/octet-stream", :fw=>:"application/octet-stream", :hex=>:"text/plain", :ucode=>:"application/octet-stream", :pnvm=>:"application/octet-stream", :dlmem=>:"application/octet-stream", :brd=>:"application/octet-stream", :ko=>:"application/x-object", :alias=>:"text/plain", :builtin=>:"text/plain", :modinfo=>:"text/xml", :devname=>:"text/plain", :order=>:"text/plain", :softdep=>:"text/plain", :symbols=>:"text/plain", :rules=>:"text/plain", :lsmod=>:"text/plain", :node=>:"application/vnd.microsoft.portable-executable", :bplist=>:"application/x-bplist", :gypi=>:"text/plain", :gyp=>:"text/plain", :cjs=>:"application/javascript", :coffee=>:"text/plain", :bnf=>:"text/plain", :mit=>:"text/plain", :opts=>:"text/plain", :jsx=>:"application/javascript", :wasm=>:"application/wasm", :scss=>:"text/plain", :epr=>:"text/xml", :pak=>:"application/octet-stream", :onnx=>:"application/octet-stream", :dict=>:"text/plain", :psd=>:"image/vnd.adobe.photoshop", :mogrt=>:"application/zip", :eve=>:"text/plain", :kys=>:"text/xml", :prfpset=>:"text/xml", :irtp=>:"text/plain", :itx=>:"application/octet-stream", :cube=>:"text/plain", :look=>:"text/xml", :ilut=>:"text/plain", :lut=>:"text/plain", :mlem=>:"application/octet-stream", :olp=>:"text/xml", :ocio=>:"text/plain", :cso=>:"application/octet-stream", :bo=>:"application/json", :sig=>:"application/pgp-signature", :clz=>:"application/zip", :spv=>:"application/octet-stream", :ptx=>:"text/plain", :aex=>:"application/vnd.microsoft.portable-executable", :grain=>:"text/plain", :qml=>:"text/plain", :qmltypes=>:"text/plain", :metainfo=>:"text/plain", :prm=>:"application/vnd.microsoft.portable-executable", :prmp=>:"application/vnd.microsoft.portable-executable", :irf=>:"application/octet-stream", :acsrf=>:"application/vnd.microsoft.portable-executable", :prsl=>:"text/xml", :prtl=>:"text/xml", :tga=>:"image/x-tga", :tpl=>:"application/vnd.groove-tool-template", :sqpreset=>:"text/xml", :prproj=>:"application/gzip", :svg=>:"image/svg+xml", :mtl=>:"text/plain", :xst=>:"text/plain", :ksvlayout=>:"text/xml", :strings=>:"text/xml", :mmm=>:"application/octet-stream", :afm=>:"application/x-font-type1", :pfb=>:"application/x-font-type1", :pat=>:"text/plain", :ddj=>:"application/json", :cnv=>:"application/octet-stream", :txt=>:"text/plain", :db=>:"application/octet-stream", :xs=>:"text/x-c", :aom=>:"text/plain", :bik=>:"application/octet-stream", :lgt=>:"text/plain", :pfx=>:"application/x-pkcs12", :crx=>:"application/x-chrome-extension", :cpx=>:"text/x-ms-cpx", :cpn=>:"text/xml", :scx=>:"application/octet-stream", :ddt=>:"application/octet-stream", :docx=>:"application/vnd.openxmlformats-officedocument.wordprocessingml.document", :msk=>:"application/octet-stream", :xmb=>:"application/octet-stream", :dcl=>:"text/plain", :brg=>:"image/x-os2-graphics", :svx=>:"application/octet-stream", :scn=>:"application/octet-stream", :cam=>:"application/octet-stream", :dso=>:"application/octet-stream", :hso=>:"application/octet-stream", :pso=>:"application/octet-stream", :vso=>:"application/octet-stream", :con=>:"text/plain", :bti=>:"text/plain", :btx=>:"application/octet-stream", :asi=>:"application/vnd.microsoft.portable-executable", :pkm=>:"application/octet-stream", :url=>:"application/x-wine-extension-ini", :rps=>:"application/octet-stream", :config=>:"text/plain", :assets=>:"application/octet-stream", :ress=>:"application/octet-stream", :resource=>:"text/plain", :browser=>:"text/plain", :aspx=>:"text/html", :lnk=>:"application/x-ms-shortcut", :hashdb=>:"application/zip", :msg=>:"text/plain", :cts=>:"application/javascript", :targ=>:"text/plain", :iobj=>:"application/x-coff", :ipdb=>:"application/octet-stream", :helpcfg=>:"text/xml", :aaxplugin=>:"application/vnd.microsoft.portable-executable", :kad=>:"text/xml", :kdb=>:"text/xml", :meta=>:"text/xml", :nkp=>:"application/octet-stream", :nkc=>:"application/octet-stream", :nkx=>:"application/octet-stream", :nki=>:"application/octet-stream", :nkm=>:"application/octet-stream", :ksd=>:"application/octet-stream", :nkg=>:"application/octet-stream", :tlb=>:"application/vnd.microsoft.portable-executable", :ax=>:"application/vnd.microsoft.portable-executable", :hlsl=>:"text/x-c", :bank=>:"application/octet-stream", :res=>:"application/x-dtbresource+xml", :aff=>:"text/plain", :dic=>:"text/x-c", :chk=>:"application/octet-stream", :rne=>:"application/vnd.microsoft.portable-executable", :vdf=>:"text/plain", :bnk=>:"application/octet-stream", :wem=>:"audio/x-wav", :srt=>:"application/x-subrip", :bundle=>:"application/x-mach-binary", :qm=>:"application/octet-stream", :srf=>:"application/octet-stream", :metrics=>:"application/octet-stream", :pxml=>:"text/xml", :cpr=>:"application/octet-stream", :vstsound=>:"application/octet-stream", :sofa=>:"application/x-hdf5", :uidesc=>:"application/octet-stream", :syx=>:"application/octet-stream", :sfx=>:"application/vnd.microsoft.portable-executable", :ion=>:"text/plain", :msix=>:"application/zip", :pri=>:"application/octet-stream", :chm=>:"application/vnd.ms-htmlhelp", :cat=>:"application/vnd.ms-pki.seccat", :winmd=>:"application/vnd.microsoft.portable-executable", :mfl=>:"text/x-c", :mof=>:"text/x-c", :nuspec=>:"text/xml", :xsd=>:"text/xml", :swidtag=>:"text/xml", :rfs=>:"text/plain", :zdct=>:"text/plain", :pimx=>:"text/xml", :artdef=>:"text/xml", :ani=>:"application/x-navi-animation", :bs=>:"application/octet-stream", :blp=>:"application/octet-stream", :ltp=>:"text/xml", :propdesc=>:"text/xml", :cab=>:"application/vnd.ms-cab-compressed", :lcf=>:"application/octet-stream", :pcpkey=>:"application/octet-stream", :etl=>:"application/etl", :grl=>:"application/octet-stream", :jrs=>:"application/octet-stream", :jfm=>:"application/octet-stream", :pckgdep=>:"application/octet-stream", :srd=>:"application/vnd.sqlite3", :idx=>:"application/octet-stream", :wer=>:"text/plain", :cov=>:"text/troff", :tif=>:"image/tiff", :cpa=>:"application/x-dosexec", :vp=>:"application/octet-stream", :rom=>:"application/x-ibm-rom", :aepp=>:"text/xml", :blf=>:"image/x-tga", :icc=>:"application/vnd.iccprofile", :val=>:"application/octet-stream", :qmlc=>:"application/octet-stream", :little=>:"application/zip", :edb=>:"application/x-ms-ese", :sessionid=>:"text/plain", :aep=>:"application/vnd.audiograph", :if=>:"application/vnd.microsoft.portable-executable", :tmp=>:"text/plain", :cmpsav=>:"application/octet-stream", :lvp=>:"audio/vnd.lucent.voice", :rws=>:"text/xml", :mcdb=>:"text/xml", :pek=>:"application/octet-stream", :dcrt=>:"application/octet-stream", :ldb=>:"application/octet-stream", :mpcpl=>:"text/plain", :uid=>:"text/plain", :cfa=>:"application/octet-stream", :aegraphic=>:"application/zip", :essentialsound=>:"application/json", :guides=>:"application/json", :igpi=>:"application/octet-stream", :jwt=>:"text/plain", :sdi=>:"application/x-ms-sdi", :com=>:"text/plain", :cur=>:"image/x-win-bitmap", :nls=>:"application/octet-stream", :hxx=>:"text/x-c", :pnf=>:"application/x-pnf", :raw=>:"application/octet-stream", :mid=>:"audio/midi", :ascx=>:"text/html", :master=>:"text/html", :comments=>:"text/xml", :compositefont=>:"text/plain", :rsp=>:"text/plain", :targets=>:"text/plain", :overridetasks=>:"text/plain", :tasks=>:"text/plain", :uninstall=>:"text/x-c", :nlp=>:"application/octet-stream", :orp=>:"application/octet-stream", :dir=>:"application/x-director", :que=>:"application/octet-stream", :adml=>:"text/xml", :admx=>:"text/xml", :pf=>:"application/octet-stream", :mkd=>:"text/x-markdown", :ebd=>:"application/octet-stream", :ppkg=>:"application/x-ms-wim", :clb=>:"application/octet-stream", :mss=>:"application/octet-stream", :msstyles=>:"application/vnd.microsoft.portable-executable", :theme=>:"text/plain", :table=>:"application/octet-stream", :doc=>:"application/msword", :vbs=>:"text/plain", :wprp=>:"text/xml", :rld=>:"application/resource-lists-diff+xml", :tbr=>:"text/xml", :xsx=>:"text/xml", :sys=>:"application/vnd.microsoft.portable-executable", :dls=>:"application/octet-stream", :msc=>:"text/xml", :scp=>:"text/plain", :dtd=>:"application/xml-dtd", :cpl=>:"application/vnd.microsoft.portable-executable", :ocx=>:"application/vnd.microsoft.portable-executable", :iec=>:"application/vnd.microsoft.portable-executable", :tbl=>:"text/plain", :drv=>:"application/vnd.microsoft.portable-executable", :sep=>:"text/plain", :dalp=>:"text/xml", :dv=>:"video/x-dv", :cer=>:"application/pkix-cert", :tf=>:"application/x-matlab-data", :oec=>:"application/octet-stream", :amp=>:"application/octet-stream", :dsp=>:"application/octet-stream", :nrm=>:"application/octet-stream", :phm=>:"application/octet-stream", :th=>:"text/plain", :alco=>:"application/octet-stream", :ehsc=>:"application/octet-stream", :eth=>:"text/plain", :hsc=>:"application/octet-stream", :uth=>:"text/plain", :gpd=>:"text/plain", :ppd=>:"application/vnd.cups-ppd", :ntf=>:"application/vnd.nitf", :gdl=>:"model/vnd.gdl", :sam=>:"text/plain", :lex=>:"text/plain", :dgml=>:"text/xml", :camp=>:"text/xml", :gmmp=>:"text/xml", :icm=>:"application/vnd.iccprofile", :cdmp=>:"text/xml", :btr=>:"application/octet-stream", :data=>:"application/octet-stream", :evtx=>:"application/x-ms-evtx", :xbf=>:"application/octet-stream", :mun=>:"application/vnd.microsoft.portable-executable", :ecf=>:"application/x-wine-extension-ini", :hve=>:"application/octet-stream", :sdb=>:"application/x-ms-sdb", :mum=>:"text/xml", :ds=>:"text/plain", :nfo=>:"text/x-nfo", :tab=>:"text/plain", :pid=>:"text/plain", :cramfs=>:"application/x-pie-executable", :minix=>:"application/x-pie-executable", :bfs=>:"application/x-pie-executable", :scale=>:"text/plain", :unit=>:"text/plain", :snapshot=>:"text/plain", :bfd=>:"application/x-pie-executable", :mgk=>:"text/xml", :la=>:"audio/nspaudio", :ckport=>:"text/plain", :ja=>:"application/zip", :state=>:"text/plain", :typelib=>:"application/octet-stream", :plugin=>:"text/plain", :cache=>:"text/plain", :module=>:"application/x-object", :exec=>:"application/x-object", :sign=>:"application/pgp-signature", :tcc=>:"text/x-c", :modulemap=>:"text/plain", :saver=>:"application/x-pie-executable", :pm=>:"image/x-xpixmap", :pc=>:"text/plain", :bootstrap=>:"text/plain", :stdlib=>:"text/plain", :ctypes=>:"text/plain", :whl=>:"application/zip", :pickle=>:"application/octet-stream", :pyi=>:"text/x-script.python", :apache=>:"text/plain", :bsd=>:"text/plain", :pth=>:"text/plain", :version=>:"text/plain", :aa=>:"text/plain", :rhtml=>:"text/html", :rs=>:"application/rls-services+xml", :ftl=>:"text/plain", :stdout=>:"text/plain", :ld=>:"text/x-asm", :rlib=>:"application/x-archive", :rmeta=>:"application/octet-stream", :tcl=>:"application/x-tcl", :device=>:"text/plain", :convert=>:"text/plain", :guess=>:"text/x-shellscript", :sub=>:"text/vnd.dvb.subtitle", :apkbuild=>:"text/plain", :confd=>:"text/plain", :initd=>:"text/plain", :amf=>:"text/plain", :cmap=>:"text/plain", :cset=>:"text/html", :kbd=>:"text/plain", :multi=>:"text/plain", :bc=>:"application/octet-stream", :clifm=>:"text/plain", :service=>:"text/plain", :dgiff=>:"application/octet-stream", :alpine=>:"text/plain", :inv=>:"application/octet-stream", :luaapi=>:"text/plain", :ordering=>:"text/plain", :ffpreset=>:"text/plain", :trigger=>:"text/x-shellscript", :abaqus=>:"text/plain", :abc=>:"text/vnd.abc", :actionscript=>:"text/plain", :ada=>:"text/plain", :asciidoc=>:"text/plain", :asm=>:"text/x-asm", :autoit=>:"text/plain", :batch=>:"text/plain", :bibtex=>:"text/plain", :caml=>:"text/plain", :cobol=>:"text/plain", :coffeescript=>:"text/plain", :common=>:"text/plain", :docbook=>:"text/xml", :erlang=>:"text/plain", :forth=>:"text/plain", :fortran=>:"text/plain", :freebasic=>:"text/plain", :gdscript=>:"text/plain", :glsl=>:"text/x-c", :haskell=>:"text/plain", :haxe=>:"text/plain", :javascript=>:"text/plain", :julia=>:"text/plain", :lisp=>:"text/x-lisp", :makefile=>:"text/x-makefile", :matlab=>:"text/plain", :nsis=>:"text/plain", :objectivec=>:"text/plain", :pascal=>:"text/plain", :perl=>:"text/x-perl", :php=>:"text/x-php", :powershell=>:"text/plain", :python=>:"text/plain", :restructuredtext=>:"text/plain", :ruby=>:"text/plain", :rust=>:"text/plain", :smalltalk=>:"text/plain", :vala=>:"text/x-c", :verilog=>:"text/plain", :vhdl=>:"text/plain", :zephir=>:"text/plain", :tags=>:"text/plain", :cxx=>:"text/x-c", :erl=>:"text/plain", :pas=>:"text/x-pascal", :glade=>:"text/xml", :gir=>:"text/xml", :lang=>:"text/xml", :its=>:"text/xml", :loc=>:"text/xml", :sed=>:"text/plain", :header=>:"text/plain", :sin=>:"text/plain", :rpath=>:"text/x-shellscript", :compiled=>:"application/octet-stream", :supp=>:"text/plain", :gpg=>:"application/octet-stream", :enc=>:"application/octet-stream", :pfa=>:"application/x-font-type1", :ps=>:"application/postscript", :pic=>:"image/x-pict", :mt=>:"text/troff", :tmac=>:"text/troff", :den=>:"text/plain", :det=>:"text/plain", :en=>:"text/plain", :fr=>:"text/plain", :it=>:"audio/it", :sv=>:"text/plain", :gep=>:"text/plain", :prs=>:"text/plain", :ids=>:"text/plain", :test=>:"text/plain", :quirks=>:"text/plain", :hint=>:"text/plain", :syntax=>:"text/plain", :charsets=>:"text/plain", :lib=>:"text/plain", :mgc=>:"application/x-file", :nanorc=>:"text/plain", :org=>:"application/vnd.lotus-organizer", :asd=>:"text/plain", :dd=>:"text/plain", :skip=>:"text/plain", :policy=>:"text/xml", :categories=>:"text/plain", :renamecategories=>:"text/plain", :sl=>:"application/x-seelogo", :frag=>:"text/x-c", :vert=>:"text/plain", :sysk=>:"application/x-terminfo", :app=>:"application/x-terminfo2", :eterm=>:"application/x-terminfo", :gnome=>:"application/x-terminfo", :konsole=>:"application/x-terminfo", :linux=>:"text/x-makefile", :mrxvt=>:"application/x-terminfo", :rxvt=>:"application/x-terminfo", :mlterm=>:"application/x-terminfo", :putty=>:"application/x-terminfo", :teraterm=>:"application/x-terminfo", :vte=>:"application/x-terminfo", :thumbnailer=>:"text/plain", :rule=>:"text/plain", :script=>:"text/x-asm", :portal=>:"text/plain", :ent=>:"text/plain", :xslt=>:"application/xslt+xml", :xbn=>:"text/x-asm", :xc=>:"text/x-asm", :xce=>:"text/x-asm", :xd=>:"text/x-asm", :xdc=>:"text/x-asm", :xdce=>:"text/x-asm", :xde=>:"text/x-asm", :xdwe=>:"text/x-asm", :xe=>:"text/x-asm", :xn=>:"text/x-asm", :xr=>:"text/x-asm", :xsc=>:"text/x-asm", :xsce=>:"text/x-asm", :xse=>:"text/x-asm", :xsw=>:"text/x-asm", :xswe=>:"text/x-asm", :xu=>:"text/x-asm", :xw=>:"text/x-asm", :xwe=>:"text/x-asm", :xa=>:"text/x-asm", :tag=>:"text/plain", :xb=>:"application/octet-stream", :three=>:"text/plain", :zed=>:"text/plain", :xapk=>:"application/zip", :"/mnt/disc/backup/dl/archive/battery desulfator circuit"=>:"A perfect solution for battery failure.html", :ping=>:"text/x-file", :klogd=>:"text/x-file", :syslogd=>:"text/x-file", :dhcpcd=>:"text/plain", :nginx=>:"text/plain", :pulseaudio=>:"text/plain", :uuidd=>:"text/plain", :anvil=>:"text/x-file", :auth=>:"text/x-file", :deliver=>:"text/x-file", :lmtp=>:"text/x-file", :managesieve=>:"text/x-file", :stats=>:"text/x-file", :dnsmasq=>:"text/x-file", :dovecot=>:"text/x-file", :identd=>:"text/x-file", :mdnsd=>:"text/x-file", :nmbd=>:"text/plain", :nscd=>:"text/x-file", :ntpd=>:"text/x-file", :smbd=>:"text/plain", :traceroute=>:"text/x-file", :winbindd=>:"text/plain", :xterm=>:"text/plain", :profile=>:"text/plain", :users=>:"text/plain", :net=>:"text/plain", :ext=>:"application/vnd.novadigm.ext", :lss=>:"text/plain", :old=>:"text/plain", :shutdown=>:"text/plain", :ics=>:"text/calendar", :eml=>:"message/rfc822", :rsync=>:"text/plain", :flatpakref=>:"application/vnd.flatpak.ref", :zst=>:"application/zstd", :jpe=>:"image/jpeg", :fb=>:"application/octet-stream", :sty=>:"text/x-tex", :xib=>:"text/xml", :nib=>:"text/xml", :smdh=>:"application/octet-stream", :filters=>:"text/xml", :user=>:"text/xml", :blocksds=>:"text/x-makefile", :ibm=>:"text/x-makefile", :nds=>:"text/x-file", :nmake=>:"text/x-makefile", :osx=>:"text/x-makefile", :src=>:"application/x-wais-source", :win=>:"text/x-makefile", :fs=>:"text/x-c", :vs=>:"text/x-c", :xcf=>:"image/x-xcf", :debian=>:"text/plain", :dtg=>:"text/plain", :experimental=>:"text/plain", :pod=>:"text/plain", :ms=>:"text/troff", :index=>:"text/plain", :asec=>:"application/x-dosexec", :dz=>:"application/gzip", :ifo=>:"text/plain", :syn=>:"application/octet-stream", :slob=>:"application/octet-stream", :aar=>:"application/octet-stream", :lev=>:"application/octet-stream", :des=>:"text/plain", :ad=>:"text/plain", :base=>:"text/plain", :xbm=>:"image/xbm", :fal=>:"text/plain", :tru=>:"text/plain", :mn=>:"text/plain", :nh=>:"text/plain", :ami=>:"application/vnd.amiga.ami", :agc=>:"text/x-makefile", :uu=>:"text/x-uuencode", :tos=>:"text/plain", :uue=>:"text/x-uuencode", :mnu=>:"text/plain", :mw=>:"text/plain", :dos=>:"text/plain", :gcc=>:"text/plain", :cross=>:"text/plain", :xcsettings=>:"text/xml", :xcscheme=>:"text/xml", :unx=>:"text/plain", :top=>:"text/x-makefile", :utl=>:"text/x-makefile", :xcode=>:"text/plain", :xcconfig=>:"text/plain", :shr=>:"text/plain", :vms=>:"text/plain", :ce=>:"text/plain", :mak=>:"text/plain", :nt=>:"text/plain", :qt=>:"video/quicktime", :control=>:"text/plain", :applescript=>:"text/plain", :appxmanifest=>:"text/xml", :wapproj=>:"text/xml", :proj=>:"text/plain", :minimal=>:"text/plain", :plt=>:"text/plain", :shrc=>:"text/plain", :pcm=>:"application/octet-stream", :aei=>:"application/octet-stream", :indicate=>:"application/octet-stream", :vfs=>:"application/octet-stream", :checksum=>:"text/plain", :weakdep=>:"text/plain", :inactive=>:"text/plain", :aliases=>:"text/plain", :fix=>:"text/x-shellscript", :single=>:"text/x-shellscript", :sbin=>:"application/octet-stream", :pst=>:"text/plain", :dfu=>:"application/octet-stream", :mbn=>:"application/x-executable", :flist=>:"text/plain", :mdt=>:"application/x-executable", :hcd=>:"application/octet-stream", :cis=>:"application/octet-stream", :cld=>:"application/octet-stream", :itb=>:"application/octet-stream", :nffw=>:"application/x-object", :cyacd=>:"text/plain", :tlv=>:"application/octet-stream", :jsn=>:"application/json", :csp=>:"application/vnd.commonspace", :bts=>:"application/octet-stream", :ncf=>:"application/zip", :sbcf=>:"application/octet-stream", :static=>:"application/x-executable", :fat=>:"application/x-pie-executable", :gold=>:"application/x-pie-executable", :td=>:"text/plain", :image=>:"application/x-executable", :pyw=>:"text/x-script.python", :lds=>:"text/x-asm", :ispc=>:"text/plain", :vsmacros=>:"application/x-ole-storage", :rnc=>:"application/relax-ng-compact-syntax", :introspection=>:"text/plain", :rmap=>:"text/plain", :us=>:"text/plain", :trans=>:"text/plain", :latin=>:"text/plain", :uni=>:"text/uri-list", :spl=>:"application/x-futuresplash", :sug=>:"text/plain", :zi=>:"text/plain", :dot=>:"application/msword", :modes=>:"text/plain", :exceptions=>:"text/plain", :qlcnic=>:"text/plain", :qlge=>:"text/plain", :changelog=>:"text/plain", :arcmsr=>:"text/plain", :ips=>:"text/plain", :lpfc=>:"text/plain", :megaraid=>:"text/plain", :flashpoint=>:"text/plain", :debug=>:"text/plain", :dtsi=>:"text/x-c", :boot=>:"text/plain", :inl=>:"text/x-c", :platforms=>:"text/plain", :scr=>:"text/plain", :cpu=>:"text/plain", :gate=>:"text/x-makefile", :sa=>:"text/csv", :bus=>:"text/plain", :devices=>:"text/plain", :machine=>:"text/plain", :platform=>:"text/plain", :normal=>:"text/x-asm", :postlink=>:"text/plain", :cputype=>:"text/plain", :socs=>:"text/plain", :chkbss=>:"text/plain", :um=>:"text/plain", :iosched=>:"text/plain", :copyright=>:"text/plain", :arm=>:"text/plain", :powerpc=>:"text/plain", :mips=>:"text/plain", :fuc=>:"text/x-c", :dino=>:"text/plain", :seq=>:"text/x-c", :loopback=>:"text/plain", :vringh=>:"text/plain", :ppm=>:"image/x-portable-pixmap", :pbm=>:"image/x-portable-bitmap", :locking=>:"text/plain", :binfmt=>:"text/plain", :freezer=>:"text/plain", :hz=>:"text/plain", :locks=>:"text/plain", :preempt=>:"text/plain", :uc=>:"text/x-c", :kasan=>:"text/x-makefile", :kgdb=>:"text/plain", :ubsan=>:"text/plain", :readme=>:"text/plain", :cocci=>:"text/plain", :libfdt=>:"text/plain", :dtc=>:"text/plain", :warning=>:"text/plain", :include=>:"text/plain", :clean=>:"text/plain", :dtbinst=>:"text/plain", :extrawarn=>:"text/plain", :headersinst=>:"text/plain", :host=>:"text/plain", :kcov=>:"text/plain", :modbuiltin=>:"text/plain", :modfinal=>:"text/plain", :modinst=>:"text/plain", :modpost=>:"text/plain", :modsign=>:"text/plain", :package=>:"text/plain", :checkpatch=>:"text/plain", :hardening=>:"text/plain", :helpers=>:"text/plain", :litmus=>:"text/plain", :bell=>:"text/plain", :perf=>:"text/x-makefile", :arch=>:"text/plain", :tc=>:"text/x-shellscript", :fail=>:"text/plain", :backup=>:"text/x-makefile", :rdoc=>:"text/plain", :rake=>:"text/plain", :tt=>:"text/plain", :blurb=>:"text/plain", :tiff=>:"image/tiff", :api=>:"text/plain", :page=>:"text/plain", :sitemap=>:"text/plain", :chef=>:"text/plain", :ca=>:"text/plain", :exp=>:"text/plain", :specs=>:"text/plain", :gresource=>:"application/octet-stream", :iml=>:"text/xml", :dumped=>:"text/plain", :rbs=>:"text/x-ruby", :csr=>:"text/plain", :ru=>:"text/x-ruby", :dex=>:"application/octet-stream", :arsc=>:"application/octet-stream", :dylib=>:"application/x-mach-binary", :column=>:"text/plain", :rex=>:"audio/x-aiff", :pcap=>:"application/vnd.tcpdump.pcap", :cap=>:"application/vnd.tcpdump.pcap", :pcapng=>:"application/octet-stream", :rbi=>:"text/x-ruby", :vcproj=>:"text/xml", :cvs=>:"text/x-makefile", :god=>:"text/x-ruby", :ry=>:"text/x-ruby", :basea=>:"application/octet-stream", :baseb=>:"application/octet-stream", :libzip=>:"text/plain", :ronn=>:"text/plain", :bundler=>:"text/x-ruby", :standalone=>:"text/x-makefile", :rz=>:"application/octet-stream", :sbl=>:"text/plain", :lt=>:"text/x-c", :examples=>:"text/plain", :install=>:"application/x-install-instructions", :bookmarks=>:"text/plain", :dsw=>:"text/plain", :aps=>:"application/mime", :adoc=>:"text/plain", :mini=>:"text/plain", :wreck=>:"text/plain", :xkcd=>:"text/plain", :ipch=>:"application/octet-stream", :darwin=>:"text/plain", :abiword=>:"text/plain", :client=>:"application/octet-stream", :gperf=>:"text/x-c", :hash=>:"application/octet-stream", :awt=>:"text/xml", :keys=>:"text/plain", :openrc=>:"text/plain", :wixproj=>:"text/xml", :wxs=>:"text/xml", :ubuntu=>:"text/plain", :qch=>:"application/vnd.sqlite3", :ocd=>:"application/octet-stream", :dcf=>:"text/plain", :qhp=>:"text/xml", :qdoc=>:"text/plain", :qsl=>:"text/plain", :accept=>:"text/plain", :deny=>:"text/plain", :vlan=>:"text/plain", :mf=>:"text/plain", :rsa=>:"application/octet-stream", :sf=>:"text/plain", :rulesets=>:"application/json", :glm=>:"text/plain", :orig=>:"text/plain", :fulllp=>:"text/plain", :limitedlp=>:"text/plain", :vietnamese=>:"text/x-shellscript", :flp=>:"text/plain", :graphemic=>:"text/plain", :segment=>:"text/plain", :pyx=>:"text/x-script.python", :arpabo=>:"text/plain", :bst=>:"text/plain", :cls=>:"text/x-tex", :bib=>:"text/plain", :eps=>:"application/postscript", :pptx=>:"application/vnd.openxmlformats-officedocument.presentationml.presentation", :dox=>:"text/x-tex", :ascii=>:"text/plain", :arpa=>:"text/plain", :npy=>:"application/octet-stream", :atlas=>:"text/plain", :mkl=>:"text/plain", :dev=>:"text/xml", :lo=>:"text/plain", :gmo=>:"application/x-gettext-translation", :rockspec=>:"text/plain", :doxygen=>:"text/plain", :treetop=>:"text/x-ruby", :marker=>:"text/x-ruby", :vagrant=>:"text/plain", :graphml=>:"text/xml", :midideviceprovider=>:"text/plain", :rels=>:"text/xml", :swf=>:"application/x-shockwave-flash", :vml=>:"text/plain", :daplug=>:"application/x-mach-binary", :djvu=>:"image/vnd.djvu", :dsed=>:"text/plain", :elf=>:"application/x-executable", :ser=>:"application/java-serialized-object", :xap=>:"application/x-silverlight-app", :object=>:"text/plain", :driver=>:"text/plain", :mvg=>:"image/x-mvg", :ldif=>:"text/plain", :amv=>:"video/x-amv", :mov=>:"video/quicktime", :pui=>:"application/x-ole-storage", :apx=>:"application/octet-stream", :as=>:"text/plain", :fla=>:"application/zip", :chr=>:"application/octet-stream", :hwtxt=>:"text/plain", :aftxt=>:"text/plain", :pmc=>:"application/octet-stream", :msbuild=>:"text/xml", :applet=>:"text/plain", :pbj=>:"application/octet-stream", :idl=>:"text/plain", :stg=>:"application/x-ole-storage", :vba=>:"text/plain", :native=>:"text/x-makefile", :incl=>:"text/plain", :vnc=>:"text/html", :lesser=>:"text/plain", :bcc=>:"text/x-makefile", :dj=>:"text/x-makefile", :mac=>:"text/plain", :manx=>:"text/x-makefile", :sas=>:"text/x-makefile", :st=>:"application/vnd.sailingtracker.track", :vc=>:"text/x-makefile", :wat=>:"text/plain", :ansi=>:"text/x-makefile", :mms=>:"text/x-makefile", :unix=>:"text/plain", :opt=>:"text/plain", :riscos=>:"text/plain", :msftest=>:"text/plain", :memdump=>:"text/plain", :mwtest=>:"text/plain", :tmlanguage=>:"text/xml", :scm=>:"video/x-scm", :pegphp=>:"text/plain", :reqdata=>:"application/x-ndjson", :ascend=>:"text/plain", :compat=>:"text/plain", :merit=>:"text/plain", :microsoft=>:"text/x-file", :pam=>:"text/plain", :add=>:"text/plain", :mppe=>:"text/plain", :cbcp=>:"text/plain", :pppoe=>:"text/plain", :pwfd=>:"text/x-c", :lsm=>:"text/plain", :recoll=>:"text/plain", :protocol=>:"text/plain", :global=>:"text/plain", :end=>:"text/plain", :min=>:"text/x-m4", :qss=>:"text/plain", :do=>:"text/plain", :ver=>:"text/plain", :od=>:"text/plain", :diffbase=>:"text/plain", :layers=>:"text/plain", :options=>:"text/plain", :deps=>:"text/x-makefile", :pre=>:"application/vnd.lotus-freelance", :internal=>:"text/plain", :oft=>:"application/octet-stream", :webmanifest=>:"application/json", :geoip=>:"text/plain", :tor=>:"text/plain", :defaults=>:"text/plain", :trunnel=>:"text/x-c", :acf=>:"text/plain", :jsm=>:"application/javascript", :sjs=>:"text/plain", :pif=>:"text/plain", :ogv=>:"video/ogg", :webm=>:"video/webm", :mozbuild=>:"text/plain", :vtt=>:"text/vtt", :handlebars=>:"text/plain", :appcache=>:"text/cache-manifest", :mem=>:"application/octet-stream", :nsh=>:"text/plain", :configure=>:"text/x-script.python", :dsstore=>:"application/octet-stream", :keyspec=>:"text/plain", :certspec=>:"text/plain", :asan=>:"text/plain", :stdcxx=>:"text/plain", :tsan=>:"text/plain", :sup=>:"text/plain", :artifact=>:"text/plain", :automation=>:"text/plain", :override=>:"text/plain", :flat=>:"text/plain", :symlink=>:"text/plain", :snap=>:"text/plain", :vue=>:"application/javascript", :mozilla=>:"text/plain", :styl=>:"text/plain", :jsi=>:"text/plain", :eventsource=>:"text/plain", :tst=>:"text/plain", :webidl=>:"text/plain", :whitelist=>:"text/plain", :hdr=>:"application/x-installshield", :ivf=>:"video/x-ivf", :mpd=>:"text/xml", :duh=>:"text/plain", :opus=>:"audio/ogg", :flac=>:"audio/flac", :webvtt=>:"text/vtt", :apng=>:"image/png", :text=>:"application/plain", :hunspell=>:"text/plain", :myspell=>:"text/plain", :wrong=>:"text/plain", :good=>:"text/plain", :morph=>:"text/plain", :fx=>:"text/x-c", :analysis=>:"text/x-c", :features=>:"text/plain", :hide=>:"text/x-makefile", :sources=>:"text/plain", :mapfile=>:"text/plain", :doap=>:"text/plain", :hlslh=>:"text/plain", :fp=>:"text/x-c", :chromium=>:"text/plain", :gni=>:"text/plain", :webrender=>:"text/plain", :ron=>:"text/plain", :wgsl=>:"text/x-c", :meson=>:"text/plain", :anim=>:"text/plain", :avif=>:"image/avif", :icon=>:"application/octet-stream", :jxl=>:"image/jxl", :mjpg=>:"video/x-motion-jpeg", :icu=>:"application/octet-stream", :ucm=>:"text/plain", :hyf=>:"application/octet-stream", :rpc=>:"text/x-c", :ipdl=>:"text/plain", :ipdlh=>:"text/x-c", :gnu=>:"text/plain", :ttx=>:"text/xml", :listbackup=>:"text/plain", :xbl=>:"text/plain", :bf=>:"text/plain", :simd=>:"text/x-c", :ijg=>:"text/plain", :libvpx=>:"text/plain", :settings=>:"text/plain", :mux=>:"text/plain", :bp=>:"text/plain", :gn=>:"text/plain", :aidl=>:"text/x-java", :jinja=>:"text/xml", :sic=>:"application/vnd.wap.sic", :prj=>:"text/plain", :mmp=>:"text/plain", :any=>:"text/plain", :cin=>:"text/x-c", :hin=>:"text/x-c", :git=>:"text/plain", :zlib=>:"application/zlib", :mar=>:"application/octet-stream", :der=>:"application/x-x509-ca-cert", :moz=>:"text/plain", :sctp=>:"text/plain", :unknown=>:"text/plain", :et=>:"text/plain", :dpr=>:"text/plain", :ym=>:"text/plain", :tbs=>:"text/plain", :auto=>:"text/plain", :crlite=>:"application/octet-stream", :mdb=>:"application/x-msaccess", :filter=>:"application/octet-stream", :signature=>:"text/plain", :stash=>:"application/octet-stream", :errors=>:"text/csv", :cry=>:"text/plain", :saw=>:"text/x-java", :ber=>:"application/octet-stream", :bazel=>:"text/plain", :il=>:"text/plain", :nss=>:"text/plain", :fax=>:"text/plain", :req=>:"text/plain", :cert=>:"application/octet-stream", :crl=>:"application/pkcs-crl", :tbx=>:"text/plain", :mako=>:"text/html", :dirs=>:"text/plain", :locale=>:"text/plain", :pubkey=>:"text/plain", :pump=>:"text/x-c", :mp=>:"text/plain", :develop=>:"text/plain", :headers=>:"text/plain", :widl=>:"text/plain", :widlprocxml=>:"text/xml", :jsonld=>:"application/json", :asis=>:"text/plain", :fea=>:"text/plain", :license=>:"text/plain", :foo=>:"text/plain", :ejs=>:"text/html", :oga=>:"audio/ogg", :jsonp=>:"text/plain", :sxg=>:"application/vnd.sun.xml.writer.global", :cbor=>:"text/plain", :ignore=>:"text/plain", :visualizer=>:"text/plain", :egg=>:"application/zip", :graffle=>:"application/gzip", :wbn=>:"application/octet-stream", :har=>:"application/json", :annexb=>:"application/octet-stream", :adts=>:"audio/x-hx-aac-adts", :libaom=>:"text/plain", :syms=>:"text/plain", :webrtc=>:"text/plain", :croc=>:"text/plain", :pydeps=>:"text/plain", :flags=>:"text/plain", :saves=>:"text/plain", :rtcp=>:"application/octet-stream", :sdp=>:"application/sdp", :stun=>:"application/octet-stream", :tokens=>:"text/plain", :pxd=>:"text/plain", :pip=>:"text/plain", :golden=>:"text/plain", :sb=>:"text/plain", :storyboard=>:"text/xml", :pch=>:"text/x-c", :vsprops=>:"text/xml", :bar=>:"text/plain", :assem=>:"text/x-asm", :printvars=>:"text/plain", :blah=>:"text/plain", :pbfilespec=>:"text/plain", :xclangspec=>:"text/plain", :fontified=>:"text/plain", :bas=>:"text/plain", :xsh=>:"text/plain", :stderr=>:"text/plain", :peepmatic=>:"text/plain", :serialized=>:"application/octet-stream", :cbproj=>:"text/xml", :groupproj=>:"text/plain", :ci=>:"text/plain", :metal=>:"text/x-c", :metallib=>:"application/octet-stream", :ll=>:"text/plain", :yy=>:"text/x-c", :esgrammar=>:"text/plain", :pgen=>:"text/plain", :wasmtime=>:"text/plain", :hyph=>:"text/plain", :word=>:"application/msword", :spvasm=>:"text/plain", :cookedshaderpackage=>:"application/octet-stream", :blb=>:"application/x-blorb", :cl=>:"text/plain", :err=>:"text/plain", :hbs=>:"text/plain", :elm=>:"text/plain", :pck=>:"application/octet-stream", :zzz=>:"text/plain", :extra=>:"application/json", :chain=>:"text/plain", :bcmap=>:"application/octet-stream", :chunk=>:"application/octet-stream", :sym=>:"text/plain", :breakpad=>:"text/plain", :stabs=>:"text/plain", :yes=>:"text/plain", :android=>:"text/plain", :natvis=>:"text/xml", :geojson=>:"application/json", :nlf=>:"text/plain", :ex=>:"text/plain", :violet=>:"text/xml", :dia=>:"application/gzip", :wpr=>:"text/plain", :eng=>:"text/plain", :cookie=>:"text/plain", :cygwin=>:"text/plain", :func=>:"text/plain", :mouse=>:"text/plain", :passwd=>:"text/plain", :lynx=>:"text/plain", :submenu=>:"text/plain", :ssl=>:"text/plain", :mailcap=>:"text/plain", :migemo=>:"text/plain", :wd=>:"text/plain", :ninja=>:"text/plain", :opcodes=>:"text/plain", :xcfilelist=>:"text/plain", :symlst=>:"text/plain", :pyl=>:"text/plain", :star=>:"text/x-script.python", :angle=>:"text/plain", :pgcfg=>:"text/plain", :webkit=>:"text/plain", :asn=>:"text/plain", :entitlements=>:"text/xml", :tbd=>:"text/plain", :usdz=>:"application/zip", :blob=>:"text/plain", :localstorage=>:"application/vnd.sqlite3", :salt=>:"application/octet-stream", :origin=>:"application/octet-stream", :pages=>:"application/zip", :wvdial=>:"text/x-shellscript", :docs=>:"text/plain", :links=>:"text/plain", :postrm=>:"text/x-shellscript", :templates=>:"text/plain", :provider=>:"text/plain", :libs=>:"text/plain", :dsl=>:"text/plain", :wvsgml=>:"text/plain", :subst=>:"text/troff", :tests=>:"text/plain", :real=>:"text/x-shellscript", :news=>:"text/plain", :sums=>:"text/plain", :zyp=>:"application/zip", :lz=>:"application/x-lzip", :partial=>:"application/x-xz", :fate=>:"text/plain", :fits=>:"text/plain", :dpx=>:"text/plain", :xwd=>:"image/x-xwd", :exr=>:"text/plain", :voc=>:"audio/voc", :flv=>:"video/x-flv", :ffconcat=>:"text/plain", :ffmeta=>:"text/plain", :almost=>:"text/x-shellscript", :pd=>:"text/x-c", :intl=>:"text/plain", :stamp=>:"text/plain", :xfail=>:"text/plain", :jit=>:"text/plain", :doxy=>:"text/plain", :ads=>:"text/plain", :adb=>:"text/plain", :gpr=>:"text/plain", :ptr=>:"text/plain", :rtl=>:"application/javascript", :ml=>:"text/plain", :abi=>:"text/plain", :sml=>:"text/plain", :ddoc=>:"text/plain", :toy=>:"text/plain", :exports=>:"text/plain", :dfs=>:"text/plain", :aw=>:"application/applixware", :gdb=>:"text/plain", :di=>:"text/plain", :graphite=>:"text/plain", :dataflow=>:"text/plain", :tuples=>:"text/plain", :portability=>:"text/x-makefile", :tgt=>:"text/plain", :libffi=>:"text/plain", :libgcj=>:"text/plain", :sx=>:"text/x-c", :notzip=>:"application/octet-stream", :glock=>:"text/plain", :godeps=>:"application/json", :glide=>:"text/plain", :vmanifest=>:"application/json", :tsv=>:"text/tab-separated-values", :vconf=>:"text/plain", :vyml=>:"text/plain", :vjson=>:"application/json", :input=>:"text/plain", :expect=>:"application/octet-stream", :macho=>:"application/x-mach-binary", :gox=>:"text/plain", :norm=>:"text/plain", :original=>:"text/plain", :sng=>:"text/plain", :txh=>:"text/plain", :txml=>:"text/html", :pup=>:"text/x-makefile", :pk=>:"application/octet-stream", :contrib=>:"text/plain", :bor=>:"text/x-makefile", :emx=>:"text/x-makefile", :qpg=>:"text/plain", :gcj=>:"text/plain", :cmakein=>:"text/plain", :runtime=>:"text/plain", :mli=>:"text/plain", :regex=>:"text/plain", :mir=>:"text/plain", :ast=>:"text/plain", :incomplete=>:"text/plain", :bitstream=>:"application/octet-stream", :ii=>:"text/plain", :afdo=>:"application/octet-stream", :dwo=>:"application/x-object", :debuglink=>:"application/x-executable", :prof=>:"text/plain", :coff=>:"application/x-coff", :thumb=>:"application/x-mach-binary", :proftext=>:"text/plain", :memprofraw=>:"application/octet-stream", :profraw=>:"application/octet-stream", :binprof=>:"application/octet-stream", :expected=>:"text/plain", :swiftmodule=>:"text/plain", :export=>:"text/plain", :mri=>:"text/plain", :covmapping=>:"application/octet-stream", :profdata=>:"application/octet-stream", :gcda=>:"application/octet-stream", :gcno=>:"application/octet-stream", :gcov=>:"text/plain", :dsym=>:"application/x-mach-binary", :dwp=>:"application/x-object", :manual=>:"text/plain", :att=>:"text/plain", :ifs=>:"text/plain", :dwarf=>:"application/x-mach-binary", :afdotext=>:"text/plain", :memprofexe=>:"application/x-executable", :remap=>:"text/plain", :perfscript=>:"text/plain", :perfbin=>:"application/x-executable", :aggperfscript=>:"text/plain", :xray=>:"application/octet-stream", :sancov=>:"application/octet-stream", :symcov=>:"application/json", :crlf=>:"text/plain", :tflite=>:"application/octet-stream", :pbtxt=>:"text/plain", :dtso=>:"text/plain", :assembler=>:"text/plain", :errata=>:"text/plain", :relocs=>:"application/octet-stream", :dbg=>:"application/x-sharedlib", :ro=>:"application/x-object", :genkey=>:"text/plain", :riscv=>:"text/plain", :zboot=>:"text/x-makefile", :tng=>:"text/plain", :msm=>:"text/plain", :release=>:"text/plain", :kexec=>:"text/plain", :kcsan=>:"text/plain", :kfence=>:"text/plain", :kmsan=>:"text/plain", :target=>:"text/plain", :btf=>:"text/plain", :clang=>:"text/plain", :compiler=>:"text/plain", :defconf=>:"text/plain", :randstruct=>:"text/plain", :userprogs=>:"text/plain", :vdsoinst=>:"text/plain", :vmlinux=>:"text/plain", :orderfile=>:"text/plain", :bconf=>:"text/plain", :miniconfig=>:"text/plain", :kconfig=>:"text/plain", :vm=>:"text/plain", :pkt=>:"text/plain", :rtla=>:"text/x-makefile", :cpio=>:"application/x-cpio", :kvm=>:"text/plain", :symvers=>:"text/plain", :nkr=>:"application/octet-stream", :nicnt=>:"application/octet-stream", :nka=>:"text/plain", :nksn=>:"application/octet-stream", :sfv=>:"text/x-sfv", :pima=>:"application/zip", :inx=>:"application/octet-stream", :appimage=>:"application/x-executable", :to=>:"text/plain", :lzzzzzzz=>:"image/jpeg", :divx=>:"video/x-msvideo", :ape=>:"audio/x-ape", :opf=>:"application/oebps-package+xml", :diz=>:"text/plain", :"/dev/stdin"=>:"application/octet-stream", :jbf=>:"application/octet-stream", :jsp=>:"text/html", :dbd=>:"application/octet-stream", :bos=>:"text/plain", :pcx=>:"image/x-pcx", :hrf=>:"text/plain", :vtx=>:"application/octet-stream", :mol=>:"text/plain", :ncbi=>:"text/plain", :embl=>:"text/plain", :fasta=>:"text/plain", :vbx=>:"application/x-ms-ne-executable", :pac=>:"application/octet-stream", :lid=>:"text/x-installshield-lid", :lic=>:"application/octet-stream", :kun=>:"application/octet-stream", :qck=>:"text/csv", :wri=>:"application/x-wri", :mht=>:"message/rfc822", :rit=>:"text/plain", :cog=>:"text/plain", :wic=>:"text/plain", :hum=>:"text/plain", :for=>:"text/x-fortran", :int=>:"text/plain", :sta=>:"text/plain", :mag=>:"application/vnd.ecowin.chart", :red=>:"text/plain", :lea=>:"text/plain", :par=>:"text/plain", :pea=>:"text/plain", :pur=>:"text/plain", :law=>:"text/plain", :not=>:"text/plain", :gui=>:"text/plain", :ple=>:"text/plain", :kin=>:"text/plain", :the=>:"text/plain", :dis=>:"application/vnd.mobius.dis", :hol=>:"text/plain", :bac=>:"text/plain", :cou=>:"text/plain", :gen=>:"text/plain", :phi=>:"text/plain", :wha=>:"text/plain", :au=>:"audio/basic", :webloc=>:"application/x-bplist", :mobi=>:"application/x-mobipocket-ebook", :annotation=>:"application/vnd.sqlite3", :ace=>:"application/x-ace-compressed", :shit=>:"message/news", :htmx=>:"text/html", :cnt=>:"text/plain", :hhc=>:"text/html", :toc=>:"text/plain", :all=>:"application/octet-stream", :alb=>:"application/x-adobe-aco", :arr=>:"application/octet-stream", :sfk=>:"application/octet-stream", :ovw=>:"application/octet-stream", :wif=>:"application/octet-stream", :gpk=>:"application/octet-stream", :prg=>:"application/octet-stream", :mlt=>:"application/octet-stream", :rcy=>:"audio/x-aiff", :peak=>:"application/octet-stream", :rns=>:"application/octet-stream", :allow=>:"text/plain", :seat=>:"text/plain", :dwb=>:"text/x-c", :misc=>:"text/plain", :exclude=>:"text/plain", :start=>:"text/x-shellscript", :stop=>:"text/x-shellscript", :catalyst=>:"text/x-makefile", :rootcerts=>:"text/plain", :grml=>:"text/plain", :env=>:"application/x-envoy", :duid=>:"text/plain", :logo=>:"text/plain", :head=>:"text/plain", :action=>:"text/x-shellscript", :dns=>:"text/plain", :mdns=>:"text/plain", :nbns=>:"text/plain", :prefs=>:"text/plain", :jhansonxi=>:"text/plain", :gufw=>:"text/plain", :keycodes=>:"text/plain", :lircrc=>:"text/plain", :preset=>:"text/plain", :bmoh=>:"text/plain", :rev=>:"text/plain", :pacnew=>:"text/plain", :pacold=>:"text/plain", :pacsave=>:"text/plain", :eg=>:"text/plain", :ocbf=>:"application/octet-stream", :mrk=>:"text/plain", :act=>:"application/octet-stream", :ai=>:"application/postscript", :memo=>:"application/zip", :thm=>:"image/jpeg", :tmb=>:"image/bmp", :mpo=>:"image/jpeg", :amr=>:"audio/amr", :sparql=>:"text/plain", :fcgi=>:"text/x-ruby", :sxw=>:"application/vnd.sun.xml.writer", :sxd=>:"application/vnd.sun.xml.draw", :odt=>:"application/vnd.oasis.opendocument.text", :sxc=>:"application/vnd.sun.xml.calc", :pt=>:"text/plain", :mpeg=>:"video/mpeg", :luca=>:"video/x-msvideo", :sunset=>:"video/x-msvideo", :"123"=>:"application/vnd.lotus-1-2-3", :"3dm"=>:"x-world/x-3dmf", :"3dmf"=>:"x-world/x-3dmf", :"3dml"=>:"text/vnd.in3d.3dml", :"3ds"=>:"image/x-3ds", :"3g2"=>:"video/3gpp2", :"3gp"=>:"video/3gpp", :"7z"=>:"application/x-7z-compressed", :a=>:"application/octet-stream", :aab=>:"application/x-authorware-bin", :aac=>:"audio/x-aac", :aam=>:"application/x-authorware-map", :aas=>:"application/x-authorware-seg", :acc=>:"application/vnd.americandynamics.acc", :acgi=>:"text/html", :acu=>:"application/vnd.acucobol", :acutc=>:"application/vnd.acucorp", :adp=>:"audio/adpcm", :afl=>:"video/animaflex", :afp=>:"application/vnd.ibm.modcap", :ahead=>:"application/vnd.ahead.space", :aif=>:"audio/aiff", :aifc=>:"audio/aiff", :aim=>:"application/x-aim", :aip=>:"text/x-audiosoft-intra", :air=>:"application/vnd.adobe.air-application-installer-package+zip", :ait=>:"application/vnd.dvb.ait", :aos=>:"application/x-nokia-9000-communicator-add-on-software", :application=>:"application/x-ms-application", :apr=>:"application/vnd.lotus-approach", :arc=>:"application/x-freearc", :arj=>:"application/arj", :art=>:"image/x-jg", :asf=>:"video/x-ms-asf", :aso=>:"application/vnd.accpac.simply.aso", :asx=>:"video/x-ms-asf", :atc=>:"application/vnd.acucorp", :atomcat=>:"application/atomcat+xml", :atomsvc=>:"application/atomsvc+xml", :atx=>:"application/vnd.antix.game-component", :avs=>:"video/avs-video", :azf=>:"application/vnd.airzip.filesecure.azf", :azs=>:"application/vnd.airzip.filesecure.azs", :azw=>:"application/vnd.amazon.ebook", :bcpio=>:"application/x-bcpio", :bdm=>:"application/vnd.syncml.dm+wbxml", :bed=>:"application/vnd.realvnc.bed", :bh2=>:"application/vnd.fujitsu.oasysprs", :blorb=>:"application/x-blorb", :bm=>:"image/bmp", :bmi=>:"application/vnd.bmi", :boo=>:"application/book", :book=>:"application/vnd.framemaker", :box=>:"application/vnd.previewsystems.box", :boz=>:"application/x-bzip2", :bpk=>:"application/octet-stream", :bsh=>:"application/x-bsh", :btif=>:"image/prs.btif", :buffer=>:"application/octet-stream", :bz=>:"application/x-bzip", :bz2=>:"application/x-bzip2", :c=>:"text/x-c", :"c++"=>:"text/plain", :c11amc=>:"application/vnd.cluetrust.cartomobile-config", :c11amz=>:"application/vnd.cluetrust.cartomobile-config-pkg", :c4d=>:"application/vnd.clonk.c4group", :c4f=>:"application/vnd.clonk.c4group", :c4g=>:"application/vnd.clonk.c4group", :c4p=>:"application/vnd.clonk.c4group", :c4u=>:"application/vnd.clonk.c4group", :caf=>:"audio/x-caf", :car=>:"application/vnd.curl.car", :cb7=>:"application/x-cbr", :cba=>:"application/x-cbr", :cbr=>:"application/x-cbr", :cbt=>:"application/x-cbr", :cbz=>:"application/x-cbr", :ccad=>:"application/clariscad", :cco=>:"application/x-cocoa", :cct=>:"application/x-director", :ccxml=>:"application/ccxml+xml", :cdbcmsg=>:"application/vnd.contact.cmsg", :cdf=>:"application/cdf", :cdkey=>:"application/vnd.mediastation.cdkey", :cdmia=>:"application/cdmi-capability", :cdmic=>:"application/cdmi-container", :cdmid=>:"application/cdmi-domain", :cdmio=>:"application/cdmi-object", :cdmiq=>:"application/cdmi-queue", :cdx=>:"chemical/x-cdx", :cdy=>:"application/vnd.cinderella", :cfs=>:"application/x-cfs-compressed", :cgm=>:"image/cgm", :cha=>:"application/x-chat", :chat=>:"application/x-chat", :chrt=>:"application/vnd.kde.kchart", :cif=>:"chemical/x-cif", :cii=>:"application/vnd.anser-web-certificate-issue-initiation", :cil=>:"application/vnd.ms-artgalry", :cla=>:"application/vnd.claymore", :clkk=>:"application/vnd.crick.clicker.keyboard", :clkp=>:"application/vnd.crick.clicker.palette", :clkt=>:"application/vnd.crick.clicker.template", :clkw=>:"application/vnd.crick.clicker.wordbank", :clkx=>:"application/vnd.crick.clicker", :clp=>:"application/x-msclip", :cmc=>:"application/vnd.cosmocaller", :cmdf=>:"chemical/x-cmdf", :cml=>:"chemical/x-cml", :cmp=>:"application/vnd.yellowriver-custom-menu", :cmx=>:"image/x-cmx", :cod=>:"application/vnd.rim.cod", :cpt=>:"application/x-cpt", :crd=>:"application/x-mscardfile", :cryptonote=>:"application/vnd.rig.cryptonote", :csml=>:"chemical/x-csml", :cst=>:"application/x-director", :curl=>:"text/vnd.curl", :cww=>:"application/prs.cww", :cxt=>:"application/x-director", :dae=>:"model/vnd.collada+xml", :daf=>:"application/vnd.mobius.daf", :dart=>:"application/vnd.dart", :dataless=>:"application/vnd.fdsn.seed", :davmount=>:"application/davmount+xml", :dbk=>:"application/docbook+xml", :dcr=>:"application/x-director", :dcurl=>:"text/vnd.curl.dcurl", :dd2=>:"application/vnd.oma.dd2+xml", :ddd=>:"application/vnd.fujixerox.ddd", :deepv=>:"application/x-deepv", :deploy=>:"application/octet-stream", :dfac=>:"application/vnd.dreamfactory", :dgc=>:"application/x-dgc-compressed", :dif=>:"video/x-dv", :distz=>:"application/octet-stream", :djv=>:"image/vnd.djvu", :dl=>:"video/dl", :dms=>:"application/octet-stream", :dna=>:"application/vnd.dna", :docm=>:"application/vnd.ms-word.document.macroenabled.12", :dotm=>:"application/vnd.ms-word.template.macroenabled.12", :dotx=>:"application/vnd.openxmlformats-officedocument.wordprocessingml.template", :dp=>:"application/vnd.osgi.dp", :dpg=>:"application/vnd.dpgraph", :dra=>:"audio/vnd.dra", :drw=>:"application/drafting", :dsc=>:"text/prs.lines.tag", :dssc=>:"application/dssc+der", :dtshd=>:"audio/vnd.dts.hd", :dvb=>:"video/vnd.dvb.file", :dvi=>:"application/x-dvi", :dwf=>:"model/vnd.dwf", :dwg=>:"image/x-dwg", :dxf=>:"image/vnd.dxf", :dxp=>:"application/vnd.spotfire.dxp", :dxr=>:"application/x-director", :ecelp4800=>:"audio/vnd.nuera.ecelp4800", :ecelp7470=>:"audio/vnd.nuera.ecelp7470", :ecelp9600=>:"audio/vnd.nuera.ecelp9600", :ecma=>:"application/ecmascript", :edm=>:"application/vnd.novadigm.edm", :edx=>:"application/vnd.novadigm.edx", :efif=>:"application/vnd.picsel", :ei6=>:"application/vnd.pg.osasli", :elc=>:"application/x-elc", :emma=>:"application/emma+xml", :emz=>:"application/x-msmetafile", :eol=>:"audio/vnd.digital-winds", :epub=>:"application/epub+zip", :es3=>:"application/vnd.eszigno3+xml", :esa=>:"application/vnd.osgi.subsystem", :esf=>:"application/vnd.epson.esf", :et3=>:"application/vnd.eszigno3+xml", :etx=>:"text/x-setext", :eva=>:"application/x-eva", :"event-stream"=>:"text/event-stream", :evy=>:"application/envoy", :exi=>:"application/exi", :ez=>:"application/andrew-inset", :ez2=>:"application/vnd.ezpix-album", :ez3=>:"application/vnd.ezpix-package", :f=>:"text/x-fortran", :f4v=>:"video/x-f4v", :f77=>:"text/x-fortran", :f90=>:"text/x-fortran", :fbs=>:"image/vnd.fastbidsheet", :fcdt=>:"application/vnd.adobe.formscentral.fcdt", :fcs=>:"application/vnd.isac.fcs", :fdf=>:"application/vnd.fdf", :fe_launch=>:"application/vnd.denovo.fcselayout-link", :fg5=>:"application/vnd.fujitsu.oasysgp", :fgd=>:"application/x-director", :fh=>:"image/x-freehand", :fh4=>:"image/x-freehand", :fh5=>:"image/x-freehand", :fh7=>:"image/x-freehand", :fhc=>:"image/x-freehand", :fif=>:"image/fif", :fig=>:"application/x-xfig", :fli=>:"video/fli", :flo=>:"application/vnd.micrografx.flo", :flw=>:"application/vnd.kde.kivio", :flx=>:"text/vnd.fmi.flexstor", :fly=>:"text/vnd.fly", :fm=>:"application/vnd.framemaker", :fmf=>:"video/x-atomic3d-feature", :fnc=>:"application/vnd.frogans.fnc", :frame=>:"application/vnd.framemaker", :frl=>:"application/freeloader", :fsc=>:"application/vnd.fsc.weblaunch", :fst=>:"image/vnd.fst", :ftc=>:"application/vnd.fluxtime.clip", :fti=>:"application/vnd.anser-web-funds-transfer-initiation", :funk=>:"audio/make", :fvt=>:"video/vnd.fvt", :fxp=>:"application/vnd.adobe.fxp", :fxpl=>:"application/vnd.adobe.fxp", :fzs=>:"application/vnd.fuzzysheet", :g=>:"text/plain", :g2w=>:"application/vnd.geoplan", :g3=>:"image/g3fax", :g3w=>:"application/vnd.geospace", :gac=>:"application/vnd.groove-account", :gam=>:"application/x-tads", :gbr=>:"application/rpki-ghostbusters", :gca=>:"application/x-gca-compressed", :geo=>:"application/vnd.dynageo", :gex=>:"application/vnd.geometry-explorer", :ggb=>:"application/vnd.geogebra.file", :ggt=>:"application/vnd.geogebra.tool", :ghf=>:"application/vnd.groove-help", :gim=>:"application/vnd.groove-identity-message", :gl=>:"video/gl", :gml=>:"application/gml+xml", :gmx=>:"application/vnd.gmx", :gnumeric=>:"application/x-gnumeric", :gph=>:"application/vnd.flographit", :gqf=>:"application/vnd.grafeq", :gqs=>:"application/vnd.grafeq", :gram=>:"application/srgs", :gramps=>:"application/x-gramps-xml", :gre=>:"application/vnd.geometry-explorer", :grv=>:"application/vnd.groove-injector", :grxml=>:"application/srgs+xml", :gsd=>:"audio/x-gsm", :gsf=>:"application/x-font-ghostscript", :gsm=>:"audio/x-gsm", :gsp=>:"application/x-gsp", :gss=>:"application/x-gss", :gtar=>:"application/x-gtar", :gtm=>:"application/vnd.groove-tool-message", :gtw=>:"model/vnd.gtw", :gv=>:"text/vnd.graphviz", :gxf=>:"application/gxf", :gxt=>:"application/vnd.geonext", :gzip=>:"multipart/x-gzip", :h=>:"text/x-h", :h261=>:"video/h261", :h263=>:"video/h263", :h264=>:"video/h264", :hal=>:"application/vnd.hal+xml", :hbci=>:"application/vnd.hbci", :hdf=>:"application/x-hdf", :hgl=>:"application/vnd.hp-hpgl", :hlb=>:"text/x-script", :hpg=>:"application/vnd.hp-hpgl", :hpgl=>:"application/vnd.hp-hpgl", :hpid=>:"application/vnd.hp-hpid", :hps=>:"application/vnd.hp-hps", :htke=>:"application/vnd.kenameaapp", :htmls=>:"text/html", :htt=>:"text/webviewhtml", :htx=>:"text/html", :hvd=>:"application/vnd.yamaha.hv-dic", :hvp=>:"application/vnd.yamaha.hv-voice", :hvs=>:"application/vnd.yamaha.hv-script", :i2g=>:"application/vnd.intergeo", :ice=>:"x-conference/x-cooltalk", :idc=>:"text/plain", :ief=>:"image/ief", :iefs=>:"image/ief", :ifb=>:"text/calendar", :ifm=>:"application/vnd.shana.informed.formdata", :iges=>:"model/iges", :igl=>:"application/vnd.igloader", :igm=>:"application/vnd.insors.igm", :igs=>:"model/iges", :igx=>:"application/vnd.micrografx.igx", :iif=>:"application/vnd.shana.informed.interchange", :ima=>:"application/x-ima", :ink=>:"application/inkml+xml", :inkml=>:"application/inkml+xml", :iota=>:"application/vnd.astraea-software.iota", :ip=>:"application/x-ip2", :ipfix=>:"application/ipfix", :ipk=>:"application/vnd.shana.informed.package", :irm=>:"application/vnd.ibm.rights-management", :irp=>:"application/vnd.irepository.package+xml", :isu=>:"video/x-isvideo", :itp=>:"application/vnd.shana.informed.formtemplate", :iv=>:"application/x-inventor", :ivp=>:"application/vnd.immervision-ivp", :ivr=>:"i-world/i-vrml", :ivu=>:"application/vnd.immervision-ivu", :ivy=>:"application/x-livescreen", :jad=>:"text/vnd.sun.j2me.app-descriptor", :jam=>:"application/vnd.jam", :jav=>:"text/x-java-source", :jcm=>:"application/x-java-commerce", :jfif=>:"image/jpeg", :"jfif-tbnl"=>:"image/jpeg", :jisp=>:"application/vnd.jisp", :jlt=>:"application/vnd.hp-jlyt", :jnlp=>:"application/x-java-jnlp-file", :joda=>:"application/vnd.joost.joda-archive", :jpgm=>:"video/jpm", :jpgv=>:"video/jpeg", :jpm=>:"video/jpm", :jsonml=>:"application/jsonml+json", :jut=>:"image/jutvision", :kar=>:"audio/midi", :karbon=>:"application/vnd.kde.karbon", :kfo=>:"application/vnd.kde.kformula", :kia=>:"application/vnd.kidspiration", :kil=>:"application/x-killustrator", :kml=>:"application/vnd.google-earth.kml+xml", :kmz=>:"application/vnd.google-earth.kmz", :kne=>:"application/vnd.kinar", :knp=>:"application/vnd.kinar", :kon=>:"application/vnd.kde.kontour", :kpr=>:"application/vnd.kde.kpresenter", :kpt=>:"application/vnd.kde.kpresenter", :kpxx=>:"application/vnd.ds-keypoint", :ksp=>:"application/vnd.kde.kspread", :ktr=>:"application/vnd.kahootz", :ktx=>:"image/ktx", :ktz=>:"application/vnd.kahootz", :kwd=>:"application/vnd.kde.kword", :kwt=>:"application/vnd.kde.kword", :lam=>:"audio/x-liveaudio", :lasxml=>:"application/vnd.las.las+xml", :lbd=>:"application/vnd.llamagraphics.life-balance.desktop", :lbe=>:"application/vnd.llamagraphics.life-balance.exchange+xml", :les=>:"application/vnd.hhe.lesson-player", :lha=>:"application/lha", :lhx=>:"application/octet-stream", :link66=>:"application/vnd.route66.link66+xml", :list3820=>:"application/vnd.ibm.modcap", :listafp=>:"application/vnd.ibm.modcap", :lma=>:"audio/nspaudio", :lostxml=>:"application/lost+xml", :lrf=>:"application/octet-stream", :lrm=>:"application/vnd.ms-lrm", :lsp=>:"application/x-lisp", :lsx=>:"text/x-la-asf", :ltf=>:"application/vnd.frogans.ltf", :ltx=>:"application/x-latex", :luac=>:"application/x-lua-bytecode", :lwp=>:"application/vnd.lotus-wordpro", :lzh=>:"application/x-lzh", :lzx=>:"application/lzx", :m=>:"text/x-m", :m13=>:"application/x-msmediaview", :m14=>:"application/x-msmediaview", :m1v=>:"video/mpeg", :m21=>:"application/mp21", :m2a=>:"audio/mpeg", :m2v=>:"video/mpeg", :m3a=>:"audio/mpeg", :m3u=>:"audio/x-mpegurl", :m3u8=>:"application/x-mpegURL", :m4a=>:"audio/mp4", :m4p=>:"application/mp4", :m4u=>:"video/vnd.mpegurl", :m4v=>:"video/x-m4v", :ma=>:"application/mathematica", :mads=>:"application/mads+xml", :maker=>:"application/vnd.framemaker", :mathml=>:"application/mathml+xml", :mb=>:"application/mathematica", :mbd=>:"application/mbedlet", :mbk=>:"application/vnd.mobius.mbk", :mbox=>:"application/mbox", :mc=>:"application/x-magic-cap-package-1.0", :mc1=>:"application/vnd.medcalcdata", :mcd=>:"application/mcad", :mcf=>:"text/mcf", :mcp=>:"application/netmc", :mcurl=>:"text/vnd.curl.mcurl", :mdi=>:"image/vnd.ms-modi", :mesh=>:"model/mesh", :meta4=>:"application/metalink4+xml", :metalink=>:"application/metalink+xml", :mets=>:"application/mets+xml", :mfm=>:"application/vnd.mfmp", :mft=>:"application/rpki-manifest", :mgp=>:"application/vnd.osgeo.mapguide.package", :mgz=>:"application/vnd.proteus.magazine", :mhtml=>:"message/rfc822", :midi=>:"audio/midi", :mie=>:"application/x-mie", :mif=>:"application/x-mif", :mime=>:"www/mime", :mj2=>:"video/mj2", :mjf=>:"audio/x-vnd.audioexplosion.mjuicemediafile", :mjp2=>:"video/mj2", :mk3d=>:"video/x-matroska", :mka=>:"audio/x-matroska", :mks=>:"video/x-matroska", :mlp=>:"application/vnd.dolby.mlp", :mmd=>:"application/vnd.chipnuts.karaoke-mmd", :mme=>:"application/base64", :mmf=>:"application/vnd.smaf", :mng=>:"video/x-mng", :mny=>:"application/x-msmoney", :mods=>:"application/mods+xml", :moov=>:"video/quicktime", :movie=>:"video/x-sgi-movie", :mp2=>:"audio/mpeg", :mp21=>:"application/mp21", :mp2a=>:"audio/mpeg", :mp3=>:"video/mpeg", :mp4=>:"video/mp4", :mp4a=>:"audio/mp4", :mp4s=>:"application/mp4", :mp4v=>:"video/mp4", :mpa=>:"audio/mpeg", :mpc=>:"application/vnd.mophun.certificate", :mpe=>:"video/mpeg", :mpg4=>:"video/mp4", :mpga=>:"audio/mpeg", :mpkg=>:"application/vnd.apple.installer+xml", :mpm=>:"application/vnd.blueice.multipass", :mpn=>:"application/vnd.mophun.application", :mpp=>:"application/vnd.ms-project", :mpt=>:"application/vnd.ms-project", :mpv=>:"application/x-project", :mpx=>:"application/x-project", :mpy=>:"application/vnd.ibm.minipay", :mqy=>:"application/vnd.mobius.mqy", :mrc=>:"application/marc", :mrcx=>:"application/marcxml+xml", :mscml=>:"application/mediaservercontrol+xml", :mseed=>:"application/vnd.fdsn.mseed", :mseq=>:"application/vnd.mseq", :msh=>:"model/mesh", :msty=>:"application/vnd.muvee.style", :mus=>:"application/vnd.musician", :musicxml=>:"application/vnd.recordare.musicxml+xml", :mv=>:"video/x-sgi-movie", :mvb=>:"application/x-msmediaview", :mwf=>:"application/vnd.mfer", :mxf=>:"application/mxf", :mxl=>:"application/vnd.recordare.musicxml", :mxml=>:"application/xv+xml", :mxs=>:"application/vnd.triscape.mxs", :mxu=>:"video/vnd.mpegurl", :my=>:"audio/make", :mzz=>:"application/x-vnd.audioexplosion.mzz", :"n-gage"=>:"application/vnd.nokia.n-gage.symbian.install", :n3=>:"text/n3", :nap=>:"image/naplps", :naplps=>:"image/naplps", :nb=>:"application/mathematica", :nbp=>:"application/vnd.wolfram.player", :nc=>:"application/x-netcdf", :ncm=>:"application/vnd.nokia.configuration-message", :ngdat=>:"application/vnd.nokia.n-gage.data", :nif=>:"image/x-niff", :niff=>:"image/x-niff", :nitf=>:"application/vnd.nitf", :nlu=>:"application/vnd.neurolanguage.nlu", :nml=>:"application/vnd.enliven", :nnd=>:"application/vnd.noblenet-directory", :nns=>:"application/vnd.noblenet-sealer", :nnw=>:"application/vnd.noblenet-web", :npx=>:"image/vnd.net-fpx", :nsc=>:"application/x-conference", :nsf=>:"application/vnd.lotus-notes", :nvd=>:"application/x-navidoc", :nws=>:"message/rfc822", :nzb=>:"application/x-nzb", :o=>:"application/octet-stream", :oa2=>:"application/vnd.fujitsu.oasys2", :oa3=>:"application/vnd.fujitsu.oasys3", :oas=>:"application/vnd.fujitsu.oasys", :obd=>:"application/x-msbinder", :oda=>:"application/oda", :odb=>:"application/vnd.oasis.opendocument.database", :odc=>:"application/vnd.oasis.opendocument.chart", :odf=>:"application/vnd.oasis.opendocument.formula", :odft=>:"application/vnd.oasis.opendocument.formula-template", :odg=>:"application/vnd.oasis.opendocument.graphics", :odi=>:"application/vnd.oasis.opendocument.image", :odm=>:"application/vnd.oasis.opendocument.text-master", :odp=>:"application/vnd.oasis.opendocument.presentation", :ogx=>:"application/ogg", :omc=>:"application/x-omc", :omcd=>:"application/x-omcdatamaker", :omcr=>:"application/x-omcregerator", :omdoc=>:"application/omdoc+xml", :onepkg=>:"application/onenote", :onetmp=>:"application/onenote", :onetoc=>:"application/onenote", :onetoc2=>:"application/onenote", :opml=>:"text/x-opml", :oprc=>:"application/vnd.palm", :osf=>:"application/vnd.yamaha.openscoreformat", :osfpvg=>:"application/vnd.yamaha.openscoreformat.osfpvg+xml", :otc=>:"application/vnd.oasis.opendocument.chart-template", :otg=>:"application/vnd.oasis.opendocument.graphics-template", :oth=>:"application/vnd.oasis.opendocument.text-web", :oti=>:"application/vnd.oasis.opendocument.image-template", :otm=>:"application/vnd.oasis.opendocument.text-master", :otp=>:"application/vnd.oasis.opendocument.presentation-template", :ots=>:"application/vnd.oasis.opendocument.spreadsheet-template", :ott=>:"application/vnd.oasis.opendocument.text-template", :oxps=>:"application/oxps", :oxt=>:"application/vnd.openofficeorg.extension", :p=>:"text/x-pascal", :p10=>:"application/pkcs10", :p12=>:"application/pkcs-12", :p7a=>:"application/x-pkcs7-signature", :p7b=>:"application/x-pkcs7-certificates", :p7c=>:"application/pkcs7-mime", :p7m=>:"application/pkcs7-mime", :p7r=>:"application/x-pkcs7-certreqresp", :p7s=>:"application/pkcs7-signature", :p8=>:"application/pkcs8", :part=>:"application/pro_eng", :paw=>:"application/vnd.pawaafile", :pbd=>:"application/vnd.powerbuilder6", :pcf=>:"application/x-font-pcf", :pcl=>:"application/x-pcl", :pclxl=>:"application/vnd.hp-pclxl", :pct=>:"image/x-pict", :pcurl=>:"application/vnd.curl.pcurl", :pfr=>:"application/font-tdpfr", :pfunk=>:"audio/make", :pgm=>:"image/x-portable-graymap", :pgn=>:"application/x-chess-pgn", :pgp=>:"application/pgp-encrypted", :pict=>:"image/pict", :pki=>:"application/pkixcmp", :pkipath=>:"application/pkix-pkipath", :pko=>:"application/vnd.ms-pki.pko", :plb=>:"application/vnd.3gpp.pic-bw-large", :plc=>:"application/vnd.mobius.plc", :plf=>:"application/vnd.pocketlearn", :pls=>:"application/pls+xml", :plx=>:"application/x-pixclscript", :pm4=>:"application/x-pagemaker", :pm5=>:"application/x-pagemaker", :pml=>:"application/vnd.ctc-posml", :portpkg=>:"application/vnd.macports.portpkg", :potm=>:"application/vnd.ms-powerpoint.template.macroenabled.12", :potx=>:"application/vnd.openxmlformats-officedocument.presentationml.template", :pov=>:"model/x-pov", :ppa=>:"application/vnd.ms-powerpoint", :ppam=>:"application/vnd.ms-powerpoint.addin.macroenabled.12", :pps=>:"application/mspowerpoint", :ppsm=>:"application/vnd.ms-powerpoint.slideshow.macroenabled.12", :pptm=>:"application/vnd.ms-powerpoint.presentation.macroenabled.12", :ppz=>:"application/mspowerpoint", :pqa=>:"application/vnd.palm", :prc=>:"application/x-mobipocket-ebook", :prt=>:"application/pro_eng", :psb=>:"application/vnd.3gpp.pic-bw-small", :psf=>:"application/x-font-linux-psf", :pskcxml=>:"application/pskc+xml", :ptid=>:"application/vnd.pvi.ptid1", :pvb=>:"application/vnd.3gpp.pic-bw-var", :pvu=>:"paleovu/x-pv", :pwn=>:"application/vnd.3m.post-it-notes", :pwz=>:"application/vnd.ms-powerpoint", :pya=>:"audio/vnd.ms-playready.media.pya", :pyo=>:"application/x-python-code", :pyv=>:"video/vnd.ms-playready.media.pyv", :qam=>:"application/vnd.epson.quickanime", :qbo=>:"application/vnd.intu.qbo", :qcp=>:"audio/vnd.qcelp", :qd3=>:"x-world/x-3dmf", :qd3d=>:"x-world/x-3dmf", :qfx=>:"application/vnd.intu.qfx", :qif=>:"image/x-quicktime", :qps=>:"application/vnd.publishare-delta-tree", :qtc=>:"video/x-qtc", :qti=>:"image/x-quicktime", :qtif=>:"image/x-quicktime", :qwd=>:"application/vnd.quark.quarkxpress", :qwt=>:"application/vnd.quark.quarkxpress", :qxb=>:"application/vnd.quark.quarkxpress", :qxd=>:"application/vnd.quark.quarkxpress", :qxl=>:"application/vnd.quark.quarkxpress", :qxt=>:"application/vnd.quark.quarkxpress", :ra=>:"audio/x-realaudio", :ram=>:"audio/x-pn-realaudio", :ras=>:"image/cmu-raster", :rast=>:"image/cmu-raster", :rcprofile=>:"application/vnd.ipunplugged.rcprofile", :rdz=>:"application/vnd.data-vision.rdz", :rep=>:"application/vnd.businessobjects", :rexx=>:"text/x-script.rexx", :rf=>:"image/vnd.rn-realflash", :rgb=>:"image/x-rgb", :rif=>:"application/reginfo+xml", :rip=>:"audio/vnd.rip", :ris=>:"application/x-research-info-systems", :rlc=>:"image/vnd.fujixerox.edmics-rlc", :rmi=>:"audio/midi", :rmm=>:"audio/x-pn-realaudio", :rmp=>:"audio/x-pn-realaudio", :rms=>:"application/vnd.jcp.javame.midlet-rms", :rmvb=>:"application/vnd.rn-realmedia-vbr", :rnx=>:"application/vnd.rn-realplayer", :roa=>:"application/rpki-roa", :roff=>:"text/troff", :rp=>:"image/vnd.rn-realpix", :rp9=>:"application/vnd.cloanto.rp9", :rpss=>:"application/vnd.nokia.radio-presets", :rpst=>:"application/vnd.nokia.radio-preset", :rq=>:"application/sparql-query", :rsd=>:"application/rsd+xml", :rt=>:"text/richtext", :rtx=>:"text/richtext", :s=>:"text/x-asm", :s3m=>:"audio/s3m", :saf=>:"application/vnd.yamaha.smaf-audio", :saveme=>:"aapplication/octet-stream", :sbk=>:"application/x-tbook", :sbml=>:"application/sbml+xml", :sc=>:"application/vnd.ibm.secure-container", :scd=>:"application/x-msschedule", :scq=>:"application/scvp-cv-request", :scs=>:"application/scvp-cv-response", :scurl=>:"text/vnd.curl.scurl", :sda=>:"application/vnd.stardivision.draw", :sdc=>:"application/vnd.stardivision.calc", :sdd=>:"application/vnd.stardivision.impress", :sdkd=>:"application/vnd.solent.sdkm+xml", :sdkm=>:"application/vnd.solent.sdkm+xml", :sdml=>:"text/plain", :sdr=>:"application/sounder", :sea=>:"application/sea", :see=>:"application/vnd.seemail", :seed=>:"application/vnd.fdsn.seed", :sema=>:"application/vnd.sema", :semd=>:"application/vnd.semd", :semf=>:"application/vnd.semf", :setpay=>:"application/set-payment-initiation", :setreg=>:"application/set-registration-initiation", :"sfd-hdstx"=>:"application/vnd.hydrostatix.sof-data", :sfs=>:"application/vnd.spotfire.sfs", :sgi=>:"image/sgi", :sgl=>:"application/vnd.stardivision.writer-global", :sgm=>:"text/sgml", :sgml=>:"text/sgml", :shar=>:"application/x-bsh", :shf=>:"application/shf+xml", :shtml=>:"text/html", :si=>:"text/vnd.wap.si", :sid=>:"image/x-mrsid-image", :sil=>:"audio/silk", :silo=>:"model/mesh", :sis=>:"application/vnd.symbian.install", :sisx=>:"application/vnd.symbian.install", :sit=>:"application/x-sit", :sitx=>:"application/x-stuffitx", :skd=>:"application/vnd.koan", :skm=>:"application/vnd.koan", :skp=>:"application/vnd.koan", :skt=>:"application/vnd.koan", :slc=>:"application/vnd.wap.slc", :sldm=>:"application/vnd.ms-powerpoint.slide.macroenabled.12", :sldx=>:"application/vnd.openxmlformats-officedocument.presentationml.slide", :slt=>:"application/vnd.epson.salt", :sm=>:"application/vnd.stepmania.stepchart", :smf=>:"application/vnd.stardivision.math", :smi=>:"application/smil+xml", :smil=>:"application/smil+xml", :smv=>:"video/x-smv", :smzip=>:"application/vnd.stepmania.package", :snd=>:"audio/basic", :snf=>:"application/x-font-snf", :sol=>:"application/solids", :spc=>:"text/x-speech", :spf=>:"application/vnd.yamaha.smaf-phrase", :spot=>:"text/vnd.in3d.spot", :spp=>:"application/scvp-vp-response", :spq=>:"application/scvp-vp-request", :spr=>:"application/x-sprite", :sprite=>:"application/x-sprite", :spx=>:"audio/ogg", :sru=>:"application/sru+xml", :srx=>:"application/sparql-results+xml", :ssdl=>:"application/ssdl+xml", :sse=>:"application/vnd.kodak-descriptor", :ssf=>:"application/vnd.epson.ssf", :ssi=>:"text/x-server-parsed-html", :ssm=>:"application/streamingmedia", :ssml=>:"application/ssml+xml", :sst=>:"application/vnd.ms-pki.certstore", :stc=>:"application/vnd.sun.xml.calc.template", :step=>:"application/step", :stf=>:"application/vnd.wt.stf", :sti=>:"application/vnd.sun.xml.impress.template", :stk=>:"application/hyperstudio", :stp=>:"application/step", :str=>:"application/vnd.pg.format", :stw=>:"application/vnd.sun.xml.writer.template", :sus=>:"application/vnd.sus-calendar", :susp=>:"application/vnd.sus-calendar", :sv4cpio=>:"application/x-sv4cpio", :sv4crc=>:"application/x-sv4crc", :svc=>:"application/vnd.dvb.service", :svd=>:"application/vnd.svd", :svf=>:"image/x-dwg", :svr=>:"x-world/x-svr", :swa=>:"application/x-director", :swi=>:"application/vnd.aristanetworks.swi", :sxi=>:"application/vnd.sun.xml.impress", :sxm=>:"application/vnd.sun.xml.math", :t=>:"text/troff", :t3=>:"application/x-t3vm-image", :taglet=>:"application/vnd.mynfc", :talk=>:"text/x-speech", :tao=>:"application/vnd.tao.intent-module-archive", :tbk=>:"application/x-tbook", :tcap=>:"application/vnd.3gpp2.tcap", :tcsh=>:"text/x-script.tcsh", :teacher=>:"application/vnd.smart.teacher", :tei=>:"application/tei+xml", :teicorpus=>:"application/tei+xml", :texinfo=>:"application/x-texinfo", :tfi=>:"application/thraud+xml", :tfm=>:"application/x-tex-tfm", :thmx=>:"application/vnd.ms-officetheme", :tmo=>:"application/vnd.tmobile-livetv", :tpt=>:"application/vnd.trid.tpt", :tr=>:"text/troff", :tra=>:"application/vnd.trueapp", :trm=>:"application/x-msterminal", :tsd=>:"application/timestamped-data", :tsi=>:"audio/tsp-audio", :ttl=>:"text/turtle", :turbot=>:"image/florian", :twd=>:"application/vnd.simtech-mindmapper", :twds=>:"application/vnd.simtech-mindmapper", :txd=>:"application/vnd.genomatix.tuxedo", :txf=>:"application/vnd.mobius.txf", :u32=>:"application/x-authorware-bin", :udeb=>:"application/x-debian-package", :ufd=>:"application/vnd.ufdl", :ufdl=>:"application/vnd.ufdl", :uil=>:"text/x-uil", :ulx=>:"application/x-glulx", :umj=>:"application/vnd.umajin", :unis=>:"text/uri-list", :unityweb=>:"application/vnd.unity", :unv=>:"application/i-deas", :uoml=>:"application/vnd.uoml+xml", :uri=>:"text/uri-list", :uris=>:"text/uri-list", :urls=>:"text/uri-list", :ustar=>:"multipart/x-ustar", :utz=>:"application/vnd.uiq.theme", :uva=>:"audio/vnd.dece.audio", :uvd=>:"application/vnd.dece.data", :uvf=>:"application/vnd.dece.data", :uvg=>:"image/vnd.dece.graphic", :uvh=>:"video/vnd.dece.hd", :uvi=>:"image/vnd.dece.graphic", :uvm=>:"video/vnd.dece.mobile", :uvp=>:"video/vnd.dece.pd", :uvs=>:"video/vnd.dece.sd", :uvt=>:"application/vnd.dece.ttml+xml", :uvu=>:"video/vnd.uvvu.mp4", :uvv=>:"video/vnd.dece.video", :uvva=>:"audio/vnd.dece.audio", :uvvd=>:"application/vnd.dece.data", :uvvf=>:"application/vnd.dece.data", :uvvg=>:"image/vnd.dece.graphic", :uvvh=>:"video/vnd.dece.hd", :uvvi=>:"image/vnd.dece.graphic", :uvvm=>:"video/vnd.dece.mobile", :uvvp=>:"video/vnd.dece.pd", :uvvs=>:"video/vnd.dece.sd", :uvvt=>:"application/vnd.dece.ttml+xml", :uvvu=>:"video/vnd.uvvu.mp4", :uvvv=>:"video/vnd.dece.video", :uvvx=>:"application/vnd.dece.unspecified", :uvvz=>:"application/vnd.dece.zip", :uvx=>:"application/vnd.dece.unspecified", :uvz=>:"application/vnd.dece.zip", :vcard=>:"text/vcard", :vcd=>:"application/x-cdlink", :vcg=>:"application/vnd.groove-vcard", :vcs=>:"text/x-vcalendar", :vcx=>:"application/vnd.vcx", :vda=>:"application/vda", :vdo=>:"video/vdo", :vew=>:"application/groupwise", :vis=>:"application/vnd.visionary", :viv=>:"video/vivo", :vivo=>:"video/vivo", :vmd=>:"application/vocaltec-media-desc", :vmf=>:"application/vocaltec-media-file", :vob=>:"video/x-ms-vob", :vor=>:"application/vnd.stardivision.writer", :vos=>:"video/vosaic", :vox=>:"application/x-authorware-bin", :vqe=>:"audio/x-twinvq-plugin", :vqf=>:"audio/x-twinvq", :vql=>:"audio/x-twinvq-plugin", :vrml=>:"model/vrml", :vrt=>:"x-world/x-vrt", :vsf=>:"application/vnd.vsf", :vss=>:"application/vnd.visio", :vst=>:"application/vnd.visio", :vsw=>:"application/vnd.visio", :vtu=>:"model/vnd.vtu", :vxml=>:"application/voicexml+xml", :w3d=>:"application/x-director", :w60=>:"application/wordperfect6.0", :w61=>:"application/wordperfect6.1", :w6w=>:"application/msword", :wad=>:"application/x-doom", :wax=>:"audio/x-ms-wax", :wb1=>:"application/x-qpro", :wbmp=>:"image/vnd.wap.wbmp", :wbs=>:"application/vnd.criticaltools.wbs+xml", :wbxml=>:"application/vnd.wap.wbxml", :wcm=>:"application/vnd.ms-works", :wdb=>:"application/vnd.ms-works", :wdp=>:"image/vnd.ms-photo", :web=>:"application/vnd.xara", :weba=>:"audio/webm", :wg=>:"application/vnd.pmi.widget", :wgt=>:"application/widget", :wiz=>:"application/msword", :wk1=>:"application/x-123", :wks=>:"application/vnd.ms-works", :wm=>:"video/x-ms-wm", :wmd=>:"application/x-ms-wmd", :wml=>:"text/vnd.wap.wml", :wmlc=>:"application/vnd.wap.wmlc", :wmls=>:"text/vnd.wap.wmlscript", :wmlsc=>:"application/vnd.wap.wmlscriptc", :wmx=>:"video/x-ms-wmx", :wmz=>:"application/x-msmetafile", :wp=>:"application/wordperfect", :wp5=>:"application/wordperfect", :wp6=>:"application/wordperfect", :wpd=>:"application/x-wpwin", :wpl=>:"application/vnd.ms-wpl", :wps=>:"application/vnd.ms-works", :wq1=>:"application/x-lotus", :wqd=>:"application/vnd.wqd", :wrl=>:"model/vrml", :wrz=>:"model/vrml", :wsc=>:"text/scriplet", :wsdl=>:"application/wsdl+xml", :wspolicy=>:"application/wspolicy+xml", :wsrc=>:"application/x-wais-source", :wtb=>:"application/vnd.webturbo", :wtk=>:"application/x-wintalk", :wvx=>:"video/x-ms-wvx", :"x-png"=>:"image/png", :x32=>:"application/x-authorware-bin", :x3d=>:"model/x3d+xml", :x3db=>:"model/x3d+binary", :x3dbz=>:"model/x3d+binary", :x3dv=>:"model/x3d+vrml", :x3dvz=>:"model/x3d+vrml", :x3dz=>:"model/x3d+xml", :xar=>:"application/vnd.xara", :xbap=>:"application/x-ms-xbap", :xbd=>:"application/vnd.fujixerox.docuworks.binder", :xdf=>:"application/xcap-diff+xml", :xdm=>:"application/vnd.syncml.dm+xml", :xdp=>:"application/vnd.adobe.xdp+xml", :xdr=>:"video/x-amt-demorun", :xdssc=>:"application/dssc+xml", :xenc=>:"application/xenc+xml", :xer=>:"application/patch-ops-error+xml", :xfdf=>:"application/vnd.adobe.xfdf", :xfdl=>:"application/vnd.xfdl", :xgz=>:"xgl/drawing", :xhvml=>:"application/xv+xml", :xif=>:"image/vnd.xiff", :xl=>:"application/excel", :xla=>:"application/excel", :xlam=>:"application/vnd.ms-excel.addin.macroenabled.12", :xlc=>:"application/excel", :xld=>:"application/excel", :xlk=>:"application/excel", :xll=>:"application/excel", :xlm=>:"application/excel", :xlsb=>:"application/vnd.ms-excel.sheet.binary.macroenabled.12", :xlsm=>:"application/vnd.ms-excel.sheet.macroenabled.12", :xlt=>:"application/excel", :xltm=>:"application/vnd.ms-excel.template.macroenabled.12", :xltx=>:"application/vnd.openxmlformats-officedocument.spreadsheetml.template", :xlv=>:"application/excel", :xlw=>:"application/excel", :xm=>:"audio/xm", :xmz=>:"xgl/movie", :xo=>:"application/vnd.olpc-sugar", :xop=>:"application/xop+xml", :xpdl=>:"application/xml", :xpix=>:"application/x-vnd.ls-xpix", :xpl=>:"application/xproc+xml", :xpr=>:"application/vnd.is-xpr", :xps=>:"application/vnd.ms-xpsdocument", :xpw=>:"application/vnd.intercon.formnet", :xpx=>:"application/vnd.intercon.formnet", :xsm=>:"application/vnd.syncml+xml", :xspf=>:"application/xspf+xml", :xsr=>:"video/x-amt-showrun", :xul=>:"application/vnd.mozilla.xul+xml", :xvm=>:"application/xv+xml", :xvml=>:"application/xv+xml", :xyz=>:"chemical/x-xyz", :yang=>:"application/yang", :yin=>:"application/yin+xml", :z=>:"application/x-compress", :z1=>:"application/x-zmachine", :z2=>:"application/x-zmachine", :z3=>:"application/x-zmachine", :z4=>:"application/x-zmachine", :z5=>:"application/x-zmachine", :z6=>:"application/x-zmachine", :z7=>:"application/x-zmachine", :z8=>:"application/x-zmachine", :zaz=>:"application/vnd.zzazz.deck+xml", :zir=>:"application/vnd.zul", :zirz=>:"application/vnd.zul", :zmm=>:"application/vnd.handheld-entertainment+xml", :zoo=>:"application/octet-stream", :zsh=>:"text/x-script.zsh"}
|
metadata
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: typr
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Kilian Reitmayr
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2026-07-25 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: unicode-display_width
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '3.1'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '3.1'
|
|
27
|
+
description:
|
|
28
|
+
email:
|
|
29
|
+
- reitmayr@protonmail.com
|
|
30
|
+
executables: []
|
|
31
|
+
extensions: []
|
|
32
|
+
extra_rdoc_files: []
|
|
33
|
+
files:
|
|
34
|
+
- example/browser
|
|
35
|
+
- example/grid
|
|
36
|
+
- example/text
|
|
37
|
+
- example/top500.csv
|
|
38
|
+
- lib/browser.rb
|
|
39
|
+
- lib/curses.rb
|
|
40
|
+
- lib/frontend.rb
|
|
41
|
+
- lib/graphical.rb
|
|
42
|
+
- lib/grid.rb
|
|
43
|
+
- lib/line.rb
|
|
44
|
+
- lib/space.rb
|
|
45
|
+
- lib/stack.rb
|
|
46
|
+
- lib/terminal.rb
|
|
47
|
+
- lib/text.rb
|
|
48
|
+
- lib/typr.rb
|
|
49
|
+
- share/mimetypes
|
|
50
|
+
homepage: https://codeberg.org/typr/typr
|
|
51
|
+
licenses:
|
|
52
|
+
- MIT
|
|
53
|
+
metadata: {}
|
|
54
|
+
post_install_message:
|
|
55
|
+
rdoc_options: []
|
|
56
|
+
require_paths:
|
|
57
|
+
- lib
|
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
59
|
+
requirements:
|
|
60
|
+
- - ">="
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: '3.1'
|
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '0'
|
|
68
|
+
requirements: []
|
|
69
|
+
rubygems_version: 3.3.15
|
|
70
|
+
signing_key:
|
|
71
|
+
specification_version: 4
|
|
72
|
+
summary: Terminal UI Toolkit
|
|
73
|
+
test_files: []
|