From e6002f5fac8529ef272cce0b5ba72877b1183d2a Mon Sep 17 00:00:00 2001 From: Nagmote Date: Mon, 13 Mar 2017 15:59:22 -0700 Subject: [PATCH 01/21] ndarray and mnist tutorial added --- scala/basic/ndarray_scala.ipynb | 1071 +++++++++++++++++++++++++++++ scala/tutorials/mnist_scala.ipynb | 420 +++++++++++ 2 files changed, 1491 insertions(+) create mode 100644 scala/basic/ndarray_scala.ipynb create mode 100644 scala/tutorials/mnist_scala.ipynb diff --git a/scala/basic/ndarray_scala.ipynb b/scala/basic/ndarray_scala.ipynb new file mode 100644 index 000000000..24ec7e977 --- /dev/null +++ b/scala/basic/ndarray_scala.ipynb @@ -0,0 +1,1071 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# NDArray Tutorial\n", + "One of the main object in MXNet is the multidimensional array provided by the package mxnet.NDArray, or mxnet.nd for short. If you familiar with the scientific computing python package NumPy, mxnet.NDArray is similar to numpy.ndarray in many aspects.\n", + "\n", + "## The basic\n", + "A multidimensional array is a table of numbers with the same type. For example, the coordinates of a point in 3D space [1, 2, 3] is a 1-dimensional array with that dimension has a length of 3. The following picture shows a 2-dimensional array. The length of the first dimension is 2, and the second dimension has a length of 3\n", + "[[0, 1, 2]\n", + " [3, 4, 5]]\n", + "The array class is called NDArray. Some important attributes of a NDArray object are:\n", + "- NDArray.shape the dimensions of the array. It is a tuple of integers indicating the length of the array in each dimension. For a matrix with n rows and m columns, the shape will be (n, m).\n", + "- NDArray.dtype an numpy object describing the type of the elements.\n", + "- NDArray.size the total number of numbers in the array, which equals to the product of the elements of shape\n", + "- NDArray.context the device this array is stored. A device can be the CPU or the i-th GPU.\n", + "\n", + "## Array Creation\n", + "An array can be created in multiple ways. For example, we can create an array from a regular Scala Array by using the array function" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "classpath.addPath(\"/Users/roshanin/mxnet/scala-package/assembly/osx-x86_64-cpu/target/mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36mml.dmlc.mxnet._\u001b[0m\n", + "\u001b[36ma\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@52989830\n", + "\u001b[36mb\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@a8674600\n", + "\u001b[36mres32_3\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m3.0F\u001b[0m)\n", + "\u001b[36mres32_4\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m2.0F\u001b[0m, \u001b[32m3.0F\u001b[0m, \u001b[32m4.0F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import ml.dmlc.mxnet._\n", + "// create a 1-dimensional array with a scala array\n", + "val a = NDArray.array(Array(1, 2, 3), shape = Shape(1, 3))\n", + "// create a 2-dimensional array with a nested scala array \n", + "val b = NDArray.array(Array(1, 2, 3, 2, 3, 4), shape = Shape(2, 3))\n", + "\n", + "b.at(0).toArray \n", + "b.at(1).toArray " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can specify the element type with the option dtype while using `NDArray.zeros` and `NDArray.ones` method, which accepts a numpy type. In default, Float32 is used.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@7794b9e0\n", + "\u001b[36mb\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@4a2c917f\n", + "\u001b[36mc\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@aa611987\n", + "\u001b[36mres2_3\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m)\n", + "\u001b[36mres2_4\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m)\n", + "\u001b[36mres2_5\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "// create an int32 array\n", + "// val a = NDArray.array(Array(1, 2, 3, 2, 3, 4), shape = Shape(2, 3), dtype = DType.Int32)\n", + "// create a 16-bit float array\n", + "val a = NDArray.ones(Shape(1, 2), dtype = DType.Float64) \n", + "val b = NDArray.ones(Shape(1, 2), dtype = DType.UInt8)\n", + "val c = NDArray.ones(Shape(2, 3), dtype = DType.Int32)\n", + "a.toArray\n", + "b.toArray\n", + "c.toArray" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we only know the size but not the element values, there are several functions to create arrays with initial placeholder content." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@fc1b387d\n", + "\u001b[36mb\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@9efb9cc0\n", + "\u001b[36mc\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@990cec23\n", + "\u001b[36md\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@b3e7cd40\n", + "\u001b[36me\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@f081ae28" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "// create a 2-dimensional array full of zeros with shape (2,3) \n", + "val a = NDArray.zeros(2,3)\n", + "// create a same shape array full of ones\n", + "val b = NDArray.ones(shape = Shape(2,3))\n", + "// create a same shape array with all elements set to 7\n", + "val c = NDArray.full(shape = Shape(2,3), 7)\n", + "// create a same shape whose initial content is random and \n", + "// depends on the state of the memory\n", + "val d = NDArray.empty(2,3)\n", + "// create a same shape and specify context you want cpu or gpu\n", + "val e = NDArray.empty(ctx = Context.cpu(0), shape = Shape(2,3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Printing Arrays\n", + "We often use `toArray` method to print and flatten the array. We can also use `at` method to see contents of sub NDArray by using index of the array." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mb\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@9cd326fd\n", + "\u001b[36mres37_1\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m)\n", + "\u001b[36mres37_2\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m)\n", + "\u001b[36mres37_3\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val b = NDArray.ones(2,3)\n", + "b.toArray\n", + "b.at(0).toArray\n", + "b.at(1).toArray" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Basic Operations\n", + "Arithmetic operators on arrays apply elementwise. A new array is created and filled with the result." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@d48c575b\n", + "\u001b[36mb\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@88f7743d\n", + "\u001b[36mc\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@e49f7c2b\n", + "\u001b[36md\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@db65845d\n", + "\u001b[36me\u001b[0m: \u001b[32mNDArrayFuncReturn\u001b[0m = ml.dmlc.mxnet.NDArrayFuncReturn@37da60b8\n", + "\u001b[36mf\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@c1ec10a5\n", + "\u001b[36mres26_6\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m, \u001b[32m3.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m3.0F\u001b[0m, \u001b[32m4.0F\u001b[0m, \u001b[32m3.0F\u001b[0m)\n", + "\u001b[36mg\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@f10318b1\n", + "\u001b[36mres26_8\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val a = NDArray.ones(2,3)\n", + "val b = NDArray.ones(2,3)\n", + "// elementwise plus\n", + "val c = a + b\n", + "// elementwise minus\n", + "val d = - c \n", + "// elementwise pow and sin\n", + "val e = NDArray.sin(NDArray.power(c,2))\n", + "// transpose \n", + "val f = NDArray.array(Array(1f, 2f, 4f, 3f, 3f, 3f), shape = Shape(2, 3))\n", + "f.T.toArray\n", + "// elementwise max\n", + "val g = NDArray.maximum(a, c) \n", + "g.toArray" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Matrix-matrix multiplication is done by dot operator" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@7e886011\n", + "\u001b[36mb\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@f9e97357\n", + "\u001b[36mc\u001b[0m: \u001b[32mNDArrayFuncReturn\u001b[0m = ml.dmlc.mxnet.NDArrayFuncReturn@679b15e7\n", + "\u001b[36mres28_3\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m11.0F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val a = NDArray.array(Array(1f, 2f), shape = Shape(1, 2))\n", + "val b = NDArray.array(Array(3f, 4f), shape = Shape(2, 1))\n", + "val c = NDArray.dot(arr1, arr2)\n", + "res.toArray" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@e3ad4e21\n", + "\u001b[36mb\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@2a80fe82\n", + "\u001b[36mc\u001b[0m: \u001b[32mNDArrayFuncReturn\u001b[0m = ml.dmlc.mxnet.NDArrayFuncReturn@30ecb48e\n", + "\u001b[36mres30_3\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val a = NDArray.ones(2,2)\n", + "val b = a * a\n", + "val c = NDArray.dot(a,a)\n", + "c.toArray" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The assignment operators such as += and *= act in place to modify an existing array rather than create a new one.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@de29a21a\n", + "\u001b[36mb\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@cb35e13\n", + "\u001b[36mres31_2\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@168b3109\n", + "\u001b[36mres31_3\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val a = NDArray.ones(2,2)\n", + "val b = NDArray.ones(a.shape)\n", + "b += a\n", + "b.toArray" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@38dd4adb\n", + "\u001b[36mb\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@70fe6b83\n", + "\u001b[36mres32_2\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@4fb25f28\n", + "\u001b[36mres32_3\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m4.0F\u001b[0m, \u001b[32m4.0F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val a = NDArray.ones(2, 1)\n", + "val b = a * 2\n", + "b *= b \n", + "b.toArray" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Indexing and Slicing\n", + "The slice operator [ ] applies on axis 0" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@cf9adb44\n", + "\u001b[36mres57_1\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m0.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m3.0F\u001b[0m, \u001b[32m4.0F\u001b[0m, \u001b[32m5.0F\u001b[0m)\n", + "\u001b[36mres57_2\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@3dff3ed6\n", + "\u001b[36mres57_3\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m0.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m4.0F\u001b[0m, \u001b[32m5.0F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val a = NDArray.array(Array(0,1,2,3,4,5), shape= Shape(3,2))\n", + "a.toArray\n", + "a.slice(1).set(1f)\n", + "//a.slice(2).set(1f)\n", + "a.toArray" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also slice a particular axis with the method slice_axis. It takes parameters array, axis, begin, and end." + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36md\u001b[0m: \u001b[32mNDArrayFuncReturn\u001b[0m = ml.dmlc.mxnet.NDArrayFuncReturn@31891413\n", + "\u001b[36mres58_1\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m5.0F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val d = NDArray.slice_axis(a, 1, 1, 2)\n", + "d.toArray" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Shape Manipulation\n", + "The shape of the array can be changed as long as the size remaining the same" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@390ff8f6\n", + "\u001b[36mb\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@fd662ff8\n", + "\u001b[36mres36_2\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m0.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m3.0F\u001b[0m, \u001b[32m4.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m7.0F\u001b[0m, \u001b[32m8.0F\u001b[0m, \u001b[32m9.0F\u001b[0m, \u001b[32m10.0F\u001b[0m, \u001b[32m11.0F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val a = NDArray.array( Array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23), shape = Shape(3,2,4))\n", + "val b = a.reshape(Array(2,3,4))\n", + "b.at(0).toArray" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Method concatenate stacks multiple arrays along the first dimension. (Their shapes must be the same).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@e0d7ddce\n", + "\u001b[36mb\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@c54191e4\n", + "\u001b[36mc\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@d06a2142\n", + "\u001b[36mres64_3\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val a = NDArray.ones(2,3)\n", + "val b = NDArray.ones(2,3)*2\n", + "val c = NDArray.concatenate(a,b)\n", + "c.toArray" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reduce\n", + "We can reduce the array to a scalar" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@fc5e0047\n", + "\u001b[36mb\u001b[0m: \u001b[32mNDArrayFuncReturn\u001b[0m = ml.dmlc.mxnet.NDArrayFuncReturn@2bd6715f\n", + "\u001b[36mres68_2\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m6.0F\u001b[0m)\n", + "\u001b[36mres68_3\u001b[0m: \u001b[32mFloat\u001b[0m = \u001b[32m6.0F\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val a = NDArray.ones(2,3)\n", + "val b = NDArray.sum(a)\n", + "b.toArray\n", + "NDArray.sum(a).toScalar " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or along a particular axis" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mc\u001b[0m: \u001b[32mNDArrayFuncReturn\u001b[0m = ml.dmlc.mxnet.NDArrayFuncReturn@40e6052e\n", + "\u001b[36mres69_1\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m3.0F\u001b[0m, \u001b[32m3.0F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val c = NDArray.sum_axis(a, 1)\n", + "c.toArray" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Broadcast\n", + "We can also broadcast an array by duplicating. The following codes broadcast along axis 1" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@c504569d\n", + "\u001b[36mb\u001b[0m: \u001b[32mNDArrayFuncReturn\u001b[0m = ml.dmlc.mxnet.NDArrayFuncReturn@332ded5e\n", + "\u001b[36mres83_2\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m0.0F\u001b[0m, \u001b[32m0.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m1.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m3.0F\u001b[0m, \u001b[32m3.0F\u001b[0m, \u001b[32m4.0F\u001b[0m, \u001b[32m4.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val a = NDArray.array(Array(0,1,2,3,4,5), shape = Shape(6,1))\n", + "val b = NDArray.broadcast_to(a, (6,2)) \n", + "b.toArray\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or broadcast along axes 1 and 2" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mc\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@b2357fef\n", + "\u001b[36md\u001b[0m: \u001b[32mNDArrayFuncReturn\u001b[0m = ml.dmlc.mxnet.NDArrayFuncReturn@72316e87\n", + "\u001b[36mres85_2\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m1.0F\u001b[0m,\n", + " \u001b[32m2.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m1.0F\u001b[0m,\n", + " \u001b[32m2.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m1.0F\u001b[0m,\n", + " \u001b[32m2.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m1.0F\u001b[0m,\n", + " \u001b[32m2.0F\u001b[0m,\n", + " \u001b[32m3.0F\u001b[0m,\n", + " \u001b[32m4.0F\u001b[0m,\n", + " \u001b[32m5.0F\u001b[0m,\n", + " \u001b[32m3.0F\u001b[0m,\n", + " \u001b[32m4.0F\u001b[0m,\n", + " \u001b[32m5.0F\u001b[0m,\n", + " \u001b[32m3.0F\u001b[0m,\n", + "\u001b[33m...\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val c = a.reshape(Shape(2,1,1,3))\n", + "val d = NDArray.broadcast_to(c, (2,2,2,3))\n", + "d.toArray" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Broadcast can be applied to operations such as * and +." + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@9b321c7\n", + "\u001b[36mb\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@7552b22d\n", + "\u001b[36md\u001b[0m: \u001b[32mNDArrayFuncReturn\u001b[0m = ml.dmlc.mxnet.NDArrayFuncReturn@55f16bad\n", + "\u001b[36mc\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@32a2dd09\n", + "\u001b[36mres105_4\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val a = NDArray.ones(3,2)\n", + "val b = NDArray.ones(1,2)\n", + "val d = NDArray.broadcast_to(b, (3,2))\n", + "val c = a + d\n", + "c.toArray\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Copies\n", + "Data is NOT copied in normal assignment." + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@b867e334\n", + "\u001b[36md\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@e77830eb\n", + "\u001b[36mb\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@b8e1a014\n", + "\u001b[36mres106_3\u001b[0m: \u001b[32mBoolean\u001b[0m = \u001b[32mtrue\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val a = NDArray.ones(2,2)\n", + "val d = NDArray.zeros(2,2)\n", + "val b = a \n", + "a == b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "similar for function arguments passing.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "defined \u001b[32mfunction \u001b[36mf\u001b[0m\n", + "\u001b[36mres109_1\u001b[0m: \u001b[32mBoolean\u001b[0m = \u001b[32mtrue\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def f(x: NDArray) ={ \n", + " x\n", + "}\n", + "a == f(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The copy method makes a deep copy of the array and its data\n" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mb\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@1eacd198\n", + "\u001b[36mres111_1\u001b[0m: \u001b[32mBoolean\u001b[0m = \u001b[32mtrue\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val b = a.copy()\n", + "b == a" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The above code allocate a new NDArray and then assign to b. We can use the copyto method to avoid additional memory allocation" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mb\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@24498f4e\n", + "\u001b[36mc\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@1bab121c\n", + "\u001b[36md\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@cb6f0c83\n", + "\u001b[36mres113_3\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@12fca855\n", + "\u001b[36mres113_4\u001b[0m: (\u001b[32mBoolean\u001b[0m, \u001b[32mBoolean\u001b[0m) = \u001b[33m\u001b[0m(\u001b[32mtrue\u001b[0m, \u001b[32mtrue\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val b = NDArray.ones(a.shape)\n", + "val c = b\n", + "val d = b\n", + "a.copyTo(d)\n", + "(c == b, d == b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The Advanced\n", + "There are some advanced features in mxnet.ndarray which make mxnet different from other libraries.\n", + "\n", + "## GPU Support\n", + "In default operators are executed on CPU. It is easy to switch to another computation resource, such as GPU, if available. The device information is stored in ndarray.context. When MXNet is compiled with flag USE_CUDA=1 and there is at least one Nvidia GPU card, we can make all computations run on GPU 0 by using Context.gpu(0), or simply Context.gpu(). If there are more than two GPUs, the 2nd GPU is represented by Context.gpu(1)." + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "defined \u001b[32mfunction \u001b[36mf\u001b[0m\n", + "\u001b[36mres120_1\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@16acc21b\n", + "defined \u001b[32mfunction \u001b[36mf1\u001b[0m\n", + "\u001b[36mres120_3\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@1650e1f4\n", + "\u001b[36mctx\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mContext\u001b[0m] = \u001b[33mArray\u001b[0m(gpu(0), gpu(1))" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def f() ={\n", + " val a = NDArray.ones(100,100)\n", + " val b = NDArray.ones(100,100)\n", + " val c = a + b\n", + " c\n", + "}\n", + "// in default Context.cpu() is used\n", + "f() \n", + "\n", + "// change the default context to the first GPU\n", + "def f1() ={\n", + " val a = NDArray.ones(ctx=Context.cpu(0), shape=Shape(100,100))\n", + " val b = NDArray.ones(ctx=Context.cpu(0), shape=Shape(100,100))\n", + " val c = a + b\n", + " c\n", + "}\n", + "f1()\n", + "\n", + "// you can also provide which cpus or gpus you want to use in array like this\n", + "val ctx = Array(Context.gpu(0), Context.gpu(1))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also explicitly specify the context when creating an array" + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@a5e59bc" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val a = NDArray.ones(ctx=Context.cpu(0), shape=Shape(100,100))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Currently MXNet requires two arrays to sit on the same device for computation. There are several methods for copying data between devices." + ] + }, + { + "cell_type": "code", + "execution_count": 126, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@fa844d42\n", + "\u001b[36mb\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@ae353f2a\n", + "\u001b[36mc\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@dbacf13d\n", + "\u001b[36mres125_3\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@ae42e54e\n", + "\u001b[36md\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@a911584b\n", + "\u001b[36me\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@f29dc5fe\n", + "\u001b[36mres125_6\u001b[0m: (\u001b[32mNDArray\u001b[0m, \u001b[32mNDArray\u001b[0m) = \u001b[33m\u001b[0m(ml.dmlc.mxnet.NDArray@33e6380, ml.dmlc.mxnet.NDArray@e7a5cc45)\n", + "\u001b[36mres125_7\u001b[0m: (\u001b[32mContext\u001b[0m, \u001b[32mContext\u001b[0m) = \u001b[33m\u001b[0m(cpu(0), cpu(0))" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "val a = NDArray.ones(ctx=Context.cpu(), shape= Shape(100,100))\n", + "val b = NDArray.ones(ctx=Context.gpu(), shape= Shape(100,100))\n", + "val c = NDArray.ones(ctx=Context.gpu(), shape= Shape(100,100))\n", + "a.copyTo(c) // copy from CPU to GPU\n", + "val d = b + c\n", + "val e = b.asInContext(c.context) + c // same to above\n", + "(d, e)\n", + "(d.context,e.context)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Serialize From/To (Distributed) Filesystems\n", + "You can use MXNet functions to save and load a list or dictionary of NDArrays from file systems, as follows:\n", + "\n", + "Besides single NDArray, we can load/save a list as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@c250ba93\n", + "\u001b[36mb\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@5d65799\n", + "\u001b[36mc\u001b[0m: (\u001b[32mArray\u001b[0m[\u001b[32mString\u001b[0m], \u001b[32mArray\u001b[0m[\u001b[32mNDArray\u001b[0m]) = \u001b[33m\u001b[0m(\u001b[33mArray\u001b[0m(), \u001b[33mArray\u001b[0m(ml.dmlc.mxnet.NDArray@c9910b3a, ml.dmlc.mxnet.NDArray@8175e844))\n", + "\u001b[36mres126_4\u001b[0m: (\u001b[32mArray\u001b[0m[\u001b[32mString\u001b[0m], \u001b[32mArray\u001b[0m[\u001b[32mNDArray\u001b[0m]) = \u001b[33m\u001b[0m(\u001b[33mArray\u001b[0m(), \u001b[33mArray\u001b[0m(ml.dmlc.mxnet.NDArray@a15d3fe0, ml.dmlc.mxnet.NDArray@6a840199))" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val a = NDArray.ones(2,3)\n", + "val b = NDArray.ones(5,6) \n", + "NDArray.save(\"temp.ndarray\", Array(a,b))\n", + "val c = NDArray.load(\"temp.ndarray\")\n", + "c" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "or a dict" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36md\u001b[0m: \u001b[32mMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mNDArray\u001b[0m] = \u001b[33mMap\u001b[0m(\u001b[32m\"A\"\u001b[0m -> ml.dmlc.mxnet.NDArray@f8a5cb1c, \u001b[32m\"B\"\u001b[0m -> ml.dmlc.mxnet.NDArray@3625fe0)\n", + "\u001b[36mc\u001b[0m: (\u001b[32mArray\u001b[0m[\u001b[32mString\u001b[0m], \u001b[32mArray\u001b[0m[\u001b[32mNDArray\u001b[0m]) = \u001b[33m\u001b[0m(\n", + " \u001b[33mArray\u001b[0m(\u001b[32m\"A\"\u001b[0m, \u001b[32m\"B\"\u001b[0m),\n", + " \u001b[33mArray\u001b[0m(ml.dmlc.mxnet.NDArray@c5142250, ml.dmlc.mxnet.NDArray@6d660c8a)\n", + ")\n", + "\u001b[36mres127_3\u001b[0m: (\u001b[32mArray\u001b[0m[\u001b[32mString\u001b[0m], \u001b[32mArray\u001b[0m[\u001b[32mNDArray\u001b[0m]) = \u001b[33m\u001b[0m(\n", + " \u001b[33mArray\u001b[0m(\u001b[32m\"A\"\u001b[0m, \u001b[32m\"B\"\u001b[0m),\n", + " \u001b[33mArray\u001b[0m(ml.dmlc.mxnet.NDArray@cf1d79d6, ml.dmlc.mxnet.NDArray@5fa44ac5)\n", + ")" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val d = Map(\"A\" -> a, \"B\" -> b)\n", + "NDArray.save(\"temp.ndarray\", d)\n", + "val c = NDArray.load(\"temp.ndarray\")\n", + "c" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If a distributed filesystem such as Amazon S3 or Hadoop HDFS is set up, we can directly save to and load from it\n", + "\n", + "```scala\n", + "val from_file = NDArray.load(\"/path/to/array/file\")\n", + "val from_s3 = NDArray.load(\"s3://path/to/s3/array\")\n", + "val from_hdfs = NDArray.load(\"hdfs://path/to/hdfs/array\")\n", + " \n", + "NDArray.save(\"s3://mybucket/mydata.ndarray\", Map(\"A\" -> a)) // if compiled with USE_S3=1\n", + "NDArray.save(\"hdfs///users/myname/mydata.bin\", Map(\"B\" -> b)) // if compiled with USE_HDFS=1\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Futher Readings\n", + "[NDArray API](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.NDArray) Documents for all NDArray methods." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Scala 2.11", + "language": "scala211", + "name": "scala211" + }, + "language_info": { + "codemirror_mode": "text/x-scala", + "file_extension": ".scala", + "mimetype": "text/x-scala", + "name": "scala211", + "pygments_lexer": "scala", + "version": "2.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/scala/tutorials/mnist_scala.ipynb b/scala/tutorials/mnist_scala.ipynb new file mode 100644 index 000000000..89377b3e7 --- /dev/null +++ b/scala/tutorials/mnist_scala.ipynb @@ -0,0 +1,420 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tutorial on Hand Written Digit Recognition\n", + "\n", + "In this tutorial we will go through the basic use case of MXNet and also touch on some advanced usages. This example is based on the MNIST dataset, which contains 70,000 images of hand written characters with 28-by-28 pixel size.\n", + "\n", + "This tutorial covers the following topics:\n", + "- network definition.\n", + "- Variable naming.\n", + "- Basic data loading and training with feed-forward deep neural networks.\n", + "- Monitoring intermediate outputs for debuging.\n", + "- Custom training loop for advanced models.\n", + "\n", + "Let’s train a 3-layer multilayer perceptron on the MNIST dataset to classify handwritten digits. \n", + "\n", + "First, let's load mxnet scala jar in classpath and then import required modules." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "classpath.addPath(\"/Users/roshanin/mxnet/scala-package/assembly/osx-x86_64-cpu/target/mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36mml.dmlc.mxnet._\u001b[0m\n", + "\u001b[32mimport \u001b[36mml.dmlc.mxnet.optimizer.SGD\u001b[0m\n", + "\u001b[32mimport \u001b[36mscala.collection.mutable.ListBuffer\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import ml.dmlc.mxnet._\n", + "import ml.dmlc.mxnet.optimizer.SGD\n", + "import scala.collection.mutable.ListBuffer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Network Definition\n", + "\n", + "Now, we can start constructing our network:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "log4j:WARN No appenders could be found for logger (MXNetJVM).\n", + "log4j:WARN Please initialize the log4j system properly.\n", + "log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mdata\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@2aec6c99\n", + "\u001b[36mfc1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@60bcbe48\n", + "\u001b[36mact1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@60abab94\n", + "\u001b[36mfc2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@2665643d\n", + "\u001b[36mact2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@20b63589\n", + "\u001b[36mfc3\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@25fd8129\n", + "\u001b[36mmlp\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@18b77909" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "// # Variables are place holders for input arrays. We give each variable a unique name.\n", + "val data = Symbol.Variable(\"data\")\n", + "\n", + "// The input is fed to a fully connected layer that computes Y=WX+b.\n", + "// This is the main computation module in the network.\n", + "// Each layer also needs an unique name. We'll talk more about naming in the next section.\n", + "val fc1 = Symbol.FullyConnected(name = \"fc1\")()(Map(\"data\" -> data, \"num_hidden\" -> 128))\n", + "\n", + "// Activation layers apply a non-linear function on the previous layer's output.\n", + "// Here we use Rectified Linear Unit (ReLU) that computes Y = max(X, 0).\n", + "val act1 = Symbol.Activation(name = \"relu1\")()(Map(\"data\" -> fc1, \"act_type\" -> \"relu\"))\n", + "\n", + "val fc2 = Symbol.FullyConnected(name = \"fc2\")()(Map(\"data\" -> act1, \"num_hidden\" -> 64))\n", + "val act2 = Symbol.Activation(name = \"relu2\")()(Map(\"data\" -> fc2, \"act_type\" -> \"relu\"))\n", + "val fc3 = Symbol.FullyConnected(name = \"fc3\")()(Map(\"data\" -> act2, \"num_hidden\" -> 10))\n", + "\n", + "// Finally we have a loss layer that compares the network's output with label and generates gradient signals.\n", + "val mlp = Symbol.SoftmaxOutput(name = \"softmax\")()(Map(\"data\" -> fc3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Variable Naming\n", + "MXNet requires variable names to follow certain conventions:\n", + "- All input arrays have a name. This includes inputs (data & label) and model parameters (weight, bias, etc).\n", + "- Arrays can be renamed by creating named variable. Otherwise, a default name is given as 'SymbolName_ArrayName'. For example, FullyConnected symbol fc1's weight array is named as 'fc1_weight'.\n", + "- Although you can also rename weight arrays with variables, weight array's name should always end with '_weight' and bias array '_bias'. MXNet relies on the suffixes of array names to correctly initialize & update them.\n", + "Call listArguments method on a symbol to get the names of all its inputs:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mres3\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mString\u001b[0m] = \u001b[33mArrayBuffer\u001b[0m(\n", + " \u001b[32m\"data\"\u001b[0m,\n", + " \u001b[32m\"fc1_weight\"\u001b[0m,\n", + " \u001b[32m\"fc1_bias\"\u001b[0m,\n", + " \u001b[32m\"fc2_weight\"\u001b[0m,\n", + " \u001b[32m\"fc2_bias\"\u001b[0m,\n", + " \u001b[32m\"fc3_weight\"\u001b[0m,\n", + " \u001b[32m\"fc3_bias\"\u001b[0m,\n", + " \u001b[32m\"softmax_label\"\u001b[0m\n", + ")" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mlp.listArguments()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data Loading\n", + "\n", + "We download the MNIST data using the [get_mnist_data script](https://github.com/dmlc/mxnet/blob/master/scala-package/core/scripts/get_mnist_data.sh). Now we can create data iterators from our MNIST data. A data iterator returns a batch of data examples each time for the network to process. MXNet provide a suite of basic DataIters for parsing different data format. \n", + "\n", + "Here we use MNISTIter, which wraps around a numpy array and each time slice a chunk from it along the first dimension. Load the training and validation data using DataIterators as follows:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mtrainDataIter\u001b[0m: \u001b[32mDataIter\u001b[0m = non-empty iterator\n", + "\u001b[36mvalDataIter\u001b[0m: \u001b[32mDataIter\u001b[0m = non-empty iterator" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "// load MNIST dataset\n", + "val trainDataIter = IO.MNISTIter(Map(\n", + " \"image\" -> \"/Users/roshanin/mxnet/scala-package/core/data/train-images-idx3-ubyte\",\n", + " \"label\" -> \"/Users/roshanin/mxnet/scala-package/core/data/train-labels-idx1-ubyte\",\n", + " \"data_shape\" -> \"(1, 28, 28)\",\n", + " \"label_name\" -> \"softmax_label\",\n", + " \"batch_size\" -> \"50\",\n", + " \"shuffle\" -> \"1\",\n", + " \"flat\" -> \"0\",\n", + " \"silent\" -> \"0\",\n", + " \"seed\" -> \"10\"))\n", + "\n", + "val valDataIter = IO.MNISTIter(Map(\n", + " \"image\" -> \"/Users/roshanin/mxnet/scala-package/core/data/t10k-images-idx3-ubyte\",\n", + " \"label\" -> \"/Users/roshanin/mxnet/scala-package/core/data/t10k-labels-idx1-ubyte\",\n", + " \"data_shape\" -> \"(1, 28, 28)\",\n", + " \"label_name\" -> \"softmax_label\",\n", + " \"batch_size\" -> \"50\",\n", + " \"shuffle\" -> \"1\",\n", + " \"flat\" -> \"0\", \"silent\" -> \"0\"))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Training\n", + "With the network and data source defined, we can finally start to train our model. We do this with MXNet's convenience wrapper for FeedForward builder.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mmodel\u001b[0m: \u001b[32mFeedForward\u001b[0m = ml.dmlc.mxnet.FeedForward@3d40f3b0" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "// setup model and fit the training data\n", + "val model = FeedForward.newBuilder(mlp) // Use the network we just defined\n", + " .setContext(Context.cpu()) // Run on CPU \n", + " .setNumEpoch(10) // Train for 10 epochs\n", + " .setOptimizer(new SGD(learningRate = 0.1f, momentum = 0.9f, wd = 0.0001f)) // Learning rate, \n", + "//Momentum and Weight decay for regularization\n", + " .setTrainData(trainDataIter) // Training data set\n", + " .setEvalData(valDataIter) // Testing data set. MXNet computes scores on test set every epoch\n", + " .build()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Evaluation¶\n", + "\n", + "After the model is trained, we can evaluate it on a held out validation dataset and compare the predicted labels with the real labels." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mprobArrays\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mNDArray\u001b[0m] = \u001b[33mArray\u001b[0m(ml.dmlc.mxnet.NDArray@7d18083e)\n", + "\u001b[36mprob\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@426c4e40\n", + "\u001b[36mlabels\u001b[0m: \u001b[32mListBuffer\u001b[0m[\u001b[32mNDArray\u001b[0m] = \u001b[33mListBuffer\u001b[0m(\n", + " ml.dmlc.mxnet.NDArray@2accfeb0,\n", + " ml.dmlc.mxnet.NDArray@5f74e322,\n", + " ml.dmlc.mxnet.NDArray@63792053,\n", + " ml.dmlc.mxnet.NDArray@3ed497c6,\n", + " ml.dmlc.mxnet.NDArray@51274f83,\n", + " ml.dmlc.mxnet.NDArray@4a0bed53,\n", + " ml.dmlc.mxnet.NDArray@476a7696,\n", + " ml.dmlc.mxnet.NDArray@3370c62e,\n", + " ml.dmlc.mxnet.NDArray@32e012b4,\n", + " ml.dmlc.mxnet.NDArray@d1db10e,\n", + " ml.dmlc.mxnet.NDArray@2b949b3e,\n", + " ml.dmlc.mxnet.NDArray@43f2a5f5,\n", + " ml.dmlc.mxnet.NDArray@27a485dd,\n", + " ml.dmlc.mxnet.NDArray@21c6cebf,\n", + " ml.dmlc.mxnet.NDArray@30d3eb9f,\n", + " ml.dmlc.mxnet.NDArray@1932251f,\n", + " ml.dmlc.mxnet.NDArray@47b7adba,\n", + " ml.dmlc.mxnet.NDArray@22e85214,\n", + " ml.dmlc.mxnet.NDArray@1f29cb21,\n", + "\u001b[33m...\u001b[0m\n", + "\u001b[36my\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@76d55afb\n", + "\u001b[36mpredictedY\u001b[0m: \u001b[32mNDArrayFuncReturn\u001b[0m = ml.dmlc.mxnet.NDArrayFuncReturn@4786ef4d" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val probArrays = model.predict(valDataIter)\n", + "// in this case, we do not have multiple outputs\n", + "require(probArrays.length == 1)\n", + "val prob = probArrays(0)\n", + "\n", + "// get real labels\n", + "valDataIter.reset()\n", + "val labels = ListBuffer.empty[NDArray]\n", + "while (valDataIter.hasNext) {\n", + " val evalData = valDataIter.next()\n", + " labels += evalData.label(0).copy()\n", + "}\n", + "val y = NDArray.concatenate(labels)\n", + "\n", + "// get predicted labels\n", + "val predictedY = NDArray.argmax_channel(prob)\n", + "require(y.shape == predictedY.shape)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also evaluate the model's accuracy on the entire test set:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final accuracy = 0.9609\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mnumCorrect\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m9609\u001b[0m\n", + "\u001b[36mnumTotal\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m10000\u001b[0m\n", + "\u001b[36macc\u001b[0m: \u001b[32mFloat\u001b[0m = \u001b[32m0.9609F\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "// calculate accuracy\n", + "var numCorrect = 0\n", + "var numTotal = 0\n", + "for ((labelElem, predElem) <- y.toArray zip predictedY.toArray) {\n", + " if (labelElem == predElem) {\n", + " numCorrect += 1\n", + " }\n", + " numTotal += 1\n", + "}\n", + "val acc = numCorrect.toFloat / numTotal\n", + "println(s\"Final accuracy = $acc\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Next Steps¶\n", + "Check out more MXNet Scala resources below.\n", + "\n", + "[Scala API](http://mxnet.io/api/scala/)\n", + "\n", + "[More Scala Examples](https://github.com/dmlc/mxnet/tree/master/scala-package/examples/src/main/scala/ml/dmlc/mxnet/examples)\n", + "\n", + "[MXNet tutorials index](http://mxnet.io/tutorials/index.html)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Scala 2.11", + "language": "scala211", + "name": "scala211" + }, + "language_info": { + "codemirror_mode": "text/x-scala", + "file_extension": ".scala", + "mimetype": "text/x-scala", + "name": "scala211", + "pygments_lexer": "scala", + "version": "2.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From efa2fdfbb897ab2cb0063c0063ef938ace72ec53 Mon Sep 17 00:00:00 2001 From: Nagmote Date: Mon, 13 Mar 2017 16:41:55 -0700 Subject: [PATCH 02/21] scala jar path change --- scala/basic/ndarray_scala.ipynb | 43 ++++++++++++++++++++----------- scala/tutorials/mnist_scala.ipynb | 41 +++++++++++++++++++---------- 2 files changed, 56 insertions(+), 28 deletions(-) diff --git a/scala/basic/ndarray_scala.ipynb b/scala/basic/ndarray_scala.ipynb index 24ec7e977..da4d84e8f 100644 --- a/scala/basic/ndarray_scala.ipynb +++ b/scala/basic/ndarray_scala.ipynb @@ -15,29 +15,41 @@ "- NDArray.shape the dimensions of the array. It is a tuple of integers indicating the length of the array in each dimension. For a matrix with n rows and m columns, the shape will be (n, m).\n", "- NDArray.dtype an numpy object describing the type of the elements.\n", "- NDArray.size the total number of numbers in the array, which equals to the product of the elements of shape\n", - "- NDArray.context the device this array is stored. A device can be the CPU or the i-th GPU.\n", + "- NDArray.context the device this array is stored. A device can be the CPU or the i-th GPU." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Jupyter Scala kernel\n", + "Add mxnet scala jar which is created as a part of MXNet Scala package installation in classpath as follows:\n", "\n", - "## Array Creation\n", - "An array can be created in multiple ways. For example, we can create an array from a regular Scala Array by using the array function" + "**Note**: Process to add this jar in your scala kernel classpath can differ according to the scala kernel you are using.\n", + "\n", + "We have used [jupyter-scala kernel](https://github.com/alexarchambault/jupyter-scala) for creating this notebook." ] }, { - "cell_type": "code", - "execution_count": 1, + "cell_type": "markdown", "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ - "classpath.addPath(\"/Users/roshanin/mxnet/scala-package/assembly/osx-x86_64-cpu/target/mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")" + "```\n", + "classpath.addPath()\n", + "\n", + "e.g\n", + "classpath.addPath(\"mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Array Creation\n", + "An array can be created in multiple ways. For example, we can create an array from a regular Scala Array by using the array function" ] }, { @@ -1052,6 +1064,7 @@ } ], "metadata": { + "anaconda-cloud": {}, "kernelspec": { "display_name": "Scala 2.11", "language": "scala211", diff --git a/scala/tutorials/mnist_scala.ipynb b/scala/tutorials/mnist_scala.ipynb index 89377b3e7..6aa010742 100644 --- a/scala/tutorials/mnist_scala.ipynb +++ b/scala/tutorials/mnist_scala.ipynb @@ -17,26 +17,41 @@ "\n", "Let’s train a 3-layer multilayer perceptron on the MNIST dataset to classify handwritten digits. \n", "\n", - "First, let's load mxnet scala jar in classpath and then import required modules." + "First, let's load mxnet scala jar in classpath." ] }, { - "cell_type": "code", - "execution_count": 1, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Jupyter Scala kernel\n", + "Add mxnet scala jar which is created as a part of MXNet Scala package installation in classpath as follows:\n", + "\n", + "**Note**: Process to add this jar in your scala kernel classpath can differ according to the scala kernel you are using.\n", + "\n", + "We have used [jupyter-scala kernel](https://github.com/alexarchambault/jupyter-scala) for creating this notebook." + ] + }, + { + "cell_type": "markdown", "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ - "classpath.addPath(\"/Users/roshanin/mxnet/scala-package/assembly/osx-x86_64-cpu/target/mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")" + "```\n", + "classpath.addPath()\n", + "\n", + "e.g\n", + "classpath.addPath(\"mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")\n", + "```\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "import required modules" ] }, { From 0ac2d8b26364e7bae57301d4279ba3b0533c1843 Mon Sep 17 00:00:00 2001 From: Nagmote Date: Thu, 16 Mar 2017 13:30:48 -0700 Subject: [PATCH 03/21] Added module, symbol notebooks --- scala/basic/module_scala.ipynb | 785 +++++++++++++++++++++++++++++ scala/basic/symbol_scala.ipynb | 788 ++++++++++++++++++++++++++++++ scala/tutorials/mnist_scala.ipynb | 12 +- 3 files changed, 1580 insertions(+), 5 deletions(-) create mode 100644 scala/basic/module_scala.ipynb create mode 100644 scala/basic/symbol_scala.ipynb diff --git a/scala/basic/module_scala.ipynb b/scala/basic/module_scala.ipynb new file mode 100644 index 000000000..4dce6d345 --- /dev/null +++ b/scala/basic/module_scala.ipynb @@ -0,0 +1,785 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Training and Inference Module\n", + "We modularized commonly used codes for training and inference in the module (or mod for short) package. This package provides intermediate-level and high-level interface for executing predefined networks." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Jupyter Scala kernel\n", + "Add mxnet scala jar which is created as a part of MXNet Scala package installation in classpath as follows:\n", + "\n", + "**Note**: Process to add this jar in your scala kernel classpath can differ according to the scala kernel you are using.\n", + "\n", + "We have used [jupyter-scala kernel](https://github.com/alexarchambault/jupyter-scala) for creating this notebook." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "```\n", + "classpath.addPath()\n", + "\n", + "e.g\n", + "classpath.addPath(\"mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Basic Usage\n", + "### Preliminary\n", + "In this tutorial, we will use a simple multilayer perception for 10 classes." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "log4j:WARN No appenders could be found for logger (MXNetJVM).\n", + "log4j:WARN Please initialize the log4j system properly.\n", + "log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36mml.dmlc.mxnet._\u001b[0m\n", + "\u001b[32mimport \u001b[36mml.dmlc.mxnet.module.{FitParams, Module}\u001b[0m\n", + "\u001b[36mdata\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@153695b4\n", + "\u001b[36mfc1\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@782359b1\n", + "\u001b[36mact1\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@69728e46\n", + "\u001b[36mfc2\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@6d9120e2\n", + "\u001b[36msoftmax\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@659455de" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import ml.dmlc.mxnet._\n", + "import ml.dmlc.mxnet.module.{FitParams, Module}\n", + "\n", + "val data = Symbol.Variable(\"data\")\n", + "val fc1 = Symbol.FullyConnected(name = \"fc1\")()(Map(\"data\" -> data, \"num_hidden\" -> 64))\n", + "val act1 = Symbol.Activation(name = \"relu1\")()(Map(\"data\" -> fc1, \"act_type\" -> \"relu\"))\n", + "val fc2 = Symbol.FullyConnected(name = \"fc2\")()(Map(\"data\" -> act1, \"num_hidden\" -> 10))\n", + "val softmax = Symbol.SoftmaxOutput(name = \"softmax\")()(Map(\"data\" -> fc2))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "### Create Module\n", + "The most widely used module class is Module, which wraps a Symbol and one or more Executors.\n", + "\n", + "We construct a module by specify\n", + "\n", + "- symbol : the network Symbol\n", + "- context : the device (or a list of devices) for execution\n", + "- data_names : the list of data variable names\n", + "- label_names : the list of label variable names\n", + "\n", + "One can refer to data.ipynb for more explanations about the last two arguments. Here we have only one data named data, and one label, with the name softmax_label, which is automatically named for us following the name softmax we specified for the SoftmaxOutput operator." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36mml.dmlc.mxnet.optimizer.SGD\u001b[0m\n", + "\u001b[36mmod\u001b[0m: \u001b[32mModule\u001b[0m = ml.dmlc.mxnet.module.Module@3110b89" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import ml.dmlc.mxnet.optimizer.SGD\n", + "\n", + "val mod = new Module(softmax, contexts=Context.cpu(), dataNames=Array(\"data\"), labelNames=Array(\"softmax_label\"))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Create a DataIterator. Using Mnist data" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mbatchSize\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m2\u001b[0m\n", + "\u001b[36mtrainIter\u001b[0m: \u001b[32mDataIter\u001b[0m = non-empty iterator\n", + "\u001b[36mevalIter\u001b[0m: \u001b[32mDataIter\u001b[0m = non-empty iterator" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val batchSize=2\n", + "\n", + "val trainIter = IO.MNISTIter(Map(\n", + " \"image\" -> (\"data/train-images-idx3-ubyte\"),\n", + " \"label\" -> (\"data/train-labels-idx1-ubyte\"),\n", + " \"label_name\" -> \"softmax_label\",\n", + " \"input_shape\" -> \"(784,)\",\n", + " \"batch_size\" -> batchSize.toString,\n", + " \"shuffle\" -> \"True\",\n", + " \"flat\" -> \"True\", \"silent\" -> \"False\", \"seed\" -> \"10\"))\n", + "val evalIter = IO.MNISTIter(Map(\n", + " \"image\" -> (\"data/t10k-images-idx3-ubyte\"),\n", + " \"label\" -> (\"data/t10k-labels-idx1-ubyte\"),\n", + " \"label_name\" -> \"softmax_label\",\n", + " \"input_shape\" -> \"(784,)\",\n", + " \"batch_size\" -> batchSize.toString,\n", + " \"flat\" -> \"True\", \"silent\" -> \"False\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Train, Predict, and Evaluate\n", + "Modules provide high-level APIs for training, predicting and evaluating. To fit a module, simply call the fit function with some DataIters." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mod.fit(trainIter, \n", + " evalData=scala.Option(evalIter),\n", + " fitParams = new FitParams().setOptimizer(new SGD(learningRate = 0.1f, momentum = 0.9f, wd = 0.0001f)),\n", + " numEpoch=5)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To predict with a module, simply call predict() with a DataIter. It will collect and return all the prediction results.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36my\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mNDArray\u001b[0m] = \u001b[33mArrayBuffer\u001b[0m(\n", + " ml.dmlc.mxnet.NDArray@e4216872,\n", + " ml.dmlc.mxnet.NDArray@b6c053f0,\n", + " ml.dmlc.mxnet.NDArray@f3e68a11,\n", + " ml.dmlc.mxnet.NDArray@b04c5734,\n", + " ml.dmlc.mxnet.NDArray@e4635691,\n", + " ml.dmlc.mxnet.NDArray@38f232b,\n", + " ml.dmlc.mxnet.NDArray@f77fe955,\n", + " ml.dmlc.mxnet.NDArray@eef4e2b3,\n", + " ml.dmlc.mxnet.NDArray@e42c116c,\n", + " ml.dmlc.mxnet.NDArray@acf7250f,\n", + " ml.dmlc.mxnet.NDArray@e538781,\n", + " ml.dmlc.mxnet.NDArray@199fdaef,\n", + " ml.dmlc.mxnet.NDArray@cb3d9293,\n", + " ml.dmlc.mxnet.NDArray@eaf6f77c,\n", + " ml.dmlc.mxnet.NDArray@ca9ff00,\n", + " ml.dmlc.mxnet.NDArray@c406c5ef,\n", + " ml.dmlc.mxnet.NDArray@b670b4d8,\n", + " ml.dmlc.mxnet.NDArray@d9194c50,\n", + " ml.dmlc.mxnet.NDArray@2dd299,\n", + "\u001b[33m...\u001b[0m\n", + "\u001b[36mres7_1\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m5000\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val y = mod.predict(evalIter)\n", + "y.size" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another convenient API for prediction in the case where the prediction results might be too large to fit in the memory is `predictEveryBatch`:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36morg.slf4j.LoggerFactory\u001b[0m\n", + "\u001b[36mpreds\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mIndexedSeq\u001b[0m[\u001b[32mNDArray\u001b[0m]] = \u001b[33mArrayBuffer\u001b[0m(\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@bd4d9298),\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@ca6e5090),\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@3168f3d),\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@ca102191),\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@cdc7d946),\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@c1c349f4),\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@c8a05432),\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@de269f8b),\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@374bbd4),\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@ae8dfe32),\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@c0b6a5dd),\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@e5b6dacb),\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@1f207ca7),\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@f46b7260),\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@cb95d452),\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@a95649d4),\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@ede813e7),\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@b1c8980f),\n", + " \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@fcfea88b),\n", + "\u001b[33m...\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import org.slf4j.LoggerFactory\n", + "\n", + "private val logger = LoggerFactory.getLogger(\"mnist\") \n", + "val preds = mod.predictEveryBatch(evalIter)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "batch 0 accuracy 0.1135\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36maccSum\u001b[0m: \u001b[32mFloat\u001b[0m = \u001b[32m1.0F\u001b[0m\n", + "\u001b[36maccCnt\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m2\u001b[0m\n", + "\u001b[36mi\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m1\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "// perform prediction and calculate accuracy manually\n", + " evalIter.reset()\n", + " var accSum = 0.0f\n", + " var accCnt = 0\n", + " var i = 0\n", + " while (evalIter.hasNext) {\n", + " //println(\"hi\")\n", + "\n", + " val batch = evalIter.next()\n", + " val predLabel: Array[Int] = NDArray.argmax_channel(preds(i)(0)).toArray.map(_.toInt)\n", + " val label = batch.label(0).toArray.map(_.toInt)\n", + " accSum += (predLabel zip label).map { case (py, y) =>\n", + " if (py == y) 1 else 0\n", + " }.sum\n", + " accCnt += predLabel.length\n", + " val (name, value) = mod.score(evalIter, new Accuracy).get\n", + " println(\"batch \" + i + \" accuracy \" + value)\n", + " i += 1\n", + " }" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36macc\u001b[0m: \u001b[32mEvalMetric\u001b[0m = ml.dmlc.mxnet.Accuracy@7055caf9\n", + "\u001b[36mn\u001b[0m: \u001b[32mString\u001b[0m = \u001b[32m\"accuracy\"\u001b[0m\n", + "\u001b[36mv\u001b[0m: \u001b[32mFloat\u001b[0m = \u001b[32m0.1135F\u001b[0m\n", + "\u001b[36mres13_2\u001b[0m: (\u001b[32mString\u001b[0m, \u001b[32mFloat\u001b[0m) = \u001b[33m\u001b[0m(\u001b[32m\"accuracy\"\u001b[0m, \u001b[32m0.1135F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val acc = mod.score(evalIter, new Accuracy)\n", + "val (n,v) = acc.get\n", + "(n,v)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Save and Load\n", + "We can save the module parameters in each training epoch by calling `setEpochEndCallback` method for `FitParams` object." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mmodelPrefix\u001b[0m: \u001b[32mString\u001b[0m = \u001b[32m\"mx mlp\"\u001b[0m\n", + "\u001b[36mmetric\u001b[0m: \u001b[32mAccuracy\u001b[0m = ml.dmlc.mxnet.Accuracy@1f90e6f6" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "// construct a callback function to save checkpoints\n", + "val modelPrefix: String = \"mx mlp\"\n", + "//val mod = new Module(softmax)\n", + "val metric = new Accuracy()\n", + "\n", + "//val epoch: Int = 1\n", + "for (epoch <- 0 until 5) {\n", + " // val checkpoint = mod.saveCheckpoint(modelPrefix, epoch, saveOptStates = true)\n", + " while (trainIter.hasNext) {\n", + " val batch = trainIter.next()\n", + " mod.forward(batch)\n", + " mod.updateMetric(metric, batch.label)\n", + " mod.backward()\n", + " mod.update()\n", + " }\n", + "// saveOptStates = true means save optimizer states\n", + " val checkpoint = mod.saveCheckpoint(modelPrefix, epoch, saveOptStates = true)\n", + "\n", + " val (name, value) = metric.get\n", + " metric.reset()\n", + " trainIter.reset()\n", + "}\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "To load the saved module parameters, call the `loadCheckpoint` function. You can specify cpu/gpu you want to use in Context and also workLoadList which helps in distributing work load on different cpus/gpus. \n", + "\n", + "`loadCheckpoint` function creates a module from previously saved checkpoint." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mloadModelEpoch\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m2\u001b[0m\n", + "\u001b[36mmod\u001b[0m: \u001b[32mModule\u001b[0m = ml.dmlc.mxnet.module.Module@7aaade12" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "// Epoch to load\n", + "val loadModelEpoch = 2\n", + "// loadOptimizerStates = true only when checkpoint was saved with saveOptStates=True\n", + "val mod = Module.loadCheckpoint(modelPrefix, loadModelEpoch, loadOptimizerStates = true)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To initialize parameters, Bind the symbols to construct executors first with `bind` method. Then, initialize the parameters and auxiliary states by calling `initParams()` method." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mod.bind(dataShapes = trainIter.provideData, labelShapes = Some(trainIter.provideLabel))\n", + "mod.initParams()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Get current parameters using `getParams` method." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36margParams\u001b[0m: \u001b[32mMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mNDArray\u001b[0m] = \u001b[33mMap\u001b[0m(\n", + " \u001b[32m\"fc1_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@96840c2c,\n", + " \u001b[32m\"fc2_bias\"\u001b[0m -> ml.dmlc.mxnet.NDArray@367f5b1c,\n", + " \u001b[32m\"fc2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@34041eee,\n", + " \u001b[32m\"fc1_bias\"\u001b[0m -> ml.dmlc.mxnet.NDArray@ea1ecde3\n", + ")\n", + "\u001b[36mauxParams\u001b[0m: \u001b[32mMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mNDArray\u001b[0m] = \u001b[33mMap\u001b[0m()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val (argParams, auxParams) = mod.getParams" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, assign parameter and aux state values using `setParams` method." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mod.setParams(argParams, auxParams)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we just want to resume training from a saved checkpoint, instead of calling setParams(), we can directly call fit(), passing the loaded parameters, so that fit() knows to start from those parameters instead of initializing from random. We also set the beginEpoch so that so that fit() knows we are resuming from a previous saved epoch." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mbeginEpoch\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m4\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val beginEpoch = 4\n", + "mod.fit(trainIter, \n", + " evalData=scala.Option(evalIter),\n", + " fitParams=new FitParams().setArgParams(argParams).\n", + " setAuxParams(auxParams).setBeginEpoch(beginEpoch).\n", + " setOptimizer(new SGD(learningRate = 0.1f, momentum = 0.9f, wd = 0.0001f)),\n", + " numEpoch=5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Module as a computation \"machine\"\n", + "We already seen how to module for basic training and inference. Now we are going to show a more flexiable usage of module.\n", + "\n", + "A module represents a computation component. The design purpose of a module is that it abstract a computation “machine”, that accpets Symbol programs and data, and then we can run forward, backward, update parameters, etc.\n", + "\n", + "We aim to make the APIs easy and flexible to use, especially in the case when we need to use imperative API to work with multiple modules (e.g. stochastic depth network).\n", + "\n", + "A module has several states:\n", + "\n", + "- **Initial state**. Memory is not allocated yet, not ready for computation yet.\n", + "- **Binded**. Shapes for inputs, outputs, and parameters are all known, memory allocated, ready for computation.\n", + "- **Parameter initialized**. For modules with parameters, doing computation before initializing the parameters might result in undefined outputs.\n", + "- **Optimizer installed**. An optimizer can be installed to a module. After this, the parameters of the module can be updated according to the optimizer after gradients are computed (forward-backward).\n", + "\n", + "The following codes implement a simplified fit(). Here we used other components including initializer, optimizer, and metric, which are explained in other notebooks." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mmod\u001b[0m: \u001b[32mModule\u001b[0m = ml.dmlc.mxnet.module.Module@27cbfc5\n", + "\u001b[36mmetric\u001b[0m: \u001b[32mAccuracy\u001b[0m = ml.dmlc.mxnet.Accuracy@273f6196\n", + "\u001b[36mname\u001b[0m: \u001b[32mString\u001b[0m = \u001b[32m\"accuracy\"\u001b[0m\n", + "\u001b[36mvalue\u001b[0m: \u001b[32mFloat\u001b[0m = \u001b[32m0.10195F\u001b[0m\n", + "\u001b[36mres26_7\u001b[0m: (\u001b[32mString\u001b[0m, \u001b[32mFloat\u001b[0m) = \u001b[33m\u001b[0m(\u001b[32m\"accuracy\"\u001b[0m, \u001b[32m0.10195F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "// initial state\n", + "val mod = new Module(softmax)\n", + "\n", + "// bind, tell the module the data and label shapes, so\n", + "// that memory could be allocated on the devices for computation\n", + "mod.bind(dataShapes=trainIter.provideData, labelShapes=Some(trainIter.provideLabel))\n", + "\n", + "// init parameters\n", + "mod.initParams(initializer=new Xavier(magnitude = 2f))\n", + "\n", + "// init optimizer\n", + "mod.initOptimizer(\"local\", new SGD(learningRate = 0.1f, momentum = 0.9f, wd = 0.0001f))\n", + "\n", + "// use accuracy as the metric\n", + "val metric = new Accuracy\n", + "\n", + "// train one epoch, i.e. going over the data iter one pass\n", + "while (trainIter.hasNext) {\n", + " val batch = trainIter.next()\n", + " mod.forward(batch) // compute predictions\n", + " mod.updateMetric(metric, batch.label) // accumulate prediction accuracy\n", + " mod.backward() // compute gradients\n", + " mod.update() // update parameters using SGD\n", + "}\n", + "\n", + "// training accuracy\n", + "val (name, value) = metric.get\n", + "(name, value)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Beside the operations, a module provides a lot of useful information.\n", + "\n", + "basic names:\n", + "- **dataNames**: list of string indicating the names of the required data.\n", + "- **outputNames**: list of string indicating the names of the outputs.\n", + "\n", + "state information\n", + "- **binded**: bool, indicating whether the memory buffers needed for computation has been allocated.\n", + "- **forTraining**: whether the module is binded for training (if binded).\n", + "- **paramsInitialized**: bool, indicating whether the parameters of this modules has been initialized.\n", + "- **optimizerInitialized**: bool, indicating whether an optimizer is defined and initialized.\n", + "- **inputsNeedGrad**: bool, indicating whether gradients with respect to the input data is needed. Might be useful when implementing composition of modules.\n", + "\n", + "input/output information\n", + "- **dataShapes**: a list of (name, shape). In theory, since the memory is allocated, we could directly provide the data arrays. But in the case of data parallelization, the data arrays might not be of the same shape as viewed from the external world.\n", + "- **labelShapes**: a list of (name, shape). This might be [] if the module does not need labels (e.g. it does not contains a loss function at the top), or a module is not binded for training.\n", + "- **outputShapes**: a list of (name, shape) for outputs of the module.\n", + "\n", + "parameters (for modules with parameters)\n", + "- **getParams()**: return a tuple (argParams, auxParams). Each of those is a dictionary of name to NDArray mapping. Those NDArray always lives on CPU. The actual parameters used for computing might live on other devices (GPUs), this function will retrieve (a copy of) the latest parameters.\n", + "- **getOutputs()**: get outputs of the previous forward operation.\n", + "- **getInputGrads()**: get the gradients with respect to the inputs computed in the previous backward operation.\n", + "\n", + "setup\n", + "- **bind()**: prepare environment for computation.\n", + "- **initOptimizer()**: install optimizer for parameter updating.\n", + "\n", + "computation\n", + "- **forward(dataBatch)**: forward operation.\n", + "- **backward(outGrads=None)**: backward operation.\n", + "- **update()**: update parameters according to installed optimizer.\n", + "- **getOutputs()**: get outputs of the previous forward operation.\n", + "- **getInputGrads()**: get the gradients with respect to the inputs computed in the previous backward operation.\n", + "- **updateMetric(metric, labels)**: update performance metric for the previous forward computed results.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mres27_0\u001b[0m: (\u001b[32mIndexedSeq\u001b[0m[\u001b[32mDataDesc\u001b[0m], \u001b[32mIndexedSeq\u001b[0m[\u001b[32mDataDesc\u001b[0m], \u001b[32mIndexedSeq\u001b[0m[(\u001b[32mString\u001b[0m, \u001b[32mShape\u001b[0m)]) = \u001b[33m\u001b[0m(\n", + " \u001b[33mVector\u001b[0m(DataDesc[data,(2,784),Float32,NCHW]),\n", + " \u001b[33mVector\u001b[0m(DataDesc[softmax_label,(2),Float32,NCHW]),\n", + " \u001b[33mArrayBuffer\u001b[0m(\u001b[33m\u001b[0m(\u001b[32m\"softmax_output\"\u001b[0m, (2,10)))\n", + ")\n", + "\u001b[36mres27_1\u001b[0m: (\u001b[32mMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mNDArray\u001b[0m], \u001b[32mMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mNDArray\u001b[0m]) = \u001b[33m\u001b[0m(\n", + " \u001b[33mMap\u001b[0m(\n", + " \u001b[32m\"fc1_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@a073e593,\n", + " \u001b[32m\"fc1_bias\"\u001b[0m -> ml.dmlc.mxnet.NDArray@15f069eb,\n", + " \u001b[32m\"fc2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@fb482814,\n", + " \u001b[32m\"fc2_bias\"\u001b[0m -> ml.dmlc.mxnet.NDArray@56ac2896\n", + " ),\n", + " \u001b[33mMap\u001b[0m()\n", + ")" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "(mod.dataShapes, mod.labelShapes, mod.outputShapes)\n", + "mod.getParams" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## More on Modules\n", + "Module simplifies the implementation of new modules. For example\n", + "- [SequentialModule](https://github.com/dmlc/mxnet/blob/master/scala-package/core/src/main/scala/ml/dmlc/mxnet/module/SequentialModule.scala) can chain multiple modules together\n", + "\n", + "See also [examples](https://github.com/dmlc/mxnet/tree/master/scala-package/examples/src/main/scala/ml/dmlc/mxnet/examples/module) for a list of code examples using the module API.\n", + "\n", + "## Implementation\n", + "The module is implemented in scala, located at [scala/mxnet/module](https://github.com/dmlc/mxnet/tree/master/scala-package/core/src/main/scala/ml/dmlc/mxnet/module)\n", + "\n", + "## Futher Readings\n", + "[module API](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.module.Module)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Scala 2.11", + "language": "scala211", + "name": "scala211" + }, + "language_info": { + "codemirror_mode": "text/x-scala", + "file_extension": ".scala", + "mimetype": "text/x-scala", + "name": "scala211", + "pygments_lexer": "scala", + "version": "2.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/scala/basic/symbol_scala.ipynb b/scala/basic/symbol_scala.ipynb new file mode 100644 index 000000000..133ca5325 --- /dev/null +++ b/scala/basic/symbol_scala.ipynb @@ -0,0 +1,788 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Symbol Tutorial\n", + "Besides the tensor computation interface NDArray, another main object in MXNet is the Symbol provided by MXNet.Symbol. A symbol represents a multi-output symbolic expression. They are composited by operators, such as simple matrix operations (e.g. “+”), or a neural network layer (e.g. convolution layer). An operator can take several input variables, produce more than one output variables, and have internal state variables. A variable can be either free, which we can bind with value later, or an output of another symbol.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Jupyter Scala kernel\n", + "Add mxnet scala jar which is created as a part of MXNet Scala package installation in classpath as follows:\n", + "\n", + "**Note**: Process to add this jar in your scala kernel classpath can differ according to the scala kernel you are using.\n", + "\n", + "We have used [jupyter-scala kernel](https://github.com/alexarchambault/jupyter-scala) for creating this notebook." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```\n", + "classpath.addPath()\n", + "\n", + "e.g\n", + "classpath.addPath(\"mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "## Symbol Composition\n", + "### Basic Operators\n", + "The following example composites a simple expression a+b. We first create the placeholders a and b with names using Symbol.Variable, and then construct the desired symbol by using the operator +. When the string name is not given during creating, MXNet will automatically generate a unique name for the symbol, which is the case for c." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36mml.dmlc.mxnet._\u001b[0m\n", + "\u001b[32mimport \u001b[36mml.dmlc.mxnet.Visualization\u001b[0m\n", + "\u001b[36ma\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@3b4f8120\n", + "\u001b[36mb\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@155d0b1d\n", + "\u001b[36mc\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@552d0f9b\n", + "\u001b[36mres30_5\u001b[0m: (\u001b[32mSymbol\u001b[0m, \u001b[32mSymbol\u001b[0m, \u001b[32mSymbol\u001b[0m) = \u001b[33m\u001b[0m(\n", + " ml.dmlc.mxnet.Symbol@3b4f8120,\n", + " ml.dmlc.mxnet.Symbol@155d0b1d,\n", + " ml.dmlc.mxnet.Symbol@552d0f9b\n", + ")" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import ml.dmlc.mxnet._\n", + "import ml.dmlc.mxnet.Visualization\n", + "\n", + "val a = Symbol.Variable(\"a\")\n", + "val b = Symbol.Variable(\"b\")\n", + "val c = a + b\n", + "(a, b, c)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Most NDArray operators can be applied to Symbol, for example:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36md\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@49597791\n", + "\u001b[36me\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@5bc8712d\n", + "\u001b[36mf\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@52cf1e59\n", + "\u001b[36mg\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@4b8812b8" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "// elemental wise times\n", + "val d = a * b \n", + "// matrix multiplication\n", + "val e = Symbol.dot()(a, b)()\n", + "// reshape\n", + "val f = Symbol.Reshape()(d+e)() \n", + "// broadcast\n", + "val g = Symbol.broadcast_to()(f)()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Basic Neural Networks\n", + "Besides the basic operators, Symbol has a rich set of neural network layers. The following codes construct a two layer fully connected neural work and then visualize the structure by given the input data shape." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mdata\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@1859cb4b\n", + "\u001b[36mfc1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@28500e7d\n", + "\u001b[36mact1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@4f9fc9e0\n", + "\u001b[36mfc2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@7ab932c7\n", + "\u001b[36mnet\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@2cecbd48" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "// Output may vary\n", + "val data = Symbol.Variable(\"data\")\n", + "val fc1 = Symbol.FullyConnected(name = \"fc1\")()(Map(\"data\" -> data, \"num_hidden\" -> 128))\n", + "val act1 = Symbol.Activation(name = \"relu1\")()(Map(\"data\" -> fc1, \"act_type\" -> \"relu\"))\n", + "val fc2 = Symbol.FullyConnected(name = \"fc2\")()(Map(\"data\" -> act1, \"num_hidden\" -> 10))\n", + "val net = Symbol.SoftmaxOutput(name = \"out\")()(Map(\"data\" -> fc2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Modulelized Construction for Deep Networks\n", + "For deep networks, such as the Google Inception, constructing layer by layer is painful given the large number of layers. For these networks, we often modularize the construction. Take the Google Inception as an example, we can first define a factory function to chain the convolution layer, batch normalization layer, and Relu activation layer together:" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "defined \u001b[32mfunction \u001b[36mConvFactory\u001b[0m\n", + "\u001b[36mprev\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@716ccc87\n", + "\u001b[36mconvComp\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@317ecb1e\n", + "\u001b[36mshape\u001b[0m: \u001b[32mShape\u001b[0m = (128,3,28,28)\n", + "\u001b[36mdot\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@65550882" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + " // Output may vary\n", + "def ConvFactory(data: Symbol, numFilter: Int, kernel: (Int, Int), stride: (Int, Int) = (1, 1),\n", + " pad: (Int, Int) = (0, 0), name: String = \"\", suffix: String = \"\"): Symbol = {\n", + " val conv = Symbol.Convolution(s\"conv_${name}${suffix}\")()(\n", + " Map(\"data\" -> data, \"num_filter\" -> numFilter, \"kernel\" -> s\"$kernel\",\n", + " \"stride\" -> s\"$stride\", \"pad\" -> s\"$pad\"))\n", + " \n", + " val bn = Symbol.BatchNorm(s\"bn_${name}${suffix}\")()(Map(\"data\" -> conv))\n", + " \n", + " val act = Symbol.Activation(s\"relu_${name}${suffix}\")()(\n", + " Map(\"data\" -> bn, \"act_type\" -> \"relu\"))\n", + " act\n", + " }\n", + "\n", + "val prev = Symbol.Variable(\"Previos Output\")\n", + "val convComp = ConvFactory(data = prev, numFilter = 64, kernel = (7, 7), stride=(2, 2))\n", + "val shape = Shape(128, 3, 28, 28)\n", + "\n", + "val dot = Visualization.plotNetwork(symbol = convComp, shape = Map(\"Previos Output\" -> shape))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we define a function that constructs an Inception module based on ConvFactory\n" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "defined \u001b[32mfunction \u001b[36mInceptionFactoryA\u001b[0m\n", + "\u001b[36mprev\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@2ecf885e\n", + "\u001b[36min3a\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@1fbb65dc\n", + "\u001b[36mres35_3\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@54ba2061" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def InceptionFactoryA(data: Symbol, num1x1: Int, num3x3red: Int, num3x3: Int,\n", + " numd3x3red: Int, numd3x3: Int, pool: String, proj: Int, name: String): Symbol = {\n", + " // 1x1\n", + " val c1x1 = ConvFactory(data = data, numFilter = num1x1,\n", + " kernel = (1, 1), name = s\"${name}_1x1\")\n", + " // 3x3 reduce + 3x3\n", + " val c3x3r = ConvFactory(data = data, numFilter = num3x3red,\n", + " kernel = (1, 1), name = s\"${name}_3x3\", suffix = \"_reduce\")\n", + " val c3x3 = ConvFactory(data = c3x3r, numFilter = num3x3,\n", + " kernel = (3, 3), pad = (1, 1), name = s\"${name}_3x3\")\n", + " // double 3x3 reduce + double 3x3\n", + " val cd3x3r = ConvFactory(data = data, numFilter = numd3x3red,\n", + " kernel = (1, 1), name = s\"${name}_double_3x3\", suffix = \"_reduce\")\n", + " var cd3x3 = ConvFactory(data = cd3x3r, numFilter = numd3x3,\n", + " kernel = (3, 3), pad = (1, 1), name = s\"${name}_double_3x3_0\")\n", + " cd3x3 = ConvFactory(data = cd3x3, numFilter = numd3x3,\n", + " kernel = (3, 3), pad = (1, 1), name = s\"${name}_double_3x3_1\")\n", + " // pool + proj\n", + " val pooling = Symbol.Pooling(s\"${pool}_pool_${name}_pool\")()(\n", + " Map(\"data\" -> data, \"kernel\" -> \"(3, 3)\", \"stride\" -> \"(1, 1)\",\n", + " \"pad\" -> \"(1, 1)\", \"pool_type\" -> pool))\n", + " val cproj = ConvFactory(data = pooling, numFilter = proj,\n", + " kernel = (1, 1), name = s\"${name}_proj\")\n", + " // concat\n", + " val concat = Symbol.Concat(s\"ch_concat_${name}_chconcat\")(c1x1, c3x3, cd3x3, cproj)()\n", + " concat\n", + " }\n", + "\n", + "\n", + "val prev = Symbol.Variable(\"Previos Output\")\n", + "val in3a = InceptionFactoryA(prev, 64, 64, 64, 64, 96, \"avg\", 32, \"in3a\")\n", + "Visualization.plotNetwork(symbol=in3a, shape = Map(\"Previos Output\" -> shape))\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally we can obtain the whole network by chaining multiple inception modulas. A complete example is available at [visualization example](https://github.com/dmlc/mxnet/tree/master/scala-package/examples/src/main/scala/ml/dmlc/mxnet/examples/visualization)\n", + "### Group Multiple Symbols\n", + "To construct neural networks with multiple loss layers, we can use mxnet.Symbol.Group to group multiple symbols together. The following example group two outputs:" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mdata\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@7518e976\n", + "\u001b[36mfc1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@7228ea81\n", + "\u001b[36mnet\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@16683a52\n", + "\u001b[36mout1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@1b82c7cd\n", + "\u001b[36mout2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@29e3de92\n", + "\u001b[36mgroup\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@1caa55cd\n", + "\u001b[36mres36_6\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mString\u001b[0m] = \u001b[33mArrayBuffer\u001b[0m(\u001b[32m\"softmax_output\"\u001b[0m, \u001b[32m\"regression_output\"\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val data = Symbol.Variable(\"data\")\n", + "val fc1 = Symbol.FullyConnected(name = \"fc1\")()(Map(\"data\" -> data, \"num_hidden\" -> 128))\n", + "val net = Symbol.Activation(name = \"relu1\")()(Map(\"data\" -> fc1, \"act_type\" -> \"relu\"))\n", + "val out1 = Symbol.SoftmaxOutput(name = \"softmax\")()(Map(\"data\" -> act1))\n", + "val out2 = Symbol.LinearRegressionOutput(\"regression\")()(Map(\"data\" -> net))\n", + "val group = Symbol.Group(out1,out2)\n", + "group.listOutputs()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Relations to NDArray\n", + "As can be seen now, both Symbol and NDArray provide multi-dimensional array operations, such as c=a+b in MXNet. Sometimes users are confused which way to use. We briefly clarify the difference here, more detailed explanation are available [here](http://mxnet.io/architecture/program_model.html).\n", + "\n", + "The NDArray provides an imperative programming alike interface, in which the computations are evaluated sentence by sentence. While Symbol is closer to declarative programming, in which we first declare the computation, and then evaluate with data. Examples in this category include regular expression and SQL.\n", + "\n", + "The pros for NDArray:\n", + "\n", + "- straightforward\n", + "- easy to work with other language features (for loop, if-else condition, ..) and libraries (numpy, ..)\n", + "- easy to step-by-step debug\n", + "\n", + "The pros for Symbol:\n", + "\n", + "- provides almost all functionalities of NDArray, such as +, *, sin, and reshape\n", + "- provides a large number of neural network related operators such as Convolution, Activation, and BatchNorm\n", + "- provides automatic differentiation\n", + "- easy to construct and manipulate complex computations such as deep neural networks\n", + "- easy to save, load, and visualization\n", + "- easy for the backend to optimize the computation and memory usage\n", + "\n", + "We will show on the mixed programming tutorial how these two interfaces can be used together to develop a complete training program. This tutorial will focus on the usage of Symbol." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Symbol Manipulation *\n", + "One important difference of Symbol comparing to NDArray is that, we first declare the computation, and then bind with data to run.\n", + "\n", + "In this section we introduce the functions to manipulate a symbol directly. But note that, most of them are wrapped nicely by the mx.module. One can skip this section safely." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Shape Inference\n", + "For each symbol, we can query its inputs (or arguments) and outputs. We can also inference the output shape by given the input shape, which facilitates memory allocation." + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "" + ] + } + ], + "source": [ + "val argName = c.listArguments() // get the names of the inputs\n", + "val outName = c.listOutputs() // get the names of the outputs\n", + "val (argShape, outShape, _) = c.inferShape(Map(\"a\" -> Shape(2,3), \"b\" -> Shape(2,3))\n", + "println(argName, argShape)\n", + "println(outName, outShape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Bind with Data and Evaluate\n", + "The symbol c we constructed declares what computation should be run. To evaluate it, we need to feed arguments, namely free variables, with data first. We can do it by using the bind method, which accepts device context and a dict mapping free variable names to NDArrays as arguments and returns an executor. The executor provides method forward for evaluation and attribute outputs to get all results." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "number of outputs = 1\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mex\u001b[0m: \u001b[32mExecutor\u001b[0m = ml.dmlc.mxnet.Executor@779671ad\n", + "\u001b[36mres44_3\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val ex = c.bind(ctx=Context.cpu(), args=Map(\"a\" -> NDArray.ones(2,3), \n", + " \"b\" -> NDArray.ones(2,3)))\n", + "ex.forward()\n", + "println(\"number of outputs = \"+ ex.outputs.length)\n", + "ex.outputs(0).toArray" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can evaluate the same symbol on GPU with different data\n" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mex_gpu\u001b[0m: \u001b[32mExecutor\u001b[0m = ml.dmlc.mxnet.Executor@5f745c20\n", + "\u001b[36mres49_2\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val ex_gpu = c.bind(ctx=Context.cpu(), args=Map(\"a\" -> NDArray.ones(shape=Shape(3,4), Context.cpu(), dtype = DType.Float32)*2,\n", + " \"b\" -> NDArray.ones(shape=Shape(3,4), Context.cpu(), dtype = DType.Float32)*3))\n", + "ex_gpu.forward()\n", + "ex_gpu.outputs(0).toArray" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load and Save\n", + "Similar to NDArray, we can serialize a Symbol object by using save and load methods directly. Different to the binary format chosen by NDArray, Symbol uses the more readable json format for serialization. The toJson method returns the json string." + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"nodes\": [\n", + " {\n", + " \"op\": \"null\", \n", + " \"name\": \"a\", \n", + " \"inputs\": []\n", + " }, \n", + " {\n", + " \"op\": \"null\", \n", + " \"name\": \"b\", \n", + " \"inputs\": []\n", + " }, \n", + " {\n", + " \"op\": \"elemwise_add\", \n", + " \"name\": \"_plus2\", \n", + " \"inputs\": [[0, 0, 0], [1, 0, 0]]\n", + " }\n", + " ], \n", + " \"arg_nodes\": [0, 1], \n", + " \"node_row_ptr\": [0, 1, 2, 3], \n", + " \"heads\": [[2, 0, 0]], \n", + " \"attrs\": {\"mxnet_version\": [\"int\", 904]}\n", + "}\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mc2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@314ed9a5\n", + "\u001b[36mres47_3\u001b[0m: \u001b[32mBoolean\u001b[0m = \u001b[32mtrue\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "println(c.toJson)\n", + "c.save(\"symbol-c.json\")\n", + "val c2 = Symbol.load(\"symbol-c.json\")\n", + "c.toJson == c2.toJson" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Customized Symbol *\n", + "Most operators such as Symbol.Convolution and Symbol.Reshape are implemented in C++ for better performance. MXNet also allows users to write new operators using any frontend language such as Python/Scala. It often makes the developing and debugging much easier.\n", + "\n", + "To implement an operator in Python, we just need to define the two computation methods forward and backward with several methods for querying the properties, such as listArguments and inferShape.\n", + "\n", + "NDArray is the default type of arguments in both forward and backward. Therefore we often also implement the computation with NDArray operations. \n", + "\n", + "We first create a subclass of Operator.CustomOp and then define forward and backward." + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "defined \u001b[32mclass \u001b[36mSoftmax\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + " class Softmax(_param: Map[String, String]) extends CustomOp {\n", + "\n", + " override def forward(sTrain: Boolean, req: Array[String],\n", + " inData: Array[NDArray], outData: Array[NDArray], aux: Array[NDArray]): Unit = {\n", + " val xShape = inData(0).shape\n", + " val x = inData(0).toArray.grouped(xShape(1)).toArray\n", + " val yArr = x.map { it =>\n", + " val max = it.max\n", + " val tmp = it.map(e => Math.exp(e.toDouble - max).toFloat)\n", + " val sum = tmp.sum\n", + " tmp.map(_ / sum)\n", + " }.flatten\n", + " val y = NDArray.empty(xShape, outData(0).context)\n", + " y.set(yArr)\n", + " this.assign(outData(0), req(0), y)\n", + " y.dispose()\n", + " }\n", + "\n", + " override def backward(req: Array[String], outGrad: Array[NDArray],\n", + " inData: Array[NDArray], outData: Array[NDArray],\n", + " inGrad: Array[NDArray], aux: Array[NDArray]): Unit = {\n", + " val l = inData(1).toArray.map(_.toInt)\n", + " val oShape = outData(0).shape\n", + " val yArr = outData(0).toArray.grouped(oShape(1)).toArray\n", + " l.indices.foreach { i =>\n", + " yArr(i)(l(i)) -= 1.0f\n", + " }\n", + " val y = NDArray.empty(oShape, inGrad(0).context)\n", + " y.set(yArr.flatten)\n", + " this.assign(inGrad(0), req(0), y)\n", + " y.dispose()\n", + " }\n", + " }" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we use CustomOp.assign to assign the results to mxnet.NDArray based on the value of req, which could be \"over write\" or \"add to\".\n", + "Next we create a subclass of Operator.CustomOpProp for querying the properties." + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "defined \u001b[32mclass \u001b[36mSoftmaxProp\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + " class SoftmaxProp(needTopGrad: Boolean = false)\n", + " extends CustomOpProp(needTopGrad) {\n", + "\n", + " override def listArguments(): Array[String] = Array(\"data\", \"label\")\n", + "\n", + " override def listOutputs(): Array[String] = Array(\"output\")\n", + "\n", + " override def inferShape(inShape: Array[Shape]):\n", + " (Array[Shape], Array[Shape], Array[Shape]) = {\n", + " val dataShape = inShape(0)\n", + " val labelShape = Shape(dataShape(0))\n", + " val outputShape = dataShape\n", + " (Array(dataShape, labelShape), Array(outputShape), null)\n", + " }\n", + "\n", + " override def createOperator(ctx: String, inShapes: Array[Array[Int]],\n", + " inDtypes: Array[Int]): CustomOp = new Softmax(this.kwargs)\n", + " }" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we can use Symbol.Custom with the register name to use this operator\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```scala\n", + "val mlp = Symbol.Custom(\"softmax\")()(Map(\"data\" -> fc3,\n", + " \"label\" -> label, \"op_type\" -> \"softmax\"))\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Advanced Usages *\n", + "### Type Cast\n", + "MXNet uses 32-bit float in default. Sometimes we want to use a lower precision data type for better accuracy-performance trade-off. For example, The Nvidia Tesla Pascal GPUs (e.g. P100) have improved 16-bit float performance, while GTX Pascal GPUs (e.g. GTX 1080) are fast on 8-bit integers.\n", + "\n", + "We can use the Symbol.Cast operator to convert the data type." + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(ListBuffer(Float32),ListBuffer(Float16))\n", + "(ListBuffer(Int32),ListBuffer(UInt8))" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@34a6fc95\n", + "\u001b[36mb\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@527e4348\n", + "\u001b[36margb\u001b[0m: \u001b[32mSeq\u001b[0m[\u001b[32mDType\u001b[0m.\u001b[32mDType\u001b[0m] = \u001b[33mListBuffer\u001b[0m(Float32)\n", + "\u001b[36moutb\u001b[0m: \u001b[32mSeq\u001b[0m[\u001b[32mDType\u001b[0m.\u001b[32mDType\u001b[0m] = \u001b[33mListBuffer\u001b[0m(Float16)\n", + "\u001b[36mc\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@2b5b5355\n", + "\u001b[36margc\u001b[0m: \u001b[32mSeq\u001b[0m[\u001b[32mDType\u001b[0m.\u001b[32mDType\u001b[0m] = \u001b[33mListBuffer\u001b[0m(Int32)\n", + "\u001b[36moutc\u001b[0m: \u001b[32mSeq\u001b[0m[\u001b[32mDType\u001b[0m.\u001b[32mDType\u001b[0m] = \u001b[33mListBuffer\u001b[0m(UInt8)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val a = Symbol.Variable(\"data\")\n", + "val b = Symbol.Cast()()(Map(\"data\" -> a, \"dtype\" -> \"float16\"))\n", + "val (argb, outb, _) = b.inferType(Map(\"data\" -> DType.Float32))\n", + "println(argb, outb)\n", + "\n", + "val c = Symbol.Cast()()(Map(\"data\" -> a, \"dtype\" -> \"uint8\"))\n", + "val (argc, outc, _) = c.inferType(Map(\"data\" -> DType.Int32))\n", + "print(argc, outc)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Variable Sharing\n", + "Sometimes we want to share the contents between several symbols. This can be simply done by bind these symbols with the same array." + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36ma\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@4b35c611\n", + "\u001b[36mb\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@1b93c368\n", + "\u001b[36mc\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@7ca4d377\n", + "\u001b[36md\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@326eece9\n", + "\u001b[36mdata\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@f74e6ae3\n", + "\u001b[36mex\u001b[0m: \u001b[32mExecutor\u001b[0m = ml.dmlc.mxnet.Executor@20c202f3\n", + "\u001b[36mres54_7\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val a = Symbol.Variable(\"a\")\n", + "val b = Symbol.Variable(\"b\")\n", + "val c = Symbol.Variable(\"c\")\n", + "val d = a + b * c\n", + "\n", + "val data = NDArray.ones(2,3)*2\n", + "val ex = d.bind(ctx=Context.cpu(), args=Map(\"a\" -> data, \"b\" -> data, \"c\" -> data))\n", + "ex.forward()\n", + "ex.outputs(0).toArray" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Further Readings\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "[Symbol API](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.Symbol)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Scala 2.11", + "language": "scala211", + "name": "scala211" + }, + "language_info": { + "codemirror_mode": "text/x-scala", + "file_extension": ".scala", + "mimetype": "text/x-scala", + "name": "scala211", + "pygments_lexer": "scala", + "version": "2.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/scala/tutorials/mnist_scala.ipynb b/scala/tutorials/mnist_scala.ipynb index 6aa010742..82f212215 100644 --- a/scala/tutorials/mnist_scala.ipynb +++ b/scala/tutorials/mnist_scala.ipynb @@ -191,7 +191,9 @@ "\n", "We download the MNIST data using the [get_mnist_data script](https://github.com/dmlc/mxnet/blob/master/scala-package/core/scripts/get_mnist_data.sh). Now we can create data iterators from our MNIST data. A data iterator returns a batch of data examples each time for the network to process. MXNet provide a suite of basic DataIters for parsing different data format. \n", "\n", - "Here we use MNISTIter, which wraps around a numpy array and each time slice a chunk from it along the first dimension. Load the training and validation data using DataIterators as follows:\n", + "Here we use MNISTIter, which wraps around a numpy array and each time slice a chunk from it along the first dimension. \n", + "Change path of input files according to your system.\n", + "Load the training and validation data using DataIterators as follows:\n", "\n" ] }, @@ -216,8 +218,8 @@ "source": [ "// load MNIST dataset\n", "val trainDataIter = IO.MNISTIter(Map(\n", - " \"image\" -> \"/Users/roshanin/mxnet/scala-package/core/data/train-images-idx3-ubyte\",\n", - " \"label\" -> \"/Users/roshanin/mxnet/scala-package/core/data/train-labels-idx1-ubyte\",\n", + " \"image\" -> \"data/train-images-idx3-ubyte\",\n", + " \"label\" -> \"data/train-labels-idx1-ubyte\",\n", " \"data_shape\" -> \"(1, 28, 28)\",\n", " \"label_name\" -> \"softmax_label\",\n", " \"batch_size\" -> \"50\",\n", @@ -227,8 +229,8 @@ " \"seed\" -> \"10\"))\n", "\n", "val valDataIter = IO.MNISTIter(Map(\n", - " \"image\" -> \"/Users/roshanin/mxnet/scala-package/core/data/t10k-images-idx3-ubyte\",\n", - " \"label\" -> \"/Users/roshanin/mxnet/scala-package/core/data/t10k-labels-idx1-ubyte\",\n", + " \"image\" -> \"data/t10k-images-idx3-ubyte\",\n", + " \"label\" -> \"data/t10k-labels-idx1-ubyte\",\n", " \"data_shape\" -> \"(1, 28, 28)\",\n", " \"label_name\" -> \"softmax_label\",\n", " \"batch_size\" -> \"50\",\n", From db2cf1d133471efe31493679a5e0137b58cb950a Mon Sep 17 00:00:00 2001 From: Nagmote Date: Thu, 16 Mar 2017 13:36:14 -0700 Subject: [PATCH 04/21] optimizer notebook added --- scala/basic/optimizer_scala.ipynb | 193 ++++++++++++++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 scala/basic/optimizer_scala.ipynb diff --git a/scala/basic/optimizer_scala.ipynb b/scala/basic/optimizer_scala.ipynb new file mode 100644 index 000000000..daeb628a1 --- /dev/null +++ b/scala/basic/optimizer_scala.ipynb @@ -0,0 +1,193 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Optimizer\n", + "In gradient-base optimization algorithms, we update the parameters (or weights) using the gradients in each iteration. We call this updating function as Optimizer.\n", + "\n", + "The main method of an optimizer is update(weight, grad), which updates a NDArray weight using a NDArray gradient. But given that a multi-layer neural network often has more than one weights, we assign each weight a unique integer index. Furthermore, an optimizer may need space to store auxiliary state, such as momentum, we also allow a user-defined state for updating. In summary, an optimizer has two major methods\n", + "\n", + "- create_state(index, weight): create auxiliary state for the index-th weight.\n", + "- update(index, weight, grad, state): update the index-th weight given the gradient and auxiliary state. The state can be also updated.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Jupyter Scala kernel\n", + "Add mxnet scala jar which is created as a part of MXNet Scala package installation in classpath as follows:\n", + "\n", + "**Note**: Process to add this jar in your scala kernel classpath can differ according to the scala kernel you are using.\n", + "\n", + "We have used [jupyter-scala kernel](https://github.com/alexarchambault/jupyter-scala) for creating this notebook." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "```\n", + "classpath.addPath()\n", + "\n", + "e.g\n", + "classpath.addPath(\"mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Basic Usage\n", + "### Create and Update\n", + "MXNet has already implemented several popular optimizers in python/mxnet/optimizer.py. An convenient way to create one is by using optimizer.create(name, args...). The following codes create a standard SGD updater which does\n", + "\n", + "```scala\n", + "weight = weight - learning_rate * grad\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36mml.dmlc.mxnet._\u001b[0m\n", + "\u001b[32mimport \u001b[36mml.dmlc.mxnet.optimizer.SGD\u001b[0m\n", + "\u001b[36mopt\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32moptimizer\u001b[0m.\u001b[32mSGD\u001b[0m = ml.dmlc.mxnet.optimizer.SGD@18d0acf8" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import ml.dmlc.mxnet._\n", + "import ml.dmlc.mxnet.optimizer.SGD\n", + "//val opt = new Optimizer(\"sgd\", learningRate=0.1f)\n", + "val opt = new SGD(learningRate=0.1f)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we can use the update function.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mgrad\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@96420bdf\n", + "\u001b[36mweight\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@f4b4d3bf\n", + "\u001b[36mindex\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m0\u001b[0m\n", + "\u001b[36mres9_4\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m0.89999F\u001b[0m, \u001b[32m0.89999F\u001b[0m, \u001b[32m0.89999F\u001b[0m, \u001b[32m0.89999F\u001b[0m, \u001b[32m0.89999F\u001b[0m, \u001b[32m0.89999F\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val grad = NDArray.ones(2,3)\n", + "val weight = NDArray.ones(2,3)\n", + "val index = 0\n", + "opt.update(index, weight, grad, NDArray.empty(2,3))\n", + "weight.toArray" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When momentum is non-zero, the sgd optimizer needs extra state.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mmomOpt\u001b[0m: \u001b[32mSGD\u001b[0m = ml.dmlc.mxnet.optimizer.SGD@17af5997\n", + "\u001b[36mindex\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m0\u001b[0m\n", + "\u001b[36mgrad\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@f7a94dad\n", + "\u001b[36mweight\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@c02afa4c\n", + "\u001b[36mstate\u001b[0m: \u001b[32mAnyRef\u001b[0m = ml.dmlc.mxnet.NDArray@e31b5efa\n", + "\u001b[36mres11_6\u001b[0m: \u001b[32mAnyRef\u001b[0m = ml.dmlc.mxnet.NDArray@bf9df5e6" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val momOpt = new SGD(learningRate = 0.1f, momentum = 0.01f)\n", + "val index = 0\n", + "val grad = NDArray.ones(2,3)\n", + "val weight = NDArray.ones(2,3)\n", + "val state = momOpt.createState(index, weight)\n", + "opt.update(index, weight, grad, state)\n", + "state" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## Further Reading\n", + "[Optimizer API](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.Optimizer)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Scala 2.11", + "language": "scala211", + "name": "scala211" + }, + "language_info": { + "codemirror_mode": "text/x-scala", + "file_extension": ".scala", + "mimetype": "text/x-scala", + "name": "scala211", + "pygments_lexer": "scala", + "version": "2.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From ddabc160ad6ee0ee30ed3b43f06c89ad5cc802e7 Mon Sep 17 00:00:00 2001 From: Nagmote Date: Fri, 17 Mar 2017 15:23:43 -0700 Subject: [PATCH 05/21] optimizer scala updated --- scala/basic/optimizer_scala.ipynb | 66 +++++++++++++++++++++++-------- 1 file changed, 49 insertions(+), 17 deletions(-) diff --git a/scala/basic/optimizer_scala.ipynb b/scala/basic/optimizer_scala.ipynb index daeb628a1..3cb9cf6c3 100644 --- a/scala/basic/optimizer_scala.ipynb +++ b/scala/basic/optimizer_scala.ipynb @@ -9,7 +9,7 @@ "\n", "The main method of an optimizer is update(weight, grad), which updates a NDArray weight using a NDArray gradient. But given that a multi-layer neural network often has more than one weights, we assign each weight a unique integer index. Furthermore, an optimizer may need space to store auxiliary state, such as momentum, we also allow a user-defined state for updating. In summary, an optimizer has two major methods\n", "\n", - "- create_state(index, weight): create auxiliary state for the index-th weight.\n", + "- createState(index, weight): create auxiliary state for the index-th weight.\n", "- update(index, weight, grad, state): update the index-th weight given the gradient and auxiliary state. The state can be also updated.\n" ] }, @@ -45,13 +45,20 @@ "source": [ "## Basic Usage\n", "### Create and Update\n", - "MXNet has already implemented several popular optimizers in python/mxnet/optimizer.py. An convenient way to create one is by using optimizer.create(name, args...). The following codes create a standard SGD updater which does\n", + "MXNet has already implemented several popular optimizers in [optimizer.scala](https://github.com/dmlc/mxnet/blob/master/scala-package/core/src/main/scala/ml/dmlc/mxnet/Optimizer.scala). An convenient way to create one is by using new SGD(args). The following codes create a standard SGD updater which does\n", "\n", "```scala\n", "weight = weight - learning_rate * grad\n", "```" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Import the optimizer you want to use as follows:" + ] + }, { "cell_type": "code", "execution_count": 2, @@ -64,7 +71,7 @@ "text/plain": [ "\u001b[32mimport \u001b[36mml.dmlc.mxnet._\u001b[0m\n", "\u001b[32mimport \u001b[36mml.dmlc.mxnet.optimizer.SGD\u001b[0m\n", - "\u001b[36mopt\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32moptimizer\u001b[0m.\u001b[32mSGD\u001b[0m = ml.dmlc.mxnet.optimizer.SGD@18d0acf8" + "\u001b[36mopt\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32moptimizer\u001b[0m.\u001b[32mSGD\u001b[0m = ml.dmlc.mxnet.optimizer.SGD@4b5a5245" ] }, "metadata": {}, @@ -74,7 +81,6 @@ "source": [ "import ml.dmlc.mxnet._\n", "import ml.dmlc.mxnet.optimizer.SGD\n", - "//val opt = new Optimizer(\"sgd\", learningRate=0.1f)\n", "val opt = new SGD(learningRate=0.1f)" ] }, @@ -87,18 +93,27 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "log4j:WARN No appenders could be found for logger (MXNetJVM).\n", + "log4j:WARN Please initialize the log4j system properly.\n", + "log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.\n" + ] + }, { "data": { "text/plain": [ - "\u001b[36mgrad\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@96420bdf\n", - "\u001b[36mweight\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@f4b4d3bf\n", + "\u001b[36mgrad\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@a5d8d68a\n", + "\u001b[36mweight\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@ffb131d2\n", "\u001b[36mindex\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m0\u001b[0m\n", - "\u001b[36mres9_4\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m0.89999F\u001b[0m, \u001b[32m0.89999F\u001b[0m, \u001b[32m0.89999F\u001b[0m, \u001b[32m0.89999F\u001b[0m, \u001b[32m0.89999F\u001b[0m, \u001b[32m0.89999F\u001b[0m)" + "\u001b[36mres2_4\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m0.89999F\u001b[0m, \u001b[32m0.89999F\u001b[0m, \u001b[32m0.89999F\u001b[0m, \u001b[32m0.89999F\u001b[0m, \u001b[32m0.89999F\u001b[0m, \u001b[32m0.89999F\u001b[0m)" ] }, "metadata": {}, @@ -117,12 +132,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "When momentum is non-zero, the sgd optimizer needs extra state.\n" + "When momentum is non-zero, the sgd optimizer needs extra state. State is of type AnyRef. So, we cast the type to NDArray and then print the value of state.\n" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 4, "metadata": { "collapsed": false }, @@ -130,12 +145,12 @@ { "data": { "text/plain": [ - "\u001b[36mmomOpt\u001b[0m: \u001b[32mSGD\u001b[0m = ml.dmlc.mxnet.optimizer.SGD@17af5997\n", + "\u001b[36mmomOpt\u001b[0m: \u001b[32mSGD\u001b[0m = ml.dmlc.mxnet.optimizer.SGD@143d6181\n", "\u001b[36mindex\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m0\u001b[0m\n", - "\u001b[36mgrad\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@f7a94dad\n", - "\u001b[36mweight\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@c02afa4c\n", - "\u001b[36mstate\u001b[0m: \u001b[32mAnyRef\u001b[0m = ml.dmlc.mxnet.NDArray@e31b5efa\n", - "\u001b[36mres11_6\u001b[0m: \u001b[32mAnyRef\u001b[0m = ml.dmlc.mxnet.NDArray@bf9df5e6" + "\u001b[36mgrad\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@e409d01c\n", + "\u001b[36mweight\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@ac5011ac\n", + "\u001b[36mstate\u001b[0m: \u001b[32mAnyRef\u001b[0m = ml.dmlc.mxnet.NDArray@fbcb7abb\n", + "\u001b[36mres3_6\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m-0.10001F\u001b[0m, \u001b[32m-0.10001F\u001b[0m, \u001b[32m-0.10001F\u001b[0m, \u001b[32m-0.10001F\u001b[0m, \u001b[32m-0.10001F\u001b[0m, \u001b[32m-0.10001F\u001b[0m)" ] }, "metadata": {}, @@ -149,7 +164,7 @@ "val weight = NDArray.ones(2,3)\n", "val state = momOpt.createState(index, weight)\n", "opt.update(index, weight, grad, state)\n", - "state" + "state.asInstanceOf[NDArray].toArray" ] }, { @@ -157,9 +172,26 @@ "metadata": { "collapsed": true }, + "source": [ + "## Types of Optimizers supported\n", + "- [AdaDelta](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.optimizer.AdaDelta)\n", + "- [AdaGrad](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.optimizer.AdaGrad)\n", + "- [Adam](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.optimizer.Adam)\n", + "- [SGD](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.optimizer.SGD)\n", + "- [SGLD](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.optimizer.SGLD)\n", + "- [DCASGD](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.optimizer.DCASGD)\n", + "- [NAG](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.optimizer.NAG)\n", + "- [RMSProp](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.optimizer.RMSProp)\n", + "\n", + "You can set these optimizers while building a FeedForward network in `.setOptimizer(new SGD(...))` method " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, "source": [ "## Further Reading\n", - "[Optimizer API](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.Optimizer)" + "[Optimizer](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.optimizer.AdaGrad)" ] }, { From bd19457914391b680fb537905ae54250480f6c64 Mon Sep 17 00:00:00 2001 From: Nagmote Date: Sat, 18 Mar 2017 22:08:33 -0700 Subject: [PATCH 06/21] mf notebook added --- scala/tutorials/matrix_factorization.ipynb | 556 +++++++++++++++++++++ 1 file changed, 556 insertions(+) create mode 100644 scala/tutorials/matrix_factorization.ipynb diff --git a/scala/tutorials/matrix_factorization.ipynb b/scala/tutorials/matrix_factorization.ipynb new file mode 100644 index 000000000..322e04f1f --- /dev/null +++ b/scala/tutorials/matrix_factorization.ipynb @@ -0,0 +1,556 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Matrix Factorization\n", + "In a recommendation system, there is a group of users and a set of items. Given that each users have rated some items in the system, we would like to predict how the users would rate the items that they have not yet rated, such that we can make recommendations to the users.\n", + "\n", + "Matrix factorization is one of the mainly used algorithm in recommendation systems. It can be used to discover latent features underlying the interactions between two different kinds of entities.\n", + "\n", + "Assume we assign a k-dimensional vector to each user and a k-dimensional vector to each item such that the dot product of these two vectors gives the user's rating of that item. We can learn the user and item vectors directly, which is essentially performing SVD on the user-item matrix. We can also try to learn the latent features using multi-layer neural networks.\n", + "\n", + "In this tutorial, we will work though the steps to implement these ideas in MXNet.\n", + "\n", + "## Prepare Data\n", + "\n", + "We use the [MovieLens](https://grouplens.org/datasets/movielens/) data here, but it can apply to other datasets as well. Each row of this dataset contains a tuple of user id, movie id, rating, and time stamp, we will only use the first three items. We first define the a batch which contains n tuples. It also provides name and shape information to MXNet about the data and label." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Jupyter Scala kernel\n", + "Add mxnet scala jar which is created as a part of MXNet Scala package installation in classpath as follows:\n", + "\n", + "**Note**: Process to add this jar in your scala kernel classpath can differ according to the scala kernel you are using.\n", + "\n", + "We have used [jupyter-scala kernel](https://github.com/alexarchambault/jupyter-scala) for creating this notebook." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "```\n", + "classpath.addPath()\n", + "\n", + "e.g\n", + "classpath.addPath(\"mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36mml.dmlc.mxnet._\u001b[0m\n", + "\u001b[32mimport \u001b[36mscala.util.Random\u001b[0m\n", + "\u001b[32mimport \u001b[36mscala.io.Source\u001b[0m\n", + "\u001b[32mimport \u001b[36mscala.collection.immutable.ListMap\u001b[0m\n", + "\u001b[32mimport \u001b[36mscala.collection.mutable.ArrayBuffer\u001b[0m\n", + "\u001b[32mimport \u001b[36mscala.collection.mutable\u001b[0m\n", + "\u001b[32mimport \u001b[36mml.dmlc.mxnet.optimizer.SGD\u001b[0m\n", + "\u001b[32mimport \u001b[36mml.dmlc.mxnet.Callback.Speedometer\u001b[0m\n", + "\u001b[32mimport \u001b[36mml.dmlc.mxnet.{DataBatch, DataIter, NDArray, Shape}\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import ml.dmlc.mxnet._\n", + "import scala.util.Random\n", + "import scala.io.Source\n", + "import scala.collection.immutable.ListMap\n", + "import scala.collection.mutable.ArrayBuffer\n", + "import scala.collection.mutable\n", + "import ml.dmlc.mxnet.optimizer.SGD\n", + "import ml.dmlc.mxnet.Callback.Speedometer\n", + "import ml.dmlc.mxnet.{DataBatch, DataIter, NDArray, Shape}\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we define a data iterator, which returns a batch of tuples each time." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "defined \u001b[32mclass \u001b[36mBDataIter\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "class BDataIter(filename: String, batch_size: Int) extends DataIter {\n", + "\n", + " val data = ArrayBuffer[(Float, Float, Float)]()\n", + " for (line <- Source.fromFile(filename).getLines()) {\n", + " val arr = line.split(\"\\t\").map(_.trim)\n", + " if(arr.length == 4){\n", + " data += ((arr(0).toFloat, arr(1).toFloat, arr(2).toFloat))\n", + " }\n", + " }\n", + "\n", + " val _provideData = ListMap(\"user\" -> Shape(batch_size), \"item\" -> Shape(batch_size))\n", + " val _provideLabel = ListMap(\"score\" -> Shape(batch_size))\n", + "\n", + " private var k = 0\n", + "\n", + " override def next(): DataBatch = {\n", + " if (!hasNext) throw new NoSuchElementException\n", + " val users = ArrayBuffer[Float]()\n", + " val items = ArrayBuffer[Float]()\n", + " val scores = ArrayBuffer[Float]()\n", + " for (i <- 0 to batch_size-1){\n", + " val j = k * batch_size + i\n", + " val (user, item, score) = data(j)\n", + " users += user\n", + " items += item\n", + " scores += score\n", + " }\n", + " k +=1\n", + " val data_all = Array(NDArray.array(users.toArray, shape = Shape(batch_size)),\n", + " NDArray.array(items.toArray, shape = Shape(batch_size)))\n", + " val label_all = Array(NDArray.array(scores.toArray, shape = Shape(batch_size)))\n", + "\n", + " val data_names = Array(\"user\", \"item\")\n", + " val label_names = Array(\"score\")\n", + "\n", + " new DataBatch(data=data_all,label=label_all, index=getIndex(), pad=getPad(), providedData=_provideData, providedLabel=_provideLabel)\n", + " }\n", + "\n", + " /**\n", + " * reset the iterator\n", + " */\n", + " override def reset(): Unit = {\n", + " scala.util.Random.shuffle(data)\n", + " k = 0\n", + " }\n", + "\n", + " override def hasNext: Boolean = {\n", + " k < (data.length / batch_size)\n", + " }\n", + "\n", + " override def batchSize: Int = batch_size\n", + "\n", + " override def getData(): IndexedSeq[NDArray] = IndexedSeq()\n", + "\n", + " override def getIndex(): IndexedSeq[Long] = IndexedSeq[Long]()\n", + "\n", + " override def getLabel(): IndexedSeq[NDArray] = IndexedSeq()\n", + "\n", + " override def getPad(): Int = 0\n", + "\n", + " override def provideData: ListMap[String, Shape] = _provideData\n", + "\n", + " override def provideLabel: ListMap[String, Shape] = _provideLabel\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we provide a function to obtain the data iterator:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "defined \u001b[32mfunction \u001b[36mgetDataIter\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def getDataIter(batchSize: Int) ={\n", + " val (dataTrain, dataTest) = (new BDataIter(\"/Users/roshanin/ml-100k/u1.base\", batchSize), new BDataIter(\"/Users/roshanin/ml-100k/u1.test\", batchSize))\n", + " (dataTrain, dataTest)\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally we calculate the numbers of users and items for later use." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "defined \u001b[32mfunction \u001b[36mmaxId\u001b[0m\n", + "\u001b[36mmu\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m944\u001b[0m\n", + "\u001b[36mmi\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m1683\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def maxId(fname: String) ={\n", + " var mu = 0\n", + " var mi =0\n", + " for (line <- Source.fromFile(fname).getLines()) {\n", + " val arr = line.split(\"\\t\").map(_.trim)\n", + " \n", + " if(arr.length == 4){\n", + " mu = mu max arr(0).toInt \n", + " mi = mi max arr(1).toInt\n", + " }\n", + " }\n", + " (mu+1, mi+1)\n", + "}\n", + "\n", + "val (mu, mi) = maxId(\"/Users/roshanin/ml-100k/u.data\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Optimization\n", + "We first implement the RMSE (root-mean-square error) measurement, which is commonly used by matrix factorization." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "defined \u001b[32mfunction \u001b[36mRMSE\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def RMSE(label: NDArray, pred: NDArray): Float={\n", + " val labelArr = label.toArray\n", + " val predArr = pred.toArray\n", + "\n", + " var ret: Float = 0.0f\n", + " var n: Float = 0.0f\n", + " \n", + " for(i <- 0 to labelArr.length-1){\n", + " ret += (labelArr(i) - predArr(i)) * (labelArr(i) - predArr(i))\n", + " n += 1.0f\n", + " }\n", + " Math.sqrt(ret/n).asInstanceOf[Float] \n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we define a general training module, which is borrowed from the image classification application." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "defined \u001b[32mfunction \u001b[36mtrain\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def train(network: Symbol, batchSize: Int, numEpoch: Int, learningRate: Float) {\n", + " var batchSize = 64\n", + " val (trainIter, testIter) = getDataIter(batchSize)\n", + " val evalMetric = new CustomMetric(RMSE, name = \"rmse\")\n", + " \n", + "// val model = FeedForward.newBuilder(network)\n", + "// .setContext(Context.cpu(0))\n", + "// .setNumEpoch(numEpoch)\n", + "// .setOptimizer(new SGD(learningRate = learningRate, momentum = 0.9f, wd = 0.0001f))\n", + "// .setTrainData(trainIter)\n", + "// .setEvalMetric(evalMetric)\n", + "// .setEvalData(testIter)\n", + "// .setBatchEndCallback(new Speedometer(batchSize, 20000/batchSize))\n", + "// .build()\n", + " \n", + " val model = new FeedForward(ctx = Context.gpu(0),\n", + " symbol = network,\n", + " numEpoch = numEpoch,\n", + " optimizer = new SGD(learningRate = learningRate, momentum = 0.9f, wd = 0.0001f))\n", + " \n", + "\n", + " model.fit(trainData = trainIter,\n", + " evalData = testIter,\n", + " evalMetric = evalMetric,\n", + " kvStore = null,\n", + " batchEndCallback = new Speedometer(batchSize, 20000/batchSize),\n", + " epochEndCallback = null) \n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Networks\n", + "Now we try various networks. We first learn the latent vectors directly." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "log4j:WARN No appenders could be found for logger (MXNetJVM).\n", + "log4j:WARN Please initialize the log4j system properly.\n", + "log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.\n" + ] + }, + { + "data": { + "text/plain": [ + "defined \u001b[32mfunction \u001b[36mplainNet\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def plainNet(k: Int) ={\n", + " // input\n", + " val user = Symbol.Variable(\"user\")\n", + " val item = Symbol.Variable(\"item\")\n", + " val score = Symbol.Variable(\"score\")\n", + " // user feature lookup\n", + " val user1 = Symbol.Embedding()()(Map(\"data\" -> user, \"input_dim\" -> mu,\n", + " \"output_dim\" -> k))\n", + " // item feature lookup\n", + " val item1 = Symbol.Embedding()()(Map(\"data\" -> item, \"input_dim\" -> mi,\n", + " \"output_dim\" -> k))\n", + " \n", + " // predict by the inner product, which is elementwise product and then sum\n", + " \n", + " val pred0 = user1 * item1\n", + " \n", + " val pred1 = Symbol.sum_axis()()(Map(\"data\" -> pred0, \"axis\" -> 1))\n", + " val pred2 = Symbol.Flatten()()(Map(\"data\" -> pred1))\n", + " // loss layer\n", + " val pred = Symbol.LinearRegressionOutput()()(Map(\"data\" -> pred2, \"label\" -> score))\n", + " \n", + " pred\n", + "}\n", + "\n", + "train(plainNet(64), batchSize=64, numEpoch=10, learningRate=.05f)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we try to use 2 layers neural network to learn the latent variables, which stack a fully connected layer above the embedding layers:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "defined \u001b[32mfunction \u001b[36mgetOneLayerMlp\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def getOneLayerMlp(hidden: Int, k: Int) ={\n", + " // input\n", + " val user = Symbol.Variable(\"user\")\n", + " val item = Symbol.Variable(\"item\")\n", + " val score = Symbol.Variable(\"score\")\n", + " // user feature lookup\n", + " val user1 = Symbol.Embedding()()(Map(\"data\" -> user, \"input_dim\" -> mu,\n", + " \"output_dim\" -> k))\n", + " val user2 = Symbol.Activation()()(Map(\"data\" -> user1, \"act_type\" -> \"relu\"))\n", + " val user3 = Symbol.FullyConnected()()(Map(\"data\" -> user2, \"num_hidden\" -> hidden))\n", + " \n", + " // item feature lookup\n", + " val item1 = Symbol.Embedding()()(Map(\"data\" -> item, \"input_dim\" -> mi,\n", + " \"output_dim\" -> k))\n", + " val item2 = Symbol.Activation()()(Map(\"data\" -> item1, \"act_type\" -> \"relu\"))\n", + " val item3 = Symbol.FullyConnected()()(Map(\"data\" -> item2, \"num_hidden\" -> hidden))\n", + " \n", + " // predict by the inner product\n", + " \n", + " val pred0 = user3 * item3\n", + " \n", + " val pred1 = Symbol.sum_axis()()(Map(\"data\" -> pred0, \"axis\" -> 1))\n", + " val pred2 = Symbol.Flatten()()(Map(\"data\" -> pred1))\n", + " \n", + " // loss layer\n", + " val pred = Symbol.LinearRegressionOutput()()(Map(\"data\" -> pred2, \"label\" -> score))\n", + " pred\n", + " \n", + "}\n", + "\n", + "train(getOneLayerMlp(64,64), batchSize=64, numEpoch=10, learningRate=.005f)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Adding dropout layers to relief the over-fitting." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "defined \u001b[32mfunction \u001b[36mgetOneLayerDropoutMlp\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def getOneLayerDropoutMlp(hidden: Int, k: Int) ={\n", + " // input\n", + " val user = Symbol.Variable(\"user\")\n", + " val item = Symbol.Variable(\"item\")\n", + " val score = Symbol.Variable(\"score\")\n", + " // user feature lookup\n", + " val user1 = Symbol.Embedding(\"user\")()(Map(\"data\" -> user, \"input_dim\" -> mu,\n", + " \"output_dim\" -> k))\n", + " val user2 = Symbol.Activation()()(Map(\"data\" -> user1, \"act_type\" -> \"relu\"))\n", + " val user3 = Symbol.FullyConnected()()(Map(\"data\" -> user2, \"num_hidden\" -> hidden))\n", + " val user4 = Symbol.Dropout()()(Map(\"data\" -> user3, \"p\" -> 0.5f))\n", + " \n", + " // item feature lookup\n", + " val item1 = Symbol.Embedding(\"item\")()(Map(\"data\" -> item, \"input_dim\" -> mi,\n", + " \"output_dim\" -> k))\n", + " val item2 = Symbol.Activation()()(Map(\"data\" -> item1, \"act_type\" -> \"relu\"))\n", + " val item3 = Symbol.FullyConnected()()(Map(\"data\" -> item2, \"num_hidden\" -> hidden))\n", + " val item4 = Symbol.Dropout()()(Map(\"data\" -> item3, \"p\" -> 0.5f))\n", + "\n", + " // predict by the inner product\n", + " \n", + " val pred0 = user4 * item4\n", + " \n", + " val pred1 = Symbol.sum_axis()()(Map(\"data\" -> pred0, \"axis\" -> 1))\n", + " val pred2 = Symbol.Flatten()()(Map(\"data\" -> pred1))\n", + " \n", + " // loss layer\n", + " val pred = Symbol.LinearRegressionOutput()()(Map(\"data\" -> pred2, \"label\" -> score))\n", + " pred\n", + " \n", + "}\n", + " \n", + "train(getOneLayerDropoutMlp(256, 512), batchSize=64, numEpoch=10, learningRate=.005f)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Scala 2.11", + "language": "scala211", + "name": "scala211" + }, + "language_info": { + "codemirror_mode": "text/x-scala", + "file_extension": ".scala", + "mimetype": "text/x-scala", + "name": "scala211", + "pygments_lexer": "scala", + "version": "2.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} From 02303dacd1067de522bf94ac6e8e98189e9173f7 Mon Sep 17 00:00:00 2001 From: Nagmote Date: Mon, 20 Mar 2017 09:59:09 -0700 Subject: [PATCH 07/21] how to run scala notebooks with jupyter scala-kernel instructions added --- README.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/README.md b/README.md index 4dfa34037..19536c4c3 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,46 @@ The python notebooks are written in [Jupyter](http://jupyter.org/). 5. Now we are able to view and edit the notebooks on the browser using the URL: http://localhost:8888/tree/mxnet-notebooks/python/outline.ipynb +### Scala + +The scala notebooks are written in [Jupyter](http://jupyter.org/) using [Jupyter-Scala Kernel V0.3.x](https://github.com/alexarchambault/jupyter-scala). + +- **Run** We can run and modify these notebooks if both [mxnet scala package](http://mxnet.io/get_started/index.html#setup-and-installation), [jupyter](http://jupyter.org/) and Jupyter-Scala Kernel are installed. There are various options for jupyter scala kernel. You can choose whichever you like. + + If you have a AWS account, here is an easier way to run the notebooks: + + 1. Launch a g2.2xlarge or p2.2xlarge instance by using AMI `ami-fe217de9` on N. Virginia (us-east-1). This AMI is built by using [this script](https://gist.github.com/mli/b64322f446b2043e3350ddcbfa5957be). Remember to open the TCP port 8888 in the security group. + + 2. Once launch is succeed, setup the following variable with proper value + + ```bash + export HOSTNAME=ec2-107-22-159-132.compute-1.amazonaws.com + export PERM=~/Downloads/my.pem + ``` + + 3. Now we should be able to ssh to the machine by + + ```bash + chmod 400 $PERM + ssh -i $PERM -L 8888:localhost:8888 ubuntu@HOSTNAME + ``` + + Here we forward the EC2 machine's 8888 port into localhost. + + 4. Install [Maven](https://gist.github.com/sebsto/19b99f1fa1f32cae5d00). Install [Scala 2.11.8](https://www.scala-lang.org/files/archive/scala-2.11.8.rpm). Go to MXNet source code, compile scala-package by command `make scalapkg`. Compiled jar file will be created in `mxnet/scala-package/assembly/{your-architecture}/target` directory. + + 5. Install [Jupyter-Scala Kernel V0.3.x](https://github.com/alexarchambault/jupyter-scala) according to the instructions given, including [coursier](https://github.com/coursier/coursier) scala library. Make sure coursier launcher is available in the PATH. To check if scala-kernel is installed, type command `jupyter kernelspec list`. + + 6. Clone this repo on the EC2 machine and run jupyter + + ```bash + git clone https://github.com/dmlc/mxnet-notebooks + jupyter notebook + ``` + + 6. Now we are able to view and edit the notebooks on the browser using the URL: http://localhost:8888/tree/mxnet-notebooks/scala/. Include mxnet-scala jar created in step-4 in classpath by command `classpath.addPath("jar-path")` in the notebook you want to run. + + ## How to develop Some general guidelines From 7dcac709c0c43d11010cba4b9383078e8dcc63d1 Mon Sep 17 00:00:00 2001 From: Nagmote Date: Mon, 20 Mar 2017 11:27:01 -0700 Subject: [PATCH 08/21] visualization added for network --- scala/basic/symbol_scala.ipynb | 308 +++++++++++++++++++++++++-------- 1 file changed, 235 insertions(+), 73 deletions(-) diff --git a/scala/basic/symbol_scala.ipynb b/scala/basic/symbol_scala.ipynb index 133ca5325..25a54ef43 100644 --- a/scala/basic/symbol_scala.ipynb +++ b/scala/basic/symbol_scala.ipynb @@ -22,7 +22,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "collapsed": false + }, "source": [ "```\n", "classpath.addPath()\n", @@ -34,9 +36,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "## Symbol Composition\n", "### Basic Operators\n", @@ -45,23 +45,32 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "log4j:WARN No appenders could be found for logger (MXNetJVM).\n", + "log4j:WARN Please initialize the log4j system properly.\n", + "log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.\n" + ] + }, { "data": { "text/plain": [ "\u001b[32mimport \u001b[36mml.dmlc.mxnet._\u001b[0m\n", "\u001b[32mimport \u001b[36mml.dmlc.mxnet.Visualization\u001b[0m\n", - "\u001b[36ma\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@3b4f8120\n", - "\u001b[36mb\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@155d0b1d\n", - "\u001b[36mc\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@552d0f9b\n", - "\u001b[36mres30_5\u001b[0m: (\u001b[32mSymbol\u001b[0m, \u001b[32mSymbol\u001b[0m, \u001b[32mSymbol\u001b[0m) = \u001b[33m\u001b[0m(\n", - " ml.dmlc.mxnet.Symbol@3b4f8120,\n", - " ml.dmlc.mxnet.Symbol@155d0b1d,\n", - " ml.dmlc.mxnet.Symbol@552d0f9b\n", + "\u001b[36ma\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@235942ea\n", + "\u001b[36mb\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@5bf2b0e\n", + "\u001b[36mc\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@be1263\n", + "\u001b[36mres1_5\u001b[0m: (\u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m, \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m, \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m) = \u001b[33m\u001b[0m(\n", + " ml.dmlc.mxnet.Symbol@235942ea,\n", + " ml.dmlc.mxnet.Symbol@5bf2b0e,\n", + " ml.dmlc.mxnet.Symbol@be1263\n", ")" ] }, @@ -88,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 3, "metadata": { "collapsed": false }, @@ -96,10 +105,10 @@ { "data": { "text/plain": [ - "\u001b[36md\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@49597791\n", - "\u001b[36me\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@5bc8712d\n", - "\u001b[36mf\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@52cf1e59\n", - "\u001b[36mg\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@4b8812b8" + "\u001b[36md\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@3011bf98\n", + "\u001b[36me\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@4b4a02e8\n", + "\u001b[36mf\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@7a427309\n", + "\u001b[36mg\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@1ebdbd6e" ] }, "metadata": {}, @@ -117,6 +126,39 @@ "val g = Symbol.broadcast_to()(f)()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Visualization:\n", + "\n", + "MXNet Scala package uses a simplified implementation of the python-Graphviz library functionality based on: https://github.com/xflr6/graphviz/tree/master/graphviz. You can find the detailed [source code here](https://github.com/dmlc/mxnet/blob/master/scala-package/core/src/main/scala/ml/dmlc/mxnet/Visualization.scala).\n", + "\n", + "To visualize the network, create a folder to save the images or pdfs and provide its path in `dot.render()` method as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mdot\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@7216eb27" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val dot = Visualization.plotNetwork(symbol = g)\n", + "dot.render(engine = \"dot\", fileName = \"g\", path = \"visualization_op\")" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -127,7 +169,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 5, "metadata": { "collapsed": false }, @@ -135,11 +177,11 @@ { "data": { "text/plain": [ - "\u001b[36mdata\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@1859cb4b\n", - "\u001b[36mfc1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@28500e7d\n", - "\u001b[36mact1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@4f9fc9e0\n", - "\u001b[36mfc2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@7ab932c7\n", - "\u001b[36mnet\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@2cecbd48" + "\u001b[36mdata\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@17c5fdf5\n", + "\u001b[36mfc1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@40d63146\n", + "\u001b[36mact1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@260d2ef\n", + "\u001b[36mfc2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@619ecc76\n", + "\u001b[36mnet\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@590cafe5" ] }, "metadata": {}, @@ -155,6 +197,35 @@ "val net = Symbol.SoftmaxOutput(name = \"out\")()(Map(\"data\" -> fc2))" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To visualize the network:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mdot\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@659aaad1" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val dot = Visualization.plotNetwork(symbol = net)\n", + "dot.render(engine = \"dot\", fileName = \"net\", path = \"visualization_op\")" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -165,7 +236,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 7, "metadata": { "collapsed": false }, @@ -174,10 +245,9 @@ "data": { "text/plain": [ "defined \u001b[32mfunction \u001b[36mConvFactory\u001b[0m\n", - "\u001b[36mprev\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@716ccc87\n", - "\u001b[36mconvComp\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@317ecb1e\n", - "\u001b[36mshape\u001b[0m: \u001b[32mShape\u001b[0m = (128,3,28,28)\n", - "\u001b[36mdot\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@65550882" + "\u001b[36mprev\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@2a8530e5\n", + "\u001b[36mconvComp\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@6e02f36c\n", + "\u001b[36mshape\u001b[0m: \u001b[32mShape\u001b[0m = (128,3,28,28)" ] }, "metadata": {}, @@ -199,11 +269,40 @@ " act\n", " }\n", "\n", - "val prev = Symbol.Variable(\"Previos Output\")\n", + "val prev = Symbol.Variable(\"PreviosOutput\")\n", "val convComp = ConvFactory(data = prev, numFilter = 64, kernel = (7, 7), stride=(2, 2))\n", - "val shape = Shape(128, 3, 28, 28)\n", + "val shape = Shape(128, 3, 28, 28)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To visualize the network:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mdot\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@25525ebb" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val dot = Visualization.plotNetwork(symbol = convComp, title = \"ConvFactory\", shape = Map(\"PreviosOutput\" -> shape), \n", + " nodeAttrs = Map(\"shape\" -> \"oval\", \"fixedsize\" -> \"false\"))\n", "\n", - "val dot = Visualization.plotNetwork(symbol = convComp, shape = Map(\"Previos Output\" -> shape))" + "dot.render(engine = \"dot\", fileName = \"ConvFactory\", path = \"visualization_op\")" ] }, { @@ -215,7 +314,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 9, "metadata": { "collapsed": false }, @@ -224,9 +323,8 @@ "data": { "text/plain": [ "defined \u001b[32mfunction \u001b[36mInceptionFactoryA\u001b[0m\n", - "\u001b[36mprev\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@2ecf885e\n", - "\u001b[36min3a\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@1fbb65dc\n", - "\u001b[36mres35_3\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@54ba2061" + "\u001b[36mprev\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@64b6ebb9\n", + "\u001b[36min3a\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@76c10a05" ] }, "metadata": {}, @@ -263,10 +361,72 @@ " }\n", "\n", "\n", - "val prev = Symbol.Variable(\"Previos Output\")\n", - "val in3a = InceptionFactoryA(prev, 64, 64, 64, 64, 96, \"avg\", 32, \"in3a\")\n", - "Visualization.plotNetwork(symbol=in3a, shape = Map(\"Previos Output\" -> shape))\n", - "\n" + "val prev = Symbol.Variable(\"PreviosOutput\")\n", + "val in3a = InceptionFactoryA(prev, 64, 64, 64, 64, 96, \"avg\", 32, \"in3a\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To visualize the network:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning: node 'bn_in3a_1x1_gamma', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_1x1_beta', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_1x1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_1x1_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_3x3_reduce_gamma', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_3x3_reduce_beta', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_3x3_reduce_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_3x3_reduce_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_3x3_gamma', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_3x3_beta', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_3x3_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_3x3_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_double_3x3_reduce_gamma', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_double_3x3_reduce_beta', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_double_3x3_reduce_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_double_3x3_reduce_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_double_3x3_0_gamma', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_double_3x3_0_beta', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_double_3x3_0_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_double_3x3_0_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_double_3x3_1_gamma', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_double_3x3_1_beta', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_double_3x3_1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_double_3x3_1_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_proj_gamma', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_proj_beta', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_proj_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'bn_in3a_proj_moving_var', graph 'plot' size too small for label\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mdot\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@185795b5" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val dot = Visualization.plotNetwork(symbol=in3a, shape = Map(\"PreviosOutput\" -> shape))\n", + "\n", + "dot.render(engine = \"dot\", fileName = \"InceptionFactoryA\", path = \"visualization_op\")" ] }, { @@ -280,7 +440,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 11, "metadata": { "collapsed": false }, @@ -288,13 +448,13 @@ { "data": { "text/plain": [ - "\u001b[36mdata\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@7518e976\n", - "\u001b[36mfc1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@7228ea81\n", - "\u001b[36mnet\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@16683a52\n", - "\u001b[36mout1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@1b82c7cd\n", - "\u001b[36mout2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@29e3de92\n", - "\u001b[36mgroup\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@1caa55cd\n", - "\u001b[36mres36_6\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mString\u001b[0m] = \u001b[33mArrayBuffer\u001b[0m(\u001b[32m\"softmax_output\"\u001b[0m, \u001b[32m\"regression_output\"\u001b[0m)" + "\u001b[36mdata\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@4b091529\n", + "\u001b[36mfc1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@68a10ba5\n", + "\u001b[36mnet\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@436e604\n", + "\u001b[36mout1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@162e1cb2\n", + "\u001b[36mout2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@150de303\n", + "\u001b[36mgroup\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@75112e24\n", + "\u001b[36mres10_6\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mString\u001b[0m] = \u001b[33mArrayBuffer\u001b[0m(\u001b[32m\"softmax_output\"\u001b[0m, \u001b[32m\"regression_output\"\u001b[0m)" ] }, "metadata": {}, @@ -358,7 +518,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 11, "metadata": { "collapsed": false }, @@ -390,7 +550,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 12, "metadata": { "collapsed": false }, @@ -405,8 +565,8 @@ { "data": { "text/plain": [ - "\u001b[36mex\u001b[0m: \u001b[32mExecutor\u001b[0m = ml.dmlc.mxnet.Executor@779671ad\n", - "\u001b[36mres44_3\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m)" + "\u001b[36mex\u001b[0m: \u001b[32mExecutor\u001b[0m = ml.dmlc.mxnet.Executor@1ba98cde\n", + "\u001b[36mres11_3\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m)" ] }, "metadata": {}, @@ -430,7 +590,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 13, "metadata": { "collapsed": false }, @@ -438,8 +598,8 @@ { "data": { "text/plain": [ - "\u001b[36mex_gpu\u001b[0m: \u001b[32mExecutor\u001b[0m = ml.dmlc.mxnet.Executor@5f745c20\n", - "\u001b[36mres49_2\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m)" + "\u001b[36mex_gpu\u001b[0m: \u001b[32mExecutor\u001b[0m = ml.dmlc.mxnet.Executor@796da522\n", + "\u001b[36mres12_2\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m)" ] }, "metadata": {}, @@ -463,7 +623,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 14, "metadata": { "collapsed": false }, @@ -486,7 +646,7 @@ " }, \n", " {\n", " \"op\": \"elemwise_add\", \n", - " \"name\": \"_plus2\", \n", + " \"name\": \"_plus0\", \n", " \"inputs\": [[0, 0, 0], [1, 0, 0]]\n", " }\n", " ], \n", @@ -500,8 +660,8 @@ { "data": { "text/plain": [ - "\u001b[36mc2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@314ed9a5\n", - "\u001b[36mres47_3\u001b[0m: \u001b[32mBoolean\u001b[0m = \u001b[32mtrue\u001b[0m" + "\u001b[36mc2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@6561a992\n", + "\u001b[36mres13_3\u001b[0m: \u001b[32mBoolean\u001b[0m = \u001b[32mtrue\u001b[0m" ] }, "metadata": {}, @@ -531,7 +691,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 15, "metadata": { "collapsed": false }, @@ -592,7 +752,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 16, "metadata": { "collapsed": false }, @@ -658,7 +818,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -674,11 +834,11 @@ { "data": { "text/plain": [ - "\u001b[36ma\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@34a6fc95\n", - "\u001b[36mb\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@527e4348\n", + "\u001b[36ma\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@36fc98c1\n", + "\u001b[36mb\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@5f318e23\n", "\u001b[36margb\u001b[0m: \u001b[32mSeq\u001b[0m[\u001b[32mDType\u001b[0m.\u001b[32mDType\u001b[0m] = \u001b[33mListBuffer\u001b[0m(Float32)\n", "\u001b[36moutb\u001b[0m: \u001b[32mSeq\u001b[0m[\u001b[32mDType\u001b[0m.\u001b[32mDType\u001b[0m] = \u001b[33mListBuffer\u001b[0m(Float16)\n", - "\u001b[36mc\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@2b5b5355\n", + "\u001b[36mc\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@1b08cc90\n", "\u001b[36margc\u001b[0m: \u001b[32mSeq\u001b[0m[\u001b[32mDType\u001b[0m.\u001b[32mDType\u001b[0m] = \u001b[33mListBuffer\u001b[0m(Int32)\n", "\u001b[36moutc\u001b[0m: \u001b[32mSeq\u001b[0m[\u001b[32mDType\u001b[0m.\u001b[32mDType\u001b[0m] = \u001b[33mListBuffer\u001b[0m(UInt8)" ] @@ -708,7 +868,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 18, "metadata": { "collapsed": false }, @@ -716,13 +876,13 @@ { "data": { "text/plain": [ - "\u001b[36ma\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@4b35c611\n", - "\u001b[36mb\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@1b93c368\n", - "\u001b[36mc\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@7ca4d377\n", - "\u001b[36md\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@326eece9\n", - "\u001b[36mdata\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@f74e6ae3\n", - "\u001b[36mex\u001b[0m: \u001b[32mExecutor\u001b[0m = ml.dmlc.mxnet.Executor@20c202f3\n", - "\u001b[36mres54_7\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m)" + "\u001b[36ma\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@cc2dcb9\n", + "\u001b[36mb\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@2cafc430\n", + "\u001b[36mc\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@42dfc2a1\n", + "\u001b[36md\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@471f7c4b\n", + "\u001b[36mdata\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@c8e1e3e4\n", + "\u001b[36mex\u001b[0m: \u001b[32mExecutor\u001b[0m = ml.dmlc.mxnet.Executor@3b2f4224\n", + "\u001b[36mres17_7\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m)" ] }, "metadata": {}, @@ -754,7 +914,9 @@ "collapsed": true }, "source": [ - "[Symbol API](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.Symbol)" + "- [NDArray API](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.NDArray)\n", + "- [Symbol API](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.Symbol)\n", + "- [Visualization API](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.Visualization$)" ] }, { From a9e5e2d9582db7c963b61170050798daaa4c731f Mon Sep 17 00:00:00 2001 From: Nagmote Date: Tue, 21 Mar 2017 09:26:52 -0700 Subject: [PATCH 09/21] how to run scala notebooks more steps added --- README.md | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 19536c4c3..cde4302b3 100644 --- a/README.md +++ b/README.md @@ -78,16 +78,35 @@ The scala notebooks are written in [Jupyter](http://jupyter.org/) using [Jupyter 4. Install [Maven](https://gist.github.com/sebsto/19b99f1fa1f32cae5d00). Install [Scala 2.11.8](https://www.scala-lang.org/files/archive/scala-2.11.8.rpm). Go to MXNet source code, compile scala-package by command `make scalapkg`. Compiled jar file will be created in `mxnet/scala-package/assembly/{your-architecture}/target` directory. - 5. Install [Jupyter-Scala Kernel V0.3.x](https://github.com/alexarchambault/jupyter-scala) according to the instructions given, including [coursier](https://github.com/coursier/coursier) scala library. Make sure coursier launcher is available in the PATH. To check if scala-kernel is installed, type command `jupyter kernelspec list`. + 5. Install [coursier](https://github.com/coursier/coursier), a Scala library to fetch dependencies from Maven / Ivy repositories as follows. - 6. Clone this repo on the EC2 machine and run jupyter + On OS X, `brew install --HEAD paulp/extras/coursier` + On Linux, + + ```bash + curl -L -o coursier https://git.io/vgvpD && chmod +x coursier && ./coursier --help + ``` + + Make sure coursier launcher is available in the PATH. + + 6. Install [Jupyter-Scala Kernel V0.3.x](https://github.com/alexarchambault/jupyter-scala) according to the instructions given below: + + ```bash + git clone https://github.com/alexarchambault/jupyter-scala.git + git checkout 0.3.x + ./jupyter-scala + ``` + + To check if scala-kernel is installed, type command `jupyter kernelspec list`. + + 7. Clone this repo on the EC2 machine and run jupyter ```bash git clone https://github.com/dmlc/mxnet-notebooks jupyter notebook ``` - 6. Now we are able to view and edit the notebooks on the browser using the URL: http://localhost:8888/tree/mxnet-notebooks/scala/. Include mxnet-scala jar created in step-4 in classpath by command `classpath.addPath("jar-path")` in the notebook you want to run. + 8. Now we are able to view and edit the notebooks on the browser using the URL: http://localhost:8888/tree/mxnet-notebooks/scala/. Choose scala211 kernel if asked. Include mxnet-scala jar created in step-4 in classpath by command `classpath.addPath("jar-path")` in the notebook you want to run. ## How to develop From 66602f10284425cacf8ee53144b9cc822a6be527 Mon Sep 17 00:00:00 2001 From: Nagmote Date: Wed, 22 Mar 2017 17:31:50 -0700 Subject: [PATCH 10/21] data iterator, image iterator notebooks added --- scala/basic/dataIterator_scala.ipynb | 1114 ++++++++++ scala/basic/image_io_scala.ipynb | 3079 ++++++++++++++++++++++++++ 2 files changed, 4193 insertions(+) create mode 100644 scala/basic/dataIterator_scala.ipynb create mode 100644 scala/basic/image_io_scala.ipynb diff --git a/scala/basic/dataIterator_scala.ipynb b/scala/basic/dataIterator_scala.ipynb new file mode 100644 index 000000000..cce485429 --- /dev/null +++ b/scala/basic/dataIterator_scala.ipynb @@ -0,0 +1,1114 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Loading Data\n", + "This tutorial we focus on how to feed the data into a training and inference program. Most training and inference modules in MXNet accepts data iterators, especially when reading large datasets from filesystems. MXNet uses an iterator to provide data to the neural network. Iterators do some preprocessing and generate batches for the neural network.\n", + "\n", + "MXNet provides basic iterators for MNIST and RecordIO images. To hide the cost of I/O, MXNet uses a prefetch strategy that enables parallelism for the learning process and data fetching. Data is automatically fetched by an independent thread. Here we discuss the API conventions and several provided iterators." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Jupyter Scala kernel\n", + "Add mxnet scala jar which is created as a part of MXNet Scala package installation in classpath as follows:\n", + "\n", + "**Note**: Process to add this jar in your scala kernel classpath can differ according to the scala kernel you are using.\n", + "\n", + "We have used [jupyter-scala kernel](https://github.com/alexarchambault/jupyter-scala) for creating this notebook." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```\n", + "classpath.addPath()\n", + "\n", + "e.g\n", + "classpath.addPath(\"mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Basic Data Iterator\n", + "\n", + "MXNet's data iterator returns a batch of data in each `next` call. We first introduce what a data batch looks like and then how to write a basic data iterator.\n", + "\n", + "### Data Batch\n", + "A data batch often contains n examples and the according labels. Here n is often called as the batch size.\n", + "The following codes defines a valid data batch is able to be read by most training/inference modules." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36mml.dmlc.mxnet._\u001b[0m\n", + "\u001b[32mimport \u001b[36mscala.collection.immutable.ListMap\u001b[0m\n", + "defined \u001b[32mclass \u001b[36mDataBatch\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import ml.dmlc.mxnet._\n", + "import scala.collection.immutable.ListMap\n", + "\n", + "class DataBatch(val data: IndexedSeq[NDArray],\n", + " val label: IndexedSeq[NDArray],\n", + " val index: IndexedSeq[Long],\n", + " val pad: Int,\n", + " // the key for the bucket that should be used for this batch,\n", + " // for bucketing io only\n", + " val bucketKey: AnyRef = null,\n", + " // use ListMap to indicate the order of data/label loading\n", + " // (must match the order of input data/label)\n", + " private val providedData: ListMap[String, Shape] = null,\n", + " private val providedLabel: ListMap[String, Shape] = null) {\n", + " /**\n", + " * Dispose its data and labels\n", + " * The object shall never be used after it is disposed.\n", + " */\n", + " def dispose(): Unit = {\n", + " if (data != null) {\n", + " data.foreach(arr => if (arr != null) arr.dispose())\n", + " }\n", + " if (label != null) {\n", + " label.foreach(arr => if (arr != null) arr.dispose())\n", + " }\n", + " }\n", + "\n", + " // The name and shape of data\n", + " def provideData: ListMap[String, Shape] = providedData\n", + "\n", + " // The name and shape of label\n", + " def provideLabel: ListMap[String, Shape] = providedLabel\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We explain what each attribute means:\n", + "- **data** is a list of NDArray, each of them has $n$ length first dimension. For example, if an example is an image with size $224 \\times 224$ and RGB channels, then the array shape should be (n, 3, 224, 244). Note that the image batch format used by MXNet is\n", + "\n", + "$$\\textrm{batch_size} \\times \\textrm{num_channel} \\times \\textrm{height} \\times \\textrm{width}$$ \n", + "\n", + "The channels are often in RGB order.\n", + "\n", + "Each array will be copied into a free variable of the Symbol later. The mapping from arrays to free variables should be given by the provide_data attribute of the iterator, which will be discussed shortly.\n", + "- **label** is also a list of NDArray. Often each NDArray is a 1-dimensional array with shape (n,). For classification, each class is represented by an integer starting from 0.\n", + "- **pad** is an integer shows how many examples are for merely used for padding, which should be ignored in the results. A nonzero padding is often used when we reach the end of the data and the total number of examples cannot be divided by the batch size.\n", + "- **providedData** is a ListMap of name and shape of the data.\n", + "- **providedLabel** is a ListMap of name and shape of the label." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### Symbol and Data Variables\n", + "Before moving the iterator, we first look at how to find which variables in a Symbol are for input data. In MXNet, an operator (mx.sym.*) has one or more input variables and output variables; some operators may have additional auxiliary variables for internal states. For an input variable of an operator, if do not assign it with an output of another operator during creating this operator, then this input variable is free. We need to assign it with external data before running.\n", + "\n", + "The following codes define a simple multilayer perceptron (MLP) and then print all free variables." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "log4j:WARN No appenders could be found for logger (MXNetJVM).\n", + "log4j:WARN Please initialize the log4j system properly.\n", + "log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mnumClasses\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m10\u001b[0m\n", + "\u001b[36mdata\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@30a65ea0\n", + "\u001b[36mfc1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@200fe851\n", + "\u001b[36mact1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@28fd3448\n", + "\u001b[36mfc2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@671608bf\n", + "\u001b[36mmlp\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@65c719a3\n", + "\u001b[36mres2_6\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mString\u001b[0m] = \u001b[33mArrayBuffer\u001b[0m(\n", + " \u001b[32m\"data\"\u001b[0m,\n", + " \u001b[32m\"fc1_weight\"\u001b[0m,\n", + " \u001b[32m\"fc1_bias\"\u001b[0m,\n", + " \u001b[32m\"fc2_weight\"\u001b[0m,\n", + " \u001b[32m\"fc2_bias\"\u001b[0m,\n", + " \u001b[32m\"softmax_label\"\u001b[0m\n", + ")\n", + "\u001b[36mres2_7\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mString\u001b[0m] = \u001b[33mArrayBuffer\u001b[0m(\u001b[32m\"softmax_output\"\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val numClasses = 10\n", + "\n", + "val data = Symbol.Variable(\"data\")\n", + "val fc1 = Symbol.FullyConnected(name = \"fc1\")()(Map(\"data\" -> data, \"num_hidden\" -> 64))\n", + "val act1 = Symbol.Activation(name = \"relu1\")()(Map(\"data\" -> fc1, \"act_type\" -> \"relu\"))\n", + "val fc2 = Symbol.FullyConnected(name = \"fc2\")()(Map(\"data\" -> act1, \"num_hidden\" -> numClasses))\n", + "val mlp = Symbol.SoftmaxOutput(name = \"softmax\")()(Map(\"data\" -> fc2))\n", + "\n", + "mlp.listArguments()\n", + "mlp.listOutputs()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As can be seen, we name a variable either by its operator's name if it is atomic (e.g. Symbol.Variable(\"data\")) or by the opname_varname convention. The varname often means what this variable is for:\n", + "\n", + "- weight : the weight parameters\n", + "- bias : the bias parameters\n", + "- output : the output\n", + "- label : input label\n", + "\n", + "On the above example, now we know that there are 4 variables for parameters, and two for input data: data for examples and softmax_label for the according labels.\n", + "\n", + "The following example define a matrix factorization object function with rank 10 for recommendation systems. It has three input variables, user for user IDs, item for item IDs, and score is the rating user gives to item." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mnumUsers\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m1000\u001b[0m\n", + "\u001b[36mnumItems\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m1000\u001b[0m\n", + "\u001b[36mk\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m10\u001b[0m\n", + "\u001b[36muser\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@50a64721\n", + "\u001b[36mitem\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@6f09fabd\n", + "\u001b[36mscore\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@6cdc9943\n", + "\u001b[36muser1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@2971e218\n", + "\u001b[36mitem1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@4b0c2758\n", + "\u001b[36mpred0\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@6bf0e096\n", + "\u001b[36mpred1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@636e7a2a\n", + "\u001b[36mpred2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@4529257d\n", + "\u001b[36mpred\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@6f35ec67" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val numUsers = 1000\n", + "val numItems = 1000\n", + "val k = 10 \n", + "\n", + "// input\n", + "val user = Symbol.Variable(\"user\")\n", + "val item = Symbol.Variable(\"item\")\n", + "val score = Symbol.Variable(\"score\")\n", + "\n", + "// user feature lookup\n", + "val user1 = Symbol.Embedding()()(Map(\"data\" -> user, \"input_dim\" -> numUsers, \"output_dim\" -> k))\n", + "\n", + "// item feature lookup\n", + "val item1 = Symbol.Embedding()()(Map(\"data\" -> item, \"input_dim\" -> numItems, \"output_dim\" -> k))\n", + "\n", + "// predict by the inner product, which is elementwise product and then sum\n", + "val pred0 = user1 * item1\n", + "val pred1 = Symbol.sum_axis()()(Map(\"data\" -> pred0, \"axis\" -> 1))\n", + "val pred2 = Symbol.Flatten()()(Map(\"data\" -> pred1))\n", + "\n", + "// loss layer\n", + "val pred = Symbol.LinearRegressionOutput()()(Map(\"data\" -> pred2, \"label\" -> score))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Data Iterators\n", + "Now we are ready to show how to create a valid MXNet data iterator. An iterator should extend DataIter class and override following methods:\n", + "\n", + "- **reset()** method to restart reading from the beginning\n", + "- **provideData()** to return a Listmap of (str, tuple) pairs, each pair stores an input data variable name and its shape. \n", + "- **provideLabel()** method to return a Listmap of (str, tuple) pairs, which provides information about input labels.\n", + "- **getData()** and **getLabel()** methods for getting data and label of current batch.\n", + "- **getPad()** for getting the number of padding examples.\n", + "- **getIndex()** for getting the index of current batch.\n", + "- **next()** method to return a data batch.\n", + "\n", + "The following codes define a simple iterator that return some random data each time" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "defined \u001b[32mfunction \u001b[36mdataGen\u001b[0m\n", + "defined \u001b[32mfunction \u001b[36mlabelGen\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + " def dataGen(dim: Array[Int]) : Array[Array[Float]] ={\n", + " val r = new scala.util.Random(100)\n", + " Array.fill(dim(0), dim(1)) { 2*r.nextFloat-1 }\n", + " }\n", + " \n", + " def labelGen(lowLimit: Int, highLimit: Int, dim: Int) : Array[Float] ={\n", + " val r = new scala.util.Random(100)\n", + " val label = for (i <- lowLimit+1 to dim) yield r.nextInt(highLimit).asInstanceOf[Float]\n", + " label.toArray\n", + " }" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36mscala.collection.mutable.ArrayBuffer\u001b[0m\n", + "\u001b[36mnumBatches\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m10\u001b[0m\n", + "defined \u001b[32mclass \u001b[36mSimpleIter\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import scala.collection.mutable.ArrayBuffer\n", + "val numBatches: Int=10\n", + "\n", + "class SimpleIter(dataNames: String, dataShapes: Shape, dataGen: Array[Array[Float]],\n", + " labelNames: String, labelShapes: Shape, labelGen: Array[Float]) extends DataIter{\n", + "\n", + " val _provideData = ListMap(dataNames -> dataShapes)\n", + " val _provideLabel = ListMap(labelNames -> labelShapes)\n", + " var curBatch = 0\n", + "\n", + " // Get next data batch from iterator\n", + " override def next(): DataBatch = {\n", + " if (!hasNext) throw new NoSuchElementException\n", + "\n", + " val data = Array(NDArray.array(dataGen.flatten.toArray, shape = dataShapes))\n", + " val label = Array(NDArray.array(labelGen, shape = labelShapes))\n", + " curBatch += 1\n", + " \n", + " new DataBatch(data=data,label=label, index=getIndex(), pad=getPad(), providedData=_provideData, providedLabel=_provideLabel)\n", + " } \n", + " \n", + " // reset the iterator \n", + " override def reset(): Unit = {\n", + " curBatch = 0\n", + " }\n", + " // Check for next batch\n", + " override def hasNext: Boolean = {\n", + " curBatch < numBatches\n", + " }\n", + " \n", + " override def batchSize: Int = numBatches\n", + " // Get data of current batch\n", + " override def getData(): IndexedSeq[NDArray] = IndexedSeq()\n", + " // Get the index of current batch\n", + " override def getIndex(): IndexedSeq[Long] = IndexedSeq[Long]()\n", + " // Get label of current batch\n", + " override def getLabel(): IndexedSeq[NDArray] = IndexedSeq()\n", + " // Get the number of padding examples in current batch\n", + " override def getPad(): Int = 0\n", + " // The name and shape of data provided by this iterator\n", + " override def provideData: ListMap[String, Shape] = _provideData\n", + " // The name and shape of label provided by this iterator\n", + " override def provideLabel: ListMap[String, Shape] = _provideLabel\n", + "\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can feed the data iterator into a training problem. Here we used the Module class, more details about this class is discussed in module.ipynb." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36mml.dmlc.mxnet.module.{FitParams, Module}\u001b[0m\n", + "\u001b[36mn\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m32\u001b[0m\n", + "\u001b[36mdata\u001b[0m: \u001b[32mSimpleIter\u001b[0m = non-empty iterator\n", + "\u001b[36mmod\u001b[0m: \u001b[32mmodule\u001b[0m.\u001b[32mModule\u001b[0m = ml.dmlc.mxnet.module.Module@4f52fe71" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import ml.dmlc.mxnet.module.{FitParams, Module}\n", + "\n", + "val n = 32\n", + "val data = new SimpleIter(\"data\", Shape(n,100), \n", + " dataGen(Array(n,100)),\n", + " \"softmax_label\", Shape(n), \n", + " labelGen(0, numClasses, n))\n", + "\n", + "val mod = new Module(mlp)\n", + "mod.fit(data, numEpoch=5)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "While for Symbol pred, we need to provide three inputs, two for examples and one for label. Refer to the MatrixFactorization tutorial to know more.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## More Iterators\n", + "MXNet provides multiple efficient data iterators as follows:\n", + "\n", + "### MNISTIter\n", + "MNISTIter is the easy way to iterate on the MNIST dataset. \n", + "\n", + "**Parameters:**\n", + "\n", + "- \"image\" and \"label\" - Dataset Param: MNist Image and Label datapath\n", + "- \"batch_size\" (int, optional, default='128') – Batch Param: Batch Size.\n", + "- \"shuffle\" - Augmentation Param: Whether to shuffle data.\n", + "- \"flat\" (boolean, optional, default=False) – Augmentation Param: Whether to flat the data into 1D.\n", + "- \"seed\" (int, optional, default='0') – Augmentation Param: Random Seed.\n", + "- \"silent\" (boolean, optional, default=False) – Auxiliary Param: Whether to print out data info.\n", + "- \"num_parts (int, optional, default='1') – partition the data into multiple parts\n", + "- \"part_index\" (int, optional, default='0') – the index of the part will read\n", + "- \"prefetch_buffer\" (long (non-negative), optional, default=4) – Maximal Number of batches to prefetch\n", + "- \"dtype\" ({None, 'float16', 'float32', 'float64', 'int32', 'uint8'},optional, default='None') – Output data type. None means no change" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mparams\u001b[0m: \u001b[32mMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mString\u001b[0m] = \u001b[33mMap\u001b[0m(\n", + " \u001b[32m\"silent\"\u001b[0m -> \u001b[32m\"0\"\u001b[0m,\n", + " \u001b[32m\"seed\"\u001b[0m -> \u001b[32m\"10\"\u001b[0m,\n", + " \u001b[32m\"flat\"\u001b[0m -> \u001b[32m\"1\"\u001b[0m,\n", + " \u001b[32m\"image\"\u001b[0m -> \u001b[32m\"data/train-images-idx3-ubyte\"\u001b[0m,\n", + " \u001b[32m\"label\"\u001b[0m -> \u001b[32m\"data/train-labels-idx1-ubyte\"\u001b[0m,\n", + " \u001b[32m\"shuffle\"\u001b[0m -> \u001b[32m\"1\"\u001b[0m,\n", + " \u001b[32m\"data_shape\"\u001b[0m -> \u001b[32m\"(784,)\"\u001b[0m,\n", + " \u001b[32m\"batch_size\"\u001b[0m -> \u001b[32m\"100\"\u001b[0m\n", + ")\n", + "\u001b[36mmnistPack\u001b[0m: \u001b[32mDataPack\u001b[0m = \u001b[33mMXDataPack\u001b[0m(\n", + " ml.dmlc.mxnet.DataBatch@1c83152e,\n", + " ml.dmlc.mxnet.DataBatch@18820148,\n", + " ml.dmlc.mxnet.DataBatch@1410a0a5,\n", + " ml.dmlc.mxnet.DataBatch@45dfe674,\n", + " ml.dmlc.mxnet.DataBatch@4171b184,\n", + " ml.dmlc.mxnet.DataBatch@497170a3,\n", + " ml.dmlc.mxnet.DataBatch@58f5f4a0,\n", + " ml.dmlc.mxnet.DataBatch@6223558c,\n", + " ml.dmlc.mxnet.DataBatch@2e1235dd,\n", + " ml.dmlc.mxnet.DataBatch@6ca4bcd4,\n", + " ml.dmlc.mxnet.DataBatch@1b030514,\n", + " ml.dmlc.mxnet.DataBatch@63f4bccd,\n", + " ml.dmlc.mxnet.DataBatch@5c77d1b3,\n", + " ml.dmlc.mxnet.DataBatch@15fc84f5,\n", + " ml.dmlc.mxnet.DataBatch@16d418fb,\n", + " ml.dmlc.mxnet.DataBatch@5000cc38,\n", + " ml.dmlc.mxnet.DataBatch@321875c2,\n", + " ml.dmlc.mxnet.DataBatch@43b29458,\n", + " ml.dmlc.mxnet.DataBatch@75975f15,\n", + "\u001b[33m...\u001b[0m\n", + "\u001b[36mnBatch\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m600\u001b[0m\n", + "\u001b[36mbatchCount\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m600\u001b[0m\n", + "\u001b[36mmnistIter\u001b[0m: \u001b[32mDataIter\u001b[0m = non-empty iterator\n", + "\u001b[36mprovideData\u001b[0m: \u001b[32mListMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mShape\u001b[0m] = \u001b[33mMap\u001b[0m(\u001b[32m\"data\"\u001b[0m -> (100,784))\n", + "\u001b[36mprovideLabel\u001b[0m: \u001b[32mListMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mShape\u001b[0m] = \u001b[33mMap\u001b[0m(\u001b[32m\"label\"\u001b[0m -> (100))\n", + "\u001b[36mres8_12\u001b[0m: \u001b[32mDataBatch\u001b[0m = ml.dmlc.mxnet.DataBatch@4e9f4579\n", + "\u001b[36mlabel0\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\n", + " \u001b[32m3.0F\u001b[0m,\n", + " \u001b[32m4.0F\u001b[0m,\n", + " \u001b[32m9.0F\u001b[0m,\n", + " \u001b[32m8.0F\u001b[0m,\n", + " \u001b[32m2.0F\u001b[0m,\n", + " \u001b[32m8.0F\u001b[0m,\n", + " \u001b[32m1.0F\u001b[0m,\n", + " \u001b[32m9.0F\u001b[0m,\n", + " \u001b[32m8.0F\u001b[0m,\n", + " \u001b[32m4.0F\u001b[0m,\n", + " \u001b[32m6.0F\u001b[0m,\n", + " \u001b[32m8.0F\u001b[0m,\n", + " \u001b[32m3.0F\u001b[0m,\n", + " \u001b[32m6.0F\u001b[0m,\n", + " \u001b[32m3.0F\u001b[0m,\n", + " \u001b[32m1.0F\u001b[0m,\n", + " \u001b[32m9.0F\u001b[0m,\n", + " \u001b[32m8.0F\u001b[0m,\n", + " \u001b[32m3.0F\u001b[0m,\n", + "\u001b[33m...\u001b[0m\n", + "\u001b[36mdata0\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + "\u001b[33m...\u001b[0m\n", + "\u001b[36mres8_15\u001b[0m: \u001b[32mDataBatch\u001b[0m = ml.dmlc.mxnet.DataBatch@55a394de\n", + "\u001b[36mres8_16\u001b[0m: \u001b[32mDataBatch\u001b[0m = ml.dmlc.mxnet.DataBatch@6123a79e\n", + "\u001b[36mres8_17\u001b[0m: \u001b[32mDataBatch\u001b[0m = ml.dmlc.mxnet.DataBatch@639de812\n", + "\u001b[36mres8_19\u001b[0m: \u001b[32mDataBatch\u001b[0m = ml.dmlc.mxnet.DataBatch@b0fdedf\n", + "\u001b[36mlabel1\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\n", + " \u001b[32m3.0F\u001b[0m,\n", + " \u001b[32m4.0F\u001b[0m,\n", + " \u001b[32m9.0F\u001b[0m,\n", + " \u001b[32m8.0F\u001b[0m,\n", + " \u001b[32m2.0F\u001b[0m,\n", + " \u001b[32m8.0F\u001b[0m,\n", + " \u001b[32m1.0F\u001b[0m,\n", + " \u001b[32m9.0F\u001b[0m,\n", + " \u001b[32m8.0F\u001b[0m,\n", + " \u001b[32m4.0F\u001b[0m,\n", + " \u001b[32m6.0F\u001b[0m,\n", + " \u001b[32m8.0F\u001b[0m,\n", + " \u001b[32m3.0F\u001b[0m,\n", + " \u001b[32m6.0F\u001b[0m,\n", + " \u001b[32m3.0F\u001b[0m,\n", + " \u001b[32m1.0F\u001b[0m,\n", + " \u001b[32m9.0F\u001b[0m,\n", + " \u001b[32m8.0F\u001b[0m,\n", + " \u001b[32m3.0F\u001b[0m,\n", + "\u001b[33m...\u001b[0m\n", + "\u001b[36mdata1\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + "\u001b[33m...\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val params = Map(\n", + " \"image\" -> \"data/train-images-idx3-ubyte\",\n", + " \"label\" -> \"data/train-labels-idx1-ubyte\",\n", + " \"data_shape\" -> \"(784,)\",\n", + " \"batch_size\" -> \"100\",\n", + " \"shuffle\" -> \"1\",\n", + " \"flat\" -> \"1\",\n", + " \"silent\" -> \"0\",\n", + " \"seed\" -> \"10\"\n", + " )\n", + "\n", + " val mnistPack = IO.MNISTPack(params)\n", + "\n", + " val nBatch = 600\n", + " var batchCount = 0\n", + " for(batch <- mnistPack) {\n", + " batchCount += 1\n", + " }\n", + "\n", + " // create DataIter\n", + " val mnistIter = mnistPack.iterator\n", + " // get the name and shape of data provided by this iterator \n", + " val provideData = mnistIter.provideData\n", + " // get the name and shape of label provided by this iterator \n", + " val provideLabel = mnistIter.provideLabel\n", + " \n", + " // reset the iterator\n", + " mnistIter.reset()\n", + " batchCount = 0\n", + " // check if iterator has next batch of data\n", + " while (mnistIter.hasNext) {\n", + " mnistIter.next()\n", + " batchCount += 1\n", + " }\n", + " \n", + " mnistIter.reset()\n", + " // get next data batch from iterator\n", + " mnistIter.next()\n", + " // get label of current batch\n", + " val label0 = mnistIter.getLabel().head.toArray\n", + " // get data of current batch\n", + " val data0 = mnistIter.getData().head.toArray\n", + " mnistIter.next()\n", + " mnistIter.next()\n", + " mnistIter.next()\n", + " mnistIter.reset()\n", + " mnistIter.next()\n", + " val label1 = mnistIter.getLabel().head.toArray\n", + " val data1 = mnistIter.getData().head.toArray\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ImageRecordIter\n", + "ImageRecordIter is for iterating on image RecordIO files\n", + "It read images batches from RecordIO files with a rich of data augmentation options.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mparams\u001b[0m: \u001b[32mMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mString\u001b[0m] = \u001b[33mMap\u001b[0m(\n", + " \u001b[32m\"prefetch_buffer\"\u001b[0m -> \u001b[32m\"1\"\u001b[0m,\n", + " \u001b[32m\"path_imgrec\"\u001b[0m -> \u001b[32m\"data/cifar/train.rec\"\u001b[0m,\n", + " \u001b[32m\"mean_img\"\u001b[0m -> \u001b[32m\"data/cifar/cifar10_mean.bin\"\u001b[0m,\n", + " \u001b[32m\"and_mirror\"\u001b[0m -> \u001b[32m\"False\"\u001b[0m,\n", + " \u001b[32m\"shuffle\"\u001b[0m -> \u001b[32m\"False\"\u001b[0m,\n", + " \u001b[32m\"preprocess_threads\"\u001b[0m -> \u001b[32m\"4\"\u001b[0m,\n", + " \u001b[32m\"rand_crop\"\u001b[0m -> \u001b[32m\"False\"\u001b[0m,\n", + " \u001b[32m\"data_shape\"\u001b[0m -> \u001b[32m\"(3,28,28)\"\u001b[0m,\n", + " \u001b[32m\"batch_size\"\u001b[0m -> \u001b[32m\"100\"\u001b[0m\n", + ")\n", + "\u001b[36mimgRecIter\u001b[0m: \u001b[32mDataIter\u001b[0m = non-empty iterator\n", + "\u001b[36mnBatch\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m500\u001b[0m\n", + "\u001b[36mbatchCount\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m500\u001b[0m\n", + "\u001b[36mprovideData\u001b[0m: \u001b[32mListMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mShape\u001b[0m] = \u001b[33mMap\u001b[0m(\u001b[32m\"data\"\u001b[0m -> (100,3,28,28))\n", + "\u001b[36mprovideLabel\u001b[0m: \u001b[32mListMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mShape\u001b[0m] = \u001b[33mMap\u001b[0m(\u001b[32m\"label\"\u001b[0m -> (100))\n", + "\u001b[36mres9_9\u001b[0m: \u001b[32mDataBatch\u001b[0m = ml.dmlc.mxnet.DataBatch@5233832d\n", + "\u001b[36mlabel0\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\n", + " \u001b[32m2.0F\u001b[0m,\n", + " \u001b[32m3.0F\u001b[0m,\n", + " \u001b[32m7.0F\u001b[0m,\n", + " \u001b[32m6.0F\u001b[0m,\n", + " \u001b[32m2.0F\u001b[0m,\n", + " \u001b[32m1.0F\u001b[0m,\n", + " \u001b[32m7.0F\u001b[0m,\n", + " \u001b[32m9.0F\u001b[0m,\n", + " \u001b[32m6.0F\u001b[0m,\n", + " \u001b[32m2.0F\u001b[0m,\n", + " \u001b[32m2.0F\u001b[0m,\n", + " \u001b[32m5.0F\u001b[0m,\n", + " \u001b[32m4.0F\u001b[0m,\n", + " \u001b[32m5.0F\u001b[0m,\n", + " \u001b[32m4.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m1.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + "\u001b[33m...\u001b[0m\n", + "\u001b[36mdata0\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\n", + " \u001b[32m11.52652F\u001b[0m,\n", + " \u001b[32m10.147156F\u001b[0m,\n", + " \u001b[32m8.638443F\u001b[0m,\n", + " \u001b[32m7.039444F\u001b[0m,\n", + " \u001b[32m6.5186005F\u001b[0m,\n", + " \u001b[32m5.9982452F\u001b[0m,\n", + " \u001b[32m6.3482666F\u001b[0m,\n", + " \u001b[32m6.867447F\u001b[0m,\n", + " \u001b[32m6.450226F\u001b[0m,\n", + " \u001b[32m6.224579F\u001b[0m,\n", + " \u001b[32m5.1456604F\u001b[0m,\n", + " \u001b[32m5.121048F\u001b[0m,\n", + " \u001b[32m6.208969F\u001b[0m,\n", + " \u001b[32m7.3796997F\u001b[0m,\n", + " \u001b[32m7.333359F\u001b[0m,\n", + " \u001b[32m7.2532196F\u001b[0m,\n", + " \u001b[32m6.3181F\u001b[0m,\n", + " \u001b[32m5.5006866F\u001b[0m,\n", + " \u001b[32m6.7429657F\u001b[0m,\n", + "\u001b[33m...\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val params = Map(\n", + " \"path_imgrec\" -> \"data/cifar/train.rec\",\n", + " \"mean_img\" -> \"data/cifar/cifar10_mean.bin\",\n", + " \"rand_crop\" -> \"False\",\n", + " \"rand_mirror\" -> \"False\",\n", + " \"shuffle\" -> \"False\",\n", + " \"data_shape\" -> \"(3,28,28)\",\n", + " \"batch_size\" -> \"100\",\n", + " \"preprocess_threads\" -> \"4\",\n", + " \"prefetch_buffer\" -> \"1\"\n", + " )\n", + " val imgRecIter = IO.ImageRecordIter(params)\n", + " val nBatch = 500\n", + " var batchCount = 0\n", + " // test provideData\n", + " val provideData = imgRecIter.provideData\n", + " val provideLabel = imgRecIter.provideLabel\n", + " \n", + " // Reset the iterator\n", + " imgRecIter.reset()\n", + " while (imgRecIter.hasNext) {\n", + " imgRecIter.next()\n", + " batchCount += 1\n", + " }\n", + "\n", + " imgRecIter.reset()\n", + " // Get next batch of iterator\n", + " imgRecIter.next()\n", + " // Get label of current batch\n", + " val label0 = imgRecIter.getLabel().head.toArray\n", + " // Get data of current batch\n", + " val data0 = imgRecIter.getData().head.toArray\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ResizeIter\n", + "Resize a DataIter to given number of batches per epoch. May produce incomplete batch in the middle of an epoch due to padding from internal iterator.\n", + "\n", + "It takes input arguments **dataIter**(Internal data iterator), **reSize**(number of batches per epoch to resize to) and **resetInternal**(whether to reset internal iterator on ResizeIter.reset) and returns resizeIterator.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36mml.dmlc.mxnet.io.{NDArrayIter, ResizeIter, PrefetchingIter}\u001b[0m\n", + "\u001b[36mparams\u001b[0m: \u001b[32mMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mString\u001b[0m] = \u001b[33mMap\u001b[0m(\n", + " \u001b[32m\"silent\"\u001b[0m -> \u001b[32m\"0\"\u001b[0m,\n", + " \u001b[32m\"seed\"\u001b[0m -> \u001b[32m\"10\"\u001b[0m,\n", + " \u001b[32m\"flat\"\u001b[0m -> \u001b[32m\"1\"\u001b[0m,\n", + " \u001b[32m\"image\"\u001b[0m -> \u001b[32m\"data/train-images-idx3-ubyte\"\u001b[0m,\n", + " \u001b[32m\"label\"\u001b[0m -> \u001b[32m\"data/train-labels-idx1-ubyte\"\u001b[0m,\n", + " \u001b[32m\"shuffle\"\u001b[0m -> \u001b[32m\"1\"\u001b[0m,\n", + " \u001b[32m\"data_shape\"\u001b[0m -> \u001b[32m\"(784,)\"\u001b[0m,\n", + " \u001b[32m\"batch_size\"\u001b[0m -> \u001b[32m\"100\"\u001b[0m\n", + ")\n", + "\u001b[36mmnistIter\u001b[0m: \u001b[32mDataIter\u001b[0m = non-empty iterator\n", + "\u001b[36mnBatch\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m400\u001b[0m\n", + "\u001b[36mbatchCount\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m400\u001b[0m\n", + "\u001b[36mresizeIter\u001b[0m: \u001b[32mio\u001b[0m.\u001b[32mResizeIter\u001b[0m = empty iterator" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import ml.dmlc.mxnet.io.{NDArrayIter, ResizeIter, PrefetchingIter}\n", + "\n", + "val params = Map(\n", + " \"image\" -> \"data/train-images-idx3-ubyte\",\n", + " \"label\" -> \"data/train-labels-idx1-ubyte\",\n", + " \"data_shape\" -> \"(784,)\",\n", + " \"batch_size\" -> \"100\",\n", + " \"shuffle\" -> \"1\",\n", + " \"flat\" -> \"1\",\n", + " \"silent\" -> \"0\",\n", + " \"seed\" -> \"10\"\n", + " )\n", + "\n", + " val mnistIter = IO.MNISTIter(params)\n", + " val nBatch = 400\n", + " var batchCount = 0\n", + "\n", + " // Resize a Mnist data iterator\n", + " val resizeIter = new ResizeIter(mnistIter, nBatch, false)\n", + "\n", + " while(resizeIter.hasNext) {\n", + " resizeIter.next()\n", + " batchCount += 1\n", + " }\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### PrefetchIter\n", + "\n", + "Performs pre-fetch for other data iterators. Takes one or more DataIters and combine them with prefetching.\n", + "\n", + "This iterator will create another thread to perform next() and then store the data in memory. It potentially accelerates the data read, at the cost of more memory usage." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mparams\u001b[0m: \u001b[32mMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mString\u001b[0m] = \u001b[33mMap\u001b[0m(\n", + " \u001b[32m\"silent\"\u001b[0m -> \u001b[32m\"0\"\u001b[0m,\n", + " \u001b[32m\"seed\"\u001b[0m -> \u001b[32m\"10\"\u001b[0m,\n", + " \u001b[32m\"flat\"\u001b[0m -> \u001b[32m\"1\"\u001b[0m,\n", + " \u001b[32m\"image\"\u001b[0m -> \u001b[32m\"data/train-images-idx3-ubyte\"\u001b[0m,\n", + " \u001b[32m\"label\"\u001b[0m -> \u001b[32m\"data/train-labels-idx1-ubyte\"\u001b[0m,\n", + " \u001b[32m\"shuffle\"\u001b[0m -> \u001b[32m\"1\"\u001b[0m,\n", + " \u001b[32m\"data_shape\"\u001b[0m -> \u001b[32m\"(784,)\"\u001b[0m,\n", + " \u001b[32m\"batch_size\"\u001b[0m -> \u001b[32m\"100\"\u001b[0m\n", + ")\n", + "\u001b[36mmnistPack1\u001b[0m: \u001b[32mDataPack\u001b[0m = \u001b[33mMXDataPack\u001b[0m(\n", + " ml.dmlc.mxnet.DataBatch@206a0ce5,\n", + " ml.dmlc.mxnet.DataBatch@19b9b2f4,\n", + " ml.dmlc.mxnet.DataBatch@60961087,\n", + " ml.dmlc.mxnet.DataBatch@aa498fd,\n", + " ml.dmlc.mxnet.DataBatch@7ad9b068,\n", + " ml.dmlc.mxnet.DataBatch@2e2383d5,\n", + " ml.dmlc.mxnet.DataBatch@7ee1acbe,\n", + " ml.dmlc.mxnet.DataBatch@50acb0ef,\n", + " ml.dmlc.mxnet.DataBatch@67411062,\n", + " ml.dmlc.mxnet.DataBatch@55ce1a74,\n", + " ml.dmlc.mxnet.DataBatch@2639c82f,\n", + " ml.dmlc.mxnet.DataBatch@13272fcf,\n", + " ml.dmlc.mxnet.DataBatch@7c0aefc9,\n", + " ml.dmlc.mxnet.DataBatch@59325786,\n", + " ml.dmlc.mxnet.DataBatch@31a2843f,\n", + " ml.dmlc.mxnet.DataBatch@1bd18c93,\n", + " ml.dmlc.mxnet.DataBatch@300e5c87,\n", + " ml.dmlc.mxnet.DataBatch@7bcba367,\n", + " ml.dmlc.mxnet.DataBatch@5e6d435d,\n", + "\u001b[33m...\u001b[0m\n", + "\u001b[36mmnistPack2\u001b[0m: \u001b[32mDataPack\u001b[0m = \u001b[33mMXDataPack\u001b[0m(\n", + " ml.dmlc.mxnet.DataBatch@1f423ad2,\n", + " ml.dmlc.mxnet.DataBatch@3bd5463b,\n", + " ml.dmlc.mxnet.DataBatch@35e15e6d,\n", + " ml.dmlc.mxnet.DataBatch@377e824,\n", + " ml.dmlc.mxnet.DataBatch@dedd632,\n", + " ml.dmlc.mxnet.DataBatch@1c18ad2a,\n", + " ml.dmlc.mxnet.DataBatch@23b58af2,\n", + " ml.dmlc.mxnet.DataBatch@1f3f6068,\n", + " ml.dmlc.mxnet.DataBatch@7c0079fb,\n", + " ml.dmlc.mxnet.DataBatch@25a8faac,\n", + " ml.dmlc.mxnet.DataBatch@2a4516f1,\n", + " ml.dmlc.mxnet.DataBatch@4e9d1ff1,\n", + " ml.dmlc.mxnet.DataBatch@312d7878,\n", + " ml.dmlc.mxnet.DataBatch@53b2996b,\n", + " ml.dmlc.mxnet.DataBatch@51c2ef72,\n", + " ml.dmlc.mxnet.DataBatch@7706102c,\n", + " ml.dmlc.mxnet.DataBatch@2db2580c,\n", + " ml.dmlc.mxnet.DataBatch@6a8cf510,\n", + " ml.dmlc.mxnet.DataBatch@2c732e4c,\n", + "\u001b[33m...\u001b[0m\n", + "\u001b[36mnBatch\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m600\u001b[0m\n", + "\u001b[36mbatchCount\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m600\u001b[0m\n", + "\u001b[36mmnistIter1\u001b[0m: \u001b[32mDataIter\u001b[0m = non-empty iterator\n", + "\u001b[36mmnistIter2\u001b[0m: \u001b[32mDataIter\u001b[0m = non-empty iterator\n", + "\u001b[36mprefetchIter\u001b[0m: \u001b[32mPrefetchingIter\u001b[0m = non-empty iterator\n", + "\u001b[36mprovideData\u001b[0m: \u001b[32mListMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mShape\u001b[0m] = \u001b[33mMap\u001b[0m(\u001b[32m\"data1\"\u001b[0m -> (100,784), \u001b[32m\"data2\"\u001b[0m -> (100,784))\n", + "\u001b[36mprovideLabel\u001b[0m: \u001b[32mListMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mShape\u001b[0m] = \u001b[33mMap\u001b[0m(\u001b[32m\"label1\"\u001b[0m -> (100), \u001b[32m\"label2\"\u001b[0m -> (100))\n", + "\u001b[36mres11_12\u001b[0m: \u001b[32mDataBatch\u001b[0m = ml.dmlc.mxnet.DataBatch@1941f220\n", + "\u001b[36mlabel0\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\n", + " \u001b[32m7.0F\u001b[0m,\n", + " \u001b[32m3.0F\u001b[0m,\n", + " \u001b[32m5.0F\u001b[0m,\n", + " \u001b[32m2.0F\u001b[0m,\n", + " \u001b[32m3.0F\u001b[0m,\n", + " \u001b[32m7.0F\u001b[0m,\n", + " \u001b[32m1.0F\u001b[0m,\n", + " \u001b[32m7.0F\u001b[0m,\n", + " \u001b[32m9.0F\u001b[0m,\n", + " \u001b[32m5.0F\u001b[0m,\n", + " \u001b[32m6.0F\u001b[0m,\n", + " \u001b[32m4.0F\u001b[0m,\n", + " \u001b[32m3.0F\u001b[0m,\n", + " \u001b[32m7.0F\u001b[0m,\n", + " \u001b[32m5.0F\u001b[0m,\n", + " \u001b[32m8.0F\u001b[0m,\n", + " \u001b[32m5.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m3.0F\u001b[0m,\n", + "\u001b[33m...\u001b[0m\n", + "\u001b[36mdata0\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + " \u001b[32m0.0F\u001b[0m,\n", + "\u001b[33m...\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val params = Map(\n", + " \"image\" -> \"data/train-images-idx3-ubyte\",\n", + " \"label\" -> \"data/train-labels-idx1-ubyte\",\n", + " \"data_shape\" -> \"(784,)\",\n", + " \"batch_size\" -> \"100\",\n", + " \"shuffle\" -> \"1\",\n", + " \"flat\" -> \"1\",\n", + " \"silent\" -> \"0\",\n", + " \"seed\" -> \"10\"\n", + " )\n", + "\n", + " val mnistPack1 = IO.MNISTPack(params)\n", + " val mnistPack2 = IO.MNISTPack(params)\n", + "\n", + " val nBatch = 600\n", + " var batchCount = 0\n", + "\n", + " val mnistIter1 = mnistPack1.iterator\n", + " val mnistIter2 = mnistPack2.iterator\n", + "\n", + " var prefetchIter = new PrefetchingIter(\n", + " IndexedSeq(mnistIter1, mnistIter2),\n", + " IndexedSeq(Map(\"data\" -> \"data1\"), Map(\"data\" -> \"data2\")),\n", + " IndexedSeq(Map(\"label\" -> \"label1\"), Map(\"label\" -> \"label2\"))\n", + " )\n", + "\n", + " // Check for next batch\n", + " while(prefetchIter.hasNext) {\n", + " prefetchIter.next()\n", + " batchCount += 1\n", + " }\n", + "\n", + " // The name and shape of data provided by this iterator\n", + " val provideData = prefetchIter.provideData\n", + " // The name and shape of label provided by this iterator\n", + " val provideLabel = prefetchIter.provideLabel\n", + "\n", + " prefetchIter.reset()\n", + " prefetchIter.next()\n", + " val label0 = prefetchIter.getLabel().head.toArray\n", + " val data0 = prefetchIter.getData().head.toArray\n", + "\n", + " prefetchIter.dispose()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### NDArrayIter\n", + "\n", + "NDArrayIter is for iterating on NDArray. NDArray is a basic ndarray/Tensor like data structure in mxnet. \n", + "It takes following parameters:\n", + "- **data**(NDArrayIter supports single or multiple data and label)\n", + "- **label**(Same as data, but is not fed to the model during testing)\n", + "- **dataBatchSize**(Batch Size)\n", + "- **shuffle**(Whether to shuffle the data) \n", + "- **lastBatchHandle** (\"pad\", \"discard\" or \"roll_over\").- How to handle the last batch.\n", + "\n", + "This iterator will pad, discard or roll over the last batch if the size of data does not match batch_size. Roll over is intended for training and can cause problems if used for prediction." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mshape0\u001b[0m: \u001b[32mShape\u001b[0m = (1000,2,2)\n", + "\u001b[36mdata\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mNDArray\u001b[0m] = \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@bc757ea0, ml.dmlc.mxnet.NDArray@a1db81b0)\n", + "\u001b[36mshape1\u001b[0m: \u001b[32mShape\u001b[0m = (1000,1)\n", + "\u001b[36mlabel\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mNDArray\u001b[0m] = \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@fc450a2b)\n", + "\u001b[36mbatchData0\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@137c6494\n", + "\u001b[36mbatchData1\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@4ea5965d\n", + "\u001b[36mbatchLabel\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@85e2cd0f\n", + "\u001b[36mdataIter0\u001b[0m: \u001b[32mNDArrayIter\u001b[0m = empty iterator\n", + "\u001b[36mbatchCount\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m7\u001b[0m\n", + "\u001b[36mnBatch0\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m8\u001b[0m\n", + "\u001b[36mdataIter1\u001b[0m: \u001b[32mNDArrayIter\u001b[0m = empty iterator\n", + "\u001b[36mnBatch1\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m7\u001b[0m\n", + "\u001b[36mdataIter2\u001b[0m: \u001b[32mNDArrayIter\u001b[0m = empty iterator" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val shape0 = Shape(Array(1000, 2, 2))\n", + " val data = IndexedSeq(NDArray.ones(shape0), NDArray.zeros(shape0))\n", + " val shape1 = Shape(Array(1000, 1))\n", + " val label = IndexedSeq(NDArray.ones(shape1))\n", + " val batchData0 = NDArray.ones(Shape(Array(128, 2, 2)))\n", + " val batchData1 = NDArray.zeros(Shape(Array(128, 2, 2)))\n", + " val batchLabel = NDArray.ones(Shape(Array(128, 1)))\n", + "\n", + " // lastBatchHandle = pad\n", + " val dataIter0 = new NDArrayIter(data, label, 128, false, \"pad\")\n", + " var batchCount = 0\n", + " val nBatch0 = 8\n", + " while(dataIter0.hasNext) {\n", + " val tBatch = dataIter0.next()\n", + " batchCount += 1\n", + " }\n", + "\n", + " // lastBatchHandle = discard\n", + " val dataIter1 = new NDArrayIter(data, label, 128, false, \"discard\")\n", + " val nBatch1 = 7\n", + " batchCount = 0\n", + " while(dataIter1.hasNext) {\n", + " val tBatch = dataIter1.next()\n", + " batchCount += 1\n", + " }\n", + "\n", + " // empty label (for prediction)\n", + " val dataIter2 = new NDArrayIter(data = data, dataBatchSize = 128, lastBatchHandle = \"discard\")\n", + " batchCount = 0\n", + " while(dataIter2.hasNext) {\n", + " val tBatch = dataIter2.next()\n", + " batchCount += 1\n", + " }\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Implementation\n", + "Iterators can be implemented in either C++ or front-end languages such as Python. The C++ definition is at [include/mxnet/io.h](https://github.com/dmlc/mxnet/blob/master/include/mxnet/io.h), all C++ implementations are located in [src/io](https://github.com/dmlc/mxnet/tree/master/src/io). These implementations heavily rely on [dmlc-core](https://github.com/dmlc/dmlc-core), which supports reading data from various data format and filesystems.\n", + "\n", + "## Further Readings\n", + "- [Data loading API](http://mxnet.io/api/scala/io.html)\n", + "- [Design of efficient data format](http://mxnet.io/architecture/note_data_loading.html)" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Scala 2.11", + "language": "scala211", + "name": "scala211" + }, + "language_info": { + "codemirror_mode": "text/x-scala", + "file_extension": ".scala", + "mimetype": "text/x-scala", + "name": "scala211", + "pygments_lexer": "scala", + "version": "2.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/scala/basic/image_io_scala.ipynb b/scala/basic/image_io_scala.ipynb new file mode 100644 index 000000000..9efaa82e4 --- /dev/null +++ b/scala/basic/image_io_scala.ipynb @@ -0,0 +1,3079 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Image Data IO\n", + "This tutorial explains how to prepare, load and train with image data in MXNet. All IO in MXNet is handled via IO.DataIter and its subclasses, which is explained [here](https://github.com/dmlc/mxnet-notebooks/blob/master/scala/basic/data.ipynb). In this tutorial we focus on how to use pre-built data iterators as while as custom iterators to process image data.\n", + "\n", + "There are mainly three ways of loading image data in MXNet:\n", + "- [NEW] mx.img.ImageIter: implemented in python, easily customizable, can load from both .rec files and raw image files.\n", + "- [OLD] IO.ImageRecordIter: implemented in backend (C++), less customizable but can be used in all language bindings, load from .rec files\n", + "- Custom iterator by inheriting IO.DataIter\n", + "\n", + "First, we explain the record io file format used by mxnet:\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Jupyter Scala kernel\n", + "Add mxnet scala jar which is created as a part of MXNet Scala package installation in classpath as follows:\n", + "\n", + "**Note**: Process to add this jar in your scala kernel classpath can differ according to the scala kernel you are using.\n", + "\n", + "We have used [jupyter-scala kernel](https://github.com/alexarchambault/jupyter-scala) for creating this notebook." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```\n", + "classpath.addPath()\n", + "\n", + "e.g\n", + "classpath.addPath(\"mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "classpath.addPath(\"/Users/roshanin/mxnet/scala-package/assembly/osx-x86_64-cpu/target/mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## RecordIO\n", + "Record IO is the main file format used by MXNet for data IO. It supports reading and writing on various file systems including distributed file systems like Hadoop HDFS and AWS S3. First, we download the Caltech 101 dataset that contains 101 classes of objects and convert them into record io format:\n", + "\n", + "Download and unzip the Image Dataset as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mMXNET_HOME\u001b[0m: \u001b[32mString\u001b[0m = \u001b[32m\"/Users/roshanin/mxnet\"\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "// change this to your mxnet location\n", + "val MXNET_HOME = \"/Users/roshanin/mxnet\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "--2017-03-22 17:05:36-- http://www.vision.caltech.edu/Image_Datasets/Caltech101/101_ObjectCategories.tar.gz\n", + "Resolving www.vision.caltech.edu... 35.166.79.253, 52.88.12.207\n", + "Connecting to www.vision.caltech.edu|35.166.79.253|:80... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 131740031 (126M) [application/x-tar]\n", + "Saving to: ‘data/101_ObjectCategories.tar.gz’\n", + "\n", + " 0K .......... .......... .......... .......... .......... 0% 85.8K 24m58s\n", + " 50K .......... .......... .......... .......... .......... 0% 256K 16m40s\n", + " 100K .......... .......... .......... .......... .......... 0% 281K 13m39s\n", + " 150K .......... .......... .......... .......... .......... 0% 4.80M 10m21s\n", + " 200K .......... .......... .......... .......... .......... 0% 318K 9m37s\n", + " 250K .......... .......... .......... .......... .......... 0% 5.51M 8m5s\n", + " 300K .......... .......... .......... .......... .......... 0% 330K 7m51s\n", + " 350K .......... .......... .......... .......... .......... 0% 3.24M 6m57s\n", + " 400K .......... .......... .......... .......... .......... 0% 331K 6m53s\n", + " 450K .......... .......... .......... .......... .......... 0% 3.22M 6m16s\n", + " 500K .......... .......... .......... .......... .......... 0% 325K 6m17s\n", + " 550K .......... .......... .......... .......... .......... 0% 3.69M 5m48s\n", + " 600K .......... .......... .......... .......... .......... 0% 330K 5m51s\n", + " 650K .......... .......... .......... .......... .......... 0% 2.84M 5m29s\n", + " 700K .......... .......... .......... .......... .......... 0% 158K 6m1s\n", + " 750K .......... .......... .......... .......... .......... 0% 39.3M 5m39s\n", + " 800K .......... .......... .......... .......... .......... 0% 45.1K 8m5s\n", + " 850K .......... .......... .......... .......... .......... 0% 151K 8m25s\n", + " 900K .......... .......... .......... .......... .......... 0% 3.14M 8m1s\n", + " 950K .......... .......... .......... .......... .......... 0% 310K 7m57s\n", + " 1000K .......... .......... .......... .......... .......... 0% 6.97M 7m35s\n", + " 1050K .......... .......... .......... .......... .......... 0% 313K 7m33s\n", + " 1100K .......... .......... .......... .......... .......... 0% 4.78M 7m14s\n", + " 1150K .......... .......... .......... .......... .......... 0% 319K 7m12s\n", + " 1200K .......... .......... .......... .......... .......... 0% 4.41M 6m56s\n", + " 1250K .......... .......... .......... .......... .......... 1% 322K 6m55s\n", + " 1300K .......... .......... .......... .......... .......... 1% 3.93M 6m41s\n", + " 1350K .......... .......... .......... .......... .......... 1% 326K 6m40s\n", + " 1400K .......... .......... .......... .......... .......... 1% 3.82M 6m27s\n", + " 1450K .......... .......... .......... .......... .......... 1% 323K 6m27s\n", + " 1500K .......... .......... .......... .......... .......... 1% 3.58M 6m16s\n", + " 1550K .......... .......... .......... .......... .......... 1% 7.79M 6m4s\n", + " 1600K .......... .......... .......... .......... .......... 1% 308K 6m6s\n", + " 1650K .......... .......... .......... .......... .......... 1% 6.43M 5m55s\n", + " 1700K .......... .......... .......... .......... .......... 1% 329K 5m56s\n", + " 1750K .......... .......... .......... .......... .......... 1% 2.75M 5m47s\n", + " 1800K .......... .......... .......... .......... .......... 1% 325K 5m48s\n", + " 1850K .......... .......... .......... .......... .......... 1% 3.72M 5m40s\n", + " 1900K .......... .......... .......... .......... .......... 1% 321K 5m41s\n", + " 1950K .......... .......... .......... .......... .......... 1% 3.59M 5m33s\n", + " 2000K .......... .......... .......... .......... .......... 1% 311K 5m35s\n", + " 2050K .......... .......... .......... .......... .......... 1% 3.47M 5m28s\n", + " 2100K .......... .......... .......... .......... .......... 1% 335K 5m29s\n", + " 2150K .......... .......... .......... .......... .......... 1% 2.72M 5m22s\n", + " 2200K .......... .......... .......... .......... .......... 1% 330K 5m24s\n", + " 2250K .......... .......... .......... .......... .......... 1% 3.15M 5m17s\n", + " 2300K .......... .......... .......... .......... .......... 1% 326K 5m19s\n", + " 2350K .......... .......... .......... .......... .......... 1% 2.84M 5m13s\n", + " 2400K .......... .......... .......... .......... .......... 1% 5.71M 5m7s\n", + " 2450K .......... .......... .......... .......... .......... 1% 285K 5m9s\n", + " 2500K .......... .......... .......... .......... .......... 1% 148K 5m20s\n", + " 2550K .......... .......... .......... .......... .......... 2% 135M 5m13s\n", + " 2600K .......... .......... .......... .......... .......... 2% 115K 5m28s\n", + " 2650K .......... .......... .......... .......... .......... 2% 74.7K 5m53s\n", + " 2700K .......... .......... .......... .......... .......... 2% 293K 5m54s\n", + " 2750K .......... .......... .......... .......... .......... 2% 296K 5m56s\n", + " 2800K .......... .......... .......... .......... .......... 2% 316K 5m56s\n", + " 2850K .......... .......... .......... .......... .......... 2% 2.43M 5m51s\n", + " 2900K .......... .......... .......... .......... .......... 2% 295K 5m52s\n", + " 2950K .......... .......... .......... .......... .......... 2% 303K 5m53s\n", + " 3000K .......... .......... .......... .......... .......... 2% 326K 5m53s\n", + " 3050K .......... .......... .......... .......... .......... 2% 324K 5m54s\n", + " 3100K .......... .......... .......... .......... .......... 2% 1.44M 5m49s\n", + " 3150K .......... .......... .......... .......... .......... 2% 309K 5m50s\n", + " 3200K .......... .......... .......... .......... .......... 2% 339K 5m50s\n", + " 3250K .......... .......... .......... .......... .......... 2% 339K 5m50s\n", + " 3300K .......... .......... .......... .......... .......... 2% 948K 5m47s\n", + " 3350K .......... .......... .......... .......... .......... 2% 315K 5m48s\n", + " 3400K .......... .......... .......... .......... .......... 2% 379K 5m47s\n", + " 3450K .......... .......... .......... .......... .......... 2% 1.08M 5m44s\n", + " 3500K .......... .......... .......... .......... .......... 2% 315K 5m44s\n", + " 3550K .......... .......... .......... .......... .......... 2% 383K 5m44s\n", + " 3600K .......... .......... .......... .......... .......... 2% 1.04M 5m41s\n", + " 3650K .......... .......... .......... .......... .......... 2% 322K 5m41s\n", + " 3700K .......... .......... .......... .......... .......... 2% 373K 5m41s\n", + " 3750K .......... .......... .......... .......... .......... 2% 601K 5m39s\n", + " 3800K .......... .......... .......... .......... .......... 2% 316K 5m40s\n", + " 3850K .......... .......... .......... .......... .......... 3% 426K 5m39s\n", + " 3900K .......... .......... .......... .......... .......... 3% 594K 5m37s\n", + " 3950K .......... .......... .......... .......... .......... 3% 376K 5m37s\n", + " 4000K .......... .......... .......... .......... .......... 3% 423K 5m36s\n", + " 4050K .......... .......... .......... .......... .......... 3% 800K 5m34s\n", + " 4100K .......... .......... .......... .......... .......... 3% 312K 5m35s\n", + " 4150K .......... .......... .......... .......... .......... 3% 394K 5m34s\n", + " 4200K .......... .......... .......... .......... .......... 3% 440K 5m34s\n", + " 4250K .......... .......... .......... .......... .......... 3% 492K 5m32s\n", + " 4300K .......... .......... .......... .......... .......... 3% 434K 5m32s\n", + " 4350K .......... .......... .......... .......... .......... 3% 392K 5m32s\n", + " 4400K .......... .......... .......... .......... .......... 3% 796K 5m29s\n", + " 4450K .......... .......... .......... .......... .......... 3% 379K 5m29s\n", + " 4500K .......... .......... .......... .......... .......... 3% 358K 5m29s\n", + " 4550K .......... .......... .......... .......... .......... 3% 702K 5m28s\n", + " 4600K .......... .......... .......... .......... .......... 3% 385K 5m27s\n", + " 4650K .......... .......... .......... .......... .......... 3% 771K 5m25s\n", + " 4700K .......... .......... .......... .......... .......... 3% 369K 5m25s\n", + " 4750K .......... .......... .......... .......... .......... 3% 374K 5m25s\n", + " 4800K .......... .......... .......... .......... .......... 3% 763K 5m24s\n", + " 4850K .......... .......... .......... .......... .......... 3% 359K 5m24s\n", + " 4900K .......... .......... .......... .......... .......... 3% 390K 5m23s\n", + " 4950K .......... .......... .......... .......... .......... 3% 767K 5m22s\n", + " 5000K .......... .......... .......... .......... .......... 3% 406K 5m21s\n", + " 5050K .......... .......... .......... .......... .......... 3% 326K 5m22s\n", + " 5100K .......... .......... .......... .......... .......... 4% 882K 5m20s\n", + " 5150K .......... .......... .......... .......... .......... 4% 414K 5m20s\n", + " 5200K .......... .......... .......... .......... .......... 4% 362K 5m20s\n", + " 5250K .......... .......... .......... .......... .......... 4% 810K 5m18s\n", + " 5300K .......... .......... .......... .......... .......... 4% 381K 5m18s\n", + " 5350K .......... .......... .......... .......... .......... 4% 847K 5m16s\n", + " 5400K .......... .......... .......... .......... .......... 4% 394K 5m16s\n", + " 5450K .......... .......... .......... .......... .......... 4% 321K 5m16s\n", + " 5500K .......... .......... .......... .......... .......... 4% 1.04M 5m15s\n", + " 5550K .......... .......... .......... .......... .......... 4% 415K 5m14s\n", + " 5600K .......... .......... .......... .......... .......... 4% 400K 5m14s\n", + " 5650K .......... .......... .......... .......... .......... 4% 634K 5m13s\n", + " 5700K .......... .......... .......... .......... .......... 4% 393K 5m13s\n", + " 5750K .......... .......... .......... .......... .......... 4% 414K 5m12s\n", + " 5800K .......... .......... .......... .......... .......... 4% 773K 5m11s\n", + " 5850K .......... .......... .......... .......... .......... 4% 346K 5m11s\n", + " 5900K .......... .......... .......... .......... .......... 4% 1002K 5m10s\n", + " 5950K .......... .......... .......... .......... .......... 4% 417K 5m9s\n", + " 6000K .......... .......... .......... .......... .......... 4% 313K 5m10s\n", + " 6050K .......... .......... .......... .......... .......... 4% 1.07M 5m8s\n", + " 6100K .......... .......... .......... .......... .......... 4% 402K 5m8s\n", + " 6150K .......... .......... .......... .......... .......... 4% 426K 5m8s\n", + " 6200K .......... .......... .......... .......... .......... 4% 915K 5m6s\n", + " 6250K .......... .......... .......... .......... .......... 4% 402K 5m6s\n", + " 6300K .......... .......... .......... .......... .......... 4% 942K 5m5s\n", + " 6350K .......... .......... .......... .......... .......... 4% 330K 5m5s\n", + " 6400K .......... .......... .......... .......... .......... 5% 444K 5m5s\n", + " 6450K .......... .......... .......... .......... .......... 5% 868K 5m3s\n", + " 6500K .......... .......... .......... .......... .......... 5% 420K 5m3s\n", + " 6550K .......... .......... .......... .......... .......... 5% 968K 5m2s\n", + " 6600K .......... .......... .......... .......... .......... 5% 322K 5m2s\n", + " 6650K .......... .......... .......... .......... .......... 5% 1.31M 5m0s\n", + " 6700K .......... .......... .......... .......... .......... 5% 365K 5m0s\n", + " 6750K .......... .......... .......... .......... .......... 5% 1.13M 4m59s\n", + " 6800K .......... .......... .......... .......... .......... 5% 397K 4m59s\n", + " 6850K .......... .......... .......... .......... .......... 5% 503K 4m58s\n", + " 6900K .......... .......... .......... .......... .......... 5% 719K 4m57s\n", + " 6950K .......... .......... .......... .......... .......... 5% 440K 4m57s\n", + " 7000K .......... .......... .......... .......... .......... 5% 930K 4m56s\n", + " 7050K .......... .......... .......... .......... .......... 5% 325K 4m56s\n", + " 7100K .......... .......... .......... .......... .......... 5% 1.12M 4m55s\n", + " 7150K .......... .......... .......... .......... .......... 5% 401K 4m55s\n", + " 7200K .......... .......... .......... .......... .......... 5% 903K 4m53s\n", + " 7250K .......... .......... .......... .......... .......... 5% 427K 4m53s\n", + " 7300K .......... .......... .......... .......... .......... 5% 478K 4m53s\n", + " 7350K .......... .......... .......... .......... .......... 5% 727K 4m52s\n", + " 7400K .......... .......... .......... .......... .......... 5% 461K 4m51s\n", + " 7450K .......... .......... .......... .......... .......... 5% 742K 4m50s\n", + " 7500K .......... .......... .......... .......... .......... 5% 347K 4m51s\n", + " 7550K .......... .......... .......... .......... .......... 5% 1024K 4m49s\n", + " 7600K .......... .......... .......... .......... .......... 5% 421K 4m49s\n", + " 7650K .......... .......... .......... .......... .......... 5% 947K 4m48s\n", + " 7700K .......... .......... .......... .......... .......... 6% 443K 4m48s\n", + " 7750K .......... .......... .......... .......... .......... 6% 457K 4m48s\n", + " 7800K .......... .......... .......... .......... .......... 6% 676K 4m47s\n", + " 7850K .......... .......... .......... .......... .......... 6% 537K 4m46s\n", + " 7900K .......... .......... .......... .......... .......... 6% 667K 4m46s\n", + " 7950K .......... .......... .......... .......... .......... 6% 459K 4m45s\n", + " 8000K .......... .......... .......... .......... .......... 6% 753K 4m44s\n", + " 8050K .......... .......... .......... .......... .......... 6% 370K 4m45s\n", + " 8100K .......... .......... .......... .......... .......... 6% 848K 4m44s\n", + " 8150K .......... .......... .......... .......... .......... 6% 458K 4m43s\n", + " 8200K .......... .......... .......... .......... .......... 6% 831K 4m42s\n", + " 8250K .......... .......... .......... .......... .......... 6% 467K 4m42s\n", + " 8300K .......... .......... .......... .......... .......... 6% 828K 4m41s\n", + " 8350K .......... .......... .......... .......... .......... 6% 450K 4m41s\n", + " 8400K .......... .......... .......... .......... .......... 6% 913K 4m40s\n", + " 8450K .......... .......... .......... .......... .......... 6% 409K 4m40s\n", + " 8500K .......... .......... .......... .......... .......... 6% 537K 4m40s\n", + " 8550K .......... .......... .......... .......... .......... 6% 677K 4m39s\n", + " 8600K .......... .......... .......... .......... .......... 6% 528K 4m38s\n", + " 8650K .......... .......... .......... .......... .......... 6% 627K 4m38s\n", + " 8700K .......... .......... .......... .......... .......... 6% 577K 4m37s\n", + " 8750K .......... .......... .......... .......... .......... 6% 505K 4m37s\n", + " 8800K .......... .......... .......... .......... .......... 6% 597K 4m36s\n", + " 8850K .......... .......... .......... .......... .......... 6% 526K 4m36s\n", + " 8900K .......... .......... .......... .......... .......... 6% 404K 4m36s\n", + " 8950K .......... .......... .......... .......... .......... 6% 671K 4m35s\n", + " 9000K .......... .......... .......... .......... .......... 7% 522K 4m35s\n", + " 9050K .......... .......... .......... .......... .......... 7% 696K 4m34s\n", + " 9100K .......... .......... .......... .......... .......... 7% 508K 4m34s\n", + " 9150K .......... .......... .......... .......... .......... 7% 537K 4m34s\n", + " 9200K .......... .......... .......... .......... .......... 7% 685K 4m33s\n", + " 9250K .......... .......... .......... .......... .......... 7% 529K 4m33s\n", + " 9300K .......... .......... .......... .......... .......... 7% 696K 4m32s\n", + " 9350K .......... .......... .......... .......... .......... 7% 527K 4m32s\n", + " 9400K .......... .......... .......... .......... .......... 7% 690K 4m31s\n", + " 9450K .......... .......... .......... .......... .......... 7% 532K 4m31s\n", + " 9500K .......... .......... .......... .......... .......... 7% 676K 4m30s\n", + " 9550K .......... .......... .......... .......... .......... 7% 536K 4m30s\n", + " 9600K .......... .......... .......... .......... .......... 7% 611K 4m29s\n", + " 9650K .......... .......... .......... .......... .......... 7% 600K 4m29s\n", + " 9700K .......... .......... .......... .......... .......... 7% 600K 4m28s\n", + " 9750K .......... .......... .......... .......... .......... 7% 603K 4m28s\n", + " 9800K .......... .......... .......... .......... .......... 7% 592K 4m27s\n", + " 9850K .......... .......... .......... .......... .......... 7% 721K 4m27s\n", + " 9900K .......... .......... .......... .......... .......... 7% 540K 4m26s\n", + " 9950K .......... .......... .......... .......... .......... 7% 575K 4m26s\n", + " 10000K .......... .......... .......... .......... .......... 7% 617K 4m25s\n", + " 10050K .......... .......... .......... .......... .......... 7% 692K 4m25s\n", + " 10100K .......... .......... .......... .......... .......... 7% 522K 4m24s\n", + " 10150K .......... .......... .......... .......... .......... 7% 707K 4m24s\n", + " 10200K .......... .......... .......... .......... .......... 7% 536K 4m24s\n", + " 10250K .......... .......... .......... .......... .......... 8% 582K 4m23s\n", + " 10300K .......... .......... .......... .......... .......... 8% 603K 4m23s\n", + " 10350K .......... .......... .......... .......... .......... 8% 597K 4m22s\n", + " 10400K .......... .......... .......... .......... .......... 8% 628K 4m22s\n", + " 10450K .......... .......... .......... .......... .......... 8% 581K 4m21s\n", + " 10500K .......... .......... .......... .......... .......... 8% 638K 4m21s\n", + " 10550K .......... .......... .......... .......... .......... 8% 571K 4m21s\n", + " 10600K .......... .......... .......... .......... .......... 8% 617K 4m20s\n", + " 10650K .......... .......... .......... .......... .......... 8% 601K 4m20s\n", + " 10700K .......... .......... .......... .......... .......... 8% 604K 4m19s\n", + " 10750K .......... .......... .......... .......... .......... 8% 583K 4m19s\n", + " 10800K .......... .......... .......... .......... .......... 8% 608K 4m19s\n", + " 10850K .......... .......... .......... .......... .......... 8% 599K 4m18s\n", + " 10900K .......... .......... .......... .......... .......... 8% 635K 4m18s\n", + " 10950K .......... .......... .......... .......... .......... 8% 603K 4m17s\n", + " 11000K .......... .......... .......... .......... .......... 8% 592K 4m17s\n", + " 11050K .......... .......... .......... .......... .......... 8% 622K 4m17s\n", + " 11100K .......... .......... .......... .......... .......... 8% 593K 4m16s\n", + " 11150K .......... .......... .......... .......... .......... 8% 624K 4m16s\n", + " 11200K .......... .......... .......... .......... .......... 8% 589K 4m15s\n", + " 11250K .......... .......... .......... .......... .......... 8% 614K 4m15s\n", + " 11300K .......... .......... .......... .......... .......... 8% 606K 4m15s\n", + " 11350K .......... .......... .......... .......... .......... 8% 598K 4m14s\n", + " 11400K .......... .......... .......... .......... .......... 8% 2.07M 4m13s\n", + " 11450K .......... .......... .......... .......... .......... 8% 396K 4m13s\n", + " 11500K .......... .......... .......... .......... .......... 8% 1.20M 4m13s\n", + " 11550K .......... .......... .......... .......... .......... 9% 408K 4m13s\n", + " 11600K .......... .......... .......... .......... .......... 9% 1.14M 4m12s\n", + " 11650K .......... .......... .......... .......... .......... 9% 623K 4m11s\n", + " 11700K .......... .......... .......... .......... .......... 9% 613K 4m11s\n", + " 11750K .......... .......... .......... .......... .......... 9% 373K 4m11s\n", + " 11800K .......... .......... .......... .......... .......... 9% 1.60M 4m10s\n", + " 11850K .......... .......... .......... .......... .......... 9% 592K 4m10s\n", + " 11900K .......... .......... .......... .......... .......... 9% 553K 4m10s\n", + " 11950K .......... .......... .......... .......... .......... 9% 629K 4m9s\n", + " 12000K .......... .......... .......... .......... .......... 9% 567K 4m9s\n", + " 12050K .......... .......... .......... .......... .......... 9% 638K 4m9s\n", + " 12100K .......... .......... .......... .......... .......... 9% 596K 4m8s\n", + " 12150K .......... .......... .......... .......... .......... 9% 658K 4m8s\n", + " 12200K .......... .......... .......... .......... .......... 9% 577K 4m8s\n", + " 12250K .......... .......... .......... .......... .......... 9% 701K 4m7s\n", + " 12300K .......... .......... .......... .......... .......... 9% 527K 4m7s\n", + " 12350K .......... .......... .......... .......... .......... 9% 688K 4m7s\n", + " 12400K .......... .......... .......... .......... .......... 9% 658K 4m6s\n", + " 12450K .......... .......... .......... .......... .......... 9% 575K 4m6s\n", + " 12500K .......... .......... .......... .......... .......... 9% 639K 4m6s\n", + " 12550K .......... .......... .......... .......... .......... 9% 1.75M 4m5s\n", + " 12600K .......... .......... .......... .......... .......... 9% 365K 4m5s\n", + " 12650K .......... .......... .......... .......... .......... 9% 1.64M 4m4s\n", + " 12700K .......... .......... .......... .......... .......... 9% 600K 4m4s\n", + " 12750K .......... .......... .......... .......... .......... 9% 627K 4m4s\n", + " 12800K .......... .......... .......... .......... .......... 9% 566K 4m3s\n", + " 12850K .......... .......... .......... .......... .......... 10% 720K 4m3s\n", + " 12900K .......... .......... .......... .......... .......... 10% 531K 4m3s\n", + " 12950K .......... .......... .......... .......... .......... 10% 692K 4m2s\n", + " 13000K .......... .......... .......... .......... .......... 10% 627K 4m2s\n", + " 13050K .......... .......... .......... .......... .......... 10% 576K 4m2s\n", + " 13100K .......... .......... .......... .......... .......... 10% 2.18M 4m1s\n", + " 13150K .......... .......... .......... .......... .......... 10% 401K 4m1s\n", + " 13200K .......... .......... .......... .......... .......... 10% 1.16M 4m0s\n", + " 13250K .......... .......... .......... .......... .......... 10% 608K 4m0s\n", + " 13300K .......... .......... .......... .......... .......... 10% 617K 4m0s\n", + " 13350K .......... .......... .......... .......... .......... 10% 588K 3m59s\n", + " 13400K .......... .......... .......... .......... .......... 10% 673K 3m59s\n", + " 13450K .......... .......... .......... .......... .......... 10% 551K 3m59s\n", + " 13500K .......... .......... .......... .......... .......... 10% 684K 3m58s\n", + " 13550K .......... .......... .......... .......... .......... 10% 2.53M 3m58s\n", + " 13600K .......... .......... .......... .......... .......... 10% 348K 3m58s\n", + " 13650K .......... .......... .......... .......... .......... 10% 1.97M 3m57s\n", + " 13700K .......... .......... .......... .......... .......... 10% 625K 3m57s\n", + " 13750K .......... .......... .......... .......... .......... 10% 669K 3m57s\n", + " 13800K .......... .......... .......... .......... .......... 10% 548K 3m56s\n", + " 13850K .......... .......... .......... .......... .......... 10% 667K 3m56s\n", + " 13900K .......... .......... .......... .......... .......... 10% 617K 3m56s\n", + " 13950K .......... .......... .......... .......... .......... 10% 561K 3m55s\n", + " 14000K .......... .......... .......... .......... .......... 10% 661K 3m55s\n", + " 14050K .......... .......... .......... .......... .......... 10% 682K 3m55s\n", + " 14100K .......... .......... .......... .......... .......... 10% 543K 3m55s\n", + " 14150K .......... .......... .......... .......... .......... 11% 2.17M 3m54s\n", + " 14200K .......... .......... .......... .......... .......... 11% 614K 3m54s\n", + " 14250K .......... .......... .......... .......... .......... 11% 595K 3m53s\n", + " 14300K .......... .......... .......... .......... .......... 11% 612K 3m53s\n", + " 14350K .......... .......... .......... .......... .......... 11% 575K 3m53s\n", + " 14400K .......... .......... .......... .......... .......... 11% 622K 3m53s\n", + " 14450K .......... .......... .......... .......... .......... 11% 660K 3m52s\n", + " 14500K .......... .......... .......... .......... .......... 11% 549K 3m52s\n", + " 14550K .......... .......... .......... .......... .......... 11% 656K 3m52s\n", + " 14600K .......... .......... .......... .......... .......... 11% 948K 3m51s\n", + " 14650K .......... .......... .......... .......... .......... 11% 439K 3m51s\n", + " 14700K .......... .......... .......... .......... .......... 11% 3.10M 3m51s\n", + " 14750K .......... .......... .......... .......... .......... 11% 622K 3m50s\n", + " 14800K .......... .......... .......... .......... .......... 11% 582K 3m50s\n", + " 14850K .......... .......... .......... .......... .......... 11% 607K 3m50s\n", + " 14900K .......... .......... .......... .......... .......... 11% 599K 3m50s\n", + " 14950K .......... .......... .......... .......... .......... 11% 606K 3m49s\n", + " 15000K .......... .......... .......... .......... .......... 11% 406K 3m49s\n", + " 15050K .......... .......... .......... .......... .......... 11% 574K 3m49s\n", + " 15100K .......... .......... .......... .......... .......... 11% 493K 3m49s\n", + " 15150K .......... .......... .......... .......... .......... 11% 754K 3m49s\n", + " 15200K .......... .......... .......... .......... .......... 11% 451K 3m49s\n", + " 15250K .......... .......... .......... .......... .......... 11% 930K 3m48s\n", + " 15300K .......... .......... .......... .......... .......... 11% 458K 3m48s\n", + " 15350K .......... .......... .......... .......... .......... 11% 877K 3m48s\n", + " 15400K .......... .......... .......... .......... .......... 12% 458K 3m48s\n", + " 15450K .......... .......... .......... .......... .......... 12% 885K 3m47s\n", + " 15500K .......... .......... .......... .......... .......... 12% 459K 3m47s\n", + " 15550K .......... .......... .......... .......... .......... 12% 871K 3m47s\n", + " 15600K .......... .......... .......... .......... .......... 12% 456K 3m47s\n", + " 15650K .......... .......... .......... .......... .......... 12% 4.13M 3m46s\n", + " 15700K .......... .......... .......... .......... .......... 12% 320K 3m46s\n", + " 15750K .......... .......... .......... .......... .......... 12% 5.02M 3m46s\n", + " 15800K .......... .......... .......... .......... .......... 12% 317K 3m46s\n", + " 15850K .......... .......... .......... .......... .......... 12% 6.12M 3m45s\n", + " 15900K .......... .......... .......... .......... .......... 12% 318K 3m46s\n", + " 15950K .......... .......... .......... .......... .......... 12% 5.88M 3m45s\n", + " 16000K .......... .......... .......... .......... .......... 12% 317K 3m45s\n", + " 16050K .......... .......... .......... .......... .......... 12% 5.25M 3m44s\n", + " 16100K .......... .......... .......... .......... .......... 12% 316K 3m45s\n", + " 16150K .......... .......... .......... .......... .......... 12% 5.45M 3m44s\n", + " 16200K .......... .......... .......... .......... .......... 12% 317K 3m44s\n", + " 16250K .......... .......... .......... .......... .......... 12% 5.40M 3m44s\n", + " 16300K .......... .......... .......... .......... .......... 12% 318K 3m44s\n", + " 16350K .......... .......... .......... .......... .......... 12% 5.03M 3m43s\n", + " 16400K .......... .......... .......... .......... .......... 12% 318K 3m43s\n", + " 16450K .......... .......... .......... .......... .......... 12% 5.20M 3m43s\n", + " 16500K .......... .......... .......... .......... .......... 12% 320K 3m43s\n", + " 16550K .......... .......... .......... .......... .......... 12% 5.34M 3m42s\n", + " 16600K .......... .......... .......... .......... .......... 12% 316K 3m43s\n", + " 16650K .......... .......... .......... .......... .......... 12% 6.20M 3m42s\n", + " 16700K .......... .......... .......... .......... .......... 13% 317K 3m42s\n", + " 16750K .......... .......... .......... .......... .......... 13% 5.30M 3m41s\n", + " 16800K .......... .......... .......... .......... .......... 13% 315K 3m42s\n", + " 16850K .......... .......... .......... .......... .......... 13% 7.84M 3m41s\n", + " 16900K .......... .......... .......... .......... .......... 13% 314K 3m41s\n", + " 16950K .......... .......... .......... .......... .......... 13% 5.86M 3m41s\n", + " 17000K .......... .......... .......... .......... .......... 13% 979K 3m40s\n", + " 17050K .......... .......... .......... .......... .......... 13% 430K 3m40s\n", + " 17100K .......... .......... .......... .......... .......... 13% 968K 3m40s\n", + " 17150K .......... .......... .......... .......... .......... 13% 437K 3m40s\n", + " 17200K .......... .......... .......... .......... .......... 13% 971K 3m39s\n", + " 17250K .......... .......... .......... .......... .......... 13% 420K 3m39s\n", + " 17300K .......... .......... .......... .......... .......... 13% 1.01M 3m39s\n", + " 17350K .......... .......... .......... .......... .......... 13% 422K 3m39s\n", + " 17400K .......... .......... .......... .......... .......... 13% 1.04M 3m39s\n", + " 17450K .......... .......... .......... .......... .......... 13% 408K 3m39s\n", + " 17500K .......... .......... .......... .......... .......... 13% 1.14M 3m38s\n", + " 17550K .......... .......... .......... .......... .......... 13% 406K 3m38s\n", + " 17600K .......... .......... .......... .......... .......... 13% 1.14M 3m38s\n", + " 17650K .......... .......... .......... .......... .......... 13% 391K 3m38s\n", + " 17700K .......... .......... .......... .......... .......... 13% 1.31M 3m38s\n", + " 17750K .......... .......... .......... .......... .......... 13% 378K 3m38s\n", + " 17800K .......... .......... .......... .......... .......... 13% 1.42M 3m37s\n", + " 17850K .......... .......... .......... .......... .......... 13% 382K 3m37s\n", + " 17900K .......... .......... .......... .......... .......... 13% 1.37M 3m37s\n", + " 17950K .......... .......... .......... .......... .......... 13% 385K 3m37s\n", + " 18000K .......... .......... .......... .......... .......... 14% 1.29M 3m36s\n", + " 18050K .......... .......... .......... .......... .......... 14% 387K 3m36s\n", + " 18100K .......... .......... .......... .......... .......... 14% 1.23M 3m36s\n", + " 18150K .......... .......... .......... .......... .......... 14% 393K 3m36s\n", + " 18200K .......... .......... .......... .......... .......... 14% 1.22M 3m36s\n", + " 18250K .......... .......... .......... .......... .......... 14% 388K 3m36s\n", + " 18300K .......... .......... .......... .......... .......... 14% 1.31M 3m35s\n", + " 18350K .......... .......... .......... .......... .......... 14% 389K 3m35s\n", + " 18400K .......... .......... .......... .......... .......... 14% 1.26M 3m35s\n", + " 18450K .......... .......... .......... .......... .......... 14% 394K 3m35s\n", + " 18500K .......... .......... .......... .......... .......... 14% 1.23M 3m35s\n", + " 18550K .......... .......... .......... .......... .......... 14% 394K 3m35s\n", + " 18600K .......... .......... .......... .......... .......... 14% 1.25M 3m34s\n", + " 18650K .......... .......... .......... .......... .......... 14% 394K 3m34s\n", + " 18700K .......... .......... .......... .......... .......... 14% 1.22M 3m34s\n", + " 18750K .......... .......... .......... .......... .......... 14% 400K 3m34s\n", + " 18800K .......... .......... .......... .......... .......... 14% 1.12M 3m33s\n", + " 18850K .......... .......... .......... .......... .......... 14% 404K 3m34s\n", + " 18900K .......... .......... .......... .......... .......... 14% 4.63M 3m33s\n", + " 18950K .......... .......... .......... .......... .......... 14% 322K 3m33s\n", + " 19000K .......... .......... .......... .......... .......... 14% 4.19M 3m33s\n", + " 19050K .......... .......... .......... .......... .......... 14% 326K 3m33s\n", + " 19100K .......... .......... .......... .......... .......... 14% 5.77M 3m32s\n", + " 19150K .......... .......... .......... .......... .......... 14% 313K 3m32s\n", + " 19200K .......... .......... .......... .......... .......... 14% 5.56M 3m32s\n", + " 19250K .......... .......... .......... .......... .......... 15% 316K 3m32s\n", + " 19300K .......... .......... .......... .......... .......... 15% 5.61M 3m32s\n", + " 19350K .......... .......... .......... .......... .......... 15% 318K 3m32s\n", + " 19400K .......... .......... .......... .......... .......... 15% 5.94M 3m31s\n", + " 19450K .......... .......... .......... .......... .......... 15% 316K 3m31s\n", + " 19500K .......... .......... .......... .......... .......... 15% 5.16M 3m31s\n", + " 19550K .......... .......... .......... .......... .......... 15% 318K 3m31s\n", + " 19600K .......... .......... .......... .......... .......... 15% 5.90M 3m31s\n", + " 19650K .......... .......... .......... .......... .......... 15% 315K 3m31s\n", + " 19700K .......... .......... .......... .......... .......... 15% 6.54M 3m30s\n", + " 19750K .......... .......... .......... .......... .......... 15% 315K 3m30s\n", + " 19800K .......... .......... .......... .......... .......... 15% 5.75M 3m30s\n", + " 19850K .......... .......... .......... .......... .......... 15% 316K 3m30s\n", + " 19900K .......... .......... .......... .......... .......... 15% 4.66M 3m30s\n", + " 19950K .......... .......... .......... .......... .......... 15% 317K 3m30s\n", + " 20000K .......... .......... .......... .......... .......... 15% 5.78M 3m29s\n", + " 20050K .......... .......... .......... .......... .......... 15% 315K 3m29s\n", + " 20100K .......... .......... .......... .......... .......... 15% 5.54M 3m29s\n", + " 20150K .......... .......... .......... .......... .......... 15% 316K 3m29s\n", + " 20200K .......... .......... .......... .......... .......... 15% 5.33M 3m29s\n", + " 20250K .......... .......... .......... .......... .......... 15% 321K 3m29s\n", + " 20300K .......... .......... .......... .......... .......... 15% 4.61M 3m28s\n", + " 20350K .......... .......... .......... .......... .......... 15% 317K 3m28s\n", + " 20400K .......... .......... .......... .......... .......... 15% 5.40M 3m28s\n", + " 20450K .......... .......... .......... .......... .......... 15% 1.01M 3m28s\n", + " 20500K .......... .......... .......... .......... .......... 15% 421K 3m28s\n", + " 20550K .......... .......... .......... .......... .......... 16% 1020K 3m27s\n", + " 20600K .......... .......... .......... .......... .......... 16% 414K 3m27s\n", + " 20650K .......... .......... .......... .......... .......... 16% 1.00M 3m27s\n", + " 20700K .......... .......... .......... .......... .......... 16% 401K 3m27s\n", + " 20750K .......... .......... .......... .......... .......... 16% 1.08M 3m27s\n", + " 20800K .......... .......... .......... .......... .......... 16% 401K 3m27s\n", + " 20850K .......... .......... .......... .......... .......... 16% 1.09M 3m26s\n", + " 20900K .......... .......... .......... .......... .......... 16% 396K 3m26s\n", + " 20950K .......... .......... .......... .......... .......... 16% 1.14M 3m26s\n", + " 21000K .......... .......... .......... .......... .......... 16% 303K 3m26s\n", + " 21050K .......... .......... .......... .......... .......... 16% 3.73M 3m26s\n", + " 21100K .......... .......... .......... .......... .......... 16% 249K 3m26s\n", + " 21150K .......... .......... .......... .......... .......... 16% 7.97M 3m26s\n", + " 21200K .......... .......... .......... .......... .......... 16% 306K 3m26s\n", + " 21250K .......... .......... .......... .......... .......... 16% 4.09M 3m25s\n", + " 21300K .......... .......... .......... .......... .......... 16% 322K 3m26s\n", + " 21350K .......... .......... .......... .......... .......... 16% 3.52M 3m25s\n", + " 21400K .......... .......... .......... .......... .......... 16% 322K 3m25s\n", + " 21450K .......... .......... .......... .......... .......... 16% 3.29M 3m25s\n", + " 21500K .......... .......... .......... .......... .......... 16% 488K 3m25s\n", + " 21550K .......... .......... .......... .......... .......... 16% 749K 3m24s\n", + " 21600K .......... .......... .......... .......... .......... 16% 468K 3m24s\n", + " 21650K .......... .......... .......... .......... .......... 16% 779K 3m24s\n", + " 21700K .......... .......... .......... .......... .......... 16% 462K 3m24s\n", + " 21750K .......... .......... .......... .......... .......... 16% 816K 3m24s\n", + " 21800K .......... .......... .......... .......... .......... 16% 456K 3m24s\n", + " 21850K .......... .......... .......... .......... .......... 17% 857K 3m24s\n", + " 21900K .......... .......... .......... .......... .......... 17% 444K 3m24s\n", + " 21950K .......... .......... .......... .......... .......... 17% 897K 3m23s\n", + " 22000K .......... .......... .......... .......... .......... 17% 440K 3m23s\n", + " 22050K .......... .......... .......... .......... .......... 17% 893K 3m23s\n", + " 22100K .......... .......... .......... .......... .......... 17% 445K 3m23s\n", + " 22150K .......... .......... .......... .......... .......... 17% 894K 3m23s\n", + " 22200K .......... .......... .......... .......... .......... 17% 439K 3m23s\n", + " 22250K .......... .......... .......... .......... .......... 17% 874K 3m22s\n", + " 22300K .......... .......... .......... .......... .......... 17% 430K 3m22s\n", + " 22350K .......... .......... .......... .......... .......... 17% 966K 3m22s\n", + " 22400K .......... .......... .......... .......... .......... 17% 421K 3m22s\n", + " 22450K .......... .......... .......... .......... .......... 17% 975K 3m22s\n", + " 22500K .......... .......... .......... .......... .......... 17% 430K 3m22s\n", + " 22550K .......... .......... .......... .......... .......... 17% 930K 3m22s\n", + " 22600K .......... .......... .......... .......... .......... 17% 431K 3m22s\n", + " 22650K .......... .......... .......... .......... .......... 17% 918K 3m21s\n", + " 22700K .......... .......... .......... .......... .......... 17% 436K 3m21s\n", + " 22750K .......... .......... .......... .......... .......... 17% 905K 3m21s\n", + " 22800K .......... .......... .......... .......... .......... 17% 441K 3m21s\n", + " 22850K .......... .......... .......... .......... .......... 17% 900K 3m21s\n", + " 22900K .......... .......... .......... .......... .......... 17% 437K 3m21s\n", + " 22950K .......... .......... .......... .......... .......... 17% 881K 3m20s\n", + " 23000K .......... .......... .......... .......... .......... 17% 445K 3m20s\n", + " 23050K .......... .......... .......... .......... .......... 17% 888K 3m20s\n", + " 23100K .......... .......... .......... .......... .......... 17% 442K 3m20s\n", + " 23150K .......... .......... .......... .......... .......... 18% 888K 3m20s\n", + " 23200K .......... .......... .......... .......... .......... 18% 443K 3m20s\n", + " 23250K .......... .......... .......... .......... .......... 18% 797K 3m20s\n", + " 23300K .......... .......... .......... .......... .......... 18% 473K 3m20s\n", + " 23350K .......... .......... .......... .......... .......... 18% 800K 3m19s\n", + " 23400K .......... .......... .......... .......... .......... 18% 472K 3m19s\n", + " 23450K .......... .......... .......... .......... .......... 18% 811K 3m19s\n", + " 23500K .......... .......... .......... .......... .......... 18% 464K 3m19s\n", + " 23550K .......... .......... .......... .......... .......... 18% 825K 3m19s\n", + " 23600K .......... .......... .......... .......... .......... 18% 463K 3m19s\n", + " 23650K .......... .......... .......... .......... .......... 18% 819K 3m18s\n", + " 23700K .......... .......... .......... .......... .......... 18% 465K 3m18s\n", + " 23750K .......... .......... .......... .......... .......... 18% 784K 3m18s\n", + " 23800K .......... .......... .......... .......... .......... 18% 459K 3m18s\n", + " 23850K .......... .......... .......... .......... .......... 18% 818K 3m18s\n", + " 23900K .......... .......... .......... .......... .......... 18% 461K 3m18s\n", + " 23950K .......... .......... .......... .......... .......... 18% 815K 3m18s\n", + " 24000K .......... .......... .......... .......... .......... 18% 464K 3m18s\n", + " 24050K .......... .......... .......... .......... .......... 18% 783K 3m17s\n", + " 24100K .......... .......... .......... .......... .......... 18% 475K 3m17s\n", + " 24150K .......... .......... .......... .......... .......... 18% 781K 3m17s\n", + " 24200K .......... .......... .......... .......... .......... 18% 480K 3m17s\n", + " 24250K .......... .......... .......... .......... .......... 18% 782K 3m17s\n", + " 24300K .......... .......... .......... .......... .......... 18% 471K 3m17s\n", + " 24350K .......... .......... .......... .......... .......... 18% 798K 3m17s\n", + " 24400K .......... .......... .......... .......... .......... 19% 460K 3m16s\n", + " 24450K .......... .......... .......... .......... .......... 19% 810K 3m16s\n", + " 24500K .......... .......... .......... .......... .......... 19% 6.18M 3m16s\n", + " 24550K .......... .......... .......... .......... .......... 19% 311K 3m16s\n", + " 24600K .......... .......... .......... .......... .......... 19% 5.85M 3m16s\n", + " 24650K .......... .......... .......... .......... .......... 19% 303K 3m16s\n", + " 24700K .......... .......... .......... .......... .......... 19% 6.70M 3m15s\n", + " 24750K .......... .......... .......... .......... .......... 19% 307K 3m15s\n", + " 24800K .......... .......... .......... .......... .......... 19% 6.31M 3m15s\n", + " 24850K .......... .......... .......... .......... .......... 19% 312K 3m15s\n", + " 24900K .......... .......... .......... .......... .......... 19% 6.92M 3m15s\n", + " 24950K .......... .......... .......... .......... .......... 19% 297K 3m15s\n", + " 25000K .......... .......... .......... .......... .......... 19% 7.09M 3m15s\n", + " 25050K .......... .......... .......... .......... .......... 19% 309K 3m15s\n", + " 25100K .......... .......... .......... .......... .......... 19% 5.17M 3m14s\n", + " 25150K .......... .......... .......... .......... .......... 19% 307K 3m14s\n", + " 25200K .......... .......... .......... .......... .......... 19% 6.62M 3m14s\n", + " 25250K .......... .......... .......... .......... .......... 19% 314K 3m14s\n", + " 25300K .......... .......... .......... .......... .......... 19% 4.83M 3m14s\n", + " 25350K .......... .......... .......... .......... .......... 19% 318K 3m14s\n", + " 25400K .......... .......... .......... .......... .......... 19% 3.58M 3m13s\n", + " 25450K .......... .......... .......... .......... .......... 19% 320K 3m14s\n", + " 25500K .......... .......... .......... .......... .......... 19% 3.78M 3m13s\n", + " 25550K .......... .......... .......... .......... .......... 19% 311K 3m13s\n", + " 25600K .......... .......... .......... .......... .......... 19% 5.42M 3m13s\n", + " 25650K .......... .......... .......... .......... .......... 19% 313K 3m13s\n", + " 25700K .......... .......... .......... .......... .......... 20% 5.90M 3m13s\n", + " 25750K .......... .......... .......... .......... .......... 20% 314K 3m13s\n", + " 25800K .......... .......... .......... .......... .......... 20% 5.43M 3m12s\n", + " 25850K .......... .......... .......... .......... .......... 20% 487K 3m12s\n", + " 25900K .......... .......... .......... .......... .......... 20% 739K 3m12s\n", + " 25950K .......... .......... .......... .......... .......... 20% 463K 3m12s\n", + " 26000K .......... .......... .......... .......... .......... 20% 809K 3m12s\n", + " 26050K .......... .......... .......... .......... .......... 20% 475K 3m12s\n", + " 26100K .......... .......... .......... .......... .......... 20% 725K 3m12s\n", + " 26150K .......... .......... .......... .......... .......... 20% 185K 3m12s\n", + " 26200K .......... .......... .......... .......... .......... 20% 87.2M 3m12s\n", + " 26250K .......... .......... .......... .......... .......... 20% 53.1K 3m15s\n", + " 26300K .......... .......... .......... .......... .......... 20% 138K 3m16s\n", + " 26350K .......... .......... .......... .......... .......... 20% 5.63M 3m16s\n", + " 26400K .......... .......... .......... .......... .......... 20% 138K 3m16s\n", + " 26450K .......... .......... .......... .......... .......... 20% 6.35M 3m16s\n", + " 26500K .......... .......... .......... .......... .......... 20% 303K 3m16s\n", + " 26550K .......... .......... .......... .......... .......... 20% 286K 3m16s\n", + " 26600K .......... .......... .......... .......... .......... 20% 295K 3m17s\n", + " 26650K .......... .......... .......... .......... .......... 20% 294K 3m17s\n", + " 26700K .......... .......... .......... .......... .......... 20% 297K 3m17s\n", + " 26750K .......... .......... .......... .......... .......... 20% 295K 3m17s\n", + " 26800K .......... .......... .......... .......... .......... 20% 294K 3m17s\n", + " 26850K .......... .......... .......... .......... .......... 20% 300K 3m17s\n", + " 26900K .......... .......... .......... .......... .......... 20% 301K 3m18s\n", + " 26950K .......... .......... .......... .......... .......... 20% 304K 3m18s\n", + " 27000K .......... .......... .......... .......... .......... 21% 302K 3m18s\n", + " 27050K .......... .......... .......... .......... .......... 21% 302K 3m18s\n", + " 27100K .......... .......... .......... .......... .......... 21% 2.90M 3m18s\n", + " 27150K .......... .......... .......... .......... .......... 21% 301K 3m18s\n", + " 27200K .......... .......... .......... .......... .......... 21% 304K 3m18s\n", + " 27250K .......... .......... .......... .......... .......... 21% 301K 3m18s\n", + " 27300K .......... .......... .......... .......... .......... 21% 306K 3m18s\n", + " 27350K .......... .......... .......... .......... .......... 21% 3.24M 3m18s\n", + " 27400K .......... .......... .......... .......... .......... 21% 290K 3m18s\n", + " 27450K .......... .......... .......... .......... .......... 21% 316K 3m18s\n", + " 27500K .......... .......... .......... .......... .......... 21% 304K 3m18s\n", + " 27550K .......... .......... .......... .......... .......... 21% 327K 3m18s\n", + " 27600K .......... .......... .......... .......... .......... 21% 1.83M 3m18s\n", + " 27650K .......... .......... .......... .......... .......... 21% 309K 3m18s\n", + " 27700K .......... .......... .......... .......... .......... 21% 312K 3m18s\n", + " 27750K .......... .......... .......... .......... .......... 21% 2.01M 3m18s\n", + " 27800K .......... .......... .......... .......... .......... 21% 312K 3m18s\n", + " 27850K .......... .......... .......... .......... .......... 21% 308K 3m18s\n", + " 27900K .......... .......... .......... .......... .......... 21% 1.76M 3m18s\n", + " 27950K .......... .......... .......... .......... .......... 21% 330K 3m18s\n", + " 28000K .......... .......... .......... .......... .......... 21% 319K 3m18s\n", + " 28050K .......... .......... .......... .......... .......... 21% 1.65M 3m18s\n", + " 28100K .......... .......... .......... .......... .......... 21% 333K 3m18s\n", + " 28150K .......... .......... .......... .......... .......... 21% 317K 3m18s\n", + " 28200K .......... .......... .......... .......... .......... 21% 1.85M 3m18s\n", + " 28250K .......... .......... .......... .......... .......... 21% 325K 3m18s\n", + " 28300K .......... .......... .......... .......... .......... 22% 331K 3m18s\n", + " 28350K .......... .......... .......... .......... .......... 22% 2.06M 3m17s\n", + " 28400K .......... .......... .......... .......... .......... 22% 325K 3m18s\n", + " 28450K .......... .......... .......... .......... .......... 22% 331K 3m18s\n", + " 28500K .......... .......... .......... .......... .......... 22% 1.91M 3m17s\n", + " 28550K .......... .......... .......... .......... .......... 22% 323K 3m17s\n", + " 28600K .......... .......... .......... .......... .......... 22% 2.18M 3m17s\n", + " 28650K .......... .......... .......... .......... .......... 22% 327K 3m17s\n", + " 28700K .......... .......... .......... .......... .......... 22% 324K 3m17s\n", + " 28750K .......... .......... .......... .......... .......... 22% 2.11M 3m17s\n", + " 28800K .......... .......... .......... .......... .......... 22% 329K 3m17s\n", + " 28850K .......... .......... .......... .......... .......... 22% 2.39M 3m17s\n", + " 28900K .......... .......... .......... .......... .......... 22% 330K 3m17s\n", + " 28950K .......... .......... .......... .......... .......... 22% 336K 3m17s\n", + " 29000K .......... .......... .......... .......... .......... 22% 1.89M 3m16s\n", + " 29050K .......... .......... .......... .......... .......... 22% 327K 3m16s\n", + " 29100K .......... .......... .......... .......... .......... 22% 2.20M 3m16s\n", + " 29150K .......... .......... .......... .......... .......... 22% 328K 3m16s\n", + " 29200K .......... .......... .......... .......... .......... 22% 2.25M 3m16s\n", + " 29250K .......... .......... .......... .......... .......... 22% 337K 3m16s\n", + " 29300K .......... .......... .......... .......... .......... 22% 1.97M 3m16s\n", + " 29350K .......... .......... .......... .......... .......... 22% 339K 3m16s\n", + " 29400K .......... .......... .......... .......... .......... 22% 356K 3m16s\n", + " 29450K .......... .......... .......... .......... .......... 22% 1.61M 3m15s\n", + " 29500K .......... .......... .......... .......... .......... 22% 351K 3m15s\n", + " 29550K .......... .......... .......... .......... .......... 23% 1.72M 3m15s\n", + " 29600K .......... .......... .......... .......... .......... 23% 336K 3m15s\n", + " 29650K .......... .......... .......... .......... .......... 23% 2.31M 3m15s\n", + " 29700K .......... .......... .......... .......... .......... 23% 333K 3m15s\n", + " 29750K .......... .......... .......... .......... .......... 23% 2.46M 3m14s\n", + " 29800K .......... .......... .......... .......... .......... 23% 336K 3m15s\n", + " 29850K .......... .......... .......... .......... .......... 23% 2.13M 3m14s\n", + " 29900K .......... .......... .......... .......... .......... 23% 341K 3m14s\n", + " 29950K .......... .......... .......... .......... .......... 23% 2.16M 3m14s\n", + " 30000K .......... .......... .......... .......... .......... 23% 350K 3m14s\n", + " 30050K .......... .......... .......... .......... .......... 23% 1.92M 3m14s\n", + " 30100K .......... .......... .......... .......... .......... 23% 347K 3m14s\n", + " 30150K .......... .......... .......... .......... .......... 23% 1.69M 3m13s\n", + " 30200K .......... .......... .......... .......... .......... 23% 360K 3m13s\n", + " 30250K .......... .......... .......... .......... .......... 23% 1.75M 3m13s\n", + " 30300K .......... .......... .......... .......... .......... 23% 365K 3m13s\n", + " 30350K .......... .......... .......... .......... .......... 23% 1.59M 3m13s\n", + " 30400K .......... .......... .......... .......... .......... 23% 351K 3m13s\n", + " 30450K .......... .......... .......... .......... .......... 23% 1.90M 3m12s\n", + " 30500K .......... .......... .......... .......... .......... 23% 350K 3m13s\n", + " 30550K .......... .......... .......... .......... .......... 23% 2.15M 3m12s\n", + " 30600K .......... .......... .......... .......... .......... 23% 341K 3m12s\n", + " 30650K .......... .......... .......... .......... .......... 23% 2.61M 3m12s\n", + " 30700K .......... .......... .......... .......... .......... 23% 331K 3m12s\n", + " 30750K .......... .......... .......... .......... .......... 23% 3.03M 3m12s\n", + " 30800K .......... .......... .......... .......... .......... 23% 297K 3m12s\n", + " 30850K .......... .......... .......... .......... .......... 24% 6.09M 3m11s\n", + " 30900K .......... .......... .......... .......... .......... 24% 271K 3m12s\n", + " 30950K .......... .......... .......... .......... .......... 24% 6.04M 3m11s\n", + " 31000K .......... .......... .......... .......... .......... 24% 305K 3m11s\n", + " 31050K .......... .......... .......... .......... .......... 24% 4.60M 3m11s\n", + " 31100K .......... .......... .......... .......... .......... 24% 1.01M 3m11s\n", + " 31150K .......... .......... .......... .......... .......... 24% 402K 3m11s\n", + " 31200K .......... .......... .......... .......... .......... 24% 1.03M 3m10s\n", + " 31250K .......... .......... .......... .......... .......... 24% 403K 3m10s\n", + " 31300K .......... .......... .......... .......... .......... 24% 1.08M 3m10s\n", + " 31350K .......... .......... .......... .......... .......... 24% 401K 3m10s\n", + " 31400K .......... .......... .......... .......... .......... 24% 1.10M 3m10s\n", + " 31450K .......... .......... .......... .......... .......... 24% 403K 3m10s\n", + " 31500K .......... .......... .......... .......... .......... 24% 1.02M 3m10s\n", + " 31550K .......... .......... .......... .......... .......... 24% 410K 3m10s\n", + " 31600K .......... .......... .......... .......... .......... 24% 986K 3m9s\n", + " 31650K .......... .......... .......... .......... .......... 24% 427K 3m9s\n", + " 31700K .......... .......... .......... .......... .......... 24% 970K 3m9s\n", + " 31750K .......... .......... .......... .......... .......... 24% 422K 3m9s\n", + " 31800K .......... .......... .......... .......... .......... 24% 998K 3m9s\n", + " 31850K .......... .......... .......... .......... .......... 24% 417K 3m9s\n", + " 31900K .......... .......... .......... .......... .......... 24% 1010K 3m8s\n", + " 31950K .......... .......... .......... .......... .......... 24% 414K 3m8s\n", + " 32000K .......... .......... .......... .......... .......... 24% 1.04M 3m8s\n", + " 32050K .......... .......... .......... .......... .......... 24% 414K 3m8s\n", + " 32100K .......... .......... .......... .......... .......... 24% 1006K 3m8s\n", + " 32150K .......... .......... .......... .......... .......... 25% 421K 3m8s\n", + " 32200K .......... .......... .......... .......... .......... 25% 1004K 3m8s\n", + " 32250K .......... .......... .......... .......... .......... 25% 422K 3m8s\n", + " 32300K .......... .......... .......... .......... .......... 25% 1006K 3m7s\n", + " 32350K .......... .......... .......... .......... .......... 25% 416K 3m7s\n", + " 32400K .......... .......... .......... .......... .......... 25% 1018K 3m7s\n", + " 32450K .......... .......... .......... .......... .......... 25% 415K 3m7s\n", + " 32500K .......... .......... .......... .......... .......... 25% 1.01M 3m7s\n", + " 32550K .......... .......... .......... .......... .......... 25% 419K 3m7s\n", + " 32600K .......... .......... .......... .......... .......... 25% 982K 3m7s\n", + " 32650K .......... .......... .......... .......... .......... 25% 422K 3m7s\n", + " 32700K .......... .......... .......... .......... .......... 25% 973K 3m6s\n", + " 32750K .......... .......... .......... .......... .......... 25% 421K 3m6s\n", + " 32800K .......... .......... .......... .......... .......... 25% 1013K 3m6s\n", + " 32850K .......... .......... .......... .......... .......... 25% 417K 3m6s\n", + " 32900K .......... .......... .......... .......... .......... 25% 1.01M 3m6s\n", + " 32950K .......... .......... .......... .......... .......... 25% 408K 3m6s\n", + " 33000K .......... .......... .......... .......... .......... 25% 1.04M 3m5s\n", + " 33050K .......... .......... .......... .......... .......... 25% 409K 3m5s\n", + " 33100K .......... .......... .......... .......... .......... 25% 1.08M 3m5s\n", + " 33150K .......... .......... .......... .......... .......... 25% 395K 3m5s\n", + " 33200K .......... .......... .......... .......... .......... 25% 1.15M 3m5s\n", + " 33250K .......... .......... .......... .......... .......... 25% 416K 3m5s\n", + " 33300K .......... .......... .......... .......... .......... 25% 1.00M 3m5s\n", + " 33350K .......... .......... .......... .......... .......... 25% 417K 3m5s\n", + " 33400K .......... .......... .......... .......... .......... 26% 1.03M 3m4s\n", + " 33450K .......... .......... .......... .......... .......... 26% 406K 3m4s\n", + " 33500K .......... .......... .......... .......... .......... 26% 1.04M 3m4s\n", + " 33550K .......... .......... .......... .......... .......... 26% 412K 3m4s\n", + " 33600K .......... .......... .......... .......... .......... 26% 999K 3m4s\n", + " 33650K .......... .......... .......... .......... .......... 26% 415K 3m4s\n", + " 33700K .......... .......... .......... .......... .......... 26% 1.07M 3m4s\n", + " 33750K .......... .......... .......... .......... .......... 26% 405K 3m4s\n", + " 33800K .......... .......... .......... .......... .......... 26% 1.08M 3m3s\n", + " 33850K .......... .......... .......... .......... .......... 26% 403K 3m3s\n", + " 33900K .......... .......... .......... .......... .......... 26% 1.01M 3m3s\n", + " 33950K .......... .......... .......... .......... .......... 26% 409K 3m3s\n", + " 34000K .......... .......... .......... .......... .......... 26% 1.02M 3m3s\n", + " 34050K .......... .......... .......... .......... .......... 26% 426K 3m3s\n", + " 34100K .......... .......... .......... .......... .......... 26% 941K 3m3s\n", + " 34150K .......... .......... .......... .......... .......... 26% 414K 3m3s\n", + " 34200K .......... .......... .......... .......... .......... 26% 1.04M 3m2s\n", + " 34250K .......... .......... .......... .......... .......... 26% 410K 3m2s\n", + " 34300K .......... .......... .......... .......... .......... 26% 1.04M 3m2s\n", + " 34350K .......... .......... .......... .......... .......... 26% 408K 3m2s\n", + " 34400K .......... .......... .......... .......... .......... 26% 1.04M 3m2s\n", + " 34450K .......... .......... .......... .......... .......... 26% 413K 3m2s\n", + " 34500K .......... .......... .......... .......... .......... 26% 1008K 3m2s\n", + " 34550K .......... .......... .......... .......... .......... 26% 421K 3m2s\n", + " 34600K .......... .......... .......... .......... .......... 26% 994K 3m1s\n", + " 34650K .......... .......... .......... .......... .......... 26% 421K 3m1s\n", + " 34700K .......... .......... .......... .......... .......... 27% 963K 3m1s\n", + " 34750K .......... .......... .......... .......... .......... 27% 429K 3m1s\n", + " 34800K .......... .......... .......... .......... .......... 27% 943K 3m1s\n", + " 34850K .......... .......... .......... .......... .......... 27% 432K 3m1s\n", + " 34900K .......... .......... .......... .......... .......... 27% 904K 3m1s\n", + " 34950K .......... .......... .......... .......... .......... 27% 424K 3m0s\n", + " 35000K .......... .......... .......... .......... .......... 27% 7.49M 3m0s\n", + " 35050K .......... .......... .......... .......... .......... 27% 304K 3m0s\n", + " 35100K .......... .......... .......... .......... .......... 27% 5.58M 3m0s\n", + " 35150K .......... .......... .......... .......... .......... 27% 312K 3m0s\n", + " 35200K .......... .......... .......... .......... .......... 27% 4.79M 3m0s\n", + " 35250K .......... .......... .......... .......... .......... 27% 319K 3m0s\n", + " 35300K .......... .......... .......... .......... .......... 27% 3.57M 2m59s\n", + " 35350K .......... .......... .......... .......... .......... 27% 320K 2m59s\n", + " 35400K .......... .......... .......... .......... .......... 27% 3.21M 2m59s\n", + " 35450K .......... .......... .......... .......... .......... 27% 324K 2m59s\n", + " 35500K .......... .......... .......... .......... .......... 27% 3.20M 2m59s\n", + " 35550K .......... .......... .......... .......... .......... 27% 326K 2m59s\n", + " 35600K .......... .......... .......... .......... .......... 27% 3.55M 2m59s\n", + " 35650K .......... .......... .......... .......... .......... 27% 319K 2m59s\n", + " 35700K .......... .......... .......... .......... .......... 27% 4.49M 2m58s\n", + " 35750K .......... .......... .......... .......... .......... 27% 316K 2m58s\n", + " 35800K .......... .......... .......... .......... .......... 27% 4.98M 2m58s\n", + " 35850K .......... .......... .......... .......... .......... 27% 316K 2m58s\n", + " 35900K .......... .......... .......... .......... .......... 27% 4.02M 2m58s\n", + " 35950K .......... .......... .......... .......... .......... 27% 321K 2m58s\n", + " 36000K .......... .......... .......... .......... .......... 28% 4.17M 2m58s\n", + " 36050K .......... .......... .......... .......... .......... 28% 316K 2m58s\n", + " 36100K .......... .......... .......... .......... .......... 28% 4.21M 2m57s\n", + " 36150K .......... .......... .......... .......... .......... 28% 315K 2m57s\n", + " 36200K .......... .......... .......... .......... .......... 28% 4.05M 2m57s\n", + " 36250K .......... .......... .......... .......... .......... 28% 320K 2m57s\n", + " 36300K .......... .......... .......... .......... .......... 28% 3.86M 2m57s\n", + " 36350K .......... .......... .......... .......... .......... 28% 311K 2m57s\n", + " 36400K .......... .......... .......... .......... .......... 28% 4.14M 2m57s\n", + " 36450K .......... .......... .......... .......... .......... 28% 327K 2m57s\n", + " 36500K .......... .......... .......... .......... .......... 28% 3.28M 2m56s\n", + " 36550K .......... .......... .......... .......... .......... 28% 327K 2m56s\n", + " 36600K .......... .......... .......... .......... .......... 28% 3.33M 2m56s\n", + " 36650K .......... .......... .......... .......... .......... 28% 321K 2m56s\n", + " 36700K .......... .......... .......... .......... .......... 28% 4.14M 2m56s\n", + " 36750K .......... .......... .......... .......... .......... 28% 265K 2m56s\n", + " 36800K .......... .......... .......... .......... .......... 28% 7.12M 2m56s\n", + " 36850K .......... .......... .......... .......... .......... 28% 226K 2m56s\n", + " 36900K .......... .......... .......... .......... .......... 28% 111M 2m56s\n", + " 36950K .......... .......... .......... .......... .......... 28% 44.7K 2m58s\n", + " 37000K .......... .......... .......... .......... .......... 28% 292K 2m58s\n", + " 37050K .......... .......... .......... .......... .......... 28% 517K 2m58s\n", + " 37100K .......... .......... .......... .......... .......... 28% 642K 2m58s\n", + " 37150K .......... .......... .......... .......... .......... 28% 316K 2m58s\n", + " 37200K .......... .......... .......... .......... .......... 28% 2.45M 2m58s\n", + " 37250K .......... .......... .......... .......... .......... 28% 300K 2m58s\n", + " 37300K .......... .......... .......... .......... .......... 29% 364K 2m58s\n", + " 37350K .......... .......... .......... .......... .......... 29% 1.33M 2m57s\n", + " 37400K .......... .......... .......... .......... .......... 29% 323K 2m58s\n", + " 37450K .......... .......... .......... .......... .......... 29% 2.10M 2m57s\n", + " 37500K .......... .......... .......... .......... .......... 29% 319K 2m57s\n", + " 37550K .......... .......... .......... .......... .......... 29% 381K 2m57s\n", + " 37600K .......... .......... .......... .......... .......... 29% 1024K 2m57s\n", + " 37650K .......... .......... .......... .......... .......... 29% 368K 2m57s\n", + " 37700K .......... .......... .......... .......... .......... 29% 1.34M 2m57s\n", + " 37750K .......... .......... .......... .......... .......... 29% 332K 2m57s\n", + " 37800K .......... .......... .......... .......... .......... 29% 675K 2m57s\n", + " 37850K .......... .......... .......... .......... .......... 29% 483K 2m57s\n", + " 37900K .......... .......... .......... .......... .......... 29% 410K 2m57s\n", + " 37950K .......... .......... .......... .......... .......... 29% 1.01M 2m56s\n", + " 38000K .......... .......... .......... .......... .......... 29% 357K 2m56s\n", + " 38050K .......... .......... .......... .......... .......... 29% 1.54M 2m56s\n", + " 38100K .......... .......... .......... .......... .......... 29% 339K 2m56s\n", + " 38150K .......... .......... .......... .......... .......... 29% 1.57M 2m56s\n", + " 38200K .......... .......... .......... .......... .......... 29% 336K 2m56s\n", + " 38250K .......... .......... .......... .......... .......... 29% 1.87M 2m56s\n", + " 38300K .......... .......... .......... .......... .......... 29% 337K 2m56s\n", + " 38350K .......... .......... .......... .......... .......... 29% 2.17M 2m55s\n", + " 38400K .......... .......... .......... .......... .......... 29% 339K 2m55s\n", + " 38450K .......... .......... .......... .......... .......... 29% 831K 2m55s\n", + " 38500K .......... .......... .......... .......... .......... 29% 441K 2m55s\n", + " 38550K .......... .......... .......... .......... .......... 30% 803K 2m55s\n", + " 38600K .......... .......... .......... .......... .......... 30% 472K 2m55s\n", + " 38650K .......... .......... .......... .......... .......... 30% 742K 2m55s\n", + " 38700K .......... .......... .......... .......... .......... 30% 477K 2m55s\n", + " 38750K .......... .......... .......... .......... .......... 30% 784K 2m54s\n", + " 38800K .......... .......... .......... .......... .......... 30% 455K 2m54s\n", + " 38850K .......... .......... .......... .......... .......... 30% 839K 2m54s\n", + " 38900K .......... .......... .......... .......... .......... 30% 446K 2m54s\n", + " 38950K .......... .......... .......... .......... .......... 30% 794K 2m54s\n", + " 39000K .......... .......... .......... .......... .......... 30% 479K 2m54s\n", + " 39050K .......... .......... .......... .......... .......... 30% 797K 2m54s\n", + " 39100K .......... .......... .......... .......... .......... 30% 490K 2m54s\n", + " 39150K .......... .......... .......... .......... .......... 30% 1.83M 2m53s\n", + " 39200K .......... .......... .......... .......... .......... 30% 363K 2m53s\n", + " 39250K .......... .......... .......... .......... .......... 30% 1.47M 2m53s\n", + " 39300K .......... .......... .......... .......... .......... 30% 375K 2m53s\n", + " 39350K .......... .......... .......... .......... .......... 30% 1.35M 2m53s\n", + " 39400K .......... .......... .......... .......... .......... 30% 426K 2m53s\n", + " 39450K .......... .......... .......... .......... .......... 30% 999K 2m53s\n", + " 39500K .......... .......... .......... .......... .......... 30% 400K 2m53s\n", + " 39550K .......... .......... .......... .......... .......... 30% 1.40M 2m52s\n", + " 39600K .......... .......... .......... .......... .......... 30% 365K 2m52s\n", + " 39650K .......... .......... .......... .......... .......... 30% 1.67M 2m52s\n", + " 39700K .......... .......... .......... .......... .......... 30% 482K 2m52s\n", + " 39750K .......... .......... .......... .......... .......... 30% 779K 2m52s\n", + " 39800K .......... .......... .......... .......... .......... 30% 343K 2m52s\n", + " 39850K .......... .......... .......... .......... .......... 31% 2.22M 2m52s\n", + " 39900K .......... .......... .......... .......... .......... 31% 340K 2m52s\n", + " 39950K .......... .......... .......... .......... .......... 31% 2.09M 2m51s\n", + " 40000K .......... .......... .......... .......... .......... 31% 1.25M 2m51s\n", + " 40050K .......... .......... .......... .......... .......... 31% 373K 2m51s\n", + " 40100K .......... .......... .......... .......... .......... 31% 1.27M 2m51s\n", + " 40150K .......... .......... .......... .......... .......... 31% 379K 2m51s\n", + " 40200K .......... .......... .......... .......... .......... 31% 1.29M 2m51s\n", + " 40250K .......... .......... .......... .......... .......... 31% 386K 2m51s\n", + " 40300K .......... .......... .......... .......... .......... 31% 1.08M 2m50s\n", + " 40350K .......... .......... .......... .......... .......... 31% 408K 2m50s\n", + " 40400K .......... .......... .......... .......... .......... 31% 1.04M 2m50s\n", + " 40450K .......... .......... .......... .......... .......... 31% 409K 2m50s\n", + " 40500K .......... .......... .......... .......... .......... 31% 1.04M 2m50s\n", + " 40550K .......... .......... .......... .......... .......... 31% 407K 2m50s\n", + " 40600K .......... .......... .......... .......... .......... 31% 996K 2m50s\n", + " 40650K .......... .......... .......... .......... .......... 31% 422K 2m50s\n", + " 40700K .......... .......... .......... .......... .......... 31% 983K 2m49s\n", + " 40750K .......... .......... .......... .......... .......... 31% 424K 2m49s\n", + " 40800K .......... .......... .......... .......... .......... 31% 985K 2m49s\n", + " 40850K .......... .......... .......... .......... .......... 31% 421K 2m49s\n", + " 40900K .......... .......... .......... .......... .......... 31% 985K 2m49s\n", + " 40950K .......... .......... .......... .......... .......... 31% 412K 2m49s\n", + " 41000K .......... .......... .......... .......... .......... 31% 1004K 2m49s\n", + " 41050K .......... .......... .......... .......... .......... 31% 397K 2m49s\n", + " 41100K .......... .......... .......... .......... .......... 31% 1.04M 2m49s\n", + " 41150K .......... .......... .......... .......... .......... 32% 393K 2m48s\n", + " 41200K .......... .......... .......... .......... .......... 32% 7.73M 2m48s\n", + " 41250K .......... .......... .......... .......... .......... 32% 303K 2m48s\n", + " 41300K .......... .......... .......... .......... .......... 32% 5.64M 2m48s\n", + " 41350K .......... .......... .......... .......... .......... 32% 310K 2m48s\n", + " 41400K .......... .......... .......... .......... .......... 32% 6.38M 2m48s\n", + " 41450K .......... .......... .......... .......... .......... 32% 308K 2m48s\n", + " 41500K .......... .......... .......... .......... .......... 32% 6.76M 2m47s\n", + " 41550K .......... .......... .......... .......... .......... 32% 307K 2m48s\n", + " 41600K .......... .......... .......... .......... .......... 32% 6.08M 2m47s\n", + " 41650K .......... .......... .......... .......... .......... 32% 307K 2m47s\n", + " 41700K .......... .......... .......... .......... .......... 32% 6.25M 2m47s\n", + " 41750K .......... .......... .......... .......... .......... 32% 248K 2m47s\n", + " 41800K .......... .......... .......... .......... .......... 32% 6.94M 2m47s\n", + " 41850K .......... .......... .......... .......... .......... 32% 289K 2m47s\n", + " 41900K .......... .......... .......... .......... .......... 32% 6.96M 2m47s\n", + " 41950K .......... .......... .......... .......... .......... 32% 149K 2m47s\n", + " 42000K .......... .......... .......... .......... .......... 32% 85.8M 2m47s\n", + " 42050K .......... .......... .......... .......... .......... 32% 50.9K 2m48s\n", + " 42100K .......... .......... .......... .......... .......... 32% 147K 2m49s\n", + " 42150K .......... .......... .......... .......... .......... 32% 4.93M 2m49s\n", + " 42200K .......... .......... .......... .......... .......... 32% 299K 2m49s\n", + " 42250K .......... .......... .......... .......... .......... 32% 298K 2m49s\n", + " 42300K .......... .......... .......... .......... .......... 32% 310K 2m49s\n", + " 42350K .......... .......... .......... .......... .......... 32% 2.65M 2m48s\n", + " 42400K .......... .......... .......... .......... .......... 32% 290K 2m49s\n", + " 42450K .......... .......... .......... .......... .......... 33% 333K 2m49s\n", + " 42500K .......... .......... .......... .......... .......... 33% 315K 2m49s\n", + " 42550K .......... .......... .......... .......... .......... 33% 1.88M 2m48s\n", + " 42600K .......... .......... .......... .......... .......... 33% 309K 2m48s\n", + " 42650K .......... .......... .......... .......... .......... 33% 325K 2m48s\n", + " 42700K .......... .......... .......... .......... .......... 33% 1.77M 2m48s\n", + " 42750K .......... .......... .......... .......... .......... 33% 306K 2m48s\n", + " 42800K .......... .......... .......... .......... .......... 33% 343K 2m48s\n", + " 42850K .......... .......... .......... .......... .......... 33% 1.61M 2m48s\n", + " 42900K .......... .......... .......... .......... .......... 33% 308K 2m48s\n", + " 42950K .......... .......... .......... .......... .......... 33% 337K 2m48s\n", + " 43000K .......... .......... .......... .......... .......... 33% 1.66M 2m48s\n", + " 43050K .......... .......... .......... .......... .......... 33% 337K 2m48s\n", + " 43100K .......... .......... .......... .......... .......... 33% 331K 2m48s\n", + " 43150K .......... .......... .......... .......... .......... 33% 1.56M 2m47s\n", + " 43200K .......... .......... .......... .......... .......... 33% 323K 2m47s\n", + " 43250K .......... .......... .......... .......... .......... 33% 346K 2m47s\n", + " 43300K .......... .......... .......... .......... .......... 33% 1.35M 2m47s\n", + " 43350K .......... .......... .......... .......... .......... 33% 333K 2m47s\n", + " 43400K .......... .......... .......... .......... .......... 33% 1.62M 2m47s\n", + " 43450K .......... .......... .......... .......... .......... 33% 337K 2m47s\n", + " 43500K .......... .......... .......... .......... .......... 33% 354K 2m47s\n", + " 43550K .......... .......... .......... .......... .......... 33% 1.49M 2m47s\n", + " 43600K .......... .......... .......... .......... .......... 33% 337K 2m47s\n", + " 43650K .......... .......... .......... .......... .......... 33% 1.36M 2m47s\n", + " 43700K .......... .......... .......... .......... .......... 34% 333K 2m47s\n", + " 43750K .......... .......... .......... .......... .......... 34% 1.96M 2m46s\n", + " 43800K .......... .......... .......... .......... .......... 34% 330K 2m46s\n", + " 43850K .......... .......... .......... .......... .......... 34% 364K 2m46s\n", + " 43900K .......... .......... .......... .......... .......... 34% 1.44M 2m46s\n", + " 43950K .......... .......... .......... .......... .......... 34% 355K 2m46s\n", + " 44000K .......... .......... .......... .......... .......... 34% 1.62M 2m46s\n", + " 44050K .......... .......... .......... .......... .......... 34% 350K 2m46s\n", + " 44100K .......... .......... .......... .......... .......... 34% 1.78M 2m46s\n", + " 44150K .......... .......... .......... .......... .......... 34% 323K 2m46s\n", + " 44200K .......... .......... .......... .......... .......... 34% 1.66M 2m45s\n", + " 44250K .......... .......... .......... .......... .......... 34% 348K 2m45s\n", + " 44300K .......... .......... .......... .......... .......... 34% 1.82M 2m45s\n", + " 44350K .......... .......... .......... .......... .......... 34% 340K 2m45s\n", + " 44400K .......... .......... .......... .......... .......... 34% 390K 2m45s\n", + " 44450K .......... .......... .......... .......... .......... 34% 1.06M 2m45s\n", + " 44500K .......... .......... .......... .......... .......... 34% 391K 2m45s\n", + " 44550K .......... .......... .......... .......... .......... 34% 1.16M 2m45s\n", + " 44600K .......... .......... .......... .......... .......... 34% 397K 2m45s\n", + " 44650K .......... .......... .......... .......... .......... 34% 1.01M 2m44s\n", + " 44700K .......... .......... .......... .......... .......... 34% 408K 2m44s\n", + " 44750K .......... .......... .......... .......... .......... 34% 1.07M 2m44s\n", + " 44800K .......... .......... .......... .......... .......... 34% 404K 2m44s\n", + " 44850K .......... .......... .......... .......... .......... 34% 1.14M 2m44s\n", + " 44900K .......... .......... .......... .......... .......... 34% 395K 2m44s\n", + " 44950K .......... .......... .......... .......... .......... 34% 1.11M 2m44s\n", + " 45000K .......... .......... .......... .......... .......... 35% 407K 2m44s\n", + " 45050K .......... .......... .......... .......... .......... 35% 1.18M 2m43s\n", + " 45100K .......... .......... .......... .......... .......... 35% 417K 2m43s\n", + " 45150K .......... .......... .......... .......... .......... 35% 1.09M 2m43s\n", + " 45200K .......... .......... .......... .......... .......... 35% 420K 2m43s\n", + " 45250K .......... .......... .......... .......... .......... 35% 1.00M 2m43s\n", + " 45300K .......... .......... .......... .......... .......... 35% 1.24M 2m43s\n", + " 45350K .......... .......... .......... .......... .......... 35% 435K 2m43s\n", + " 45400K .......... .......... .......... .......... .......... 35% 940K 2m42s\n", + " 45450K .......... .......... .......... .......... .......... 35% 426K 2m42s\n", + " 45500K .......... .......... .......... .......... .......... 35% 954K 2m42s\n", + " 45550K .......... .......... .......... .......... .......... 35% 442K 2m42s\n", + " 45600K .......... .......... .......... .......... .......... 35% 875K 2m42s\n", + " 45650K .......... .......... .......... .......... .......... 35% 453K 2m42s\n", + " 45700K .......... .......... .......... .......... .......... 35% 858K 2m42s\n", + " 45750K .......... .......... .......... .......... .......... 35% 454K 2m42s\n", + " 45800K .......... .......... .......... .......... .......... 35% 856K 2m42s\n", + " 45850K .......... .......... .......... .......... .......... 35% 449K 2m41s\n", + " 45900K .......... .......... .......... .......... .......... 35% 842K 2m41s\n", + " 45950K .......... .......... .......... .......... .......... 35% 447K 2m41s\n", + " 46000K .......... .......... .......... .......... .......... 35% 1002K 2m41s\n", + " 46050K .......... .......... .......... .......... .......... 35% 411K 2m41s\n", + " 46100K .......... .......... .......... .......... .......... 35% 1009K 2m41s\n", + " 46150K .......... .......... .......... .......... .......... 35% 410K 2m41s\n", + " 46200K .......... .......... .......... .......... .......... 35% 1.06M 2m41s\n", + " 46250K .......... .......... .......... .......... .......... 35% 403K 2m40s\n", + " 46300K .......... .......... .......... .......... .......... 36% 1.02M 2m40s\n", + " 46350K .......... .......... .......... .......... .......... 36% 374K 2m40s\n", + " 46400K .......... .......... .......... .......... .......... 36% 1.35M 2m40s\n", + " 46450K .......... .......... .......... .......... .......... 36% 317K 2m40s\n", + " 46500K .......... .......... .......... .......... .......... 36% 891K 2m40s\n", + " 46550K .......... .......... .......... .......... .......... 36% 434K 2m40s\n", + " 46600K .......... .......... .......... .......... .......... 36% 875K 2m40s\n", + " 46650K .......... .......... .......... .......... .......... 36% 448K 2m40s\n", + " 46700K .......... .......... .......... .......... .......... 36% 890K 2m39s\n", + " 46750K .......... .......... .......... .......... .......... 36% 443K 2m39s\n", + " 46800K .......... .......... .......... .......... .......... 36% 893K 2m39s\n", + " 46850K .......... .......... .......... .......... .......... 36% 444K 2m39s\n", + " 46900K .......... .......... .......... .......... .......... 36% 865K 2m39s\n", + " 46950K .......... .......... .......... .......... .......... 36% 4.43M 2m39s\n", + " 47000K .......... .......... .......... .......... .......... 36% 318K 2m39s\n", + " 47050K .......... .......... .......... .......... .......... 36% 449K 2m39s\n", + " 47100K .......... .......... .......... .......... .......... 36% 846K 2m38s\n", + " 47150K .......... .......... .......... .......... .......... 36% 2.56M 2m38s\n", + " 47200K .......... .......... .......... .......... .......... 36% 328K 2m38s\n", + " 47250K .......... .......... .......... .......... .......... 36% 3.15M 2m38s\n", + " 47300K .......... .......... .......... .......... .......... 36% 325K 2m38s\n", + " 47350K .......... .......... .......... .......... .......... 36% 1.79M 2m38s\n", + " 47400K .......... .......... .......... .......... .......... 36% 346K 2m38s\n", + " 47450K .......... .......... .......... .......... .......... 36% 1.94M 2m38s\n", + " 47500K .......... .......... .......... .......... .......... 36% 350K 2m38s\n", + " 47550K .......... .......... .......... .......... .......... 36% 1.74M 2m37s\n", + " 47600K .......... .......... .......... .......... .......... 37% 508K 2m37s\n", + " 47650K .......... .......... .......... .......... .......... 37% 674K 2m37s\n", + " 47700K .......... .......... .......... .......... .......... 37% 527K 2m37s\n", + " 47750K .......... .......... .......... .......... .......... 37% 674K 2m37s\n", + " 47800K .......... .......... .......... .......... .......... 37% 504K 2m37s\n", + " 47850K .......... .......... .......... .......... .......... 37% 717K 2m37s\n", + " 47900K .......... .......... .......... .......... .......... 37% 496K 2m37s\n", + " 47950K .......... .......... .......... .......... .......... 37% 730K 2m36s\n", + " 48000K .......... .......... .......... .......... .......... 37% 501K 2m36s\n", + " 48050K .......... .......... .......... .......... .......... 37% 718K 2m36s\n", + " 48100K .......... .......... .......... .......... .......... 37% 474K 2m36s\n", + " 48150K .......... .......... .......... .......... .......... 37% 773K 2m36s\n", + " 48200K .......... .......... .......... .......... .......... 37% 459K 2m36s\n", + " 48250K .......... .......... .......... .......... .......... 37% 835K 2m36s\n", + " 48300K .......... .......... .......... .......... .......... 37% 462K 2m36s\n", + " 48350K .......... .......... .......... .......... .......... 37% 800K 2m35s\n", + " 48400K .......... .......... .......... .......... .......... 37% 442K 2m35s\n", + " 48450K .......... .......... .......... .......... .......... 37% 903K 2m35s\n", + " 48500K .......... .......... .......... .......... .......... 37% 440K 2m35s\n", + " 48550K .......... .......... .......... .......... .......... 37% 897K 2m35s\n", + " 48600K .......... .......... .......... .......... .......... 37% 441K 2m35s\n", + " 48650K .......... .......... .......... .......... .......... 37% 901K 2m35s\n", + " 48700K .......... .......... .......... .......... .......... 37% 439K 2m35s\n", + " 48750K .......... .......... .......... .......... .......... 37% 839K 2m35s\n", + " 48800K .......... .......... .......... .......... .......... 37% 453K 2m34s\n", + " 48850K .......... .......... .......... .......... .......... 38% 886K 2m34s\n", + " 48900K .......... .......... .......... .......... .......... 38% 432K 2m34s\n", + " 48950K .......... .......... .......... .......... .......... 38% 939K 2m34s\n", + " 49000K .......... .......... .......... .......... .......... 38% 431K 2m34s\n", + " 49050K .......... .......... .......... .......... .......... 38% 951K 2m34s\n", + " 49100K .......... .......... .......... .......... .......... 38% 415K 2m34s\n", + " 49150K .......... .......... .......... .......... .......... 38% 955K 2m34s\n", + " 49200K .......... .......... .......... .......... .......... 38% 423K 2m34s\n", + " 49250K .......... .......... .......... .......... .......... 38% 988K 2m33s\n", + " 49300K .......... .......... .......... .......... .......... 38% 398K 2m33s\n", + " 49350K .......... .......... .......... .......... .......... 38% 1.13M 2m33s\n", + " 49400K .......... .......... .......... .......... .......... 38% 407K 2m33s\n", + " 49450K .......... .......... .......... .......... .......... 38% 1.06M 2m33s\n", + " 49500K .......... .......... .......... .......... .......... 38% 397K 2m33s\n", + " 49550K .......... .......... .......... .......... .......... 38% 1.54M 2m33s\n", + " 49600K .......... .......... .......... .......... .......... 38% 363K 2m33s\n", + " 49650K .......... .......... .......... .......... .......... 38% 1.68M 2m32s\n", + " 49700K .......... .......... .......... .......... .......... 38% 357K 2m32s\n", + " 49750K .......... .......... .......... .......... .......... 38% 1.65M 2m32s\n", + " 49800K .......... .......... .......... .......... .......... 38% 357K 2m32s\n", + " 49850K .......... .......... .......... .......... .......... 38% 1.45M 2m32s\n", + " 49900K .......... .......... .......... .......... .......... 38% 367K 2m32s\n", + " 49950K .......... .......... .......... .......... .......... 38% 1.53M 2m32s\n", + " 50000K .......... .......... .......... .......... .......... 38% 361K 2m32s\n", + " 50050K .......... .......... .......... .......... .......... 38% 1.12M 2m32s\n", + " 50100K .......... .......... .......... .......... .......... 38% 395K 2m31s\n", + " 50150K .......... .......... .......... .......... .......... 39% 1.53M 2m31s\n", + " 50200K .......... .......... .......... .......... .......... 39% 350K 2m31s\n", + " 50250K .......... .......... .......... .......... .......... 39% 1.94M 2m31s\n", + " 50300K .......... .......... .......... .......... .......... 39% 348K 2m31s\n", + " 50350K .......... .......... .......... .......... .......... 39% 1.87M 2m31s\n", + " 50400K .......... .......... .......... .......... .......... 39% 348K 2m31s\n", + " 50450K .......... .......... .......... .......... .......... 39% 2.03M 2m31s\n", + " 50500K .......... .......... .......... .......... .......... 39% 345K 2m31s\n", + " 50550K .......... .......... .......... .......... .......... 39% 2.10M 2m30s\n", + " 50600K .......... .......... .......... .......... .......... 39% 1.19M 2m30s\n", + " 50650K .......... .......... .......... .......... .......... 39% 391K 2m30s\n", + " 50700K .......... .......... .......... .......... .......... 39% 1.19M 2m30s\n", + " 50750K .......... .......... .......... .......... .......... 39% 395K 2m30s\n", + " 50800K .......... .......... .......... .......... .......... 39% 1.13M 2m30s\n", + " 50850K .......... .......... .......... .......... .......... 39% 390K 2m30s\n", + " 50900K .......... .......... .......... .......... .......... 39% 1.12M 2m29s\n", + " 50950K .......... .......... .......... .......... .......... 39% 391K 2m29s\n", + " 51000K .......... .......... .......... .......... .......... 39% 1.18M 2m29s\n", + " 51050K .......... .......... .......... .......... .......... 39% 391K 2m29s\n", + " 51100K .......... .......... .......... .......... .......... 39% 1.20M 2m29s\n", + " 51150K .......... .......... .......... .......... .......... 39% 379K 2m29s\n", + " 51200K .......... .......... .......... .......... .......... 39% 1.21M 2m29s\n", + " 51250K .......... .......... .......... .......... .......... 39% 392K 2m29s\n", + " 51300K .......... .......... .......... .......... .......... 39% 1.14M 2m29s\n", + " 51350K .......... .......... .......... .......... .......... 39% 398K 2m29s\n", + " 51400K .......... .......... .......... .......... .......... 39% 1.16M 2m28s\n", + " 51450K .......... .......... .......... .......... .......... 40% 384K 2m28s\n", + " 51500K .......... .......... .......... .......... .......... 40% 1.26M 2m28s\n", + " 51550K .......... .......... .......... .......... .......... 40% 381K 2m28s\n", + " 51600K .......... .......... .......... .......... .......... 40% 1.06M 2m28s\n", + " 51650K .......... .......... .......... .......... .......... 40% 402K 2m28s\n", + " 51700K .......... .......... .......... .......... .......... 40% 1.05M 2m28s\n", + " 51750K .......... .......... .......... .......... .......... 40% 405K 2m28s\n", + " 51800K .......... .......... .......... .......... .......... 40% 1.10M 2m27s\n", + " 51850K .......... .......... .......... .......... .......... 40% 390K 2m27s\n", + " 51900K .......... .......... .......... .......... .......... 40% 1.17M 2m27s\n", + " 51950K .......... .......... .......... .......... .......... 40% 424K 2m27s\n", + " 52000K .......... .......... .......... .......... .......... 40% 911K 2m27s\n", + " 52050K .......... .......... .......... .......... .......... 40% 429K 2m27s\n", + " 52100K .......... .......... .......... .......... .......... 40% 941K 2m27s\n", + " 52150K .......... .......... .......... .......... .......... 40% 440K 2m27s\n", + " 52200K .......... .......... .......... .......... .......... 40% 868K 2m27s\n", + " 52250K .......... .......... .......... .......... .......... 40% 417K 2m27s\n", + " 52300K .......... .......... .......... .......... .......... 40% 793K 2m26s\n", + " 52350K .......... .......... .......... .......... .......... 40% 376K 2m26s\n", + " 52400K .......... .......... .......... .......... .......... 40% 933K 2m26s\n", + " 52450K .......... .......... .......... .......... .......... 40% 418K 2m26s\n", + " 52500K .......... .......... .......... .......... .......... 40% 3.42M 2m26s\n", + " 52550K .......... .......... .......... .......... .......... 40% 323K 2m26s\n", + " 52600K .......... .......... .......... .......... .......... 40% 4.59M 2m26s\n", + " 52650K .......... .......... .......... .......... .......... 40% 316K 2m26s\n", + " 52700K .......... .......... .......... .......... .......... 41% 4.08M 2m25s\n", + " 52750K .......... .......... .......... .......... .......... 41% 317K 2m25s\n", + " 52800K .......... .......... .......... .......... .......... 41% 4.11M 2m25s\n", + " 52850K .......... .......... .......... .......... .......... 41% 318K 2m25s\n", + " 52900K .......... .......... .......... .......... .......... 41% 4.34M 2m25s\n", + " 52950K .......... .......... .......... .......... .......... 41% 317K 2m25s\n", + " 53000K .......... .......... .......... .......... .......... 41% 5.27M 2m25s\n", + " 53050K .......... .......... .......... .......... .......... 41% 317K 2m25s\n", + " 53100K .......... .......... .......... .......... .......... 41% 4.78M 2m25s\n", + " 53150K .......... .......... .......... .......... .......... 41% 314K 2m25s\n", + " 53200K .......... .......... .......... .......... .......... 41% 5.37M 2m24s\n", + " 53250K .......... .......... .......... .......... .......... 41% 313K 2m24s\n", + " 53300K .......... .......... .......... .......... .......... 41% 7.22M 2m24s\n", + " 53350K .......... .......... .......... .......... .......... 41% 308K 2m24s\n", + " 53400K .......... .......... .......... .......... .......... 41% 6.34M 2m24s\n", + " 53450K .......... .......... .......... .......... .......... 41% 311K 2m24s\n", + " 53500K .......... .......... .......... .......... .......... 41% 5.06M 2m24s\n", + " 53550K .......... .......... .......... .......... .......... 41% 311K 2m24s\n", + " 53600K .......... .......... .......... .......... .......... 41% 5.54M 2m23s\n", + " 53650K .......... .......... .......... .......... .......... 41% 311K 2m23s\n", + " 53700K .......... .......... .......... .......... .......... 41% 4.63M 2m23s\n", + " 53750K .......... .......... .......... .......... .......... 41% 311K 2m23s\n", + " 53800K .......... .......... .......... .......... .......... 41% 5.87M 2m23s\n", + " 53850K .......... .......... .......... .......... .......... 41% 310K 2m23s\n", + " 53900K .......... .......... .......... .......... .......... 41% 5.74M 2m23s\n", + " 53950K .......... .......... .......... .......... .......... 41% 311K 2m23s\n", + " 54000K .......... .......... .......... .......... .......... 42% 4.95M 2m23s\n", + " 54050K .......... .......... .......... .......... .......... 42% 314K 2m23s\n", + " 54100K .......... .......... .......... .......... .......... 42% 6.31M 2m22s\n", + " 54150K .......... .......... .......... .......... .......... 42% 308K 2m22s\n", + " 54200K .......... .......... .......... .......... .......... 42% 6.17M 2m22s\n", + " 54250K .......... .......... .......... .......... .......... 42% 308K 2m22s\n", + " 54300K .......... .......... .......... .......... .......... 42% 5.93M 2m22s\n", + " 54350K .......... .......... .......... .......... .......... 42% 872K 2m22s\n", + " 54400K .......... .......... .......... .......... .......... 42% 449K 2m22s\n", + " 54450K .......... .......... .......... .......... .......... 42% 871K 2m22s\n", + " 54500K .......... .......... .......... .......... .......... 42% 440K 2m21s\n", + " 54550K .......... .......... .......... .......... .......... 42% 870K 2m21s\n", + " 54600K .......... .......... .......... .......... .......... 42% 450K 2m21s\n", + " 54650K .......... .......... .......... .......... .......... 42% 877K 2m21s\n", + " 54700K .......... .......... .......... .......... .......... 42% 449K 2m21s\n", + " 54750K .......... .......... .......... .......... .......... 42% 835K 2m21s\n", + " 54800K .......... .......... .......... .......... .......... 42% 445K 2m21s\n", + " 54850K .......... .......... .......... .......... .......... 42% 832K 2m21s\n", + " 54900K .......... .......... .......... .......... .......... 42% 453K 2m21s\n", + " 54950K .......... .......... .......... .......... .......... 42% 871K 2m20s\n", + " 55000K .......... .......... .......... .......... .......... 42% 448K 2m20s\n", + " 55050K .......... .......... .......... .......... .......... 42% 865K 2m20s\n", + " 55100K .......... .......... .......... .......... .......... 42% 450K 2m20s\n", + " 55150K .......... .......... .......... .......... .......... 42% 884K 2m20s\n", + " 55200K .......... .......... .......... .......... .......... 42% 442K 2m20s\n", + " 55250K .......... .......... .......... .......... .......... 42% 870K 2m20s\n", + " 55300K .......... .......... .......... .......... .......... 43% 441K 2m20s\n", + " 55350K .......... .......... .......... .......... .......... 43% 905K 2m20s\n", + " 55400K .......... .......... .......... .......... .......... 43% 433K 2m19s\n", + " 55450K .......... .......... .......... .......... .......... 43% 919K 2m19s\n", + " 55500K .......... .......... .......... .......... .......... 43% 436K 2m19s\n", + " 55550K .......... .......... .......... .......... .......... 43% 943K 2m19s\n", + " 55600K .......... .......... .......... .......... .......... 43% 433K 2m19s\n", + " 55650K .......... .......... .......... .......... .......... 43% 926K 2m19s\n", + " 55700K .......... .......... .......... .......... .......... 43% 434K 2m19s\n", + " 55750K .......... .......... .......... .......... .......... 43% 970K 2m19s\n", + " 55800K .......... .......... .......... .......... .......... 43% 428K 2m19s\n", + " 55850K .......... .......... .......... .......... .......... 43% 939K 2m18s\n", + " 55900K .......... .......... .......... .......... .......... 43% 433K 2m18s\n", + " 55950K .......... .......... .......... .......... .......... 43% 927K 2m18s\n", + " 56000K .......... .......... .......... .......... .......... 43% 420K 2m18s\n", + " 56050K .......... .......... .......... .......... .......... 43% 1.01M 2m18s\n", + " 56100K .......... .......... .......... .......... .......... 43% 420K 2m18s\n", + " 56150K .......... .......... .......... .......... .......... 43% 980K 2m18s\n", + " 56200K .......... .......... .......... .......... .......... 43% 416K 2m18s\n", + " 56250K .......... .......... .......... .......... .......... 43% 1.03M 2m18s\n", + " 56300K .......... .......... .......... .......... .......... 43% 411K 2m18s\n", + " 56350K .......... .......... .......... .......... .......... 43% 1.02M 2m17s\n", + " 56400K .......... .......... .......... .......... .......... 43% 416K 2m17s\n", + " 56450K .......... .......... .......... .......... .......... 43% 1.01M 2m17s\n", + " 56500K .......... .......... .......... .......... .......... 43% 414K 2m17s\n", + " 56550K .......... .......... .......... .......... .......... 43% 1.07M 2m17s\n", + " 56600K .......... .......... .......... .......... .......... 44% 405K 2m17s\n", + " 56650K .......... .......... .......... .......... .......... 44% 1.06M 2m17s\n", + " 56700K .......... .......... .......... .......... .......... 44% 400K 2m17s\n", + " 56750K .......... .......... .......... .......... .......... 44% 989K 2m16s\n", + " 56800K .......... .......... .......... .......... .......... 44% 426K 2m16s\n", + " 56850K .......... .......... .......... .......... .......... 44% 1003K 2m16s\n", + " 56900K .......... .......... .......... .......... .......... 44% 421K 2m16s\n", + " 56950K .......... .......... .......... .......... .......... 44% 975K 2m16s\n", + " 57000K .......... .......... .......... .......... .......... 44% 420K 2m16s\n", + " 57050K .......... .......... .......... .......... .......... 44% 1.01M 2m16s\n", + " 57100K .......... .......... .......... .......... .......... 44% 415K 2m16s\n", + " 57150K .......... .......... .......... .......... .......... 44% 1.00M 2m16s\n", + " 57200K .......... .......... .......... .......... .......... 44% 420K 2m16s\n", + " 57250K .......... .......... .......... .......... .......... 44% 1015K 2m15s\n", + " 57300K .......... .......... .......... .......... .......... 44% 412K 2m15s\n", + " 57350K .......... .......... .......... .......... .......... 44% 1.04M 2m15s\n", + " 57400K .......... .......... .......... .......... .......... 44% 417K 2m15s\n", + " 57450K .......... .......... .......... .......... .......... 44% 962K 2m15s\n", + " 57500K .......... .......... .......... .......... .......... 44% 421K 2m15s\n", + " 57550K .......... .......... .......... .......... .......... 44% 988K 2m15s\n", + " 57600K .......... .......... .......... .......... .......... 44% 423K 2m15s\n", + " 57650K .......... .......... .......... .......... .......... 44% 984K 2m15s\n", + " 57700K .......... .......... .......... .......... .......... 44% 421K 2m14s\n", + " 57750K .......... .......... .......... .......... .......... 44% 988K 2m14s\n", + " 57800K .......... .......... .......... .......... .......... 44% 426K 2m14s\n", + " 57850K .......... .......... .......... .......... .......... 45% 3.57M 2m14s\n", + " 57900K .......... .......... .......... .......... .......... 45% 325K 2m14s\n", + " 57950K .......... .......... .......... .......... .......... 45% 3.15M 2m14s\n", + " 58000K .......... .......... .......... .......... .......... 45% 326K 2m14s\n", + " 58050K .......... .......... .......... .......... .......... 45% 3.45M 2m14s\n", + " 58100K .......... .......... .......... .......... .......... 45% 324K 2m14s\n", + " 58150K .......... .......... .......... .......... .......... 45% 910K 2m13s\n", + " 58200K .......... .......... .......... .......... .......... 45% 438K 2m13s\n", + " 58250K .......... .......... .......... .......... .......... 45% 676K 2m13s\n", + " 58300K .......... .......... .......... .......... .......... 45% 499K 2m13s\n", + " 58350K .......... .......... .......... .......... .......... 45% 618K 2m13s\n", + " 58400K .......... .......... .......... .......... .......... 45% 546K 2m13s\n", + " 58450K .......... .......... .......... .......... .......... 45% 1.23M 2m13s\n", + " 58500K .......... .......... .......... .......... .......... 45% 382K 2m13s\n", + " 58550K .......... .......... .......... .......... .......... 45% 1.41M 2m13s\n", + " 58600K .......... .......... .......... .......... .......... 45% 366K 2m13s\n", + " 58650K .......... .......... .......... .......... .......... 45% 1.38M 2m12s\n", + " 58700K .......... .......... .......... .......... .......... 45% 374K 2m12s\n", + " 58750K .......... .......... .......... .......... .......... 45% 1.40M 2m12s\n", + " 58800K .......... .......... .......... .......... .......... 45% 367K 2m12s\n", + " 58850K .......... .......... .......... .......... .......... 45% 1.57M 2m12s\n", + " 58900K .......... .......... .......... .......... .......... 45% 365K 2m12s\n", + " 58950K .......... .......... .......... .......... .......... 45% 1.57M 2m12s\n", + " 59000K .......... .......... .......... .......... .......... 45% 360K 2m12s\n", + " 59050K .......... .......... .......... .......... .......... 45% 1.41M 2m12s\n", + " 59100K .......... .......... .......... .......... .......... 45% 372K 2m12s\n", + " 59150K .......... .......... .......... .......... .......... 46% 1.20M 2m11s\n", + " 59200K .......... .......... .......... .......... .......... 46% 388K 2m11s\n", + " 59250K .......... .......... .......... .......... .......... 46% 1.28M 2m11s\n", + " 59300K .......... .......... .......... .......... .......... 46% 374K 2m11s\n", + " 59350K .......... .......... .......... .......... .......... 46% 1.31M 2m11s\n", + " 59400K .......... .......... .......... .......... .......... 46% 378K 2m11s\n", + " 59450K .......... .......... .......... .......... .......... 46% 1.24M 2m11s\n", + " 59500K .......... .......... .......... .......... .......... 46% 382K 2m11s\n", + " 59550K .......... .......... .......... .......... .......... 46% 1.28M 2m11s\n", + " 59600K .......... .......... .......... .......... .......... 46% 383K 2m10s\n", + " 59650K .......... .......... .......... .......... .......... 46% 1.25M 2m10s\n", + " 59700K .......... .......... .......... .......... .......... 46% 388K 2m10s\n", + " 59750K .......... .......... .......... .......... .......... 46% 1.29M 2m10s\n", + " 59800K .......... .......... .......... .......... .......... 46% 369K 2m10s\n", + " 59850K .......... .......... .......... .......... .......... 46% 1.47M 2m10s\n", + " 59900K .......... .......... .......... .......... .......... 46% 367K 2m10s\n", + " 59950K .......... .......... .......... .......... .......... 46% 1.52M 2m10s\n", + " 60000K .......... .......... .......... .......... .......... 46% 364K 2m10s\n", + " 60050K .......... .......... .......... .......... .......... 46% 1.55M 2m9s\n", + " 60100K .......... .......... .......... .......... .......... 46% 357K 2m9s\n", + " 60150K .......... .......... .......... .......... .......... 46% 1.54M 2m9s\n", + " 60200K .......... .......... .......... .......... .......... 46% 1.63M 2m9s\n", + " 60250K .......... .......... .......... .......... .......... 46% 356K 2m9s\n", + " 60300K .......... .......... .......... .......... .......... 46% 1.68M 2m9s\n", + " 60350K .......... .......... .......... .......... .......... 46% 355K 2m9s\n", + " 60400K .......... .......... .......... .......... .......... 46% 1.71M 2m9s\n", + " 60450K .......... .......... .......... .......... .......... 47% 363K 2m9s\n", + " 60500K .......... .......... .......... .......... .......... 47% 1.60M 2m8s\n", + " 60550K .......... .......... .......... .......... .......... 47% 361K 2m8s\n", + " 60600K .......... .......... .......... .......... .......... 47% 1.63M 2m8s\n", + " 60650K .......... .......... .......... .......... .......... 47% 364K 2m8s\n", + " 60700K .......... .......... .......... .......... .......... 47% 1.50M 2m8s\n", + " 60750K .......... .......... .......... .......... .......... 47% 366K 2m8s\n", + " 60800K .......... .......... .......... .......... .......... 47% 1.41M 2m8s\n", + " 60850K .......... .......... .......... .......... .......... 47% 370K 2m8s\n", + " 60900K .......... .......... .......... .......... .......... 47% 1.37M 2m8s\n", + " 60950K .......... .......... .......... .......... .......... 47% 381K 2m8s\n", + " 61000K .......... .......... .......... .......... .......... 47% 1.35M 2m7s\n", + " 61050K .......... .......... .......... .......... .......... 47% 381K 2m7s\n", + " 61100K .......... .......... .......... .......... .......... 47% 1.28M 2m7s\n", + " 61150K .......... .......... .......... .......... .......... 47% 383K 2m7s\n", + " 61200K .......... .......... .......... .......... .......... 47% 1.33M 2m7s\n", + " 61250K .......... .......... .......... .......... .......... 47% 367K 2m7s\n", + " 61300K .......... .......... .......... .......... .......... 47% 1.30M 2m7s\n", + " 61350K .......... .......... .......... .......... .......... 47% 383K 2m7s\n", + " 61400K .......... .......... .......... .......... .......... 47% 1.32M 2m7s\n", + " 61450K .......... .......... .......... .......... .......... 47% 379K 2m6s\n", + " 61500K .......... .......... .......... .......... .......... 47% 1.34M 2m6s\n", + " 61550K .......... .......... .......... .......... .......... 47% 378K 2m6s\n", + " 61600K .......... .......... .......... .......... .......... 47% 1.35M 2m6s\n", + " 61650K .......... .......... .......... .......... .......... 47% 376K 2m6s\n", + " 61700K .......... .......... .......... .......... .......... 47% 1.22M 2m6s\n", + " 61750K .......... .......... .......... .......... .......... 48% 392K 2m6s\n", + " 61800K .......... .......... .......... .......... .......... 48% 1.24M 2m6s\n", + " 61850K .......... .......... .......... .......... .......... 48% 385K 2m6s\n", + " 61900K .......... .......... .......... .......... .......... 48% 1.25M 2m6s\n", + " 61950K .......... .......... .......... .......... .......... 48% 386K 2m5s\n", + " 62000K .......... .......... .......... .......... .......... 48% 1.24M 2m5s\n", + " 62050K .......... .......... .......... .......... .......... 48% 386K 2m5s\n", + " 62100K .......... .......... .......... .......... .......... 48% 1.27M 2m5s\n", + " 62150K .......... .......... .......... .......... .......... 48% 384K 2m5s\n", + " 62200K .......... .......... .......... .......... .......... 48% 1.30M 2m5s\n", + " 62250K .......... .......... .......... .......... .......... 48% 377K 2m5s\n", + " 62300K .......... .......... .......... .......... .......... 48% 1.33M 2m5s\n", + " 62350K .......... .......... .......... .......... .......... 48% 377K 2m5s\n", + " 62400K .......... .......... .......... .......... .......... 48% 1.34M 2m4s\n", + " 62450K .......... .......... .......... .......... .......... 48% 376K 2m4s\n", + " 62500K .......... .......... .......... .......... .......... 48% 1.30M 2m4s\n", + " 62550K .......... .......... .......... .......... .......... 48% 382K 2m4s\n", + " 62600K .......... .......... .......... .......... .......... 48% 1.35M 2m4s\n", + " 62650K .......... .......... .......... .......... .......... 48% 379K 2m4s\n", + " 62700K .......... .......... .......... .......... .......... 48% 1.24M 2m4s\n", + " 62750K .......... .......... .......... .......... .......... 48% 389K 2m4s\n", + " 62800K .......... .......... .......... .......... .......... 48% 1.28M 2m4s\n", + " 62850K .......... .......... .......... .......... .......... 48% 387K 2m4s\n", + " 62900K .......... .......... .......... .......... .......... 48% 1.20M 2m3s\n", + " 62950K .......... .......... .......... .......... .......... 48% 379K 2m3s\n", + " 63000K .......... .......... .......... .......... .......... 49% 1.35M 2m3s\n", + " 63050K .......... .......... .......... .......... .......... 49% 381K 2m3s\n", + " 63100K .......... .......... .......... .......... .......... 49% 1.30M 2m3s\n", + " 63150K .......... .......... .......... .......... .......... 49% 376K 2m3s\n", + " 63200K .......... .......... .......... .......... .......... 49% 1.37M 2m3s\n", + " 63250K .......... .......... .......... .......... .......... 49% 365K 2m3s\n", + " 63300K .......... .......... .......... .......... .......... 49% 1.54M 2m3s\n", + " 63350K .......... .......... .......... .......... .......... 49% 363K 2m3s\n", + " 63400K .......... .......... .......... .......... .......... 49% 1.42M 2m2s\n", + " 63450K .......... .......... .......... .......... .......... 49% 369K 2m2s\n", + " 63500K .......... .......... .......... .......... .......... 49% 1.33M 2m2s\n", + " 63550K .......... .......... .......... .......... .......... 49% 373K 2m2s\n", + " 63600K .......... .......... .......... .......... .......... 49% 1.42M 2m2s\n", + " 63650K .......... .......... .......... .......... .......... 49% 369K 2m2s\n", + " 63700K .......... .......... .......... .......... .......... 49% 1.54M 2m2s\n", + " 63750K .......... .......... .......... .......... .......... 49% 364K 2m2s\n", + " 63800K .......... .......... .......... .......... .......... 49% 1.56M 2m2s\n", + " 63850K .......... .......... .......... .......... .......... 49% 364K 2m2s\n", + " 63900K .......... .......... .......... .......... .......... 49% 1.59M 2m1s\n", + " 63950K .......... .......... .......... .......... .......... 49% 357K 2m1s\n", + " 64000K .......... .......... .......... .......... .......... 49% 3.90M 2m1s\n", + " 64050K .......... .......... .......... .......... .......... 49% 318K 2m1s\n", + " 64100K .......... .......... .......... .......... .......... 49% 4.94M 2m1s\n", + " 64150K .......... .......... .......... .......... .......... 49% 285K 2m1s\n", + " 64200K .......... .......... .......... .......... .......... 49% 8.45M 2m1s\n", + " 64250K .......... .......... .......... .......... .......... 49% 241K 2m1s\n", + " 64300K .......... .......... .......... .......... .......... 50% 6.04M 2m1s\n", + " 64350K .......... .......... .......... .......... .......... 50% 303K 2m1s\n", + " 64400K .......... .......... .......... .......... .......... 50% 3.73M 2m0s\n", + " 64450K .......... .......... .......... .......... .......... 50% 320K 2m0s\n", + " 64500K .......... .......... .......... .......... .......... 50% 5.24M 2m0s\n", + " 64550K .......... .......... .......... .......... .......... 50% 310K 2m0s\n", + " 64600K .......... .......... .......... .......... .......... 50% 5.95M 2m0s\n", + " 64650K .......... .......... .......... .......... .......... 50% 310K 2m0s\n", + " 64700K .......... .......... .......... .......... .......... 50% 5.13M 2m0s\n", + " 64750K .......... .......... .......... .......... .......... 50% 313K 2m0s\n", + " 64800K .......... .......... .......... .......... .......... 50% 5.84M 2m0s\n", + " 64850K .......... .......... .......... .......... .......... 50% 311K 2m0s\n", + " 64900K .......... .......... .......... .......... .......... 50% 5.32M 1m59s\n", + " 64950K .......... .......... .......... .......... .......... 50% 313K 1m59s\n", + " 65000K .......... .......... .......... .......... .......... 50% 5.07M 1m59s\n", + " 65050K .......... .......... .......... .......... .......... 50% 312K 1m59s\n", + " 65100K .......... .......... .......... .......... .......... 50% 5.14M 1m59s\n", + " 65150K .......... .......... .......... .......... .......... 50% 316K 1m59s\n", + " 65200K .......... .......... .......... .......... .......... 50% 4.24M 1m59s\n", + " 65250K .......... .......... .......... .......... .......... 50% 317K 1m59s\n", + " 65300K .......... .......... .......... .......... .......... 50% 3.91M 1m59s\n", + " 65350K .......... .......... .......... .......... .......... 50% 321K 1m58s\n", + " 65400K .......... .......... .......... .......... .......... 50% 3.23M 1m58s\n", + " 65450K .......... .......... .......... .......... .......... 50% 311K 1m58s\n", + " 65500K .......... .......... .......... .......... .......... 50% 5.94M 1m58s\n", + " 65550K .......... .......... .......... .......... .......... 50% 311K 1m58s\n", + " 65600K .......... .......... .......... .......... .......... 51% 5.67M 1m58s\n", + " 65650K .......... .......... .......... .......... .......... 51% 313K 1m58s\n", + " 65700K .......... .......... .......... .......... .......... 51% 3.13M 1m58s\n", + " 65750K .......... .......... .......... .......... .......... 51% 327K 1m58s\n", + " 65800K .......... .......... .......... .......... .......... 51% 2.85M 1m58s\n", + " 65850K .......... .......... .......... .......... .......... 51% 329K 1m57s\n", + " 65900K .......... .......... .......... .......... .......... 51% 3.31M 1m57s\n", + " 65950K .......... .......... .......... .......... .......... 51% 325K 1m57s\n", + " 66000K .......... .......... .......... .......... .......... 51% 3.34M 1m57s\n", + " 66050K .......... .......... .......... .......... .......... 51% 325K 1m57s\n", + " 66100K .......... .......... .......... .......... .......... 51% 3.20M 1m57s\n", + " 66150K .......... .......... .......... .......... .......... 51% 324K 1m57s\n", + " 66200K .......... .......... .......... .......... .......... 51% 3.59M 1m57s\n", + " 66250K .......... .......... .......... .......... .......... 51% 325K 1m57s\n", + " 66300K .......... .......... .......... .......... .......... 51% 2.38M 1m56s\n", + " 66350K .......... .......... .......... .......... .......... 51% 356K 1m56s\n", + " 66400K .......... .......... .......... .......... .......... 51% 2.10M 1m56s\n", + " 66450K .......... .......... .......... .......... .......... 51% 45.5K 1m57s\n", + " 66500K .......... .......... .......... .......... .......... 51% 105K 1m57s\n", + " 66550K .......... .......... .......... .......... .......... 51% 154K 1m58s\n", + " 66600K .......... .......... .......... .......... .......... 51% 156K 1m58s\n", + " 66650K .......... .......... .......... .......... .......... 51% 159K 1m58s\n", + " 66700K .......... .......... .......... .......... .......... 51% 154K 1m58s\n", + " 66750K .......... .......... .......... .......... .......... 51% 157K 1m58s\n", + " 66800K .......... .......... .......... .......... .......... 51% 168K 1m58s\n", + " 66850K .......... .......... .......... .......... .......... 52% 270K 1m58s\n", + " 66900K .......... .......... .......... .......... .......... 52% 172K 1m58s\n", + " 66950K .......... .......... .......... .......... .......... 52% 277K 1m58s\n", + " 67000K .......... .......... .......... .......... .......... 52% 298K 1m58s\n", + " 67050K .......... .......... .......... .......... .......... 52% 170K 1m58s\n", + " 67100K .......... .......... .......... .......... .......... 52% 290K 1m58s\n", + " 67150K .......... .......... .......... .......... .......... 52% 304K 1m58s\n", + " 67200K .......... .......... .......... .......... .......... 52% 300K 1m58s\n", + " 67250K .......... .......... .......... .......... .......... 52% 305K 1m58s\n", + " 67300K .......... .......... .......... .......... .......... 52% 313K 1m58s\n", + " 67350K .......... .......... .......... .......... .......... 52% 312K 1m58s\n", + " 67400K .......... .......... .......... .......... .......... 52% 198K 1m58s\n", + " 67450K .......... .......... .......... .......... .......... 52% 315K 1m58s\n", + " 67500K .......... .......... .......... .......... .......... 52% 315K 1m58s\n", + " 67550K .......... .......... .......... .......... .......... 52% 290K 1m58s\n", + " 67600K .......... .......... .......... .......... .......... 52% 270K 1m58s\n", + " 67650K .......... .......... .......... .......... .......... 52% 317K 1m58s\n", + " 67700K .......... .......... .......... .......... .......... 52% 316K 1m58s\n", + " 67750K .......... .......... .......... .......... .......... 52% 497K 1m58s\n", + " 67800K .......... .......... .......... .......... .......... 52% 325K 1m58s\n", + " 67850K .......... .......... .......... .......... .......... 52% 327K 1m58s\n", + " 67900K .......... .......... .......... .......... .......... 52% 322K 1m58s\n", + " 67950K .......... .......... .......... .......... .......... 52% 316K 1m58s\n", + " 68000K .......... .......... .......... .......... .......... 52% 555K 1m57s\n", + " 68050K .......... .......... .......... .......... .......... 52% 327K 1m57s\n", + " 68100K .......... .......... .......... .......... .......... 52% 491K 1m57s\n", + " 68150K .......... .......... .......... .......... .......... 53% 300K 1m57s\n", + " 68200K .......... .......... .......... .......... .......... 53% 366K 1m57s\n", + " 68250K .......... .......... .......... .......... .......... 53% 566K 1m57s\n", + " 68300K .......... .......... .......... .......... .......... 53% 363K 1m57s\n", + " 68350K .......... .......... .......... .......... .......... 53% 442K 1m57s\n", + " 68400K .......... .......... .......... .......... .......... 53% 364K 1m57s\n", + " 68450K .......... .......... .......... .......... .......... 53% 446K 1m57s\n", + " 68500K .......... .......... .......... .......... .......... 53% 425K 1m57s\n", + " 68550K .......... .......... .......... .......... .......... 53% 455K 1m57s\n", + " 68600K .......... .......... .......... .......... .......... 53% 512K 1m57s\n", + " 68650K .......... .......... .......... .......... .......... 53% 355K 1m56s\n", + " 68700K .......... .......... .......... .......... .......... 53% 567K 1m56s\n", + " 68750K .......... .......... .......... .......... .......... 53% 359K 1m56s\n", + " 68800K .......... .......... .......... .......... .......... 53% 496K 1m56s\n", + " 68850K .......... .......... .......... .......... .......... 53% 609K 1m56s\n", + " 68900K .......... .......... .......... .......... .......... 53% 377K 1m56s\n", + " 68950K .......... .......... .......... .......... .......... 53% 463K 1m56s\n", + " 69000K .......... .......... .......... .......... .......... 53% 611K 1m56s\n", + " 69050K .......... .......... .......... .......... .......... 53% 428K 1m56s\n", + " 69100K .......... .......... .......... .......... .......... 53% 431K 1m56s\n", + " 69150K .......... .......... .......... .......... .......... 53% 585K 1m56s\n", + " 69200K .......... .......... .......... .......... .......... 53% 525K 1m55s\n", + " 69250K .......... .......... .......... .......... .......... 53% 366K 1m55s\n", + " 69300K .......... .......... .......... .......... .......... 53% 703K 1m55s\n", + " 69350K .......... .......... .......... .......... .......... 53% 501K 1m55s\n", + " 69400K .......... .......... .......... .......... .......... 53% 565K 1m55s\n", + " 69450K .......... .......... .......... .......... .......... 54% 521K 1m55s\n", + " 69500K .......... .......... .......... .......... .......... 54% 370K 1m55s\n", + " 69550K .......... .......... .......... .......... .......... 54% 826K 1m55s\n", + " 69600K .......... .......... .......... .......... .......... 54% 491K 1m55s\n", + " 69650K .......... .......... .......... .......... .......... 54% 623K 1m55s\n", + " 69700K .......... .......... .......... .......... .......... 54% 513K 1m54s\n", + " 69750K .......... .......... .......... .......... .......... 54% 416K 1m54s\n", + " 69800K .......... .......... .......... .......... .......... 54% 797K 1m54s\n", + " 69850K .......... .......... .......... .......... .......... 54% 416K 1m54s\n", + " 69900K .......... .......... .......... .......... .......... 54% 688K 1m54s\n", + " 69950K .......... .......... .......... .......... .......... 54% 545K 1m54s\n", + " 70000K .......... .......... .......... .......... .......... 54% 634K 1m54s\n", + " 70050K .......... .......... .......... .......... .......... 54% 566K 1m54s\n", + " 70100K .......... .......... .......... .......... .......... 54% 533K 1m54s\n", + " 70150K .......... .......... .......... .......... .......... 54% 669K 1m54s\n", + " 70200K .......... .......... .......... .......... .......... 54% 401K 1m53s\n", + " 70250K .......... .......... .......... .......... .......... 54% 1.08M 1m53s\n", + " 70300K .......... .......... .......... .......... .......... 54% 409K 1m53s\n", + " 70350K .......... .......... .......... .......... .......... 54% 1.15M 1m53s\n", + " 70400K .......... .......... .......... .......... .......... 54% 430K 1m53s\n", + " 70450K .......... .......... .......... .......... .......... 54% 742K 1m53s\n", + " 70500K .......... .......... .......... .......... .......... 54% 534K 1m53s\n", + " 70550K .......... .......... .......... .......... .......... 54% 756K 1m53s\n", + " 70600K .......... .......... .......... .......... .......... 54% 499K 1m53s\n", + " 70650K .......... .......... .......... .......... .......... 54% 811K 1m52s\n", + " 70700K .......... .......... .......... .......... .......... 54% 512K 1m52s\n", + " 70750K .......... .......... .......... .......... .......... 55% 819K 1m52s\n", + " 70800K .......... .......... .......... .......... .......... 55% 484K 1m52s\n", + " 70850K .......... .......... .......... .......... .......... 55% 911K 1m52s\n", + " 70900K .......... .......... .......... .......... .......... 55% 486K 1m52s\n", + " 70950K .......... .......... .......... .......... .......... 55% 897K 1m52s\n", + " 71000K .......... .......... .......... .......... .......... 55% 494K 1m52s\n", + " 71050K .......... .......... .......... .......... .......... 55% 889K 1m52s\n", + " 71100K .......... .......... .......... .......... .......... 55% 520K 1m51s\n", + " 71150K .......... .......... .......... .......... .......... 55% 806K 1m51s\n", + " 71200K .......... .......... .......... .......... .......... 55% 526K 1m51s\n", + " 71250K .......... .......... .......... .......... .......... 55% 825K 1m51s\n", + " 71300K .......... .......... .......... .......... .......... 55% 525K 1m51s\n", + " 71350K .......... .......... .......... .......... .......... 55% 793K 1m51s\n", + " 71400K .......... .......... .......... .......... .......... 55% 556K 1m51s\n", + " 71450K .......... .......... .......... .......... .......... 55% 707K 1m51s\n", + " 71500K .......... .......... .......... .......... .......... 55% 556K 1m51s\n", + " 71550K .......... .......... .......... .......... .......... 55% 698K 1m50s\n", + " 71600K .......... .......... .......... .......... .......... 55% 571K 1m50s\n", + " 71650K .......... .......... .......... .......... .......... 55% 683K 1m50s\n", + " 71700K .......... .......... .......... .......... .......... 55% 586K 1m50s\n", + " 71750K .......... .......... .......... .......... .......... 55% 664K 1m50s\n", + " 71800K .......... .......... .......... .......... .......... 55% 601K 1m50s\n", + " 71850K .......... .......... .......... .......... .......... 55% 649K 1m50s\n", + " 71900K .......... .......... .......... .......... .......... 55% 629K 1m50s\n", + " 71950K .......... .......... .......... .......... .......... 55% 588K 1m50s\n", + " 72000K .......... .......... .......... .......... .......... 56% 673K 1m49s\n", + " 72050K .......... .......... .......... .......... .......... 56% 600K 1m49s\n", + " 72100K .......... .......... .......... .......... .......... 56% 662K 1m49s\n", + " 72150K .......... .......... .......... .......... .......... 56% 597K 1m49s\n", + " 72200K .......... .......... .......... .......... .......... 56% 657K 1m49s\n", + " 72250K .......... .......... .......... .......... .......... 56% 603K 1m49s\n", + " 72300K .......... .......... .......... .......... .......... 56% 665K 1m49s\n", + " 72350K .......... .......... .......... .......... .......... 56% 1.39M 1m49s\n", + " 72400K .......... .......... .......... .......... .......... 56% 405K 1m49s\n", + " 72450K .......... .......... .......... .......... .......... 56% 1.35M 1m48s\n", + " 72500K .......... .......... .......... .......... .......... 56% 407K 1m48s\n", + " 72550K .......... .......... .......... .......... .......... 56% 1.27M 1m48s\n", + " 72600K .......... .......... .......... .......... .......... 56% 406K 1m48s\n", + " 72650K .......... .......... .......... .......... .......... 56% 1.32M 1m48s\n", + " 72700K .......... .......... .......... .......... .......... 56% 403K 1m48s\n", + " 72750K .......... .......... .......... .......... .......... 56% 877K 1m48s\n", + " 72800K .......... .......... .......... .......... .......... 56% 371K 1m48s\n", + " 72850K .......... .......... .......... .......... .......... 56% 922K 1m48s\n", + " 72900K .......... .......... .......... .......... .......... 56% 470K 1m48s\n", + " 72950K .......... .......... .......... .......... .......... 56% 883K 1m47s\n", + " 73000K .......... .......... .......... .......... .......... 56% 487K 1m47s\n", + " 73050K .......... .......... .......... .......... .......... 56% 897K 1m47s\n", + " 73100K .......... .......... .......... .......... .......... 56% 485K 1m47s\n", + " 73150K .......... .......... .......... .......... .......... 56% 885K 1m47s\n", + " 73200K .......... .......... .......... .......... .......... 56% 487K 1m47s\n", + " 73250K .......... .......... .......... .......... .......... 56% 830K 1m47s\n", + " 73300K .......... .......... .......... .......... .......... 57% 499K 1m47s\n", + " 73350K .......... .......... .......... .......... .......... 57% 867K 1m47s\n", + " 73400K .......... .......... .......... .......... .......... 57% 491K 1m46s\n", + " 73450K .......... .......... .......... .......... .......... 57% 875K 1m46s\n", + " 73500K .......... .......... .......... .......... .......... 57% 496K 1m46s\n", + " 73550K .......... .......... .......... .......... .......... 57% 869K 1m46s\n", + " 73600K .......... .......... .......... .......... .......... 57% 490K 1m46s\n", + " 73650K .......... .......... .......... .......... .......... 57% 843K 1m46s\n", + " 73700K .......... .......... .......... .......... .......... 57% 498K 1m46s\n", + " 73750K .......... .......... .......... .......... .......... 57% 839K 1m46s\n", + " 73800K .......... .......... .......... .......... .......... 57% 821K 1m46s\n", + " 73850K .......... .......... .......... .......... .......... 57% 511K 1m45s\n", + " 73900K .......... .......... .......... .......... .......... 57% 811K 1m45s\n", + " 73950K .......... .......... .......... .......... .......... 57% 495K 1m45s\n", + " 74000K .......... .......... .......... .......... .......... 57% 861K 1m45s\n", + " 74050K .......... .......... .......... .......... .......... 57% 487K 1m45s\n", + " 74100K .......... .......... .......... .......... .......... 57% 874K 1m45s\n", + " 74150K .......... .......... .......... .......... .......... 57% 488K 1m45s\n", + " 74200K .......... .......... .......... .......... .......... 57% 885K 1m45s\n", + " 74250K .......... .......... .......... .......... .......... 57% 483K 1m45s\n", + " 74300K .......... .......... .......... .......... .......... 57% 875K 1m44s\n", + " 74350K .......... .......... .......... .......... .......... 57% 490K 1m44s\n", + " 74400K .......... .......... .......... .......... .......... 57% 868K 1m44s\n", + " 74450K .......... .......... .......... .......... .......... 57% 492K 1m44s\n", + " 74500K .......... .......... .......... .......... .......... 57% 872K 1m44s\n", + " 74550K .......... .......... .......... .......... .......... 57% 857K 1m44s\n", + " 74600K .......... .......... .......... .......... .......... 58% 504K 1m44s\n", + " 74650K .......... .......... .......... .......... .......... 58% 487K 1m44s\n", + " 74700K .......... .......... .......... .......... .......... 58% 890K 1m44s\n", + " 74750K .......... .......... .......... .......... .......... 58% 835K 1m43s\n", + " 74800K .......... .......... .......... .......... .......... 58% 505K 1m43s\n", + " 74850K .......... .......... .......... .......... .......... 58% 850K 1m43s\n", + " 74900K .......... .......... .......... .......... .......... 58% 491K 1m43s\n", + " 74950K .......... .......... .......... .......... .......... 58% 875K 1m43s\n", + " 75000K .......... .......... .......... .......... .......... 58% 494K 1m43s\n", + " 75050K .......... .......... .......... .......... .......... 58% 864K 1m43s\n", + " 75100K .......... .......... .......... .......... .......... 58% 501K 1m43s\n", + " 75150K .......... .......... .......... .......... .......... 58% 447K 1m43s\n", + " 75200K .......... .......... .......... .......... .......... 58% 1.03M 1m43s\n", + " 75250K .......... .......... .......... .......... .......... 58% 452K 1m42s\n", + " 75300K .......... .......... .......... .......... .......... 58% 1.03M 1m42s\n", + " 75350K .......... .......... .......... .......... .......... 58% 426K 1m42s\n", + " 75400K .......... .......... .......... .......... .......... 58% 1.12M 1m42s\n", + " 75450K .......... .......... .......... .......... .......... 58% 417K 1m42s\n", + " 75500K .......... .......... .......... .......... .......... 58% 1.30M 1m42s\n", + " 75550K .......... .......... .......... .......... .......... 58% 677K 1m42s\n", + " 75600K .......... .......... .......... .......... .......... 58% 577K 1m42s\n", + " 75650K .......... .......... .......... .......... .......... 58% 692K 1m42s\n", + " 75700K .......... .......... .......... .......... .......... 58% 581K 1m41s\n", + " 75750K .......... .......... .......... .......... .......... 58% 672K 1m41s\n", + " 75800K .......... .......... .......... .......... .......... 58% 576K 1m41s\n", + " 75850K .......... .......... .......... .......... .......... 58% 695K 1m41s\n", + " 75900K .......... .......... .......... .......... .......... 59% 574K 1m41s\n", + " 75950K .......... .......... .......... .......... .......... 59% 669K 1m41s\n", + " 76000K .......... .......... .......... .......... .......... 59% 601K 1m41s\n", + " 76050K .......... .......... .......... .......... .......... 59% 649K 1m41s\n", + " 76100K .......... .......... .......... .......... .......... 59% 607K 1m41s\n", + " 76150K .......... .......... .......... .......... .......... 59% 670K 1m40s\n", + " 76200K .......... .......... .......... .......... .......... 59% 572K 1m40s\n", + " 76250K .......... .......... .......... .......... .......... 59% 37.9K 1m41s\n", + " 76300K .......... .......... .......... .......... .......... 59% 155K 1m41s\n", + " 76350K .......... .......... .......... .......... .......... 59% 315K 1m41s\n", + " 76400K .......... .......... .......... .......... .......... 59% 328K 1m41s\n", + " 76450K .......... .......... .......... .......... .......... 59% 503K 1m41s\n", + " 76500K .......... .......... .......... .......... .......... 59% 747K 1m41s\n", + " 76550K .......... .......... .......... .......... .......... 59% 329K 1m41s\n", + " 76600K .......... .......... .......... .......... .......... 59% 518K 1m41s\n", + " 76650K .......... .......... .......... .......... .......... 59% 678K 1m41s\n", + " 76700K .......... .......... .......... .......... .......... 59% 347K 1m41s\n", + " 76750K .......... .......... .......... .......... .......... 59% 2.48M 1m40s\n", + " 76800K .......... .......... .......... .......... .......... 59% 336K 1m40s\n", + " 76850K .......... .......... .......... .......... .......... 59% 510K 1m40s\n", + " 76900K .......... .......... .......... .......... .......... 59% 678K 1m40s\n", + " 76950K .......... .......... .......... .......... .......... 59% 349K 1m40s\n", + " 77000K .......... .......... .......... .......... .......... 59% 2.39M 1m40s\n", + " 77050K .......... .......... .......... .......... .......... 59% 347K 1m40s\n", + " 77100K .......... .......... .......... .......... .......... 59% 494K 1m40s\n", + " 77150K .......... .......... .......... .......... .......... 60% 755K 1m40s\n", + " 77200K .......... .......... .......... .......... .......... 60% 353K 1m40s\n", + " 77250K .......... .......... .......... .......... .......... 60% 1.58M 99s\n", + " 77300K .......... .......... .......... .......... .......... 60% 365K 99s\n", + " 77350K .......... .......... .......... .......... .......... 60% 504K 99s\n", + " 77400K .......... .......... .......... .......... .......... 60% 707K 99s\n", + " 77450K .......... .......... .......... .......... .......... 60% 505K 99s\n", + " 77500K .......... .......... .......... .......... .......... 60% 686K 99s\n", + " 77550K .......... .......... .......... .......... .......... 60% 404K 99s\n", + " 77600K .......... .......... .......... .......... .......... 60% 1.17M 99s\n", + " 77650K .......... .......... .......... .......... .......... 60% 386K 99s\n", + " 77700K .......... .......... .......... .......... .......... 60% 968K 99s\n", + " 77750K .......... .......... .......... .......... .......... 60% 302K 98s\n", + " 77800K .......... .......... .......... .......... .......... 60% 950K 98s\n", + " 77850K .......... .......... .......... .......... .......... 60% 319K 98s\n", + " 77900K .......... .......... .......... .......... .......... 60% 2.62M 98s\n", + " 77950K .......... .......... .......... .......... .......... 60% 333K 98s\n", + " 78000K .......... .......... .......... .......... .......... 60% 2.78M 98s\n", + " 78050K .......... .......... .......... .......... .......... 60% 348K 98s\n", + " 78100K .......... .......... .......... .......... .......... 60% 534K 98s\n", + " 78150K .......... .......... .......... .......... .......... 60% 733K 98s\n", + " 78200K .......... .......... .......... .......... .......... 60% 537K 98s\n", + " 78250K .......... .......... .......... .......... .......... 60% 759K 97s\n", + " 78300K .......... .......... .......... .......... .......... 60% 537K 97s\n", + " 78350K .......... .......... .......... .......... .......... 60% 700K 97s\n", + " 78400K .......... .......... .......... .......... .......... 60% 570K 97s\n", + " 78450K .......... .......... .......... .......... .......... 61% 669K 97s\n", + " 78500K .......... .......... .......... .......... .......... 61% 560K 97s\n", + " 78550K .......... .......... .......... .......... .......... 61% 697K 97s\n", + " 78600K .......... .......... .......... .......... .......... 61% 595K 97s\n", + " 78650K .......... .......... .......... .......... .......... 61% 674K 97s\n", + " 78700K .......... .......... .......... .......... .......... 61% 597K 96s\n", + " 78750K .......... .......... .......... .......... .......... 61% 685K 96s\n", + " 78800K .......... .......... .......... .......... .......... 61% 2.87M 96s\n", + " 78850K .......... .......... .......... .......... .......... 61% 351K 96s\n", + " 78900K .......... .......... .......... .......... .......... 61% 2.81M 96s\n", + " 78950K .......... .......... .......... .......... .......... 61% 351K 96s\n", + " 79000K .......... .......... .......... .......... .......... 61% 2.02M 96s\n", + " 79050K .......... .......... .......... .......... .......... 61% 363K 96s\n", + " 79100K .......... .......... .......... .......... .......... 61% 1.92M 96s\n", + " 79150K .......... .......... .......... .......... .......... 61% 373K 95s\n", + " 79200K .......... .......... .......... .......... .......... 61% 2.31M 95s\n", + " 79250K .......... .......... .......... .......... .......... 61% 487K 95s\n", + " 79300K .......... .......... .......... .......... .......... 61% 904K 95s\n", + " 79350K .......... .......... .......... .......... .......... 61% 591K 95s\n", + " 79400K .......... .......... .......... .......... .......... 61% 623K 95s\n", + " 79450K .......... .......... .......... .......... .......... 61% 634K 95s\n", + " 79500K .......... .......... .......... .......... .......... 61% 594K 95s\n", + " 79550K .......... .......... .......... .......... .......... 61% 663K 95s\n", + " 79600K .......... .......... .......... .......... .......... 61% 663K 94s\n", + " 79650K .......... .......... .......... .......... .......... 61% 607K 94s\n", + " 79700K .......... .......... .......... .......... .......... 61% 668K 94s\n", + " 79750K .......... .......... .......... .......... .......... 62% 593K 94s\n", + " 79800K .......... .......... .......... .......... .......... 62% 656K 94s\n", + " 79850K .......... .......... .......... .......... .......... 62% 578K 94s\n", + " 79900K .......... .......... .......... .......... .......... 62% 699K 94s\n", + " 79950K .......... .......... .......... .......... .......... 62% 560K 94s\n", + " 80000K .......... .......... .......... .......... .......... 62% 686K 94s\n", + " 80050K .......... .......... .......... .......... .......... 62% 2.50M 93s\n", + " 80100K .......... .......... .......... .......... .......... 62% 359K 93s\n", + " 80150K .......... .......... .......... .......... .......... 62% 2.27M 93s\n", + " 80200K .......... .......... .......... .......... .......... 62% 362K 93s\n", + " 80250K .......... .......... .......... .......... .......... 62% 1.86M 93s\n", + " 80300K .......... .......... .......... .......... .......... 62% 368K 93s\n", + " 80350K .......... .......... .......... .......... .......... 62% 2.03M 93s\n", + " 80400K .......... .......... .......... .......... .......... 62% 375K 93s\n", + " 80450K .......... .......... .......... .......... .......... 62% 1.73M 93s\n", + " 80500K .......... .......... .......... .......... .......... 62% 369K 93s\n", + " 80550K .......... .......... .......... .......... .......... 62% 1.67M 92s\n", + " 80600K .......... .......... .......... .......... .......... 62% 680K 92s\n", + " 80650K .......... .......... .......... .......... .......... 62% 582K 92s\n", + " 80700K .......... .......... .......... .......... .......... 62% 701K 92s\n", + " 80750K .......... .......... .......... .......... .......... 62% 567K 92s\n", + " 80800K .......... .......... .......... .......... .......... 62% 636K 92s\n", + " 80850K .......... .......... .......... .......... .......... 62% 776K 92s\n", + " 80900K .......... .......... .......... .......... .......... 62% 538K 92s\n", + " 80950K .......... .......... .......... .......... .......... 62% 755K 92s\n", + " 81000K .......... .......... .......... .......... .......... 62% 524K 91s\n", + " 81050K .......... .......... .......... .......... .......... 63% 779K 91s\n", + " 81100K .......... .......... .......... .......... .......... 63% 535K 91s\n", + " 81150K .......... .......... .......... .......... .......... 63% 759K 91s\n", + " 81200K .......... .......... .......... .......... .......... 63% 536K 91s\n", + " 81250K .......... .......... .......... .......... .......... 63% 764K 91s\n", + " 81300K .......... .......... .......... .......... .......... 63% 536K 91s\n", + " 81350K .......... .......... .......... .......... .......... 63% 735K 91s\n", + " 81400K .......... .......... .......... .......... .......... 63% 538K 91s\n", + " 81450K .......... .......... .......... .......... .......... 63% 750K 91s\n", + " 81500K .......... .......... .......... .......... .......... 63% 537K 90s\n", + " 81550K .......... .......... .......... .......... .......... 63% 758K 90s\n", + " 81600K .......... .......... .......... .......... .......... 63% 532K 90s\n", + " 81650K .......... .......... .......... .......... .......... 63% 741K 90s\n", + " 81700K .......... .......... .......... .......... .......... 63% 536K 90s\n", + " 81750K .......... .......... .......... .......... .......... 63% 758K 90s\n", + " 81800K .......... .......... .......... .......... .......... 63% 871K 90s\n", + " 81850K .......... .......... .......... .......... .......... 63% 476K 90s\n", + " 81900K .......... .......... .......... .......... .......... 63% 850K 90s\n", + " 81950K .......... .......... .......... .......... .......... 63% 485K 89s\n", + " 82000K .......... .......... .......... .......... .......... 63% 798K 89s\n", + " 82050K .......... .......... .......... .......... .......... 63% 1.15M 89s\n", + " 82100K .......... .......... .......... .......... .......... 63% 435K 89s\n", + " 82150K .......... .......... .......... .......... .......... 63% 1.07M 89s\n", + " 82200K .......... .......... .......... .......... .......... 63% 429K 89s\n", + " 82250K .......... .......... .......... .......... .......... 63% 1.06M 89s\n", + " 82300K .......... .......... .......... .......... .......... 64% 439K 89s\n", + " 82350K .......... .......... .......... .......... .......... 64% 1.10M 89s\n", + " 82400K .......... .......... .......... .......... .......... 64% 439K 89s\n", + " 82450K .......... .......... .......... .......... .......... 64% 1010K 88s\n", + " 82500K .......... .......... .......... .......... .......... 64% 451K 88s\n", + " 82550K .......... .......... .......... .......... .......... 64% 935K 88s\n", + " 82600K .......... .......... .......... .......... .......... 64% 449K 88s\n", + " 82650K .......... .......... .......... .......... .......... 64% 979K 88s\n", + " 82700K .......... .......... .......... .......... .......... 64% 442K 88s\n", + " 82750K .......... .......... .......... .......... .......... 64% 1.08M 88s\n", + " 82800K .......... .......... .......... .......... .......... 64% 422K 88s\n", + " 82850K .......... .......... .......... .......... .......... 64% 1.18M 88s\n", + " 82900K .......... .......... .......... .......... .......... 64% 416K 87s\n", + " 82950K .......... .......... .......... .......... .......... 64% 1.21M 87s\n", + " 83000K .......... .......... .......... .......... .......... 64% 1.02M 87s\n", + " 83050K .......... .......... .......... .......... .......... 64% 455K 87s\n", + " 83100K .......... .......... .......... .......... .......... 64% 1.01M 87s\n", + " 83150K .......... .......... .......... .......... .......... 64% 441K 87s\n", + " 83200K .......... .......... .......... .......... .......... 64% 1.01M 87s\n", + " 83250K .......... .......... .......... .......... .......... 64% 595K 87s\n", + " 83300K .......... .......... .......... .......... .......... 64% 627K 87s\n", + " 83350K .......... .......... .......... .......... .......... 64% 606K 87s\n", + " 83400K .......... .......... .......... .......... .......... 64% 637K 86s\n", + " 83450K .......... .......... .......... .......... .......... 64% 626K 86s\n", + " 83500K .......... .......... .......... .......... .......... 64% 598K 86s\n", + " 83550K .......... .......... .......... .......... .......... 64% 610K 86s\n", + " 83600K .......... .......... .......... .......... .......... 65% 619K 86s\n", + " 83650K .......... .......... .......... .......... .......... 65% 620K 86s\n", + " 83700K .......... .......... .......... .......... .......... 65% 639K 86s\n", + " 83750K .......... .......... .......... .......... .......... 65% 634K 86s\n", + " 83800K .......... .......... .......... .......... .......... 65% 625K 86s\n", + " 83850K .......... .......... .......... .......... .......... 65% 642K 85s\n", + " 83900K .......... .......... .......... .......... .......... 65% 616K 85s\n", + " 83950K .......... .......... .......... .......... .......... 65% 636K 85s\n", + " 84000K .......... .......... .......... .......... .......... 65% 415K 85s\n", + " 84050K .......... .......... .......... .......... .......... 65% 1005K 85s\n", + " 84100K .......... .......... .......... .......... .......... 65% 404K 85s\n", + " 84150K .......... .......... .......... .......... .......... 65% 898K 85s\n", + " 84200K .......... .......... .......... .......... .......... 65% 357K 85s\n", + " 84250K .......... .......... .......... .......... .......... 65% 2.20M 85s\n", + " 84300K .......... .......... .......... .......... .......... 65% 1.11M 85s\n", + " 84350K .......... .......... .......... .......... .......... 65% 435K 84s\n", + " 84400K .......... .......... .......... .......... .......... 65% 1.03M 84s\n", + " 84450K .......... .......... .......... .......... .......... 65% 442K 84s\n", + " 84500K .......... .......... .......... .......... .......... 65% 1004K 84s\n", + " 84550K .......... .......... .......... .......... .......... 65% 452K 84s\n", + " 84600K .......... .......... .......... .......... .......... 65% 1.01M 84s\n", + " 84650K .......... .......... .......... .......... .......... 65% 447K 84s\n", + " 84700K .......... .......... .......... .......... .......... 65% 1.04M 84s\n", + " 84750K .......... .......... .......... .......... .......... 65% 441K 84s\n", + " 84800K .......... .......... .......... .......... .......... 65% 1.08M 84s\n", + " 84850K .......... .......... .......... .......... .......... 65% 482K 83s\n", + " 84900K .......... .......... .......... .......... .......... 66% 731K 83s\n", + " 84950K .......... .......... .......... .......... .......... 66% 496K 83s\n", + " 85000K .......... .......... .......... .......... .......... 66% 940K 83s\n", + " 85050K .......... .......... .......... .......... .......... 66% 487K 83s\n", + " 85100K .......... .......... .......... .......... .......... 66% 877K 83s\n", + " 85150K .......... .......... .......... .......... .......... 66% 485K 83s\n", + " 85200K .......... .......... .......... .......... .......... 66% 901K 83s\n", + " 85250K .......... .......... .......... .......... .......... 66% 481K 83s\n", + " 85300K .......... .......... .......... .......... .......... 66% 868K 82s\n", + " 85350K .......... .......... .......... .......... .......... 66% 490K 82s\n", + " 85400K .......... .......... .......... .......... .......... 66% 874K 82s\n", + " 85450K .......... .......... .......... .......... .......... 66% 480K 82s\n", + " 85500K .......... .......... .......... .......... .......... 66% 879K 82s\n", + " 85550K .......... .......... .......... .......... .......... 66% 459K 82s\n", + " 85600K .......... .......... .......... .......... .......... 66% 989K 82s\n", + " 85650K .......... .......... .......... .......... .......... 66% 444K 82s\n", + " 85700K .......... .......... .......... .......... .......... 66% 1.06M 82s\n", + " 85750K .......... .......... .......... .......... .......... 66% 446K 82s\n", + " 85800K .......... .......... .......... .......... .......... 66% 1.04M 81s\n", + " 85850K .......... .......... .......... .......... .......... 66% 436K 81s\n", + " 85900K .......... .......... .......... .......... .......... 66% 1.11M 81s\n", + " 85950K .......... .......... .......... .......... .......... 66% 428K 81s\n", + " 86000K .......... .......... .......... .......... .......... 66% 1024K 81s\n", + " 86050K .......... .......... .......... .......... .......... 66% 452K 81s\n", + " 86100K .......... .......... .......... .......... .......... 66% 1.05M 81s\n", + " 86150K .......... .......... .......... .......... .......... 67% 441K 81s\n", + " 86200K .......... .......... .......... .......... .......... 67% 1.03M 81s\n", + " 86250K .......... .......... .......... .......... .......... 67% 443K 81s\n", + " 86300K .......... .......... .......... .......... .......... 67% 4.32M 80s\n", + " 86350K .......... .......... .......... .......... .......... 67% 337K 80s\n", + " 86400K .......... .......... .......... .......... .......... 67% 3.72M 80s\n", + " 86450K .......... .......... .......... .......... .......... 67% 337K 80s\n", + " 86500K .......... .......... .......... .......... .......... 67% 4.59M 80s\n", + " 86550K .......... .......... .......... .......... .......... 67% 333K 80s\n", + " 86600K .......... .......... .......... .......... .......... 67% 6.11M 80s\n", + " 86650K .......... .......... .......... .......... .......... 67% 336K 80s\n", + " 86700K .......... .......... .......... .......... .......... 67% 3.45M 80s\n", + " 86750K .......... .......... .......... .......... .......... 67% 335K 80s\n", + " 86800K .......... .......... .......... .......... .......... 67% 4.66M 79s\n", + " 86850K .......... .......... .......... .......... .......... 67% 338K 79s\n", + " 86900K .......... .......... .......... .......... .......... 67% 3.85M 79s\n", + " 86950K .......... .......... .......... .......... .......... 67% 333K 79s\n", + " 87000K .......... .......... .......... .......... .......... 67% 3.85M 79s\n", + " 87050K .......... .......... .......... .......... .......... 67% 343K 79s\n", + " 87100K .......... .......... .......... .......... .......... 67% 3.49M 79s\n", + " 87150K .......... .......... .......... .......... .......... 67% 344K 79s\n", + " 87200K .......... .......... .......... .......... .......... 67% 3.46M 79s\n", + " 87250K .......... .......... .......... .......... .......... 67% 342K 79s\n", + " 87300K .......... .......... .......... .......... .......... 67% 3.45M 78s\n", + " 87350K .......... .......... .......... .......... .......... 67% 852K 78s\n", + " 87400K .......... .......... .......... .......... .......... 67% 505K 78s\n", + " 87450K .......... .......... .......... .......... .......... 68% 857K 78s\n", + " 87500K .......... .......... .......... .......... .......... 68% 486K 78s\n", + " 87550K .......... .......... .......... .......... .......... 68% 798K 78s\n", + " 87600K .......... .......... .......... .......... .......... 68% 505K 78s\n", + " 87650K .......... .......... .......... .......... .......... 68% 793K 78s\n", + " 87700K .......... .......... .......... .......... .......... 68% 506K 78s\n", + " 87750K .......... .......... .......... .......... .......... 68% 771K 77s\n", + " 87800K .......... .......... .......... .......... .......... 68% 532K 77s\n", + " 87850K .......... .......... .......... .......... .......... 68% 743K 77s\n", + " 87900K .......... .......... .......... .......... .......... 68% 544K 77s\n", + " 87950K .......... .......... .......... .......... .......... 68% 719K 77s\n", + " 88000K .......... .......... .......... .......... .......... 68% 560K 77s\n", + " 88050K .......... .......... .......... .......... .......... 68% 714K 77s\n", + " 88100K .......... .......... .......... .......... .......... 68% 563K 77s\n", + " 88150K .......... .......... .......... .......... .......... 68% 716K 77s\n", + " 88200K .......... .......... .......... .......... .......... 68% 563K 77s\n", + " 88250K .......... .......... .......... .......... .......... 68% 683K 76s\n", + " 88300K .......... .......... .......... .......... .......... 68% 584K 76s\n", + " 88350K .......... .......... .......... .......... .......... 68% 705K 76s\n", + " 88400K .......... .......... .......... .......... .......... 68% 559K 76s\n", + " 88450K .......... .......... .......... .......... .......... 68% 708K 76s\n", + " 88500K .......... .......... .......... .......... .......... 68% 571K 76s\n", + " 88550K .......... .......... .......... .......... .......... 68% 699K 76s\n", + " 88600K .......... .......... .......... .......... .......... 68% 553K 76s\n", + " 88650K .......... .......... .......... .......... .......... 68% 724K 76s\n", + " 88700K .......... .......... .......... .......... .......... 68% 567K 76s\n", + " 88750K .......... .......... .......... .......... .......... 69% 700K 75s\n", + " 88800K .......... .......... .......... .......... .......... 69% 559K 75s\n", + " 88850K .......... .......... .......... .......... .......... 69% 710K 75s\n", + " 88900K .......... .......... .......... .......... .......... 69% 575K 75s\n", + " 88950K .......... .......... .......... .......... .......... 69% 700K 75s\n", + " 89000K .......... .......... .......... .......... .......... 69% 571K 75s\n", + " 89050K .......... .......... .......... .......... .......... 69% 684K 75s\n", + " 89100K .......... .......... .......... .......... .......... 69% 589K 75s\n", + " 89150K .......... .......... .......... .......... .......... 69% 689K 75s\n", + " 89200K .......... .......... .......... .......... .......... 69% 571K 75s\n", + " 89250K .......... .......... .......... .......... .......... 69% 654K 74s\n", + " 89300K .......... .......... .......... .......... .......... 69% 612K 74s\n", + " 89350K .......... .......... .......... .......... .......... 69% 654K 74s\n", + " 89400K .......... .......... .......... .......... .......... 69% 521K 74s\n", + " 89450K .......... .......... .......... .......... .......... 69% 774K 74s\n", + " 89500K .......... .......... .......... .......... .......... 69% 587K 74s\n", + " 89550K .......... .......... .......... .......... .......... 69% 657K 74s\n", + " 89600K .......... .......... .......... .......... .......... 69% 623K 74s\n", + " 89650K .......... .......... .......... .......... .......... 69% 641K 74s\n", + " 89700K .......... .......... .......... .......... .......... 69% 606K 74s\n", + " 89750K .......... .......... .......... .......... .......... 69% 647K 73s\n", + " 89800K .......... .......... .......... .......... .......... 69% 603K 73s\n", + " 89850K .......... .......... .......... .......... .......... 69% 644K 73s\n", + " 89900K .......... .......... .......... .......... .......... 69% 618K 73s\n", + " 89950K .......... .......... .......... .......... .......... 69% 657K 73s\n", + " 90000K .......... .......... .......... .......... .......... 69% 608K 73s\n", + " 90050K .......... .......... .......... .......... .......... 70% 654K 73s\n", + " 90100K .......... .......... .......... .......... .......... 70% 612K 73s\n", + " 90150K .......... .......... .......... .......... .......... 70% 655K 73s\n", + " 90200K .......... .......... .......... .......... .......... 70% 605K 72s\n", + " 90250K .......... .......... .......... .......... .......... 70% 463K 72s\n", + " 90300K .......... .......... .......... .......... .......... 70% 539K 72s\n", + " 90350K .......... .......... .......... .......... .......... 70% 579K 72s\n", + " 90400K .......... .......... .......... .......... .......... 70% 475K 72s\n", + " 90450K .......... .......... .......... .......... .......... 70% 8.47M 72s\n", + " 90500K .......... .......... .......... .......... .......... 70% 255K 72s\n", + " 90550K .......... .......... .......... .......... .......... 70% 8.85M 72s\n", + " 90600K .......... .......... .......... .......... .......... 70% 324K 72s\n", + " 90650K .......... .......... .......... .......... .......... 70% 2.28M 72s\n", + " 90700K .......... .......... .......... .......... .......... 70% 353K 72s\n", + " 90750K .......... .......... .......... .......... .......... 70% 2.69M 71s\n", + " 90800K .......... .......... .......... .......... .......... 70% 358K 71s\n", + " 90850K .......... .......... .......... .......... .......... 70% 2.58M 71s\n", + " 90900K .......... .......... .......... .......... .......... 70% 357K 71s\n", + " 90950K .......... .......... .......... .......... .......... 70% 2.73M 71s\n", + " 91000K .......... .......... .......... .......... .......... 70% 357K 71s\n", + " 91050K .......... .......... .......... .......... .......... 70% 3.71M 71s\n", + " 91100K .......... .......... .......... .......... .......... 70% 337K 71s\n", + " 91150K .......... .......... .......... .......... .......... 70% 3.99M 71s\n", + " 91200K .......... .......... .......... .......... .......... 70% 342K 71s\n", + " 91250K .......... .......... .......... .......... .......... 70% 3.97M 70s\n", + " 91300K .......... .......... .......... .......... .......... 71% 335K 70s\n", + " 91350K .......... .......... .......... .......... .......... 71% 2.86M 70s\n", + " 91400K .......... .......... .......... .......... .......... 71% 351K 70s\n", + " 91450K .......... .......... .......... .......... .......... 71% 3.86M 70s\n", + " 91500K .......... .......... .......... .......... .......... 71% 4.81M 70s\n", + " 91550K .......... .......... .......... .......... .......... 71% 338K 70s\n", + " 91600K .......... .......... .......... .......... .......... 71% 5.84M 70s\n", + " 91650K .......... .......... .......... .......... .......... 71% 324K 70s\n", + " 91700K .......... .......... .......... .......... .......... 71% 7.14M 69s\n", + " 91750K .......... .......... .......... .......... .......... 71% 327K 69s\n", + " 91800K .......... .......... .......... .......... .......... 71% 4.85M 69s\n", + " 91850K .......... .......... .......... .......... .......... 71% 325K 69s\n", + " 91900K .......... .......... .......... .......... .......... 71% 6.83M 69s\n", + " 91950K .......... .......... .......... .......... .......... 71% 329K 69s\n", + " 92000K .......... .......... .......... .......... .......... 71% 3.70M 69s\n", + " 92050K .......... .......... .......... .......... .......... 71% 348K 69s\n", + " 92100K .......... .......... .......... .......... .......... 71% 3.56M 69s\n", + " 92150K .......... .......... .......... .......... .......... 71% 343K 69s\n", + " 92200K .......... .......... .......... .......... .......... 71% 3.41M 68s\n", + " 92250K .......... .......... .......... .......... .......... 71% 345K 68s\n", + " 92300K .......... .......... .......... .......... .......... 71% 3.20M 68s\n", + " 92350K .......... .......... .......... .......... .......... 71% 341K 68s\n", + " 92400K .......... .......... .......... .......... .......... 71% 4.42M 68s\n", + " 92450K .......... .......... .......... .......... .......... 71% 345K 68s\n", + " 92500K .......... .......... .......... .......... .......... 71% 3.42M 68s\n", + " 92550K .......... .......... .......... .......... .......... 71% 348K 68s\n", + " 92600K .......... .......... .......... .......... .......... 72% 3.10M 68s\n", + " 92650K .......... .......... .......... .......... .......... 72% 351K 68s\n", + " 92700K .......... .......... .......... .......... .......... 72% 3.05M 67s\n", + " 92750K .......... .......... .......... .......... .......... 72% 345K 67s\n", + " 92800K .......... .......... .......... .......... .......... 72% 3.13M 67s\n", + " 92850K .......... .......... .......... .......... .......... 72% 355K 67s\n", + " 92900K .......... .......... .......... .......... .......... 72% 2.75M 67s\n", + " 92950K .......... .......... .......... .......... .......... 72% 342K 67s\n", + " 93000K .......... .......... .......... .......... .......... 72% 3.80M 67s\n", + " 93050K .......... .......... .......... .......... .......... 72% 329K 67s\n", + " 93100K .......... .......... .......... .......... .......... 72% 6.56M 67s\n", + " 93150K .......... .......... .......... .......... .......... 72% 336K 67s\n", + " 93200K .......... .......... .......... .......... .......... 72% 3.29M 66s\n", + " 93250K .......... .......... .......... .......... .......... 72% 347K 66s\n", + " 93300K .......... .......... .......... .......... .......... 72% 3.92M 66s\n", + " 93350K .......... .......... .......... .......... .......... 72% 330K 66s\n", + " 93400K .......... .......... .......... .......... .......... 72% 3.97M 66s\n", + " 93450K .......... .......... .......... .......... .......... 72% 340K 66s\n", + " 93500K .......... .......... .......... .......... .......... 72% 4.96M 66s\n", + " 93550K .......... .......... .......... .......... .......... 72% 335K 66s\n", + " 93600K .......... .......... .......... .......... .......... 72% 4.64M 66s\n", + " 93650K .......... .......... .......... .......... .......... 72% 339K 66s\n", + " 93700K .......... .......... .......... .......... .......... 72% 3.78M 66s\n", + " 93750K .......... .......... .......... .......... .......... 72% 343K 65s\n", + " 93800K .......... .......... .......... .......... .......... 72% 3.27M 65s\n", + " 93850K .......... .......... .......... .......... .......... 72% 384K 65s\n", + " 93900K .......... .......... .......... .......... .......... 73% 1.69M 65s\n", + " 93950K .......... .......... .......... .......... .......... 73% 370K 65s\n", + " 94000K .......... .......... .......... .......... .......... 73% 2.10M 65s\n", + " 94050K .......... .......... .......... .......... .......... 73% 351K 65s\n", + " 94100K .......... .......... .......... .......... .......... 73% 2.95M 65s\n", + " 94150K .......... .......... .......... .......... .......... 73% 350K 65s\n", + " 94200K .......... .......... .......... .......... .......... 73% 3.07M 65s\n", + " 94250K .......... .......... .......... .......... .......... 73% 352K 64s\n", + " 94300K .......... .......... .......... .......... .......... 73% 2.78M 64s\n", + " 94350K .......... .......... .......... .......... .......... 73% 350K 64s\n", + " 94400K .......... .......... .......... .......... .......... 73% 3.29M 64s\n", + " 94450K .......... .......... .......... .......... .......... 73% 351K 64s\n", + " 94500K .......... .......... .......... .......... .......... 73% 2.71M 64s\n", + " 94550K .......... .......... .......... .......... .......... 73% 352K 64s\n", + " 94600K .......... .......... .......... .......... .......... 73% 2.89M 64s\n", + " 94650K .......... .......... .......... .......... .......... 73% 353K 64s\n", + " 94700K .......... .......... .......... .......... .......... 73% 2.66M 64s\n", + " 94750K .......... .......... .......... .......... .......... 73% 356K 63s\n", + " 94800K .......... .......... .......... .......... .......... 73% 2.41M 63s\n", + " 94850K .......... .......... .......... .......... .......... 73% 374K 63s\n", + " 94900K .......... .......... .......... .......... .......... 73% 1.69M 63s\n", + " 94950K .......... .......... .......... .......... .......... 73% 369K 63s\n", + " 95000K .......... .......... .......... .......... .......... 73% 1.99M 63s\n", + " 95050K .......... .......... .......... .......... .......... 73% 370K 63s\n", + " 95100K .......... .......... .......... .......... .......... 73% 1.63M 63s\n", + " 95150K .......... .......... .......... .......... .......... 73% 388K 63s\n", + " 95200K .......... .......... .......... .......... .......... 74% 1.57M 63s\n", + " 95250K .......... .......... .......... .......... .......... 74% 408K 62s\n", + " 95300K .......... .......... .......... .......... .......... 74% 1.33M 62s\n", + " 95350K .......... .......... .......... .......... .......... 74% 404K 62s\n", + " 95400K .......... .......... .......... .......... .......... 74% 1.28M 62s\n", + " 95450K .......... .......... .......... .......... .......... 74% 412K 62s\n", + " 95500K .......... .......... .......... .......... .......... 74% 1.35M 62s\n", + " 95550K .......... .......... .......... .......... .......... 74% 400K 62s\n", + " 95600K .......... .......... .......... .......... .......... 74% 1.41M 62s\n", + " 95650K .......... .......... .......... .......... .......... 74% 401K 62s\n", + " 95700K .......... .......... .......... .......... .......... 74% 1.45M 62s\n", + " 95750K .......... .......... .......... .......... .......... 74% 399K 61s\n", + " 95800K .......... .......... .......... .......... .......... 74% 1.40M 61s\n", + " 95850K .......... .......... .......... .......... .......... 74% 386K 61s\n", + " 95900K .......... .......... .......... .......... .......... 74% 1.42M 61s\n", + " 95950K .......... .......... .......... .......... .......... 74% 405K 61s\n", + " 96000K .......... .......... .......... .......... .......... 74% 1.31M 61s\n", + " 96050K .......... .......... .......... .......... .......... 74% 412K 61s\n", + " 96100K .......... .......... .......... .......... .......... 74% 1.27M 61s\n", + " 96150K .......... .......... .......... .......... .......... 74% 422K 61s\n", + " 96200K .......... .......... .......... .......... .......... 74% 1.24M 61s\n", + " 96250K .......... .......... .......... .......... .......... 74% 403K 60s\n", + " 96300K .......... .......... .......... .......... .......... 74% 1.23M 60s\n", + " 96350K .......... .......... .......... .......... .......... 74% 425K 60s\n", + " 96400K .......... .......... .......... .......... .......... 74% 1.22M 60s\n", + " 96450K .......... .......... .......... .......... .......... 75% 409K 60s\n", + " 96500K .......... .......... .......... .......... .......... 75% 1.31M 60s\n", + " 96550K .......... .......... .......... .......... .......... 75% 386K 60s\n", + " 96600K .......... .......... .......... .......... .......... 75% 1.47M 60s\n", + " 96650K .......... .......... .......... .......... .......... 75% 319K 60s\n", + " 96700K .......... .......... .......... .......... .......... 75% 1.42M 60s\n", + " 96750K .......... .......... .......... .......... .......... 75% 368K 60s\n", + " 96800K .......... .......... .......... .......... .......... 75% 1.46M 59s\n", + " 96850K .......... .......... .......... .......... .......... 75% 318K 59s\n", + " 96900K .......... .......... .......... .......... .......... 75% 2.81M 59s\n", + " 96950K .......... .......... .......... .......... .......... 75% 344K 59s\n", + " 97000K .......... .......... .......... .......... .......... 75% 3.94M 59s\n", + " 97050K .......... .......... .......... .......... .......... 75% 352K 59s\n", + " 97100K .......... .......... .......... .......... .......... 75% 2.90M 59s\n", + " 97150K .......... .......... .......... .......... .......... 75% 349K 59s\n", + " 97200K .......... .......... .......... .......... .......... 75% 3.00M 59s\n", + " 97250K .......... .......... .......... .......... .......... 75% 351K 59s\n", + " 97300K .......... .......... .......... .......... .......... 75% 2.96M 58s\n", + " 97350K .......... .......... .......... .......... .......... 75% 350K 58s\n", + " 97400K .......... .......... .......... .......... .......... 75% 2.80M 58s\n", + " 97450K .......... .......... .......... .......... .......... 75% 352K 58s\n", + " 97500K .......... .......... .......... .......... .......... 75% 2.87M 58s\n", + " 97550K .......... .......... .......... .......... .......... 75% 341K 58s\n", + " 97600K .......... .......... .......... .......... .......... 75% 2.73M 58s\n", + " 97650K .......... .......... .......... .......... .......... 75% 351K 58s\n", + " 97700K .......... .......... .......... .......... .......... 75% 2.19M 58s\n", + " 97750K .......... .......... .......... .......... .......... 76% 375K 58s\n", + " 97800K .......... .......... .......... .......... .......... 76% 2.14M 57s\n", + " 97850K .......... .......... .......... .......... .......... 76% 367K 57s\n", + " 97900K .......... .......... .......... .......... .......... 76% 2.16M 57s\n", + " 97950K .......... .......... .......... .......... .......... 76% 368K 57s\n", + " 98000K .......... .......... .......... .......... .......... 76% 1.59M 57s\n", + " 98050K .......... .......... .......... .......... .......... 76% 372K 57s\n", + " 98100K .......... .......... .......... .......... .......... 76% 1.91M 57s\n", + " 98150K .......... .......... .......... .......... .......... 76% 368K 57s\n", + " 98200K .......... .......... .......... .......... .......... 76% 3.07M 57s\n", + " 98250K .......... .......... .......... .......... .......... 76% 344K 57s\n", + " 98300K .......... .......... .......... .......... .......... 76% 3.31M 56s\n", + " 98350K .......... .......... .......... .......... .......... 76% 329K 56s\n", + " 98400K .......... .......... .......... .......... .......... 76% 4.97M 56s\n", + " 98450K .......... .......... .......... .......... .......... 76% 345K 56s\n", + " 98500K .......... .......... .......... .......... .......... 76% 4.27M 56s\n", + " 98550K .......... .......... .......... .......... .......... 76% 335K 56s\n", + " 98600K .......... .......... .......... .......... .......... 76% 2.83M 56s\n", + " 98650K .......... .......... .......... .......... .......... 76% 347K 56s\n", + " 98700K .......... .......... .......... .......... .......... 76% 4.09M 56s\n", + " 98750K .......... .......... .......... .......... .......... 76% 337K 56s\n", + " 98800K .......... .......... .......... .......... .......... 76% 5.27M 56s\n", + " 98850K .......... .......... .......... .......... .......... 76% 328K 55s\n", + " 98900K .......... .......... .......... .......... .......... 76% 2.17M 55s\n", + " 98950K .......... .......... .......... .......... .......... 76% 364K 55s\n", + " 99000K .......... .......... .......... .......... .......... 76% 2.62M 55s\n", + " 99050K .......... .......... .......... .......... .......... 77% 352K 55s\n", + " 99100K .......... .......... .......... .......... .......... 77% 3.39M 55s\n", + " 99150K .......... .......... .......... .......... .......... 77% 339K 55s\n", + " 99200K .......... .......... .......... .......... .......... 77% 2.82M 55s\n", + " 99250K .......... .......... .......... .......... .......... 77% 2.53M 55s\n", + " 99300K .......... .......... .......... .......... .......... 77% 352K 55s\n", + " 99350K .......... .......... .......... .......... .......... 77% 354K 54s\n", + " 99400K .......... .......... .......... .......... .......... 77% 2.95M 54s\n", + " 99450K .......... .......... .......... .......... .......... 77% 340K 54s\n", + " 99500K .......... .......... .......... .......... .......... 77% 3.93M 54s\n", + " 99550K .......... .......... .......... .......... .......... 77% 352K 54s\n", + " 99600K .......... .......... .......... .......... .......... 77% 3.29M 54s\n", + " 99650K .......... .......... .......... .......... .......... 77% 2.29M 54s\n", + " 99700K .......... .......... .......... .......... .......... 77% 359K 54s\n", + " 99750K .......... .......... .......... .......... .......... 77% 1.88M 54s\n", + " 99800K .......... .......... .......... .......... .......... 77% 374K 54s\n", + " 99850K .......... .......... .......... .......... .......... 77% 350K 54s\n", + " 99900K .......... .......... .......... .......... .......... 77% 2.51M 53s\n", + " 99950K .......... .......... .......... .......... .......... 77% 362K 53s\n", + "100000K .......... .......... .......... .......... .......... 77% 2.56M 53s\n", + "100050K .......... .......... .......... .......... .......... 77% 340K 53s\n", + "100100K .......... .......... .......... .......... .......... 77% 3.67M 53s\n", + "100150K .......... .......... .......... .......... .......... 77% 360K 53s\n", + "100200K .......... .......... .......... .......... .......... 77% 3.03M 53s\n", + "100250K .......... .......... .......... .......... .......... 77% 350K 53s\n", + "100300K .......... .......... .......... .......... .......... 78% 3.27M 53s\n", + "100350K .......... .......... .......... .......... .......... 78% 347K 53s\n", + "100400K .......... .......... .......... .......... .......... 78% 2.80M 52s\n", + "100450K .......... .......... .......... .......... .......... 78% 355K 52s\n", + "100500K .......... .......... .......... .......... .......... 78% 2.21M 52s\n", + "100550K .......... .......... .......... .......... .......... 78% 365K 52s\n", + "100600K .......... .......... .......... .......... .......... 78% 2.38M 52s\n", + "100650K .......... .......... .......... .......... .......... 78% 361K 52s\n", + "100700K .......... .......... .......... .......... .......... 78% 1.60M 52s\n", + "100750K .......... .......... .......... .......... .......... 78% 371K 52s\n", + "100800K .......... .......... .......... .......... .......... 78% 1.56M 52s\n", + "100850K .......... .......... .......... .......... .......... 78% 789K 52s\n", + "100900K .......... .......... .......... .......... .......... 78% 521K 51s\n", + "100950K .......... .......... .......... .......... .......... 78% 764K 51s\n", + "101000K .......... .......... .......... .......... .......... 78% 532K 51s\n", + "101050K .......... .......... .......... .......... .......... 78% 727K 51s\n", + "101100K .......... .......... .......... .......... .......... 78% 552K 51s\n", + "101150K .......... .......... .......... .......... .......... 78% 730K 51s\n", + "101200K .......... .......... .......... .......... .......... 78% 552K 51s\n", + "101250K .......... .......... .......... .......... .......... 78% 680K 51s\n", + "101300K .......... .......... .......... .......... .......... 78% 579K 51s\n", + "101350K .......... .......... .......... .......... .......... 78% 685K 51s\n", + "101400K .......... .......... .......... .......... .......... 78% 584K 50s\n", + "101450K .......... .......... .......... .......... .......... 78% 683K 50s\n", + "101500K .......... .......... .......... .......... .......... 78% 564K 50s\n", + "101550K .......... .......... .......... .......... .......... 78% 648K 50s\n", + "101600K .......... .......... .......... .......... .......... 79% 602K 50s\n", + "101650K .......... .......... .......... .......... .......... 79% 664K 50s\n", + "101700K .......... .......... .......... .......... .......... 79% 608K 50s\n", + "101750K .......... .......... .......... .......... .......... 79% 642K 50s\n", + "101800K .......... .......... .......... .......... .......... 79% 614K 50s\n", + "101850K .......... .......... .......... .......... .......... 79% 636K 50s\n", + "101900K .......... .......... .......... .......... .......... 79% 626K 50s\n", + "101950K .......... .......... .......... .......... .......... 79% 646K 49s\n", + "102000K .......... .......... .......... .......... .......... 79% 611K 49s\n", + "102050K .......... .......... .......... .......... .......... 79% 629K 49s\n", + "102100K .......... .......... .......... .......... .......... 79% 635K 49s\n", + "102150K .......... .......... .......... .......... .......... 79% 636K 49s\n", + "102200K .......... .......... .......... .......... .......... 79% 625K 49s\n", + "102250K .......... .......... .......... .......... .......... 79% 610K 49s\n", + "102300K .......... .......... .......... .......... .......... 79% 652K 49s\n", + "102350K .......... .......... .......... .......... .......... 79% 549K 49s\n", + "102400K .......... .......... .......... .......... .......... 79% 695K 49s\n", + "102450K .......... .......... .......... .......... .......... 79% 575K 48s\n", + "102500K .......... .......... .......... .......... .......... 79% 711K 48s\n", + "102550K .......... .......... .......... .......... .......... 79% 551K 48s\n", + "102600K .......... .......... .......... .......... .......... 79% 737K 48s\n", + "102650K .......... .......... .......... .......... .......... 79% 546K 48s\n", + "102700K .......... .......... .......... .......... .......... 79% 746K 48s\n", + "102750K .......... .......... .......... .......... .......... 79% 443K 48s\n", + "102800K .......... .......... .......... .......... .......... 79% 877K 48s\n", + "102850K .......... .......... .......... .......... .......... 79% 169K 48s\n", + "102900K .......... .......... .......... .......... .......... 80% 125M 48s\n", + "102950K .......... .......... .......... .......... .......... 80% 43.0K 48s\n", + "103000K .......... .......... .......... .......... .......... 80% 232K 48s\n", + "103050K .......... .......... .......... .......... .......... 80% 487K 48s\n", + "103100K .......... .......... .......... .......... .......... 80% 817K 48s\n", + "103150K .......... .......... .......... .......... .......... 80% 512K 47s\n", + "103200K .......... .......... .......... .......... .......... 80% 813K 47s\n", + "103250K .......... .......... .......... .......... .......... 80% 501K 47s\n", + "103300K .......... .......... .......... .......... .......... 80% 836K 47s\n", + "103350K .......... .......... .......... .......... .......... 80% 6.84M 47s\n", + "103400K .......... .......... .......... .......... .......... 80% 327K 47s\n", + "103450K .......... .......... .......... .......... .......... 80% 4.79M 47s\n", + "103500K .......... .......... .......... .......... .......... 80% 338K 47s\n", + "103550K .......... .......... .......... .......... .......... 80% 3.60M 47s\n", + "103600K .......... .......... .......... .......... .......... 80% 343K 47s\n", + "103650K .......... .......... .......... .......... .......... 80% 3.41M 46s\n", + "103700K .......... .......... .......... .......... .......... 80% 344K 46s\n", + "103750K .......... .......... .......... .......... .......... 80% 3.44M 46s\n", + "103800K .......... .......... .......... .......... .......... 80% 345K 46s\n", + "103850K .......... .......... .......... .......... .......... 80% 3.45M 46s\n", + "103900K .......... .......... .......... .......... .......... 80% 347K 46s\n", + "103950K .......... .......... .......... .......... .......... 80% 3.03M 46s\n", + "104000K .......... .......... .......... .......... .......... 80% 339K 46s\n", + "104050K .......... .......... .......... .......... .......... 80% 3.06M 46s\n", + "104100K .......... .......... .......... .......... .......... 80% 516K 46s\n", + "104150K .......... .......... .......... .......... .......... 80% 798K 46s\n", + "104200K .......... .......... .......... .......... .......... 81% 506K 45s\n", + "104250K .......... .......... .......... .......... .......... 81% 821K 45s\n", + "104300K .......... .......... .......... .......... .......... 81% 499K 45s\n", + "104350K .......... .......... .......... .......... .......... 81% 819K 45s\n", + "104400K .......... .......... .......... .......... .......... 81% 516K 45s\n", + "104450K .......... .......... .......... .......... .......... 81% 777K 45s\n", + "104500K .......... .......... .......... .......... .......... 81% 513K 45s\n", + "104550K .......... .......... .......... .......... .......... 81% 817K 45s\n", + "104600K .......... .......... .......... .......... .......... 81% 504K 45s\n", + "104650K .......... .......... .......... .......... .......... 81% 917K 45s\n", + "104700K .......... .......... .......... .......... .......... 81% 484K 44s\n", + "104750K .......... .......... .......... .......... .......... 81% 794K 44s\n", + "104800K .......... .......... .......... .......... .......... 81% 489K 44s\n", + "104850K .......... .......... .......... .......... .......... 81% 885K 44s\n", + "104900K .......... .......... .......... .......... .......... 81% 488K 44s\n", + "104950K .......... .......... .......... .......... .......... 81% 862K 44s\n", + "105000K .......... .......... .......... .......... .......... 81% 489K 44s\n", + "105050K .......... .......... .......... .......... .......... 81% 867K 44s\n", + "105100K .......... .......... .......... .......... .......... 81% 478K 44s\n", + "105150K .......... .......... .......... .......... .......... 81% 873K 44s\n", + "105200K .......... .......... .......... .......... .......... 81% 495K 44s\n", + "105250K .......... .......... .......... .......... .......... 81% 847K 43s\n", + "105300K .......... .......... .......... .......... .......... 81% 502K 43s\n", + "105350K .......... .......... .......... .......... .......... 81% 813K 43s\n", + "105400K .......... .......... .......... .......... .......... 81% 518K 43s\n", + "105450K .......... .......... .......... .......... .......... 82% 799K 43s\n", + "105500K .......... .......... .......... .......... .......... 82% 518K 43s\n", + "105550K .......... .......... .......... .......... .......... 82% 772K 43s\n", + "105600K .......... .......... .......... .......... .......... 82% 505K 43s\n", + "105650K .......... .......... .......... .......... .......... 82% 844K 43s\n", + "105700K .......... .......... .......... .......... .......... 82% 508K 43s\n", + "105750K .......... .......... .......... .......... .......... 82% 865K 42s\n", + "105800K .......... .......... .......... .......... .......... 82% 492K 42s\n", + "105850K .......... .......... .......... .......... .......... 82% 854K 42s\n", + "105900K .......... .......... .......... .......... .......... 82% 498K 42s\n", + "105950K .......... .......... .......... .......... .......... 82% 885K 42s\n", + "106000K .......... .......... .......... .......... .......... 82% 486K 42s\n", + "106050K .......... .......... .......... .......... .......... 82% 822K 42s\n", + "106100K .......... .......... .......... .......... .......... 82% 515K 42s\n", + "106150K .......... .......... .......... .......... .......... 82% 832K 42s\n", + "106200K .......... .......... .......... .......... .......... 82% 511K 42s\n", + "106250K .......... .......... .......... .......... .......... 82% 820K 42s\n", + "106300K .......... .......... .......... .......... .......... 82% 518K 41s\n", + "106350K .......... .......... .......... .......... .......... 82% 801K 41s\n", + "106400K .......... .......... .......... .......... .......... 82% 516K 41s\n", + "106450K .......... .......... .......... .......... .......... 82% 815K 41s\n", + "106500K .......... .......... .......... .......... .......... 82% 506K 41s\n", + "106550K .......... .......... .......... .......... .......... 82% 799K 41s\n", + "106600K .......... .......... .......... .......... .......... 82% 516K 41s\n", + "106650K .......... .......... .......... .......... .......... 82% 844K 41s\n", + "106700K .......... .......... .......... .......... .......... 82% 502K 41s\n", + "106750K .......... .......... .......... .......... .......... 83% 835K 41s\n", + "106800K .......... .......... .......... .......... .......... 83% 507K 40s\n", + "106850K .......... .......... .......... .......... .......... 83% 788K 40s\n", + "106900K .......... .......... .......... .......... .......... 83% 530K 40s\n", + "106950K .......... .......... .......... .......... .......... 83% 769K 40s\n", + "107000K .......... .......... .......... .......... .......... 83% 537K 40s\n", + "107050K .......... .......... .......... .......... .......... 83% 801K 40s\n", + "107100K .......... .......... .......... .......... .......... 83% 510K 40s\n", + "107150K .......... .......... .......... .......... .......... 83% 798K 40s\n", + "107200K .......... .......... .......... .......... .......... 83% 527K 40s\n", + "107250K .......... .......... .......... .......... .......... 83% 768K 40s\n", + "107300K .......... .......... .......... .......... .......... 83% 535K 39s\n", + "107350K .......... .......... .......... .......... .......... 83% 777K 39s\n", + "107400K .......... .......... .......... .......... .......... 83% 516K 39s\n", + "107450K .......... .......... .......... .......... .......... 83% 787K 39s\n", + "107500K .......... .......... .......... .......... .......... 83% 478K 39s\n", + "107550K .......... .......... .......... .......... .......... 83% 646K 39s\n", + "107600K .......... .......... .......... .......... .......... 83% 648K 39s\n", + "107650K .......... .......... .......... .......... .......... 83% 843K 39s\n", + "107700K .......... .......... .......... .......... .......... 83% 519K 39s\n", + "107750K .......... .......... .......... .......... .......... 83% 841K 39s\n", + "107800K .......... .......... .......... .......... .......... 83% 519K 39s\n", + "107850K .......... .......... .......... .......... .......... 83% 803K 38s\n", + "107900K .......... .......... .......... .......... .......... 83% 513K 38s\n", + "107950K .......... .......... .......... .......... .......... 83% 771K 38s\n", + "108000K .......... .......... .......... .......... .......... 83% 532K 38s\n", + "108050K .......... .......... .......... .......... .......... 84% 759K 38s\n", + "108100K .......... .......... .......... .......... .......... 84% 528K 38s\n", + "108150K .......... .......... .......... .......... .......... 84% 784K 38s\n", + "108200K .......... .......... .......... .......... .......... 84% 424K 38s\n", + "108250K .......... .......... .......... .......... .......... 84% 717K 38s\n", + "108300K .......... .......... .......... .......... .......... 84% 547K 38s\n", + "108350K .......... .......... .......... .......... .......... 84% 509K 38s\n", + "108400K .......... .......... .......... .......... .......... 84% 842K 37s\n", + "108450K .......... .......... .......... .......... .......... 84% 480K 37s\n", + "108500K .......... .......... .......... .......... .......... 84% 901K 37s\n", + "108550K .......... .......... .......... .......... .......... 84% 503K 37s\n", + "108600K .......... .......... .......... .......... .......... 84% 837K 37s\n", + "108650K .......... .......... .......... .......... .......... 84% 503K 37s\n", + "108700K .......... .......... .......... .......... .......... 84% 837K 37s\n", + "108750K .......... .......... .......... .......... .......... 84% 502K 37s\n", + "108800K .......... .......... .......... .......... .......... 84% 855K 37s\n", + "108850K .......... .......... .......... .......... .......... 84% 498K 37s\n", + "108900K .......... .......... .......... .......... .......... 84% 871K 36s\n", + "108950K .......... .......... .......... .......... .......... 84% 471K 36s\n", + "109000K .......... .......... .......... .......... .......... 84% 941K 36s\n", + "109050K .......... .......... .......... .......... .......... 84% 459K 36s\n", + "109100K .......... .......... .......... .......... .......... 84% 982K 36s\n", + "109150K .......... .......... .......... .......... .......... 84% 475K 36s\n", + "109200K .......... .......... .......... .......... .......... 84% 918K 36s\n", + "109250K .......... .......... .......... .......... .......... 84% 469K 36s\n", + "109300K .......... .......... .......... .......... .......... 84% 957K 36s\n", + "109350K .......... .......... .......... .......... .......... 85% 462K 36s\n", + "109400K .......... .......... .......... .......... .......... 85% 918K 36s\n", + "109450K .......... .......... .......... .......... .......... 85% 474K 35s\n", + "109500K .......... .......... .......... .......... .......... 85% 3.89M 35s\n", + "109550K .......... .......... .......... .......... .......... 85% 342K 35s\n", + "109600K .......... .......... .......... .......... .......... 85% 3.66M 35s\n", + "109650K .......... .......... .......... .......... .......... 85% 346K 35s\n", + "109700K .......... .......... .......... .......... .......... 85% 3.75M 35s\n", + "109750K .......... .......... .......... .......... .......... 85% 340K 35s\n", + "109800K .......... .......... .......... .......... .......... 85% 3.91M 35s\n", + "109850K .......... .......... .......... .......... .......... 85% 342K 35s\n", + "109900K .......... .......... .......... .......... .......... 85% 3.10M 35s\n", + "109950K .......... .......... .......... .......... .......... 85% 339K 34s\n", + "110000K .......... .......... .......... .......... .......... 85% 3.99M 34s\n", + "110050K .......... .......... .......... .......... .......... 85% 343K 34s\n", + "110100K .......... .......... .......... .......... .......... 85% 3.81M 34s\n", + "110150K .......... .......... .......... .......... .......... 85% 340K 34s\n", + "110200K .......... .......... .......... .......... .......... 85% 4.02M 34s\n", + "110250K .......... .......... .......... .......... .......... 85% 337K 34s\n", + "110300K .......... .......... .......... .......... .......... 85% 4.51M 34s\n", + "110350K .......... .......... .......... .......... .......... 85% 339K 34s\n", + "110400K .......... .......... .......... .......... .......... 85% 4.12M 34s\n", + "110450K .......... .......... .......... .......... .......... 85% 340K 34s\n", + "110500K .......... .......... .......... .......... .......... 85% 3.64M 33s\n", + "110550K .......... .......... .......... .......... .......... 85% 342K 33s\n", + "110600K .......... .......... .......... .......... .......... 86% 4.03M 33s\n", + "110650K .......... .......... .......... .......... .......... 86% 339K 33s\n", + "110700K .......... .......... .......... .......... .......... 86% 4.84M 33s\n", + "110750K .......... .......... .......... .......... .......... 86% 328K 33s\n", + "110800K .......... .......... .......... .......... .......... 86% 4.56M 33s\n", + "110850K .......... .......... .......... .......... .......... 86% 339K 33s\n", + "110900K .......... .......... .......... .......... .......... 86% 3.58M 33s\n", + "110950K .......... .......... .......... .......... .......... 86% 325K 33s\n", + "111000K .......... .......... .......... .......... .......... 86% 6.59M 32s\n", + "111050K .......... .......... .......... .......... .......... 86% 336K 32s\n", + "111100K .......... .......... .......... .......... .......... 86% 4.42M 32s\n", + "111150K .......... .......... .......... .......... .......... 86% 959K 32s\n", + "111200K .......... .......... .......... .......... .......... 86% 456K 32s\n", + "111250K .......... .......... .......... .......... .......... 86% 970K 32s\n", + "111300K .......... .......... .......... .......... .......... 86% 452K 32s\n", + "111350K .......... .......... .......... .......... .......... 86% 1.02M 32s\n", + "111400K .......... .......... .......... .......... .......... 86% 448K 32s\n", + "111450K .......... .......... .......... .......... .......... 86% 1018K 32s\n", + "111500K .......... .......... .......... .......... .......... 86% 456K 32s\n", + "111550K .......... .......... .......... .......... .......... 86% 1.02M 31s\n", + "111600K .......... .......... .......... .......... .......... 86% 440K 31s\n", + "111650K .......... .......... .......... .......... .......... 86% 1.06M 31s\n", + "111700K .......... .......... .......... .......... .......... 86% 440K 31s\n", + "111750K .......... .......... .......... .......... .......... 86% 1.09M 31s\n", + "111800K .......... .......... .......... .......... .......... 86% 429K 31s\n", + "111850K .......... .......... .......... .......... .......... 86% 1.16M 31s\n", + "111900K .......... .......... .......... .......... .......... 87% 431K 31s\n", + "111950K .......... .......... .......... .......... .......... 87% 1.10M 31s\n", + "112000K .......... .......... .......... .......... .......... 87% 436K 31s\n", + "112050K .......... .......... .......... .......... .......... 87% 1.11M 31s\n", + "112100K .......... .......... .......... .......... .......... 87% 429K 30s\n", + "112150K .......... .......... .......... .......... .......... 87% 1.13M 30s\n", + "112200K .......... .......... .......... .......... .......... 87% 433K 30s\n", + "112250K .......... .......... .......... .......... .......... 87% 1.13M 30s\n", + "112300K .......... .......... .......... .......... .......... 87% 434K 30s\n", + "112350K .......... .......... .......... .......... .......... 87% 1.14M 30s\n", + "112400K .......... .......... .......... .......... .......... 87% 435K 30s\n", + "112450K .......... .......... .......... .......... .......... 87% 1.15M 30s\n", + "112500K .......... .......... .......... .......... .......... 87% 414K 30s\n", + "112550K .......... .......... .......... .......... .......... 87% 1.26M 30s\n", + "112600K .......... .......... .......... .......... .......... 87% 422K 29s\n", + "112650K .......... .......... .......... .......... .......... 87% 1.11M 29s\n", + "112700K .......... .......... .......... .......... .......... 87% 413K 29s\n", + "112750K .......... .......... .......... .......... .......... 87% 1.28M 29s\n", + "112800K .......... .......... .......... .......... .......... 87% 421K 29s\n", + "112850K .......... .......... .......... .......... .......... 87% 1.11M 29s\n", + "112900K .......... .......... .......... .......... .......... 87% 437K 29s\n", + "112950K .......... .......... .......... .......... .......... 87% 1.21M 29s\n", + "113000K .......... .......... .......... .......... .......... 87% 420K 29s\n", + "113050K .......... .......... .......... .......... .......... 87% 1.25M 29s\n", + "113100K .......... .......... .......... .......... .......... 87% 424K 29s\n", + "113150K .......... .......... .......... .......... .......... 87% 1.16M 28s\n", + "113200K .......... .......... .......... .......... .......... 88% 408K 28s\n", + "113250K .......... .......... .......... .......... .......... 88% 1.32M 28s\n", + "113300K .......... .......... .......... .......... .......... 88% 421K 28s\n", + "113350K .......... .......... .......... .......... .......... 88% 1.22M 28s\n", + "113400K .......... .......... .......... .......... .......... 88% 412K 28s\n", + "113450K .......... .......... .......... .......... .......... 88% 1.31M 28s\n", + "113500K .......... .......... .......... .......... .......... 88% 414K 28s\n", + "113550K .......... .......... .......... .......... .......... 88% 1.27M 28s\n", + "113600K .......... .......... .......... .......... .......... 88% 417K 28s\n", + "113650K .......... .......... .......... .......... .......... 88% 1.13M 28s\n", + "113700K .......... .......... .......... .......... .......... 88% 434K 27s\n", + "113750K .......... .......... .......... .......... .......... 88% 1.13M 27s\n", + "113800K .......... .......... .......... .......... .......... 88% 434K 27s\n", + "113850K .......... .......... .......... .......... .......... 88% 1.12M 27s\n", + "113900K .......... .......... .......... .......... .......... 88% 427K 27s\n", + "113950K .......... .......... .......... .......... .......... 88% 547K 27s\n", + "114000K .......... .......... .......... .......... .......... 88% 173K 27s\n", + "114050K .......... .......... .......... .......... .......... 88% 175M 27s\n", + "114100K .......... .......... .......... .......... .......... 88% 52.0K 27s\n", + "114150K .......... .......... .......... .......... .......... 88% 159K 27s\n", + "114200K .......... .......... .......... .......... .......... 88% 3.50M 27s\n", + "114250K .......... .......... .......... .......... .......... 88% 329K 27s\n", + "114300K .......... .......... .......... .......... .......... 88% 5.29M 26s\n", + "114350K .......... .......... .......... .......... .......... 88% 326K 26s\n", + "114400K .......... .......... .......... .......... .......... 88% 5.27M 26s\n", + "114450K .......... .......... .......... .......... .......... 88% 328K 26s\n", + "114500K .......... .......... .......... .......... .......... 89% 4.96M 26s\n", + "114550K .......... .......... .......... .......... .......... 89% 337K 26s\n", + "114600K .......... .......... .......... .......... .......... 89% 3.98M 26s\n", + "114650K .......... .......... .......... .......... .......... 89% 338K 26s\n", + "114700K .......... .......... .......... .......... .......... 89% 3.34M 26s\n", + "114750K .......... .......... .......... .......... .......... 89% 342K 26s\n", + "114800K .......... .......... .......... .......... .......... 89% 3.99M 26s\n", + "114850K .......... .......... .......... .......... .......... 89% 344K 25s\n", + "114900K .......... .......... .......... .......... .......... 89% 3.55M 25s\n", + "114950K .......... .......... .......... .......... .......... 89% 337K 25s\n", + "115000K .......... .......... .......... .......... .......... 89% 4.68M 25s\n", + "115050K .......... .......... .......... .......... .......... 89% 352K 25s\n", + "115100K .......... .......... .......... .......... .......... 89% 2.74M 25s\n", + "115150K .......... .......... .......... .......... .......... 89% 370K 25s\n", + "115200K .......... .......... .......... .......... .......... 89% 1.86M 25s\n", + "115250K .......... .......... .......... .......... .......... 89% 379K 25s\n", + "115300K .......... .......... .......... .......... .......... 89% 1.77M 25s\n", + "115350K .......... .......... .......... .......... .......... 89% 378K 24s\n", + "115400K .......... .......... .......... .......... .......... 89% 1.74M 24s\n", + "115450K .......... .......... .......... .......... .......... 89% 373K 24s\n", + "115500K .......... .......... .......... .......... .......... 89% 1.82M 24s\n", + "115550K .......... .......... .......... .......... .......... 89% 374K 24s\n", + "115600K .......... .......... .......... .......... .......... 89% 1.73M 24s\n", + "115650K .......... .......... .......... .......... .......... 89% 385K 24s\n", + "115700K .......... .......... .......... .......... .......... 89% 1.74M 24s\n", + "115750K .......... .......... .......... .......... .......... 90% 378K 24s\n", + "115800K .......... .......... .......... .......... .......... 90% 1.69M 24s\n", + "115850K .......... .......... .......... .......... .......... 90% 389K 24s\n", + "115900K .......... .......... .......... .......... .......... 90% 1.88M 23s\n", + "115950K .......... .......... .......... .......... .......... 90% 372K 23s\n", + "116000K .......... .......... .......... .......... .......... 90% 1.77M 23s\n", + "116050K .......... .......... .......... .......... .......... 90% 370K 23s\n", + "116100K .......... .......... .......... .......... .......... 90% 1.86M 23s\n", + "116150K .......... .......... .......... .......... .......... 90% 387K 23s\n", + "116200K .......... .......... .......... .......... .......... 90% 1.54M 23s\n", + "116250K .......... .......... .......... .......... .......... 90% 385K 23s\n", + "116300K .......... .......... .......... .......... .......... 90% 1.72M 23s\n", + "116350K .......... .......... .......... .......... .......... 90% 379K 23s\n", + "116400K .......... .......... .......... .......... .......... 90% 1.75M 23s\n", + "116450K .......... .......... .......... .......... .......... 90% 379K 22s\n", + "116500K .......... .......... .......... .......... .......... 90% 1.63M 22s\n", + "116550K .......... .......... .......... .......... .......... 90% 384K 22s\n", + "116600K .......... .......... .......... .......... .......... 90% 1.66M 22s\n", + "116650K .......... .......... .......... .......... .......... 90% 381K 22s\n", + "116700K .......... .......... .......... .......... .......... 90% 1.33M 22s\n", + "116750K .......... .......... .......... .......... .......... 90% 403K 22s\n", + "116800K .......... .......... .......... .......... .......... 90% 647K 22s\n", + "116850K .......... .......... .......... .......... .......... 90% 170K 22s\n", + "116900K .......... .......... .......... .......... .......... 90% 170M 22s\n", + "116950K .......... .......... .......... .......... .......... 90% 464K 21s\n", + "117000K .......... .......... .......... .......... .......... 90% 40.5K 22s\n", + "117050K .......... .......... .......... .......... .......... 91% 313K 21s\n", + "117100K .......... .......... .......... .......... .......... 91% 319K 21s\n", + "117150K .......... .......... .......... .......... .......... 91% 327K 21s\n", + "117200K .......... .......... .......... .......... .......... 91% 3.37M 21s\n", + "117250K .......... .......... .......... .......... .......... 91% 311K 21s\n", + "117300K .......... .......... .......... .......... .......... 91% 319K 21s\n", + "117350K .......... .......... .......... .......... .......... 91% 330K 21s\n", + "117400K .......... .......... .......... .......... .......... 91% 2.61M 21s\n", + "117450K .......... .......... .......... .......... .......... 91% 313K 21s\n", + "117500K .......... .......... .......... .......... .......... 91% 344K 21s\n", + "117550K .......... .......... .......... .......... .......... 91% 321K 21s\n", + "117600K .......... .......... .......... .......... .......... 91% 2.08M 20s\n", + "117650K .......... .......... .......... .......... .......... 91% 349K 20s\n", + "117700K .......... .......... .......... .......... .......... 91% 323K 20s\n", + "117750K .......... .......... .......... .......... .......... 91% 572K 20s\n", + "117800K .......... .......... .......... .......... .......... 91% 618K 20s\n", + "117850K .......... .......... .......... .......... .......... 91% 337K 20s\n", + "117900K .......... .......... .......... .......... .......... 91% 565K 20s\n", + "117950K .......... .......... .......... .......... .......... 91% 609K 20s\n", + "118000K .......... .......... .......... .......... .......... 91% 336K 20s\n", + "118050K .......... .......... .......... .......... .......... 91% 566K 20s\n", + "118100K .......... .......... .......... .......... .......... 91% 636K 20s\n", + "118150K .......... .......... .......... .......... .......... 91% 338K 19s\n", + "118200K .......... .......... .......... .......... .......... 91% 1.96M 19s\n", + "118250K .......... .......... .......... .......... .......... 91% 354K 19s\n", + "118300K .......... .......... .......... .......... .......... 91% 340K 19s\n", + "118350K .......... .......... .......... .......... .......... 92% 2.70M 19s\n", + "118400K .......... .......... .......... .......... .......... 92% 327K 19s\n", + "118450K .......... .......... .......... .......... .......... 92% 556K 19s\n", + "118500K .......... .......... .......... .......... .......... 92% 658K 19s\n", + "118550K .......... .......... .......... .......... .......... 92% 279K 19s\n", + "118600K .......... .......... .......... .......... .......... 92% 7.59M 19s\n", + "118650K .......... .......... .......... .......... .......... 92% 141K 19s\n", + "118700K .......... .......... .......... .......... .......... 92% 9.55M 18s\n", + "118750K .......... .......... .......... .......... .......... 92% 156K 18s\n", + "118800K .......... .......... .......... .......... .......... 92% 308K 18s\n", + "118850K .......... .......... .......... .......... .......... 92% 310K 18s\n", + "118900K .......... .......... .......... .......... .......... 92% 299K 18s\n", + "118950K .......... .......... .......... .......... .......... 92% 305K 18s\n", + "119000K .......... .......... .......... .......... .......... 92% 310K 18s\n", + "119050K .......... .......... .......... .......... .......... 92% 316K 18s\n", + "119100K .......... .......... .......... .......... .......... 92% 315K 18s\n", + "119150K .......... .......... .......... .......... .......... 92% 316K 18s\n", + "119200K .......... .......... .......... .......... .......... 92% 318K 18s\n", + "119250K .......... .......... .......... .......... .......... 92% 310K 17s\n", + "119300K .......... .......... .......... .......... .......... 92% 320K 17s\n", + "119350K .......... .......... .......... .......... .......... 92% 318K 17s\n", + "119400K .......... .......... .......... .......... .......... 92% 325K 17s\n", + "119450K .......... .......... .......... .......... .......... 92% 335K 17s\n", + "119500K .......... .......... .......... .......... .......... 92% 315K 17s\n", + "119550K .......... .......... .......... .......... .......... 92% 324K 17s\n", + "119600K .......... .......... .......... .......... .......... 93% 1.66M 17s\n", + "119650K .......... .......... .......... .......... .......... 93% 325K 17s\n", + "119700K .......... .......... .......... .......... .......... 93% 339K 17s\n", + "119750K .......... .......... .......... .......... .......... 93% 315K 17s\n", + "119800K .......... .......... .......... .......... .......... 93% 345K 16s\n", + "119850K .......... .......... .......... .......... .......... 93% 1.56M 16s\n", + "119900K .......... .......... .......... .......... .......... 93% 335K 16s\n", + "119950K .......... .......... .......... .......... .......... 93% 324K 16s\n", + "120000K .......... .......... .......... .......... .......... 93% 348K 16s\n", + "120050K .......... .......... .......... .......... .......... 93% 1.73M 16s\n", + "120100K .......... .......... .......... .......... .......... 93% 324K 16s\n", + "120150K .......... .......... .......... .......... .......... 93% 356K 16s\n", + "120200K .......... .......... .......... .......... .......... 93% 1.21M 16s\n", + "120250K .......... .......... .......... .......... .......... 93% 355K 16s\n", + "120300K .......... .......... .......... .......... .......... 93% 334K 16s\n", + "120350K .......... .......... .......... .......... .......... 93% 379K 15s\n", + "120400K .......... .......... .......... .......... .......... 93% 1.19M 15s\n", + "120450K .......... .......... .......... .......... .......... 93% 335K 15s\n", + "120500K .......... .......... .......... .......... .......... 93% 221K 15s\n", + "120550K .......... .......... .......... .......... .......... 93% 8.57M 15s\n", + "120600K .......... .......... .......... .......... .......... 93% 97.8K 15s\n", + "120650K .......... .......... .......... .......... .......... 93% 314K 15s\n", + "120700K .......... .......... .......... .......... .......... 93% 283K 15s\n", + "120750K .......... .......... .......... .......... .......... 93% 145K 15s\n", + "120800K .......... .......... .......... .......... .......... 93% 279K 15s\n", + "120850K .......... .......... .......... .......... .......... 93% 162K 15s\n", + "120900K .......... .......... .......... .......... .......... 94% 288K 15s\n", + "120950K .......... .......... .......... .......... .......... 94% 281K 14s\n", + "121000K .......... .......... .......... .......... .......... 94% 289K 14s\n", + "121050K .......... .......... .......... .......... .......... 94% 283K 14s\n", + "121100K .......... .......... .......... .......... .......... 94% 163K 14s\n", + "121150K .......... .......... .......... .......... .......... 94% 292K 14s\n", + "121200K .......... .......... .......... .......... .......... 94% 283K 14s\n", + "121250K .......... .......... .......... .......... .......... 94% 289K 14s\n", + "121300K .......... .......... .......... .......... .......... 94% 283K 14s\n", + "121350K .......... .......... .......... .......... .......... 94% 161K 14s\n", + "121400K .......... .......... .......... .......... .......... 94% 317K 14s\n", + "121450K .......... .......... .......... .......... .......... 94% 314K 14s\n", + "121500K .......... .......... .......... .......... .......... 94% 321K 13s\n", + "121550K .......... .......... .......... .......... .......... 94% 325K 13s\n", + "121600K .......... .......... .......... .......... .......... 94% 940K 13s\n", + "121650K .......... .......... .......... .......... .......... 94% 305K 13s\n", + "121700K .......... .......... .......... .......... .......... 94% 306K 13s\n", + "121750K .......... .......... .......... .......... .......... 94% 306K 13s\n", + "121800K .......... .......... .......... .......... .......... 94% 318K 13s\n", + "121850K .......... .......... .......... .......... .......... 94% 377K 13s\n", + "121900K .......... .......... .......... .......... .......... 94% 1.28M 13s\n", + "121950K .......... .......... .......... .......... .......... 94% 321K 13s\n", + "122000K .......... .......... .......... .......... .......... 94% 318K 13s\n", + "122050K .......... .......... .......... .......... .......... 94% 401K 12s\n", + "122100K .......... .......... .......... .......... .......... 94% 765K 12s\n", + "122150K .......... .......... .......... .......... .......... 94% 372K 12s\n", + "122200K .......... .......... .......... .......... .......... 95% 333K 12s\n", + "122250K .......... .......... .......... .......... .......... 95% 399K 12s\n", + "122300K .......... .......... .......... .......... .......... 95% 1023K 12s\n", + "122350K .......... .......... .......... .......... .......... 95% 330K 12s\n", + "122400K .......... .......... .......... .......... .......... 95% 355K 12s\n", + "122450K .......... .......... .......... .......... .......... 95% 1.32M 12s\n", + "122500K .......... .......... .......... .......... .......... 95% 340K 12s\n", + "122550K .......... .......... .......... .......... .......... 95% 371K 11s\n", + "122600K .......... .......... .......... .......... .......... 95% 1.39M 11s\n", + "122650K .......... .......... .......... .......... .......... 95% 340K 11s\n", + "122700K .......... .......... .......... .......... .......... 95% 375K 11s\n", + "122750K .......... .......... .......... .......... .......... 95% 1.38M 11s\n", + "122800K .......... .......... .......... .......... .......... 95% 337K 11s\n", + "122850K .......... .......... .......... .......... .......... 95% 405K 11s\n", + "122900K .......... .......... .......... .......... .......... 95% 1.10M 11s\n", + "122950K .......... .......... .......... .......... .......... 95% 339K 11s\n", + "123000K .......... .......... .......... .......... .......... 95% 468K 11s\n", + "123050K .......... .......... .......... .......... .......... 95% 792K 11s\n", + "123100K .......... .......... .......... .......... .......... 95% 381K 10s\n", + "123150K .......... .......... .......... .......... .......... 95% 1.42M 10s\n", + "123200K .......... .......... .......... .......... .......... 95% 351K 10s\n", + "123250K .......... .......... .......... .......... .......... 95% 440K 10s\n", + "123300K .......... .......... .......... .......... .......... 95% 876K 10s\n", + "123350K .......... .......... .......... .......... .......... 95% 369K 10s\n", + "123400K .......... .......... .......... .......... .......... 95% 1007K 10s\n", + "123450K .......... .......... .......... .......... .......... 95% 161K 10s\n", + "123500K .......... .......... .......... .......... .......... 96% 218M 10s\n", + "123550K .......... .......... .......... .......... .......... 96% 298K 10s\n", + "123600K .......... .......... .......... .......... .......... 96% 303K 10s\n", + "123650K .......... .......... .......... .......... .......... 96% 311K 9s\n", + "123700K .......... .......... .......... .......... .......... 96% 311K 9s\n", + "123750K .......... .......... .......... .......... .......... 96% 318K 9s\n", + "123800K .......... .......... .......... .......... .......... 96% 311K 9s\n", + "123850K .......... .......... .......... .......... .......... 96% 312K 9s\n", + "123900K .......... .......... .......... .......... .......... 96% 315K 9s\n", + "123950K .......... .......... .......... .......... .......... 96% 313K 9s\n", + "124000K .......... .......... .......... .......... .......... 96% 322K 9s\n", + "124050K .......... .......... .......... .......... .......... 96% 323K 9s\n", + "124100K .......... .......... .......... .......... .......... 96% 315K 9s\n", + "124150K .......... .......... .......... .......... .......... 96% 316K 8s\n", + "124200K .......... .......... .......... .......... .......... 96% 321K 8s\n", + "124250K .......... .......... .......... .......... .......... 96% 328K 8s\n", + "124300K .......... .......... .......... .......... .......... 96% 2.14M 8s\n", + "124350K .......... .......... .......... .......... .......... 96% 324K 8s\n", + "124400K .......... .......... .......... .......... .......... 96% 320K 8s\n", + "124450K .......... .......... .......... .......... .......... 96% 325K 8s\n", + "124500K .......... .......... .......... .......... .......... 96% 328K 8s\n", + "124550K .......... .......... .......... .......... .......... 96% 472K 8s\n", + "124600K .......... .......... .......... .......... .......... 96% 579K 8s\n", + "124650K .......... .......... .......... .......... .......... 96% 361K 8s\n", + "124700K .......... .......... .......... .......... .......... 96% 329K 7s\n", + "124750K .......... .......... .......... .......... .......... 97% 379K 7s\n", + "124800K .......... .......... .......... .......... .......... 97% 828K 7s\n", + "124850K .......... .......... .......... .......... .......... 97% 369K 7s\n", + "124900K .......... .......... .......... .......... .......... 97% 336K 7s\n", + "124950K .......... .......... .......... .......... .......... 97% 1.23M 7s\n", + "125000K .......... .......... .......... .......... .......... 97% 377K 7s\n", + "125050K .......... .......... .......... .......... .......... 97% 325K 7s\n", + "125100K .......... .......... .......... .......... .......... 97% 431K 7s\n", + "125150K .......... .......... .......... .......... .......... 97% 763K 7s\n", + "125200K .......... .......... .......... .......... .......... 97% 371K 7s\n", + "125250K .......... .......... .......... .......... .......... 97% 427K 6s\n", + "125300K .......... .......... .......... .......... .......... 97% 761K 6s\n", + "125350K .......... .......... .......... .......... .......... 97% 366K 6s\n", + "125400K .......... .......... .......... .......... .......... 97% 438K 6s\n", + "125450K .......... .......... .......... .......... .......... 97% 842K 6s\n", + "125500K .......... .......... .......... .......... .......... 97% 347K 6s\n", + "125550K .......... .......... .......... .......... .......... 97% 451K 6s\n", + "125600K .......... .......... .......... .......... .......... 97% 908K 6s\n", + "125650K .......... .......... .......... .......... .......... 97% 326K 6s\n", + "125700K .......... .......... .......... .......... .......... 97% 1.63M 6s\n", + "125750K .......... .......... .......... .......... .......... 97% 331K 5s\n", + "125800K .......... .......... .......... .......... .......... 97% 382K 5s\n", + "125850K .......... .......... .......... .......... .......... 97% 690K 5s\n", + "125900K .......... .......... .......... .......... .......... 97% 341K 5s\n", + "125950K .......... .......... .......... .......... .......... 97% 1.47M 5s\n", + "126000K .......... .......... .......... .......... .......... 97% 379K 5s\n", + "126050K .......... .......... .......... .......... .......... 98% 537K 5s\n", + "126100K .......... .......... .......... .......... .......... 98% 699K 5s\n", + "126150K .......... .......... .......... .......... .......... 98% 350K 5s\n", + "126200K .......... .......... .......... .......... .......... 98% 2.33M 5s\n", + "126250K .......... .......... .......... .......... .......... 98% 349K 5s\n", + "126300K .......... .......... .......... .......... .......... 98% 752K 4s\n", + "126350K .......... .......... .......... .......... .......... 98% 512K 4s\n", + "126400K .......... .......... .......... .......... .......... 98% 540K 4s\n", + "126450K .......... .......... .......... .......... .......... 98% 713K 4s\n", + "126500K .......... .......... .......... .......... .......... 98% 362K 4s\n", + "126550K .......... .......... .......... .......... .......... 98% 1.97M 4s\n", + "126600K .......... .......... .......... .......... .......... 98% 344K 4s\n", + "126650K .......... .......... .......... .......... .......... 98% 2.75M 4s\n", + "126700K .......... .......... .......... .......... .......... 98% 351K 4s\n", + "126750K .......... .......... .......... .......... .......... 98% 2.91M 4s\n", + "126800K .......... .......... .......... .......... .......... 98% 348K 3s\n", + "126850K .......... .......... .......... .......... .......... 98% 1.92M 3s\n", + "126900K .......... .......... .......... .......... .......... 98% 370K 3s\n", + "126950K .......... .......... .......... .......... .......... 98% 742K 3s\n", + "127000K .......... .......... .......... .......... .......... 98% 528K 3s\n", + "127050K .......... .......... .......... .......... .......... 98% 670K 3s\n", + "127100K .......... .......... .......... .......... .......... 98% 579K 3s\n", + "127150K .......... .......... .......... .......... .......... 98% 695K 3s\n", + "127200K .......... .......... .......... .......... .......... 98% 571K 3s\n", + "127250K .......... .......... .......... .......... .......... 98% 700K 3s\n", + "127300K .......... .......... .......... .......... .......... 98% 551K 2s\n", + "127350K .......... .......... .......... .......... .......... 99% 751K 2s\n", + "127400K .......... .......... .......... .......... .......... 99% 534K 2s\n", + "127450K .......... .......... .......... .......... .......... 99% 780K 2s\n", + "127500K .......... .......... .......... .......... .......... 99% 509K 2s\n", + "127550K .......... .......... .......... .......... .......... 99% 1.05M 2s\n", + "127600K .......... .......... .......... .......... .......... 99% 440K 2s\n", + "127650K .......... .......... .......... .......... .......... 99% 3.98M 2s\n", + "127700K .......... .......... .......... .......... .......... 99% 338K 2s\n", + "127750K .......... .......... .......... .......... .......... 99% 4.09M 2s\n", + "127800K .......... .......... .......... .......... .......... 99% 341K 2s\n", + "127850K .......... .......... .......... .......... .......... 99% 3.51M 1s\n", + "127900K .......... .......... .......... .......... .......... 99% 398K 1s\n", + "127950K .......... .......... .......... .......... .......... 99% 1.44M 1s\n", + "128000K .......... .......... .......... .......... .......... 99% 390K 1s\n", + "128050K .......... .......... .......... .......... .......... 99% 1.53M 1s\n", + "128100K .......... .......... .......... .......... .......... 99% 389K 1s\n", + "128150K .......... .......... .......... .......... .......... 99% 1.69M 1s\n", + "128200K .......... .......... .......... .......... .......... 99% 377K 1s\n", + "128250K .......... .......... .......... .......... .......... 99% 2.15M 1s\n", + "128300K .......... .......... .......... .......... .......... 99% 376K 1s\n", + "128350K .......... .......... .......... .......... .......... 99% 2.01M 0s\n", + "128400K .......... .......... .......... .......... .......... 99% 371K 0s\n", + "128450K .......... .......... .......... .......... .......... 99% 1.98M 0s\n", + "128500K .......... .......... .......... .......... .......... 99% 380K 0s\n", + "128550K .......... .......... .......... .......... .......... 99% 1.70M 0s\n", + "128600K .......... .......... .......... .......... .......... 99% 358K 0s\n", + "128650K .. 100% 14.8K=4m6s\n", + "\n", + "2017-03-22 17:09:42 (524 KB/s) - ‘data/101_ObjectCategories.tar.gz’ saved [131740031/131740031]\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36msys.process._\u001b[0m\n", + "\u001b[36mres2_1\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m0\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import sys.process._\n", + "\"wget http://www.vision.caltech.edu/Image_Datasets/Caltech101/101_ObjectCategories.tar.gz -P data/\"!" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mres3\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m0\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\"tar -xzf data/101_ObjectCategories.tar.gz -C data/\"!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's take a look at the data. As you can see, under the root folder every category has a subfolder.\n", + "\n", + "Now let's convert them into record io format. First we need to make a list that contains all the image files and their categories:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "objc[37149]: Class CVWindow is implemented in both /usr/local/opt/opencv/lib/libopencv_highgui.2.4.dylib and /Users/roshanin/anaconda2/lib/libopencv_highgui.2.4.11.dylib. One of the two will be used. Which one is undefined.\n", + "objc[37149]: Class CVView is implemented in both /usr/local/opt/opencv/lib/libopencv_highgui.2.4.dylib and /Users/roshanin/anaconda2/lib/libopencv_highgui.2.4.11.dylib. One of the two will be used. Which one is undefined.\n", + "objc[37149]: Class CVSlider is implemented in both /usr/local/opt/opencv/lib/libopencv_highgui.2.4.dylib and /Users/roshanin/anaconda2/lib/libopencv_highgui.2.4.11.dylib. One of the two will be used. Which one is undefined.\n", + "objc[37149]: Class CaptureDelegate is implemented in both /usr/local/opt/opencv/lib/libopencv_highgui.2.4.dylib and /Users/roshanin/anaconda2/lib/libopencv_highgui.2.4.11.dylib. One of the two will be used. Which one is undefined.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "BACKGROUND_Google 0\n", + "Faces 1\n", + "Faces_easy 2\n", + "Leopards 3\n", + "Motorbikes 4\n", + "accordion 5\n", + "airplanes 6\n", + "anchor 7\n", + "ant 8\n", + "barrel 9\n", + "bass 10\n", + "beaver 11\n", + "binocular 12\n", + "bonsai 13\n", + "brain 14\n", + "brontosaurus 15\n", + "buddha 16\n", + "butterfly 17\n", + "camera 18\n", + "cannon 19\n", + "car_side 20\n", + "ceiling_fan 21\n", + "cellphone 22\n", + "chair 23\n", + "chandelier 24\n", + "cougar_body 25\n", + "cougar_face 26\n", + "crab 27\n", + "crayfish 28\n", + "crocodile 29\n", + "crocodile_head 30\n", + "cup 31\n", + "dalmatian 32\n", + "dollar_bill 33\n", + "dolphin 34\n", + "dragonfly 35\n", + "electric_guitar 36\n", + "elephant 37\n", + "emu 38\n", + "euphonium 39\n", + "ewer 40\n", + "ferry 41\n", + "flamingo 42\n", + "flamingo_head 43\n", + "garfield 44\n", + "gerenuk 45\n", + "gramophone 46\n", + "grand_piano 47\n", + "hawksbill 48\n", + "headphone 49\n", + "hedgehog 50\n", + "helicopter 51\n", + "ibis 52\n", + "inline_skate 53\n", + "joshua_tree 54\n", + "kangaroo 55\n", + "ketch 56\n", + "lamp 57\n", + "laptop 58\n", + "llama 59\n", + "lobster 60\n", + "lotus 61\n", + "mandolin 62\n", + "mayfly 63\n", + "menorah 64\n", + "metronome 65\n", + "minaret 66\n", + "nautilus 67\n", + "octopus 68\n", + "okapi 69\n", + "pagoda 70\n", + "panda 71\n", + "pigeon 72\n", + "pizza 73\n", + "platypus 74\n", + "pyramid 75\n", + "revolver 76\n", + "rhino 77\n", + "rooster 78\n", + "saxophone 79\n", + "schooner 80\n", + "scissors 81\n", + "scorpion 82\n", + "sea_horse 83\n", + "snoopy 84\n", + "soccer_ball 85\n", + "stapler 86\n", + "starfish 87\n", + "stegosaurus 88\n", + "stop_sign 89\n", + "strawberry 90\n", + "sunflower 91\n", + "tick 92\n", + "trilobite 93\n", + "umbrella 94\n", + "watch 95\n", + "water_lilly 96\n", + "wheelchair 97\n", + "wild_cat 98\n", + "windsor_chair 99\n", + "wrench 100\n", + "yin_yang 101\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mres4\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m0\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\"python \"+MXNET_HOME+\"/tools/im2rec.py --list=1 --recursive=1 --shuffle=1 --test-ratio=0.2 data/caltech data/101_ObjectCategories\"!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The resulting list file is in the format index\\t(one or more label)\\tpath. In this case there is only one label for each image but you can modify the list to add in more for multi label training.\n", + "Then we can use this list to create our record io file:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "objc[37161]: Class CVWindow is implemented in both /usr/local/opt/opencv/lib/libopencv_highgui.2.4.dylib and /Users/roshanin/anaconda2/lib/libopencv_highgui.2.4.11.dylib. One of the two will be used. Which one is undefined.\n", + "objc[37161]: Class CVView is implemented in both /usr/local/opt/opencv/lib/libopencv_highgui.2.4.dylib and /Users/roshanin/anaconda2/lib/libopencv_highgui.2.4.11.dylib. One of the two will be used. Which one is undefined.\n", + "objc[37161]: Class CVSlider is implemented in both /usr/local/opt/opencv/lib/libopencv_highgui.2.4.dylib and /Users/roshanin/anaconda2/lib/libopencv_highgui.2.4.11.dylib. One of the two will be used. Which one is undefined.\n", + "objc[37161]: Class CaptureDelegate is implemented in both /usr/local/opt/opencv/lib/libopencv_highgui.2.4.dylib and /Users/roshanin/anaconda2/lib/libopencv_highgui.2.4.11.dylib. One of the two will be used. Which one is undefined.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Creating .rec file from /Users/roshanin/Documents/mxnet-notebooks/scala/basic/data/caltech.lst in /Users/roshanin/Documents/mxnet-notebooks/scala/basic/data\n", + "time: 0.00232291221619 count: 0\n", + "time: 0.213660955429 count: 1000\n", + "time: 0.172420978546 count: 2000\n", + "time: 0.151710987091 count: 3000\n", + "time: 0.13969707489 count: 4000\n", + "time: 0.114994049072 count: 5000\n", + "time: 0.0974760055542 count: 6000\n", + "time: 0.0965540409088 count: 7000\n", + "time: 0.10813498497 count: 8000\n", + "time: 0.0764980316162 count: 9000\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mres5\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m0\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\"python \"+MXNET_HOME+\"/tools/im2rec.py --num-thread=4 --pass-through=1 data/caltech data/101_ObjectCategories\"!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The record io files are now generated in data folder." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ImageRecordIter\n", + "IO.ImageRecordIter can be used for loading image data saved in record io format. It is available in all frontend languages, but as it's implemented in C++, it is less flexible.\n", + "\n", + "To use ImageRecordIter, simply create an instance by loading your record file:\n", + "\n", + "**Parameters**\n", + "- **path_imglist** (string, optional, default='') – Dataset Param: Path to image list.\n", + "- **path_imgrec** (string, optional, default='./data/imgrec.rec') – Dataset Param: Path to image record file.\n", + "- **aug_seq** (string, optional, default='aug_default') – Augmentation Param: the augmenter names to represent sequence of augmenters to be applied, seperated by comma. Additional keyword parameters will be seen by these augmenters.\n", + "- **label_width** (int, optional, default='1') – Dataset Param: How many labels for an image.\n", + "- **data_shape** (Shape(tuple), required) – Dataset Param: Shape of each instance generated by the DataIter.\n", + "- **preprocess_threads** (int, optional, default='4') – Backend Param: Number of thread to do preprocessing.\n", + "- **verbose** (boolean, optional, default=True) – Auxiliary Param: Whether to output parser information.\n", + "- **num_parts** (int, optional, default='1') – partition the data into multiple parts\n", + "- **part_index** (int, optional, default='0') – the index of the part will read\n", + "- **shuffle_chunk_size** (long (non-negative), optional, default=0) – the size(MB) of the shuffle chunk, used with shuffle=True, it can enable global shuffling\n", + "- **shuffle_chunk_seed** (int, optional, default='0') – the seed for chunk shuffling\n", + "- **shuffle** (boolean, optional, default=False) – Augmentation Param: Whether to shuffle data.\n", + "- **seed** (int, optional, default='0') – Augmentation Param: Random Seed.\n", + "- **batch_size** (int (non-negative), required) – Batch Param: Batch size.\n", + "- **round_batch** (boolean, optional, default=True) – Batch Param: Use round robin to handle overflow batch.\n", + "- **prefetch_buffer** (long (non-negative), optional, default=4) – Backend Param: Number of prefetched parameters\n", + "- **dtype** ({None, 'float16', 'float32', 'float64', 'int32', 'uint8'},optional, default='None') – Output data type. Leave as None to useinternal data iterator’s output type\n", + "- **resize** (int, optional, default='-1') – Augmentation Param: scale shorter edge to size before applying other augmentations.\n", + "- **rand_crop** (boolean, optional, default=False) – Augmentation Param: Whether to random crop on the image\n", + "- **crop_y_start** (int, optional, default='-1') – Augmentation Param: Where to nonrandom crop on y.\n", + "- **crop_x_start** (int, optional, default='-1') – Augmentation Param: Where to nonrandom crop on x.\n", + "- **max_rotate_angle** (int, optional, default='0') – Augmentation Param: rotated randomly in [-max_rotate_angle, max_rotate_angle].\n", + "- **max_aspect_ratio** (float, optional, default=0) – Augmentation Param: denotes the max ratio of random aspect ratio augmentation.\n", + "- **max_shear_ratio** (float, optional, default=0) – Augmentation Param: denotes the max random shearing ratio.\n", + "- **max_crop_size** (int, optional, default='-1') – Augmentation Param: Maximum crop size.\n", + "- **min_crop_size** (int, optional, default='-1') – Augmentation Param: Minimum crop size.\n", + "- **max_random_scale** (float, optional, default=1) – Augmentation Param: Maximum scale ratio.\n", + "- **min_random_scale** (float, optional, default=1) – Augmentation Param: Minimum scale ratio.\n", + "- **max_img_size** (float, optional, default=1e+10) – Augmentation Param: Maximum image size after resizing.\n", + "- **min_img_size** (float, optional, default=0) – Augmentation Param: Minimum image size after resizing.\n", + "- **random_h** (int, optional, default='0') – Augmentation Param: Maximum random value of H channel in HSL color space.\n", + "- **random_s** (int, optional, default='0') – Augmentation Param: Maximum random value of S channel in HSL color space.\n", + "- **random_l** (int, optional, default='0') – Augmentation Param: Maximum random value of L channel in HSL color space.\n", + "- **rotate** (int, optional, default='-1') – Augmentation Param: Rotate angle.\n", + "- **fill_value** (int, optional, default='255') – Augmentation Param: Filled color value while padding.\n", + "- **inter_method** (int, optional, default='1') – Augmentation Param: 0-NN 1-bilinear 2-cubic 3-area 4-lanczos4 9-auto 10-rand.\n", + "- **pad** (int, optional, default='0') – Augmentation Param: Padding size.\n", + "- **mirror** (boolean, optional, default=False) – Augmentation Param: Whether to mirror the image.\n", + "- **rand_mirror** (boolean, optional, default=False) – Augmentation Param: Whether to mirror the image randomly.\n", + "- **mean_img** (string, optional, default='') – Augmentation Param: Mean Image to be subtracted.\n", + "- **mean_r** (float, optional, default=0) – Augmentation Param: Mean value on R channel.\n", + "- **mean_g** (float, optional, default=0) – Augmentation Param: Mean value on G channel.\n", + "- **mean_b** (float, optional, default=0) – Augmentation Param: Mean value on B channel.\n", + "- **mean_a** (float, optional, default=0) – Augmentation Param: Mean value on Alpha channel.\n", + "- **scale** (float, optional, default=1) – Augmentation Param: Scale in color space.\n", + "- **max_random_contrast** (float, optional, default=0) – Augmentation Param: Maximum ratio of contrast variation.\n", + "- **max_random_illumination** (float, optional, default=0) – Augmentation Param: Maximum value of illumination variation.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "log4j:WARN No appenders could be found for logger (MXNetJVM).\n", + "log4j:WARN Please initialize the log4j system properly.\n", + "log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36mml.dmlc.mxnet._\u001b[0m\n", + "\u001b[36mdataIter\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mDataIter\u001b[0m = non-empty iterator\n", + "\u001b[36mbatch\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mDataBatch\u001b[0m = ml.dmlc.mxnet.DataBatch@6d790bc2\n", + "\u001b[36mdata\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@72272a05" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import ml.dmlc.mxnet._\n", + "\n", + "val dataIter = IO.ImageRecordIter(Map(\n", + " \"path_imgrec\" -> \"data/caltech.rec\", // the target record file\n", + " \"data_shape\" -> \"(3, 227, 227)\", // output data shape. An 227x227 region will be cropped from the original image.\n", + " \"batch_size\" -> \"4\", // number of samples per batch\n", + " \"resize\" -> \"256\" // resize the shorter edge to 256 before cropping\n", + " // ... you can add more augumentation options here. check above to see all possible choices\n", + " ))\n", + "\n", + "dataIter.reset()\n", + "val batch = dataIter.next()\n", + "val data = batch.data(0)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Next Step\n", + "- [Record IO](https://github.com/dmlc/mxnet-notebooks/tree/master/scala/basic/record_io_scala.ipynb) Read & Write RecordIO files with scala interface\n", + "- [Advanced Image IO](https://github.com/dmlc/mxnet-notebooks/tree/master/scala/basic/advanced_img_io_scala.ipynb) Advanced image IO for detection, segmentation, etc..." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Scala 2.11", + "language": "scala211", + "name": "scala211" + }, + "language_info": { + "codemirror_mode": "text/x-scala", + "file_extension": ".scala", + "mimetype": "text/x-scala", + "name": "scala211", + "pygments_lexer": "scala", + "version": "2.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From aa4a08c3416f241f175dafd21ecb05089d7c547f Mon Sep 17 00:00:00 2001 From: Nagmote Date: Thu, 23 Mar 2017 10:38:08 -0700 Subject: [PATCH 11/21] record io notebook added --- scala/basic/image_io_scala.ipynb | 22 +- scala/basic/record_io_scala.ipynb | 387 ++++++++++++++++++++++++++++++ 2 files changed, 388 insertions(+), 21 deletions(-) create mode 100644 scala/basic/record_io_scala.ipynb diff --git a/scala/basic/image_io_scala.ipynb b/scala/basic/image_io_scala.ipynb index 9efaa82e4..b591dcc2f 100644 --- a/scala/basic/image_io_scala.ipynb +++ b/scala/basic/image_io_scala.ipynb @@ -8,8 +8,7 @@ "This tutorial explains how to prepare, load and train with image data in MXNet. All IO in MXNet is handled via IO.DataIter and its subclasses, which is explained [here](https://github.com/dmlc/mxnet-notebooks/blob/master/scala/basic/data.ipynb). In this tutorial we focus on how to use pre-built data iterators as while as custom iterators to process image data.\n", "\n", "There are mainly three ways of loading image data in MXNet:\n", - "- [NEW] mx.img.ImageIter: implemented in python, easily customizable, can load from both .rec files and raw image files.\n", - "- [OLD] IO.ImageRecordIter: implemented in backend (C++), less customizable but can be used in all language bindings, load from .rec files\n", + "- IO.ImageRecordIter: implemented in backend (C++), less customizable but can be used in all language bindings, load from .rec files\n", "- Custom iterator by inheriting IO.DataIter\n", "\n", "First, we explain the record io file format used by mxnet:\n" @@ -39,25 +38,6 @@ "```" ] }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "classpath.addPath(\"/Users/roshanin/mxnet/scala-package/assembly/osx-x86_64-cpu/target/mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")" - ] - }, { "cell_type": "markdown", "metadata": {}, diff --git a/scala/basic/record_io_scala.ipynb b/scala/basic/record_io_scala.ipynb new file mode 100644 index 000000000..b2794bc65 --- /dev/null +++ b/scala/basic/record_io_scala.ipynb @@ -0,0 +1,387 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Scala Record IO\n", + "In [image_io](https://github.com/dmlc/mxnet-notebooks/blob/master/scala/basic/image_io_scala.ipynb) we already learned how to pack image into standard recordio format and load it with ImageRecordIter. This tutorial will walk through the scala interface for reading and writing record io files. It can be useful when you need more more control over the details of data pipeline. For example, when you need to augument image and label together for detection and segmentation, or when you need a custom data iterator for triplet sampling and negative sampling.\n", + "\n", + "You can find relevant code [here](https://github.com/dmlc/mxnet/blob/master/scala-package/core/src/main/scala/ml/dmlc/mxnet/RecordIO.scala). There are two classes: [MXRecordIO](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.MXRecordIO), which supports sequential read and write, and [MXIndexedRecordIO](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.MXIndexedRecordIO), which supports random read and sequential write." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Jupyter Scala kernel\n", + "Add mxnet scala jar which is created as a part of MXNet Scala package installation in classpath as follows:\n", + "\n", + "**Note**: Process to add this jar in your scala kernel classpath can differ according to the scala kernel you are using.\n", + "\n", + "We have used [jupyter-scala kernel](https://github.com/alexarchambault/jupyter-scala) for creating this notebook." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```\n", + "classpath.addPath()\n", + "\n", + "e.g\n", + "classpath.addPath(\"mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## MXRecordIO\n", + "First let's take a look at `MXRecordIO`. It takes path to recordIO file and `MXRecordIO.IOFlag` as input. `MXRecordIO.IOFlag` is `MXRecordIO.IORead` for reading and `MXRecordIO.Write` for writing. \n", + "\n", + "We open a file tmp.rec and write 5 strings to it with `MXRecordIO.IOWrite` flag:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "log4j:WARN No appenders could be found for logger (MXNetJVM).\n", + "log4j:WARN Please initialize the log4j system properly.\n", + "log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36mml.dmlc.mxnet._\u001b[0m\n", + "\u001b[32mimport \u001b[36mjava.io._\u001b[0m\n", + "\u001b[36mfRec\u001b[0m: \u001b[32mjava\u001b[0m.\u001b[32mio\u001b[0m.\u001b[32mFile\u001b[0m = /var/folders/f4/gts7qnkx319_nv4176gbz4jjrjzb4y/T/tmpFile1833796685651346987.tmp\n", + "\u001b[36mN\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m5\u001b[0m\n", + "\u001b[36mwriter\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mMXRecordIO\u001b[0m = ml.dmlc.mxnet.MXRecordIO@6df7a0b1" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import ml.dmlc.mxnet._\n", + "import java.io._\n", + "\n", + "val fRec = File.createTempFile(\"tmpFile\", \".tmp\")\n", + "val N = 5\n", + "\n", + "val writer = new MXRecordIO(fRec.getAbsolutePath, MXRecordIO.IOWrite)\n", + "for (i <- 0 until N) {\n", + " writer.write(\"record_\"+i)\n", + "}\n", + "writer.close()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we can read it back by opening the same file with `MXRecordIO.IORead` flag as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "record_0\n", + "record_1\n", + "record_2\n", + "record_3\n", + "record_4\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mreader\u001b[0m: \u001b[32mMXRecordIO\u001b[0m = ml.dmlc.mxnet.MXRecordIO@28b440ec" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val reader = new MXRecordIO(fRec.getAbsolutePath, MXRecordIO.IORead)\n", + "for (i <- 0 until N) {\n", + " val res = reader.read()\n", + " println(res)\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## MXIndexedRecordIO\n", + "Some times you need random access for more complex tasks. MXIndexedRecordIO is designed for this. Here we create a indexed record tmp.rec and a corresponding index file tmp.idx:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mfIdxRec\u001b[0m: \u001b[32mFile\u001b[0m = /var/folders/f4/gts7qnkx319_nv4176gbz4jjrjzb4y/T/tmpIdxFile7562897526384618096.tmp\n", + "\u001b[36mfIdx\u001b[0m: \u001b[32mFile\u001b[0m = /var/folders/f4/gts7qnkx319_nv4176gbz4jjrjzb4y/T/tmpIdx1820915738400330418.tmp\n", + "\u001b[36mN\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m5\u001b[0m\n", + "\u001b[36mwriter\u001b[0m: \u001b[32mMXIndexedRecordIO\u001b[0m = ml.dmlc.mxnet.MXIndexedRecordIO@1c8d8668" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val fIdxRec = File.createTempFile(\"tmpIdxFile\", \".tmp\")\n", + "val fIdx = File.createTempFile(\"tmpIdx\", \".tmp\")\n", + "val N = 5\n", + "\n", + "val writer = new MXIndexedRecordIO(fIdx.getAbsolutePath, fIdxRec.getAbsolutePath, MXRecordIO.IOWrite)\n", + "for (i <- 0 until N) {\n", + " writer.writeIdx(i, \"record_\"+i)\n", + "}\n", + "writer.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can then access records with keys:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "record_4\n", + "record_3\n", + "record_2\n", + "record_0\n", + "record_1\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mreader\u001b[0m: \u001b[32mMXIndexedRecordIO\u001b[0m = ml.dmlc.mxnet.MXIndexedRecordIO@2eb616ea\n", + "\u001b[36mkeys\u001b[0m: \u001b[32mList\u001b[0m[\u001b[32mInt\u001b[0m] = \u001b[33mList\u001b[0m(\u001b[32m4\u001b[0m, \u001b[32m3\u001b[0m, \u001b[32m2\u001b[0m, \u001b[32m0\u001b[0m, \u001b[32m1\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val reader = new MXIndexedRecordIO(fIdx.getAbsolutePath, fIdxRec.getAbsolutePath, MXRecordIO.IORead)\n", + "var keys = reader.keys().map(_.asInstanceOf[Int]).toList.sorted\n", + " // assert(keys.zip(0 until N).forall(x => x._1 == x._2))\n", + "keys = scala.util.Random.shuffle(keys)\n", + "for (k <- keys) {\n", + " val res = reader.readIdx(k)\n", + " println(res)\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can list all keys with:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mres5\u001b[0m: \u001b[32mIterable\u001b[0m[\u001b[32mAny\u001b[0m] = \u001b[33mSet\u001b[0m(0, 1, 2, 3, 4)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "reader.keys" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Packing and Unpacking Data\n", + "Each record in a .rec file can contain arbitrary binary data, but machine learning data typically has a label/data structure. IO.MXRecordIO also contains a few utility functions for packing such data, namely: pack, unpack.\n", + "\n", + "### Binary Data\n", + "`pack` and `unpack` methods are used for storing 1d array of float label and binary data which is shown in following example.\n", + "\n", + "`IRHeader` class takes flag, label, id and id2 as parameters.\n", + "\n", + "`pack` method takes header of type IRHeader(header of the image record) and string to pack as input parameters and returns the resulting packed string.\n", + "\n", + "`unpack` method takes string buffer from MXRecordIO.read as input and returns header of type IRHeader(header of the image record) and unpacked string" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "array of size 1 label:\u0000\u0000\u0000\u0001?タ\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0004data\n", + "array label:\u0000\u0000\u0000\u0003?タ\u0000\u0000@\u0000\u0000\u0000@@\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0004data\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mdata\u001b[0m: \u001b[32mString\u001b[0m = \u001b[32m\"data\"\u001b[0m\n", + "\u001b[36mlabel1\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m)\n", + "\u001b[36mheader1\u001b[0m: \u001b[32mMXRecordIO\u001b[0m.\u001b[32mIRHeader\u001b[0m = \u001b[33mIRHeader\u001b[0m(\u001b[32m0\u001b[0m, \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m), \u001b[32m1\u001b[0m, \u001b[32m0\u001b[0m)\n", + "\u001b[36ms1\u001b[0m: \u001b[32mString\u001b[0m = \u001b[32m\"\u0000\u0000\u0000\u0001?タ\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0004data\"\u001b[0m\n", + "\u001b[36mlabel2\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m3.0F\u001b[0m)\n", + "\u001b[36mheader2\u001b[0m: \u001b[32mMXRecordIO\u001b[0m.\u001b[32mIRHeader\u001b[0m = \u001b[33mIRHeader\u001b[0m(\u001b[32m0\u001b[0m, \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m3.0F\u001b[0m), \u001b[32m2\u001b[0m, \u001b[32m0\u001b[0m)\n", + "\u001b[36ms2\u001b[0m: \u001b[32mString\u001b[0m = \u001b[32m\"\u0000\u0000\u0000\u0003?タ\u0000\u0000@\u0000\u0000\u0000@@\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0004data\"\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val data = \"data\"\n", + "val label1 = Array(1f)\n", + "val header1 = MXRecordIO.IRHeader(0, label1, 1, 0)\n", + "val s1 = MXRecordIO.pack(header1, data)\n", + "println(\"array of size 1 label:\"+ s1)\n", + "\n", + "val label2 = Array(1f, 2f, 3f)\n", + "val header2 = MXRecordIO.IRHeader(0, label2, 2, 0)\n", + "val s2 = MXRecordIO.pack(header2, data)\n", + "println(\"array label:\"+ s2)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(IRHeader(1,[F@26886f4c,1,0),data)\n", + "(IRHeader(3,[F@236bc6d0,2,0),data)\n", + "[F@8f26874\n", + "[F@592bbf62\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mrHeader1\u001b[0m: \u001b[32mMXRecordIO\u001b[0m.\u001b[32mIRHeader\u001b[0m = \u001b[33mIRHeader\u001b[0m(\u001b[32m1\u001b[0m, \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m), \u001b[32m1\u001b[0m, \u001b[32m0\u001b[0m)\n", + "\u001b[36mrContent1\u001b[0m: \u001b[32mString\u001b[0m = \u001b[32m\"data\"\u001b[0m\n", + "\u001b[36mrHeader2\u001b[0m: \u001b[32mMXRecordIO\u001b[0m.\u001b[32mIRHeader\u001b[0m = \u001b[33mIRHeader\u001b[0m(\u001b[32m3\u001b[0m, \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m3.0F\u001b[0m), \u001b[32m2\u001b[0m, \u001b[32m0\u001b[0m)\n", + "\u001b[36mrContent2\u001b[0m: \u001b[32mString\u001b[0m = \u001b[32m\"data\"\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "// unpack\n", + "val (rHeader1, rContent1) = MXRecordIO.unpack(s1)\n", + "val (rHeader2, rContent2) = MXRecordIO.unpack(s2)\n", + "\n", + "println(MXRecordIO.unpack(s1))\n", + "println(MXRecordIO.unpack(s2))\n", + "println(rHeader1.label )\n", + "println(rHeader2.label )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Next Step\n", + "- [Advanced Image IO](https://github.com/dmlc/mxnet-notebooks/blob/master/scala/basic/advanced_img_io.ipynb) Advanced image IO for detection, segmentation, etc..." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Scala 2.11", + "language": "scala211", + "name": "scala211" + }, + "language_info": { + "codemirror_mode": "text/x-scala", + "file_extension": ".scala", + "mimetype": "text/x-scala", + "name": "scala211", + "pygments_lexer": "scala", + "version": "2.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From 24bdca767b482b76db23c37728cf956e01abb1c9 Mon Sep 17 00:00:00 2001 From: Nagmote Date: Thu, 23 Mar 2017 16:09:56 -0700 Subject: [PATCH 12/21] predict from pretrained model notebook --- scala/basic/predict_scala.ipynb | 2710 +++++++++++++++++++++++++++++++ 1 file changed, 2710 insertions(+) create mode 100644 scala/basic/predict_scala.ipynb diff --git a/scala/basic/predict_scala.ipynb b/scala/basic/predict_scala.ipynb new file mode 100644 index 000000000..a2d750829 --- /dev/null +++ b/scala/basic/predict_scala.ipynb @@ -0,0 +1,2710 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Predict and Extract Features with Pre-trained Models\n", + "This tutorial will work through how to use pre-trained models for predicting and feature extraction.\n", + "\n", + "## Download pre-trained models\n", + "A model often contains two parts, the .json file specifying the neural network structure, and the .params file containing the binary parameters. The name convention is name-symbol.json and name-epoch.params, where name is the model name, and epoch is the epoch number.\n", + "\n", + "Here we download a pre-trained Resnet 50-layer model on Imagenet. Other models are available at http://data.mxnet.io/models/" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Jupyter Scala kernel\n", + "Add mxnet scala jar which is created as a part of MXNet Scala package installation in classpath as follows:\n", + "\n", + "**Note**: Process to add this jar in your scala kernel classpath can differ according to the scala kernel you are using.\n", + "\n", + "We have used [jupyter-scala kernel](https://github.com/alexarchambault/jupyter-scala) for creating this notebook." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```\n", + "classpath.addPath()\n", + "\n", + "e.g\n", + "classpath.addPath(\"mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "classpath.addPath(\"/Users/roshanin/mxnet/scala-package/assembly/osx-x86_64-cpu/target/mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Import necessary libraries:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36mml.dmlc.mxnet._\u001b[0m\n", + "\u001b[32mimport \u001b[36mml.dmlc.mxnet.module.{FitParams, Module}\u001b[0m\n", + "\u001b[32mimport \u001b[36mscala.collection.immutable.ListMap\u001b[0m\n", + "\u001b[32mimport \u001b[36msys.process._\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import ml.dmlc.mxnet._\n", + "import ml.dmlc.mxnet.module.{FitParams, Module}\n", + "import scala.collection.immutable.ListMap\n", + "import sys.process._" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Download ResNet pretrained model as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "--2017-03-23 13:06:52-- http://data.mxnet.io/models/imagenet/resnet/50-layers/resnet-50-symbol.json\n", + "Resolving data.mxnet.io... 54.208.175.7\n", + "Connecting to data.mxnet.io|54.208.175.7|:80... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 76172 (74K) [application/json]\n", + "Saving to: ‘model/resnet-50-symbol.json’\n", + "\n", + " 0K .......... .......... .......... .......... .......... 67% 134K 0s\n", + " 50K .......... .......... .... 100% 67.4K=0.7s\n", + "\n", + "2017-03-23 13:06:53 (101 KB/s) - ‘model/resnet-50-symbol.json’ saved [76172/76172]\n", + "\n", + "--2017-03-23 13:06:53-- http://data.mxnet.io/models/imagenet/resnet/50-layers/resnet-50-0000.params\n", + "Resolving data.mxnet.io... 54.208.175.7\n", + "Connecting to data.mxnet.io|54.208.175.7|:80... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 102395376 (98M)\n", + "Saving to: ‘model/resnet-50-0000.params’\n", + "\n", + " 0K .......... .......... .......... .......... .......... 0% 149K 11m11s\n", + " 50K .......... .......... .......... .......... .......... 0% 278K 8m35s\n", + " 100K .......... .......... .......... .......... .......... 0% 286K 7m39s\n", + " 150K .......... .......... .......... .......... .......... 0% 294K 7m9s\n", + " 200K .......... .......... .......... .......... .......... 0% 294K 6m51s\n", + " 250K .......... .......... .......... .......... .......... 0% 283K 6m41s\n", + " 300K .......... .......... .......... .......... .......... 0% 162K 7m12s\n", + " 350K .......... .......... .......... .......... .......... 0% 26.8K 14m2s\n", + " 400K .......... .......... .......... .......... .......... 0% 95.1K 14m24s\n", + " 450K .......... .......... .......... .......... .......... 0% 189K 13m50s\n", + " 500K .......... .......... .......... .......... .......... 0% 236K 13m13s\n", + " 550K .......... .......... .......... .......... .......... 0% 280K 12m36s\n", + " 600K .......... .......... .......... .......... .......... 0% 211K 12m14s\n", + " 650K .......... .......... .......... .......... .......... 0% 161K 12m5s\n", + " 700K .......... .......... .......... .......... .......... 0% 562K 11m28s\n", + " 750K .......... .......... .......... .......... .......... 0% 212K 11m14s\n", + " 800K .......... .......... .......... .......... .......... 0% 301K 10m53s\n", + " 850K .......... .......... .......... .......... .......... 0% 478K 10m28s\n", + " 900K .......... .......... .......... .......... .......... 0% 539K 10m4s\n", + " 950K .......... .......... .......... .......... .......... 1% 317K 9m50s\n", + " 1000K .......... .......... .......... .......... .......... 1% 484K 9m31s\n", + " 1050K .......... .......... .......... .......... .......... 1% 588K 9m12s\n", + " 1100K .......... .......... .......... .......... .......... 1% 534K 8m56s\n", + " 1150K .......... .......... .......... .......... .......... 1% 295K 8m47s\n", + " 1200K .......... .......... .......... .......... .......... 1% 528K 8m34s\n", + " 1250K .......... .......... .......... .......... .......... 1% 597K 8m20s\n", + " 1300K .......... .......... .......... .......... .......... 1% 594K 8m7s\n", + " 1350K .......... .......... .......... .......... .......... 1% 564K 7m56s\n", + " 1400K .......... .......... .......... .......... .......... 1% 592K 7m45s\n", + " 1450K .......... .......... .......... .......... .......... 1% 587K 7m35s\n", + " 1500K .......... .......... .......... .......... .......... 1% 313K 7m30s\n", + " 1550K .......... .......... .......... .......... .......... 1% 604K 7m21s\n", + " 1600K .......... .......... .......... .......... .......... 1% 608K 7m12s\n", + " 1650K .......... .......... .......... .......... .......... 1% 559K 7m5s\n", + " 1700K .......... .......... .......... .......... .......... 1% 608K 6m57s\n", + " 1750K .......... .......... .......... .......... .......... 1% 533K 6m50s\n", + " 1800K .......... .......... .......... .......... .......... 1% 592K 6m43s\n", + " 1850K .......... .......... .......... .......... .......... 1% 481K 6m38s\n", + " 1900K .......... .......... .......... .......... .......... 1% 464K 6m33s\n", + " 1950K .......... .......... .......... .......... .......... 2% 531K 6m27s\n", + " 2000K .......... .......... .......... .......... .......... 2% 437K 6m23s\n", + " 2050K .......... .......... .......... .......... .......... 2% 446K 6m19s\n", + " 2100K .......... .......... .......... .......... .......... 2% 596K 6m14s\n", + " 2150K .......... .......... .......... .......... .......... 2% 303K 6m13s\n", + " 2200K .......... .......... .......... .......... .......... 2% 4.57M 6m5s\n", + " 2250K .......... .......... .......... .......... .......... 2% 584K 6m0s\n", + " 2300K .......... .......... .......... .......... .......... 2% 545K 5m56s\n", + " 2350K .......... .......... .......... .......... .......... 2% 463K 5m53s\n", + " 2400K .......... .......... .......... .......... .......... 2% 383K 5m51s\n", + " 2450K .......... .......... .......... .......... .......... 2% 374K 5m49s\n", + " 2500K .......... .......... .......... .......... .......... 2% 320K 5m48s\n", + " 2550K .......... .......... .......... .......... .......... 2% 75.1K 6m6s\n", + " 2600K .......... .......... .......... .......... .......... 2% 71.3M 5m59s\n", + " 2650K .......... .......... .......... .......... .......... 2% 23.4K 7m9s\n", + " 2700K .......... .......... .......... .......... .......... 2% 125K 7m15s\n", + " 2750K .......... .......... .......... .......... .......... 2% 200K 7m16s\n", + " 2800K .......... .......... .......... .......... .......... 2% 206K 7m16s\n", + " 2850K .......... .......... .......... .......... .......... 2% 298K 7m14s\n", + " 2900K .......... .......... .......... .......... .......... 2% 299K 7m12s\n", + " 2950K .......... .......... .......... .......... .......... 3% 303K 7m10s\n", + " 3000K .......... .......... .......... .......... .......... 3% 545K 7m6s\n", + " 3050K .......... .......... .......... .......... .......... 3% 302K 7m4s\n", + " 3100K .......... .......... .......... .......... .......... 3% 553K 7m0s\n", + " 3150K .......... .......... .......... .......... .......... 3% 292K 6m58s\n", + " 3200K .......... .......... .......... .......... .......... 3% 596K 6m54s\n", + " 3250K .......... .......... .......... .......... .......... 3% 574K 6m50s\n", + " 3300K .......... .......... .......... .......... .......... 3% 189K 6m51s\n", + " 3350K .......... .......... .......... .......... .......... 3% 69.3M 6m45s\n", + " 3400K .......... .......... .......... .......... .......... 3% 245K 6m45s\n", + " 3450K .......... .......... .......... .......... .......... 3% 349K 6m43s\n", + " 3500K .......... .......... .......... .......... .......... 3% 302K 6m41s\n", + " 3550K .......... .......... .......... .......... .......... 3% 362K 6m39s\n", + " 3600K .......... .......... .......... .......... .......... 3% 85.1K 6m49s\n", + " 3650K .......... .......... .......... .......... .......... 3% 198K 6m50s\n", + " 3700K .......... .......... .......... .......... .......... 3% 68.7K 7m3s\n", + " 3750K .......... .......... .......... .......... .......... 3% 146K 7m6s\n", + " 3800K .......... .......... .......... .......... .......... 3% 152K 7m8s\n", + " 3850K .......... .......... .......... .......... .......... 3% 209K 7m8s\n", + " 3900K .......... .......... .......... .......... .......... 3% 267K 7m7s\n", + " 3950K .......... .......... .......... .......... .......... 4% 268K 7m6s\n", + " 4000K .......... .......... .......... .......... .......... 4% 292K 7m5s\n", + " 4050K .......... .......... .......... .......... .......... 4% 306K 7m3s\n", + " 4100K .......... .......... .......... .......... .......... 4% 342K 7m1s\n", + " 4150K .......... .......... .......... .......... .......... 4% 485K 6m58s\n", + " 4200K .......... .......... .......... .......... .......... 4% 349K 6m56s\n", + " 4250K .......... .......... .......... .......... .......... 4% 388K 6m54s\n", + " 4300K .......... .......... .......... .......... .......... 4% 572K 6m51s\n", + " 4350K .......... .......... .......... .......... .......... 4% 579K 6m48s\n", + " 4400K .......... .......... .......... .......... .......... 4% 456K 6m46s\n", + " 4450K .......... .......... .......... .......... .......... 4% 368K 6m44s\n", + " 4500K .......... .......... .......... .......... .......... 4% 561K 6m41s\n", + " 4550K .......... .......... .......... .......... .......... 4% 587K 6m38s\n", + " 4600K .......... .......... .......... .......... .......... 4% 598K 6m36s\n", + " 4650K .......... .......... .......... .......... .......... 4% 327K 6m34s\n", + " 4700K .......... .......... .......... .......... .......... 4% 566K 6m32s\n", + " 4750K .......... .......... .......... .......... .......... 4% 177K 6m33s\n", + " 4800K .......... .......... .......... .......... .......... 4% 15.8M 6m29s\n", + " 4850K .......... .......... .......... .......... .......... 4% 194K 6m30s\n", + " 4900K .......... .......... .......... .......... .......... 4% 548K 6m27s\n", + " 4950K .......... .......... .......... .......... .......... 5% 297K 6m26s\n", + " 5000K .......... .......... .......... .......... .......... 5% 305K 6m25s\n", + " 5050K .......... .......... .......... .......... .......... 5% 552K 6m23s\n", + " 5100K .......... .......... .......... .......... .......... 5% 306K 6m22s\n", + " 5150K .......... .......... .......... .......... .......... 5% 509K 6m20s\n", + " 5200K .......... .......... .......... .......... .......... 5% 565K 6m18s\n", + " 5250K .......... .......... .......... .......... .......... 5% 367K 6m17s\n", + " 5300K .......... .......... .......... .......... .......... 5% 213K 6m17s\n", + " 5350K .......... .......... .......... .......... .......... 5% 301K 6m16s\n", + " 5400K .......... .......... .......... .......... .......... 5% 130K 6m19s\n", + " 5450K .......... .......... .......... .......... .......... 5% 181K 6m20s\n", + " 5500K .......... .......... .......... .......... .......... 5% 91.4K 6m26s\n", + " 5550K .......... .......... .......... .......... .......... 5% 129K 6m29s\n", + " 5600K .......... .......... .......... .......... .......... 5% 116K 6m32s\n", + " 5650K .......... .......... .......... .......... .......... 5% 103K 6m37s\n", + " 5700K .......... .......... .......... .......... .......... 5% 105K 6m41s\n", + " 5750K .......... .......... .......... .......... .......... 5% 129K 6m44s\n", + " 5800K .......... .......... .......... .......... .......... 5% 148K 6m45s\n", + " 5850K .......... .......... .......... .......... .......... 5% 156K 6m47s\n", + " 5900K .......... .......... .......... .......... .......... 5% 179K 6m48s\n", + " 5950K .......... .......... .......... .......... .......... 6% 197K 6m48s\n", + " 6000K .......... .......... .......... .......... .......... 6% 45.1K 7m2s\n", + " 6050K .......... .......... .......... .......... .......... 6% 144K 7m3s\n", + " 6100K .......... .......... .......... .......... .......... 6% 156K 7m5s\n", + " 6150K .......... .......... .......... .......... .......... 6% 263K 7m4s\n", + " 6200K .......... .......... .......... .......... .......... 6% 203K 7m4s\n", + " 6250K .......... .......... .......... .......... .......... 6% 296K 7m3s\n", + " 6300K .......... .......... .......... .......... .......... 6% 312K 7m2s\n", + " 6350K .......... .......... .......... .......... .......... 6% 505K 7m0s\n", + " 6400K .......... .......... .......... .......... .......... 6% 303K 6m58s\n", + " 6450K .......... .......... .......... .......... .......... 6% 554K 6m56s\n", + " 6500K .......... .......... .......... .......... .......... 6% 315K 6m55s\n", + " 6550K .......... .......... .......... .......... .......... 6% 537K 6m53s\n", + " 6600K .......... .......... .......... .......... .......... 6% 566K 6m51s\n", + " 6650K .......... .......... .......... .......... .......... 6% 342K 6m50s\n", + " 6700K .......... .......... .......... .......... .......... 6% 519K 6m48s\n", + " 6750K .......... .......... .......... .......... .......... 6% 513K 6m46s\n", + " 6800K .......... .......... .......... .......... .......... 6% 477K 6m44s\n", + " 6850K .......... .......... .......... .......... .......... 6% 575K 6m42s\n", + " 6900K .......... .......... .......... .......... .......... 6% 412K 6m41s\n", + " 6950K .......... .......... .......... .......... .......... 7% 583K 6m39s\n", + " 7000K .......... .......... .......... .......... .......... 7% 583K 6m37s\n", + " 7050K .......... .......... .......... .......... .......... 7% 568K 6m35s\n", + " 7100K .......... .......... .......... .......... .......... 7% 401K 6m34s\n", + " 7150K .......... .......... .......... .......... .......... 7% 601K 6m32s\n", + " 7200K .......... .......... .......... .......... .......... 7% 601K 6m30s\n", + " 7250K .......... .......... .......... .......... .......... 7% 594K 6m28s\n", + " 7300K .......... .......... .......... .......... .......... 7% 574K 6m26s\n", + " 7350K .......... .......... .......... .......... .......... 7% 596K 6m25s\n", + " 7400K .......... .......... .......... .......... .......... 7% 585K 6m23s\n", + " 7450K .......... .......... .......... .......... .......... 7% 415K 6m22s\n", + " 7500K .......... .......... .......... .......... .......... 7% 593K 6m20s\n", + " 7550K .......... .......... .......... .......... .......... 7% 571K 6m18s\n", + " 7600K .......... .......... .......... .......... .......... 7% 586K 6m17s\n", + " 7650K .......... .......... .......... .......... .......... 7% 590K 6m15s\n", + " 7700K .......... .......... .......... .......... .......... 7% 584K 6m13s\n", + " 7750K .......... .......... .......... .......... .......... 7% 608K 6m12s\n", + " 7800K .......... .......... .......... .......... .......... 7% 595K 6m10s\n", + " 7850K .......... .......... .......... .......... .......... 7% 288K 6m10s\n", + " 7900K .......... .......... .......... .......... .......... 7% 576K 6m8s\n", + " 7950K .......... .......... .......... .......... .......... 8% 371K 6m7s\n", + " 8000K .......... .......... .......... .......... .......... 8% 377K 6m6s\n", + " 8050K .......... .......... .......... .......... .......... 8% 413K 6m5s\n", + " 8100K .......... .......... .......... .......... .......... 8% 400K 6m4s\n", + " 8150K .......... .......... .......... .......... .......... 8% 572K 6m3s\n", + " 8200K .......... .......... .......... .......... .......... 8% 331K 6m2s\n", + " 8250K .......... .......... .......... .......... .......... 8% 563K 6m1s\n", + " 8300K .......... .......... .......... .......... .......... 8% 565K 5m59s\n", + " 8350K .......... .......... .......... .......... .......... 8% 566K 5m58s\n", + " 8400K .......... .......... .......... .......... .......... 8% 591K 5m56s\n", + " 8450K .......... .......... .......... .......... .......... 8% 606K 5m55s\n", + " 8500K .......... .......... .......... .......... .......... 8% 604K 5m54s\n", + " 8550K .......... .......... .......... .......... .......... 8% 590K 5m52s\n", + " 8600K .......... .......... .......... .......... .......... 8% 507K 5m51s\n", + " 8650K .......... .......... .......... .......... .......... 8% 584K 5m50s\n", + " 8700K .......... .......... .......... .......... .......... 8% 574K 5m49s\n", + " 8750K .......... .......... .......... .......... .......... 8% 594K 5m47s\n", + " 8800K .......... .......... .......... .......... .......... 8% 592K 5m46s\n", + " 8850K .......... .......... .......... .......... .......... 8% 591K 5m45s\n", + " 8900K .......... .......... .......... .......... .......... 8% 588K 5m43s\n", + " 8950K .......... .......... .......... .......... .......... 9% 606K 5m42s\n", + " 9000K .......... .......... .......... .......... .......... 9% 594K 5m41s\n", + " 9050K .......... .......... .......... .......... .......... 9% 607K 5m40s\n", + " 9100K .......... .......... .......... .......... .......... 9% 612K 5m38s\n", + " 9150K .......... .......... .......... .......... .......... 9% 642K 5m37s\n", + " 9200K .......... .......... .......... .......... .......... 9% 613K 5m36s\n", + " 9250K .......... .......... .......... .......... .......... 9% 1.28M 5m34s\n", + " 9300K .......... .......... .......... .......... .......... 9% 609K 5m33s\n", + " 9350K .......... .......... .......... .......... .......... 9% 611K 5m32s\n", + " 9400K .......... .......... .......... .......... .......... 9% 720K 5m31s\n", + " 9450K .......... .......... .......... .......... .......... 9% 589K 5m30s\n", + " 9500K .......... .......... .......... .......... .......... 9% 612K 5m29s\n", + " 9550K .......... .......... .......... .......... .......... 9% 746K 5m27s\n", + " 9600K .......... .......... .......... .......... .......... 9% 598K 5m26s\n", + " 9650K .......... .......... .......... .......... .......... 9% 607K 5m25s\n", + " 9700K .......... .......... .......... .......... .......... 9% 601K 5m24s\n", + " 9750K .......... .......... .......... .......... .......... 9% 1.03M 5m23s\n", + " 9800K .......... .......... .......... .......... .......... 9% 883K 5m21s\n", + " 9850K .......... .......... .......... .......... .......... 9% 597K 5m20s\n", + " 9900K .......... .......... .......... .......... .......... 9% 740K 5m19s\n", + " 9950K .......... .......... .......... .......... .......... 10% 584K 5m18s\n", + " 10000K .......... .......... .......... .......... .......... 10% 604K 5m17s\n", + " 10050K .......... .......... .......... .......... .......... 10% 630K 5m16s\n", + " 10100K .......... .......... .......... .......... .......... 10% 1.18M 5m15s\n", + " 10150K .......... .......... .......... .......... .......... 10% 619K 5m14s\n", + " 10200K .......... .......... .......... .......... .......... 10% 647K 5m13s\n", + " 10250K .......... .......... .......... .......... .......... 10% 915K 5m11s\n", + " 10300K .......... .......... .......... .......... .......... 10% 609K 5m10s\n", + " 10350K .......... .......... .......... .......... .......... 10% 1.26M 5m9s\n", + " 10400K .......... .......... .......... .......... .......... 10% 616K 5m8s\n", + " 10450K .......... .......... .......... .......... .......... 10% 682K 5m7s\n", + " 10500K .......... .......... .......... .......... .......... 10% 814K 5m6s\n", + " 10550K .......... .......... .......... .......... .......... 10% 713K 5m5s\n", + " 10600K .......... .......... .......... .......... .......... 10% 1020K 5m4s\n", + " 10650K .......... .......... .......... .......... .......... 10% 727K 5m3s\n", + " 10700K .......... .......... .......... .......... .......... 10% 788K 5m2s\n", + " 10750K .......... .......... .......... .......... .......... 10% 693K 5m1s\n", + " 10800K .......... .......... .......... .......... .......... 10% 962K 5m0s\n", + " 10850K .......... .......... .......... .......... .......... 10% 752K 4m59s\n", + " 10900K .......... .......... .......... .......... .......... 10% 781K 4m58s\n", + " 10950K .......... .......... .......... .......... .......... 11% 774K 4m57s\n", + " 11000K .......... .......... .......... .......... .......... 11% 850K 4m56s\n", + " 11050K .......... .......... .......... .......... .......... 11% 817K 4m55s\n", + " 11100K .......... .......... .......... .......... .......... 11% 755K 4m54s\n", + " 11150K .......... .......... .......... .......... .......... 11% 809K 4m53s\n", + " 11200K .......... .......... .......... .......... .......... 11% 829K 4m52s\n", + " 11250K .......... .......... .......... .......... .......... 11% 611K 4m51s\n", + " 11300K .......... .......... .......... .......... .......... 11% 1.05M 4m50s\n", + " 11350K .......... .......... .......... .......... .......... 11% 802K 4m49s\n", + " 11400K .......... .......... .......... .......... .......... 11% 652K 4m48s\n", + " 11450K .......... .......... .......... .......... .......... 11% 1.23M 4m47s\n", + " 11500K .......... .......... .......... .......... .......... 11% 647K 4m46s\n", + " 11550K .......... .......... .......... .......... .......... 11% 913K 4m45s\n", + " 11600K .......... .......... .......... .......... .......... 11% 630K 4m44s\n", + " 11650K .......... .......... .......... .......... .......... 11% 1.34M 4m43s\n", + " 11700K .......... .......... .......... .......... .......... 11% 690K 4m42s\n", + " 11750K .......... .......... .......... .......... .......... 11% 777K 4m42s\n", + " 11800K .......... .......... .......... .......... .......... 11% 691K 4m41s\n", + " 11850K .......... .......... .......... .......... .......... 11% 1.53M 4m40s\n", + " 11900K .......... .......... .......... .......... .......... 11% 812K 4m39s\n", + " 11950K .......... .......... .......... .......... .......... 12% 694K 4m38s\n", + " 12000K .......... .......... .......... .......... .......... 12% 1.44M 4m37s\n", + " 12050K .......... .......... .......... .......... .......... 12% 635K 4m36s\n", + " 12100K .......... .......... .......... .......... .......... 12% 862K 4m35s\n", + " 12150K .......... .......... .......... .......... .......... 12% 1.26M 4m34s\n", + " 12200K .......... .......... .......... .......... .......... 12% 643K 4m34s\n", + " 12250K .......... .......... .......... .......... .......... 12% 996K 4m33s\n", + " 12300K .......... .......... .......... .......... .......... 12% 66.2K 4m37s\n", + " 12350K .......... .......... .......... .......... .......... 12% 58.8M 4m36s\n", + " 12400K .......... .......... .......... .......... .......... 12% 120K 4m37s\n", + " 12450K .......... .......... .......... .......... .......... 12% 299K 4m37s\n", + " 12500K .......... .......... .......... .......... .......... 12% 301K 4m37s\n", + " 12550K .......... .......... .......... .......... .......... 12% 309K 4m37s\n", + " 12600K .......... .......... .......... .......... .......... 12% 509K 4m36s\n", + " 12650K .......... .......... .......... .......... .......... 12% 331K 4m36s\n", + " 12700K .......... .......... .......... .......... .......... 12% 427K 4m36s\n", + " 12750K .......... .......... .......... .......... .......... 12% 374K 4m35s\n", + " 12800K .......... .......... .......... .......... .......... 12% 466K 4m35s\n", + " 12850K .......... .......... .......... .......... .......... 12% 560K 4m34s\n", + " 12900K .......... .......... .......... .......... .......... 12% 381K 4m34s\n", + " 12950K .......... .......... .......... .......... .......... 13% 544K 4m33s\n", + " 13000K .......... .......... .......... .......... .......... 13% 587K 4m33s\n", + " 13050K .......... .......... .......... .......... .......... 13% 568K 4m32s\n", + " 13100K .......... .......... .......... .......... .......... 13% 479K 4m32s\n", + " 13150K .......... .......... .......... .......... .......... 13% 572K 4m31s\n", + " 13200K .......... .......... .......... .......... .......... 13% 604K 4m30s\n", + " 13250K .......... .......... .......... .......... .......... 13% 407K 4m30s\n", + " 13300K .......... .......... .......... .......... .......... 13% 584K 4m29s\n", + " 13350K .......... .......... .......... .......... .......... 13% 595K 4m29s\n", + " 13400K .......... .......... .......... .......... .......... 13% 574K 4m28s\n", + " 13450K .......... .......... .......... .......... .......... 13% 515K 4m28s\n", + " 13500K .......... .......... .......... .......... .......... 13% 605K 4m27s\n", + " 13550K .......... .......... .......... .......... .......... 13% 601K 4m26s\n", + " 13600K .......... .......... .......... .......... .......... 13% 612K 4m26s\n", + " 13650K .......... .......... .......... .......... .......... 13% 593K 4m25s\n", + " 13700K .......... .......... .......... .......... .......... 13% 600K 4m25s\n", + " 13750K .......... .......... .......... .......... .......... 13% 571K 4m24s\n", + " 13800K .......... .......... .......... .......... .......... 13% 603K 4m23s\n", + " 13850K .......... .......... .......... .......... .......... 13% 581K 4m23s\n", + " 13900K .......... .......... .......... .......... .......... 13% 608K 4m22s\n", + " 13950K .......... .......... .......... .......... .......... 14% 603K 4m22s\n", + " 14000K .......... .......... .......... .......... .......... 14% 600K 4m21s\n", + " 14050K .......... .......... .......... .......... .......... 14% 639K 4m20s\n", + " 14100K .......... .......... .......... .......... .......... 14% 574K 4m20s\n", + " 14150K .......... .......... .......... .......... .......... 14% 589K 4m19s\n", + " 14200K .......... .......... .......... .......... .......... 14% 749K 4m19s\n", + " 14250K .......... .......... .......... .......... .......... 14% 589K 4m18s\n", + " 14300K .......... .......... .......... .......... .......... 14% 588K 4m18s\n", + " 14350K .......... .......... .......... .......... .......... 14% 614K 4m17s\n", + " 14400K .......... .......... .......... .......... .......... 14% 893K 4m16s\n", + " 14450K .......... .......... .......... .......... .......... 14% 612K 4m16s\n", + " 14500K .......... .......... .......... .......... .......... 14% 1011K 4m15s\n", + " 14550K .......... .......... .......... .......... .......... 14% 612K 4m15s\n", + " 14600K .......... .......... .......... .......... .......... 14% 611K 4m14s\n", + " 14650K .......... .......... .......... .......... .......... 14% 683K 4m13s\n", + " 14700K .......... .......... .......... .......... .......... 14% 614K 4m13s\n", + " 14750K .......... .......... .......... .......... .......... 14% 641K 4m12s\n", + " 14800K .......... .......... .......... .......... .......... 14% 679K 4m12s\n", + " 14850K .......... .......... .......... .......... .......... 14% 616K 4m11s\n", + " 14900K .......... .......... .......... .......... .......... 14% 1.30M 4m10s\n", + " 14950K .......... .......... .......... .......... .......... 15% 606K 4m10s\n", + " 15000K .......... .......... .......... .......... .......... 15% 603K 4m9s\n", + " 15050K .......... .......... .......... .......... .......... 15% 796K 4m9s\n", + " 15100K .......... .......... .......... .......... .......... 15% 626K 4m8s\n", + " 15150K .......... .......... .......... .......... .......... 15% 648K 4m8s\n", + " 15200K .......... .......... .......... .......... .......... 15% 1.30M 4m7s\n", + " 15250K .......... .......... .......... .......... .......... 15% 595K 4m7s\n", + " 15300K .......... .......... .......... .......... .......... 15% 938K 4m6s\n", + " 15350K .......... .......... .......... .......... .......... 15% 625K 4m5s\n", + " 15400K .......... .......... .......... .......... .......... 15% 657K 4m5s\n", + " 15450K .......... .......... .......... .......... .......... 15% 1020K 4m4s\n", + " 15500K .......... .......... .......... .......... .......... 15% 603K 4m4s\n", + " 15550K .......... .......... .......... .......... .......... 15% 1.13M 4m3s\n", + " 15600K .......... .......... .......... .......... .......... 15% 649K 4m2s\n", + " 15650K .......... .......... .......... .......... .......... 15% 906K 4m2s\n", + " 15700K .......... .......... .......... .......... .......... 15% 603K 4m1s\n", + " 15750K .......... .......... .......... .......... .......... 15% 1.25M 4m1s\n", + " 15800K .......... .......... .......... .......... .......... 15% 603K 4m0s\n", + " 15850K .......... .......... .......... .......... .......... 15% 986K 4m0s\n", + " 15900K .......... .......... .......... .......... .......... 15% 617K 3m59s\n", + " 15950K .......... .......... .......... .......... .......... 16% 1.35M 3m58s\n", + " 16000K .......... .......... .......... .......... .......... 16% 615K 3m58s\n", + " 16050K .......... .......... .......... .......... .......... 16% 913K 3m57s\n", + " 16100K .......... .......... .......... .......... .......... 16% 612K 3m57s\n", + " 16150K .......... .......... .......... .......... .......... 16% 1.39M 3m56s\n", + " 16200K .......... .......... .......... .......... .......... 16% 662K 3m56s\n", + " 16250K .......... .......... .......... .......... .......... 16% 754K 3m55s\n", + " 16300K .......... .......... .......... .......... .......... 16% 770K 3m55s\n", + " 16350K .......... .......... .......... .......... .......... 16% 1.05M 3m54s\n", + " 16400K .......... .......... .......... .......... .......... 16% 625K 3m54s\n", + " 16450K .......... .......... .......... .......... .......... 16% 717K 3m53s\n", + " 16500K .......... .......... .......... .......... .......... 16% 899K 3m53s\n", + " 16550K .......... .......... .......... .......... .......... 16% 1.09M 3m52s\n", + " 16600K .......... .......... .......... .......... .......... 16% 743K 3m51s\n", + " 16650K .......... .......... .......... .......... .......... 16% 712K 3m51s\n", + " 16700K .......... .......... .......... .......... .......... 16% 1.61M 3m50s\n", + " 16750K .......... .......... .......... .......... .......... 16% 624K 3m50s\n", + " 16800K .......... .......... .......... .......... .......... 16% 748K 3m49s\n", + " 16850K .......... .......... .......... .......... .......... 16% 933K 3m49s\n", + " 16900K .......... .......... .......... .......... .......... 16% 1.08M 3m48s\n", + " 16950K .......... .......... .......... .......... .......... 17% 706K 3m48s\n", + " 17000K .......... .......... .......... .......... .......... 17% 756K 3m47s\n", + " 17050K .......... .......... .......... .......... .......... 17% 1.77M 3m47s\n", + " 17100K .......... .......... .......... .......... .......... 17% 674K 3m46s\n", + " 17150K .......... .......... .......... .......... .......... 17% 778K 3m46s\n", + " 17200K .......... .......... .......... .......... .......... 17% 1.54M 3m45s\n", + " 17250K .......... .......... .......... .......... .......... 17% 698K 3m45s\n", + " 17300K .......... .......... .......... .......... .......... 17% 821K 3m44s\n", + " 17350K .......... .......... .......... .......... .......... 17% 1.34M 3m44s\n", + " 17400K .......... .......... .......... .......... .......... 17% 713K 3m43s\n", + " 17450K .......... .......... .......... .......... .......... 17% 817K 3m43s\n", + " 17500K .......... .......... .......... .......... .......... 17% 1.39M 3m42s\n", + " 17550K .......... .......... .......... .......... .......... 17% 698K 3m42s\n", + " 17600K .......... .......... .......... .......... .......... 17% 865K 3m41s\n", + " 17650K .......... .......... .......... .......... .......... 17% 1.23M 3m41s\n", + " 17700K .......... .......... .......... .......... .......... 17% 695K 3m40s\n", + " 17750K .......... .......... .......... .......... .......... 17% 769K 3m40s\n", + " 17800K .......... .......... .......... .......... .......... 17% 1.57M 3m39s\n", + " 17850K .......... .......... .......... .......... .......... 17% 692K 3m39s\n", + " 17900K .......... .......... .......... .......... .......... 17% 821K 3m38s\n", + " 17950K .......... .......... .......... .......... .......... 18% 1.57M 3m38s\n", + " 18000K .......... .......... .......... .......... .......... 18% 621K 3m37s\n", + " 18050K .......... .......... .......... .......... .......... 18% 966K 3m37s\n", + " 18100K .......... .......... .......... .......... .......... 18% 1.25M 3m36s\n", + " 18150K .......... .......... .......... .......... .......... 18% 890K 3m36s\n", + " 18200K .......... .......... .......... .......... .......... 18% 1.65M 3m35s\n", + " 18250K .......... .......... .......... .......... .......... 18% 616K 3m35s\n", + " 18300K .......... .......... .......... .......... .......... 18% 886K 3m34s\n", + " 18350K .......... .......... .......... .......... .......... 18% 1.41M 3m34s\n", + " 18400K .......... .......... .......... .......... .......... 18% 657K 3m33s\n", + " 18450K .......... .......... .......... .......... .......... 18% 1.14M 3m33s\n", + " 18500K .......... .......... .......... .......... .......... 18% 1.05M 3m32s\n", + " 18550K .......... .......... .......... .......... .......... 18% 715K 3m32s\n", + " 18600K .......... .......... .......... .......... .......... 18% 2.78M 3m31s\n", + " 18650K .......... .......... .......... .......... .......... 18% 672K 3m31s\n", + " 18700K .......... .......... .......... .......... .......... 18% 928K 3m30s\n", + " 18750K .......... .......... .......... .......... .......... 18% 1.32M 3m30s\n", + " 18800K .......... .......... .......... .......... .......... 18% 211K 3m30s\n", + " 18850K .......... .......... .......... .......... .......... 18% 580K 3m30s\n", + " 18900K .......... .......... .......... .......... .......... 18% 639K 3m30s\n", + " 18950K .......... .......... .......... .......... .......... 19% 402K 3m29s\n", + " 19000K .......... .......... .......... .......... .......... 19% 700K 3m29s\n", + " 19050K .......... .......... .......... .......... .......... 19% 593K 3m29s\n", + " 19100K .......... .......... .......... .......... .......... 19% 601K 3m28s\n", + " 19150K .......... .......... .......... .......... .......... 19% 602K 3m28s\n", + " 19200K .......... .......... .......... .......... .......... 19% 597K 3m28s\n", + " 19250K .......... .......... .......... .......... .......... 19% 303K 3m28s\n", + " 19300K .......... .......... .......... .......... .......... 19% 587K 3m28s\n", + " 19350K .......... .......... .......... .......... .......... 19% 296K 3m28s\n", + " 19400K .......... .......... .......... .......... .......... 19% 343K 3m28s\n", + " 19450K .......... .......... .......... .......... .......... 19% 468K 3m27s\n", + " 19500K .......... .......... .......... .......... .......... 19% 376K 3m27s\n", + " 19550K .......... .......... .......... .......... .......... 19% 460K 3m27s\n", + " 19600K .......... .......... .......... .......... .......... 19% 503K 3m27s\n", + " 19650K .......... .......... .......... .......... .......... 19% 560K 3m26s\n", + " 19700K .......... .......... .......... .......... .......... 19% 418K 3m26s\n", + " 19750K .......... .......... .......... .......... .......... 19% 509K 3m26s\n", + " 19800K .......... .......... .......... .......... .......... 19% 541K 3m26s\n", + " 19850K .......... .......... .......... .......... .......... 19% 536K 3m25s\n", + " 19900K .......... .......... .......... .......... .......... 19% 516K 3m25s\n", + " 19950K .......... .......... .......... .......... .......... 20% 605K 3m25s\n", + " 20000K .......... .......... .......... .......... .......... 20% 436K 3m25s\n", + " 20050K .......... .......... .......... .......... .......... 20% 591K 3m24s\n", + " 20100K .......... .......... .......... .......... .......... 20% 588K 3m24s\n", + " 20150K .......... .......... .......... .......... .......... 20% 593K 3m24s\n", + " 20200K .......... .......... .......... .......... .......... 20% 603K 3m24s\n", + " 20250K .......... .......... .......... .......... .......... 20% 618K 3m23s\n", + " 20300K .......... .......... .......... .......... .......... 20% 606K 3m23s\n", + " 20350K .......... .......... .......... .......... .......... 20% 586K 3m23s\n", + " 20400K .......... .......... .......... .......... .......... 20% 601K 3m22s\n", + " 20450K .......... .......... .......... .......... .......... 20% 586K 3m22s\n", + " 20500K .......... .......... .......... .......... .......... 20% 551K 3m22s\n", + " 20550K .......... .......... .......... .......... .......... 20% 664K 3m21s\n", + " 20600K .......... .......... .......... .......... .......... 20% 1.64M 3m21s\n", + " 20650K .......... .......... .......... .......... .......... 20% 598K 3m21s\n", + " 20700K .......... .......... .......... .......... .......... 20% 612K 3m20s\n", + " 20750K .......... .......... .......... .......... .......... 20% 669K 3m20s\n", + " 20800K .......... .......... .......... .......... .......... 20% 564K 3m20s\n", + " 20850K .......... .......... .......... .......... .......... 20% 642K 3m19s\n", + " 20900K .......... .......... .......... .......... .......... 20% 611K 3m19s\n", + " 20950K .......... .......... .......... .......... .......... 21% 601K 3m19s\n", + " 21000K .......... .......... .......... .......... .......... 21% 582K 3m19s\n", + " 21050K .......... .......... .......... .......... .......... 21% 551K 3m18s\n", + " 21100K .......... .......... .......... .......... .......... 21% 620K 3m18s\n", + " 21150K .......... .......... .......... .......... .......... 21% 630K 3m18s\n", + " 21200K .......... .......... .......... .......... .......... 21% 1.80M 3m17s\n", + " 21250K .......... .......... .......... .......... .......... 21% 580K 3m17s\n", + " 21300K .......... .......... .......... .......... .......... 21% 583K 3m17s\n", + " 21350K .......... .......... .......... .......... .......... 21% 657K 3m16s\n", + " 21400K .......... .......... .......... .......... .......... 21% 571K 3m16s\n", + " 21450K .......... .......... .......... .......... .......... 21% 744K 3m16s\n", + " 21500K .......... .......... .......... .......... .......... 21% 623K 3m16s\n", + " 21550K .......... .......... .......... .......... .......... 21% 606K 3m15s\n", + " 21600K .......... .......... .......... .......... .......... 21% 2.07M 3m15s\n", + " 21650K .......... .......... .......... .......... .......... 21% 634K 3m14s\n", + " 21700K .......... .......... .......... .......... .......... 21% 640K 3m14s\n", + " 21750K .......... .......... .......... .......... .......... 21% 702K 3m14s\n", + " 21800K .......... .......... .......... .......... .......... 21% 598K 3m14s\n", + " 21850K .......... .......... .......... .......... .......... 21% 2.15M 3m13s\n", + " 21900K .......... .......... .......... .......... .......... 21% 644K 3m13s\n", + " 21950K .......... .......... .......... .......... .......... 22% 606K 3m13s\n", + " 22000K .......... .......... .......... .......... .......... 22% 739K 3m12s\n", + " 22050K .......... .......... .......... .......... .......... 22% 600K 3m12s\n", + " 22100K .......... .......... .......... .......... .......... 22% 2.40M 3m11s\n", + " 22150K .......... .......... .......... .......... .......... 22% 634K 3m11s\n", + " 22200K .......... .......... .......... .......... .......... 22% 607K 3m11s\n", + " 22250K .......... .......... .......... .......... .......... 22% 728K 3m11s\n", + " 22300K .......... .......... .......... .......... .......... 22% 633K 3m10s\n", + " 22350K .......... .......... .......... .......... .......... 22% 665K 3m10s\n", + " 22400K .......... .......... .......... .......... .......... 22% 1.47M 3m10s\n", + " 22450K .......... .......... .......... .......... .......... 22% 632K 3m9s\n", + " 22500K .......... .......... .......... .......... .......... 22% 827K 3m9s\n", + " 22550K .......... .......... .......... .......... .......... 22% 660K 3m9s\n", + " 22600K .......... .......... .......... .......... .......... 22% 1.33M 3m8s\n", + " 22650K .......... .......... .......... .......... .......... 22% 623K 3m8s\n", + " 22700K .......... .......... .......... .......... .......... 22% 923K 3m8s\n", + " 22750K .......... .......... .......... .......... .......... 22% 644K 3m7s\n", + " 22800K .......... .......... .......... .......... .......... 22% 1.24M 3m7s\n", + " 22850K .......... .......... .......... .......... .......... 22% 640K 3m7s\n", + " 22900K .......... .......... .......... .......... .......... 22% 971K 3m6s\n", + " 22950K .......... .......... .......... .......... .......... 23% 642K 3m6s\n", + " 23000K .......... .......... .......... .......... .......... 23% 1.12M 3m6s\n", + " 23050K .......... .......... .......... .......... .......... 23% 955K 3m5s\n", + " 23100K .......... .......... .......... .......... .......... 23% 704K 3m5s\n", + " 23150K .......... .......... .......... .......... .......... 23% 1.01M 3m5s\n", + " 23200K .......... .......... .......... .......... .......... 23% 704K 3m5s\n", + " 23250K .......... .......... .......... .......... .......... 23% 699K 3m4s\n", + " 23300K .......... .......... .......... .......... .......... 23% 597K 3m4s\n", + " 23350K .......... .......... .......... .......... .......... 23% 2.14M 3m4s\n", + " 23400K .......... .......... .......... .......... .......... 23% 755K 3m3s\n", + " 23450K .......... .......... .......... .......... .......... 23% 584K 3m3s\n", + " 23500K .......... .......... .......... .......... .......... 23% 3.44M 3m3s\n", + " 23550K .......... .......... .......... .......... .......... 23% 521K 3m2s\n", + " 23600K .......... .......... .......... .......... .......... 23% 869K 3m2s\n", + " 23650K .......... .......... .......... .......... .......... 23% 2.08M 3m2s\n", + " 23700K .......... .......... .......... .......... .......... 23% 676K 3m1s\n", + " 23750K .......... .......... .......... .......... .......... 23% 677K 3m1s\n", + " 23800K .......... .......... .......... .......... .......... 23% 785K 3m1s\n", + " 23850K .......... .......... .......... .......... .......... 23% 1.76M 3m0s\n", + " 23900K .......... .......... .......... .......... .......... 23% 640K 3m0s\n", + " 23950K .......... .......... .......... .......... .......... 24% 757K 3m0s\n", + " 24000K .......... .......... .......... .......... .......... 24% 1.98M 2m59s\n", + " 24050K .......... .......... .......... .......... .......... 24% 621K 2m59s\n", + " 24100K .......... .......... .......... .......... .......... 24% 759K 2m59s\n", + " 24150K .......... .......... .......... .......... .......... 24% 2.11M 2m59s\n", + " 24200K .......... .......... .......... .......... .......... 24% 592K 2m58s\n", + " 24250K .......... .......... .......... .......... .......... 24% 861K 2m58s\n", + " 24300K .......... .......... .......... .......... .......... 24% 1.60M 2m58s\n", + " 24350K .......... .......... .......... .......... .......... 24% 582K 2m57s\n", + " 24400K .......... .......... .......... .......... .......... 24% 1.19M 2m57s\n", + " 24450K .......... .......... .......... .......... .......... 24% 1.14M 2m57s\n", + " 24500K .......... .......... .......... .......... .......... 24% 655K 2m56s\n", + " 24550K .......... .......... .......... .......... .......... 24% 1022K 2m56s\n", + " 24600K .......... .......... .......... .......... .......... 24% 1.18M 2m56s\n", + " 24650K .......... .......... .......... .......... .......... 24% 669K 2m56s\n", + " 24700K .......... .......... .......... .......... .......... 24% 891K 2m55s\n", + " 24750K .......... .......... .......... .......... .......... 24% 1.42M 2m55s\n", + " 24800K .......... .......... .......... .......... .......... 24% 632K 2m55s\n", + " 24850K .......... .......... .......... .......... .......... 24% 962K 2m54s\n", + " 24900K .......... .......... .......... .......... .......... 24% 1.20M 2m54s\n", + " 24950K .......... .......... .......... .......... .......... 25% 663K 2m54s\n", + " 25000K .......... .......... .......... .......... .......... 25% 3.80M 2m53s\n", + " 25050K .......... .......... .......... .......... .......... 25% 639K 2m53s\n", + " 25100K .......... .......... .......... .......... .......... 25% 1.09M 2m53s\n", + " 25150K .......... .......... .......... .......... .......... 25% 1.01M 2m52s\n", + " 25200K .......... .......... .......... .......... .......... 25% 735K 2m52s\n", + " 25250K .......... .......... .......... .......... .......... 25% 1017K 2m52s\n", + " 25300K .......... .......... .......... .......... .......... 25% 1.04M 2m52s\n", + " 25350K .......... .......... .......... .......... .......... 25% 708K 2m51s\n", + " 25400K .......... .......... .......... .......... .......... 25% 1.01M 2m51s\n", + " 25450K .......... .......... .......... .......... .......... 25% 1.18M 2m51s\n", + " 25500K .......... .......... .......... .......... .......... 25% 989K 2m50s\n", + " 25550K .......... .......... .......... .......... .......... 25% 1.32M 2m50s\n", + " 25600K .......... .......... .......... .......... .......... 25% 630K 2m50s\n", + " 25650K .......... .......... .......... .......... .......... 25% 5.08M 2m49s\n", + " 25700K .......... .......... .......... .......... .......... 25% 557K 2m49s\n", + " 25750K .......... .......... .......... .......... .......... 25% 1.26M 2m49s\n", + " 25800K .......... .......... .......... .......... .......... 25% 1.04M 2m49s\n", + " 25850K .......... .......... .......... .......... .......... 25% 607K 2m48s\n", + " 25900K .......... .......... .......... .......... .......... 25% 1.40M 2m48s\n", + " 25950K .......... .......... .......... .......... .......... 26% 989K 2m48s\n", + " 26000K .......... .......... .......... .......... .......... 26% 1.14M 2m47s\n", + " 26050K .......... .......... .......... .......... .......... 26% 1.08M 2m47s\n", + " 26100K .......... .......... .......... .......... .......... 26% 986K 2m47s\n", + " 26150K .......... .......... .......... .......... .......... 26% 1.26M 2m47s\n", + " 26200K .......... .......... .......... .......... .......... 26% 309K 2m47s\n", + " 26250K .......... .......... .......... .......... .......... 26% 340K 2m47s\n", + " 26300K .......... .......... .......... .......... .......... 26% 2.84M 2m46s\n", + " 26350K .......... .......... .......... .......... .......... 26% 671K 2m46s\n", + " 26400K .......... .......... .......... .......... .......... 26% 2.54M 2m46s\n", + " 26450K .......... .......... .......... .......... .......... 26% 714K 2m45s\n", + " 26500K .......... .......... .......... .......... .......... 26% 701K 2m45s\n", + " 26550K .......... .......... .......... .......... .......... 26% 2.56M 2m45s\n", + " 26600K .......... .......... .......... .......... .......... 26% 705K 2m45s\n", + " 26650K .......... .......... .......... .......... .......... 26% 2.87M 2m44s\n", + " 26700K .......... .......... .......... .......... .......... 26% 557K 2m44s\n", + " 26750K .......... .......... .......... .......... .......... 26% 76.4M 2m44s\n", + " 26800K .......... .......... .......... .......... .......... 26% 588K 2m43s\n", + " 26850K .......... .......... .......... .......... .......... 26% 628K 2m43s\n", + " 26900K .......... .......... .......... .......... .......... 26% 3.70M 2m43s\n", + " 26950K .......... .......... .......... .......... .......... 27% 667K 2m43s\n", + " 27000K .......... .......... .......... .......... .......... 27% 4.11M 2m42s\n", + " 27050K .......... .......... .......... .......... .......... 27% 644K 2m42s\n", + " 27100K .......... .......... .......... .......... .......... 27% 6.58M 2m42s\n", + " 27150K .......... .......... .......... .......... .......... 27% 645K 2m41s\n", + " 27200K .......... .......... .......... .......... .......... 27% 688K 2m41s\n", + " 27250K .......... .......... .......... .......... .......... 27% 3.80M 2m41s\n", + " 27300K .......... .......... .......... .......... .......... 27% 639K 2m41s\n", + " 27350K .......... .......... .......... .......... .......... 27% 7.36M 2m40s\n", + " 27400K .......... .......... .......... .......... .......... 27% 601K 2m40s\n", + " 27450K .......... .......... .......... .......... .......... 27% 7.30M 2m40s\n", + " 27500K .......... .......... .......... .......... .......... 27% 629K 2m39s\n", + " 27550K .......... .......... .......... .......... .......... 27% 793K 2m39s\n", + " 27600K .......... .......... .......... .......... .......... 27% 2.18M 2m39s\n", + " 27650K .......... .......... .......... .......... .......... 27% 658K 2m39s\n", + " 27700K .......... .......... .......... .......... .......... 27% 4.23M 2m38s\n", + " 27750K .......... .......... .......... .......... .......... 27% 589K 2m38s\n", + " 27800K .......... .......... .......... .......... .......... 27% 7.03M 2m38s\n", + " 27850K .......... .......... .......... .......... .......... 27% 636K 2m38s\n", + " 27900K .......... .......... .......... .......... .......... 27% 7.72M 2m37s\n", + " 27950K .......... .......... .......... .......... .......... 28% 606K 2m37s\n", + " 28000K .......... .......... .......... .......... .......... 28% 1.13M 2m37s\n", + " 28050K .......... .......... .......... .......... .......... 28% 1.13M 2m37s\n", + " 28100K .......... .......... .......... .......... .......... 28% 1.22M 2m36s\n", + " 28150K .......... .......... .......... .......... .......... 28% 1.02M 2m36s\n", + " 28200K .......... .......... .......... .......... .......... 28% 1019K 2m36s\n", + " 28250K .......... .......... .......... .......... .......... 28% 1.32M 2m35s\n", + " 28300K .......... .......... .......... .......... .......... 28% 1.04M 2m35s\n", + " 28350K .......... .......... .......... .......... .......... 28% 1.28M 2m35s\n", + " 28400K .......... .......... .......... .......... .......... 28% 1.09M 2m35s\n", + " 28450K .......... .......... .......... .......... .......... 28% 1.27M 2m34s\n", + " 28500K .......... .......... .......... .......... .......... 28% 827K 2m34s\n", + " 28550K .......... .......... .......... .......... .......... 28% 1.88M 2m34s\n", + " 28600K .......... .......... .......... .......... .......... 28% 878K 2m34s\n", + " 28650K .......... .......... .......... .......... .......... 28% 1.58M 2m33s\n", + " 28700K .......... .......... .......... .......... .......... 28% 687K 2m33s\n", + " 28750K .......... .......... .......... .......... .......... 28% 3.42M 2m33s\n", + " 28800K .......... .......... .......... .......... .......... 28% 697K 2m33s\n", + " 28850K .......... .......... .......... .......... .......... 28% 3.03M 2m32s\n", + " 28900K .......... .......... .......... .......... .......... 28% 741K 2m32s\n", + " 28950K .......... .......... .......... .......... .......... 29% 2.80M 2m32s\n", + " 29000K .......... .......... .......... .......... .......... 29% 714K 2m31s\n", + " 29050K .......... .......... .......... .......... .......... 29% 2.55M 2m31s\n", + " 29100K .......... .......... .......... .......... .......... 29% 762K 2m31s\n", + " 29150K .......... .......... .......... .......... .......... 29% 1.35M 2m31s\n", + " 29200K .......... .......... .......... .......... .......... 29% 1.02M 2m30s\n", + " 29250K .......... .......... .......... .......... .......... 29% 1.28M 2m30s\n", + " 29300K .......... .......... .......... .......... .......... 29% 721K 2m30s\n", + " 29350K .......... .......... .......... .......... .......... 29% 2.85M 2m30s\n", + " 29400K .......... .......... .......... .......... .......... 29% 728K 2m29s\n", + " 29450K .......... .......... .......... .......... .......... 29% 3.20M 2m29s\n", + " 29500K .......... .......... .......... .......... .......... 29% 727K 2m29s\n", + " 29550K .......... .......... .......... .......... .......... 29% 2.90M 2m29s\n", + " 29600K .......... .......... .......... .......... .......... 29% 467K 2m28s\n", + " 29650K .......... .......... .......... .......... .......... 29% 18.6M 2m28s\n", + " 29700K .......... .......... .......... .......... .......... 29% 664K 2m28s\n", + " 29750K .......... .......... .......... .......... .......... 29% 3.07M 2m28s\n", + " 29800K .......... .......... .......... .......... .......... 29% 610K 2m27s\n", + " 29850K .......... .......... .......... .......... .......... 29% 5.94M 2m27s\n", + " 29900K .......... .......... .......... .......... .......... 29% 613K 2m27s\n", + " 29950K .......... .......... .......... .......... .......... 30% 5.25M 2m27s\n", + " 30000K .......... .......... .......... .......... .......... 30% 671K 2m26s\n", + " 30050K .......... .......... .......... .......... .......... 30% 1.58M 2m26s\n", + " 30100K .......... .......... .......... .......... .......... 30% 905K 2m26s\n", + " 30150K .......... .......... .......... .......... .......... 30% 1.92M 2m26s\n", + " 30200K .......... .......... .......... .......... .......... 30% 891K 2m25s\n", + " 30250K .......... .......... .......... .......... .......... 30% 1.77M 2m25s\n", + " 30300K .......... .......... .......... .......... .......... 30% 852K 2m25s\n", + " 30350K .......... .......... .......... .......... .......... 30% 1.86M 2m25s\n", + " 30400K .......... .......... .......... .......... .......... 30% 813K 2m25s\n", + " 30450K .......... .......... .......... .......... .......... 30% 2.28M 2m24s\n", + " 30500K .......... .......... .......... .......... .......... 30% 807K 2m24s\n", + " 30550K .......... .......... .......... .......... .......... 30% 2.30M 2m24s\n", + " 30600K .......... .......... .......... .......... .......... 30% 738K 2m24s\n", + " 30650K .......... .......... .......... .......... .......... 30% 3.65M 2m23s\n", + " 30700K .......... .......... .......... .......... .......... 30% 664K 2m23s\n", + " 30750K .......... .......... .......... .......... .......... 30% 2.39M 2m23s\n", + " 30800K .......... .......... .......... .......... .......... 30% 757K 2m23s\n", + " 30850K .......... .......... .......... .......... .......... 30% 3.10M 2m22s\n", + " 30900K .......... .......... .......... .......... .......... 30% 712K 2m22s\n", + " 30950K .......... .......... .......... .......... .......... 31% 3.38M 2m22s\n", + " 31000K .......... .......... .......... .......... .......... 31% 711K 2m22s\n", + " 31050K .......... .......... .......... .......... .......... 31% 4.05M 2m21s\n", + " 31100K .......... .......... .......... .......... .......... 31% 139K 2m22s\n", + " 31150K .......... .......... .......... .......... .......... 31% 1.86M 2m22s\n", + " 31200K .......... .......... .......... .......... .......... 31% 707K 2m21s\n", + " 31250K .......... .......... .......... .......... .......... 31% 4.03M 2m21s\n", + " 31300K .......... .......... .......... .......... .......... 31% 691K 2m21s\n", + " 31350K .......... .......... .......... .......... .......... 31% 3.76M 2m21s\n", + " 31400K .......... .......... .......... .......... .......... 31% 683K 2m20s\n", + " 31450K .......... .......... .......... .......... .......... 31% 5.12M 2m20s\n", + " 31500K .......... .......... .......... .......... .......... 31% 672K 2m20s\n", + " 31550K .......... .......... .......... .......... .......... 31% 4.76M 2m20s\n", + " 31600K .......... .......... .......... .......... .......... 31% 6.03M 2m19s\n", + " 31650K .......... .......... .......... .......... .......... 31% 637K 2m19s\n", + " 31700K .......... .......... .......... .......... .......... 31% 4.21M 2m19s\n", + " 31750K .......... .......... .......... .......... .......... 31% 565K 2m19s\n", + " 31800K .......... .......... .......... .......... .......... 31% 98.6M 2m18s\n", + " 31850K .......... .......... .......... .......... .......... 31% 615K 2m18s\n", + " 31900K .......... .......... .......... .......... .......... 31% 5.17M 2m18s\n", + " 31950K .......... .......... .......... .......... .......... 32% 660K 2m18s\n", + " 32000K .......... .......... .......... .......... .......... 32% 5.14M 2m18s\n", + " 32050K .......... .......... .......... .......... .......... 32% 644K 2m17s\n", + " 32100K .......... .......... .......... .......... .......... 32% 7.45M 2m17s\n", + " 32150K .......... .......... .......... .......... .......... 32% 617K 2m17s\n", + " 32200K .......... .......... .......... .......... .......... 32% 5.67M 2m17s\n", + " 32250K .......... .......... .......... .......... .......... 32% 659K 2m17s\n", + " 32300K .......... .......... .......... .......... .......... 32% 3.06M 2m16s\n", + " 32350K .......... .......... .......... .......... .......... 32% 692K 2m16s\n", + " 32400K .......... .......... .......... .......... .......... 32% 3.91M 2m16s\n", + " 32450K .......... .......... .......... .......... .......... 32% 669K 2m16s\n", + " 32500K .......... .......... .......... .......... .......... 32% 4.81M 2m15s\n", + " 32550K .......... .......... .......... .......... .......... 32% 765K 2m15s\n", + " 32600K .......... .......... .......... .......... .......... 32% 2.92M 2m15s\n", + " 32650K .......... .......... .......... .......... .......... 32% 726K 2m15s\n", + " 32700K .......... .......... .......... .......... .......... 32% 3.59M 2m14s\n", + " 32750K .......... .......... .......... .......... .......... 32% 691K 2m14s\n", + " 32800K .......... .......... .......... .......... .......... 32% 651K 2m14s\n", + " 32850K .......... .......... .......... .......... .......... 32% 5.04M 2m14s\n", + " 32900K .......... .......... .......... .......... .......... 32% 5.57M 2m14s\n", + " 32950K .......... .......... .......... .......... .......... 33% 672K 2m13s\n", + " 33000K .......... .......... .......... .......... .......... 33% 5.58M 2m13s\n", + " 33050K .......... .......... .......... .......... .......... 33% 654K 2m13s\n", + " 33100K .......... .......... .......... .......... .......... 33% 4.40M 2m13s\n", + " 33150K .......... .......... .......... .......... .......... 33% 569K 2m13s\n", + " 33200K .......... .......... .......... .......... .......... 33% 4.85M 2m12s\n", + " 33250K .......... .......... .......... .......... .......... 33% 654K 2m12s\n", + " 33300K .......... .......... .......... .......... .......... 33% 7.05M 2m12s\n", + " 33350K .......... .......... .......... .......... .......... 33% 626K 2m12s\n", + " 33400K .......... .......... .......... .......... .......... 33% 5.68M 2m12s\n", + " 33450K .......... .......... .......... .......... .......... 33% 677K 2m11s\n", + " 33500K .......... .......... .......... .......... .......... 33% 3.79M 2m11s\n", + " 33550K .......... .......... .......... .......... .......... 33% 567K 2m11s\n", + " 33600K .......... .......... .......... .......... .......... 33% 16.2M 2m11s\n", + " 33650K .......... .......... .......... .......... .......... 33% 630K 2m11s\n", + " 33700K .......... .......... .......... .......... .......... 33% 5.75M 2m10s\n", + " 33750K .......... .......... .......... .......... .......... 33% 669K 2m10s\n", + " 33800K .......... .......... .......... .......... .......... 33% 4.63M 2m10s\n", + " 33850K .......... .......... .......... .......... .......... 33% 701K 2m10s\n", + " 33900K .......... .......... .......... .......... .......... 33% 2.75M 2m9s\n", + " 33950K .......... .......... .......... .......... .......... 34% 769K 2m9s\n", + " 34000K .......... .......... .......... .......... .......... 34% 2.61M 2m9s\n", + " 34050K .......... .......... .......... .......... .......... 34% 3.02M 2m9s\n", + " 34100K .......... .......... .......... .......... .......... 34% 750K 2m9s\n", + " 34150K .......... .......... .......... .......... .......... 34% 3.16M 2m8s\n", + " 34200K .......... .......... .......... .......... .......... 34% 743K 2m8s\n", + " 34250K .......... .......... .......... .......... .......... 34% 2.95M 2m8s\n", + " 34300K .......... .......... .......... .......... .......... 34% 755K 2m8s\n", + " 34350K .......... .......... .......... .......... .......... 34% 2.71M 2m8s\n", + " 34400K .......... .......... .......... .......... .......... 34% 752K 2m7s\n", + " 34450K .......... .......... .......... .......... .......... 34% 2.14M 2m7s\n", + " 34500K .......... .......... .......... .......... .......... 34% 903K 2m7s\n", + " 34550K .......... .......... .......... .......... .......... 34% 1.71M 2m7s\n", + " 34600K .......... .......... .......... .......... .......... 34% 805K 2m7s\n", + " 34650K .......... .......... .......... .......... .......... 34% 6.26M 2m6s\n", + " 34700K .......... .......... .......... .......... .......... 34% 584K 2m6s\n", + " 34750K .......... .......... .......... .......... .......... 34% 4.49M 2m6s\n", + " 34800K .......... .......... .......... .......... .......... 34% 804K 2m6s\n", + " 34850K .......... .......... .......... .......... .......... 34% 1.99M 2m6s\n", + " 34900K .......... .......... .......... .......... .......... 34% 829K 2m5s\n", + " 34950K .......... .......... .......... .......... .......... 35% 1.88M 2m5s\n", + " 35000K .......... .......... .......... .......... .......... 35% 828K 2m5s\n", + " 35050K .......... .......... .......... .......... .......... 35% 1.96M 2m5s\n", + " 35100K .......... .......... .......... .......... .......... 35% 819K 2m5s\n", + " 35150K .......... .......... .......... .......... .......... 35% 1.82M 2m4s\n", + " 35200K .......... .......... .......... .......... .......... 35% 876K 2m4s\n", + " 35250K .......... .......... .......... .......... .......... 35% 6.73M 2m4s\n", + " 35300K .......... .......... .......... .......... .......... 35% 643K 2m4s\n", + " 35350K .......... .......... .......... .......... .......... 35% 4.98M 2m4s\n", + " 35400K .......... .......... .......... .......... .......... 35% 678K 2m3s\n", + " 35450K .......... .......... .......... .......... .......... 35% 6.46M 2m3s\n", + " 35500K .......... .......... .......... .......... .......... 35% 705K 2m3s\n", + " 35550K .......... .......... .......... .......... .......... 35% 3.70M 2m3s\n", + " 35600K .......... .......... .......... .......... .......... 35% 701K 2m3s\n", + " 35650K .......... .......... .......... .......... .......... 35% 3.22M 2m2s\n", + " 35700K .......... .......... .......... .......... .......... 35% 2.46M 2m2s\n", + " 35750K .......... .......... .......... .......... .......... 35% 791K 2m2s\n", + " 35800K .......... .......... .......... .......... .......... 35% 2.29M 2m2s\n", + " 35850K .......... .......... .......... .......... .......... 35% 754K 2m2s\n", + " 35900K .......... .......... .......... .......... .......... 35% 3.06M 2m1s\n", + " 35950K .......... .......... .......... .......... .......... 36% 889K 2m1s\n", + " 36000K .......... .......... .......... .......... .......... 36% 1.80M 2m1s\n", + " 36050K .......... .......... .......... .......... .......... 36% 872K 2m1s\n", + " 36100K .......... .......... .......... .......... .......... 36% 1.66M 2m1s\n", + " 36150K .......... .......... .......... .......... .......... 36% 916K 2m1s\n", + " 36200K .......... .......... .......... .......... .......... 36% 1.60M 2m0s\n", + " 36250K .......... .......... .......... .......... .......... 36% 908K 2m0s\n", + " 36300K .......... .......... .......... .......... .......... 36% 1.55M 2m0s\n", + " 36350K .......... .......... .......... .......... .......... 36% 837K 2m0s\n", + " 36400K .......... .......... .......... .......... .......... 36% 4.34M 2m0s\n", + " 36450K .......... .......... .......... .......... .......... 36% 653K 1m59s\n", + " 36500K .......... .......... .......... .......... .......... 36% 1.74M 1m59s\n", + " 36550K .......... .......... .......... .......... .......... 36% 638K 1m59s\n", + " 36600K .......... .......... .......... .......... .......... 36% 5.06M 1m59s\n", + " 36650K .......... .......... .......... .......... .......... 36% 606K 1m59s\n", + " 36700K .......... .......... .......... .......... .......... 36% 14.4M 1m59s\n", + " 36750K .......... .......... .......... .......... .......... 36% 6.02M 1m58s\n", + " 36800K .......... .......... .......... .......... .......... 36% 452K 1m58s\n", + " 36850K .......... .......... .......... .......... .......... 36% 130M 1m58s\n", + " 36900K .......... .......... .......... .......... .......... 36% 964K 1m58s\n", + " 36950K .......... .......... .......... .......... .......... 37% 3.53M 1m58s\n", + " 37000K .......... .......... .......... .......... .......... 37% 707K 1m57s\n", + " 37050K .......... .......... .......... .......... .......... 37% 4.17M 1m57s\n", + " 37100K .......... .......... .......... .......... .......... 37% 2.57M 1m57s\n", + " 37150K .......... .......... .......... .......... .......... 37% 731K 1m57s\n", + " 37200K .......... .......... .......... .......... .......... 37% 2.39M 1m57s\n", + " 37250K .......... .......... .......... .......... .......... 37% 23.9M 1m56s\n", + " 37300K .......... .......... .......... .......... .......... 37% 689K 1m56s\n", + " 37350K .......... .......... .......... .......... .......... 37% 3.12M 1m56s\n", + " 37400K .......... .......... .......... .......... .......... 37% 697K 1m56s\n", + " 37450K .......... .......... .......... .......... .......... 37% 2.25M 1m56s\n", + " 37500K .......... .......... .......... .......... .......... 37% 9.61M 1m55s\n", + " 37550K .......... .......... .......... .......... .......... 37% 778K 1m55s\n", + " 37600K .......... .......... .......... .......... .......... 37% 2.60M 1m55s\n", + " 37650K .......... .......... .......... .......... .......... 37% 707K 1m55s\n", + " 37700K .......... .......... .......... .......... .......... 37% 3.55M 1m55s\n", + " 37750K .......... .......... .......... .......... .......... 37% 8.61M 1m55s\n", + " 37800K .......... .......... .......... .......... .......... 37% 715K 1m54s\n", + " 37850K .......... .......... .......... .......... .......... 37% 3.12M 1m54s\n", + " 37900K .......... .......... .......... .......... .......... 37% 716K 1m54s\n", + " 37950K .......... .......... .......... .......... .......... 38% 2.95M 1m54s\n", + " 38000K .......... .......... .......... .......... .......... 38% 748K 1m54s\n", + " 38050K .......... .......... .......... .......... .......... 38% 3.05M 1m53s\n", + " 38100K .......... .......... .......... .......... .......... 38% 711K 1m53s\n", + " 38150K .......... .......... .......... .......... .......... 38% 3.75M 1m53s\n", + " 38200K .......... .......... .......... .......... .......... 38% 688K 1m53s\n", + " 38250K .......... .......... .......... .......... .......... 38% 3.12M 1m53s\n", + " 38300K .......... .......... .......... .......... .......... 38% 719K 1m53s\n", + " 38350K .......... .......... .......... .......... .......... 38% 3.47M 1m52s\n", + " 38400K .......... .......... .......... .......... .......... 38% 7.57M 1m52s\n", + " 38450K .......... .......... .......... .......... .......... 38% 471K 1m52s\n", + " 38500K .......... .......... .......... .......... .......... 38% 16.0M 1m52s\n", + " 38550K .......... .......... .......... .......... .......... 38% 625K 1m52s\n", + " 38600K .......... .......... .......... .......... .......... 38% 5.18M 1m52s\n", + " 38650K .......... .......... .......... .......... .......... 38% 643K 1m51s\n", + " 38700K .......... .......... .......... .......... .......... 38% 5.62M 1m51s\n", + " 38750K .......... .......... .......... .......... .......... 38% 634K 1m51s\n", + " 38800K .......... .......... .......... .......... .......... 38% 10.8M 1m51s\n", + " 38850K .......... .......... .......... .......... .......... 38% 639K 1m51s\n", + " 38900K .......... .......... .......... .......... .......... 38% 6.10M 1m51s\n", + " 38950K .......... .......... .......... .......... .......... 39% 8.67M 1m50s\n", + " 39000K .......... .......... .......... .......... .......... 39% 592K 1m50s\n", + " 39050K .......... .......... .......... .......... .......... 39% 6.67M 1m50s\n", + " 39100K .......... .......... .......... .......... .......... 39% 16.2M 1m50s\n", + " 39150K .......... .......... .......... .......... .......... 39% 561K 1m50s\n", + " 39200K .......... .......... .......... .......... .......... 39% 13.6M 1m50s\n", + " 39250K .......... .......... .......... .......... .......... 39% 600K 1m49s\n", + " 39300K .......... .......... .......... .......... .......... 39% 5.09M 1m49s\n", + " 39350K .......... .......... .......... .......... .......... 39% 690K 1m49s\n", + " 39400K .......... .......... .......... .......... .......... 39% 3.24M 1m49s\n", + " 39450K .......... .......... .......... .......... .......... 39% 699K 1m49s\n", + " 39500K .......... .......... .......... .......... .......... 39% 3.36M 1m49s\n", + " 39550K .......... .......... .......... .......... .......... 39% 708K 1m48s\n", + " 39600K .......... .......... .......... .......... .......... 39% 4.30M 1m48s\n", + " 39650K .......... .......... .......... .......... .......... 39% 596K 1m48s\n", + " 39700K .......... .......... .......... .......... .......... 39% 23.3M 1m48s\n", + " 39750K .......... .......... .......... .......... .......... 39% 628K 1m48s\n", + " 39800K .......... .......... .......... .......... .......... 39% 5.35M 1m48s\n", + " 39850K .......... .......... .......... .......... .......... 39% 594K 1m47s\n", + " 39900K .......... .......... .......... .......... .......... 39% 7.19M 1m47s\n", + " 39950K .......... .......... .......... .......... .......... 40% 606K 1m47s\n", + " 40000K .......... .......... .......... .......... .......... 40% 59.8M 1m47s\n", + " 40050K .......... .......... .......... .......... .......... 40% 818K 1m47s\n", + " 40100K .......... .......... .......... .......... .......... 40% 1.84M 1m47s\n", + " 40150K .......... .......... .......... .......... .......... 40% 824K 1m47s\n", + " 40200K .......... .......... .......... .......... .......... 40% 2.08M 1m46s\n", + " 40250K .......... .......... .......... .......... .......... 40% 794K 1m46s\n", + " 40300K .......... .......... .......... .......... .......... 40% 2.02M 1m46s\n", + " 40350K .......... .......... .......... .......... .......... 40% 840K 1m46s\n", + " 40400K .......... .......... .......... .......... .......... 40% 2.03M 1m46s\n", + " 40450K .......... .......... .......... .......... .......... 40% 821K 1m46s\n", + " 40500K .......... .......... .......... .......... .......... 40% 1.23M 1m45s\n", + " 40550K .......... .......... .......... .......... .......... 40% 1002K 1m45s\n", + " 40600K .......... .......... .......... .......... .......... 40% 1.79M 1m45s\n", + " 40650K .......... .......... .......... .......... .......... 40% 867K 1m45s\n", + " 40700K .......... .......... .......... .......... .......... 40% 1.57M 1m45s\n", + " 40750K .......... .......... .......... .......... .......... 40% 7.93M 1m45s\n", + " 40800K .......... .......... .......... .......... .......... 40% 598K 1m44s\n", + " 40850K .......... .......... .......... .......... .......... 40% 4.15M 1m44s\n", + " 40900K .......... .......... .......... .......... .......... 40% 9.97M 1m44s\n", + " 40950K .......... .......... .......... .......... .......... 41% 533K 1m44s\n", + " 41000K .......... .......... .......... .......... .......... 41% 18.5M 1m44s\n", + " 41050K .......... .......... .......... .......... .......... 41% 573K 1m44s\n", + " 41100K .......... .......... .......... .......... .......... 41% 3.26M 1m43s\n", + " 41150K .......... .......... .......... .......... .......... 41% 82.5M 1m43s\n", + " 41200K .......... .......... .......... .......... .......... 41% 545K 1m43s\n", + " 41250K .......... .......... .......... .......... .......... 41% 632K 1m43s\n", + " 41300K .......... .......... .......... .......... .......... 41% 2.12M 1m43s\n", + " 41350K .......... .......... .......... .......... .......... 41% 828K 1m43s\n", + " 41400K .......... .......... .......... .......... .......... 41% 2.62M 1m43s\n", + " 41450K .......... .......... .......... .......... .......... 41% 685K 1m42s\n", + " 41500K .......... .......... .......... .......... .......... 41% 3.67M 1m42s\n", + " 41550K .......... .......... .......... .......... .......... 41% 707K 1m42s\n", + " 41600K .......... .......... .......... .......... .......... 41% 6.46M 1m42s\n", + " 41650K .......... .......... .......... .......... .......... 41% 3.45M 1m42s\n", + " 41700K .......... .......... .......... .......... .......... 41% 604K 1m42s\n", + " 41750K .......... .......... .......... .......... .......... 41% 6.30M 1m42s\n", + " 41800K .......... .......... .......... .......... .......... 41% 654K 1m41s\n", + " 41850K .......... .......... .......... .......... .......... 41% 5.46M 1m41s\n", + " 41900K .......... .......... .......... .......... .......... 41% 648K 1m41s\n", + " 41950K .......... .......... .......... .......... .......... 42% 4.62M 1m41s\n", + " 42000K .......... .......... .......... .......... .......... 42% 639K 1m41s\n", + " 42050K .......... .......... .......... .......... .......... 42% 8.44M 1m41s\n", + " 42100K .......... .......... .......... .......... .......... 42% 4.72M 1m40s\n", + " 42150K .......... .......... .......... .......... .......... 42% 623K 1m40s\n", + " 42200K .......... .......... .......... .......... .......... 42% 2.89M 1m40s\n", + " 42250K .......... .......... .......... .......... .......... 42% 632K 1m40s\n", + " 42300K .......... .......... .......... .......... .......... 42% 2.82M 1m40s\n", + " 42350K .......... .......... .......... .......... .......... 42% 672K 1m40s\n", + " 42400K .......... .......... .......... .......... .......... 42% 2.26M 1m40s\n", + " 42450K .......... .......... .......... .......... .......... 42% 767K 99s\n", + " 42500K .......... .......... .......... .......... .......... 42% 1.67M 99s\n", + " 42550K .......... .......... .......... .......... .......... 42% 70.0M 99s\n", + " 42600K .......... .......... .......... .......... .......... 42% 410K 99s\n", + " 42650K .......... .......... .......... .......... .......... 42% 2.72M 99s\n", + " 42700K .......... .......... .......... .......... .......... 42% 621K 99s\n", + " 42750K .......... .......... .......... .......... .......... 42% 3.77M 99s\n", + " 42800K .......... .......... .......... .......... .......... 42% 640K 99s\n", + " 42850K .......... .......... .......... .......... .......... 42% 1.27M 98s\n", + " 42900K .......... .......... .......... .......... .......... 42% 1.07M 98s\n", + " 42950K .......... .......... .......... .......... .......... 43% 1.26M 98s\n", + " 43000K .......... .......... .......... .......... .......... 43% 3.09M 98s\n", + " 43050K .......... .......... .......... .......... .......... 43% 676K 98s\n", + " 43100K .......... .......... .......... .......... .......... 43% 2.25M 98s\n", + " 43150K .......... .......... .......... .......... .......... 43% 14.2M 97s\n", + " 43200K .......... .......... .......... .......... .......... 43% 722K 97s\n", + " 43250K .......... .......... .......... .......... .......... 43% 2.02M 97s\n", + " 43300K .......... .......... .......... .......... .......... 43% 708K 97s\n", + " 43350K .......... .......... .......... .......... .......... 43% 3.87M 97s\n", + " 43400K .......... .......... .......... .......... .......... 43% 640K 97s\n", + " 43450K .......... .......... .......... .......... .......... 43% 8.89M 97s\n", + " 43500K .......... .......... .......... .......... .......... 43% 4.84M 96s\n", + " 43550K .......... .......... .......... .......... .......... 43% 666K 96s\n", + " 43600K .......... .......... .......... .......... .......... 43% 2.98M 96s\n", + " 43650K .......... .......... .......... .......... .......... 43% 719K 96s\n", + " 43700K .......... .......... .......... .......... .......... 43% 3.14M 96s\n", + " 43750K .......... .......... .......... .......... .......... 43% 3.48M 96s\n", + " 43800K .......... .......... .......... .......... .......... 43% 722K 96s\n", + " 43850K .......... .......... .......... .......... .......... 43% 3.21M 95s\n", + " 43900K .......... .......... .......... .......... .......... 43% 693K 95s\n", + " 43950K .......... .......... .......... .......... .......... 44% 2.87M 95s\n", + " 44000K .......... .......... .......... .......... .......... 44% 717K 95s\n", + " 44050K .......... .......... .......... .......... .......... 44% 1.93M 95s\n", + " 44100K .......... .......... .......... .......... .......... 44% 142M 95s\n", + " 44150K .......... .......... .......... .......... .......... 44% 733K 95s\n", + " 44200K .......... .......... .......... .......... .......... 44% 1.65M 94s\n", + " 44250K .......... .......... .......... .......... .......... 44% 899K 94s\n", + " 44300K .......... .......... .......... .......... .......... 44% 1.57M 94s\n", + " 44350K .......... .......... .......... .......... .......... 44% 891K 94s\n", + " 44400K .......... .......... .......... .......... .......... 44% 2.20M 94s\n", + " 44450K .......... .......... .......... .......... .......... 44% 745K 94s\n", + " 44500K .......... .......... .......... .......... .......... 44% 3.00M 94s\n", + " 44550K .......... .......... .......... .......... .......... 44% 713K 93s\n", + " 44600K .......... .......... .......... .......... .......... 44% 6.13M 93s\n", + " 44650K .......... .......... .......... .......... .......... 44% 598K 93s\n", + " 44700K .......... .......... .......... .......... .......... 44% 10.7M 93s\n", + " 44750K .......... .......... .......... .......... .......... 44% 619K 93s\n", + " 44800K .......... .......... .......... .......... .......... 44% 6.16M 93s\n", + " 44850K .......... .......... .......... .......... .......... 44% 3.01M 93s\n", + " 44900K .......... .......... .......... .......... .......... 44% 646K 93s\n", + " 44950K .......... .......... .......... .......... .......... 45% 5.58M 92s\n", + " 45000K .......... .......... .......... .......... .......... 45% 440K 92s\n", + " 45050K .......... .......... .......... .......... .......... 45% 48.7M 92s\n", + " 45100K .......... .......... .......... .......... .......... 45% 501K 92s\n", + " 45150K .......... .......... .......... .......... .......... 45% 6.40M 92s\n", + " 45200K .......... .......... .......... .......... .......... 45% 8.05M 92s\n", + " 45250K .......... .......... .......... .......... .......... 45% 572K 92s\n", + " 45300K .......... .......... .......... .......... .......... 45% 9.41M 91s\n", + " 45350K .......... .......... .......... .......... .......... 45% 597K 91s\n", + " 45400K .......... .......... .......... .......... .......... 45% 7.81M 91s\n", + " 45450K .......... .......... .......... .......... .......... 45% 621K 91s\n", + " 45500K .......... .......... .......... .......... .......... 45% 7.62M 91s\n", + " 45550K .......... .......... .......... .......... .......... 45% 9.55M 91s\n", + " 45600K .......... .......... .......... .......... .......... 45% 625K 91s\n", + " 45650K .......... .......... .......... .......... .......... 45% 8.42M 90s\n", + " 45700K .......... .......... .......... .......... .......... 45% 646K 90s\n", + " 45750K .......... .......... .......... .......... .......... 45% 4.89M 90s\n", + " 45800K .......... .......... .......... .......... .......... 45% 5.57M 90s\n", + " 45850K .......... .......... .......... .......... .......... 45% 704K 90s\n", + " 45900K .......... .......... .......... .......... .......... 45% 3.13M 90s\n", + " 45950K .......... .......... .......... .......... .......... 46% 5.57M 90s\n", + " 46000K .......... .......... .......... .......... .......... 46% 618K 90s\n", + " 46050K .......... .......... .......... .......... .......... 46% 626K 89s\n", + " 46100K .......... .......... .......... .......... .......... 46% 6.23M 89s\n", + " 46150K .......... .......... .......... .......... .......... 46% 651K 89s\n", + " 46200K .......... .......... .......... .......... .......... 46% 4.74M 89s\n", + " 46250K .......... .......... .......... .......... .......... 46% 670K 89s\n", + " 46300K .......... .......... .......... .......... .......... 46% 4.23M 89s\n", + " 46350K .......... .......... .......... .......... .......... 46% 645K 89s\n", + " 46400K .......... .......... .......... .......... .......... 46% 11.8M 88s\n", + " 46450K .......... .......... .......... .......... .......... 46% 641K 88s\n", + " 46500K .......... .......... .......... .......... .......... 46% 6.39M 88s\n", + " 46550K .......... .......... .......... .......... .......... 46% 637K 88s\n", + " 46600K .......... .......... .......... .......... .......... 46% 5.55M 88s\n", + " 46650K .......... .......... .......... .......... .......... 46% 636K 88s\n", + " 46700K .......... .......... .......... .......... .......... 46% 3.46M 88s\n", + " 46750K .......... .......... .......... .......... .......... 46% 609K 88s\n", + " 46800K .......... .......... .......... .......... .......... 46% 6.35M 87s\n", + " 46850K .......... .......... .......... .......... .......... 46% 7.06M 87s\n", + " 46900K .......... .......... .......... .......... .......... 46% 637K 87s\n", + " 46950K .......... .......... .......... .......... .......... 47% 6.46M 87s\n", + " 47000K .......... .......... .......... .......... .......... 47% 647K 87s\n", + " 47050K .......... .......... .......... .......... .......... 47% 3.64M 87s\n", + " 47100K .......... .......... .......... .......... .......... 47% 4.76M 87s\n", + " 47150K .......... .......... .......... .......... .......... 47% 661K 87s\n", + " 47200K .......... .......... .......... .......... .......... 47% 5.66M 86s\n", + " 47250K .......... .......... .......... .......... .......... 47% 661K 86s\n", + " 47300K .......... .......... .......... .......... .......... 47% 3.21M 86s\n", + " 47350K .......... .......... .......... .......... .......... 47% 680K 86s\n", + " 47400K .......... .......... .......... .......... .......... 47% 5.06M 86s\n", + " 47450K .......... .......... .......... .......... .......... 47% 663K 86s\n", + " 47500K .......... .......... .......... .......... .......... 47% 2.11M 86s\n", + " 47550K .......... .......... .......... .......... .......... 47% 3.64M 85s\n", + " 47600K .......... .......... .......... .......... .......... 47% 654K 85s\n", + " 47650K .......... .......... .......... .......... .......... 47% 6.06M 85s\n", + " 47700K .......... .......... .......... .......... .......... 47% 646K 85s\n", + " 47750K .......... .......... .......... .......... .......... 47% 3.11M 85s\n", + " 47800K .......... .......... .......... .......... .......... 47% 729K 85s\n", + " 47850K .......... .......... .......... .......... .......... 47% 2.34M 85s\n", + " 47900K .......... .......... .......... .......... .......... 47% 771K 85s\n", + " 47950K .......... .......... .......... .......... .......... 48% 1.94M 85s\n", + " 48000K .......... .......... .......... .......... .......... 48% 6.62M 84s\n", + " 48050K .......... .......... .......... .......... .......... 48% 718K 84s\n", + " 48100K .......... .......... .......... .......... .......... 48% 3.09M 84s\n", + " 48150K .......... .......... .......... .......... .......... 48% 709K 84s\n", + " 48200K .......... .......... .......... .......... .......... 48% 2.16M 84s\n", + " 48250K .......... .......... .......... .......... .......... 48% 3.42M 84s\n", + " 48300K .......... .......... .......... .......... .......... 48% 667K 84s\n", + " 48350K .......... .......... .......... .......... .......... 48% 658K 84s\n", + " 48400K .......... .......... .......... .......... .......... 48% 5.73M 83s\n", + " 48450K .......... .......... .......... .......... .......... 48% 7.58M 83s\n", + " 48500K .......... .......... .......... .......... .......... 48% 556K 83s\n", + " 48550K .......... .......... .......... .......... .......... 48% 676K 83s\n", + " 48600K .......... .......... .......... .......... .......... 48% 3.96M 83s\n", + " 48650K .......... .......... .......... .......... .......... 48% 4.94M 83s\n", + " 48700K .......... .......... .......... .......... .......... 48% 696K 83s\n", + " 48750K .......... .......... .......... .......... .......... 48% 4.02M 83s\n", + " 48800K .......... .......... .......... .......... .......... 48% 650K 82s\n", + " 48850K .......... .......... .......... .......... .......... 48% 5.37M 82s\n", + " 48900K .......... .......... .......... .......... .......... 48% 695K 82s\n", + " 48950K .......... .......... .......... .......... .......... 49% 4.84M 82s\n", + " 49000K .......... .......... .......... .......... .......... 49% 664K 82s\n", + " 49050K .......... .......... .......... .......... .......... 49% 6.95M 82s\n", + " 49100K .......... .......... .......... .......... .......... 49% 604K 82s\n", + " 49150K .......... .......... .......... .......... .......... 49% 5.53M 82s\n", + " 49200K .......... .......... .......... .......... .......... 49% 663K 81s\n", + " 49250K .......... .......... .......... .......... .......... 49% 4.49M 81s\n", + " 49300K .......... .......... .......... .......... .......... 49% 687K 81s\n", + " 49350K .......... .......... .......... .......... .......... 49% 4.27M 81s\n", + " 49400K .......... .......... .......... .......... .......... 49% 6.12M 81s\n", + " 49450K .......... .......... .......... .......... .......... 49% 623K 81s\n", + " 49500K .......... .......... .......... .......... .......... 49% 4.36M 81s\n", + " 49550K .......... .......... .......... .......... .......... 49% 674K 81s\n", + " 49600K .......... .......... .......... .......... .......... 49% 1.97M 80s\n", + " 49650K .......... .......... .......... .......... .......... 49% 136M 80s\n", + " 49700K .......... .......... .......... .......... .......... 49% 588K 80s\n", + " 49750K .......... .......... .......... .......... .......... 49% 2.83M 80s\n", + " 49800K .......... .......... .......... .......... .......... 49% 633K 80s\n", + " 49850K .......... .......... .......... .......... .......... 49% 6.51M 80s\n", + " 49900K .......... .......... .......... .......... .......... 49% 708K 80s\n", + " 49950K .......... .......... .......... .......... .......... 50% 2.57M 80s\n", + " 50000K .......... .......... .......... .......... .......... 50% 707K 80s\n", + " 50050K .......... .......... .......... .......... .......... 50% 2.88M 79s\n", + " 50100K .......... .......... .......... .......... .......... 50% 3.50M 79s\n", + " 50150K .......... .......... .......... .......... .......... 50% 551K 79s\n", + " 50200K .......... .......... .......... .......... .......... 50% 4.10M 79s\n", + " 50250K .......... .......... .......... .......... .......... 50% 666K 79s\n", + " 50300K .......... .......... .......... .......... .......... 50% 3.71M 79s\n", + " 50350K .......... .......... .......... .......... .......... 50% 6.33M 79s\n", + " 50400K .......... .......... .......... .......... .......... 50% 632K 79s\n", + " 50450K .......... .......... .......... .......... .......... 50% 3.61M 78s\n", + " 50500K .......... .......... .......... .......... .......... 50% 678K 78s\n", + " 50550K .......... .......... .......... .......... .......... 50% 2.20M 78s\n", + " 50600K .......... .......... .......... .......... .......... 50% 4.15M 78s\n", + " 50650K .......... .......... .......... .......... .......... 50% 752K 78s\n", + " 50700K .......... .......... .......... .......... .......... 50% 1.83M 78s\n", + " 50750K .......... .......... .......... .......... .......... 50% 6.28M 78s\n", + " 50800K .......... .......... .......... .......... .......... 50% 590K 78s\n", + " 50850K .......... .......... .......... .......... .......... 50% 683K 78s\n", + " 50900K .......... .......... .......... .......... .......... 50% 3.58M 77s\n", + " 50950K .......... .......... .......... .......... .......... 51% 679K 77s\n", + " 51000K .......... .......... .......... .......... .......... 51% 5.70M 77s\n", + " 51050K .......... .......... .......... .......... .......... 51% 668K 77s\n", + " 51100K .......... .......... .......... .......... .......... 51% 3.00M 77s\n", + " 51150K .......... .......... .......... .......... .......... 51% 700K 77s\n", + " 51200K .......... .......... .......... .......... .......... 51% 2.90M 77s\n", + " 51250K .......... .......... .......... .......... .......... 51% 704K 77s\n", + " 51300K .......... .......... .......... .......... .......... 51% 1.49M 77s\n", + " 51350K .......... .......... .......... .......... .......... 51% 986K 76s\n", + " 51400K .......... .......... .......... .......... .......... 51% 1.99M 76s\n", + " 51450K .......... .......... .......... .......... .......... 51% 2.08M 76s\n", + " 51500K .......... .......... .......... .......... .......... 51% 711K 76s\n", + " 51550K .......... .......... .......... .......... .......... 51% 2.65M 76s\n", + " 51600K .......... .......... .......... .......... .......... 51% 646K 76s\n", + " 51650K .......... .......... .......... .......... .......... 51% 13.6M 76s\n", + " 51700K .......... .......... .......... .......... .......... 51% 2.62M 76s\n", + " 51750K .......... .......... .......... .......... .......... 51% 645K 76s\n", + " 51800K .......... .......... .......... .......... .......... 51% 6.27M 75s\n", + " 51850K .......... .......... .......... .......... .......... 51% 656K 75s\n", + " 51900K .......... .......... .......... .......... .......... 51% 5.27M 75s\n", + " 51950K .......... .......... .......... .......... .......... 52% 530K 75s\n", + " 52000K .......... .......... .......... .......... .......... 52% 573K 75s\n", + " 52050K .......... .......... .......... .......... .......... 52% 783K 75s\n", + " 52100K .......... .......... .......... .......... .......... 52% 5.39M 75s\n", + " 52150K .......... .......... .......... .......... .......... 52% 1.78M 75s\n", + " 52200K .......... .......... .......... .......... .......... 52% 640K 75s\n", + " 52250K .......... .......... .......... .......... .......... 52% 2.58M 74s\n", + " 52300K .......... .......... .......... .......... .......... 52% 563K 74s\n", + " 52350K .......... .......... .......... .......... .......... 52% 1.38M 74s\n", + " 52400K .......... .......... .......... .......... .......... 52% 916K 74s\n", + " 52450K .......... .......... .......... .......... .......... 52% 1.52M 74s\n", + " 52500K .......... .......... .......... .......... .......... 52% 903K 74s\n", + " 52550K .......... .......... .......... .......... .......... 52% 1.09M 74s\n", + " 52600K .......... .......... .......... .......... .......... 52% 1.11M 74s\n", + " 52650K .......... .......... .......... .......... .......... 52% 1.07M 74s\n", + " 52700K .......... .......... .......... .......... .......... 52% 1.08M 74s\n", + " 52750K .......... .......... .......... .......... .......... 52% 1.19M 73s\n", + " 52800K .......... .......... .......... .......... .......... 52% 1.02M 73s\n", + " 52850K .......... .......... .......... .......... .......... 52% 6.63M 73s\n", + " 52900K .......... .......... .......... .......... .......... 52% 597K 73s\n", + " 52950K .......... .......... .......... .......... .......... 53% 7.55M 73s\n", + " 53000K .......... .......... .......... .......... .......... 53% 594K 73s\n", + " 53050K .......... .......... .......... .......... .......... 53% 6.01M 73s\n", + " 53100K .......... .......... .......... .......... .......... 53% 12.7M 73s\n", + " 53150K .......... .......... .......... .......... .......... 53% 554K 73s\n", + " 53200K .......... .......... .......... .......... .......... 53% 5.35M 72s\n", + " 53250K .......... .......... .......... .......... .......... 53% 21.0M 72s\n", + " 53300K .......... .......... .......... .......... .......... 53% 456K 72s\n", + " 53350K .......... .......... .......... .......... .......... 53% 233K 72s\n", + " 53400K .......... .......... .......... .......... .......... 53% 132M 72s\n", + " 53450K .......... .......... .......... .......... .......... 53% 116K 72s\n", + " 53500K .......... .......... .......... .......... .......... 53% 202K 72s\n", + " 53550K .......... .......... .......... .......... .......... 53% 552K 72s\n", + " 53600K .......... .......... .......... .......... .......... 53% 7.30M 72s\n", + " 53650K .......... .......... .......... .......... .......... 53% 567K 72s\n", + " 53700K .......... .......... .......... .......... .......... 53% 589K 72s\n", + " 53750K .......... .......... .......... .......... .......... 53% 6.87M 72s\n", + " 53800K .......... .......... .......... .......... .......... 53% 618K 72s\n", + " 53850K .......... .......... .......... .......... .......... 53% 4.64M 72s\n", + " 53900K .......... .......... .......... .......... .......... 53% 606K 72s\n", + " 53950K .......... .......... .......... .......... .......... 54% 7.93M 71s\n", + " 54000K .......... .......... .......... .......... .......... 54% 596K 71s\n", + " 54050K .......... .......... .......... .......... .......... 54% 788K 71s\n", + " 54100K .......... .......... .......... .......... .......... 54% 1.96M 71s\n", + " 54150K .......... .......... .......... .......... .......... 54% 796K 71s\n", + " 54200K .......... .......... .......... .......... .......... 54% 1.81M 71s\n", + " 54250K .......... .......... .......... .......... .......... 54% 809K 71s\n", + " 54300K .......... .......... .......... .......... .......... 54% 2.08M 71s\n", + " 54350K .......... .......... .......... .......... .......... 54% 809K 71s\n", + " 54400K .......... .......... .......... .......... .......... 54% 778K 71s\n", + " 54450K .......... .......... .......... .......... .......... 54% 1.55M 70s\n", + " 54500K .......... .......... .......... .......... .......... 54% 866K 70s\n", + " 54550K .......... .......... .......... .......... .......... 54% 1.53M 70s\n", + " 54600K .......... .......... .......... .......... .......... 54% 861K 70s\n", + " 54650K .......... .......... .......... .......... .......... 54% 1.76M 70s\n", + " 54700K .......... .......... .......... .......... .......... 54% 857K 70s\n", + " 54750K .......... .......... .......... .......... .......... 54% 635K 70s\n", + " 54800K .......... .......... .......... .......... .......... 54% 2.93M 70s\n", + " 54850K .......... .......... .......... .......... .......... 54% 720K 70s\n", + " 54900K .......... .......... .......... .......... .......... 54% 2.39M 70s\n", + " 54950K .......... .......... .......... .......... .......... 55% 736K 69s\n", + " 55000K .......... .......... .......... .......... .......... 55% 3.04M 69s\n", + " 55050K .......... .......... .......... .......... .......... 55% 706K 69s\n", + " 55100K .......... .......... .......... .......... .......... 55% 3.42M 69s\n", + " 55150K .......... .......... .......... .......... .......... 55% 710K 69s\n", + " 55200K .......... .......... .......... .......... .......... 55% 2.54M 69s\n", + " 55250K .......... .......... .......... .......... .......... 55% 749K 69s\n", + " 55300K .......... .......... .......... .......... .......... 55% 1.71M 69s\n", + " 55350K .......... .......... .......... .......... .......... 55% 850K 69s\n", + " 55400K .......... .......... .......... .......... .......... 55% 1.88M 69s\n", + " 55450K .......... .......... .......... .......... .......... 55% 809K 68s\n", + " 55500K .......... .......... .......... .......... .......... 55% 2.25M 68s\n", + " 55550K .......... .......... .......... .......... .......... 55% 806K 68s\n", + " 55600K .......... .......... .......... .......... .......... 55% 2.15M 68s\n", + " 55650K .......... .......... .......... .......... .......... 55% 822K 68s\n", + " 55700K .......... .......... .......... .......... .......... 55% 2.18M 68s\n", + " 55750K .......... .......... .......... .......... .......... 55% 770K 68s\n", + " 55800K .......... .......... .......... .......... .......... 55% 2.70M 68s\n", + " 55850K .......... .......... .......... .......... .......... 55% 744K 68s\n", + " 55900K .......... .......... .......... .......... .......... 55% 2.76M 67s\n", + " 55950K .......... .......... .......... .......... .......... 56% 734K 67s\n", + " 56000K .......... .......... .......... .......... .......... 56% 533K 67s\n", + " 56050K .......... .......... .......... .......... .......... 56% 4.39M 67s\n", + " 56100K .......... .......... .......... .......... .......... 56% 584K 67s\n", + " 56150K .......... .......... .......... .......... .......... 56% 5.40M 67s\n", + " 56200K .......... .......... .......... .......... .......... 56% 666K 67s\n", + " 56250K .......... .......... .......... .......... .......... 56% 5.09M 67s\n", + " 56300K .......... .......... .......... .......... .......... 56% 691K 67s\n", + " 56350K .......... .......... .......... .......... .......... 56% 2.91M 67s\n", + " 56400K .......... .......... .......... .......... .......... 56% 674K 67s\n", + " 56450K .......... .......... .......... .......... .......... 56% 1.57M 66s\n", + " 56500K .......... .......... .......... .......... .......... 56% 947K 66s\n", + " 56550K .......... .......... .......... .......... .......... 56% 1.54M 66s\n", + " 56600K .......... .......... .......... .......... .......... 56% 916K 66s\n", + " 56650K .......... .......... .......... .......... .......... 56% 874K 66s\n", + " 56700K .......... .......... .......... .......... .......... 56% 1.54M 66s\n", + " 56750K .......... .......... .......... .......... .......... 56% 989K 66s\n", + " 56800K .......... .......... .......... .......... .......... 56% 1.32M 66s\n", + " 56850K .......... .......... .......... .......... .......... 56% 1017K 66s\n", + " 56900K .......... .......... .......... .......... .......... 56% 1.13M 66s\n", + " 56950K .......... .......... .......... .......... .......... 57% 1.17M 65s\n", + " 57000K .......... .......... .......... .......... .......... 57% 1.08M 65s\n", + " 57050K .......... .......... .......... .......... .......... 57% 1.34M 65s\n", + " 57100K .......... .......... .......... .......... .......... 57% 1.03M 65s\n", + " 57150K .......... .......... .......... .......... .......... 57% 1.33M 65s\n", + " 57200K .......... .......... .......... .......... .......... 57% 990K 65s\n", + " 57250K .......... .......... .......... .......... .......... 57% 1.46M 65s\n", + " 57300K .......... .......... .......... .......... .......... 57% 901K 65s\n", + " 57350K .......... .......... .......... .......... .......... 57% 1.77M 65s\n", + " 57400K .......... .......... .......... .......... .......... 57% 877K 64s\n", + " 57450K .......... .......... .......... .......... .......... 57% 760K 64s\n", + " 57500K .......... .......... .......... .......... .......... 57% 1.20M 64s\n", + " 57550K .......... .......... .......... .......... .......... 57% 1.10M 64s\n", + " 57600K .......... .......... .......... .......... .......... 57% 1.20M 64s\n", + " 57650K .......... .......... .......... .......... .......... 57% 4.08M 64s\n", + " 57700K .......... .......... .......... .......... .......... 57% 696K 64s\n", + " 57750K .......... .......... .......... .......... .......... 57% 2.30M 64s\n", + " 57800K .......... .......... .......... .......... .......... 57% 778K 64s\n", + " 57850K .......... .......... .......... .......... .......... 57% 1.96M 64s\n", + " 57900K .......... .......... .......... .......... .......... 57% 771K 64s\n", + " 57950K .......... .......... .......... .......... .......... 58% 719K 63s\n", + " 58000K .......... .......... .......... .......... .......... 58% 2.96M 63s\n", + " 58050K .......... .......... .......... .......... .......... 58% 704K 63s\n", + " 58100K .......... .......... .......... .......... .......... 58% 3.34M 63s\n", + " 58150K .......... .......... .......... .......... .......... 58% 676K 63s\n", + " 58200K .......... .......... .......... .......... .......... 58% 3.61M 63s\n", + " 58250K .......... .......... .......... .......... .......... 58% 629K 63s\n", + " 58300K .......... .......... .......... .......... .......... 58% 7.66M 63s\n", + " 58350K .......... .......... .......... .......... .......... 58% 711K 63s\n", + " 58400K .......... .......... .......... .......... .......... 58% 2.26M 63s\n", + " 58450K .......... .......... .......... .......... .......... 58% 4.47M 62s\n", + " 58500K .......... .......... .......... .......... .......... 58% 637K 62s\n", + " 58550K .......... .......... .......... .......... .......... 58% 4.59M 62s\n", + " 58600K .......... .......... .......... .......... .......... 58% 669K 62s\n", + " 58650K .......... .......... .......... .......... .......... 58% 2.26M 62s\n", + " 58700K .......... .......... .......... .......... .......... 58% 782K 62s\n", + " 58750K .......... .......... .......... .......... .......... 58% 1.84M 62s\n", + " 58800K .......... .......... .......... .......... .......... 58% 776K 62s\n", + " 58850K .......... .......... .......... .......... .......... 58% 1.71M 62s\n", + " 58900K .......... .......... .......... .......... .......... 58% 856K 62s\n", + " 58950K .......... .......... .......... .......... .......... 59% 2.09M 61s\n", + " 59000K .......... .......... .......... .......... .......... 59% 842K 61s\n", + " 59050K .......... .......... .......... .......... .......... 59% 994K 61s\n", + " 59100K .......... .......... .......... .......... .......... 59% 1.45M 61s\n", + " 59150K .......... .......... .......... .......... .......... 59% 816K 61s\n", + " 59200K .......... .......... .......... .......... .......... 59% 1.75M 61s\n", + " 59250K .......... .......... .......... .......... .......... 59% 844K 61s\n", + " 59300K .......... .......... .......... .......... .......... 59% 693K 61s\n", + " 59350K .......... .......... .......... .......... .......... 59% 2.26M 61s\n", + " 59400K .......... .......... .......... .......... .......... 59% 756K 61s\n", + " 59450K .......... .......... .......... .......... .......... 59% 2.21M 61s\n", + " 59500K .......... .......... .......... .......... .......... 59% 3.00M 60s\n", + " 59550K .......... .......... .......... .......... .......... 59% 731K 60s\n", + " 59600K .......... .......... .......... .......... .......... 59% 2.73M 60s\n", + " 59650K .......... .......... .......... .......... .......... 59% 689K 60s\n", + " 59700K .......... .......... .......... .......... .......... 59% 2.91M 60s\n", + " 59750K .......... .......... .......... .......... .......... 59% 700K 60s\n", + " 59800K .......... .......... .......... .......... .......... 59% 3.26M 60s\n", + " 59850K .......... .......... .......... .......... .......... 59% 683K 60s\n", + " 59900K .......... .......... .......... .......... .......... 59% 3.35M 60s\n", + " 59950K .......... .......... .......... .......... .......... 60% 888K 60s\n", + " 60000K .......... .......... .......... .......... .......... 60% 1.12M 59s\n", + " 60050K .......... .......... .......... .......... .......... 60% 1.09M 59s\n", + " 60100K .......... .......... .......... .......... .......... 60% 1.73M 59s\n", + " 60150K .......... .......... .......... .......... .......... 60% 881K 59s\n", + " 60200K .......... .......... .......... .......... .......... 60% 1.37M 59s\n", + " 60250K .......... .......... .......... .......... .......... 60% 1.94M 59s\n", + " 60300K .......... .......... .......... .......... .......... 60% 707K 59s\n", + " 60350K .......... .......... .......... .......... .......... 60% 3.14M 59s\n", + " 60400K .......... .......... .......... .......... .......... 60% 612K 59s\n", + " 60450K .......... .......... .......... .......... .......... 60% 676K 59s\n", + " 60500K .......... .......... .......... .......... .......... 60% 2.67M 59s\n", + " 60550K .......... .......... .......... .......... .......... 60% 723K 58s\n", + " 60600K .......... .......... .......... .......... .......... 60% 2.18M 58s\n", + " 60650K .......... .......... .......... .......... .......... 60% 827K 58s\n", + " 60700K .......... .......... .......... .......... .......... 60% 1.99M 58s\n", + " 60750K .......... .......... .......... .......... .......... 60% 824K 58s\n", + " 60800K .......... .......... .......... .......... .......... 60% 1.57M 58s\n", + " 60850K .......... .......... .......... .......... .......... 60% 7.51M 58s\n", + " 60900K .......... .......... .......... .......... .......... 60% 552K 58s\n", + " 60950K .......... .......... .......... .......... .......... 61% 74.4M 58s\n", + " 61000K .......... .......... .......... .......... .......... 61% 566K 58s\n", + " 61050K .......... .......... .......... .......... .......... 61% 19.7M 57s\n", + " 61100K .......... .......... .......... .......... .......... 61% 709K 57s\n", + " 61150K .......... .......... .......... .......... .......... 61% 2.89M 57s\n", + " 61200K .......... .......... .......... .......... .......... 61% 716K 57s\n", + " 61250K .......... .......... .......... .......... .......... 61% 2.35M 57s\n", + " 61300K .......... .......... .......... .......... .......... 61% 2.02M 57s\n", + " 61350K .......... .......... .......... .......... .......... 61% 767K 57s\n", + " 61400K .......... .......... .......... .......... .......... 61% 2.77M 57s\n", + " 61450K .......... .......... .......... .......... .......... 61% 788K 57s\n", + " 61500K .......... .......... .......... .......... .......... 61% 2.83M 57s\n", + " 61550K .......... .......... .......... .......... .......... 61% 821K 57s\n", + " 61600K .......... .......... .......... .......... .......... 61% 2.23M 56s\n", + " 61650K .......... .......... .......... .......... .......... 61% 794K 56s\n", + " 61700K .......... .......... .......... .......... .......... 61% 2.06M 56s\n", + " 61750K .......... .......... .......... .......... .......... 61% 1.12M 56s\n", + " 61800K .......... .......... .......... .......... .......... 61% 1.06M 56s\n", + " 61850K .......... .......... .......... .......... .......... 61% 1.29M 56s\n", + " 61900K .......... .......... .......... .......... .......... 61% 1.09M 56s\n", + " 61950K .......... .......... .......... .......... .......... 62% 1.29M 56s\n", + " 62000K .......... .......... .......... .......... .......... 62% 930K 56s\n", + " 62050K .......... .......... .......... .......... .......... 62% 1.34M 56s\n", + " 62100K .......... .......... .......... .......... .......... 62% 1.01M 56s\n", + " 62150K .......... .......... .......... .......... .......... 62% 1.11M 55s\n", + " 62200K .......... .......... .......... .......... .......... 62% 1.13M 55s\n", + " 62250K .......... .......... .......... .......... .......... 62% 1.05M 55s\n", + " 62300K .......... .......... .......... .......... .......... 62% 1.11M 55s\n", + " 62350K .......... .......... .......... .......... .......... 62% 1.19M 55s\n", + " 62400K .......... .......... .......... .......... .......... 62% 1.72M 55s\n", + " 62450K .......... .......... .......... .......... .......... 62% 2.22M 55s\n", + " 62500K .......... .......... .......... .......... .......... 62% 795K 55s\n", + " 62550K .......... .......... .......... .......... .......... 62% 2.12M 55s\n", + " 62600K .......... .......... .......... .......... .......... 62% 816K 55s\n", + " 62650K .......... .......... .......... .......... .......... 62% 1.72M 54s\n", + " 62700K .......... .......... .......... .......... .......... 62% 925K 54s\n", + " 62750K .......... .......... .......... .......... .......... 62% 1.39M 54s\n", + " 62800K .......... .......... .......... .......... .......... 62% 990K 54s\n", + " 62850K .......... .......... .......... .......... .......... 62% 1.15M 54s\n", + " 62900K .......... .......... .......... .......... .......... 62% 990K 54s\n", + " 62950K .......... .......... .......... .......... .......... 63% 1.37M 54s\n", + " 63000K .......... .......... .......... .......... .......... 63% 874K 54s\n", + " 63050K .......... .......... .......... .......... .......... 63% 20.6M 54s\n", + " 63100K .......... .......... .......... .......... .......... 63% 1.76M 54s\n", + " 63150K .......... .......... .......... .......... .......... 63% 755K 54s\n", + " 63200K .......... .......... .......... .......... .......... 63% 2.63M 53s\n", + " 63250K .......... .......... .......... .......... .......... 63% 744K 53s\n", + " 63300K .......... .......... .......... .......... .......... 63% 2.69M 53s\n", + " 63350K .......... .......... .......... .......... .......... 63% 766K 53s\n", + " 63400K .......... .......... .......... .......... .......... 63% 3.80M 53s\n", + " 63450K .......... .......... .......... .......... .......... 63% 658K 53s\n", + " 63500K .......... .......... .......... .......... .......... 63% 3.81M 53s\n", + " 63550K .......... .......... .......... .......... .......... 63% 673K 53s\n", + " 63600K .......... .......... .......... .......... .......... 63% 1.78M 53s\n", + " 63650K .......... .......... .......... .......... .......... 63% 739K 53s\n", + " 63700K .......... .......... .......... .......... .......... 63% 3.29M 53s\n", + " 63750K .......... .......... .......... .......... .......... 63% 693K 53s\n", + " 63800K .......... .......... .......... .......... .......... 63% 6.86M 52s\n", + " 63850K .......... .......... .......... .......... .......... 63% 688K 52s\n", + " 63900K .......... .......... .......... .......... .......... 63% 2.06M 52s\n", + " 63950K .......... .......... .......... .......... .......... 64% 799K 52s\n", + " 64000K .......... .......... .......... .......... .......... 64% 5.43M 52s\n", + " 64050K .......... .......... .......... .......... .......... 64% 2.04M 52s\n", + " 64100K .......... .......... .......... .......... .......... 64% 794K 52s\n", + " 64150K .......... .......... .......... .......... .......... 64% 2.63M 52s\n", + " 64200K .......... .......... .......... .......... .......... 64% 746K 52s\n", + " 64250K .......... .......... .......... .......... .......... 64% 3.90M 52s\n", + " 64300K .......... .......... .......... .......... .......... 64% 2.48M 51s\n", + " 64350K .......... .......... .......... .......... .......... 64% 720K 51s\n", + " 64400K .......... .......... .......... .......... .......... 64% 2.88M 51s\n", + " 64450K .......... .......... .......... .......... .......... 64% 737K 51s\n", + " 64500K .......... .......... .......... .......... .......... 64% 5.03M 51s\n", + " 64550K .......... .......... .......... .......... .......... 64% 3.41M 51s\n", + " 64600K .......... .......... .......... .......... .......... 64% 687K 51s\n", + " 64650K .......... .......... .......... .......... .......... 64% 3.65M 51s\n", + " 64700K .......... .......... .......... .......... .......... 64% 710K 51s\n", + " 64750K .......... .......... .......... .......... .......... 64% 3.14M 51s\n", + " 64800K .......... .......... .......... .......... .......... 64% 622K 51s\n", + " 64850K .......... .......... .......... .......... .......... 64% 2.24M 51s\n", + " 64900K .......... .......... .......... .......... .......... 64% 21.7M 50s\n", + " 64950K .......... .......... .......... .......... .......... 65% 698K 50s\n", + " 65000K .......... .......... .......... .......... .......... 65% 2.60M 50s\n", + " 65050K .......... .......... .......... .......... .......... 65% 729K 50s\n", + " 65100K .......... .......... .......... .......... .......... 65% 2.07M 50s\n", + " 65150K .......... .......... .......... .......... .......... 65% 11.7M 50s\n", + " 65200K .......... .......... .......... .......... .......... 65% 771K 50s\n", + " 65250K .......... .......... .......... .......... .......... 65% 2.10M 50s\n", + " 65300K .......... .......... .......... .......... .......... 65% 757K 50s\n", + " 65350K .......... .......... .......... .......... .......... 65% 1.23M 50s\n", + " 65400K .......... .......... .......... .......... .......... 65% 7.80M 50s\n", + " 65450K .......... .......... .......... .......... .......... 65% 622K 49s\n", + " 65500K .......... .......... .......... .......... .......... 65% 6.12M 49s\n", + " 65550K .......... .......... .......... .......... .......... 65% 570K 49s\n", + " 65600K .......... .......... .......... .......... .......... 65% 3.45M 49s\n", + " 65650K .......... .......... .......... .......... .......... 65% 680K 49s\n", + " 65700K .......... .......... .......... .......... .......... 65% 3.11M 49s\n", + " 65750K .......... .......... .......... .......... .......... 65% 673K 49s\n", + " 65800K .......... .......... .......... .......... .......... 65% 3.45M 49s\n", + " 65850K .......... .......... .......... .......... .......... 65% 5.07M 49s\n", + " 65900K .......... .......... .......... .......... .......... 65% 633K 49s\n", + " 65950K .......... .......... .......... .......... .......... 66% 646K 49s\n", + " 66000K .......... .......... .......... .......... .......... 66% 2.08M 48s\n", + " 66050K .......... .......... .......... .......... .......... 66% 4.76M 48s\n", + " 66100K .......... .......... .......... .......... .......... 66% 591K 48s\n", + " 66150K .......... .......... .......... .......... .......... 66% 8.86M 48s\n", + " 66200K .......... .......... .......... .......... .......... 66% 638K 48s\n", + " 66250K .......... .......... .......... .......... .......... 66% 3.69M 48s\n", + " 66300K .......... .......... .......... .......... .......... 66% 688K 48s\n", + " 66350K .......... .......... .......... .......... .......... 66% 3.03M 48s\n", + " 66400K .......... .......... .......... .......... .......... 66% 664K 48s\n", + " 66450K .......... .......... .......... .......... .......... 66% 4.67M 48s\n", + " 66500K .......... .......... .......... .......... .......... 66% 8.62M 48s\n", + " 66550K .......... .......... .......... .......... .......... 66% 633K 48s\n", + " 66600K .......... .......... .......... .......... .......... 66% 1.91M 47s\n", + " 66650K .......... .......... .......... .......... .......... 66% 836K 47s\n", + " 66700K .......... .......... .......... .......... .......... 66% 1.49M 47s\n", + " 66750K .......... .......... .......... .......... .......... 66% 913K 47s\n", + " 66800K .......... .......... .......... .......... .......... 66% 1.19M 47s\n", + " 66850K .......... .......... .......... .......... .......... 66% 1.03M 47s\n", + " 66900K .......... .......... .......... .......... .......... 66% 1.19M 47s\n", + " 66950K .......... .......... .......... .......... .......... 67% 635K 47s\n", + " 67000K .......... .......... .......... .......... .......... 67% 4.95M 47s\n", + " 67050K .......... .......... .......... .......... .......... 67% 4.32M 47s\n", + " 67100K .......... .......... .......... .......... .......... 67% 626K 47s\n", + " 67150K .......... .......... .......... .......... .......... 67% 7.41M 47s\n", + " 67200K .......... .......... .......... .......... .......... 67% 10.8M 46s\n", + " 67250K .......... .......... .......... .......... .......... 67% 538K 46s\n", + " 67300K .......... .......... .......... .......... .......... 67% 603K 46s\n", + " 67350K .......... .......... .......... .......... .......... 67% 2.45M 46s\n", + " 67400K .......... .......... .......... .......... .......... 67% 437K 46s\n", + " 67450K .......... .......... .......... .......... .......... 67% 13.5M 46s\n", + " 67500K .......... .......... .......... .......... .......... 67% 1.72M 46s\n", + " 67550K .......... .......... .......... .......... .......... 67% 852K 46s\n", + " 67600K .......... .......... .......... .......... .......... 67% 1.32M 46s\n", + " 67650K .......... .......... .......... .......... .......... 67% 5.05M 46s\n", + " 67700K .......... .......... .......... .......... .......... 67% 1.02M 46s\n", + " 67750K .......... .......... .......... .......... .......... 67% 1.36M 46s\n", + " 67800K .......... .......... .......... .......... .......... 67% 1000K 45s\n", + " 67850K .......... .......... .......... .......... .......... 67% 1.32M 45s\n", + " 67900K .......... .......... .......... .......... .......... 67% 13.3M 45s\n", + " 67950K .......... .......... .......... .......... .......... 68% 921K 45s\n", + " 68000K .......... .......... .......... .......... .......... 68% 1.38M 45s\n", + " 68050K .......... .......... .......... .......... .......... 68% 964K 45s\n", + " 68100K .......... .......... .......... .......... .......... 68% 1.64M 45s\n", + " 68150K .......... .......... .......... .......... .......... 68% 5.41M 45s\n", + " 68200K .......... .......... .......... .......... .......... 68% 800K 45s\n", + " 68250K .......... .......... .......... .......... .......... 68% 1.49M 45s\n", + " 68300K .......... .......... .......... .......... .......... 68% 956K 45s\n", + " 68350K .......... .......... .......... .......... .......... 68% 5.68M 44s\n", + " 68400K .......... .......... .......... .......... .......... 68% 1.39M 44s\n", + " 68450K .......... .......... .......... .......... .......... 68% 611K 44s\n", + " 68500K .......... .......... .......... .......... .......... 68% 5.37M 44s\n", + " 68550K .......... .......... .......... .......... .......... 68% 662K 44s\n", + " 68600K .......... .......... .......... .......... .......... 68% 2.17M 44s\n", + " 68650K .......... .......... .......... .......... .......... 68% 781K 44s\n", + " 68700K .......... .......... .......... .......... .......... 68% 2.47M 44s\n", + " 68750K .......... .......... .......... .......... .......... 68% 590K 44s\n", + " 68800K .......... .......... .......... .......... .......... 68% 7.00M 44s\n", + " 68850K .......... .......... .......... .......... .......... 68% 6.17M 44s\n", + " 68900K .......... .......... .......... .......... .......... 68% 648K 44s\n", + " 68950K .......... .......... .......... .......... .......... 69% 6.52M 43s\n", + " 69000K .......... .......... .......... .......... .......... 69% 655K 43s\n", + " 69050K .......... .......... .......... .......... .......... 69% 4.16M 43s\n", + " 69100K .......... .......... .......... .......... .......... 69% 9.41M 43s\n", + " 69150K .......... .......... .......... .......... .......... 69% 630K 43s\n", + " 69200K .......... .......... .......... .......... .......... 69% 7.89M 43s\n", + " 69250K .......... .......... .......... .......... .......... 69% 599K 43s\n", + " 69300K .......... .......... .......... .......... .......... 69% 8.74M 43s\n", + " 69350K .......... .......... .......... .......... .......... 69% 606K 43s\n", + " 69400K .......... .......... .......... .......... .......... 69% 8.97M 43s\n", + " 69450K .......... .......... .......... .......... .......... 69% 570K 43s\n", + " 69500K .......... .......... .......... .......... .......... 69% 5.26M 43s\n", + " 69550K .......... .......... .......... .......... .......... 69% 4.86M 42s\n", + " 69600K .......... .......... .......... .......... .......... 69% 553K 42s\n", + " 69650K .......... .......... .......... .......... .......... 69% 12.0M 42s\n", + " 69700K .......... .......... .......... .......... .......... 69% 514K 42s\n", + " 69750K .......... .......... .......... .......... .......... 69% 1.63M 42s\n", + " 69800K .......... .......... .......... .......... .......... 69% 838K 42s\n", + " 69850K .......... .......... .......... .......... .......... 69% 1.79M 42s\n", + " 69900K .......... .......... .......... .......... .......... 69% 744K 42s\n", + " 69950K .......... .......... .......... .......... .......... 70% 2.78M 42s\n", + " 70000K .......... .......... .......... .......... .......... 70% 3.63M 42s\n", + " 70050K .......... .......... .......... .......... .......... 70% 693K 42s\n", + " 70100K .......... .......... .......... .......... .......... 70% 2.73M 42s\n", + " 70150K .......... .......... .......... .......... .......... 70% 718K 41s\n", + " 70200K .......... .......... .......... .......... .......... 70% 5.25M 41s\n", + " 70250K .......... .......... .......... .......... .......... 70% 3.59M 41s\n", + " 70300K .......... .......... .......... .......... .......... 70% 646K 41s\n", + " 70350K .......... .......... .......... .......... .......... 70% 3.58M 41s\n", + " 70400K .......... .......... .......... .......... .......... 70% 637K 41s\n", + " 70450K .......... .......... .......... .......... .......... 70% 5.68M 41s\n", + " 70500K .......... .......... .......... .......... .......... 70% 638K 41s\n", + " 70550K .......... .......... .......... .......... .......... 70% 8.08M 41s\n", + " 70600K .......... .......... .......... .......... .......... 70% 659K 41s\n", + " 70650K .......... .......... .......... .......... .......... 70% 4.86M 41s\n", + " 70700K .......... .......... .......... .......... .......... 70% 632K 41s\n", + " 70750K .......... .......... .......... .......... .......... 70% 694K 41s\n", + " 70800K .......... .......... .......... .......... .......... 70% 3.31M 40s\n", + " 70850K .......... .......... .......... .......... .......... 70% 4.19M 40s\n", + " 70900K .......... .......... .......... .......... .......... 70% 706K 40s\n", + " 70950K .......... .......... .......... .......... .......... 71% 3.55M 40s\n", + " 71000K .......... .......... .......... .......... .......... 71% 712K 40s\n", + " 71050K .......... .......... .......... .......... .......... 71% 3.18M 40s\n", + " 71100K .......... .......... .......... .......... .......... 71% 684K 40s\n", + " 71150K .......... .......... .......... .......... .......... 71% 4.63M 40s\n", + " 71200K .......... .......... .......... .......... .......... 71% 624K 40s\n", + " 71250K .......... .......... .......... .......... .......... 71% 13.8M 40s\n", + " 71300K .......... .......... .......... .......... .......... 71% 618K 40s\n", + " 71350K .......... .......... .......... .......... .......... 71% 6.15M 40s\n", + " 71400K .......... .......... .......... .......... .......... 71% 6.06M 39s\n", + " 71450K .......... .......... .......... .......... .......... 71% 620K 39s\n", + " 71500K .......... .......... .......... .......... .......... 71% 4.63M 39s\n", + " 71550K .......... .......... .......... .......... .......... 71% 6.72M 39s\n", + " 71600K .......... .......... .......... .......... .......... 71% 564K 39s\n", + " 71650K .......... .......... .......... .......... .......... 71% 624K 39s\n", + " 71700K .......... .......... .......... .......... .......... 71% 6.10M 39s\n", + " 71750K .......... .......... .......... .......... .......... 71% 660K 39s\n", + " 71800K .......... .......... .......... .......... .......... 71% 4.26M 39s\n", + " 71850K .......... .......... .......... .......... .......... 71% 660K 39s\n", + " 71900K .......... .......... .......... .......... .......... 71% 5.34M 39s\n", + " 71950K .......... .......... .......... .......... .......... 72% 291K 39s\n", + " 72000K .......... .......... .......... .......... .......... 72% 73.4M 39s\n", + " 72050K .......... .......... .......... .......... .......... 72% 600K 38s\n", + " 72100K .......... .......... .......... .......... .......... 72% 4.88M 38s\n", + " 72150K .......... .......... .......... .......... .......... 72% 510K 38s\n", + " 72200K .......... .......... .......... .......... .......... 72% 2.34M 38s\n", + " 72250K .......... .......... .......... .......... .......... 72% 51.6M 38s\n", + " 72300K .......... .......... .......... .......... .......... 72% 595K 38s\n", + " 72350K .......... .......... .......... .......... .......... 72% 4.21M 38s\n", + " 72400K .......... .......... .......... .......... .......... 72% 666K 38s\n", + " 72450K .......... .......... .......... .......... .......... 72% 4.20M 38s\n", + " 72500K .......... .......... .......... .......... .......... 72% 9.66M 38s\n", + " 72550K .......... .......... .......... .......... .......... 72% 573K 38s\n", + " 72600K .......... .......... .......... .......... .......... 72% 3.38M 38s\n", + " 72650K .......... .......... .......... .......... .......... 72% 602K 38s\n", + " 72700K .......... .......... .......... .......... .......... 72% 3.45M 37s\n", + " 72750K .......... .......... .......... .......... .......... 72% 627K 37s\n", + " 72800K .......... .......... .......... .......... .......... 72% 1.12M 37s\n", + " 72850K .......... .......... .......... .......... .......... 72% 853K 37s\n", + " 72900K .......... .......... .......... .......... .......... 72% 1.44M 37s\n", + " 72950K .......... .......... .......... .......... .......... 73% 9.18M 37s\n", + " 73000K .......... .......... .......... .......... .......... 73% 615K 37s\n", + " 73050K .......... .......... .......... .......... .......... 73% 5.72M 37s\n", + " 73100K .......... .......... .......... .......... .......... 73% 539K 37s\n", + " 73150K .......... .......... .......... .......... .......... 73% 16.4M 37s\n", + " 73200K .......... .......... .......... .......... .......... 73% 3.28M 37s\n", + " 73250K .......... .......... .......... .......... .......... 73% 643K 37s\n", + " 73300K .......... .......... .......... .......... .......... 73% 4.85M 37s\n", + " 73350K .......... .......... .......... .......... .......... 73% 689K 36s\n", + " 73400K .......... .......... .......... .......... .......... 73% 3.81M 36s\n", + " 73450K .......... .......... .......... .......... .......... 73% 599K 36s\n", + " 73500K .......... .......... .......... .......... .......... 73% 5.72M 36s\n", + " 73550K .......... .......... .......... .......... .......... 73% 670K 36s\n", + " 73600K .......... .......... .......... .......... .......... 73% 4.41M 36s\n", + " 73650K .......... .......... .......... .......... .......... 73% 768K 36s\n", + " 73700K .......... .......... .......... .......... .......... 73% 2.16M 36s\n", + " 73750K .......... .......... .......... .......... .......... 73% 826K 36s\n", + " 73800K .......... .......... .......... .......... .......... 73% 1.97M 36s\n", + " 73850K .......... .......... .......... .......... .......... 73% 858K 36s\n", + " 73900K .......... .......... .......... .......... .......... 73% 1.57M 36s\n", + " 73950K .......... .......... .......... .......... .......... 74% 852K 36s\n", + " 74000K .......... .......... .......... .......... .......... 74% 1.73M 35s\n", + " 74050K .......... .......... .......... .......... .......... 74% 846K 35s\n", + " 74100K .......... .......... .......... .......... .......... 74% 3.29M 35s\n", + " 74150K .......... .......... .......... .......... .......... 74% 633K 35s\n", + " 74200K .......... .......... .......... .......... .......... 74% 3.81M 35s\n", + " 74250K .......... .......... .......... .......... .......... 74% 666K 35s\n", + " 74300K .......... .......... .......... .......... .......... 74% 4.78M 35s\n", + " 74350K .......... .......... .......... .......... .......... 74% 652K 35s\n", + " 74400K .......... .......... .......... .......... .......... 74% 734K 35s\n", + " 74450K .......... .......... .......... .......... .......... 74% 3.10M 35s\n", + " 74500K .......... .......... .......... .......... .......... 74% 737K 35s\n", + " 74550K .......... .......... .......... .......... .......... 74% 2.92M 35s\n", + " 74600K .......... .......... .......... .......... .......... 74% 2.44M 34s\n", + " 74650K .......... .......... .......... .......... .......... 74% 740K 34s\n", + " 74700K .......... .......... .......... .......... .......... 74% 2.74M 34s\n", + " 74750K .......... .......... .......... .......... .......... 74% 5.26M 34s\n", + " 74800K .......... .......... .......... .......... .......... 74% 700K 34s\n", + " 74850K .......... .......... .......... .......... .......... 74% 2.37M 34s\n", + " 74900K .......... .......... .......... .......... .......... 74% 668K 34s\n", + " 74950K .......... .......... .......... .......... .......... 75% 4.22M 34s\n", + " 75000K .......... .......... .......... .......... .......... 75% 15.1M 34s\n", + " 75050K .......... .......... .......... .......... .......... 75% 620K 34s\n", + " 75100K .......... .......... .......... .......... .......... 75% 5.79M 34s\n", + " 75150K .......... .......... .......... .......... .......... 75% 609K 34s\n", + " 75200K .......... .......... .......... .......... .......... 75% 3.54M 34s\n", + " 75250K .......... .......... .......... .......... .......... 75% 4.07M 33s\n", + " 75300K .......... .......... .......... .......... .......... 75% 574K 33s\n", + " 75350K .......... .......... .......... .......... .......... 75% 113M 33s\n", + " 75400K .......... .......... .......... .......... .......... 75% 484K 33s\n", + " 75450K .......... .......... .......... .......... .......... 75% 5.32M 33s\n", + " 75500K .......... .......... .......... .......... .......... 75% 649K 33s\n", + " 75550K .......... .......... .......... .......... .......... 75% 672K 33s\n", + " 75600K .......... .......... .......... .......... .......... 75% 4.36M 33s\n", + " 75650K .......... .......... .......... .......... .......... 75% 8.81M 33s\n", + " 75700K .......... .......... .......... .......... .......... 75% 646K 33s\n", + " 75750K .......... .......... .......... .......... .......... 75% 2.20M 33s\n", + " 75800K .......... .......... .......... .......... .......... 75% 690K 33s\n", + " 75850K .......... .......... .......... .......... .......... 75% 2.80M 33s\n", + " 75900K .......... .......... .......... .......... .......... 75% 16.1M 32s\n", + " 75950K .......... .......... .......... .......... .......... 76% 630K 32s\n", + " 76000K .......... .......... .......... .......... .......... 76% 4.61M 32s\n", + " 76050K .......... .......... .......... .......... .......... 76% 689K 32s\n", + " 76100K .......... .......... .......... .......... .......... 76% 2.76M 32s\n", + " 76150K .......... .......... .......... .......... .......... 76% 4.04M 32s\n", + " 76200K .......... .......... .......... .......... .......... 76% 766K 32s\n", + " 76250K .......... .......... .......... .......... .......... 76% 2.04M 32s\n", + " 76300K .......... .......... .......... .......... .......... 76% 778K 32s\n", + " 76350K .......... .......... .......... .......... .......... 76% 3.30M 32s\n", + " 76400K .......... .......... .......... .......... .......... 76% 4.69M 32s\n", + " 76450K .......... .......... .......... .......... .......... 76% 519K 32s\n", + " 76500K .......... .......... .......... .......... .......... 76% 74.2M 32s\n", + " 76550K .......... .......... .......... .......... .......... 76% 610K 32s\n", + " 76600K .......... .......... .......... .......... .......... 76% 4.09M 31s\n", + " 76650K .......... .......... .......... .......... .......... 76% 476K 31s\n", + " 76700K .......... .......... .......... .......... .......... 76% 75.8M 31s\n", + " 76750K .......... .......... .......... .......... .......... 76% 557K 31s\n", + " 76800K .......... .......... .......... .......... .......... 76% 2.95M 31s\n", + " 76850K .......... .......... .......... .......... .......... 76% 760K 31s\n", + " 76900K .......... .......... .......... .......... .......... 76% 1.84M 31s\n", + " 76950K .......... .......... .......... .......... .......... 77% 4.34M 31s\n", + " 77000K .......... .......... .......... .......... .......... 77% 670K 31s\n", + " 77050K .......... .......... .......... .......... .......... 77% 3.75M 31s\n", + " 77100K .......... .......... .......... .......... .......... 77% 988K 31s\n", + " 77150K .......... .......... .......... .......... .......... 77% 1.44M 31s\n", + " 77200K .......... .......... .......... .......... .......... 77% 943K 31s\n", + " 77250K .......... .......... .......... .......... .......... 77% 6.36M 30s\n", + " 77300K .......... .......... .......... .......... .......... 77% 1.26M 30s\n", + " 77350K .......... .......... .......... .......... .......... 77% 297K 30s\n", + " 77400K .......... .......... .......... .......... .......... 77% 288K 30s\n", + " 77450K .......... .......... .......... .......... .......... 77% 565K 30s\n", + " 77500K .......... .......... .......... .......... .......... 77% 584K 30s\n", + " 77550K .......... .......... .......... .......... .......... 77% 685K 30s\n", + " 77600K .......... .......... .......... .......... .......... 77% 3.25M 30s\n", + " 77650K .......... .......... .......... .......... .......... 77% 633K 30s\n", + " 77700K .......... .......... .......... .......... .......... 77% 6.84M 30s\n", + " 77750K .......... .......... .......... .......... .......... 77% 613K 30s\n", + " 77800K .......... .......... .......... .......... .......... 77% 740K 30s\n", + " 77850K .......... .......... .......... .......... .......... 77% 2.78M 30s\n", + " 77900K .......... .......... .......... .......... .......... 77% 610K 30s\n", + " 77950K .......... .......... .......... .......... .......... 78% 7.48M 30s\n", + " 78000K .......... .......... .......... .......... .......... 78% 604K 29s\n", + " 78050K .......... .......... .......... .......... .......... 78% 4.59M 29s\n", + " 78100K .......... .......... .......... .......... .......... 78% 632K 29s\n", + " 78150K .......... .......... .......... .......... .......... 78% 715K 29s\n", + " 78200K .......... .......... .......... .......... .......... 78% 2.28M 29s\n", + " 78250K .......... .......... .......... .......... .......... 78% 658K 29s\n", + " 78300K .......... .......... .......... .......... .......... 78% 4.93M 29s\n", + " 78350K .......... .......... .......... .......... .......... 78% 583K 29s\n", + " 78400K .......... .......... .......... .......... .......... 78% 5.36M 29s\n", + " 78450K .......... .......... .......... .......... .......... 78% 521K 29s\n", + " 78500K .......... .......... .......... .......... .......... 78% 1.04M 29s\n", + " 78550K .......... .......... .......... .......... .......... 78% 1.27M 29s\n", + " 78600K .......... .......... .......... .......... .......... 78% 830K 29s\n", + " 78650K .......... .......... .......... .......... .......... 78% 1.74M 29s\n", + " 78700K .......... .......... .......... .......... .......... 78% 686K 28s\n", + " 78750K .......... .......... .......... .......... .......... 78% 1.25M 28s\n", + " 78800K .......... .......... .......... .......... .......... 78% 900K 28s\n", + " 78850K .......... .......... .......... .......... .......... 78% 1.50M 28s\n", + " 78900K .......... .......... .......... .......... .......... 78% 947K 28s\n", + " 78950K .......... .......... .......... .......... .......... 79% 1.18M 28s\n", + " 79000K .......... .......... .......... .......... .......... 79% 1.03M 28s\n", + " 79050K .......... .......... .......... .......... .......... 79% 888K 28s\n", + " 79100K .......... .......... .......... .......... .......... 79% 1.51M 28s\n", + " 79150K .......... .......... .......... .......... .......... 79% 636K 28s\n", + " 79200K .......... .......... .......... .......... .......... 79% 2.26M 28s\n", + " 79250K .......... .......... .......... .......... .......... 79% 790K 28s\n", + " 79300K .......... .......... .......... .......... .......... 79% 1.50M 28s\n", + " 79350K .......... .......... .......... .......... .......... 79% 839K 28s\n", + " 79400K .......... .......... .......... .......... .......... 79% 1.18M 27s\n", + " 79450K .......... .......... .......... .......... .......... 79% 1.04M 27s\n", + " 79500K .......... .......... .......... .......... .......... 79% 1.26M 27s\n", + " 79550K .......... .......... .......... .......... .......... 79% 1.05M 27s\n", + " 79600K .......... .......... .......... .......... .......... 79% 886K 27s\n", + " 79650K .......... .......... .......... .......... .......... 79% 1.42M 27s\n", + " 79700K .......... .......... .......... .......... .......... 79% 756K 27s\n", + " 79750K .......... .......... .......... .......... .......... 79% 2.33M 27s\n", + " 79800K .......... .......... .......... .......... .......... 79% 746K 27s\n", + " 79850K .......... .......... .......... .......... .......... 79% 2.38M 27s\n", + " 79900K .......... .......... .......... .......... .......... 79% 733K 27s\n", + " 79950K .......... .......... .......... .......... .......... 80% 2.52M 27s\n", + " 80000K .......... .......... .......... .......... .......... 80% 772K 27s\n", + " 80050K .......... .......... .......... .......... .......... 80% 1.26M 27s\n", + " 80100K .......... .......... .......... .......... .......... 80% 886K 26s\n", + " 80150K .......... .......... .......... .......... .......... 80% 1.61M 26s\n", + " 80200K .......... .......... .......... .......... .......... 80% 956K 26s\n", + " 80250K .......... .......... .......... .......... .......... 80% 341K 26s\n", + " 80300K .......... .......... .......... .......... .......... 80% 181M 26s\n", + " 80350K .......... .......... .......... .......... .......... 80% 191K 26s\n", + " 80400K .......... .......... .......... .......... .......... 80% 553K 26s\n", + " 80450K .......... .......... .......... .......... .......... 80% 578K 26s\n", + " 80500K .......... .......... .......... .......... .......... 80% 482K 26s\n", + " 80550K .......... .......... .......... .......... .......... 80% 571K 26s\n", + " 80600K .......... .......... .......... .......... .......... 80% 645K 26s\n", + " 80650K .......... .......... .......... .......... .......... 80% 1.03M 26s\n", + " 80700K .......... .......... .......... .......... .......... 80% 711K 26s\n", + " 80750K .......... .......... .......... .......... .......... 80% 728K 26s\n", + " 80800K .......... .......... .......... .......... .......... 80% 645K 26s\n", + " 80850K .......... .......... .......... .......... .......... 80% 615K 26s\n", + " 80900K .......... .......... .......... .......... .......... 80% 684K 25s\n", + " 80950K .......... .......... .......... .......... .......... 81% 1.46M 25s\n", + " 81000K .......... .......... .......... .......... .......... 81% 684K 25s\n", + " 81050K .......... .......... .......... .......... .......... 81% 660K 25s\n", + " 81100K .......... .......... .......... .......... .......... 81% 660K 25s\n", + " 81150K .......... .......... .......... .......... .......... 81% 681K 25s\n", + " 81200K .......... .......... .......... .......... .......... 81% 897K 25s\n", + " 81250K .......... .......... .......... .......... .......... 81% 975K 25s\n", + " 81300K .......... .......... .......... .......... .......... 81% 722K 25s\n", + " 81350K .......... .......... .......... .......... .......... 81% 671K 25s\n", + " 81400K .......... .......... .......... .......... .......... 81% 847K 25s\n", + " 81450K .......... .......... .......... .......... .......... 81% 1.05M 25s\n", + " 81500K .......... .......... .......... .......... .......... 81% 656K 25s\n", + " 81550K .......... .......... .......... .......... .......... 81% 741K 25s\n", + " 81600K .......... .......... .......... .......... .......... 81% 851K 25s\n", + " 81650K .......... .......... .......... .......... .......... 81% 1.10M 24s\n", + " 81700K .......... .......... .......... .......... .......... 81% 668K 24s\n", + " 81750K .......... .......... .......... .......... .......... 81% 691K 24s\n", + " 81800K .......... .......... .......... .......... .......... 81% 819K 24s\n", + " 81850K .......... .......... .......... .......... .......... 81% 1.22M 24s\n", + " 81900K .......... .......... .......... .......... .......... 81% 660K 24s\n", + " 81950K .......... .......... .......... .......... .......... 82% 713K 24s\n", + " 82000K .......... .......... .......... .......... .......... 82% 788K 24s\n", + " 82050K .......... .......... .......... .......... .......... 82% 1.13M 24s\n", + " 82100K .......... .......... .......... .......... .......... 82% 552K 24s\n", + " 82150K .......... .......... .......... .......... .......... 82% 961K 24s\n", + " 82200K .......... .......... .......... .......... .......... 82% 1.59M 24s\n", + " 82250K .......... .......... .......... .......... .......... 82% 663K 24s\n", + " 82300K .......... .......... .......... .......... .......... 82% 699K 24s\n", + " 82350K .......... .......... .......... .......... .......... 82% 798K 23s\n", + " 82400K .......... .......... .......... .......... .......... 82% 611K 23s\n", + " 82450K .......... .......... .......... .......... .......... 82% 2.32M 23s\n", + " 82500K .......... .......... .......... .......... .......... 82% 687K 23s\n", + " 82550K .......... .......... .......... .......... .......... 82% 584K 23s\n", + " 82600K .......... .......... .......... .......... .......... 82% 2.62M 23s\n", + " 82650K .......... .......... .......... .......... .......... 82% 729K 23s\n", + " 82700K .......... .......... .......... .......... .......... 82% 597K 23s\n", + " 82750K .......... .......... .......... .......... .......... 82% 3.87M 23s\n", + " 82800K .......... .......... .......... .......... .......... 82% 639K 23s\n", + " 82850K .......... .......... .......... .......... .......... 82% 619K 23s\n", + " 82900K .......... .......... .......... .......... .......... 82% 5.97M 23s\n", + " 82950K .......... .......... .......... .......... .......... 83% 628K 23s\n", + " 83000K .......... .......... .......... .......... .......... 83% 621K 23s\n", + " 83050K .......... .......... .......... .......... .......... 83% 6.04M 23s\n", + " 83100K .......... .......... .......... .......... .......... 83% 616K 22s\n", + " 83150K .......... .......... .......... .......... .......... 83% 607K 22s\n", + " 83200K .......... .......... .......... .......... .......... 83% 8.76M 22s\n", + " 83250K .......... .......... .......... .......... .......... 83% 610K 22s\n", + " 83300K .......... .......... .......... .......... .......... 83% 617K 22s\n", + " 83350K .......... .......... .......... .......... .......... 83% 5.71M 22s\n", + " 83400K .......... .......... .......... .......... .......... 83% 629K 22s\n", + " 83450K .......... .......... .......... .......... .......... 83% 639K 22s\n", + " 83500K .......... .......... .......... .......... .......... 83% 3.73M 22s\n", + " 83550K .......... .......... .......... .......... .......... 83% 668K 22s\n", + " 83600K .......... .......... .......... .......... .......... 83% 659K 22s\n", + " 83650K .......... .......... .......... .......... .......... 83% 3.23M 22s\n", + " 83700K .......... .......... .......... .......... .......... 83% 649K 22s\n", + " 83750K .......... .......... .......... .......... .......... 83% 5.34M 22s\n", + " 83800K .......... .......... .......... .......... .......... 83% 620K 21s\n", + " 83850K .......... .......... .......... .......... .......... 83% 614K 21s\n", + " 83900K .......... .......... .......... .......... .......... 83% 5.18M 21s\n", + " 83950K .......... .......... .......... .......... .......... 84% 620K 21s\n", + " 84000K .......... .......... .......... .......... .......... 84% 644K 21s\n", + " 84050K .......... .......... .......... .......... .......... 84% 4.02M 21s\n", + " 84100K .......... .......... .......... .......... .......... 84% 607K 21s\n", + " 84150K .......... .......... .......... .......... .......... 84% 940K 21s\n", + " 84200K .......... .......... .......... .......... .......... 84% 1.45M 21s\n", + " 84250K .......... .......... .......... .......... .......... 84% 715K 21s\n", + " 84300K .......... .......... .......... .......... .......... 84% 656K 21s\n", + " 84350K .......... .......... .......... .......... .......... 84% 2.02M 21s\n", + " 84400K .......... .......... .......... .......... .......... 84% 775K 21s\n", + " 84450K .......... .......... .......... .......... .......... 84% 2.36M 21s\n", + " 84500K .......... .......... .......... .......... .......... 84% 702K 21s\n", + " 84550K .......... .......... .......... .......... .......... 84% 745K 20s\n", + " 84600K .......... .......... .......... .......... .......... 84% 1.66M 20s\n", + " 84650K .......... .......... .......... .......... .......... 84% 836K 20s\n", + " 84700K .......... .......... .......... .......... .......... 84% 676K 20s\n", + " 84750K .......... .......... .......... .......... .......... 84% 3.03M 20s\n", + " 84800K .......... .......... .......... .......... .......... 84% 716K 20s\n", + " 84850K .......... .......... .......... .......... .......... 84% 1.39M 20s\n", + " 84900K .......... .......... .......... .......... .......... 84% 971K 20s\n", + " 84950K .......... .......... .......... .......... .......... 85% 1.41M 20s\n", + " 85000K .......... .......... .......... .......... .......... 85% 893K 20s\n", + " 85050K .......... .......... .......... .......... .......... 85% 728K 20s\n", + " 85100K .......... .......... .......... .......... .......... 85% 1.22M 20s\n", + " 85150K .......... .......... .......... .......... .......... 85% 941K 20s\n", + " 85200K .......... .......... .......... .......... .......... 85% 1.50M 20s\n", + " 85250K .......... .......... .......... .......... .......... 85% 842K 19s\n", + " 85300K .......... .......... .......... .......... .......... 85% 659K 19s\n", + " 85350K .......... .......... .......... .......... .......... 85% 4.26M 19s\n", + " 85400K .......... .......... .......... .......... .......... 85% 600K 19s\n", + " 85450K .......... .......... .......... .......... .......... 85% 1.82M 19s\n", + " 85500K .......... .......... .......... .......... .......... 85% 851K 19s\n", + " 85550K .......... .......... .......... .......... .......... 85% 1.78M 19s\n", + " 85600K .......... .......... .......... .......... .......... 85% 799K 19s\n", + " 85650K .......... .......... .......... .......... .......... 85% 715K 19s\n", + " 85700K .......... .......... .......... .......... .......... 85% 1.56M 19s\n", + " 85750K .......... .......... .......... .......... .......... 85% 752K 19s\n", + " 85800K .......... .......... .......... .......... .......... 85% 2.53M 19s\n", + " 85850K .......... .......... .......... .......... .......... 85% 639K 19s\n", + " 85900K .......... .......... .......... .......... .......... 85% 6.62M 19s\n", + " 85950K .......... .......... .......... .......... .......... 86% 636K 19s\n", + " 86000K .......... .......... .......... .......... .......... 86% 630K 18s\n", + " 86050K .......... .......... .......... .......... .......... 86% 5.20M 18s\n", + " 86100K .......... .......... .......... .......... .......... 86% 655K 18s\n", + " 86150K .......... .......... .......... .......... .......... 86% 5.74M 18s\n", + " 86200K .......... .......... .......... .......... .......... 86% 627K 18s\n", + " 86250K .......... .......... .......... .......... .......... 86% 772K 18s\n", + " 86300K .......... .......... .......... .......... .......... 86% 2.53M 18s\n", + " 86350K .......... .......... .......... .......... .......... 86% 655K 18s\n", + " 86400K .......... .......... .......... .......... .......... 86% 3.55M 18s\n", + " 86450K .......... .......... .......... .......... .......... 86% 725K 18s\n", + " 86500K .......... .......... .......... .......... .......... 86% 3.41M 18s\n", + " 86550K .......... .......... .......... .......... .......... 86% 651K 18s\n", + " 86600K .......... .......... .......... .......... .......... 86% 4.28M 18s\n", + " 86650K .......... .......... .......... .......... .......... 86% 694K 18s\n", + " 86700K .......... .......... .......... .......... .......... 86% 837K 17s\n", + " 86750K .......... .......... .......... .......... .......... 86% 2.04M 17s\n", + " 86800K .......... .......... .......... .......... .......... 86% 516K 17s\n", + " 86850K .......... .......... .......... .......... .......... 86% 5.72M 17s\n", + " 86900K .......... .......... .......... .......... .......... 86% 584K 17s\n", + " 86950K .......... .......... .......... .......... .......... 87% 3.81M 17s\n", + " 87000K .......... .......... .......... .......... .......... 87% 660K 17s\n", + " 87050K .......... .......... .......... .......... .......... 87% 2.29M 17s\n", + " 87100K .......... .......... .......... .......... .......... 87% 680K 17s\n", + " 87150K .......... .......... .......... .......... .......... 87% 795K 17s\n", + " 87200K .......... .......... .......... .......... .......... 87% 2.11M 17s\n", + " 87250K .......... .......... .......... .......... .......... 87% 811K 17s\n", + " 87300K .......... .......... .......... .......... .......... 87% 2.24M 17s\n", + " 87350K .......... .......... .......... .......... .......... 87% 784K 17s\n", + " 87400K .......... .......... .......... .......... .......... 87% 204K 17s\n", + " 87450K .......... .......... .......... .......... .......... 87% 9.32M 16s\n", + " 87500K .......... .......... .......... .......... .......... 87% 626K 16s\n", + " 87550K .......... .......... .......... .......... .......... 87% 5.67M 16s\n", + " 87600K .......... .......... .......... .......... .......... 87% 665K 16s\n", + " 87650K .......... .......... .......... .......... .......... 87% 3.74M 16s\n", + " 87700K .......... .......... .......... .......... .......... 87% 699K 16s\n", + " 87750K .......... .......... .......... .......... .......... 87% 3.43M 16s\n", + " 87800K .......... .......... .......... .......... .......... 87% 706K 16s\n", + " 87850K .......... .......... .......... .......... .......... 87% 2.74M 16s\n", + " 87900K .......... .......... .......... .......... .......... 87% 779K 16s\n", + " 87950K .......... .......... .......... .......... .......... 88% 2.11M 16s\n", + " 88000K .......... .......... .......... .......... .......... 88% 805K 16s\n", + " 88050K .......... .......... .......... .......... .......... 88% 2.08M 16s\n", + " 88100K .......... .......... .......... .......... .......... 88% 899K 16s\n", + " 88150K .......... .......... .......... .......... .......... 88% 2.03M 16s\n", + " 88200K .......... .......... .......... .......... .......... 88% 768K 15s\n", + " 88250K .......... .......... .......... .......... .......... 88% 3.13M 15s\n", + " 88300K .......... .......... .......... .......... .......... 88% 882K 15s\n", + " 88350K .......... .......... .......... .......... .......... 88% 1.46M 15s\n", + " 88400K .......... .......... .......... .......... .......... 88% 1002K 15s\n", + " 88450K .......... .......... .......... .......... .......... 88% 2.86M 15s\n", + " 88500K .......... .......... .......... .......... .......... 88% 750K 15s\n", + " 88550K .......... .......... .......... .......... .......... 88% 3.01M 15s\n", + " 88600K .......... .......... .......... .......... .......... 88% 1.81M 15s\n", + " 88650K .......... .......... .......... .......... .......... 88% 855K 15s\n", + " 88700K .......... .......... .......... .......... .......... 88% 1.67M 15s\n", + " 88750K .......... .......... .......... .......... .......... 88% 955K 15s\n", + " 88800K .......... .......... .......... .......... .......... 88% 1.56M 15s\n", + " 88850K .......... .......... .......... .......... .......... 88% 950K 15s\n", + " 88900K .......... .......... .......... .......... .......... 88% 1.52M 14s\n", + " 88950K .......... .......... .......... .......... .......... 89% 1001K 14s\n", + " 89000K .......... .......... .......... .......... .......... 89% 1.47M 14s\n", + " 89050K .......... .......... .......... .......... .......... 89% 1.00M 14s\n", + " 89100K .......... .......... .......... .......... .......... 89% 1.43M 14s\n", + " 89150K .......... .......... .......... .......... .......... 89% 1.35M 14s\n", + " 89200K .......... .......... .......... .......... .......... 89% 1011K 14s\n", + " 89250K .......... .......... .......... .......... .......... 89% 1.01M 14s\n", + " 89300K .......... .......... .......... .......... .......... 89% 1.39M 14s\n", + " 89350K .......... .......... .......... .......... .......... 89% 973K 14s\n", + " 89400K .......... .......... .......... .......... .......... 89% 1.60M 14s\n", + " 89450K .......... .......... .......... .......... .......... 89% 857K 14s\n", + " 89500K .......... .......... .......... .......... .......... 89% 3.81M 14s\n", + " 89550K .......... .......... .......... .......... .......... 89% 693K 14s\n", + " 89600K .......... .......... .......... .......... .......... 89% 1.68M 14s\n", + " 89650K .......... .......... .......... .......... .......... 89% 973K 13s\n", + " 89700K .......... .......... .......... .......... .......... 89% 1.50M 13s\n", + " 89750K .......... .......... .......... .......... .......... 89% 9.94M 13s\n", + " 89800K .......... .......... .......... .......... .......... 89% 594K 13s\n", + " 89850K .......... .......... .......... .......... .......... 89% 8.30M 13s\n", + " 89900K .......... .......... .......... .......... .......... 89% 634K 13s\n", + " 89950K .......... .......... .......... .......... .......... 90% 1.27M 13s\n", + " 90000K .......... .......... .......... .......... .......... 90% 1.08M 13s\n", + " 90050K .......... .......... .......... .......... .......... 90% 1.22M 13s\n", + " 90100K .......... .......... .......... .......... .......... 90% 1.11M 13s\n", + " 90150K .......... .......... .......... .......... .......... 90% 1.19M 13s\n", + " 90200K .......... .......... .......... .......... .......... 90% 4.87M 13s\n", + " 90250K .......... .......... .......... .......... .......... 90% 642K 13s\n", + " 90300K .......... .......... .......... .......... .......... 90% 7.31M 13s\n", + " 90350K .......... .......... .......... .......... .......... 90% 675K 13s\n", + " 90400K .......... .......... .......... .......... .......... 90% 5.61M 12s\n", + " 90450K .......... .......... .......... .......... .......... 90% 670K 12s\n", + " 90500K .......... .......... .......... .......... .......... 90% 3.97M 12s\n", + " 90550K .......... .......... .......... .......... .......... 90% 1.20M 12s\n", + " 90600K .......... .......... .......... .......... .......... 90% 1.16M 12s\n", + " 90650K .......... .......... .......... .......... .......... 90% 1.14M 12s\n", + " 90700K .......... .......... .......... .......... .......... 90% 1.17M 12s\n", + " 90750K .......... .......... .......... .......... .......... 90% 1.27M 12s\n", + " 90800K .......... .......... .......... .......... .......... 90% 1.12M 12s\n", + " 90850K .......... .......... .......... .......... .......... 90% 1.02M 12s\n", + " 90900K .......... .......... .......... .......... .......... 90% 1.30M 12s\n", + " 90950K .......... .......... .......... .......... .......... 91% 1.08M 12s\n", + " 91000K .......... .......... .......... .......... .......... 91% 1.27M 12s\n", + " 91050K .......... .......... .......... .......... .......... 91% 7.46M 12s\n", + " 91100K .......... .......... .......... .......... .......... 91% 678K 11s\n", + " 91150K .......... .......... .......... .......... .......... 91% 4.40M 11s\n", + " 91200K .......... .......... .......... .......... .......... 91% 664K 11s\n", + " 91250K .......... .......... .......... .......... .......... 91% 10.3M 11s\n", + " 91300K .......... .......... .......... .......... .......... 91% 659K 11s\n", + " 91350K .......... .......... .......... .......... .......... 91% 3.36M 11s\n", + " 91400K .......... .......... .......... .......... .......... 91% 716K 11s\n", + " 91450K .......... .......... .......... .......... .......... 91% 3.58M 11s\n", + " 91500K .......... .......... .......... .......... .......... 91% 717K 11s\n", + " 91550K .......... .......... .......... .......... .......... 91% 1.08M 11s\n", + " 91600K .......... .......... .......... .......... .......... 91% 1.30M 11s\n", + " 91650K .......... .......... .......... .......... .......... 91% 1.09M 11s\n", + " 91700K .......... .......... .......... .......... .......... 91% 1.02M 11s\n", + " 91750K .......... .......... .......... .......... .......... 91% 1.33M 11s\n", + " 91800K .......... .......... .......... .......... .......... 91% 1006K 11s\n", + " 91850K .......... .......... .......... .......... .......... 91% 21.3M 10s\n", + " 91900K .......... .......... .......... .......... .......... 91% 500K 10s\n", + " 91950K .......... .......... .......... .......... .......... 92% 8.62M 10s\n", + " 92000K .......... .......... .......... .......... .......... 92% 597K 10s\n", + " 92050K .......... .......... .......... .......... .......... 92% 6.64M 10s\n", + " 92100K .......... .......... .......... .......... .......... 92% 590K 10s\n", + " 92150K .......... .......... .......... .......... .......... 92% 5.72M 10s\n", + " 92200K .......... .......... .......... .......... .......... 92% 661K 10s\n", + " 92250K .......... .......... .......... .......... .......... 92% 5.11M 10s\n", + " 92300K .......... .......... .......... .......... .......... 92% 636K 10s\n", + " 92350K .......... .......... .......... .......... .......... 92% 9.85M 10s\n", + " 92400K .......... .......... .......... .......... .......... 92% 633K 10s\n", + " 92450K .......... .......... .......... .......... .......... 92% 3.20M 10s\n", + " 92500K .......... .......... .......... .......... .......... 92% 723K 10s\n", + " 92550K .......... .......... .......... .......... .......... 92% 1.80M 10s\n", + " 92600K .......... .......... .......... .......... .......... 92% 172M 9s\n", + " 92650K .......... .......... .......... .......... .......... 92% 646K 9s\n", + " 92700K .......... .......... .......... .......... .......... 92% 4.94M 9s\n", + " 92750K .......... .......... .......... .......... .......... 92% 670K 9s\n", + " 92800K .......... .......... .......... .......... .......... 92% 5.87M 9s\n", + " 92850K .......... .......... .......... .......... .......... 92% 636K 9s\n", + " 92900K .......... .......... .......... .......... .......... 92% 878K 9s\n", + " 92950K .......... .......... .......... .......... .......... 93% 1.87M 9s\n", + " 93000K .......... .......... .......... .......... .......... 93% 824K 9s\n", + " 93050K .......... .......... .......... .......... .......... 93% 10.2M 9s\n", + " 93100K .......... .......... .......... .......... .......... 93% 1.97M 9s\n", + " 93150K .......... .......... .......... .......... .......... 93% 649K 9s\n", + " 93200K .......... .......... .......... .......... .......... 93% 7.01M 9s\n", + " 93250K .......... .......... .......... .......... .......... 93% 669K 9s\n", + " 93300K .......... .......... .......... .......... .......... 93% 3.69M 9s\n", + " 93350K .......... .......... .......... .......... .......... 93% 656K 9s\n", + " 93400K .......... .......... .......... .......... .......... 93% 6.27M 8s\n", + " 93450K .......... .......... .......... .......... .......... 93% 675K 8s\n", + " 93500K .......... .......... .......... .......... .......... 93% 9.04M 8s\n", + " 93550K .......... .......... .......... .......... .......... 93% 665K 8s\n", + " 93600K .......... .......... .......... .......... .......... 93% 4.78M 8s\n", + " 93650K .......... .......... .......... .......... .......... 93% 692K 8s\n", + " 93700K .......... .......... .......... .......... .......... 93% 3.87M 8s\n", + " 93750K .......... .......... .......... .......... .......... 93% 712K 8s\n", + " 93800K .......... .......... .......... .......... .......... 93% 3.34M 8s\n", + " 93850K .......... .......... .......... .......... .......... 93% 716K 8s\n", + " 93900K .......... .......... .......... .......... .......... 93% 3.17M 8s\n", + " 93950K .......... .......... .......... .......... .......... 94% 724K 8s\n", + " 94000K .......... .......... .......... .......... .......... 94% 3.48M 8s\n", + " 94050K .......... .......... .......... .......... .......... 94% 692K 8s\n", + " 94100K .......... .......... .......... .......... .......... 94% 3.52M 8s\n", + " 94150K .......... .......... .......... .......... .......... 94% 703K 7s\n", + " 94200K .......... .......... .......... .......... .......... 94% 11.0M 7s\n", + " 94250K .......... .......... .......... .......... .......... 94% 579K 7s\n", + " 94300K .......... .......... .......... .......... .......... 94% 8.24M 7s\n", + " 94350K .......... .......... .......... .......... .......... 94% 1.77M 7s\n", + " 94400K .......... .......... .......... .......... .......... 94% 879K 7s\n", + " 94450K .......... .......... .......... .......... .......... 94% 1.74M 7s\n", + " 94500K .......... .......... .......... .......... .......... 94% 883K 7s\n", + " 94550K .......... .......... .......... .......... .......... 94% 1.75M 7s\n", + " 94600K .......... .......... .......... .......... .......... 94% 890K 7s\n", + " 94650K .......... .......... .......... .......... .......... 94% 2.64M 7s\n", + " 94700K .......... .......... .......... .......... .......... 94% 2.45M 7s\n", + " 94750K .......... .......... .......... .......... .......... 94% 790K 7s\n", + " 94800K .......... .......... .......... .......... .......... 94% 2.24M 7s\n", + " 94850K .......... .......... .......... .......... .......... 94% 7.42M 7s\n", + " 94900K .......... .......... .......... .......... .......... 94% 811K 6s\n", + " 94950K .......... .......... .......... .......... .......... 95% 1.87M 6s\n", + " 95000K .......... .......... .......... .......... .......... 95% 858K 6s\n", + " 95050K .......... .......... .......... .......... .......... 95% 1.00M 6s\n", + " 95100K .......... .......... .......... .......... .......... 95% 1.36M 6s\n", + " 95150K .......... .......... .......... .......... .......... 95% 1.06M 6s\n", + " 95200K .......... .......... .......... .......... .......... 95% 1.26M 6s\n", + " 95250K .......... .......... .......... .......... .......... 95% 1.04M 6s\n", + " 95300K .......... .......... .......... .......... .......... 95% 1.21M 6s\n", + " 95350K .......... .......... .......... .......... .......... 95% 1.11M 6s\n", + " 95400K .......... .......... .......... .......... .......... 95% 1.06M 6s\n", + " 95450K .......... .......... .......... .......... .......... 95% 1.38M 6s\n", + " 95500K .......... .......... .......... .......... .......... 95% 1.03M 6s\n", + " 95550K .......... .......... .......... .......... .......... 95% 5.59M 6s\n", + " 95600K .......... .......... .......... .......... .......... 95% 1.21M 6s\n", + " 95650K .......... .......... .......... .......... .......... 95% 1.04M 5s\n", + " 95700K .......... .......... .......... .......... .......... 95% 1.30M 5s\n", + " 95750K .......... .......... .......... .......... .......... 95% 1.06M 5s\n", + " 95800K .......... .......... .......... .......... .......... 95% 7.61M 5s\n", + " 95850K .......... .......... .......... .......... .......... 95% 1.24M 5s\n", + " 95900K .......... .......... .......... .......... .......... 95% 1021K 5s\n", + " 95950K .......... .......... .......... .......... .......... 96% 1.46M 5s\n", + " 96000K .......... .......... .......... .......... .......... 96% 8.76M 5s\n", + " 96050K .......... .......... .......... .......... .......... 96% 295K 5s\n", + " 96100K .......... .......... .......... .......... .......... 96% 150M 5s\n", + " 96150K .......... .......... .......... .......... .......... 96% 84.0K 5s\n", + " 96200K .......... .......... .......... .......... .......... 96% 513K 5s\n", + " 96250K .......... .......... .......... .......... .......... 96% 594K 5s\n", + " 96300K .......... .......... .......... .......... .......... 96% 483K 5s\n", + " 96350K .......... .......... .......... .......... .......... 96% 650K 5s\n", + " 96400K .......... .......... .......... .......... .......... 96% 4.33M 5s\n", + " 96450K .......... .......... .......... .......... .......... 96% 594K 4s\n", + " 96500K .......... .......... .......... .......... .......... 96% 638K 4s\n", + " 96550K .......... .......... .......... .......... .......... 96% 1.23M 4s\n", + " 96600K .......... .......... .......... .......... .......... 96% 733K 4s\n", + " 96650K .......... .......... .......... .......... .......... 96% 574K 4s\n", + " 96700K .......... .......... .......... .......... .......... 96% 843K 4s\n", + " 96750K .......... .......... .......... .......... .......... 96% 1.47M 4s\n", + " 96800K .......... .......... .......... .......... .......... 96% 537K 4s\n", + " 96850K .......... .......... .......... .......... .......... 96% 1.25M 4s\n", + " 96900K .......... .......... .......... .......... .......... 96% 996K 4s\n", + " 96950K .......... .......... .......... .......... .......... 97% 611K 4s\n", + " 97000K .......... .......... .......... .......... .......... 97% 1.34M 4s\n", + " 97050K .......... .......... .......... .......... .......... 97% 929K 4s\n", + " 97100K .......... .......... .......... .......... .......... 97% 623K 4s\n", + " 97150K .......... .......... .......... .......... .......... 97% 1.54M 4s\n", + " 97200K .......... .......... .......... .......... .......... 97% 876K 4s\n", + " 97250K .......... .......... .......... .......... .......... 97% 643K 3s\n", + " 97300K .......... .......... .......... .......... .......... 97% 1.69M 3s\n", + " 97350K .......... .......... .......... .......... .......... 97% 845K 3s\n", + " 97400K .......... .......... .......... .......... .......... 97% 655K 3s\n", + " 97450K .......... .......... .......... .......... .......... 97% 1.66M 3s\n", + " 97500K .......... .......... .......... .......... .......... 97% 811K 3s\n", + " 97550K .......... .......... .......... .......... .......... 97% 668K 3s\n", + " 97600K .......... .......... .......... .......... .......... 97% 3.98M 3s\n", + " 97650K .......... .......... .......... .......... .......... 97% 583K 3s\n", + " 97700K .......... .......... .......... .......... .......... 97% 752K 3s\n", + " 97750K .......... .......... .......... .......... .......... 97% 2.29M 3s\n", + " 97800K .......... .......... .......... .......... .......... 97% 606K 3s\n", + " 97850K .......... .......... .......... .......... .......... 97% 782K 3s\n", + " 97900K .......... .......... .......... .......... .......... 97% 2.22M 3s\n", + " 97950K .......... .......... .......... .......... .......... 98% 639K 3s\n", + " 98000K .......... .......... .......... .......... .......... 98% 4.51M 2s\n", + " 98050K .......... .......... .......... .......... .......... 98% 622K 2s\n", + " 98100K .......... .......... .......... .......... .......... 98% 823K 2s\n", + " 98150K .......... .......... .......... .......... .......... 98% 1.88M 2s\n", + " 98200K .......... .......... .......... .......... .......... 98% 696K 2s\n", + " 98250K .......... .......... .......... .......... .......... 98% 779K 2s\n", + " 98300K .......... .......... .......... .......... .......... 98% 1.65M 2s\n", + " 98350K .......... .......... .......... .......... .......... 98% 747K 2s\n", + " 98400K .......... .......... .......... .......... .......... 98% 735K 2s\n", + " 98450K .......... .......... .......... .......... .......... 98% 2.65M 2s\n", + " 98500K .......... .......... .......... .......... .......... 98% 724K 2s\n", + " 98550K .......... .......... .......... .......... .......... 98% 1.93M 2s\n", + " 98600K .......... .......... .......... .......... .......... 98% 833K 2s\n", + " 98650K .......... .......... .......... .......... .......... 98% 1.89M 2s\n", + " 98700K .......... .......... .......... .......... .......... 98% 747K 2s\n", + " 98750K .......... .......... .......... .......... .......... 98% 672K 2s\n", + " 98800K .......... .......... .......... .......... .......... 98% 2.60M 1s\n", + " 98850K .......... .......... .......... .......... .......... 98% 733K 1s\n", + " 98900K .......... .......... .......... .......... .......... 98% 2.67M 1s\n", + " 98950K .......... .......... .......... .......... .......... 99% 684K 1s\n", + " 99000K .......... .......... .......... .......... .......... 99% 699K 1s\n", + " 99050K .......... .......... .......... .......... .......... 99% 2.76M 1s\n", + " 99100K .......... .......... .......... .......... .......... 99% 697K 1s\n", + " 99150K .......... .......... .......... .......... .......... 99% 3.86M 1s\n", + " 99200K .......... .......... .......... .......... .......... 99% 652K 1s\n", + " 99250K .......... .......... .......... .......... .......... 99% 4.66M 1s\n", + " 99300K .......... .......... .......... .......... .......... 99% 655K 1s\n", + " 99350K .......... .......... .......... .......... .......... 99% 697K 1s\n", + " 99400K .......... .......... .......... .......... .......... 99% 3.04M 1s\n", + " 99450K .......... .......... .......... .......... .......... 99% 687K 1s\n", + " 99500K .......... .......... .......... .......... .......... 99% 3.40M 1s\n", + " 99550K .......... .......... .......... .......... .......... 99% 698K 1s\n", + " 99600K .......... .......... .......... .......... .......... 99% 754K 0s\n", + " 99650K .......... .......... .......... .......... .......... 99% 2.76M 0s\n", + " 99700K .......... .......... .......... .......... .......... 99% 630K 0s\n", + " 99750K .......... .......... .......... .......... .......... 99% 1.41M 0s\n", + " 99800K .......... .......... .......... .......... .......... 99% 1009K 0s\n", + " 99850K .......... .......... .......... .......... .......... 99% 1.34M 0s\n", + " 99900K .......... .......... .......... .......... .......... 99% 943K 0s\n", + " 99950K .......... .......... .......... .......... ..... 100% 211K=2m8s\n", + "\n", + "2017-03-23 13:09:01 (784 KB/s) - ‘model/resnet-50-0000.params’ saved [102395376/102395376]\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mres2_0\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m0\u001b[0m\n", + "\u001b[36mres2_1\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m0\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\"wget http://data.mxnet.io/models/imagenet/resnet/50-layers/resnet-50-symbol.json -P model/\"!\n", + "\n", + "\"wget http://data.mxnet.io/models/imagenet/resnet/50-layers/resnet-50-0000.params -P model/\"!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Initialization\n", + "We first load the model into memory with loadCheckpoint. It returns the symbol (see [symbol_scala.ipynb](https://github.com/dmlc/mxnet-notebooks/blob/master/scala/basic/symbol_scala.ipynb)) definition of the neural network, and parameters." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "log4j:WARN No appenders could be found for logger (MXNetJVM).\n", + "log4j:WARN Please initialize the log4j system properly.\n", + "log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mresnet\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@301c1c1\n", + "\u001b[36margParamsResnet\u001b[0m: \u001b[32mMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mNDArray\u001b[0m] = \u001b[33mMap\u001b[0m(\n", + " \u001b[32m\"stage1_unit3_conv3_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@89b0a4dc,\n", + " \u001b[32m\"stage3_unit2_bn1_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@86c56651,\n", + " \u001b[32m\"stage2_unit3_conv2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@a82db0fc,\n", + " \u001b[32m\"stage4_unit3_bn1_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@7c5beb31,\n", + " \u001b[32m\"stage1_unit3_bn1_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@a50bbff2,\n", + " \u001b[32m\"stage3_unit1_conv3_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@cc375d57,\n", + " \u001b[32m\"stage2_unit1_bn3_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@a26b6c28,\n", + " \u001b[32m\"stage2_unit4_conv3_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@bcfcb3fc,\n", + " \u001b[32m\"stage2_unit4_bn3_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@c3c51773,\n", + " \u001b[32m\"stage3_unit4_bn1_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@49c1a0c1,\n", + " \u001b[32m\"stage3_unit6_conv2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@67f8b5ec,\n", + " \u001b[32m\"stage2_unit2_bn3_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@f4623b37,\n", + " \u001b[32m\"stage3_unit2_bn3_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@757458dc,\n", + " \u001b[32m\"stage1_unit2_bn2_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@c6a86cd0,\n", + " \u001b[32m\"stage4_unit1_conv2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@c2ef8c8a,\n", + " \u001b[32m\"stage2_unit2_conv2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@bcc8ff8d,\n", + " \u001b[32m\"stage3_unit6_bn2_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@bce67b7e,\n", + " \u001b[32m\"stage2_unit2_bn2_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@fb7a7812,\n", + " \u001b[32m\"stage1_unit2_bn1_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@6f7bfa1e,\n", + "\u001b[33m...\u001b[0m\n", + "\u001b[36mauxParamsResnet\u001b[0m: \u001b[32mMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mNDArray\u001b[0m] = \u001b[33mMap\u001b[0m(\n", + " \u001b[32m\"stage2_unit2_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@946b22bf,\n", + " \u001b[32m\"stage3_unit6_bn2_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@86a903bb,\n", + " \u001b[32m\"stage2_unit2_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@1e3f6190,\n", + " \u001b[32m\"stage3_unit1_bn2_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@63294439,\n", + " \u001b[32m\"stage1_unit3_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@96763bc5,\n", + " \u001b[32m\"stage2_unit4_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@bab1e037,\n", + " \u001b[32m\"stage2_unit4_bn3_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@c2219e25,\n", + " \u001b[32m\"stage3_unit1_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@6dc31d76,\n", + " \u001b[32m\"stage2_unit3_bn2_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@ed1175d4,\n", + " \u001b[32m\"stage2_unit1_bn3_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@a6a3724b,\n", + " \u001b[32m\"stage1_unit2_bn1_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@6464cb13,\n", + " \u001b[32m\"stage4_unit3_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@3790c48a,\n", + " \u001b[32m\"stage1_unit2_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@60c14fda,\n", + " \u001b[32m\"stage3_unit6_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@7d26d8a7,\n", + " \u001b[32m\"stage3_unit5_bn2_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@7020beac,\n", + " \u001b[32m\"stage2_unit2_bn2_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@f05cdd64,\n", + " \u001b[32m\"stage2_unit1_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@ebc70586,\n", + " \u001b[32m\"stage1_unit1_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@21059403,\n", + " \u001b[32m\"stage3_unit3_bn3_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@c267e9aa,\n", + "\u001b[33m...\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "//val mod = Module.loadCheckpoint(\"model/resnet-50\", 0)\n", + "val (resnet, argParamsResnet, auxParamsResnet) = Model.loadCheckpoint(\"model/resnet-50\", 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can visualize the neural network by `Visualization.plotNetwork` and save it by `dot.render` method. Give path where you want to save the visualization as follows: " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning: node 'bn_data_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'bn_data_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'bn0_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'bn0_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit1_bn1_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit1_bn1_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit1_bn1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit1_bn1_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit1_bn2_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit1_bn2_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit1_bn2_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit1_bn2_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit1_bn3_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit1_bn3_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit1_bn3_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit1_bn3_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit2_bn1_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit2_bn1_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit2_bn1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit2_bn1_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit2_bn2_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit2_bn2_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit2_bn2_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit2_bn2_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit2_bn3_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit2_bn3_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit2_bn3_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit2_bn3_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit3_bn1_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit3_bn1_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit3_bn1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit3_bn1_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit3_bn2_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit3_bn2_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit3_bn2_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit3_bn2_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit3_bn3_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit3_bn3_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit3_bn3_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage1_unit3_bn3_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit1_bn1_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit1_bn1_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit1_bn1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit1_bn1_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit1_bn2_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit1_bn2_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit1_bn2_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit1_bn2_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit1_bn3_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit1_bn3_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit1_bn3_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit1_bn3_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit2_bn1_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit2_bn1_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit2_bn1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit2_bn1_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit2_bn2_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit2_bn2_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit2_bn2_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit2_bn2_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit2_bn3_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit2_bn3_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit2_bn3_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit2_bn3_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit3_bn1_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit3_bn1_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit3_bn1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit3_bn1_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit3_bn2_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit3_bn2_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit3_bn2_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit3_bn2_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit3_bn3_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit3_bn3_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit3_bn3_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit3_bn3_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit4_bn1_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit4_bn1_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit4_bn1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit4_bn1_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit4_bn2_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit4_bn2_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit4_bn2_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit4_bn2_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit4_bn3_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit4_bn3_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit4_bn3_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage2_unit4_bn3_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit1_bn1_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit1_bn1_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit1_bn1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit1_bn1_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit1_bn2_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit1_bn2_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit1_bn2_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit1_bn2_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit1_bn3_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit1_bn3_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit1_bn3_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit1_bn3_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit2_bn1_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit2_bn1_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit2_bn1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit2_bn1_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit2_bn2_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit2_bn2_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit2_bn2_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit2_bn2_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit2_bn3_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit2_bn3_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit2_bn3_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit2_bn3_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit3_bn1_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit3_bn1_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit3_bn1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit3_bn1_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit3_bn2_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit3_bn2_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit3_bn2_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit3_bn2_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit3_bn3_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit3_bn3_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit3_bn3_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit3_bn3_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit4_bn1_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit4_bn1_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit4_bn1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit4_bn1_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit4_bn2_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit4_bn2_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit4_bn2_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit4_bn2_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit4_bn3_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit4_bn3_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit4_bn3_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit4_bn3_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit5_bn1_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit5_bn1_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit5_bn1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit5_bn1_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit5_bn2_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit5_bn2_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit5_bn2_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit5_bn2_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit5_bn3_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit5_bn3_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit5_bn3_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit5_bn3_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit6_bn1_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit6_bn1_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit6_bn1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit6_bn1_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit6_bn2_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit6_bn2_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit6_bn2_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit6_bn2_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit6_bn3_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit6_bn3_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit6_bn3_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage3_unit6_bn3_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit1_bn1_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit1_bn1_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit1_bn1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit1_bn1_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit1_bn2_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit1_bn2_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit1_bn2_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit1_bn2_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit1_bn3_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit1_bn3_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit1_bn3_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit1_bn3_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit2_bn1_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit2_bn1_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit2_bn1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit2_bn1_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit2_bn2_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit2_bn2_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit2_bn2_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit2_bn2_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit2_bn3_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit2_bn3_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit2_bn3_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit2_bn3_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit3_bn1_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit3_bn1_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit3_bn1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit3_bn1_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit3_bn2_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit3_bn2_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit3_bn2_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit3_bn2_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit3_bn3_gamma', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit3_bn3_beta', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit3_bn3_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'stage4_unit3_bn3_moving_var', graph 'plot' size too small for label\n", + "Warning: node 'bn1_moving_mean', graph 'plot' size too small for label\n", + "Warning: node 'bn1_moving_var', graph 'plot' size too small for label\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mdot\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@3154bd24" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val dot = Visualization.plotNetwork(symbol = resnet)\n", + "dot.render(engine = \"dot\", fileName = \"resnet\", path = \"model/\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Both argument parameters and auxiliary parameters (e.g mean/std in batch normalization layer) are stored as a dictionary of string name and ndarray value (see [ndarray_scala.ipynb](https://github.com/dmlc/mxnet-notebooks/blob/master/scala/basic/ndarray_scala.ipynb). The arguments contain consist of weight and bias.\n", + "\n", + "You can see full output by `println` command" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mres4\u001b[0m: \u001b[32mMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mNDArray\u001b[0m] = \u001b[33mMap\u001b[0m(\n", + " \u001b[32m\"stage1_unit3_conv3_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@9a4b8176,\n", + " \u001b[32m\"stage3_unit2_bn1_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@6abf1f48,\n", + " \u001b[32m\"stage2_unit3_conv2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@9df221ba,\n", + " \u001b[32m\"stage4_unit3_bn1_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@75d224a8,\n", + " \u001b[32m\"stage1_unit3_bn1_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@640dd0ce,\n", + " \u001b[32m\"stage3_unit1_conv3_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@abdd2283,\n", + " \u001b[32m\"stage2_unit1_bn3_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@b816e9c2,\n", + " \u001b[32m\"stage2_unit4_conv3_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@7a388895,\n", + " \u001b[32m\"stage2_unit4_bn3_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@f6083d12,\n", + " \u001b[32m\"stage3_unit4_bn1_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@abfbce39,\n", + " \u001b[32m\"stage3_unit6_conv2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@52b0e4a3,\n", + " \u001b[32m\"stage2_unit2_bn3_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@fce672e1,\n", + " \u001b[32m\"stage3_unit2_bn3_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@77fe9b1f,\n", + " \u001b[32m\"stage1_unit2_bn2_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@d9e38fd9,\n", + " \u001b[32m\"stage4_unit1_conv2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@9ed3362a,\n", + " \u001b[32m\"stage2_unit2_conv2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@b17c306f,\n", + " \u001b[32m\"stage3_unit6_bn2_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@5ff9b8cb,\n", + " \u001b[32m\"stage2_unit2_bn2_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@c3f656a6,\n", + " \u001b[32m\"stage1_unit2_bn1_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@af1280a8,\n", + "\u001b[33m...\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "argParamsResnet" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "while auxiliaries contains the the mean and std for the batch normalization layers." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mres5\u001b[0m: \u001b[32mMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mNDArray\u001b[0m] = \u001b[33mMap\u001b[0m(\n", + " \u001b[32m\"stage2_unit2_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@aa539dcc,\n", + " \u001b[32m\"stage3_unit6_bn2_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@6e85d8da,\n", + " \u001b[32m\"stage2_unit2_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@fdc34046,\n", + " \u001b[32m\"stage3_unit1_bn2_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@8cbb07ea,\n", + " \u001b[32m\"stage1_unit3_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@673a1594,\n", + " \u001b[32m\"stage2_unit4_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@a2bb7ded,\n", + " \u001b[32m\"stage2_unit4_bn3_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@dacdc026,\n", + " \u001b[32m\"stage3_unit1_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@8cbcc0cc,\n", + " \u001b[32m\"stage2_unit3_bn2_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@fe5da542,\n", + " \u001b[32m\"stage2_unit1_bn3_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@9a7dfe4b,\n", + " \u001b[32m\"stage1_unit2_bn1_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@698017c1,\n", + " \u001b[32m\"stage4_unit3_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@6ea56feb,\n", + " \u001b[32m\"stage1_unit2_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@b32bb14c,\n", + " \u001b[32m\"stage3_unit6_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@733075d0,\n", + " \u001b[32m\"stage3_unit5_bn2_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@8a9da512,\n", + " \u001b[32m\"stage2_unit2_bn2_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@fad6d5c4,\n", + " \u001b[32m\"stage2_unit1_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@c8e406da,\n", + " \u001b[32m\"stage1_unit1_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@f25cd69,\n", + " \u001b[32m\"stage3_unit3_bn3_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@8bac6514,\n", + "\u001b[33m...\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "auxParamsResnet" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we create an executable module (see [module_scala.ipynb](https://github.com/dmlc/mxnet-notebooks/blob/master/scala/basic/module_scala.ipynb)) on GPU 0. To use a difference device, we just need to change the context, e.g. Context.cpu(0) for CPU and Context.gpu(2) for the 3rd GPU." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mmod\u001b[0m: \u001b[32mModule\u001b[0m = ml.dmlc.mxnet.module.Module@56ca816d" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val mod = new Module(resnet, contexts = Context.cpu())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The ResNet is trained with RGB images of size 224 x 224. The training data is feed by the variable data. We bind the module with the input shape and specify that it is only for predicting. The number 1 added before the image shape (3x224x224) means that we will only predict one image each time. Next we set the loaded parameters. Now the module is ready to run." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "java.lang.NullPointerException", + " ml.dmlc.mxnet.module.DataParallelExecutorGroup.ml$dmlc$mxnet$module$DataParallelExecutorGroup$$bindIthExec(DataParallelExecutorGroup.scala:641)", + " ml.dmlc.mxnet.module.DataParallelExecutorGroup$$anonfun$bindExec$1.apply(DataParallelExecutorGroup.scala:354)", + " ml.dmlc.mxnet.module.DataParallelExecutorGroup$$anonfun$bindExec$1.apply(DataParallelExecutorGroup.scala:353)", + " scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)", + " scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)", + " scala.collection.immutable.Range.foreach(Range.scala:160)", + " scala.collection.TraversableLike$class.map(TraversableLike.scala:234)", + " scala.collection.AbstractTraversable.map(Traversable.scala:104)", + " ml.dmlc.mxnet.module.DataParallelExecutorGroup.bindExec(DataParallelExecutorGroup.scala:353)", + " ml.dmlc.mxnet.module.DataParallelExecutorGroup.(DataParallelExecutorGroup.scala:315)", + " ml.dmlc.mxnet.module.DataParallelExecutorGroup$Builder.build(DataParallelExecutorGroup.scala:223)", + " ml.dmlc.mxnet.module.Module.bind(Module.scala:243)", + " cmd4$$user$$anonfun$1.apply$mcV$sp(Main.scala:38)" + ] + } + ], + "source": [ + "val dataShapesResnet = ListMap(\"data\" -> Shape(1, 3, 224, 224))\n", + "mod.bind(dataShapes=dataShapesResnet, forTraining = false)\n", + "//mod.setParams(argParams, auxParams)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mres15_0\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mDataDesc\u001b[0m] = \u001b[33mVector\u001b[0m(DataDesc[data,(1,3,224,224),Float32,NCHW])\n", + "\u001b[36mres15_1\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mString\u001b[0m] = \u001b[33mVector\u001b[0m(\u001b[32m\"data\"\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mod.dataShapes\n", + "mod.dataNames\n", + "//argParams" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "java.lang.NullPointerException", + " ml.dmlc.mxnet.module.Module.initParams(Module.scala:122)", + " ml.dmlc.mxnet.module.BaseModule.setParams(BaseModule.scala:303)", + " cmd16$$user$$anonfun$1.apply$mcV$sp(Main.scala:47)" + ] + } + ], + "source": [ + "mod.setParams(argParamsResnet, auxParamsResnet)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Scala 2.11", + "language": "scala211", + "name": "scala211" + }, + "language_info": { + "codemirror_mode": "text/x-scala", + "file_extension": ".scala", + "mimetype": "text/x-scala", + "name": "scala211", + "pygments_lexer": "scala", + "version": "2.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From 493e4e49e9cafc4050509a0f69836405803042be Mon Sep 17 00:00:00 2001 From: Nagmote Date: Thu, 23 Mar 2017 16:21:27 -0700 Subject: [PATCH 13/21] wget made non verbose --- scala/basic/predict_scala.ipynb | 2030 +------------------------------ 1 file changed, 6 insertions(+), 2024 deletions(-) diff --git a/scala/basic/predict_scala.ipynb b/scala/basic/predict_scala.ipynb index a2d750829..3f381e038 100644 --- a/scala/basic/predict_scala.ipynb +++ b/scala/basic/predict_scala.ipynb @@ -101,2035 +101,17 @@ "cell_type": "code", "execution_count": 3, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "--2017-03-23 13:06:52-- http://data.mxnet.io/models/imagenet/resnet/50-layers/resnet-50-symbol.json\n", - "Resolving data.mxnet.io... 54.208.175.7\n", - "Connecting to data.mxnet.io|54.208.175.7|:80... connected.\n", - "HTTP request sent, awaiting response... 200 OK\n", - "Length: 76172 (74K) [application/json]\n", - "Saving to: ‘model/resnet-50-symbol.json’\n", - "\n", - " 0K .......... .......... .......... .......... .......... 67% 134K 0s\n", - " 50K .......... .......... .... 100% 67.4K=0.7s\n", - "\n", - "2017-03-23 13:06:53 (101 KB/s) - ‘model/resnet-50-symbol.json’ saved [76172/76172]\n", - "\n", - "--2017-03-23 13:06:53-- http://data.mxnet.io/models/imagenet/resnet/50-layers/resnet-50-0000.params\n", - "Resolving data.mxnet.io... 54.208.175.7\n", - "Connecting to data.mxnet.io|54.208.175.7|:80... connected.\n", - "HTTP request sent, awaiting response... 200 OK\n", - "Length: 102395376 (98M)\n", - "Saving to: ‘model/resnet-50-0000.params’\n", - "\n", - " 0K .......... .......... .......... .......... .......... 0% 149K 11m11s\n", - " 50K .......... .......... .......... .......... .......... 0% 278K 8m35s\n", - " 100K .......... .......... .......... .......... .......... 0% 286K 7m39s\n", - " 150K .......... .......... .......... .......... .......... 0% 294K 7m9s\n", - " 200K .......... .......... .......... .......... .......... 0% 294K 6m51s\n", - " 250K .......... .......... .......... .......... .......... 0% 283K 6m41s\n", - " 300K .......... .......... .......... .......... .......... 0% 162K 7m12s\n", - " 350K .......... .......... .......... .......... .......... 0% 26.8K 14m2s\n", - " 400K .......... .......... .......... .......... .......... 0% 95.1K 14m24s\n", - " 450K .......... .......... .......... .......... .......... 0% 189K 13m50s\n", - " 500K .......... .......... .......... .......... .......... 0% 236K 13m13s\n", - " 550K .......... .......... .......... .......... .......... 0% 280K 12m36s\n", - " 600K .......... .......... .......... .......... .......... 0% 211K 12m14s\n", - " 650K .......... .......... .......... .......... .......... 0% 161K 12m5s\n", - " 700K .......... .......... .......... .......... .......... 0% 562K 11m28s\n", - " 750K .......... .......... .......... .......... .......... 0% 212K 11m14s\n", - " 800K .......... .......... .......... .......... .......... 0% 301K 10m53s\n", - " 850K .......... .......... .......... .......... .......... 0% 478K 10m28s\n", - " 900K .......... .......... .......... .......... .......... 0% 539K 10m4s\n", - " 950K .......... .......... .......... .......... .......... 1% 317K 9m50s\n", - " 1000K .......... .......... .......... .......... .......... 1% 484K 9m31s\n", - " 1050K .......... .......... .......... .......... .......... 1% 588K 9m12s\n", - " 1100K .......... .......... .......... .......... .......... 1% 534K 8m56s\n", - " 1150K .......... .......... .......... .......... .......... 1% 295K 8m47s\n", - " 1200K .......... .......... .......... .......... .......... 1% 528K 8m34s\n", - " 1250K .......... .......... .......... .......... .......... 1% 597K 8m20s\n", - " 1300K .......... .......... .......... .......... .......... 1% 594K 8m7s\n", - " 1350K .......... .......... .......... .......... .......... 1% 564K 7m56s\n", - " 1400K .......... .......... .......... .......... .......... 1% 592K 7m45s\n", - " 1450K .......... .......... .......... .......... .......... 1% 587K 7m35s\n", - " 1500K .......... .......... .......... .......... .......... 1% 313K 7m30s\n", - " 1550K .......... .......... .......... .......... .......... 1% 604K 7m21s\n", - " 1600K .......... .......... .......... .......... .......... 1% 608K 7m12s\n", - " 1650K .......... .......... .......... .......... .......... 1% 559K 7m5s\n", - " 1700K .......... .......... .......... .......... .......... 1% 608K 6m57s\n", - " 1750K .......... .......... .......... .......... .......... 1% 533K 6m50s\n", - " 1800K .......... .......... .......... .......... .......... 1% 592K 6m43s\n", - " 1850K .......... .......... .......... .......... .......... 1% 481K 6m38s\n", - " 1900K .......... .......... .......... .......... .......... 1% 464K 6m33s\n", - " 1950K .......... .......... .......... .......... .......... 2% 531K 6m27s\n", - " 2000K .......... .......... .......... .......... .......... 2% 437K 6m23s\n", - " 2050K .......... .......... .......... .......... .......... 2% 446K 6m19s\n", - " 2100K .......... .......... .......... .......... .......... 2% 596K 6m14s\n", - " 2150K .......... .......... .......... .......... .......... 2% 303K 6m13s\n", - " 2200K .......... .......... .......... .......... .......... 2% 4.57M 6m5s\n", - " 2250K .......... .......... .......... .......... .......... 2% 584K 6m0s\n", - " 2300K .......... .......... .......... .......... .......... 2% 545K 5m56s\n", - " 2350K .......... .......... .......... .......... .......... 2% 463K 5m53s\n", - " 2400K .......... .......... .......... .......... .......... 2% 383K 5m51s\n", - " 2450K .......... .......... .......... .......... .......... 2% 374K 5m49s\n", - " 2500K .......... .......... .......... .......... .......... 2% 320K 5m48s\n", - " 2550K .......... .......... .......... .......... .......... 2% 75.1K 6m6s\n", - " 2600K .......... .......... .......... .......... .......... 2% 71.3M 5m59s\n", - " 2650K .......... .......... .......... .......... .......... 2% 23.4K 7m9s\n", - " 2700K .......... .......... .......... .......... .......... 2% 125K 7m15s\n", - " 2750K .......... .......... .......... .......... .......... 2% 200K 7m16s\n", - " 2800K .......... .......... .......... .......... .......... 2% 206K 7m16s\n", - " 2850K .......... .......... .......... .......... .......... 2% 298K 7m14s\n", - " 2900K .......... .......... .......... .......... .......... 2% 299K 7m12s\n", - " 2950K .......... .......... .......... .......... .......... 3% 303K 7m10s\n", - " 3000K .......... .......... .......... .......... .......... 3% 545K 7m6s\n", - " 3050K .......... .......... .......... .......... .......... 3% 302K 7m4s\n", - " 3100K .......... .......... .......... .......... .......... 3% 553K 7m0s\n", - " 3150K .......... .......... .......... .......... .......... 3% 292K 6m58s\n", - " 3200K .......... .......... .......... .......... .......... 3% 596K 6m54s\n", - " 3250K .......... .......... .......... .......... .......... 3% 574K 6m50s\n", - " 3300K .......... .......... .......... .......... .......... 3% 189K 6m51s\n", - " 3350K .......... .......... .......... .......... .......... 3% 69.3M 6m45s\n", - " 3400K .......... .......... .......... .......... .......... 3% 245K 6m45s\n", - " 3450K .......... .......... .......... .......... .......... 3% 349K 6m43s\n", - " 3500K .......... .......... .......... .......... .......... 3% 302K 6m41s\n", - " 3550K .......... .......... .......... .......... .......... 3% 362K 6m39s\n", - " 3600K .......... .......... .......... .......... .......... 3% 85.1K 6m49s\n", - " 3650K .......... .......... .......... .......... .......... 3% 198K 6m50s\n", - " 3700K .......... .......... .......... .......... .......... 3% 68.7K 7m3s\n", - " 3750K .......... .......... .......... .......... .......... 3% 146K 7m6s\n", - " 3800K .......... .......... .......... .......... .......... 3% 152K 7m8s\n", - " 3850K .......... .......... .......... .......... .......... 3% 209K 7m8s\n", - " 3900K .......... .......... .......... .......... .......... 3% 267K 7m7s\n", - " 3950K .......... .......... .......... .......... .......... 4% 268K 7m6s\n", - " 4000K .......... .......... .......... .......... .......... 4% 292K 7m5s\n", - " 4050K .......... .......... .......... .......... .......... 4% 306K 7m3s\n", - " 4100K .......... .......... .......... .......... .......... 4% 342K 7m1s\n", - " 4150K .......... .......... .......... .......... .......... 4% 485K 6m58s\n", - " 4200K .......... .......... .......... .......... .......... 4% 349K 6m56s\n", - " 4250K .......... .......... .......... .......... .......... 4% 388K 6m54s\n", - " 4300K .......... .......... .......... .......... .......... 4% 572K 6m51s\n", - " 4350K .......... .......... .......... .......... .......... 4% 579K 6m48s\n", - " 4400K .......... .......... .......... .......... .......... 4% 456K 6m46s\n", - " 4450K .......... .......... .......... .......... .......... 4% 368K 6m44s\n", - " 4500K .......... .......... .......... .......... .......... 4% 561K 6m41s\n", - " 4550K .......... .......... .......... .......... .......... 4% 587K 6m38s\n", - " 4600K .......... .......... .......... .......... .......... 4% 598K 6m36s\n", - " 4650K .......... .......... .......... .......... .......... 4% 327K 6m34s\n", - " 4700K .......... .......... .......... .......... .......... 4% 566K 6m32s\n", - " 4750K .......... .......... .......... .......... .......... 4% 177K 6m33s\n", - " 4800K .......... .......... .......... .......... .......... 4% 15.8M 6m29s\n", - " 4850K .......... .......... .......... .......... .......... 4% 194K 6m30s\n", - " 4900K .......... .......... .......... .......... .......... 4% 548K 6m27s\n", - " 4950K .......... .......... .......... .......... .......... 5% 297K 6m26s\n", - " 5000K .......... .......... .......... .......... .......... 5% 305K 6m25s\n", - " 5050K .......... .......... .......... .......... .......... 5% 552K 6m23s\n", - " 5100K .......... .......... .......... .......... .......... 5% 306K 6m22s\n", - " 5150K .......... .......... .......... .......... .......... 5% 509K 6m20s\n", - " 5200K .......... .......... .......... .......... .......... 5% 565K 6m18s\n", - " 5250K .......... .......... .......... .......... .......... 5% 367K 6m17s\n", - " 5300K .......... .......... .......... .......... .......... 5% 213K 6m17s\n", - " 5350K .......... .......... .......... .......... .......... 5% 301K 6m16s\n", - " 5400K .......... .......... .......... .......... .......... 5% 130K 6m19s\n", - " 5450K .......... .......... .......... .......... .......... 5% 181K 6m20s\n", - " 5500K .......... .......... .......... .......... .......... 5% 91.4K 6m26s\n", - " 5550K .......... .......... .......... .......... .......... 5% 129K 6m29s\n", - " 5600K .......... .......... .......... .......... .......... 5% 116K 6m32s\n", - " 5650K .......... .......... .......... .......... .......... 5% 103K 6m37s\n", - " 5700K .......... .......... .......... .......... .......... 5% 105K 6m41s\n", - " 5750K .......... .......... .......... .......... .......... 5% 129K 6m44s\n", - " 5800K .......... .......... .......... .......... .......... 5% 148K 6m45s\n", - " 5850K .......... .......... .......... .......... .......... 5% 156K 6m47s\n", - " 5900K .......... .......... .......... .......... .......... 5% 179K 6m48s\n", - " 5950K .......... .......... .......... .......... .......... 6% 197K 6m48s\n", - " 6000K .......... .......... .......... .......... .......... 6% 45.1K 7m2s\n", - " 6050K .......... .......... .......... .......... .......... 6% 144K 7m3s\n", - " 6100K .......... .......... .......... .......... .......... 6% 156K 7m5s\n", - " 6150K .......... .......... .......... .......... .......... 6% 263K 7m4s\n", - " 6200K .......... .......... .......... .......... .......... 6% 203K 7m4s\n", - " 6250K .......... .......... .......... .......... .......... 6% 296K 7m3s\n", - " 6300K .......... .......... .......... .......... .......... 6% 312K 7m2s\n", - " 6350K .......... .......... .......... .......... .......... 6% 505K 7m0s\n", - " 6400K .......... .......... .......... .......... .......... 6% 303K 6m58s\n", - " 6450K .......... .......... .......... .......... .......... 6% 554K 6m56s\n", - " 6500K .......... .......... .......... .......... .......... 6% 315K 6m55s\n", - " 6550K .......... .......... .......... .......... .......... 6% 537K 6m53s\n", - " 6600K .......... .......... .......... .......... .......... 6% 566K 6m51s\n", - " 6650K .......... .......... .......... .......... .......... 6% 342K 6m50s\n", - " 6700K .......... .......... .......... .......... .......... 6% 519K 6m48s\n", - " 6750K .......... .......... .......... .......... .......... 6% 513K 6m46s\n", - " 6800K .......... .......... .......... .......... .......... 6% 477K 6m44s\n", - " 6850K .......... .......... .......... .......... .......... 6% 575K 6m42s\n", - " 6900K .......... .......... .......... .......... .......... 6% 412K 6m41s\n", - " 6950K .......... .......... .......... .......... .......... 7% 583K 6m39s\n", - " 7000K .......... .......... .......... .......... .......... 7% 583K 6m37s\n", - " 7050K .......... .......... .......... .......... .......... 7% 568K 6m35s\n", - " 7100K .......... .......... .......... .......... .......... 7% 401K 6m34s\n", - " 7150K .......... .......... .......... .......... .......... 7% 601K 6m32s\n", - " 7200K .......... .......... .......... .......... .......... 7% 601K 6m30s\n", - " 7250K .......... .......... .......... .......... .......... 7% 594K 6m28s\n", - " 7300K .......... .......... .......... .......... .......... 7% 574K 6m26s\n", - " 7350K .......... .......... .......... .......... .......... 7% 596K 6m25s\n", - " 7400K .......... .......... .......... .......... .......... 7% 585K 6m23s\n", - " 7450K .......... .......... .......... .......... .......... 7% 415K 6m22s\n", - " 7500K .......... .......... .......... .......... .......... 7% 593K 6m20s\n", - " 7550K .......... .......... .......... .......... .......... 7% 571K 6m18s\n", - " 7600K .......... .......... .......... .......... .......... 7% 586K 6m17s\n", - " 7650K .......... .......... .......... .......... .......... 7% 590K 6m15s\n", - " 7700K .......... .......... .......... .......... .......... 7% 584K 6m13s\n", - " 7750K .......... .......... .......... .......... .......... 7% 608K 6m12s\n", - " 7800K .......... .......... .......... .......... .......... 7% 595K 6m10s\n", - " 7850K .......... .......... .......... .......... .......... 7% 288K 6m10s\n", - " 7900K .......... .......... .......... .......... .......... 7% 576K 6m8s\n", - " 7950K .......... .......... .......... .......... .......... 8% 371K 6m7s\n", - " 8000K .......... .......... .......... .......... .......... 8% 377K 6m6s\n", - " 8050K .......... .......... .......... .......... .......... 8% 413K 6m5s\n", - " 8100K .......... .......... .......... .......... .......... 8% 400K 6m4s\n", - " 8150K .......... .......... .......... .......... .......... 8% 572K 6m3s\n", - " 8200K .......... .......... .......... .......... .......... 8% 331K 6m2s\n", - " 8250K .......... .......... .......... .......... .......... 8% 563K 6m1s\n", - " 8300K .......... .......... .......... .......... .......... 8% 565K 5m59s\n", - " 8350K .......... .......... .......... .......... .......... 8% 566K 5m58s\n", - " 8400K .......... .......... .......... .......... .......... 8% 591K 5m56s\n", - " 8450K .......... .......... .......... .......... .......... 8% 606K 5m55s\n", - " 8500K .......... .......... .......... .......... .......... 8% 604K 5m54s\n", - " 8550K .......... .......... .......... .......... .......... 8% 590K 5m52s\n", - " 8600K .......... .......... .......... .......... .......... 8% 507K 5m51s\n", - " 8650K .......... .......... .......... .......... .......... 8% 584K 5m50s\n", - " 8700K .......... .......... .......... .......... .......... 8% 574K 5m49s\n", - " 8750K .......... .......... .......... .......... .......... 8% 594K 5m47s\n", - " 8800K .......... .......... .......... .......... .......... 8% 592K 5m46s\n", - " 8850K .......... .......... .......... .......... .......... 8% 591K 5m45s\n", - " 8900K .......... .......... .......... .......... .......... 8% 588K 5m43s\n", - " 8950K .......... .......... .......... .......... .......... 9% 606K 5m42s\n", - " 9000K .......... .......... .......... .......... .......... 9% 594K 5m41s\n", - " 9050K .......... .......... .......... .......... .......... 9% 607K 5m40s\n", - " 9100K .......... .......... .......... .......... .......... 9% 612K 5m38s\n", - " 9150K .......... .......... .......... .......... .......... 9% 642K 5m37s\n", - " 9200K .......... .......... .......... .......... .......... 9% 613K 5m36s\n", - " 9250K .......... .......... .......... .......... .......... 9% 1.28M 5m34s\n", - " 9300K .......... .......... .......... .......... .......... 9% 609K 5m33s\n", - " 9350K .......... .......... .......... .......... .......... 9% 611K 5m32s\n", - " 9400K .......... .......... .......... .......... .......... 9% 720K 5m31s\n", - " 9450K .......... .......... .......... .......... .......... 9% 589K 5m30s\n", - " 9500K .......... .......... .......... .......... .......... 9% 612K 5m29s\n", - " 9550K .......... .......... .......... .......... .......... 9% 746K 5m27s\n", - " 9600K .......... .......... .......... .......... .......... 9% 598K 5m26s\n", - " 9650K .......... .......... .......... .......... .......... 9% 607K 5m25s\n", - " 9700K .......... .......... .......... .......... .......... 9% 601K 5m24s\n", - " 9750K .......... .......... .......... .......... .......... 9% 1.03M 5m23s\n", - " 9800K .......... .......... .......... .......... .......... 9% 883K 5m21s\n", - " 9850K .......... .......... .......... .......... .......... 9% 597K 5m20s\n", - " 9900K .......... .......... .......... .......... .......... 9% 740K 5m19s\n", - " 9950K .......... .......... .......... .......... .......... 10% 584K 5m18s\n", - " 10000K .......... .......... .......... .......... .......... 10% 604K 5m17s\n", - " 10050K .......... .......... .......... .......... .......... 10% 630K 5m16s\n", - " 10100K .......... .......... .......... .......... .......... 10% 1.18M 5m15s\n", - " 10150K .......... .......... .......... .......... .......... 10% 619K 5m14s\n", - " 10200K .......... .......... .......... .......... .......... 10% 647K 5m13s\n", - " 10250K .......... .......... .......... .......... .......... 10% 915K 5m11s\n", - " 10300K .......... .......... .......... .......... .......... 10% 609K 5m10s\n", - " 10350K .......... .......... .......... .......... .......... 10% 1.26M 5m9s\n", - " 10400K .......... .......... .......... .......... .......... 10% 616K 5m8s\n", - " 10450K .......... .......... .......... .......... .......... 10% 682K 5m7s\n", - " 10500K .......... .......... .......... .......... .......... 10% 814K 5m6s\n", - " 10550K .......... .......... .......... .......... .......... 10% 713K 5m5s\n", - " 10600K .......... .......... .......... .......... .......... 10% 1020K 5m4s\n", - " 10650K .......... .......... .......... .......... .......... 10% 727K 5m3s\n", - " 10700K .......... .......... .......... .......... .......... 10% 788K 5m2s\n", - " 10750K .......... .......... .......... .......... .......... 10% 693K 5m1s\n", - " 10800K .......... .......... .......... .......... .......... 10% 962K 5m0s\n", - " 10850K .......... .......... .......... .......... .......... 10% 752K 4m59s\n", - " 10900K .......... .......... .......... .......... .......... 10% 781K 4m58s\n", - " 10950K .......... .......... .......... .......... .......... 11% 774K 4m57s\n", - " 11000K .......... .......... .......... .......... .......... 11% 850K 4m56s\n", - " 11050K .......... .......... .......... .......... .......... 11% 817K 4m55s\n", - " 11100K .......... .......... .......... .......... .......... 11% 755K 4m54s\n", - " 11150K .......... .......... .......... .......... .......... 11% 809K 4m53s\n", - " 11200K .......... .......... .......... .......... .......... 11% 829K 4m52s\n", - " 11250K .......... .......... .......... .......... .......... 11% 611K 4m51s\n", - " 11300K .......... .......... .......... .......... .......... 11% 1.05M 4m50s\n", - " 11350K .......... .......... .......... .......... .......... 11% 802K 4m49s\n", - " 11400K .......... .......... .......... .......... .......... 11% 652K 4m48s\n", - " 11450K .......... .......... .......... .......... .......... 11% 1.23M 4m47s\n", - " 11500K .......... .......... .......... .......... .......... 11% 647K 4m46s\n", - " 11550K .......... .......... .......... .......... .......... 11% 913K 4m45s\n", - " 11600K .......... .......... .......... .......... .......... 11% 630K 4m44s\n", - " 11650K .......... .......... .......... .......... .......... 11% 1.34M 4m43s\n", - " 11700K .......... .......... .......... .......... .......... 11% 690K 4m42s\n", - " 11750K .......... .......... .......... .......... .......... 11% 777K 4m42s\n", - " 11800K .......... .......... .......... .......... .......... 11% 691K 4m41s\n", - " 11850K .......... .......... .......... .......... .......... 11% 1.53M 4m40s\n", - " 11900K .......... .......... .......... .......... .......... 11% 812K 4m39s\n", - " 11950K .......... .......... .......... .......... .......... 12% 694K 4m38s\n", - " 12000K .......... .......... .......... .......... .......... 12% 1.44M 4m37s\n", - " 12050K .......... .......... .......... .......... .......... 12% 635K 4m36s\n", - " 12100K .......... .......... .......... .......... .......... 12% 862K 4m35s\n", - " 12150K .......... .......... .......... .......... .......... 12% 1.26M 4m34s\n", - " 12200K .......... .......... .......... .......... .......... 12% 643K 4m34s\n", - " 12250K .......... .......... .......... .......... .......... 12% 996K 4m33s\n", - " 12300K .......... .......... .......... .......... .......... 12% 66.2K 4m37s\n", - " 12350K .......... .......... .......... .......... .......... 12% 58.8M 4m36s\n", - " 12400K .......... .......... .......... .......... .......... 12% 120K 4m37s\n", - " 12450K .......... .......... .......... .......... .......... 12% 299K 4m37s\n", - " 12500K .......... .......... .......... .......... .......... 12% 301K 4m37s\n", - " 12550K .......... .......... .......... .......... .......... 12% 309K 4m37s\n", - " 12600K .......... .......... .......... .......... .......... 12% 509K 4m36s\n", - " 12650K .......... .......... .......... .......... .......... 12% 331K 4m36s\n", - " 12700K .......... .......... .......... .......... .......... 12% 427K 4m36s\n", - " 12750K .......... .......... .......... .......... .......... 12% 374K 4m35s\n", - " 12800K .......... .......... .......... .......... .......... 12% 466K 4m35s\n", - " 12850K .......... .......... .......... .......... .......... 12% 560K 4m34s\n", - " 12900K .......... .......... .......... .......... .......... 12% 381K 4m34s\n", - " 12950K .......... .......... .......... .......... .......... 13% 544K 4m33s\n", - " 13000K .......... .......... .......... .......... .......... 13% 587K 4m33s\n", - " 13050K .......... .......... .......... .......... .......... 13% 568K 4m32s\n", - " 13100K .......... .......... .......... .......... .......... 13% 479K 4m32s\n", - " 13150K .......... .......... .......... .......... .......... 13% 572K 4m31s\n", - " 13200K .......... .......... .......... .......... .......... 13% 604K 4m30s\n", - " 13250K .......... .......... .......... .......... .......... 13% 407K 4m30s\n", - " 13300K .......... .......... .......... .......... .......... 13% 584K 4m29s\n", - " 13350K .......... .......... .......... .......... .......... 13% 595K 4m29s\n", - " 13400K .......... .......... .......... .......... .......... 13% 574K 4m28s\n", - " 13450K .......... .......... .......... .......... .......... 13% 515K 4m28s\n", - " 13500K .......... .......... .......... .......... .......... 13% 605K 4m27s\n", - " 13550K .......... .......... .......... .......... .......... 13% 601K 4m26s\n", - " 13600K .......... .......... .......... .......... .......... 13% 612K 4m26s\n", - " 13650K .......... .......... .......... .......... .......... 13% 593K 4m25s\n", - " 13700K .......... .......... .......... .......... .......... 13% 600K 4m25s\n", - " 13750K .......... .......... .......... .......... .......... 13% 571K 4m24s\n", - " 13800K .......... .......... .......... .......... .......... 13% 603K 4m23s\n", - " 13850K .......... .......... .......... .......... .......... 13% 581K 4m23s\n", - " 13900K .......... .......... .......... .......... .......... 13% 608K 4m22s\n", - " 13950K .......... .......... .......... .......... .......... 14% 603K 4m22s\n", - " 14000K .......... .......... .......... .......... .......... 14% 600K 4m21s\n", - " 14050K .......... .......... .......... .......... .......... 14% 639K 4m20s\n", - " 14100K .......... .......... .......... .......... .......... 14% 574K 4m20s\n", - " 14150K .......... .......... .......... .......... .......... 14% 589K 4m19s\n", - " 14200K .......... .......... .......... .......... .......... 14% 749K 4m19s\n", - " 14250K .......... .......... .......... .......... .......... 14% 589K 4m18s\n", - " 14300K .......... .......... .......... .......... .......... 14% 588K 4m18s\n", - " 14350K .......... .......... .......... .......... .......... 14% 614K 4m17s\n", - " 14400K .......... .......... .......... .......... .......... 14% 893K 4m16s\n", - " 14450K .......... .......... .......... .......... .......... 14% 612K 4m16s\n", - " 14500K .......... .......... .......... .......... .......... 14% 1011K 4m15s\n", - " 14550K .......... .......... .......... .......... .......... 14% 612K 4m15s\n", - " 14600K .......... .......... .......... .......... .......... 14% 611K 4m14s\n", - " 14650K .......... .......... .......... .......... .......... 14% 683K 4m13s\n", - " 14700K .......... .......... .......... .......... .......... 14% 614K 4m13s\n", - " 14750K .......... .......... .......... .......... .......... 14% 641K 4m12s\n", - " 14800K .......... .......... .......... .......... .......... 14% 679K 4m12s\n", - " 14850K .......... .......... .......... .......... .......... 14% 616K 4m11s\n", - " 14900K .......... .......... .......... .......... .......... 14% 1.30M 4m10s\n", - " 14950K .......... .......... .......... .......... .......... 15% 606K 4m10s\n", - " 15000K .......... .......... .......... .......... .......... 15% 603K 4m9s\n", - " 15050K .......... .......... .......... .......... .......... 15% 796K 4m9s\n", - " 15100K .......... .......... .......... .......... .......... 15% 626K 4m8s\n", - " 15150K .......... .......... .......... .......... .......... 15% 648K 4m8s\n", - " 15200K .......... .......... .......... .......... .......... 15% 1.30M 4m7s\n", - " 15250K .......... .......... .......... .......... .......... 15% 595K 4m7s\n", - " 15300K .......... .......... .......... .......... .......... 15% 938K 4m6s\n", - " 15350K .......... .......... .......... .......... .......... 15% 625K 4m5s\n", - " 15400K .......... .......... .......... .......... .......... 15% 657K 4m5s\n", - " 15450K .......... .......... .......... .......... .......... 15% 1020K 4m4s\n", - " 15500K .......... .......... .......... .......... .......... 15% 603K 4m4s\n", - " 15550K .......... .......... .......... .......... .......... 15% 1.13M 4m3s\n", - " 15600K .......... .......... .......... .......... .......... 15% 649K 4m2s\n", - " 15650K .......... .......... .......... .......... .......... 15% 906K 4m2s\n", - " 15700K .......... .......... .......... .......... .......... 15% 603K 4m1s\n", - " 15750K .......... .......... .......... .......... .......... 15% 1.25M 4m1s\n", - " 15800K .......... .......... .......... .......... .......... 15% 603K 4m0s\n", - " 15850K .......... .......... .......... .......... .......... 15% 986K 4m0s\n", - " 15900K .......... .......... .......... .......... .......... 15% 617K 3m59s\n", - " 15950K .......... .......... .......... .......... .......... 16% 1.35M 3m58s\n", - " 16000K .......... .......... .......... .......... .......... 16% 615K 3m58s\n", - " 16050K .......... .......... .......... .......... .......... 16% 913K 3m57s\n", - " 16100K .......... .......... .......... .......... .......... 16% 612K 3m57s\n", - " 16150K .......... .......... .......... .......... .......... 16% 1.39M 3m56s\n", - " 16200K .......... .......... .......... .......... .......... 16% 662K 3m56s\n", - " 16250K .......... .......... .......... .......... .......... 16% 754K 3m55s\n", - " 16300K .......... .......... .......... .......... .......... 16% 770K 3m55s\n", - " 16350K .......... .......... .......... .......... .......... 16% 1.05M 3m54s\n", - " 16400K .......... .......... .......... .......... .......... 16% 625K 3m54s\n", - " 16450K .......... .......... .......... .......... .......... 16% 717K 3m53s\n", - " 16500K .......... .......... .......... .......... .......... 16% 899K 3m53s\n", - " 16550K .......... .......... .......... .......... .......... 16% 1.09M 3m52s\n", - " 16600K .......... .......... .......... .......... .......... 16% 743K 3m51s\n", - " 16650K .......... .......... .......... .......... .......... 16% 712K 3m51s\n", - " 16700K .......... .......... .......... .......... .......... 16% 1.61M 3m50s\n", - " 16750K .......... .......... .......... .......... .......... 16% 624K 3m50s\n", - " 16800K .......... .......... .......... .......... .......... 16% 748K 3m49s\n", - " 16850K .......... .......... .......... .......... .......... 16% 933K 3m49s\n", - " 16900K .......... .......... .......... .......... .......... 16% 1.08M 3m48s\n", - " 16950K .......... .......... .......... .......... .......... 17% 706K 3m48s\n", - " 17000K .......... .......... .......... .......... .......... 17% 756K 3m47s\n", - " 17050K .......... .......... .......... .......... .......... 17% 1.77M 3m47s\n", - " 17100K .......... .......... .......... .......... .......... 17% 674K 3m46s\n", - " 17150K .......... .......... .......... .......... .......... 17% 778K 3m46s\n", - " 17200K .......... .......... .......... .......... .......... 17% 1.54M 3m45s\n", - " 17250K .......... .......... .......... .......... .......... 17% 698K 3m45s\n", - " 17300K .......... .......... .......... .......... .......... 17% 821K 3m44s\n", - " 17350K .......... .......... .......... .......... .......... 17% 1.34M 3m44s\n", - " 17400K .......... .......... .......... .......... .......... 17% 713K 3m43s\n", - " 17450K .......... .......... .......... .......... .......... 17% 817K 3m43s\n", - " 17500K .......... .......... .......... .......... .......... 17% 1.39M 3m42s\n", - " 17550K .......... .......... .......... .......... .......... 17% 698K 3m42s\n", - " 17600K .......... .......... .......... .......... .......... 17% 865K 3m41s\n", - " 17650K .......... .......... .......... .......... .......... 17% 1.23M 3m41s\n", - " 17700K .......... .......... .......... .......... .......... 17% 695K 3m40s\n", - " 17750K .......... .......... .......... .......... .......... 17% 769K 3m40s\n", - " 17800K .......... .......... .......... .......... .......... 17% 1.57M 3m39s\n", - " 17850K .......... .......... .......... .......... .......... 17% 692K 3m39s\n", - " 17900K .......... .......... .......... .......... .......... 17% 821K 3m38s\n", - " 17950K .......... .......... .......... .......... .......... 18% 1.57M 3m38s\n", - " 18000K .......... .......... .......... .......... .......... 18% 621K 3m37s\n", - " 18050K .......... .......... .......... .......... .......... 18% 966K 3m37s\n", - " 18100K .......... .......... .......... .......... .......... 18% 1.25M 3m36s\n", - " 18150K .......... .......... .......... .......... .......... 18% 890K 3m36s\n", - " 18200K .......... .......... .......... .......... .......... 18% 1.65M 3m35s\n", - " 18250K .......... .......... .......... .......... .......... 18% 616K 3m35s\n", - " 18300K .......... .......... .......... .......... .......... 18% 886K 3m34s\n", - " 18350K .......... .......... .......... .......... .......... 18% 1.41M 3m34s\n", - " 18400K .......... .......... .......... .......... .......... 18% 657K 3m33s\n", - " 18450K .......... .......... .......... .......... .......... 18% 1.14M 3m33s\n", - " 18500K .......... .......... .......... .......... .......... 18% 1.05M 3m32s\n", - " 18550K .......... .......... .......... .......... .......... 18% 715K 3m32s\n", - " 18600K .......... .......... .......... .......... .......... 18% 2.78M 3m31s\n", - " 18650K .......... .......... .......... .......... .......... 18% 672K 3m31s\n", - " 18700K .......... .......... .......... .......... .......... 18% 928K 3m30s\n", - " 18750K .......... .......... .......... .......... .......... 18% 1.32M 3m30s\n", - " 18800K .......... .......... .......... .......... .......... 18% 211K 3m30s\n", - " 18850K .......... .......... .......... .......... .......... 18% 580K 3m30s\n", - " 18900K .......... .......... .......... .......... .......... 18% 639K 3m30s\n", - " 18950K .......... .......... .......... .......... .......... 19% 402K 3m29s\n", - " 19000K .......... .......... .......... .......... .......... 19% 700K 3m29s\n", - " 19050K .......... .......... .......... .......... .......... 19% 593K 3m29s\n", - " 19100K .......... .......... .......... .......... .......... 19% 601K 3m28s\n", - " 19150K .......... .......... .......... .......... .......... 19% 602K 3m28s\n", - " 19200K .......... .......... .......... .......... .......... 19% 597K 3m28s\n", - " 19250K .......... .......... .......... .......... .......... 19% 303K 3m28s\n", - " 19300K .......... .......... .......... .......... .......... 19% 587K 3m28s\n", - " 19350K .......... .......... .......... .......... .......... 19% 296K 3m28s\n", - " 19400K .......... .......... .......... .......... .......... 19% 343K 3m28s\n", - " 19450K .......... .......... .......... .......... .......... 19% 468K 3m27s\n", - " 19500K .......... .......... .......... .......... .......... 19% 376K 3m27s\n", - " 19550K .......... .......... .......... .......... .......... 19% 460K 3m27s\n", - " 19600K .......... .......... .......... .......... .......... 19% 503K 3m27s\n", - " 19650K .......... .......... .......... .......... .......... 19% 560K 3m26s\n", - " 19700K .......... .......... .......... .......... .......... 19% 418K 3m26s\n", - " 19750K .......... .......... .......... .......... .......... 19% 509K 3m26s\n", - " 19800K .......... .......... .......... .......... .......... 19% 541K 3m26s\n", - " 19850K .......... .......... .......... .......... .......... 19% 536K 3m25s\n", - " 19900K .......... .......... .......... .......... .......... 19% 516K 3m25s\n", - " 19950K .......... .......... .......... .......... .......... 20% 605K 3m25s\n", - " 20000K .......... .......... .......... .......... .......... 20% 436K 3m25s\n", - " 20050K .......... .......... .......... .......... .......... 20% 591K 3m24s\n", - " 20100K .......... .......... .......... .......... .......... 20% 588K 3m24s\n", - " 20150K .......... .......... .......... .......... .......... 20% 593K 3m24s\n", - " 20200K .......... .......... .......... .......... .......... 20% 603K 3m24s\n", - " 20250K .......... .......... .......... .......... .......... 20% 618K 3m23s\n", - " 20300K .......... .......... .......... .......... .......... 20% 606K 3m23s\n", - " 20350K .......... .......... .......... .......... .......... 20% 586K 3m23s\n", - " 20400K .......... .......... .......... .......... .......... 20% 601K 3m22s\n", - " 20450K .......... .......... .......... .......... .......... 20% 586K 3m22s\n", - " 20500K .......... .......... .......... .......... .......... 20% 551K 3m22s\n", - " 20550K .......... .......... .......... .......... .......... 20% 664K 3m21s\n", - " 20600K .......... .......... .......... .......... .......... 20% 1.64M 3m21s\n", - " 20650K .......... .......... .......... .......... .......... 20% 598K 3m21s\n", - " 20700K .......... .......... .......... .......... .......... 20% 612K 3m20s\n", - " 20750K .......... .......... .......... .......... .......... 20% 669K 3m20s\n", - " 20800K .......... .......... .......... .......... .......... 20% 564K 3m20s\n", - " 20850K .......... .......... .......... .......... .......... 20% 642K 3m19s\n", - " 20900K .......... .......... .......... .......... .......... 20% 611K 3m19s\n", - " 20950K .......... .......... .......... .......... .......... 21% 601K 3m19s\n", - " 21000K .......... .......... .......... .......... .......... 21% 582K 3m19s\n", - " 21050K .......... .......... .......... .......... .......... 21% 551K 3m18s\n", - " 21100K .......... .......... .......... .......... .......... 21% 620K 3m18s\n", - " 21150K .......... .......... .......... .......... .......... 21% 630K 3m18s\n", - " 21200K .......... .......... .......... .......... .......... 21% 1.80M 3m17s\n", - " 21250K .......... .......... .......... .......... .......... 21% 580K 3m17s\n", - " 21300K .......... .......... .......... .......... .......... 21% 583K 3m17s\n", - " 21350K .......... .......... .......... .......... .......... 21% 657K 3m16s\n", - " 21400K .......... .......... .......... .......... .......... 21% 571K 3m16s\n", - " 21450K .......... .......... .......... .......... .......... 21% 744K 3m16s\n", - " 21500K .......... .......... .......... .......... .......... 21% 623K 3m16s\n", - " 21550K .......... .......... .......... .......... .......... 21% 606K 3m15s\n", - " 21600K .......... .......... .......... .......... .......... 21% 2.07M 3m15s\n", - " 21650K .......... .......... .......... .......... .......... 21% 634K 3m14s\n", - " 21700K .......... .......... .......... .......... .......... 21% 640K 3m14s\n", - " 21750K .......... .......... .......... .......... .......... 21% 702K 3m14s\n", - " 21800K .......... .......... .......... .......... .......... 21% 598K 3m14s\n", - " 21850K .......... .......... .......... .......... .......... 21% 2.15M 3m13s\n", - " 21900K .......... .......... .......... .......... .......... 21% 644K 3m13s\n", - " 21950K .......... .......... .......... .......... .......... 22% 606K 3m13s\n", - " 22000K .......... .......... .......... .......... .......... 22% 739K 3m12s\n", - " 22050K .......... .......... .......... .......... .......... 22% 600K 3m12s\n", - " 22100K .......... .......... .......... .......... .......... 22% 2.40M 3m11s\n", - " 22150K .......... .......... .......... .......... .......... 22% 634K 3m11s\n", - " 22200K .......... .......... .......... .......... .......... 22% 607K 3m11s\n", - " 22250K .......... .......... .......... .......... .......... 22% 728K 3m11s\n", - " 22300K .......... .......... .......... .......... .......... 22% 633K 3m10s\n", - " 22350K .......... .......... .......... .......... .......... 22% 665K 3m10s\n", - " 22400K .......... .......... .......... .......... .......... 22% 1.47M 3m10s\n", - " 22450K .......... .......... .......... .......... .......... 22% 632K 3m9s\n", - " 22500K .......... .......... .......... .......... .......... 22% 827K 3m9s\n", - " 22550K .......... .......... .......... .......... .......... 22% 660K 3m9s\n", - " 22600K .......... .......... .......... .......... .......... 22% 1.33M 3m8s\n", - " 22650K .......... .......... .......... .......... .......... 22% 623K 3m8s\n", - " 22700K .......... .......... .......... .......... .......... 22% 923K 3m8s\n", - " 22750K .......... .......... .......... .......... .......... 22% 644K 3m7s\n", - " 22800K .......... .......... .......... .......... .......... 22% 1.24M 3m7s\n", - " 22850K .......... .......... .......... .......... .......... 22% 640K 3m7s\n", - " 22900K .......... .......... .......... .......... .......... 22% 971K 3m6s\n", - " 22950K .......... .......... .......... .......... .......... 23% 642K 3m6s\n", - " 23000K .......... .......... .......... .......... .......... 23% 1.12M 3m6s\n", - " 23050K .......... .......... .......... .......... .......... 23% 955K 3m5s\n", - " 23100K .......... .......... .......... .......... .......... 23% 704K 3m5s\n", - " 23150K .......... .......... .......... .......... .......... 23% 1.01M 3m5s\n", - " 23200K .......... .......... .......... .......... .......... 23% 704K 3m5s\n", - " 23250K .......... .......... .......... .......... .......... 23% 699K 3m4s\n", - " 23300K .......... .......... .......... .......... .......... 23% 597K 3m4s\n", - " 23350K .......... .......... .......... .......... .......... 23% 2.14M 3m4s\n", - " 23400K .......... .......... .......... .......... .......... 23% 755K 3m3s\n", - " 23450K .......... .......... .......... .......... .......... 23% 584K 3m3s\n", - " 23500K .......... .......... .......... .......... .......... 23% 3.44M 3m3s\n", - " 23550K .......... .......... .......... .......... .......... 23% 521K 3m2s\n", - " 23600K .......... .......... .......... .......... .......... 23% 869K 3m2s\n", - " 23650K .......... .......... .......... .......... .......... 23% 2.08M 3m2s\n", - " 23700K .......... .......... .......... .......... .......... 23% 676K 3m1s\n", - " 23750K .......... .......... .......... .......... .......... 23% 677K 3m1s\n", - " 23800K .......... .......... .......... .......... .......... 23% 785K 3m1s\n", - " 23850K .......... .......... .......... .......... .......... 23% 1.76M 3m0s\n", - " 23900K .......... .......... .......... .......... .......... 23% 640K 3m0s\n", - " 23950K .......... .......... .......... .......... .......... 24% 757K 3m0s\n", - " 24000K .......... .......... .......... .......... .......... 24% 1.98M 2m59s\n", - " 24050K .......... .......... .......... .......... .......... 24% 621K 2m59s\n", - " 24100K .......... .......... .......... .......... .......... 24% 759K 2m59s\n", - " 24150K .......... .......... .......... .......... .......... 24% 2.11M 2m59s\n", - " 24200K .......... .......... .......... .......... .......... 24% 592K 2m58s\n", - " 24250K .......... .......... .......... .......... .......... 24% 861K 2m58s\n", - " 24300K .......... .......... .......... .......... .......... 24% 1.60M 2m58s\n", - " 24350K .......... .......... .......... .......... .......... 24% 582K 2m57s\n", - " 24400K .......... .......... .......... .......... .......... 24% 1.19M 2m57s\n", - " 24450K .......... .......... .......... .......... .......... 24% 1.14M 2m57s\n", - " 24500K .......... .......... .......... .......... .......... 24% 655K 2m56s\n", - " 24550K .......... .......... .......... .......... .......... 24% 1022K 2m56s\n", - " 24600K .......... .......... .......... .......... .......... 24% 1.18M 2m56s\n", - " 24650K .......... .......... .......... .......... .......... 24% 669K 2m56s\n", - " 24700K .......... .......... .......... .......... .......... 24% 891K 2m55s\n", - " 24750K .......... .......... .......... .......... .......... 24% 1.42M 2m55s\n", - " 24800K .......... .......... .......... .......... .......... 24% 632K 2m55s\n", - " 24850K .......... .......... .......... .......... .......... 24% 962K 2m54s\n", - " 24900K .......... .......... .......... .......... .......... 24% 1.20M 2m54s\n", - " 24950K .......... .......... .......... .......... .......... 25% 663K 2m54s\n", - " 25000K .......... .......... .......... .......... .......... 25% 3.80M 2m53s\n", - " 25050K .......... .......... .......... .......... .......... 25% 639K 2m53s\n", - " 25100K .......... .......... .......... .......... .......... 25% 1.09M 2m53s\n", - " 25150K .......... .......... .......... .......... .......... 25% 1.01M 2m52s\n", - " 25200K .......... .......... .......... .......... .......... 25% 735K 2m52s\n", - " 25250K .......... .......... .......... .......... .......... 25% 1017K 2m52s\n", - " 25300K .......... .......... .......... .......... .......... 25% 1.04M 2m52s\n", - " 25350K .......... .......... .......... .......... .......... 25% 708K 2m51s\n", - " 25400K .......... .......... .......... .......... .......... 25% 1.01M 2m51s\n", - " 25450K .......... .......... .......... .......... .......... 25% 1.18M 2m51s\n", - " 25500K .......... .......... .......... .......... .......... 25% 989K 2m50s\n", - " 25550K .......... .......... .......... .......... .......... 25% 1.32M 2m50s\n", - " 25600K .......... .......... .......... .......... .......... 25% 630K 2m50s\n", - " 25650K .......... .......... .......... .......... .......... 25% 5.08M 2m49s\n", - " 25700K .......... .......... .......... .......... .......... 25% 557K 2m49s\n", - " 25750K .......... .......... .......... .......... .......... 25% 1.26M 2m49s\n", - " 25800K .......... .......... .......... .......... .......... 25% 1.04M 2m49s\n", - " 25850K .......... .......... .......... .......... .......... 25% 607K 2m48s\n", - " 25900K .......... .......... .......... .......... .......... 25% 1.40M 2m48s\n", - " 25950K .......... .......... .......... .......... .......... 26% 989K 2m48s\n", - " 26000K .......... .......... .......... .......... .......... 26% 1.14M 2m47s\n", - " 26050K .......... .......... .......... .......... .......... 26% 1.08M 2m47s\n", - " 26100K .......... .......... .......... .......... .......... 26% 986K 2m47s\n", - " 26150K .......... .......... .......... .......... .......... 26% 1.26M 2m47s\n", - " 26200K .......... .......... .......... .......... .......... 26% 309K 2m47s\n", - " 26250K .......... .......... .......... .......... .......... 26% 340K 2m47s\n", - " 26300K .......... .......... .......... .......... .......... 26% 2.84M 2m46s\n", - " 26350K .......... .......... .......... .......... .......... 26% 671K 2m46s\n", - " 26400K .......... .......... .......... .......... .......... 26% 2.54M 2m46s\n", - " 26450K .......... .......... .......... .......... .......... 26% 714K 2m45s\n", - " 26500K .......... .......... .......... .......... .......... 26% 701K 2m45s\n", - " 26550K .......... .......... .......... .......... .......... 26% 2.56M 2m45s\n", - " 26600K .......... .......... .......... .......... .......... 26% 705K 2m45s\n", - " 26650K .......... .......... .......... .......... .......... 26% 2.87M 2m44s\n", - " 26700K .......... .......... .......... .......... .......... 26% 557K 2m44s\n", - " 26750K .......... .......... .......... .......... .......... 26% 76.4M 2m44s\n", - " 26800K .......... .......... .......... .......... .......... 26% 588K 2m43s\n", - " 26850K .......... .......... .......... .......... .......... 26% 628K 2m43s\n", - " 26900K .......... .......... .......... .......... .......... 26% 3.70M 2m43s\n", - " 26950K .......... .......... .......... .......... .......... 27% 667K 2m43s\n", - " 27000K .......... .......... .......... .......... .......... 27% 4.11M 2m42s\n", - " 27050K .......... .......... .......... .......... .......... 27% 644K 2m42s\n", - " 27100K .......... .......... .......... .......... .......... 27% 6.58M 2m42s\n", - " 27150K .......... .......... .......... .......... .......... 27% 645K 2m41s\n", - " 27200K .......... .......... .......... .......... .......... 27% 688K 2m41s\n", - " 27250K .......... .......... .......... .......... .......... 27% 3.80M 2m41s\n", - " 27300K .......... .......... .......... .......... .......... 27% 639K 2m41s\n", - " 27350K .......... .......... .......... .......... .......... 27% 7.36M 2m40s\n", - " 27400K .......... .......... .......... .......... .......... 27% 601K 2m40s\n", - " 27450K .......... .......... .......... .......... .......... 27% 7.30M 2m40s\n", - " 27500K .......... .......... .......... .......... .......... 27% 629K 2m39s\n", - " 27550K .......... .......... .......... .......... .......... 27% 793K 2m39s\n", - " 27600K .......... .......... .......... .......... .......... 27% 2.18M 2m39s\n", - " 27650K .......... .......... .......... .......... .......... 27% 658K 2m39s\n", - " 27700K .......... .......... .......... .......... .......... 27% 4.23M 2m38s\n", - " 27750K .......... .......... .......... .......... .......... 27% 589K 2m38s\n", - " 27800K .......... .......... .......... .......... .......... 27% 7.03M 2m38s\n", - " 27850K .......... .......... .......... .......... .......... 27% 636K 2m38s\n", - " 27900K .......... .......... .......... .......... .......... 27% 7.72M 2m37s\n", - " 27950K .......... .......... .......... .......... .......... 28% 606K 2m37s\n", - " 28000K .......... .......... .......... .......... .......... 28% 1.13M 2m37s\n", - " 28050K .......... .......... .......... .......... .......... 28% 1.13M 2m37s\n", - " 28100K .......... .......... .......... .......... .......... 28% 1.22M 2m36s\n", - " 28150K .......... .......... .......... .......... .......... 28% 1.02M 2m36s\n", - " 28200K .......... .......... .......... .......... .......... 28% 1019K 2m36s\n", - " 28250K .......... .......... .......... .......... .......... 28% 1.32M 2m35s\n", - " 28300K .......... .......... .......... .......... .......... 28% 1.04M 2m35s\n", - " 28350K .......... .......... .......... .......... .......... 28% 1.28M 2m35s\n", - " 28400K .......... .......... .......... .......... .......... 28% 1.09M 2m35s\n", - " 28450K .......... .......... .......... .......... .......... 28% 1.27M 2m34s\n", - " 28500K .......... .......... .......... .......... .......... 28% 827K 2m34s\n", - " 28550K .......... .......... .......... .......... .......... 28% 1.88M 2m34s\n", - " 28600K .......... .......... .......... .......... .......... 28% 878K 2m34s\n", - " 28650K .......... .......... .......... .......... .......... 28% 1.58M 2m33s\n", - " 28700K .......... .......... .......... .......... .......... 28% 687K 2m33s\n", - " 28750K .......... .......... .......... .......... .......... 28% 3.42M 2m33s\n", - " 28800K .......... .......... .......... .......... .......... 28% 697K 2m33s\n", - " 28850K .......... .......... .......... .......... .......... 28% 3.03M 2m32s\n", - " 28900K .......... .......... .......... .......... .......... 28% 741K 2m32s\n", - " 28950K .......... .......... .......... .......... .......... 29% 2.80M 2m32s\n", - " 29000K .......... .......... .......... .......... .......... 29% 714K 2m31s\n", - " 29050K .......... .......... .......... .......... .......... 29% 2.55M 2m31s\n", - " 29100K .......... .......... .......... .......... .......... 29% 762K 2m31s\n", - " 29150K .......... .......... .......... .......... .......... 29% 1.35M 2m31s\n", - " 29200K .......... .......... .......... .......... .......... 29% 1.02M 2m30s\n", - " 29250K .......... .......... .......... .......... .......... 29% 1.28M 2m30s\n", - " 29300K .......... .......... .......... .......... .......... 29% 721K 2m30s\n", - " 29350K .......... .......... .......... .......... .......... 29% 2.85M 2m30s\n", - " 29400K .......... .......... .......... .......... .......... 29% 728K 2m29s\n", - " 29450K .......... .......... .......... .......... .......... 29% 3.20M 2m29s\n", - " 29500K .......... .......... .......... .......... .......... 29% 727K 2m29s\n", - " 29550K .......... .......... .......... .......... .......... 29% 2.90M 2m29s\n", - " 29600K .......... .......... .......... .......... .......... 29% 467K 2m28s\n", - " 29650K .......... .......... .......... .......... .......... 29% 18.6M 2m28s\n", - " 29700K .......... .......... .......... .......... .......... 29% 664K 2m28s\n", - " 29750K .......... .......... .......... .......... .......... 29% 3.07M 2m28s\n", - " 29800K .......... .......... .......... .......... .......... 29% 610K 2m27s\n", - " 29850K .......... .......... .......... .......... .......... 29% 5.94M 2m27s\n", - " 29900K .......... .......... .......... .......... .......... 29% 613K 2m27s\n", - " 29950K .......... .......... .......... .......... .......... 30% 5.25M 2m27s\n", - " 30000K .......... .......... .......... .......... .......... 30% 671K 2m26s\n", - " 30050K .......... .......... .......... .......... .......... 30% 1.58M 2m26s\n", - " 30100K .......... .......... .......... .......... .......... 30% 905K 2m26s\n", - " 30150K .......... .......... .......... .......... .......... 30% 1.92M 2m26s\n", - " 30200K .......... .......... .......... .......... .......... 30% 891K 2m25s\n", - " 30250K .......... .......... .......... .......... .......... 30% 1.77M 2m25s\n", - " 30300K .......... .......... .......... .......... .......... 30% 852K 2m25s\n", - " 30350K .......... .......... .......... .......... .......... 30% 1.86M 2m25s\n", - " 30400K .......... .......... .......... .......... .......... 30% 813K 2m25s\n", - " 30450K .......... .......... .......... .......... .......... 30% 2.28M 2m24s\n", - " 30500K .......... .......... .......... .......... .......... 30% 807K 2m24s\n", - " 30550K .......... .......... .......... .......... .......... 30% 2.30M 2m24s\n", - " 30600K .......... .......... .......... .......... .......... 30% 738K 2m24s\n", - " 30650K .......... .......... .......... .......... .......... 30% 3.65M 2m23s\n", - " 30700K .......... .......... .......... .......... .......... 30% 664K 2m23s\n", - " 30750K .......... .......... .......... .......... .......... 30% 2.39M 2m23s\n", - " 30800K .......... .......... .......... .......... .......... 30% 757K 2m23s\n", - " 30850K .......... .......... .......... .......... .......... 30% 3.10M 2m22s\n", - " 30900K .......... .......... .......... .......... .......... 30% 712K 2m22s\n", - " 30950K .......... .......... .......... .......... .......... 31% 3.38M 2m22s\n", - " 31000K .......... .......... .......... .......... .......... 31% 711K 2m22s\n", - " 31050K .......... .......... .......... .......... .......... 31% 4.05M 2m21s\n", - " 31100K .......... .......... .......... .......... .......... 31% 139K 2m22s\n", - " 31150K .......... .......... .......... .......... .......... 31% 1.86M 2m22s\n", - " 31200K .......... .......... .......... .......... .......... 31% 707K 2m21s\n", - " 31250K .......... .......... .......... .......... .......... 31% 4.03M 2m21s\n", - " 31300K .......... .......... .......... .......... .......... 31% 691K 2m21s\n", - " 31350K .......... .......... .......... .......... .......... 31% 3.76M 2m21s\n", - " 31400K .......... .......... .......... .......... .......... 31% 683K 2m20s\n", - " 31450K .......... .......... .......... .......... .......... 31% 5.12M 2m20s\n", - " 31500K .......... .......... .......... .......... .......... 31% 672K 2m20s\n", - " 31550K .......... .......... .......... .......... .......... 31% 4.76M 2m20s\n", - " 31600K .......... .......... .......... .......... .......... 31% 6.03M 2m19s\n", - " 31650K .......... .......... .......... .......... .......... 31% 637K 2m19s\n", - " 31700K .......... .......... .......... .......... .......... 31% 4.21M 2m19s\n", - " 31750K .......... .......... .......... .......... .......... 31% 565K 2m19s\n", - " 31800K .......... .......... .......... .......... .......... 31% 98.6M 2m18s\n", - " 31850K .......... .......... .......... .......... .......... 31% 615K 2m18s\n", - " 31900K .......... .......... .......... .......... .......... 31% 5.17M 2m18s\n", - " 31950K .......... .......... .......... .......... .......... 32% 660K 2m18s\n", - " 32000K .......... .......... .......... .......... .......... 32% 5.14M 2m18s\n", - " 32050K .......... .......... .......... .......... .......... 32% 644K 2m17s\n", - " 32100K .......... .......... .......... .......... .......... 32% 7.45M 2m17s\n", - " 32150K .......... .......... .......... .......... .......... 32% 617K 2m17s\n", - " 32200K .......... .......... .......... .......... .......... 32% 5.67M 2m17s\n", - " 32250K .......... .......... .......... .......... .......... 32% 659K 2m17s\n", - " 32300K .......... .......... .......... .......... .......... 32% 3.06M 2m16s\n", - " 32350K .......... .......... .......... .......... .......... 32% 692K 2m16s\n", - " 32400K .......... .......... .......... .......... .......... 32% 3.91M 2m16s\n", - " 32450K .......... .......... .......... .......... .......... 32% 669K 2m16s\n", - " 32500K .......... .......... .......... .......... .......... 32% 4.81M 2m15s\n", - " 32550K .......... .......... .......... .......... .......... 32% 765K 2m15s\n", - " 32600K .......... .......... .......... .......... .......... 32% 2.92M 2m15s\n", - " 32650K .......... .......... .......... .......... .......... 32% 726K 2m15s\n", - " 32700K .......... .......... .......... .......... .......... 32% 3.59M 2m14s\n", - " 32750K .......... .......... .......... .......... .......... 32% 691K 2m14s\n", - " 32800K .......... .......... .......... .......... .......... 32% 651K 2m14s\n", - " 32850K .......... .......... .......... .......... .......... 32% 5.04M 2m14s\n", - " 32900K .......... .......... .......... .......... .......... 32% 5.57M 2m14s\n", - " 32950K .......... .......... .......... .......... .......... 33% 672K 2m13s\n", - " 33000K .......... .......... .......... .......... .......... 33% 5.58M 2m13s\n", - " 33050K .......... .......... .......... .......... .......... 33% 654K 2m13s\n", - " 33100K .......... .......... .......... .......... .......... 33% 4.40M 2m13s\n", - " 33150K .......... .......... .......... .......... .......... 33% 569K 2m13s\n", - " 33200K .......... .......... .......... .......... .......... 33% 4.85M 2m12s\n", - " 33250K .......... .......... .......... .......... .......... 33% 654K 2m12s\n", - " 33300K .......... .......... .......... .......... .......... 33% 7.05M 2m12s\n", - " 33350K .......... .......... .......... .......... .......... 33% 626K 2m12s\n", - " 33400K .......... .......... .......... .......... .......... 33% 5.68M 2m12s\n", - " 33450K .......... .......... .......... .......... .......... 33% 677K 2m11s\n", - " 33500K .......... .......... .......... .......... .......... 33% 3.79M 2m11s\n", - " 33550K .......... .......... .......... .......... .......... 33% 567K 2m11s\n", - " 33600K .......... .......... .......... .......... .......... 33% 16.2M 2m11s\n", - " 33650K .......... .......... .......... .......... .......... 33% 630K 2m11s\n", - " 33700K .......... .......... .......... .......... .......... 33% 5.75M 2m10s\n", - " 33750K .......... .......... .......... .......... .......... 33% 669K 2m10s\n", - " 33800K .......... .......... .......... .......... .......... 33% 4.63M 2m10s\n", - " 33850K .......... .......... .......... .......... .......... 33% 701K 2m10s\n", - " 33900K .......... .......... .......... .......... .......... 33% 2.75M 2m9s\n", - " 33950K .......... .......... .......... .......... .......... 34% 769K 2m9s\n", - " 34000K .......... .......... .......... .......... .......... 34% 2.61M 2m9s\n", - " 34050K .......... .......... .......... .......... .......... 34% 3.02M 2m9s\n", - " 34100K .......... .......... .......... .......... .......... 34% 750K 2m9s\n", - " 34150K .......... .......... .......... .......... .......... 34% 3.16M 2m8s\n", - " 34200K .......... .......... .......... .......... .......... 34% 743K 2m8s\n", - " 34250K .......... .......... .......... .......... .......... 34% 2.95M 2m8s\n", - " 34300K .......... .......... .......... .......... .......... 34% 755K 2m8s\n", - " 34350K .......... .......... .......... .......... .......... 34% 2.71M 2m8s\n", - " 34400K .......... .......... .......... .......... .......... 34% 752K 2m7s\n", - " 34450K .......... .......... .......... .......... .......... 34% 2.14M 2m7s\n", - " 34500K .......... .......... .......... .......... .......... 34% 903K 2m7s\n", - " 34550K .......... .......... .......... .......... .......... 34% 1.71M 2m7s\n", - " 34600K .......... .......... .......... .......... .......... 34% 805K 2m7s\n", - " 34650K .......... .......... .......... .......... .......... 34% 6.26M 2m6s\n", - " 34700K .......... .......... .......... .......... .......... 34% 584K 2m6s\n", - " 34750K .......... .......... .......... .......... .......... 34% 4.49M 2m6s\n", - " 34800K .......... .......... .......... .......... .......... 34% 804K 2m6s\n", - " 34850K .......... .......... .......... .......... .......... 34% 1.99M 2m6s\n", - " 34900K .......... .......... .......... .......... .......... 34% 829K 2m5s\n", - " 34950K .......... .......... .......... .......... .......... 35% 1.88M 2m5s\n", - " 35000K .......... .......... .......... .......... .......... 35% 828K 2m5s\n", - " 35050K .......... .......... .......... .......... .......... 35% 1.96M 2m5s\n", - " 35100K .......... .......... .......... .......... .......... 35% 819K 2m5s\n", - " 35150K .......... .......... .......... .......... .......... 35% 1.82M 2m4s\n", - " 35200K .......... .......... .......... .......... .......... 35% 876K 2m4s\n", - " 35250K .......... .......... .......... .......... .......... 35% 6.73M 2m4s\n", - " 35300K .......... .......... .......... .......... .......... 35% 643K 2m4s\n", - " 35350K .......... .......... .......... .......... .......... 35% 4.98M 2m4s\n", - " 35400K .......... .......... .......... .......... .......... 35% 678K 2m3s\n", - " 35450K .......... .......... .......... .......... .......... 35% 6.46M 2m3s\n", - " 35500K .......... .......... .......... .......... .......... 35% 705K 2m3s\n", - " 35550K .......... .......... .......... .......... .......... 35% 3.70M 2m3s\n", - " 35600K .......... .......... .......... .......... .......... 35% 701K 2m3s\n", - " 35650K .......... .......... .......... .......... .......... 35% 3.22M 2m2s\n", - " 35700K .......... .......... .......... .......... .......... 35% 2.46M 2m2s\n", - " 35750K .......... .......... .......... .......... .......... 35% 791K 2m2s\n", - " 35800K .......... .......... .......... .......... .......... 35% 2.29M 2m2s\n", - " 35850K .......... .......... .......... .......... .......... 35% 754K 2m2s\n", - " 35900K .......... .......... .......... .......... .......... 35% 3.06M 2m1s\n", - " 35950K .......... .......... .......... .......... .......... 36% 889K 2m1s\n", - " 36000K .......... .......... .......... .......... .......... 36% 1.80M 2m1s\n", - " 36050K .......... .......... .......... .......... .......... 36% 872K 2m1s\n", - " 36100K .......... .......... .......... .......... .......... 36% 1.66M 2m1s\n", - " 36150K .......... .......... .......... .......... .......... 36% 916K 2m1s\n", - " 36200K .......... .......... .......... .......... .......... 36% 1.60M 2m0s\n", - " 36250K .......... .......... .......... .......... .......... 36% 908K 2m0s\n", - " 36300K .......... .......... .......... .......... .......... 36% 1.55M 2m0s\n", - " 36350K .......... .......... .......... .......... .......... 36% 837K 2m0s\n", - " 36400K .......... .......... .......... .......... .......... 36% 4.34M 2m0s\n", - " 36450K .......... .......... .......... .......... .......... 36% 653K 1m59s\n", - " 36500K .......... .......... .......... .......... .......... 36% 1.74M 1m59s\n", - " 36550K .......... .......... .......... .......... .......... 36% 638K 1m59s\n", - " 36600K .......... .......... .......... .......... .......... 36% 5.06M 1m59s\n", - " 36650K .......... .......... .......... .......... .......... 36% 606K 1m59s\n", - " 36700K .......... .......... .......... .......... .......... 36% 14.4M 1m59s\n", - " 36750K .......... .......... .......... .......... .......... 36% 6.02M 1m58s\n", - " 36800K .......... .......... .......... .......... .......... 36% 452K 1m58s\n", - " 36850K .......... .......... .......... .......... .......... 36% 130M 1m58s\n", - " 36900K .......... .......... .......... .......... .......... 36% 964K 1m58s\n", - " 36950K .......... .......... .......... .......... .......... 37% 3.53M 1m58s\n", - " 37000K .......... .......... .......... .......... .......... 37% 707K 1m57s\n", - " 37050K .......... .......... .......... .......... .......... 37% 4.17M 1m57s\n", - " 37100K .......... .......... .......... .......... .......... 37% 2.57M 1m57s\n", - " 37150K .......... .......... .......... .......... .......... 37% 731K 1m57s\n", - " 37200K .......... .......... .......... .......... .......... 37% 2.39M 1m57s\n", - " 37250K .......... .......... .......... .......... .......... 37% 23.9M 1m56s\n", - " 37300K .......... .......... .......... .......... .......... 37% 689K 1m56s\n", - " 37350K .......... .......... .......... .......... .......... 37% 3.12M 1m56s\n", - " 37400K .......... .......... .......... .......... .......... 37% 697K 1m56s\n", - " 37450K .......... .......... .......... .......... .......... 37% 2.25M 1m56s\n", - " 37500K .......... .......... .......... .......... .......... 37% 9.61M 1m55s\n", - " 37550K .......... .......... .......... .......... .......... 37% 778K 1m55s\n", - " 37600K .......... .......... .......... .......... .......... 37% 2.60M 1m55s\n", - " 37650K .......... .......... .......... .......... .......... 37% 707K 1m55s\n", - " 37700K .......... .......... .......... .......... .......... 37% 3.55M 1m55s\n", - " 37750K .......... .......... .......... .......... .......... 37% 8.61M 1m55s\n", - " 37800K .......... .......... .......... .......... .......... 37% 715K 1m54s\n", - " 37850K .......... .......... .......... .......... .......... 37% 3.12M 1m54s\n", - " 37900K .......... .......... .......... .......... .......... 37% 716K 1m54s\n", - " 37950K .......... .......... .......... .......... .......... 38% 2.95M 1m54s\n", - " 38000K .......... .......... .......... .......... .......... 38% 748K 1m54s\n", - " 38050K .......... .......... .......... .......... .......... 38% 3.05M 1m53s\n", - " 38100K .......... .......... .......... .......... .......... 38% 711K 1m53s\n", - " 38150K .......... .......... .......... .......... .......... 38% 3.75M 1m53s\n", - " 38200K .......... .......... .......... .......... .......... 38% 688K 1m53s\n", - " 38250K .......... .......... .......... .......... .......... 38% 3.12M 1m53s\n", - " 38300K .......... .......... .......... .......... .......... 38% 719K 1m53s\n", - " 38350K .......... .......... .......... .......... .......... 38% 3.47M 1m52s\n", - " 38400K .......... .......... .......... .......... .......... 38% 7.57M 1m52s\n", - " 38450K .......... .......... .......... .......... .......... 38% 471K 1m52s\n", - " 38500K .......... .......... .......... .......... .......... 38% 16.0M 1m52s\n", - " 38550K .......... .......... .......... .......... .......... 38% 625K 1m52s\n", - " 38600K .......... .......... .......... .......... .......... 38% 5.18M 1m52s\n", - " 38650K .......... .......... .......... .......... .......... 38% 643K 1m51s\n", - " 38700K .......... .......... .......... .......... .......... 38% 5.62M 1m51s\n", - " 38750K .......... .......... .......... .......... .......... 38% 634K 1m51s\n", - " 38800K .......... .......... .......... .......... .......... 38% 10.8M 1m51s\n", - " 38850K .......... .......... .......... .......... .......... 38% 639K 1m51s\n", - " 38900K .......... .......... .......... .......... .......... 38% 6.10M 1m51s\n", - " 38950K .......... .......... .......... .......... .......... 39% 8.67M 1m50s\n", - " 39000K .......... .......... .......... .......... .......... 39% 592K 1m50s\n", - " 39050K .......... .......... .......... .......... .......... 39% 6.67M 1m50s\n", - " 39100K .......... .......... .......... .......... .......... 39% 16.2M 1m50s\n", - " 39150K .......... .......... .......... .......... .......... 39% 561K 1m50s\n", - " 39200K .......... .......... .......... .......... .......... 39% 13.6M 1m50s\n", - " 39250K .......... .......... .......... .......... .......... 39% 600K 1m49s\n", - " 39300K .......... .......... .......... .......... .......... 39% 5.09M 1m49s\n", - " 39350K .......... .......... .......... .......... .......... 39% 690K 1m49s\n", - " 39400K .......... .......... .......... .......... .......... 39% 3.24M 1m49s\n", - " 39450K .......... .......... .......... .......... .......... 39% 699K 1m49s\n", - " 39500K .......... .......... .......... .......... .......... 39% 3.36M 1m49s\n", - " 39550K .......... .......... .......... .......... .......... 39% 708K 1m48s\n", - " 39600K .......... .......... .......... .......... .......... 39% 4.30M 1m48s\n", - " 39650K .......... .......... .......... .......... .......... 39% 596K 1m48s\n", - " 39700K .......... .......... .......... .......... .......... 39% 23.3M 1m48s\n", - " 39750K .......... .......... .......... .......... .......... 39% 628K 1m48s\n", - " 39800K .......... .......... .......... .......... .......... 39% 5.35M 1m48s\n", - " 39850K .......... .......... .......... .......... .......... 39% 594K 1m47s\n", - " 39900K .......... .......... .......... .......... .......... 39% 7.19M 1m47s\n", - " 39950K .......... .......... .......... .......... .......... 40% 606K 1m47s\n", - " 40000K .......... .......... .......... .......... .......... 40% 59.8M 1m47s\n", - " 40050K .......... .......... .......... .......... .......... 40% 818K 1m47s\n", - " 40100K .......... .......... .......... .......... .......... 40% 1.84M 1m47s\n", - " 40150K .......... .......... .......... .......... .......... 40% 824K 1m47s\n", - " 40200K .......... .......... .......... .......... .......... 40% 2.08M 1m46s\n", - " 40250K .......... .......... .......... .......... .......... 40% 794K 1m46s\n", - " 40300K .......... .......... .......... .......... .......... 40% 2.02M 1m46s\n", - " 40350K .......... .......... .......... .......... .......... 40% 840K 1m46s\n", - " 40400K .......... .......... .......... .......... .......... 40% 2.03M 1m46s\n", - " 40450K .......... .......... .......... .......... .......... 40% 821K 1m46s\n", - " 40500K .......... .......... .......... .......... .......... 40% 1.23M 1m45s\n", - " 40550K .......... .......... .......... .......... .......... 40% 1002K 1m45s\n", - " 40600K .......... .......... .......... .......... .......... 40% 1.79M 1m45s\n", - " 40650K .......... .......... .......... .......... .......... 40% 867K 1m45s\n", - " 40700K .......... .......... .......... .......... .......... 40% 1.57M 1m45s\n", - " 40750K .......... .......... .......... .......... .......... 40% 7.93M 1m45s\n", - " 40800K .......... .......... .......... .......... .......... 40% 598K 1m44s\n", - " 40850K .......... .......... .......... .......... .......... 40% 4.15M 1m44s\n", - " 40900K .......... .......... .......... .......... .......... 40% 9.97M 1m44s\n", - " 40950K .......... .......... .......... .......... .......... 41% 533K 1m44s\n", - " 41000K .......... .......... .......... .......... .......... 41% 18.5M 1m44s\n", - " 41050K .......... .......... .......... .......... .......... 41% 573K 1m44s\n", - " 41100K .......... .......... .......... .......... .......... 41% 3.26M 1m43s\n", - " 41150K .......... .......... .......... .......... .......... 41% 82.5M 1m43s\n", - " 41200K .......... .......... .......... .......... .......... 41% 545K 1m43s\n", - " 41250K .......... .......... .......... .......... .......... 41% 632K 1m43s\n", - " 41300K .......... .......... .......... .......... .......... 41% 2.12M 1m43s\n", - " 41350K .......... .......... .......... .......... .......... 41% 828K 1m43s\n", - " 41400K .......... .......... .......... .......... .......... 41% 2.62M 1m43s\n", - " 41450K .......... .......... .......... .......... .......... 41% 685K 1m42s\n", - " 41500K .......... .......... .......... .......... .......... 41% 3.67M 1m42s\n", - " 41550K .......... .......... .......... .......... .......... 41% 707K 1m42s\n", - " 41600K .......... .......... .......... .......... .......... 41% 6.46M 1m42s\n", - " 41650K .......... .......... .......... .......... .......... 41% 3.45M 1m42s\n", - " 41700K .......... .......... .......... .......... .......... 41% 604K 1m42s\n", - " 41750K .......... .......... .......... .......... .......... 41% 6.30M 1m42s\n", - " 41800K .......... .......... .......... .......... .......... 41% 654K 1m41s\n", - " 41850K .......... .......... .......... .......... .......... 41% 5.46M 1m41s\n", - " 41900K .......... .......... .......... .......... .......... 41% 648K 1m41s\n", - " 41950K .......... .......... .......... .......... .......... 42% 4.62M 1m41s\n", - " 42000K .......... .......... .......... .......... .......... 42% 639K 1m41s\n", - " 42050K .......... .......... .......... .......... .......... 42% 8.44M 1m41s\n", - " 42100K .......... .......... .......... .......... .......... 42% 4.72M 1m40s\n", - " 42150K .......... .......... .......... .......... .......... 42% 623K 1m40s\n", - " 42200K .......... .......... .......... .......... .......... 42% 2.89M 1m40s\n", - " 42250K .......... .......... .......... .......... .......... 42% 632K 1m40s\n", - " 42300K .......... .......... .......... .......... .......... 42% 2.82M 1m40s\n", - " 42350K .......... .......... .......... .......... .......... 42% 672K 1m40s\n", - " 42400K .......... .......... .......... .......... .......... 42% 2.26M 1m40s\n", - " 42450K .......... .......... .......... .......... .......... 42% 767K 99s\n", - " 42500K .......... .......... .......... .......... .......... 42% 1.67M 99s\n", - " 42550K .......... .......... .......... .......... .......... 42% 70.0M 99s\n", - " 42600K .......... .......... .......... .......... .......... 42% 410K 99s\n", - " 42650K .......... .......... .......... .......... .......... 42% 2.72M 99s\n", - " 42700K .......... .......... .......... .......... .......... 42% 621K 99s\n", - " 42750K .......... .......... .......... .......... .......... 42% 3.77M 99s\n", - " 42800K .......... .......... .......... .......... .......... 42% 640K 99s\n", - " 42850K .......... .......... .......... .......... .......... 42% 1.27M 98s\n", - " 42900K .......... .......... .......... .......... .......... 42% 1.07M 98s\n", - " 42950K .......... .......... .......... .......... .......... 43% 1.26M 98s\n", - " 43000K .......... .......... .......... .......... .......... 43% 3.09M 98s\n", - " 43050K .......... .......... .......... .......... .......... 43% 676K 98s\n", - " 43100K .......... .......... .......... .......... .......... 43% 2.25M 98s\n", - " 43150K .......... .......... .......... .......... .......... 43% 14.2M 97s\n", - " 43200K .......... .......... .......... .......... .......... 43% 722K 97s\n", - " 43250K .......... .......... .......... .......... .......... 43% 2.02M 97s\n", - " 43300K .......... .......... .......... .......... .......... 43% 708K 97s\n", - " 43350K .......... .......... .......... .......... .......... 43% 3.87M 97s\n", - " 43400K .......... .......... .......... .......... .......... 43% 640K 97s\n", - " 43450K .......... .......... .......... .......... .......... 43% 8.89M 97s\n", - " 43500K .......... .......... .......... .......... .......... 43% 4.84M 96s\n", - " 43550K .......... .......... .......... .......... .......... 43% 666K 96s\n", - " 43600K .......... .......... .......... .......... .......... 43% 2.98M 96s\n", - " 43650K .......... .......... .......... .......... .......... 43% 719K 96s\n", - " 43700K .......... .......... .......... .......... .......... 43% 3.14M 96s\n", - " 43750K .......... .......... .......... .......... .......... 43% 3.48M 96s\n", - " 43800K .......... .......... .......... .......... .......... 43% 722K 96s\n", - " 43850K .......... .......... .......... .......... .......... 43% 3.21M 95s\n", - " 43900K .......... .......... .......... .......... .......... 43% 693K 95s\n", - " 43950K .......... .......... .......... .......... .......... 44% 2.87M 95s\n", - " 44000K .......... .......... .......... .......... .......... 44% 717K 95s\n", - " 44050K .......... .......... .......... .......... .......... 44% 1.93M 95s\n", - " 44100K .......... .......... .......... .......... .......... 44% 142M 95s\n", - " 44150K .......... .......... .......... .......... .......... 44% 733K 95s\n", - " 44200K .......... .......... .......... .......... .......... 44% 1.65M 94s\n", - " 44250K .......... .......... .......... .......... .......... 44% 899K 94s\n", - " 44300K .......... .......... .......... .......... .......... 44% 1.57M 94s\n", - " 44350K .......... .......... .......... .......... .......... 44% 891K 94s\n", - " 44400K .......... .......... .......... .......... .......... 44% 2.20M 94s\n", - " 44450K .......... .......... .......... .......... .......... 44% 745K 94s\n", - " 44500K .......... .......... .......... .......... .......... 44% 3.00M 94s\n", - " 44550K .......... .......... .......... .......... .......... 44% 713K 93s\n", - " 44600K .......... .......... .......... .......... .......... 44% 6.13M 93s\n", - " 44650K .......... .......... .......... .......... .......... 44% 598K 93s\n", - " 44700K .......... .......... .......... .......... .......... 44% 10.7M 93s\n", - " 44750K .......... .......... .......... .......... .......... 44% 619K 93s\n", - " 44800K .......... .......... .......... .......... .......... 44% 6.16M 93s\n", - " 44850K .......... .......... .......... .......... .......... 44% 3.01M 93s\n", - " 44900K .......... .......... .......... .......... .......... 44% 646K 93s\n", - " 44950K .......... .......... .......... .......... .......... 45% 5.58M 92s\n", - " 45000K .......... .......... .......... .......... .......... 45% 440K 92s\n", - " 45050K .......... .......... .......... .......... .......... 45% 48.7M 92s\n", - " 45100K .......... .......... .......... .......... .......... 45% 501K 92s\n", - " 45150K .......... .......... .......... .......... .......... 45% 6.40M 92s\n", - " 45200K .......... .......... .......... .......... .......... 45% 8.05M 92s\n", - " 45250K .......... .......... .......... .......... .......... 45% 572K 92s\n", - " 45300K .......... .......... .......... .......... .......... 45% 9.41M 91s\n", - " 45350K .......... .......... .......... .......... .......... 45% 597K 91s\n", - " 45400K .......... .......... .......... .......... .......... 45% 7.81M 91s\n", - " 45450K .......... .......... .......... .......... .......... 45% 621K 91s\n", - " 45500K .......... .......... .......... .......... .......... 45% 7.62M 91s\n", - " 45550K .......... .......... .......... .......... .......... 45% 9.55M 91s\n", - " 45600K .......... .......... .......... .......... .......... 45% 625K 91s\n", - " 45650K .......... .......... .......... .......... .......... 45% 8.42M 90s\n", - " 45700K .......... .......... .......... .......... .......... 45% 646K 90s\n", - " 45750K .......... .......... .......... .......... .......... 45% 4.89M 90s\n", - " 45800K .......... .......... .......... .......... .......... 45% 5.57M 90s\n", - " 45850K .......... .......... .......... .......... .......... 45% 704K 90s\n", - " 45900K .......... .......... .......... .......... .......... 45% 3.13M 90s\n", - " 45950K .......... .......... .......... .......... .......... 46% 5.57M 90s\n", - " 46000K .......... .......... .......... .......... .......... 46% 618K 90s\n", - " 46050K .......... .......... .......... .......... .......... 46% 626K 89s\n", - " 46100K .......... .......... .......... .......... .......... 46% 6.23M 89s\n", - " 46150K .......... .......... .......... .......... .......... 46% 651K 89s\n", - " 46200K .......... .......... .......... .......... .......... 46% 4.74M 89s\n", - " 46250K .......... .......... .......... .......... .......... 46% 670K 89s\n", - " 46300K .......... .......... .......... .......... .......... 46% 4.23M 89s\n", - " 46350K .......... .......... .......... .......... .......... 46% 645K 89s\n", - " 46400K .......... .......... .......... .......... .......... 46% 11.8M 88s\n", - " 46450K .......... .......... .......... .......... .......... 46% 641K 88s\n", - " 46500K .......... .......... .......... .......... .......... 46% 6.39M 88s\n", - " 46550K .......... .......... .......... .......... .......... 46% 637K 88s\n", - " 46600K .......... .......... .......... .......... .......... 46% 5.55M 88s\n", - " 46650K .......... .......... .......... .......... .......... 46% 636K 88s\n", - " 46700K .......... .......... .......... .......... .......... 46% 3.46M 88s\n", - " 46750K .......... .......... .......... .......... .......... 46% 609K 88s\n", - " 46800K .......... .......... .......... .......... .......... 46% 6.35M 87s\n", - " 46850K .......... .......... .......... .......... .......... 46% 7.06M 87s\n", - " 46900K .......... .......... .......... .......... .......... 46% 637K 87s\n", - " 46950K .......... .......... .......... .......... .......... 47% 6.46M 87s\n", - " 47000K .......... .......... .......... .......... .......... 47% 647K 87s\n", - " 47050K .......... .......... .......... .......... .......... 47% 3.64M 87s\n", - " 47100K .......... .......... .......... .......... .......... 47% 4.76M 87s\n", - " 47150K .......... .......... .......... .......... .......... 47% 661K 87s\n", - " 47200K .......... .......... .......... .......... .......... 47% 5.66M 86s\n", - " 47250K .......... .......... .......... .......... .......... 47% 661K 86s\n", - " 47300K .......... .......... .......... .......... .......... 47% 3.21M 86s\n", - " 47350K .......... .......... .......... .......... .......... 47% 680K 86s\n", - " 47400K .......... .......... .......... .......... .......... 47% 5.06M 86s\n", - " 47450K .......... .......... .......... .......... .......... 47% 663K 86s\n", - " 47500K .......... .......... .......... .......... .......... 47% 2.11M 86s\n", - " 47550K .......... .......... .......... .......... .......... 47% 3.64M 85s\n", - " 47600K .......... .......... .......... .......... .......... 47% 654K 85s\n", - " 47650K .......... .......... .......... .......... .......... 47% 6.06M 85s\n", - " 47700K .......... .......... .......... .......... .......... 47% 646K 85s\n", - " 47750K .......... .......... .......... .......... .......... 47% 3.11M 85s\n", - " 47800K .......... .......... .......... .......... .......... 47% 729K 85s\n", - " 47850K .......... .......... .......... .......... .......... 47% 2.34M 85s\n", - " 47900K .......... .......... .......... .......... .......... 47% 771K 85s\n", - " 47950K .......... .......... .......... .......... .......... 48% 1.94M 85s\n", - " 48000K .......... .......... .......... .......... .......... 48% 6.62M 84s\n", - " 48050K .......... .......... .......... .......... .......... 48% 718K 84s\n", - " 48100K .......... .......... .......... .......... .......... 48% 3.09M 84s\n", - " 48150K .......... .......... .......... .......... .......... 48% 709K 84s\n", - " 48200K .......... .......... .......... .......... .......... 48% 2.16M 84s\n", - " 48250K .......... .......... .......... .......... .......... 48% 3.42M 84s\n", - " 48300K .......... .......... .......... .......... .......... 48% 667K 84s\n", - " 48350K .......... .......... .......... .......... .......... 48% 658K 84s\n", - " 48400K .......... .......... .......... .......... .......... 48% 5.73M 83s\n", - " 48450K .......... .......... .......... .......... .......... 48% 7.58M 83s\n", - " 48500K .......... .......... .......... .......... .......... 48% 556K 83s\n", - " 48550K .......... .......... .......... .......... .......... 48% 676K 83s\n", - " 48600K .......... .......... .......... .......... .......... 48% 3.96M 83s\n", - " 48650K .......... .......... .......... .......... .......... 48% 4.94M 83s\n", - " 48700K .......... .......... .......... .......... .......... 48% 696K 83s\n", - " 48750K .......... .......... .......... .......... .......... 48% 4.02M 83s\n", - " 48800K .......... .......... .......... .......... .......... 48% 650K 82s\n", - " 48850K .......... .......... .......... .......... .......... 48% 5.37M 82s\n", - " 48900K .......... .......... .......... .......... .......... 48% 695K 82s\n", - " 48950K .......... .......... .......... .......... .......... 49% 4.84M 82s\n", - " 49000K .......... .......... .......... .......... .......... 49% 664K 82s\n", - " 49050K .......... .......... .......... .......... .......... 49% 6.95M 82s\n", - " 49100K .......... .......... .......... .......... .......... 49% 604K 82s\n", - " 49150K .......... .......... .......... .......... .......... 49% 5.53M 82s\n", - " 49200K .......... .......... .......... .......... .......... 49% 663K 81s\n", - " 49250K .......... .......... .......... .......... .......... 49% 4.49M 81s\n", - " 49300K .......... .......... .......... .......... .......... 49% 687K 81s\n", - " 49350K .......... .......... .......... .......... .......... 49% 4.27M 81s\n", - " 49400K .......... .......... .......... .......... .......... 49% 6.12M 81s\n", - " 49450K .......... .......... .......... .......... .......... 49% 623K 81s\n", - " 49500K .......... .......... .......... .......... .......... 49% 4.36M 81s\n", - " 49550K .......... .......... .......... .......... .......... 49% 674K 81s\n", - " 49600K .......... .......... .......... .......... .......... 49% 1.97M 80s\n", - " 49650K .......... .......... .......... .......... .......... 49% 136M 80s\n", - " 49700K .......... .......... .......... .......... .......... 49% 588K 80s\n", - " 49750K .......... .......... .......... .......... .......... 49% 2.83M 80s\n", - " 49800K .......... .......... .......... .......... .......... 49% 633K 80s\n", - " 49850K .......... .......... .......... .......... .......... 49% 6.51M 80s\n", - " 49900K .......... .......... .......... .......... .......... 49% 708K 80s\n", - " 49950K .......... .......... .......... .......... .......... 50% 2.57M 80s\n", - " 50000K .......... .......... .......... .......... .......... 50% 707K 80s\n", - " 50050K .......... .......... .......... .......... .......... 50% 2.88M 79s\n", - " 50100K .......... .......... .......... .......... .......... 50% 3.50M 79s\n", - " 50150K .......... .......... .......... .......... .......... 50% 551K 79s\n", - " 50200K .......... .......... .......... .......... .......... 50% 4.10M 79s\n", - " 50250K .......... .......... .......... .......... .......... 50% 666K 79s\n", - " 50300K .......... .......... .......... .......... .......... 50% 3.71M 79s\n", - " 50350K .......... .......... .......... .......... .......... 50% 6.33M 79s\n", - " 50400K .......... .......... .......... .......... .......... 50% 632K 79s\n", - " 50450K .......... .......... .......... .......... .......... 50% 3.61M 78s\n", - " 50500K .......... .......... .......... .......... .......... 50% 678K 78s\n", - " 50550K .......... .......... .......... .......... .......... 50% 2.20M 78s\n", - " 50600K .......... .......... .......... .......... .......... 50% 4.15M 78s\n", - " 50650K .......... .......... .......... .......... .......... 50% 752K 78s\n", - " 50700K .......... .......... .......... .......... .......... 50% 1.83M 78s\n", - " 50750K .......... .......... .......... .......... .......... 50% 6.28M 78s\n", - " 50800K .......... .......... .......... .......... .......... 50% 590K 78s\n", - " 50850K .......... .......... .......... .......... .......... 50% 683K 78s\n", - " 50900K .......... .......... .......... .......... .......... 50% 3.58M 77s\n", - " 50950K .......... .......... .......... .......... .......... 51% 679K 77s\n", - " 51000K .......... .......... .......... .......... .......... 51% 5.70M 77s\n", - " 51050K .......... .......... .......... .......... .......... 51% 668K 77s\n", - " 51100K .......... .......... .......... .......... .......... 51% 3.00M 77s\n", - " 51150K .......... .......... .......... .......... .......... 51% 700K 77s\n", - " 51200K .......... .......... .......... .......... .......... 51% 2.90M 77s\n", - " 51250K .......... .......... .......... .......... .......... 51% 704K 77s\n", - " 51300K .......... .......... .......... .......... .......... 51% 1.49M 77s\n", - " 51350K .......... .......... .......... .......... .......... 51% 986K 76s\n", - " 51400K .......... .......... .......... .......... .......... 51% 1.99M 76s\n", - " 51450K .......... .......... .......... .......... .......... 51% 2.08M 76s\n", - " 51500K .......... .......... .......... .......... .......... 51% 711K 76s\n", - " 51550K .......... .......... .......... .......... .......... 51% 2.65M 76s\n", - " 51600K .......... .......... .......... .......... .......... 51% 646K 76s\n", - " 51650K .......... .......... .......... .......... .......... 51% 13.6M 76s\n", - " 51700K .......... .......... .......... .......... .......... 51% 2.62M 76s\n", - " 51750K .......... .......... .......... .......... .......... 51% 645K 76s\n", - " 51800K .......... .......... .......... .......... .......... 51% 6.27M 75s\n", - " 51850K .......... .......... .......... .......... .......... 51% 656K 75s\n", - " 51900K .......... .......... .......... .......... .......... 51% 5.27M 75s\n", - " 51950K .......... .......... .......... .......... .......... 52% 530K 75s\n", - " 52000K .......... .......... .......... .......... .......... 52% 573K 75s\n", - " 52050K .......... .......... .......... .......... .......... 52% 783K 75s\n", - " 52100K .......... .......... .......... .......... .......... 52% 5.39M 75s\n", - " 52150K .......... .......... .......... .......... .......... 52% 1.78M 75s\n", - " 52200K .......... .......... .......... .......... .......... 52% 640K 75s\n", - " 52250K .......... .......... .......... .......... .......... 52% 2.58M 74s\n", - " 52300K .......... .......... .......... .......... .......... 52% 563K 74s\n", - " 52350K .......... .......... .......... .......... .......... 52% 1.38M 74s\n", - " 52400K .......... .......... .......... .......... .......... 52% 916K 74s\n", - " 52450K .......... .......... .......... .......... .......... 52% 1.52M 74s\n", - " 52500K .......... .......... .......... .......... .......... 52% 903K 74s\n", - " 52550K .......... .......... .......... .......... .......... 52% 1.09M 74s\n", - " 52600K .......... .......... .......... .......... .......... 52% 1.11M 74s\n", - " 52650K .......... .......... .......... .......... .......... 52% 1.07M 74s\n", - " 52700K .......... .......... .......... .......... .......... 52% 1.08M 74s\n", - " 52750K .......... .......... .......... .......... .......... 52% 1.19M 73s\n", - " 52800K .......... .......... .......... .......... .......... 52% 1.02M 73s\n", - " 52850K .......... .......... .......... .......... .......... 52% 6.63M 73s\n", - " 52900K .......... .......... .......... .......... .......... 52% 597K 73s\n", - " 52950K .......... .......... .......... .......... .......... 53% 7.55M 73s\n", - " 53000K .......... .......... .......... .......... .......... 53% 594K 73s\n", - " 53050K .......... .......... .......... .......... .......... 53% 6.01M 73s\n", - " 53100K .......... .......... .......... .......... .......... 53% 12.7M 73s\n", - " 53150K .......... .......... .......... .......... .......... 53% 554K 73s\n", - " 53200K .......... .......... .......... .......... .......... 53% 5.35M 72s\n", - " 53250K .......... .......... .......... .......... .......... 53% 21.0M 72s\n", - " 53300K .......... .......... .......... .......... .......... 53% 456K 72s\n", - " 53350K .......... .......... .......... .......... .......... 53% 233K 72s\n", - " 53400K .......... .......... .......... .......... .......... 53% 132M 72s\n", - " 53450K .......... .......... .......... .......... .......... 53% 116K 72s\n", - " 53500K .......... .......... .......... .......... .......... 53% 202K 72s\n", - " 53550K .......... .......... .......... .......... .......... 53% 552K 72s\n", - " 53600K .......... .......... .......... .......... .......... 53% 7.30M 72s\n", - " 53650K .......... .......... .......... .......... .......... 53% 567K 72s\n", - " 53700K .......... .......... .......... .......... .......... 53% 589K 72s\n", - " 53750K .......... .......... .......... .......... .......... 53% 6.87M 72s\n", - " 53800K .......... .......... .......... .......... .......... 53% 618K 72s\n", - " 53850K .......... .......... .......... .......... .......... 53% 4.64M 72s\n", - " 53900K .......... .......... .......... .......... .......... 53% 606K 72s\n", - " 53950K .......... .......... .......... .......... .......... 54% 7.93M 71s\n", - " 54000K .......... .......... .......... .......... .......... 54% 596K 71s\n", - " 54050K .......... .......... .......... .......... .......... 54% 788K 71s\n", - " 54100K .......... .......... .......... .......... .......... 54% 1.96M 71s\n", - " 54150K .......... .......... .......... .......... .......... 54% 796K 71s\n", - " 54200K .......... .......... .......... .......... .......... 54% 1.81M 71s\n", - " 54250K .......... .......... .......... .......... .......... 54% 809K 71s\n", - " 54300K .......... .......... .......... .......... .......... 54% 2.08M 71s\n", - " 54350K .......... .......... .......... .......... .......... 54% 809K 71s\n", - " 54400K .......... .......... .......... .......... .......... 54% 778K 71s\n", - " 54450K .......... .......... .......... .......... .......... 54% 1.55M 70s\n", - " 54500K .......... .......... .......... .......... .......... 54% 866K 70s\n", - " 54550K .......... .......... .......... .......... .......... 54% 1.53M 70s\n", - " 54600K .......... .......... .......... .......... .......... 54% 861K 70s\n", - " 54650K .......... .......... .......... .......... .......... 54% 1.76M 70s\n", - " 54700K .......... .......... .......... .......... .......... 54% 857K 70s\n", - " 54750K .......... .......... .......... .......... .......... 54% 635K 70s\n", - " 54800K .......... .......... .......... .......... .......... 54% 2.93M 70s\n", - " 54850K .......... .......... .......... .......... .......... 54% 720K 70s\n", - " 54900K .......... .......... .......... .......... .......... 54% 2.39M 70s\n", - " 54950K .......... .......... .......... .......... .......... 55% 736K 69s\n", - " 55000K .......... .......... .......... .......... .......... 55% 3.04M 69s\n", - " 55050K .......... .......... .......... .......... .......... 55% 706K 69s\n", - " 55100K .......... .......... .......... .......... .......... 55% 3.42M 69s\n", - " 55150K .......... .......... .......... .......... .......... 55% 710K 69s\n", - " 55200K .......... .......... .......... .......... .......... 55% 2.54M 69s\n", - " 55250K .......... .......... .......... .......... .......... 55% 749K 69s\n", - " 55300K .......... .......... .......... .......... .......... 55% 1.71M 69s\n", - " 55350K .......... .......... .......... .......... .......... 55% 850K 69s\n", - " 55400K .......... .......... .......... .......... .......... 55% 1.88M 69s\n", - " 55450K .......... .......... .......... .......... .......... 55% 809K 68s\n", - " 55500K .......... .......... .......... .......... .......... 55% 2.25M 68s\n", - " 55550K .......... .......... .......... .......... .......... 55% 806K 68s\n", - " 55600K .......... .......... .......... .......... .......... 55% 2.15M 68s\n", - " 55650K .......... .......... .......... .......... .......... 55% 822K 68s\n", - " 55700K .......... .......... .......... .......... .......... 55% 2.18M 68s\n", - " 55750K .......... .......... .......... .......... .......... 55% 770K 68s\n", - " 55800K .......... .......... .......... .......... .......... 55% 2.70M 68s\n", - " 55850K .......... .......... .......... .......... .......... 55% 744K 68s\n", - " 55900K .......... .......... .......... .......... .......... 55% 2.76M 67s\n", - " 55950K .......... .......... .......... .......... .......... 56% 734K 67s\n", - " 56000K .......... .......... .......... .......... .......... 56% 533K 67s\n", - " 56050K .......... .......... .......... .......... .......... 56% 4.39M 67s\n", - " 56100K .......... .......... .......... .......... .......... 56% 584K 67s\n", - " 56150K .......... .......... .......... .......... .......... 56% 5.40M 67s\n", - " 56200K .......... .......... .......... .......... .......... 56% 666K 67s\n", - " 56250K .......... .......... .......... .......... .......... 56% 5.09M 67s\n", - " 56300K .......... .......... .......... .......... .......... 56% 691K 67s\n", - " 56350K .......... .......... .......... .......... .......... 56% 2.91M 67s\n", - " 56400K .......... .......... .......... .......... .......... 56% 674K 67s\n", - " 56450K .......... .......... .......... .......... .......... 56% 1.57M 66s\n", - " 56500K .......... .......... .......... .......... .......... 56% 947K 66s\n", - " 56550K .......... .......... .......... .......... .......... 56% 1.54M 66s\n", - " 56600K .......... .......... .......... .......... .......... 56% 916K 66s\n", - " 56650K .......... .......... .......... .......... .......... 56% 874K 66s\n", - " 56700K .......... .......... .......... .......... .......... 56% 1.54M 66s\n", - " 56750K .......... .......... .......... .......... .......... 56% 989K 66s\n", - " 56800K .......... .......... .......... .......... .......... 56% 1.32M 66s\n", - " 56850K .......... .......... .......... .......... .......... 56% 1017K 66s\n", - " 56900K .......... .......... .......... .......... .......... 56% 1.13M 66s\n", - " 56950K .......... .......... .......... .......... .......... 57% 1.17M 65s\n", - " 57000K .......... .......... .......... .......... .......... 57% 1.08M 65s\n", - " 57050K .......... .......... .......... .......... .......... 57% 1.34M 65s\n", - " 57100K .......... .......... .......... .......... .......... 57% 1.03M 65s\n", - " 57150K .......... .......... .......... .......... .......... 57% 1.33M 65s\n", - " 57200K .......... .......... .......... .......... .......... 57% 990K 65s\n", - " 57250K .......... .......... .......... .......... .......... 57% 1.46M 65s\n", - " 57300K .......... .......... .......... .......... .......... 57% 901K 65s\n", - " 57350K .......... .......... .......... .......... .......... 57% 1.77M 65s\n", - " 57400K .......... .......... .......... .......... .......... 57% 877K 64s\n", - " 57450K .......... .......... .......... .......... .......... 57% 760K 64s\n", - " 57500K .......... .......... .......... .......... .......... 57% 1.20M 64s\n", - " 57550K .......... .......... .......... .......... .......... 57% 1.10M 64s\n", - " 57600K .......... .......... .......... .......... .......... 57% 1.20M 64s\n", - " 57650K .......... .......... .......... .......... .......... 57% 4.08M 64s\n", - " 57700K .......... .......... .......... .......... .......... 57% 696K 64s\n", - " 57750K .......... .......... .......... .......... .......... 57% 2.30M 64s\n", - " 57800K .......... .......... .......... .......... .......... 57% 778K 64s\n", - " 57850K .......... .......... .......... .......... .......... 57% 1.96M 64s\n", - " 57900K .......... .......... .......... .......... .......... 57% 771K 64s\n", - " 57950K .......... .......... .......... .......... .......... 58% 719K 63s\n", - " 58000K .......... .......... .......... .......... .......... 58% 2.96M 63s\n", - " 58050K .......... .......... .......... .......... .......... 58% 704K 63s\n", - " 58100K .......... .......... .......... .......... .......... 58% 3.34M 63s\n", - " 58150K .......... .......... .......... .......... .......... 58% 676K 63s\n", - " 58200K .......... .......... .......... .......... .......... 58% 3.61M 63s\n", - " 58250K .......... .......... .......... .......... .......... 58% 629K 63s\n", - " 58300K .......... .......... .......... .......... .......... 58% 7.66M 63s\n", - " 58350K .......... .......... .......... .......... .......... 58% 711K 63s\n", - " 58400K .......... .......... .......... .......... .......... 58% 2.26M 63s\n", - " 58450K .......... .......... .......... .......... .......... 58% 4.47M 62s\n", - " 58500K .......... .......... .......... .......... .......... 58% 637K 62s\n", - " 58550K .......... .......... .......... .......... .......... 58% 4.59M 62s\n", - " 58600K .......... .......... .......... .......... .......... 58% 669K 62s\n", - " 58650K .......... .......... .......... .......... .......... 58% 2.26M 62s\n", - " 58700K .......... .......... .......... .......... .......... 58% 782K 62s\n", - " 58750K .......... .......... .......... .......... .......... 58% 1.84M 62s\n", - " 58800K .......... .......... .......... .......... .......... 58% 776K 62s\n", - " 58850K .......... .......... .......... .......... .......... 58% 1.71M 62s\n", - " 58900K .......... .......... .......... .......... .......... 58% 856K 62s\n", - " 58950K .......... .......... .......... .......... .......... 59% 2.09M 61s\n", - " 59000K .......... .......... .......... .......... .......... 59% 842K 61s\n", - " 59050K .......... .......... .......... .......... .......... 59% 994K 61s\n", - " 59100K .......... .......... .......... .......... .......... 59% 1.45M 61s\n", - " 59150K .......... .......... .......... .......... .......... 59% 816K 61s\n", - " 59200K .......... .......... .......... .......... .......... 59% 1.75M 61s\n", - " 59250K .......... .......... .......... .......... .......... 59% 844K 61s\n", - " 59300K .......... .......... .......... .......... .......... 59% 693K 61s\n", - " 59350K .......... .......... .......... .......... .......... 59% 2.26M 61s\n", - " 59400K .......... .......... .......... .......... .......... 59% 756K 61s\n", - " 59450K .......... .......... .......... .......... .......... 59% 2.21M 61s\n", - " 59500K .......... .......... .......... .......... .......... 59% 3.00M 60s\n", - " 59550K .......... .......... .......... .......... .......... 59% 731K 60s\n", - " 59600K .......... .......... .......... .......... .......... 59% 2.73M 60s\n", - " 59650K .......... .......... .......... .......... .......... 59% 689K 60s\n", - " 59700K .......... .......... .......... .......... .......... 59% 2.91M 60s\n", - " 59750K .......... .......... .......... .......... .......... 59% 700K 60s\n", - " 59800K .......... .......... .......... .......... .......... 59% 3.26M 60s\n", - " 59850K .......... .......... .......... .......... .......... 59% 683K 60s\n", - " 59900K .......... .......... .......... .......... .......... 59% 3.35M 60s\n", - " 59950K .......... .......... .......... .......... .......... 60% 888K 60s\n", - " 60000K .......... .......... .......... .......... .......... 60% 1.12M 59s\n", - " 60050K .......... .......... .......... .......... .......... 60% 1.09M 59s\n", - " 60100K .......... .......... .......... .......... .......... 60% 1.73M 59s\n", - " 60150K .......... .......... .......... .......... .......... 60% 881K 59s\n", - " 60200K .......... .......... .......... .......... .......... 60% 1.37M 59s\n", - " 60250K .......... .......... .......... .......... .......... 60% 1.94M 59s\n", - " 60300K .......... .......... .......... .......... .......... 60% 707K 59s\n", - " 60350K .......... .......... .......... .......... .......... 60% 3.14M 59s\n", - " 60400K .......... .......... .......... .......... .......... 60% 612K 59s\n", - " 60450K .......... .......... .......... .......... .......... 60% 676K 59s\n", - " 60500K .......... .......... .......... .......... .......... 60% 2.67M 59s\n", - " 60550K .......... .......... .......... .......... .......... 60% 723K 58s\n", - " 60600K .......... .......... .......... .......... .......... 60% 2.18M 58s\n", - " 60650K .......... .......... .......... .......... .......... 60% 827K 58s\n", - " 60700K .......... .......... .......... .......... .......... 60% 1.99M 58s\n", - " 60750K .......... .......... .......... .......... .......... 60% 824K 58s\n", - " 60800K .......... .......... .......... .......... .......... 60% 1.57M 58s\n", - " 60850K .......... .......... .......... .......... .......... 60% 7.51M 58s\n", - " 60900K .......... .......... .......... .......... .......... 60% 552K 58s\n", - " 60950K .......... .......... .......... .......... .......... 61% 74.4M 58s\n", - " 61000K .......... .......... .......... .......... .......... 61% 566K 58s\n", - " 61050K .......... .......... .......... .......... .......... 61% 19.7M 57s\n", - " 61100K .......... .......... .......... .......... .......... 61% 709K 57s\n", - " 61150K .......... .......... .......... .......... .......... 61% 2.89M 57s\n", - " 61200K .......... .......... .......... .......... .......... 61% 716K 57s\n", - " 61250K .......... .......... .......... .......... .......... 61% 2.35M 57s\n", - " 61300K .......... .......... .......... .......... .......... 61% 2.02M 57s\n", - " 61350K .......... .......... .......... .......... .......... 61% 767K 57s\n", - " 61400K .......... .......... .......... .......... .......... 61% 2.77M 57s\n", - " 61450K .......... .......... .......... .......... .......... 61% 788K 57s\n", - " 61500K .......... .......... .......... .......... .......... 61% 2.83M 57s\n", - " 61550K .......... .......... .......... .......... .......... 61% 821K 57s\n", - " 61600K .......... .......... .......... .......... .......... 61% 2.23M 56s\n", - " 61650K .......... .......... .......... .......... .......... 61% 794K 56s\n", - " 61700K .......... .......... .......... .......... .......... 61% 2.06M 56s\n", - " 61750K .......... .......... .......... .......... .......... 61% 1.12M 56s\n", - " 61800K .......... .......... .......... .......... .......... 61% 1.06M 56s\n", - " 61850K .......... .......... .......... .......... .......... 61% 1.29M 56s\n", - " 61900K .......... .......... .......... .......... .......... 61% 1.09M 56s\n", - " 61950K .......... .......... .......... .......... .......... 62% 1.29M 56s\n", - " 62000K .......... .......... .......... .......... .......... 62% 930K 56s\n", - " 62050K .......... .......... .......... .......... .......... 62% 1.34M 56s\n", - " 62100K .......... .......... .......... .......... .......... 62% 1.01M 56s\n", - " 62150K .......... .......... .......... .......... .......... 62% 1.11M 55s\n", - " 62200K .......... .......... .......... .......... .......... 62% 1.13M 55s\n", - " 62250K .......... .......... .......... .......... .......... 62% 1.05M 55s\n", - " 62300K .......... .......... .......... .......... .......... 62% 1.11M 55s\n", - " 62350K .......... .......... .......... .......... .......... 62% 1.19M 55s\n", - " 62400K .......... .......... .......... .......... .......... 62% 1.72M 55s\n", - " 62450K .......... .......... .......... .......... .......... 62% 2.22M 55s\n", - " 62500K .......... .......... .......... .......... .......... 62% 795K 55s\n", - " 62550K .......... .......... .......... .......... .......... 62% 2.12M 55s\n", - " 62600K .......... .......... .......... .......... .......... 62% 816K 55s\n", - " 62650K .......... .......... .......... .......... .......... 62% 1.72M 54s\n", - " 62700K .......... .......... .......... .......... .......... 62% 925K 54s\n", - " 62750K .......... .......... .......... .......... .......... 62% 1.39M 54s\n", - " 62800K .......... .......... .......... .......... .......... 62% 990K 54s\n", - " 62850K .......... .......... .......... .......... .......... 62% 1.15M 54s\n", - " 62900K .......... .......... .......... .......... .......... 62% 990K 54s\n", - " 62950K .......... .......... .......... .......... .......... 63% 1.37M 54s\n", - " 63000K .......... .......... .......... .......... .......... 63% 874K 54s\n", - " 63050K .......... .......... .......... .......... .......... 63% 20.6M 54s\n", - " 63100K .......... .......... .......... .......... .......... 63% 1.76M 54s\n", - " 63150K .......... .......... .......... .......... .......... 63% 755K 54s\n", - " 63200K .......... .......... .......... .......... .......... 63% 2.63M 53s\n", - " 63250K .......... .......... .......... .......... .......... 63% 744K 53s\n", - " 63300K .......... .......... .......... .......... .......... 63% 2.69M 53s\n", - " 63350K .......... .......... .......... .......... .......... 63% 766K 53s\n", - " 63400K .......... .......... .......... .......... .......... 63% 3.80M 53s\n", - " 63450K .......... .......... .......... .......... .......... 63% 658K 53s\n", - " 63500K .......... .......... .......... .......... .......... 63% 3.81M 53s\n", - " 63550K .......... .......... .......... .......... .......... 63% 673K 53s\n", - " 63600K .......... .......... .......... .......... .......... 63% 1.78M 53s\n", - " 63650K .......... .......... .......... .......... .......... 63% 739K 53s\n", - " 63700K .......... .......... .......... .......... .......... 63% 3.29M 53s\n", - " 63750K .......... .......... .......... .......... .......... 63% 693K 53s\n", - " 63800K .......... .......... .......... .......... .......... 63% 6.86M 52s\n", - " 63850K .......... .......... .......... .......... .......... 63% 688K 52s\n", - " 63900K .......... .......... .......... .......... .......... 63% 2.06M 52s\n", - " 63950K .......... .......... .......... .......... .......... 64% 799K 52s\n", - " 64000K .......... .......... .......... .......... .......... 64% 5.43M 52s\n", - " 64050K .......... .......... .......... .......... .......... 64% 2.04M 52s\n", - " 64100K .......... .......... .......... .......... .......... 64% 794K 52s\n", - " 64150K .......... .......... .......... .......... .......... 64% 2.63M 52s\n", - " 64200K .......... .......... .......... .......... .......... 64% 746K 52s\n", - " 64250K .......... .......... .......... .......... .......... 64% 3.90M 52s\n", - " 64300K .......... .......... .......... .......... .......... 64% 2.48M 51s\n", - " 64350K .......... .......... .......... .......... .......... 64% 720K 51s\n", - " 64400K .......... .......... .......... .......... .......... 64% 2.88M 51s\n", - " 64450K .......... .......... .......... .......... .......... 64% 737K 51s\n", - " 64500K .......... .......... .......... .......... .......... 64% 5.03M 51s\n", - " 64550K .......... .......... .......... .......... .......... 64% 3.41M 51s\n", - " 64600K .......... .......... .......... .......... .......... 64% 687K 51s\n", - " 64650K .......... .......... .......... .......... .......... 64% 3.65M 51s\n", - " 64700K .......... .......... .......... .......... .......... 64% 710K 51s\n", - " 64750K .......... .......... .......... .......... .......... 64% 3.14M 51s\n", - " 64800K .......... .......... .......... .......... .......... 64% 622K 51s\n", - " 64850K .......... .......... .......... .......... .......... 64% 2.24M 51s\n", - " 64900K .......... .......... .......... .......... .......... 64% 21.7M 50s\n", - " 64950K .......... .......... .......... .......... .......... 65% 698K 50s\n", - " 65000K .......... .......... .......... .......... .......... 65% 2.60M 50s\n", - " 65050K .......... .......... .......... .......... .......... 65% 729K 50s\n", - " 65100K .......... .......... .......... .......... .......... 65% 2.07M 50s\n", - " 65150K .......... .......... .......... .......... .......... 65% 11.7M 50s\n", - " 65200K .......... .......... .......... .......... .......... 65% 771K 50s\n", - " 65250K .......... .......... .......... .......... .......... 65% 2.10M 50s\n", - " 65300K .......... .......... .......... .......... .......... 65% 757K 50s\n", - " 65350K .......... .......... .......... .......... .......... 65% 1.23M 50s\n", - " 65400K .......... .......... .......... .......... .......... 65% 7.80M 50s\n", - " 65450K .......... .......... .......... .......... .......... 65% 622K 49s\n", - " 65500K .......... .......... .......... .......... .......... 65% 6.12M 49s\n", - " 65550K .......... .......... .......... .......... .......... 65% 570K 49s\n", - " 65600K .......... .......... .......... .......... .......... 65% 3.45M 49s\n", - " 65650K .......... .......... .......... .......... .......... 65% 680K 49s\n", - " 65700K .......... .......... .......... .......... .......... 65% 3.11M 49s\n", - " 65750K .......... .......... .......... .......... .......... 65% 673K 49s\n", - " 65800K .......... .......... .......... .......... .......... 65% 3.45M 49s\n", - " 65850K .......... .......... .......... .......... .......... 65% 5.07M 49s\n", - " 65900K .......... .......... .......... .......... .......... 65% 633K 49s\n", - " 65950K .......... .......... .......... .......... .......... 66% 646K 49s\n", - " 66000K .......... .......... .......... .......... .......... 66% 2.08M 48s\n", - " 66050K .......... .......... .......... .......... .......... 66% 4.76M 48s\n", - " 66100K .......... .......... .......... .......... .......... 66% 591K 48s\n", - " 66150K .......... .......... .......... .......... .......... 66% 8.86M 48s\n", - " 66200K .......... .......... .......... .......... .......... 66% 638K 48s\n", - " 66250K .......... .......... .......... .......... .......... 66% 3.69M 48s\n", - " 66300K .......... .......... .......... .......... .......... 66% 688K 48s\n", - " 66350K .......... .......... .......... .......... .......... 66% 3.03M 48s\n", - " 66400K .......... .......... .......... .......... .......... 66% 664K 48s\n", - " 66450K .......... .......... .......... .......... .......... 66% 4.67M 48s\n", - " 66500K .......... .......... .......... .......... .......... 66% 8.62M 48s\n", - " 66550K .......... .......... .......... .......... .......... 66% 633K 48s\n", - " 66600K .......... .......... .......... .......... .......... 66% 1.91M 47s\n", - " 66650K .......... .......... .......... .......... .......... 66% 836K 47s\n", - " 66700K .......... .......... .......... .......... .......... 66% 1.49M 47s\n", - " 66750K .......... .......... .......... .......... .......... 66% 913K 47s\n", - " 66800K .......... .......... .......... .......... .......... 66% 1.19M 47s\n", - " 66850K .......... .......... .......... .......... .......... 66% 1.03M 47s\n", - " 66900K .......... .......... .......... .......... .......... 66% 1.19M 47s\n", - " 66950K .......... .......... .......... .......... .......... 67% 635K 47s\n", - " 67000K .......... .......... .......... .......... .......... 67% 4.95M 47s\n", - " 67050K .......... .......... .......... .......... .......... 67% 4.32M 47s\n", - " 67100K .......... .......... .......... .......... .......... 67% 626K 47s\n", - " 67150K .......... .......... .......... .......... .......... 67% 7.41M 47s\n", - " 67200K .......... .......... .......... .......... .......... 67% 10.8M 46s\n", - " 67250K .......... .......... .......... .......... .......... 67% 538K 46s\n", - " 67300K .......... .......... .......... .......... .......... 67% 603K 46s\n", - " 67350K .......... .......... .......... .......... .......... 67% 2.45M 46s\n", - " 67400K .......... .......... .......... .......... .......... 67% 437K 46s\n", - " 67450K .......... .......... .......... .......... .......... 67% 13.5M 46s\n", - " 67500K .......... .......... .......... .......... .......... 67% 1.72M 46s\n", - " 67550K .......... .......... .......... .......... .......... 67% 852K 46s\n", - " 67600K .......... .......... .......... .......... .......... 67% 1.32M 46s\n", - " 67650K .......... .......... .......... .......... .......... 67% 5.05M 46s\n", - " 67700K .......... .......... .......... .......... .......... 67% 1.02M 46s\n", - " 67750K .......... .......... .......... .......... .......... 67% 1.36M 46s\n", - " 67800K .......... .......... .......... .......... .......... 67% 1000K 45s\n", - " 67850K .......... .......... .......... .......... .......... 67% 1.32M 45s\n", - " 67900K .......... .......... .......... .......... .......... 67% 13.3M 45s\n", - " 67950K .......... .......... .......... .......... .......... 68% 921K 45s\n", - " 68000K .......... .......... .......... .......... .......... 68% 1.38M 45s\n", - " 68050K .......... .......... .......... .......... .......... 68% 964K 45s\n", - " 68100K .......... .......... .......... .......... .......... 68% 1.64M 45s\n", - " 68150K .......... .......... .......... .......... .......... 68% 5.41M 45s\n", - " 68200K .......... .......... .......... .......... .......... 68% 800K 45s\n", - " 68250K .......... .......... .......... .......... .......... 68% 1.49M 45s\n", - " 68300K .......... .......... .......... .......... .......... 68% 956K 45s\n", - " 68350K .......... .......... .......... .......... .......... 68% 5.68M 44s\n", - " 68400K .......... .......... .......... .......... .......... 68% 1.39M 44s\n", - " 68450K .......... .......... .......... .......... .......... 68% 611K 44s\n", - " 68500K .......... .......... .......... .......... .......... 68% 5.37M 44s\n", - " 68550K .......... .......... .......... .......... .......... 68% 662K 44s\n", - " 68600K .......... .......... .......... .......... .......... 68% 2.17M 44s\n", - " 68650K .......... .......... .......... .......... .......... 68% 781K 44s\n", - " 68700K .......... .......... .......... .......... .......... 68% 2.47M 44s\n", - " 68750K .......... .......... .......... .......... .......... 68% 590K 44s\n", - " 68800K .......... .......... .......... .......... .......... 68% 7.00M 44s\n", - " 68850K .......... .......... .......... .......... .......... 68% 6.17M 44s\n", - " 68900K .......... .......... .......... .......... .......... 68% 648K 44s\n", - " 68950K .......... .......... .......... .......... .......... 69% 6.52M 43s\n", - " 69000K .......... .......... .......... .......... .......... 69% 655K 43s\n", - " 69050K .......... .......... .......... .......... .......... 69% 4.16M 43s\n", - " 69100K .......... .......... .......... .......... .......... 69% 9.41M 43s\n", - " 69150K .......... .......... .......... .......... .......... 69% 630K 43s\n", - " 69200K .......... .......... .......... .......... .......... 69% 7.89M 43s\n", - " 69250K .......... .......... .......... .......... .......... 69% 599K 43s\n", - " 69300K .......... .......... .......... .......... .......... 69% 8.74M 43s\n", - " 69350K .......... .......... .......... .......... .......... 69% 606K 43s\n", - " 69400K .......... .......... .......... .......... .......... 69% 8.97M 43s\n", - " 69450K .......... .......... .......... .......... .......... 69% 570K 43s\n", - " 69500K .......... .......... .......... .......... .......... 69% 5.26M 43s\n", - " 69550K .......... .......... .......... .......... .......... 69% 4.86M 42s\n", - " 69600K .......... .......... .......... .......... .......... 69% 553K 42s\n", - " 69650K .......... .......... .......... .......... .......... 69% 12.0M 42s\n", - " 69700K .......... .......... .......... .......... .......... 69% 514K 42s\n", - " 69750K .......... .......... .......... .......... .......... 69% 1.63M 42s\n", - " 69800K .......... .......... .......... .......... .......... 69% 838K 42s\n", - " 69850K .......... .......... .......... .......... .......... 69% 1.79M 42s\n", - " 69900K .......... .......... .......... .......... .......... 69% 744K 42s\n", - " 69950K .......... .......... .......... .......... .......... 70% 2.78M 42s\n", - " 70000K .......... .......... .......... .......... .......... 70% 3.63M 42s\n", - " 70050K .......... .......... .......... .......... .......... 70% 693K 42s\n", - " 70100K .......... .......... .......... .......... .......... 70% 2.73M 42s\n", - " 70150K .......... .......... .......... .......... .......... 70% 718K 41s\n", - " 70200K .......... .......... .......... .......... .......... 70% 5.25M 41s\n", - " 70250K .......... .......... .......... .......... .......... 70% 3.59M 41s\n", - " 70300K .......... .......... .......... .......... .......... 70% 646K 41s\n", - " 70350K .......... .......... .......... .......... .......... 70% 3.58M 41s\n", - " 70400K .......... .......... .......... .......... .......... 70% 637K 41s\n", - " 70450K .......... .......... .......... .......... .......... 70% 5.68M 41s\n", - " 70500K .......... .......... .......... .......... .......... 70% 638K 41s\n", - " 70550K .......... .......... .......... .......... .......... 70% 8.08M 41s\n", - " 70600K .......... .......... .......... .......... .......... 70% 659K 41s\n", - " 70650K .......... .......... .......... .......... .......... 70% 4.86M 41s\n", - " 70700K .......... .......... .......... .......... .......... 70% 632K 41s\n", - " 70750K .......... .......... .......... .......... .......... 70% 694K 41s\n", - " 70800K .......... .......... .......... .......... .......... 70% 3.31M 40s\n", - " 70850K .......... .......... .......... .......... .......... 70% 4.19M 40s\n", - " 70900K .......... .......... .......... .......... .......... 70% 706K 40s\n", - " 70950K .......... .......... .......... .......... .......... 71% 3.55M 40s\n", - " 71000K .......... .......... .......... .......... .......... 71% 712K 40s\n", - " 71050K .......... .......... .......... .......... .......... 71% 3.18M 40s\n", - " 71100K .......... .......... .......... .......... .......... 71% 684K 40s\n", - " 71150K .......... .......... .......... .......... .......... 71% 4.63M 40s\n", - " 71200K .......... .......... .......... .......... .......... 71% 624K 40s\n", - " 71250K .......... .......... .......... .......... .......... 71% 13.8M 40s\n", - " 71300K .......... .......... .......... .......... .......... 71% 618K 40s\n", - " 71350K .......... .......... .......... .......... .......... 71% 6.15M 40s\n", - " 71400K .......... .......... .......... .......... .......... 71% 6.06M 39s\n", - " 71450K .......... .......... .......... .......... .......... 71% 620K 39s\n", - " 71500K .......... .......... .......... .......... .......... 71% 4.63M 39s\n", - " 71550K .......... .......... .......... .......... .......... 71% 6.72M 39s\n", - " 71600K .......... .......... .......... .......... .......... 71% 564K 39s\n", - " 71650K .......... .......... .......... .......... .......... 71% 624K 39s\n", - " 71700K .......... .......... .......... .......... .......... 71% 6.10M 39s\n", - " 71750K .......... .......... .......... .......... .......... 71% 660K 39s\n", - " 71800K .......... .......... .......... .......... .......... 71% 4.26M 39s\n", - " 71850K .......... .......... .......... .......... .......... 71% 660K 39s\n", - " 71900K .......... .......... .......... .......... .......... 71% 5.34M 39s\n", - " 71950K .......... .......... .......... .......... .......... 72% 291K 39s\n", - " 72000K .......... .......... .......... .......... .......... 72% 73.4M 39s\n", - " 72050K .......... .......... .......... .......... .......... 72% 600K 38s\n", - " 72100K .......... .......... .......... .......... .......... 72% 4.88M 38s\n", - " 72150K .......... .......... .......... .......... .......... 72% 510K 38s\n", - " 72200K .......... .......... .......... .......... .......... 72% 2.34M 38s\n", - " 72250K .......... .......... .......... .......... .......... 72% 51.6M 38s\n", - " 72300K .......... .......... .......... .......... .......... 72% 595K 38s\n", - " 72350K .......... .......... .......... .......... .......... 72% 4.21M 38s\n", - " 72400K .......... .......... .......... .......... .......... 72% 666K 38s\n", - " 72450K .......... .......... .......... .......... .......... 72% 4.20M 38s\n", - " 72500K .......... .......... .......... .......... .......... 72% 9.66M 38s\n", - " 72550K .......... .......... .......... .......... .......... 72% 573K 38s\n", - " 72600K .......... .......... .......... .......... .......... 72% 3.38M 38s\n", - " 72650K .......... .......... .......... .......... .......... 72% 602K 38s\n", - " 72700K .......... .......... .......... .......... .......... 72% 3.45M 37s\n", - " 72750K .......... .......... .......... .......... .......... 72% 627K 37s\n", - " 72800K .......... .......... .......... .......... .......... 72% 1.12M 37s\n", - " 72850K .......... .......... .......... .......... .......... 72% 853K 37s\n", - " 72900K .......... .......... .......... .......... .......... 72% 1.44M 37s\n", - " 72950K .......... .......... .......... .......... .......... 73% 9.18M 37s\n", - " 73000K .......... .......... .......... .......... .......... 73% 615K 37s\n", - " 73050K .......... .......... .......... .......... .......... 73% 5.72M 37s\n", - " 73100K .......... .......... .......... .......... .......... 73% 539K 37s\n", - " 73150K .......... .......... .......... .......... .......... 73% 16.4M 37s\n", - " 73200K .......... .......... .......... .......... .......... 73% 3.28M 37s\n", - " 73250K .......... .......... .......... .......... .......... 73% 643K 37s\n", - " 73300K .......... .......... .......... .......... .......... 73% 4.85M 37s\n", - " 73350K .......... .......... .......... .......... .......... 73% 689K 36s\n", - " 73400K .......... .......... .......... .......... .......... 73% 3.81M 36s\n", - " 73450K .......... .......... .......... .......... .......... 73% 599K 36s\n", - " 73500K .......... .......... .......... .......... .......... 73% 5.72M 36s\n", - " 73550K .......... .......... .......... .......... .......... 73% 670K 36s\n", - " 73600K .......... .......... .......... .......... .......... 73% 4.41M 36s\n", - " 73650K .......... .......... .......... .......... .......... 73% 768K 36s\n", - " 73700K .......... .......... .......... .......... .......... 73% 2.16M 36s\n", - " 73750K .......... .......... .......... .......... .......... 73% 826K 36s\n", - " 73800K .......... .......... .......... .......... .......... 73% 1.97M 36s\n", - " 73850K .......... .......... .......... .......... .......... 73% 858K 36s\n", - " 73900K .......... .......... .......... .......... .......... 73% 1.57M 36s\n", - " 73950K .......... .......... .......... .......... .......... 74% 852K 36s\n", - " 74000K .......... .......... .......... .......... .......... 74% 1.73M 35s\n", - " 74050K .......... .......... .......... .......... .......... 74% 846K 35s\n", - " 74100K .......... .......... .......... .......... .......... 74% 3.29M 35s\n", - " 74150K .......... .......... .......... .......... .......... 74% 633K 35s\n", - " 74200K .......... .......... .......... .......... .......... 74% 3.81M 35s\n", - " 74250K .......... .......... .......... .......... .......... 74% 666K 35s\n", - " 74300K .......... .......... .......... .......... .......... 74% 4.78M 35s\n", - " 74350K .......... .......... .......... .......... .......... 74% 652K 35s\n", - " 74400K .......... .......... .......... .......... .......... 74% 734K 35s\n", - " 74450K .......... .......... .......... .......... .......... 74% 3.10M 35s\n", - " 74500K .......... .......... .......... .......... .......... 74% 737K 35s\n", - " 74550K .......... .......... .......... .......... .......... 74% 2.92M 35s\n", - " 74600K .......... .......... .......... .......... .......... 74% 2.44M 34s\n", - " 74650K .......... .......... .......... .......... .......... 74% 740K 34s\n", - " 74700K .......... .......... .......... .......... .......... 74% 2.74M 34s\n", - " 74750K .......... .......... .......... .......... .......... 74% 5.26M 34s\n", - " 74800K .......... .......... .......... .......... .......... 74% 700K 34s\n", - " 74850K .......... .......... .......... .......... .......... 74% 2.37M 34s\n", - " 74900K .......... .......... .......... .......... .......... 74% 668K 34s\n", - " 74950K .......... .......... .......... .......... .......... 75% 4.22M 34s\n", - " 75000K .......... .......... .......... .......... .......... 75% 15.1M 34s\n", - " 75050K .......... .......... .......... .......... .......... 75% 620K 34s\n", - " 75100K .......... .......... .......... .......... .......... 75% 5.79M 34s\n", - " 75150K .......... .......... .......... .......... .......... 75% 609K 34s\n", - " 75200K .......... .......... .......... .......... .......... 75% 3.54M 34s\n", - " 75250K .......... .......... .......... .......... .......... 75% 4.07M 33s\n", - " 75300K .......... .......... .......... .......... .......... 75% 574K 33s\n", - " 75350K .......... .......... .......... .......... .......... 75% 113M 33s\n", - " 75400K .......... .......... .......... .......... .......... 75% 484K 33s\n", - " 75450K .......... .......... .......... .......... .......... 75% 5.32M 33s\n", - " 75500K .......... .......... .......... .......... .......... 75% 649K 33s\n", - " 75550K .......... .......... .......... .......... .......... 75% 672K 33s\n", - " 75600K .......... .......... .......... .......... .......... 75% 4.36M 33s\n", - " 75650K .......... .......... .......... .......... .......... 75% 8.81M 33s\n", - " 75700K .......... .......... .......... .......... .......... 75% 646K 33s\n", - " 75750K .......... .......... .......... .......... .......... 75% 2.20M 33s\n", - " 75800K .......... .......... .......... .......... .......... 75% 690K 33s\n", - " 75850K .......... .......... .......... .......... .......... 75% 2.80M 33s\n", - " 75900K .......... .......... .......... .......... .......... 75% 16.1M 32s\n", - " 75950K .......... .......... .......... .......... .......... 76% 630K 32s\n", - " 76000K .......... .......... .......... .......... .......... 76% 4.61M 32s\n", - " 76050K .......... .......... .......... .......... .......... 76% 689K 32s\n", - " 76100K .......... .......... .......... .......... .......... 76% 2.76M 32s\n", - " 76150K .......... .......... .......... .......... .......... 76% 4.04M 32s\n", - " 76200K .......... .......... .......... .......... .......... 76% 766K 32s\n", - " 76250K .......... .......... .......... .......... .......... 76% 2.04M 32s\n", - " 76300K .......... .......... .......... .......... .......... 76% 778K 32s\n", - " 76350K .......... .......... .......... .......... .......... 76% 3.30M 32s\n", - " 76400K .......... .......... .......... .......... .......... 76% 4.69M 32s\n", - " 76450K .......... .......... .......... .......... .......... 76% 519K 32s\n", - " 76500K .......... .......... .......... .......... .......... 76% 74.2M 32s\n", - " 76550K .......... .......... .......... .......... .......... 76% 610K 32s\n", - " 76600K .......... .......... .......... .......... .......... 76% 4.09M 31s\n", - " 76650K .......... .......... .......... .......... .......... 76% 476K 31s\n", - " 76700K .......... .......... .......... .......... .......... 76% 75.8M 31s\n", - " 76750K .......... .......... .......... .......... .......... 76% 557K 31s\n", - " 76800K .......... .......... .......... .......... .......... 76% 2.95M 31s\n", - " 76850K .......... .......... .......... .......... .......... 76% 760K 31s\n", - " 76900K .......... .......... .......... .......... .......... 76% 1.84M 31s\n", - " 76950K .......... .......... .......... .......... .......... 77% 4.34M 31s\n", - " 77000K .......... .......... .......... .......... .......... 77% 670K 31s\n", - " 77050K .......... .......... .......... .......... .......... 77% 3.75M 31s\n", - " 77100K .......... .......... .......... .......... .......... 77% 988K 31s\n", - " 77150K .......... .......... .......... .......... .......... 77% 1.44M 31s\n", - " 77200K .......... .......... .......... .......... .......... 77% 943K 31s\n", - " 77250K .......... .......... .......... .......... .......... 77% 6.36M 30s\n", - " 77300K .......... .......... .......... .......... .......... 77% 1.26M 30s\n", - " 77350K .......... .......... .......... .......... .......... 77% 297K 30s\n", - " 77400K .......... .......... .......... .......... .......... 77% 288K 30s\n", - " 77450K .......... .......... .......... .......... .......... 77% 565K 30s\n", - " 77500K .......... .......... .......... .......... .......... 77% 584K 30s\n", - " 77550K .......... .......... .......... .......... .......... 77% 685K 30s\n", - " 77600K .......... .......... .......... .......... .......... 77% 3.25M 30s\n", - " 77650K .......... .......... .......... .......... .......... 77% 633K 30s\n", - " 77700K .......... .......... .......... .......... .......... 77% 6.84M 30s\n", - " 77750K .......... .......... .......... .......... .......... 77% 613K 30s\n", - " 77800K .......... .......... .......... .......... .......... 77% 740K 30s\n", - " 77850K .......... .......... .......... .......... .......... 77% 2.78M 30s\n", - " 77900K .......... .......... .......... .......... .......... 77% 610K 30s\n", - " 77950K .......... .......... .......... .......... .......... 78% 7.48M 30s\n", - " 78000K .......... .......... .......... .......... .......... 78% 604K 29s\n", - " 78050K .......... .......... .......... .......... .......... 78% 4.59M 29s\n", - " 78100K .......... .......... .......... .......... .......... 78% 632K 29s\n", - " 78150K .......... .......... .......... .......... .......... 78% 715K 29s\n", - " 78200K .......... .......... .......... .......... .......... 78% 2.28M 29s\n", - " 78250K .......... .......... .......... .......... .......... 78% 658K 29s\n", - " 78300K .......... .......... .......... .......... .......... 78% 4.93M 29s\n", - " 78350K .......... .......... .......... .......... .......... 78% 583K 29s\n", - " 78400K .......... .......... .......... .......... .......... 78% 5.36M 29s\n", - " 78450K .......... .......... .......... .......... .......... 78% 521K 29s\n", - " 78500K .......... .......... .......... .......... .......... 78% 1.04M 29s\n", - " 78550K .......... .......... .......... .......... .......... 78% 1.27M 29s\n", - " 78600K .......... .......... .......... .......... .......... 78% 830K 29s\n", - " 78650K .......... .......... .......... .......... .......... 78% 1.74M 29s\n", - " 78700K .......... .......... .......... .......... .......... 78% 686K 28s\n", - " 78750K .......... .......... .......... .......... .......... 78% 1.25M 28s\n", - " 78800K .......... .......... .......... .......... .......... 78% 900K 28s\n", - " 78850K .......... .......... .......... .......... .......... 78% 1.50M 28s\n", - " 78900K .......... .......... .......... .......... .......... 78% 947K 28s\n", - " 78950K .......... .......... .......... .......... .......... 79% 1.18M 28s\n", - " 79000K .......... .......... .......... .......... .......... 79% 1.03M 28s\n", - " 79050K .......... .......... .......... .......... .......... 79% 888K 28s\n", - " 79100K .......... .......... .......... .......... .......... 79% 1.51M 28s\n", - " 79150K .......... .......... .......... .......... .......... 79% 636K 28s\n", - " 79200K .......... .......... .......... .......... .......... 79% 2.26M 28s\n", - " 79250K .......... .......... .......... .......... .......... 79% 790K 28s\n", - " 79300K .......... .......... .......... .......... .......... 79% 1.50M 28s\n", - " 79350K .......... .......... .......... .......... .......... 79% 839K 28s\n", - " 79400K .......... .......... .......... .......... .......... 79% 1.18M 27s\n", - " 79450K .......... .......... .......... .......... .......... 79% 1.04M 27s\n", - " 79500K .......... .......... .......... .......... .......... 79% 1.26M 27s\n", - " 79550K .......... .......... .......... .......... .......... 79% 1.05M 27s\n", - " 79600K .......... .......... .......... .......... .......... 79% 886K 27s\n", - " 79650K .......... .......... .......... .......... .......... 79% 1.42M 27s\n", - " 79700K .......... .......... .......... .......... .......... 79% 756K 27s\n", - " 79750K .......... .......... .......... .......... .......... 79% 2.33M 27s\n", - " 79800K .......... .......... .......... .......... .......... 79% 746K 27s\n", - " 79850K .......... .......... .......... .......... .......... 79% 2.38M 27s\n", - " 79900K .......... .......... .......... .......... .......... 79% 733K 27s\n", - " 79950K .......... .......... .......... .......... .......... 80% 2.52M 27s\n", - " 80000K .......... .......... .......... .......... .......... 80% 772K 27s\n", - " 80050K .......... .......... .......... .......... .......... 80% 1.26M 27s\n", - " 80100K .......... .......... .......... .......... .......... 80% 886K 26s\n", - " 80150K .......... .......... .......... .......... .......... 80% 1.61M 26s\n", - " 80200K .......... .......... .......... .......... .......... 80% 956K 26s\n", - " 80250K .......... .......... .......... .......... .......... 80% 341K 26s\n", - " 80300K .......... .......... .......... .......... .......... 80% 181M 26s\n", - " 80350K .......... .......... .......... .......... .......... 80% 191K 26s\n", - " 80400K .......... .......... .......... .......... .......... 80% 553K 26s\n", - " 80450K .......... .......... .......... .......... .......... 80% 578K 26s\n", - " 80500K .......... .......... .......... .......... .......... 80% 482K 26s\n", - " 80550K .......... .......... .......... .......... .......... 80% 571K 26s\n", - " 80600K .......... .......... .......... .......... .......... 80% 645K 26s\n", - " 80650K .......... .......... .......... .......... .......... 80% 1.03M 26s\n", - " 80700K .......... .......... .......... .......... .......... 80% 711K 26s\n", - " 80750K .......... .......... .......... .......... .......... 80% 728K 26s\n", - " 80800K .......... .......... .......... .......... .......... 80% 645K 26s\n", - " 80850K .......... .......... .......... .......... .......... 80% 615K 26s\n", - " 80900K .......... .......... .......... .......... .......... 80% 684K 25s\n", - " 80950K .......... .......... .......... .......... .......... 81% 1.46M 25s\n", - " 81000K .......... .......... .......... .......... .......... 81% 684K 25s\n", - " 81050K .......... .......... .......... .......... .......... 81% 660K 25s\n", - " 81100K .......... .......... .......... .......... .......... 81% 660K 25s\n", - " 81150K .......... .......... .......... .......... .......... 81% 681K 25s\n", - " 81200K .......... .......... .......... .......... .......... 81% 897K 25s\n", - " 81250K .......... .......... .......... .......... .......... 81% 975K 25s\n", - " 81300K .......... .......... .......... .......... .......... 81% 722K 25s\n", - " 81350K .......... .......... .......... .......... .......... 81% 671K 25s\n", - " 81400K .......... .......... .......... .......... .......... 81% 847K 25s\n", - " 81450K .......... .......... .......... .......... .......... 81% 1.05M 25s\n", - " 81500K .......... .......... .......... .......... .......... 81% 656K 25s\n", - " 81550K .......... .......... .......... .......... .......... 81% 741K 25s\n", - " 81600K .......... .......... .......... .......... .......... 81% 851K 25s\n", - " 81650K .......... .......... .......... .......... .......... 81% 1.10M 24s\n", - " 81700K .......... .......... .......... .......... .......... 81% 668K 24s\n", - " 81750K .......... .......... .......... .......... .......... 81% 691K 24s\n", - " 81800K .......... .......... .......... .......... .......... 81% 819K 24s\n", - " 81850K .......... .......... .......... .......... .......... 81% 1.22M 24s\n", - " 81900K .......... .......... .......... .......... .......... 81% 660K 24s\n", - " 81950K .......... .......... .......... .......... .......... 82% 713K 24s\n", - " 82000K .......... .......... .......... .......... .......... 82% 788K 24s\n", - " 82050K .......... .......... .......... .......... .......... 82% 1.13M 24s\n", - " 82100K .......... .......... .......... .......... .......... 82% 552K 24s\n", - " 82150K .......... .......... .......... .......... .......... 82% 961K 24s\n", - " 82200K .......... .......... .......... .......... .......... 82% 1.59M 24s\n", - " 82250K .......... .......... .......... .......... .......... 82% 663K 24s\n", - " 82300K .......... .......... .......... .......... .......... 82% 699K 24s\n", - " 82350K .......... .......... .......... .......... .......... 82% 798K 23s\n", - " 82400K .......... .......... .......... .......... .......... 82% 611K 23s\n", - " 82450K .......... .......... .......... .......... .......... 82% 2.32M 23s\n", - " 82500K .......... .......... .......... .......... .......... 82% 687K 23s\n", - " 82550K .......... .......... .......... .......... .......... 82% 584K 23s\n", - " 82600K .......... .......... .......... .......... .......... 82% 2.62M 23s\n", - " 82650K .......... .......... .......... .......... .......... 82% 729K 23s\n", - " 82700K .......... .......... .......... .......... .......... 82% 597K 23s\n", - " 82750K .......... .......... .......... .......... .......... 82% 3.87M 23s\n", - " 82800K .......... .......... .......... .......... .......... 82% 639K 23s\n", - " 82850K .......... .......... .......... .......... .......... 82% 619K 23s\n", - " 82900K .......... .......... .......... .......... .......... 82% 5.97M 23s\n", - " 82950K .......... .......... .......... .......... .......... 83% 628K 23s\n", - " 83000K .......... .......... .......... .......... .......... 83% 621K 23s\n", - " 83050K .......... .......... .......... .......... .......... 83% 6.04M 23s\n", - " 83100K .......... .......... .......... .......... .......... 83% 616K 22s\n", - " 83150K .......... .......... .......... .......... .......... 83% 607K 22s\n", - " 83200K .......... .......... .......... .......... .......... 83% 8.76M 22s\n", - " 83250K .......... .......... .......... .......... .......... 83% 610K 22s\n", - " 83300K .......... .......... .......... .......... .......... 83% 617K 22s\n", - " 83350K .......... .......... .......... .......... .......... 83% 5.71M 22s\n", - " 83400K .......... .......... .......... .......... .......... 83% 629K 22s\n", - " 83450K .......... .......... .......... .......... .......... 83% 639K 22s\n", - " 83500K .......... .......... .......... .......... .......... 83% 3.73M 22s\n", - " 83550K .......... .......... .......... .......... .......... 83% 668K 22s\n", - " 83600K .......... .......... .......... .......... .......... 83% 659K 22s\n", - " 83650K .......... .......... .......... .......... .......... 83% 3.23M 22s\n", - " 83700K .......... .......... .......... .......... .......... 83% 649K 22s\n", - " 83750K .......... .......... .......... .......... .......... 83% 5.34M 22s\n", - " 83800K .......... .......... .......... .......... .......... 83% 620K 21s\n", - " 83850K .......... .......... .......... .......... .......... 83% 614K 21s\n", - " 83900K .......... .......... .......... .......... .......... 83% 5.18M 21s\n", - " 83950K .......... .......... .......... .......... .......... 84% 620K 21s\n", - " 84000K .......... .......... .......... .......... .......... 84% 644K 21s\n", - " 84050K .......... .......... .......... .......... .......... 84% 4.02M 21s\n", - " 84100K .......... .......... .......... .......... .......... 84% 607K 21s\n", - " 84150K .......... .......... .......... .......... .......... 84% 940K 21s\n", - " 84200K .......... .......... .......... .......... .......... 84% 1.45M 21s\n", - " 84250K .......... .......... .......... .......... .......... 84% 715K 21s\n", - " 84300K .......... .......... .......... .......... .......... 84% 656K 21s\n", - " 84350K .......... .......... .......... .......... .......... 84% 2.02M 21s\n", - " 84400K .......... .......... .......... .......... .......... 84% 775K 21s\n", - " 84450K .......... .......... .......... .......... .......... 84% 2.36M 21s\n", - " 84500K .......... .......... .......... .......... .......... 84% 702K 21s\n", - " 84550K .......... .......... .......... .......... .......... 84% 745K 20s\n", - " 84600K .......... .......... .......... .......... .......... 84% 1.66M 20s\n", - " 84650K .......... .......... .......... .......... .......... 84% 836K 20s\n", - " 84700K .......... .......... .......... .......... .......... 84% 676K 20s\n", - " 84750K .......... .......... .......... .......... .......... 84% 3.03M 20s\n", - " 84800K .......... .......... .......... .......... .......... 84% 716K 20s\n", - " 84850K .......... .......... .......... .......... .......... 84% 1.39M 20s\n", - " 84900K .......... .......... .......... .......... .......... 84% 971K 20s\n", - " 84950K .......... .......... .......... .......... .......... 85% 1.41M 20s\n", - " 85000K .......... .......... .......... .......... .......... 85% 893K 20s\n", - " 85050K .......... .......... .......... .......... .......... 85% 728K 20s\n", - " 85100K .......... .......... .......... .......... .......... 85% 1.22M 20s\n", - " 85150K .......... .......... .......... .......... .......... 85% 941K 20s\n", - " 85200K .......... .......... .......... .......... .......... 85% 1.50M 20s\n", - " 85250K .......... .......... .......... .......... .......... 85% 842K 19s\n", - " 85300K .......... .......... .......... .......... .......... 85% 659K 19s\n", - " 85350K .......... .......... .......... .......... .......... 85% 4.26M 19s\n", - " 85400K .......... .......... .......... .......... .......... 85% 600K 19s\n", - " 85450K .......... .......... .......... .......... .......... 85% 1.82M 19s\n", - " 85500K .......... .......... .......... .......... .......... 85% 851K 19s\n", - " 85550K .......... .......... .......... .......... .......... 85% 1.78M 19s\n", - " 85600K .......... .......... .......... .......... .......... 85% 799K 19s\n", - " 85650K .......... .......... .......... .......... .......... 85% 715K 19s\n", - " 85700K .......... .......... .......... .......... .......... 85% 1.56M 19s\n", - " 85750K .......... .......... .......... .......... .......... 85% 752K 19s\n", - " 85800K .......... .......... .......... .......... .......... 85% 2.53M 19s\n", - " 85850K .......... .......... .......... .......... .......... 85% 639K 19s\n", - " 85900K .......... .......... .......... .......... .......... 85% 6.62M 19s\n", - " 85950K .......... .......... .......... .......... .......... 86% 636K 19s\n", - " 86000K .......... .......... .......... .......... .......... 86% 630K 18s\n", - " 86050K .......... .......... .......... .......... .......... 86% 5.20M 18s\n", - " 86100K .......... .......... .......... .......... .......... 86% 655K 18s\n", - " 86150K .......... .......... .......... .......... .......... 86% 5.74M 18s\n", - " 86200K .......... .......... .......... .......... .......... 86% 627K 18s\n", - " 86250K .......... .......... .......... .......... .......... 86% 772K 18s\n", - " 86300K .......... .......... .......... .......... .......... 86% 2.53M 18s\n", - " 86350K .......... .......... .......... .......... .......... 86% 655K 18s\n", - " 86400K .......... .......... .......... .......... .......... 86% 3.55M 18s\n", - " 86450K .......... .......... .......... .......... .......... 86% 725K 18s\n", - " 86500K .......... .......... .......... .......... .......... 86% 3.41M 18s\n", - " 86550K .......... .......... .......... .......... .......... 86% 651K 18s\n", - " 86600K .......... .......... .......... .......... .......... 86% 4.28M 18s\n", - " 86650K .......... .......... .......... .......... .......... 86% 694K 18s\n", - " 86700K .......... .......... .......... .......... .......... 86% 837K 17s\n", - " 86750K .......... .......... .......... .......... .......... 86% 2.04M 17s\n", - " 86800K .......... .......... .......... .......... .......... 86% 516K 17s\n", - " 86850K .......... .......... .......... .......... .......... 86% 5.72M 17s\n", - " 86900K .......... .......... .......... .......... .......... 86% 584K 17s\n", - " 86950K .......... .......... .......... .......... .......... 87% 3.81M 17s\n", - " 87000K .......... .......... .......... .......... .......... 87% 660K 17s\n", - " 87050K .......... .......... .......... .......... .......... 87% 2.29M 17s\n", - " 87100K .......... .......... .......... .......... .......... 87% 680K 17s\n", - " 87150K .......... .......... .......... .......... .......... 87% 795K 17s\n", - " 87200K .......... .......... .......... .......... .......... 87% 2.11M 17s\n", - " 87250K .......... .......... .......... .......... .......... 87% 811K 17s\n", - " 87300K .......... .......... .......... .......... .......... 87% 2.24M 17s\n", - " 87350K .......... .......... .......... .......... .......... 87% 784K 17s\n", - " 87400K .......... .......... .......... .......... .......... 87% 204K 17s\n", - " 87450K .......... .......... .......... .......... .......... 87% 9.32M 16s\n", - " 87500K .......... .......... .......... .......... .......... 87% 626K 16s\n", - " 87550K .......... .......... .......... .......... .......... 87% 5.67M 16s\n", - " 87600K .......... .......... .......... .......... .......... 87% 665K 16s\n", - " 87650K .......... .......... .......... .......... .......... 87% 3.74M 16s\n", - " 87700K .......... .......... .......... .......... .......... 87% 699K 16s\n", - " 87750K .......... .......... .......... .......... .......... 87% 3.43M 16s\n", - " 87800K .......... .......... .......... .......... .......... 87% 706K 16s\n", - " 87850K .......... .......... .......... .......... .......... 87% 2.74M 16s\n", - " 87900K .......... .......... .......... .......... .......... 87% 779K 16s\n", - " 87950K .......... .......... .......... .......... .......... 88% 2.11M 16s\n", - " 88000K .......... .......... .......... .......... .......... 88% 805K 16s\n", - " 88050K .......... .......... .......... .......... .......... 88% 2.08M 16s\n", - " 88100K .......... .......... .......... .......... .......... 88% 899K 16s\n", - " 88150K .......... .......... .......... .......... .......... 88% 2.03M 16s\n", - " 88200K .......... .......... .......... .......... .......... 88% 768K 15s\n", - " 88250K .......... .......... .......... .......... .......... 88% 3.13M 15s\n", - " 88300K .......... .......... .......... .......... .......... 88% 882K 15s\n", - " 88350K .......... .......... .......... .......... .......... 88% 1.46M 15s\n", - " 88400K .......... .......... .......... .......... .......... 88% 1002K 15s\n", - " 88450K .......... .......... .......... .......... .......... 88% 2.86M 15s\n", - " 88500K .......... .......... .......... .......... .......... 88% 750K 15s\n", - " 88550K .......... .......... .......... .......... .......... 88% 3.01M 15s\n", - " 88600K .......... .......... .......... .......... .......... 88% 1.81M 15s\n", - " 88650K .......... .......... .......... .......... .......... 88% 855K 15s\n", - " 88700K .......... .......... .......... .......... .......... 88% 1.67M 15s\n", - " 88750K .......... .......... .......... .......... .......... 88% 955K 15s\n", - " 88800K .......... .......... .......... .......... .......... 88% 1.56M 15s\n", - " 88850K .......... .......... .......... .......... .......... 88% 950K 15s\n", - " 88900K .......... .......... .......... .......... .......... 88% 1.52M 14s\n", - " 88950K .......... .......... .......... .......... .......... 89% 1001K 14s\n", - " 89000K .......... .......... .......... .......... .......... 89% 1.47M 14s\n", - " 89050K .......... .......... .......... .......... .......... 89% 1.00M 14s\n", - " 89100K .......... .......... .......... .......... .......... 89% 1.43M 14s\n", - " 89150K .......... .......... .......... .......... .......... 89% 1.35M 14s\n", - " 89200K .......... .......... .......... .......... .......... 89% 1011K 14s\n", - " 89250K .......... .......... .......... .......... .......... 89% 1.01M 14s\n", - " 89300K .......... .......... .......... .......... .......... 89% 1.39M 14s\n", - " 89350K .......... .......... .......... .......... .......... 89% 973K 14s\n", - " 89400K .......... .......... .......... .......... .......... 89% 1.60M 14s\n", - " 89450K .......... .......... .......... .......... .......... 89% 857K 14s\n", - " 89500K .......... .......... .......... .......... .......... 89% 3.81M 14s\n", - " 89550K .......... .......... .......... .......... .......... 89% 693K 14s\n", - " 89600K .......... .......... .......... .......... .......... 89% 1.68M 14s\n", - " 89650K .......... .......... .......... .......... .......... 89% 973K 13s\n", - " 89700K .......... .......... .......... .......... .......... 89% 1.50M 13s\n", - " 89750K .......... .......... .......... .......... .......... 89% 9.94M 13s\n", - " 89800K .......... .......... .......... .......... .......... 89% 594K 13s\n", - " 89850K .......... .......... .......... .......... .......... 89% 8.30M 13s\n", - " 89900K .......... .......... .......... .......... .......... 89% 634K 13s\n", - " 89950K .......... .......... .......... .......... .......... 90% 1.27M 13s\n", - " 90000K .......... .......... .......... .......... .......... 90% 1.08M 13s\n", - " 90050K .......... .......... .......... .......... .......... 90% 1.22M 13s\n", - " 90100K .......... .......... .......... .......... .......... 90% 1.11M 13s\n", - " 90150K .......... .......... .......... .......... .......... 90% 1.19M 13s\n", - " 90200K .......... .......... .......... .......... .......... 90% 4.87M 13s\n", - " 90250K .......... .......... .......... .......... .......... 90% 642K 13s\n", - " 90300K .......... .......... .......... .......... .......... 90% 7.31M 13s\n", - " 90350K .......... .......... .......... .......... .......... 90% 675K 13s\n", - " 90400K .......... .......... .......... .......... .......... 90% 5.61M 12s\n", - " 90450K .......... .......... .......... .......... .......... 90% 670K 12s\n", - " 90500K .......... .......... .......... .......... .......... 90% 3.97M 12s\n", - " 90550K .......... .......... .......... .......... .......... 90% 1.20M 12s\n", - " 90600K .......... .......... .......... .......... .......... 90% 1.16M 12s\n", - " 90650K .......... .......... .......... .......... .......... 90% 1.14M 12s\n", - " 90700K .......... .......... .......... .......... .......... 90% 1.17M 12s\n", - " 90750K .......... .......... .......... .......... .......... 90% 1.27M 12s\n", - " 90800K .......... .......... .......... .......... .......... 90% 1.12M 12s\n", - " 90850K .......... .......... .......... .......... .......... 90% 1.02M 12s\n", - " 90900K .......... .......... .......... .......... .......... 90% 1.30M 12s\n", - " 90950K .......... .......... .......... .......... .......... 91% 1.08M 12s\n", - " 91000K .......... .......... .......... .......... .......... 91% 1.27M 12s\n", - " 91050K .......... .......... .......... .......... .......... 91% 7.46M 12s\n", - " 91100K .......... .......... .......... .......... .......... 91% 678K 11s\n", - " 91150K .......... .......... .......... .......... .......... 91% 4.40M 11s\n", - " 91200K .......... .......... .......... .......... .......... 91% 664K 11s\n", - " 91250K .......... .......... .......... .......... .......... 91% 10.3M 11s\n", - " 91300K .......... .......... .......... .......... .......... 91% 659K 11s\n", - " 91350K .......... .......... .......... .......... .......... 91% 3.36M 11s\n", - " 91400K .......... .......... .......... .......... .......... 91% 716K 11s\n", - " 91450K .......... .......... .......... .......... .......... 91% 3.58M 11s\n", - " 91500K .......... .......... .......... .......... .......... 91% 717K 11s\n", - " 91550K .......... .......... .......... .......... .......... 91% 1.08M 11s\n", - " 91600K .......... .......... .......... .......... .......... 91% 1.30M 11s\n", - " 91650K .......... .......... .......... .......... .......... 91% 1.09M 11s\n", - " 91700K .......... .......... .......... .......... .......... 91% 1.02M 11s\n", - " 91750K .......... .......... .......... .......... .......... 91% 1.33M 11s\n", - " 91800K .......... .......... .......... .......... .......... 91% 1006K 11s\n", - " 91850K .......... .......... .......... .......... .......... 91% 21.3M 10s\n", - " 91900K .......... .......... .......... .......... .......... 91% 500K 10s\n", - " 91950K .......... .......... .......... .......... .......... 92% 8.62M 10s\n", - " 92000K .......... .......... .......... .......... .......... 92% 597K 10s\n", - " 92050K .......... .......... .......... .......... .......... 92% 6.64M 10s\n", - " 92100K .......... .......... .......... .......... .......... 92% 590K 10s\n", - " 92150K .......... .......... .......... .......... .......... 92% 5.72M 10s\n", - " 92200K .......... .......... .......... .......... .......... 92% 661K 10s\n", - " 92250K .......... .......... .......... .......... .......... 92% 5.11M 10s\n", - " 92300K .......... .......... .......... .......... .......... 92% 636K 10s\n", - " 92350K .......... .......... .......... .......... .......... 92% 9.85M 10s\n", - " 92400K .......... .......... .......... .......... .......... 92% 633K 10s\n", - " 92450K .......... .......... .......... .......... .......... 92% 3.20M 10s\n", - " 92500K .......... .......... .......... .......... .......... 92% 723K 10s\n", - " 92550K .......... .......... .......... .......... .......... 92% 1.80M 10s\n", - " 92600K .......... .......... .......... .......... .......... 92% 172M 9s\n", - " 92650K .......... .......... .......... .......... .......... 92% 646K 9s\n", - " 92700K .......... .......... .......... .......... .......... 92% 4.94M 9s\n", - " 92750K .......... .......... .......... .......... .......... 92% 670K 9s\n", - " 92800K .......... .......... .......... .......... .......... 92% 5.87M 9s\n", - " 92850K .......... .......... .......... .......... .......... 92% 636K 9s\n", - " 92900K .......... .......... .......... .......... .......... 92% 878K 9s\n", - " 92950K .......... .......... .......... .......... .......... 93% 1.87M 9s\n", - " 93000K .......... .......... .......... .......... .......... 93% 824K 9s\n", - " 93050K .......... .......... .......... .......... .......... 93% 10.2M 9s\n", - " 93100K .......... .......... .......... .......... .......... 93% 1.97M 9s\n", - " 93150K .......... .......... .......... .......... .......... 93% 649K 9s\n", - " 93200K .......... .......... .......... .......... .......... 93% 7.01M 9s\n", - " 93250K .......... .......... .......... .......... .......... 93% 669K 9s\n", - " 93300K .......... .......... .......... .......... .......... 93% 3.69M 9s\n", - " 93350K .......... .......... .......... .......... .......... 93% 656K 9s\n", - " 93400K .......... .......... .......... .......... .......... 93% 6.27M 8s\n", - " 93450K .......... .......... .......... .......... .......... 93% 675K 8s\n", - " 93500K .......... .......... .......... .......... .......... 93% 9.04M 8s\n", - " 93550K .......... .......... .......... .......... .......... 93% 665K 8s\n", - " 93600K .......... .......... .......... .......... .......... 93% 4.78M 8s\n", - " 93650K .......... .......... .......... .......... .......... 93% 692K 8s\n", - " 93700K .......... .......... .......... .......... .......... 93% 3.87M 8s\n", - " 93750K .......... .......... .......... .......... .......... 93% 712K 8s\n", - " 93800K .......... .......... .......... .......... .......... 93% 3.34M 8s\n", - " 93850K .......... .......... .......... .......... .......... 93% 716K 8s\n", - " 93900K .......... .......... .......... .......... .......... 93% 3.17M 8s\n", - " 93950K .......... .......... .......... .......... .......... 94% 724K 8s\n", - " 94000K .......... .......... .......... .......... .......... 94% 3.48M 8s\n", - " 94050K .......... .......... .......... .......... .......... 94% 692K 8s\n", - " 94100K .......... .......... .......... .......... .......... 94% 3.52M 8s\n", - " 94150K .......... .......... .......... .......... .......... 94% 703K 7s\n", - " 94200K .......... .......... .......... .......... .......... 94% 11.0M 7s\n", - " 94250K .......... .......... .......... .......... .......... 94% 579K 7s\n", - " 94300K .......... .......... .......... .......... .......... 94% 8.24M 7s\n", - " 94350K .......... .......... .......... .......... .......... 94% 1.77M 7s\n", - " 94400K .......... .......... .......... .......... .......... 94% 879K 7s\n", - " 94450K .......... .......... .......... .......... .......... 94% 1.74M 7s\n", - " 94500K .......... .......... .......... .......... .......... 94% 883K 7s\n", - " 94550K .......... .......... .......... .......... .......... 94% 1.75M 7s\n", - " 94600K .......... .......... .......... .......... .......... 94% 890K 7s\n", - " 94650K .......... .......... .......... .......... .......... 94% 2.64M 7s\n", - " 94700K .......... .......... .......... .......... .......... 94% 2.45M 7s\n", - " 94750K .......... .......... .......... .......... .......... 94% 790K 7s\n", - " 94800K .......... .......... .......... .......... .......... 94% 2.24M 7s\n", - " 94850K .......... .......... .......... .......... .......... 94% 7.42M 7s\n", - " 94900K .......... .......... .......... .......... .......... 94% 811K 6s\n", - " 94950K .......... .......... .......... .......... .......... 95% 1.87M 6s\n", - " 95000K .......... .......... .......... .......... .......... 95% 858K 6s\n", - " 95050K .......... .......... .......... .......... .......... 95% 1.00M 6s\n", - " 95100K .......... .......... .......... .......... .......... 95% 1.36M 6s\n", - " 95150K .......... .......... .......... .......... .......... 95% 1.06M 6s\n", - " 95200K .......... .......... .......... .......... .......... 95% 1.26M 6s\n", - " 95250K .......... .......... .......... .......... .......... 95% 1.04M 6s\n", - " 95300K .......... .......... .......... .......... .......... 95% 1.21M 6s\n", - " 95350K .......... .......... .......... .......... .......... 95% 1.11M 6s\n", - " 95400K .......... .......... .......... .......... .......... 95% 1.06M 6s\n", - " 95450K .......... .......... .......... .......... .......... 95% 1.38M 6s\n", - " 95500K .......... .......... .......... .......... .......... 95% 1.03M 6s\n", - " 95550K .......... .......... .......... .......... .......... 95% 5.59M 6s\n", - " 95600K .......... .......... .......... .......... .......... 95% 1.21M 6s\n", - " 95650K .......... .......... .......... .......... .......... 95% 1.04M 5s\n", - " 95700K .......... .......... .......... .......... .......... 95% 1.30M 5s\n", - " 95750K .......... .......... .......... .......... .......... 95% 1.06M 5s\n", - " 95800K .......... .......... .......... .......... .......... 95% 7.61M 5s\n", - " 95850K .......... .......... .......... .......... .......... 95% 1.24M 5s\n", - " 95900K .......... .......... .......... .......... .......... 95% 1021K 5s\n", - " 95950K .......... .......... .......... .......... .......... 96% 1.46M 5s\n", - " 96000K .......... .......... .......... .......... .......... 96% 8.76M 5s\n", - " 96050K .......... .......... .......... .......... .......... 96% 295K 5s\n", - " 96100K .......... .......... .......... .......... .......... 96% 150M 5s\n", - " 96150K .......... .......... .......... .......... .......... 96% 84.0K 5s\n", - " 96200K .......... .......... .......... .......... .......... 96% 513K 5s\n", - " 96250K .......... .......... .......... .......... .......... 96% 594K 5s\n", - " 96300K .......... .......... .......... .......... .......... 96% 483K 5s\n", - " 96350K .......... .......... .......... .......... .......... 96% 650K 5s\n", - " 96400K .......... .......... .......... .......... .......... 96% 4.33M 5s\n", - " 96450K .......... .......... .......... .......... .......... 96% 594K 4s\n", - " 96500K .......... .......... .......... .......... .......... 96% 638K 4s\n", - " 96550K .......... .......... .......... .......... .......... 96% 1.23M 4s\n", - " 96600K .......... .......... .......... .......... .......... 96% 733K 4s\n", - " 96650K .......... .......... .......... .......... .......... 96% 574K 4s\n", - " 96700K .......... .......... .......... .......... .......... 96% 843K 4s\n", - " 96750K .......... .......... .......... .......... .......... 96% 1.47M 4s\n", - " 96800K .......... .......... .......... .......... .......... 96% 537K 4s\n", - " 96850K .......... .......... .......... .......... .......... 96% 1.25M 4s\n", - " 96900K .......... .......... .......... .......... .......... 96% 996K 4s\n", - " 96950K .......... .......... .......... .......... .......... 97% 611K 4s\n", - " 97000K .......... .......... .......... .......... .......... 97% 1.34M 4s\n", - " 97050K .......... .......... .......... .......... .......... 97% 929K 4s\n", - " 97100K .......... .......... .......... .......... .......... 97% 623K 4s\n", - " 97150K .......... .......... .......... .......... .......... 97% 1.54M 4s\n", - " 97200K .......... .......... .......... .......... .......... 97% 876K 4s\n", - " 97250K .......... .......... .......... .......... .......... 97% 643K 3s\n", - " 97300K .......... .......... .......... .......... .......... 97% 1.69M 3s\n", - " 97350K .......... .......... .......... .......... .......... 97% 845K 3s\n", - " 97400K .......... .......... .......... .......... .......... 97% 655K 3s\n", - " 97450K .......... .......... .......... .......... .......... 97% 1.66M 3s\n", - " 97500K .......... .......... .......... .......... .......... 97% 811K 3s\n", - " 97550K .......... .......... .......... .......... .......... 97% 668K 3s\n", - " 97600K .......... .......... .......... .......... .......... 97% 3.98M 3s\n", - " 97650K .......... .......... .......... .......... .......... 97% 583K 3s\n", - " 97700K .......... .......... .......... .......... .......... 97% 752K 3s\n", - " 97750K .......... .......... .......... .......... .......... 97% 2.29M 3s\n", - " 97800K .......... .......... .......... .......... .......... 97% 606K 3s\n", - " 97850K .......... .......... .......... .......... .......... 97% 782K 3s\n", - " 97900K .......... .......... .......... .......... .......... 97% 2.22M 3s\n", - " 97950K .......... .......... .......... .......... .......... 98% 639K 3s\n", - " 98000K .......... .......... .......... .......... .......... 98% 4.51M 2s\n", - " 98050K .......... .......... .......... .......... .......... 98% 622K 2s\n", - " 98100K .......... .......... .......... .......... .......... 98% 823K 2s\n", - " 98150K .......... .......... .......... .......... .......... 98% 1.88M 2s\n", - " 98200K .......... .......... .......... .......... .......... 98% 696K 2s\n", - " 98250K .......... .......... .......... .......... .......... 98% 779K 2s\n", - " 98300K .......... .......... .......... .......... .......... 98% 1.65M 2s\n", - " 98350K .......... .......... .......... .......... .......... 98% 747K 2s\n", - " 98400K .......... .......... .......... .......... .......... 98% 735K 2s\n", - " 98450K .......... .......... .......... .......... .......... 98% 2.65M 2s\n", - " 98500K .......... .......... .......... .......... .......... 98% 724K 2s\n", - " 98550K .......... .......... .......... .......... .......... 98% 1.93M 2s\n", - " 98600K .......... .......... .......... .......... .......... 98% 833K 2s\n", - " 98650K .......... .......... .......... .......... .......... 98% 1.89M 2s\n", - " 98700K .......... .......... .......... .......... .......... 98% 747K 2s\n", - " 98750K .......... .......... .......... .......... .......... 98% 672K 2s\n", - " 98800K .......... .......... .......... .......... .......... 98% 2.60M 1s\n", - " 98850K .......... .......... .......... .......... .......... 98% 733K 1s\n", - " 98900K .......... .......... .......... .......... .......... 98% 2.67M 1s\n", - " 98950K .......... .......... .......... .......... .......... 99% 684K 1s\n", - " 99000K .......... .......... .......... .......... .......... 99% 699K 1s\n", - " 99050K .......... .......... .......... .......... .......... 99% 2.76M 1s\n", - " 99100K .......... .......... .......... .......... .......... 99% 697K 1s\n", - " 99150K .......... .......... .......... .......... .......... 99% 3.86M 1s\n", - " 99200K .......... .......... .......... .......... .......... 99% 652K 1s\n", - " 99250K .......... .......... .......... .......... .......... 99% 4.66M 1s\n", - " 99300K .......... .......... .......... .......... .......... 99% 655K 1s\n", - " 99350K .......... .......... .......... .......... .......... 99% 697K 1s\n", - " 99400K .......... .......... .......... .......... .......... 99% 3.04M 1s\n", - " 99450K .......... .......... .......... .......... .......... 99% 687K 1s\n", - " 99500K .......... .......... .......... .......... .......... 99% 3.40M 1s\n", - " 99550K .......... .......... .......... .......... .......... 99% 698K 1s\n", - " 99600K .......... .......... .......... .......... .......... 99% 754K 0s\n", - " 99650K .......... .......... .......... .......... .......... 99% 2.76M 0s\n", - " 99700K .......... .......... .......... .......... .......... 99% 630K 0s\n", - " 99750K .......... .......... .......... .......... .......... 99% 1.41M 0s\n", - " 99800K .......... .......... .......... .......... .......... 99% 1009K 0s\n", - " 99850K .......... .......... .......... .......... .......... 99% 1.34M 0s\n", - " 99900K .......... .......... .......... .......... .......... 99% 943K 0s\n", - " 99950K .......... .......... .......... .......... ..... 100% 211K=2m8s\n", "\n", - "2017-03-23 13:09:01 (784 KB/s) - ‘model/resnet-50-0000.params’ saved [102395376/102395376]\n", - "\n" + " 0K .......... .......... .......... .......... .......... 67% 153K 0s\n", + " 50K .......... .......... .... 100% 148K=0.5s" ] }, { @@ -2144,9 +126,9 @@ } ], "source": [ - "\"wget http://data.mxnet.io/models/imagenet/resnet/50-layers/resnet-50-symbol.json -P model/\"!\n", + "\"wget http://data.mxnet.io/models/imagenet/resnet/50-layers/resnet-50-symbol.json -P model/ -q --show-progress\"!\n", "\n", - "\"wget http://data.mxnet.io/models/imagenet/resnet/50-layers/resnet-50-0000.params -P model/\"!" + "\"wget http://data.mxnet.io/models/imagenet/resnet/50-layers/resnet-50-0000.params -P model/ -q --show-progress\"!" ] }, { From f4063b95887b15eb9a47e980844f9265dffbc5d0 Mon Sep 17 00:00:00 2001 From: Nagmote Date: Thu, 23 Mar 2017 16:45:37 -0700 Subject: [PATCH 14/21] visualization warning removed --- scala/basic/predict_scala.ipynb | 290 +++++--------------------------- 1 file changed, 43 insertions(+), 247 deletions(-) diff --git a/scala/basic/predict_scala.ipynb b/scala/basic/predict_scala.ipynb index 3f381e038..ec41e8e18 100644 --- a/scala/basic/predict_scala.ipynb +++ b/scala/basic/predict_scala.ipynb @@ -141,7 +141,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": { "collapsed": false }, @@ -158,48 +158,48 @@ { "data": { "text/plain": [ - "\u001b[36mresnet\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@301c1c1\n", + "\u001b[36mresnet\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@56b5a235\n", "\u001b[36margParamsResnet\u001b[0m: \u001b[32mMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mNDArray\u001b[0m] = \u001b[33mMap\u001b[0m(\n", - " \u001b[32m\"stage1_unit3_conv3_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@89b0a4dc,\n", - " \u001b[32m\"stage3_unit2_bn1_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@86c56651,\n", - " \u001b[32m\"stage2_unit3_conv2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@a82db0fc,\n", - " \u001b[32m\"stage4_unit3_bn1_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@7c5beb31,\n", - " \u001b[32m\"stage1_unit3_bn1_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@a50bbff2,\n", - " \u001b[32m\"stage3_unit1_conv3_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@cc375d57,\n", - " \u001b[32m\"stage2_unit1_bn3_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@a26b6c28,\n", - " \u001b[32m\"stage2_unit4_conv3_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@bcfcb3fc,\n", - " \u001b[32m\"stage2_unit4_bn3_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@c3c51773,\n", - " \u001b[32m\"stage3_unit4_bn1_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@49c1a0c1,\n", - " \u001b[32m\"stage3_unit6_conv2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@67f8b5ec,\n", - " \u001b[32m\"stage2_unit2_bn3_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@f4623b37,\n", - " \u001b[32m\"stage3_unit2_bn3_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@757458dc,\n", - " \u001b[32m\"stage1_unit2_bn2_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@c6a86cd0,\n", - " \u001b[32m\"stage4_unit1_conv2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@c2ef8c8a,\n", - " \u001b[32m\"stage2_unit2_conv2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@bcc8ff8d,\n", - " \u001b[32m\"stage3_unit6_bn2_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@bce67b7e,\n", - " \u001b[32m\"stage2_unit2_bn2_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@fb7a7812,\n", - " \u001b[32m\"stage1_unit2_bn1_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@6f7bfa1e,\n", + " \u001b[32m\"stage1_unit3_conv3_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@dd62b3ac,\n", + " \u001b[32m\"stage3_unit2_bn1_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@4869b270,\n", + " \u001b[32m\"stage2_unit3_conv2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@87d3d2dc,\n", + " \u001b[32m\"stage4_unit3_bn1_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@84209042,\n", + " \u001b[32m\"stage1_unit3_bn1_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@7a9f4c52,\n", + " \u001b[32m\"stage3_unit1_conv3_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@d463a406,\n", + " \u001b[32m\"stage2_unit1_bn3_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@b84d8eb5,\n", + " \u001b[32m\"stage2_unit4_conv3_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@a7a69033,\n", + " \u001b[32m\"stage2_unit4_bn3_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@ec41b811,\n", + " \u001b[32m\"stage3_unit4_bn1_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@950aaf0c,\n", + " \u001b[32m\"stage3_unit6_conv2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@32fcc228,\n", + " \u001b[32m\"stage2_unit2_bn3_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@994e9bfe,\n", + " \u001b[32m\"stage3_unit2_bn3_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@5e97ef69,\n", + " \u001b[32m\"stage1_unit2_bn2_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@d3354926,\n", + " \u001b[32m\"stage4_unit1_conv2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@98b68f03,\n", + " \u001b[32m\"stage2_unit2_conv2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@d16108a0,\n", + " \u001b[32m\"stage3_unit6_bn2_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@9bbc2c2d,\n", + " \u001b[32m\"stage2_unit2_bn2_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@a1a93420,\n", + " \u001b[32m\"stage1_unit2_bn1_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@67cb7cd0,\n", "\u001b[33m...\u001b[0m\n", "\u001b[36mauxParamsResnet\u001b[0m: \u001b[32mMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mNDArray\u001b[0m] = \u001b[33mMap\u001b[0m(\n", - " \u001b[32m\"stage2_unit2_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@946b22bf,\n", - " \u001b[32m\"stage3_unit6_bn2_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@86a903bb,\n", - " \u001b[32m\"stage2_unit2_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@1e3f6190,\n", - " \u001b[32m\"stage3_unit1_bn2_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@63294439,\n", - " \u001b[32m\"stage1_unit3_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@96763bc5,\n", - " \u001b[32m\"stage2_unit4_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@bab1e037,\n", - " \u001b[32m\"stage2_unit4_bn3_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@c2219e25,\n", - " \u001b[32m\"stage3_unit1_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@6dc31d76,\n", - " \u001b[32m\"stage2_unit3_bn2_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@ed1175d4,\n", - " \u001b[32m\"stage2_unit1_bn3_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@a6a3724b,\n", - " \u001b[32m\"stage1_unit2_bn1_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@6464cb13,\n", - " \u001b[32m\"stage4_unit3_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@3790c48a,\n", - " \u001b[32m\"stage1_unit2_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@60c14fda,\n", - " \u001b[32m\"stage3_unit6_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@7d26d8a7,\n", - " \u001b[32m\"stage3_unit5_bn2_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@7020beac,\n", - " \u001b[32m\"stage2_unit2_bn2_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@f05cdd64,\n", - " \u001b[32m\"stage2_unit1_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@ebc70586,\n", - " \u001b[32m\"stage1_unit1_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@21059403,\n", - " \u001b[32m\"stage3_unit3_bn3_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@c267e9aa,\n", + " \u001b[32m\"stage2_unit2_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@e7b7de4a,\n", + " \u001b[32m\"stage3_unit6_bn2_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@5eeb2eeb,\n", + " \u001b[32m\"stage2_unit2_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@e1932992,\n", + " \u001b[32m\"stage3_unit1_bn2_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@6f2c9370,\n", + " \u001b[32m\"stage1_unit3_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@b1fa3f55,\n", + " \u001b[32m\"stage2_unit4_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@8e2a60bb,\n", + " \u001b[32m\"stage2_unit4_bn3_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@d2129062,\n", + " \u001b[32m\"stage3_unit1_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@7c521226,\n", + " \u001b[32m\"stage2_unit3_bn2_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@a746a3a3,\n", + " \u001b[32m\"stage2_unit1_bn3_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@942a806e,\n", + " \u001b[32m\"stage1_unit2_bn1_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@91e5ad00,\n", + " \u001b[32m\"stage4_unit3_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@2bc6bafd,\n", + " \u001b[32m\"stage1_unit2_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@9112eae5,\n", + " \u001b[32m\"stage3_unit6_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@63ea781d,\n", + " \u001b[32m\"stage3_unit5_bn2_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@56f8789e,\n", + " \u001b[32m\"stage2_unit2_bn2_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@9637b319,\n", + " \u001b[32m\"stage2_unit1_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@bf9f5368,\n", + " \u001b[32m\"stage1_unit1_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@2596a8e3,\n", + " \u001b[32m\"stage3_unit3_bn3_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@9140fe7c,\n", "\u001b[33m...\u001b[0m" ] }, @@ -221,219 +221,15 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Warning: node 'bn_data_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'bn_data_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'bn0_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'bn0_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit1_bn1_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit1_bn1_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit1_bn1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit1_bn1_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit1_bn2_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit1_bn2_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit1_bn2_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit1_bn2_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit1_bn3_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit1_bn3_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit1_bn3_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit1_bn3_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit2_bn1_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit2_bn1_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit2_bn1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit2_bn1_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit2_bn2_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit2_bn2_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit2_bn2_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit2_bn2_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit2_bn3_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit2_bn3_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit2_bn3_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit2_bn3_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit3_bn1_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit3_bn1_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit3_bn1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit3_bn1_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit3_bn2_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit3_bn2_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit3_bn2_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit3_bn2_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit3_bn3_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit3_bn3_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit3_bn3_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage1_unit3_bn3_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit1_bn1_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit1_bn1_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit1_bn1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit1_bn1_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit1_bn2_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit1_bn2_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit1_bn2_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit1_bn2_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit1_bn3_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit1_bn3_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit1_bn3_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit1_bn3_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit2_bn1_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit2_bn1_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit2_bn1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit2_bn1_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit2_bn2_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit2_bn2_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit2_bn2_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit2_bn2_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit2_bn3_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit2_bn3_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit2_bn3_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit2_bn3_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit3_bn1_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit3_bn1_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit3_bn1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit3_bn1_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit3_bn2_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit3_bn2_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit3_bn2_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit3_bn2_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit3_bn3_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit3_bn3_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit3_bn3_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit3_bn3_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit4_bn1_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit4_bn1_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit4_bn1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit4_bn1_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit4_bn2_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit4_bn2_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit4_bn2_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit4_bn2_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit4_bn3_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit4_bn3_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit4_bn3_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage2_unit4_bn3_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit1_bn1_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit1_bn1_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit1_bn1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit1_bn1_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit1_bn2_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit1_bn2_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit1_bn2_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit1_bn2_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit1_bn3_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit1_bn3_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit1_bn3_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit1_bn3_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit2_bn1_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit2_bn1_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit2_bn1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit2_bn1_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit2_bn2_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit2_bn2_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit2_bn2_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit2_bn2_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit2_bn3_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit2_bn3_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit2_bn3_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit2_bn3_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit3_bn1_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit3_bn1_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit3_bn1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit3_bn1_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit3_bn2_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit3_bn2_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit3_bn2_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit3_bn2_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit3_bn3_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit3_bn3_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit3_bn3_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit3_bn3_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit4_bn1_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit4_bn1_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit4_bn1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit4_bn1_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit4_bn2_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit4_bn2_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit4_bn2_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit4_bn2_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit4_bn3_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit4_bn3_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit4_bn3_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit4_bn3_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit5_bn1_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit5_bn1_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit5_bn1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit5_bn1_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit5_bn2_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit5_bn2_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit5_bn2_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit5_bn2_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit5_bn3_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit5_bn3_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit5_bn3_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit5_bn3_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit6_bn1_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit6_bn1_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit6_bn1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit6_bn1_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit6_bn2_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit6_bn2_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit6_bn2_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit6_bn2_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit6_bn3_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit6_bn3_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit6_bn3_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage3_unit6_bn3_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit1_bn1_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit1_bn1_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit1_bn1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit1_bn1_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit1_bn2_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit1_bn2_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit1_bn2_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit1_bn2_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit1_bn3_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit1_bn3_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit1_bn3_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit1_bn3_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit2_bn1_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit2_bn1_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit2_bn1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit2_bn1_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit2_bn2_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit2_bn2_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit2_bn2_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit2_bn2_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit2_bn3_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit2_bn3_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit2_bn3_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit2_bn3_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit3_bn1_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit3_bn1_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit3_bn1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit3_bn1_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit3_bn2_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit3_bn2_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit3_bn2_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit3_bn2_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit3_bn3_gamma', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit3_bn3_beta', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit3_bn3_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'stage4_unit3_bn3_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'bn1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'bn1_moving_var', graph 'plot' size too small for label\n" - ] - }, { "data": { "text/plain": [ - "\u001b[36mdot\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@3154bd24" + "\u001b[36mdot\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@40fe88f2" ] }, "metadata": {}, @@ -441,7 +237,7 @@ } ], "source": [ - "val dot = Visualization.plotNetwork(symbol = resnet)\n", + "val dot = Visualization.plotNetwork(symbol = resnet, nodeAttrs = Map(\"shape\" -> \"oval\", \"fixedsize\" -> \"false\") )\n", "dot.render(engine = \"dot\", fileName = \"resnet\", path = \"model/\")" ] }, From 01f96821f0f72cbe1976576574311ac41245e2ca Mon Sep 17 00:00:00 2001 From: Nagmote Date: Fri, 31 Mar 2017 10:30:35 -0700 Subject: [PATCH 15/21] linear regression notebook added --- scala/tutorials/linear_regression_scala.ipynb | 508 ++++++++++++++++++ 1 file changed, 508 insertions(+) create mode 100644 scala/tutorials/linear_regression_scala.ipynb diff --git a/scala/tutorials/linear_regression_scala.ipynb b/scala/tutorials/linear_regression_scala.ipynb new file mode 100644 index 000000000..16fe9bea5 --- /dev/null +++ b/scala/tutorials/linear_regression_scala.ipynb @@ -0,0 +1,508 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# MXNet Basics - Linear Regression using MXNet" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Jupyter Scala kernel\n", + "Add mxnet scala jar which is created as a part of MXNet Scala package installation in classpath as follows:\n", + "\n", + "**Note**: Process to add this jar in your scala kernel classpath can differ according to the scala kernel you are using.\n", + "\n", + "We have used [jupyter-scala kernel](https://github.com/alexarchambault/jupyter-scala) for creating this notebook." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```\n", + "classpath.addPath()\n", + "\n", + "e.g\n", + "classpath.addPath(\"mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "classpath.addPath(\"/Users/roshanin/mxnet/scala-package/assembly/osx-x86_64-cpu/target/mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Import necessary packages as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36mml.dmlc.mxnet._\u001b[0m\n", + "\u001b[32mimport \u001b[36mml.dmlc.mxnet.io.{NDArrayIter}\u001b[0m\n", + "\u001b[32mimport \u001b[36mml.dmlc.mxnet.module.{FitParams, Module}\u001b[0m\n", + "\u001b[32mimport \u001b[36mml.dmlc.mxnet.optimizer.SGD\u001b[0m\n", + "\u001b[32mimport \u001b[36mml.dmlc.mxnet.Callback.Speedometer\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import ml.dmlc.mxnet._\n", + "import ml.dmlc.mxnet.io.{NDArrayIter}\n", + "import ml.dmlc.mxnet.module.{FitParams, Module}\n", + "import ml.dmlc.mxnet.optimizer.SGD\n", + "import ml.dmlc.mxnet.Callback.Speedometer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Prepare Data\n", + "\n", + "MXNet uses data in the form of **Data Iterators**. The code below illustrates how to encode a dataset into an iterator that MXNet can use. The data used in the example is made up of 2d data points with corresponding integer labels. The function we are trying to learn is:\n", + "\n", + " y = x1 + 2x2 ,\n", + " \n", + " where (x1,x2) is one training data point and y is the corresponding label. \n", + "\n", + "e.g. First label 5 is generated as follows:\n", + "\n", + "5 = 1 + 2*2 (where x1 = 1, x2=2)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "log4j:WARN No appenders could be found for logger (MXNetJVM).\n", + "log4j:WARN Please initialize the log4j system properly.\n", + "log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mtrainData\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mNDArray\u001b[0m] = \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@57e47ffa)\n", + "\u001b[36mtrainLabel\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mNDArray\u001b[0m] = \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@a040dbc2)\n", + "\u001b[36mbatchSize\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m1\u001b[0m\n", + "\u001b[36mevalData\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mNDArray\u001b[0m] = \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@ed4b006d)\n", + "\u001b[36mevalLabel\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mNDArray\u001b[0m] = \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@f8bc2cd5)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "//Training data\n", + "val trainData = IndexedSeq(NDArray.array(Array(1, 2, 3, 4, 5, 6, 3, 2, 7, 1, 6, 9), shape = Shape(6, 1, 2)))\n", + "val trainLabel = IndexedSeq(NDArray.array(Array(5, 11, 17, 7, 9, 24), shape = Shape(6)))\n", + "val batchSize = 1\n", + "\n", + "//Evaluation Data\n", + "val evalData = IndexedSeq(NDArray.array(Array(7, 2, 6, 10, 12, 2), shape = Shape(3, 1, 2)))\n", + "val evalLabel = IndexedSeq(NDArray.array(Array(11, 26, 16), shape = Shape(3)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once we have the data ready, we need to put it into an iterator and specify parameters such as the 'batch_size', and 'shuffle' which will determine the size of data the iterator feeds during each pass, and whether or not the data will be shuffled respectively." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mtrainIter\u001b[0m: \u001b[32mNDArrayIter\u001b[0m = non-empty iterator\n", + "\u001b[36mevalIter\u001b[0m: \u001b[32mNDArrayIter\u001b[0m = non-empty iterator" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val trainIter = new NDArrayIter(trainData, trainLabel, batchSize, false, \"pad\")\n", + "val evalIter = new NDArrayIter(evalData, evalLabel, batchSize, false, \"pad\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the above example, we have made use of NDArrayIter, which is used to iterate over numpy arrays. In general, there are many different types of iterators in MXNet based on the type of data you will be using. Their complete documentation can be found at [Scala API](http://mxnet.io/api/scala/docs/index.html#package)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## MXNet Classes\n", + "\n", + "1. [Model Class](http://mxnet.io/api/scala/model.html): The model class in MXNet is used to define the overall entity of the model. It contains the variable we want to minimize, the training data and labels, and some additional parameters such as the learning rate and optimization algorithm are defined at the model level.\n", + "\n", + "2. [Module Class](http://mxnet.io/api/scala/module.html): The module class provides an intermediate and high-level interface for performing computation with neural networks in MXNet.\n", + "\n", + "3. [Symbols](http://mxnet.io/api/scala/symbol.html): The actual MXNet network is defined using symbols. MXNet has different types of symbols, including data placeholders, neural network layers, and loss function symbols based on our requirement.\n", + "\n", + "4. [IO](http://mxnet.io/api/scala/io.html): The IO class as we already saw works on the data, and carries out operations like breaking the data into batches and shuffling it." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Defining the Model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "MXNet uses **Symbols** for defining a model. [Symbols](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.Symbol) are the building blocks of the model and compose various components of the model. Some of the parts symbols are used to define are:\n", + "1. Variables: A variable is a placeholder for future data. This symbol is used to define a spot which will be filled with training data/labels in the future when we are trying to train the model.\n", + "2. Neural Network Layers: The layers of a network or any other type of model are also defined by Symbols. Such a *symbol* takes one of the previous symbols as its input, does some transformation on them, and creates an output. One such example is the \"Fully Connected\" symbol which specifies a fully connected layer of a network. \n", + "3. Output Symbols: Output symbols are MXNet's way of defining a loss. They are suffixed with the work \"Output\" (eg. the SoftmaxOutput layer\" . You can also create your [own loss](https://github.com/dmlc/mxnet/blob/5b6a0eeee174f28ff0272d17748513ecd52a9ebe/docs/tutorials/r/CustomLossFunction.md#how-to-use-your-own-loss-function). Some examples of existing losses are: LinearRegressionOutput, which computes the l2-loss between it's input symbol and the actual labels provided to it, SoftmaxOutput, which computs the categorical cross-entropy. \n", + "\n", + "The ones described above, and other symbols are chained one after the other, servng as input to one another to create the network topology. More information about the different types of symbols can be found [here](http://mxnet.io/api/scala/symbol.html)\n", + " \n", + " \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mdata\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@78525c12\n", + "\u001b[36mlabel\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@4e85112e\n", + "\u001b[36mfc1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@3c61948a\n", + "\u001b[36msoftmax\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@5ecd7ee4\n", + "\u001b[36mres4_4\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mString\u001b[0m] = \u001b[33mArrayBuffer\u001b[0m(\u001b[32m\"data\"\u001b[0m, \u001b[32m\"fc1_weight\"\u001b[0m, \u001b[32m\"fc1_bias\"\u001b[0m, \u001b[32m\"label\"\u001b[0m)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val data = Symbol.Variable(\"data\")\n", + "val label = Symbol.Variable(\"label\")\n", + "val fc1 = Symbol.FullyConnected(\"fc1\")()(Map(\"data\" -> data, \"num_hidden\" -> 1))\n", + "val softmax = Symbol.LinearRegressionOutput()()(Map(\"data\" -> fc1, \"label\" -> label))\n", + "softmax.listArguments()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The above network uses the following layers:\n", + "\n", + "1. FullyConnected: The fully connected symbol represents a fully connected layer of a neural network (without any activation being applied), which in essence, is just a linear regression on the input attributes. It takes the following parameters:\n", + " a. data: Input to the layer (specify the symbol whose output should be fed here)\n", + " b. num_hidden: Number of hidden dimension which specifies the size of the output of the layer\n", + " \n", + " \n", + "2. Linear Regression Output: Output layers in MXNet aim at implementing a loss. In our example, the Linear Regression Output layer is used which specifies that an l2 loss needs to be applied against it's input and the actual labels provided to this layer. The parameters to this layer are:\n", + " a. data: Input to this layer (specify the symbol whose output should be fed here)\n", + " b. Label: The training label against whom we will compare the input to the layer for calculation of l2 loss" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note - *Naming Convention*: the label variable's name should be the same as the label_name parameter passed to your training data iterator. The default value of this is \"softmax_label\", but we have updated it to label in this tutorial as you can see in val label = Symbol.Variable(\"label\")**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, the network is stored into a *Model*, where you define the symbol who's value is to be minimised (in our case, softmax\"), the learning rate to be used while optimization and the number of epochs we want to train our model on." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can plot the network we have created in order to visualize it and save it by specifying \"path\" in `dot.render()`" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mdot\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@72a23b8" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val dot = Visualization.plotNetwork(symbol=softmax, nodeAttrs = Map(\"shape\" -> \"oval\", \"fixedsize\" -> \"false\") )\n", + "dot.render(engine = \"dot\", fileName = \"linearRegression\", path = \".\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Training the model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once we have defined the model structure, the next step is to train the parameters of the model to fit the training data. This is done by using the **fit()** function of the **Module** class." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mmod\u001b[0m: \u001b[32mModule\u001b[0m = ml.dmlc.mxnet.module.Module@76f4d37f" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val mod = new Module(softmax, labelNames = IndexedSeq(\"label\"))\n", + "\n", + "mod.fit(trainData = trainIter, evalData = scala.Option(evalIter), numEpoch = 1000, fitParams = new FitParams()\n", + " .setOptimizer(new SGD(learningRate = 0.01f, momentum = 0.9f, wd = 0.0001f)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Alternatively, you can also use [FeedForward network](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.FeedForward) and use [Model API](http://mxnet.io/api/scala/docs/index.html#ml.dmlc.mxnet.Model) of MXNet to build the model instead of Module. This can be done as follows:\n", + "\n", + "```scala\n", + " val model = new FeedForward(symbol = softmax, ctx = Context.cpu(0), numEpoch = 1000, optimizer = new SGD(learningRate = 0.01f, momentum = 0.9f, wd = 0.0001f))\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Using a trained model: (Testing and Inference) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once we have a trained model, we can do multiple things on it. We can use it for inference, we can evaluate the trained model on test data. This is shown below." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mprobArrays\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mNDArray\u001b[0m] = \u001b[33mArrayBuffer\u001b[0m(\n", + " ml.dmlc.mxnet.NDArray@85887f13,\n", + " ml.dmlc.mxnet.NDArray@c68f7cef,\n", + " ml.dmlc.mxnet.NDArray@d30a2eee\n", + ")\n", + "\u001b[36mprob1\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m11.000008F\u001b[0m)\n", + "\u001b[36mprob2\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m25.999908F\u001b[0m)\n", + "\u001b[36mprob3\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m15.999969F\u001b[0m)\n", + "\u001b[36mname\u001b[0m: \u001b[32mString\u001b[0m = \u001b[32m\"mse\"\u001b[0m\n", + "\u001b[36mvalue\u001b[0m: \u001b[32mFloat\u001b[0m = \u001b[32m3.1435168E-9F\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val probArrays = mod.predict(evalIter)\n", + "\n", + "val prob1 = probArrays(0).toArray\n", + "val prob2 = probArrays(1).toArray\n", + "val prob3 = probArrays(2).toArray\n", + "\n", + "val (name, value) = mod.score(evalIter, new MSE()).get\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "We can also evaluate our model for some metric. In this example, we are evaulating our model's mean squared error on the evaluation data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us try to add some noise to the evaluation data and see how the MSE changes\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mevalData\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mNDArray\u001b[0m] = \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@d5cb35ca)\n", + "\u001b[36mevalLabel\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mNDArray\u001b[0m] = \u001b[33mVector\u001b[0m(ml.dmlc.mxnet.NDArray@1319931b)\n", + "\u001b[36mevalIter\u001b[0m: \u001b[32mNDArrayIter\u001b[0m = non-empty iterator" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "//Evaluation Data\n", + "val evalData = IndexedSeq(NDArray.array(Array(7, 2, 6, 10, 12, 2), shape = Shape(3, 1, 2)))\n", + "val evalLabel = IndexedSeq(NDArray.array(Array(11.1f, 26.1f, 16.1f), shape = Shape(3))) //#Adding 0.1 to each of the values \n", + "\n", + "val evalIter = new NDArrayIter(evalData, evalLabel, batchSize, false, \"pad\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mname\u001b[0m: \u001b[32mString\u001b[0m = \u001b[32m\"mse\"\u001b[0m\n", + "\u001b[36mvalue\u001b[0m: \u001b[32mFloat\u001b[0m = \u001b[32m0.010007773F\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val (name, value) = mod.score(evalIter, new MSE()).get" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, you can create your own metrics and use it to evaluate your model. More information on metrics [here](http://mxnet-test.readthedocs.io/en/latest/api/metric.html)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Scala 2.11", + "language": "scala211", + "name": "scala211" + }, + "language_info": { + "codemirror_mode": "text/x-scala", + "file_extension": ".scala", + "mimetype": "text/x-scala", + "name": "scala211", + "pygments_lexer": "scala", + "version": "2.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From f5a26934a0c999a22c55343cb21b2e4e1682a265 Mon Sep 17 00:00:00 2001 From: Nagmote Date: Fri, 31 Mar 2017 11:14:48 -0700 Subject: [PATCH 16/21] opencv warning removed --- scala/basic/image_io_scala.ipynb | 2642 +----------------------------- 1 file changed, 16 insertions(+), 2626 deletions(-) diff --git a/scala/basic/image_io_scala.ipynb b/scala/basic/image_io_scala.ipynb index b591dcc2f..cce36e581 100644 --- a/scala/basic/image_io_scala.ipynb +++ b/scala/basic/image_io_scala.ipynb @@ -58,7 +58,7 @@ { "data": { "text/plain": [ - "\u001b[36mMXNET_HOME\u001b[0m: \u001b[32mString\u001b[0m = \u001b[32m\"/Users/roshanin/mxnet\"\u001b[0m" + "\u001b[36mMXNET_HOME\u001b[0m: \u001b[32mString\u001b[0m = \u001b[32m\"/home/ec2-user/src/mxnet\"\u001b[0m" ] }, "metadata": {}, @@ -67,7 +67,7 @@ ], "source": [ "// change this to your mxnet location\n", - "val MXNET_HOME = \"/Users/roshanin/mxnet\"" + "val MXNET_HOME = \"/home/ec2-user/src/mxnet\"" ] }, { @@ -77,2596 +77,6 @@ "collapsed": false }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "--2017-03-22 17:05:36-- http://www.vision.caltech.edu/Image_Datasets/Caltech101/101_ObjectCategories.tar.gz\n", - "Resolving www.vision.caltech.edu... 35.166.79.253, 52.88.12.207\n", - "Connecting to www.vision.caltech.edu|35.166.79.253|:80... connected.\n", - "HTTP request sent, awaiting response... 200 OK\n", - "Length: 131740031 (126M) [application/x-tar]\n", - "Saving to: ‘data/101_ObjectCategories.tar.gz’\n", - "\n", - " 0K .......... .......... .......... .......... .......... 0% 85.8K 24m58s\n", - " 50K .......... .......... .......... .......... .......... 0% 256K 16m40s\n", - " 100K .......... .......... .......... .......... .......... 0% 281K 13m39s\n", - " 150K .......... .......... .......... .......... .......... 0% 4.80M 10m21s\n", - " 200K .......... .......... .......... .......... .......... 0% 318K 9m37s\n", - " 250K .......... .......... .......... .......... .......... 0% 5.51M 8m5s\n", - " 300K .......... .......... .......... .......... .......... 0% 330K 7m51s\n", - " 350K .......... .......... .......... .......... .......... 0% 3.24M 6m57s\n", - " 400K .......... .......... .......... .......... .......... 0% 331K 6m53s\n", - " 450K .......... .......... .......... .......... .......... 0% 3.22M 6m16s\n", - " 500K .......... .......... .......... .......... .......... 0% 325K 6m17s\n", - " 550K .......... .......... .......... .......... .......... 0% 3.69M 5m48s\n", - " 600K .......... .......... .......... .......... .......... 0% 330K 5m51s\n", - " 650K .......... .......... .......... .......... .......... 0% 2.84M 5m29s\n", - " 700K .......... .......... .......... .......... .......... 0% 158K 6m1s\n", - " 750K .......... .......... .......... .......... .......... 0% 39.3M 5m39s\n", - " 800K .......... .......... .......... .......... .......... 0% 45.1K 8m5s\n", - " 850K .......... .......... .......... .......... .......... 0% 151K 8m25s\n", - " 900K .......... .......... .......... .......... .......... 0% 3.14M 8m1s\n", - " 950K .......... .......... .......... .......... .......... 0% 310K 7m57s\n", - " 1000K .......... .......... .......... .......... .......... 0% 6.97M 7m35s\n", - " 1050K .......... .......... .......... .......... .......... 0% 313K 7m33s\n", - " 1100K .......... .......... .......... .......... .......... 0% 4.78M 7m14s\n", - " 1150K .......... .......... .......... .......... .......... 0% 319K 7m12s\n", - " 1200K .......... .......... .......... .......... .......... 0% 4.41M 6m56s\n", - " 1250K .......... .......... .......... .......... .......... 1% 322K 6m55s\n", - " 1300K .......... .......... .......... .......... .......... 1% 3.93M 6m41s\n", - " 1350K .......... .......... .......... .......... .......... 1% 326K 6m40s\n", - " 1400K .......... .......... .......... .......... .......... 1% 3.82M 6m27s\n", - " 1450K .......... .......... .......... .......... .......... 1% 323K 6m27s\n", - " 1500K .......... .......... .......... .......... .......... 1% 3.58M 6m16s\n", - " 1550K .......... .......... .......... .......... .......... 1% 7.79M 6m4s\n", - " 1600K .......... .......... .......... .......... .......... 1% 308K 6m6s\n", - " 1650K .......... .......... .......... .......... .......... 1% 6.43M 5m55s\n", - " 1700K .......... .......... .......... .......... .......... 1% 329K 5m56s\n", - " 1750K .......... .......... .......... .......... .......... 1% 2.75M 5m47s\n", - " 1800K .......... .......... .......... .......... .......... 1% 325K 5m48s\n", - " 1850K .......... .......... .......... .......... .......... 1% 3.72M 5m40s\n", - " 1900K .......... .......... .......... .......... .......... 1% 321K 5m41s\n", - " 1950K .......... .......... .......... .......... .......... 1% 3.59M 5m33s\n", - " 2000K .......... .......... .......... .......... .......... 1% 311K 5m35s\n", - " 2050K .......... .......... .......... .......... .......... 1% 3.47M 5m28s\n", - " 2100K .......... .......... .......... .......... .......... 1% 335K 5m29s\n", - " 2150K .......... .......... .......... .......... .......... 1% 2.72M 5m22s\n", - " 2200K .......... .......... .......... .......... .......... 1% 330K 5m24s\n", - " 2250K .......... .......... .......... .......... .......... 1% 3.15M 5m17s\n", - " 2300K .......... .......... .......... .......... .......... 1% 326K 5m19s\n", - " 2350K .......... .......... .......... .......... .......... 1% 2.84M 5m13s\n", - " 2400K .......... .......... .......... .......... .......... 1% 5.71M 5m7s\n", - " 2450K .......... .......... .......... .......... .......... 1% 285K 5m9s\n", - " 2500K .......... .......... .......... .......... .......... 1% 148K 5m20s\n", - " 2550K .......... .......... .......... .......... .......... 2% 135M 5m13s\n", - " 2600K .......... .......... .......... .......... .......... 2% 115K 5m28s\n", - " 2650K .......... .......... .......... .......... .......... 2% 74.7K 5m53s\n", - " 2700K .......... .......... .......... .......... .......... 2% 293K 5m54s\n", - " 2750K .......... .......... .......... .......... .......... 2% 296K 5m56s\n", - " 2800K .......... .......... .......... .......... .......... 2% 316K 5m56s\n", - " 2850K .......... .......... .......... .......... .......... 2% 2.43M 5m51s\n", - " 2900K .......... .......... .......... .......... .......... 2% 295K 5m52s\n", - " 2950K .......... .......... .......... .......... .......... 2% 303K 5m53s\n", - " 3000K .......... .......... .......... .......... .......... 2% 326K 5m53s\n", - " 3050K .......... .......... .......... .......... .......... 2% 324K 5m54s\n", - " 3100K .......... .......... .......... .......... .......... 2% 1.44M 5m49s\n", - " 3150K .......... .......... .......... .......... .......... 2% 309K 5m50s\n", - " 3200K .......... .......... .......... .......... .......... 2% 339K 5m50s\n", - " 3250K .......... .......... .......... .......... .......... 2% 339K 5m50s\n", - " 3300K .......... .......... .......... .......... .......... 2% 948K 5m47s\n", - " 3350K .......... .......... .......... .......... .......... 2% 315K 5m48s\n", - " 3400K .......... .......... .......... .......... .......... 2% 379K 5m47s\n", - " 3450K .......... .......... .......... .......... .......... 2% 1.08M 5m44s\n", - " 3500K .......... .......... .......... .......... .......... 2% 315K 5m44s\n", - " 3550K .......... .......... .......... .......... .......... 2% 383K 5m44s\n", - " 3600K .......... .......... .......... .......... .......... 2% 1.04M 5m41s\n", - " 3650K .......... .......... .......... .......... .......... 2% 322K 5m41s\n", - " 3700K .......... .......... .......... .......... .......... 2% 373K 5m41s\n", - " 3750K .......... .......... .......... .......... .......... 2% 601K 5m39s\n", - " 3800K .......... .......... .......... .......... .......... 2% 316K 5m40s\n", - " 3850K .......... .......... .......... .......... .......... 3% 426K 5m39s\n", - " 3900K .......... .......... .......... .......... .......... 3% 594K 5m37s\n", - " 3950K .......... .......... .......... .......... .......... 3% 376K 5m37s\n", - " 4000K .......... .......... .......... .......... .......... 3% 423K 5m36s\n", - " 4050K .......... .......... .......... .......... .......... 3% 800K 5m34s\n", - " 4100K .......... .......... .......... .......... .......... 3% 312K 5m35s\n", - " 4150K .......... .......... .......... .......... .......... 3% 394K 5m34s\n", - " 4200K .......... .......... .......... .......... .......... 3% 440K 5m34s\n", - " 4250K .......... .......... .......... .......... .......... 3% 492K 5m32s\n", - " 4300K .......... .......... .......... .......... .......... 3% 434K 5m32s\n", - " 4350K .......... .......... .......... .......... .......... 3% 392K 5m32s\n", - " 4400K .......... .......... .......... .......... .......... 3% 796K 5m29s\n", - " 4450K .......... .......... .......... .......... .......... 3% 379K 5m29s\n", - " 4500K .......... .......... .......... .......... .......... 3% 358K 5m29s\n", - " 4550K .......... .......... .......... .......... .......... 3% 702K 5m28s\n", - " 4600K .......... .......... .......... .......... .......... 3% 385K 5m27s\n", - " 4650K .......... .......... .......... .......... .......... 3% 771K 5m25s\n", - " 4700K .......... .......... .......... .......... .......... 3% 369K 5m25s\n", - " 4750K .......... .......... .......... .......... .......... 3% 374K 5m25s\n", - " 4800K .......... .......... .......... .......... .......... 3% 763K 5m24s\n", - " 4850K .......... .......... .......... .......... .......... 3% 359K 5m24s\n", - " 4900K .......... .......... .......... .......... .......... 3% 390K 5m23s\n", - " 4950K .......... .......... .......... .......... .......... 3% 767K 5m22s\n", - " 5000K .......... .......... .......... .......... .......... 3% 406K 5m21s\n", - " 5050K .......... .......... .......... .......... .......... 3% 326K 5m22s\n", - " 5100K .......... .......... .......... .......... .......... 4% 882K 5m20s\n", - " 5150K .......... .......... .......... .......... .......... 4% 414K 5m20s\n", - " 5200K .......... .......... .......... .......... .......... 4% 362K 5m20s\n", - " 5250K .......... .......... .......... .......... .......... 4% 810K 5m18s\n", - " 5300K .......... .......... .......... .......... .......... 4% 381K 5m18s\n", - " 5350K .......... .......... .......... .......... .......... 4% 847K 5m16s\n", - " 5400K .......... .......... .......... .......... .......... 4% 394K 5m16s\n", - " 5450K .......... .......... .......... .......... .......... 4% 321K 5m16s\n", - " 5500K .......... .......... .......... .......... .......... 4% 1.04M 5m15s\n", - " 5550K .......... .......... .......... .......... .......... 4% 415K 5m14s\n", - " 5600K .......... .......... .......... .......... .......... 4% 400K 5m14s\n", - " 5650K .......... .......... .......... .......... .......... 4% 634K 5m13s\n", - " 5700K .......... .......... .......... .......... .......... 4% 393K 5m13s\n", - " 5750K .......... .......... .......... .......... .......... 4% 414K 5m12s\n", - " 5800K .......... .......... .......... .......... .......... 4% 773K 5m11s\n", - " 5850K .......... .......... .......... .......... .......... 4% 346K 5m11s\n", - " 5900K .......... .......... .......... .......... .......... 4% 1002K 5m10s\n", - " 5950K .......... .......... .......... .......... .......... 4% 417K 5m9s\n", - " 6000K .......... .......... .......... .......... .......... 4% 313K 5m10s\n", - " 6050K .......... .......... .......... .......... .......... 4% 1.07M 5m8s\n", - " 6100K .......... .......... .......... .......... .......... 4% 402K 5m8s\n", - " 6150K .......... .......... .......... .......... .......... 4% 426K 5m8s\n", - " 6200K .......... .......... .......... .......... .......... 4% 915K 5m6s\n", - " 6250K .......... .......... .......... .......... .......... 4% 402K 5m6s\n", - " 6300K .......... .......... .......... .......... .......... 4% 942K 5m5s\n", - " 6350K .......... .......... .......... .......... .......... 4% 330K 5m5s\n", - " 6400K .......... .......... .......... .......... .......... 5% 444K 5m5s\n", - " 6450K .......... .......... .......... .......... .......... 5% 868K 5m3s\n", - " 6500K .......... .......... .......... .......... .......... 5% 420K 5m3s\n", - " 6550K .......... .......... .......... .......... .......... 5% 968K 5m2s\n", - " 6600K .......... .......... .......... .......... .......... 5% 322K 5m2s\n", - " 6650K .......... .......... .......... .......... .......... 5% 1.31M 5m0s\n", - " 6700K .......... .......... .......... .......... .......... 5% 365K 5m0s\n", - " 6750K .......... .......... .......... .......... .......... 5% 1.13M 4m59s\n", - " 6800K .......... .......... .......... .......... .......... 5% 397K 4m59s\n", - " 6850K .......... .......... .......... .......... .......... 5% 503K 4m58s\n", - " 6900K .......... .......... .......... .......... .......... 5% 719K 4m57s\n", - " 6950K .......... .......... .......... .......... .......... 5% 440K 4m57s\n", - " 7000K .......... .......... .......... .......... .......... 5% 930K 4m56s\n", - " 7050K .......... .......... .......... .......... .......... 5% 325K 4m56s\n", - " 7100K .......... .......... .......... .......... .......... 5% 1.12M 4m55s\n", - " 7150K .......... .......... .......... .......... .......... 5% 401K 4m55s\n", - " 7200K .......... .......... .......... .......... .......... 5% 903K 4m53s\n", - " 7250K .......... .......... .......... .......... .......... 5% 427K 4m53s\n", - " 7300K .......... .......... .......... .......... .......... 5% 478K 4m53s\n", - " 7350K .......... .......... .......... .......... .......... 5% 727K 4m52s\n", - " 7400K .......... .......... .......... .......... .......... 5% 461K 4m51s\n", - " 7450K .......... .......... .......... .......... .......... 5% 742K 4m50s\n", - " 7500K .......... .......... .......... .......... .......... 5% 347K 4m51s\n", - " 7550K .......... .......... .......... .......... .......... 5% 1024K 4m49s\n", - " 7600K .......... .......... .......... .......... .......... 5% 421K 4m49s\n", - " 7650K .......... .......... .......... .......... .......... 5% 947K 4m48s\n", - " 7700K .......... .......... .......... .......... .......... 6% 443K 4m48s\n", - " 7750K .......... .......... .......... .......... .......... 6% 457K 4m48s\n", - " 7800K .......... .......... .......... .......... .......... 6% 676K 4m47s\n", - " 7850K .......... .......... .......... .......... .......... 6% 537K 4m46s\n", - " 7900K .......... .......... .......... .......... .......... 6% 667K 4m46s\n", - " 7950K .......... .......... .......... .......... .......... 6% 459K 4m45s\n", - " 8000K .......... .......... .......... .......... .......... 6% 753K 4m44s\n", - " 8050K .......... .......... .......... .......... .......... 6% 370K 4m45s\n", - " 8100K .......... .......... .......... .......... .......... 6% 848K 4m44s\n", - " 8150K .......... .......... .......... .......... .......... 6% 458K 4m43s\n", - " 8200K .......... .......... .......... .......... .......... 6% 831K 4m42s\n", - " 8250K .......... .......... .......... .......... .......... 6% 467K 4m42s\n", - " 8300K .......... .......... .......... .......... .......... 6% 828K 4m41s\n", - " 8350K .......... .......... .......... .......... .......... 6% 450K 4m41s\n", - " 8400K .......... .......... .......... .......... .......... 6% 913K 4m40s\n", - " 8450K .......... .......... .......... .......... .......... 6% 409K 4m40s\n", - " 8500K .......... .......... .......... .......... .......... 6% 537K 4m40s\n", - " 8550K .......... .......... .......... .......... .......... 6% 677K 4m39s\n", - " 8600K .......... .......... .......... .......... .......... 6% 528K 4m38s\n", - " 8650K .......... .......... .......... .......... .......... 6% 627K 4m38s\n", - " 8700K .......... .......... .......... .......... .......... 6% 577K 4m37s\n", - " 8750K .......... .......... .......... .......... .......... 6% 505K 4m37s\n", - " 8800K .......... .......... .......... .......... .......... 6% 597K 4m36s\n", - " 8850K .......... .......... .......... .......... .......... 6% 526K 4m36s\n", - " 8900K .......... .......... .......... .......... .......... 6% 404K 4m36s\n", - " 8950K .......... .......... .......... .......... .......... 6% 671K 4m35s\n", - " 9000K .......... .......... .......... .......... .......... 7% 522K 4m35s\n", - " 9050K .......... .......... .......... .......... .......... 7% 696K 4m34s\n", - " 9100K .......... .......... .......... .......... .......... 7% 508K 4m34s\n", - " 9150K .......... .......... .......... .......... .......... 7% 537K 4m34s\n", - " 9200K .......... .......... .......... .......... .......... 7% 685K 4m33s\n", - " 9250K .......... .......... .......... .......... .......... 7% 529K 4m33s\n", - " 9300K .......... .......... .......... .......... .......... 7% 696K 4m32s\n", - " 9350K .......... .......... .......... .......... .......... 7% 527K 4m32s\n", - " 9400K .......... .......... .......... .......... .......... 7% 690K 4m31s\n", - " 9450K .......... .......... .......... .......... .......... 7% 532K 4m31s\n", - " 9500K .......... .......... .......... .......... .......... 7% 676K 4m30s\n", - " 9550K .......... .......... .......... .......... .......... 7% 536K 4m30s\n", - " 9600K .......... .......... .......... .......... .......... 7% 611K 4m29s\n", - " 9650K .......... .......... .......... .......... .......... 7% 600K 4m29s\n", - " 9700K .......... .......... .......... .......... .......... 7% 600K 4m28s\n", - " 9750K .......... .......... .......... .......... .......... 7% 603K 4m28s\n", - " 9800K .......... .......... .......... .......... .......... 7% 592K 4m27s\n", - " 9850K .......... .......... .......... .......... .......... 7% 721K 4m27s\n", - " 9900K .......... .......... .......... .......... .......... 7% 540K 4m26s\n", - " 9950K .......... .......... .......... .......... .......... 7% 575K 4m26s\n", - " 10000K .......... .......... .......... .......... .......... 7% 617K 4m25s\n", - " 10050K .......... .......... .......... .......... .......... 7% 692K 4m25s\n", - " 10100K .......... .......... .......... .......... .......... 7% 522K 4m24s\n", - " 10150K .......... .......... .......... .......... .......... 7% 707K 4m24s\n", - " 10200K .......... .......... .......... .......... .......... 7% 536K 4m24s\n", - " 10250K .......... .......... .......... .......... .......... 8% 582K 4m23s\n", - " 10300K .......... .......... .......... .......... .......... 8% 603K 4m23s\n", - " 10350K .......... .......... .......... .......... .......... 8% 597K 4m22s\n", - " 10400K .......... .......... .......... .......... .......... 8% 628K 4m22s\n", - " 10450K .......... .......... .......... .......... .......... 8% 581K 4m21s\n", - " 10500K .......... .......... .......... .......... .......... 8% 638K 4m21s\n", - " 10550K .......... .......... .......... .......... .......... 8% 571K 4m21s\n", - " 10600K .......... .......... .......... .......... .......... 8% 617K 4m20s\n", - " 10650K .......... .......... .......... .......... .......... 8% 601K 4m20s\n", - " 10700K .......... .......... .......... .......... .......... 8% 604K 4m19s\n", - " 10750K .......... .......... .......... .......... .......... 8% 583K 4m19s\n", - " 10800K .......... .......... .......... .......... .......... 8% 608K 4m19s\n", - " 10850K .......... .......... .......... .......... .......... 8% 599K 4m18s\n", - " 10900K .......... .......... .......... .......... .......... 8% 635K 4m18s\n", - " 10950K .......... .......... .......... .......... .......... 8% 603K 4m17s\n", - " 11000K .......... .......... .......... .......... .......... 8% 592K 4m17s\n", - " 11050K .......... .......... .......... .......... .......... 8% 622K 4m17s\n", - " 11100K .......... .......... .......... .......... .......... 8% 593K 4m16s\n", - " 11150K .......... .......... .......... .......... .......... 8% 624K 4m16s\n", - " 11200K .......... .......... .......... .......... .......... 8% 589K 4m15s\n", - " 11250K .......... .......... .......... .......... .......... 8% 614K 4m15s\n", - " 11300K .......... .......... .......... .......... .......... 8% 606K 4m15s\n", - " 11350K .......... .......... .......... .......... .......... 8% 598K 4m14s\n", - " 11400K .......... .......... .......... .......... .......... 8% 2.07M 4m13s\n", - " 11450K .......... .......... .......... .......... .......... 8% 396K 4m13s\n", - " 11500K .......... .......... .......... .......... .......... 8% 1.20M 4m13s\n", - " 11550K .......... .......... .......... .......... .......... 9% 408K 4m13s\n", - " 11600K .......... .......... .......... .......... .......... 9% 1.14M 4m12s\n", - " 11650K .......... .......... .......... .......... .......... 9% 623K 4m11s\n", - " 11700K .......... .......... .......... .......... .......... 9% 613K 4m11s\n", - " 11750K .......... .......... .......... .......... .......... 9% 373K 4m11s\n", - " 11800K .......... .......... .......... .......... .......... 9% 1.60M 4m10s\n", - " 11850K .......... .......... .......... .......... .......... 9% 592K 4m10s\n", - " 11900K .......... .......... .......... .......... .......... 9% 553K 4m10s\n", - " 11950K .......... .......... .......... .......... .......... 9% 629K 4m9s\n", - " 12000K .......... .......... .......... .......... .......... 9% 567K 4m9s\n", - " 12050K .......... .......... .......... .......... .......... 9% 638K 4m9s\n", - " 12100K .......... .......... .......... .......... .......... 9% 596K 4m8s\n", - " 12150K .......... .......... .......... .......... .......... 9% 658K 4m8s\n", - " 12200K .......... .......... .......... .......... .......... 9% 577K 4m8s\n", - " 12250K .......... .......... .......... .......... .......... 9% 701K 4m7s\n", - " 12300K .......... .......... .......... .......... .......... 9% 527K 4m7s\n", - " 12350K .......... .......... .......... .......... .......... 9% 688K 4m7s\n", - " 12400K .......... .......... .......... .......... .......... 9% 658K 4m6s\n", - " 12450K .......... .......... .......... .......... .......... 9% 575K 4m6s\n", - " 12500K .......... .......... .......... .......... .......... 9% 639K 4m6s\n", - " 12550K .......... .......... .......... .......... .......... 9% 1.75M 4m5s\n", - " 12600K .......... .......... .......... .......... .......... 9% 365K 4m5s\n", - " 12650K .......... .......... .......... .......... .......... 9% 1.64M 4m4s\n", - " 12700K .......... .......... .......... .......... .......... 9% 600K 4m4s\n", - " 12750K .......... .......... .......... .......... .......... 9% 627K 4m4s\n", - " 12800K .......... .......... .......... .......... .......... 9% 566K 4m3s\n", - " 12850K .......... .......... .......... .......... .......... 10% 720K 4m3s\n", - " 12900K .......... .......... .......... .......... .......... 10% 531K 4m3s\n", - " 12950K .......... .......... .......... .......... .......... 10% 692K 4m2s\n", - " 13000K .......... .......... .......... .......... .......... 10% 627K 4m2s\n", - " 13050K .......... .......... .......... .......... .......... 10% 576K 4m2s\n", - " 13100K .......... .......... .......... .......... .......... 10% 2.18M 4m1s\n", - " 13150K .......... .......... .......... .......... .......... 10% 401K 4m1s\n", - " 13200K .......... .......... .......... .......... .......... 10% 1.16M 4m0s\n", - " 13250K .......... .......... .......... .......... .......... 10% 608K 4m0s\n", - " 13300K .......... .......... .......... .......... .......... 10% 617K 4m0s\n", - " 13350K .......... .......... .......... .......... .......... 10% 588K 3m59s\n", - " 13400K .......... .......... .......... .......... .......... 10% 673K 3m59s\n", - " 13450K .......... .......... .......... .......... .......... 10% 551K 3m59s\n", - " 13500K .......... .......... .......... .......... .......... 10% 684K 3m58s\n", - " 13550K .......... .......... .......... .......... .......... 10% 2.53M 3m58s\n", - " 13600K .......... .......... .......... .......... .......... 10% 348K 3m58s\n", - " 13650K .......... .......... .......... .......... .......... 10% 1.97M 3m57s\n", - " 13700K .......... .......... .......... .......... .......... 10% 625K 3m57s\n", - " 13750K .......... .......... .......... .......... .......... 10% 669K 3m57s\n", - " 13800K .......... .......... .......... .......... .......... 10% 548K 3m56s\n", - " 13850K .......... .......... .......... .......... .......... 10% 667K 3m56s\n", - " 13900K .......... .......... .......... .......... .......... 10% 617K 3m56s\n", - " 13950K .......... .......... .......... .......... .......... 10% 561K 3m55s\n", - " 14000K .......... .......... .......... .......... .......... 10% 661K 3m55s\n", - " 14050K .......... .......... .......... .......... .......... 10% 682K 3m55s\n", - " 14100K .......... .......... .......... .......... .......... 10% 543K 3m55s\n", - " 14150K .......... .......... .......... .......... .......... 11% 2.17M 3m54s\n", - " 14200K .......... .......... .......... .......... .......... 11% 614K 3m54s\n", - " 14250K .......... .......... .......... .......... .......... 11% 595K 3m53s\n", - " 14300K .......... .......... .......... .......... .......... 11% 612K 3m53s\n", - " 14350K .......... .......... .......... .......... .......... 11% 575K 3m53s\n", - " 14400K .......... .......... .......... .......... .......... 11% 622K 3m53s\n", - " 14450K .......... .......... .......... .......... .......... 11% 660K 3m52s\n", - " 14500K .......... .......... .......... .......... .......... 11% 549K 3m52s\n", - " 14550K .......... .......... .......... .......... .......... 11% 656K 3m52s\n", - " 14600K .......... .......... .......... .......... .......... 11% 948K 3m51s\n", - " 14650K .......... .......... .......... .......... .......... 11% 439K 3m51s\n", - " 14700K .......... .......... .......... .......... .......... 11% 3.10M 3m51s\n", - " 14750K .......... .......... .......... .......... .......... 11% 622K 3m50s\n", - " 14800K .......... .......... .......... .......... .......... 11% 582K 3m50s\n", - " 14850K .......... .......... .......... .......... .......... 11% 607K 3m50s\n", - " 14900K .......... .......... .......... .......... .......... 11% 599K 3m50s\n", - " 14950K .......... .......... .......... .......... .......... 11% 606K 3m49s\n", - " 15000K .......... .......... .......... .......... .......... 11% 406K 3m49s\n", - " 15050K .......... .......... .......... .......... .......... 11% 574K 3m49s\n", - " 15100K .......... .......... .......... .......... .......... 11% 493K 3m49s\n", - " 15150K .......... .......... .......... .......... .......... 11% 754K 3m49s\n", - " 15200K .......... .......... .......... .......... .......... 11% 451K 3m49s\n", - " 15250K .......... .......... .......... .......... .......... 11% 930K 3m48s\n", - " 15300K .......... .......... .......... .......... .......... 11% 458K 3m48s\n", - " 15350K .......... .......... .......... .......... .......... 11% 877K 3m48s\n", - " 15400K .......... .......... .......... .......... .......... 12% 458K 3m48s\n", - " 15450K .......... .......... .......... .......... .......... 12% 885K 3m47s\n", - " 15500K .......... .......... .......... .......... .......... 12% 459K 3m47s\n", - " 15550K .......... .......... .......... .......... .......... 12% 871K 3m47s\n", - " 15600K .......... .......... .......... .......... .......... 12% 456K 3m47s\n", - " 15650K .......... .......... .......... .......... .......... 12% 4.13M 3m46s\n", - " 15700K .......... .......... .......... .......... .......... 12% 320K 3m46s\n", - " 15750K .......... .......... .......... .......... .......... 12% 5.02M 3m46s\n", - " 15800K .......... .......... .......... .......... .......... 12% 317K 3m46s\n", - " 15850K .......... .......... .......... .......... .......... 12% 6.12M 3m45s\n", - " 15900K .......... .......... .......... .......... .......... 12% 318K 3m46s\n", - " 15950K .......... .......... .......... .......... .......... 12% 5.88M 3m45s\n", - " 16000K .......... .......... .......... .......... .......... 12% 317K 3m45s\n", - " 16050K .......... .......... .......... .......... .......... 12% 5.25M 3m44s\n", - " 16100K .......... .......... .......... .......... .......... 12% 316K 3m45s\n", - " 16150K .......... .......... .......... .......... .......... 12% 5.45M 3m44s\n", - " 16200K .......... .......... .......... .......... .......... 12% 317K 3m44s\n", - " 16250K .......... .......... .......... .......... .......... 12% 5.40M 3m44s\n", - " 16300K .......... .......... .......... .......... .......... 12% 318K 3m44s\n", - " 16350K .......... .......... .......... .......... .......... 12% 5.03M 3m43s\n", - " 16400K .......... .......... .......... .......... .......... 12% 318K 3m43s\n", - " 16450K .......... .......... .......... .......... .......... 12% 5.20M 3m43s\n", - " 16500K .......... .......... .......... .......... .......... 12% 320K 3m43s\n", - " 16550K .......... .......... .......... .......... .......... 12% 5.34M 3m42s\n", - " 16600K .......... .......... .......... .......... .......... 12% 316K 3m43s\n", - " 16650K .......... .......... .......... .......... .......... 12% 6.20M 3m42s\n", - " 16700K .......... .......... .......... .......... .......... 13% 317K 3m42s\n", - " 16750K .......... .......... .......... .......... .......... 13% 5.30M 3m41s\n", - " 16800K .......... .......... .......... .......... .......... 13% 315K 3m42s\n", - " 16850K .......... .......... .......... .......... .......... 13% 7.84M 3m41s\n", - " 16900K .......... .......... .......... .......... .......... 13% 314K 3m41s\n", - " 16950K .......... .......... .......... .......... .......... 13% 5.86M 3m41s\n", - " 17000K .......... .......... .......... .......... .......... 13% 979K 3m40s\n", - " 17050K .......... .......... .......... .......... .......... 13% 430K 3m40s\n", - " 17100K .......... .......... .......... .......... .......... 13% 968K 3m40s\n", - " 17150K .......... .......... .......... .......... .......... 13% 437K 3m40s\n", - " 17200K .......... .......... .......... .......... .......... 13% 971K 3m39s\n", - " 17250K .......... .......... .......... .......... .......... 13% 420K 3m39s\n", - " 17300K .......... .......... .......... .......... .......... 13% 1.01M 3m39s\n", - " 17350K .......... .......... .......... .......... .......... 13% 422K 3m39s\n", - " 17400K .......... .......... .......... .......... .......... 13% 1.04M 3m39s\n", - " 17450K .......... .......... .......... .......... .......... 13% 408K 3m39s\n", - " 17500K .......... .......... .......... .......... .......... 13% 1.14M 3m38s\n", - " 17550K .......... .......... .......... .......... .......... 13% 406K 3m38s\n", - " 17600K .......... .......... .......... .......... .......... 13% 1.14M 3m38s\n", - " 17650K .......... .......... .......... .......... .......... 13% 391K 3m38s\n", - " 17700K .......... .......... .......... .......... .......... 13% 1.31M 3m38s\n", - " 17750K .......... .......... .......... .......... .......... 13% 378K 3m38s\n", - " 17800K .......... .......... .......... .......... .......... 13% 1.42M 3m37s\n", - " 17850K .......... .......... .......... .......... .......... 13% 382K 3m37s\n", - " 17900K .......... .......... .......... .......... .......... 13% 1.37M 3m37s\n", - " 17950K .......... .......... .......... .......... .......... 13% 385K 3m37s\n", - " 18000K .......... .......... .......... .......... .......... 14% 1.29M 3m36s\n", - " 18050K .......... .......... .......... .......... .......... 14% 387K 3m36s\n", - " 18100K .......... .......... .......... .......... .......... 14% 1.23M 3m36s\n", - " 18150K .......... .......... .......... .......... .......... 14% 393K 3m36s\n", - " 18200K .......... .......... .......... .......... .......... 14% 1.22M 3m36s\n", - " 18250K .......... .......... .......... .......... .......... 14% 388K 3m36s\n", - " 18300K .......... .......... .......... .......... .......... 14% 1.31M 3m35s\n", - " 18350K .......... .......... .......... .......... .......... 14% 389K 3m35s\n", - " 18400K .......... .......... .......... .......... .......... 14% 1.26M 3m35s\n", - " 18450K .......... .......... .......... .......... .......... 14% 394K 3m35s\n", - " 18500K .......... .......... .......... .......... .......... 14% 1.23M 3m35s\n", - " 18550K .......... .......... .......... .......... .......... 14% 394K 3m35s\n", - " 18600K .......... .......... .......... .......... .......... 14% 1.25M 3m34s\n", - " 18650K .......... .......... .......... .......... .......... 14% 394K 3m34s\n", - " 18700K .......... .......... .......... .......... .......... 14% 1.22M 3m34s\n", - " 18750K .......... .......... .......... .......... .......... 14% 400K 3m34s\n", - " 18800K .......... .......... .......... .......... .......... 14% 1.12M 3m33s\n", - " 18850K .......... .......... .......... .......... .......... 14% 404K 3m34s\n", - " 18900K .......... .......... .......... .......... .......... 14% 4.63M 3m33s\n", - " 18950K .......... .......... .......... .......... .......... 14% 322K 3m33s\n", - " 19000K .......... .......... .......... .......... .......... 14% 4.19M 3m33s\n", - " 19050K .......... .......... .......... .......... .......... 14% 326K 3m33s\n", - " 19100K .......... .......... .......... .......... .......... 14% 5.77M 3m32s\n", - " 19150K .......... .......... .......... .......... .......... 14% 313K 3m32s\n", - " 19200K .......... .......... .......... .......... .......... 14% 5.56M 3m32s\n", - " 19250K .......... .......... .......... .......... .......... 15% 316K 3m32s\n", - " 19300K .......... .......... .......... .......... .......... 15% 5.61M 3m32s\n", - " 19350K .......... .......... .......... .......... .......... 15% 318K 3m32s\n", - " 19400K .......... .......... .......... .......... .......... 15% 5.94M 3m31s\n", - " 19450K .......... .......... .......... .......... .......... 15% 316K 3m31s\n", - " 19500K .......... .......... .......... .......... .......... 15% 5.16M 3m31s\n", - " 19550K .......... .......... .......... .......... .......... 15% 318K 3m31s\n", - " 19600K .......... .......... .......... .......... .......... 15% 5.90M 3m31s\n", - " 19650K .......... .......... .......... .......... .......... 15% 315K 3m31s\n", - " 19700K .......... .......... .......... .......... .......... 15% 6.54M 3m30s\n", - " 19750K .......... .......... .......... .......... .......... 15% 315K 3m30s\n", - " 19800K .......... .......... .......... .......... .......... 15% 5.75M 3m30s\n", - " 19850K .......... .......... .......... .......... .......... 15% 316K 3m30s\n", - " 19900K .......... .......... .......... .......... .......... 15% 4.66M 3m30s\n", - " 19950K .......... .......... .......... .......... .......... 15% 317K 3m30s\n", - " 20000K .......... .......... .......... .......... .......... 15% 5.78M 3m29s\n", - " 20050K .......... .......... .......... .......... .......... 15% 315K 3m29s\n", - " 20100K .......... .......... .......... .......... .......... 15% 5.54M 3m29s\n", - " 20150K .......... .......... .......... .......... .......... 15% 316K 3m29s\n", - " 20200K .......... .......... .......... .......... .......... 15% 5.33M 3m29s\n", - " 20250K .......... .......... .......... .......... .......... 15% 321K 3m29s\n", - " 20300K .......... .......... .......... .......... .......... 15% 4.61M 3m28s\n", - " 20350K .......... .......... .......... .......... .......... 15% 317K 3m28s\n", - " 20400K .......... .......... .......... .......... .......... 15% 5.40M 3m28s\n", - " 20450K .......... .......... .......... .......... .......... 15% 1.01M 3m28s\n", - " 20500K .......... .......... .......... .......... .......... 15% 421K 3m28s\n", - " 20550K .......... .......... .......... .......... .......... 16% 1020K 3m27s\n", - " 20600K .......... .......... .......... .......... .......... 16% 414K 3m27s\n", - " 20650K .......... .......... .......... .......... .......... 16% 1.00M 3m27s\n", - " 20700K .......... .......... .......... .......... .......... 16% 401K 3m27s\n", - " 20750K .......... .......... .......... .......... .......... 16% 1.08M 3m27s\n", - " 20800K .......... .......... .......... .......... .......... 16% 401K 3m27s\n", - " 20850K .......... .......... .......... .......... .......... 16% 1.09M 3m26s\n", - " 20900K .......... .......... .......... .......... .......... 16% 396K 3m26s\n", - " 20950K .......... .......... .......... .......... .......... 16% 1.14M 3m26s\n", - " 21000K .......... .......... .......... .......... .......... 16% 303K 3m26s\n", - " 21050K .......... .......... .......... .......... .......... 16% 3.73M 3m26s\n", - " 21100K .......... .......... .......... .......... .......... 16% 249K 3m26s\n", - " 21150K .......... .......... .......... .......... .......... 16% 7.97M 3m26s\n", - " 21200K .......... .......... .......... .......... .......... 16% 306K 3m26s\n", - " 21250K .......... .......... .......... .......... .......... 16% 4.09M 3m25s\n", - " 21300K .......... .......... .......... .......... .......... 16% 322K 3m26s\n", - " 21350K .......... .......... .......... .......... .......... 16% 3.52M 3m25s\n", - " 21400K .......... .......... .......... .......... .......... 16% 322K 3m25s\n", - " 21450K .......... .......... .......... .......... .......... 16% 3.29M 3m25s\n", - " 21500K .......... .......... .......... .......... .......... 16% 488K 3m25s\n", - " 21550K .......... .......... .......... .......... .......... 16% 749K 3m24s\n", - " 21600K .......... .......... .......... .......... .......... 16% 468K 3m24s\n", - " 21650K .......... .......... .......... .......... .......... 16% 779K 3m24s\n", - " 21700K .......... .......... .......... .......... .......... 16% 462K 3m24s\n", - " 21750K .......... .......... .......... .......... .......... 16% 816K 3m24s\n", - " 21800K .......... .......... .......... .......... .......... 16% 456K 3m24s\n", - " 21850K .......... .......... .......... .......... .......... 17% 857K 3m24s\n", - " 21900K .......... .......... .......... .......... .......... 17% 444K 3m24s\n", - " 21950K .......... .......... .......... .......... .......... 17% 897K 3m23s\n", - " 22000K .......... .......... .......... .......... .......... 17% 440K 3m23s\n", - " 22050K .......... .......... .......... .......... .......... 17% 893K 3m23s\n", - " 22100K .......... .......... .......... .......... .......... 17% 445K 3m23s\n", - " 22150K .......... .......... .......... .......... .......... 17% 894K 3m23s\n", - " 22200K .......... .......... .......... .......... .......... 17% 439K 3m23s\n", - " 22250K .......... .......... .......... .......... .......... 17% 874K 3m22s\n", - " 22300K .......... .......... .......... .......... .......... 17% 430K 3m22s\n", - " 22350K .......... .......... .......... .......... .......... 17% 966K 3m22s\n", - " 22400K .......... .......... .......... .......... .......... 17% 421K 3m22s\n", - " 22450K .......... .......... .......... .......... .......... 17% 975K 3m22s\n", - " 22500K .......... .......... .......... .......... .......... 17% 430K 3m22s\n", - " 22550K .......... .......... .......... .......... .......... 17% 930K 3m22s\n", - " 22600K .......... .......... .......... .......... .......... 17% 431K 3m22s\n", - " 22650K .......... .......... .......... .......... .......... 17% 918K 3m21s\n", - " 22700K .......... .......... .......... .......... .......... 17% 436K 3m21s\n", - " 22750K .......... .......... .......... .......... .......... 17% 905K 3m21s\n", - " 22800K .......... .......... .......... .......... .......... 17% 441K 3m21s\n", - " 22850K .......... .......... .......... .......... .......... 17% 900K 3m21s\n", - " 22900K .......... .......... .......... .......... .......... 17% 437K 3m21s\n", - " 22950K .......... .......... .......... .......... .......... 17% 881K 3m20s\n", - " 23000K .......... .......... .......... .......... .......... 17% 445K 3m20s\n", - " 23050K .......... .......... .......... .......... .......... 17% 888K 3m20s\n", - " 23100K .......... .......... .......... .......... .......... 17% 442K 3m20s\n", - " 23150K .......... .......... .......... .......... .......... 18% 888K 3m20s\n", - " 23200K .......... .......... .......... .......... .......... 18% 443K 3m20s\n", - " 23250K .......... .......... .......... .......... .......... 18% 797K 3m20s\n", - " 23300K .......... .......... .......... .......... .......... 18% 473K 3m20s\n", - " 23350K .......... .......... .......... .......... .......... 18% 800K 3m19s\n", - " 23400K .......... .......... .......... .......... .......... 18% 472K 3m19s\n", - " 23450K .......... .......... .......... .......... .......... 18% 811K 3m19s\n", - " 23500K .......... .......... .......... .......... .......... 18% 464K 3m19s\n", - " 23550K .......... .......... .......... .......... .......... 18% 825K 3m19s\n", - " 23600K .......... .......... .......... .......... .......... 18% 463K 3m19s\n", - " 23650K .......... .......... .......... .......... .......... 18% 819K 3m18s\n", - " 23700K .......... .......... .......... .......... .......... 18% 465K 3m18s\n", - " 23750K .......... .......... .......... .......... .......... 18% 784K 3m18s\n", - " 23800K .......... .......... .......... .......... .......... 18% 459K 3m18s\n", - " 23850K .......... .......... .......... .......... .......... 18% 818K 3m18s\n", - " 23900K .......... .......... .......... .......... .......... 18% 461K 3m18s\n", - " 23950K .......... .......... .......... .......... .......... 18% 815K 3m18s\n", - " 24000K .......... .......... .......... .......... .......... 18% 464K 3m18s\n", - " 24050K .......... .......... .......... .......... .......... 18% 783K 3m17s\n", - " 24100K .......... .......... .......... .......... .......... 18% 475K 3m17s\n", - " 24150K .......... .......... .......... .......... .......... 18% 781K 3m17s\n", - " 24200K .......... .......... .......... .......... .......... 18% 480K 3m17s\n", - " 24250K .......... .......... .......... .......... .......... 18% 782K 3m17s\n", - " 24300K .......... .......... .......... .......... .......... 18% 471K 3m17s\n", - " 24350K .......... .......... .......... .......... .......... 18% 798K 3m17s\n", - " 24400K .......... .......... .......... .......... .......... 19% 460K 3m16s\n", - " 24450K .......... .......... .......... .......... .......... 19% 810K 3m16s\n", - " 24500K .......... .......... .......... .......... .......... 19% 6.18M 3m16s\n", - " 24550K .......... .......... .......... .......... .......... 19% 311K 3m16s\n", - " 24600K .......... .......... .......... .......... .......... 19% 5.85M 3m16s\n", - " 24650K .......... .......... .......... .......... .......... 19% 303K 3m16s\n", - " 24700K .......... .......... .......... .......... .......... 19% 6.70M 3m15s\n", - " 24750K .......... .......... .......... .......... .......... 19% 307K 3m15s\n", - " 24800K .......... .......... .......... .......... .......... 19% 6.31M 3m15s\n", - " 24850K .......... .......... .......... .......... .......... 19% 312K 3m15s\n", - " 24900K .......... .......... .......... .......... .......... 19% 6.92M 3m15s\n", - " 24950K .......... .......... .......... .......... .......... 19% 297K 3m15s\n", - " 25000K .......... .......... .......... .......... .......... 19% 7.09M 3m15s\n", - " 25050K .......... .......... .......... .......... .......... 19% 309K 3m15s\n", - " 25100K .......... .......... .......... .......... .......... 19% 5.17M 3m14s\n", - " 25150K .......... .......... .......... .......... .......... 19% 307K 3m14s\n", - " 25200K .......... .......... .......... .......... .......... 19% 6.62M 3m14s\n", - " 25250K .......... .......... .......... .......... .......... 19% 314K 3m14s\n", - " 25300K .......... .......... .......... .......... .......... 19% 4.83M 3m14s\n", - " 25350K .......... .......... .......... .......... .......... 19% 318K 3m14s\n", - " 25400K .......... .......... .......... .......... .......... 19% 3.58M 3m13s\n", - " 25450K .......... .......... .......... .......... .......... 19% 320K 3m14s\n", - " 25500K .......... .......... .......... .......... .......... 19% 3.78M 3m13s\n", - " 25550K .......... .......... .......... .......... .......... 19% 311K 3m13s\n", - " 25600K .......... .......... .......... .......... .......... 19% 5.42M 3m13s\n", - " 25650K .......... .......... .......... .......... .......... 19% 313K 3m13s\n", - " 25700K .......... .......... .......... .......... .......... 20% 5.90M 3m13s\n", - " 25750K .......... .......... .......... .......... .......... 20% 314K 3m13s\n", - " 25800K .......... .......... .......... .......... .......... 20% 5.43M 3m12s\n", - " 25850K .......... .......... .......... .......... .......... 20% 487K 3m12s\n", - " 25900K .......... .......... .......... .......... .......... 20% 739K 3m12s\n", - " 25950K .......... .......... .......... .......... .......... 20% 463K 3m12s\n", - " 26000K .......... .......... .......... .......... .......... 20% 809K 3m12s\n", - " 26050K .......... .......... .......... .......... .......... 20% 475K 3m12s\n", - " 26100K .......... .......... .......... .......... .......... 20% 725K 3m12s\n", - " 26150K .......... .......... .......... .......... .......... 20% 185K 3m12s\n", - " 26200K .......... .......... .......... .......... .......... 20% 87.2M 3m12s\n", - " 26250K .......... .......... .......... .......... .......... 20% 53.1K 3m15s\n", - " 26300K .......... .......... .......... .......... .......... 20% 138K 3m16s\n", - " 26350K .......... .......... .......... .......... .......... 20% 5.63M 3m16s\n", - " 26400K .......... .......... .......... .......... .......... 20% 138K 3m16s\n", - " 26450K .......... .......... .......... .......... .......... 20% 6.35M 3m16s\n", - " 26500K .......... .......... .......... .......... .......... 20% 303K 3m16s\n", - " 26550K .......... .......... .......... .......... .......... 20% 286K 3m16s\n", - " 26600K .......... .......... .......... .......... .......... 20% 295K 3m17s\n", - " 26650K .......... .......... .......... .......... .......... 20% 294K 3m17s\n", - " 26700K .......... .......... .......... .......... .......... 20% 297K 3m17s\n", - " 26750K .......... .......... .......... .......... .......... 20% 295K 3m17s\n", - " 26800K .......... .......... .......... .......... .......... 20% 294K 3m17s\n", - " 26850K .......... .......... .......... .......... .......... 20% 300K 3m17s\n", - " 26900K .......... .......... .......... .......... .......... 20% 301K 3m18s\n", - " 26950K .......... .......... .......... .......... .......... 20% 304K 3m18s\n", - " 27000K .......... .......... .......... .......... .......... 21% 302K 3m18s\n", - " 27050K .......... .......... .......... .......... .......... 21% 302K 3m18s\n", - " 27100K .......... .......... .......... .......... .......... 21% 2.90M 3m18s\n", - " 27150K .......... .......... .......... .......... .......... 21% 301K 3m18s\n", - " 27200K .......... .......... .......... .......... .......... 21% 304K 3m18s\n", - " 27250K .......... .......... .......... .......... .......... 21% 301K 3m18s\n", - " 27300K .......... .......... .......... .......... .......... 21% 306K 3m18s\n", - " 27350K .......... .......... .......... .......... .......... 21% 3.24M 3m18s\n", - " 27400K .......... .......... .......... .......... .......... 21% 290K 3m18s\n", - " 27450K .......... .......... .......... .......... .......... 21% 316K 3m18s\n", - " 27500K .......... .......... .......... .......... .......... 21% 304K 3m18s\n", - " 27550K .......... .......... .......... .......... .......... 21% 327K 3m18s\n", - " 27600K .......... .......... .......... .......... .......... 21% 1.83M 3m18s\n", - " 27650K .......... .......... .......... .......... .......... 21% 309K 3m18s\n", - " 27700K .......... .......... .......... .......... .......... 21% 312K 3m18s\n", - " 27750K .......... .......... .......... .......... .......... 21% 2.01M 3m18s\n", - " 27800K .......... .......... .......... .......... .......... 21% 312K 3m18s\n", - " 27850K .......... .......... .......... .......... .......... 21% 308K 3m18s\n", - " 27900K .......... .......... .......... .......... .......... 21% 1.76M 3m18s\n", - " 27950K .......... .......... .......... .......... .......... 21% 330K 3m18s\n", - " 28000K .......... .......... .......... .......... .......... 21% 319K 3m18s\n", - " 28050K .......... .......... .......... .......... .......... 21% 1.65M 3m18s\n", - " 28100K .......... .......... .......... .......... .......... 21% 333K 3m18s\n", - " 28150K .......... .......... .......... .......... .......... 21% 317K 3m18s\n", - " 28200K .......... .......... .......... .......... .......... 21% 1.85M 3m18s\n", - " 28250K .......... .......... .......... .......... .......... 21% 325K 3m18s\n", - " 28300K .......... .......... .......... .......... .......... 22% 331K 3m18s\n", - " 28350K .......... .......... .......... .......... .......... 22% 2.06M 3m17s\n", - " 28400K .......... .......... .......... .......... .......... 22% 325K 3m18s\n", - " 28450K .......... .......... .......... .......... .......... 22% 331K 3m18s\n", - " 28500K .......... .......... .......... .......... .......... 22% 1.91M 3m17s\n", - " 28550K .......... .......... .......... .......... .......... 22% 323K 3m17s\n", - " 28600K .......... .......... .......... .......... .......... 22% 2.18M 3m17s\n", - " 28650K .......... .......... .......... .......... .......... 22% 327K 3m17s\n", - " 28700K .......... .......... .......... .......... .......... 22% 324K 3m17s\n", - " 28750K .......... .......... .......... .......... .......... 22% 2.11M 3m17s\n", - " 28800K .......... .......... .......... .......... .......... 22% 329K 3m17s\n", - " 28850K .......... .......... .......... .......... .......... 22% 2.39M 3m17s\n", - " 28900K .......... .......... .......... .......... .......... 22% 330K 3m17s\n", - " 28950K .......... .......... .......... .......... .......... 22% 336K 3m17s\n", - " 29000K .......... .......... .......... .......... .......... 22% 1.89M 3m16s\n", - " 29050K .......... .......... .......... .......... .......... 22% 327K 3m16s\n", - " 29100K .......... .......... .......... .......... .......... 22% 2.20M 3m16s\n", - " 29150K .......... .......... .......... .......... .......... 22% 328K 3m16s\n", - " 29200K .......... .......... .......... .......... .......... 22% 2.25M 3m16s\n", - " 29250K .......... .......... .......... .......... .......... 22% 337K 3m16s\n", - " 29300K .......... .......... .......... .......... .......... 22% 1.97M 3m16s\n", - " 29350K .......... .......... .......... .......... .......... 22% 339K 3m16s\n", - " 29400K .......... .......... .......... .......... .......... 22% 356K 3m16s\n", - " 29450K .......... .......... .......... .......... .......... 22% 1.61M 3m15s\n", - " 29500K .......... .......... .......... .......... .......... 22% 351K 3m15s\n", - " 29550K .......... .......... .......... .......... .......... 23% 1.72M 3m15s\n", - " 29600K .......... .......... .......... .......... .......... 23% 336K 3m15s\n", - " 29650K .......... .......... .......... .......... .......... 23% 2.31M 3m15s\n", - " 29700K .......... .......... .......... .......... .......... 23% 333K 3m15s\n", - " 29750K .......... .......... .......... .......... .......... 23% 2.46M 3m14s\n", - " 29800K .......... .......... .......... .......... .......... 23% 336K 3m15s\n", - " 29850K .......... .......... .......... .......... .......... 23% 2.13M 3m14s\n", - " 29900K .......... .......... .......... .......... .......... 23% 341K 3m14s\n", - " 29950K .......... .......... .......... .......... .......... 23% 2.16M 3m14s\n", - " 30000K .......... .......... .......... .......... .......... 23% 350K 3m14s\n", - " 30050K .......... .......... .......... .......... .......... 23% 1.92M 3m14s\n", - " 30100K .......... .......... .......... .......... .......... 23% 347K 3m14s\n", - " 30150K .......... .......... .......... .......... .......... 23% 1.69M 3m13s\n", - " 30200K .......... .......... .......... .......... .......... 23% 360K 3m13s\n", - " 30250K .......... .......... .......... .......... .......... 23% 1.75M 3m13s\n", - " 30300K .......... .......... .......... .......... .......... 23% 365K 3m13s\n", - " 30350K .......... .......... .......... .......... .......... 23% 1.59M 3m13s\n", - " 30400K .......... .......... .......... .......... .......... 23% 351K 3m13s\n", - " 30450K .......... .......... .......... .......... .......... 23% 1.90M 3m12s\n", - " 30500K .......... .......... .......... .......... .......... 23% 350K 3m13s\n", - " 30550K .......... .......... .......... .......... .......... 23% 2.15M 3m12s\n", - " 30600K .......... .......... .......... .......... .......... 23% 341K 3m12s\n", - " 30650K .......... .......... .......... .......... .......... 23% 2.61M 3m12s\n", - " 30700K .......... .......... .......... .......... .......... 23% 331K 3m12s\n", - " 30750K .......... .......... .......... .......... .......... 23% 3.03M 3m12s\n", - " 30800K .......... .......... .......... .......... .......... 23% 297K 3m12s\n", - " 30850K .......... .......... .......... .......... .......... 24% 6.09M 3m11s\n", - " 30900K .......... .......... .......... .......... .......... 24% 271K 3m12s\n", - " 30950K .......... .......... .......... .......... .......... 24% 6.04M 3m11s\n", - " 31000K .......... .......... .......... .......... .......... 24% 305K 3m11s\n", - " 31050K .......... .......... .......... .......... .......... 24% 4.60M 3m11s\n", - " 31100K .......... .......... .......... .......... .......... 24% 1.01M 3m11s\n", - " 31150K .......... .......... .......... .......... .......... 24% 402K 3m11s\n", - " 31200K .......... .......... .......... .......... .......... 24% 1.03M 3m10s\n", - " 31250K .......... .......... .......... .......... .......... 24% 403K 3m10s\n", - " 31300K .......... .......... .......... .......... .......... 24% 1.08M 3m10s\n", - " 31350K .......... .......... .......... .......... .......... 24% 401K 3m10s\n", - " 31400K .......... .......... .......... .......... .......... 24% 1.10M 3m10s\n", - " 31450K .......... .......... .......... .......... .......... 24% 403K 3m10s\n", - " 31500K .......... .......... .......... .......... .......... 24% 1.02M 3m10s\n", - " 31550K .......... .......... .......... .......... .......... 24% 410K 3m10s\n", - " 31600K .......... .......... .......... .......... .......... 24% 986K 3m9s\n", - " 31650K .......... .......... .......... .......... .......... 24% 427K 3m9s\n", - " 31700K .......... .......... .......... .......... .......... 24% 970K 3m9s\n", - " 31750K .......... .......... .......... .......... .......... 24% 422K 3m9s\n", - " 31800K .......... .......... .......... .......... .......... 24% 998K 3m9s\n", - " 31850K .......... .......... .......... .......... .......... 24% 417K 3m9s\n", - " 31900K .......... .......... .......... .......... .......... 24% 1010K 3m8s\n", - " 31950K .......... .......... .......... .......... .......... 24% 414K 3m8s\n", - " 32000K .......... .......... .......... .......... .......... 24% 1.04M 3m8s\n", - " 32050K .......... .......... .......... .......... .......... 24% 414K 3m8s\n", - " 32100K .......... .......... .......... .......... .......... 24% 1006K 3m8s\n", - " 32150K .......... .......... .......... .......... .......... 25% 421K 3m8s\n", - " 32200K .......... .......... .......... .......... .......... 25% 1004K 3m8s\n", - " 32250K .......... .......... .......... .......... .......... 25% 422K 3m8s\n", - " 32300K .......... .......... .......... .......... .......... 25% 1006K 3m7s\n", - " 32350K .......... .......... .......... .......... .......... 25% 416K 3m7s\n", - " 32400K .......... .......... .......... .......... .......... 25% 1018K 3m7s\n", - " 32450K .......... .......... .......... .......... .......... 25% 415K 3m7s\n", - " 32500K .......... .......... .......... .......... .......... 25% 1.01M 3m7s\n", - " 32550K .......... .......... .......... .......... .......... 25% 419K 3m7s\n", - " 32600K .......... .......... .......... .......... .......... 25% 982K 3m7s\n", - " 32650K .......... .......... .......... .......... .......... 25% 422K 3m7s\n", - " 32700K .......... .......... .......... .......... .......... 25% 973K 3m6s\n", - " 32750K .......... .......... .......... .......... .......... 25% 421K 3m6s\n", - " 32800K .......... .......... .......... .......... .......... 25% 1013K 3m6s\n", - " 32850K .......... .......... .......... .......... .......... 25% 417K 3m6s\n", - " 32900K .......... .......... .......... .......... .......... 25% 1.01M 3m6s\n", - " 32950K .......... .......... .......... .......... .......... 25% 408K 3m6s\n", - " 33000K .......... .......... .......... .......... .......... 25% 1.04M 3m5s\n", - " 33050K .......... .......... .......... .......... .......... 25% 409K 3m5s\n", - " 33100K .......... .......... .......... .......... .......... 25% 1.08M 3m5s\n", - " 33150K .......... .......... .......... .......... .......... 25% 395K 3m5s\n", - " 33200K .......... .......... .......... .......... .......... 25% 1.15M 3m5s\n", - " 33250K .......... .......... .......... .......... .......... 25% 416K 3m5s\n", - " 33300K .......... .......... .......... .......... .......... 25% 1.00M 3m5s\n", - " 33350K .......... .......... .......... .......... .......... 25% 417K 3m5s\n", - " 33400K .......... .......... .......... .......... .......... 26% 1.03M 3m4s\n", - " 33450K .......... .......... .......... .......... .......... 26% 406K 3m4s\n", - " 33500K .......... .......... .......... .......... .......... 26% 1.04M 3m4s\n", - " 33550K .......... .......... .......... .......... .......... 26% 412K 3m4s\n", - " 33600K .......... .......... .......... .......... .......... 26% 999K 3m4s\n", - " 33650K .......... .......... .......... .......... .......... 26% 415K 3m4s\n", - " 33700K .......... .......... .......... .......... .......... 26% 1.07M 3m4s\n", - " 33750K .......... .......... .......... .......... .......... 26% 405K 3m4s\n", - " 33800K .......... .......... .......... .......... .......... 26% 1.08M 3m3s\n", - " 33850K .......... .......... .......... .......... .......... 26% 403K 3m3s\n", - " 33900K .......... .......... .......... .......... .......... 26% 1.01M 3m3s\n", - " 33950K .......... .......... .......... .......... .......... 26% 409K 3m3s\n", - " 34000K .......... .......... .......... .......... .......... 26% 1.02M 3m3s\n", - " 34050K .......... .......... .......... .......... .......... 26% 426K 3m3s\n", - " 34100K .......... .......... .......... .......... .......... 26% 941K 3m3s\n", - " 34150K .......... .......... .......... .......... .......... 26% 414K 3m3s\n", - " 34200K .......... .......... .......... .......... .......... 26% 1.04M 3m2s\n", - " 34250K .......... .......... .......... .......... .......... 26% 410K 3m2s\n", - " 34300K .......... .......... .......... .......... .......... 26% 1.04M 3m2s\n", - " 34350K .......... .......... .......... .......... .......... 26% 408K 3m2s\n", - " 34400K .......... .......... .......... .......... .......... 26% 1.04M 3m2s\n", - " 34450K .......... .......... .......... .......... .......... 26% 413K 3m2s\n", - " 34500K .......... .......... .......... .......... .......... 26% 1008K 3m2s\n", - " 34550K .......... .......... .......... .......... .......... 26% 421K 3m2s\n", - " 34600K .......... .......... .......... .......... .......... 26% 994K 3m1s\n", - " 34650K .......... .......... .......... .......... .......... 26% 421K 3m1s\n", - " 34700K .......... .......... .......... .......... .......... 27% 963K 3m1s\n", - " 34750K .......... .......... .......... .......... .......... 27% 429K 3m1s\n", - " 34800K .......... .......... .......... .......... .......... 27% 943K 3m1s\n", - " 34850K .......... .......... .......... .......... .......... 27% 432K 3m1s\n", - " 34900K .......... .......... .......... .......... .......... 27% 904K 3m1s\n", - " 34950K .......... .......... .......... .......... .......... 27% 424K 3m0s\n", - " 35000K .......... .......... .......... .......... .......... 27% 7.49M 3m0s\n", - " 35050K .......... .......... .......... .......... .......... 27% 304K 3m0s\n", - " 35100K .......... .......... .......... .......... .......... 27% 5.58M 3m0s\n", - " 35150K .......... .......... .......... .......... .......... 27% 312K 3m0s\n", - " 35200K .......... .......... .......... .......... .......... 27% 4.79M 3m0s\n", - " 35250K .......... .......... .......... .......... .......... 27% 319K 3m0s\n", - " 35300K .......... .......... .......... .......... .......... 27% 3.57M 2m59s\n", - " 35350K .......... .......... .......... .......... .......... 27% 320K 2m59s\n", - " 35400K .......... .......... .......... .......... .......... 27% 3.21M 2m59s\n", - " 35450K .......... .......... .......... .......... .......... 27% 324K 2m59s\n", - " 35500K .......... .......... .......... .......... .......... 27% 3.20M 2m59s\n", - " 35550K .......... .......... .......... .......... .......... 27% 326K 2m59s\n", - " 35600K .......... .......... .......... .......... .......... 27% 3.55M 2m59s\n", - " 35650K .......... .......... .......... .......... .......... 27% 319K 2m59s\n", - " 35700K .......... .......... .......... .......... .......... 27% 4.49M 2m58s\n", - " 35750K .......... .......... .......... .......... .......... 27% 316K 2m58s\n", - " 35800K .......... .......... .......... .......... .......... 27% 4.98M 2m58s\n", - " 35850K .......... .......... .......... .......... .......... 27% 316K 2m58s\n", - " 35900K .......... .......... .......... .......... .......... 27% 4.02M 2m58s\n", - " 35950K .......... .......... .......... .......... .......... 27% 321K 2m58s\n", - " 36000K .......... .......... .......... .......... .......... 28% 4.17M 2m58s\n", - " 36050K .......... .......... .......... .......... .......... 28% 316K 2m58s\n", - " 36100K .......... .......... .......... .......... .......... 28% 4.21M 2m57s\n", - " 36150K .......... .......... .......... .......... .......... 28% 315K 2m57s\n", - " 36200K .......... .......... .......... .......... .......... 28% 4.05M 2m57s\n", - " 36250K .......... .......... .......... .......... .......... 28% 320K 2m57s\n", - " 36300K .......... .......... .......... .......... .......... 28% 3.86M 2m57s\n", - " 36350K .......... .......... .......... .......... .......... 28% 311K 2m57s\n", - " 36400K .......... .......... .......... .......... .......... 28% 4.14M 2m57s\n", - " 36450K .......... .......... .......... .......... .......... 28% 327K 2m57s\n", - " 36500K .......... .......... .......... .......... .......... 28% 3.28M 2m56s\n", - " 36550K .......... .......... .......... .......... .......... 28% 327K 2m56s\n", - " 36600K .......... .......... .......... .......... .......... 28% 3.33M 2m56s\n", - " 36650K .......... .......... .......... .......... .......... 28% 321K 2m56s\n", - " 36700K .......... .......... .......... .......... .......... 28% 4.14M 2m56s\n", - " 36750K .......... .......... .......... .......... .......... 28% 265K 2m56s\n", - " 36800K .......... .......... .......... .......... .......... 28% 7.12M 2m56s\n", - " 36850K .......... .......... .......... .......... .......... 28% 226K 2m56s\n", - " 36900K .......... .......... .......... .......... .......... 28% 111M 2m56s\n", - " 36950K .......... .......... .......... .......... .......... 28% 44.7K 2m58s\n", - " 37000K .......... .......... .......... .......... .......... 28% 292K 2m58s\n", - " 37050K .......... .......... .......... .......... .......... 28% 517K 2m58s\n", - " 37100K .......... .......... .......... .......... .......... 28% 642K 2m58s\n", - " 37150K .......... .......... .......... .......... .......... 28% 316K 2m58s\n", - " 37200K .......... .......... .......... .......... .......... 28% 2.45M 2m58s\n", - " 37250K .......... .......... .......... .......... .......... 28% 300K 2m58s\n", - " 37300K .......... .......... .......... .......... .......... 29% 364K 2m58s\n", - " 37350K .......... .......... .......... .......... .......... 29% 1.33M 2m57s\n", - " 37400K .......... .......... .......... .......... .......... 29% 323K 2m58s\n", - " 37450K .......... .......... .......... .......... .......... 29% 2.10M 2m57s\n", - " 37500K .......... .......... .......... .......... .......... 29% 319K 2m57s\n", - " 37550K .......... .......... .......... .......... .......... 29% 381K 2m57s\n", - " 37600K .......... .......... .......... .......... .......... 29% 1024K 2m57s\n", - " 37650K .......... .......... .......... .......... .......... 29% 368K 2m57s\n", - " 37700K .......... .......... .......... .......... .......... 29% 1.34M 2m57s\n", - " 37750K .......... .......... .......... .......... .......... 29% 332K 2m57s\n", - " 37800K .......... .......... .......... .......... .......... 29% 675K 2m57s\n", - " 37850K .......... .......... .......... .......... .......... 29% 483K 2m57s\n", - " 37900K .......... .......... .......... .......... .......... 29% 410K 2m57s\n", - " 37950K .......... .......... .......... .......... .......... 29% 1.01M 2m56s\n", - " 38000K .......... .......... .......... .......... .......... 29% 357K 2m56s\n", - " 38050K .......... .......... .......... .......... .......... 29% 1.54M 2m56s\n", - " 38100K .......... .......... .......... .......... .......... 29% 339K 2m56s\n", - " 38150K .......... .......... .......... .......... .......... 29% 1.57M 2m56s\n", - " 38200K .......... .......... .......... .......... .......... 29% 336K 2m56s\n", - " 38250K .......... .......... .......... .......... .......... 29% 1.87M 2m56s\n", - " 38300K .......... .......... .......... .......... .......... 29% 337K 2m56s\n", - " 38350K .......... .......... .......... .......... .......... 29% 2.17M 2m55s\n", - " 38400K .......... .......... .......... .......... .......... 29% 339K 2m55s\n", - " 38450K .......... .......... .......... .......... .......... 29% 831K 2m55s\n", - " 38500K .......... .......... .......... .......... .......... 29% 441K 2m55s\n", - " 38550K .......... .......... .......... .......... .......... 30% 803K 2m55s\n", - " 38600K .......... .......... .......... .......... .......... 30% 472K 2m55s\n", - " 38650K .......... .......... .......... .......... .......... 30% 742K 2m55s\n", - " 38700K .......... .......... .......... .......... .......... 30% 477K 2m55s\n", - " 38750K .......... .......... .......... .......... .......... 30% 784K 2m54s\n", - " 38800K .......... .......... .......... .......... .......... 30% 455K 2m54s\n", - " 38850K .......... .......... .......... .......... .......... 30% 839K 2m54s\n", - " 38900K .......... .......... .......... .......... .......... 30% 446K 2m54s\n", - " 38950K .......... .......... .......... .......... .......... 30% 794K 2m54s\n", - " 39000K .......... .......... .......... .......... .......... 30% 479K 2m54s\n", - " 39050K .......... .......... .......... .......... .......... 30% 797K 2m54s\n", - " 39100K .......... .......... .......... .......... .......... 30% 490K 2m54s\n", - " 39150K .......... .......... .......... .......... .......... 30% 1.83M 2m53s\n", - " 39200K .......... .......... .......... .......... .......... 30% 363K 2m53s\n", - " 39250K .......... .......... .......... .......... .......... 30% 1.47M 2m53s\n", - " 39300K .......... .......... .......... .......... .......... 30% 375K 2m53s\n", - " 39350K .......... .......... .......... .......... .......... 30% 1.35M 2m53s\n", - " 39400K .......... .......... .......... .......... .......... 30% 426K 2m53s\n", - " 39450K .......... .......... .......... .......... .......... 30% 999K 2m53s\n", - " 39500K .......... .......... .......... .......... .......... 30% 400K 2m53s\n", - " 39550K .......... .......... .......... .......... .......... 30% 1.40M 2m52s\n", - " 39600K .......... .......... .......... .......... .......... 30% 365K 2m52s\n", - " 39650K .......... .......... .......... .......... .......... 30% 1.67M 2m52s\n", - " 39700K .......... .......... .......... .......... .......... 30% 482K 2m52s\n", - " 39750K .......... .......... .......... .......... .......... 30% 779K 2m52s\n", - " 39800K .......... .......... .......... .......... .......... 30% 343K 2m52s\n", - " 39850K .......... .......... .......... .......... .......... 31% 2.22M 2m52s\n", - " 39900K .......... .......... .......... .......... .......... 31% 340K 2m52s\n", - " 39950K .......... .......... .......... .......... .......... 31% 2.09M 2m51s\n", - " 40000K .......... .......... .......... .......... .......... 31% 1.25M 2m51s\n", - " 40050K .......... .......... .......... .......... .......... 31% 373K 2m51s\n", - " 40100K .......... .......... .......... .......... .......... 31% 1.27M 2m51s\n", - " 40150K .......... .......... .......... .......... .......... 31% 379K 2m51s\n", - " 40200K .......... .......... .......... .......... .......... 31% 1.29M 2m51s\n", - " 40250K .......... .......... .......... .......... .......... 31% 386K 2m51s\n", - " 40300K .......... .......... .......... .......... .......... 31% 1.08M 2m50s\n", - " 40350K .......... .......... .......... .......... .......... 31% 408K 2m50s\n", - " 40400K .......... .......... .......... .......... .......... 31% 1.04M 2m50s\n", - " 40450K .......... .......... .......... .......... .......... 31% 409K 2m50s\n", - " 40500K .......... .......... .......... .......... .......... 31% 1.04M 2m50s\n", - " 40550K .......... .......... .......... .......... .......... 31% 407K 2m50s\n", - " 40600K .......... .......... .......... .......... .......... 31% 996K 2m50s\n", - " 40650K .......... .......... .......... .......... .......... 31% 422K 2m50s\n", - " 40700K .......... .......... .......... .......... .......... 31% 983K 2m49s\n", - " 40750K .......... .......... .......... .......... .......... 31% 424K 2m49s\n", - " 40800K .......... .......... .......... .......... .......... 31% 985K 2m49s\n", - " 40850K .......... .......... .......... .......... .......... 31% 421K 2m49s\n", - " 40900K .......... .......... .......... .......... .......... 31% 985K 2m49s\n", - " 40950K .......... .......... .......... .......... .......... 31% 412K 2m49s\n", - " 41000K .......... .......... .......... .......... .......... 31% 1004K 2m49s\n", - " 41050K .......... .......... .......... .......... .......... 31% 397K 2m49s\n", - " 41100K .......... .......... .......... .......... .......... 31% 1.04M 2m49s\n", - " 41150K .......... .......... .......... .......... .......... 32% 393K 2m48s\n", - " 41200K .......... .......... .......... .......... .......... 32% 7.73M 2m48s\n", - " 41250K .......... .......... .......... .......... .......... 32% 303K 2m48s\n", - " 41300K .......... .......... .......... .......... .......... 32% 5.64M 2m48s\n", - " 41350K .......... .......... .......... .......... .......... 32% 310K 2m48s\n", - " 41400K .......... .......... .......... .......... .......... 32% 6.38M 2m48s\n", - " 41450K .......... .......... .......... .......... .......... 32% 308K 2m48s\n", - " 41500K .......... .......... .......... .......... .......... 32% 6.76M 2m47s\n", - " 41550K .......... .......... .......... .......... .......... 32% 307K 2m48s\n", - " 41600K .......... .......... .......... .......... .......... 32% 6.08M 2m47s\n", - " 41650K .......... .......... .......... .......... .......... 32% 307K 2m47s\n", - " 41700K .......... .......... .......... .......... .......... 32% 6.25M 2m47s\n", - " 41750K .......... .......... .......... .......... .......... 32% 248K 2m47s\n", - " 41800K .......... .......... .......... .......... .......... 32% 6.94M 2m47s\n", - " 41850K .......... .......... .......... .......... .......... 32% 289K 2m47s\n", - " 41900K .......... .......... .......... .......... .......... 32% 6.96M 2m47s\n", - " 41950K .......... .......... .......... .......... .......... 32% 149K 2m47s\n", - " 42000K .......... .......... .......... .......... .......... 32% 85.8M 2m47s\n", - " 42050K .......... .......... .......... .......... .......... 32% 50.9K 2m48s\n", - " 42100K .......... .......... .......... .......... .......... 32% 147K 2m49s\n", - " 42150K .......... .......... .......... .......... .......... 32% 4.93M 2m49s\n", - " 42200K .......... .......... .......... .......... .......... 32% 299K 2m49s\n", - " 42250K .......... .......... .......... .......... .......... 32% 298K 2m49s\n", - " 42300K .......... .......... .......... .......... .......... 32% 310K 2m49s\n", - " 42350K .......... .......... .......... .......... .......... 32% 2.65M 2m48s\n", - " 42400K .......... .......... .......... .......... .......... 32% 290K 2m49s\n", - " 42450K .......... .......... .......... .......... .......... 33% 333K 2m49s\n", - " 42500K .......... .......... .......... .......... .......... 33% 315K 2m49s\n", - " 42550K .......... .......... .......... .......... .......... 33% 1.88M 2m48s\n", - " 42600K .......... .......... .......... .......... .......... 33% 309K 2m48s\n", - " 42650K .......... .......... .......... .......... .......... 33% 325K 2m48s\n", - " 42700K .......... .......... .......... .......... .......... 33% 1.77M 2m48s\n", - " 42750K .......... .......... .......... .......... .......... 33% 306K 2m48s\n", - " 42800K .......... .......... .......... .......... .......... 33% 343K 2m48s\n", - " 42850K .......... .......... .......... .......... .......... 33% 1.61M 2m48s\n", - " 42900K .......... .......... .......... .......... .......... 33% 308K 2m48s\n", - " 42950K .......... .......... .......... .......... .......... 33% 337K 2m48s\n", - " 43000K .......... .......... .......... .......... .......... 33% 1.66M 2m48s\n", - " 43050K .......... .......... .......... .......... .......... 33% 337K 2m48s\n", - " 43100K .......... .......... .......... .......... .......... 33% 331K 2m48s\n", - " 43150K .......... .......... .......... .......... .......... 33% 1.56M 2m47s\n", - " 43200K .......... .......... .......... .......... .......... 33% 323K 2m47s\n", - " 43250K .......... .......... .......... .......... .......... 33% 346K 2m47s\n", - " 43300K .......... .......... .......... .......... .......... 33% 1.35M 2m47s\n", - " 43350K .......... .......... .......... .......... .......... 33% 333K 2m47s\n", - " 43400K .......... .......... .......... .......... .......... 33% 1.62M 2m47s\n", - " 43450K .......... .......... .......... .......... .......... 33% 337K 2m47s\n", - " 43500K .......... .......... .......... .......... .......... 33% 354K 2m47s\n", - " 43550K .......... .......... .......... .......... .......... 33% 1.49M 2m47s\n", - " 43600K .......... .......... .......... .......... .......... 33% 337K 2m47s\n", - " 43650K .......... .......... .......... .......... .......... 33% 1.36M 2m47s\n", - " 43700K .......... .......... .......... .......... .......... 34% 333K 2m47s\n", - " 43750K .......... .......... .......... .......... .......... 34% 1.96M 2m46s\n", - " 43800K .......... .......... .......... .......... .......... 34% 330K 2m46s\n", - " 43850K .......... .......... .......... .......... .......... 34% 364K 2m46s\n", - " 43900K .......... .......... .......... .......... .......... 34% 1.44M 2m46s\n", - " 43950K .......... .......... .......... .......... .......... 34% 355K 2m46s\n", - " 44000K .......... .......... .......... .......... .......... 34% 1.62M 2m46s\n", - " 44050K .......... .......... .......... .......... .......... 34% 350K 2m46s\n", - " 44100K .......... .......... .......... .......... .......... 34% 1.78M 2m46s\n", - " 44150K .......... .......... .......... .......... .......... 34% 323K 2m46s\n", - " 44200K .......... .......... .......... .......... .......... 34% 1.66M 2m45s\n", - " 44250K .......... .......... .......... .......... .......... 34% 348K 2m45s\n", - " 44300K .......... .......... .......... .......... .......... 34% 1.82M 2m45s\n", - " 44350K .......... .......... .......... .......... .......... 34% 340K 2m45s\n", - " 44400K .......... .......... .......... .......... .......... 34% 390K 2m45s\n", - " 44450K .......... .......... .......... .......... .......... 34% 1.06M 2m45s\n", - " 44500K .......... .......... .......... .......... .......... 34% 391K 2m45s\n", - " 44550K .......... .......... .......... .......... .......... 34% 1.16M 2m45s\n", - " 44600K .......... .......... .......... .......... .......... 34% 397K 2m45s\n", - " 44650K .......... .......... .......... .......... .......... 34% 1.01M 2m44s\n", - " 44700K .......... .......... .......... .......... .......... 34% 408K 2m44s\n", - " 44750K .......... .......... .......... .......... .......... 34% 1.07M 2m44s\n", - " 44800K .......... .......... .......... .......... .......... 34% 404K 2m44s\n", - " 44850K .......... .......... .......... .......... .......... 34% 1.14M 2m44s\n", - " 44900K .......... .......... .......... .......... .......... 34% 395K 2m44s\n", - " 44950K .......... .......... .......... .......... .......... 34% 1.11M 2m44s\n", - " 45000K .......... .......... .......... .......... .......... 35% 407K 2m44s\n", - " 45050K .......... .......... .......... .......... .......... 35% 1.18M 2m43s\n", - " 45100K .......... .......... .......... .......... .......... 35% 417K 2m43s\n", - " 45150K .......... .......... .......... .......... .......... 35% 1.09M 2m43s\n", - " 45200K .......... .......... .......... .......... .......... 35% 420K 2m43s\n", - " 45250K .......... .......... .......... .......... .......... 35% 1.00M 2m43s\n", - " 45300K .......... .......... .......... .......... .......... 35% 1.24M 2m43s\n", - " 45350K .......... .......... .......... .......... .......... 35% 435K 2m43s\n", - " 45400K .......... .......... .......... .......... .......... 35% 940K 2m42s\n", - " 45450K .......... .......... .......... .......... .......... 35% 426K 2m42s\n", - " 45500K .......... .......... .......... .......... .......... 35% 954K 2m42s\n", - " 45550K .......... .......... .......... .......... .......... 35% 442K 2m42s\n", - " 45600K .......... .......... .......... .......... .......... 35% 875K 2m42s\n", - " 45650K .......... .......... .......... .......... .......... 35% 453K 2m42s\n", - " 45700K .......... .......... .......... .......... .......... 35% 858K 2m42s\n", - " 45750K .......... .......... .......... .......... .......... 35% 454K 2m42s\n", - " 45800K .......... .......... .......... .......... .......... 35% 856K 2m42s\n", - " 45850K .......... .......... .......... .......... .......... 35% 449K 2m41s\n", - " 45900K .......... .......... .......... .......... .......... 35% 842K 2m41s\n", - " 45950K .......... .......... .......... .......... .......... 35% 447K 2m41s\n", - " 46000K .......... .......... .......... .......... .......... 35% 1002K 2m41s\n", - " 46050K .......... .......... .......... .......... .......... 35% 411K 2m41s\n", - " 46100K .......... .......... .......... .......... .......... 35% 1009K 2m41s\n", - " 46150K .......... .......... .......... .......... .......... 35% 410K 2m41s\n", - " 46200K .......... .......... .......... .......... .......... 35% 1.06M 2m41s\n", - " 46250K .......... .......... .......... .......... .......... 35% 403K 2m40s\n", - " 46300K .......... .......... .......... .......... .......... 36% 1.02M 2m40s\n", - " 46350K .......... .......... .......... .......... .......... 36% 374K 2m40s\n", - " 46400K .......... .......... .......... .......... .......... 36% 1.35M 2m40s\n", - " 46450K .......... .......... .......... .......... .......... 36% 317K 2m40s\n", - " 46500K .......... .......... .......... .......... .......... 36% 891K 2m40s\n", - " 46550K .......... .......... .......... .......... .......... 36% 434K 2m40s\n", - " 46600K .......... .......... .......... .......... .......... 36% 875K 2m40s\n", - " 46650K .......... .......... .......... .......... .......... 36% 448K 2m40s\n", - " 46700K .......... .......... .......... .......... .......... 36% 890K 2m39s\n", - " 46750K .......... .......... .......... .......... .......... 36% 443K 2m39s\n", - " 46800K .......... .......... .......... .......... .......... 36% 893K 2m39s\n", - " 46850K .......... .......... .......... .......... .......... 36% 444K 2m39s\n", - " 46900K .......... .......... .......... .......... .......... 36% 865K 2m39s\n", - " 46950K .......... .......... .......... .......... .......... 36% 4.43M 2m39s\n", - " 47000K .......... .......... .......... .......... .......... 36% 318K 2m39s\n", - " 47050K .......... .......... .......... .......... .......... 36% 449K 2m39s\n", - " 47100K .......... .......... .......... .......... .......... 36% 846K 2m38s\n", - " 47150K .......... .......... .......... .......... .......... 36% 2.56M 2m38s\n", - " 47200K .......... .......... .......... .......... .......... 36% 328K 2m38s\n", - " 47250K .......... .......... .......... .......... .......... 36% 3.15M 2m38s\n", - " 47300K .......... .......... .......... .......... .......... 36% 325K 2m38s\n", - " 47350K .......... .......... .......... .......... .......... 36% 1.79M 2m38s\n", - " 47400K .......... .......... .......... .......... .......... 36% 346K 2m38s\n", - " 47450K .......... .......... .......... .......... .......... 36% 1.94M 2m38s\n", - " 47500K .......... .......... .......... .......... .......... 36% 350K 2m38s\n", - " 47550K .......... .......... .......... .......... .......... 36% 1.74M 2m37s\n", - " 47600K .......... .......... .......... .......... .......... 37% 508K 2m37s\n", - " 47650K .......... .......... .......... .......... .......... 37% 674K 2m37s\n", - " 47700K .......... .......... .......... .......... .......... 37% 527K 2m37s\n", - " 47750K .......... .......... .......... .......... .......... 37% 674K 2m37s\n", - " 47800K .......... .......... .......... .......... .......... 37% 504K 2m37s\n", - " 47850K .......... .......... .......... .......... .......... 37% 717K 2m37s\n", - " 47900K .......... .......... .......... .......... .......... 37% 496K 2m37s\n", - " 47950K .......... .......... .......... .......... .......... 37% 730K 2m36s\n", - " 48000K .......... .......... .......... .......... .......... 37% 501K 2m36s\n", - " 48050K .......... .......... .......... .......... .......... 37% 718K 2m36s\n", - " 48100K .......... .......... .......... .......... .......... 37% 474K 2m36s\n", - " 48150K .......... .......... .......... .......... .......... 37% 773K 2m36s\n", - " 48200K .......... .......... .......... .......... .......... 37% 459K 2m36s\n", - " 48250K .......... .......... .......... .......... .......... 37% 835K 2m36s\n", - " 48300K .......... .......... .......... .......... .......... 37% 462K 2m36s\n", - " 48350K .......... .......... .......... .......... .......... 37% 800K 2m35s\n", - " 48400K .......... .......... .......... .......... .......... 37% 442K 2m35s\n", - " 48450K .......... .......... .......... .......... .......... 37% 903K 2m35s\n", - " 48500K .......... .......... .......... .......... .......... 37% 440K 2m35s\n", - " 48550K .......... .......... .......... .......... .......... 37% 897K 2m35s\n", - " 48600K .......... .......... .......... .......... .......... 37% 441K 2m35s\n", - " 48650K .......... .......... .......... .......... .......... 37% 901K 2m35s\n", - " 48700K .......... .......... .......... .......... .......... 37% 439K 2m35s\n", - " 48750K .......... .......... .......... .......... .......... 37% 839K 2m35s\n", - " 48800K .......... .......... .......... .......... .......... 37% 453K 2m34s\n", - " 48850K .......... .......... .......... .......... .......... 38% 886K 2m34s\n", - " 48900K .......... .......... .......... .......... .......... 38% 432K 2m34s\n", - " 48950K .......... .......... .......... .......... .......... 38% 939K 2m34s\n", - " 49000K .......... .......... .......... .......... .......... 38% 431K 2m34s\n", - " 49050K .......... .......... .......... .......... .......... 38% 951K 2m34s\n", - " 49100K .......... .......... .......... .......... .......... 38% 415K 2m34s\n", - " 49150K .......... .......... .......... .......... .......... 38% 955K 2m34s\n", - " 49200K .......... .......... .......... .......... .......... 38% 423K 2m34s\n", - " 49250K .......... .......... .......... .......... .......... 38% 988K 2m33s\n", - " 49300K .......... .......... .......... .......... .......... 38% 398K 2m33s\n", - " 49350K .......... .......... .......... .......... .......... 38% 1.13M 2m33s\n", - " 49400K .......... .......... .......... .......... .......... 38% 407K 2m33s\n", - " 49450K .......... .......... .......... .......... .......... 38% 1.06M 2m33s\n", - " 49500K .......... .......... .......... .......... .......... 38% 397K 2m33s\n", - " 49550K .......... .......... .......... .......... .......... 38% 1.54M 2m33s\n", - " 49600K .......... .......... .......... .......... .......... 38% 363K 2m33s\n", - " 49650K .......... .......... .......... .......... .......... 38% 1.68M 2m32s\n", - " 49700K .......... .......... .......... .......... .......... 38% 357K 2m32s\n", - " 49750K .......... .......... .......... .......... .......... 38% 1.65M 2m32s\n", - " 49800K .......... .......... .......... .......... .......... 38% 357K 2m32s\n", - " 49850K .......... .......... .......... .......... .......... 38% 1.45M 2m32s\n", - " 49900K .......... .......... .......... .......... .......... 38% 367K 2m32s\n", - " 49950K .......... .......... .......... .......... .......... 38% 1.53M 2m32s\n", - " 50000K .......... .......... .......... .......... .......... 38% 361K 2m32s\n", - " 50050K .......... .......... .......... .......... .......... 38% 1.12M 2m32s\n", - " 50100K .......... .......... .......... .......... .......... 38% 395K 2m31s\n", - " 50150K .......... .......... .......... .......... .......... 39% 1.53M 2m31s\n", - " 50200K .......... .......... .......... .......... .......... 39% 350K 2m31s\n", - " 50250K .......... .......... .......... .......... .......... 39% 1.94M 2m31s\n", - " 50300K .......... .......... .......... .......... .......... 39% 348K 2m31s\n", - " 50350K .......... .......... .......... .......... .......... 39% 1.87M 2m31s\n", - " 50400K .......... .......... .......... .......... .......... 39% 348K 2m31s\n", - " 50450K .......... .......... .......... .......... .......... 39% 2.03M 2m31s\n", - " 50500K .......... .......... .......... .......... .......... 39% 345K 2m31s\n", - " 50550K .......... .......... .......... .......... .......... 39% 2.10M 2m30s\n", - " 50600K .......... .......... .......... .......... .......... 39% 1.19M 2m30s\n", - " 50650K .......... .......... .......... .......... .......... 39% 391K 2m30s\n", - " 50700K .......... .......... .......... .......... .......... 39% 1.19M 2m30s\n", - " 50750K .......... .......... .......... .......... .......... 39% 395K 2m30s\n", - " 50800K .......... .......... .......... .......... .......... 39% 1.13M 2m30s\n", - " 50850K .......... .......... .......... .......... .......... 39% 390K 2m30s\n", - " 50900K .......... .......... .......... .......... .......... 39% 1.12M 2m29s\n", - " 50950K .......... .......... .......... .......... .......... 39% 391K 2m29s\n", - " 51000K .......... .......... .......... .......... .......... 39% 1.18M 2m29s\n", - " 51050K .......... .......... .......... .......... .......... 39% 391K 2m29s\n", - " 51100K .......... .......... .......... .......... .......... 39% 1.20M 2m29s\n", - " 51150K .......... .......... .......... .......... .......... 39% 379K 2m29s\n", - " 51200K .......... .......... .......... .......... .......... 39% 1.21M 2m29s\n", - " 51250K .......... .......... .......... .......... .......... 39% 392K 2m29s\n", - " 51300K .......... .......... .......... .......... .......... 39% 1.14M 2m29s\n", - " 51350K .......... .......... .......... .......... .......... 39% 398K 2m29s\n", - " 51400K .......... .......... .......... .......... .......... 39% 1.16M 2m28s\n", - " 51450K .......... .......... .......... .......... .......... 40% 384K 2m28s\n", - " 51500K .......... .......... .......... .......... .......... 40% 1.26M 2m28s\n", - " 51550K .......... .......... .......... .......... .......... 40% 381K 2m28s\n", - " 51600K .......... .......... .......... .......... .......... 40% 1.06M 2m28s\n", - " 51650K .......... .......... .......... .......... .......... 40% 402K 2m28s\n", - " 51700K .......... .......... .......... .......... .......... 40% 1.05M 2m28s\n", - " 51750K .......... .......... .......... .......... .......... 40% 405K 2m28s\n", - " 51800K .......... .......... .......... .......... .......... 40% 1.10M 2m27s\n", - " 51850K .......... .......... .......... .......... .......... 40% 390K 2m27s\n", - " 51900K .......... .......... .......... .......... .......... 40% 1.17M 2m27s\n", - " 51950K .......... .......... .......... .......... .......... 40% 424K 2m27s\n", - " 52000K .......... .......... .......... .......... .......... 40% 911K 2m27s\n", - " 52050K .......... .......... .......... .......... .......... 40% 429K 2m27s\n", - " 52100K .......... .......... .......... .......... .......... 40% 941K 2m27s\n", - " 52150K .......... .......... .......... .......... .......... 40% 440K 2m27s\n", - " 52200K .......... .......... .......... .......... .......... 40% 868K 2m27s\n", - " 52250K .......... .......... .......... .......... .......... 40% 417K 2m27s\n", - " 52300K .......... .......... .......... .......... .......... 40% 793K 2m26s\n", - " 52350K .......... .......... .......... .......... .......... 40% 376K 2m26s\n", - " 52400K .......... .......... .......... .......... .......... 40% 933K 2m26s\n", - " 52450K .......... .......... .......... .......... .......... 40% 418K 2m26s\n", - " 52500K .......... .......... .......... .......... .......... 40% 3.42M 2m26s\n", - " 52550K .......... .......... .......... .......... .......... 40% 323K 2m26s\n", - " 52600K .......... .......... .......... .......... .......... 40% 4.59M 2m26s\n", - " 52650K .......... .......... .......... .......... .......... 40% 316K 2m26s\n", - " 52700K .......... .......... .......... .......... .......... 41% 4.08M 2m25s\n", - " 52750K .......... .......... .......... .......... .......... 41% 317K 2m25s\n", - " 52800K .......... .......... .......... .......... .......... 41% 4.11M 2m25s\n", - " 52850K .......... .......... .......... .......... .......... 41% 318K 2m25s\n", - " 52900K .......... .......... .......... .......... .......... 41% 4.34M 2m25s\n", - " 52950K .......... .......... .......... .......... .......... 41% 317K 2m25s\n", - " 53000K .......... .......... .......... .......... .......... 41% 5.27M 2m25s\n", - " 53050K .......... .......... .......... .......... .......... 41% 317K 2m25s\n", - " 53100K .......... .......... .......... .......... .......... 41% 4.78M 2m25s\n", - " 53150K .......... .......... .......... .......... .......... 41% 314K 2m25s\n", - " 53200K .......... .......... .......... .......... .......... 41% 5.37M 2m24s\n", - " 53250K .......... .......... .......... .......... .......... 41% 313K 2m24s\n", - " 53300K .......... .......... .......... .......... .......... 41% 7.22M 2m24s\n", - " 53350K .......... .......... .......... .......... .......... 41% 308K 2m24s\n", - " 53400K .......... .......... .......... .......... .......... 41% 6.34M 2m24s\n", - " 53450K .......... .......... .......... .......... .......... 41% 311K 2m24s\n", - " 53500K .......... .......... .......... .......... .......... 41% 5.06M 2m24s\n", - " 53550K .......... .......... .......... .......... .......... 41% 311K 2m24s\n", - " 53600K .......... .......... .......... .......... .......... 41% 5.54M 2m23s\n", - " 53650K .......... .......... .......... .......... .......... 41% 311K 2m23s\n", - " 53700K .......... .......... .......... .......... .......... 41% 4.63M 2m23s\n", - " 53750K .......... .......... .......... .......... .......... 41% 311K 2m23s\n", - " 53800K .......... .......... .......... .......... .......... 41% 5.87M 2m23s\n", - " 53850K .......... .......... .......... .......... .......... 41% 310K 2m23s\n", - " 53900K .......... .......... .......... .......... .......... 41% 5.74M 2m23s\n", - " 53950K .......... .......... .......... .......... .......... 41% 311K 2m23s\n", - " 54000K .......... .......... .......... .......... .......... 42% 4.95M 2m23s\n", - " 54050K .......... .......... .......... .......... .......... 42% 314K 2m23s\n", - " 54100K .......... .......... .......... .......... .......... 42% 6.31M 2m22s\n", - " 54150K .......... .......... .......... .......... .......... 42% 308K 2m22s\n", - " 54200K .......... .......... .......... .......... .......... 42% 6.17M 2m22s\n", - " 54250K .......... .......... .......... .......... .......... 42% 308K 2m22s\n", - " 54300K .......... .......... .......... .......... .......... 42% 5.93M 2m22s\n", - " 54350K .......... .......... .......... .......... .......... 42% 872K 2m22s\n", - " 54400K .......... .......... .......... .......... .......... 42% 449K 2m22s\n", - " 54450K .......... .......... .......... .......... .......... 42% 871K 2m22s\n", - " 54500K .......... .......... .......... .......... .......... 42% 440K 2m21s\n", - " 54550K .......... .......... .......... .......... .......... 42% 870K 2m21s\n", - " 54600K .......... .......... .......... .......... .......... 42% 450K 2m21s\n", - " 54650K .......... .......... .......... .......... .......... 42% 877K 2m21s\n", - " 54700K .......... .......... .......... .......... .......... 42% 449K 2m21s\n", - " 54750K .......... .......... .......... .......... .......... 42% 835K 2m21s\n", - " 54800K .......... .......... .......... .......... .......... 42% 445K 2m21s\n", - " 54850K .......... .......... .......... .......... .......... 42% 832K 2m21s\n", - " 54900K .......... .......... .......... .......... .......... 42% 453K 2m21s\n", - " 54950K .......... .......... .......... .......... .......... 42% 871K 2m20s\n", - " 55000K .......... .......... .......... .......... .......... 42% 448K 2m20s\n", - " 55050K .......... .......... .......... .......... .......... 42% 865K 2m20s\n", - " 55100K .......... .......... .......... .......... .......... 42% 450K 2m20s\n", - " 55150K .......... .......... .......... .......... .......... 42% 884K 2m20s\n", - " 55200K .......... .......... .......... .......... .......... 42% 442K 2m20s\n", - " 55250K .......... .......... .......... .......... .......... 42% 870K 2m20s\n", - " 55300K .......... .......... .......... .......... .......... 43% 441K 2m20s\n", - " 55350K .......... .......... .......... .......... .......... 43% 905K 2m20s\n", - " 55400K .......... .......... .......... .......... .......... 43% 433K 2m19s\n", - " 55450K .......... .......... .......... .......... .......... 43% 919K 2m19s\n", - " 55500K .......... .......... .......... .......... .......... 43% 436K 2m19s\n", - " 55550K .......... .......... .......... .......... .......... 43% 943K 2m19s\n", - " 55600K .......... .......... .......... .......... .......... 43% 433K 2m19s\n", - " 55650K .......... .......... .......... .......... .......... 43% 926K 2m19s\n", - " 55700K .......... .......... .......... .......... .......... 43% 434K 2m19s\n", - " 55750K .......... .......... .......... .......... .......... 43% 970K 2m19s\n", - " 55800K .......... .......... .......... .......... .......... 43% 428K 2m19s\n", - " 55850K .......... .......... .......... .......... .......... 43% 939K 2m18s\n", - " 55900K .......... .......... .......... .......... .......... 43% 433K 2m18s\n", - " 55950K .......... .......... .......... .......... .......... 43% 927K 2m18s\n", - " 56000K .......... .......... .......... .......... .......... 43% 420K 2m18s\n", - " 56050K .......... .......... .......... .......... .......... 43% 1.01M 2m18s\n", - " 56100K .......... .......... .......... .......... .......... 43% 420K 2m18s\n", - " 56150K .......... .......... .......... .......... .......... 43% 980K 2m18s\n", - " 56200K .......... .......... .......... .......... .......... 43% 416K 2m18s\n", - " 56250K .......... .......... .......... .......... .......... 43% 1.03M 2m18s\n", - " 56300K .......... .......... .......... .......... .......... 43% 411K 2m18s\n", - " 56350K .......... .......... .......... .......... .......... 43% 1.02M 2m17s\n", - " 56400K .......... .......... .......... .......... .......... 43% 416K 2m17s\n", - " 56450K .......... .......... .......... .......... .......... 43% 1.01M 2m17s\n", - " 56500K .......... .......... .......... .......... .......... 43% 414K 2m17s\n", - " 56550K .......... .......... .......... .......... .......... 43% 1.07M 2m17s\n", - " 56600K .......... .......... .......... .......... .......... 44% 405K 2m17s\n", - " 56650K .......... .......... .......... .......... .......... 44% 1.06M 2m17s\n", - " 56700K .......... .......... .......... .......... .......... 44% 400K 2m17s\n", - " 56750K .......... .......... .......... .......... .......... 44% 989K 2m16s\n", - " 56800K .......... .......... .......... .......... .......... 44% 426K 2m16s\n", - " 56850K .......... .......... .......... .......... .......... 44% 1003K 2m16s\n", - " 56900K .......... .......... .......... .......... .......... 44% 421K 2m16s\n", - " 56950K .......... .......... .......... .......... .......... 44% 975K 2m16s\n", - " 57000K .......... .......... .......... .......... .......... 44% 420K 2m16s\n", - " 57050K .......... .......... .......... .......... .......... 44% 1.01M 2m16s\n", - " 57100K .......... .......... .......... .......... .......... 44% 415K 2m16s\n", - " 57150K .......... .......... .......... .......... .......... 44% 1.00M 2m16s\n", - " 57200K .......... .......... .......... .......... .......... 44% 420K 2m16s\n", - " 57250K .......... .......... .......... .......... .......... 44% 1015K 2m15s\n", - " 57300K .......... .......... .......... .......... .......... 44% 412K 2m15s\n", - " 57350K .......... .......... .......... .......... .......... 44% 1.04M 2m15s\n", - " 57400K .......... .......... .......... .......... .......... 44% 417K 2m15s\n", - " 57450K .......... .......... .......... .......... .......... 44% 962K 2m15s\n", - " 57500K .......... .......... .......... .......... .......... 44% 421K 2m15s\n", - " 57550K .......... .......... .......... .......... .......... 44% 988K 2m15s\n", - " 57600K .......... .......... .......... .......... .......... 44% 423K 2m15s\n", - " 57650K .......... .......... .......... .......... .......... 44% 984K 2m15s\n", - " 57700K .......... .......... .......... .......... .......... 44% 421K 2m14s\n", - " 57750K .......... .......... .......... .......... .......... 44% 988K 2m14s\n", - " 57800K .......... .......... .......... .......... .......... 44% 426K 2m14s\n", - " 57850K .......... .......... .......... .......... .......... 45% 3.57M 2m14s\n", - " 57900K .......... .......... .......... .......... .......... 45% 325K 2m14s\n", - " 57950K .......... .......... .......... .......... .......... 45% 3.15M 2m14s\n", - " 58000K .......... .......... .......... .......... .......... 45% 326K 2m14s\n", - " 58050K .......... .......... .......... .......... .......... 45% 3.45M 2m14s\n", - " 58100K .......... .......... .......... .......... .......... 45% 324K 2m14s\n", - " 58150K .......... .......... .......... .......... .......... 45% 910K 2m13s\n", - " 58200K .......... .......... .......... .......... .......... 45% 438K 2m13s\n", - " 58250K .......... .......... .......... .......... .......... 45% 676K 2m13s\n", - " 58300K .......... .......... .......... .......... .......... 45% 499K 2m13s\n", - " 58350K .......... .......... .......... .......... .......... 45% 618K 2m13s\n", - " 58400K .......... .......... .......... .......... .......... 45% 546K 2m13s\n", - " 58450K .......... .......... .......... .......... .......... 45% 1.23M 2m13s\n", - " 58500K .......... .......... .......... .......... .......... 45% 382K 2m13s\n", - " 58550K .......... .......... .......... .......... .......... 45% 1.41M 2m13s\n", - " 58600K .......... .......... .......... .......... .......... 45% 366K 2m13s\n", - " 58650K .......... .......... .......... .......... .......... 45% 1.38M 2m12s\n", - " 58700K .......... .......... .......... .......... .......... 45% 374K 2m12s\n", - " 58750K .......... .......... .......... .......... .......... 45% 1.40M 2m12s\n", - " 58800K .......... .......... .......... .......... .......... 45% 367K 2m12s\n", - " 58850K .......... .......... .......... .......... .......... 45% 1.57M 2m12s\n", - " 58900K .......... .......... .......... .......... .......... 45% 365K 2m12s\n", - " 58950K .......... .......... .......... .......... .......... 45% 1.57M 2m12s\n", - " 59000K .......... .......... .......... .......... .......... 45% 360K 2m12s\n", - " 59050K .......... .......... .......... .......... .......... 45% 1.41M 2m12s\n", - " 59100K .......... .......... .......... .......... .......... 45% 372K 2m12s\n", - " 59150K .......... .......... .......... .......... .......... 46% 1.20M 2m11s\n", - " 59200K .......... .......... .......... .......... .......... 46% 388K 2m11s\n", - " 59250K .......... .......... .......... .......... .......... 46% 1.28M 2m11s\n", - " 59300K .......... .......... .......... .......... .......... 46% 374K 2m11s\n", - " 59350K .......... .......... .......... .......... .......... 46% 1.31M 2m11s\n", - " 59400K .......... .......... .......... .......... .......... 46% 378K 2m11s\n", - " 59450K .......... .......... .......... .......... .......... 46% 1.24M 2m11s\n", - " 59500K .......... .......... .......... .......... .......... 46% 382K 2m11s\n", - " 59550K .......... .......... .......... .......... .......... 46% 1.28M 2m11s\n", - " 59600K .......... .......... .......... .......... .......... 46% 383K 2m10s\n", - " 59650K .......... .......... .......... .......... .......... 46% 1.25M 2m10s\n", - " 59700K .......... .......... .......... .......... .......... 46% 388K 2m10s\n", - " 59750K .......... .......... .......... .......... .......... 46% 1.29M 2m10s\n", - " 59800K .......... .......... .......... .......... .......... 46% 369K 2m10s\n", - " 59850K .......... .......... .......... .......... .......... 46% 1.47M 2m10s\n", - " 59900K .......... .......... .......... .......... .......... 46% 367K 2m10s\n", - " 59950K .......... .......... .......... .......... .......... 46% 1.52M 2m10s\n", - " 60000K .......... .......... .......... .......... .......... 46% 364K 2m10s\n", - " 60050K .......... .......... .......... .......... .......... 46% 1.55M 2m9s\n", - " 60100K .......... .......... .......... .......... .......... 46% 357K 2m9s\n", - " 60150K .......... .......... .......... .......... .......... 46% 1.54M 2m9s\n", - " 60200K .......... .......... .......... .......... .......... 46% 1.63M 2m9s\n", - " 60250K .......... .......... .......... .......... .......... 46% 356K 2m9s\n", - " 60300K .......... .......... .......... .......... .......... 46% 1.68M 2m9s\n", - " 60350K .......... .......... .......... .......... .......... 46% 355K 2m9s\n", - " 60400K .......... .......... .......... .......... .......... 46% 1.71M 2m9s\n", - " 60450K .......... .......... .......... .......... .......... 47% 363K 2m9s\n", - " 60500K .......... .......... .......... .......... .......... 47% 1.60M 2m8s\n", - " 60550K .......... .......... .......... .......... .......... 47% 361K 2m8s\n", - " 60600K .......... .......... .......... .......... .......... 47% 1.63M 2m8s\n", - " 60650K .......... .......... .......... .......... .......... 47% 364K 2m8s\n", - " 60700K .......... .......... .......... .......... .......... 47% 1.50M 2m8s\n", - " 60750K .......... .......... .......... .......... .......... 47% 366K 2m8s\n", - " 60800K .......... .......... .......... .......... .......... 47% 1.41M 2m8s\n", - " 60850K .......... .......... .......... .......... .......... 47% 370K 2m8s\n", - " 60900K .......... .......... .......... .......... .......... 47% 1.37M 2m8s\n", - " 60950K .......... .......... .......... .......... .......... 47% 381K 2m8s\n", - " 61000K .......... .......... .......... .......... .......... 47% 1.35M 2m7s\n", - " 61050K .......... .......... .......... .......... .......... 47% 381K 2m7s\n", - " 61100K .......... .......... .......... .......... .......... 47% 1.28M 2m7s\n", - " 61150K .......... .......... .......... .......... .......... 47% 383K 2m7s\n", - " 61200K .......... .......... .......... .......... .......... 47% 1.33M 2m7s\n", - " 61250K .......... .......... .......... .......... .......... 47% 367K 2m7s\n", - " 61300K .......... .......... .......... .......... .......... 47% 1.30M 2m7s\n", - " 61350K .......... .......... .......... .......... .......... 47% 383K 2m7s\n", - " 61400K .......... .......... .......... .......... .......... 47% 1.32M 2m7s\n", - " 61450K .......... .......... .......... .......... .......... 47% 379K 2m6s\n", - " 61500K .......... .......... .......... .......... .......... 47% 1.34M 2m6s\n", - " 61550K .......... .......... .......... .......... .......... 47% 378K 2m6s\n", - " 61600K .......... .......... .......... .......... .......... 47% 1.35M 2m6s\n", - " 61650K .......... .......... .......... .......... .......... 47% 376K 2m6s\n", - " 61700K .......... .......... .......... .......... .......... 47% 1.22M 2m6s\n", - " 61750K .......... .......... .......... .......... .......... 48% 392K 2m6s\n", - " 61800K .......... .......... .......... .......... .......... 48% 1.24M 2m6s\n", - " 61850K .......... .......... .......... .......... .......... 48% 385K 2m6s\n", - " 61900K .......... .......... .......... .......... .......... 48% 1.25M 2m6s\n", - " 61950K .......... .......... .......... .......... .......... 48% 386K 2m5s\n", - " 62000K .......... .......... .......... .......... .......... 48% 1.24M 2m5s\n", - " 62050K .......... .......... .......... .......... .......... 48% 386K 2m5s\n", - " 62100K .......... .......... .......... .......... .......... 48% 1.27M 2m5s\n", - " 62150K .......... .......... .......... .......... .......... 48% 384K 2m5s\n", - " 62200K .......... .......... .......... .......... .......... 48% 1.30M 2m5s\n", - " 62250K .......... .......... .......... .......... .......... 48% 377K 2m5s\n", - " 62300K .......... .......... .......... .......... .......... 48% 1.33M 2m5s\n", - " 62350K .......... .......... .......... .......... .......... 48% 377K 2m5s\n", - " 62400K .......... .......... .......... .......... .......... 48% 1.34M 2m4s\n", - " 62450K .......... .......... .......... .......... .......... 48% 376K 2m4s\n", - " 62500K .......... .......... .......... .......... .......... 48% 1.30M 2m4s\n", - " 62550K .......... .......... .......... .......... .......... 48% 382K 2m4s\n", - " 62600K .......... .......... .......... .......... .......... 48% 1.35M 2m4s\n", - " 62650K .......... .......... .......... .......... .......... 48% 379K 2m4s\n", - " 62700K .......... .......... .......... .......... .......... 48% 1.24M 2m4s\n", - " 62750K .......... .......... .......... .......... .......... 48% 389K 2m4s\n", - " 62800K .......... .......... .......... .......... .......... 48% 1.28M 2m4s\n", - " 62850K .......... .......... .......... .......... .......... 48% 387K 2m4s\n", - " 62900K .......... .......... .......... .......... .......... 48% 1.20M 2m3s\n", - " 62950K .......... .......... .......... .......... .......... 48% 379K 2m3s\n", - " 63000K .......... .......... .......... .......... .......... 49% 1.35M 2m3s\n", - " 63050K .......... .......... .......... .......... .......... 49% 381K 2m3s\n", - " 63100K .......... .......... .......... .......... .......... 49% 1.30M 2m3s\n", - " 63150K .......... .......... .......... .......... .......... 49% 376K 2m3s\n", - " 63200K .......... .......... .......... .......... .......... 49% 1.37M 2m3s\n", - " 63250K .......... .......... .......... .......... .......... 49% 365K 2m3s\n", - " 63300K .......... .......... .......... .......... .......... 49% 1.54M 2m3s\n", - " 63350K .......... .......... .......... .......... .......... 49% 363K 2m3s\n", - " 63400K .......... .......... .......... .......... .......... 49% 1.42M 2m2s\n", - " 63450K .......... .......... .......... .......... .......... 49% 369K 2m2s\n", - " 63500K .......... .......... .......... .......... .......... 49% 1.33M 2m2s\n", - " 63550K .......... .......... .......... .......... .......... 49% 373K 2m2s\n", - " 63600K .......... .......... .......... .......... .......... 49% 1.42M 2m2s\n", - " 63650K .......... .......... .......... .......... .......... 49% 369K 2m2s\n", - " 63700K .......... .......... .......... .......... .......... 49% 1.54M 2m2s\n", - " 63750K .......... .......... .......... .......... .......... 49% 364K 2m2s\n", - " 63800K .......... .......... .......... .......... .......... 49% 1.56M 2m2s\n", - " 63850K .......... .......... .......... .......... .......... 49% 364K 2m2s\n", - " 63900K .......... .......... .......... .......... .......... 49% 1.59M 2m1s\n", - " 63950K .......... .......... .......... .......... .......... 49% 357K 2m1s\n", - " 64000K .......... .......... .......... .......... .......... 49% 3.90M 2m1s\n", - " 64050K .......... .......... .......... .......... .......... 49% 318K 2m1s\n", - " 64100K .......... .......... .......... .......... .......... 49% 4.94M 2m1s\n", - " 64150K .......... .......... .......... .......... .......... 49% 285K 2m1s\n", - " 64200K .......... .......... .......... .......... .......... 49% 8.45M 2m1s\n", - " 64250K .......... .......... .......... .......... .......... 49% 241K 2m1s\n", - " 64300K .......... .......... .......... .......... .......... 50% 6.04M 2m1s\n", - " 64350K .......... .......... .......... .......... .......... 50% 303K 2m1s\n", - " 64400K .......... .......... .......... .......... .......... 50% 3.73M 2m0s\n", - " 64450K .......... .......... .......... .......... .......... 50% 320K 2m0s\n", - " 64500K .......... .......... .......... .......... .......... 50% 5.24M 2m0s\n", - " 64550K .......... .......... .......... .......... .......... 50% 310K 2m0s\n", - " 64600K .......... .......... .......... .......... .......... 50% 5.95M 2m0s\n", - " 64650K .......... .......... .......... .......... .......... 50% 310K 2m0s\n", - " 64700K .......... .......... .......... .......... .......... 50% 5.13M 2m0s\n", - " 64750K .......... .......... .......... .......... .......... 50% 313K 2m0s\n", - " 64800K .......... .......... .......... .......... .......... 50% 5.84M 2m0s\n", - " 64850K .......... .......... .......... .......... .......... 50% 311K 2m0s\n", - " 64900K .......... .......... .......... .......... .......... 50% 5.32M 1m59s\n", - " 64950K .......... .......... .......... .......... .......... 50% 313K 1m59s\n", - " 65000K .......... .......... .......... .......... .......... 50% 5.07M 1m59s\n", - " 65050K .......... .......... .......... .......... .......... 50% 312K 1m59s\n", - " 65100K .......... .......... .......... .......... .......... 50% 5.14M 1m59s\n", - " 65150K .......... .......... .......... .......... .......... 50% 316K 1m59s\n", - " 65200K .......... .......... .......... .......... .......... 50% 4.24M 1m59s\n", - " 65250K .......... .......... .......... .......... .......... 50% 317K 1m59s\n", - " 65300K .......... .......... .......... .......... .......... 50% 3.91M 1m59s\n", - " 65350K .......... .......... .......... .......... .......... 50% 321K 1m58s\n", - " 65400K .......... .......... .......... .......... .......... 50% 3.23M 1m58s\n", - " 65450K .......... .......... .......... .......... .......... 50% 311K 1m58s\n", - " 65500K .......... .......... .......... .......... .......... 50% 5.94M 1m58s\n", - " 65550K .......... .......... .......... .......... .......... 50% 311K 1m58s\n", - " 65600K .......... .......... .......... .......... .......... 51% 5.67M 1m58s\n", - " 65650K .......... .......... .......... .......... .......... 51% 313K 1m58s\n", - " 65700K .......... .......... .......... .......... .......... 51% 3.13M 1m58s\n", - " 65750K .......... .......... .......... .......... .......... 51% 327K 1m58s\n", - " 65800K .......... .......... .......... .......... .......... 51% 2.85M 1m58s\n", - " 65850K .......... .......... .......... .......... .......... 51% 329K 1m57s\n", - " 65900K .......... .......... .......... .......... .......... 51% 3.31M 1m57s\n", - " 65950K .......... .......... .......... .......... .......... 51% 325K 1m57s\n", - " 66000K .......... .......... .......... .......... .......... 51% 3.34M 1m57s\n", - " 66050K .......... .......... .......... .......... .......... 51% 325K 1m57s\n", - " 66100K .......... .......... .......... .......... .......... 51% 3.20M 1m57s\n", - " 66150K .......... .......... .......... .......... .......... 51% 324K 1m57s\n", - " 66200K .......... .......... .......... .......... .......... 51% 3.59M 1m57s\n", - " 66250K .......... .......... .......... .......... .......... 51% 325K 1m57s\n", - " 66300K .......... .......... .......... .......... .......... 51% 2.38M 1m56s\n", - " 66350K .......... .......... .......... .......... .......... 51% 356K 1m56s\n", - " 66400K .......... .......... .......... .......... .......... 51% 2.10M 1m56s\n", - " 66450K .......... .......... .......... .......... .......... 51% 45.5K 1m57s\n", - " 66500K .......... .......... .......... .......... .......... 51% 105K 1m57s\n", - " 66550K .......... .......... .......... .......... .......... 51% 154K 1m58s\n", - " 66600K .......... .......... .......... .......... .......... 51% 156K 1m58s\n", - " 66650K .......... .......... .......... .......... .......... 51% 159K 1m58s\n", - " 66700K .......... .......... .......... .......... .......... 51% 154K 1m58s\n", - " 66750K .......... .......... .......... .......... .......... 51% 157K 1m58s\n", - " 66800K .......... .......... .......... .......... .......... 51% 168K 1m58s\n", - " 66850K .......... .......... .......... .......... .......... 52% 270K 1m58s\n", - " 66900K .......... .......... .......... .......... .......... 52% 172K 1m58s\n", - " 66950K .......... .......... .......... .......... .......... 52% 277K 1m58s\n", - " 67000K .......... .......... .......... .......... .......... 52% 298K 1m58s\n", - " 67050K .......... .......... .......... .......... .......... 52% 170K 1m58s\n", - " 67100K .......... .......... .......... .......... .......... 52% 290K 1m58s\n", - " 67150K .......... .......... .......... .......... .......... 52% 304K 1m58s\n", - " 67200K .......... .......... .......... .......... .......... 52% 300K 1m58s\n", - " 67250K .......... .......... .......... .......... .......... 52% 305K 1m58s\n", - " 67300K .......... .......... .......... .......... .......... 52% 313K 1m58s\n", - " 67350K .......... .......... .......... .......... .......... 52% 312K 1m58s\n", - " 67400K .......... .......... .......... .......... .......... 52% 198K 1m58s\n", - " 67450K .......... .......... .......... .......... .......... 52% 315K 1m58s\n", - " 67500K .......... .......... .......... .......... .......... 52% 315K 1m58s\n", - " 67550K .......... .......... .......... .......... .......... 52% 290K 1m58s\n", - " 67600K .......... .......... .......... .......... .......... 52% 270K 1m58s\n", - " 67650K .......... .......... .......... .......... .......... 52% 317K 1m58s\n", - " 67700K .......... .......... .......... .......... .......... 52% 316K 1m58s\n", - " 67750K .......... .......... .......... .......... .......... 52% 497K 1m58s\n", - " 67800K .......... .......... .......... .......... .......... 52% 325K 1m58s\n", - " 67850K .......... .......... .......... .......... .......... 52% 327K 1m58s\n", - " 67900K .......... .......... .......... .......... .......... 52% 322K 1m58s\n", - " 67950K .......... .......... .......... .......... .......... 52% 316K 1m58s\n", - " 68000K .......... .......... .......... .......... .......... 52% 555K 1m57s\n", - " 68050K .......... .......... .......... .......... .......... 52% 327K 1m57s\n", - " 68100K .......... .......... .......... .......... .......... 52% 491K 1m57s\n", - " 68150K .......... .......... .......... .......... .......... 53% 300K 1m57s\n", - " 68200K .......... .......... .......... .......... .......... 53% 366K 1m57s\n", - " 68250K .......... .......... .......... .......... .......... 53% 566K 1m57s\n", - " 68300K .......... .......... .......... .......... .......... 53% 363K 1m57s\n", - " 68350K .......... .......... .......... .......... .......... 53% 442K 1m57s\n", - " 68400K .......... .......... .......... .......... .......... 53% 364K 1m57s\n", - " 68450K .......... .......... .......... .......... .......... 53% 446K 1m57s\n", - " 68500K .......... .......... .......... .......... .......... 53% 425K 1m57s\n", - " 68550K .......... .......... .......... .......... .......... 53% 455K 1m57s\n", - " 68600K .......... .......... .......... .......... .......... 53% 512K 1m57s\n", - " 68650K .......... .......... .......... .......... .......... 53% 355K 1m56s\n", - " 68700K .......... .......... .......... .......... .......... 53% 567K 1m56s\n", - " 68750K .......... .......... .......... .......... .......... 53% 359K 1m56s\n", - " 68800K .......... .......... .......... .......... .......... 53% 496K 1m56s\n", - " 68850K .......... .......... .......... .......... .......... 53% 609K 1m56s\n", - " 68900K .......... .......... .......... .......... .......... 53% 377K 1m56s\n", - " 68950K .......... .......... .......... .......... .......... 53% 463K 1m56s\n", - " 69000K .......... .......... .......... .......... .......... 53% 611K 1m56s\n", - " 69050K .......... .......... .......... .......... .......... 53% 428K 1m56s\n", - " 69100K .......... .......... .......... .......... .......... 53% 431K 1m56s\n", - " 69150K .......... .......... .......... .......... .......... 53% 585K 1m56s\n", - " 69200K .......... .......... .......... .......... .......... 53% 525K 1m55s\n", - " 69250K .......... .......... .......... .......... .......... 53% 366K 1m55s\n", - " 69300K .......... .......... .......... .......... .......... 53% 703K 1m55s\n", - " 69350K .......... .......... .......... .......... .......... 53% 501K 1m55s\n", - " 69400K .......... .......... .......... .......... .......... 53% 565K 1m55s\n", - " 69450K .......... .......... .......... .......... .......... 54% 521K 1m55s\n", - " 69500K .......... .......... .......... .......... .......... 54% 370K 1m55s\n", - " 69550K .......... .......... .......... .......... .......... 54% 826K 1m55s\n", - " 69600K .......... .......... .......... .......... .......... 54% 491K 1m55s\n", - " 69650K .......... .......... .......... .......... .......... 54% 623K 1m55s\n", - " 69700K .......... .......... .......... .......... .......... 54% 513K 1m54s\n", - " 69750K .......... .......... .......... .......... .......... 54% 416K 1m54s\n", - " 69800K .......... .......... .......... .......... .......... 54% 797K 1m54s\n", - " 69850K .......... .......... .......... .......... .......... 54% 416K 1m54s\n", - " 69900K .......... .......... .......... .......... .......... 54% 688K 1m54s\n", - " 69950K .......... .......... .......... .......... .......... 54% 545K 1m54s\n", - " 70000K .......... .......... .......... .......... .......... 54% 634K 1m54s\n", - " 70050K .......... .......... .......... .......... .......... 54% 566K 1m54s\n", - " 70100K .......... .......... .......... .......... .......... 54% 533K 1m54s\n", - " 70150K .......... .......... .......... .......... .......... 54% 669K 1m54s\n", - " 70200K .......... .......... .......... .......... .......... 54% 401K 1m53s\n", - " 70250K .......... .......... .......... .......... .......... 54% 1.08M 1m53s\n", - " 70300K .......... .......... .......... .......... .......... 54% 409K 1m53s\n", - " 70350K .......... .......... .......... .......... .......... 54% 1.15M 1m53s\n", - " 70400K .......... .......... .......... .......... .......... 54% 430K 1m53s\n", - " 70450K .......... .......... .......... .......... .......... 54% 742K 1m53s\n", - " 70500K .......... .......... .......... .......... .......... 54% 534K 1m53s\n", - " 70550K .......... .......... .......... .......... .......... 54% 756K 1m53s\n", - " 70600K .......... .......... .......... .......... .......... 54% 499K 1m53s\n", - " 70650K .......... .......... .......... .......... .......... 54% 811K 1m52s\n", - " 70700K .......... .......... .......... .......... .......... 54% 512K 1m52s\n", - " 70750K .......... .......... .......... .......... .......... 55% 819K 1m52s\n", - " 70800K .......... .......... .......... .......... .......... 55% 484K 1m52s\n", - " 70850K .......... .......... .......... .......... .......... 55% 911K 1m52s\n", - " 70900K .......... .......... .......... .......... .......... 55% 486K 1m52s\n", - " 70950K .......... .......... .......... .......... .......... 55% 897K 1m52s\n", - " 71000K .......... .......... .......... .......... .......... 55% 494K 1m52s\n", - " 71050K .......... .......... .......... .......... .......... 55% 889K 1m52s\n", - " 71100K .......... .......... .......... .......... .......... 55% 520K 1m51s\n", - " 71150K .......... .......... .......... .......... .......... 55% 806K 1m51s\n", - " 71200K .......... .......... .......... .......... .......... 55% 526K 1m51s\n", - " 71250K .......... .......... .......... .......... .......... 55% 825K 1m51s\n", - " 71300K .......... .......... .......... .......... .......... 55% 525K 1m51s\n", - " 71350K .......... .......... .......... .......... .......... 55% 793K 1m51s\n", - " 71400K .......... .......... .......... .......... .......... 55% 556K 1m51s\n", - " 71450K .......... .......... .......... .......... .......... 55% 707K 1m51s\n", - " 71500K .......... .......... .......... .......... .......... 55% 556K 1m51s\n", - " 71550K .......... .......... .......... .......... .......... 55% 698K 1m50s\n", - " 71600K .......... .......... .......... .......... .......... 55% 571K 1m50s\n", - " 71650K .......... .......... .......... .......... .......... 55% 683K 1m50s\n", - " 71700K .......... .......... .......... .......... .......... 55% 586K 1m50s\n", - " 71750K .......... .......... .......... .......... .......... 55% 664K 1m50s\n", - " 71800K .......... .......... .......... .......... .......... 55% 601K 1m50s\n", - " 71850K .......... .......... .......... .......... .......... 55% 649K 1m50s\n", - " 71900K .......... .......... .......... .......... .......... 55% 629K 1m50s\n", - " 71950K .......... .......... .......... .......... .......... 55% 588K 1m50s\n", - " 72000K .......... .......... .......... .......... .......... 56% 673K 1m49s\n", - " 72050K .......... .......... .......... .......... .......... 56% 600K 1m49s\n", - " 72100K .......... .......... .......... .......... .......... 56% 662K 1m49s\n", - " 72150K .......... .......... .......... .......... .......... 56% 597K 1m49s\n", - " 72200K .......... .......... .......... .......... .......... 56% 657K 1m49s\n", - " 72250K .......... .......... .......... .......... .......... 56% 603K 1m49s\n", - " 72300K .......... .......... .......... .......... .......... 56% 665K 1m49s\n", - " 72350K .......... .......... .......... .......... .......... 56% 1.39M 1m49s\n", - " 72400K .......... .......... .......... .......... .......... 56% 405K 1m49s\n", - " 72450K .......... .......... .......... .......... .......... 56% 1.35M 1m48s\n", - " 72500K .......... .......... .......... .......... .......... 56% 407K 1m48s\n", - " 72550K .......... .......... .......... .......... .......... 56% 1.27M 1m48s\n", - " 72600K .......... .......... .......... .......... .......... 56% 406K 1m48s\n", - " 72650K .......... .......... .......... .......... .......... 56% 1.32M 1m48s\n", - " 72700K .......... .......... .......... .......... .......... 56% 403K 1m48s\n", - " 72750K .......... .......... .......... .......... .......... 56% 877K 1m48s\n", - " 72800K .......... .......... .......... .......... .......... 56% 371K 1m48s\n", - " 72850K .......... .......... .......... .......... .......... 56% 922K 1m48s\n", - " 72900K .......... .......... .......... .......... .......... 56% 470K 1m48s\n", - " 72950K .......... .......... .......... .......... .......... 56% 883K 1m47s\n", - " 73000K .......... .......... .......... .......... .......... 56% 487K 1m47s\n", - " 73050K .......... .......... .......... .......... .......... 56% 897K 1m47s\n", - " 73100K .......... .......... .......... .......... .......... 56% 485K 1m47s\n", - " 73150K .......... .......... .......... .......... .......... 56% 885K 1m47s\n", - " 73200K .......... .......... .......... .......... .......... 56% 487K 1m47s\n", - " 73250K .......... .......... .......... .......... .......... 56% 830K 1m47s\n", - " 73300K .......... .......... .......... .......... .......... 57% 499K 1m47s\n", - " 73350K .......... .......... .......... .......... .......... 57% 867K 1m47s\n", - " 73400K .......... .......... .......... .......... .......... 57% 491K 1m46s\n", - " 73450K .......... .......... .......... .......... .......... 57% 875K 1m46s\n", - " 73500K .......... .......... .......... .......... .......... 57% 496K 1m46s\n", - " 73550K .......... .......... .......... .......... .......... 57% 869K 1m46s\n", - " 73600K .......... .......... .......... .......... .......... 57% 490K 1m46s\n", - " 73650K .......... .......... .......... .......... .......... 57% 843K 1m46s\n", - " 73700K .......... .......... .......... .......... .......... 57% 498K 1m46s\n", - " 73750K .......... .......... .......... .......... .......... 57% 839K 1m46s\n", - " 73800K .......... .......... .......... .......... .......... 57% 821K 1m46s\n", - " 73850K .......... .......... .......... .......... .......... 57% 511K 1m45s\n", - " 73900K .......... .......... .......... .......... .......... 57% 811K 1m45s\n", - " 73950K .......... .......... .......... .......... .......... 57% 495K 1m45s\n", - " 74000K .......... .......... .......... .......... .......... 57% 861K 1m45s\n", - " 74050K .......... .......... .......... .......... .......... 57% 487K 1m45s\n", - " 74100K .......... .......... .......... .......... .......... 57% 874K 1m45s\n", - " 74150K .......... .......... .......... .......... .......... 57% 488K 1m45s\n", - " 74200K .......... .......... .......... .......... .......... 57% 885K 1m45s\n", - " 74250K .......... .......... .......... .......... .......... 57% 483K 1m45s\n", - " 74300K .......... .......... .......... .......... .......... 57% 875K 1m44s\n", - " 74350K .......... .......... .......... .......... .......... 57% 490K 1m44s\n", - " 74400K .......... .......... .......... .......... .......... 57% 868K 1m44s\n", - " 74450K .......... .......... .......... .......... .......... 57% 492K 1m44s\n", - " 74500K .......... .......... .......... .......... .......... 57% 872K 1m44s\n", - " 74550K .......... .......... .......... .......... .......... 57% 857K 1m44s\n", - " 74600K .......... .......... .......... .......... .......... 58% 504K 1m44s\n", - " 74650K .......... .......... .......... .......... .......... 58% 487K 1m44s\n", - " 74700K .......... .......... .......... .......... .......... 58% 890K 1m44s\n", - " 74750K .......... .......... .......... .......... .......... 58% 835K 1m43s\n", - " 74800K .......... .......... .......... .......... .......... 58% 505K 1m43s\n", - " 74850K .......... .......... .......... .......... .......... 58% 850K 1m43s\n", - " 74900K .......... .......... .......... .......... .......... 58% 491K 1m43s\n", - " 74950K .......... .......... .......... .......... .......... 58% 875K 1m43s\n", - " 75000K .......... .......... .......... .......... .......... 58% 494K 1m43s\n", - " 75050K .......... .......... .......... .......... .......... 58% 864K 1m43s\n", - " 75100K .......... .......... .......... .......... .......... 58% 501K 1m43s\n", - " 75150K .......... .......... .......... .......... .......... 58% 447K 1m43s\n", - " 75200K .......... .......... .......... .......... .......... 58% 1.03M 1m43s\n", - " 75250K .......... .......... .......... .......... .......... 58% 452K 1m42s\n", - " 75300K .......... .......... .......... .......... .......... 58% 1.03M 1m42s\n", - " 75350K .......... .......... .......... .......... .......... 58% 426K 1m42s\n", - " 75400K .......... .......... .......... .......... .......... 58% 1.12M 1m42s\n", - " 75450K .......... .......... .......... .......... .......... 58% 417K 1m42s\n", - " 75500K .......... .......... .......... .......... .......... 58% 1.30M 1m42s\n", - " 75550K .......... .......... .......... .......... .......... 58% 677K 1m42s\n", - " 75600K .......... .......... .......... .......... .......... 58% 577K 1m42s\n", - " 75650K .......... .......... .......... .......... .......... 58% 692K 1m42s\n", - " 75700K .......... .......... .......... .......... .......... 58% 581K 1m41s\n", - " 75750K .......... .......... .......... .......... .......... 58% 672K 1m41s\n", - " 75800K .......... .......... .......... .......... .......... 58% 576K 1m41s\n", - " 75850K .......... .......... .......... .......... .......... 58% 695K 1m41s\n", - " 75900K .......... .......... .......... .......... .......... 59% 574K 1m41s\n", - " 75950K .......... .......... .......... .......... .......... 59% 669K 1m41s\n", - " 76000K .......... .......... .......... .......... .......... 59% 601K 1m41s\n", - " 76050K .......... .......... .......... .......... .......... 59% 649K 1m41s\n", - " 76100K .......... .......... .......... .......... .......... 59% 607K 1m41s\n", - " 76150K .......... .......... .......... .......... .......... 59% 670K 1m40s\n", - " 76200K .......... .......... .......... .......... .......... 59% 572K 1m40s\n", - " 76250K .......... .......... .......... .......... .......... 59% 37.9K 1m41s\n", - " 76300K .......... .......... .......... .......... .......... 59% 155K 1m41s\n", - " 76350K .......... .......... .......... .......... .......... 59% 315K 1m41s\n", - " 76400K .......... .......... .......... .......... .......... 59% 328K 1m41s\n", - " 76450K .......... .......... .......... .......... .......... 59% 503K 1m41s\n", - " 76500K .......... .......... .......... .......... .......... 59% 747K 1m41s\n", - " 76550K .......... .......... .......... .......... .......... 59% 329K 1m41s\n", - " 76600K .......... .......... .......... .......... .......... 59% 518K 1m41s\n", - " 76650K .......... .......... .......... .......... .......... 59% 678K 1m41s\n", - " 76700K .......... .......... .......... .......... .......... 59% 347K 1m41s\n", - " 76750K .......... .......... .......... .......... .......... 59% 2.48M 1m40s\n", - " 76800K .......... .......... .......... .......... .......... 59% 336K 1m40s\n", - " 76850K .......... .......... .......... .......... .......... 59% 510K 1m40s\n", - " 76900K .......... .......... .......... .......... .......... 59% 678K 1m40s\n", - " 76950K .......... .......... .......... .......... .......... 59% 349K 1m40s\n", - " 77000K .......... .......... .......... .......... .......... 59% 2.39M 1m40s\n", - " 77050K .......... .......... .......... .......... .......... 59% 347K 1m40s\n", - " 77100K .......... .......... .......... .......... .......... 59% 494K 1m40s\n", - " 77150K .......... .......... .......... .......... .......... 60% 755K 1m40s\n", - " 77200K .......... .......... .......... .......... .......... 60% 353K 1m40s\n", - " 77250K .......... .......... .......... .......... .......... 60% 1.58M 99s\n", - " 77300K .......... .......... .......... .......... .......... 60% 365K 99s\n", - " 77350K .......... .......... .......... .......... .......... 60% 504K 99s\n", - " 77400K .......... .......... .......... .......... .......... 60% 707K 99s\n", - " 77450K .......... .......... .......... .......... .......... 60% 505K 99s\n", - " 77500K .......... .......... .......... .......... .......... 60% 686K 99s\n", - " 77550K .......... .......... .......... .......... .......... 60% 404K 99s\n", - " 77600K .......... .......... .......... .......... .......... 60% 1.17M 99s\n", - " 77650K .......... .......... .......... .......... .......... 60% 386K 99s\n", - " 77700K .......... .......... .......... .......... .......... 60% 968K 99s\n", - " 77750K .......... .......... .......... .......... .......... 60% 302K 98s\n", - " 77800K .......... .......... .......... .......... .......... 60% 950K 98s\n", - " 77850K .......... .......... .......... .......... .......... 60% 319K 98s\n", - " 77900K .......... .......... .......... .......... .......... 60% 2.62M 98s\n", - " 77950K .......... .......... .......... .......... .......... 60% 333K 98s\n", - " 78000K .......... .......... .......... .......... .......... 60% 2.78M 98s\n", - " 78050K .......... .......... .......... .......... .......... 60% 348K 98s\n", - " 78100K .......... .......... .......... .......... .......... 60% 534K 98s\n", - " 78150K .......... .......... .......... .......... .......... 60% 733K 98s\n", - " 78200K .......... .......... .......... .......... .......... 60% 537K 98s\n", - " 78250K .......... .......... .......... .......... .......... 60% 759K 97s\n", - " 78300K .......... .......... .......... .......... .......... 60% 537K 97s\n", - " 78350K .......... .......... .......... .......... .......... 60% 700K 97s\n", - " 78400K .......... .......... .......... .......... .......... 60% 570K 97s\n", - " 78450K .......... .......... .......... .......... .......... 61% 669K 97s\n", - " 78500K .......... .......... .......... .......... .......... 61% 560K 97s\n", - " 78550K .......... .......... .......... .......... .......... 61% 697K 97s\n", - " 78600K .......... .......... .......... .......... .......... 61% 595K 97s\n", - " 78650K .......... .......... .......... .......... .......... 61% 674K 97s\n", - " 78700K .......... .......... .......... .......... .......... 61% 597K 96s\n", - " 78750K .......... .......... .......... .......... .......... 61% 685K 96s\n", - " 78800K .......... .......... .......... .......... .......... 61% 2.87M 96s\n", - " 78850K .......... .......... .......... .......... .......... 61% 351K 96s\n", - " 78900K .......... .......... .......... .......... .......... 61% 2.81M 96s\n", - " 78950K .......... .......... .......... .......... .......... 61% 351K 96s\n", - " 79000K .......... .......... .......... .......... .......... 61% 2.02M 96s\n", - " 79050K .......... .......... .......... .......... .......... 61% 363K 96s\n", - " 79100K .......... .......... .......... .......... .......... 61% 1.92M 96s\n", - " 79150K .......... .......... .......... .......... .......... 61% 373K 95s\n", - " 79200K .......... .......... .......... .......... .......... 61% 2.31M 95s\n", - " 79250K .......... .......... .......... .......... .......... 61% 487K 95s\n", - " 79300K .......... .......... .......... .......... .......... 61% 904K 95s\n", - " 79350K .......... .......... .......... .......... .......... 61% 591K 95s\n", - " 79400K .......... .......... .......... .......... .......... 61% 623K 95s\n", - " 79450K .......... .......... .......... .......... .......... 61% 634K 95s\n", - " 79500K .......... .......... .......... .......... .......... 61% 594K 95s\n", - " 79550K .......... .......... .......... .......... .......... 61% 663K 95s\n", - " 79600K .......... .......... .......... .......... .......... 61% 663K 94s\n", - " 79650K .......... .......... .......... .......... .......... 61% 607K 94s\n", - " 79700K .......... .......... .......... .......... .......... 61% 668K 94s\n", - " 79750K .......... .......... .......... .......... .......... 62% 593K 94s\n", - " 79800K .......... .......... .......... .......... .......... 62% 656K 94s\n", - " 79850K .......... .......... .......... .......... .......... 62% 578K 94s\n", - " 79900K .......... .......... .......... .......... .......... 62% 699K 94s\n", - " 79950K .......... .......... .......... .......... .......... 62% 560K 94s\n", - " 80000K .......... .......... .......... .......... .......... 62% 686K 94s\n", - " 80050K .......... .......... .......... .......... .......... 62% 2.50M 93s\n", - " 80100K .......... .......... .......... .......... .......... 62% 359K 93s\n", - " 80150K .......... .......... .......... .......... .......... 62% 2.27M 93s\n", - " 80200K .......... .......... .......... .......... .......... 62% 362K 93s\n", - " 80250K .......... .......... .......... .......... .......... 62% 1.86M 93s\n", - " 80300K .......... .......... .......... .......... .......... 62% 368K 93s\n", - " 80350K .......... .......... .......... .......... .......... 62% 2.03M 93s\n", - " 80400K .......... .......... .......... .......... .......... 62% 375K 93s\n", - " 80450K .......... .......... .......... .......... .......... 62% 1.73M 93s\n", - " 80500K .......... .......... .......... .......... .......... 62% 369K 93s\n", - " 80550K .......... .......... .......... .......... .......... 62% 1.67M 92s\n", - " 80600K .......... .......... .......... .......... .......... 62% 680K 92s\n", - " 80650K .......... .......... .......... .......... .......... 62% 582K 92s\n", - " 80700K .......... .......... .......... .......... .......... 62% 701K 92s\n", - " 80750K .......... .......... .......... .......... .......... 62% 567K 92s\n", - " 80800K .......... .......... .......... .......... .......... 62% 636K 92s\n", - " 80850K .......... .......... .......... .......... .......... 62% 776K 92s\n", - " 80900K .......... .......... .......... .......... .......... 62% 538K 92s\n", - " 80950K .......... .......... .......... .......... .......... 62% 755K 92s\n", - " 81000K .......... .......... .......... .......... .......... 62% 524K 91s\n", - " 81050K .......... .......... .......... .......... .......... 63% 779K 91s\n", - " 81100K .......... .......... .......... .......... .......... 63% 535K 91s\n", - " 81150K .......... .......... .......... .......... .......... 63% 759K 91s\n", - " 81200K .......... .......... .......... .......... .......... 63% 536K 91s\n", - " 81250K .......... .......... .......... .......... .......... 63% 764K 91s\n", - " 81300K .......... .......... .......... .......... .......... 63% 536K 91s\n", - " 81350K .......... .......... .......... .......... .......... 63% 735K 91s\n", - " 81400K .......... .......... .......... .......... .......... 63% 538K 91s\n", - " 81450K .......... .......... .......... .......... .......... 63% 750K 91s\n", - " 81500K .......... .......... .......... .......... .......... 63% 537K 90s\n", - " 81550K .......... .......... .......... .......... .......... 63% 758K 90s\n", - " 81600K .......... .......... .......... .......... .......... 63% 532K 90s\n", - " 81650K .......... .......... .......... .......... .......... 63% 741K 90s\n", - " 81700K .......... .......... .......... .......... .......... 63% 536K 90s\n", - " 81750K .......... .......... .......... .......... .......... 63% 758K 90s\n", - " 81800K .......... .......... .......... .......... .......... 63% 871K 90s\n", - " 81850K .......... .......... .......... .......... .......... 63% 476K 90s\n", - " 81900K .......... .......... .......... .......... .......... 63% 850K 90s\n", - " 81950K .......... .......... .......... .......... .......... 63% 485K 89s\n", - " 82000K .......... .......... .......... .......... .......... 63% 798K 89s\n", - " 82050K .......... .......... .......... .......... .......... 63% 1.15M 89s\n", - " 82100K .......... .......... .......... .......... .......... 63% 435K 89s\n", - " 82150K .......... .......... .......... .......... .......... 63% 1.07M 89s\n", - " 82200K .......... .......... .......... .......... .......... 63% 429K 89s\n", - " 82250K .......... .......... .......... .......... .......... 63% 1.06M 89s\n", - " 82300K .......... .......... .......... .......... .......... 64% 439K 89s\n", - " 82350K .......... .......... .......... .......... .......... 64% 1.10M 89s\n", - " 82400K .......... .......... .......... .......... .......... 64% 439K 89s\n", - " 82450K .......... .......... .......... .......... .......... 64% 1010K 88s\n", - " 82500K .......... .......... .......... .......... .......... 64% 451K 88s\n", - " 82550K .......... .......... .......... .......... .......... 64% 935K 88s\n", - " 82600K .......... .......... .......... .......... .......... 64% 449K 88s\n", - " 82650K .......... .......... .......... .......... .......... 64% 979K 88s\n", - " 82700K .......... .......... .......... .......... .......... 64% 442K 88s\n", - " 82750K .......... .......... .......... .......... .......... 64% 1.08M 88s\n", - " 82800K .......... .......... .......... .......... .......... 64% 422K 88s\n", - " 82850K .......... .......... .......... .......... .......... 64% 1.18M 88s\n", - " 82900K .......... .......... .......... .......... .......... 64% 416K 87s\n", - " 82950K .......... .......... .......... .......... .......... 64% 1.21M 87s\n", - " 83000K .......... .......... .......... .......... .......... 64% 1.02M 87s\n", - " 83050K .......... .......... .......... .......... .......... 64% 455K 87s\n", - " 83100K .......... .......... .......... .......... .......... 64% 1.01M 87s\n", - " 83150K .......... .......... .......... .......... .......... 64% 441K 87s\n", - " 83200K .......... .......... .......... .......... .......... 64% 1.01M 87s\n", - " 83250K .......... .......... .......... .......... .......... 64% 595K 87s\n", - " 83300K .......... .......... .......... .......... .......... 64% 627K 87s\n", - " 83350K .......... .......... .......... .......... .......... 64% 606K 87s\n", - " 83400K .......... .......... .......... .......... .......... 64% 637K 86s\n", - " 83450K .......... .......... .......... .......... .......... 64% 626K 86s\n", - " 83500K .......... .......... .......... .......... .......... 64% 598K 86s\n", - " 83550K .......... .......... .......... .......... .......... 64% 610K 86s\n", - " 83600K .......... .......... .......... .......... .......... 65% 619K 86s\n", - " 83650K .......... .......... .......... .......... .......... 65% 620K 86s\n", - " 83700K .......... .......... .......... .......... .......... 65% 639K 86s\n", - " 83750K .......... .......... .......... .......... .......... 65% 634K 86s\n", - " 83800K .......... .......... .......... .......... .......... 65% 625K 86s\n", - " 83850K .......... .......... .......... .......... .......... 65% 642K 85s\n", - " 83900K .......... .......... .......... .......... .......... 65% 616K 85s\n", - " 83950K .......... .......... .......... .......... .......... 65% 636K 85s\n", - " 84000K .......... .......... .......... .......... .......... 65% 415K 85s\n", - " 84050K .......... .......... .......... .......... .......... 65% 1005K 85s\n", - " 84100K .......... .......... .......... .......... .......... 65% 404K 85s\n", - " 84150K .......... .......... .......... .......... .......... 65% 898K 85s\n", - " 84200K .......... .......... .......... .......... .......... 65% 357K 85s\n", - " 84250K .......... .......... .......... .......... .......... 65% 2.20M 85s\n", - " 84300K .......... .......... .......... .......... .......... 65% 1.11M 85s\n", - " 84350K .......... .......... .......... .......... .......... 65% 435K 84s\n", - " 84400K .......... .......... .......... .......... .......... 65% 1.03M 84s\n", - " 84450K .......... .......... .......... .......... .......... 65% 442K 84s\n", - " 84500K .......... .......... .......... .......... .......... 65% 1004K 84s\n", - " 84550K .......... .......... .......... .......... .......... 65% 452K 84s\n", - " 84600K .......... .......... .......... .......... .......... 65% 1.01M 84s\n", - " 84650K .......... .......... .......... .......... .......... 65% 447K 84s\n", - " 84700K .......... .......... .......... .......... .......... 65% 1.04M 84s\n", - " 84750K .......... .......... .......... .......... .......... 65% 441K 84s\n", - " 84800K .......... .......... .......... .......... .......... 65% 1.08M 84s\n", - " 84850K .......... .......... .......... .......... .......... 65% 482K 83s\n", - " 84900K .......... .......... .......... .......... .......... 66% 731K 83s\n", - " 84950K .......... .......... .......... .......... .......... 66% 496K 83s\n", - " 85000K .......... .......... .......... .......... .......... 66% 940K 83s\n", - " 85050K .......... .......... .......... .......... .......... 66% 487K 83s\n", - " 85100K .......... .......... .......... .......... .......... 66% 877K 83s\n", - " 85150K .......... .......... .......... .......... .......... 66% 485K 83s\n", - " 85200K .......... .......... .......... .......... .......... 66% 901K 83s\n", - " 85250K .......... .......... .......... .......... .......... 66% 481K 83s\n", - " 85300K .......... .......... .......... .......... .......... 66% 868K 82s\n", - " 85350K .......... .......... .......... .......... .......... 66% 490K 82s\n", - " 85400K .......... .......... .......... .......... .......... 66% 874K 82s\n", - " 85450K .......... .......... .......... .......... .......... 66% 480K 82s\n", - " 85500K .......... .......... .......... .......... .......... 66% 879K 82s\n", - " 85550K .......... .......... .......... .......... .......... 66% 459K 82s\n", - " 85600K .......... .......... .......... .......... .......... 66% 989K 82s\n", - " 85650K .......... .......... .......... .......... .......... 66% 444K 82s\n", - " 85700K .......... .......... .......... .......... .......... 66% 1.06M 82s\n", - " 85750K .......... .......... .......... .......... .......... 66% 446K 82s\n", - " 85800K .......... .......... .......... .......... .......... 66% 1.04M 81s\n", - " 85850K .......... .......... .......... .......... .......... 66% 436K 81s\n", - " 85900K .......... .......... .......... .......... .......... 66% 1.11M 81s\n", - " 85950K .......... .......... .......... .......... .......... 66% 428K 81s\n", - " 86000K .......... .......... .......... .......... .......... 66% 1024K 81s\n", - " 86050K .......... .......... .......... .......... .......... 66% 452K 81s\n", - " 86100K .......... .......... .......... .......... .......... 66% 1.05M 81s\n", - " 86150K .......... .......... .......... .......... .......... 67% 441K 81s\n", - " 86200K .......... .......... .......... .......... .......... 67% 1.03M 81s\n", - " 86250K .......... .......... .......... .......... .......... 67% 443K 81s\n", - " 86300K .......... .......... .......... .......... .......... 67% 4.32M 80s\n", - " 86350K .......... .......... .......... .......... .......... 67% 337K 80s\n", - " 86400K .......... .......... .......... .......... .......... 67% 3.72M 80s\n", - " 86450K .......... .......... .......... .......... .......... 67% 337K 80s\n", - " 86500K .......... .......... .......... .......... .......... 67% 4.59M 80s\n", - " 86550K .......... .......... .......... .......... .......... 67% 333K 80s\n", - " 86600K .......... .......... .......... .......... .......... 67% 6.11M 80s\n", - " 86650K .......... .......... .......... .......... .......... 67% 336K 80s\n", - " 86700K .......... .......... .......... .......... .......... 67% 3.45M 80s\n", - " 86750K .......... .......... .......... .......... .......... 67% 335K 80s\n", - " 86800K .......... .......... .......... .......... .......... 67% 4.66M 79s\n", - " 86850K .......... .......... .......... .......... .......... 67% 338K 79s\n", - " 86900K .......... .......... .......... .......... .......... 67% 3.85M 79s\n", - " 86950K .......... .......... .......... .......... .......... 67% 333K 79s\n", - " 87000K .......... .......... .......... .......... .......... 67% 3.85M 79s\n", - " 87050K .......... .......... .......... .......... .......... 67% 343K 79s\n", - " 87100K .......... .......... .......... .......... .......... 67% 3.49M 79s\n", - " 87150K .......... .......... .......... .......... .......... 67% 344K 79s\n", - " 87200K .......... .......... .......... .......... .......... 67% 3.46M 79s\n", - " 87250K .......... .......... .......... .......... .......... 67% 342K 79s\n", - " 87300K .......... .......... .......... .......... .......... 67% 3.45M 78s\n", - " 87350K .......... .......... .......... .......... .......... 67% 852K 78s\n", - " 87400K .......... .......... .......... .......... .......... 67% 505K 78s\n", - " 87450K .......... .......... .......... .......... .......... 68% 857K 78s\n", - " 87500K .......... .......... .......... .......... .......... 68% 486K 78s\n", - " 87550K .......... .......... .......... .......... .......... 68% 798K 78s\n", - " 87600K .......... .......... .......... .......... .......... 68% 505K 78s\n", - " 87650K .......... .......... .......... .......... .......... 68% 793K 78s\n", - " 87700K .......... .......... .......... .......... .......... 68% 506K 78s\n", - " 87750K .......... .......... .......... .......... .......... 68% 771K 77s\n", - " 87800K .......... .......... .......... .......... .......... 68% 532K 77s\n", - " 87850K .......... .......... .......... .......... .......... 68% 743K 77s\n", - " 87900K .......... .......... .......... .......... .......... 68% 544K 77s\n", - " 87950K .......... .......... .......... .......... .......... 68% 719K 77s\n", - " 88000K .......... .......... .......... .......... .......... 68% 560K 77s\n", - " 88050K .......... .......... .......... .......... .......... 68% 714K 77s\n", - " 88100K .......... .......... .......... .......... .......... 68% 563K 77s\n", - " 88150K .......... .......... .......... .......... .......... 68% 716K 77s\n", - " 88200K .......... .......... .......... .......... .......... 68% 563K 77s\n", - " 88250K .......... .......... .......... .......... .......... 68% 683K 76s\n", - " 88300K .......... .......... .......... .......... .......... 68% 584K 76s\n", - " 88350K .......... .......... .......... .......... .......... 68% 705K 76s\n", - " 88400K .......... .......... .......... .......... .......... 68% 559K 76s\n", - " 88450K .......... .......... .......... .......... .......... 68% 708K 76s\n", - " 88500K .......... .......... .......... .......... .......... 68% 571K 76s\n", - " 88550K .......... .......... .......... .......... .......... 68% 699K 76s\n", - " 88600K .......... .......... .......... .......... .......... 68% 553K 76s\n", - " 88650K .......... .......... .......... .......... .......... 68% 724K 76s\n", - " 88700K .......... .......... .......... .......... .......... 68% 567K 76s\n", - " 88750K .......... .......... .......... .......... .......... 69% 700K 75s\n", - " 88800K .......... .......... .......... .......... .......... 69% 559K 75s\n", - " 88850K .......... .......... .......... .......... .......... 69% 710K 75s\n", - " 88900K .......... .......... .......... .......... .......... 69% 575K 75s\n", - " 88950K .......... .......... .......... .......... .......... 69% 700K 75s\n", - " 89000K .......... .......... .......... .......... .......... 69% 571K 75s\n", - " 89050K .......... .......... .......... .......... .......... 69% 684K 75s\n", - " 89100K .......... .......... .......... .......... .......... 69% 589K 75s\n", - " 89150K .......... .......... .......... .......... .......... 69% 689K 75s\n", - " 89200K .......... .......... .......... .......... .......... 69% 571K 75s\n", - " 89250K .......... .......... .......... .......... .......... 69% 654K 74s\n", - " 89300K .......... .......... .......... .......... .......... 69% 612K 74s\n", - " 89350K .......... .......... .......... .......... .......... 69% 654K 74s\n", - " 89400K .......... .......... .......... .......... .......... 69% 521K 74s\n", - " 89450K .......... .......... .......... .......... .......... 69% 774K 74s\n", - " 89500K .......... .......... .......... .......... .......... 69% 587K 74s\n", - " 89550K .......... .......... .......... .......... .......... 69% 657K 74s\n", - " 89600K .......... .......... .......... .......... .......... 69% 623K 74s\n", - " 89650K .......... .......... .......... .......... .......... 69% 641K 74s\n", - " 89700K .......... .......... .......... .......... .......... 69% 606K 74s\n", - " 89750K .......... .......... .......... .......... .......... 69% 647K 73s\n", - " 89800K .......... .......... .......... .......... .......... 69% 603K 73s\n", - " 89850K .......... .......... .......... .......... .......... 69% 644K 73s\n", - " 89900K .......... .......... .......... .......... .......... 69% 618K 73s\n", - " 89950K .......... .......... .......... .......... .......... 69% 657K 73s\n", - " 90000K .......... .......... .......... .......... .......... 69% 608K 73s\n", - " 90050K .......... .......... .......... .......... .......... 70% 654K 73s\n", - " 90100K .......... .......... .......... .......... .......... 70% 612K 73s\n", - " 90150K .......... .......... .......... .......... .......... 70% 655K 73s\n", - " 90200K .......... .......... .......... .......... .......... 70% 605K 72s\n", - " 90250K .......... .......... .......... .......... .......... 70% 463K 72s\n", - " 90300K .......... .......... .......... .......... .......... 70% 539K 72s\n", - " 90350K .......... .......... .......... .......... .......... 70% 579K 72s\n", - " 90400K .......... .......... .......... .......... .......... 70% 475K 72s\n", - " 90450K .......... .......... .......... .......... .......... 70% 8.47M 72s\n", - " 90500K .......... .......... .......... .......... .......... 70% 255K 72s\n", - " 90550K .......... .......... .......... .......... .......... 70% 8.85M 72s\n", - " 90600K .......... .......... .......... .......... .......... 70% 324K 72s\n", - " 90650K .......... .......... .......... .......... .......... 70% 2.28M 72s\n", - " 90700K .......... .......... .......... .......... .......... 70% 353K 72s\n", - " 90750K .......... .......... .......... .......... .......... 70% 2.69M 71s\n", - " 90800K .......... .......... .......... .......... .......... 70% 358K 71s\n", - " 90850K .......... .......... .......... .......... .......... 70% 2.58M 71s\n", - " 90900K .......... .......... .......... .......... .......... 70% 357K 71s\n", - " 90950K .......... .......... .......... .......... .......... 70% 2.73M 71s\n", - " 91000K .......... .......... .......... .......... .......... 70% 357K 71s\n", - " 91050K .......... .......... .......... .......... .......... 70% 3.71M 71s\n", - " 91100K .......... .......... .......... .......... .......... 70% 337K 71s\n", - " 91150K .......... .......... .......... .......... .......... 70% 3.99M 71s\n", - " 91200K .......... .......... .......... .......... .......... 70% 342K 71s\n", - " 91250K .......... .......... .......... .......... .......... 70% 3.97M 70s\n", - " 91300K .......... .......... .......... .......... .......... 71% 335K 70s\n", - " 91350K .......... .......... .......... .......... .......... 71% 2.86M 70s\n", - " 91400K .......... .......... .......... .......... .......... 71% 351K 70s\n", - " 91450K .......... .......... .......... .......... .......... 71% 3.86M 70s\n", - " 91500K .......... .......... .......... .......... .......... 71% 4.81M 70s\n", - " 91550K .......... .......... .......... .......... .......... 71% 338K 70s\n", - " 91600K .......... .......... .......... .......... .......... 71% 5.84M 70s\n", - " 91650K .......... .......... .......... .......... .......... 71% 324K 70s\n", - " 91700K .......... .......... .......... .......... .......... 71% 7.14M 69s\n", - " 91750K .......... .......... .......... .......... .......... 71% 327K 69s\n", - " 91800K .......... .......... .......... .......... .......... 71% 4.85M 69s\n", - " 91850K .......... .......... .......... .......... .......... 71% 325K 69s\n", - " 91900K .......... .......... .......... .......... .......... 71% 6.83M 69s\n", - " 91950K .......... .......... .......... .......... .......... 71% 329K 69s\n", - " 92000K .......... .......... .......... .......... .......... 71% 3.70M 69s\n", - " 92050K .......... .......... .......... .......... .......... 71% 348K 69s\n", - " 92100K .......... .......... .......... .......... .......... 71% 3.56M 69s\n", - " 92150K .......... .......... .......... .......... .......... 71% 343K 69s\n", - " 92200K .......... .......... .......... .......... .......... 71% 3.41M 68s\n", - " 92250K .......... .......... .......... .......... .......... 71% 345K 68s\n", - " 92300K .......... .......... .......... .......... .......... 71% 3.20M 68s\n", - " 92350K .......... .......... .......... .......... .......... 71% 341K 68s\n", - " 92400K .......... .......... .......... .......... .......... 71% 4.42M 68s\n", - " 92450K .......... .......... .......... .......... .......... 71% 345K 68s\n", - " 92500K .......... .......... .......... .......... .......... 71% 3.42M 68s\n", - " 92550K .......... .......... .......... .......... .......... 71% 348K 68s\n", - " 92600K .......... .......... .......... .......... .......... 72% 3.10M 68s\n", - " 92650K .......... .......... .......... .......... .......... 72% 351K 68s\n", - " 92700K .......... .......... .......... .......... .......... 72% 3.05M 67s\n", - " 92750K .......... .......... .......... .......... .......... 72% 345K 67s\n", - " 92800K .......... .......... .......... .......... .......... 72% 3.13M 67s\n", - " 92850K .......... .......... .......... .......... .......... 72% 355K 67s\n", - " 92900K .......... .......... .......... .......... .......... 72% 2.75M 67s\n", - " 92950K .......... .......... .......... .......... .......... 72% 342K 67s\n", - " 93000K .......... .......... .......... .......... .......... 72% 3.80M 67s\n", - " 93050K .......... .......... .......... .......... .......... 72% 329K 67s\n", - " 93100K .......... .......... .......... .......... .......... 72% 6.56M 67s\n", - " 93150K .......... .......... .......... .......... .......... 72% 336K 67s\n", - " 93200K .......... .......... .......... .......... .......... 72% 3.29M 66s\n", - " 93250K .......... .......... .......... .......... .......... 72% 347K 66s\n", - " 93300K .......... .......... .......... .......... .......... 72% 3.92M 66s\n", - " 93350K .......... .......... .......... .......... .......... 72% 330K 66s\n", - " 93400K .......... .......... .......... .......... .......... 72% 3.97M 66s\n", - " 93450K .......... .......... .......... .......... .......... 72% 340K 66s\n", - " 93500K .......... .......... .......... .......... .......... 72% 4.96M 66s\n", - " 93550K .......... .......... .......... .......... .......... 72% 335K 66s\n", - " 93600K .......... .......... .......... .......... .......... 72% 4.64M 66s\n", - " 93650K .......... .......... .......... .......... .......... 72% 339K 66s\n", - " 93700K .......... .......... .......... .......... .......... 72% 3.78M 66s\n", - " 93750K .......... .......... .......... .......... .......... 72% 343K 65s\n", - " 93800K .......... .......... .......... .......... .......... 72% 3.27M 65s\n", - " 93850K .......... .......... .......... .......... .......... 72% 384K 65s\n", - " 93900K .......... .......... .......... .......... .......... 73% 1.69M 65s\n", - " 93950K .......... .......... .......... .......... .......... 73% 370K 65s\n", - " 94000K .......... .......... .......... .......... .......... 73% 2.10M 65s\n", - " 94050K .......... .......... .......... .......... .......... 73% 351K 65s\n", - " 94100K .......... .......... .......... .......... .......... 73% 2.95M 65s\n", - " 94150K .......... .......... .......... .......... .......... 73% 350K 65s\n", - " 94200K .......... .......... .......... .......... .......... 73% 3.07M 65s\n", - " 94250K .......... .......... .......... .......... .......... 73% 352K 64s\n", - " 94300K .......... .......... .......... .......... .......... 73% 2.78M 64s\n", - " 94350K .......... .......... .......... .......... .......... 73% 350K 64s\n", - " 94400K .......... .......... .......... .......... .......... 73% 3.29M 64s\n", - " 94450K .......... .......... .......... .......... .......... 73% 351K 64s\n", - " 94500K .......... .......... .......... .......... .......... 73% 2.71M 64s\n", - " 94550K .......... .......... .......... .......... .......... 73% 352K 64s\n", - " 94600K .......... .......... .......... .......... .......... 73% 2.89M 64s\n", - " 94650K .......... .......... .......... .......... .......... 73% 353K 64s\n", - " 94700K .......... .......... .......... .......... .......... 73% 2.66M 64s\n", - " 94750K .......... .......... .......... .......... .......... 73% 356K 63s\n", - " 94800K .......... .......... .......... .......... .......... 73% 2.41M 63s\n", - " 94850K .......... .......... .......... .......... .......... 73% 374K 63s\n", - " 94900K .......... .......... .......... .......... .......... 73% 1.69M 63s\n", - " 94950K .......... .......... .......... .......... .......... 73% 369K 63s\n", - " 95000K .......... .......... .......... .......... .......... 73% 1.99M 63s\n", - " 95050K .......... .......... .......... .......... .......... 73% 370K 63s\n", - " 95100K .......... .......... .......... .......... .......... 73% 1.63M 63s\n", - " 95150K .......... .......... .......... .......... .......... 73% 388K 63s\n", - " 95200K .......... .......... .......... .......... .......... 74% 1.57M 63s\n", - " 95250K .......... .......... .......... .......... .......... 74% 408K 62s\n", - " 95300K .......... .......... .......... .......... .......... 74% 1.33M 62s\n", - " 95350K .......... .......... .......... .......... .......... 74% 404K 62s\n", - " 95400K .......... .......... .......... .......... .......... 74% 1.28M 62s\n", - " 95450K .......... .......... .......... .......... .......... 74% 412K 62s\n", - " 95500K .......... .......... .......... .......... .......... 74% 1.35M 62s\n", - " 95550K .......... .......... .......... .......... .......... 74% 400K 62s\n", - " 95600K .......... .......... .......... .......... .......... 74% 1.41M 62s\n", - " 95650K .......... .......... .......... .......... .......... 74% 401K 62s\n", - " 95700K .......... .......... .......... .......... .......... 74% 1.45M 62s\n", - " 95750K .......... .......... .......... .......... .......... 74% 399K 61s\n", - " 95800K .......... .......... .......... .......... .......... 74% 1.40M 61s\n", - " 95850K .......... .......... .......... .......... .......... 74% 386K 61s\n", - " 95900K .......... .......... .......... .......... .......... 74% 1.42M 61s\n", - " 95950K .......... .......... .......... .......... .......... 74% 405K 61s\n", - " 96000K .......... .......... .......... .......... .......... 74% 1.31M 61s\n", - " 96050K .......... .......... .......... .......... .......... 74% 412K 61s\n", - " 96100K .......... .......... .......... .......... .......... 74% 1.27M 61s\n", - " 96150K .......... .......... .......... .......... .......... 74% 422K 61s\n", - " 96200K .......... .......... .......... .......... .......... 74% 1.24M 61s\n", - " 96250K .......... .......... .......... .......... .......... 74% 403K 60s\n", - " 96300K .......... .......... .......... .......... .......... 74% 1.23M 60s\n", - " 96350K .......... .......... .......... .......... .......... 74% 425K 60s\n", - " 96400K .......... .......... .......... .......... .......... 74% 1.22M 60s\n", - " 96450K .......... .......... .......... .......... .......... 75% 409K 60s\n", - " 96500K .......... .......... .......... .......... .......... 75% 1.31M 60s\n", - " 96550K .......... .......... .......... .......... .......... 75% 386K 60s\n", - " 96600K .......... .......... .......... .......... .......... 75% 1.47M 60s\n", - " 96650K .......... .......... .......... .......... .......... 75% 319K 60s\n", - " 96700K .......... .......... .......... .......... .......... 75% 1.42M 60s\n", - " 96750K .......... .......... .......... .......... .......... 75% 368K 60s\n", - " 96800K .......... .......... .......... .......... .......... 75% 1.46M 59s\n", - " 96850K .......... .......... .......... .......... .......... 75% 318K 59s\n", - " 96900K .......... .......... .......... .......... .......... 75% 2.81M 59s\n", - " 96950K .......... .......... .......... .......... .......... 75% 344K 59s\n", - " 97000K .......... .......... .......... .......... .......... 75% 3.94M 59s\n", - " 97050K .......... .......... .......... .......... .......... 75% 352K 59s\n", - " 97100K .......... .......... .......... .......... .......... 75% 2.90M 59s\n", - " 97150K .......... .......... .......... .......... .......... 75% 349K 59s\n", - " 97200K .......... .......... .......... .......... .......... 75% 3.00M 59s\n", - " 97250K .......... .......... .......... .......... .......... 75% 351K 59s\n", - " 97300K .......... .......... .......... .......... .......... 75% 2.96M 58s\n", - " 97350K .......... .......... .......... .......... .......... 75% 350K 58s\n", - " 97400K .......... .......... .......... .......... .......... 75% 2.80M 58s\n", - " 97450K .......... .......... .......... .......... .......... 75% 352K 58s\n", - " 97500K .......... .......... .......... .......... .......... 75% 2.87M 58s\n", - " 97550K .......... .......... .......... .......... .......... 75% 341K 58s\n", - " 97600K .......... .......... .......... .......... .......... 75% 2.73M 58s\n", - " 97650K .......... .......... .......... .......... .......... 75% 351K 58s\n", - " 97700K .......... .......... .......... .......... .......... 75% 2.19M 58s\n", - " 97750K .......... .......... .......... .......... .......... 76% 375K 58s\n", - " 97800K .......... .......... .......... .......... .......... 76% 2.14M 57s\n", - " 97850K .......... .......... .......... .......... .......... 76% 367K 57s\n", - " 97900K .......... .......... .......... .......... .......... 76% 2.16M 57s\n", - " 97950K .......... .......... .......... .......... .......... 76% 368K 57s\n", - " 98000K .......... .......... .......... .......... .......... 76% 1.59M 57s\n", - " 98050K .......... .......... .......... .......... .......... 76% 372K 57s\n", - " 98100K .......... .......... .......... .......... .......... 76% 1.91M 57s\n", - " 98150K .......... .......... .......... .......... .......... 76% 368K 57s\n", - " 98200K .......... .......... .......... .......... .......... 76% 3.07M 57s\n", - " 98250K .......... .......... .......... .......... .......... 76% 344K 57s\n", - " 98300K .......... .......... .......... .......... .......... 76% 3.31M 56s\n", - " 98350K .......... .......... .......... .......... .......... 76% 329K 56s\n", - " 98400K .......... .......... .......... .......... .......... 76% 4.97M 56s\n", - " 98450K .......... .......... .......... .......... .......... 76% 345K 56s\n", - " 98500K .......... .......... .......... .......... .......... 76% 4.27M 56s\n", - " 98550K .......... .......... .......... .......... .......... 76% 335K 56s\n", - " 98600K .......... .......... .......... .......... .......... 76% 2.83M 56s\n", - " 98650K .......... .......... .......... .......... .......... 76% 347K 56s\n", - " 98700K .......... .......... .......... .......... .......... 76% 4.09M 56s\n", - " 98750K .......... .......... .......... .......... .......... 76% 337K 56s\n", - " 98800K .......... .......... .......... .......... .......... 76% 5.27M 56s\n", - " 98850K .......... .......... .......... .......... .......... 76% 328K 55s\n", - " 98900K .......... .......... .......... .......... .......... 76% 2.17M 55s\n", - " 98950K .......... .......... .......... .......... .......... 76% 364K 55s\n", - " 99000K .......... .......... .......... .......... .......... 76% 2.62M 55s\n", - " 99050K .......... .......... .......... .......... .......... 77% 352K 55s\n", - " 99100K .......... .......... .......... .......... .......... 77% 3.39M 55s\n", - " 99150K .......... .......... .......... .......... .......... 77% 339K 55s\n", - " 99200K .......... .......... .......... .......... .......... 77% 2.82M 55s\n", - " 99250K .......... .......... .......... .......... .......... 77% 2.53M 55s\n", - " 99300K .......... .......... .......... .......... .......... 77% 352K 55s\n", - " 99350K .......... .......... .......... .......... .......... 77% 354K 54s\n", - " 99400K .......... .......... .......... .......... .......... 77% 2.95M 54s\n", - " 99450K .......... .......... .......... .......... .......... 77% 340K 54s\n", - " 99500K .......... .......... .......... .......... .......... 77% 3.93M 54s\n", - " 99550K .......... .......... .......... .......... .......... 77% 352K 54s\n", - " 99600K .......... .......... .......... .......... .......... 77% 3.29M 54s\n", - " 99650K .......... .......... .......... .......... .......... 77% 2.29M 54s\n", - " 99700K .......... .......... .......... .......... .......... 77% 359K 54s\n", - " 99750K .......... .......... .......... .......... .......... 77% 1.88M 54s\n", - " 99800K .......... .......... .......... .......... .......... 77% 374K 54s\n", - " 99850K .......... .......... .......... .......... .......... 77% 350K 54s\n", - " 99900K .......... .......... .......... .......... .......... 77% 2.51M 53s\n", - " 99950K .......... .......... .......... .......... .......... 77% 362K 53s\n", - "100000K .......... .......... .......... .......... .......... 77% 2.56M 53s\n", - "100050K .......... .......... .......... .......... .......... 77% 340K 53s\n", - "100100K .......... .......... .......... .......... .......... 77% 3.67M 53s\n", - "100150K .......... .......... .......... .......... .......... 77% 360K 53s\n", - "100200K .......... .......... .......... .......... .......... 77% 3.03M 53s\n", - "100250K .......... .......... .......... .......... .......... 77% 350K 53s\n", - "100300K .......... .......... .......... .......... .......... 78% 3.27M 53s\n", - "100350K .......... .......... .......... .......... .......... 78% 347K 53s\n", - "100400K .......... .......... .......... .......... .......... 78% 2.80M 52s\n", - "100450K .......... .......... .......... .......... .......... 78% 355K 52s\n", - "100500K .......... .......... .......... .......... .......... 78% 2.21M 52s\n", - "100550K .......... .......... .......... .......... .......... 78% 365K 52s\n", - "100600K .......... .......... .......... .......... .......... 78% 2.38M 52s\n", - "100650K .......... .......... .......... .......... .......... 78% 361K 52s\n", - "100700K .......... .......... .......... .......... .......... 78% 1.60M 52s\n", - "100750K .......... .......... .......... .......... .......... 78% 371K 52s\n", - "100800K .......... .......... .......... .......... .......... 78% 1.56M 52s\n", - "100850K .......... .......... .......... .......... .......... 78% 789K 52s\n", - "100900K .......... .......... .......... .......... .......... 78% 521K 51s\n", - "100950K .......... .......... .......... .......... .......... 78% 764K 51s\n", - "101000K .......... .......... .......... .......... .......... 78% 532K 51s\n", - "101050K .......... .......... .......... .......... .......... 78% 727K 51s\n", - "101100K .......... .......... .......... .......... .......... 78% 552K 51s\n", - "101150K .......... .......... .......... .......... .......... 78% 730K 51s\n", - "101200K .......... .......... .......... .......... .......... 78% 552K 51s\n", - "101250K .......... .......... .......... .......... .......... 78% 680K 51s\n", - "101300K .......... .......... .......... .......... .......... 78% 579K 51s\n", - "101350K .......... .......... .......... .......... .......... 78% 685K 51s\n", - "101400K .......... .......... .......... .......... .......... 78% 584K 50s\n", - "101450K .......... .......... .......... .......... .......... 78% 683K 50s\n", - "101500K .......... .......... .......... .......... .......... 78% 564K 50s\n", - "101550K .......... .......... .......... .......... .......... 78% 648K 50s\n", - "101600K .......... .......... .......... .......... .......... 79% 602K 50s\n", - "101650K .......... .......... .......... .......... .......... 79% 664K 50s\n", - "101700K .......... .......... .......... .......... .......... 79% 608K 50s\n", - "101750K .......... .......... .......... .......... .......... 79% 642K 50s\n", - "101800K .......... .......... .......... .......... .......... 79% 614K 50s\n", - "101850K .......... .......... .......... .......... .......... 79% 636K 50s\n", - "101900K .......... .......... .......... .......... .......... 79% 626K 50s\n", - "101950K .......... .......... .......... .......... .......... 79% 646K 49s\n", - "102000K .......... .......... .......... .......... .......... 79% 611K 49s\n", - "102050K .......... .......... .......... .......... .......... 79% 629K 49s\n", - "102100K .......... .......... .......... .......... .......... 79% 635K 49s\n", - "102150K .......... .......... .......... .......... .......... 79% 636K 49s\n", - "102200K .......... .......... .......... .......... .......... 79% 625K 49s\n", - "102250K .......... .......... .......... .......... .......... 79% 610K 49s\n", - "102300K .......... .......... .......... .......... .......... 79% 652K 49s\n", - "102350K .......... .......... .......... .......... .......... 79% 549K 49s\n", - "102400K .......... .......... .......... .......... .......... 79% 695K 49s\n", - "102450K .......... .......... .......... .......... .......... 79% 575K 48s\n", - "102500K .......... .......... .......... .......... .......... 79% 711K 48s\n", - "102550K .......... .......... .......... .......... .......... 79% 551K 48s\n", - "102600K .......... .......... .......... .......... .......... 79% 737K 48s\n", - "102650K .......... .......... .......... .......... .......... 79% 546K 48s\n", - "102700K .......... .......... .......... .......... .......... 79% 746K 48s\n", - "102750K .......... .......... .......... .......... .......... 79% 443K 48s\n", - "102800K .......... .......... .......... .......... .......... 79% 877K 48s\n", - "102850K .......... .......... .......... .......... .......... 79% 169K 48s\n", - "102900K .......... .......... .......... .......... .......... 80% 125M 48s\n", - "102950K .......... .......... .......... .......... .......... 80% 43.0K 48s\n", - "103000K .......... .......... .......... .......... .......... 80% 232K 48s\n", - "103050K .......... .......... .......... .......... .......... 80% 487K 48s\n", - "103100K .......... .......... .......... .......... .......... 80% 817K 48s\n", - "103150K .......... .......... .......... .......... .......... 80% 512K 47s\n", - "103200K .......... .......... .......... .......... .......... 80% 813K 47s\n", - "103250K .......... .......... .......... .......... .......... 80% 501K 47s\n", - "103300K .......... .......... .......... .......... .......... 80% 836K 47s\n", - "103350K .......... .......... .......... .......... .......... 80% 6.84M 47s\n", - "103400K .......... .......... .......... .......... .......... 80% 327K 47s\n", - "103450K .......... .......... .......... .......... .......... 80% 4.79M 47s\n", - "103500K .......... .......... .......... .......... .......... 80% 338K 47s\n", - "103550K .......... .......... .......... .......... .......... 80% 3.60M 47s\n", - "103600K .......... .......... .......... .......... .......... 80% 343K 47s\n", - "103650K .......... .......... .......... .......... .......... 80% 3.41M 46s\n", - "103700K .......... .......... .......... .......... .......... 80% 344K 46s\n", - "103750K .......... .......... .......... .......... .......... 80% 3.44M 46s\n", - "103800K .......... .......... .......... .......... .......... 80% 345K 46s\n", - "103850K .......... .......... .......... .......... .......... 80% 3.45M 46s\n", - "103900K .......... .......... .......... .......... .......... 80% 347K 46s\n", - "103950K .......... .......... .......... .......... .......... 80% 3.03M 46s\n", - "104000K .......... .......... .......... .......... .......... 80% 339K 46s\n", - "104050K .......... .......... .......... .......... .......... 80% 3.06M 46s\n", - "104100K .......... .......... .......... .......... .......... 80% 516K 46s\n", - "104150K .......... .......... .......... .......... .......... 80% 798K 46s\n", - "104200K .......... .......... .......... .......... .......... 81% 506K 45s\n", - "104250K .......... .......... .......... .......... .......... 81% 821K 45s\n", - "104300K .......... .......... .......... .......... .......... 81% 499K 45s\n", - "104350K .......... .......... .......... .......... .......... 81% 819K 45s\n", - "104400K .......... .......... .......... .......... .......... 81% 516K 45s\n", - "104450K .......... .......... .......... .......... .......... 81% 777K 45s\n", - "104500K .......... .......... .......... .......... .......... 81% 513K 45s\n", - "104550K .......... .......... .......... .......... .......... 81% 817K 45s\n", - "104600K .......... .......... .......... .......... .......... 81% 504K 45s\n", - "104650K .......... .......... .......... .......... .......... 81% 917K 45s\n", - "104700K .......... .......... .......... .......... .......... 81% 484K 44s\n", - "104750K .......... .......... .......... .......... .......... 81% 794K 44s\n", - "104800K .......... .......... .......... .......... .......... 81% 489K 44s\n", - "104850K .......... .......... .......... .......... .......... 81% 885K 44s\n", - "104900K .......... .......... .......... .......... .......... 81% 488K 44s\n", - "104950K .......... .......... .......... .......... .......... 81% 862K 44s\n", - "105000K .......... .......... .......... .......... .......... 81% 489K 44s\n", - "105050K .......... .......... .......... .......... .......... 81% 867K 44s\n", - "105100K .......... .......... .......... .......... .......... 81% 478K 44s\n", - "105150K .......... .......... .......... .......... .......... 81% 873K 44s\n", - "105200K .......... .......... .......... .......... .......... 81% 495K 44s\n", - "105250K .......... .......... .......... .......... .......... 81% 847K 43s\n", - "105300K .......... .......... .......... .......... .......... 81% 502K 43s\n", - "105350K .......... .......... .......... .......... .......... 81% 813K 43s\n", - "105400K .......... .......... .......... .......... .......... 81% 518K 43s\n", - "105450K .......... .......... .......... .......... .......... 82% 799K 43s\n", - "105500K .......... .......... .......... .......... .......... 82% 518K 43s\n", - "105550K .......... .......... .......... .......... .......... 82% 772K 43s\n", - "105600K .......... .......... .......... .......... .......... 82% 505K 43s\n", - "105650K .......... .......... .......... .......... .......... 82% 844K 43s\n", - "105700K .......... .......... .......... .......... .......... 82% 508K 43s\n", - "105750K .......... .......... .......... .......... .......... 82% 865K 42s\n", - "105800K .......... .......... .......... .......... .......... 82% 492K 42s\n", - "105850K .......... .......... .......... .......... .......... 82% 854K 42s\n", - "105900K .......... .......... .......... .......... .......... 82% 498K 42s\n", - "105950K .......... .......... .......... .......... .......... 82% 885K 42s\n", - "106000K .......... .......... .......... .......... .......... 82% 486K 42s\n", - "106050K .......... .......... .......... .......... .......... 82% 822K 42s\n", - "106100K .......... .......... .......... .......... .......... 82% 515K 42s\n", - "106150K .......... .......... .......... .......... .......... 82% 832K 42s\n", - "106200K .......... .......... .......... .......... .......... 82% 511K 42s\n", - "106250K .......... .......... .......... .......... .......... 82% 820K 42s\n", - "106300K .......... .......... .......... .......... .......... 82% 518K 41s\n", - "106350K .......... .......... .......... .......... .......... 82% 801K 41s\n", - "106400K .......... .......... .......... .......... .......... 82% 516K 41s\n", - "106450K .......... .......... .......... .......... .......... 82% 815K 41s\n", - "106500K .......... .......... .......... .......... .......... 82% 506K 41s\n", - "106550K .......... .......... .......... .......... .......... 82% 799K 41s\n", - "106600K .......... .......... .......... .......... .......... 82% 516K 41s\n", - "106650K .......... .......... .......... .......... .......... 82% 844K 41s\n", - "106700K .......... .......... .......... .......... .......... 82% 502K 41s\n", - "106750K .......... .......... .......... .......... .......... 83% 835K 41s\n", - "106800K .......... .......... .......... .......... .......... 83% 507K 40s\n", - "106850K .......... .......... .......... .......... .......... 83% 788K 40s\n", - "106900K .......... .......... .......... .......... .......... 83% 530K 40s\n", - "106950K .......... .......... .......... .......... .......... 83% 769K 40s\n", - "107000K .......... .......... .......... .......... .......... 83% 537K 40s\n", - "107050K .......... .......... .......... .......... .......... 83% 801K 40s\n", - "107100K .......... .......... .......... .......... .......... 83% 510K 40s\n", - "107150K .......... .......... .......... .......... .......... 83% 798K 40s\n", - "107200K .......... .......... .......... .......... .......... 83% 527K 40s\n", - "107250K .......... .......... .......... .......... .......... 83% 768K 40s\n", - "107300K .......... .......... .......... .......... .......... 83% 535K 39s\n", - "107350K .......... .......... .......... .......... .......... 83% 777K 39s\n", - "107400K .......... .......... .......... .......... .......... 83% 516K 39s\n", - "107450K .......... .......... .......... .......... .......... 83% 787K 39s\n", - "107500K .......... .......... .......... .......... .......... 83% 478K 39s\n", - "107550K .......... .......... .......... .......... .......... 83% 646K 39s\n", - "107600K .......... .......... .......... .......... .......... 83% 648K 39s\n", - "107650K .......... .......... .......... .......... .......... 83% 843K 39s\n", - "107700K .......... .......... .......... .......... .......... 83% 519K 39s\n", - "107750K .......... .......... .......... .......... .......... 83% 841K 39s\n", - "107800K .......... .......... .......... .......... .......... 83% 519K 39s\n", - "107850K .......... .......... .......... .......... .......... 83% 803K 38s\n", - "107900K .......... .......... .......... .......... .......... 83% 513K 38s\n", - "107950K .......... .......... .......... .......... .......... 83% 771K 38s\n", - "108000K .......... .......... .......... .......... .......... 83% 532K 38s\n", - "108050K .......... .......... .......... .......... .......... 84% 759K 38s\n", - "108100K .......... .......... .......... .......... .......... 84% 528K 38s\n", - "108150K .......... .......... .......... .......... .......... 84% 784K 38s\n", - "108200K .......... .......... .......... .......... .......... 84% 424K 38s\n", - "108250K .......... .......... .......... .......... .......... 84% 717K 38s\n", - "108300K .......... .......... .......... .......... .......... 84% 547K 38s\n", - "108350K .......... .......... .......... .......... .......... 84% 509K 38s\n", - "108400K .......... .......... .......... .......... .......... 84% 842K 37s\n", - "108450K .......... .......... .......... .......... .......... 84% 480K 37s\n", - "108500K .......... .......... .......... .......... .......... 84% 901K 37s\n", - "108550K .......... .......... .......... .......... .......... 84% 503K 37s\n", - "108600K .......... .......... .......... .......... .......... 84% 837K 37s\n", - "108650K .......... .......... .......... .......... .......... 84% 503K 37s\n", - "108700K .......... .......... .......... .......... .......... 84% 837K 37s\n", - "108750K .......... .......... .......... .......... .......... 84% 502K 37s\n", - "108800K .......... .......... .......... .......... .......... 84% 855K 37s\n", - "108850K .......... .......... .......... .......... .......... 84% 498K 37s\n", - "108900K .......... .......... .......... .......... .......... 84% 871K 36s\n", - "108950K .......... .......... .......... .......... .......... 84% 471K 36s\n", - "109000K .......... .......... .......... .......... .......... 84% 941K 36s\n", - "109050K .......... .......... .......... .......... .......... 84% 459K 36s\n", - "109100K .......... .......... .......... .......... .......... 84% 982K 36s\n", - "109150K .......... .......... .......... .......... .......... 84% 475K 36s\n", - "109200K .......... .......... .......... .......... .......... 84% 918K 36s\n", - "109250K .......... .......... .......... .......... .......... 84% 469K 36s\n", - "109300K .......... .......... .......... .......... .......... 84% 957K 36s\n", - "109350K .......... .......... .......... .......... .......... 85% 462K 36s\n", - "109400K .......... .......... .......... .......... .......... 85% 918K 36s\n", - "109450K .......... .......... .......... .......... .......... 85% 474K 35s\n", - "109500K .......... .......... .......... .......... .......... 85% 3.89M 35s\n", - "109550K .......... .......... .......... .......... .......... 85% 342K 35s\n", - "109600K .......... .......... .......... .......... .......... 85% 3.66M 35s\n", - "109650K .......... .......... .......... .......... .......... 85% 346K 35s\n", - "109700K .......... .......... .......... .......... .......... 85% 3.75M 35s\n", - "109750K .......... .......... .......... .......... .......... 85% 340K 35s\n", - "109800K .......... .......... .......... .......... .......... 85% 3.91M 35s\n", - "109850K .......... .......... .......... .......... .......... 85% 342K 35s\n", - "109900K .......... .......... .......... .......... .......... 85% 3.10M 35s\n", - "109950K .......... .......... .......... .......... .......... 85% 339K 34s\n", - "110000K .......... .......... .......... .......... .......... 85% 3.99M 34s\n", - "110050K .......... .......... .......... .......... .......... 85% 343K 34s\n", - "110100K .......... .......... .......... .......... .......... 85% 3.81M 34s\n", - "110150K .......... .......... .......... .......... .......... 85% 340K 34s\n", - "110200K .......... .......... .......... .......... .......... 85% 4.02M 34s\n", - "110250K .......... .......... .......... .......... .......... 85% 337K 34s\n", - "110300K .......... .......... .......... .......... .......... 85% 4.51M 34s\n", - "110350K .......... .......... .......... .......... .......... 85% 339K 34s\n", - "110400K .......... .......... .......... .......... .......... 85% 4.12M 34s\n", - "110450K .......... .......... .......... .......... .......... 85% 340K 34s\n", - "110500K .......... .......... .......... .......... .......... 85% 3.64M 33s\n", - "110550K .......... .......... .......... .......... .......... 85% 342K 33s\n", - "110600K .......... .......... .......... .......... .......... 86% 4.03M 33s\n", - "110650K .......... .......... .......... .......... .......... 86% 339K 33s\n", - "110700K .......... .......... .......... .......... .......... 86% 4.84M 33s\n", - "110750K .......... .......... .......... .......... .......... 86% 328K 33s\n", - "110800K .......... .......... .......... .......... .......... 86% 4.56M 33s\n", - "110850K .......... .......... .......... .......... .......... 86% 339K 33s\n", - "110900K .......... .......... .......... .......... .......... 86% 3.58M 33s\n", - "110950K .......... .......... .......... .......... .......... 86% 325K 33s\n", - "111000K .......... .......... .......... .......... .......... 86% 6.59M 32s\n", - "111050K .......... .......... .......... .......... .......... 86% 336K 32s\n", - "111100K .......... .......... .......... .......... .......... 86% 4.42M 32s\n", - "111150K .......... .......... .......... .......... .......... 86% 959K 32s\n", - "111200K .......... .......... .......... .......... .......... 86% 456K 32s\n", - "111250K .......... .......... .......... .......... .......... 86% 970K 32s\n", - "111300K .......... .......... .......... .......... .......... 86% 452K 32s\n", - "111350K .......... .......... .......... .......... .......... 86% 1.02M 32s\n", - "111400K .......... .......... .......... .......... .......... 86% 448K 32s\n", - "111450K .......... .......... .......... .......... .......... 86% 1018K 32s\n", - "111500K .......... .......... .......... .......... .......... 86% 456K 32s\n", - "111550K .......... .......... .......... .......... .......... 86% 1.02M 31s\n", - "111600K .......... .......... .......... .......... .......... 86% 440K 31s\n", - "111650K .......... .......... .......... .......... .......... 86% 1.06M 31s\n", - "111700K .......... .......... .......... .......... .......... 86% 440K 31s\n", - "111750K .......... .......... .......... .......... .......... 86% 1.09M 31s\n", - "111800K .......... .......... .......... .......... .......... 86% 429K 31s\n", - "111850K .......... .......... .......... .......... .......... 86% 1.16M 31s\n", - "111900K .......... .......... .......... .......... .......... 87% 431K 31s\n", - "111950K .......... .......... .......... .......... .......... 87% 1.10M 31s\n", - "112000K .......... .......... .......... .......... .......... 87% 436K 31s\n", - "112050K .......... .......... .......... .......... .......... 87% 1.11M 31s\n", - "112100K .......... .......... .......... .......... .......... 87% 429K 30s\n", - "112150K .......... .......... .......... .......... .......... 87% 1.13M 30s\n", - "112200K .......... .......... .......... .......... .......... 87% 433K 30s\n", - "112250K .......... .......... .......... .......... .......... 87% 1.13M 30s\n", - "112300K .......... .......... .......... .......... .......... 87% 434K 30s\n", - "112350K .......... .......... .......... .......... .......... 87% 1.14M 30s\n", - "112400K .......... .......... .......... .......... .......... 87% 435K 30s\n", - "112450K .......... .......... .......... .......... .......... 87% 1.15M 30s\n", - "112500K .......... .......... .......... .......... .......... 87% 414K 30s\n", - "112550K .......... .......... .......... .......... .......... 87% 1.26M 30s\n", - "112600K .......... .......... .......... .......... .......... 87% 422K 29s\n", - "112650K .......... .......... .......... .......... .......... 87% 1.11M 29s\n", - "112700K .......... .......... .......... .......... .......... 87% 413K 29s\n", - "112750K .......... .......... .......... .......... .......... 87% 1.28M 29s\n", - "112800K .......... .......... .......... .......... .......... 87% 421K 29s\n", - "112850K .......... .......... .......... .......... .......... 87% 1.11M 29s\n", - "112900K .......... .......... .......... .......... .......... 87% 437K 29s\n", - "112950K .......... .......... .......... .......... .......... 87% 1.21M 29s\n", - "113000K .......... .......... .......... .......... .......... 87% 420K 29s\n", - "113050K .......... .......... .......... .......... .......... 87% 1.25M 29s\n", - "113100K .......... .......... .......... .......... .......... 87% 424K 29s\n", - "113150K .......... .......... .......... .......... .......... 87% 1.16M 28s\n", - "113200K .......... .......... .......... .......... .......... 88% 408K 28s\n", - "113250K .......... .......... .......... .......... .......... 88% 1.32M 28s\n", - "113300K .......... .......... .......... .......... .......... 88% 421K 28s\n", - "113350K .......... .......... .......... .......... .......... 88% 1.22M 28s\n", - "113400K .......... .......... .......... .......... .......... 88% 412K 28s\n", - "113450K .......... .......... .......... .......... .......... 88% 1.31M 28s\n", - "113500K .......... .......... .......... .......... .......... 88% 414K 28s\n", - "113550K .......... .......... .......... .......... .......... 88% 1.27M 28s\n", - "113600K .......... .......... .......... .......... .......... 88% 417K 28s\n", - "113650K .......... .......... .......... .......... .......... 88% 1.13M 28s\n", - "113700K .......... .......... .......... .......... .......... 88% 434K 27s\n", - "113750K .......... .......... .......... .......... .......... 88% 1.13M 27s\n", - "113800K .......... .......... .......... .......... .......... 88% 434K 27s\n", - "113850K .......... .......... .......... .......... .......... 88% 1.12M 27s\n", - "113900K .......... .......... .......... .......... .......... 88% 427K 27s\n", - "113950K .......... .......... .......... .......... .......... 88% 547K 27s\n", - "114000K .......... .......... .......... .......... .......... 88% 173K 27s\n", - "114050K .......... .......... .......... .......... .......... 88% 175M 27s\n", - "114100K .......... .......... .......... .......... .......... 88% 52.0K 27s\n", - "114150K .......... .......... .......... .......... .......... 88% 159K 27s\n", - "114200K .......... .......... .......... .......... .......... 88% 3.50M 27s\n", - "114250K .......... .......... .......... .......... .......... 88% 329K 27s\n", - "114300K .......... .......... .......... .......... .......... 88% 5.29M 26s\n", - "114350K .......... .......... .......... .......... .......... 88% 326K 26s\n", - "114400K .......... .......... .......... .......... .......... 88% 5.27M 26s\n", - "114450K .......... .......... .......... .......... .......... 88% 328K 26s\n", - "114500K .......... .......... .......... .......... .......... 89% 4.96M 26s\n", - "114550K .......... .......... .......... .......... .......... 89% 337K 26s\n", - "114600K .......... .......... .......... .......... .......... 89% 3.98M 26s\n", - "114650K .......... .......... .......... .......... .......... 89% 338K 26s\n", - "114700K .......... .......... .......... .......... .......... 89% 3.34M 26s\n", - "114750K .......... .......... .......... .......... .......... 89% 342K 26s\n", - "114800K .......... .......... .......... .......... .......... 89% 3.99M 26s\n", - "114850K .......... .......... .......... .......... .......... 89% 344K 25s\n", - "114900K .......... .......... .......... .......... .......... 89% 3.55M 25s\n", - "114950K .......... .......... .......... .......... .......... 89% 337K 25s\n", - "115000K .......... .......... .......... .......... .......... 89% 4.68M 25s\n", - "115050K .......... .......... .......... .......... .......... 89% 352K 25s\n", - "115100K .......... .......... .......... .......... .......... 89% 2.74M 25s\n", - "115150K .......... .......... .......... .......... .......... 89% 370K 25s\n", - "115200K .......... .......... .......... .......... .......... 89% 1.86M 25s\n", - "115250K .......... .......... .......... .......... .......... 89% 379K 25s\n", - "115300K .......... .......... .......... .......... .......... 89% 1.77M 25s\n", - "115350K .......... .......... .......... .......... .......... 89% 378K 24s\n", - "115400K .......... .......... .......... .......... .......... 89% 1.74M 24s\n", - "115450K .......... .......... .......... .......... .......... 89% 373K 24s\n", - "115500K .......... .......... .......... .......... .......... 89% 1.82M 24s\n", - "115550K .......... .......... .......... .......... .......... 89% 374K 24s\n", - "115600K .......... .......... .......... .......... .......... 89% 1.73M 24s\n", - "115650K .......... .......... .......... .......... .......... 89% 385K 24s\n", - "115700K .......... .......... .......... .......... .......... 89% 1.74M 24s\n", - "115750K .......... .......... .......... .......... .......... 90% 378K 24s\n", - "115800K .......... .......... .......... .......... .......... 90% 1.69M 24s\n", - "115850K .......... .......... .......... .......... .......... 90% 389K 24s\n", - "115900K .......... .......... .......... .......... .......... 90% 1.88M 23s\n", - "115950K .......... .......... .......... .......... .......... 90% 372K 23s\n", - "116000K .......... .......... .......... .......... .......... 90% 1.77M 23s\n", - "116050K .......... .......... .......... .......... .......... 90% 370K 23s\n", - "116100K .......... .......... .......... .......... .......... 90% 1.86M 23s\n", - "116150K .......... .......... .......... .......... .......... 90% 387K 23s\n", - "116200K .......... .......... .......... .......... .......... 90% 1.54M 23s\n", - "116250K .......... .......... .......... .......... .......... 90% 385K 23s\n", - "116300K .......... .......... .......... .......... .......... 90% 1.72M 23s\n", - "116350K .......... .......... .......... .......... .......... 90% 379K 23s\n", - "116400K .......... .......... .......... .......... .......... 90% 1.75M 23s\n", - "116450K .......... .......... .......... .......... .......... 90% 379K 22s\n", - "116500K .......... .......... .......... .......... .......... 90% 1.63M 22s\n", - "116550K .......... .......... .......... .......... .......... 90% 384K 22s\n", - "116600K .......... .......... .......... .......... .......... 90% 1.66M 22s\n", - "116650K .......... .......... .......... .......... .......... 90% 381K 22s\n", - "116700K .......... .......... .......... .......... .......... 90% 1.33M 22s\n", - "116750K .......... .......... .......... .......... .......... 90% 403K 22s\n", - "116800K .......... .......... .......... .......... .......... 90% 647K 22s\n", - "116850K .......... .......... .......... .......... .......... 90% 170K 22s\n", - "116900K .......... .......... .......... .......... .......... 90% 170M 22s\n", - "116950K .......... .......... .......... .......... .......... 90% 464K 21s\n", - "117000K .......... .......... .......... .......... .......... 90% 40.5K 22s\n", - "117050K .......... .......... .......... .......... .......... 91% 313K 21s\n", - "117100K .......... .......... .......... .......... .......... 91% 319K 21s\n", - "117150K .......... .......... .......... .......... .......... 91% 327K 21s\n", - "117200K .......... .......... .......... .......... .......... 91% 3.37M 21s\n", - "117250K .......... .......... .......... .......... .......... 91% 311K 21s\n", - "117300K .......... .......... .......... .......... .......... 91% 319K 21s\n", - "117350K .......... .......... .......... .......... .......... 91% 330K 21s\n", - "117400K .......... .......... .......... .......... .......... 91% 2.61M 21s\n", - "117450K .......... .......... .......... .......... .......... 91% 313K 21s\n", - "117500K .......... .......... .......... .......... .......... 91% 344K 21s\n", - "117550K .......... .......... .......... .......... .......... 91% 321K 21s\n", - "117600K .......... .......... .......... .......... .......... 91% 2.08M 20s\n", - "117650K .......... .......... .......... .......... .......... 91% 349K 20s\n", - "117700K .......... .......... .......... .......... .......... 91% 323K 20s\n", - "117750K .......... .......... .......... .......... .......... 91% 572K 20s\n", - "117800K .......... .......... .......... .......... .......... 91% 618K 20s\n", - "117850K .......... .......... .......... .......... .......... 91% 337K 20s\n", - "117900K .......... .......... .......... .......... .......... 91% 565K 20s\n", - "117950K .......... .......... .......... .......... .......... 91% 609K 20s\n", - "118000K .......... .......... .......... .......... .......... 91% 336K 20s\n", - "118050K .......... .......... .......... .......... .......... 91% 566K 20s\n", - "118100K .......... .......... .......... .......... .......... 91% 636K 20s\n", - "118150K .......... .......... .......... .......... .......... 91% 338K 19s\n", - "118200K .......... .......... .......... .......... .......... 91% 1.96M 19s\n", - "118250K .......... .......... .......... .......... .......... 91% 354K 19s\n", - "118300K .......... .......... .......... .......... .......... 91% 340K 19s\n", - "118350K .......... .......... .......... .......... .......... 92% 2.70M 19s\n", - "118400K .......... .......... .......... .......... .......... 92% 327K 19s\n", - "118450K .......... .......... .......... .......... .......... 92% 556K 19s\n", - "118500K .......... .......... .......... .......... .......... 92% 658K 19s\n", - "118550K .......... .......... .......... .......... .......... 92% 279K 19s\n", - "118600K .......... .......... .......... .......... .......... 92% 7.59M 19s\n", - "118650K .......... .......... .......... .......... .......... 92% 141K 19s\n", - "118700K .......... .......... .......... .......... .......... 92% 9.55M 18s\n", - "118750K .......... .......... .......... .......... .......... 92% 156K 18s\n", - "118800K .......... .......... .......... .......... .......... 92% 308K 18s\n", - "118850K .......... .......... .......... .......... .......... 92% 310K 18s\n", - "118900K .......... .......... .......... .......... .......... 92% 299K 18s\n", - "118950K .......... .......... .......... .......... .......... 92% 305K 18s\n", - "119000K .......... .......... .......... .......... .......... 92% 310K 18s\n", - "119050K .......... .......... .......... .......... .......... 92% 316K 18s\n", - "119100K .......... .......... .......... .......... .......... 92% 315K 18s\n", - "119150K .......... .......... .......... .......... .......... 92% 316K 18s\n", - "119200K .......... .......... .......... .......... .......... 92% 318K 18s\n", - "119250K .......... .......... .......... .......... .......... 92% 310K 17s\n", - "119300K .......... .......... .......... .......... .......... 92% 320K 17s\n", - "119350K .......... .......... .......... .......... .......... 92% 318K 17s\n", - "119400K .......... .......... .......... .......... .......... 92% 325K 17s\n", - "119450K .......... .......... .......... .......... .......... 92% 335K 17s\n", - "119500K .......... .......... .......... .......... .......... 92% 315K 17s\n", - "119550K .......... .......... .......... .......... .......... 92% 324K 17s\n", - "119600K .......... .......... .......... .......... .......... 93% 1.66M 17s\n", - "119650K .......... .......... .......... .......... .......... 93% 325K 17s\n", - "119700K .......... .......... .......... .......... .......... 93% 339K 17s\n", - "119750K .......... .......... .......... .......... .......... 93% 315K 17s\n", - "119800K .......... .......... .......... .......... .......... 93% 345K 16s\n", - "119850K .......... .......... .......... .......... .......... 93% 1.56M 16s\n", - "119900K .......... .......... .......... .......... .......... 93% 335K 16s\n", - "119950K .......... .......... .......... .......... .......... 93% 324K 16s\n", - "120000K .......... .......... .......... .......... .......... 93% 348K 16s\n", - "120050K .......... .......... .......... .......... .......... 93% 1.73M 16s\n", - "120100K .......... .......... .......... .......... .......... 93% 324K 16s\n", - "120150K .......... .......... .......... .......... .......... 93% 356K 16s\n", - "120200K .......... .......... .......... .......... .......... 93% 1.21M 16s\n", - "120250K .......... .......... .......... .......... .......... 93% 355K 16s\n", - "120300K .......... .......... .......... .......... .......... 93% 334K 16s\n", - "120350K .......... .......... .......... .......... .......... 93% 379K 15s\n", - "120400K .......... .......... .......... .......... .......... 93% 1.19M 15s\n", - "120450K .......... .......... .......... .......... .......... 93% 335K 15s\n", - "120500K .......... .......... .......... .......... .......... 93% 221K 15s\n", - "120550K .......... .......... .......... .......... .......... 93% 8.57M 15s\n", - "120600K .......... .......... .......... .......... .......... 93% 97.8K 15s\n", - "120650K .......... .......... .......... .......... .......... 93% 314K 15s\n", - "120700K .......... .......... .......... .......... .......... 93% 283K 15s\n", - "120750K .......... .......... .......... .......... .......... 93% 145K 15s\n", - "120800K .......... .......... .......... .......... .......... 93% 279K 15s\n", - "120850K .......... .......... .......... .......... .......... 93% 162K 15s\n", - "120900K .......... .......... .......... .......... .......... 94% 288K 15s\n", - "120950K .......... .......... .......... .......... .......... 94% 281K 14s\n", - "121000K .......... .......... .......... .......... .......... 94% 289K 14s\n", - "121050K .......... .......... .......... .......... .......... 94% 283K 14s\n", - "121100K .......... .......... .......... .......... .......... 94% 163K 14s\n", - "121150K .......... .......... .......... .......... .......... 94% 292K 14s\n", - "121200K .......... .......... .......... .......... .......... 94% 283K 14s\n", - "121250K .......... .......... .......... .......... .......... 94% 289K 14s\n", - "121300K .......... .......... .......... .......... .......... 94% 283K 14s\n", - "121350K .......... .......... .......... .......... .......... 94% 161K 14s\n", - "121400K .......... .......... .......... .......... .......... 94% 317K 14s\n", - "121450K .......... .......... .......... .......... .......... 94% 314K 14s\n", - "121500K .......... .......... .......... .......... .......... 94% 321K 13s\n", - "121550K .......... .......... .......... .......... .......... 94% 325K 13s\n", - "121600K .......... .......... .......... .......... .......... 94% 940K 13s\n", - "121650K .......... .......... .......... .......... .......... 94% 305K 13s\n", - "121700K .......... .......... .......... .......... .......... 94% 306K 13s\n", - "121750K .......... .......... .......... .......... .......... 94% 306K 13s\n", - "121800K .......... .......... .......... .......... .......... 94% 318K 13s\n", - "121850K .......... .......... .......... .......... .......... 94% 377K 13s\n", - "121900K .......... .......... .......... .......... .......... 94% 1.28M 13s\n", - "121950K .......... .......... .......... .......... .......... 94% 321K 13s\n", - "122000K .......... .......... .......... .......... .......... 94% 318K 13s\n", - "122050K .......... .......... .......... .......... .......... 94% 401K 12s\n", - "122100K .......... .......... .......... .......... .......... 94% 765K 12s\n", - "122150K .......... .......... .......... .......... .......... 94% 372K 12s\n", - "122200K .......... .......... .......... .......... .......... 95% 333K 12s\n", - "122250K .......... .......... .......... .......... .......... 95% 399K 12s\n", - "122300K .......... .......... .......... .......... .......... 95% 1023K 12s\n", - "122350K .......... .......... .......... .......... .......... 95% 330K 12s\n", - "122400K .......... .......... .......... .......... .......... 95% 355K 12s\n", - "122450K .......... .......... .......... .......... .......... 95% 1.32M 12s\n", - "122500K .......... .......... .......... .......... .......... 95% 340K 12s\n", - "122550K .......... .......... .......... .......... .......... 95% 371K 11s\n", - "122600K .......... .......... .......... .......... .......... 95% 1.39M 11s\n", - "122650K .......... .......... .......... .......... .......... 95% 340K 11s\n", - "122700K .......... .......... .......... .......... .......... 95% 375K 11s\n", - "122750K .......... .......... .......... .......... .......... 95% 1.38M 11s\n", - "122800K .......... .......... .......... .......... .......... 95% 337K 11s\n", - "122850K .......... .......... .......... .......... .......... 95% 405K 11s\n", - "122900K .......... .......... .......... .......... .......... 95% 1.10M 11s\n", - "122950K .......... .......... .......... .......... .......... 95% 339K 11s\n", - "123000K .......... .......... .......... .......... .......... 95% 468K 11s\n", - "123050K .......... .......... .......... .......... .......... 95% 792K 11s\n", - "123100K .......... .......... .......... .......... .......... 95% 381K 10s\n", - "123150K .......... .......... .......... .......... .......... 95% 1.42M 10s\n", - "123200K .......... .......... .......... .......... .......... 95% 351K 10s\n", - "123250K .......... .......... .......... .......... .......... 95% 440K 10s\n", - "123300K .......... .......... .......... .......... .......... 95% 876K 10s\n", - "123350K .......... .......... .......... .......... .......... 95% 369K 10s\n", - "123400K .......... .......... .......... .......... .......... 95% 1007K 10s\n", - "123450K .......... .......... .......... .......... .......... 95% 161K 10s\n", - "123500K .......... .......... .......... .......... .......... 96% 218M 10s\n", - "123550K .......... .......... .......... .......... .......... 96% 298K 10s\n", - "123600K .......... .......... .......... .......... .......... 96% 303K 10s\n", - "123650K .......... .......... .......... .......... .......... 96% 311K 9s\n", - "123700K .......... .......... .......... .......... .......... 96% 311K 9s\n", - "123750K .......... .......... .......... .......... .......... 96% 318K 9s\n", - "123800K .......... .......... .......... .......... .......... 96% 311K 9s\n", - "123850K .......... .......... .......... .......... .......... 96% 312K 9s\n", - "123900K .......... .......... .......... .......... .......... 96% 315K 9s\n", - "123950K .......... .......... .......... .......... .......... 96% 313K 9s\n", - "124000K .......... .......... .......... .......... .......... 96% 322K 9s\n", - "124050K .......... .......... .......... .......... .......... 96% 323K 9s\n", - "124100K .......... .......... .......... .......... .......... 96% 315K 9s\n", - "124150K .......... .......... .......... .......... .......... 96% 316K 8s\n", - "124200K .......... .......... .......... .......... .......... 96% 321K 8s\n", - "124250K .......... .......... .......... .......... .......... 96% 328K 8s\n", - "124300K .......... .......... .......... .......... .......... 96% 2.14M 8s\n", - "124350K .......... .......... .......... .......... .......... 96% 324K 8s\n", - "124400K .......... .......... .......... .......... .......... 96% 320K 8s\n", - "124450K .......... .......... .......... .......... .......... 96% 325K 8s\n", - "124500K .......... .......... .......... .......... .......... 96% 328K 8s\n", - "124550K .......... .......... .......... .......... .......... 96% 472K 8s\n", - "124600K .......... .......... .......... .......... .......... 96% 579K 8s\n", - "124650K .......... .......... .......... .......... .......... 96% 361K 8s\n", - "124700K .......... .......... .......... .......... .......... 96% 329K 7s\n", - "124750K .......... .......... .......... .......... .......... 97% 379K 7s\n", - "124800K .......... .......... .......... .......... .......... 97% 828K 7s\n", - "124850K .......... .......... .......... .......... .......... 97% 369K 7s\n", - "124900K .......... .......... .......... .......... .......... 97% 336K 7s\n", - "124950K .......... .......... .......... .......... .......... 97% 1.23M 7s\n", - "125000K .......... .......... .......... .......... .......... 97% 377K 7s\n", - "125050K .......... .......... .......... .......... .......... 97% 325K 7s\n", - "125100K .......... .......... .......... .......... .......... 97% 431K 7s\n", - "125150K .......... .......... .......... .......... .......... 97% 763K 7s\n", - "125200K .......... .......... .......... .......... .......... 97% 371K 7s\n", - "125250K .......... .......... .......... .......... .......... 97% 427K 6s\n", - "125300K .......... .......... .......... .......... .......... 97% 761K 6s\n", - "125350K .......... .......... .......... .......... .......... 97% 366K 6s\n", - "125400K .......... .......... .......... .......... .......... 97% 438K 6s\n", - "125450K .......... .......... .......... .......... .......... 97% 842K 6s\n", - "125500K .......... .......... .......... .......... .......... 97% 347K 6s\n", - "125550K .......... .......... .......... .......... .......... 97% 451K 6s\n", - "125600K .......... .......... .......... .......... .......... 97% 908K 6s\n", - "125650K .......... .......... .......... .......... .......... 97% 326K 6s\n", - "125700K .......... .......... .......... .......... .......... 97% 1.63M 6s\n", - "125750K .......... .......... .......... .......... .......... 97% 331K 5s\n", - "125800K .......... .......... .......... .......... .......... 97% 382K 5s\n", - "125850K .......... .......... .......... .......... .......... 97% 690K 5s\n", - "125900K .......... .......... .......... .......... .......... 97% 341K 5s\n", - "125950K .......... .......... .......... .......... .......... 97% 1.47M 5s\n", - "126000K .......... .......... .......... .......... .......... 97% 379K 5s\n", - "126050K .......... .......... .......... .......... .......... 98% 537K 5s\n", - "126100K .......... .......... .......... .......... .......... 98% 699K 5s\n", - "126150K .......... .......... .......... .......... .......... 98% 350K 5s\n", - "126200K .......... .......... .......... .......... .......... 98% 2.33M 5s\n", - "126250K .......... .......... .......... .......... .......... 98% 349K 5s\n", - "126300K .......... .......... .......... .......... .......... 98% 752K 4s\n", - "126350K .......... .......... .......... .......... .......... 98% 512K 4s\n", - "126400K .......... .......... .......... .......... .......... 98% 540K 4s\n", - "126450K .......... .......... .......... .......... .......... 98% 713K 4s\n", - "126500K .......... .......... .......... .......... .......... 98% 362K 4s\n", - "126550K .......... .......... .......... .......... .......... 98% 1.97M 4s\n", - "126600K .......... .......... .......... .......... .......... 98% 344K 4s\n", - "126650K .......... .......... .......... .......... .......... 98% 2.75M 4s\n", - "126700K .......... .......... .......... .......... .......... 98% 351K 4s\n", - "126750K .......... .......... .......... .......... .......... 98% 2.91M 4s\n", - "126800K .......... .......... .......... .......... .......... 98% 348K 3s\n", - "126850K .......... .......... .......... .......... .......... 98% 1.92M 3s\n", - "126900K .......... .......... .......... .......... .......... 98% 370K 3s\n", - "126950K .......... .......... .......... .......... .......... 98% 742K 3s\n", - "127000K .......... .......... .......... .......... .......... 98% 528K 3s\n", - "127050K .......... .......... .......... .......... .......... 98% 670K 3s\n", - "127100K .......... .......... .......... .......... .......... 98% 579K 3s\n", - "127150K .......... .......... .......... .......... .......... 98% 695K 3s\n", - "127200K .......... .......... .......... .......... .......... 98% 571K 3s\n", - "127250K .......... .......... .......... .......... .......... 98% 700K 3s\n", - "127300K .......... .......... .......... .......... .......... 98% 551K 2s\n", - "127350K .......... .......... .......... .......... .......... 99% 751K 2s\n", - "127400K .......... .......... .......... .......... .......... 99% 534K 2s\n", - "127450K .......... .......... .......... .......... .......... 99% 780K 2s\n", - "127500K .......... .......... .......... .......... .......... 99% 509K 2s\n", - "127550K .......... .......... .......... .......... .......... 99% 1.05M 2s\n", - "127600K .......... .......... .......... .......... .......... 99% 440K 2s\n", - "127650K .......... .......... .......... .......... .......... 99% 3.98M 2s\n", - "127700K .......... .......... .......... .......... .......... 99% 338K 2s\n", - "127750K .......... .......... .......... .......... .......... 99% 4.09M 2s\n", - "127800K .......... .......... .......... .......... .......... 99% 341K 2s\n", - "127850K .......... .......... .......... .......... .......... 99% 3.51M 1s\n", - "127900K .......... .......... .......... .......... .......... 99% 398K 1s\n", - "127950K .......... .......... .......... .......... .......... 99% 1.44M 1s\n", - "128000K .......... .......... .......... .......... .......... 99% 390K 1s\n", - "128050K .......... .......... .......... .......... .......... 99% 1.53M 1s\n", - "128100K .......... .......... .......... .......... .......... 99% 389K 1s\n", - "128150K .......... .......... .......... .......... .......... 99% 1.69M 1s\n", - "128200K .......... .......... .......... .......... .......... 99% 377K 1s\n", - "128250K .......... .......... .......... .......... .......... 99% 2.15M 1s\n", - "128300K .......... .......... .......... .......... .......... 99% 376K 1s\n", - "128350K .......... .......... .......... .......... .......... 99% 2.01M 0s\n", - "128400K .......... .......... .......... .......... .......... 99% 371K 0s\n", - "128450K .......... .......... .......... .......... .......... 99% 1.98M 0s\n", - "128500K .......... .......... .......... .......... .......... 99% 380K 0s\n", - "128550K .......... .......... .......... .......... .......... 99% 1.70M 0s\n", - "128600K .......... .......... .......... .......... .......... 99% 358K 0s\n", - "128650K .. 100% 14.8K=4m6s\n", - "\n", - "2017-03-22 17:09:42 (524 KB/s) - ‘data/101_ObjectCategories.tar.gz’ saved [131740031/131740031]\n", - "\n" - ] - }, { "data": { "text/plain": [ @@ -2680,7 +90,7 @@ ], "source": [ "import sys.process._\n", - "\"wget http://www.vision.caltech.edu/Image_Datasets/Caltech101/101_ObjectCategories.tar.gz -P data/\"!" + "\"wget http://www.vision.caltech.edu/Image_Datasets/Caltech101/101_ObjectCategories.tar.gz -P data/ -q\"!" ] }, { @@ -2720,16 +130,6 @@ "collapsed": false }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "objc[37149]: Class CVWindow is implemented in both /usr/local/opt/opencv/lib/libopencv_highgui.2.4.dylib and /Users/roshanin/anaconda2/lib/libopencv_highgui.2.4.11.dylib. One of the two will be used. Which one is undefined.\n", - "objc[37149]: Class CVView is implemented in both /usr/local/opt/opencv/lib/libopencv_highgui.2.4.dylib and /Users/roshanin/anaconda2/lib/libopencv_highgui.2.4.11.dylib. One of the two will be used. Which one is undefined.\n", - "objc[37149]: Class CVSlider is implemented in both /usr/local/opt/opencv/lib/libopencv_highgui.2.4.dylib and /Users/roshanin/anaconda2/lib/libopencv_highgui.2.4.11.dylib. One of the two will be used. Which one is undefined.\n", - "objc[37149]: Class CaptureDelegate is implemented in both /usr/local/opt/opencv/lib/libopencv_highgui.2.4.dylib and /Users/roshanin/anaconda2/lib/libopencv_highgui.2.4.11.dylib. One of the two will be used. Which one is undefined.\n" - ] - }, { "name": "stdout", "output_type": "stream", @@ -2867,31 +267,21 @@ "collapsed": false }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "objc[37161]: Class CVWindow is implemented in both /usr/local/opt/opencv/lib/libopencv_highgui.2.4.dylib and /Users/roshanin/anaconda2/lib/libopencv_highgui.2.4.11.dylib. One of the two will be used. Which one is undefined.\n", - "objc[37161]: Class CVView is implemented in both /usr/local/opt/opencv/lib/libopencv_highgui.2.4.dylib and /Users/roshanin/anaconda2/lib/libopencv_highgui.2.4.11.dylib. One of the two will be used. Which one is undefined.\n", - "objc[37161]: Class CVSlider is implemented in both /usr/local/opt/opencv/lib/libopencv_highgui.2.4.dylib and /Users/roshanin/anaconda2/lib/libopencv_highgui.2.4.11.dylib. One of the two will be used. Which one is undefined.\n", - "objc[37161]: Class CaptureDelegate is implemented in both /usr/local/opt/opencv/lib/libopencv_highgui.2.4.dylib and /Users/roshanin/anaconda2/lib/libopencv_highgui.2.4.11.dylib. One of the two will be used. Which one is undefined.\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ - "Creating .rec file from /Users/roshanin/Documents/mxnet-notebooks/scala/basic/data/caltech.lst in /Users/roshanin/Documents/mxnet-notebooks/scala/basic/data\n", - "time: 0.00232291221619 count: 0\n", - "time: 0.213660955429 count: 1000\n", - "time: 0.172420978546 count: 2000\n", - "time: 0.151710987091 count: 3000\n", - "time: 0.13969707489 count: 4000\n", - "time: 0.114994049072 count: 5000\n", - "time: 0.0974760055542 count: 6000\n", - "time: 0.0965540409088 count: 7000\n", - "time: 0.10813498497 count: 8000\n", - "time: 0.0764980316162 count: 9000\n" + "Creating .rec file from /home/ec2-user/mxnet-notebooks/scala/basic/data/caltech.lst in /home/ec2-user/mxnet-notebooks/scala/basic/data\n", + "time: 0.00183486938477 count: 0\n", + "time: 0.0827140808105 count: 1000\n", + "time: 0.0803511142731 count: 2000\n", + "time: 0.0845577716827 count: 3000\n", + "time: 0.0807552337646 count: 4000\n", + "time: 0.0814788341522 count: 5000\n", + "time: 0.0812129974365 count: 6000\n", + "time: 0.0810561180115 count: 7000\n", + "time: 0.0805099010468 count: 8000\n", + "time: 0.0889499187469 count: 9000\n" ] }, { @@ -2995,8 +385,8 @@ "text/plain": [ "\u001b[32mimport \u001b[36mml.dmlc.mxnet._\u001b[0m\n", "\u001b[36mdataIter\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mDataIter\u001b[0m = non-empty iterator\n", - "\u001b[36mbatch\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mDataBatch\u001b[0m = ml.dmlc.mxnet.DataBatch@6d790bc2\n", - "\u001b[36mdata\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@72272a05" + "\u001b[36mbatch\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mDataBatch\u001b[0m = ml.dmlc.mxnet.DataBatch@1dee5185\n", + "\u001b[36mdata\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@496baa2a" ] }, "metadata": {}, From 57c90e5b98c05a912bb6a3786b69f259c39a695c Mon Sep 17 00:00:00 2001 From: Nagmote Date: Fri, 31 Mar 2017 11:42:34 -0700 Subject: [PATCH 17/21] symbol visualization warning removed --- scala/basic/symbol_scala.ipynb | 174 ++++++++++++++------------------- 1 file changed, 71 insertions(+), 103 deletions(-) diff --git a/scala/basic/symbol_scala.ipynb b/scala/basic/symbol_scala.ipynb index 25a54ef43..0dc8ac053 100644 --- a/scala/basic/symbol_scala.ipynb +++ b/scala/basic/symbol_scala.ipynb @@ -64,13 +64,13 @@ "text/plain": [ "\u001b[32mimport \u001b[36mml.dmlc.mxnet._\u001b[0m\n", "\u001b[32mimport \u001b[36mml.dmlc.mxnet.Visualization\u001b[0m\n", - "\u001b[36ma\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@235942ea\n", - "\u001b[36mb\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@5bf2b0e\n", - "\u001b[36mc\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@be1263\n", + "\u001b[36ma\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@62b80558\n", + "\u001b[36mb\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@4565f56d\n", + "\u001b[36mc\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@345db42b\n", "\u001b[36mres1_5\u001b[0m: (\u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m, \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m, \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mSymbol\u001b[0m) = \u001b[33m\u001b[0m(\n", - " ml.dmlc.mxnet.Symbol@235942ea,\n", - " ml.dmlc.mxnet.Symbol@5bf2b0e,\n", - " ml.dmlc.mxnet.Symbol@be1263\n", + " ml.dmlc.mxnet.Symbol@62b80558,\n", + " ml.dmlc.mxnet.Symbol@4565f56d,\n", + " ml.dmlc.mxnet.Symbol@345db42b\n", ")" ] }, @@ -105,10 +105,10 @@ { "data": { "text/plain": [ - "\u001b[36md\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@3011bf98\n", - "\u001b[36me\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@4b4a02e8\n", - "\u001b[36mf\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@7a427309\n", - "\u001b[36mg\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@1ebdbd6e" + "\u001b[36md\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@7e72d295\n", + "\u001b[36me\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@7695a017\n", + "\u001b[36mf\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@253b4644\n", + "\u001b[36mg\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@2ac34e90" ] }, "metadata": {}, @@ -147,7 +147,7 @@ { "data": { "text/plain": [ - "\u001b[36mdot\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@7216eb27" + "\u001b[36mdot\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@3fc1c14" ] }, "metadata": {}, @@ -156,7 +156,7 @@ ], "source": [ "val dot = Visualization.plotNetwork(symbol = g)\n", - "dot.render(engine = \"dot\", fileName = \"g\", path = \"visualization_op\")" + "dot.render(engine = \"dot\", fileName = \"g\", path = \".\")" ] }, { @@ -177,11 +177,11 @@ { "data": { "text/plain": [ - "\u001b[36mdata\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@17c5fdf5\n", - "\u001b[36mfc1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@40d63146\n", - "\u001b[36mact1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@260d2ef\n", - "\u001b[36mfc2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@619ecc76\n", - "\u001b[36mnet\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@590cafe5" + "\u001b[36mdata\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@4e147b90\n", + "\u001b[36mfc1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@449a676\n", + "\u001b[36mact1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@624e9263\n", + "\u001b[36mfc2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@202a4b05\n", + "\u001b[36mnet\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@4d8f7c6b" ] }, "metadata": {}, @@ -214,7 +214,7 @@ { "data": { "text/plain": [ - "\u001b[36mdot\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@659aaad1" + "\u001b[36mdot\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@56525af2" ] }, "metadata": {}, @@ -223,7 +223,7 @@ ], "source": [ "val dot = Visualization.plotNetwork(symbol = net)\n", - "dot.render(engine = \"dot\", fileName = \"net\", path = \"visualization_op\")" + "dot.render(engine = \"dot\", fileName = \"net\", path = \".\")" ] }, { @@ -245,8 +245,8 @@ "data": { "text/plain": [ "defined \u001b[32mfunction \u001b[36mConvFactory\u001b[0m\n", - "\u001b[36mprev\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@2a8530e5\n", - "\u001b[36mconvComp\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@6e02f36c\n", + "\u001b[36mprev\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@a763473\n", + "\u001b[36mconvComp\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@251e3edb\n", "\u001b[36mshape\u001b[0m: \u001b[32mShape\u001b[0m = (128,3,28,28)" ] }, @@ -291,7 +291,7 @@ { "data": { "text/plain": [ - "\u001b[36mdot\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@25525ebb" + "\u001b[36mdot\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@4958afa4" ] }, "metadata": {}, @@ -302,7 +302,7 @@ "val dot = Visualization.plotNetwork(symbol = convComp, title = \"ConvFactory\", shape = Map(\"PreviosOutput\" -> shape), \n", " nodeAttrs = Map(\"shape\" -> \"oval\", \"fixedsize\" -> \"false\"))\n", "\n", - "dot.render(engine = \"dot\", fileName = \"ConvFactory\", path = \"visualization_op\")" + "dot.render(engine = \"dot\", fileName = \"ConvFactory\", path = \".\")" ] }, { @@ -323,8 +323,8 @@ "data": { "text/plain": [ "defined \u001b[32mfunction \u001b[36mInceptionFactoryA\u001b[0m\n", - "\u001b[36mprev\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@64b6ebb9\n", - "\u001b[36min3a\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@76c10a05" + "\u001b[36mprev\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@21f75c67\n", + "\u001b[36min3a\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@775e917d" ] }, "metadata": {}, @@ -379,44 +379,10 @@ "collapsed": false }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Warning: node 'bn_in3a_1x1_gamma', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_1x1_beta', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_1x1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_1x1_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_3x3_reduce_gamma', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_3x3_reduce_beta', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_3x3_reduce_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_3x3_reduce_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_3x3_gamma', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_3x3_beta', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_3x3_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_3x3_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_double_3x3_reduce_gamma', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_double_3x3_reduce_beta', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_double_3x3_reduce_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_double_3x3_reduce_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_double_3x3_0_gamma', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_double_3x3_0_beta', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_double_3x3_0_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_double_3x3_0_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_double_3x3_1_gamma', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_double_3x3_1_beta', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_double_3x3_1_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_double_3x3_1_moving_var', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_proj_gamma', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_proj_beta', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_proj_moving_mean', graph 'plot' size too small for label\n", - "Warning: node 'bn_in3a_proj_moving_var', graph 'plot' size too small for label\n" - ] - }, { "data": { "text/plain": [ - "\u001b[36mdot\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@185795b5" + "\u001b[36mdot\u001b[0m: \u001b[32mVisualization\u001b[0m.\u001b[32mDot\u001b[0m = ml.dmlc.mxnet.Visualization$Dot@50a4da62" ] }, "metadata": {}, @@ -424,9 +390,9 @@ } ], "source": [ - "val dot = Visualization.plotNetwork(symbol=in3a, shape = Map(\"PreviosOutput\" -> shape))\n", + "val dot = Visualization.plotNetwork(symbol=in3a, shape = Map(\"PreviosOutput\" -> shape), nodeAttrs = Map(\"shape\" -> \"oval\", \"fixedsize\" -> \"false\"))\n", "\n", - "dot.render(engine = \"dot\", fileName = \"InceptionFactoryA\", path = \"visualization_op\")" + "dot.render(engine = \"dot\", fileName = \"InceptionFactoryA\", path = \".\")" ] }, { @@ -448,12 +414,12 @@ { "data": { "text/plain": [ - "\u001b[36mdata\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@4b091529\n", - "\u001b[36mfc1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@68a10ba5\n", - "\u001b[36mnet\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@436e604\n", - "\u001b[36mout1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@162e1cb2\n", - "\u001b[36mout2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@150de303\n", - "\u001b[36mgroup\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@75112e24\n", + "\u001b[36mdata\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@27b69901\n", + "\u001b[36mfc1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@5b6d60d9\n", + "\u001b[36mnet\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@5535de50\n", + "\u001b[36mout1\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@3593b1c3\n", + "\u001b[36mout2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@26fe58e1\n", + "\u001b[36mgroup\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@16a59f4f\n", "\u001b[36mres10_6\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mString\u001b[0m] = \u001b[33mArrayBuffer\u001b[0m(\u001b[32m\"softmax_output\"\u001b[0m, \u001b[32m\"regression_output\"\u001b[0m)" ] }, @@ -518,26 +484,28 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "" - ] + "data": { + "text/plain": [ + "\u001b[36margName\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mString\u001b[0m] = \u001b[33mArrayBuffer\u001b[0m(\u001b[32m\"a\"\u001b[0m, \u001b[32m\"b\"\u001b[0m)\n", + "\u001b[36moutName\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mString\u001b[0m] = \u001b[33mArrayBuffer\u001b[0m(\u001b[32m\"_plus0_output\"\u001b[0m)\n", + "\u001b[36margShape\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mShape\u001b[0m] = \u001b[33mVector\u001b[0m((2,3), (2,3))\n", + "\u001b[36moutShape\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mShape\u001b[0m] = \u001b[33mVector\u001b[0m((2,3))" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ "val argName = c.listArguments() // get the names of the inputs\n", "val outName = c.listOutputs() // get the names of the outputs\n", - "val (argShape, outShape, _) = c.inferShape(Map(\"a\" -> Shape(2,3), \"b\" -> Shape(2,3))\n", - "println(argName, argShape)\n", - "println(outName, outShape)" + "val (argShape, outShape, _) = c.inferShape(Map(\"a\" -> Shape(2,3), \"b\" -> Shape(2,3)))\n" ] }, { @@ -550,7 +518,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": { "collapsed": false }, @@ -565,8 +533,8 @@ { "data": { "text/plain": [ - "\u001b[36mex\u001b[0m: \u001b[32mExecutor\u001b[0m = ml.dmlc.mxnet.Executor@1ba98cde\n", - "\u001b[36mres11_3\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m)" + "\u001b[36mex\u001b[0m: \u001b[32mExecutor\u001b[0m = ml.dmlc.mxnet.Executor@502139d3\n", + "\u001b[36mres12_3\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m2.0F\u001b[0m)" ] }, "metadata": {}, @@ -590,7 +558,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 15, "metadata": { "collapsed": false }, @@ -598,8 +566,8 @@ { "data": { "text/plain": [ - "\u001b[36mex_gpu\u001b[0m: \u001b[32mExecutor\u001b[0m = ml.dmlc.mxnet.Executor@796da522\n", - "\u001b[36mres12_2\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m)" + "\u001b[36mex_gpu\u001b[0m: \u001b[32mExecutor\u001b[0m = ml.dmlc.mxnet.Executor@19e1e3a7\n", + "\u001b[36mres14_2\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m, \u001b[32m5.0F\u001b[0m)" ] }, "metadata": {}, @@ -607,8 +575,8 @@ } ], "source": [ - "val ex_gpu = c.bind(ctx=Context.cpu(), args=Map(\"a\" -> NDArray.ones(shape=Shape(3,4), Context.cpu(), dtype = DType.Float32)*2,\n", - " \"b\" -> NDArray.ones(shape=Shape(3,4), Context.cpu(), dtype = DType.Float32)*3))\n", + "val ex_gpu = c.bind(ctx=Context.gpu(), args=Map(\"a\" -> NDArray.ones(shape=Shape(3,4), Context.gpu(), dtype = DType.Float32)*2,\n", + " \"b\" -> NDArray.ones(shape=Shape(3,4), Context.gpu(), dtype = DType.Float32)*3))\n", "ex_gpu.forward()\n", "ex_gpu.outputs(0).toArray" ] @@ -623,7 +591,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 16, "metadata": { "collapsed": false }, @@ -660,8 +628,8 @@ { "data": { "text/plain": [ - "\u001b[36mc2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@6561a992\n", - "\u001b[36mres13_3\u001b[0m: \u001b[32mBoolean\u001b[0m = \u001b[32mtrue\u001b[0m" + "\u001b[36mc2\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@234ea43a\n", + "\u001b[36mres15_3\u001b[0m: \u001b[32mBoolean\u001b[0m = \u001b[32mtrue\u001b[0m" ] }, "metadata": {}, @@ -691,7 +659,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -752,7 +720,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 18, "metadata": { "collapsed": false }, @@ -818,7 +786,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 19, "metadata": { "collapsed": false }, @@ -834,11 +802,11 @@ { "data": { "text/plain": [ - "\u001b[36ma\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@36fc98c1\n", - "\u001b[36mb\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@5f318e23\n", + "\u001b[36ma\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@550368a3\n", + "\u001b[36mb\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@63cbf626\n", "\u001b[36margb\u001b[0m: \u001b[32mSeq\u001b[0m[\u001b[32mDType\u001b[0m.\u001b[32mDType\u001b[0m] = \u001b[33mListBuffer\u001b[0m(Float32)\n", "\u001b[36moutb\u001b[0m: \u001b[32mSeq\u001b[0m[\u001b[32mDType\u001b[0m.\u001b[32mDType\u001b[0m] = \u001b[33mListBuffer\u001b[0m(Float16)\n", - "\u001b[36mc\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@1b08cc90\n", + "\u001b[36mc\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@182f0324\n", "\u001b[36margc\u001b[0m: \u001b[32mSeq\u001b[0m[\u001b[32mDType\u001b[0m.\u001b[32mDType\u001b[0m] = \u001b[33mListBuffer\u001b[0m(Int32)\n", "\u001b[36moutc\u001b[0m: \u001b[32mSeq\u001b[0m[\u001b[32mDType\u001b[0m.\u001b[32mDType\u001b[0m] = \u001b[33mListBuffer\u001b[0m(UInt8)" ] @@ -868,7 +836,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 20, "metadata": { "collapsed": false }, @@ -876,13 +844,13 @@ { "data": { "text/plain": [ - "\u001b[36ma\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@cc2dcb9\n", - "\u001b[36mb\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@2cafc430\n", - "\u001b[36mc\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@42dfc2a1\n", - "\u001b[36md\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@471f7c4b\n", - "\u001b[36mdata\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@c8e1e3e4\n", - "\u001b[36mex\u001b[0m: \u001b[32mExecutor\u001b[0m = ml.dmlc.mxnet.Executor@3b2f4224\n", - "\u001b[36mres17_7\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m)" + "\u001b[36ma\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@74892999\n", + "\u001b[36mb\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@33cf54a9\n", + "\u001b[36mc\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@52dcc5fe\n", + "\u001b[36md\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@3f5139ac\n", + "\u001b[36mdata\u001b[0m: \u001b[32mNDArray\u001b[0m = ml.dmlc.mxnet.NDArray@8b9a99a8\n", + "\u001b[36mex\u001b[0m: \u001b[32mExecutor\u001b[0m = ml.dmlc.mxnet.Executor@1b2182b8\n", + "\u001b[36mres19_7\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m, \u001b[32m6.0F\u001b[0m)" ] }, "metadata": {}, From 541162ddf59ee9345e6b0fa56e5856c303ccf451 Mon Sep 17 00:00:00 2001 From: Nagmote Date: Fri, 31 Mar 2017 15:46:43 -0700 Subject: [PATCH 18/21] record io updated --- scala/basic/record_io_scala.ipynb | 57 +++++++++---------------------- 1 file changed, 16 insertions(+), 41 deletions(-) diff --git a/scala/basic/record_io_scala.ipynb b/scala/basic/record_io_scala.ipynb index b2794bc65..c73b0cc17 100644 --- a/scala/basic/record_io_scala.ipynb +++ b/scala/basic/record_io_scala.ipynb @@ -65,9 +65,9 @@ "text/plain": [ "\u001b[32mimport \u001b[36mml.dmlc.mxnet._\u001b[0m\n", "\u001b[32mimport \u001b[36mjava.io._\u001b[0m\n", - "\u001b[36mfRec\u001b[0m: \u001b[32mjava\u001b[0m.\u001b[32mio\u001b[0m.\u001b[32mFile\u001b[0m = /var/folders/f4/gts7qnkx319_nv4176gbz4jjrjzb4y/T/tmpFile1833796685651346987.tmp\n", + "\u001b[36mfRec\u001b[0m: \u001b[32mjava\u001b[0m.\u001b[32mio\u001b[0m.\u001b[32mFile\u001b[0m = /var/folders/f4/gts7qnkx319_nv4176gbz4jjrjzb4y/T/tmpFile74639909094035107.tmp\n", "\u001b[36mN\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m5\u001b[0m\n", - "\u001b[36mwriter\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mMXRecordIO\u001b[0m = ml.dmlc.mxnet.MXRecordIO@6df7a0b1" + "\u001b[36mwriter\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mMXRecordIO\u001b[0m = ml.dmlc.mxnet.MXRecordIO@5f70fff2" ] }, "metadata": {}, @@ -116,7 +116,7 @@ { "data": { "text/plain": [ - "\u001b[36mreader\u001b[0m: \u001b[32mMXRecordIO\u001b[0m = ml.dmlc.mxnet.MXRecordIO@28b440ec" + "\u001b[36mreader\u001b[0m: \u001b[32mMXRecordIO\u001b[0m = ml.dmlc.mxnet.MXRecordIO@77962056" ] }, "metadata": {}, @@ -149,10 +149,10 @@ { "data": { "text/plain": [ - "\u001b[36mfIdxRec\u001b[0m: \u001b[32mFile\u001b[0m = /var/folders/f4/gts7qnkx319_nv4176gbz4jjrjzb4y/T/tmpIdxFile7562897526384618096.tmp\n", - "\u001b[36mfIdx\u001b[0m: \u001b[32mFile\u001b[0m = /var/folders/f4/gts7qnkx319_nv4176gbz4jjrjzb4y/T/tmpIdx1820915738400330418.tmp\n", + "\u001b[36mfIdxRec\u001b[0m: \u001b[32mFile\u001b[0m = /var/folders/f4/gts7qnkx319_nv4176gbz4jjrjzb4y/T/tmpIdxFile3580846544654362434.tmp\n", + "\u001b[36mfIdx\u001b[0m: \u001b[32mFile\u001b[0m = /var/folders/f4/gts7qnkx319_nv4176gbz4jjrjzb4y/T/tmpIdx2069077102662620841.tmp\n", "\u001b[36mN\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m5\u001b[0m\n", - "\u001b[36mwriter\u001b[0m: \u001b[32mMXIndexedRecordIO\u001b[0m = ml.dmlc.mxnet.MXIndexedRecordIO@1c8d8668" + "\u001b[36mwriter\u001b[0m: \u001b[32mMXIndexedRecordIO\u001b[0m = ml.dmlc.mxnet.MXIndexedRecordIO@4aff5ca4" ] }, "metadata": {}, @@ -189,18 +189,18 @@ "name": "stdout", "output_type": "stream", "text": [ - "record_4\n", - "record_3\n", + "record_1\n", "record_2\n", - "record_0\n", - "record_1\n" + "record_3\n", + "record_4\n", + "record_0\n" ] }, { "data": { "text/plain": [ - "\u001b[36mreader\u001b[0m: \u001b[32mMXIndexedRecordIO\u001b[0m = ml.dmlc.mxnet.MXIndexedRecordIO@2eb616ea\n", - "\u001b[36mkeys\u001b[0m: \u001b[32mList\u001b[0m[\u001b[32mInt\u001b[0m] = \u001b[33mList\u001b[0m(\u001b[32m4\u001b[0m, \u001b[32m3\u001b[0m, \u001b[32m2\u001b[0m, \u001b[32m0\u001b[0m, \u001b[32m1\u001b[0m)" + "\u001b[36mreader\u001b[0m: \u001b[32mMXIndexedRecordIO\u001b[0m = ml.dmlc.mxnet.MXIndexedRecordIO@57ce9894\n", + "\u001b[36mkeys\u001b[0m: \u001b[32mList\u001b[0m[\u001b[32mInt\u001b[0m] = \u001b[33mList\u001b[0m(\u001b[32m1\u001b[0m, \u001b[32m2\u001b[0m, \u001b[32m3\u001b[0m, \u001b[32m4\u001b[0m, \u001b[32m0\u001b[0m)" ] }, "metadata": {}, @@ -265,19 +265,11 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "array of size 1 label:\u0000\u0000\u0000\u0001?タ\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0004data\n", - "array label:\u0000\u0000\u0000\u0003?タ\u0000\u0000@\u0000\u0000\u0000@@\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0004data\n" - ] - }, { "data": { "text/plain": [ @@ -299,31 +291,19 @@ "val label1 = Array(1f)\n", "val header1 = MXRecordIO.IRHeader(0, label1, 1, 0)\n", "val s1 = MXRecordIO.pack(header1, data)\n", - "println(\"array of size 1 label:\"+ s1)\n", "\n", "val label2 = Array(1f, 2f, 3f)\n", "val header2 = MXRecordIO.IRHeader(0, label2, 2, 0)\n", - "val s2 = MXRecordIO.pack(header2, data)\n", - "println(\"array label:\"+ s2)" + "val s2 = MXRecordIO.pack(header2, data)\n" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(IRHeader(1,[F@26886f4c,1,0),data)\n", - "(IRHeader(3,[F@236bc6d0,2,0),data)\n", - "[F@8f26874\n", - "[F@592bbf62\n" - ] - }, { "data": { "text/plain": [ @@ -340,12 +320,7 @@ "source": [ "// unpack\n", "val (rHeader1, rContent1) = MXRecordIO.unpack(s1)\n", - "val (rHeader2, rContent2) = MXRecordIO.unpack(s2)\n", - "\n", - "println(MXRecordIO.unpack(s1))\n", - "println(MXRecordIO.unpack(s2))\n", - "println(rHeader1.label )\n", - "println(rHeader2.label )" + "val (rHeader2, rContent2) = MXRecordIO.unpack(s2)\n" ] }, { From f101840f73fb3d3ebda57d252b60c58108d4acbe Mon Sep 17 00:00:00 2001 From: Nagmote Date: Mon, 10 Apr 2017 09:13:27 -0700 Subject: [PATCH 19/21] minor updates --- scala/basic/predict_scala.ipynb | 102 ------------------------------ scala/basic/record_io_scala.ipynb | 74 ++++++++++++++-------- 2 files changed, 47 insertions(+), 129 deletions(-) diff --git a/scala/basic/predict_scala.ipynb b/scala/basic/predict_scala.ipynb index ec41e8e18..c0d9d0ac0 100644 --- a/scala/basic/predict_scala.ipynb +++ b/scala/basic/predict_scala.ipynb @@ -37,25 +37,6 @@ "```" ] }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "classpath.addPath(\"/Users/roshanin/mxnet/scala-package/assembly/osx-x86_64-cpu/target/mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -374,89 +355,6 @@ "The ResNet is trained with RGB images of size 224 x 224. The training data is feed by the variable data. We bind the module with the input shape and specify that it is only for predicting. The number 1 added before the image shape (3x224x224) means that we will only predict one image each time. Next we set the loaded parameters. Now the module is ready to run." ] }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false, - "scrolled": true - }, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "java.lang.NullPointerException", - " ml.dmlc.mxnet.module.DataParallelExecutorGroup.ml$dmlc$mxnet$module$DataParallelExecutorGroup$$bindIthExec(DataParallelExecutorGroup.scala:641)", - " ml.dmlc.mxnet.module.DataParallelExecutorGroup$$anonfun$bindExec$1.apply(DataParallelExecutorGroup.scala:354)", - " ml.dmlc.mxnet.module.DataParallelExecutorGroup$$anonfun$bindExec$1.apply(DataParallelExecutorGroup.scala:353)", - " scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)", - " scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)", - " scala.collection.immutable.Range.foreach(Range.scala:160)", - " scala.collection.TraversableLike$class.map(TraversableLike.scala:234)", - " scala.collection.AbstractTraversable.map(Traversable.scala:104)", - " ml.dmlc.mxnet.module.DataParallelExecutorGroup.bindExec(DataParallelExecutorGroup.scala:353)", - " ml.dmlc.mxnet.module.DataParallelExecutorGroup.(DataParallelExecutorGroup.scala:315)", - " ml.dmlc.mxnet.module.DataParallelExecutorGroup$Builder.build(DataParallelExecutorGroup.scala:223)", - " ml.dmlc.mxnet.module.Module.bind(Module.scala:243)", - " cmd4$$user$$anonfun$1.apply$mcV$sp(Main.scala:38)" - ] - } - ], - "source": [ - "val dataShapesResnet = ListMap(\"data\" -> Shape(1, 3, 224, 224))\n", - "mod.bind(dataShapes=dataShapesResnet, forTraining = false)\n", - "//mod.setParams(argParams, auxParams)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[36mres15_0\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mDataDesc\u001b[0m] = \u001b[33mVector\u001b[0m(DataDesc[data,(1,3,224,224),Float32,NCHW])\n", - "\u001b[36mres15_1\u001b[0m: \u001b[32mIndexedSeq\u001b[0m[\u001b[32mString\u001b[0m] = \u001b[33mVector\u001b[0m(\u001b[32m\"data\"\u001b[0m)" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "mod.dataShapes\n", - "mod.dataNames\n", - "//argParams" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "java.lang.NullPointerException", - " ml.dmlc.mxnet.module.Module.initParams(Module.scala:122)", - " ml.dmlc.mxnet.module.BaseModule.setParams(BaseModule.scala:303)", - " cmd16$$user$$anonfun$1.apply$mcV$sp(Main.scala:47)" - ] - } - ], - "source": [ - "mod.setParams(argParamsResnet, auxParamsResnet)" - ] - }, { "cell_type": "code", "execution_count": null, diff --git a/scala/basic/record_io_scala.ipynb b/scala/basic/record_io_scala.ipynb index c73b0cc17..2963df3f6 100644 --- a/scala/basic/record_io_scala.ipynb +++ b/scala/basic/record_io_scala.ipynb @@ -34,6 +34,25 @@ "```" ] }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "classpath.addPath(\"/Users/roshanin/mxnet/scala-package/assembly/osx-x86_64-cpu/target/mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -65,9 +84,9 @@ "text/plain": [ "\u001b[32mimport \u001b[36mml.dmlc.mxnet._\u001b[0m\n", "\u001b[32mimport \u001b[36mjava.io._\u001b[0m\n", - "\u001b[36mfRec\u001b[0m: \u001b[32mjava\u001b[0m.\u001b[32mio\u001b[0m.\u001b[32mFile\u001b[0m = /var/folders/f4/gts7qnkx319_nv4176gbz4jjrjzb4y/T/tmpFile74639909094035107.tmp\n", + "\u001b[36mfRec\u001b[0m: \u001b[32mjava\u001b[0m.\u001b[32mio\u001b[0m.\u001b[32mFile\u001b[0m = /var/folders/f4/gts7qnkx319_nv4176gbz4jjrjzb4y/T/tmpFile2805315252382756478.tmp\n", "\u001b[36mN\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m5\u001b[0m\n", - "\u001b[36mwriter\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mMXRecordIO\u001b[0m = ml.dmlc.mxnet.MXRecordIO@5f70fff2" + "\u001b[36mwriter\u001b[0m: \u001b[32mml\u001b[0m.\u001b[32mdmlc\u001b[0m.\u001b[32mmxnet\u001b[0m.\u001b[32mMXRecordIO\u001b[0m = ml.dmlc.mxnet.MXRecordIO@28a470f1" ] }, "metadata": {}, @@ -116,7 +135,7 @@ { "data": { "text/plain": [ - "\u001b[36mreader\u001b[0m: \u001b[32mMXRecordIO\u001b[0m = ml.dmlc.mxnet.MXRecordIO@77962056" + "\u001b[36mreader\u001b[0m: \u001b[32mMXRecordIO\u001b[0m = ml.dmlc.mxnet.MXRecordIO@5bf33b34" ] }, "metadata": {}, @@ -149,10 +168,10 @@ { "data": { "text/plain": [ - "\u001b[36mfIdxRec\u001b[0m: \u001b[32mFile\u001b[0m = /var/folders/f4/gts7qnkx319_nv4176gbz4jjrjzb4y/T/tmpIdxFile3580846544654362434.tmp\n", - "\u001b[36mfIdx\u001b[0m: \u001b[32mFile\u001b[0m = /var/folders/f4/gts7qnkx319_nv4176gbz4jjrjzb4y/T/tmpIdx2069077102662620841.tmp\n", + "\u001b[36mfIdxRec\u001b[0m: \u001b[32mFile\u001b[0m = /var/folders/f4/gts7qnkx319_nv4176gbz4jjrjzb4y/T/tmpIdxFile9045730139606611372.tmp\n", + "\u001b[36mfIdx\u001b[0m: \u001b[32mFile\u001b[0m = /var/folders/f4/gts7qnkx319_nv4176gbz4jjrjzb4y/T/tmpIdx2844802785206482836.tmp\n", "\u001b[36mN\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m5\u001b[0m\n", - "\u001b[36mwriter\u001b[0m: \u001b[32mMXIndexedRecordIO\u001b[0m = ml.dmlc.mxnet.MXIndexedRecordIO@4aff5ca4" + "\u001b[36mwriter\u001b[0m: \u001b[32mMXIndexedRecordIO\u001b[0m = ml.dmlc.mxnet.MXIndexedRecordIO@43acea84" ] }, "metadata": {}, @@ -190,17 +209,17 @@ "output_type": "stream", "text": [ "record_1\n", - "record_2\n", - "record_3\n", "record_4\n", - "record_0\n" + "record_3\n", + "record_0\n", + "record_2\n" ] }, { "data": { "text/plain": [ - "\u001b[36mreader\u001b[0m: \u001b[32mMXIndexedRecordIO\u001b[0m = ml.dmlc.mxnet.MXIndexedRecordIO@57ce9894\n", - "\u001b[36mkeys\u001b[0m: \u001b[32mList\u001b[0m[\u001b[32mInt\u001b[0m] = \u001b[33mList\u001b[0m(\u001b[32m1\u001b[0m, \u001b[32m2\u001b[0m, \u001b[32m3\u001b[0m, \u001b[32m4\u001b[0m, \u001b[32m0\u001b[0m)" + "\u001b[36mreader\u001b[0m: \u001b[32mMXIndexedRecordIO\u001b[0m = ml.dmlc.mxnet.MXIndexedRecordIO@35c87f7a\n", + "\u001b[36mkeys\u001b[0m: \u001b[32mList\u001b[0m[\u001b[32mInt\u001b[0m] = \u001b[33mList\u001b[0m(\u001b[32m1\u001b[0m, \u001b[32m4\u001b[0m, \u001b[32m3\u001b[0m, \u001b[32m0\u001b[0m, \u001b[32m2\u001b[0m)" ] }, "metadata": {}, @@ -265,36 +284,37 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { - "data": { - "text/plain": [ - "\u001b[36mdata\u001b[0m: \u001b[32mString\u001b[0m = \u001b[32m\"data\"\u001b[0m\n", - "\u001b[36mlabel1\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m)\n", - "\u001b[36mheader1\u001b[0m: \u001b[32mMXRecordIO\u001b[0m.\u001b[32mIRHeader\u001b[0m = \u001b[33mIRHeader\u001b[0m(\u001b[32m0\u001b[0m, \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m), \u001b[32m1\u001b[0m, \u001b[32m0\u001b[0m)\n", - "\u001b[36ms1\u001b[0m: \u001b[32mString\u001b[0m = \u001b[32m\"\u0000\u0000\u0000\u0001?タ\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0004data\"\u001b[0m\n", - "\u001b[36mlabel2\u001b[0m: \u001b[32mArray\u001b[0m[\u001b[32mFloat\u001b[0m] = \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m3.0F\u001b[0m)\n", - "\u001b[36mheader2\u001b[0m: \u001b[32mMXRecordIO\u001b[0m.\u001b[32mIRHeader\u001b[0m = \u001b[33mIRHeader\u001b[0m(\u001b[32m0\u001b[0m, \u001b[33mArray\u001b[0m(\u001b[32m1.0F\u001b[0m, \u001b[32m2.0F\u001b[0m, \u001b[32m3.0F\u001b[0m), \u001b[32m2\u001b[0m, \u001b[32m0\u001b[0m)\n", - "\u001b[36ms2\u001b[0m: \u001b[32mString\u001b[0m = \u001b[32m\"\u0000\u0000\u0000\u0003?タ\u0000\u0000@\u0000\u0000\u0000@@\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0004data\"\u001b[0m" - ] - }, - "metadata": {}, - "output_type": "display_data" + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "Failure(\"}\":2:5 ...\"s1 = MXRec\")" + ] } ], "source": [ + "def pack(header1, header2, data:String): Unit{\n", + " s1 = MXRecordIO.pack(header1, data)\n", + " s2 = MXRecordIO.pack(header2, data)\n", + "}\n", + "\n", "val data = \"data\"\n", "val label1 = Array(1f)\n", + "var s1: String = null\n", + "var s2: String = null\n", "val header1 = MXRecordIO.IRHeader(0, label1, 1, 0)\n", - "val s1 = MXRecordIO.pack(header1, data)\n", "\n", "val label2 = Array(1f, 2f, 3f)\n", "val header2 = MXRecordIO.IRHeader(0, label2, 2, 0)\n", - "val s2 = MXRecordIO.pack(header2, data)\n" + "\n", + "pack(header1, header2, data)\n", + "\n" ] }, { From 8883d7be2c089c019348024547cba2f7869d2583 Mon Sep 17 00:00:00 2001 From: Nagmote Date: Mon, 10 Apr 2017 16:40:57 -0700 Subject: [PATCH 20/21] minor updates --- README.md | 28 +++++++++---------- scala/basic/record_io_scala.ipynb | 19 ------------- scala/tutorials/linear_regression_scala.ipynb | 19 ------------- 3 files changed, 14 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index cde4302b3..577d1614e 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ The python notebooks are written in [Jupyter](http://jupyter.org/). [github](https://github.com/dmlc/mxnet-notebooks/blob/master/python/outline.ipynb) or [nbviewer](http://nbviewer.jupyter.org/github/dmlc/mxnet-notebooks/blob/master/python/outline.ipynb). But - note that the former may be failed to render a page, while the latter has + note that the former may fail to render a page, while the latter has delays to view the recent changes. - **Run** We can run and modify these notebooks if both [mxnet](http://mxnet.io/get_started/index.html#setup-and-installation) and [jupyter](http://jupyter.org/) are @@ -23,21 +23,21 @@ The python notebooks are written in [Jupyter](http://jupyter.org/). 1. Launch a g2.2xlarge or p2.2xlarge instance by using AMI `ami-fe217de9` on N. Virginia (us-east-1). This AMI is built by using [this script](https://gist.github.com/mli/b64322f446b2043e3350ddcbfa5957be). Remember to open the TCP port 8888 in the security group. - 2. Once launch is succeed, setup the following variable with proper value + 2. Once the instance successfully launches, setup the following variables with proper values: ```bash - export HOSTNAME=ec2-107-22-159-132.compute-1.amazonaws.com - export PERM=~/Downloads/my.pem + export HOSTNAME= + export PERM= ``` - 3. Now we should be able to ssh to the machine by + 3. Now, we should be able to ssh to the machine by ```bash chmod 400 $PERM ssh -i $PERM -L 8888:localhost:8888 ubuntu@HOSTNAME ``` - Here we forward the EC2 machine's 8888 port into localhost. + Here we forward the EC2 machine's 8888 port to local port 8888. 4. Clone this repo on the EC2 machine and run jupyter @@ -47,7 +47,7 @@ The python notebooks are written in [Jupyter](http://jupyter.org/). ``` We can optional run `~/update_mxnet.sh` to update MXNet to the newest version. - 5. Now we are able to view and edit the notebooks on the browser using the URL: http://localhost:8888/tree/mxnet-notebooks/python/outline.ipynb + 5. Now, we are able to view and edit the notebooks from the browser using the URL: http://localhost:8888/tree/mxnet-notebooks/python/outline.ipynb ### Scala @@ -60,11 +60,11 @@ The scala notebooks are written in [Jupyter](http://jupyter.org/) using [Jupyter 1. Launch a g2.2xlarge or p2.2xlarge instance by using AMI `ami-fe217de9` on N. Virginia (us-east-1). This AMI is built by using [this script](https://gist.github.com/mli/b64322f446b2043e3350ddcbfa5957be). Remember to open the TCP port 8888 in the security group. - 2. Once launch is succeed, setup the following variable with proper value + 2. Once the instance successfully launches, setup the following variables with proper values: ```bash - export HOSTNAME=ec2-107-22-159-132.compute-1.amazonaws.com - export PERM=~/Downloads/my.pem + export HOSTNAME= + export PERM= ``` 3. Now we should be able to ssh to the machine by @@ -74,9 +74,9 @@ The scala notebooks are written in [Jupyter](http://jupyter.org/) using [Jupyter ssh -i $PERM -L 8888:localhost:8888 ubuntu@HOSTNAME ``` - Here we forward the EC2 machine's 8888 port into localhost. + Here we forward the EC2 machine's 8888 port to local port 8888. - 4. Install [Maven](https://gist.github.com/sebsto/19b99f1fa1f32cae5d00). Install [Scala 2.11.8](https://www.scala-lang.org/files/archive/scala-2.11.8.rpm). Go to MXNet source code, compile scala-package by command `make scalapkg`. Compiled jar file will be created in `mxnet/scala-package/assembly/{your-architecture}/target` directory. + 4. Install [Maven](https://gist.github.com/sebsto/19b99f1fa1f32cae5d00). Install [Scala 2.11.8](https://www.scala-lang.org/files/archive/scala-2.11.8.rpm). Go to MXNet source code, compile scala-package by running command `make scalapkg`. Compiled jar file will be created in `mxnet/scala-package/assembly/{your-architecture}/target` directory. 5. Install [coursier](https://github.com/coursier/coursier), a Scala library to fetch dependencies from Maven / Ivy repositories as follows. @@ -89,7 +89,7 @@ The scala notebooks are written in [Jupyter](http://jupyter.org/) using [Jupyter Make sure coursier launcher is available in the PATH. - 6. Install [Jupyter-Scala Kernel V0.3.x](https://github.com/alexarchambault/jupyter-scala) according to the instructions given below: + 6. Install [Jupyter-Scala Kernel V0.3.x](https://github.com/alexarchambault/jupyter-scala) by following the instructions given below: ```bash git clone https://github.com/alexarchambault/jupyter-scala.git @@ -106,7 +106,7 @@ The scala notebooks are written in [Jupyter](http://jupyter.org/) using [Jupyter jupyter notebook ``` - 8. Now we are able to view and edit the notebooks on the browser using the URL: http://localhost:8888/tree/mxnet-notebooks/scala/. Choose scala211 kernel if asked. Include mxnet-scala jar created in step-4 in classpath by command `classpath.addPath("jar-path")` in the notebook you want to run. + 8. Now we are able to view and edit the notebooks from the browser using the URL: http://localhost:8888/tree/mxnet-notebooks/scala/. Choose scala211 kernel if asked. Include mxnet-scala jar created in step-4 in classpath by command `classpath.addPath("jar-path")` in the notebook you want to run. ## How to develop diff --git a/scala/basic/record_io_scala.ipynb b/scala/basic/record_io_scala.ipynb index 2963df3f6..d0b31acc4 100644 --- a/scala/basic/record_io_scala.ipynb +++ b/scala/basic/record_io_scala.ipynb @@ -34,25 +34,6 @@ "```" ] }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "classpath.addPath(\"/Users/roshanin/mxnet/scala-package/assembly/osx-x86_64-cpu/target/mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")" - ] - }, { "cell_type": "markdown", "metadata": {}, diff --git a/scala/tutorials/linear_regression_scala.ipynb b/scala/tutorials/linear_regression_scala.ipynb index 16fe9bea5..4cd816a16 100644 --- a/scala/tutorials/linear_regression_scala.ipynb +++ b/scala/tutorials/linear_regression_scala.ipynb @@ -31,25 +31,6 @@ "```" ] }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "classpath.addPath(\"/Users/roshanin/mxnet/scala-package/assembly/osx-x86_64-cpu/target/mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")" - ] - }, { "cell_type": "markdown", "metadata": {}, From 2d6d6fec7e412d161cfbf733b7887738a28d9a7a Mon Sep 17 00:00:00 2001 From: Nagmote Date: Mon, 19 Jun 2017 16:12:37 -0700 Subject: [PATCH 21/21] predict imagenet tutorial --- scala/tutorials/predict_imagenet_scala.ipynb | 409 +++++++++++++++++++ 1 file changed, 409 insertions(+) create mode 100644 scala/tutorials/predict_imagenet_scala.ipynb diff --git a/scala/tutorials/predict_imagenet_scala.ipynb b/scala/tutorials/predict_imagenet_scala.ipynb new file mode 100644 index 000000000..936b54a9f --- /dev/null +++ b/scala/tutorials/predict_imagenet_scala.ipynb @@ -0,0 +1,409 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "# Predict with pre-trained models\n", + "\n", + "This is a demo for predicting with a pre-trained model on the full imagenet dataset, which contains over 10 million images and 10 thousands classes. For a more detailed explanation, please refer to [predict.ipynb](https://github.com/dmlc/mxnet-notebooks/blob/master/python/how_to/predict.ipynb)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Jupyter Scala kernel\n", + "Add mxnet scala jar which is created as a part of MXNet Scala package installation in classpath as follows:\n", + "\n", + "**Note**: Process to add this jar in your scala kernel classpath can differ according to the scala kernel you are using.\n", + "\n", + "We have used [jupyter-scala kernel](https://github.com/alexarchambault/jupyter-scala) for creating this notebook." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```\n", + "classpath.addPath()\n", + "\n", + "e.g\n", + "classpath.addPath(\"mxnet-full_2.11-osx-x86_64-cpu-0.1.2-SNAPSHOT.jar\")\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "classpath.addPath(\"/Users/roshanin/mxnet/scala-package/assembly/osx-x86_64-cpu/target/mxnet-full_2.11-osx-x86_64-cpu-0.10.1-SNAPSHOT.jar\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Import necessary libraries:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36mml.dmlc.mxnet._\u001b[0m\n", + "\u001b[32mimport \u001b[36mml.dmlc.mxnet.module.{FitParams, Module}\u001b[0m\n", + "\u001b[32mimport \u001b[36mscala.collection.immutable.ListMap\u001b[0m\n", + "\u001b[32mimport \u001b[36msys.process._\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import ml.dmlc.mxnet._\n", + "import ml.dmlc.mxnet.module.{FitParams, Module}\n", + "import scala.collection.immutable.ListMap\n", + "import sys.process._" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Download the pretrained model as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + " 0K .......... .......... .......... .......... .......... 22% 121K 1s\n", + " 50K .......... .......... .......... .......... .......... 45% 157K 1s\n", + " 100K .......... .......... .......... .......... .......... 68% 205K 0s\n", + " 150K .......... .......... .......... .......... .......... 91% 297K 0s\n", + " 200K .......... ........ 100% 121K=1.3s" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mres2_0\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m0\u001b[0m\n", + "\u001b[36mres2_1\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m0\u001b[0m\n", + "\u001b[36mres2_2\u001b[0m: \u001b[32mInt\u001b[0m = \u001b[32m0\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\"wget http://data.mxnet.io/models/imagenet-11k/resnet-152/resnet-152-symbol.json -P model/ -q --show-progress\"!\n", + "\n", + "\"wget http://data.mxnet.io/models/imagenet-11k/resnet-152/resnet-152-0000.params -P model/ -q --show-progress\"!\n", + "\n", + "\"wget http://data.mxnet.io/models/imagenet-11k/synset.txt -P model/ -q --show-progress\"!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Initialization\n", + "We first load the model into memory with loadCheckpoint. It returns the symbol (see [symbol_scala.ipynb](https://github.com/dmlc/mxnet-notebooks/blob/master/scala/basic/symbol_scala.ipynb)) definition of the neural network, and parameters." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "log4j:WARN No appenders could be found for logger (MXNetJVM).\n", + "log4j:WARN Please initialize the log4j system properly.\n", + "log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mresnet\u001b[0m: \u001b[32mSymbol\u001b[0m = ml.dmlc.mxnet.Symbol@7ce32cb\n", + "\u001b[36margParamsResnet\u001b[0m: \u001b[32mMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mNDArray\u001b[0m] = \u001b[33mMap\u001b[0m(\n", + " \u001b[32m\"stage3_unit14_bn2_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@c296fced,\n", + " \u001b[32m\"stage3_unit17_conv1_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@75334891,\n", + " \u001b[32m\"stage3_unit8_conv3_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@783b9ecd,\n", + " \u001b[32m\"stage2_unit7_bn3_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@eeb61ac7,\n", + " \u001b[32m\"stage1_unit3_conv3_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@b5c72854,\n", + " \u001b[32m\"stage3_unit14_bn1_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@8c34f84f,\n", + " \u001b[32m\"stage3_unit10_bn1_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@b2d0a2b8,\n", + " \u001b[32m\"stage3_unit2_bn1_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@40533d09,\n", + " \u001b[32m\"stage3_unit18_conv1_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@285d08cd,\n", + " \u001b[32m\"stage3_unit20_bn1_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@53a87a2c,\n", + " \u001b[32m\"stage3_unit29_bn3_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@957e96f2,\n", + " \u001b[32m\"stage2_unit3_conv2_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@d08559ca,\n", + " \u001b[32m\"stage3_unit25_bn2_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@c8bc6afe,\n", + " \u001b[32m\"stage4_unit3_bn1_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@2d738385,\n", + " \u001b[32m\"stage1_unit3_bn1_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@92d3313e,\n", + " \u001b[32m\"stage3_unit1_conv3_weight\"\u001b[0m -> ml.dmlc.mxnet.NDArray@9e2ee99f,\n", + " \u001b[32m\"stage2_unit1_bn3_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@b299bc79,\n", + " \u001b[32m\"stage3_unit14_bn1_gamma\"\u001b[0m -> ml.dmlc.mxnet.NDArray@8666ccb1,\n", + " \u001b[32m\"stage3_unit23_bn2_beta\"\u001b[0m -> ml.dmlc.mxnet.NDArray@bd6a94a2,\n", + "\u001b[33m...\u001b[0m\n", + "\u001b[36mauxParamsResnet\u001b[0m: \u001b[32mMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mNDArray\u001b[0m] = \u001b[33mMap\u001b[0m(\n", + " \u001b[32m\"stage2_unit2_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@afe461e9,\n", + " \u001b[32m\"stage3_unit21_bn2_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@7f1aa42b,\n", + " \u001b[32m\"stage3_unit6_bn2_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@8daf19ce,\n", + " \u001b[32m\"stage3_unit27_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@5596f71e,\n", + " \u001b[32m\"stage3_unit36_bn1_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@5af9c364,\n", + " \u001b[32m\"stage2_unit2_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@288a2825,\n", + " \u001b[32m\"stage3_unit34_bn2_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@71f7a2f4,\n", + " \u001b[32m\"stage3_unit32_bn3_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@77ef95b0,\n", + " \u001b[32m\"stage3_unit19_bn2_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@be708ef0,\n", + " \u001b[32m\"stage3_unit24_bn3_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@875dbdf3,\n", + " \u001b[32m\"stage3_unit36_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@6a1d3ad4,\n", + " \u001b[32m\"stage3_unit15_bn2_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@a18108c4,\n", + " \u001b[32m\"stage3_unit1_bn2_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@74ea2c0c,\n", + " \u001b[32m\"stage1_unit3_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@ce018bfd,\n", + " \u001b[32m\"stage3_unit16_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@59b2b0ed,\n", + " \u001b[32m\"stage3_unit14_bn1_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@77839f79,\n", + " \u001b[32m\"stage3_unit15_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@83704fc2,\n", + " \u001b[32m\"stage2_unit4_bn3_moving_mean\"\u001b[0m -> ml.dmlc.mxnet.NDArray@c9cd7bfe,\n", + " \u001b[32m\"stage2_unit4_bn3_moving_var\"\u001b[0m -> ml.dmlc.mxnet.NDArray@d96fd59e,\n", + "\u001b[33m...\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val (resnet, argParamsResnet, auxParamsResnet) = Model.loadCheckpoint(\"model/resnet-152\", 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Create a model for this model on GPU 0.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[36mmod\u001b[0m: \u001b[32mModule\u001b[0m = ml.dmlc.mxnet.module.Module@d76fa60\n", + "\u001b[36mdataShapesResnet\u001b[0m: \u001b[32mListMap\u001b[0m[\u001b[32mString\u001b[0m, \u001b[32mShape\u001b[0m] = \u001b[33mMap\u001b[0m(\u001b[32m\"data\"\u001b[0m -> (1,3,224,224))" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val mod = new Module(resnet, contexts = Context.cpu())\n", + "val dataShapesResnet = ListMap(\"data\" -> Shape(1, 3, 224, 224))\n", + "mod.bind(dataShapes=dataShapesResnet, forTraining = false)\n", + "mod.setParams(argParamsResnet, auxParamsResnet)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we define the function to obtain an image by a given URL and the function for predicting.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "classpath.addPath(\"/usr/local/opt/opencv3/share/OpenCV/java/opencv-320.jar\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[32mimport \u001b[36morg.opencv.core.Core\u001b[0m\n", + "\u001b[32mimport \u001b[36morg.opencv.imgcodecs.Imgcodecs\u001b[0m\n", + "\u001b[32mimport \u001b[36morg.opencv.imgproc.Imgproc\u001b[0m\n", + "\u001b[32mimport \u001b[36mml.dmlc.mxnet.NDArray\u001b[0m\n", + "\u001b[32mimport \u001b[36morg.opencv.core.Mat\u001b[0m\n", + "\u001b[32mimport \u001b[36morg.opencv.core.CvType\u001b[0m\n", + "\u001b[32mimport \u001b[36mjava.util.ArrayList\u001b[0m\n", + "\u001b[32mimport \u001b[36morg.opencv.core.Size\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import org.opencv.core.Core\n", + "//import org.opencv.highgui.Highgui\n", + "import org.opencv.imgcodecs.Imgcodecs\n", + "import org.opencv.imgproc.Imgproc\n", + "import ml.dmlc.mxnet.NDArray\n", + "import org.opencv.core.Mat\n", + "import org.opencv.core.CvType\n", + "import java.util.ArrayList\n", + "import org.opencv.core.Size" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "defined \u001b[32mfunction \u001b[36mgetImage\u001b[0m" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def getImage(filename: String) ={\n", + " System.loadLibrary(Core.NATIVE_LIBRARY_NAME);\n", + " println(String.format(\"Loaded OpenCV %s\", Core.VERSION))\n", + " println(filename)\n", + " val mat = Imgcodecs.imread(filename)\n", + " val greyMat = new Mat()\n", + " Imgproc.cvtColor(mat, greyMat, Imgproc.COLOR_BGR2RGB)\n", + " val resizeMat = new Mat()\n", + " Imgproc.resize(mat, resizeMat, new Size(224, 224))\n", + " \n", + " val typeMat = new Mat()\n", + " resizeMat.convertTo(typeMat, CvType.CV_32F)\n", + " \n", + " val size = (typeMat.total * typeMat.channels).toInt\n", + " val buff = new Array[Float](size)\n", + " typeMat.get(0, 0, buff)\n", + " \n", + " println(buff)\n", + " typeMat\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loaded OpenCV 3.2.0\n", + "0.jpg\n", + "[F@4a8d4eba\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[36mimg\u001b[0m: \u001b[32mMat\u001b[0m = Mat [ 224*224*CV_32FC3, isCont=true, isSubmat=false, nativeObj=0x7f98f89efb50, dataAddr=0x16c766020 ]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "val img = getImage(\"0.jpg\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Scala 2.11", + "language": "scala211", + "name": "scala211" + }, + "language_info": { + "codemirror_mode": "text/x-scala", + "file_extension": ".scala", + "mimetype": "text/x-scala", + "name": "scala211", + "pygments_lexer": "scala", + "version": "2.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}