mime_guess-2.0.1/.gitignore010064400017500001750000000001001350545437700140640ustar0000000000000000*.swp target Cargo.lock src/mime_types_generated.rs .idea/ *.imlmime_guess-2.0.1/.travis.yml010064400017500001750000000003301352211276100141750ustar0000000000000000language: rust sudo: false cache: cargo rust: - stable - beta - nightly - 1.33.0 script: - cargo build -v - cargo build -v --no-default-features - cargo test -v - cargo test -v --no-default-features mime_guess-2.0.1/Cargo.toml.orig010064400017500001750000000022451352211277000147620ustar0000000000000000[package] name = "mime_guess" version = "2.0.1" authors = ["Austin Bonander "] license = "MIT" description = "A simple crate for detection of a file's MIME type by its extension." keywords = ["mime", "filesystem", "extension"] repository = "https://github.com/abonander/mime_guess" documentation = "https://docs.rs/mime_guess/" readme = "README.md" [features] default = ["rev-mappings"] # FIXME: when `phf` release 0.8.0 is ready # phf-map = ["phf", "phf_codegen"] # generate reverse-mappings for lookup of extensions by MIME type # default-on but can be turned off for smaller generated code rev-mappings = [] [dependencies] mime = "0.3" unicase = "2.4.0" #[dependencies.phf] ## version = "0.7.24" ## git = "https://github.com/sfackler/rust-phf" #path = "../rust-phf/phf" #features = ["unicase"] #optional = true [build-dependencies] unicase = "2.4.0" #[build-dependencies.phf_codegen] #version = "0.7.24" #git = "https://github.com/sfackler/rust-phf" #path = "../rust-phf/phf_codegen" #optional = true [dev-dependencies] criterion = "0.2" [[example]] name = "rev_map" required-features = ["rev-mappings"] [[bench]] name = "benchmark" harness = false mime_guess-2.0.1/Cargo.toml0000644000000023300000000000000112240ustar00# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g. crates.io) dependencies # # If you believe there's an error in this file please file an # issue against the rust-lang/cargo repository. If you're # editing this file be aware that the upstream Cargo.toml # will likely look very different (and much more reasonable) [package] name = "mime_guess" version = "2.0.1" authors = ["Austin Bonander "] description = "A simple crate for detection of a file's MIME type by its extension." documentation = "https://docs.rs/mime_guess/" readme = "README.md" keywords = ["mime", "filesystem", "extension"] license = "MIT" repository = "https://github.com/abonander/mime_guess" [[example]] name = "rev_map" required-features = ["rev-mappings"] [[bench]] name = "benchmark" harness = false [dependencies.mime] version = "0.3" [dependencies.unicase] version = "2.4.0" [dev-dependencies.criterion] version = "0.2" [build-dependencies.unicase] version = "2.4.0" [features] default = ["rev-mappings"] rev-mappings = [] mime_guess-2.0.1/Cargo.toml.orig0000644000000023310000000000000121640ustar00# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies # # If you believe there's an error in this file please file an # issue against the rust-lang/cargo repository. If you're # editing this file be aware that the upstream Cargo.toml # will likely look very different (and much more reasonable) [package] name = "mime_guess" version = "2.0.1" authors = ["Austin Bonander "] description = "A simple crate for detection of a file's MIME type by its extension." documentation = "https://docs.rs/mime_guess/" readme = "README.md" keywords = ["mime", "filesystem", "extension"] license = "MIT" repository = "https://github.com/abonander/mime_guess" [[example]] name = "rev_map" required-features = ["rev-mappings"] [[bench]] name = "benchmark" harness = false [dependencies.mime] version = "0.3" [dependencies.unicase] version = "2.4.0" [dev-dependencies.criterion] version = "0.2" [build-dependencies.unicase] version = "2.4.0" [features] default = ["rev-mappings"] rev-mappings = [] mime_guess-2.0.1/LICENSE010064400017500001750000000020731350545437700131140ustar0000000000000000The MIT License (MIT) Copyright (c) 2015 Austin Bonander Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. mime_guess-2.0.1/README.md010064400017500001750000000105751352211276100133570ustar0000000000000000# mime_guess [![Build Status](https://travis-ci.org/abonander/mime_guess.svg?branch=master)](https://travis-ci.org/abonander/mime_guess) [![Crates.io](https://img.shields.io/crates/v/mime_guess.svg)](https://crates.io/crates/mime_guess) MIME/MediaType guessing by file extension. Uses a static map of known file extension -> MIME type mappings. **Returning Contributors: New Requirements for Submissions Below** ##### Required Rust Version: 1.33 #### [Documentation](https://docs.rs/mime_guess/) ### Versioning Due to a mistaken premature release, `mime_guess` currently publicly depends on a pre-1.0 `mime`, which means `mime` upgrades are breaking changes and necessitates a major version bump. Refer to the following table to find a version of `mime_guess` which matches your version of `mime`: | `mime` version | `mime_guess` version | |----------------|----------------------| | `0.1.x, 0.2.x` | `1.x.y` | | `0.3.x` | `2.x.y` | #### Note: MIME Types Returned Are Not Stable/Guaranteed The media types returned for a given extension are not considered to be part of the crate's stable API and are often updated in patch (`x.y.z + 1`) releases to be as correct as possible. MIME changes are backported to previous major releases on a best-effort basis. Note that only the extensions of paths/filenames are inspected in order to guess the MIME type. The file that may or may not reside at that path may or may not be a valid file of the returned MIME type. Be wary of unsafe or un-validated assumptions about file structure or length. An extension may also have multiple applicable MIME types. When more than one is returned, the first is considered to be the most "correct"--see below for elaboration. Contributing ----------- #### Adding or correcting MIME types for extensions Is the MIME type for a file extension wrong or missing? Great! Well, not great for us, but great for you if you'd like to open a pull request! The file extension -> MIME type mappings are listed in `src/mime_types.rs`. **The list is sorted lexicographically by file extension, and all extensions are lowercase (where applicable).** The former is necessary to support fallback to binary search when the `phf-map` feature is turned off, and for the maintainers' sanity. The latter is only for consistency's sake; the search is case-insensitive. Simply add or update the appropriate string pair(s) to make the correction(s) needed. Run `cargo test` to make sure the library continues to work correctly. #### (Important! Updated as of 2.0.0) Citing the corrected MIME type When opening a pull request, please include a link to an official document or RFC noting the correct MIME type for the file type in question **as a comment next to the addition**. The latter is a new requirement as of 2.0.0 which is intended to make auditing easier in the future. Bulk additions may request to omit this, although please provide a good reason. Though we're only guessing here, we like to be as correct as we can. It makes it much easier to vet your contribution if we don't have to search for corroborating material. #### Providing citations for existing types Historically, citations were only required in pull requests for additions or corrections to media types; they are now required to be provided in-line next to the mapping for easier auditing. If anyone is looking for busy work, finding and adding citations for existing mappings would be an easy way to get a few pull requests in. See the issue tracker for more information. #### Multiple MIME types per extension As of `2.0.0`, multiple MIME types per extension are supported. The first MIME type in the list for a given extension should be the most "correct" so users who only care about getting a single MIME type can use the `first*()` methods. The defintion of "correct" is open to debate, however. In the author's opinion this should be whatever is defined by the latest IETF RFC for the given file format, or otherwise explicitly supercedes all others. #### Changes to the API or operation of the crate We're open to changes to the crate's API or its inner workings, breaking or not, if it improves the overall operation, efficiency, or ergonomics of the crate. However, it would be a good idea to open an issue on the repository so we can discuss your proposed changes and decide how best to approach them. License ------- MIT (See the `LICENSE` file in this repository for more information.) mime_guess-2.0.1/benches/benchmark.rs010064400017500001750000000014131352210621300157710ustar0000000000000000#[macro_use] extern crate criterion; extern crate mime_guess; use self::criterion::Criterion; use mime_guess::from_ext; include!("../src/mime_types.rs"); /// WARNING: this may take a while! fn bench_mime_str(c: &mut Criterion) { c.bench_function("from_ext", |b| { for (mime_ext, _) in MIME_TYPES { b.iter(|| from_ext(mime_ext).first_raw()); } }); } fn bench_mime_str_uppercase(c: &mut Criterion) { c.bench_function("from_ext uppercased", |b| { let uppercased = MIME_TYPES.into_iter().map(|(s, _)| s.to_uppercase()); for mime_ext in uppercased { b.iter(|| from_ext(&mime_ext).first_raw()); } }); } criterion_group!(benches, bench_mime_str, bench_mime_str_uppercase); criterion_main!(benches); mime_guess-2.0.1/build.rs010064400017500001750000000115251352210621300135340ustar0000000000000000#[cfg(feature = "phf")] extern crate phf_codegen; extern crate unicase; use unicase::UniCase; use std::env; use std::fs::File; use std::io::prelude::*; use std::io::BufWriter; use std::path::Path; use std::collections::BTreeMap; use mime_types::MIME_TYPES; #[path = "src/mime_types.rs"] mod mime_types; #[cfg(feature = "phf")] const PHF_PATH: &str = "::impl_::phf"; fn main() { let out_dir = env::var("OUT_DIR").unwrap(); let dest_path = Path::new(&out_dir).join("mime_types_generated.rs"); let mut outfile = BufWriter::new(File::create(dest_path).unwrap()); #[cfg(feature = "phf")] build_forward_map(&mut outfile); #[cfg(feature = "rev-mappings")] build_rev_map(&mut outfile); } // Build forward mappings (ext -> mime type) #[cfg(feature = "phf")] fn build_forward_map(out: &mut W) { use phf_codegen::Map as PhfMap; let mut forward_map = PhfMap::new(); forward_map.phf_path(PHF_PATH); let mut map_entries: Vec<(&str, Vec<&str>)> = Vec::new(); for &(key, types) in MIME_TYPES { if let Some(&mut (key_, ref mut values)) = map_entries.last_mut() { // deduplicate extensions if key == key_ { values.extend_from_slice(types); continue; } } map_entries.push((key, types.into())); } for (key, values) in map_entries { forward_map.entry( UniCase::new(key), &format!("&{:?}", values), ); } writeln!( out, "static MIME_TYPES: phf::Map, &'static [&'static str]> = \n{};", forward_map.build() ) .unwrap(); } // Build reverse mappings (mime type -> ext) #[cfg(all(feature = "phf", feature = "rev-mappings"))] fn build_rev_map(out: &mut W) { use phf_codegen::Map as PhfMap; let dyn_map = get_rev_mappings(); let mut rev_map = PhfMap::new(); rev_map.phf_path(PHF_PATH); let mut exts = Vec::new(); for (top, subs) in dyn_map { let top_start = exts.len(); let mut sub_map = PhfMap::new(); sub_map.phf_path(PHF_PATH); for (sub, sub_exts) in subs { let sub_start = exts.len(); exts.extend(sub_exts); let sub_end = exts.len(); sub_map.entry(sub, &format!("({}, {})", sub_start, sub_end)); } let top_end = exts.len(); rev_map.entry( top, &format!( "TopLevelExts {{ start: {}, end: {}, subs: {} }}", top_start, top_end, sub_map.build() ), ); } writeln!( out, "static REV_MAPPINGS: phf::Map, TopLevelExts> = \n{};", rev_map.build() ).unwrap(); writeln!(out, "const EXTS: &'static [&'static str] = &{:?};", exts).unwrap(); } #[cfg(all(not(feature = "phf"), feature = "rev-mappings"))] fn build_rev_map(out: &mut W) { use std::fmt::Write as _; macro_rules! unicase_const { ($s:expr) => ({ format_args!("{}({:?})", (if $s.is_ascii() { "UniCase::ascii" } else { "UniCase::unicode" }), $s) }) } let dyn_map = get_rev_mappings(); write!(out, "static REV_MAPPINGS: &'static [(UniCase<&'static str>, TopLevelExts)] = &[").unwrap(); let mut exts = Vec::new(); for (top, subs) in dyn_map { let top_start = exts.len(); let mut sub_map = String::new(); for (sub, sub_exts) in subs { let sub_start = exts.len(); exts.extend(sub_exts); let sub_end = exts.len(); write!( sub_map, "({}, ({}, {})),", unicase_const!(sub), sub_start, sub_end ).unwrap(); } let top_end = exts.len(); write!( out, "({}, TopLevelExts {{ start: {}, end: {}, subs: &[{}] }}),", unicase_const!(top), top_start, top_end, sub_map ).unwrap(); } writeln!(out, "];").unwrap(); writeln!(out, "const EXTS: &'static [&'static str] = &{:?};", exts).unwrap(); } #[cfg(feature = "rev-mappings")] fn get_rev_mappings( ) -> BTreeMap, BTreeMap, Vec<&'static str>>> { // First, collect all the mime type -> ext mappings) let mut dyn_map = BTreeMap::new(); for &(key, types) in MIME_TYPES { for val in types { let (top, sub) = split_mime(val); dyn_map .entry(UniCase::new(top)) .or_insert_with(BTreeMap::new) .entry(UniCase::new(sub)) .or_insert_with(Vec::new) .push(key); } } dyn_map } fn split_mime(mime: &str) -> (&str, &str) { let split_idx = mime.find('/').unwrap(); (&mime[..split_idx], &mime[split_idx + 1..]) } mime_guess-2.0.1/examples/rev_map.rs010064400017500001750000000004111350545437700157160ustar0000000000000000extern crate mime_guess; fn main() { print_exts("video/*"); print_exts("video/x-matroska"); } fn print_exts(mime_type: &str) { println!( "Exts for {:?}: {:?}", mime_type, mime_guess::get_mime_extensions_str(mime_type) ); } mime_guess-2.0.1/src/impl_bin_search.rs010064400017500001750000000020551352210621300163400ustar0000000000000000use unicase::UniCase; include!("mime_types.rs"); include!(concat!(env!("OUT_DIR"), "/mime_types_generated.rs")); #[cfg(feature = "rev-mappings")] #[derive(Copy, Clone)] struct TopLevelExts { start: usize, end: usize, subs: &'static [(UniCase<&'static str>, (usize, usize))], } pub fn get_mime_types(ext: &str) -> Option<&'static [&'static str]> { let ext = UniCase::new(ext); map_lookup(MIME_TYPES, &ext) } #[cfg(feature = "rev-mappings")] pub fn get_extensions(toplevel: &str, sublevel: &str) -> Option<&'static [&'static str]> { if toplevel == "*" { return Some(EXTS); } let top = map_lookup(REV_MAPPINGS, toplevel)?; if sublevel == "*" { return Some(&EXTS[top.start..top.end]); } let sub = map_lookup(&top.subs, sublevel)?; Some(&EXTS[sub.0..sub.1]) } fn map_lookup(map: &'static [(K, V)], key: &str) -> Option where K: Copy + Into>, V: Copy { map.binary_search_by_key(&UniCase::new(key), |(k, _)| (*k).into()) .ok() .map(|i| map[i].1) } mime_guess-2.0.1/src/impl_phf.rs010064400017500001750000000020241352210621300150140ustar0000000000000000extern crate phf; use unicase::UniCase; include!(concat!(env!("OUT_DIR"), "/mime_types_generated.rs")); #[cfg(feature = "rev-mappings")] struct TopLevelExts { start: usize, end: usize, subs: phf::Map, (usize, usize)>, } pub fn get_mime_types(ext: &str) -> Option<&'static [&'static str]> { map_lookup(&MIME_TYPES, ext).cloned() } pub fn get_extensions(toplevel: &str, sublevel: &str) -> Option<&'static [&'static str]> { if toplevel == "*" { return Some(EXTS); } let top = map_lookup(&REV_MAPPINGS, toplevel)?; if sublevel == "*" { return Some(&EXTS[top.start..top.end]); } let sub = map_lookup(&top.subs, sublevel)?; Some(&EXTS[sub.0..sub.1]) } fn map_lookup<'key, 'map: 'key, V>( map: &'map phf::Map, V>, key: &'key str, ) -> Option<&'map V> { // FIXME: this doesn't compile unless we transmute `key` to `UniCase<&'static str>` // https://github.com/sfackler/rust-phf/issues/169 map.get(&UniCase::new(key)) } mime_guess-2.0.1/src/lib.rs010064400017500001750000000423521352211276100140010ustar0000000000000000//! Guessing of MIME types by file extension. //! //! Uses a static list of file-extension : MIME type mappings. //! //! ``` //! # extern crate mime; //! // the file doesn't have to exist, it just looks at the path //! let guess = mime_guess::from_path("some_file.gif"); //! assert_eq!(guess.first(), Some(mime::IMAGE_GIF)); //! //! ``` //! //! #### Note: MIME Types Returned Are Not Stable/Guaranteed //! The media types returned for a given extension are not considered to be part of the crate's //! stable API and are often updated in patch
(`x.y.[z + 1]`) releases to be as correct as //! possible. //! //! Additionally, only the extensions of paths/filenames are inspected in order to guess the MIME //! type. The file that may or may not reside at that path may or may not be a valid file of the //! returned MIME type. Be wary of unsafe or un-validated assumptions about file structure or //! length. pub extern crate mime; extern crate unicase; pub use mime::Mime; use std::ffi::OsStr; use std::iter::FusedIterator; use std::path::Path; use std::{iter, slice}; #[cfg(feature = "phf")] #[path = "impl_phf.rs"] mod impl_; #[cfg(not(feature = "phf"))] #[path = "impl_bin_search.rs"] mod impl_; /// A "guess" of the MIME/Media Type(s) of an extension or path as one or more /// [`Mime`](struct.Mime.html) instances. /// /// ### Note: Ordering /// A given file format may have one or more applicable Media Types; in this case /// the first Media Type returned is whatever is declared in the latest IETF RFC for the /// presumed file format or the one that explicitly supercedes all others. /// Ordering of additional Media Types is arbitrary. /// /// ### Note: Values Not Stable /// The exact Media Types returned in any given guess are not considered to be stable and are often /// updated in patch releases in order to reflect the most up-to-date information possible. #[derive(Copy, Clone, Debug, PartialEq, Eq)] // FIXME: change repr when `mime` gains macro/const fn constructor pub struct MimeGuess(&'static [&'static str]); impl MimeGuess { /// Guess the MIME type of a file (real or otherwise) with the given extension. /// /// The search is case-insensitive. /// /// If `ext` is empty or has no (currently) known MIME type mapping, then an empty guess is /// returned. pub fn from_ext(ext: &str) -> MimeGuess { if ext.is_empty() { return MimeGuess(&[]); } impl_::get_mime_types(ext).map_or(MimeGuess(&[]), |v| MimeGuess(v)) } /// Guess the MIME type of `path` by its extension (as defined by /// [`Path::extension()`]). **No disk access is performed.** /// /// If `path` has no extension, the extension cannot be converted to `str`, or has /// no known MIME type mapping, then an empty guess is returned. /// /// The search is case-insensitive. /// /// ## Note /// **Guess** is the operative word here, as there are no guarantees that the contents of the /// file that `path` points to match the MIME type associated with the path's extension. /// /// Take care when processing files with assumptions based on the return value of this function. /// /// [`Path::extension()`]: https://doc.rust-lang.org/std/path/struct.Path.html#method.extension pub fn from_path>(path: P) -> MimeGuess { path.as_ref() .extension() .and_then(OsStr::to_str) .map_or(MimeGuess(&[]), Self::from_ext) } /// `true` if the guess did not return any known mappings for the given path or extension. pub fn is_empty(&self) -> bool { self.0.is_empty() } /// Get the number of MIME types in the current guess. pub fn count(&self) -> usize { self.0.len() } /// Get the first guessed `Mime`, if applicable. /// /// See [Note: Ordering](#note-ordering) above. pub fn first(&self) -> Option { self.first_raw().map(expect_mime) } /// Get the first guessed Media Type as a string, if applicable. /// /// See [Note: Ordering](#note-ordering) above. pub fn first_raw(&self) -> Option<&'static str> { self.0.get(0).cloned() } /// Get the first guessed `Mime`, or if the guess is empty, return /// [`application/octet-stream`] instead. /// /// See [Note: Ordering](#note-ordering) above. /// /// ### Note: HTTP Applications /// For HTTP request and response bodies if a value for the `Content-Type` header /// cannot be determined it might be preferable to not send one at all instead of defaulting to /// `application/content-stream` as the recipient will expect to infer the format directly from /// the content instead. ([RFC 7231, Section 3.1.1.5][rfc7231]) /// /// On the contrary, for `multipart/form-data` bodies, the `Content-Type` of a form-data part is /// assumed to be `text/plain` unless specified so a default of `application/content-stream` /// for non-text parts is safer. ([RFC 7578, Section 4.4][rfc7578]) /// /// [`application/octet-stream`]: https://docs.rs/mime/0.3/mime/constant.APPLICATION_OCTET_STREAM.html /// [rfc7231]: https://tools.ietf.org/html/rfc7231#section-3.1.1.5 /// [rfc7578]: https://tools.ietf.org/html/rfc7578#section-4.4 pub fn first_or_octet_stream(&self) -> Mime { self.first_or(mime::APPLICATION_OCTET_STREAM) } /// Get the first guessed `Mime`, or if the guess is empty, return /// [`text/plain`](::mime::TEXT_PLAIN) instead. /// /// See [Note: Ordering](#note-ordering) above. pub fn first_or_text_plain(&self) -> Mime { self.first_or(mime::TEXT_PLAIN) } /// Get the first guessed `Mime`, or if the guess is empty, return the given `Mime` instead. /// /// See [Note: Ordering](#note-ordering) above. pub fn first_or(&self, default: Mime) -> Mime { self.first().unwrap_or(default) } /// Get the first guessed `Mime`, or if the guess is empty, execute the closure and return its /// result. /// /// See [Note: Ordering](#note-ordering) above. pub fn first_or_else(&self, default_fn: F) -> Mime where F: FnOnce() -> Mime, { self.first().unwrap_or_else(default_fn) } /// Get an iterator over the `Mime` values contained in this guess. /// /// See [Note: Ordering](#note-ordering) above. pub fn iter(&self) -> Iter { Iter(self.iter_raw().map(expect_mime)) } /// Get an iterator over the raw media-type strings in this guess. /// /// See [Note: Ordering](#note-ordering) above. pub fn iter_raw(&self) -> IterRaw { IterRaw(self.0.iter().cloned()) } } impl IntoIterator for MimeGuess { type Item = Mime; type IntoIter = Iter; fn into_iter(self) -> Self::IntoIter { self.iter() } } impl<'a> IntoIterator for &'a MimeGuess { type Item = Mime; type IntoIter = Iter; fn into_iter(self) -> Self::IntoIter { self.iter() } } /// An iterator over the `Mime` types of a `MimeGuess`. /// /// See [Note: Ordering on `MimeGuess`](struct.MimeGuess.html#note-ordering). #[derive(Clone, Debug)] pub struct Iter(iter::Map Mime>); impl Iterator for Iter { type Item = Mime; fn next(&mut self) -> Option { self.0.next() } fn size_hint(&self) -> (usize, Option) { self.0.size_hint() } } impl DoubleEndedIterator for Iter { fn next_back(&mut self) -> Option { self.0.next_back() } } impl FusedIterator for Iter {} impl ExactSizeIterator for Iter { fn len(&self) -> usize { self.0.len() } } /// An iterator over the raw media type strings of a `MimeGuess`. /// /// See [Note: Ordering on `MimeGuess`](struct.MimeGuess.html#note-ordering). #[derive(Clone, Debug)] pub struct IterRaw(iter::Cloned>); impl Iterator for IterRaw { type Item = &'static str; fn next(&mut self) -> Option { self.0.next() } fn size_hint(&self) -> (usize, Option) { self.0.size_hint() } } impl DoubleEndedIterator for IterRaw { fn next_back(&mut self) -> Option { self.0.next_back() } } impl FusedIterator for IterRaw {} impl ExactSizeIterator for IterRaw { fn len(&self) -> usize { self.0.len() } } fn expect_mime(s: &str) -> Mime { // `.parse()` should be checked at compile time to never fail s.parse() .unwrap_or_else(|e| panic!("failed to parse media-type {:?}: {}", s, e)) } /// Wrapper of [`MimeGuess::from_ext()`](struct.MimeGuess.html#method.from_ext). pub fn from_ext(ext: &str) -> MimeGuess { MimeGuess::from_ext(ext) } /// Wrapper of [`MimeGuess::from_path()`](struct.MimeGuess.html#method.from_path). pub fn from_path>(path: P) -> MimeGuess { MimeGuess::from_path(path) } /// Guess the MIME type of `path` by its extension (as defined by `Path::extension()`). /// /// If `path` has no extension, or its extension has no known MIME type mapping, /// then the MIME type is assumed to be `application/octet-stream`. /// /// ## Note /// **Guess** is the operative word here, as there are no guarantees that the contents of the file /// that `path` points to match the MIME type associated with the path's extension. /// /// Take care when processing files with assumptions based on the return value of this function. /// /// In HTTP applications, it might be [preferable][rfc7231] to not send a `Content-Type` /// header at all instead of defaulting to `application/content-stream`. /// /// [rfc7231]: https://tools.ietf.org/html/rfc7231#section-3.1.1.5 #[deprecated( since = "2.0.0", note = "Use `from_path(path).first_or_octet_stream()` instead" )] pub fn guess_mime_type>(path: P) -> Mime { from_path(path).first_or_octet_stream() } /// Guess the MIME type of `path` by its extension (as defined by `Path::extension()`). /// /// If `path` has no extension, or its extension has no known MIME type mapping, /// then `None` is returned. /// #[deprecated(since = "2.0.0", note = "Use `from_path(path).first()` instead")] pub fn guess_mime_type_opt>(path: P) -> Option { from_path(path).first() } /// Guess the MIME type string of `path` by its extension (as defined by `Path::extension()`). /// /// If `path` has no extension, or its extension has no known MIME type mapping, /// then `None` is returned. /// /// ## Note /// **Guess** is the operative word here, as there are no guarantees that the contents of the file /// that `path` points to match the MIME type associated with the path's extension. /// /// Take care when processing files with assumptions based on the return value of this function. #[deprecated(since = "2.0.0", note = "Use `from_path(path).first_raw()` instead")] pub fn mime_str_for_path_ext>(path: P) -> Option<&'static str> { from_path(path).first_raw() } /// Get the MIME type associated with a file extension. /// /// If there is no association for the extension, or `ext` is empty, /// `application/octet-stream` is returned. /// /// ## Note /// In HTTP applications, it might be [preferable][rfc7231] to not send a `Content-Type` /// header at all instead of defaulting to `application/content-stream`. /// /// [rfc7231]: https://tools.ietf.org/html/rfc7231#section-3.1.1.5 #[deprecated( since = "2.0.0", note = "use `from_ext(search_ext).first_or_octet_stream()` instead" )] pub fn get_mime_type(search_ext: &str) -> Mime { from_ext(search_ext).first_or_octet_stream() } /// Get the MIME type associated with a file extension. /// /// If there is no association for the extension, or `ext` is empty, /// `None` is returned. #[deprecated(since = "2.0.0", note = "use `from_ext(search_ext).first()` instead")] pub fn get_mime_type_opt(search_ext: &str) -> Option { from_ext(search_ext).first() } /// Get the MIME type string associated with a file extension. Case-insensitive. /// /// If `search_ext` is not already lowercase, /// it will be converted to lowercase to facilitate the search. /// /// Returns `None` if `search_ext` is empty or an associated extension was not found. #[deprecated( since = "2.0.0", note = "use `from_ext(search_ext).first_raw()` instead" )] pub fn get_mime_type_str(search_ext: &str) -> Option<&'static str> { from_ext(search_ext).first_raw() } /// Get a list of known extensions for a given `Mime`. /// /// Ignores parameters (only searches with `
/`). Case-insensitive (for extension types). /// /// Returns `None` if the MIME type is unknown. /// /// ### Wildcards /// If the top-level of the MIME type is a wildcard (`*`), returns all extensions. /// /// If the sub-level of the MIME type is a wildcard, returns all extensions for the top-level. #[cfg(feature = "rev-mappings")] pub fn get_mime_extensions(mime: &Mime) -> Option<&'static [&'static str]> { get_extensions(mime.type_().as_ref(), mime.subtype().as_ref()) } /// Get a list of known extensions for a MIME type string. /// /// Ignores parameters (only searches `
/`). Case-insensitive. /// /// Returns `None` if the MIME type is unknown. /// /// ### Wildcards /// If the top-level of the MIME type is a wildcard (`*`), returns all extensions. /// /// If the sub-level of the MIME type is a wildcard, returns all extensions for the top-level. /// /// ### Panics /// If `mime_str` is not a valid MIME type specifier (naive). #[cfg(feature = "rev-mappings")] pub fn get_mime_extensions_str(mut mime_str: &str) -> Option<&'static [&'static str]> { mime_str = mime_str.trim(); if let Some(sep_idx) = mime_str.find(';') { mime_str = &mime_str[..sep_idx]; } let (top, sub) = { let split_idx = mime_str.find('/').unwrap(); (&mime_str[..split_idx], &mime_str[split_idx + 1..]) }; get_extensions(top, sub) } /// Get the extensions for a given top-level and sub-level of a MIME type /// (`{toplevel}/{sublevel}`). /// /// Returns `None` if `toplevel` or `sublevel` are unknown. /// /// ### Wildcards /// If the top-level of the MIME type is a wildcard (`*`), returns all extensions. /// /// If the sub-level of the MIME type is a wildcard, returns all extensions for the top-level. #[cfg(feature = "rev-mappings")] pub fn get_extensions(toplevel: &str, sublevel: &str) -> Option<&'static [&'static str]> { impl_::get_extensions(toplevel, sublevel) } /// Get the MIME type for `application/octet-stream` (generic binary stream) #[deprecated(since = "2.0.0", note = "use `mime::APPLICATION_OCTET_STREAM` instead")] pub fn octet_stream() -> Mime { "application/octet-stream".parse().unwrap() } #[cfg(test)] mod tests { include!("mime_types.rs"); use super::{from_ext, from_path, expect_mime}; #[allow(deprecated, unused_imports)] use std::ascii::AsciiExt; use std::fmt::Debug; use std::path::Path; #[test] fn check_type_bounds() { fn assert_type_bounds() {} assert_type_bounds::(); assert_type_bounds::(); assert_type_bounds::(); } #[test] fn test_mime_type_guessing() { assert_eq!( from_ext("gif").first_or_octet_stream().to_string(), "image/gif".to_string() ); assert_eq!( from_ext("TXT").first_or_octet_stream().to_string(), "text/plain".to_string() ); assert_eq!( from_ext("blahblah").first_or_octet_stream().to_string(), "application/octet-stream".to_string() ); assert_eq!( from_path(Path::new("/path/to/file.gif")) .first_or_octet_stream() .to_string(), "image/gif".to_string() ); assert_eq!( from_path("/path/to/file.gif").first_or_octet_stream().to_string(), "image/gif".to_string() ); } #[test] fn test_mime_type_guessing_opt() { assert_eq!( from_ext("gif").first().unwrap().to_string(), "image/gif".to_string() ); assert_eq!( from_ext("TXT").first().unwrap().to_string(), "text/plain".to_string() ); assert_eq!(from_ext("blahblah").first(), None); assert_eq!( from_path("/path/to/file.gif").first().unwrap().to_string(), "image/gif".to_string() ); assert_eq!(from_path("/path/to/file").first(), None); } #[test] fn test_are_mime_types_parseable() { for (_, mimes) in MIME_TYPES { mimes.iter().for_each(|s| { expect_mime(s); }); } } // RFC: Is this test necessary anymore? --@cybergeek94, 2/1/2016 #[test] fn test_are_extensions_ascii() { for (ext, _) in MIME_TYPES { assert!(ext.is_ascii(), "Extension not ASCII: {:?}", ext); } } #[test] fn test_are_extensions_sorted() { // simultaneously checks the requirement that duplicate extension entries are adjacent for (&(ext, _), &(n_ext, _)) in MIME_TYPES.iter().zip(MIME_TYPES.iter().skip(1)) { assert!( ext <= n_ext, "Extensions in src/mime_types should be sorted lexicographically in ascending order. Failed assert: {:?} <= {:?}", ext, n_ext ); } } } mime_guess-2.0.1/src/mime_types.rs010064400017500001750000001653221352210621300154040ustar0000000000000000// Probably not exhaustive; keep updated. /// A mapping of known file extensions and their MIME types. /// /// Required to be sorted lexicographically by extension for ease of maintenance. /// /// Multiple MIME types per extension are allowed but MUST be adjacent to each other; the /// order is arbitrary but the first should be the most prevalent by most recent RFC declaration /// or explicit succession of other media types. /// /// As of release 2.0.0, new and modified mappings should have citations provided inline /// in order to provide an audit trail that's easier to follow than Git commit history. /// /// Sourced from: /// https://github.com/samuelneff/MimeTypeMap/blob/master/src/MimeTypes/MimeTypeMap.cs /// https://github.com/jshttp/mime-db extracted with https://gist.github.com/soyuka/b7e29d359b2c14c21bdead923c01cc81 pub static MIME_TYPES: &[(&str, &[&str])] = &[ ("123", &["application/vnd.lotus-1-2-3"]), ("323", &["text/h323"]), ("3dml", &["text/vnd.in3d.3dml"]), ("3ds", &["image/x-3ds"]), ("3g2", &["video/3gpp2"]), ("3gp", &["video/3gpp"]), ("3gp2", &["video/3gpp2"]), ("3gpp", &["video/3gpp"]), ("7z", &["application/x-7z-compressed"]), ("aa", &["audio/audible"]), ("aab", &["application/x-authorware-bin"]), ("aac", &["audio/aac"]), ("aaf", &["application/octet-stream"]), ("aam", &["application/x-authorware-map"]), ("aas", &["application/x-authorware-seg"]), ("aax", &["audio/vnd.audible.aax"]), ("abw", &["application/x-abiword"]), ("ac", &["application/pkix-attr-cert"]), ("ac3", &["audio/ac3"]), ("aca", &["application/octet-stream"]), ("acc", &["application/vnd.americandynamics.acc"]), ("accda", &["application/msaccess.addin"]), ("accdb", &["application/msaccess"]), ("accdc", &["application/msaccess.cab"]), ("accde", &["application/msaccess"]), ("accdr", &["application/msaccess.runtime"]), ("accdt", &["application/msaccess"]), ("accdw", &["application/msaccess.webapplication"]), ("accft", &["application/msaccess.ftemplate"]), ("ace", &["application/x-ace-compressed"]), ("acu", &["application/vnd.acucobol"]), ("acutc", &["application/vnd.acucorp"]), ("acx", &["application/internet-property-stream"]), ("addin", &["text/xml"]), ("ade", &["application/msaccess"]), ("adobebridge", &["application/x-bridge-url"]), ("adp", &["application/msaccess"]), ("adt", &["audio/vnd.dlna.adts"]), ("adts", &["audio/aac"]), ("aep", &["application/vnd.audiograph"]), ("afm", &["application/octet-stream"]), ("afp", &["application/vnd.ibm.modcap"]), ("ahead", &["application/vnd.ahead.space"]), ("ai", &["application/postscript"]), ("aif", &["audio/aiff"]), ("aifc", &["audio/aiff"]), ("aiff", &["audio/aiff"]), ( "air", &["application/vnd.adobe.air-application-installer-package+zip"], ), ("ait", &["application/vnd.dvb.ait"]), ("amc", &["application/mpeg"]), ("ami", &["application/vnd.amiga.ami"]), ("anx", &["application/annodex"]), ("apk", &["application/vnd.android.package-archive"]), ("apng", &["image/apng"]), ("appcache", &["text/cache-manifest"]), ("application", &["application/x-ms-application"]), ("apr", &["application/vnd.lotus-approach"]), ("arc", &["application/x-freearc"]), ("arj", &["application/x-arj"]), ("art", &["image/x-jg"]), ("asa", &["application/xml"]), ("asax", &["application/xml"]), ("asc", &["application/pgp-signature"]), ("ascx", &["application/xml"]), ("asd", &["application/octet-stream"]), ("asf", &["video/x-ms-asf"]), ("ashx", &["application/xml"]), ("asi", &["application/octet-stream"]), ("asm", &["text/plain"]), ("asmx", &["application/xml"]), ("aso", &["application/vnd.accpac.simply.aso"]), ("aspx", &["application/xml"]), ("asr", &["video/x-ms-asf"]), ("asx", &["video/x-ms-asf"]), ("atc", &["application/vnd.acucorp"]), ("atom", &["application/atom+xml"]), ("atomcat", &["application/atomcat+xml"]), ("atomsvc", &["application/atomsvc+xml"]), ("atx", &["application/vnd.antix.game-component"]), ("au", &["audio/basic"]), ("avi", &["video/x-msvideo"]), ("aw", &["application/applixware"]), ("axa", &["audio/annodex"]), ("axs", &["application/olescript"]), ("axv", &["video/annodex"]), ("azf", &["application/vnd.airzip.filesecure.azf"]), ("azs", &["application/vnd.airzip.filesecure.azs"]), ("azw", &["application/vnd.amazon.ebook"]), ("bas", &["text/plain"]), ("bat", &["application/x-msdownload"]), ("bcpio", &["application/x-bcpio"]), ("bdf", &["application/x-font-bdf"]), ("bdm", &["application/vnd.syncml.dm+wbxml"]), ("bdoc", &["application/bdoc"]), ("bed", &["application/vnd.realvnc.bed"]), ("bh2", &["application/vnd.fujitsu.oasysprs"]), ("bin", &["application/octet-stream"]), ("blb", &["application/x-blorb"]), ("blorb", &["application/x-blorb"]), ("bmi", &["application/vnd.bmi"]), ("bmp", &["image/bmp"]), ("book", &["application/vnd.framemaker"]), ("box", &["application/vnd.previewsystems.box"]), ("boz", &["application/x-bzip2"]), ("bpk", &["application/octet-stream"]), ("btif", &["image/prs.btif"]), ("buffer", &["application/octet-stream"]), ("bz", &["application/x-bzip"]), ("bz2", &["application/x-bzip2"]), ("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"]), ("cab", &["application/octet-stream"]), ("caf", &["audio/x-caf"]), ("calx", &["application/vnd.ms-office.calx"]), ("cap", &["application/vnd.tcpdump.pcap"]), ("car", &["application/vnd.curl.car"]), ("cat", &["application/vnd.ms-pki.seccat"]), ("cb7", &["application/x-cbr"]), ("cba", &["application/x-cbr"]), ("cbr", &["application/x-cbr"]), ("cbt", &["application/x-cbr"]), ("cbz", &["application/x-cbr"]), ("cc", &["text/plain"]), ("cco", &["application/x-cocoa"]), ("cct", &["application/x-director"]), ("ccxml", &["application/ccxml+xml"]), ("cd", &["text/plain"]), ("cdbcmsg", &["application/vnd.contact.cmsg"]), ("cdda", &["audio/aiff"]), ("cdf", &["application/x-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"]), ("cdxml", &["application/vnd.chemdraw+xml"]), ("cdy", &["application/vnd.cinderella"]), ("cer", &["application/x-x509-ca-cert"]), ("cfg", &["text/plain"]), ("cfs", &["application/x-cfs-compressed"]), ("cgm", &["image/cgm"]), ("chat", &["application/x-chat"]), ("chm", &["application/octet-stream"]), ("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"]), ("class", &["application/x-java-applet"]), ("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"]), ("cmd", &["text/plain"]), ("cmdf", &["chemical/x-cmdf"]), ("cml", &["chemical/x-cml"]), ("cmp", &["application/vnd.yellowriver-custom-menu"]), ("cmx", &["image/x-cmx"]), ("cnf", &["text/plain"]), ("cod", &["image/cis-cod"]), ("coffee", &["text/coffeescript"]), ("com", &["application/x-msdownload"]), ("conf", &["text/plain"]), ("config", &["application/xml"]), ("contact", &["text/x-ms-contact"]), ("coverage", &["application/xml"]), ("cpio", &["application/x-cpio"]), ("cpp", &["text/plain"]), ("cpt", &["application/mac-compactpro"]), ("crd", &["application/x-mscardfile"]), ("crl", &["application/pkix-crl"]), ("crt", &["application/x-x509-ca-cert"]), ("crx", &["application/x-chrome-extension"]), ("cryptonote", &["application/vnd.rig.cryptonote"]), ("cs", &["text/plain"]), ("csdproj", &["text/plain"]), ("csh", &["application/x-csh"]), ("csl", &["application/vnd.citationstyles.style+xml"]), ("csml", &["chemical/x-csml"]), ("csp", &["application/vnd.commonspace"]), ("csproj", &["text/plain"]), ("css", &["text/css"]), ("cst", &["application/x-director"]), ("csv", &["text/csv"]), ("cu", &["application/cu-seeme"]), ("cur", &["application/octet-stream"]), ("curl", &["text/vnd.curl"]), ("cww", &["application/prs.cww"]), ("cxt", &["application/x-director"]), ("cxx", &["text/plain"]), ("dae", &["model/vnd.collada+xml"]), ("daf", &["application/vnd.mobius.daf"]), ("dart", &["application/vnd.dart"]), ("dat", &["application/octet-stream"]), ("dataless", &["application/vnd.fdsn.seed"]), ("datasource", &["application/xml"]), ("davmount", &["application/davmount+xml"]), ("dbk", &["application/docbook+xml"]), ("dbproj", &["text/plain"]), ("dcr", &["application/x-director"]), ("dcurl", &["text/vnd.curl.dcurl"]), ("dd2", &["application/vnd.oma.dd2+xml"]), ("ddd", &["application/vnd.fujixerox.ddd"]), ("deb", &["application/octet-stream"]), ("def", &["text/plain"]), ("deploy", &["application/octet-stream"]), ("der", &["application/x-x509-ca-cert"]), ("dfac", &["application/vnd.dreamfactory"]), ("dgc", &["application/x-dgc-compressed"]), ("dgml", &["application/xml"]), ("dib", &["image/bmp"]), ("dic", &["text/x-c"]), ("dif", &["video/x-dv"]), ("dir", &["application/x-director"]), ("dis", &["application/vnd.mobius.dis"]), ("disco", &["text/xml"]), ( "disposition-notification", &["message/disposition-notification"], ), ("dist", &["application/octet-stream"]), ("distz", &["application/octet-stream"]), ("divx", &["video/divx"]), ("djv", &["image/vnd.djvu"]), ("djvu", &["image/vnd.djvu"]), ("dll", &["application/x-msdownload"]), ("dll.config", &["text/xml"]), ("dlm", &["text/dlm"]), ("dmg", &["application/octet-stream"]), ("dmp", &["application/vnd.tcpdump.pcap"]), ("dms", &["application/octet-stream"]), ("dna", &["application/vnd.dna"]), ("doc", &["application/msword"]), ( "docm", &["application/vnd.ms-word.document.macroEnabled.12"], ), ( "docx", &["application/vnd.openxmlformats-officedocument.wordprocessingml.document"], ), ("dot", &["application/msword"]), ( "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"]), ("dsc", &["text/prs.lines.tag"]), ("dsp", &["application/octet-stream"]), ("dssc", &["application/dssc+der"]), ("dsw", &["text/plain"]), ("dtb", &["application/x-dtbook+xml"]), ("dtd", &["text/xml"]), ("dts", &["audio/vnd.dts"]), ("dtsconfig", &["text/xml"]), ("dtshd", &["audio/vnd.dts.hd"]), ("dump", &["application/octet-stream"]), ("dv", &["video/x-dv"]), ("dvb", &["video/vnd.dvb.file"]), ("dvi", &["application/x-dvi"]), ("dwf", &["drawing/x-dwf"]), ("dwg", &["application/acad"]), ("dwp", &["application/octet-stream"]), ("dxf", &["application/x-dxf"]), ("dxp", &["application/vnd.spotfire.dxp"]), ("dxr", &["application/x-director"]), ("ear", &["application/java-archive"]), ("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/octet-stream"]), ("emf", &["application/x-msmetafile"]), ("eml", &["message/rfc822"]), ("emma", &["application/emma+xml"]), ("emz", &["application/octet-stream"]), ("eol", &["audio/vnd.digital-winds"]), ("eot", &["application/vnd.ms-fontobject"]), ("eps", &["application/postscript"]), ("epub", &["application/epub+zip"]), ("es", &["application/ecmascript"]), ("es3", &["application/vnd.eszigno3+xml"]), ("esa", &["application/vnd.osgi.subsystem"]), ("esf", &["application/vnd.epson.esf"]), ("et3", &["application/vnd.eszigno3+xml"]), ("etl", &["application/etl"]), ("etx", &["text/x-setext"]), ("eva", &["application/x-eva"]), ("evy", &["application/envoy"]), ("exe", &["application/octet-stream"]), ("exe.config", &["text/xml"]), ("exi", &["application/exi"]), ("ext", &["application/vnd.novadigm.ext"]), ("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", &["application/fractals"]), ("fig", &["application/x-xfig"]), ("filters", &["application/xml"]), ("fla", &["application/octet-stream"]), ("flac", &["audio/flac"]), ("fli", &["video/x-fli"]), ("flo", &["application/vnd.micrografx.flo"]), ("flr", &["x-world/x-vrml"]), ("flv", &["video/x-flv"]), ("flw", &["application/vnd.kde.kivio"]), ("flx", &["text/vnd.fmi.flexstor"]), ("fly", &["text/vnd.fly"]), ("fm", &["application/vnd.framemaker"]), ("fnc", &["application/vnd.frogans.fnc"]), ("for", &["text/x-fortran"]), ("fpx", &["image/vnd.fpx"]), ("frame", &["application/vnd.framemaker"]), ("fsc", &["application/vnd.fsc.weblaunch"]), ("fsscript", &["application/fsharp-script"]), ("fst", &["image/vnd.fst"]), ("fsx", &["application/fsharp-script"]), ("ftc", &["application/vnd.fluxtime.clip"]), ( "fti", &["application/vnd.anser-web-funds-transfer-initiation"], ), ("fvt", &["video/vnd.fvt"]), ("fxp", &["application/vnd.adobe.fxp"]), ("fxpl", &["application/vnd.adobe.fxp"]), ("fzs", &["application/vnd.fuzzysheet"]), ("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"]), ("gdl", &["model/vnd.gdl"]), ("gdoc", &["application/vnd.google-apps.document"]), ("generictest", &["application/xml"]), ("geo", &["application/vnd.dynageo"]), ("geojson", &["application/geo+json"]), ("gex", &["application/vnd.geometry-explorer"]), ("ggb", &["application/vnd.geogebra.file"]), ("ggt", &["application/vnd.geogebra.tool"]), ("ghf", &["application/vnd.groove-help"]), ("gif", &["image/gif"]), ("gim", &["application/vnd.groove-identity-message"]), ("glb", &["model/gltf-binary"]), ("gltf", &["model/gltf+json"]), ("gml", &["application/gml+xml"]), ("gmx", &["application/vnd.gmx"]), ("gnumeric", &["application/x-gnumeric"]), ("gph", &["application/vnd.flographit"]), ("gpx", &["application/gpx+xml"]), ("gqf", &["application/vnd.grafeq"]), ("gqs", &["application/vnd.grafeq"]), ("gram", &["application/srgs"]), ("gramps", &["application/x-gramps-xml"]), ("gre", &["application/vnd.geometry-explorer"]), ("group", &["text/x-ms-group"]), ("grv", &["application/vnd.groove-injector"]), ("grxml", &["application/srgs+xml"]), ("gsf", &["application/x-font-ghostscript"]), ("gsheet", &["application/vnd.google-apps.spreadsheet"]), ("gslides", &["application/vnd.google-apps.presentation"]), ("gsm", &["audio/x-gsm"]), ("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"]), ("gz", &["application/x-gzip"]), ("h", &["text/plain"]), ("h261", &["video/h261"]), ("h263", &["video/h263"]), ("h264", &["video/h264"]), ("hal", &["application/vnd.hal+xml"]), ("hbci", &["application/vnd.hbci"]), ("hbs", &["text/x-handlebars-template"]), ("hdd", &["application/x-virtualbox-hdd"]), ("hdf", &["application/x-hdf"]), ("hdml", &["text/x-hdml"]), ("hdr", &["image/vnd.radiance"]), ("hh", &["text/plain"]), ("hhc", &["application/x-oleobject"]), ("hhk", &["application/octet-stream"]), ("hhp", &["application/octet-stream"]), ("hjson", &["application/hjson"]), ("hlp", &["application/winhlp"]), ("hpgl", &["application/vnd.hp-hpgl"]), ("hpid", &["application/vnd.hp-hpid"]), ("hpp", &["text/plain"]), ("hps", &["application/vnd.hp-hps"]), ("hqx", &["application/mac-binhex40"]), ("hta", &["application/hta"]), ("htc", &["text/x-component"]), ("htke", &["application/vnd.kenameaapp"]), ("htm", &["text/html"]), ("html", &["text/html"]), ("htt", &["text/webviewhtml"]), ("hvd", &["application/vnd.yamaha.hv-dic"]), ("hvp", &["application/vnd.yamaha.hv-voice"]), ("hvs", &["application/vnd.yamaha.hv-script"]), ("hxa", &["application/xml"]), ("hxc", &["application/xml"]), ("hxd", &["application/octet-stream"]), ("hxe", &["application/xml"]), ("hxf", &["application/xml"]), ("hxh", &["application/octet-stream"]), ("hxi", &["application/octet-stream"]), ("hxk", &["application/xml"]), ("hxq", &["application/octet-stream"]), ("hxr", &["application/octet-stream"]), ("hxs", &["application/octet-stream"]), ("hxt", &["text/html"]), ("hxv", &["application/xml"]), ("hxw", &["application/octet-stream"]), ("hxx", &["text/plain"]), ("i", &["text/plain"]), ("i2g", &["application/vnd.intergeo"]), ("icc", &["application/vnd.iccprofile"]), ("ice", &["x-conference/x-cooltalk"]), ("icm", &["application/vnd.iccprofile"]), ("ico", &["image/x-icon"]), ("ics", &["application/octet-stream"]), ("idl", &["text/plain"]), ("ief", &["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"]), ("iii", &["application/x-iphone"]), ("img", &["application/octet-stream"]), ("imp", &["application/vnd.accpac.simply.imp"]), ("ims", &["application/vnd.ms-ims"]), ("in", &["text/plain"]), ("inc", &["text/plain"]), ("inf", &["application/octet-stream"]), ("ini", &["text/plain"]), ("ink", &["application/inkml+xml"]), ("inkml", &["application/inkml+xml"]), ("inl", &["text/plain"]), ("ins", &["application/x-internet-signup"]), ("install", &["application/x-install-instructions"]), ("iota", &["application/vnd.astraea-software.iota"]), ("ipa", &["application/x-itunes-ipa"]), ("ipfix", &["application/ipfix"]), ("ipg", &["application/x-itunes-ipg"]), ("ipk", &["application/vnd.shana.informed.package"]), ("ipproj", &["text/plain"]), ("ipsw", &["application/x-itunes-ipsw"]), ("iqy", &["text/x-ms-iqy"]), ("irm", &["application/vnd.ibm.rights-management"]), ("irp", &["application/vnd.irepository.package+xml"]), ("iso", &["application/octet-stream"]), ("isp", &["application/x-internet-signup"]), ("ite", &["application/x-itunes-ite"]), ("itlp", &["application/x-itunes-itlp"]), ("itms", &["application/x-itunes-itms"]), ("itp", &["application/vnd.shana.informed.formtemplate"]), ("itpc", &["application/x-itunes-itpc"]), ("ivf", &["video/x-ivf"]), ("ivp", &["application/vnd.immervision-ivp"]), ("ivu", &["application/vnd.immervision-ivu"]), ("jad", &["text/vnd.sun.j2me.app-descriptor"]), ("jade", &["text/jade"]), ("jam", &["application/vnd.jam"]), ("jar", &["application/java-archive"]), ("jardiff", &["application/x-java-archive-diff"]), ("java", &["application/octet-stream"]), ("jck", &["application/liquidmotion"]), ("jcz", &["application/liquidmotion"]), ("jfif", &["image/pjpeg"]), ("jisp", &["application/vnd.jisp"]), ("jlt", &["application/vnd.hp-jlyt"]), ("jng", &["image/x-jng"]), ("jnlp", &["application/x-java-jnlp-file"]), ("joda", &["application/vnd.joost.joda-archive"]), ("jp2", &["image/jp2"]), ("jpb", &["application/octet-stream"]), ("jpe", &["image/jpeg"]), ("jpeg", &["image/jpeg"]), ("jpf", &["image/jpx"]), ("jpg", &["image/jpeg"]), ("jpg2", &["image/jp2"]), ("jpgm", &["video/jpm"]), ("jpgv", &["video/jpeg"]), ("jpm", &["image/jpm"]), ("jpx", &["image/jpx"]), ("js", &["application/javascript"]), ("jsm", &["application/javascript"]), ("json", &["application/json"]), ("json5", &["application/json5"]), ("jsonld", &["application/ld+json"]), ("jsonml", &["application/jsonml+json"]), ("jsx", &["text/jscript"]), ("jsxbin", &["text/plain"]), ("kar", &["audio/midi"]), ("karbon", &["application/vnd.kde.karbon"]), ("kfo", &["application/vnd.kde.kformula"]), ("kia", &["application/vnd.kidspiration"]), ("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"]), ("lasxml", &["application/vnd.las.las+xml"]), ("latex", &["application/x-latex"]), ( "lbd", &["application/vnd.llamagraphics.life-balance.desktop"], ), ( "lbe", &["application/vnd.llamagraphics.life-balance.exchange+xml"], ), ("les", &["application/vnd.hhe.lesson-player"]), ("less", &["text/less"]), ("lha", &["application/x-lzh-compressed"]), ("library-ms", &["application/windows-library+xml"]), ("link66", &["application/vnd.route66.link66+xml"]), ("list", &["text/plain"]), ("list3820", &["application/vnd.ibm.modcap"]), ("listafp", &["application/vnd.ibm.modcap"]), ("lit", &["application/x-ms-reader"]), ("litcoffee", &["text/coffeescript"]), ("lnk", &["application/x-ms-shortcut"]), ("loadtest", &["application/xml"]), ("log", &["text/plain"]), ("lostxml", &["application/lost+xml"]), ("lpk", &["application/octet-stream"]), ("lrf", &["application/octet-stream"]), ("lrm", &["application/vnd.ms-lrm"]), ("lsf", &["video/x-la-asf"]), ("lst", &["text/plain"]), ("lsx", &["video/x-la-asf"]), ("ltf", &["application/vnd.frogans.ltf"]), ("lua", &["text/x-lua"]), ("luac", &["application/x-lua-bytecode"]), ("lvp", &["audio/vnd.lucent.voice"]), ("lwp", &["application/vnd.lotus-wordpro"]), ("lzh", &["application/octet-stream"]), ("m13", &["application/x-msmediaview"]), ("m14", &["application/x-msmediaview"]), ("m1v", &["video/mpeg"]), ("m21", &["application/mp21"]), ("m2a", &["audio/mpeg"]), ("m2t", &["video/vnd.dlna.mpeg-tts"]), ("m2ts", &["video/vnd.dlna.mpeg-tts"]), ("m2v", &["video/mpeg"]), ("m3a", &["audio/mpeg"]), ("m3u", &["audio/x-mpegurl"]), ("m3u8", &["audio/x-mpegurl"]), ("m4a", &["audio/m4a"]), ("m4b", &["audio/m4b"]), ("m4p", &["audio/m4p"]), ("m4r", &["audio/x-m4r"]), ("m4u", &["video/vnd.mpegurl"]), ("m4v", &["video/x-m4v"]), ("ma", &["application/mathematica"]), ("mac", &["image/x-macpaint"]), ("mads", &["application/mads+xml"]), ("mag", &["application/vnd.ecowin.chart"]), ("mak", &["text/plain"]), ("maker", &["application/vnd.framemaker"]), ("man", &["application/x-troff-man"]), ("manifest", &["application/x-ms-manifest"]), ("map", &["text/plain"]), ("mar", &["application/octet-stream"]), ("markdown", &["text/markdown"]), ("master", &["application/xml"]), ("mathml", &["application/mathml+xml"]), ("mb", &["application/mathematica"]), ("mbk", &["application/vnd.mobius.mbk"]), ("mbox", &["application/mbox"]), ("mc1", &["application/vnd.medcalcdata"]), ("mcd", &["application/vnd.mcd"]), ("mcurl", &["text/vnd.curl.mcurl"]), ("md", &["text/x-markdown"]), ("mda", &["application/msaccess"]), ("mdb", &["application/x-msaccess"]), ("mde", &["application/msaccess"]), ("mdi", &["image/vnd.ms-modi"]), ("mdp", &["application/octet-stream"]), ("me", &["application/x-troff-me"]), ("mesh", &["model/mesh"]), ("meta4", &["application/metalink4+xml"]), ("metalink", &["application/metalink+xml"]), ("mets", &["application/mets+xml"]), ("mfm", &["application/vnd.mfmp"]), ("mfp", &["application/x-shockwave-flash"]), ("mft", &["application/rpki-manifest"]), ("mgp", &["application/vnd.osgeo.mapguide.package"]), ("mgz", &["application/vnd.proteus.magazine"]), ("mht", &["message/rfc822"]), ("mhtml", &["message/rfc822"]), ("mid", &["audio/mid"]), ("midi", &["audio/mid"]), ("mie", &["application/x-mie"]), ("mif", &["application/vnd.mif"]), ("mime", &["message/rfc822"]), ("mix", &["application/octet-stream"]), ("mj2", &["video/mj2"]), ("mjp2", &["video/mj2"]), ("mjs", &["application/javascript"]), ("mk", &["text/plain"]), ("mk3d", &["video/x-matroska"]), ("mka", &["audio/x-matroska"]), ("mkd", &["text/x-markdown"]), ("mks", &["video/x-matroska"]), ("mkv", &["video/x-matroska"]), ("mlp", &["application/vnd.dolby.mlp"]), ("mmd", &["application/vnd.chipnuts.karaoke-mmd"]), ("mmf", &["application/x-smaf"]), ("mml", &["text/mathml"]), ("mmr", &["image/vnd.fujixerox.edmics-mmr"]), ("mng", &["video/x-mng"]), ("mno", &["text/xml"]), ("mny", &["application/x-msmoney"]), ("mobi", &["application/x-mobipocket-ebook"]), ("mod", &["video/mpeg"]), ("mods", &["application/mods+xml"]), ("mov", &["video/quicktime"]), ("movie", &["video/x-sgi-movie"]), ("mp2", &["video/mpeg"]), ("mp21", &["application/mp21"]), ("mp2a", &["audio/mpeg"]), ("mp2v", &["video/mpeg"]), ("mp3", &["audio/mpeg"]), ("mp4", &["video/mp4"]), ("mp4a", &["audio/mp4"]), ("mp4s", &["application/mp4"]), ("mp4v", &["video/mp4"]), ("mpa", &["video/mpeg"]), ("mpc", &["application/vnd.mophun.certificate"]), ("mpd", &["application/dash+xml"]), ("mpe", &["video/mpeg"]), ("mpeg", &["video/mpeg"]), ("mpf", &["application/vnd.ms-mediapackage"]), ("mpg", &["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"]), ("mpv2", &["video/mpeg"]), ("mpy", &["application/vnd.ibm.minipay"]), ("mqv", &["video/quicktime"]), ("mqy", &["application/vnd.mobius.mqy"]), ("mrc", &["application/marc"]), ("mrcx", &["application/marcxml+xml"]), ("ms", &["application/x-troff-ms"]), ("mscml", &["application/mediaservercontrol+xml"]), ("mseed", &["application/vnd.fdsn.mseed"]), ("mseq", &["application/vnd.mseq"]), ("msf", &["application/vnd.epson.msf"]), ("msg", &["application/vnd.ms-outlook"]), ("msh", &["model/mesh"]), ("msi", &["application/octet-stream"]), ("msl", &["application/vnd.mobius.msl"]), ("msm", &["application/octet-stream"]), ("mso", &["application/octet-stream"]), ("msp", &["application/octet-stream"]), ("msty", &["application/vnd.muvee.style"]), ("mts", &["video/vnd.dlna.mpeg-tts"]), ("mtx", &["application/xml"]), ("mus", &["application/vnd.musician"]), ("musicxml", &["application/vnd.recordare.musicxml+xml"]), ("mvb", &["application/x-msmediaview"]), ("mvc", &["application/x-miva-compiled"]), ("mwf", &["application/vnd.mfer"]), ("mxf", &["application/mxf"]), ("mxl", &["application/vnd.recordare.musicxml"]), ("mxml", &["application/xv+xml"]), ("mxp", &["application/x-mmxp"]), ("mxs", &["application/vnd.triscape.mxs"]), ("mxu", &["video/vnd.mpegurl"]), ("n-gage", &["application/vnd.nokia.n-gage.symbian.install"]), ("n3", &["text/n3"]), ("nb", &["application/mathematica"]), ("nbp", &["application/vnd.wolfram.player"]), ("nc", &["application/x-netcdf"]), ("ncx", &["application/x-dtbncx+xml"]), ("nfo", &["text/x-nfo"]), ("ngdat", &["application/vnd.nokia.n-gage.data"]), ("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", &["video/x-ms-asf"]), ("nsf", &["application/vnd.lotus-notes"]), ("ntf", &["application/vnd.nitf"]), ("nws", &["message/rfc822"]), ("nzb", &["application/x-nzb"]), ("oa2", &["application/vnd.fujitsu.oasys2"]), ("oa3", &["application/vnd.fujitsu.oasys3"]), ("oas", &["application/vnd.fujitsu.oasys"]), ("obd", &["application/x-msbinder"]), ("obj", &["application/x-tgif"]), ("ocx", &["application/octet-stream"]), ("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"]), ("odh", &["text/plain"]), ("odi", &["application/vnd.oasis.opendocument.image"]), ("odl", &["text/plain"]), ("odm", &["application/vnd.oasis.opendocument.text-master"]), ("odp", &["application/vnd.oasis.opendocument.presentation"]), ("ods", &["application/vnd.oasis.opendocument.spreadsheet"]), ("odt", &["application/vnd.oasis.opendocument.text"]), ("oga", &["audio/ogg"]), ("ogg", &["audio/ogg"]), ("ogv", &["video/ogg"]), ("ogx", &["application/ogg"]), ("omdoc", &["application/omdoc+xml"]), ("one", &["application/onenote"]), ("onea", &["application/onenote"]), ("onepkg", &["application/onenote"]), ("onetmp", &["application/onenote"]), ("onetoc", &["application/onenote"]), ("onetoc2", &["application/onenote"]), ("opf", &["application/oebps-package+xml"]), ("opml", &["text/x-opml"]), ("oprc", &["application/vnd.palm"]), ("opus", &["audio/ogg"]), ("orderedtest", &["application/xml"]), ("org", &["application/vnd.lotus-organizer"]), ("osdx", &["application/opensearchdescription+xml"]), ("osf", &["application/vnd.yamaha.openscoreformat"]), ( "osfpvg", &["application/vnd.yamaha.openscoreformat.osfpvg+xml"], ), ( "otc", &["application/vnd.oasis.opendocument.chart-template"], ), ("otf", &["application/font-sfnt"]), ( "otg", &["application/vnd.oasis.opendocument.graphics-template"], ), ("oth", &["application/vnd.oasis.opendocument.text-web"]), ( "oti", &["application/vnd.oasis.opendocument.image-template"], ), ( "otp", &["application/vnd.oasis.opendocument.presentation-template"], ), ( "ots", &["application/vnd.oasis.opendocument.spreadsheet-template"], ), ("ott", &["application/vnd.oasis.opendocument.text-template"]), ("ova", &["application/x-virtualbox-ova"]), ("ovf", &["application/x-virtualbox-ovf"]), ("oxps", &["application/oxps"]), ("oxt", &["application/vnd.openofficeorg.extension"]), ("p", &["text/x-pascal"]), ("p10", &["application/pkcs10"]), ("p12", &["application/x-pkcs12"]), ("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"]), ("pac", &["application/x-ns-proxy-autoconfig"]), ("pas", &["text/x-pascal"]), ("paw", &["application/vnd.pawaafile"]), ("pbd", &["application/vnd.powerbuilder6"]), ("pbm", &["image/x-portable-bitmap"]), ("pcap", &["application/vnd.tcpdump.pcap"]), ("pcast", &["application/x-podcast"]), ("pcf", &["application/x-font-pcf"]), ("pcl", &["application/vnd.hp-pcl"]), ("pclxl", &["application/vnd.hp-pclxl"]), ("pct", &["image/pict"]), ("pcurl", &["application/vnd.curl.pcurl"]), ("pcx", &["application/octet-stream"]), ("pcz", &["application/octet-stream"]), ("pdb", &["application/vnd.palm"]), ("pde", &["text/x-processing"]), ("pdf", &["application/pdf"]), ("pem", &["application/x-x509-ca-cert"]), ("pfa", &["application/x-font-type1"]), ("pfb", &["application/octet-stream"]), ("pfm", &["application/octet-stream"]), ("pfr", &["application/font-tdpfr"]), ("pfx", &["application/x-pkcs12"]), ("pgm", &["image/x-portable-graymap"]), ("pgn", &["application/x-chess-pgn"]), ("pgp", &["application/pgp-encrypted"]), ("php", &["application/x-httpd-php"]), ("pic", &["image/pict"]), ("pict", &["image/pict"]), ("pkg", &["application/octet-stream"]), ("pkgdef", &["text/plain"]), ("pkgundef", &["text/plain"]), ("pki", &["application/pkixcmp"]), ("pkipath", &["application/pkix-pkipath"]), ("pko", &["application/vnd.ms-pki.pko"]), ("pkpass", &["application/vnd.apple.pkpass"]), ("pl", &["application/x-perl"]), ("plb", &["application/vnd.3gpp.pic-bw-large"]), ("plc", &["application/vnd.mobius.plc"]), ("plf", &["application/vnd.pocketlearn"]), ("pls", &["audio/scpls"]), ("pm", &["application/x-perl"]), ("pma", &["application/x-perfmon"]), ("pmc", &["application/x-perfmon"]), ("pml", &["application/x-perfmon"]), ("pmr", &["application/x-perfmon"]), ("pmw", &["application/x-perfmon"]), ("png", &["image/png"]), ("pnm", &["image/x-portable-anymap"]), ("pnt", &["image/x-macpaint"]), ("pntg", &["image/x-macpaint"]), ("pnz", &["image/png"]), ("portpkg", &["application/vnd.macports.portpkg"]), ("pot", &["application/vnd.ms-powerpoint"]), ( "potm", &["application/vnd.ms-powerpoint.template.macroEnabled.12"], ), ( "potx", &["application/vnd.openxmlformats-officedocument.presentationml.template"], ), ("ppa", &["application/vnd.ms-powerpoint"]), ( "ppam", &["application/vnd.ms-powerpoint.addin.macroEnabled.12"], ), ("ppd", &["application/vnd.cups-ppd"]), ("ppm", &["image/x-portable-pixmap"]), ("pps", &["application/vnd.ms-powerpoint"]), ( "ppsm", &["application/vnd.ms-powerpoint.slideshow.macroEnabled.12"], ), ( "ppsx", &["application/vnd.openxmlformats-officedocument.presentationml.slideshow"], ), ("ppt", &["application/vnd.ms-powerpoint"]), ( "pptm", &["application/vnd.ms-powerpoint.presentation.macroEnabled.12"], ), ( "pptx", &["application/vnd.openxmlformats-officedocument.presentationml.presentation"], ), ("pqa", &["application/vnd.palm"]), ("prc", &["application/x-mobipocket-ebook"]), ("pre", &["application/vnd.lotus-freelance"]), ("prf", &["application/pics-rules"]), ("prm", &["application/octet-stream"]), ("prx", &["application/octet-stream"]), ("ps", &["application/postscript"]), ("psb", &["application/vnd.3gpp.pic-bw-small"]), ("psc1", &["application/PowerShell"]), ("psd", &["application/octet-stream"]), ("psess", &["application/xml"]), ("psf", &["application/x-font-linux-psf"]), ("pskcxml", &["application/pskc+xml"]), ("psm", &["application/octet-stream"]), ("psp", &["application/octet-stream"]), ("pst", &["application/vnd.ms-outlook"]), ("ptid", &["application/vnd.pvi.ptid1"]), ("pub", &["application/x-mspublisher"]), ("pvb", &["application/vnd.3gpp.pic-bw-var"]), ("pwn", &["application/vnd.3m.post-it-notes"]), ("pwz", &["application/vnd.ms-powerpoint"]), ("py", &["text/plain"]), ("pya", &["audio/vnd.ms-playready.media.pya"]), ("pyv", &["video/vnd.ms-playready.media.pyv"]), ("qam", &["application/vnd.epson.quickanime"]), ("qbo", &["application/vnd.intu.qbo"]), ("qfx", &["application/vnd.intu.qfx"]), ("qht", &["text/x-html-insertion"]), ("qhtm", &["text/x-html-insertion"]), ("qps", &["application/vnd.publishare-delta-tree"]), ("qt", &["video/quicktime"]), ("qti", &["image/x-quicktime"]), ("qtif", &["image/x-quicktime"]), ("qtl", &["application/x-quicktimeplayer"]), ("qwd", &["application/vnd.quark.quarkxpress"]), ("qwt", &["application/vnd.quark.quarkxpress"]), ("qxb", &["application/vnd.quark.quarkxpress"]), ("qxd", &["application/octet-stream"]), ("qxl", &["application/vnd.quark.quarkxpress"]), ("qxt", &["application/vnd.quark.quarkxpress"]), ("ra", &["audio/x-pn-realaudio"]), ("ram", &["audio/x-pn-realaudio"]), ("raml", &["application/raml+yaml"]), ("rar", &["application/x-rar-compressed"]), ("ras", &["image/x-cmu-raster"]), ("rat", &["application/rat-file"]), ("rc", &["text/plain"]), ("rc2", &["text/plain"]), ("rcprofile", &["application/vnd.ipunplugged.rcprofile"]), ("rct", &["text/plain"]), ("rdf", &["application/rdf+xml"]), ("rdlc", &["application/xml"]), ("rdz", &["application/vnd.data-vision.rdz"]), ("reg", &["text/plain"]), ("rep", &["application/vnd.businessobjects"]), ("res", &["application/x-dtbresource+xml"]), ("resx", &["application/xml"]), ("rf", &["image/vnd.rn-realflash"]), ("rgb", &["image/x-rgb"]), ("rgs", &["text/plain"]), ("rif", &["application/reginfo+xml"]), ("rip", &["audio/vnd.rip"]), ("ris", &["application/x-research-info-systems"]), ("rl", &["application/resource-lists+xml"]), ("rlc", &["image/vnd.fujixerox.edmics-rlc"]), ("rld", &["application/resource-lists-diff+xml"]), ("rm", &["application/vnd.rn-realmedia"]), ("rmi", &["audio/mid"]), ("rmp", &["application/vnd.rn-rn_music_package"]), ("rms", &["application/vnd.jcp.javame.midlet-rms"]), ("rmvb", &["application/vnd.rn-realmedia-vbr"]), ("rnc", &["application/relax-ng-compact-syntax"]), ("rng", &["application/xml"]), ("roa", &["application/rpki-roa"]), ("roff", &["application/x-troff"]), ("rp9", &["application/vnd.cloanto.rp9"]), ("rpm", &["audio/x-pn-realaudio-plugin"]), ("rpss", &["application/vnd.nokia.radio-presets"]), ("rpst", &["application/vnd.nokia.radio-preset"]), ("rq", &["application/sparql-query"]), ("rqy", &["text/x-ms-rqy"]), ("rs", &["text/x-rust"]), ("rsd", &["application/rsd+xml"]), ("rss", &["application/rss+xml"]), ("rtf", &["application/rtf"]), ("rtx", &["text/richtext"]), ("ruleset", &["application/xml"]), ("run", &["application/x-makeself"]), ("rvt", &["application/octet-stream"]), ("s", &["text/plain"]), ("s3m", &["audio/s3m"]), ("saf", &["application/vnd.yamaha.smaf-audio"]), ("safariextz", &["application/x-safari-safariextz"]), ("sass", &["text/x-sass"]), ("sbml", &["application/sbml+xml"]), ("sc", &["application/vnd.ibm.secure-container"]), ("scd", &["application/x-msschedule"]), ("scm", &["application/vnd.lotus-screencam"]), ("scq", &["application/scvp-cv-request"]), ("scr", &["text/plain"]), ("scs", &["application/scvp-cv-response"]), ("scss", &["text/x-scss"]), ("sct", &["text/scriptlet"]), ("scurl", &["text/vnd.curl.scurl"]), ("sd2", &["audio/x-sd2"]), ("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"]), ("sdp", &["application/sdp"]), ("sdw", &["application/vnd.stardivision.writer"]), ("sea", &["application/octet-stream"]), ( "searchconnector-ms", &["application/windows-search-connector+xml"], ), ("see", &["application/vnd.seemail"]), ("seed", &["application/vnd.fdsn.seed"]), ("sema", &["application/vnd.sema"]), ("semd", &["application/vnd.semd"]), ("semf", &["application/vnd.semf"]), ("ser", &["application/java-serialized-object"]), ("setpay", &["application/set-payment-initiation"]), ("setreg", &["application/set-registration-initiation"]), ("settings", &["application/xml"]), ("sfd-hdstx", &["application/vnd.hydrostatix.sof-data"]), ("sfs", &["application/vnd.spotfire.sfs"]), ("sfv", &["text/x-sfv"]), ("sgi", &["image/sgi"]), ("sgimb", &["application/x-sgimb"]), ("sgl", &["application/vnd.stardivision.writer-global"]), ("sgm", &["text/sgml"]), ("sgml", &["text/sgml"]), ("sh", &["application/x-sh"]), ("shar", &["application/x-shar"]), ("shex", &["text/shex"]), ("shf", &["application/shf+xml"]), ("shtml", &["text/html"]), ("sid", &["image/x-mrsid-image"]), ("sig", &["application/pgp-signature"]), ("sil", &["audio/silk"]), ("silo", &["model/mesh"]), ("sis", &["application/vnd.symbian.install"]), ("sisx", &["application/vnd.symbian.install"]), ("sit", &["application/x-stuffit"]), ("sitemap", &["application/xml"]), ("sitx", &["application/x-stuffitx"]), ("skd", &["application/vnd.koan"]), ("skin", &["application/xml"]), ("skm", &["application/vnd.koan"]), ("skp", &["application/x-koan"]), ("skt", &["application/vnd.koan"]), ( "sldm", &["application/vnd.ms-powerpoint.slide.macroEnabled.12"], ), ( "sldx", &["application/vnd.openxmlformats-officedocument.presentationml.slide"], ), ("slim", &["text/slim"]), ("slk", &["application/vnd.ms-excel"]), ("slm", &["text/slim"]), ("sln", &["text/plain"]), ("slt", &["application/vnd.epson.salt"]), ("slupkg-ms", &["application/x-ms-license"]), ("sm", &["application/vnd.stepmania.stepchart"]), ("smd", &["audio/x-smd"]), ("smf", &["application/vnd.stardivision.math"]), ("smi", &["application/octet-stream"]), ("smil", &["application/smil+xml"]), ("smv", &["video/x-smv"]), ("smx", &["audio/x-smd"]), ("smz", &["audio/x-smd"]), ("smzip", &["application/vnd.stepmania.package"]), ("snd", &["audio/basic"]), ("snf", &["application/x-font-snf"]), ("snippet", &["application/xml"]), ("snp", &["application/octet-stream"]), ("so", &["application/octet-stream"]), ("sol", &["text/plain"]), ("sor", &["text/plain"]), ("spc", &["application/x-pkcs7-certificates"]), ("spf", &["application/vnd.yamaha.smaf-phrase"]), ("spl", &["application/futuresplash"]), ("spot", &["text/vnd.in3d.spot"]), ("spp", &["application/scvp-vp-response"]), ("spq", &["application/scvp-vp-request"]), ("spx", &["audio/ogg"]), ("sql", &["application/x-sql"]), ("src", &["application/x-wais-source"]), ("srf", &["text/plain"]), ("srt", &["application/x-subrip"]), ("sru", &["application/sru+xml"]), ("srx", &["application/sparql-results+xml"]), ("ssdl", &["application/ssdl+xml"]), ("sse", &["application/vnd.kodak-descriptor"]), ("ssf", &["application/vnd.epson.ssf"]), ("ssisdeploymentmanifest", &["text/xml"]), ("ssm", &["application/streamingmedia"]), ("ssml", &["application/ssml+xml"]), ("sst", &["application/vnd.ms-pki.certstore"]), ("st", &["application/vnd.sailingtracker.track"]), ("stc", &["application/vnd.sun.xml.calc.template"]), ("std", &["application/vnd.sun.xml.draw.template"]), ("step", &["application/step"]), ("stf", &["application/vnd.wt.stf"]), ("sti", &["application/vnd.sun.xml.impress.template"]), ("stk", &["application/hyperstudio"]), ("stl", &["application/vnd.ms-pki.stl"]), ("stp", &["application/step"]), ("str", &["application/vnd.pg.format"]), ("stw", &["application/vnd.sun.xml.writer.template"]), ("styl", &["text/stylus"]), ("stylus", &["text/stylus"]), ("sub", &["text/vnd.dvb.subtitle"]), ("sus", &["application/vnd.sus-calendar"]), ("susp", &["application/vnd.sus-calendar"]), ("sv4cpio", &["application/x-sv4cpio"]), ("sv4crc", &["application/x-sv4crc"]), ("svc", &["application/xml"]), ("svd", &["application/vnd.svd"]), ("svg", &["image/svg+xml"]), ("svgz", &["image/svg+xml"]), ("swa", &["application/x-director"]), ("swf", &["application/x-shockwave-flash"]), ("swi", &["application/vnd.aristanetworks.swi"]), ("sxc", &["application/vnd.sun.xml.calc"]), ("sxd", &["application/vnd.sun.xml.draw"]), ("sxg", &["application/vnd.sun.xml.writer.global"]), ("sxi", &["application/vnd.sun.xml.impress"]), ("sxm", &["application/vnd.sun.xml.math"]), ("sxw", &["application/vnd.sun.xml.writer"]), ("t", &["application/x-troff"]), ("t3", &["application/x-t3vm-image"]), ("taglet", &["application/vnd.mynfc"]), ("tao", &["application/vnd.tao.intent-module-archive"]), ("tar", &["application/x-tar"]), ("tcap", &["application/vnd.3gpp2.tcap"]), ("tcl", &["application/x-tcl"]), ("teacher", &["application/vnd.smart.teacher"]), ("tei", &["application/tei+xml"]), ("teicorpus", &["application/tei+xml"]), ("testrunconfig", &["application/xml"]), ("testsettings", &["application/xml"]), ("tex", &["application/x-tex"]), ("texi", &["application/x-texinfo"]), ("texinfo", &["application/x-texinfo"]), ("text", &["text/plain"]), ("tfi", &["application/thraud+xml"]), ("tfm", &["application/x-tex-tfm"]), ("tga", &["image/x-tga"]), ("tgz", &["application/x-compressed"]), ("thmx", &["application/vnd.ms-officetheme"]), ("thn", &["application/octet-stream"]), ("tif", &["image/tiff"]), ("tiff", &["image/tiff"]), ("tk", &["application/x-tcl"]), ("tlh", &["text/plain"]), ("tli", &["text/plain"]), ("tmo", &["application/vnd.tmobile-livetv"]), ("toc", &["application/octet-stream"]), ("toml", &["text/x-toml"]), ("torrent", &["application/x-bittorrent"]), ("tpl", &["application/vnd.groove-tool-template"]), ("tpt", &["application/vnd.trid.tpt"]), ("tr", &["application/x-troff"]), ("tra", &["application/vnd.trueapp"]), ("trm", &["application/x-msterminal"]), ("trx", &["application/xml"]), ("ts", &["video/vnd.dlna.mpeg-tts"]), ("tsd", &["application/timestamped-data"]), ("tsv", &["text/tab-separated-values"]), ("ttc", &["font/collection"]), ("ttf", &["application/font-sfnt"]), ("ttl", &["text/turtle"]), ("tts", &["video/vnd.dlna.mpeg-tts"]), ("twd", &["application/vnd.simtech-mindmapper"]), ("twds", &["application/vnd.simtech-mindmapper"]), ("txd", &["application/vnd.genomatix.tuxedo"]), ("txf", &["application/vnd.mobius.txf"]), ("txt", &["text/plain"]), ("u32", &["application/octet-stream"]), ("u8dsn", &["message/global-delivery-status"]), ("u8hdr", &["message/global-headers"]), ("u8mdn", &["message/global-disposition-notification"]), ("u8msg", &["message/global"]), ("udeb", &["application/x-debian-package"]), ("ufd", &["application/vnd.ufdl"]), ("ufdl", &["application/vnd.ufdl"]), ("uls", &["text/iuls"]), ("ulx", &["application/x-glulx"]), ("umj", &["application/vnd.umajin"]), ("unityweb", &["application/vnd.unity"]), ("uoml", &["application/vnd.uoml+xml"]), ("uri", &["text/uri-list"]), ("uris", &["text/uri-list"]), ("urls", &["text/uri-list"]), ("user", &["text/plain"]), ("ustar", &["application/x-ustar"]), ("utz", &["application/vnd.uiq.theme"]), ("uu", &["text/x-uuencode"]), ("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"]), ("vb", &["text/plain"]), ("vbdproj", &["text/plain"]), ("vbk", &["video/mpeg"]), ("vbox", &["application/x-virtualbox-vbox"]), ("vbox-extpack", &["application/x-virtualbox-vbox-extpack"]), ("vbproj", &["text/plain"]), ("vbs", &["text/vbscript"]), ("vcard", &["text/vcard"]), ("vcd", &["application/x-cdlink"]), ("vcf", &["text/x-vcard"]), ("vcg", &["application/vnd.groove-vcard"]), ("vcproj", &["application/xml"]), ("vcs", &["text/plain"]), ("vcx", &["application/vnd.vcx"]), ("vcxproj", &["application/xml"]), ("vddproj", &["text/plain"]), ("vdi", &["application/x-virtualbox-vdi"]), ("vdp", &["text/plain"]), ("vdproj", &["text/plain"]), ("vdx", &["application/vnd.ms-visio.viewer"]), ("vhd", &["application/x-virtualbox-vhd"]), ("vis", &["application/vnd.visionary"]), ("viv", &["video/vnd.vivo"]), ("vmdk", &["application/x-virtualbox-vmdk"]), ("vml", &["text/xml"]), ("vob", &["video/x-ms-vob"]), ("vor", &["application/vnd.stardivision.writer"]), ("vox", &["application/x-authorware-bin"]), ("vrml", &["model/vrml"]), ("vscontent", &["application/xml"]), ("vsct", &["text/xml"]), ("vsd", &["application/vnd.visio"]), ("vsf", &["application/vnd.vsf"]), ("vsi", &["application/ms-vsi"]), ("vsix", &["application/vsix"]), ("vsixlangpack", &["text/xml"]), ("vsixmanifest", &["text/xml"]), ("vsmdi", &["application/xml"]), ("vspscc", &["text/plain"]), ("vss", &["application/vnd.visio"]), ("vsscc", &["text/plain"]), ("vssettings", &["text/xml"]), ("vssscc", &["text/plain"]), ("vst", &["application/vnd.visio"]), ("vstemplate", &["text/xml"]), ("vsto", &["application/x-ms-vsto"]), ("vsw", &["application/vnd.visio"]), ("vsx", &["application/vnd.visio"]), ("vtt", &["text/vtt"]), ("vtu", &["model/vnd.vtu"]), ("vtx", &["application/vnd.visio"]), ("vxml", &["application/voicexml+xml"]), ("w3d", &["application/x-director"]), ("wad", &["application/x-doom"]), ("wadl", &["application/vnd.sun.wadl+xml"]), ("war", &["application/java-archive"]), ("wasm", &["application/wasm"]), ("wav", &["audio/wav"]), ("wave", &["audio/wav"]), ("wax", &["audio/x-ms-wax"]), ("wbk", &["application/msword"]), ("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"]), ("weba", &["audio/webm"]), ("webapp", &["application/x-web-app-manifest+json"]), ("webarchive", &["application/x-safari-webarchive"]), ("webm", &["video/webm"]), ("webmanifest", &["application/manifest+json"]), ("webp", &["image/webp"]), ("webtest", &["application/xml"]), ("wg", &["application/vnd.pmi.widget"]), ("wgt", &["application/widget"]), ("wiq", &["application/xml"]), ("wiz", &["application/msword"]), ("wks", &["application/vnd.ms-works"]), ("wlmp", &["application/wlmoviemaker"]), ("wlpginstall", &["application/x-wlpg-detect"]), ("wlpginstall3", &["application/x-wlpg3-detect"]), ("wm", &["video/x-ms-wm"]), ("wma", &["audio/x-ms-wma"]), ("wmd", &["application/x-ms-wmd"]), ("wmf", &["application/x-msmetafile"]), ("wml", &["text/vnd.wap.wml"]), ("wmlc", &["application/vnd.wap.wmlc"]), ("wmls", &["text/vnd.wap.wmlscript"]), ("wmlsc", &["application/vnd.wap.wmlscriptc"]), ("wmp", &["video/x-ms-wmp"]), ("wmv", &["video/x-ms-wmv"]), ("wmx", &["video/x-ms-wmx"]), ("wmz", &["application/x-ms-wmz"]), ("woff", &["application/font-woff"]), ("woff2", &["font/woff2"]), ("wpd", &["application/vnd.wordperfect"]), ("wpl", &["application/vnd.ms-wpl"]), ("wps", &["application/vnd.ms-works"]), ("wqd", &["application/vnd.wqd"]), ("wri", &["application/x-mswrite"]), ("wrl", &["x-world/x-vrml"]), ("wrz", &["x-world/x-vrml"]), ("wsc", &["text/scriptlet"]), ("wsdl", &["text/xml"]), ("wspolicy", &["application/wspolicy+xml"]), ("wtb", &["application/vnd.webturbo"]), ("wvx", &["video/x-ms-wvx"]), ("x", &["application/directx"]), ("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"]), ("xaf", &["x-world/x-vrml"]), ("xaml", &["application/xaml+xml"]), ("xap", &["application/x-silverlight-app"]), ("xar", &["application/vnd.xara"]), ("xbap", &["application/x-ms-xbap"]), ("xbd", &["application/vnd.fujixerox.docuworks.binder"]), ("xbm", &["image/x-xbitmap"]), ("xdf", &["application/xcap-diff+xml"]), ("xdm", &["application/vnd.syncml.dm+xml"]), ("xdp", &["application/vnd.adobe.xdp+xml"]), ("xdr", &["text/plain"]), ("xdssc", &["application/dssc+xml"]), ("xdw", &["application/vnd.fujixerox.docuworks"]), ("xenc", &["application/xenc+xml"]), ("xer", &["application/patch-ops-error+xml"]), ("xfdf", &["application/vnd.adobe.xfdf"]), ("xfdl", &["application/vnd.xfdl"]), ("xht", &["application/xhtml+xml"]), ("xhtml", &["application/xhtml+xml"]), ("xhvml", &["application/xv+xml"]), ("xif", &["image/vnd.xiff"]), ("xla", &["application/vnd.ms-excel"]), ("xlam", &["application/vnd.ms-excel.addin.macroEnabled.12"]), ("xlc", &["application/vnd.ms-excel"]), ("xld", &["application/vnd.ms-excel"]), ("xlf", &["application/x-xliff+xml"]), ("xlk", &["application/vnd.ms-excel"]), ("xll", &["application/vnd.ms-excel"]), ("xlm", &["application/vnd.ms-excel"]), ("xls", &["application/vnd.ms-excel"]), ( "xlsb", &["application/vnd.ms-excel.sheet.binary.macroEnabled.12"], ), ("xlsm", &["application/vnd.ms-excel.sheet.macroEnabled.12"]), ( "xlsx", &["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"], ), ("xlt", &["application/vnd.ms-excel"]), ( "xltm", &["application/vnd.ms-excel.template.macroEnabled.12"], ), ( "xltx", &["application/vnd.openxmlformats-officedocument.spreadsheetml.template"], ), ("xlw", &["application/vnd.ms-excel"]), ("xm", &["audio/xm"]), ("xml", &["text/xml"]), ("xmp", &["application/octet-stream"]), ("xmta", &["application/xml"]), ("xo", &["application/vnd.olpc-sugar"]), ("xof", &["x-world/x-vrml"]), ("xoml", &["text/plain"]), ("xop", &["application/xop+xml"]), ("xpi", &["application/x-xpinstall"]), ("xpl", &["application/xproc+xml"]), ("xpm", &["image/x-xpixmap"]), ("xpr", &["application/vnd.is-xpr"]), ("xps", &["application/vnd.ms-xpsdocument"]), ("xpw", &["application/vnd.intercon.formnet"]), ("xpx", &["application/vnd.intercon.formnet"]), ("xrm-ms", &["text/xml"]), ("xsc", &["application/xml"]), ("xsd", &["text/xml"]), ("xsf", &["text/xml"]), ("xsl", &["text/xml"]), ("xslt", &["text/xml"]), ("xsm", &["application/vnd.syncml+xml"]), ("xsn", &["application/octet-stream"]), ("xspf", &["application/xspf+xml"]), ("xss", &["application/xml"]), ("xtp", &["application/octet-stream"]), ("xul", &["application/vnd.mozilla.xul+xml"]), ("xvm", &["application/xv+xml"]), ("xvml", &["application/xv+xml"]), ("xwd", &["image/x-xwindowdump"]), ("xyz", &["chemical/x-xyz"]), ("xz", &["application/x-xz"]), ("yaml", &["text/x-yaml"]), ("yang", &["application/yang"]), ("yin", &["application/yin+xml"]), ("yml", &["text/x-yaml"]), ("ymp", &["text/x-suse-ymp"]), ("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"]), ("zip", &["application/zip"]), ("zir", &["application/vnd.zul"]), ("zirz", &["application/vnd.zul"]), ("zmm", &["application/vnd.handheld-entertainment+xml"]), ]; mime_guess-2.0.1/.cargo_vcs_info.json0000644000000001120000000000000132220ustar00{ "git": { "sha1": "3e62c99122069cfec1fa3f7c263b0943f5016b6b" } } mime_guess-2.0.1/Cargo.lock0000644000000607110000000000000112100ustar00# This file is automatically @generated by Cargo. # It is not intended for manual editing. [[package]] name = "arrayvec" version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "atty" version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "autocfg" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "bitflags" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "bstr" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "regex-automata 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "byteorder" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "cast" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "cfg-if" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "clap" version = "2.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "cloudabi" version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "criterion" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "cast 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "criterion-plot 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "csv 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "rand_xoshiro 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "rayon-core 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", "tinytemplate 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "criterion-plot" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "cast 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "crossbeam-deque" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam-epoch 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "crossbeam-epoch" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "memoffset 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "crossbeam-queue" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "crossbeam-utils" version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "csv" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bstr 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "csv-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", "ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "csv-core" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "either" version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "fuchsia-cprng" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "itertools" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "itoa" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "lazy_static" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libc" version = "0.2.60" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memchr" version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "memoffset" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "mime" version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unicase 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "mime_guess" version = "2.0.1" dependencies = [ "criterion 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "nodrop" version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "num-traits" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "autocfg 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num_cpus" version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "proc-macro2" version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "quote" version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand_core" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand_core" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "rand_os" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand_xoshiro" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rayon" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "rayon-core 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rayon-core" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rdrand" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex-automata" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rustc_version" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "ryu" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "same-file" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "scopeguard" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "semver" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "semver-parser" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde" version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde_derive" version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", "syn 0.15.42 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_json" version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", "ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "syn" version = "0.15.42" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "textwrap" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tinytemplate" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "unicase" version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "unicode-width" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "unicode-xid" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "version_check" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "walkdir" version = "2.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "winapi" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "winapi-util" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] "checksum arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b8d73f9beda665eaa98ab9e4f7442bd4e7de6652587de55b2525e52e29c1b0ba" "checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90" "checksum autocfg 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "22130e92352b948e7e82a49cdb0aa94f2211761117f29e052dd397c1ac33542b" "checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd" "checksum bstr 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "e0a692f1c740e7e821ca71a22cf99b9b2322dfa94d10f71443befb1797b3946a" "checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" "checksum cast 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "926013f2860c46252efceabb19f4a6b308197505082c609025aa6706c011d427" "checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" "checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" "checksum criterion 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "0363053954f3e679645fc443321ca128b7b950a6fe288cf5f9335cc22ee58394" "checksum criterion-plot 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76f9212ddf2f4a9eb2d401635190600656a1f88a932ef53d06e7fa4c7e02fb8e" "checksum crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "05e44b8cf3e1a625844d1750e1f7820da46044ff6d28f4d43e455ba3e5bb2c13" "checksum crossbeam-epoch 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9" "checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" "checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" "checksum csv 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "37519ccdfd73a75821cac9319d4fce15a81b9fcf75f951df5b9988aa3a0af87d" "checksum csv-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9b5cadb6b25c77aeff80ba701712494213f4a8418fcda2ee11b6560c3ad0bf4c" "checksum either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b" "checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" "checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358" "checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" "checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" "checksum libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "d44e80633f007889c7eff624b709ab43c92d708caad982295768a7b13ca3b5eb" "checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e" "checksum memoffset 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ce6075db033bbbb7ee5a0bbd3a3186bbae616f57fb001c485c7ff77955f8177f" "checksum mime 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)" = "3e27ca21f40a310bd06d9031785f4801710d566c184a6e15bad4f1d9b65f9425" "checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" "checksum num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32" "checksum num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bcef43580c035376c0705c42792c294b66974abbfd2789b511784023f71f3273" "checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" "checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" "checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" "checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" "checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" "checksum rand_xoshiro 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "03b418169fb9c46533f326efd6eed2576699c44ca92d3052a066214a8d828929" "checksum rayon 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a4b0186e22767d5b9738a05eab7c6ac90b15db17e5b5f9bd87976dd7d89a10a4" "checksum rayon-core 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ebbe0df8435ac0c397d467b6cad6d25543d06e8a019ef3f6af3c384597515bd2" "checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" "checksum regex-automata 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "92b73c2a1770c255c240eaa4ee600df1704a38dc3feaa6e949e7fcd4f8dc09f9" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" "checksum ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997" "checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421" "checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" "checksum serde 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)" = "7fe5626ac617da2f2d9c48af5515a21d5a480dbd151e01bb1c355e26a3e68113" "checksum serde_derive 1.0.98 (registry+https://github.com/rust-lang/crates.io-index)" = "01e69e1b8a631f245467ee275b8c757b818653c6d704cdbcaeb56b56767b529c" "checksum serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)" = "051c49229f282f7c6f3813f8286cc1e3323e8051823fce42c7ea80fe13521704" "checksum syn 0.15.42 (registry+https://github.com/rust-lang/crates.io-index)" = "eadc09306ca51a40555dd6fc2b415538e9e18bc9f870e47b1a524a79fe2dcf5e" "checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" "checksum tinytemplate 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4574b75faccaacddb9b284faecdf0b544b80b6b294f3d062d325c5726a209c20" "checksum unicase 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a84e5511b2a947f3ae965dcb29b13b7b1691b6e7332cf5dbc1744138d5acb7f6" "checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" "checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" "checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e" "checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770" "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" "checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"