├── .gitignore ├── .jshintrc ├── LICENSE ├── README.md ├── app ├── assets │ ├── datas │ │ └── data.json │ ├── images │ │ └── webpack.png │ └── styles │ │ ├── _main.scss │ │ └── utils │ │ ├── _global.scss │ │ └── _reset.scss ├── lib │ ├── components │ │ ├── Header │ │ │ ├── Header.jsx │ │ │ └── Header.scss │ │ └── ShowData │ │ │ ├── ShowData.jsx │ │ │ └── ShowData.scss │ └── utils │ │ └── utils.js └── views │ ├── Main1 │ ├── Main1.html │ ├── Main1.jsx │ └── Main1.scss │ └── Main2 │ ├── Main2.html │ └── Main2.jsx ├── dist ├── img │ └── webpack.png ├── js │ ├── Main1.bundle.js │ ├── Main1.bundle.js.map │ ├── Main2.bundle.js │ ├── Main2.bundle.js.map │ ├── commons.js │ └── commons.js.map └── views │ └── Main1.html ├── package.json └── webpack.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .cache 3 | *.log 4 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "browser": true, 3 | "node": true, 4 | "bitwise": true, 5 | "camelcase": true, 6 | "curly": true, 7 | "expr": true, 8 | "esnext": true, 9 | "immed": true, 10 | "indent": 2, 11 | "maxlen": 200, 12 | "newcap": true, 13 | "noarg": true, 14 | "quotmark": "single", 15 | "undef": true, 16 | "strict": true, 17 | "globals": { 18 | "reqwest": true, 19 | "define": true, 20 | "module": true, 21 | "React": true, 22 | "ReactDOM": true, 23 | "ReactRouter": true 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015, TongchengQiu 2 | 3 | Permission to use, copy, modify, and/or distribute this software for any 4 | purpose with or without fee is hereby granted, provided that the above 5 | copyright notice and this permission notice appear in all copies. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 8 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 9 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 10 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 11 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 12 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 13 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 14 | 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | title: webpack-best-practice-最佳实践-部署生产 2 | date: 2015-12-02 10:56:39 3 | tags: 4 | - webpack 5 | - FE 6 | - 前端 7 | - 构建工具 8 | categories: [webpack,FE,前端,构建工具] 9 | --- 10 | # 前言 11 | 最近一段时间在项目中使用了webpack和React来开发,总之来说也是遇到了许多坑,webpack毕竟还是比较新的技术,而且也很难有一个很好的构建案例来适应所有的项目,总之,在看了许多项目demo和官方文档以及官方推荐的tutorials之后,也算是自己总结出的一套最佳实践吧。 12 | ## 代码 13 | 代码可以在我的[Github](https://github.com/TongchengQiu/webpack-best-practice)上。 14 | [可以戳这里~~](https://github.com/TongchengQiu/webpack-best-practice)。 15 | # package.json 命令配置 16 | 既然是需要用到的是实际项目的构建,那么必然就要考虑开发环境和生产环境下的配置项了: 17 | ``` 18 | // package.json 19 | { 20 | // ... 21 | "scripts": { 22 | "build": "webpack --progress --colors --watch", 23 | "watch": "webpack-dev-server --hot --progress --colors", 24 | "dist": "NODE_ENV=production webpack --progress --colors" 25 | }, 26 | // ... 27 | } 28 | ``` 29 | 30 | 可以在目录下执行 `npm run build` , `npm run watch` , `npm run dist` 31 | 解释一下: 32 | + build 是在我们开发环境下执行的构建命令; 33 | + watch 也是在开发环境下执行,但是加了webpack最强大的功能--搭建静态服务器和热插拔功能(这个在后面介绍; 34 | + dist 是项目在要部署到生产环境时打包发布。 35 | 36 | dist 里面的``NODE_ENV=production``是声明了当前执行的环境是production-生产环境 37 |
38 | 后面跟着几个命令: 39 | + --colors 输出的结果带彩色 40 | + --progress 输出进度显示 41 | + --watch 动态实时监测依赖文件变化并且更新 42 | + --hot 是热插拔 43 | + --display-error-details 错误的时候显示更多详细错误信息 44 | + --display-modules 默认情况下 node_modules 下的模块会被隐藏,加上这个参数可以显示这些被隐藏的模块 45 | + -w 动态实时监测依赖文件变化并且更新 46 | + -d 提供sorcemap 47 | + -p 对打包文件进行压缩 48 | 49 | # 目录结构 50 | 现在前端模块化的趋势导致目录结构也发生了很大的改变和争议,这只是我自己用到的一种形式,可以参考。 51 | ``` 52 | . 53 | ├── app #开发目录 54 | | ├──assets #存放静态资源 55 | | | ├──datas #存放数据 json 文件 56 | | | ├──images #存放图片资源文件 57 | | | └──styles #存放全局sass变量文件和reset文件 58 | | ├──lib 59 | | | ├──components #存放数据 模块组件 文件 60 | | | | └──Header 61 | | | | ├──Header.jsx 62 | | | | └──Header.scss 63 | | | | 64 | | | └──utils #存放utils工具函数文件 65 | | | 66 | | └──views 67 | | ├──Index #入口文件 68 | | | ├──Index.html #html文件 69 | | | ├──Index.jsx 70 | | | └──Index.scss 71 | | └──Index2 72 | ├── dist #发布目录 73 | ├── node_modules #包文件夹 74 | ├── .gitignore 75 | ├── .jshintrc 76 | ├── webpack.config.js #webpack配置文件 77 | └── package.json 78 | ``` 79 | 具体可以到Github上看demo。 80 | # webpack.config.js 81 | ## 引入包 82 | ``` 83 | var webpack = require('webpack'); 84 | var path = require('path'); 85 | var fs = require('fs'); 86 | ``` 87 | 这个毋庸置疑吧。 88 | ## 判断是否是在当前生产环境 89 | 定义函数判断是否是在当前生产环境,这个很重要,一位开发环境和生产环境配置上有一些区别 90 | ``` 91 | var isProduction = function () { 92 | return process.env.NODE_ENV === 'production'; 93 | }; 94 | ``` 95 | ## 声明文件夹 96 | ``` 97 | // 定义输出文件夹 98 | var outputDir = './dist'; 99 | // 定义开发文件夹 100 | var entryPath = './app/views'; 101 | ``` 102 | ## 定义插件 103 | ``` 104 | var plugins = [ 105 | new webpack.optimize.CommonsChunkPlugin({ 106 | name: 'commons', 107 | filename: 'js/commons.js', 108 | }), 109 | new webpack.ProvidePlugin({ 110 | React: 'react', 111 | ReactDOM: 'react-dom', 112 | reqwest: 'reqwest', 113 | }), 114 | ]; 115 | if( isProduction() ) { 116 | plugins.push( 117 | new webpack.optimize.UglifyJsPlugin({ 118 | test: /(\.jsx|\.js)$/, 119 | compress: { 120 | warnings: false 121 | }, 122 | }) 123 | ); 124 | } 125 | ``` 126 | 1. CommonsChunkPlugin 插件可以打包所有文件的共用部分生产一个commons.js文件。 127 | 2. ProvidePlugin 插件可以定义一个共用的入口,比如 下面加的 React ,他会在每个文件自动require了react,所以你在文件中不需要 require('react'),也可以使用 React。 128 | 3. 如果是在生产环境下,则加入插件 UglifyJsPlugin ,执行代码压缩,并且去除 warnings。 129 | 130 | ## 自动遍历多文件入口 131 | ``` 132 | var entris = fs.readdirSync(entryPath).reduce(function (o, filename) { 133 | !/\./.test(filename) && 134 | (o[filename] = './' + path.join(entryPath, filename, filename + '.jsx')); 135 | return o; 136 | }, {} 137 | ); 138 | ``` 139 | 函数会自动遍历开发的入口文件夹下面的文件,然后一一生产入口并且返回一个对象--入口。 140 | ## 如果在这一步不需要多页面多入口 141 | 那么可以使用[html-webpack-plugin](https://www.npmjs.com/package/html-webpack-plugin)插件,它可以自动为入口生成一个html文件,配置如下: 142 | ``` 143 | var HtmlWebpackPlugin = require('html-webpack-plugin'); 144 | plugins.push(new HtmlWebpackPlugin({ 145 | title: 'index', 146 | filename: outputDir+'/index.html', #生成html的位置 147 | inject: 'body', #插入script在body标签里 148 | })); 149 | ``` 150 | entry 就可以自定义一个入口就够了 151 | ## config的具体配置 152 | ``` 153 | var config = { 154 | target: 'web', 155 | cache: true, 156 | entry: entris, 157 | output: { 158 | path: outputDir, 159 | filename: 'js/[name].bundle.js', 160 | publicPath: isProduction()? 'http://******' : 'http://localhost:3000', 161 | }, 162 | module: { 163 | loaders: [ 164 | { 165 | test: /(\.jsx|\.js)$/, 166 | loaders: ['babel?presets[]=es2015&presets[]=react'], 167 | exclude: /node_modules/ 168 | }, 169 | { 170 | test: /\.scss$/, 171 | loaders: ['style', 'css?root='+__dirname, 'resolve-url', 'sass'] 172 | }, 173 | { 174 | test: /\.json$/, 175 | loader: 'json', 176 | }, 177 | { 178 | test: /\.(jpe?g|png|gif|svg)$/, 179 | loader: 'url?limit=1024&name=img/[name].[ext]' 180 | }, 181 | { 182 | test: /\.(woff2?|otf|eot|svg|ttf)$/i, 183 | loader: 'url?name=fonts/[name].[ext]' 184 | }, 185 | { 186 | test: /\.html$/, 187 | loader: 'file?name=views/[name].[ext]' 188 | }, 189 | ] 190 | }, 191 | plugins: plugins, 192 | resolve: { 193 | extensions: ['', '.js', 'jsx'], 194 | }, 195 | devtool: isProduction()?null:'source-map', 196 | }; 197 | ``` 198 | 这里来一一说明: 199 | ### 对于output 200 | path和filename都不用多说了,path是生成文件的存放目录,filename是文件名,当然可以在前面加上目录位置。 201 | 这里提醒一下,filename 的相对路径就是 path了,并且下面 静态文件生成的filename也是相对于这里的path的,比如 image 和 html。 202 | publicPath 的话是打包的时候生成的文件链接,比如 图片 资源, 203 | 如果是在生产环境当然是用服务器地址,如果是开发环境就是用本地静态服务器的地址。 204 | ### module loaders 打包加载的处理器 205 | 可以不用夹 loader了 比如 原来 url-loader 现在 url 206 | #### js/jsx 207 | ``` 208 | { 209 | test: /(\.jsx|\.js)$/, 210 | loaders: ['babel?presets[]=es2015&presets[]=react'], 211 | exclude: /node_modules/ 212 | }, 213 | ``` 214 | 对于js文件和jsx文件用了babel来处理,这里注意一下,最新版本的babel吧es2015和react的处理分开了,所有要这么写。 215 | ### 处理scss文件 216 | ``` 217 | { 218 | test: /\.scss$/, 219 | loaders: ['style', 'css?root='+__dirname, 'resolve-url', 'sass'] 220 | }, 221 | ``` 222 | 这里用了sass、css、style的loader这不用多说了。 223 | 那么root和resolve-url是怎么回事呢,root是定义了scss文件里面声明的url地址是相对于根目录的,然后resolve-url回去相对解析这个路径,而不用require去获取,比如 224 | ``` 225 | background: url('./assets/images/webpack.png'); 226 | ``` 227 | 这样就可以加载到``./assets/images/webpack.png``这个文件,而不用使用相对路径和require 228 | ### 处理json文件 229 | ``` 230 | { 231 | test: /\.json$/, 232 | loader: 'json', 233 | }, 234 | ``` 235 | 对于json文件,可以自动请求该模块并且打包。 236 | ### 处理 图片 字体 资源文件 237 | ``` 238 | { 239 | test: /\.(jpe?g|png|gif|svg)$/, 240 | loader: 'url?limit=1024&name=img/[name].[ext]' 241 | }, 242 | { 243 | test: /\.(woff2?|otf|eot|svg|ttf)$/i, 244 | loader: 'url?name=fonts/[name].[ext]' 245 | }, 246 | ``` 247 | 这里使用了 url 这个loader,但是url依赖 file-loader,它是对file-loader的二次封装。 248 | 在请求图片的时候如果文件大小小于 1024k ,使用内联 base64 URLs,否则会自动导入到name所声明的目录,这里是相对之前声明的 outputDir 路径。 249 | 字体资源也是一样。 250 | ### 处理html文件 251 | ``` 252 | { 253 | test: /\.html$/, 254 | loader: 'file?name=views/[name].[ext]' 255 | }, 256 | ``` 257 | 在多页面的项目中需要,可以自动吧html文件导入到指定的生产文件夹下。 258 | ## resolve 259 | ``` 260 | resolve: { 261 | extensions: ['', '.js', 'jsx'], 262 | }, 263 | ``` 264 | 是可以忽略的文件后缀名,比如可以直接``require('Header');``而不用加.jsx。 265 | ## devtool 266 | ``` 267 | devtool: isProduction()?null:'source-map', 268 | ``` 269 | 规定了在开发环境下才使用 source-map。 270 | 271 | # 疑问 272 | 目前为止,对于多页面项目还是没有找到一个很好的方案去构建自动化。 273 | -------------------------------------------------------------------------------- /app/assets/datas/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "main1": "1", 3 | "main2": { 4 | "main21": "21", 5 | "main22": "22" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/assets/images/webpack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TongchengQiu/webpack-best-practice/51375dd30f52a4e76ea3862be8717832cf10b80b/app/assets/images/webpack.png -------------------------------------------------------------------------------- /app/assets/styles/_main.scss: -------------------------------------------------------------------------------- 1 | @import './utils/reset'; 2 | @import './utils/global'; 3 | -------------------------------------------------------------------------------- /app/assets/styles/utils/_global.scss: -------------------------------------------------------------------------------- 1 | a { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /app/assets/styles/utils/_reset.scss: -------------------------------------------------------------------------------- 1 | html, body, div, span, applet, object, iframe, 2 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 3 | a, abbr, acronym, address, big, cite, code, 4 | del, dfn, em, img, ins, kbd, q, s, samp, 5 | small, strike, strong, sub, sup, tt, var, 6 | b, u, i, center, 7 | dl, dt, dd, ol, ul, li, 8 | fieldset, form, label, legend, 9 | table, caption, tbody, tfoot, thead, tr, th, td, 10 | article, aside, canvas, details, embed, 11 | figure, figcaption, footer, header, hgroup, 12 | menu, nav, output, ruby, section, summary, 13 | time, mark, audio, video { 14 | margin: 0; 15 | padding: 0; 16 | border: 0; 17 | font-size: 100%; 18 | font: inherit; 19 | vertical-align: baseline; 20 | } 21 | article, aside, details, figcaption, figure, 22 | footer, header, hgroup, menu, nav, section { 23 | display: block; 24 | } 25 | body { 26 | line-height: 1; 27 | } 28 | ol, ul { 29 | list-style: none; 30 | } 31 | blockquote, q { 32 | quotes: none; 33 | } 34 | blockquote:before, blockquote:after, 35 | q:before, q:after { 36 | content: ''; 37 | content: none; 38 | } 39 | table { 40 | border-collapse: collapse; 41 | border-spacing: 0; 42 | } 43 | -------------------------------------------------------------------------------- /app/lib/components/Header/Header.jsx: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | require('./Header.scss'); 3 | 4 | var Header = React.createClass({ 5 | render: function() { 6 | return ( 7 |
Header
8 | ); 9 | } 10 | }); 11 | 12 | module.exports = Header; 13 | -------------------------------------------------------------------------------- /app/lib/components/Header/Header.scss: -------------------------------------------------------------------------------- 1 | .header { 2 | width: 100%; 3 | height: 300px; 4 | background: url('../../../assets/images/webpack.png'); 5 | } 6 | -------------------------------------------------------------------------------- /app/lib/components/ShowData/ShowData.jsx: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | require('./ShowData.scss'); 3 | 4 | var data = require('../../../assets/datas/data.json'); 5 | 6 | var ShowData = React.createClass({ 7 | render: function() { 8 | return ( 9 |
10 | {data.toString()} 11 |
12 | ); 13 | } 14 | }); 15 | 16 | module.exports = ShowData; 17 | -------------------------------------------------------------------------------- /app/lib/components/ShowData/ShowData.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TongchengQiu/webpack-best-practice/51375dd30f52a4e76ea3862be8717832cf10b80b/app/lib/components/ShowData/ShowData.scss -------------------------------------------------------------------------------- /app/lib/utils/utils.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TongchengQiu/webpack-best-practice/51375dd30f52a4e76ea3862be8717832cf10b80b/app/lib/utils/utils.js -------------------------------------------------------------------------------- /app/views/Main1/Main1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Main1 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/views/Main1/Main1.jsx: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | require('./Main1.html'); 3 | require('./Main1.scss'); 4 | 5 | let Header = require('../../lib/components/Header/Header.jsx'); 6 | let ShowData = require('../../lib/components/ShowData/ShowData.jsx'); 7 | 8 | var Main1 = React.createClass({ 9 | render: function() { 10 | return ( 11 |
12 |
13 | 14 |
15 | ); 16 | } 17 | }); 18 | 19 | ReactDOM.render( 20 | , 21 | document.getElementById('wrap') 22 | ); 23 | -------------------------------------------------------------------------------- /app/views/Main1/Main1.scss: -------------------------------------------------------------------------------- 1 | @import "../../assets/styles/main" 2 | -------------------------------------------------------------------------------- /app/views/Main2/Main2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Main2 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/views/Main2/Main2.jsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TongchengQiu/webpack-best-practice/51375dd30f52a4e76ea3862be8717832cf10b80b/app/views/Main2/Main2.jsx -------------------------------------------------------------------------------- /dist/img/webpack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TongchengQiu/webpack-best-practice/51375dd30f52a4e76ea3862be8717832cf10b80b/dist/img/webpack.png -------------------------------------------------------------------------------- /dist/js/Main1.bundle.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([0,2],[function(e,t,n){(function(e,t){"use strict";n(159),n(160);var o=n(164),r=n(168),a=e.createClass({displayName:"Main1",render:function(){return e.createElement("div",{className:"main"},e.createElement(o,null),e.createElement(r,null))}});t.render(e.createElement(a,null),document.getElementById("wrap"))}).call(t,n(1),n(158))},function(e,t,n){"use strict";e.exports=n(2)},function(e,t,n){"use strict";var o=n(3),r=n(148),a=n(152),i=n(39),s=n(157),u={};i(u,a),i(u,{findDOMNode:s("findDOMNode","ReactDOM","react-dom",o,o.findDOMNode),render:s("render","ReactDOM","react-dom",o,o.render),unmountComponentAtNode:s("unmountComponentAtNode","ReactDOM","react-dom",o,o.unmountComponentAtNode),renderToString:s("renderToString","ReactDOMServer","react-dom/server",r,r.renderToString),renderToStaticMarkup:s("renderToStaticMarkup","ReactDOMServer","react-dom/server",r,r.renderToStaticMarkup)}),u.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=o,u.__SECRET_DOM_SERVER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=r,e.exports=u},function(e,t,n){(function(t){"use strict";var o=n(5),r=n(6),a=n(71),i=n(45),s=n(28),u=n(18),c=n(50),l=n(54),p=n(146),d=n(91),f=n(147),h=n(25);a.inject();var v=u.measure("React","render",s.render),m={findDOMNode:d,render:v,unmountComponentAtNode:s.unmountComponentAtNode,version:p,unstable_batchedUpdates:l.batchedUpdates,unstable_renderSubtreeIntoContainer:f};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject&&__REACT_DEVTOOLS_GLOBAL_HOOK__.inject({CurrentOwner:o,InstanceHandles:i,Mount:s,Reconciler:c,TextComponent:r}),"production"!==t.env.NODE_ENV){var g=n(9);if(g.canUseDOM&&window.top===window.self){"undefined"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&(navigator.userAgent.indexOf("Chrome")>-1&&navigator.userAgent.indexOf("Edge")===-1||navigator.userAgent.indexOf("Firefox")>-1)&&console.debug("Download the React DevTools for a better development experience: https://fb.me/react-devtools");var y=document.documentMode&&document.documentMode<8;"production"!==t.env.NODE_ENV?h(!y,'Internet Explorer is running in compatibility mode; please add the following tag to your HTML to prevent this from happening: '):void 0;for(var E=[Array.isArray,Array.prototype.every,Array.prototype.forEach,Array.prototype.indexOf,Array.prototype.map,Date.now,Function.prototype.bind,Object.keys,String.prototype.split,String.prototype.trim,Object.create,Object.freeze],N=0;N1)for(var n=1;n"+p+""},receiveComponent:function(e,t){if(e!==this._currentElement){this._currentElement=e;var n=""+e;if(n!==this._stringText){this._stringText=n;var r=i.getNode(this._rootNodeID);o.updateTextContent(r,n)}}},unmountComponent:function(){a.unmountIDFromEnvironment(this._rootNodeID)}}),e.exports=p}).call(t,n(4))},function(e,t,n){(function(t){"use strict";function o(e,t,n){var o=n>=e.childNodes.length?null:e.childNodes.item(n);e.insertBefore(t,o)}var r=n(8),a=n(16),i=n(18),s=n(19),u=n(20),c=n(13),l={dangerouslyReplaceNodeWithMarkup:r.dangerouslyReplaceNodeWithMarkup,updateTextContent:u,processUpdates:function(e,n){for(var i,l=null,p=null,d=0;d when using tables, nesting tags like
,

, or , or using non-SVG elements in an parent. Try inspecting the child nodes of the element with React ID `%s`.",f,v):c(!1),l=l||{},l[v]=l[v]||[],l[v][f]=h,p=p||[],p.push(h)}var m;if(m=n.length&&"string"==typeof n[0]?r.dangerouslyRenderMarkup(n):n,p)for(var g=0;g]+)/,l="data-danger-index",p={dangerouslyRenderMarkup:function(e){r.canUseDOM?void 0:"production"!==t.env.NODE_ENV?u(!1,"dangerouslyRenderMarkup(...): Cannot render markup in a worker thread. Make sure `window` and `document` are available globally before requiring React when unit testing or use ReactDOMServer.renderToString for server rendering."):u(!1);for(var n,p={},d=0;d node. This is because browser quirks make this unreliable and/or slow. If you want to render to the root you must use server rendering. See ReactDOMServer.renderToString()."):u(!1):void 0;var o;o="string"==typeof n?a(n,i)[0]:n,e.parentNode.replaceChild(o,e)}};e.exports=p}).call(t,n(4))},function(e,t){"use strict";var n=!("undefined"==typeof window||!window.document||!window.document.createElement),o={canUseDOM:n,canUseWorkers:"undefined"!=typeof Worker,canUseEventListeners:n&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:n&&!!window.screen,isInWorker:!n};e.exports=o},function(e,t,n){(function(t){"use strict";function o(e){var t=e.match(l);return t&&t[1].toLowerCase()}function r(e,n){var r=c;c?void 0:"production"!==t.env.NODE_ENV?u(!1,"createNodesFromMarkup dummy not initialized"):u(!1);var a=o(e),l=a&&s(a);if(l){r.innerHTML=l[1]+e+l[2];for(var p=l[0];p--;)r=r.lastChild}else r.innerHTML=e;var d=r.getElementsByTagName("script");d.length&&(n?void 0:"production"!==t.env.NODE_ENV?u(!1,"createNodesFromMarkup(...): Unexpected ","
"],l=[3,"","
"],p=[1,'',""],d={"*":[1,"?

"],area:[1,"",""],col:[2,"","
"],legend:[1,"
","
"],param:[1,"",""],tr:[2,"","
"],optgroup:u,option:u,caption:c,colgroup:c,tbody:c,tfoot:c,thead:c,td:l,th:l},f=["circle","clipPath","defs","ellipse","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","text","tspan"];f.forEach(function(e){d[e]=p,s[e]=!0}),e.exports=o}).call(t,n(4))},function(e,t){"use strict";function n(e){return function(){return e}}function o(){}o.thatReturns=n,o.thatReturnsFalse=n(!1),o.thatReturnsTrue=n(!0),o.thatReturnsNull=n(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},e.exports=o},function(e,t,n){"use strict";var o=n(17),r=o({INSERT_MARKUP:null,MOVE_EXISTING:null,REMOVE_NODE:null,SET_MARKUP:null,TEXT_CONTENT:null});e.exports=r},function(e,t,n){(function(t){"use strict";var o=n(13),r=function(e){var n,r={};e instanceof Object&&!Array.isArray(e)?void 0:"production"!==t.env.NODE_ENV?o(!1,"keyMirror(...): Argument must be an object."):o(!1);for(n in e)e.hasOwnProperty(n)&&(r[n]=n);return r};e.exports=r}).call(t,n(4))},function(e,t,n){(function(t){"use strict";function n(e,t,n){return n}var o={enableMeasure:!1,storedMeasure:n,measureMethods:function(e,n,r){if("production"!==t.env.NODE_ENV)for(var a in r)r.hasOwnProperty(a)&&(e[a]=o.measure(n,r[a],e[a]))},measure:function(e,n,r){if("production"!==t.env.NODE_ENV){var a=null,i=function(){return o.enableMeasure?(a||(a=o.storedMeasure(e,n,r)),a.apply(this,arguments)):r.apply(this,arguments)};return i.displayName=e+"_"+n,i}return r},injection:{injectMeasure:function(e){o.storedMeasure=e}}};e.exports=o}).call(t,n(4))},function(e,t,n){"use strict";var o=n(9),r=/^[ \r\n\t\f]/,a=/<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/,i=function(e,t){e.innerHTML=t};if("undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction&&(i=function(e,t){MSApp.execUnsafeLocalFunction(function(){e.innerHTML=t})}),o.canUseDOM){var s=document.createElement("div");s.innerHTML=" ",""===s.innerHTML&&(i=function(e,t){if(e.parentNode&&e.parentNode.replaceChild(e,e),r.test(t)||"<"===t[0]&&a.test(t)){e.innerHTML=String.fromCharCode(65279)+t;var n=e.firstChild;1===n.data.length?e.removeChild(n):n.deleteData(0,1)}else e.innerHTML=t})}e.exports=i},function(e,t,n){"use strict";var o=n(9),r=n(21),a=n(19),i=function(e,t){e.textContent=t};o.canUseDOM&&("textContent"in document.documentElement||(i=function(e,t){a(e,r(t))})),e.exports=i},function(e,t){"use strict";function n(e){return r[e]}function o(e){return(""+e).replace(a,n)}var r={"&":"&",">":">","<":"<",'"':""","'":"'"},a=/[&><"']/g;e.exports=o},function(e,t,n){(function(t){"use strict";function o(e){return!!p.hasOwnProperty(e)||!l.hasOwnProperty(e)&&(c.test(e)?(p[e]=!0,!0):(l[e]=!0,"production"!==t.env.NODE_ENV?u(!1,"Invalid attribute name: `%s`",e):void 0,!1))}function r(e,t){return null==t||e.hasBooleanValue&&!t||e.hasNumericValue&&isNaN(t)||e.hasPositiveNumericValue&&t<1||e.hasOverloadedBooleanValue&&t===!1}var a=n(23),i=n(18),s=n(24),u=n(25),c=/^[a-zA-Z_][\w\.\-]*$/,l={},p={};if("production"!==t.env.NODE_ENV)var d={children:!0,dangerouslySetInnerHTML:!0,key:!0,ref:!0},f={},h=function(e){if(!(d.hasOwnProperty(e)&&d[e]||f.hasOwnProperty(e)&&f[e])){f[e]=!0;var n=e.toLowerCase(),o=a.isCustomAttribute(n)?n:a.getPossibleStandardName.hasOwnProperty(n)?a.getPossibleStandardName[n]:null;"production"!==t.env.NODE_ENV?u(null==o,"Unknown DOM property %s. Did you mean %s?",e,o):void 0}};var v={createMarkupForID:function(e){return a.ID_ATTRIBUTE_NAME+"="+s(e)},setAttributeForID:function(e,t){e.setAttribute(a.ID_ATTRIBUTE_NAME,t)},createMarkupForProperty:function(e,n){var o=a.properties.hasOwnProperty(e)?a.properties[e]:null;if(o){if(r(o,n))return"";var i=o.attributeName;return o.hasBooleanValue||o.hasOverloadedBooleanValue&&n===!0?i+'=""':i+"="+s(n)}return a.isCustomAttribute(e)?null==n?"":e+"="+s(n):("production"!==t.env.NODE_ENV&&h(e),null)},createMarkupForCustomAttribute:function(e,t){return o(e)&&null!=t?e+"="+s(t):""},setValueForProperty:function(e,n,o){var i=a.properties.hasOwnProperty(n)?a.properties[n]:null;if(i){var s=i.mutationMethod;if(s)s(e,o);else if(r(i,o))this.deleteValueForProperty(e,n);else if(i.mustUseAttribute){var u=i.attributeName,c=i.attributeNamespace;c?e.setAttributeNS(c,u,""+o):i.hasBooleanValue||i.hasOverloadedBooleanValue&&o===!0?e.setAttribute(u,""):e.setAttribute(u,""+o)}else{var l=i.propertyName;i.hasSideEffects&&""+e[l]==""+o||(e[l]=o)}}else a.isCustomAttribute(n)?v.setValueForAttribute(e,n,o):"production"!==t.env.NODE_ENV&&h(n)},setValueForAttribute:function(e,t,n){o(t)&&(null==n?e.removeAttribute(t):e.setAttribute(t,""+n))},deleteValueForProperty:function(e,n){var o=a.properties.hasOwnProperty(n)?a.properties[n]:null;if(o){var r=o.mutationMethod;if(r)r(e,void 0);else if(o.mustUseAttribute)e.removeAttribute(o.attributeName);else{var i=o.propertyName,s=a.getDefaultValueForProperty(e.nodeName,i);o.hasSideEffects&&""+e[i]===s||(e[i]=s)}}else a.isCustomAttribute(n)?e.removeAttribute(n):"production"!==t.env.NODE_ENV&&h(n)}};i.measureMethods(v,"DOMPropertyOperations",{setValueForProperty:"setValueForProperty",setValueForAttribute:"setValueForAttribute",deleteValueForProperty:"deleteValueForProperty"}),e.exports=v}).call(t,n(4))},function(e,t,n){(function(t){"use strict";function o(e,t){return(e&t)===t}var r=n(13),a={MUST_USE_ATTRIBUTE:1,MUST_USE_PROPERTY:2,HAS_SIDE_EFFECTS:4,HAS_BOOLEAN_VALUE:8,HAS_NUMERIC_VALUE:16,HAS_POSITIVE_NUMERIC_VALUE:48,HAS_OVERLOADED_BOOLEAN_VALUE:64,injectDOMPropertyConfig:function(e){var n=a,i=e.Properties||{},u=e.DOMAttributeNamespaces||{},c=e.DOMAttributeNames||{},l=e.DOMPropertyNames||{},p=e.DOMMutationMethods||{};e.isCustomAttribute&&s._isCustomAttributeFunctions.push(e.isCustomAttribute);for(var d in i){s.properties.hasOwnProperty(d)?"production"!==t.env.NODE_ENV?r(!1,"injectDOMPropertyConfig(...): You're trying to inject DOM property '%s' which has already been injected. You may be accidentally injecting the same DOM property config twice, or you may be injecting two configs that have conflicting property names.",d):r(!1):void 0;var f=d.toLowerCase(),h=i[d],v={attributeName:f,attributeNamespace:null,propertyName:d,mutationMethod:null,mustUseAttribute:o(h,n.MUST_USE_ATTRIBUTE),mustUseProperty:o(h,n.MUST_USE_PROPERTY),hasSideEffects:o(h,n.HAS_SIDE_EFFECTS),hasBooleanValue:o(h,n.HAS_BOOLEAN_VALUE),hasNumericValue:o(h,n.HAS_NUMERIC_VALUE),hasPositiveNumericValue:o(h,n.HAS_POSITIVE_NUMERIC_VALUE),hasOverloadedBooleanValue:o(h,n.HAS_OVERLOADED_BOOLEAN_VALUE)};if(v.mustUseAttribute&&v.mustUseProperty?"production"!==t.env.NODE_ENV?r(!1,"DOMProperty: Cannot require using both attribute and property: %s",d):r(!1):void 0,!v.mustUseProperty&&v.hasSideEffects?"production"!==t.env.NODE_ENV?r(!1,"DOMProperty: Properties that have side effects must use property: %s",d):r(!1):void 0,v.hasBooleanValue+v.hasNumericValue+v.hasOverloadedBooleanValue<=1?void 0:"production"!==t.env.NODE_ENV?r(!1,"DOMProperty: Value can be one of boolean, overloaded boolean, or numeric value, but not a combination: %s",d):r(!1),"production"!==t.env.NODE_ENV&&(s.getPossibleStandardName[f]=d),c.hasOwnProperty(d)){var m=c[d];v.attributeName=m,"production"!==t.env.NODE_ENV&&(s.getPossibleStandardName[m]=d)}u.hasOwnProperty(d)&&(v.attributeNamespace=u[d]),l.hasOwnProperty(d)&&(v.propertyName=l[d]),p.hasOwnProperty(d)&&(v.mutationMethod=p[d]),s.properties[d]=v}}},i={},s={ID_ATTRIBUTE_NAME:"data-reactid",properties:{},getPossibleStandardName:"production"!==t.env.NODE_ENV?{}:null,_isCustomAttributeFunctions:[],isCustomAttribute:function(e){for(var t=0;t2?n-2:0),r=2;r when using tables, nesting tags like ,

, or , or using non-SVG elements in an parent. Try inspecting the child nodes of the element with React ID `%s`.",n,ee.getID(e)):L(!1)},_mountImageIntoNode:function(e,n,a,i){if(!n||n.nodeType!==K&&n.nodeType!==H&&n.nodeType!==Y?"production"!==t.env.NODE_ENV?L(!1,"mountComponentIntoNode(...): Target container is not valid."):L(!1):void 0,a){var s=r(n);if(R.canReuseMarkup(e,s))return;var u=s.getAttribute(R.CHECKSUM_ATTR_NAME);s.removeAttribute(R.CHECKSUM_ATTR_NAME);var c=s.outerHTML;s.setAttribute(R.CHECKSUM_ATTR_NAME,u);var l=e;if("production"!==t.env.NODE_ENV){var p;n.nodeType===K?(p=document.createElement("div"),p.innerHTML=e,l=p.innerHTML):(p=document.createElement("iframe"),document.body.appendChild(p),p.contentDocument.write(e),l=p.contentDocument.documentElement.outerHTML,document.body.removeChild(p))}var d=o(l,c),f=" (client) "+l.substring(d-20,d+20)+"\n (server) "+c.substring(d-20,d+20);n.nodeType===H?"production"!==t.env.NODE_ENV?L(!1,"You're trying to render a component to the document using server rendering but the checksum was invalid. This usually means you rendered a different component type or props on the client from the one on the server, or your render() methods are impure. React cannot handle this case due to cross-browser quirks by rendering at the document root. You should look for environment dependent code in your components and ensure the props are the same client and server side:\n%s",f):L(!1):void 0, 2 | "production"!==t.env.NODE_ENV&&("production"!==t.env.NODE_ENV?B(!1,"React attempted to reuse markup in a container but the checksum was invalid. This generally means that you are using server rendering and the markup generated on the server was not what the client was expecting. React injected new markup to compensate which works but you have lost many of the benefits of server rendering. Instead, figure out why the markup being generated is different on the client or server:\n%s",f):void 0)}if(n.nodeType===H?"production"!==t.env.NODE_ENV?L(!1,"You're trying to render a component to the document but you didn't use server rendering. We can't do this without using server rendering due to cross-browser quirks. See ReactDOMServer.renderToString() for server rendering."):L(!1):void 0,i.useCreateElement){for(;n.lastChild;)n.removeChild(n.lastChild);n.appendChild(e)}else U(n,e)},ownerDocumentContextKey:z,getReactRootID:a,getID:i,setID:u,getNode:c,getNodeFromInstance:l,isValid:p,purgeID:d};M.measureMethods(ee,"ReactMount",{_renderNewRootComponent:"_renderNewRootComponent",_mountImageIntoNode:"_mountImageIntoNode"}),e.exports=ee}).call(t,n(4))},function(e,t,n){"use strict";function o(e){return Object.prototype.hasOwnProperty.call(e,m)||(e[m]=h++,d[e[m]]={}),d[e[m]]}var r=n(30),a=n(31),i=n(32),s=n(37),u=n(18),c=n(38),l=n(39),p=n(40),d={},f=!1,h=0,v={topAbort:"abort",topBlur:"blur",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topChange:"change",topClick:"click",topCompositionEnd:"compositionend",topCompositionStart:"compositionstart",topCompositionUpdate:"compositionupdate",topContextMenu:"contextmenu",topCopy:"copy",topCut:"cut",topDoubleClick:"dblclick",topDrag:"drag",topDragEnd:"dragend",topDragEnter:"dragenter",topDragExit:"dragexit",topDragLeave:"dragleave",topDragOver:"dragover",topDragStart:"dragstart",topDrop:"drop",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topFocus:"focus",topInput:"input",topKeyDown:"keydown",topKeyPress:"keypress",topKeyUp:"keyup",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topMouseDown:"mousedown",topMouseMove:"mousemove",topMouseOut:"mouseout",topMouseOver:"mouseover",topMouseUp:"mouseup",topPaste:"paste",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topScroll:"scroll",topSeeked:"seeked",topSeeking:"seeking",topSelectionChange:"selectionchange",topStalled:"stalled",topSuspend:"suspend",topTextInput:"textInput",topTimeUpdate:"timeupdate",topTouchCancel:"touchcancel",topTouchEnd:"touchend",topTouchMove:"touchmove",topTouchStart:"touchstart",topVolumeChange:"volumechange",topWaiting:"waiting",topWheel:"wheel"},m="_reactListenersID"+String(Math.random()).slice(2),g=l({},s,{ReactEventListener:null,injection:{injectReactEventListener:function(e){e.setHandleTopLevel(g.handleTopLevel),g.ReactEventListener=e}},setEnabled:function(e){g.ReactEventListener&&g.ReactEventListener.setEnabled(e)},isEnabled:function(){return!(!g.ReactEventListener||!g.ReactEventListener.isEnabled())},listenTo:function(e,t){for(var n=t,a=o(n),s=i.registrationNameDependencies[e],u=r.topLevelTypes,c=0;c-1?void 0:"production"!==t.env.NODE_ENV?i(!1,"EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.",e):i(!1),!c.plugins[o]){n.extractEvents?void 0:"production"!==t.env.NODE_ENV?i(!1,"EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.",e):i(!1),c.plugins[o]=n;var a=n.eventTypes;for(var l in a)r(a[l],n,l)?void 0:"production"!==t.env.NODE_ENV?i(!1,"EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.",l,e):i(!1)}}}function r(e,n,o){c.eventNameDispatchConfigs.hasOwnProperty(o)?"production"!==t.env.NODE_ENV?i(!1,"EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.",o):i(!1):void 0,c.eventNameDispatchConfigs[o]=e;var r=e.phasedRegistrationNames;if(r){for(var s in r)if(r.hasOwnProperty(s)){var u=r[s];a(u,n,o)}return!0}return!!e.registrationName&&(a(e.registrationName,n,o),!0)}function a(e,n,o){c.registrationNameModules[e]?"production"!==t.env.NODE_ENV?i(!1,"EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.",e):i(!1):void 0,c.registrationNameModules[e]=n,c.registrationNameDependencies[e]=n.eventTypes[o].dependencies}var i=n(13),s=null,u={},c={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},injectEventPluginOrder:function(e){s?"production"!==t.env.NODE_ENV?i(!1,"EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React."):i(!1):void 0,s=Array.prototype.slice.call(e),o()},injectEventPluginsByName:function(e){var n=!1;for(var r in e)if(e.hasOwnProperty(r)){var a=e[r];u.hasOwnProperty(r)&&u[r]===a||(u[r]?"production"!==t.env.NODE_ENV?i(!1,"EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.",r):i(!1):void 0,u[r]=a,n=!0)}n&&o()},getPluginModuleForEvent:function(e){var t=e.dispatchConfig;if(t.registrationName)return c.registrationNameModules[t.registrationName]||null;for(var n in t.phasedRegistrationNames)if(t.phasedRegistrationNames.hasOwnProperty(n)){var o=c.registrationNameModules[t.phasedRegistrationNames[n]];if(o)return o}return null},_resetEventPlugins:function(){s=null;for(var e in u)u.hasOwnProperty(e)&&delete u[e];c.plugins.length=0;var t=c.eventNameDispatchConfigs;for(var n in t)t.hasOwnProperty(n)&&delete t[n];var o=c.registrationNameModules;for(var r in o)o.hasOwnProperty(r)&&delete o[r]}};e.exports=c}).call(t,n(4))},function(e,t,n){(function(t){"use strict";function o(e){return e===y.topMouseUp||e===y.topTouchEnd||e===y.topTouchCancel}function r(e){return e===y.topMouseMove||e===y.topTouchMove}function a(e){return e===y.topMouseDown||e===y.topTouchStart}function i(e,t,n,o){var r=e.type||"unknown-event";e.currentTarget=g.Mount.getNode(o),t?h.invokeGuardedCallbackWithCatch(r,n,e,o):h.invokeGuardedCallback(r,n,e,o),e.currentTarget=null}function s(e,n){var o=e._dispatchListeners,r=e._dispatchIDs;if("production"!==t.env.NODE_ENV&&d(e),Array.isArray(o))for(var a=0;a1){for(var f=Array(d),h=0;h1){for(var v=Array(h),m=0;m1){var t=e.indexOf(f,1);return t>-1?e.substr(0,t):e}return null},traverseEnterLeave:function(e,t,n,o,r){var a=c(e,t);a!==e&&l(e,a,n,o,!1,!0),a!==t&&l(a,t,n,r,!0,!1)},traverseTwoPhase:function(e,t,n){e&&(l("",e,t,n,!0,!1),l(e,"",t,n,!1,!0))},traverseTwoPhaseSkipTarget:function(e,t,n){e&&(l("",e,t,n,!0,!0),l(e,"",t,n,!0,!0))},traverseAncestors:function(e,t,n){l("",e,t,n,!0,!1)},getFirstCommonAncestorID:c,_getNextDescendantID:u,isAncestorIDOf:i,SEPARATOR:f};e.exports=m}).call(t,n(4))},function(e,t){"use strict";var n={injectCreateReactRootIndex:function(e){o.createReactRootIndex=e}},o={createReactRootIndex:null,injection:n};e.exports=o},function(e,t){"use strict";var n={remove:function(e){e._reactInternalInstance=void 0},get:function(e){return e._reactInternalInstance},has:function(e){return void 0!==e._reactInternalInstance},set:function(e,t){e._reactInternalInstance=t}};e.exports=n},function(e,t,n){"use strict";var o=n(49),r=/\/?>/,a={CHECKSUM_ATTR_NAME:"data-react-checksum",addChecksumToMarkup:function(e){var t=o(e);return e.replace(r," "+a.CHECKSUM_ATTR_NAME+'="'+t+'"$&')},canReuseMarkup:function(e,t){var n=t.getAttribute(a.CHECKSUM_ATTR_NAME);n=n&&parseInt(n,10);var r=o(e);return r===n}};e.exports=a},function(e,t){"use strict";function n(e){for(var t=1,n=0,r=0,a=e.length,i=a&-4;r "),R=!!s+"|"+e+"|"+d+"|"+w;if(m[R])return;if(m[R]=!0,s){var M="";"table"===d&&"tr"===e&&(M+=" Add a to your code to match the DOM tree generated by the browser."),"production"!==t.env.NODE_ENV?a(!1,"validateDOMNesting(...): <%s> cannot appear as a child of <%s>. See %s.%s",e,d,w,M):void 0}else"production"!==t.env.NODE_ENV?a(!1,"validateDOMNesting(...): <%s> cannot appear as a descendant of <%s>. See %s.",e,d,w):void 0}},i.ancestorInfoContextKey="__validateDOMNesting_ancestorInfo$"+Math.random().toString(36).slice(2),i.updatedAncestorInfo=d,i.isTagValidInContext=function(e,t){t=t||p;var n=t.parentTag,o=n&&n.tag;return f(e,o)&&!h(e,t)}}e.exports=i}).call(t,n(4))},function(e,t,n){(function(t){"use strict";function o(){if(!O&&(O=!0,g.EventEmitter.injectReactEventListener(m),g.EventPluginHub.injectEventPluginOrder(s),g.EventPluginHub.injectInstanceHandle(y),g.EventPluginHub.injectMount(E),g.EventPluginHub.injectEventPluginsByName({SimpleEventPlugin:D,EnterLeaveEventPlugin:u,ChangeEventPlugin:a,SelectEventPlugin:_,BeforeInputEventPlugin:r}),g.NativeComponent.injectGenericComponentClass(h),g.NativeComponent.injectTextComponentClass(v),g.Class.injectMixin(p),g.DOMProperty.injectDOMPropertyConfig(l),g.DOMProperty.injectDOMPropertyConfig(C),g.EmptyComponent.injectEmptyComponent("noscript"),g.Updates.injectReconcileTransaction(N),g.Updates.injectBatchingStrategy(f),g.RootIndex.injectCreateReactRootIndex(c.canUseDOM?i.createReactRootIndex:b.createReactRootIndex),g.Component.injectEnvironment(d),"production"!==t.env.NODE_ENV)){var e=c.canUseDOM&&window.location.href||"";if(/[?&]react_perf\b/.test(e)){var o=n(142);o.start()}}}var r=n(72),a=n(80),i=n(83),s=n(84),u=n(85),c=n(9),l=n(89),p=n(90),d=n(26),f=n(92),h=n(93),v=n(6),m=n(118),g=n(121),y=n(45),E=n(28),N=n(125),_=n(130),b=n(131),D=n(132),C=n(141),O=!1;e.exports={inject:o}}).call(t,n(4))},function(e,t,n){"use strict";function o(){var e=window.opera;return"object"==typeof e&&"function"==typeof e.version&&parseInt(e.version(),10)<=12}function r(e){return(e.ctrlKey||e.altKey||e.metaKey)&&!(e.ctrlKey&&e.altKey)}function a(e){switch(e){case R.topCompositionStart:return M.compositionStart;case R.topCompositionEnd:return M.compositionEnd;case R.topCompositionUpdate:return M.compositionUpdate}}function i(e,t){return e===R.topKeyDown&&t.keyCode===_}function s(e,t){switch(e){case R.topKeyUp:return N.indexOf(t.keyCode)!==-1;case R.topKeyDown:return t.keyCode!==_;case R.topKeyPress:case R.topMouseDown:case R.topBlur:return!0;default:return!1}}function u(e){var t=e.detail;return"object"==typeof t&&"data"in t?t.data:null}function c(e,t,n,o,r){var c,l;if(b?c=a(e):I?s(e,o)&&(c=M.compositionEnd):i(e,o)&&(c=M.compositionStart),!c)return null;O&&(I||c!==M.compositionStart?c===M.compositionEnd&&I&&(l=I.getData()):I=m.getPooled(t));var p=g.getPooled(c,n,o,r);if(l)p.data=l;else{var d=u(o);null!==d&&(p.data=d)}return h.accumulateTwoPhaseDispatches(p),p}function l(e,t){switch(e){case R.topCompositionEnd:return u(t);case R.topKeyPress:var n=t.which;return n!==x?null:(T=!0,w);case R.topTextInput:var o=t.data;return o===w&&T?null:o;default:return null}}function p(e,t){if(I){if(e===R.topCompositionEnd||s(e,t)){var n=I.getData();return m.release(I),I=null,n}return null}switch(e){case R.topPaste:return null;case R.topKeyPress:return t.which&&!r(t)?String.fromCharCode(t.which):null;case R.topCompositionEnd:return O?null:t.data;default:return null}}function d(e,t,n,o,r){var a;if(a=C?l(e,o):p(e,o),!a)return null;var i=y.getPooled(M.beforeInput,n,o,r);return i.data=a,h.accumulateTwoPhaseDispatches(i),i}var f=n(30),h=n(73),v=n(9),m=n(74),g=n(76),y=n(78),E=n(79),N=[9,13,27,32],_=229,b=v.canUseDOM&&"CompositionEvent"in window,D=null;v.canUseDOM&&"documentMode"in document&&(D=document.documentMode);var C=v.canUseDOM&&"TextEvent"in window&&!D&&!o(),O=v.canUseDOM&&(!b||D&&D>8&&D<=11),x=32,w=String.fromCharCode(x),R=f.topLevelTypes,M={beforeInput:{phasedRegistrationNames:{bubbled:E({onBeforeInput:null}),captured:E({onBeforeInputCapture:null})},dependencies:[R.topCompositionEnd,R.topKeyPress,R.topTextInput,R.topPaste]},compositionEnd:{phasedRegistrationNames:{bubbled:E({onCompositionEnd:null}),captured:E({onCompositionEndCapture:null})},dependencies:[R.topBlur,R.topCompositionEnd,R.topKeyDown,R.topKeyPress,R.topKeyUp,R.topMouseDown]},compositionStart:{phasedRegistrationNames:{bubbled:E({onCompositionStart:null}),captured:E({onCompositionStartCapture:null})},dependencies:[R.topBlur,R.topCompositionStart,R.topKeyDown,R.topKeyPress,R.topKeyUp,R.topMouseDown]},compositionUpdate:{phasedRegistrationNames:{bubbled:E({onCompositionUpdate:null}),captured:E({onCompositionUpdateCapture:null})},dependencies:[R.topBlur,R.topCompositionUpdate,R.topKeyDown,R.topKeyPress,R.topKeyUp,R.topMouseDown]}},T=!1,I=null,S={eventTypes:M,extractEvents:function(e,t,n,o,r){return[c(e,t,n,o,r),d(e,t,n,o,r)]}};e.exports=S},function(e,t,n){(function(t){"use strict";function o(e,t,n){var o=t.dispatchConfig.phasedRegistrationNames[n];return E(e,o)}function r(e,n,r){"production"!==t.env.NODE_ENV&&("production"!==t.env.NODE_ENV?v(e,"Dispatching id must not be null"):void 0);var a=n?y.bubbled:y.captured,i=o(e,r,a);i&&(r._dispatchListeners=m(r._dispatchListeners,i),r._dispatchIDs=m(r._dispatchIDs,e))}function a(e){e&&e.dispatchConfig.phasedRegistrationNames&&h.injection.getInstanceHandle().traverseTwoPhase(e.dispatchMarker,r,e)}function i(e){e&&e.dispatchConfig.phasedRegistrationNames&&h.injection.getInstanceHandle().traverseTwoPhaseSkipTarget(e.dispatchMarker,r,e)}function s(e,t,n){if(n&&n.dispatchConfig.registrationName){var o=n.dispatchConfig.registrationName,r=E(e,o);r&&(n._dispatchListeners=m(n._dispatchListeners,r),n._dispatchIDs=m(n._dispatchIDs,e))}}function u(e){e&&e.dispatchConfig.registrationName&&s(e.dispatchMarker,null,e)}function c(e){g(e,a)}function l(e){g(e,i)}function p(e,t,n,o){h.injection.getInstanceHandle().traverseEnterLeave(n,o,s,e,t)}function d(e){g(e,u)}var f=n(30),h=n(31),v=n(25),m=n(35),g=n(36),y=f.PropagationPhases,E=h.getListener,N={accumulateTwoPhaseDispatches:c,accumulateTwoPhaseDispatchesSkipTarget:l,accumulateDirectDispatches:d,accumulateEnterLeaveDispatches:p};e.exports=N}).call(t,n(4))},function(e,t,n){"use strict";function o(e){this._root=e,this._startText=this.getText(),this._fallbackText=null}var r=n(56),a=n(39),i=n(75);a(o.prototype,{destructor:function(){this._root=null,this._startText=null,this._fallbackText=null},getText:function(){return"value"in this._root?this._root.value:this._root[i()]},getData:function(){if(this._fallbackText)return this._fallbackText;var e,t,n=this._startText,o=n.length,r=this.getText(),a=r.length;for(e=0;e1?1-t:void 0;return this._fallbackText=r.slice(e,s),this._fallbackText}}),r.addPoolingTo(o),e.exports=o},function(e,t,n){"use strict";function o(){return!a&&r.canUseDOM&&(a="textContent"in document.documentElement?"textContent":"innerText"),a}var r=n(9),a=null;e.exports=o},function(e,t,n){"use strict";function o(e,t,n,o){r.call(this,e,t,n,o)}var r=n(77),a={data:null};r.augmentClass(o,a),e.exports=o},function(e,t,n){(function(t){"use strict";function o(e,t,n,o){this.dispatchConfig=e,this.dispatchMarker=t,this.nativeEvent=n;var r=this.constructor.Interface;for(var a in r)if(r.hasOwnProperty(a)){var s=r[a];s?this[a]=s(n):"target"===a?this.target=o:this[a]=n[a]}var u=null!=n.defaultPrevented?n.defaultPrevented:n.returnValue===!1;u?this.isDefaultPrevented=i.thatReturnsTrue:this.isDefaultPrevented=i.thatReturnsFalse,this.isPropagationStopped=i.thatReturnsFalse}var r=n(56),a=n(39),i=n(15),s=n(25),u={type:null,target:null,currentTarget:i.thatReturnsNull,eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};a(o.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;"production"!==t.env.NODE_ENV&&("production"!==t.env.NODE_ENV?s(e,"This synthetic event is reused for performance reasons. If you're seeing this, you're calling `preventDefault` on a released/nullified synthetic event. This is a no-op. See https://fb.me/react-event-pooling for more information."):void 0),e&&(e.preventDefault?e.preventDefault():e.returnValue=!1,this.isDefaultPrevented=i.thatReturnsTrue)},stopPropagation:function(){var e=this.nativeEvent;"production"!==t.env.NODE_ENV&&("production"!==t.env.NODE_ENV?s(e,"This synthetic event is reused for performance reasons. If you're seeing this, you're calling `stopPropagation` on a released/nullified synthetic event. This is a no-op. See https://fb.me/react-event-pooling for more information."):void 0),e&&(e.stopPropagation?e.stopPropagation():e.cancelBubble=!0,this.isPropagationStopped=i.thatReturnsTrue)},persist:function(){this.isPersistent=i.thatReturnsTrue},isPersistent:i.thatReturnsFalse,destructor:function(){var e=this.constructor.Interface;for(var t in e)this[t]=null;this.dispatchConfig=null,this.dispatchMarker=null,this.nativeEvent=null}}),o.Interface=u,o.augmentClass=function(e,t){var n=this,o=Object.create(n.prototype);a(o,e.prototype),e.prototype=o,e.prototype.constructor=e,e.Interface=a({},n.Interface,t),e.augmentClass=n.augmentClass,r.addPoolingTo(e,r.fourArgumentPooler)},r.addPoolingTo(o,r.fourArgumentPooler),e.exports=o}).call(t,n(4))},function(e,t,n){"use strict";function o(e,t,n,o){r.call(this,e,t,n,o)}var r=n(77),a={data:null};r.augmentClass(o,a),e.exports=o},function(e,t){"use strict";var n=function(e){var t;for(t in e)if(e.hasOwnProperty(t))return t;return null};e.exports=n},function(e,t,n){"use strict";function o(e){var t=e.nodeName&&e.nodeName.toLowerCase();return"select"===t||"input"===t&&"file"===e.type}function r(e){var t=D.getPooled(M.change,I,e,C(e));N.accumulateTwoPhaseDispatches(t),b.batchedUpdates(a,t)}function a(e){E.enqueueEvents(e),E.processEventQueue(!1)}function i(e,t){T=e,I=t,T.attachEvent("onchange",r)}function s(){T&&(T.detachEvent("onchange",r),T=null,I=null)}function u(e,t,n){if(e===R.topChange)return n}function c(e,t,n){e===R.topFocus?(s(),i(t,n)):e===R.topBlur&&s()}function l(e,t){T=e,I=t,S=e.value,P=Object.getOwnPropertyDescriptor(e.constructor.prototype,"value"),Object.defineProperty(T,"value",A),T.attachEvent("onpropertychange",d)}function p(){T&&(delete T.value,T.detachEvent("onpropertychange",d),T=null,I=null,S=null,P=null)}function d(e){if("value"===e.propertyName){var t=e.srcElement.value;t!==S&&(S=t,r(e))}}function f(e,t,n){if(e===R.topInput)return n}function h(e,t,n){e===R.topFocus?(p(),l(t,n)):e===R.topBlur&&p()}function v(e,t,n){if((e===R.topSelectionChange||e===R.topKeyUp||e===R.topKeyDown)&&T&&T.value!==S)return S=T.value,I}function m(e){return e.nodeName&&"input"===e.nodeName.toLowerCase()&&("checkbox"===e.type||"radio"===e.type)}function g(e,t,n){if(e===R.topClick)return n}var y=n(30),E=n(31),N=n(73),_=n(9),b=n(54),D=n(77),C=n(81),O=n(40),x=n(82),w=n(79),R=y.topLevelTypes,M={change:{phasedRegistrationNames:{bubbled:w({onChange:null}),captured:w({onChangeCapture:null})},dependencies:[R.topBlur,R.topChange,R.topClick,R.topFocus,R.topInput,R.topKeyDown,R.topKeyUp,R.topSelectionChange]}},T=null,I=null,S=null,P=null,k=!1;_.canUseDOM&&(k=O("change")&&(!("documentMode"in document)||document.documentMode>8));var V=!1;_.canUseDOM&&(V=O("input")&&(!("documentMode"in document)||document.documentMode>9));var A={get:function(){return P.get.call(this)},set:function(e){S=""+e,P.set.call(this,e)}},L={eventTypes:M,extractEvents:function(e,t,n,r,a){var i,s;if(o(t)?k?i=u:s=c:x(t)?V?i=f:(i=v,s=h):m(t)&&(i=g),i){var l=i(e,t,n);if(l){var p=D.getPooled(M.change,l,r,a);return p.type="change",N.accumulateTwoPhaseDispatches(p),p}}s&&s(e,t,n)}};e.exports=L},function(e,t){"use strict";function n(e){var t=e.target||e.srcElement||window;return 3===t.nodeType?t.parentNode:t}e.exports=n},function(e,t){"use strict";function n(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&o[e.type]||"textarea"===t)}var o={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};e.exports=n},function(e,t){"use strict";var n=0,o={createReactRootIndex:function(){return n++}};e.exports=o},function(e,t,n){"use strict";var o=n(79),r=[o({ResponderEventPlugin:null}),o({SimpleEventPlugin:null}),o({TapEventPlugin:null}),o({EnterLeaveEventPlugin:null}),o({ChangeEventPlugin:null}),o({SelectEventPlugin:null}),o({BeforeInputEventPlugin:null})];e.exports=r},function(e,t,n){"use strict";var o=n(30),r=n(73),a=n(86),i=n(28),s=n(79),u=o.topLevelTypes,c=i.getFirstReactDOM,l={mouseEnter:{registrationName:s({onMouseEnter:null}),dependencies:[u.topMouseOut,u.topMouseOver]},mouseLeave:{registrationName:s({onMouseLeave:null}),dependencies:[u.topMouseOut,u.topMouseOver]}},p=[null,null],d={eventTypes:l,extractEvents:function(e,t,n,o,s){if(e===u.topMouseOver&&(o.relatedTarget||o.fromElement))return null;if(e!==u.topMouseOut&&e!==u.topMouseOver)return null;var d;if(t.window===t)d=t;else{var f=t.ownerDocument;d=f?f.defaultView||f.parentWindow:window}var h,v,m="",g="";if(e===u.topMouseOut?(h=t,m=n,v=c(o.relatedTarget||o.toElement),v?g=i.getID(v):v=d,v=v||d):(h=d,v=t,g=n),h===v)return null;var y=a.getPooled(l.mouseLeave,m,o,s);y.type="mouseleave",y.target=h,y.relatedTarget=v;var E=a.getPooled(l.mouseEnter,g,o,s);return E.type="mouseenter",E.target=v,E.relatedTarget=h,r.accumulateEnterLeaveDispatches(y,E,m,g),p[0]=y,p[1]=E,p}};e.exports=d},function(e,t,n){"use strict";function o(e,t,n,o){r.call(this,e,t,n,o)}var r=n(87),a=n(38),i=n(88),s={screenX:null,screenY:null,clientX:null,clientY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:i,button:function(e){var t=e.button;return"which"in e?t:2===t?2:4===t?1:0},buttons:null,relatedTarget:function(e){return e.relatedTarget||(e.fromElement===e.srcElement?e.toElement:e.fromElement)},pageX:function(e){return"pageX"in e?e.pageX:e.clientX+a.currentScrollLeft},pageY:function(e){return"pageY"in e?e.pageY:e.clientY+a.currentScrollTop}};r.augmentClass(o,s),e.exports=o},function(e,t,n){"use strict";function o(e,t,n,o){r.call(this,e,t,n,o)}var r=n(77),a=n(81),i={view:function(e){if(e.view)return e.view;var t=a(e);if(null!=t&&t.window===t)return t;var n=t.ownerDocument;return n?n.defaultView||n.parentWindow:window},detail:function(e){return e.detail||0}};r.augmentClass(o,i),e.exports=o},function(e,t){"use strict";function n(e){var t=this,n=t.nativeEvent;if(n.getModifierState)return n.getModifierState(e);var o=r[e];return!!o&&!!n[o]}function o(e){return n}var r={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};e.exports=o},function(e,t,n){"use strict";var o,r=n(23),a=n(9),i=r.injection.MUST_USE_ATTRIBUTE,s=r.injection.MUST_USE_PROPERTY,u=r.injection.HAS_BOOLEAN_VALUE,c=r.injection.HAS_SIDE_EFFECTS,l=r.injection.HAS_NUMERIC_VALUE,p=r.injection.HAS_POSITIVE_NUMERIC_VALUE,d=r.injection.HAS_OVERLOADED_BOOLEAN_VALUE;if(a.canUseDOM){var f=document.implementation;o=f&&f.hasFeature&&f.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")}var h={isCustomAttribute:RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\d_.\-]*$/),Properties:{accept:null,acceptCharset:null,accessKey:null,action:null,allowFullScreen:i|u,allowTransparency:i,alt:null,async:u,autoComplete:null,autoPlay:u,capture:i|u,cellPadding:null,cellSpacing:null,charSet:i,challenge:i,checked:s|u,classID:i,className:o?i:s,cols:i|p,colSpan:null,content:null,contentEditable:null,contextMenu:i,controls:s|u,coords:null,crossOrigin:null,data:null,dateTime:i,default:u,defer:u,dir:null,disabled:i|u,download:d,draggable:null,encType:null,form:i,formAction:i,formEncType:i,formMethod:i,formNoValidate:u,formTarget:i,frameBorder:i,headers:null,height:i,hidden:i|u,high:null,href:null,hrefLang:null,htmlFor:null,httpEquiv:null,icon:null,id:s,inputMode:i,integrity:null,is:i,keyParams:i,keyType:i,kind:null,label:null,lang:null,list:i,loop:s|u,low:null,manifest:i,marginHeight:null,marginWidth:null,max:null,maxLength:i,media:i,mediaGroup:null,method:null,min:null,minLength:i,multiple:s|u,muted:s|u,name:null,nonce:i,noValidate:u,open:u,optimum:null,pattern:null,placeholder:null,poster:null,preload:null,radioGroup:null,readOnly:s|u,rel:null,required:u,reversed:u,role:i,rows:i|p,rowSpan:null,sandbox:null,scope:null,scoped:u,scrolling:null,seamless:i|u,selected:s|u,shape:null,size:i|p,sizes:i,span:p,spellCheck:null,src:null,srcDoc:s,srcLang:null,srcSet:i,start:l,step:null,style:null,summary:null,tabIndex:null,target:null,title:null,type:null,useMap:null,value:s|c,width:i,wmode:i,wrap:null,about:i,datatype:i,inlist:i,prefix:i,property:i,resource:i,typeof:i,vocab:i,autoCapitalize:i,autoCorrect:i,autoSave:null,color:null,itemProp:i,itemScope:i|u,itemType:i,itemID:i,itemRef:i,results:null,security:i,unselectable:i},DOMAttributeNames:{acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},DOMPropertyNames:{autoComplete:"autocomplete",autoFocus:"autofocus",autoPlay:"autoplay",autoSave:"autosave",encType:"encoding",hrefLang:"hreflang",radioGroup:"radiogroup",spellCheck:"spellcheck",srcDoc:"srcdoc",srcSet:"srcset"}};e.exports=h},function(e,t,n){(function(t){"use strict";var o=n(47),r=n(91),a=n(25),i="_getDOMNodeDidWarn",s={getDOMNode:function(){return"production"!==t.env.NODE_ENV?a(this.constructor[i],"%s.getDOMNode(...) is deprecated. Please use ReactDOM.findDOMNode(instance) instead.",o.get(this).getName()||this.tagName||"Unknown"):void 0,this.constructor[i]=!0,r(this)}};e.exports=s}).call(t,n(4))},function(e,t,n){(function(t){"use strict";function o(e){if("production"!==t.env.NODE_ENV){var n=r.current;null!==n&&("production"!==t.env.NODE_ENV?u(n._warnedAboutRefsInRender,"%s is accessing getDOMNode or findDOMNode inside its render(). render() should be a pure function of props and state. It should never access something that requires stale data from the previous render, such as refs. Move this logic to componentDidMount and componentDidUpdate instead.",n.getName()||"A component"):void 0,n._warnedAboutRefsInRender=!0)}return null==e?null:1===e.nodeType?e:a.has(e)?i.getNodeFromInstance(e):(null!=e.render&&"function"==typeof e.render?"production"!==t.env.NODE_ENV?s(!1,"findDOMNode was called on an unmounted component."):s(!1):void 0,void("production"!==t.env.NODE_ENV?s(!1,"Element appears to be neither ReactComponent nor DOMNode (keys: %s)",Object.keys(e)):s(!1)))}var r=n(5),a=n(47),i=n(28),s=n(13),u=n(25);e.exports=o}).call(t,n(4))},function(e,t,n){"use strict";function o(){this.reinitializeTransaction()}var r=n(54),a=n(57),i=n(39),s=n(15),u={initialize:s,close:function(){d.isBatchingUpdates=!1}},c={initialize:s,close:r.flushBatchedUpdates.bind(r)},l=[c,u];i(o.prototype,a.Mixin,{getTransactionWrappers:function(){return l}});var p=new o,d={isBatchingUpdates:!1,batchedUpdates:function(e,t,n,o,r,a){var i=d.isBatchingUpdates;d.isBatchingUpdates=!0,i?e(t,n,o,r,a):p.perform(e,null,t,n,o,r,a)}};e.exports=d},function(e,t,n){(function(t){"use strict";function o(e){if(e){var t=e._currentElement._owner||null;if(t){var n=t.getName();if(n)return" This DOM node was rendered by `"+n+"`."}}return""}function r(){if("production"!==t.env.NODE_ENV){var e=this._reactInternalComponent;"production"!==t.env.NODE_ENV?G(!1,"ReactDOMComponent: Do not access .getDOMNode() of a DOM node; instead, use the node directly.%s",o(e)):void 0}return this}function a(){var e=this._reactInternalComponent;return"production"!==t.env.NODE_ENV&&("production"!==t.env.NODE_ENV?G(!1,"ReactDOMComponent: Do not access .isMounted() of a DOM node.%s",o(e)):void 0),!!e}function i(){if("production"!==t.env.NODE_ENV){var e=this._reactInternalComponent;"production"!==t.env.NODE_ENV?G(!1,"ReactDOMComponent: Do not access .setState(), .replaceState(), or .forceUpdate() of a DOM node. This is a no-op.%s",o(e)):void 0}}function s(e,n){var r=this._reactInternalComponent;"production"!==t.env.NODE_ENV&&("production"!==t.env.NODE_ENV?G(!1,"ReactDOMComponent: Do not access .setProps() of a DOM node. Instead, call ReactDOM.render again at the top level.%s",o(r)):void 0),r&&(L.enqueueSetPropsInternal(r,e),n&&L.enqueueCallbackInternal(r,n))}function u(e,n){var r=this._reactInternalComponent;"production"!==t.env.NODE_ENV&&("production"!==t.env.NODE_ENV?G(!1,"ReactDOMComponent: Do not access .replaceProps() of a DOM node. Instead, call ReactDOM.render again at the top level.%s",o(r)):void 0),r&&(L.enqueueReplacePropsInternal(r,e),n&&L.enqueueCallbackInternal(r,n))}function c(e){if("object"==typeof e){if(Array.isArray(e))return"["+e.map(c).join(", ")+"]";var t=[];for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var o=/^[a-z$_][\w$_]*$/i.test(n)?n:JSON.stringify(n);t.push(o+": "+c(e[n]))}return"{"+t.join(", ")+"}"}return"string"==typeof e?JSON.stringify(e):"function"==typeof e?"[function object]":String(e)}function l(e,n,o){if(null!=e&&null!=n&&!Y(e,n)){var r,a=o._tag,i=o._currentElement._owner;i&&(r=i.getName());var s=r+"|"+a;oe.hasOwnProperty(s)||(oe[s]=!0,"production"!==t.env.NODE_ENV?G(!1,"`%s` was passed a style object that has previously been mutated. Mutating `style` is deprecated. Consider cloning it beforehand. Check the `render` %s. Previous style: %s. Mutated style: %s.",a,i?"of `"+r+"`":"using <"+a+">",c(e),c(n)):void 0)}}function p(e,n){n&&("production"!==t.env.NODE_ENV&&se[e._tag]&&("production"!==t.env.NODE_ENV?G(null==n.children&&null==n.dangerouslySetInnerHTML,"%s is a void element tag and must not have `children` or use `props.dangerouslySetInnerHTML`.%s",e._tag,e._currentElement._owner?" Check the render method of "+e._currentElement._owner.getName()+".":""):void 0),null!=n.dangerouslySetInnerHTML&&(null!=n.children?"production"!==t.env.NODE_ENV?B(!1,"Can only set one of `children` or `props.dangerouslySetInnerHTML`."):B(!1):void 0,"object"==typeof n.dangerouslySetInnerHTML&&te in n.dangerouslySetInnerHTML?void 0:"production"!==t.env.NODE_ENV?B(!1,"`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information."):B(!1)),"production"!==t.env.NODE_ENV&&("production"!==t.env.NODE_ENV?G(null==n.innerHTML,"Directly setting property `innerHTML` is not permitted. For more information, lookup documentation on `dangerouslySetInnerHTML`."):void 0,"production"!==t.env.NODE_ENV?G(!n.contentEditable||null==n.children,"A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional."):void 0),null!=n.style&&"object"!=typeof n.style?"production"!==t.env.NODE_ENV?B(!1,"The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.%s",o(e)):B(!1):void 0)}function d(e,n,o,r){"production"!==t.env.NODE_ENV&&("production"!==t.env.NODE_ENV?G("onScroll"!==n||W("scroll",!0),"This browser doesn't support the `onScroll` event"):void 0);var a=k.findReactContainerForID(e);if(a){var i=a.nodeType===ne?a.ownerDocument:a;Q(n,i)}r.getReactMountReady().enqueue(f,{id:e,registrationName:n,listener:o})}function f(){var e=this;w.putListener(e.id,e.registrationName,e.listener)}function h(){var e=this;e._rootNodeID?void 0:"production"!==t.env.NODE_ENV?B(!1,"Must be mounted to trap events"):B(!1);var n=k.getNode(e._rootNodeID);switch(n?void 0:"production"!==t.env.NODE_ENV?B(!1,"trapBubbledEvent(...): Requires node to be rendered."):B(!1),e._tag){case"iframe":e._wrapperState.listeners=[w.trapBubbledEvent(x.topLevelTypes.topLoad,"load",n)];break;case"video":case"audio":e._wrapperState.listeners=[];for(var o in re)re.hasOwnProperty(o)&&e._wrapperState.listeners.push(w.trapBubbledEvent(x.topLevelTypes[o],re[o],n));break;case"img":e._wrapperState.listeners=[w.trapBubbledEvent(x.topLevelTypes.topError,"error",n),w.trapBubbledEvent(x.topLevelTypes.topLoad,"load",n)];break;case"form":e._wrapperState.listeners=[w.trapBubbledEvent(x.topLevelTypes.topReset,"reset",n),w.trapBubbledEvent(x.topLevelTypes.topSubmit,"submit",n)]}}function v(){T.mountReadyWrapper(this)}function m(){S.postUpdateWrapper(this)}function g(e){le.call(ce,e)||(ue.test(e)?void 0:"production"!==t.env.NODE_ENV?B(!1,"Invalid tag: %s",e):B(!1),ce[e]=!0)}function y(e,t){e=U({},e);var n=e[z.ancestorInfoContextKey];return e[z.ancestorInfoContextKey]=z.updatedAncestorInfo(n,t._tag,t),e}function E(e,t){return e.indexOf("-")>=0||null!=t.is}function N(e){g(e),this._tag=e.toLowerCase(),this._renderedChildren=null,this._previousStyle=null,this._previousStyleCopy=null,this._rootNodeID=null,this._wrapperState=null,this._topLevelWrapper=null,this._nodeWithLegacyProperties=null,"production"!==t.env.NODE_ENV&&(this._unprocessedContextDev=null,this._processedContextDev=null)}var _,b=n(94),D=n(96),C=n(23),O=n(22),x=n(30),w=n(29),R=n(26),M=n(104),T=n(105),I=n(109),S=n(112),P=n(113),k=n(28),V=n(114),A=n(18),L=n(53),U=n(39),j=n(43),F=n(21),B=n(13),W=n(40),q=n(79),K=n(19),H=n(20),Y=n(117),z=n(70),G=n(25),X=w.deleteListener,Q=w.listenTo,$=w.registrationNameModules,J={string:!0,number:!0},Z=q({children:null}),ee=q({style:null}),te=q({__html:null}),ne=1;"production"!==t.env.NODE_ENV&&(_={props:{enumerable:!1,get:function(){var e=this._reactInternalComponent;return"production"!==t.env.NODE_ENV?G(!1,"ReactDOMComponent: Do not access .props of a DOM node; instead, recreate the props as `render` did originally or read the DOM properties/attributes directly from this node (e.g., this.refs.box.className).%s",o(e)):void 0,e._currentElement.props}}});var oe={},re={topAbort:"abort",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange", 18 | topSeeked:"seeked",topSeeking:"seeking",topStalled:"stalled",topSuspend:"suspend",topTimeUpdate:"timeupdate",topVolumeChange:"volumechange",topWaiting:"waiting"},ae={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},ie={listing:!0,pre:!0,textarea:!0},se=U({menuitem:!0},ae),ue=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,ce={},le={}.hasOwnProperty;N.displayName="ReactDOMComponent",N.Mixin={construct:function(e){this._currentElement=e},mountComponent:function(e,n,o){this._rootNodeID=e;var r=this._currentElement.props;switch(this._tag){case"iframe":case"img":case"form":case"video":case"audio":this._wrapperState={listeners:null},n.getReactMountReady().enqueue(h,this);break;case"button":r=M.getNativeProps(this,r,o);break;case"input":T.mountWrapper(this,r,o),r=T.getNativeProps(this,r,o);break;case"option":I.mountWrapper(this,r,o),r=I.getNativeProps(this,r,o);break;case"select":S.mountWrapper(this,r,o),r=S.getNativeProps(this,r,o),o=S.processChildContext(this,r,o);break;case"textarea":P.mountWrapper(this,r,o),r=P.getNativeProps(this,r,o)}p(this,r),"production"!==t.env.NODE_ENV&&o[z.ancestorInfoContextKey]&&z(this._tag,this,o[z.ancestorInfoContextKey]),"production"!==t.env.NODE_ENV&&(this._unprocessedContextDev=o,this._processedContextDev=y(o,this),o=this._processedContextDev);var a;if(n.useCreateElement){var i=o[k.ownerDocumentContextKey],s=i.createElement(this._currentElement.type);O.setAttributeForID(s,this._rootNodeID),k.getID(s),this._updateDOMProperties({},r,n,s),this._createInitialChildren(n,r,o,s),a=s}else{var u=this._createOpenTagMarkupAndPutListeners(n,r),c=this._createContentMarkup(n,r,o);a=!c&&ae[this._tag]?u+"/>":u+">"+c+""}switch(this._tag){case"input":n.getReactMountReady().enqueue(v,this);case"button":case"select":case"textarea":r.autoFocus&&n.getReactMountReady().enqueue(b.focusDOMComponent,this)}return a},_createOpenTagMarkupAndPutListeners:function(e,n){var o="<"+this._currentElement.type;for(var r in n)if(n.hasOwnProperty(r)){var a=n[r];if(null!=a)if($.hasOwnProperty(r))a&&d(this._rootNodeID,r,a,e);else{r===ee&&(a&&("production"!==t.env.NODE_ENV&&(this._previousStyle=a),a=this._previousStyleCopy=U({},n.style)),a=D.createMarkupForStyles(a));var i=null;null!=this._tag&&E(this._tag,n)?r!==Z&&(i=O.createMarkupForCustomAttribute(r,a)):i=O.createMarkupForProperty(r,a),i&&(o+=" "+i)}}if(e.renderToStaticMarkup)return o;var s=O.createMarkupForID(this._rootNodeID);return o+" "+s},_createContentMarkup:function(e,t,n){var o="",r=t.dangerouslySetInnerHTML;if(null!=r)null!=r.__html&&(o=r.__html);else{var a=J[typeof t.children]?t.children:null,i=null!=a?null:t.children;if(null!=a)o=F(a);else if(null!=i){var s=this.mountChildren(i,e,n);o=s.join("")}}return ie[this._tag]&&"\n"===o.charAt(0)?"\n"+o:o},_createInitialChildren:function(e,t,n,o){var r=t.dangerouslySetInnerHTML;if(null!=r)null!=r.__html&&K(o,r.__html);else{var a=J[typeof t.children]?t.children:null,i=null!=a?null:t.children;if(null!=a)H(o,a);else if(null!=i)for(var s=this.mountChildren(i,e,n),u=0;u tried to unmount. Because of cross-browser quirks it is impossible to unmount some top-level components (eg , , and ) reliably and efficiently. To fix this, have a single top-level component that never unmounts render these elements.",this._tag):B(!1)}if(this.unmountChildren(),w.deleteAllListeners(this._rootNodeID),R.unmountIDFromEnvironment(this._rootNodeID),this._rootNodeID=null,this._wrapperState=null,this._nodeWithLegacyProperties){var o=this._nodeWithLegacyProperties;o._reactInternalComponent=null,this._nodeWithLegacyProperties=null}},getPublicInstance:function(){if(!this._nodeWithLegacyProperties){var e=k.getNode(this._rootNodeID);e._reactInternalComponent=this,e.getDOMNode=r,e.isMounted=a,e.setState=i,e.replaceState=i,e.forceUpdate=i,e.setProps=s,e.replaceProps=u,"production"!==t.env.NODE_ENV&&j?Object.defineProperties(e,_):e.props=this._currentElement.props,this._nodeWithLegacyProperties=e}return this._nodeWithLegacyProperties}},A.measureMethods(N,"ReactDOMComponent",{mountComponent:"mountComponent",updateComponent:"updateComponent"}),U(N.prototype,N.Mixin,V.Mixin),e.exports=N}).call(t,n(4))},function(e,t,n){"use strict";var o=n(28),r=n(91),a=n(95),i={componentDidMount:function(){this.props.autoFocus&&a(r(this))}},s={Mixin:i,focusDOMComponent:function(){a(o.getNode(this._rootNodeID))}};e.exports=s},function(e,t){"use strict";function n(e){try{e.focus()}catch(e){}}e.exports=n},function(e,t,n){(function(t){"use strict";var o=n(97),r=n(9),a=n(18),i=n(98),s=n(100),u=n(101),c=n(103),l=n(25),p=c(function(e){return u(e)}),d=!1,f="cssFloat";if(r.canUseDOM){var h=document.createElement("div").style;try{h.font=""}catch(e){d=!0}void 0===document.documentElement.style.cssFloat&&(f="styleFloat")}if("production"!==t.env.NODE_ENV)var v=/^(?:webkit|moz|o)[A-Z]/,m=/;\s*$/,g={},y={},E=function(e){g.hasOwnProperty(e)&&g[e]||(g[e]=!0,"production"!==t.env.NODE_ENV?l(!1,"Unsupported style property %s. Did you mean %s?",e,i(e)):void 0)},N=function(e){g.hasOwnProperty(e)&&g[e]||(g[e]=!0,"production"!==t.env.NODE_ENV?l(!1,"Unsupported vendor-prefixed style property %s. Did you mean %s?",e,e.charAt(0).toUpperCase()+e.slice(1)):void 0)},_=function(e,n){y.hasOwnProperty(n)&&y[n]||(y[n]=!0,"production"!==t.env.NODE_ENV?l(!1,'Style property values shouldn\'t contain a semicolon. Try "%s: %s" instead.',e,n.replace(m,"")):void 0)},b=function(e,t){e.indexOf("-")>-1?E(e):v.test(e)?N(e):m.test(t)&&_(e,t)};var D={createMarkupForStyles:function(e){var n="";for(var o in e)if(e.hasOwnProperty(o)){var r=e[o];"production"!==t.env.NODE_ENV&&b(o,r),null!=r&&(n+=p(o)+":",n+=s(o,r)+";")}return n||null},setValueForStyles:function(e,n){var r=e.style;for(var a in n)if(n.hasOwnProperty(a)){"production"!==t.env.NODE_ENV&&b(a,n[a]);var i=s(a,n[a]);if("float"===a&&(a=f),i)r[a]=i;else{var u=d&&o.shorthandPropertyExpansions[a];if(u)for(var c in u)r[c]="";else r[a]=""}}}};a.measureMethods(D,"CSSPropertyOperations",{setValueForStyles:"setValueForStyles"}),e.exports=D}).call(t,n(4))},function(e,t){"use strict";function n(e,t){return e+t.charAt(0).toUpperCase()+t.substring(1)}var o={animationIterationCount:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,stopOpacity:!0,strokeDashoffset:!0,strokeOpacity:!0,strokeWidth:!0},r=["Webkit","ms","Moz","O"];Object.keys(o).forEach(function(e){r.forEach(function(t){o[n(t,e)]=o[e]})});var a={background:{backgroundAttachment:!0,backgroundColor:!0,backgroundImage:!0,backgroundPositionX:!0,backgroundPositionY:!0,backgroundRepeat:!0},backgroundPosition:{backgroundPositionX:!0,backgroundPositionY:!0},border:{borderWidth:!0,borderStyle:!0,borderColor:!0},borderBottom:{borderBottomWidth:!0,borderBottomStyle:!0,borderBottomColor:!0},borderLeft:{borderLeftWidth:!0,borderLeftStyle:!0,borderLeftColor:!0},borderRight:{borderRightWidth:!0,borderRightStyle:!0,borderRightColor:!0},borderTop:{borderTopWidth:!0,borderTopStyle:!0,borderTopColor:!0},font:{fontStyle:!0,fontVariant:!0,fontWeight:!0,fontSize:!0,lineHeight:!0,fontFamily:!0},outline:{outlineWidth:!0,outlineStyle:!0,outlineColor:!0}},i={isUnitlessNumber:o,shorthandPropertyExpansions:a};e.exports=i},function(e,t,n){"use strict";function o(e){return r(e.replace(a,"ms-"))}var r=n(99),a=/^-ms-/;e.exports=o},function(e,t){"use strict";function n(e){return e.replace(o,function(e,t){return t.toUpperCase()})}var o=/-(.)/g;e.exports=n},function(e,t,n){"use strict";function o(e,t){var n=null==t||"boolean"==typeof t||""===t;if(n)return"";var o=isNaN(t);return o||0===t||a.hasOwnProperty(e)&&a[e]?""+t:("string"==typeof t&&(t=t.trim()),t+"px")}var r=n(97),a=r.isUnitlessNumber;e.exports=o},function(e,t,n){"use strict";function o(e){return r(e).replace(a,"-ms-")}var r=n(102),a=/^ms-/;e.exports=o},function(e,t){"use strict";function n(e){return e.replace(o,"-$1").toLowerCase()}var o=/([A-Z])/g;e.exports=n},function(e,t){"use strict";function n(e){var t={};return function(n){return t.hasOwnProperty(n)||(t[n]=e.call(this,n)),t[n]}}e.exports=n},function(e,t){"use strict";var n={onClick:!0,onDoubleClick:!0,onMouseDown:!0,onMouseMove:!0,onMouseUp:!0,onClickCapture:!0,onDoubleClickCapture:!0,onMouseDownCapture:!0,onMouseMoveCapture:!0,onMouseUpCapture:!0},o={getNativeProps:function(e,t,o){if(!t.disabled)return t;var r={};for(var a in t)t.hasOwnProperty(a)&&!n[a]&&(r[a]=t[a]);return r}};e.exports=o},function(e,t,n){(function(t){"use strict";function o(){this._rootNodeID&&d.updateWrapper(this)}function r(e){var n=this._currentElement.props,r=i.executeOnChange(n,e);u.asap(o,this);var a=n.name;if("radio"===n.type&&null!=a){for(var c=s.getNode(this._rootNodeID),d=c;d.parentNode;)d=d.parentNode;for(var f=d.querySelectorAll("input[name="+JSON.stringify(""+a)+'][type="radio"]'),h=0;h>"}var y=n(42),E=n(66),N=n(15),_=n(108),b="<>",D={array:r("array"),bool:r("boolean"),func:r("function"),number:r("number"),object:r("object"),string:r("string"),any:a(),arrayOf:i,element:s(),instanceOf:u,node:d(),objectOf:l,oneOf:c,oneOfType:p,shape:f};e.exports=D},function(e,t){"use strict";function n(e){var t=e&&(o&&e[o]||e[r]);if("function"==typeof t)return t}var o="function"==typeof Symbol&&Symbol.iterator,r="@@iterator";e.exports=n},function(e,t,n){(function(t){"use strict";var o=n(110),r=n(112),a=n(39),i=n(25),s=r.valueContextKey,u={mountWrapper:function(e,n,o){"production"!==t.env.NODE_ENV&&("production"!==t.env.NODE_ENV?i(null==n.selected,"Use the `defaultValue` or `value` props on must be a scalar value if `multiple` is false.%s",i,r(o)):void 0)}}function i(e,t,n){var o,r,a=c.getNode(e._rootNodeID).options;if(t){for(o={},r=0;r."):c(!1):void 0;var r=u({},n,{defaultValue:void 0,value:void 0,children:e._wrapperState.initialValue,onChange:e._wrapperState.onChange});return r},mountWrapper:function(e,n){"production"!==t.env.NODE_ENV&&a.checkPropTypes("textarea",n,e._currentElement._owner);var o=n.defaultValue,i=n.children;null!=i&&("production"!==t.env.NODE_ENV&&("production"!==t.env.NODE_ENV?l(!1,"Use the `defaultValue` or `value` props instead of setting children on