Updated Dart packages.

Change-Id: I39b68d4401ca146d2fc2bad443dfd599302b8d77
diff --git a/pub/_discoveryapis_commons/BUILD.gn b/pub/_discoveryapis_commons/BUILD.gn
index 1439d62..984cbc5 100644
--- a/pub/_discoveryapis_commons/BUILD.gn
+++ b/pub/_discoveryapis_commons/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for _discoveryapis_commons-0.1.3+1
+# This file is generated by importer.py for _discoveryapis_commons-0.1.4
 
 import("//build/dart/dart_package.gni")
 
diff --git a/pub/_discoveryapis_commons/CHANGELOG.md b/pub/_discoveryapis_commons/CHANGELOG.md
index ce57988..6c830a2 100644
--- a/pub/_discoveryapis_commons/CHANGELOG.md
+++ b/pub/_discoveryapis_commons/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.1.4
+
+- Make package strong-mode clean.
+
 ## 0.1.3+1
 
 - Removed `pkg/crypto` dependency and upgrade Dart dependency to >=1.13.
diff --git a/pub/_discoveryapis_commons/analysis_options.yaml b/pub/_discoveryapis_commons/analysis_options.yaml
new file mode 100644
index 0000000..ee64972
--- /dev/null
+++ b/pub/_discoveryapis_commons/analysis_options.yaml
@@ -0,0 +1,3 @@
+# https://www.dartlang.org/guides/language/analysis-options
+analyzer:
+  strong-mode: true
diff --git a/pub/_discoveryapis_commons/lib/src/clients.dart b/pub/_discoveryapis_commons/lib/src/clients.dart
index df4a11e..5e33874 100644
--- a/pub/_discoveryapis_commons/lib/src/clients.dart
+++ b/pub/_discoveryapis_commons/lib/src/clients.dart
@@ -170,6 +170,7 @@
       }
       containsQueryParameter = true;
     }
+
     queryParams.forEach((String key, List<String> values) {
       for (var value in values) {
         addQueryParameter(key, value);
@@ -638,7 +639,7 @@
   }
 
   Stream<List<int>> _listOfBytes2Stream(List<List<int>> listOfBytes) {
-    var controller = new StreamController();
+    var controller = new StreamController<List<int>>();
     for (var array in listOfBytes) {
       controller.add(array);
     }
@@ -865,10 +866,10 @@
     if (stringStream != null) {
       return stringStream.transform(JSON.decoder).first.then((json) {
         if (json is Map && json['error'] is Map) {
-          Map error = json['error'];
-          var code = error['code'];
-          var message = error['message'];
-          var errors = [];
+          final Map error = json['error'];
+          final code = error['code'];
+          final message = error['message'];
+          var errors = <client_requests.ApiRequestErrorDetail>[];
           if (error.containsKey('errors') && error['errors'] is List) {
             errors = error['errors']
                 .map((Map json) =>
@@ -905,16 +906,12 @@
 
 /// Creates a new [Map] and inserts all entries of [source] into it,
 /// optionally calling [convert] on the values.
-Map mapMap(Map source, [Object convert(Object source) = null]) {
+Map<String, T> mapMap<F, T>(Map<String, F> source, T convert(F source)) {
   assert(source != null);
-  var result = new collection.LinkedHashMap();
-  source.forEach((String key, value) {
-    assert(key != null);
-    if (convert == null) {
-      result[key] = value;
-    } else {
-      result[key] = convert(value);
-    }
+  assert(convert != null);
+  final Map<String, T> result = new collection.LinkedHashMap<String, T>();
+  source.forEach((String key, F value) {
+    result[key] = convert(value);
   });
   return result;
 }
diff --git a/pub/_discoveryapis_commons/pubspec.yaml b/pub/_discoveryapis_commons/pubspec.yaml
index 552baff..3669126 100644
--- a/pub/_discoveryapis_commons/pubspec.yaml
+++ b/pub/_discoveryapis_commons/pubspec.yaml
@@ -1,10 +1,10 @@
 name: _discoveryapis_commons
-version: 0.1.3+1
+version: 0.1.4
 author: Dart Team <misc@dartlang.org>
 description: Library for use by client APIs generated from Discovery Documents.
 homepage: https://github.com/dart-lang/discoveryapis_commons
 environment:
-  sdk: '>=1.13.0 <2.0.0'
+  sdk: '>=1.21.0 <2.0.0'
 dependencies:
   http: '>=0.11.1 <0.12.0'
 dev_dependencies:
diff --git a/pub/archive/BUILD.gn b/pub/archive/BUILD.gn
index 2da32bf..e3bf1d1 100644
--- a/pub/archive/BUILD.gn
+++ b/pub/archive/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for archive-1.0.28
+# This file is generated by importer.py for archive-1.0.29
 
 import("//build/dart/dart_package.gni")
 
@@ -10,6 +10,7 @@
   disable_analysis = true
 
   deps = [
+    "//third_party/dart-pkg/pub/args",
     "//third_party/dart-pkg/pub/crypto",
   ]
 }
diff --git a/pub/archive/ChangeLog.txt b/pub/archive/ChangeLog.txt
index 6ff3b7d..66c8b0a 100755
--- a/pub/archive/ChangeLog.txt
+++ b/pub/archive/ChangeLog.txt
@@ -1,4 +1,6 @@
-v UNRELEASED

+v 1.0.29 - May 25, 2017

+

+- Fix issue with POSIX tar files.

 

 - Upgrade dependency on archive to `>=1.0.0 <2.0.0`

 

diff --git a/pub/archive/LICENSE b/pub/archive/LICENSE
index 17a941d..91e933b 100755
--- a/pub/archive/LICENSE
+++ b/pub/archive/LICENSE
@@ -1,89 +1,89 @@
-   Copyright 2013 Brendan Duncan
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-   
-   
-Some code has been derived from the following projects:
-
-zlib/inflate:
-  JavaScript Zlib Library, https://github.com/imaya/zlib.js
-  The MIT License
-  Copyright (c) 2012 imaya
-
-zlib/deflate:
-  Java JZLib Library, http://www.jcraft.com/jzlib/
-  Copyright (c) 2000-2011 ymnk, JCraft,Inc. All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions are met:
-  
-    1. Redistributions of source code must retain the above copyright notice,
-       this list of conditions and the following disclaimer.
-  
-    2. Redistributions in binary form must reproduce the above copyright 
-       notice, this list of conditions and the following disclaimer in 
-       the documentation and/or other materials provided with the distribution.
-  
-    3. The names of the authors may not be used to endorse or promote products
-       derived from this software without specific prior written permission.
-  
-  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
-  INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
-  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-  OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-bzip2:
-  This program, "bzip2", the associated library "libbzip2", and all
-  documentation, are copyright (C) 1996-2010 Julian R Seward.  All
-  rights reserved.
-  
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions
-  are met:
-  
-  1. Redistributions of source code must retain the above copyright
-     notice, this list of conditions and the following disclaimer.
-  
-  2. The origin of this software must not be misrepresented; you must 
-     not claim that you wrote the original software.  If you use this 
-     software in a product, an acknowledgment in the product 
-     documentation would be appreciated but is not required.
-  
-  3. Altered source versions must be plainly marked as such, and must
-     not be misrepresented as being the original software.
-  
-  4. The name of the author may not be used to endorse or promote 
-     products derived from this software without specific prior written 
-     permission.
-  
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
-  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  
-  Julian Seward, jseward@bzip.org
-  bzip2/libbzip2 version 1.0.6 of 6 September 2010
-
+   Copyright 2013 Brendan Duncan

+

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+   

+   

+Some code has been derived from the following projects:

+

+zlib/inflate:

+  JavaScript Zlib Library, https://github.com/imaya/zlib.js

+  The MIT License

+  Copyright (c) 2012 imaya

+

+zlib/deflate:

+  Java JZLib Library, http://www.jcraft.com/jzlib/

+  Copyright (c) 2000-2011 ymnk, JCraft,Inc. All rights reserved.

+

+  Redistribution and use in source and binary forms, with or without

+  modification, are permitted provided that the following conditions are met:

+  

+    1. Redistributions of source code must retain the above copyright notice,

+       this list of conditions and the following disclaimer.

+  

+    2. Redistributions in binary form must reproduce the above copyright 

+       notice, this list of conditions and the following disclaimer in 

+       the documentation and/or other materials provided with the distribution.

+  

+    3. The names of the authors may not be used to endorse or promote products

+       derived from this software without specific prior written permission.

+  

+  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,

+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND

+  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,

+  INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,

+  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,

+  OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF

+  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING

+  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,

+  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+bzip2:

+  This program, "bzip2", the associated library "libbzip2", and all

+  documentation, are copyright (C) 1996-2010 Julian R Seward.  All

+  rights reserved.

+  

+  Redistribution and use in source and binary forms, with or without

+  modification, are permitted provided that the following conditions

+  are met:

+  

+  1. Redistributions of source code must retain the above copyright

+     notice, this list of conditions and the following disclaimer.

+  

+  2. The origin of this software must not be misrepresented; you must 

+     not claim that you wrote the original software.  If you use this 

+     software in a product, an acknowledgment in the product 

+     documentation would be appreciated but is not required.

+  

+  3. Altered source versions must be plainly marked as such, and must

+     not be misrepresented as being the original software.

+  

+  4. The name of the author may not be used to endorse or promote 

+     products derived from this software without specific prior written 

+     permission.

+  

+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS

+  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED

+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE

+  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY

+  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL

+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE

+  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS

+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,

+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING

+  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS

+  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+  

+  Julian Seward, jseward@bzip.org

+  bzip2/libbzip2 version 1.0.6 of 6 September 2010

+

diff --git a/pub/archive/README.md b/pub/archive/README.md
index 4f10c0b..c5fdc32 100755
--- a/pub/archive/README.md
+++ b/pub/archive/README.md
@@ -30,11 +30,11 @@
 compressed Tar file:

 

 ```dart

-import 'dart:io' as Io;

+import 'dart:io';

 import 'package:archive/archive.dart';

 void main() {

   // Read the Zip file from disk.

-  List<int> bytes = new Io.File('test.zip').readAsBytesSync();

+  List<int> bytes = new File('test.zip').readAsBytesSync();

 

   // Decode the Zip file

   Archive archive = new ZipDecoder().decodeBytes(bytes);

@@ -43,7 +43,7 @@
   for (ArchiveFile file in archive) {

     String filename = file.name;

     List<int> data = file.content;

-    new Io.File('out/' + filename)

+    new File('out/' + filename)

           ..createSync(recursive: true)

           ..writeAsBytesSync(data);

   }

@@ -53,7 +53,7 @@
   List<int> tar_bz2 = new BZip2Encoder().encode(tar_data);

 

   // Write the compressed tar file to disk.

-  Io.File fp = new Io.File(filename + '.tbz');

+  File fp = new File(filename + '.tbz');

   fp.writeAsBytesSync(tar_bz2);

 }

 ```

diff --git a/pub/archive/bin/tar.dart b/pub/archive/bin/tar.dart
index 707fd55..2068d35 100755
--- a/pub/archive/bin/tar.dart
+++ b/pub/archive/bin/tar.dart
@@ -85,6 +85,9 @@
   print('extracting to ${outDir.path}${io.Platform.pathSeparator}...');

 

   for (TarFile file in tarArchive.files) {

+    if (!file.isFile) {

+      continue;

+    }

     io.File f = new io.File(

         '${outputPath}${io.Platform.pathSeparator}${file.filename}');

     f.parent.createSync(recursive: true);

diff --git a/pub/archive/lib/src/archive.dart b/pub/archive/lib/src/archive.dart
index b28a13f..2e19d83 100755
--- a/pub/archive/lib/src/archive.dart
+++ b/pub/archive/lib/src/archive.dart
@@ -1,81 +1,81 @@
-part of archive;
-
-/**
- * A collection of files.
- */
-class Archive extends IterableBase<ArchiveFile> {
-  /// The list of files in the archive.
-  List<ArchiveFile> files = [];
-  /// A global comment for the archive.
-  String comment;
-
-  /**
-   * Add a file to the archive.
-   */
-  void addFile(ArchiveFile file) {
-    files.add(file);
-  }
-
-  /**
-   * The number of files in the archive.
-   */
-  int get length => files.length;
-
-  /**
-   * Get a file from the archive.
-   */
-  ArchiveFile operator[](int index) => files[index];
-
-  /**
-   * Find a file with the given [name] in the archive. If the file isn't found,
-   * null will be returned.
-   */
-  ArchiveFile findFile(String name) {
-    for (ArchiveFile f in files) {
-      if (f.name == name) {
-        return f;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * The number of files in the archive.
-   */
-  int numberOfFiles() {
-    return files.length;
-  }
-
-  /**
-   * The name of the file at the given [index].
-   */
-  String fileName(int index) {
-    return files[index].name;
-  }
-
-  /**
-   * The decompressed size of the file at the given [index].
-   */
-  int fileSize(int index) {
-    return files[index].size;
-  }
-
-  /**
-   * The decompressed data of the file at the given [index].
-   */
-  List<int> fileData(int index) {
-    return files[index].content;
-  }
-
-
-  ArchiveFile get first => files.first;
-
-  ArchiveFile get last => files.last;
-
-  bool get isEmpty => files.isEmpty;
-
-  // Returns true if there is at least one element in this collection.
-  bool get isNotEmpty => files.isNotEmpty;
-
-  Iterator<ArchiveFile> get iterator => files.iterator;
-}
+part of archive;

+

+/**

+ * A collection of files.

+ */

+class Archive extends IterableBase<ArchiveFile> {

+  /// The list of files in the archive.

+  List<ArchiveFile> files = [];

+  /// A global comment for the archive.

+  String comment;

+

+  /**

+   * Add a file to the archive.

+   */

+  void addFile(ArchiveFile file) {

+    files.add(file);

+  }

+

+  /**

+   * The number of files in the archive.

+   */

+  int get length => files.length;

+

+  /**

+   * Get a file from the archive.

+   */

+  ArchiveFile operator[](int index) => files[index];

+

+  /**

+   * Find a file with the given [name] in the archive. If the file isn't found,

+   * null will be returned.

+   */

+  ArchiveFile findFile(String name) {

+    for (ArchiveFile f in files) {

+      if (f.name == name) {

+        return f;

+      }

+    }

+    return null;

+  }

+

+  /**

+   * The number of files in the archive.

+   */

+  int numberOfFiles() {

+    return files.length;

+  }

+

+  /**

+   * The name of the file at the given [index].

+   */

+  String fileName(int index) {

+    return files[index].name;

+  }

+

+  /**

+   * The decompressed size of the file at the given [index].

+   */

+  int fileSize(int index) {

+    return files[index].size;

+  }

+

+  /**

+   * The decompressed data of the file at the given [index].

+   */

+  List<int> fileData(int index) {

+    return files[index].content;

+  }

+

+

+  ArchiveFile get first => files.first;

+

+  ArchiveFile get last => files.last;

+

+  bool get isEmpty => files.isEmpty;

+

+  // Returns true if there is at least one element in this collection.

+  bool get isNotEmpty => files.isNotEmpty;

+

+  Iterator<ArchiveFile> get iterator => files.iterator;

+}

diff --git a/pub/archive/lib/src/bzip2/bz2_bit_reader.dart b/pub/archive/lib/src/bzip2/bz2_bit_reader.dart
index 11a0360..6affa3d 100755
--- a/pub/archive/lib/src/bzip2/bz2_bit_reader.dart
+++ b/pub/archive/lib/src/bzip2/bz2_bit_reader.dart
@@ -1,51 +1,51 @@
-part of archive;
-
-class Bz2BitReader {
-  InputStream input;
-
-  Bz2BitReader(this.input);
-
-  int readByte() => readBits(8);
-
-  /**
-   * Read a number of bits from the input stream.
-   */
-  int readBits(int numBits) {
-    if (numBits == 0) {
-      return 0;
-    }
-
-    if (_bitPos == 0) {
-      _bitPos = 8;
-      _bitBuffer = input.readByte();
-    }
-
-    int value = 0;
-
-    while (numBits > _bitPos) {
-      value = (value << _bitPos) + (_bitBuffer & _BIT_MASK[_bitPos]);
-      numBits -= _bitPos;
-      _bitPos = 8;
-      _bitBuffer = input.readByte();
-    }
-
-    if (numBits > 0) {
-      if (_bitPos == 0) {
-        _bitPos = 8;
-        _bitBuffer = input.readByte();
-      }
-
-      value = (value << numBits) +
-              (_bitBuffer >> (_bitPos - numBits) & _BIT_MASK[numBits]);
-
-      _bitPos -= numBits;
-    }
-
-    return value;
-  }
-
-  int _bitBuffer = 0;
-  int _bitPos = 0;
-
-  static const List<int> _BIT_MASK = const [0, 1, 3, 7, 15, 31, 63, 127, 255];
-}
+part of archive;

+

+class Bz2BitReader {

+  InputStream input;

+

+  Bz2BitReader(this.input);

+

+  int readByte() => readBits(8);

+

+  /**

+   * Read a number of bits from the input stream.

+   */

+  int readBits(int numBits) {

+    if (numBits == 0) {

+      return 0;

+    }

+

+    if (_bitPos == 0) {

+      _bitPos = 8;

+      _bitBuffer = input.readByte();

+    }

+

+    int value = 0;

+

+    while (numBits > _bitPos) {

+      value = (value << _bitPos) + (_bitBuffer & _BIT_MASK[_bitPos]);

+      numBits -= _bitPos;

+      _bitPos = 8;

+      _bitBuffer = input.readByte();

+    }

+

+    if (numBits > 0) {

+      if (_bitPos == 0) {

+        _bitPos = 8;

+        _bitBuffer = input.readByte();

+      }

+

+      value = (value << numBits) +

+              (_bitBuffer >> (_bitPos - numBits) & _BIT_MASK[numBits]);

+

+      _bitPos -= numBits;

+    }

+

+    return value;

+  }

+

+  int _bitBuffer = 0;

+  int _bitPos = 0;

+

+  static const List<int> _BIT_MASK = const [0, 1, 3, 7, 15, 31, 63, 127, 255];

+}

diff --git a/pub/archive/lib/src/bzip2/bz2_bit_writer.dart b/pub/archive/lib/src/bzip2/bz2_bit_writer.dart
index 8fb6648..e9f2935 100755
--- a/pub/archive/lib/src/bzip2/bz2_bit_writer.dart
+++ b/pub/archive/lib/src/bzip2/bz2_bit_writer.dart
@@ -1,81 +1,81 @@
-part of archive;
-
-class Bz2BitWriter {
-  OutputStream output;
-
-  Bz2BitWriter(this.output);
-
-  void writeByte(int byte) => writeBits(8, byte);
-
-  void writeBytes(List<int> bytes) {
-    for (int i = 0; i < bytes.length; ++i) {
-      writeBits(8, bytes[i]);
-    }
-  }
-
-  void writeUint16(int value) {
-    writeBits(16, value);
-  }
-
-  void writeUint24(int value) {
-    writeBits(24, value);
-  }
-
-  void writeUint32(int value) {
-    writeBits(32, value);
-  }
-
-  void writeBits(int numBits, int value) {
-    // TODO optimize
-    if (_bitPos == 8 && numBits == 8) {
-      output.writeByte(value & 0xff);
-      return;
-    }
-
-    if (_bitPos == 8 && numBits == 16) {
-      output.writeByte((value >> 8) & 0xff);
-      output.writeByte(value & 0xff);
-      return;
-    }
-
-    if (_bitPos == 8 && numBits == 24) {
-      output.writeByte((value >> 16) & 0xff);
-      output.writeByte((value >> 8) & 0xff);
-      output.writeByte(value & 0xff);
-      return;
-    }
-
-    if (_bitPos == 8 && numBits == 32) {
-      output.writeByte((value >> 24) & 0xff);
-      output.writeByte((value >> 16) & 0xff);
-      output.writeByte((value >> 8) & 0xff);
-      output.writeByte(value & 0xff);
-      return;
-    }
-
-    while (numBits > 0) {
-      numBits--;
-      int b = (value >> numBits) & 0x1;
-      _bitBuffer = (_bitBuffer << 1) | b;
-      _bitPos--;
-      if (_bitPos == 0) {
-        output.writeByte(_bitBuffer);
-        _bitPos = 8;
-        _bitBuffer = 0;
-      }
-    }
-  }
-
-  /**
-   * Write any remaining bits from the buffer to the output, padding the
-   * remainder of the byte with 0's.
-   */
-  void flush() {
-    if (_bitPos != 8) {
-      writeBits(_bitPos, 0);
-    }
-  }
-
-  int _bitBuffer = 0;
-  int _bitPos = 8;
-}
+part of archive;

+

+class Bz2BitWriter {

+  OutputStream output;

+

+  Bz2BitWriter(this.output);

+

+  void writeByte(int byte) => writeBits(8, byte);

+

+  void writeBytes(List<int> bytes) {

+    for (int i = 0; i < bytes.length; ++i) {

+      writeBits(8, bytes[i]);

+    }

+  }

+

+  void writeUint16(int value) {

+    writeBits(16, value);

+  }

+

+  void writeUint24(int value) {

+    writeBits(24, value);

+  }

+

+  void writeUint32(int value) {

+    writeBits(32, value);

+  }

+

+  void writeBits(int numBits, int value) {

+    // TODO optimize

+    if (_bitPos == 8 && numBits == 8) {

+      output.writeByte(value & 0xff);

+      return;

+    }

+

+    if (_bitPos == 8 && numBits == 16) {

+      output.writeByte((value >> 8) & 0xff);

+      output.writeByte(value & 0xff);

+      return;

+    }

+

+    if (_bitPos == 8 && numBits == 24) {

+      output.writeByte((value >> 16) & 0xff);

+      output.writeByte((value >> 8) & 0xff);

+      output.writeByte(value & 0xff);

+      return;

+    }

+

+    if (_bitPos == 8 && numBits == 32) {

+      output.writeByte((value >> 24) & 0xff);

+      output.writeByte((value >> 16) & 0xff);

+      output.writeByte((value >> 8) & 0xff);

+      output.writeByte(value & 0xff);

+      return;

+    }

+

+    while (numBits > 0) {

+      numBits--;

+      int b = (value >> numBits) & 0x1;

+      _bitBuffer = (_bitBuffer << 1) | b;

+      _bitPos--;

+      if (_bitPos == 0) {

+        output.writeByte(_bitBuffer);

+        _bitPos = 8;

+        _bitBuffer = 0;

+      }

+    }

+  }

+

+  /**

+   * Write any remaining bits from the buffer to the output, padding the

+   * remainder of the byte with 0's.

+   */

+  void flush() {

+    if (_bitPos != 8) {

+      writeBits(_bitPos, 0);

+    }

+  }

+

+  int _bitBuffer = 0;

+  int _bitPos = 8;

+}

diff --git a/pub/archive/lib/src/bzip2/bzip2.dart b/pub/archive/lib/src/bzip2/bzip2.dart
index cb97cb4..353dcc3 100755
--- a/pub/archive/lib/src/bzip2/bzip2.dart
+++ b/pub/archive/lib/src/bzip2/bzip2.dart
@@ -1,91 +1,91 @@
-part of archive;
-
-class BZip2 {
-  static int INITIAL_CRC = 0xffffffff;
-
-  static int updateCrc(int value, int crc) {
-    return ((crc << 8) ^
-            _BZ2_CRC32_TABLE[(crc >> 24) & 0xff ^ (value & 0xff)]) &
-            0xffffffff;
-  }
-
-  static int finalizeCrc(int crc) {
-    return crc ^ 0xffffffff;
-  }
-
-  static const List<int> BZH_SIGNATURE = const [0x42, 0x5a, 0x68];
-
-  static const int HDR_0 = 0x30;
-
-  static const List<int> COMPRESSED_MAGIC = const [
-    0x31, 0x41, 0x59, 0x26, 0x53, 0x59];
-
-  static const List<int> EOS_MAGIC = const [
-    0x17, 0x72, 0x45, 0x38, 0x50, 0x90];
-
-  static const List<int> _BZ2_CRC32_TABLE = const [
-         0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9,
-         0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005,
-         0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,
-         0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
-         0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9,
-         0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,
-         0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011,
-         0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd,
-         0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
-         0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5,
-         0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81,
-         0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,
-         0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49,
-         0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
-         0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1,
-         0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d,
-         0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae,
-         0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,
-         0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
-         0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca,
-         0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,
-         0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02,
-         0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066,
-         0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
-         0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e,
-         0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692,
-         0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6,
-         0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,
-         0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
-         0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,
-         0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686,
-         0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a,
-         0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637,
-         0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
-         0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f,
-         0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,
-         0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47,
-         0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b,
-         0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
-         0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623,
-         0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7,
-         0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,
-         0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f,
-         0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
-         0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7,
-         0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b,
-         0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f,
-         0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,
-         0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
-         0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c,
-         0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8,
-         0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24,
-         0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30,
-         0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
-         0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088,
-         0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,
-         0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0,
-         0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c,
-         0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
-         0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,
-         0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0,
-         0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c,
-         0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,
-         0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4];
-}
+part of archive;

+

+class BZip2 {

+  static int INITIAL_CRC = 0xffffffff;

+

+  static int updateCrc(int value, int crc) {

+    return ((crc << 8) ^

+            _BZ2_CRC32_TABLE[(crc >> 24) & 0xff ^ (value & 0xff)]) &

+            0xffffffff;

+  }

+

+  static int finalizeCrc(int crc) {

+    return crc ^ 0xffffffff;

+  }

+

+  static const List<int> BZH_SIGNATURE = const [0x42, 0x5a, 0x68];

+

+  static const int HDR_0 = 0x30;

+

+  static const List<int> COMPRESSED_MAGIC = const [

+    0x31, 0x41, 0x59, 0x26, 0x53, 0x59];

+

+  static const List<int> EOS_MAGIC = const [

+    0x17, 0x72, 0x45, 0x38, 0x50, 0x90];

+

+  static const List<int> _BZ2_CRC32_TABLE = const [

+         0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9,

+         0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005,

+         0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,

+         0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,

+         0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9,

+         0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,

+         0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011,

+         0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd,

+         0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,

+         0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5,

+         0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81,

+         0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,

+         0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49,

+         0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,

+         0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1,

+         0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d,

+         0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae,

+         0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,

+         0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,

+         0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca,

+         0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,

+         0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02,

+         0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066,

+         0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,

+         0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e,

+         0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692,

+         0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6,

+         0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,

+         0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,

+         0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,

+         0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686,

+         0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a,

+         0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637,

+         0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,

+         0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f,

+         0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,

+         0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47,

+         0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b,

+         0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,

+         0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623,

+         0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7,

+         0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,

+         0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f,

+         0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,

+         0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7,

+         0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b,

+         0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f,

+         0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,

+         0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,

+         0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c,

+         0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8,

+         0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24,

+         0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30,

+         0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,

+         0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088,

+         0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,

+         0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0,

+         0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c,

+         0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,

+         0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,

+         0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0,

+         0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c,

+         0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,

+         0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4];

+}

diff --git a/pub/archive/lib/src/tar/tar_file.dart b/pub/archive/lib/src/tar/tar_file.dart
index 254e090..ba10b51 100755
--- a/pub/archive/lib/src/tar/tar_file.dart
+++ b/pub/archive/lib/src/tar/tar_file.dart
@@ -27,7 +27,18 @@
   static const String TYPE_NORMAL_FILE = '0';

   static const String TYPE_HARD_LINK = '1';

   static const String TYPE_SYMBOLIC_LINK = '2';

+  static const String TYPE_CHAR_SPEC = '3';

+  static const String TYPE_BLOCK_SPEC = '4';

   static const String TYPE_DIRECTORY = '5';

+  static const String TYPE_FIFO = '6';

+  static const String TYPE_CONT_FILE = '7';

+  // global extended header with meta data (POSIX.1-2001)

+  static const String TYPE_G_EX_HEADER = 'g';

+  static const String TYPE_G_EX_HEADER2 = 'G';

+  // extended header with meta data for the next file in the archive

+  // (POSIX.1-2001)

+  static const String TYPE_EX_HEADER = 'x';

+  static const String TYPE_EX_HEADER2 = 'X';

 

   // Pre-POSIX Format

   String filename; // 100 bytes

@@ -174,7 +185,14 @@
     if (s.isEmpty) {

       return 0;

     }

-    int x = int.parse(s, radix: 8);

+    int x = 0;

+    try {

+      x = int.parse(s, radix: 8);

+    } catch(e) {

+      // Catch to fix a crash with bad group_id and owner_id values.

+      // This occurs for POSIX archives, where some attributes like uid and

+      // gid are stored in a separate PaxHeader file.

+    }

     return x;

   }

 

diff --git a/pub/archive/lib/src/tar_decoder.dart b/pub/archive/lib/src/tar_decoder.dart
index ef9ff6d..feb6515 100755
--- a/pub/archive/lib/src/tar_decoder.dart
+++ b/pub/archive/lib/src/tar_decoder.dart
@@ -14,6 +14,7 @@
     Archive archive = new Archive();

     files.clear();

 

+    //TarFile paxHeader = null;

     while (!input.isEOS) {

       // End of archive when two consecutive 0's are found.

       if (input[0] == 0 && input[1] == 0) {

@@ -21,16 +22,30 @@
       }

 

       TarFile tf = new TarFile.read(input);

-      files.add(tf);

+      // In POSIX formatted tar files, a separate 'PAX' file contains extended

+      // metadata for files. These are identified by having a type flag 'X'.

+      // TODO parse these metadata values.

+      if (tf.typeFlag == TarFile.TYPE_G_EX_HEADER ||

+          tf.typeFlag == TarFile.TYPE_G_EX_HEADER2) {

+        // TODO handle PAX global header.

+      }

+      if (tf.typeFlag == TarFile.TYPE_EX_HEADER ||

+          tf.typeFlag == TarFile.TYPE_EX_HEADER2) {

+        //paxHeader = tf;

+      } else {

+        files.add(tf);

 

-      ArchiveFile file = new ArchiveFile(tf.filename, tf.fileSize, tf._rawContent);

-      file.mode = tf.mode;

-      file.ownerId = tf.ownerId;

-      file.groupId = tf.groupId;

-      file.lastModTime = tf.lastModTime;

-      file.isFile = tf.isFile;

+        ArchiveFile file = new ArchiveFile(

+            tf.filename, tf.fileSize, tf._rawContent);

 

-      archive.addFile(file);

+        file.mode = tf.mode;

+        file.ownerId = tf.ownerId;

+        file.groupId = tf.groupId;

+        file.lastModTime = tf.lastModTime;

+        file.isFile = tf.isFile;

+

+        archive.addFile(file);

+      }

     }

 

     return archive;

diff --git a/pub/archive/lib/src/util/archive_exception.dart b/pub/archive/lib/src/util/archive_exception.dart
index 72b5539..e5f4455 100755
--- a/pub/archive/lib/src/util/archive_exception.dart
+++ b/pub/archive/lib/src/util/archive_exception.dart
@@ -1,13 +1,13 @@
-part of archive;
-
-/**
- * An exception thrown when there was a problem in the archive library.
- */
-class ArchiveException implements Exception {
-  /// A message describing the error.
-  final String message;
-
-  ArchiveException(this.message);
-
-  String toString() => "ArchiveException: $message";
-}
+part of archive;

+

+/**

+ * An exception thrown when there was a problem in the archive library.

+ */

+class ArchiveException implements Exception {

+  /// A message describing the error.

+  final String message;

+

+  ArchiveException(this.message);

+

+  String toString() => "ArchiveException: $message";

+}

diff --git a/pub/archive/lib/src/util/byte_order.dart b/pub/archive/lib/src/util/byte_order.dart
index d2bd29f..abd0f0a 100755
--- a/pub/archive/lib/src/util/byte_order.dart
+++ b/pub/archive/lib/src/util/byte_order.dart
@@ -1,5 +1,5 @@
-part of archive;
-
-// enum ByteOrder
-const int LITTLE_ENDIAN = 0;
-const int BIG_ENDIAN = 1;
+part of archive;

+

+// enum ByteOrder

+const int LITTLE_ENDIAN = 0;

+const int BIG_ENDIAN = 1;

diff --git a/pub/archive/lib/src/zlib/huffman_table.dart b/pub/archive/lib/src/zlib/huffman_table.dart
index 85c6e16..cb38900 100755
--- a/pub/archive/lib/src/zlib/huffman_table.dart
+++ b/pub/archive/lib/src/zlib/huffman_table.dart
@@ -1,49 +1,49 @@
-part of archive;
-
-/**
- * Build huffman table from length list.
- */
-class HuffmanTable {
-  Uint32List table;
-  int maxCodeLength = 0;
-  int minCodeLength = 0x7fffffff;
-
-  HuffmanTable(List<int> lengths) {
-    int listSize = lengths.length;
-
-    for (int i = 0; i < listSize; ++i) {
-      if (lengths[i] > maxCodeLength) {
-        maxCodeLength = lengths[i];
-      }
-      if (lengths[i] < minCodeLength) {
-        minCodeLength = lengths[i];
-      }
-    }
-
-    int size = 1 << maxCodeLength;
-    table = new Uint32List(size);
-
-    for (int bitLength = 1, code = 0, skip = 2; bitLength <= maxCodeLength;) {
-      for (int i = 0; i < listSize; ++i) {
-        if (lengths[i] == bitLength) {
-          int reversed = 0;
-          int rtemp = code;
-          for (int j = 0; j < bitLength; ++j) {
-            reversed = (reversed << 1) | (rtemp & 1);
-            rtemp >>= 1;
-          }
-
-          for (int j = reversed; j < size; j += skip) {
-            table[j] = (bitLength << 16) | i;
-          }
-
-          ++code;
-        }
-      }
-
-      ++bitLength;
-      code <<= 1;
-      skip <<= 1;
-    }
-  }
-}
+part of archive;

+

+/**

+ * Build huffman table from length list.

+ */

+class HuffmanTable {

+  Uint32List table;

+  int maxCodeLength = 0;

+  int minCodeLength = 0x7fffffff;

+

+  HuffmanTable(List<int> lengths) {

+    int listSize = lengths.length;

+

+    for (int i = 0; i < listSize; ++i) {

+      if (lengths[i] > maxCodeLength) {

+        maxCodeLength = lengths[i];

+      }

+      if (lengths[i] < minCodeLength) {

+        minCodeLength = lengths[i];

+      }

+    }

+

+    int size = 1 << maxCodeLength;

+    table = new Uint32List(size);

+

+    for (int bitLength = 1, code = 0, skip = 2; bitLength <= maxCodeLength;) {

+      for (int i = 0; i < listSize; ++i) {

+        if (lengths[i] == bitLength) {

+          int reversed = 0;

+          int rtemp = code;

+          for (int j = 0; j < bitLength; ++j) {

+            reversed = (reversed << 1) | (rtemp & 1);

+            rtemp >>= 1;

+          }

+

+          for (int j = reversed; j < size; j += skip) {

+            table[j] = (bitLength << 16) | i;

+          }

+

+          ++code;

+        }

+      }

+

+      ++bitLength;

+      code <<= 1;

+      skip <<= 1;

+    }

+  }

+}

diff --git a/pub/archive/pubspec.yaml b/pub/archive/pubspec.yaml
index 040247e..fd58481 100755
--- a/pub/archive/pubspec.yaml
+++ b/pub/archive/pubspec.yaml
@@ -1,5 +1,5 @@
 name: archive

-version: 1.0.28

+version: 1.0.29

 author: Brendan Duncan <brendanduncan@gmail.com>

 description: Provides encoders and decoders for various archive and compression formats such as zip, tar, bzip2, gzip, and zlib.

 homepage: https://github.com/brendan-duncan/archive

@@ -8,6 +8,7 @@
 documentation: https://github.com/brendan-duncan/archive/wiki

 dependencies:

   crypto: '>=0.9.2 <3.0.0'

+  args: '>=0.13.7 <1.0.0'

 dev_dependencies:

   browser: '<1.0.0'

   test: '>=0.12.13 <1.0.0'

diff --git a/pub/cli_util/BUILD.gn b/pub/cli_util/BUILD.gn
index 387bc35..3d26f70 100644
--- a/pub/cli_util/BUILD.gn
+++ b/pub/cli_util/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for cli_util-0.1.0
+# This file is generated by importer.py for cli_util-0.1.1
 
 import("//build/dart/dart_package.gni")
 
diff --git a/pub/cli_util/CHANGELOG.md b/pub/cli_util/CHANGELOG.md
index eaeffde..c5d12d6 100644
--- a/pub/cli_util/CHANGELOG.md
+++ b/pub/cli_util/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Changelog
 
+## 0.1.1
+
+- Updated to the output for indeterminate progress
+- Exposed a `Logger.isVerbose` getter
+
 ## 0.1.0
 
 - Use the new `Platform.resolvedExecutable` API to locate the SDK
diff --git a/pub/cli_util/README.md b/pub/cli_util/README.md
index e27d663..0256472 100644
--- a/pub/cli_util/README.md
+++ b/pub/cli_util/README.md
@@ -7,6 +7,7 @@
 interact with the Dart SDK (such as the [analyzer][analyzer]).
 
 [![Build Status](https://travis-ci.org/dart-lang/cli_util.svg)](https://travis-ci.org/dart-lang/cli_util)
+[![Pub](https://img.shields.io/pub/v/cli_util.svg)](https://pub.dartlang.org/packages/cli_util)
 
 ## Locating the Dart SDK
 
diff --git a/pub/cli_util/lib/cli_logging.dart b/pub/cli_util/lib/cli_logging.dart
index 72ec89a..2da62ca 100644
--- a/pub/cli_util/lib/cli_logging.dart
+++ b/pub/cli_util/lib/cli_logging.dart
@@ -4,12 +4,11 @@
 
 /// This library contains functionality to help command-line utilities to easily
 /// create aesthetic output.
+library cli_logging;
 
 import 'dart:async';
 import 'dart:io' as io;
 
-/// create aesthetic output.
-
 /// A small utility class to make it easier to work with common ANSI escape
 /// sequences.
 class Ansi {
@@ -63,6 +62,8 @@
 
   Ansi get ansi;
 
+  bool get isVerbose;
+
   /// Print an error message.
   void stderr(String message);
 
@@ -103,6 +104,8 @@
     ansi ??= new Ansi(Ansi.terminalSupportsAnsi);
   }
 
+  bool get isVerbose => false;
+
   Progress _currentProgress;
 
   void stderr(String message) {
@@ -202,15 +205,17 @@
       bool showTiming: false}) {
     String char = kAnimationItems[_index % kAnimationItems.length];
     if (isFinal || cancelled) {
-      char = ' ';
+      char = '';
     }
     io.stdout.write('${ansi.backspace}${char}');
     if (isFinal || cancelled) {
       if (message != null) {
-        io.stdout.write(message);
+        io.stdout.write(message.isEmpty ? ' ' : message);
       } else if (showTiming) {
         String time = (elapsed.inMilliseconds / 1000.0).toStringAsFixed(1);
         io.stdout.write('${time}s');
+      } else {
+        io.stdout.write(' ');
       }
       io.stdout.writeln();
     }
@@ -229,6 +234,8 @@
     _timer = new Stopwatch()..start();
   }
 
+  bool get isVerbose => true;
+
   void stderr(String message) {
     flush();
     _previousErr = '${ansi.red}$message${ansi.none}';
diff --git a/pub/cli_util/lib/cli_util.dart b/pub/cli_util/lib/cli_util.dart
index 2c8faa2..5d32e78 100644
--- a/pub/cli_util/lib/cli_util.dart
+++ b/pub/cli_util/lib/cli_util.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// Utilities to return the Dart SDK location.
+library cli_util;
 
 import 'dart:io';
 
diff --git a/pub/cli_util/pubspec.yaml b/pub/cli_util/pubspec.yaml
index ccd17b5..baead10 100644
--- a/pub/cli_util/pubspec.yaml
+++ b/pub/cli_util/pubspec.yaml
@@ -1,5 +1,5 @@
 name: cli_util
-version: 0.1.0
+version: 0.1.1
 author: Dart Team <misc@dartlang.org>
 description: A library to help in building Dart command-line apps.
 homepage: https://github.com/dart-lang/cli_util
diff --git a/pub/csslib/BUILD.gn b/pub/csslib/BUILD.gn
index f75672a..699b4cd 100644
--- a/pub/csslib/BUILD.gn
+++ b/pub/csslib/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for csslib-0.13.7+1
+# This file is generated by importer.py for csslib-0.14.0
 
 import("//build/dart/dart_package.gni")
 
diff --git a/pub/csslib/CHANGELOG.md b/pub/csslib/CHANGELOG.md
index e23bdf8..8662956 100644
--- a/pub/csslib/CHANGELOG.md
+++ b/pub/csslib/CHANGELOG.md
@@ -1,3 +1,16 @@
+## 0.14.0
+
+### New features
+
+* Supports nested at-rules.
+* Supports nested HTML comments in CSS comments and vice-versa.
+
+### Breaking changes
+
+* The `List<RuleSet> rulesets` field on `MediaDirective`, `HostDirective`, and
+  `StyletDirective` has been replaced by `List<TreeNode> rules` to allow nested
+  at-rules in addition to rulesets.
+
 ## 0.13.6
 
 * Adds support for `@viewport`.
diff --git a/pub/csslib/lib/parser.dart b/pub/csslib/lib/parser.dart
index cd4f6c0..6688507 100644
--- a/pub/csslib/lib/parser.dart
+++ b/pub/csslib/lib/parser.dart
@@ -211,17 +211,11 @@
     var start = _peekToken.span;
     while (!_maybeEat(TokenKind.END_OF_FILE) && !_peekKind(TokenKind.RBRACE)) {
       // TODO(terry): Need to handle charset.
-      var directive = processDirective();
-      if (directive != null) {
-        productions.add(directive);
-        _maybeEat(TokenKind.SEMICOLON);
+      final rule = processRule();
+      if (rule != null) {
+        productions.add(rule);
       } else {
-        RuleSet ruleset = processRuleSet();
-        if (ruleset != null) {
-          productions.add(ruleset);
-        } else {
-          break;
-        }
+        break;
       }
     }
 
@@ -523,12 +517,12 @@
         // Any medias?
         var media = processMediaQueryList();
 
-        List<TreeNode> rulesets = [];
+        List<TreeNode> rules = [];
         if (_maybeEat(TokenKind.LBRACE)) {
           while (!_maybeEat(TokenKind.END_OF_FILE)) {
-            RuleSet ruleset = processRuleSet();
-            if (ruleset == null) break;
-            rulesets.add(ruleset);
+            final rule = processRule();
+            if (rule == null) break;
+            rules.add(rule);
           }
 
           if (!_maybeEat(TokenKind.RBRACE)) {
@@ -537,17 +531,17 @@
         } else {
           _error('expected { after media before ruleset', _peekToken.span);
         }
-        return new MediaDirective(media, rulesets, _makeSpan(start));
+        return new MediaDirective(media, rules, _makeSpan(start));
 
       case TokenKind.DIRECTIVE_HOST:
         _next();
 
-        List<TreeNode> rulesets = [];
+        List<TreeNode> rules = [];
         if (_maybeEat(TokenKind.LBRACE)) {
           while (!_maybeEat(TokenKind.END_OF_FILE)) {
-            RuleSet ruleset = processRuleSet();
-            if (ruleset == null) break;
-            rulesets.add(ruleset);
+            final rule = processRule();
+            if (rule == null) break;
+            rules.add(rule);
           }
 
           if (!_maybeEat(TokenKind.RBRACE)) {
@@ -556,7 +550,7 @@
         } else {
           _error('expected { after host before ruleset', _peekToken.span);
         }
-        return new HostDirective(rulesets, _makeSpan(start));
+        return new HostDirective(rules, _makeSpan(start));
 
       case TokenKind.DIRECTIVE_PAGE:
         /*
@@ -708,11 +702,11 @@
 
         start = _peekToken.span;
         while (!_maybeEat(TokenKind.END_OF_FILE)) {
-          RuleSet ruleset = processRuleSet();
-          if (ruleset == null) {
+          final rule = processRule();
+          if (rule == null) {
             break;
           }
-          productions.add(ruleset);
+          productions.add(rule);
         }
 
         _eat(TokenKind.RBRACE);
@@ -1121,8 +1115,13 @@
     return new ViewportDirective(name, declarations, _makeSpan(start));
   }
 
-  RuleSet processRuleSet([SelectorGroup selectorGroup]) {
+  TreeNode processRule([SelectorGroup selectorGroup]) {
     if (selectorGroup == null) {
+      final directive = processDirective();
+      if (directive != null) {
+        _maybeEat(TokenKind.SEMICOLON);
+        return directive;
+      }
       selectorGroup = processSelectorGroup();
     }
     if (selectorGroup != null) {
@@ -1135,14 +1134,9 @@
   List<TreeNode> processGroupRuleBody() {
     var nodes = <TreeNode>[];
     while (!(_peekKind(TokenKind.RBRACE) || _peekKind(TokenKind.END_OF_FILE))) {
-      var directive = processDirective();
-      if (directive != null) {
-        nodes.add(directive);
-        continue;
-      }
-      var ruleSet = processRuleSet();
-      if (ruleSet != null) {
-        nodes.add(ruleSet);
+      var rule = processRule();
+      if (rule != null) {
+        nodes.add(rule);
         continue;
       }
       break;
@@ -1211,7 +1205,7 @@
       var selectorGroup = _nestedSelector();
       while (selectorGroup != null) {
         // Nested selector so process as a ruleset.
-        var ruleset = processRuleSet(selectorGroup);
+        var ruleset = processRule(selectorGroup);
         decls.add(ruleset);
         selectorGroup = _nestedSelector();
       }
diff --git a/pub/csslib/lib/src/analyzer.dart b/pub/csslib/lib/src/analyzer.dart
index 7c7372c..6c6ba6d 100644
--- a/pub/csslib/lib/src/analyzer.dart
+++ b/pub/csslib/lib/src/analyzer.dart
@@ -415,9 +415,9 @@
   _MediaRulesReplacer(this._ruleSet, this._newRules);
 
   visitMediaDirective(MediaDirective node) {
-    var index = node.rulesets.indexOf(_ruleSet);
+    var index = node.rules.indexOf(_ruleSet);
     if (index != -1) {
-      node.rulesets.insertAll(index + 1, _newRules);
+      node.rules.insertAll(index + 1, _newRules);
       _foundAndReplaced = true;
     }
   }
diff --git a/pub/csslib/lib/src/css_printer.dart b/pub/csslib/lib/src/css_printer.dart
index ac26acb..91c2861 100644
--- a/pub/csslib/lib/src/css_printer.dart
+++ b/pub/csslib/lib/src/css_printer.dart
@@ -141,7 +141,7 @@
     emit('$_newLine@media');
     emitMediaQueries(node.mediaQueries);
     emit('$_sp{');
-    for (var ruleset in node.rulesets) {
+    for (var ruleset in node.rules) {
       ruleset.visit(this);
     }
     emit('$_newLine}');
@@ -149,7 +149,7 @@
 
   void visitHostDirective(HostDirective node) {
     emit('$_newLine@host$_sp{');
-    for (var ruleset in node.rulesets) {
+    for (var ruleset in node.rules) {
       ruleset.visit(this);
     }
     emit('$_newLine}');
diff --git a/pub/csslib/lib/src/tokenizer.dart b/pub/csslib/lib/src/tokenizer.dart
index d7677f9..0b0661a 100644
--- a/pub/csslib/lib/src/tokenizer.dart
+++ b/pub/csslib/lib/src/tokenizer.dart
@@ -149,7 +149,7 @@
         if (_maybeEatChar(TokenChar.BANG)) {
           if (_maybeEatChar(TokenChar.MINUS) &&
               _maybeEatChar(TokenChar.MINUS)) {
-            return finishMultiLineComment();
+            return finishHtmlComment();
           } else if (_maybeEatChar(TokenChar.LBRACK) &&
               _maybeEatChar(CDATA_NAME[0]) &&
               _maybeEatChar(CDATA_NAME[1]) &&
@@ -393,6 +393,26 @@
     return _finishToken(TokenKind.HEX_RANGE);
   }
 
+  Token finishHtmlComment() {
+    while (true) {
+      int ch = _nextChar();
+      if (ch == 0) {
+        return _finishToken(TokenKind.INCOMPLETE_COMMENT);
+      } else if (ch == TokenChar.MINUS) {
+        /* Check if close part of Comment Definition --> (CDC). */
+        if (_maybeEatChar(TokenChar.MINUS)) {
+          if (_maybeEatChar(TokenChar.GREATER)) {
+            if (_inString) {
+              return next();
+            } else {
+              return _finishToken(TokenKind.HTML_COMMENT);
+            }
+          }
+        }
+      }
+    }
+  }
+
   Token finishMultiLineComment() {
     while (true) {
       int ch = _nextChar();
@@ -406,17 +426,6 @@
             return _finishToken(TokenKind.COMMENT);
           }
         }
-      } else if (ch == TokenChar.MINUS) {
-        /* Check if close part of Comment Definition --> (CDC). */
-        if (_maybeEatChar(TokenChar.MINUS)) {
-          if (_maybeEatChar(TokenChar.GREATER)) {
-            if (_inString) {
-              return next();
-            } else {
-              return _finishToken(TokenKind.HTML_COMMENT);
-            }
-          }
-        }
       }
     }
   }
diff --git a/pub/csslib/lib/src/tree.dart b/pub/csslib/lib/src/tree.dart
index 509e708..7e68473 100644
--- a/pub/csslib/lib/src/tree.dart
+++ b/pub/csslib/lib/src/tree.dart
@@ -638,9 +638,9 @@
 
 class MediaDirective extends Directive {
   final List<MediaQuery> mediaQueries;
-  final List<RuleSet> rulesets;
+  final List<TreeNode> rules;
 
-  MediaDirective(this.mediaQueries, this.rulesets, SourceSpan span)
+  MediaDirective(this.mediaQueries, this.rules, SourceSpan span)
       : super(span);
 
   MediaDirective clone() {
@@ -648,27 +648,27 @@
     for (var mediaQuery in mediaQueries) {
       cloneQueries.add(mediaQuery.clone());
     }
-    var cloneRulesets = <RuleSet>[];
-    for (var ruleset in rulesets) {
-      cloneRulesets.add(ruleset.clone());
+    var cloneRules = <TreeNode>[];
+    for (var rule in rules) {
+      cloneRules.add(rule.clone());
     }
-    return new MediaDirective(cloneQueries, cloneRulesets, span);
+    return new MediaDirective(cloneQueries, cloneRules, span);
   }
 
   visit(VisitorBase visitor) => visitor.visitMediaDirective(this);
 }
 
 class HostDirective extends Directive {
-  final List<RuleSet> rulesets;
+  final List<TreeNode> rules;
 
-  HostDirective(this.rulesets, SourceSpan span) : super(span);
+  HostDirective(this.rules, SourceSpan span) : super(span);
 
   HostDirective clone() {
-    var cloneRulesets = <RuleSet>[];
-    for (var ruleset in rulesets) {
-      cloneRulesets.add(ruleset.clone());
+    var cloneRules = <TreeNode>[];
+    for (var rule in rules) {
+      cloneRules.add(rule.clone());
     }
-    return new HostDirective(cloneRulesets, span);
+    return new HostDirective(cloneRules, span);
   }
 
   visit(VisitorBase visitor) => visitor.visitHostDirective(this);
@@ -771,20 +771,20 @@
 
 class StyletDirective extends Directive {
   final String dartClassName;
-  final List<RuleSet> rulesets;
+  final List<TreeNode> rules;
 
-  StyletDirective(this.dartClassName, this.rulesets, SourceSpan span)
+  StyletDirective(this.dartClassName, this.rules, SourceSpan span)
       : super(span);
 
   bool get isBuiltIn => false;
   bool get isExtension => true;
 
   StyletDirective clone() {
-    var cloneRulesets = <RuleSet>[];
-    for (var ruleset in rulesets) {
-      cloneRulesets.add(ruleset.clone());
+    var cloneRules = <TreeNode>[];
+    for (var rule in rules) {
+      cloneRules.add(rule.clone());
     }
-    return new StyletDirective(dartClassName, cloneRulesets, span);
+    return new StyletDirective(dartClassName, cloneRules, span);
   }
 
   visit(VisitorBase visitor) => visitor.visitStyletDirective(this);
diff --git a/pub/csslib/lib/src/tree_printer.dart b/pub/csslib/lib/src/tree_printer.dart
index ba35dec..4f196c0 100644
--- a/pub/csslib/lib/src/tree_printer.dart
+++ b/pub/csslib/lib/src/tree_printer.dart
@@ -85,7 +85,7 @@
     heading('MediaDirective', node);
     output.depth++;
     output.writeNodeList('media queries', node.mediaQueries);
-    output.writeNodeList('rule sets', node.rulesets);
+    output.writeNodeList('rule sets', node.rules);
     super.visitMediaDirective(node);
     output.depth--;
   }
@@ -191,7 +191,7 @@
     heading('StyletDirective', node);
     output.writeValue('dartClassName', node.dartClassName);
     output.depth++;
-    output.writeNodeList('rulesets', node.rulesets);
+    output.writeNodeList('rulesets', node.rules);
     output.depth--;
   }
 
diff --git a/pub/csslib/lib/visitor.dart b/pub/csslib/lib/visitor.dart
index eff9e7b..6e3af18 100644
--- a/pub/csslib/lib/visitor.dart
+++ b/pub/csslib/lib/visitor.dart
@@ -190,18 +190,12 @@
   }
 
   visitMediaDirective(MediaDirective node) {
-    for (var mediaQuery in node.mediaQueries) {
-      visitMediaQuery(mediaQuery);
-    }
-    for (var ruleset in node.rulesets) {
-      visitRuleSet(ruleset);
-    }
+    _visitNodeList(node.mediaQueries);
+    _visitNodeList(node.rules);
   }
 
   visitHostDirective(HostDirective node) {
-    for (var ruleset in node.rulesets) {
-      visitRuleSet(ruleset);
-    }
+    _visitNodeList(node.rules);
   }
 
   visitPageDirective(PageDirective node) {
@@ -237,7 +231,7 @@
   }
 
   visitStyletDirective(StyletDirective node) {
-    _visitNodeList(node.rulesets);
+    _visitNodeList(node.rules);
   }
 
   visitNamespaceDirective(NamespaceDirective node) {}
diff --git a/pub/csslib/pubspec.yaml b/pub/csslib/pubspec.yaml
index ac5d5c5..2111ec9 100644
--- a/pub/csslib/pubspec.yaml
+++ b/pub/csslib/pubspec.yaml
@@ -1,5 +1,5 @@
 name: csslib
-version: 0.13.7+1
+version: 0.14.0
 author: Dart Team <misc@dartlang.org>
 description: A library for parsing CSS.
 homepage: https://github.com/dart-lang/csslib
diff --git a/pub/html/BUILD.gn b/pub/html/BUILD.gn
index 98facce..1b6dba1 100644
--- a/pub/html/BUILD.gn
+++ b/pub/html/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for html-0.13.1
+# This file is generated by importer.py for html-0.13.2
 
 import("//build/dart/dart_package.gni")
 
diff --git a/pub/html/CHANGELOG.md b/pub/html/CHANGELOG.md
index dbf745c..af73106 100644
--- a/pub/html/CHANGELOG.md
+++ b/pub/html/CHANGELOG.md
@@ -1,7 +1,6 @@
-# changelog
+## 0.13.2
 
-This file contains highlights of what changes on each version of the html
-package.
+ * Support the latest release of `pkg/csslib`.
 
 ## 0.13.1
  * Update Set.difference to take a Set<Object>.
diff --git a/pub/html/lib/dom.dart b/pub/html/lib/dom.dart
index 63182f6..bd3e2bd 100644
--- a/pub/html/lib/dom.dart
+++ b/pub/html/lib/dom.dart
@@ -809,7 +809,6 @@
 // TODO(jmesserly): "implements List<Element>" is a workaround for analyzer bug.
 class FilteredElementList extends IterableBase<Element> with ListMixin<Element>
     implements List<Element> {
-  final Node _node;
   final List<Node> _childNodes;
 
   /// Creates a collection of the elements that descend from a node.
@@ -819,8 +818,8 @@
   ///     var filteredElements = new FilteredElementList(query("#container"));
   ///     // filteredElements is [a, b, c].
   FilteredElementList(Node node)
-      : _childNodes = node.nodes,
-        _node = node;
+      : _childNodes = node.nodes;
+
 
   // We can't memoize this, since it's possible that children will be messed
   // with externally to this class.
diff --git a/pub/html/lib/src/encoding_parser.dart b/pub/html/lib/src/encoding_parser.dart
index 0b84989..9da260b 100644
--- a/pub/html/lib/src/encoding_parser.dart
+++ b/pub/html/lib/src/encoding_parser.dart
@@ -200,7 +200,6 @@
         }
       }
     }
-    return true; // unreachable
   }
 
   bool handlePossibleStartTag() => handlePossibleTag(false);
@@ -322,7 +321,6 @@
         attrValue.add(c);
       }
     }
-    return null; // unreachable
   }
 }
 
diff --git a/pub/html/pubspec.yaml b/pub/html/pubspec.yaml
index cceb1e4..5e9f0d5 100644
--- a/pub/html/pubspec.yaml
+++ b/pub/html/pubspec.yaml
@@ -1,12 +1,12 @@
 name: html
-version: 0.13.1
+version: 0.13.2
 author: Dart Team <misc@dartlang.org>
 description: A library for working with HTML documents. Previously known as html5lib.
 homepage: https://github.com/dart-lang/html
 environment:
-  sdk: '>=1.21.0-dev.2.0 <2.0.0'
+  sdk: '>=1.21.0 <2.0.0'
 dependencies:
-  csslib: '>=0.13.2 <0.14.0'
+  csslib: '>=0.13.2 <0.15.0'
   source_span: '>=1.0.0 <2.0.0'
   utf: '>=0.9.0 <0.10.0'
 dev_dependencies:
diff --git a/pub/path_provider/.gitignore b/pub/path_provider/.gitignore
new file mode 100644
index 0000000..14c7d4c
--- /dev/null
+++ b/pub/path_provider/.gitignore
@@ -0,0 +1,9 @@
+.DS_Store
+.atom/
+.idea
+.packages
+.pub/
+build/
+ios/.generated/
+packages
+pubspec.lock
diff --git a/pub/path_provider/BUILD.gn b/pub/path_provider/BUILD.gn
new file mode 100644
index 0000000..392470d
--- /dev/null
+++ b/pub/path_provider/BUILD.gn
@@ -0,0 +1,15 @@
+# This file is generated by importer.py for path_provider-0.2.1+1
+
+import("//build/dart/dart_package.gni")
+
+dart_package("path_provider") {
+  package_name = "path_provider"
+
+  source_dir = "lib"
+
+  disable_analysis = true
+
+  deps = [
+    "//lib/flutter/packages/flutter",
+  ]
+}
diff --git a/pub/path_provider/CHANGELOG.md b/pub/path_provider/CHANGELOG.md
new file mode 100644
index 0000000..ffed6b8
--- /dev/null
+++ b/pub/path_provider/CHANGELOG.md
@@ -0,0 +1,27 @@
+## [0.2.1+1] - 2017-05-16
+
+* Updated README
+
+## [0.2.1] - 2017-05-16
+
+* Add function to determine external storage directory.
+
+## [0.2.0] - 2017-05-10
+
+* Upgrade to new plugin registration. (https://groups.google.com/forum/#!topic/flutter-dev/zba1Ynf2OKM)
+
+## [0.1.3] - 2017-05-09
+
+* Upgrade Android SDK Build Tools to 25.0.3.
+
+## [0.1.2] - 2017-05-08
+
+* Add test.
+
+## [0.1.1] - 2017-05-04
+
+* Change to README.md.
+
+## [0.1.0] - 2017-05-03
+
+* Initial Open Source release.
diff --git a/pub/path_provider/LICENSE b/pub/path_provider/LICENSE
new file mode 100644
index 0000000..566f5b5
--- /dev/null
+++ b/pub/path_provider/LICENSE
@@ -0,0 +1,26 @@
+Copyright 2017, the Flutter project authors. All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of Google Inc. nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/pub/path_provider/README.md b/pub/path_provider/README.md
new file mode 100644
index 0000000..944137f
--- /dev/null
+++ b/pub/path_provider/README.md
@@ -0,0 +1,21 @@
+# path_provider
+
+[![pub package](https://img.shields.io/pub/v/path_provider.svg)](https://pub.dartlang.org/packages/path_provider)
+
+A Flutter plugin for finding commonly used locations on the filesystem. Supports iOS and Android.
+
+## Usage
+
+To use this plugin, add `path_provider` as a [dependency in your pubspec.yaml file](https://flutter.io/platform-plugins/).
+
+### Example
+
+``` dart
+Directory tempDir = await getTemporaryDirectory();
+String tempPath = tempDir.path;
+
+Directory appDocDir = await getApplicationDocumentsDirectory();
+String appDocPath = appDocDir.path;
+```
+
+Please see the example app of this plugin for a full example.
diff --git a/pub/path_provider/android/.gitignore b/pub/path_provider/android/.gitignore
new file mode 100644
index 0000000..5c4ef82
--- /dev/null
+++ b/pub/path_provider/android/.gitignore
@@ -0,0 +1,12 @@
+*.iml
+.gradle
+/local.properties
+/.idea/workspace.xml
+/.idea/libraries
+.DS_Store
+/build
+/captures
+
+/gradle
+/gradlew
+/gradlew.bat
diff --git a/pub/path_provider/android/build.gradle b/pub/path_provider/android/build.gradle
new file mode 100644
index 0000000..7b86f78
--- /dev/null
+++ b/pub/path_provider/android/build.gradle
@@ -0,0 +1,32 @@
+group 'io.flutter.plugins.path_provider'
+version '1.0-SNAPSHOT'
+
+buildscript {
+    repositories {
+        jcenter()
+    }
+
+    dependencies {
+        classpath 'com.android.tools.build:gradle:2.3.0'
+    }
+}
+
+allprojects {
+    repositories {
+        jcenter()
+    }
+}
+
+apply plugin: 'com.android.library'
+
+android {
+    compileSdkVersion 25
+    buildToolsVersion '25.0.3'
+
+    defaultConfig {
+        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+    }
+    lintOptions {
+        disable 'InvalidPackage'
+    }
+}
diff --git a/pub/path_provider/android/gradle.properties b/pub/path_provider/android/gradle.properties
new file mode 100644
index 0000000..8bd86f6
--- /dev/null
+++ b/pub/path_provider/android/gradle.properties
@@ -0,0 +1 @@
+org.gradle.jvmargs=-Xmx1536M
diff --git a/pub/path_provider/android/settings.gradle b/pub/path_provider/android/settings.gradle
new file mode 100644
index 0000000..71bc907
--- /dev/null
+++ b/pub/path_provider/android/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = 'path_provider'
diff --git a/pub/path_provider/android/src/main/AndroidManifest.xml b/pub/path_provider/android/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..7eb61d3
--- /dev/null
+++ b/pub/path_provider/android/src/main/AndroidManifest.xml
@@ -0,0 +1,7 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+  package="io.flutter.plugins.path_provider"
+  android:versionCode="1"
+  android:versionName="0.0.1">
+
+  <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="21" />
+</manifest>
diff --git a/pub/path_provider/android/src/main/java/io/flutter/plugins/path_provider/PathProviderPlugin.java b/pub/path_provider/android/src/main/java/io/flutter/plugins/path_provider/PathProviderPlugin.java
new file mode 100644
index 0000000..2b507d2
--- /dev/null
+++ b/pub/path_provider/android/src/main/java/io/flutter/plugins/path_provider/PathProviderPlugin.java
@@ -0,0 +1,58 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package io.flutter.plugins.path_provider;
+
+import android.app.Activity;
+import android.os.Environment;
+import io.flutter.plugin.common.MethodCall;
+import io.flutter.plugin.common.MethodChannel;
+import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
+import io.flutter.plugin.common.MethodChannel.Result;
+import io.flutter.plugin.common.PluginRegistry.Registrar;
+import io.flutter.util.PathUtils;
+
+public class PathProviderPlugin implements MethodCallHandler {
+  private final Activity activity;
+
+  public static void registerWith(Registrar registrar) {
+    MethodChannel channel =
+        new MethodChannel(registrar.messenger(), "plugins.flutter.io/path_provider");
+    PathProviderPlugin instance = new PathProviderPlugin(registrar.activity());
+    channel.setMethodCallHandler(instance);
+  }
+
+  private PathProviderPlugin(Activity activity) {
+    this.activity = activity;
+  }
+
+  @Override
+  public void onMethodCall(MethodCall call, Result result) {
+    switch (call.method) {
+      case "getTemporaryDirectory":
+        result.success(getPathProviderTemporaryDirectory());
+        break;
+      case "getApplicationDocumentsDirectory":
+        result.success(getPathProviderApplicationDocumentsDirectory());
+        break;
+      case "getStorageDirectory":
+        result.success(getPathProviderStorageDirectory());
+        break;
+      default:
+        result.notImplemented();
+    }
+  }
+
+  private String getPathProviderTemporaryDirectory() {
+    return activity.getCacheDir().getPath();
+  }
+
+  private String getPathProviderApplicationDocumentsDirectory() {
+    return PathUtils.getDataDirectory(activity);
+  }
+
+  private String getPathProviderStorageDirectory() {
+    return Environment.getExternalStorageDirectory().getAbsolutePath();
+  }
+}
diff --git a/pub/path_provider/example/.gitignore b/pub/path_provider/example/.gitignore
new file mode 100644
index 0000000..eb15c3d
--- /dev/null
+++ b/pub/path_provider/example/.gitignore
@@ -0,0 +1,10 @@
+.DS_Store
+.atom/
+.idea
+.packages
+.pub/
+build/
+ios/.generated/
+packages
+pubspec.lock
+.flutter-plugins
diff --git a/pub/path_provider/example/README.md b/pub/path_provider/example/README.md
new file mode 100644
index 0000000..f1564c6
--- /dev/null
+++ b/pub/path_provider/example/README.md
@@ -0,0 +1,8 @@
+# path_provider_example
+
+Demonstrates how to use the path_provider plugin.
+
+## Getting Started
+
+For help getting started with Flutter, view our online
+[documentation](http://flutter.io/).
diff --git a/pub/path_provider/example/android.iml b/pub/path_provider/example/android.iml
new file mode 100644
index 0000000..462b903
--- /dev/null
+++ b/pub/path_provider/example/android.iml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$/android">
+      <sourceFolder url="file://$MODULE_DIR$/android/app/src/main/java" isTestSource="false" />
+    </content>
+    <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Flutter for Android" level="project" />
+  </component>
+</module>
diff --git a/pub/path_provider/example/android/.gitignore b/pub/path_provider/example/android/.gitignore
new file mode 100644
index 0000000..5c4ef82
--- /dev/null
+++ b/pub/path_provider/example/android/.gitignore
@@ -0,0 +1,12 @@
+*.iml
+.gradle
+/local.properties
+/.idea/workspace.xml
+/.idea/libraries
+.DS_Store
+/build
+/captures
+
+/gradle
+/gradlew
+/gradlew.bat
diff --git a/pub/path_provider/example/android/app/build.gradle b/pub/path_provider/example/android/app/build.gradle
new file mode 100644
index 0000000..114a0ee
--- /dev/null
+++ b/pub/path_provider/example/android/app/build.gradle
@@ -0,0 +1,46 @@
+def localProperties = new Properties()
+def localPropertiesFile = rootProject.file('local.properties')
+if (localPropertiesFile.exists()) {
+    localPropertiesFile.withInputStream { stream ->
+        localProperties.load(stream)
+    }
+}
+
+def flutterRoot = localProperties.getProperty('flutter.sdk')
+if (flutterRoot == null) {
+    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
+}
+
+apply plugin: 'com.android.application'
+apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
+
+android {
+    compileSdkVersion 25
+    buildToolsVersion '25.0.3'
+
+    lintOptions {
+        disable 'InvalidPackage'
+    }
+
+    defaultConfig {
+        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+    }
+
+    buildTypes {
+        release {
+            // TODO: Add your own signing config for the release build.
+            // Signing with the debug keys for now, so `flutter run --release` works.
+            signingConfig signingConfigs.debug
+        }
+    }
+}
+
+flutter {
+    source '../..'
+}
+
+dependencies {
+    androidTestCompile 'com.android.support:support-annotations:25.0.0'
+    androidTestCompile 'com.android.support.test:runner:0.5'
+    androidTestCompile 'com.android.support.test:rules:0.5'
+}
diff --git a/pub/path_provider/example/android/app/src/main/AndroidManifest.xml b/pub/path_provider/example/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..936e2b8
--- /dev/null
+++ b/pub/path_provider/example/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,32 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="io.flutter.plugins.path_provider_example"
+    android:versionCode="1"
+    android:versionName="0.0.1">
+
+    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="21" />
+
+    <!-- The INTERNET permission is required for development. Specifically,
+         flutter needs it to communicate with the running application
+         to allow setting breakpoints, to provide hot reload, etc.
+    -->
+    <uses-permission android:name="android.permission.INTERNET"/>
+
+    <!-- io.flutter.app.FlutterApplication is an android.app.Application that
+         calls FlutterMain.startInitialization(this); in its onCreate method.
+         In most cases you can leave this as-is, but you if you want to provide
+         additional functionality it is fine to subclass or reimplement
+         FlutterApplication and put your custom class here. -->
+    <application android:name="io.flutter.app.FlutterApplication" android:label="path_provider_example" android:icon="@mipmap/ic_launcher">
+        <activity android:name=".MainActivity"
+                  android:launchMode="singleTop"
+                  android:theme="@android:style/Theme.Black.NoTitleBar"
+                  android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection"
+                  android:hardwareAccelerated="true"
+                  android:windowSoftInputMode="adjustResize">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+    </application>
+</manifest>
diff --git a/pub/path_provider/example/android/app/src/main/java/io/flutter/plugins/path_provider_example/MainActivity.java b/pub/path_provider/example/android/app/src/main/java/io/flutter/plugins/path_provider_example/MainActivity.java
new file mode 100644
index 0000000..a4df125
--- /dev/null
+++ b/pub/path_provider/example/android/app/src/main/java/io/flutter/plugins/path_provider_example/MainActivity.java
@@ -0,0 +1,14 @@
+package io.flutter.plugins.path_provider_example;
+
+import android.os.Bundle;
+import io.flutter.app.FlutterActivity;
+import io.flutter.plugins.GeneratedPluginRegistrant;
+
+public class MainActivity extends FlutterActivity {
+
+  @Override
+  protected void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+    GeneratedPluginRegistrant.registerWith(this);
+  }
+}
diff --git a/pub/path_provider/example/android/build.gradle b/pub/path_provider/example/android/build.gradle
new file mode 100644
index 0000000..ee5325d
--- /dev/null
+++ b/pub/path_provider/example/android/build.gradle
@@ -0,0 +1,29 @@
+buildscript {
+    repositories {
+        jcenter()
+    }
+
+    dependencies {
+        classpath 'com.android.tools.build:gradle:2.2.3'
+    }
+}
+
+allprojects {
+    repositories {
+        jcenter()
+    }
+}
+
+rootProject.buildDir = '../build'
+subprojects {
+    project.buildDir = "${rootProject.buildDir}/${project.name}"
+    project.evaluationDependsOn(':app')
+}
+
+task clean(type: Delete) {
+    delete rootProject.buildDir
+}
+
+task wrapper(type: Wrapper) {
+    gradleVersion = '2.14.1'
+}
diff --git a/pub/path_provider/example/android/gradle.properties b/pub/path_provider/example/android/gradle.properties
new file mode 100644
index 0000000..8bd86f6
--- /dev/null
+++ b/pub/path_provider/example/android/gradle.properties
@@ -0,0 +1 @@
+org.gradle.jvmargs=-Xmx1536M
diff --git a/pub/path_provider/example/android/settings.gradle b/pub/path_provider/example/android/settings.gradle
new file mode 100644
index 0000000..115da6c
--- /dev/null
+++ b/pub/path_provider/example/android/settings.gradle
@@ -0,0 +1,15 @@
+include ':app'
+
+def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
+
+def plugins = new Properties()
+def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
+if (pluginsFile.exists()) {
+    pluginsFile.withInputStream { stream -> plugins.load(stream) }
+}
+
+plugins.each { name, path ->
+    def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
+    include ":$name"
+    project(":$name").projectDir = pluginDirectory
+}
diff --git a/pub/path_provider/example/ios/.gitignore b/pub/path_provider/example/ios/.gitignore
new file mode 100644
index 0000000..d0a7d98
--- /dev/null
+++ b/pub/path_provider/example/ios/.gitignore
@@ -0,0 +1,37 @@
+.idea/
+.vagrant/
+.sconsign.dblite
+.svn/
+
+.DS_Store
+*.swp
+profile
+
+DerivedData/
+build/
+
+*.pbxuser
+*.mode1v3
+*.mode2v3
+*.perspectivev3
+
+!default.pbxuser
+!default.mode1v3
+!default.mode2v3
+!default.perspectivev3
+
+xcuserdata
+
+*.moved-aside
+
+*.pyc
+*sync/
+Icon?
+.tags*
+
+/Flutter/app.flx
+/Flutter/app.zip
+/Flutter/App.framework
+/Flutter/Flutter.framework
+/Flutter/Generated.xcconfig
+/ServiceDefinitions.json
diff --git a/pub/path_provider/example/ios/Flutter/AppFrameworkInfo.plist b/pub/path_provider/example/ios/Flutter/AppFrameworkInfo.plist
new file mode 100644
index 0000000..6c2de80
--- /dev/null
+++ b/pub/path_provider/example/ios/Flutter/AppFrameworkInfo.plist
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>CFBundleDevelopmentRegion</key>
+  <string>en</string>
+  <key>CFBundleExecutable</key>
+  <string>App</string>
+  <key>CFBundleIdentifier</key>
+  <string>io.flutter.flutter.app</string>
+  <key>CFBundleInfoDictionaryVersion</key>
+  <string>6.0</string>
+  <key>CFBundleName</key>
+  <string>App</string>
+  <key>CFBundlePackageType</key>
+  <string>FMWK</string>
+  <key>CFBundleShortVersionString</key>
+  <string>1.0</string>
+  <key>CFBundleSignature</key>
+  <string>????</string>
+  <key>CFBundleVersion</key>
+  <string>1.0</string>
+  <key>UIRequiredDeviceCapabilities</key>
+  <array>
+    <string>arm64</string>
+  </array>
+  <key>MinimumOSVersion</key>
+  <string>8.0</string>
+</dict>
+</plist>
diff --git a/pub/path_provider/example/ios/Flutter/Debug.xcconfig b/pub/path_provider/example/ios/Flutter/Debug.xcconfig
new file mode 100644
index 0000000..9803018
--- /dev/null
+++ b/pub/path_provider/example/ios/Flutter/Debug.xcconfig
@@ -0,0 +1,2 @@
+#include "Generated.xcconfig"
+#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
diff --git a/pub/path_provider/example/ios/Flutter/Release.xcconfig b/pub/path_provider/example/ios/Flutter/Release.xcconfig
new file mode 100644
index 0000000..a4a8c60
--- /dev/null
+++ b/pub/path_provider/example/ios/Flutter/Release.xcconfig
@@ -0,0 +1,2 @@
+#include "Generated.xcconfig"
+#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
diff --git a/pub/path_provider/example/ios/Podfile b/pub/path_provider/example/ios/Podfile
new file mode 100644
index 0000000..74b3de0
--- /dev/null
+++ b/pub/path_provider/example/ios/Podfile
@@ -0,0 +1,38 @@
+# Uncomment this line to define a global platform for your project
+# platform :ios, '9.0'
+
+if ENV['FLUTTER_FRAMEWORK_DIR'] == nil
+  abort('Please set FLUTTER_FRAMEWORK_DIR to the directory containing Flutter.framework')
+end
+
+target 'Runner' do
+  use_frameworks!
+
+  # Pods for Runner
+
+  # Flutter Pods
+  pod 'Flutter', :path => ENV['FLUTTER_FRAMEWORK_DIR']
+
+  if File.exists? '../.flutter-plugins'
+    flutter_root = File.expand_path('..')
+    File.foreach('../.flutter-plugins') { |line|
+      plugin = line.split(pattern='=')
+      if plugin.length == 2
+        name = plugin[0].strip()
+        path = plugin[1].strip()
+        resolved_path = File.expand_path("#{path}/ios", flutter_root)
+        pod name, :path => resolved_path
+      else
+        puts "Invalid plugin specification: #{line}"
+      end
+    }
+  end
+end
+
+post_install do |installer|
+  installer.pods_project.targets.each do |target|
+    target.build_configurations.each do |config|
+      config.build_settings['ENABLE_BITCODE'] = 'NO'
+    end
+  end
+end
diff --git a/pub/path_provider/example/ios/Runner.xcodeproj/project.pbxproj b/pub/path_provider/example/ios/Runner.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..34e2030
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner.xcodeproj/project.pbxproj
@@ -0,0 +1,491 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		0675671949C15323862C164B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06B796751C0435964931B69B /* Pods_Runner.framework */; };
+		2D9222481EC32A19007564B0 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9222471EC32A19007564B0 /* GeneratedPluginRegistrant.m */; };
+		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
+		3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; };
+		3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; };
+		9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; };
+		9740EEB51CF90195004384FC /* Generated.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB31CF90195004384FC /* Generated.xcconfig */; };
+		9740EEBB1CF902C7004384FC /* app.flx in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB71CF902C7004384FC /* app.flx */; };
+		978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
+		97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
+		97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
+		97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
+		97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		9705A1C41CF9048500538489 /* Embed Frameworks */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+				3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */,
+				9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */,
+			);
+			name = "Embed Frameworks";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		06B796751C0435964931B69B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		2D9222461EC32A19007564B0 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
+		2D9222471EC32A19007564B0 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
+		3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
+		3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = "<group>"; };
+		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
+		7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+		7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
+		9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
+		9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
+		9740EEB71CF902C7004384FC /* app.flx */ = {isa = PBXFileReference; lastKnownFileType = file; name = app.flx; path = Flutter/app.flx; sourceTree = "<group>"; };
+		9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = "<group>"; };
+		97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+		97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+		97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+		97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
+		97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		97C146EB1CF9000F007C117D /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */,
+				3B80C3941E831B6300D905FE /* App.framework in Frameworks */,
+				0675671949C15323862C164B /* Pods_Runner.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		840012C8B5EDBCF56B0E4AC1 /* Pods */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			name = Pods;
+			sourceTree = "<group>";
+		};
+		9740EEB11CF90186004384FC /* Flutter */ = {
+			isa = PBXGroup;
+			children = (
+				9740EEB71CF902C7004384FC /* app.flx */,
+				3B80C3931E831B6300D905FE /* App.framework */,
+				3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
+				9740EEBA1CF902C7004384FC /* Flutter.framework */,
+				9740EEB21CF90195004384FC /* Debug.xcconfig */,
+				7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
+				9740EEB31CF90195004384FC /* Generated.xcconfig */,
+			);
+			name = Flutter;
+			sourceTree = "<group>";
+		};
+		97C146E51CF9000F007C117D = {
+			isa = PBXGroup;
+			children = (
+				9740EEB11CF90186004384FC /* Flutter */,
+				97C146F01CF9000F007C117D /* Runner */,
+				97C146EF1CF9000F007C117D /* Products */,
+				840012C8B5EDBCF56B0E4AC1 /* Pods */,
+				CF3B75C9A7D2FA2A4C99F110 /* Frameworks */,
+			);
+			sourceTree = "<group>";
+		};
+		97C146EF1CF9000F007C117D /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				97C146EE1CF9000F007C117D /* Runner.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		97C146F01CF9000F007C117D /* Runner */ = {
+			isa = PBXGroup;
+			children = (
+				2D9222461EC32A19007564B0 /* GeneratedPluginRegistrant.h */,
+				2D9222471EC32A19007564B0 /* GeneratedPluginRegistrant.m */,
+				7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,
+				7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,
+				97C146FA1CF9000F007C117D /* Main.storyboard */,
+				97C146FD1CF9000F007C117D /* Assets.xcassets */,
+				97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
+				97C147021CF9000F007C117D /* Info.plist */,
+				97C146F11CF9000F007C117D /* Supporting Files */,
+			);
+			path = Runner;
+			sourceTree = "<group>";
+		};
+		97C146F11CF9000F007C117D /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				97C146F21CF9000F007C117D /* main.m */,
+			);
+			name = "Supporting Files";
+			sourceTree = "<group>";
+		};
+		CF3B75C9A7D2FA2A4C99F110 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				06B796751C0435964931B69B /* Pods_Runner.framework */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		97C146ED1CF9000F007C117D /* Runner */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
+			buildPhases = (
+				AB1344B0443C71CD721E1BB7 /* [CP] Check Pods Manifest.lock */,
+				9740EEB61CF901F6004384FC /* Run Script */,
+				97C146EA1CF9000F007C117D /* Sources */,
+				97C146EB1CF9000F007C117D /* Frameworks */,
+				97C146EC1CF9000F007C117D /* Resources */,
+				9705A1C41CF9048500538489 /* Embed Frameworks */,
+				95BB15E9E1769C0D146AA592 /* [CP] Embed Pods Frameworks */,
+				532EA9D341340B1DCD08293D /* [CP] Copy Pods Resources */,
+				3B06AD1E1E4923F5004D2608 /* Thin Binary */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = Runner;
+			productName = Runner;
+			productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		97C146E61CF9000F007C117D /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0830;
+				ORGANIZATIONNAME = "The Chromium Authors";
+				TargetAttributes = {
+					97C146ED1CF9000F007C117D = {
+						CreatedOnToolsVersion = 7.3.1;
+					};
+				};
+			};
+			buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+			);
+			mainGroup = 97C146E51CF9000F007C117D;
+			productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				97C146ED1CF9000F007C117D /* Runner */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		97C146EC1CF9000F007C117D /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				9740EEBB1CF902C7004384FC /* app.flx in Resources */,
+				97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
+				9740EEB51CF90195004384FC /* Generated.xcconfig in Resources */,
+				3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
+				9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */,
+				97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
+				97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+		3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = "Thin Binary";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin";
+		};
+		532EA9D341340B1DCD08293D /* [CP] Copy Pods Resources */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = "[CP] Copy Pods Resources";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
+			showEnvVarsInLog = 0;
+		};
+		95BB15E9E1769C0D146AA592 /* [CP] Embed Pods Frameworks */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = "[CP] Embed Pods Frameworks";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
+			showEnvVarsInLog = 0;
+		};
+		9740EEB61CF901F6004384FC /* Run Script */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = "Run Script";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
+		};
+		AB1344B0443C71CD721E1BB7 /* [CP] Check Pods Manifest.lock */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = "[CP] Check Pods Manifest.lock";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n";
+			showEnvVarsInLog = 0;
+		};
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		97C146EA1CF9000F007C117D /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */,
+				97C146F31CF9000F007C117D /* main.m in Sources */,
+				2D9222481EC32A19007564B0 /* GeneratedPluginRegistrant.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		97C146FA1CF9000F007C117D /* Main.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				97C146FB1CF9000F007C117D /* Base */,
+			);
+			name = Main.storyboard;
+			sourceTree = "<group>";
+		};
+		97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				97C147001CF9000F007C117D /* Base */,
+			);
+			name = LaunchScreen.storyboard;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		97C147031CF9000F007C117D /* Debug */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+				MTL_ENABLE_DEBUG_INFO = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		97C147041CF9000F007C117D /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		97C147061CF9000F007C117D /* Debug */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
+			buildSettings = {
+				ARCHS = arm64;
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				ENABLE_BITCODE = NO;
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(PROJECT_DIR)/Flutter",
+				);
+				INFOPLIST_FILE = Runner/Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(PROJECT_DIR)/Flutter",
+				);
+				PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.pathProviderExample;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Debug;
+		};
+		97C147071CF9000F007C117D /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+			buildSettings = {
+				ARCHS = arm64;
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				ENABLE_BITCODE = NO;
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(PROJECT_DIR)/Flutter",
+				);
+				INFOPLIST_FILE = Runner/Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(PROJECT_DIR)/Flutter",
+				);
+				PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.pathProviderExample;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				97C147031CF9000F007C117D /* Debug */,
+				97C147041CF9000F007C117D /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				97C147061CF9000F007C117D /* Debug */,
+				97C147071CF9000F007C117D /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 97C146E61CF9000F007C117D /* Project object */;
+}
diff --git a/pub/path_provider/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/pub/path_provider/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..21a3cc1
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "group:Runner.xcodeproj">
+   </FileRef>
+   <FileRef
+      location = "group:Pods/Pods.xcodeproj">
+   </FileRef>
+</Workspace>
diff --git a/pub/path_provider/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/pub/path_provider/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
new file mode 100644
index 0000000..1c95807
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0830"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "97C146ED1CF9000F007C117D"
+               BuildableName = "Runner.app"
+               BlueprintName = "Runner"
+               ReferencedContainer = "container:Runner.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
+            BuildableName = "Runner.app"
+            BlueprintName = "Runner"
+            ReferencedContainer = "container:Runner.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
+            BuildableName = "Runner.app"
+            BlueprintName = "Runner"
+            ReferencedContainer = "container:Runner.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
+            BuildableName = "Runner.app"
+            BlueprintName = "Runner"
+            ReferencedContainer = "container:Runner.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git a/pub/path_provider/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/pub/path_provider/example/ios/Runner.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..21a3cc1
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "group:Runner.xcodeproj">
+   </FileRef>
+   <FileRef
+      location = "group:Pods/Pods.xcodeproj">
+   </FileRef>
+</Workspace>
diff --git a/pub/path_provider/example/ios/Runner/AppDelegate.h b/pub/path_provider/example/ios/Runner/AppDelegate.h
new file mode 100644
index 0000000..36e21bb
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner/AppDelegate.h
@@ -0,0 +1,6 @@
+#import <Flutter/Flutter.h>
+#import <UIKit/UIKit.h>
+
+@interface AppDelegate : FlutterAppDelegate
+
+@end
diff --git a/pub/path_provider/example/ios/Runner/AppDelegate.m b/pub/path_provider/example/ios/Runner/AppDelegate.m
new file mode 100644
index 0000000..0e94ecd
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner/AppDelegate.m
@@ -0,0 +1,12 @@
+#include "AppDelegate.h"
+#include "GeneratedPluginRegistrant.h"
+
+@implementation AppDelegate
+
+- (BOOL)application:(UIApplication *)application
+    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+  [GeneratedPluginRegistrant registerWithRegistry:self];
+  return [super application:application didFinishLaunchingWithOptions:launchOptions];
+}
+
+@end
diff --git a/pub/path_provider/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/pub/path_provider/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..d22f10b
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,116 @@
+{
+  "images" : [
+    {
+      "size" : "20x20",
+      "idiom" : "iphone",
+      "filename" : "Icon-App-20x20@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "20x20",
+      "idiom" : "iphone",
+      "filename" : "Icon-App-20x20@3x.png",
+      "scale" : "3x"
+    },
+    {
+      "size" : "29x29",
+      "idiom" : "iphone",
+      "filename" : "Icon-App-29x29@1x.png",
+      "scale" : "1x"
+    },
+    {
+      "size" : "29x29",
+      "idiom" : "iphone",
+      "filename" : "Icon-App-29x29@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "29x29",
+      "idiom" : "iphone",
+      "filename" : "Icon-App-29x29@3x.png",
+      "scale" : "3x"
+    },
+    {
+      "size" : "40x40",
+      "idiom" : "iphone",
+      "filename" : "Icon-App-40x40@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "40x40",
+      "idiom" : "iphone",
+      "filename" : "Icon-App-40x40@3x.png",
+      "scale" : "3x"
+    },
+    {
+      "size" : "60x60",
+      "idiom" : "iphone",
+      "filename" : "Icon-App-60x60@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "60x60",
+      "idiom" : "iphone",
+      "filename" : "Icon-App-60x60@3x.png",
+      "scale" : "3x"
+    },
+    {
+      "size" : "20x20",
+      "idiom" : "ipad",
+      "filename" : "Icon-App-20x20@1x.png",
+      "scale" : "1x"
+    },
+    {
+      "size" : "20x20",
+      "idiom" : "ipad",
+      "filename" : "Icon-App-20x20@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "29x29",
+      "idiom" : "ipad",
+      "filename" : "Icon-App-29x29@1x.png",
+      "scale" : "1x"
+    },
+    {
+      "size" : "29x29",
+      "idiom" : "ipad",
+      "filename" : "Icon-App-29x29@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "40x40",
+      "idiom" : "ipad",
+      "filename" : "Icon-App-40x40@1x.png",
+      "scale" : "1x"
+    },
+    {
+      "size" : "40x40",
+      "idiom" : "ipad",
+      "filename" : "Icon-App-40x40@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "76x76",
+      "idiom" : "ipad",
+      "filename" : "Icon-App-76x76@1x.png",
+      "scale" : "1x"
+    },
+    {
+      "size" : "76x76",
+      "idiom" : "ipad",
+      "filename" : "Icon-App-76x76@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "83.5x83.5",
+      "idiom" : "ipad",
+      "filename" : "Icon-App-83.5x83.5@2x.png",
+      "scale" : "2x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
diff --git a/pub/path_provider/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/pub/path_provider/example/ios/Runner/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000..ebf48f6
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" initialViewController="01J-lp-oVM">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
+    </dependencies>
+    <scenes>
+        <!--View Controller-->
+        <scene sceneID="EHf-IW-A2E">
+            <objects>
+                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
+                        <viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
+                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="53" y="375"/>
+        </scene>
+    </scenes>
+</document>
diff --git a/pub/path_provider/example/ios/Runner/Base.lproj/Main.storyboard b/pub/path_provider/example/ios/Runner/Base.lproj/Main.storyboard
new file mode 100644
index 0000000..f3c2851
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner/Base.lproj/Main.storyboard
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
+    </dependencies>
+    <scenes>
+        <!--Flutter View Controller-->
+        <scene sceneID="tne-QT-ifu">
+            <objects>
+                <viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
+                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
+                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
+            </objects>
+        </scene>
+    </scenes>
+</document>
diff --git a/pub/path_provider/example/ios/Runner/Info.plist b/pub/path_provider/example/ios/Runner/Info.plist
new file mode 100644
index 0000000..342db6a
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner/Info.plist
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>path_provider_example</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>UILaunchStoryboardName</key>
+	<string>LaunchScreen</string>
+	<key>UIMainStoryboardFile</key>
+	<string>Main</string>
+	<key>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>arm64</string>
+	</array>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+	<key>UISupportedInterfaceOrientations~ipad</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationPortraitUpsideDown</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+	<key>UIViewControllerBasedStatusBarAppearance</key>
+	<false/>
+</dict>
+</plist>
diff --git a/pub/path_provider/example/ios/Runner/main.m b/pub/path_provider/example/ios/Runner/main.m
new file mode 100644
index 0000000..dff6597
--- /dev/null
+++ b/pub/path_provider/example/ios/Runner/main.m
@@ -0,0 +1,9 @@
+#import <Flutter/Flutter.h>
+#import <UIKit/UIKit.h>
+#import "AppDelegate.h"
+
+int main(int argc, char* argv[]) {
+  @autoreleasepool {
+    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+  }
+}
diff --git a/pub/path_provider/example/lib/main.dart b/pub/path_provider/example/lib/main.dart
new file mode 100644
index 0000000..591cbf9
--- /dev/null
+++ b/pub/path_provider/example/lib/main.dart
@@ -0,0 +1,139 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:io';
+
+import 'package:flutter/material.dart';
+import 'package:path_provider/path_provider.dart';
+
+void main() {
+  runApp(new MyApp());
+}
+
+class MyApp extends StatelessWidget {
+  @override
+  Widget build(BuildContext context) {
+    return new MaterialApp(
+      title: 'Path Provider',
+      theme: new ThemeData(
+        primarySwatch: Colors.blue,
+      ),
+      home: new MyHomePage(title: 'Path Provider'),
+    );
+  }
+}
+
+class MyHomePage extends StatefulWidget {
+  MyHomePage({Key key, this.title}) : super(key: key);
+  final String title;
+
+  @override
+  _MyHomePageState createState() => new _MyHomePageState();
+}
+
+class _MyHomePageState extends State<MyHomePage> {
+  Future<Directory> _tempDirectory;
+  Future<Directory> _appDocumentsDirectory;
+  Future<Directory> _externalDocumentsDirectory;
+
+  void _requestTempDirectory() {
+    setState(() {
+      _tempDirectory = getTemporaryDirectory();
+    });
+  }
+
+  Widget _buildDirectory(
+      BuildContext context, AsyncSnapshot<Directory> snapshot) {
+
+    Text text = const Text('');
+    if (snapshot.connectionState == ConnectionState.done) {
+      if (snapshot.hasError) {
+        text = new Text('Error: ${snapshot.error}');
+      } else if (snapshot.hasData) {
+        text = new Text('path: ${snapshot.data.path}');
+      } else {
+        text = const Text('path unavailable');
+      }
+    }
+    return new Padding(padding: const EdgeInsets.all(16.0), child: text);
+  }
+
+  void _requestAppDocumentsDirectory() {
+    setState(() {
+      _appDocumentsDirectory = getApplicationDocumentsDirectory();
+    });
+  }
+
+  void _requestExternalStorageDirectory() {
+    setState(() {
+      _externalDocumentsDirectory = getExternalStorageDirectory();
+    });
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return new Scaffold(
+      appBar: new AppBar(
+        title: new Text(widget.title),
+      ),
+      body: new Center(
+        child: new Column(
+          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
+          children: <Widget>[
+            new Column(
+              children: <Widget>[
+                new Padding(
+                  padding: const EdgeInsets.all(16.0),
+                  child: new RaisedButton(
+                    child: const Text('Get Temporary Directory'),
+                    onPressed: _requestTempDirectory,
+                  ),
+                ),
+              ],
+            ),
+            new Expanded(
+              child: new FutureBuilder<Directory>(
+                  future: _tempDirectory, builder: _buildDirectory),
+            ),
+            new Column(
+              children: <Widget>[
+                new Padding(
+                  padding: const EdgeInsets.all(16.0),
+                  child: new RaisedButton(
+                    child: const Text('Get Application Documents Directory'),
+                    onPressed: _requestAppDocumentsDirectory,
+                  ),
+                ),
+              ],
+            ),
+            new Expanded(
+              child: new FutureBuilder<Directory>(
+                  future: _appDocumentsDirectory, builder: _buildDirectory),
+            ),
+            new Column(
+              children : <Widget>[
+                new Padding(
+                  padding: const EdgeInsets.all(16.0),
+                  child: new RaisedButton(
+                    child: new Text('${Platform.isIOS ?
+                                    "External directories are unavailable " +
+                                    "on iOS":
+                                    "Get External Storage Directory" }'),
+                    onPressed: Platform.isIOS ? null :
+                      _requestExternalStorageDirectory,
+                  ),
+                ),
+              ]
+            ),
+            new Expanded(
+              child: new FutureBuilder<Directory>(
+               future: _externalDocumentsDirectory, builder: _buildDirectory),
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+}
diff --git a/pub/path_provider/example/path_provider_example.iml b/pub/path_provider/example/path_provider_example.iml
new file mode 100644
index 0000000..9d5dae1
--- /dev/null
+++ b/pub/path_provider/example/path_provider_example.iml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="FLUTTER_MODULE_TYPE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <excludeFolder url="file://$MODULE_DIR$/.idea" />
+      <excludeFolder url="file://$MODULE_DIR$/.pub" />
+      <excludeFolder url="file://$MODULE_DIR$/build" />
+      <excludeFolder url="file://$MODULE_DIR$/packages" />
+    </content>
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Dart Packages" level="project" />
+    <orderEntry type="library" name="Dart SDK" level="project" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/pub/path_provider/example/pubspec.yaml b/pub/path_provider/example/pubspec.yaml
new file mode 100644
index 0000000..e95c465
--- /dev/null
+++ b/pub/path_provider/example/pubspec.yaml
@@ -0,0 +1,11 @@
+name: path_provider_example
+description: Demonstrates how to use the path_provider plugin.
+
+dependencies:
+  flutter:
+    sdk: flutter
+  path_provider:
+    path: ../
+
+flutter:
+  uses-material-design: true
diff --git a/pub/path_provider/ios/.gitignore b/pub/path_provider/ios/.gitignore
new file mode 100644
index 0000000..956c87f
--- /dev/null
+++ b/pub/path_provider/ios/.gitignore
@@ -0,0 +1,31 @@
+.idea/
+.vagrant/
+.sconsign.dblite
+.svn/
+
+.DS_Store
+*.swp
+profile
+
+DerivedData/
+build/
+
+*.pbxuser
+*.mode1v3
+*.mode2v3
+*.perspectivev3
+
+!default.pbxuser
+!default.mode1v3
+!default.mode2v3
+!default.perspectivev3
+
+xcuserdata
+
+*.moved-aside
+
+*.pyc
+*sync/
+Icon?
+.tags*
+
diff --git a/pub/path_provider/ios/Assets/.gitkeep b/pub/path_provider/ios/Assets/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/pub/path_provider/ios/Assets/.gitkeep
diff --git a/pub/path_provider/ios/Classes/PathProviderPlugin.h b/pub/path_provider/ios/Classes/PathProviderPlugin.h
new file mode 100644
index 0000000..21f0669
--- /dev/null
+++ b/pub/path_provider/ios/Classes/PathProviderPlugin.h
@@ -0,0 +1,8 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import <Flutter/Flutter.h>
+
+@interface PathProviderPlugin : NSObject<FlutterPlugin>
+@end
diff --git a/pub/path_provider/ios/Classes/PathProviderPlugin.m b/pub/path_provider/ios/Classes/PathProviderPlugin.m
new file mode 100644
index 0000000..8ecdde5
--- /dev/null
+++ b/pub/path_provider/ios/Classes/PathProviderPlugin.m
@@ -0,0 +1,38 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "PathProviderPlugin.h"
+
+NSString* GetDirectoryOfType(NSSearchPathDirectory dir) {
+  NSArray* paths = NSSearchPathForDirectoriesInDomains(dir, NSUserDomainMask, YES);
+  if (paths.count == 0) return nil;
+  return paths.firstObject;
+}
+
+@implementation PathProviderPlugin
+
++ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
+  FlutterMethodChannel* channel =
+      [FlutterMethodChannel methodChannelWithName:@"plugins.flutter.io/path_provider"
+                                  binaryMessenger:registrar.messenger];
+  [channel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) {
+    if ([@"getTemporaryDirectory" isEqualToString:call.method]) {
+      result([self getTemporaryDirectory]);
+    } else if ([@"getApplicationDocumentsDirectory" isEqualToString:call.method]) {
+      result([self getApplicationDocumentsDirectory]);
+    } else {
+      result(FlutterMethodNotImplemented);
+    }
+  }];
+}
+
++ (NSString*)getTemporaryDirectory {
+  return GetDirectoryOfType(NSCachesDirectory);
+}
+
++ (NSString*)getApplicationDocumentsDirectory {
+  return GetDirectoryOfType(NSDocumentDirectory);
+}
+
+@end
diff --git a/pub/path_provider/ios/path_provider.podspec b/pub/path_provider/ios/path_provider.podspec
new file mode 100644
index 0000000..7ca6fe3
--- /dev/null
+++ b/pub/path_provider/ios/path_provider.podspec
@@ -0,0 +1,21 @@
+#
+# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
+#
+Pod::Spec.new do |s|
+  s.name             = 'path_provider'
+  s.version          = '0.0.1'
+  s.summary          = 'A Flutter plugin for getting commonly used locations on the filesystem.'
+  s.description      = <<-DESC
+A Flutter plugin for getting commonly used locations on the filesystem.
+                       DESC
+  s.homepage         = 'https://github.com/flutter/plugins/tree/master/packages/path_provider'
+  s.license          = { :file => '../LICENSE' }
+  s.author           = { 'Flutter Team' => 'flutter-dev@googlegroups.com' }
+  s.source           = { :path => '.' }
+  s.source_files = 'Classes/**/*'
+  s.public_header_files = 'Classes/**/*.h'
+  s.dependency 'Flutter'
+  
+  s.ios.deployment_target = '8.0'
+end
+
diff --git a/pub/path_provider/lib/path_provider.dart b/pub/path_provider/lib/path_provider.dart
new file mode 100644
index 0000000..21a8cb5
--- /dev/null
+++ b/pub/path_provider/lib/path_provider.dart
@@ -0,0 +1,59 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:io';
+
+import 'package:flutter/services.dart';
+
+const _channel = const MethodChannel('plugins.flutter.io/path_provider');
+
+  /// Path to the temporary directory on the device.
+  ///
+  /// Files in this directory may be cleared at any time. This does *not* return
+  /// a new temporary directory. Instead, the caller is responsible for creating
+  /// (and cleaning up) files or directories within this directory. This
+  /// directory is scoped to the calling application.
+  ///
+  /// On iOS, this uses the `NSTemporaryDirectory` API.
+  ///
+  /// On Android, this uses the `getCacheDir` API on the context.
+  Future<Directory> getTemporaryDirectory() async {
+    final String path = await _channel.invokeMethod('getTemporaryDirectory');
+    if (path == null)
+      return null;
+    return new Directory(path);
+  }
+
+  /// Path to a directory where the application may place files that are private
+  /// to the application and will only be cleared when the application itself
+  /// is deleted.
+  ///
+  /// On iOS, this uses the `NSDocumentsDirectory` API.
+  ///
+  /// On Android, this returns the AppData directory.
+  Future<Directory> getApplicationDocumentsDirectory() async {
+    final String path = await _channel.invokeMethod(
+        'getApplicationDocumentsDirectory');
+    if (path == null)
+      return null;
+    return new Directory(path);
+  }
+
+  /// Path to a directory where the application may access top level storage.
+  /// The current operating system should be determined before issuing this
+  /// function call, as this functionality is only available on Android.
+  ///
+  /// On iOS, this function throws an UnsupportedError as it is not possible
+  /// to access outside the app's sandbox.
+  ///
+  /// On Android this returns getExternalStorageDirectory.
+  Future<Directory> getExternalStorageDirectory() async {
+    if (Platform.isIOS)
+      throw new UnsupportedError("Functionality not available on iOS");
+    final String path = await _channel.invokeMethod('getStorageDirectory');
+    if (path == null)
+      return null;
+    return new Directory(path);
+  }
diff --git a/pub/path_provider/pubspec.yaml b/pub/path_provider/pubspec.yaml
new file mode 100644
index 0000000..b46794a
--- /dev/null
+++ b/pub/path_provider/pubspec.yaml
@@ -0,0 +1,21 @@
+name: path_provider
+
+version: 0.2.1+1
+description: A Flutter plugin for getting commonly used locations on the filesystem.
+author: Flutter Team <flutter-dev@googlegroups.com>
+homepage: https://github.com/flutter/plugins/tree/master/packages/path_provider
+
+flutter:
+  plugin:
+    androidPackage: io.flutter.plugins.path_provider
+    pluginClass: PathProviderPlugin
+
+dependencies:
+  flutter:
+    sdk: flutter
+
+dev_dependencies:
+  test:
+
+environment:
+    sdk: ">=1.8.0 <2.0.0"