{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "%pylab inline" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "output_type": "stream", "stream": "stderr", "text": [ "WARNING: pylab import has clobbered these variables: ['datetime']\n", "`%pylab --no-import-all` prevents importing * from pylab and numpy\n" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "from vizgrimoire.metrics.query_builder import SCRQuery\n", "from vizgrimoire.metrics.metrics_filter import MetricFilters\n", "import vizgrimoire.metrics.scr_metrics as scr" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "#database object\n", "user=\"root\"\n", "password=\"\"\n", "scr_db = \"wikimedia_gerrit_20150224\"\n", "identities_db =\"wikimedia_git_20150224\"\n", "people_out = [\"Translation updater bot\", \"\", \"\", \"\"]\n", "dbcon=SCRQuery(user, password, scr_db, identities_db)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "#metrics filter object\n", "period = MetricFilters.PERIOD_MONTH\n", "startdate=\"'2013-01-01'\"\n", "enddate=\"'2015-03-01'\"\n", "\n", "filters = MetricFilters(period, startdate, enddate, [\"autoreviews\", \"fake\"])\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "reviewers = scr.ActiveCoreReviewers(dbcon, filters)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "reviewers.get_agg()\n", "#get query: reviewers._get_sql(False)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 19, "text": [ "{'core_reviewers': 295L}" ] } ], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "from datetime import datetime\n", "dates = []\n", "unixtime = reviewers.get_ts()[\"unixtime\"]\n", "for i in unixtime:\n", " dates.append(datetime.fromtimestamp(float(i)))\n", "ts = reviewers.get_ts()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "fig = plt.figure()\n", "plot(dates, ts[\"core_reviewers\"])\n", "fig.autofmt_xdate()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAEBCAYAAABlki5mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XdYVNfWB+DfgIhEsaKgYLkqCCggasQSCUggUaPBLjZi\ni37GRA2KXnMjeA2BhKhRE81N7Bq7UbChKGIXLBFUUIxY6DYQlT6zvj92GOlSZpgZWO/zzCMczpxZ\nwp416+yz9z4SIiIwxhjTWFqqDoAxxljVcCJnjDENx4mcMcY0HCdyxhjTcJzIGWNMw3EiZ4wxDVdm\nIp88eTIMDQ1hZWVV7GfLli2DlpYWnj9/Lt/m6+sLU1NTmJub4/jx44qPljHGWDFlJvJJkyYhKCio\n2Pa4uDgEBwejbdu28m1RUVHYtWsXoqKiEBQUhJkzZ0Imkyk+YsYYY4WUmcj79euHJk2aFNv+1Vdf\n4Ycffii0LSAgAG5ubtDR0UG7du3QsWNHhIeHKzZaxhhjxVS4jzwgIAAmJiawtrYutD0xMREmJiby\n701MTJCQkFD1CBljjJWpTkV2zsjIwHfffYfg4GD5trJm+EskkspHxhhjrFwqlMjv3buHBw8ewMbG\nBgAQHx+P7t27IywsDMbGxoiLi5PvGx8fD2Nj42LH6Nq1KyIiIqoYNmOM1S42Nja4fv16yT+kt7h/\n/z516dKlxJ+1a9eOnj17RkREt27dIhsbG8rOzqbY2Fhq3749yWSyYs8px0sqhJeXV7W8TlWoe4wc\nX9VwfFWn7jFWZ3xl5c4y+8jd3NzQp08fxMTEoHXr1ti4cWOhnxfsOrG0tMSoUaNgaWmJAQMGYM2a\nNdy1whhj1aDMrpUdO3aU+eTY2NhC3y9atAiLFi2qelSMMcbKrcbO7HRwcFB1CG+l7jFyfFXD8VWd\nuseoLvFJ/ul7qb4XlEjKHOmiCOnpwIQJQECAUl+GMcaqTVm5s0ZW5ElJQGAg8OyZqiNhjDHlq5GJ\nPC1N/HvjhmrjYIyx6lCjE3lkpGrjYIyx6lAjE3lqqviXK3LGWG1QIxN5WhrQuTNX5Iyx2qHGJvL3\n3gNu3QKkUlVHwxhjylVjE3nbtoCBAVBkzhJjjNU4NTaRN24MWFtz9wpjrOar8YmcL3gyxmq6Gp/I\nuSJnjNV0nMgZY0zD1dhE3qQJ0LEjkJgIvHql6ogYY0x5amwib9wYqFMHsLAAbt5UdUSMMaY8NS6R\nE4mZnY0bi+/5gidjrKarcYk8KwuQSIB69cT33E/OWO0ik6k6gupX4xJ5frdKPk7kjNUeixYBbdoA\nv/8O5OWpOprqU2sSefXePoMxVt02bwZ27QI2bBD/WloCu3fXjgq9xify5s0BXV0gPl51MTFWWxEB\nT58q/yYvFy4A8+cDBw8CLi7AiRPAmjWAvz/QowcQFFSzi7kyE/nkyZNhaGgIKysr+bb58+fDwsIC\nNjY2GDZsGF68eCH/ma+vL0xNTWFubo7jx48rL+oyFE3kAHevMKYMWVliLaOzZ4GdO4HlywEPD2DM\nGKBfP6B9e0BPDzAzE4+TJ5UTx8OHwIgRoiK3tHyz/YMPgPBw4D//Ab76CnB0BC5eVE4MqlbmPTvP\nnj2LBg0aYOLEibjxz9CP4OBgODk5QUtLCwsXLgQA+Pn5ISoqCmPHjsXly5eRkJCADz74ADExMdDS\nKvxZoex7du7YIe7VuXPnm23z5okFtP4JlzH2Fi9firPY0h4JCeLeuC1bAsbGpT9atQLeeQc4fRoY\nORJYvx4YPFixcfbtC0yeDMyZU/p+eXnA1q2AtzdgYwP4+AAF6lONUFburFPWE/v164cHDx4U2ubs\n7Cz/2s7ODvv27QMABAQEwM3NDTo6OmjXrh06duyI8PBw9OrVq4rhV0xpFXlQULWGwZhaIwJCQ4G7\nd98k5oKJOi8PMDEp/OjaFRg0SHxtbCy6LbXK2Tn7/vvAoUMiia9aBYweXfX/g0wGjB8P2NkBs2eX\nvW+dOsCkScDYscCvvwLOzuKxZIk4c9B0ZSbyt9mwYQPc3NwAAImJiYWStomJCRISEqoWXSXkz+os\nyNoa+OGHag+FMbWUkwN8/jlw5ozoAjExAXr3Lpy0GzUSw3gVqWdPIDgY+Ogj4PVrUUVXxaJFwIsX\nwJ495Y9VV1ck/cmTgRUrRExjxojuFyOjqsWjSpVO5D4+Pqhbty7Gjh1b6j4SRbeEckhLA5o2LbzN\nwgK4dw/IzhZ/SMZqq+fPRX+yvj5w9SrQoEH1vr61tTgT+OADsXTGl19W7jibN4sEHhYG1K1b8efr\n6wOLFwMzZwK+vuKOYuPGiXg6dqxcTKpUqUS+adMmHDlyBCcLXL0wNjZGXFyc/Pv4+HgYGxuX+Hxv\nb2/51w4ODnBwcKhMGCVKTS1+qqSrK7ZFR4vTQ8Zqo5gY4OOPgU8+Afz8AG1t1cRhZibOBvKT+aJF\nFXt+/giV0FBx7asqDAyAZcvExdA1a4A+fYBevUTV3r+/4s9KKiI0NBShoaHl25ne4v79+9SlSxf5\n90ePHiVLS0t68uRJof1u3bpFNjY2lJ2dTbGxsdS+fXuSyWTFjleOl6ySkSOJdu4svn3MGKItW5T6\n0oyprZAQohYtiH7/XdWRvJGYSGRpSbRwIVEJqaJEDx4QtWxJdOSIcmLKyBC/o86dibp0IVq3TmxT\nB2XlzjIrcjc3N5w+fRpPnz5F69atsWTJEvj6+iInJ0d+0bN3795Ys2YNLC0tMWrUKFhaWqJOnTpY\ns2aNyrpWil7sBHgIIqu91q8XVe+OHaLKVBctW4rRLB9+KCrzlSvLvnj68qW4WDp/PjBggHJi0tMD\npk4FpkwRwyV/+kn87qZNE90wrVop53VfvxYXnMt6lKXM4YfKoOzhhz17AqtXiyvZBR0+LK6WHzum\ntJdmTK1IpcC//w3s3y/av5mZqiMq2YsXYjSMqamYWl+nhPJSJgOGDgVatAB++616uzxiYkTu2L4d\nGDhQdLu8+275niuTAU+evEnG+SOEij6ys8WHRFlDOf/1r9JzZ41L5GZmYnZXp06Ftz96JJJ7UpLS\nXpoxtfHqlRial5YG7NsHNGum6ojK9vo14OoqRpxt21b8AubChcClS8Dx45W7uKkIaWni7Gb1apFY\n58wBbG3LrqKTk4GGDctO0MbGYoDG2z6cysqdNS6Rt2ghlq01NCy8nUg0krt3xfhXxmqq+HjRBdGt\nG7B2reoSX0VlZYnx5VKpGJGipye2b9kixnuHhVX94qYi5OWJSYerVgFxcW+fEKWokXK1JpETiV/a\ny5cl//Ls7cXMLnXqJ2TVRyYDNm0Sp/LTp4sZhzXNlSuisp09W8xoVuWoi8rIzQXc3UUlGxAgijJX\nVzFCpeD0+9qorNxZoxbNyswU/WulfQLyBc/aKzpazC787Tfg3DnRH/u//4nEUVPs3SsuAv78s7gg\nqGlJHAB0dMRU+g4dxPDEktZQYcXVqERe2oiVfJzIa5/sbHEW1q+fmMF3/rzoMz5wQCQ+S0sxmkOT\nlzolEpNavvpK9CG7uqo6oqrR1hYfuM7OgJeX8kao1CQ1qmslKkp8gkdFlfzzixeBL74Qp5+s5jt7\nFvjsM3EB/JdfxNTzokJCxMiO7GyxkNLAgdVbyRKJi2Lh4eJx7Zo4s6yIly/FmWhgoPKGxzHVqzV9\n5OfPi1PKCxdK/vnLl+Ii6MuXqpvVxpQvLQ1YsODNkNOhQ8tOzkSiP/brr8Xoge++ExW8smK7cuVN\n4g4PFxfP7OzE0Nnu3cX08YqQSMTz8i8Ospqp0qsfapq3da3o64tJCH//XXx4ItN8RKK7ZPZs0b1w\n65ZY/OltJBKx/+DBwB9/ABMmiLU3fHyqtqRDVhYQEfEmYV++LKrvbt1E0h43TkyCadNGM/uzmfqo\nVYkceNNPzom8Znn0SKzoFxsrhq717VvxY2hrAxMniiFwv/0m+mYdHIClS0teSCk3VyTmR4+KPx4+\nBO7fF+2sZ09xHE9PsYBbSRNeGKuKGtWkKpLIR46snpiYckmlYpTG0qVigsa+fVUfN62rK66lTJok\nKuZevcRCU02bFk7WT56IpU/btHnzsLYWC1O1aSOSf00c4sjUT61L5FZWYngT03wREWINDD09cX1E\n0WdZDRqIfvMZM0SFrqUlukXyk3bLllxdM/VQo5phWtrbZ23yEETNlpws1g7Zu1f8Hf38ROVc3jvV\nVEazZmJkC2PqqsYlclPTsvfp0AF4/Fjcb7Bhw+qJi1VNfDzw559vkvegQcCsWWLVPO66YKwGJvKi\nt3krSltbjEi4eVMsIs/U04MHor973z7g9m1gyBAxtNTZGahXT9XRMaZealwif1sfOfCme4UTuXr5\n+2+RuPfuFSM+XF3F7bj699echZ8YU4UalchTUyuWyJl6OHFCVNuJicCwYaLf+/33+UIiY+VVo94q\n5a3IrayA3buVHw97u19/FWuhrFsnxm3zjFvGKq7WJvIbN8RMQJ5RpxpSqVhm9ehRsRqhJt65nDF1\nUWMSOZFI5OWZkm1gIMYIP3oEtG2r/NhYYS9fAm5uYgr7xYtvv0DNGCtbjVnG9vVrMSOvvBfFuJ9c\nNR49EtPnjY1FNc5JnLGqKzORT548GYaGhrCyspJve/78OZydnWFmZgYXFxekpaXJf+br6wtTU1OY\nm5vj+PHjyou6BOXtVsnHibz6hYUBvXuLCTy//ipuIsAYq7oyE/mkSZMQFBRUaJufnx+cnZ0RExMD\nJycn+Pn5AQCioqKwa9cuREVFISgoCDNnzoSsGlfrr2git7LSvET+229iNEdoqKojqbjdu8UaJL/+\nCsydy9cmGFOkMhN5v3790KTIuW9gYCDc3d0BAO7u7jhw4AAAICAgAG5ubtDR0UG7du3QsWNHhIeH\nKyns4mp6Rf70KfCf/4ilVqdMEbMar15VdVRvRwR8+60YXnjihIifMaZYFe4jT0lJgeE/t6g3NDRE\nSkoKACAxMREmBW7BYmJigoSEBAWF+XblmdVZkLm5mD2YlaW0kBTKy0ssrzpvnrj/5CefiKQ4ahRw\n546qoytZdrZYFjYwELh0CbCxUXVEjNVMVRq1IpFIICnjHLm0n3l7e8u/dnBwgIODQ1XCAFDxirxu\nXbEuS1SUWNFOnd28KdbYjo4W39etC8ycKe42vno18N57IrF7eQGtW6s21nxPnog787RsKbqCeE0U\nxiomNDQUoeXsR61wIjc0NERycjKMjIyQlJSEFi1aAACMjY0RFxcn3y8+Ph7GxsYlHqNgIleU8s7q\nLCi/e0WdEzmRuKnuf/4jVuErqH59YOFCYPp0wN9f3M3m00/FSn0GBioJF4D4cBw8WAwx/O9/lbsy\nIWM1VdEid8mSJaXuW+G32JAhQ7B582YAwObNm+H6zy27hwwZgp07dyInJwf379/H3bt30bNnz4oe\nvtIqWpEDmnHB89Ahsfrf//1f6fs0aSLuM3nrlujOMDcHliwR47WrW3CwuBuOl5foG+ckzpjylfk2\nc3NzQ58+fXDnzh20bt0aGzduxMKFCxEcHAwzMzOEhIRg4cKFAABLS0uMGjUKlpaWGDBgANasWVNm\nt4uiVSaRq/sFz5wcwMMDWL68fEP1jIzE3XLCw8UCVKamwE8/Vd91gHXrxP0u9+0TfeOMseohIWXd\n0r60FyzjTtBVMWWKGKM8dWr5n5N/I9x/rteqneXLxUiPI0cq9/wbN0SXzPXrYtjfgAGKjS8fEfDN\nN8DOnWKSz9vWhGeMVVxZubPGTNGvTEXeqhWQlycS+T8DcdTGkyeAry9w9mzlj2FlBQQEAKdOiQrZ\nzU3cGV6RE3Gys8WH6L17Yrr92+7QxBhTvBrTg1mZRC6RqG/3yuLFwNixor+7qhwdgb/+Ehch+/UT\nwy4VITUV+OgjIDMTCAnhJM6YqtTqRA5U/YLnqVPA8OHAixeVP0ZRkZHi1mZeXoo7poEBcPCgGHfe\ns6fox66KBw/Emim2tmLWpp6eQsJkjFVCrU/kVanIExJE1ZybCzg5idmXVUUkprAvXgw0bVr14xUk\nkYihjIcPA56eYix6ZS6EXr0qkviMGaIfn9cQZ0y1alQir8xKepVN5Lm5wJgxwOefi37oDz4Qw+6S\nkip+rIICA8Wd4qdPr9pxyvLuu8C1a8CzZ0CvXhWbGXrokOhO+fln4MsvlRcjY6z8akQiJxJdG+VZ\ni7yozp1FIsvLq9jzvv4a0NcHFi0Sla6fn6jO7e2Bhw8rHgcgLhx6eAArVij/NmeNGolRJv/3f2Jm\n6JYtb3/O2rXAtGkimQ8dqtz4GGPlVyNGrbx8KfpoK5P86tcHTEyAmBjA0rJ8zwkIAHbtElVtwQkv\nixaJ49nbi4kxZmYVi2XVKsDCAnBxqdjzKksiEZV/nz6i7/zkSeCXX8RNNwqSycQM0oAAcTefDh2q\nJz7GWPnUiIq8sv3j+SrSvRIbK6rSXbuKT5kHgNmzxUVKR0cxjru8UlKA778Hfvyx/M9RFCsr4MoV\n0dfdo0fh30VWlhi2eOGCeHASZ0z9cCJH+UeuZGUBI0aISTa9epW+3+TJwLJlgLMzcPly+WL45hsx\n1rtTp/Ltr2j16wMbNoj/m5OT6EZ59kz8H4jExKSSPrgYY6rHiRzlr8jnzBE3Cf7ii7fvO2YM8Pvv\nwKBBwJkzZe97/brotli8uHzxKtP48cD58+ImFu3bi9myO3cC9eqpOjLGWGlqRB+5IhL527pBtm0T\nY8YvXy7/3W0GDwZ27BBV/Nat4mYQRRGJDwhv76r9HxTJzEzM0gwPF/39jDH1xhU5gH/9C3j+XByn\nJLduibHde/cCDRtW7NhOTsD+/WIxqf37i/98/37RhTFtWsXjVqZ69TiJM6YpOJFDjDzp0qXkqvzV\nK1FR+/uLvvTK6NsXCAoSE3C2bXuzPStL3PGnOoYbMsZqrhqTyCszGaigki54EolKuW9fccOGqujW\nTQzvW7gQ+N//xLaVK8XrfvBB1Y7NGKvdakQdmJYmxoJXRUkXPNeuFbdXu3ixasfOZ2kJnD4tEndc\nnFhaVlHHZozVXjWmIq/qhcKiFzwvXxYXIPfsUeyCUB06iFEse/aIYYq8djdjrKpqREVemft1FmVl\nJRK5TCY+GEaNEhWzMhJt69ai+lfkuuCMsdqLK/J/NGkiHrGx4u70Q4cCw4YpJr6S6Ory/SwZY4pR\nIypyRSRyQFTlU6eKlQ2//77qx2OMsepQI2pCRSVya2sxZnzXLu72YIxpjkoncl9fX3Tu3BlWVlYY\nO3YssrOz8fz5czg7O8PMzAwuLi5IK22GjYIpKpF//rmYvVnVETCMMVadJFSJW9o/ePAA/fv3R3R0\nNHR1dTF69GgMHDgQt27dgoGBATw9PfH9998jNTUVfn5+hV+wjDtBV4ZMJqrn7GyeVMMYq7nKyp2V\nqsgbNmwIHR0dZGRkIC8vDxkZGWjVqhUCAwPh7u4OAHB3d8eBAwcqH3U5vXwpVu7jJM4Yq60qlcib\nNm0KDw8PtGnTBq1atULjxo3h7OyMlJQUGBoaAgAMDQ2RkpKi0GBLoohZnYwxpskqVcfeu3cPP/30\nEx48eIBGjRph5MiR2FZwERGI0wBJKcsEent7y792cHCAg4NDZcIAoLj+ccYYUyehoaEIDQ0t176V\nSuRXrlxBnz590OyfOw0MGzYMFy9ehJGREZKTk2FkZISkpCS0aNGixOcXTORVpYjJQIwxpm6KFrlL\nliwpdd9Kda2Ym5vj0qVLyMzMBBHhxIkTsLS0xODBg7F582YAwObNm+Hq6lqZw1cIV+SMsdquUhW5\njY0NJk6ciB49ekBLSwvdunXDZ599hpcvX2LUqFFYv3492rVrh927dys63mI4kTPGartKDT+s0gsq\nePjhTz8B9++LJWEZY6ymUvjwQ3XCFTljrLbjRM4YYxqOEzljjGk4TuSMMabhakQi55mdjLHarEYk\ncq7IGWO1mcYncp7ZyRir7TQ+kXNFzhir7TR6QpBUCtStK27Nxve/ZIzVZDV2QlB6OqCvz0mcMVa7\naXQK5G4VxhjjRM4YYxqPEzljjGk4jU/kPBmIMVbbaXwi54qcMVbbcSJnjDENp9GJnGd1MsaYhidy\nrsgZY4wTOWOMabxKJ/K0tDSMGDECFhYWsLS0RFhYGJ4/fw5nZ2eYmZnBxcUFaWlpioy1hBg4kTPG\nWKUT+ezZszFw4EBER0cjMjIS5ubm8PPzg7OzM2JiYuDk5AQ/Pz9FxloMJ3LGGKvkolkvXryAra0t\nYmNjC203NzfH6dOnYWhoiOTkZDg4OOD27duFX1CBi2ZZWwNbtwI2Ngo5HGOMqS2FL5p1//59NG/e\nHJMmTUK3bt0wbdo0vH79GikpKTA0NAQAGBoaIiUlpfJRlwNX5IwxVslEnpeXh2vXrmHmzJm4du0a\n6tevX6wbRSKRQCKRKCTI0vDMTsYYA+pU5kkmJiYwMTHBu+++CwAYMWIEfH19YWRkhOTkZBgZGSEp\nKQktWrQo8fne3t7yrx0cHODg4FDhGPLygIwMoEGDyvwPGGNMvYWGhiI0NLRc+1b6xhL29vZYt24d\nzMzM4O3tjYyMDABAs2bNsGDBAvj5+SEtLa3ESl0RfeTPngGmpsDz51U+FGOMqb2ycmelE3lERASm\nTp2KnJwcdOjQARs3boRUKsWoUaPw6NEjtGvXDrt370bjIp3Yikrk9+4Bzs5AkeutjDFWIyklkSsj\nmIq4ehWYNg24dk0BQTHGmJqrkbd64xErjDEmcCJnjDENx4mcMcY0HCdyxhjTcJzIGWNMw2l0IudZ\nnYwxpuGJnCtyxhjT4ETOt3ljjDFBYxM5V+SMMSZwImeMMQ3HiZwxxjQcJ3LGGNNwGpnIc3OBrCxe\ni5wxxgANTeQvXgCNGgFKvgERY4xpBI1M5Nytwhhjb2hsIudZnYwxJmhsIueKnDHGBI1M5DyrkzHG\n3tDIRM4VOWOMvcGJnDHGNFyVErlUKoWtrS0GDx4MAHj+/DmcnZ1hZmYGFxcXpKWlKSTIojiRM8bY\nG1VK5CtXroSlpSUk/wzo9vPzg7OzM2JiYuDk5AQ/Pz+FBFkUJ3LGGHuj0ok8Pj4eR44cwdSpU0FE\nAIDAwEC4u7sDANzd3XHgwAHFRFkEJ3LGGHuj0ol87ty58Pf3h5bWm0OkpKTA0NAQAGBoaIiUlJSq\nR1gCTuSMMfZGpRL5oUOH0KJFC9ja2sqr8aIkEom8y0XReEIQY4y9UacyT7pw4QICAwNx5MgRZGVl\nIT09HRMmTIChoSGSk5NhZGSEpKQktGjRosTne3t7y792cHCAg4NDhV6fK3LGWE0XGhqK0NDQcu0r\nodJK6nI6ffo0fvzxRxw8eBCenp5o1qwZFixYAD8/P6SlpRW74CmRSEqt4svL2BgIDxf/MsZYbVBW\n7lTIOPL8LpSFCxciODgYZmZmCAkJwcKFCxVx+GJ4ZidjjL1R5Yq8wi9YxYo8O1usQ56Tw8vYMsZq\nD6VX5NXpxQtRjXMSZ4wxQeMSOV/oZIyxwjiRM8aYhuNEzhhjGo4TOWOMaTiNTOQ8q5Mxxt7QyETO\nFTljjL2hcYmcJwMxxlhhGpfIuSJnjLHCOJEzxpiG40TOGGMajhM5Y4xpOE7kjDGm4TiRM8aYhuNE\nzhhjGk6jEnlWFiCTAXp6qo6EMcbUh0Ylcl6LnDHGitOoRM6zOhljrDiNSuTcP84YY8VxImeMMQ1X\nqUQeFxcHR0dHdO7cGV26dMGqVasAAM+fP4ezszPMzMzg4uKCtLQ0hQbLiZwxxoqrVCLX0dHBihUr\ncOvWLVy6dAm//PILoqOj4efnB2dnZ8TExMDJyQl+fn4KDZYTOWOMFVepRG5kZISuXbsCABo0aAAL\nCwskJCQgMDAQ7u7uAAB3d3ccOHBAcZGCEzljjJWkyn3kDx48wF9//QU7OzukpKTA0NAQAGBoaIiU\nlJQqB1gQJ3LGGCuuSon81atXGD58OFauXAl9ff1CP5NIJJAoeMA33+aNMcaKq1PZJ+bm5mL48OGY\nMGECXF1dAYgqPDk5GUZGRkhKSkKLFi1KfK63t7f8awcHBzg4OJTrNbkiZ4zVFqGhoQgNDS3XvhIi\nooq+ABHB3d0dzZo1w4oVK+TbPT090axZMyxYsAB+fn5IS0srdsFTIpGgEi8JAPjoI2DOHPEvY4zV\nJmXlzkol8nPnzsHe3h7W1tby7hNfX1/07NkTo0aNwqNHj9CuXTvs3r0bjYuU0FVJ5HZ2wMqVQK9e\nlXo6Y4xpLIUncmUF8zadOgEBAYC5uYKDYowxNVdW7uSZnYwxpuE0JpETcSJnjLGSaEwiz8oSy9fW\nq6fqSBhjTL1oTCLnapwxxkrGiZwxxjScRiVyntXJGGPFaVQi54qcMcaK40TOGGMaTmMSOd+vkzHG\nSqYxiZwrcsYYKxkncsYY03CcyBljTMNxImeMMQ3HiZwxxjQcJ3LGGNNwGpXIeWYnY4wVp1GJnCty\nxhgrTiMSOZGYENSokaojYYwx9aMRiTwjA9DRAXR1VR0JY4ypH41I5NytwhhjpVN4Ig8KCoK5uTlM\nTU3x/fffK+SYlUnkoaGhCnltZVL3GDm+quH4qk7dY1SX+BSayKVSKWbNmoWgoCBERUVhx44diI6O\nrvJxOZGrBsdXNRxf1al7jOoSn0ITeXh4ODp27Ih27dpBR0cHY8aMQUBAQJWPy10rjDFWujqKPFhC\nQgJat24t/97ExARhYWHF9svIqNhxHz/mRM4YY6UiBdq7dy9NnTpV/v3WrVtp1qxZhfaxsbEhAPzg\nBz/4wY8KPGxsbErNvQqtyI2NjREXFyf/Pi4uDiYmJoX2uX79uiJfkjHGaj2F9pH36NEDd+/exYMH\nD5CTk4Ndu3ZhyJAhinwJxhhjRSi0Iq9Tpw5+/vlnfPjhh5BKpZgyZQosLCwU+RKMMcaKkBARqToI\nxhhjlacRMztLc+rUKZw7dw45OTmqDqVEhw8fxt69e/H06VNVh1KqzMxMZGZmqjqMUu3btw/fffcd\ngoKCVB1KMUePHsUff/wBAJDJZCqOpmzqHN+LFy+QnJwMAFC3uvLMmTMYPnw47ty5o+pQyqSRifzm\nzZv45JNDuqojAAAaiklEQVRP8PXXX8Pf3x8rVqxAenq6qsOSi46OxieffILvvvsOBw4cgJubm6pD\nKpGvry9cXFwwc+bMQhep1UF8fDwGDBiA1atXw8DAAJMmTUJISIiqw5J78uQJ5syZg6+//hqPHz+G\nlpb6vZUCAwPh4+ODzMxMaGlpqV2SBIDbt2/D1NQUy5YtAwBIJBIVR1TYX3/9hZs3byIsLEytckxR\n6tf63kImk8HHxwcODg64cOECZs2ahaioKDRs2FDVocmFhISgb9++OH/+PLZt24YnT54gPj5e1WHJ\nPX36FH379kVERAR2796N169fY+nSpaoOq5CYmBiMHDkSoaGh+OyzzzBt2jS1SUREBD09PYwcORL9\n+/eHp6enqkMq0Zo1axAYGIj9+/erOpRSaWlpoWfPnsjIyJBPHlSXvzMApKamwsLCApcvX0ZkZKSq\nwymVxiTy7OxsAOIPv2HDBsydOxcAcO7cOSQkJCAkJAQpKSkqi+/Fixfyr6dNmyZ/cy9evBi6urrY\ns2dPoX1UqXHjxlizZg127tyJli1bYujQoWjXrh1ev36t0riSkpLkX7/33nuYPHkyAGDZsmXw8/Mr\n1JVR3fLbn0wmg0QiwbNnzxAeHo6lS5fixo0bClmKQlGICK9fv4aBgQFGjx6N8+fPIzY2FhKJBHl5\neaoOD8CbZB0fH486deqgR48eOH78OLKyslRWlee3PyKCVCoFEaFZs2ZYtGgR6tati8jISKSmpiKj\nojMaq4HaJ/JDhw7ByckJ//vf/+Tb9PT0AIiK49y5cxg6dCjWr1+P5cuXV3tfYHBwMDp27Ii1a9fK\nE7WOjg4A4Nq1a4iIiIC/vz9OnjwJf39/JCYmVmt8APDy5Uts2LABDx8+BABoa2vDxsYGRAQ/Pz+M\nGzcO165dw8iRI3Hr1q1qj+/SpUswNDSEi4uLfFvdunUBAH///Teys7Nx5swZ2Nvb45tvvpH3p1aH\nou1PS0sLMpkM77zzDmxtbWFsbIzPPvsMY8eOxaeffqqyvuiCRYJEIkH9+vVhYGCAli1bokGDBjh+\n/DgAMbJMFfLb4KNHjwptb9y4MRwcHGBnZ4cGDRpg/fr1OH36dLXGVrT9SSQSaGtrQyKRICIiAnXr\n1sWXX36JXbt2wd7eHufOnavW+MpDrRN5bGwsfHx8YGJigjt37iAiIgIAkJubCwCYOnUqTp48ic8/\n/xxTp07F48ePizUUZUpKSsLhw4dha2uL+Ph43Lx5E4BoCEQEW1tbBAQEwN7eHitWrEBQUFC1V0RX\nr15F586dsWDBApw9exaZmZny+CQSCQYMGICMjAzs3bsXpqamOHLkSLXGl5GRgbNnz+K7776Dvr4+\nNm7cCODNxbn27dtj0aJF6NWrF4YMGQIrKyts2bKlWmIrrf1paWkhJSUFz549w/3793Hw4EHExsai\nUaNG0NLSqta/cUmFhEwmw7Nnz/Dw4UO4ubnBxcUF+/btg6urq7yNVqeCbfDMmTPyNgiI33FGRgYs\nLS3x6NEjeHp6yq+FVMeHYmntLy8vD0SENm3aIDExEXPmzMHff/+NDh06oGvXrkqPq6LULpEX/OO1\nb98e27Ztg7e3NwwMDPDnn38CeFPx5v8LAM2bN0dGRkahtV6UQSqVyqvqpk2b4quvvsKePXugo6OD\n06dPF6oWC54impqawsTEBFKpVKnxFaWjo4OtW7di2bJlCAsLw+3btwvFZmNjg3r16gEA3n//fVy6\ndEnpMeXl5SEmJgYZGRl45513MHz4cEyZMgX/+c9/4O/vj5cvX8ovHha8iJibmwsDAwM4ODgoLbby\ntD9A/O1v3rwJOzs79O3bF3/88QcOHTqEnJycaqt6SysktLS00KxZM3Tq1AnHjh3Djz/+iIiICNSr\nVw9dunSpltgKKq0NAkD9+vVx69YtWFlZISEhAePGjYO+vr78/6EM5Wl/derUgUQiwb179+Dm5oZ+\n/frh0qVL0NHRQWhoqNp0UeXT9vb29lZ1EPl+//13TJs2DQ8ePEB6ejosLCzQtGlTNGnSBFlZWbhy\n5Qp0dXXRoUMH+RsuIyMDmzZtwtdffw0XFxe89957AJRz9Xvt2rX47LPPEBoaCl1dXZiYmMDIyAgA\n0KxZMxw+fBjNmjXDv/71L2hrayMrKwvZ2dlYt24dZsyYgZ49e2LYsGFKHeEQExODX3/9FVKpFG3b\ntoWhoSHatWsHc3NzBAYGIjs7G2ZmZvLuqXz37t3DTz/9BEdHR/Ts2VNp8f35559wdHREdHQ0Dhw4\nABcXF7Rq1QqA+LALDg5GdHQ0PvjgA/nfODExEbt27cL06dPRtm1bfPrpp0pJluVpf3Xr1kXHjh2R\nk5OD1q1bY/ny5XB2doaZmRnq1asHGxsb+Wm5MkilUiQnJ0NfXx9169aFtbU1pk2bhuDgYDx58gQd\nO3aEvr4+Hj16hPXr12PTpk0YNmwY5s6di9u3b6NOnTowMzNTSmz5ytMGTU1Noaenh6SkJFy4cAHz\n5s2Dr68vtLS0cOfOHdja2uKdd95ReGwVaX8A4OTkhLlz58LR0RGNGjWCgYEBnJycoKtutytT3JJZ\nVRMeHk7du3enS5cu0d69e8nOzo6OHj0q//njx4/J39+fvvjiC/m2nJwc+vnnn6l///505coVpcb3\n7NkzGjBgAN24cYOOHDlCs2fPpvnz5xfaZ+nSpeTh4UGPHz+Wbzty5AgNHz5c6fERER0/fpwMDQ3J\nw8ODPvzwQ/Lx8aEnT54UisXd3Z1OnDgh35aYmEh+fn5kampK33//vVLje/XqFU2cOJEuXbpEREST\nJk2ixYsX082bN+X73Llzh9q1a0eJiYlERJSVlUUxMTHk4eFBly9fVlpslWl/+XJycpQWV0Fr1qwh\nGxsbGjhwIO3Zs4eePXtWKP7x48fToUOHKDs7m4iIjh07Rs+fPyciovT0dDp27Bi9fv1aqTGWtw0G\nBweX+Py0tDSlxVaZ9pf/+8vIyFBaXIqg0opcKpXKq9Pr169DW1sbn376KSwtLaGnpwdPT098+eWX\nAMQpmK6uLmJjY3Ht2jUcOnQItra26N27NyZPniz/VFWk3NxcaGtrAwAuX76MI0eOYOHChejQoQNa\ntmyJAwcO4J133kGnTp0AABYWFjhx4gQSEhLw3//+Fx06dICjoyNGjRqFVq1aQSaTyfumlSEwMBBD\nhgyBp6cnOnXqhL/++gthYWFwcnICICqO8+fPy/skb968iU6dOoGIsGjRInkVkj8yQxHS09Pl1Uvd\nunXh6+uLnj17wszMDKamprh69SqePn2K7t27y7sEXr16hVWrVuHYsWOIjo7GsGHDClVOilLV9tel\nSxfUr19f3kaU6fnz5/Dz88PatWthbm6OU6dO4eLFi3B2dgYgFqyLiorC7du3YWtriwYNGqBDhw7Q\n09NDbm4u9PT00KFDB+jo6KhFG8zMzETnzp1x7do1tG7dWv5ey+/mU1QbrEr7Cw4Oxp07d+Do6Fio\nG1cdqayP3MvLCwsXLsTBgwcBiF/ymTNn5D8fN24cDAwM4O/vL99maWmJCxcu4Ntvv0VmZiaaN2+u\ntFMcLy8vTJgwAYsXLwYA2NvbIycnBwcPHoSWlhZMTU0xYMAA7N69W94F0Lx5c1y9ehVLly6FpaUl\nevXqJT9eftJQZLdKWFgYrl+/jtTUVABAcnIyjh49CgDo2rUrhg0bhsjISFy5ckX+HA8PD+zbtw+d\nO3eGh4cHsrKy0K9fPzRt2lQ+5EpRMf73v/9F//79sWDBAuzcuRMAMHToUNy8eRMymQyWlpawtrZG\nXFwc/v77b/nz0tLSEBISgjZt2sDLy0shsRSliPZnZGSk1KFy+Rf1ATEJLj09HV26dMGHH36ITz/9\nFPfu3ZPHDwDTp09HZmYmdu7ciY8//lg+uqJoElJkzFVtgwsXLkRmZmaxrjJFtMGqtj8TExMsWbKk\nynFUi+o+Bbh06RJ169aNJk2aRFu2bKGuXbvKT7NsbGxo1apV8n1Pnz5NDg4O8lPFWbNmkbOzMyUk\nJCgtvrt375KdnR25u7tTREQEdevWjTw9PYmI6Ndff6WRI0fK9w0PD6fp06fT/fv3SSaT0Z9//klD\nhgyh+Ph4+T4ymUzhMaakpNCECRPIysqKJk6cSN27dycioocPH1Lfvn3p6tWrRCS6g77//nvy8fEh\nItEF8MUXX1Dz5s1px44dCo8rX1JSEo0aNYomTJhAkZGRtG3bNurVqxelp6fTwYMHac6cORQSEkJE\nRHFxceTo6Eh37twhIqLQ0FCaN28excXFKSU2dW9/+RYvXkyjR4+mb775Rr7t3XffpcDAQCIS3QS/\n//47jR8/nqRSqXwfOzs7atq0KXl4eCg1PnVug+rc/pRFJYl8/fr18u8XLFhA06dPJyKiU6dOkZGR\nEaWmphIRUVRUFM2aNYtevXpFRESZmZlKj+/WrVv0559/yr+/du0aWVtbU1ZWFsXHx9Po0aPphx9+\nICLRn9e/f395vPlveCKivLy8Qm8wRcnKyqLly5fTvHnz5NssLCxo69atRETk4+ND7u7u8p/98MMP\n8jdRRkYGhYaGFjpebm6uwmNMT0+nP/74Q/59/pv+zp07lJycTD4+PjR//nx6+vQpERENGzaMDh06\nRESklN9ZQere/jShkFD3NqjO7U9Zqr1rpXPnznBzc5MPw+vXrx+0tbWRl5cHBwcHDB06FHPnzsWu\nXbvg6+uLZ8+eoX79+gAg7z9Tpvbt26N///4ARD9dRkYGunTpAl1dXRgbG8PT0xO//PILNm/ejNmz\nZ6NBgwbyoUj5k1ikUim0tbWVMjpFV1cXTk5OhabUT548GU+ePAEATJw4EQ8ePMDq1asBiIkY+TM2\n9fT08P777wOAPGZFj/4gIujr62Pw4MHybRKJBDdu3EDjxo1haGiI4cOHIzMzE25ubpg4cSJiY2Nh\nbW0NQHlDzvKpe/vLycnBggULsGnTJlhbW2PdunUICgpCdnY2Pv74Y2hpacm7e8zMzHD37l00btwY\nEokEgwYNQkBAAIyNjSGVShV6raMgdW6D6t7+lEaZnxJ5eXlv3efzzz+Xf1oTEb1+/ZoOHz5Mo0eP\npnnz5imlYsxXnk/fI0eO0Pjx4wtVNidPniR/f3/68ssvq23EQkFFf68fffQRbd++Xf79+fPnaciQ\nIdSnTx/q3r073bp1q9piKakCjI6OpkGDBhXbvm/fPlqxYoXSfofq3v5KkpmZKR+5IZVK6dy5czR2\n7Fj5z69evUpt27alTZs2kbu7Ow0ZMqTQqBCi8v2/q0pd2qA6t7/qpLREXvAXGhQUVKjbgejN6dTg\nwYMpIiKCiIgiIyPpxYsXRETF9ld0bCUl8ZIagbu7O23ZsoWIxKl3SW9sZb1x3pZEcnNzKScnh5yc\nnORDHvN/bxkZGfLfq7IU/B1GRkaW+qY6cuSI/F6ugYGBdPr0aaXGVfC1idSv/eXThEJCndugOre/\n6qa08wiJRIKUlBTMmTMHvr6+ePDgQaFVzfLXrGjcuDFiYmIwYsQIfPvtt/K1xfO7KRRNKpVCIpFA\nS0sLN2/ehJeXF27cuCGPOT/G/JEoUqkUderUgZubG+bOnVtsnQ+ZTKbw4Wf5p/35p5xPnjwpFE++\nOnXqICcnBy1atICenh58fHywYMECAOIUNv90UVmz0LS0tBATE4NBgwbB19e32PII+af1Z8+eRXZ2\nNqZMmQJ/f/9q6aJQ1/YHiNN/mUxW7DSeSlj1b9euXXBxcYFEIpHPKOzfvz/mzZuHlStXQkdHRymz\nhTWhDapz+6t2ivpEKPppmJycTPPnz6dOnTqV+pzIyEiSSCT07rvv0i+//KKoUEpU8NM7IyODjhw5\nQg4ODjR+/HgaO3YsrVmzpth+RETNmzenNm3a0G+//abU+Epy5swZMjMzI1dXVxo/fnyJ+wQEBJC+\nvj69//77NGbMGLp7967S4in6N05NTS30uytKJpORTCajwYMHU/v27UvdTxmxqVv7y1cwzhs3btDi\nxYspMjJSvi2/isxvh+PHj6ft27fTmDFjqGvXrsVGUyj74pw6tUF1bn+qppBEXvAXfOjQIflsqBMn\nTlCPHj3kw7uKNrq4uDjy8fGRjwqoLp9//jmZmprKZwoeOnSIHB0d5cPK8v8/iYmJtH79+kLxKaPP\nVCaTyV8zLy+PXr58SR4eHjRp0iQ6duwYZWVlUe/evenbb78losK/x23btlG/fv0KzdZU9Ju7aJdT\n/tX+x48fU58+fejhw4dEVHp3xP79+5U6o1AT2p+6FxLq3AbVvf2pg0on8tDQUAoICJB/f/LkSbK3\ntydXV1f64osvaO3atURE9O2339K8efPkfXnKGA71NlKplJKTk8nb25vCw8MpOTmZOnToQKdOnSIi\nMYzQw8NDPva2pBhzc3OVEnvBBp+VlSX/euLEiWRnZ0f3798nIqKbN29S27Zt5UPj8t90yr7QVTC+\n4OBg6tmzJ02bNo22bNlCd+7coVmzZtHZs2cLPSc/RmVeKNSk9leUuhUS6twG1bX9qZtKJfKUlBSS\nSCRka2tLjx49IplMRl5eXnTp0iV6/PgxffTRR9SxY0dKSkqiiIgImjFjhvyKdnW8kebOnUtLly6V\nx0okGuiMGTPkIxS8vLzI1dVVHtPVq1fJysqK/vrrr2LHU0bMRdduWLVqFfXo0YOWLFlCe/fupZSU\nFHrvvffo6tWr8krj448/LjTGvSBFNtqEhAS6fv06vX79Wv5GOnv2LA0dOpRiY2Pp4MGDZGBgQKdP\nnyZPT0/y8PCgU6dO0bNnz2jq1Kn0+++/KyyWkqh7+ytKXQsJdW2D6t7+1FGF1lrJH5eav2qZVCrF\n/fv34eLigh49euDu3bsYO3YsJk6ciPr16+PEiROYNm0aoqOjcePGDTg4OCj1IlI+PT09zJ49G66u\nrpg3bx6aNGkCMzMz1K9fH6dPn0a9evUwZcoU+Pr6olWrVjA3N0fjxo3Rq1cvdO/evdjxFDkW9+TJ\nk5g6dSqMjIzQtm1b1KlTB3/88QfCwsKwZs0a3Lp1C8uWLYOHhwfu37+PgIAANGrUCImJiThw4ADm\nzJmDRo0aFTuuIsa/SqVSfPPNN1i0aBEiIyOxfft2PHjwAO+//z7u3buHvLw83L17F7/88gumTJmC\ncePGwcLCAk+ePMGmTZuwatUq2NvbY/bs2VWOpSSa0v6++uorXL58Gfb29nj8+DEaNGgAHR0d+Y24\nBwwYgOfPnyMgIABjxoyBrq4umjdvjmXLlqF3795o2bJloeMRkUJXVFTXNqju7U+tlSfbHzp0iMzM\nzGjDhg1ERPTixQuaOnUqbd26lcaMGSPvg1yyZAlt3LiRiIhWrlxJ2tradPHiRUpNTa22fvD8qmX0\n6NHk6upKO3bsoAkTJsh/7uXlRTNmzCCpVEobN24kc3PzYpWOsirwmTNnkp2dHW3atIkyMjLkp7Gz\nZ8+m/fv304IFC6hXr17yadipqank5OREw4cPp1GjRtGuXbsUHle+o0ePUosWLWjRokX05MkTysjI\noHPnzpG+vj6FhIRQYGAgWVpa0tSpU+V9lE+fPqVHjx4Rkaii0tPTlRKbJrU/IjG1v0mTJnT79m0a\nMWIEHT9+nIiIQkJCaPLkyRQUFEQymYysra3pwIEDRCTaR1hYmFLjUuc2qM7tTxOUK5GHh4eTRCKh\nHj160MGDB+n169f0ww8/0IwZM+iPP/6QT1gYN24c+fv709GjR2nmzJm0ePFiun37tlL/A0XlJ+Fn\nz55Rw4YNaffu3TRr1izavHkzERGdO3eOjI2N5RePqiu+v//+mwYOHFgsTiKi7777jrS1tQuNnIiI\niKDMzEzavn07ubq6UlJSUonPVZRLly6RRCKRf58/HX3ZsmXUq1cvSk1NpUGDBtGGDRsoKyuLrl+/\nTnZ2drR8+XKFx1KUJrY/dSskiNS7Dapz+9ME5e4jnzlzJllYWNCePXto4sSJ9Ndff5GPjw9FRETQ\n6NGjKSgoiKKiosjT05M6depUaJZXdcu/2OLt7U3dunWjkJAQ6ty5M12/fp3mzZtHEyZMoOvXr8v3\nr471FeLj48nR0ZFOnTpFx44do9WrV5OXlxcdPnyYIiIiaODAgXT48GEiIlq3bh3Z29vL1zC3t7en\n1atXK32SyogRI+RrZBScaGJiYkIhISF07do1+vLLL+nDDz8kW1tb2rZtm1LjKUhT2p+6FhJE6t8G\n1bn9qbtyJ/LU1FRq2LAhRUdH0/z586lLly40evRoIiLavn07vffee/KrxeqkdevW9Oeff9KGDRvI\n3t6eFi1apJI4cnJy6Ndff6XWrVuTjY0NffXVV+To6EijR4+mH3/8kUJDQ8ne3p6cnJxo4MCBdPHi\nRflzw8LC5KuzKdPz589JX19fvtB+fnfEhAkTCo3Bre4ql0iz2p86FhJE6t8G1bn9qbsKjVr597//\nTR999BEREW3cuJEWLFhAOTk5FB8fT+vXr1erPqr8N8eOHTvI3NyciIqvTqgK0dHRlJGRIR/r/Ntv\nv9HcuXOJSIysiYqKku8rlUqrfZTFN998Q7179y60bdCgQXTt2rVqjaMkmtT+8qlLIVGQOrdBdW5/\n6qzCww9bt25N+/fvJ6I34zXVYWxuSfLjcnJyot27dxOR8paXrawJEybQTz/9VGy7qj5oiIjatGlD\nISEhlJiYSC4uLjR27Fil3oKrIjSl/alrIVESdWuD6tz+1FWFE/n27dtJR0dHGbEoRXp6Og0ePLha\n7plZHrm5uRQbG0urV6+md999lyZOnFjoHp/qYOfOnSSRSKhnz55qNyZXk9qfuhYS6t4G1bn9qasK\nLwTs5uYmX0BHIpEo9VZXinD16lXY2Niga9euqg4FgFhk6OXLl4iMjMQPP/wABwcHAFDqfRQravTo\n0UhPT8fEiRPV7m7hmtT+JBIJXr58iXfeeQft27cHgGq5v+fbqHsbVOf2p64kRCUsucaqDf2zEp46\nvMGZ4oWGhuLkyZPw9vZW278xt0HNx4lchUpaypSx6sRtsGbgRM4YYxqOP4oZY0zDcSJnjDENx4mc\nMcY0HCdyxhjTcJzIGWNMw3EiZ4wxDff/THKlWBjKPxwAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "period = MetricFilters.PERIOD_MONTH\n", "startdate=\"'2015-01-24'\"\n", "enddate=\"'2015-02-24'\"\n", "\n", "filters = MetricFilters(period, startdate, enddate, [\"autoreviews\", \"fake\"])\n", "reviewers = scr.ActiveCoreReviewers(dbcon, filters)\n", "\n", " " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 22 }, { "cell_type": "code", "collapsed": false, "input": [ "list_reviewers = reviewers.get_list()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "select up.id as id , up.identifier as identifier , count(distinct(ch.id)) as reviews from issues_ext_gerrit ieg , issues i , changes ch , wikimedia_git_20150224.upeople up , people_upeople pup where field = 'Code-Review' and changed_on < '2015-02-24' and ieg.issue_id = i.id and changed_on >= '2015-01-24' and ch.issue_id = i.id and pup.upeople_id = up.id and (ch.new_value = -2 or ch.new_value = 2) and ch.changed_by = pup.people_id and ieg.branch like '%master%' and i.id not in\n", " (select distinct(i.id) as issue_id\n", " from issues i,\n", " changes ch\n", " where i.submitted_by = ch.changed_by and\n", " i.id = ch.issue_id and\n", " ch.field = 'status' and\n", " ch.new_value = 'MERGED')\n", " group by up.id, up.identifier order by count(distinct(ch.id)) desc \n" ] } ], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "#Now adding to the query the affiliation\n", "query = \"\"\"select up.id as id , up.identifier as identifier , c.name as company, count(distinct(ch.id)) as reviews\n", " from issues_ext_gerrit ieg , issues i , changes ch , \n", " wikimedia_git_20150224.upeople up , people_upeople pup, \n", " wikimedia_git_20150224.upeople_companies upc, wikimedia_git_20150224.companies c\n", " where field = 'Code-Review' and changed_on < '2015-02-24' and ieg.issue_id = i.id and changed_on >= '2015-01-24' and \n", " ch.issue_id = i.id and pup.upeople_id = up.id and (ch.new_value = -2 or ch.new_value = 2) and \n", " ch.changed_by = pup.people_id and ieg.branch like '%master%' and \n", " up.id = upc.upeople_id and upc.company_id = c.id and\n", " i.id not in\n", " (select distinct(i.id) as issue_id\n", " from issues i,\n", " changes ch\n", " where i.submitted_by = ch.changed_by and\n", " i.id = ch.issue_id and\n", " ch.field = 'status' and\n", " ch.new_value = 'MERGED')\n", " group by up.id, up.identifier order by count(distinct(ch.id)) desc \n", " \"\"\"\n", "list_affs = reviewers.db.ExecuteQuery(query)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "for i in range(0,len(list_affs[\"id\"])):\n", " identifier = list_affs[\"identifier\"][i]\n", " company = list_affs[\"company\"][i]\n", " reviews = list_affs[\"reviews\"][i]\n", " print identifier.split('@')[0] + \",\" + company + \",\" + str(reviews)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "legoktm,Independent,214\n", "jforrester,Unknown,118\n", "Catrope,Wikimedia Foundation,111\n", "hoo,Unknown,80\n", "Ed S,Unknown,74\n", "Bartosz Dziewo\u0144ski,Independent,68\n", "Adrian Lang,Unknown,58\n", "Trevor Parscal,Wikimedia Foundation,53\n", "jayvdb,Unknown,45\n", "Sam Reed,Wikimedia Foundation,43\n", "Matthew Flaschen,Wikimedia Foundation,42\n", "Niklas Laxstr\u00f6m,Wikimedia Foundation,42\n", "Phuedx,Unknown,39\n", "ssastry,Unknown,38\n", "Bryan Davis,Wikimedia Foundation,35\n", "Krinkle,Wikimedia Foundation,35\n", "zfilipin,Unknown,34\n", "Umherirrender,Unknown,33\n", "thiemowmde,Wikimedia Deutschland,33\n", "Santhosh Thottingal,Wikimedia Foundation,33\n", "bmansurov,Unknown,31\n", "MaxSem,Wikimedia Foundation,29\n", "mlitn,Wikimedia Foundation,28\n", "Arlolra,Wikimedia Foundation,27\n", "krenair,Unknown,26\n", "siebrand,Unknown,25\n", "Anomie,Wikimedia Foundation,25\n", "ebernhardson,Unknown,25\n", "jsahleen,Unknown,24\n", "Fabian Neundorf,Unknown,23\n", "Jon Robson,Wikimedia Foundation,22\n", "Chad,Wikimedia Foundation,21\n", "Gilles Dubuc,Wikimedia Foundation,21\n", "Adam Roses Wight,Wikimedia Foundation,19\n", "ori,Unknown,19\n", "isarra,Unknown,19\n", "amire80,Wikimedia Foundation,18\n", "florianschmidtwelzow,Unknown,18\n", "rmoen,Unknown,17\n", "hashar,Unknown,17\n", "jeroendedauw,Wikimedia Deutschland,17\n", "MarkTraceur,Wikimedia Foundation,15\n", "Aaron Schulz,Wikimedia Foundation,14\n", "dbrant,Unknown,14\n", "JanZerebecki,Unknown,13\n", "xqt,Independent,13\n", "bsitzmann,Unknown,13\n", "mhurd,Unknown,13\n", "aude,Unknown,13\n", "Henning Snater,Unknown,13\n", "dr0ptp4kt,Unknown,13\n", "kaldari,Wikimedia Foundation,11\n", "addshore,Independent,11\n", "daniel,Unknown,11\n", "jhernandez,Unknown,9\n", "TTO,Unknown,9\n", "marcoil,Unknown,9\n", "KartikMistry,Unknown,8\n", "Ejegg,Unknown,8\n", "Chris McMahon,Wikimedia Foundation,8\n", "Andrew Garrett,Wikimedia Foundation,8\n", "Mooeypoo,Unknown,7\n", "Brion Vibber,Wikimedia Foundation,7\n", "Robert Vogel,Unknown,7\n", "Gabriel Wicke,Wikimedia Foundation,6\n", "Gergo Tisza,Unknown,6\n", "Andrew Green,Wikimedia Foundation,5\n", "yurik,Unknown,5\n", "Jack Phoenix,Unknown,5\n", "Merlijn van Deen,Independent,5\n", "Tim Starling,Wikimedia Foundation,4\n", "Dan Duvall,Unknown,4\n", "Mpaa,Unknown,4\n", "milimetric,Unknown,4\n", "ryasmeen,Unknown,4\n", "yuvipanda,Unknown,4\n", "gnosygnu,Unknown,3\n", "hartman,Unknown,3\n", "Moritz Schubotz,Unknown,3\n", "Alexandros Kosiaris,Wikimedia Foundation,3\n", "tpt,Independent,3\n", "Jackmcbarn,Unknown,3\n", "Andrew,Unknown,2\n", "Deskana,Unknown,2\n", "ladsgroup,Unknown,2\n", "wirth,Unknown,2\n", "csteipp,Unknown,2\n", "Tyler Anthony Romeo,Independent,2\n", "tamaraslosarek,Unknown,2\n", "Mukunda Modell,Unknown,2\n", "nuria,Unknown,2\n", "wctaiwan,Unknown,2\n", "tonythomas01,Unknown,2\n", "Yaron Koren,WikiWorks,2\n", "Raimond Spekking,Independent,2\n", "Katie Horn,Wikimedia Foundation,2\n", "dzahn,Unknown,2\n", "jonas.keutel,Unknown,1\n", "mark,Unknown,1\n", "Malvineous,Unknown,1\n", "Foxtrott,Unknown,1\n", "MZMcBride,Unknown,1\n", "PleaseStand,Unknown,1\n", "cicalese,Unknown,1\n", "otto,Unknown,1\n", "Pigpen,Unknown,1\n", "mwjames,Unknown,1\n", "prtksxna,Unknown,1\n", "Manybubbles,Wikimedia Foundation,1\n", "Marcel Ruiz Forns,Unknown,1\n", "tosfos,Unknown,1\n", "ricordisamoa,Unknown,1\n", "pginer,Unknown,1\n", "soeren.oldag,Unknown,1\n", "Mobrovac,Unknown,1\n", "JoelKP,Unknown,1\n", "cscott,Unknown,1\n", "Hypergrove,Unknown,1\n", "rush,Unknown,1\n", "Felipe Schenone,Unknown,1\n", "russblau,Unknown,1\n", "mah,Unknown,1\n", "pcoombe,Unknown,1\n", "o0lilu0o1980,Unknown,1\n", "Marielle Volz,Unknown,1\n", "Tweichart,Unknown,1\n", "filippo,Unknown,1\n", "Giuseppe Lavagetto,Unknown,1\n" ] } ], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }