material-ui-cordova
Version:
React components that implement Google's Material Design.
653 lines (510 loc) • 2.53 MB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("./react"), require("./react-dom"), require("react-transition-group/TransitionGroup"));
else if(typeof define === 'function' && define.amd)
define("material-ui", ["react", "react-dom", "react-transition-group/TransitionGroup"], factory);
else if(typeof exports === 'object')
exports["material-ui"] = factory(require("./react"), require("./react-dom"), require("react-transition-group/TransitionGroup"));
else
root["material-ui"] = factory(root["React"], root["ReactDOM"], root["react-transition-group/TransitionGroup"]);
})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_9__, __WEBPACK_EXTERNAL_MODULE_206__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 159);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(process) {/**
* Copyright (c) 2013-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
if (process.env.NODE_ENV !== 'production') {
var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&
Symbol.for &&
Symbol.for('react.element')) ||
0xeac7;
var isValidElement = function(object) {
return typeof object === 'object' &&
object !== null &&
object.$$typeof === REACT_ELEMENT_TYPE;
};
// By explicitly using `prop-types` you are opting into new development behavior.
// http://fb.me/prop-types-in-prod
var throwOnDirectAccess = true;
module.exports = __webpack_require__(162)(isValidElement, throwOnDirectAccess);
} else {
// By explicitly using `prop-types` you are opting into new production behavior.
// http://fb.me/prop-types-in-prod
module.exports = __webpack_require__(165)();
}
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
/***/ }),
/* 1 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE_1__;
/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(process) {
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.sheetsManager = exports.preset = undefined;
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _propTypes = __webpack_require__(0);
var _propTypes2 = _interopRequireDefault(_propTypes);
var _warning = __webpack_require__(4);
var _warning2 = _interopRequireDefault(_warning);
var _hoistNonReactStatics = __webpack_require__(166);
var _hoistNonReactStatics2 = _interopRequireDefault(_hoistNonReactStatics);
var _wrapDisplayName = __webpack_require__(27);
var _wrapDisplayName2 = _interopRequireDefault(_wrapDisplayName);
var _getDisplayName = __webpack_require__(90);
var _getDisplayName2 = _interopRequireDefault(_getDisplayName);
var _contextTypes = __webpack_require__(167);
var _contextTypes2 = _interopRequireDefault(_contextTypes);
var _jss = __webpack_require__(169);
var _jssGlobal = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"jss-global\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
var _jssGlobal2 = _interopRequireDefault(_jssGlobal);
var _jssNested = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"jss-nested\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
var _jssNested2 = _interopRequireDefault(_jssNested);
var _jssCamelCase = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"jss-camel-case\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
var _jssCamelCase2 = _interopRequireDefault(_jssCamelCase);
var _jssDefaultUnit = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"jss-default-unit\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
var _jssDefaultUnit2 = _interopRequireDefault(_jssDefaultUnit);
var _jssVendorPrefixer = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"jss-vendor-prefixer\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
var _jssVendorPrefixer2 = _interopRequireDefault(_jssVendorPrefixer);
var _jssPropsSort = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module \"jss-props-sort\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
var _jssPropsSort2 = _interopRequireDefault(_jssPropsSort);
var _ns = __webpack_require__(91);
var ns = _interopRequireWildcard(_ns);
var _createMuiTheme = __webpack_require__(64);
var _createMuiTheme2 = _interopRequireDefault(_createMuiTheme);
var _themeListener = __webpack_require__(67);
var _themeListener2 = _interopRequireDefault(_themeListener);
var _createGenerateClassName = __webpack_require__(192);
var _createGenerateClassName2 = _interopRequireDefault(_createGenerateClassName);
var _getStylesCreator = __webpack_require__(193);
var _getStylesCreator2 = _interopRequireDefault(_getStylesCreator);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } // weak
var babelPluginFlowReactPropTypes_proptype_HigherOrderComponent = __webpack_require__(46).babelPluginFlowReactPropTypes_proptype_HigherOrderComponent || __webpack_require__(0).any;
var preset = exports.preset = function preset() {
return {
plugins: [(0, _jssGlobal2.default)(), (0, _jssNested2.default)(), (0, _jssCamelCase2.default)(), (0, _jssDefaultUnit2.default)(), (0, _jssVendorPrefixer2.default)(), (0, _jssPropsSort2.default)()]
};
};
// New JSS instance.
var jss = (0, _jss.create)(preset());
// Use a singleton or the provided one by the context.
var generateClassName = (0, _createGenerateClassName2.default)();
// Global index counter to preserve source order.
// As we create the style sheet during componentWillMount lifecycle,
// children are handled after the parents, so the order of style elements would
// be parent->child. It is a problem though when a parent passes a className
// which needs to override any childs styles. StyleSheet of the child has a higher
// specificity, because of the source order.
// So our solution is to render sheets them in the reverse order child->sheet, so
// that parent has a higher specificity.
var indexCounter = Number.MIN_SAFE_INTEGER;
var sheetsManager = exports.sheetsManager = new Map();
// We use the same empty object to ref count the styles that don't need a theme object.
var noopTheme = {};
// In order to have self-supporting components, we rely on default theme when not provided.
var defaultTheme = void 0;
function getDefaultTheme() {
if (defaultTheme) {
return defaultTheme;
}
defaultTheme = (0, _createMuiTheme2.default)();
return defaultTheme;
}
var babelPluginFlowReactPropTypes_proptype_RequiredProps = {
/**
* Useful to extend the style applied to components.
*/
classes: __webpack_require__(0).object,
/**
* Use that property to pass a ref callback to the decorated component.
*/
innerRef: __webpack_require__(0).func
};
// Note, theme is conditionally injected, but flow is static analysis so we need to include it.
if (true) Object.defineProperty(exports, 'babelPluginFlowReactPropTypes_proptype_RequiredProps', {
value: babelPluginFlowReactPropTypes_proptype_RequiredProps,
configurable: true,
enumerable: true
});
var babelPluginFlowReactPropTypes_proptype_InjectedProps = {
classes: __webpack_require__(0).object.isRequired,
theme: __webpack_require__(0).object
};
// Link a style sheet with a component.
// It does not modify the component passed to it;
// instead, it returns a new component, with a `classes` property.
if (true) Object.defineProperty(exports, 'babelPluginFlowReactPropTypes_proptype_InjectedProps', {
value: babelPluginFlowReactPropTypes_proptype_InjectedProps,
configurable: true,
enumerable: true
});
var withStyles = function withStyles(stylesOrCreator) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
return function (Component) {
var _options$withTheme = options.withTheme,
withTheme = _options$withTheme === undefined ? false : _options$withTheme,
flip = options.flip,
name = options.name,
styleSheetOptions = _objectWithoutProperties(options, ['withTheme', 'flip', 'name']);
var stylesCreator = (0, _getStylesCreator2.default)(stylesOrCreator);
var listenToTheme = stylesCreator.themingEnabled || withTheme || typeof name === 'string';
if (stylesCreator.options.index === undefined) {
indexCounter += 1;
stylesCreator.options.index = indexCounter;
}
(0, _warning2.default)(indexCounter < 0, ['Material-UI: you might have a memory leak.', 'The indexCounter is not supposed to grow that much.'].join(' '));
var Style = function (_React$Component) {
_inherits(Style, _React$Component);
function Style(props, context) {
_classCallCheck(this, Style);
var _this = _possibleConstructorReturn(this, (Style.__proto__ || Object.getPrototypeOf(Style)).call(this, props, context));
_this.state = {};
_this.unsubscribeId = null;
_this.jss = null;
_this.sheetsManager = sheetsManager;
_this.disableStylesGeneration = false;
_this.stylesCreatorSaved = null;
_this.theme = null;
_this.sheetOptions = null;
_this.theme = null;
var muiThemeProviderOptions = _this.context.muiThemeProviderOptions;
_this.jss = _this.context[ns.jss] || jss;
if (muiThemeProviderOptions) {
if (muiThemeProviderOptions.sheetsManager) {
_this.sheetsManager = muiThemeProviderOptions.sheetsManager;
}
_this.disableStylesGeneration = muiThemeProviderOptions.disableStylesGeneration;
}
// Attach the stylesCreator to the instance of the component as in the context
// of react-hot-loader the hooks can be executed in a different closure context:
// https://github.com/gaearon/react-hot-loader/blob/master/src/patch.dev.js#L107
_this.stylesCreatorSaved = stylesCreator;
_this.sheetOptions = _extends({
generateClassName: generateClassName
}, _this.context[ns.sheetOptions]);
// We use || as it's lazy evaluated.
_this.theme = listenToTheme ? _themeListener2.default.initial(context) || getDefaultTheme() : noopTheme;
return _this;
}
// Exposed for test purposes.
// Exposed for tests purposes
_createClass(Style, [{
key: 'componentWillMount',
value: function componentWillMount() {
this.attach(this.theme);
}
}, {
key: 'componentDidMount',
value: function componentDidMount() {
var _this2 = this;
if (!listenToTheme) {
return;
}
this.unsubscribeId = _themeListener2.default.subscribe(this.context, function (theme) {
var oldTheme = _this2.theme;
_this2.theme = theme;
_this2.attach(_this2.theme);
// Rerender the component so the underlying component gets the theme update.
// By theme update we mean receiving and applying the new class names.
_this2.setState({}, function () {
_this2.detach(oldTheme);
});
});
}
}, {
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps() {
// react-hot-loader specific logic
if (this.stylesCreatorSaved === stylesCreator || process.env.NODE_ENV === 'production') {
return;
}
this.detach(this.theme);
this.stylesCreatorSaved = stylesCreator;
this.attach(this.theme);
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
this.detach(this.theme);
if (this.unsubscribeId !== null) {
_themeListener2.default.unsubscribe(this.context, this.unsubscribeId);
}
}
}, {
key: 'attach',
value: function attach(theme) {
if (this.disableStylesGeneration) {
return;
}
var stylesCreatorSaved = this.stylesCreatorSaved;
var sheetManager = this.sheetsManager.get(stylesCreatorSaved);
if (!sheetManager) {
sheetManager = new Map();
this.sheetsManager.set(stylesCreatorSaved, sheetManager);
}
var sheetManagerTheme = sheetManager.get(theme);
if (!sheetManagerTheme) {
sheetManagerTheme = {
refs: 0,
sheet: null
};
sheetManager.set(theme, sheetManagerTheme);
}
if (sheetManagerTheme.refs === 0) {
var styles = stylesCreatorSaved.create(theme, name);
var _meta = void 0;
if (process.env.NODE_ENV !== 'production') {
_meta = name || (0, _getDisplayName2.default)(Component);
}
var sheet = this.jss.createStyleSheet(styles, _extends({
meta: _meta,
flip: typeof flip === 'boolean' ? flip : theme.direction === 'rtl',
link: false
}, this.sheetOptions, stylesCreatorSaved.options, {
name: name
}, styleSheetOptions));
sheetManagerTheme.sheet = sheet;
sheet.attach();
var sheetsRegistry = this.context[ns.sheetsRegistry];
if (sheetsRegistry) {
sheetsRegistry.add(sheet);
}
}
sheetManagerTheme.refs += 1;
}
}, {
key: 'detach',
value: function detach(theme) {
if (this.disableStylesGeneration) {
return;
}
var stylesCreatorSaved = this.stylesCreatorSaved;
var sheetManager = this.sheetsManager.get(stylesCreatorSaved);
var sheetManagerTheme = sheetManager.get(theme);
sheetManagerTheme.refs -= 1;
if (sheetManagerTheme.refs === 0) {
sheetManager.delete(theme);
this.jss.removeStyleSheet(sheetManagerTheme.sheet);
var sheetsRegistry = this.context[ns.sheetsRegistry];
if (sheetsRegistry) {
sheetsRegistry.remove(sheetManagerTheme.sheet);
}
}
}
}, {
key: 'render',
value: function render() {
var _this3 = this;
var _props = this.props,
classesProp = _props.classes,
innerRef = _props.innerRef,
other = _objectWithoutProperties(_props, ['classes', 'innerRef']);
var classes = void 0;
var renderedClasses = {};
if (!this.disableStylesGeneration) {
var sheetManager = this.sheetsManager.get(this.stylesCreatorSaved);
var sheetsManagerTheme = sheetManager.get(this.theme);
renderedClasses = sheetsManagerTheme.sheet.classes;
}
if (classesProp) {
classes = _extends({}, renderedClasses, Object.keys(classesProp).reduce(function (accumulator, key) {
(0, _warning2.default)(renderedClasses[key] || _this3.disableStylesGeneration, ['Material-UI: the key `' + key + '` ' + ('provided to the classes property is not implemented in ' + (0, _getDisplayName2.default)(Component) + '.'), 'You can only override one of the following: ' + Object.keys(renderedClasses).join(',')].join('\n'));
(0, _warning2.default)(!classesProp[key] || typeof classesProp[key] === 'string', ['Material-UI: the key `' + key + '` ' + ('provided to the classes property is not valid for ' + (0, _getDisplayName2.default)(Component) + '.'), 'You need to provide a non empty string instead of: ' + classesProp[key] + '.'].join('\n'));
if (classesProp[key]) {
accumulator[key] = renderedClasses[key] + ' ' + classesProp[key];
}
return accumulator;
}, {}));
} else {
classes = renderedClasses;
}
var more = {};
// Provide the theme to the wrapped component.
// So we don't have to use the `withTheme()` Higher-order Component.
if (withTheme) {
more.theme = this.theme;
}
return _react2.default.createElement(Component, _extends({ classes: classes }, more, other, { ref: innerRef }));
}
}]);
return Style;
}(_react2.default.Component);
Style.contextTypes = _extends({
muiThemeProviderOptions: _propTypes2.default.object
}, _contextTypes2.default, listenToTheme ? _themeListener2.default.contextTypes : {});
Style.Naked = Component;
Style.propTypes = {
classes: __webpack_require__(0).object,
innerRef: __webpack_require__(0).func
};
(0, _hoistNonReactStatics2.default)(Style, Component);
// Higher specificity
Style.options = options;
if (process.env.NODE_ENV !== 'production') {
Style.displayName = (0, _wrapDisplayName2.default)(Component, 'withStyles');
}
return Style;
};
};
exports.default = withStyles;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9zdHlsZXMvd2l0aFN0eWxlcy5qcyJdLCJuYW1lcyI6WyJucyIsInByZXNldCIsInBsdWdpbnMiLCJqc3MiLCJnZW5lcmF0ZUNsYXNzTmFtZSIsImluZGV4Q291bnRlciIsIk51bWJlciIsIk1JTl9TQUZFX0lOVEVHRVIiLCJzaGVldHNNYW5hZ2VyIiwiTWFwIiwibm9vcFRoZW1lIiwiZGVmYXVsdFRoZW1lIiwiZ2V0RGVmYXVsdFRoZW1lIiwid2l0aFN0eWxlcyIsInN0eWxlc09yQ3JlYXRvciIsIm9wdGlvbnMiLCJDb21wb25lbnQiLCJ3aXRoVGhlbWUiLCJmbGlwIiwibmFtZSIsInN0eWxlU2hlZXRPcHRpb25zIiwic3R5bGVzQ3JlYXRvciIsImxpc3RlblRvVGhlbWUiLCJ0aGVtaW5nRW5hYmxlZCIsImluZGV4IiwidW5kZWZpbmVkIiwiam9pbiIsIlN0eWxlIiwicHJvcHMiLCJjb250ZXh0Iiwic3RhdGUiLCJ1bnN1YnNjcmliZUlkIiwiZGlzYWJsZVN0eWxlc0dlbmVyYXRpb24iLCJzdHlsZXNDcmVhdG9yU2F2ZWQiLCJ0aGVtZSIsInNoZWV0T3B0aW9ucyIsIm11aVRoZW1lUHJvdmlkZXJPcHRpb25zIiwiaW5pdGlhbCIsImF0dGFjaCIsInN1YnNjcmliZSIsIm9sZFRoZW1lIiwic2V0U3RhdGUiLCJkZXRhY2giLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJ1bnN1YnNjcmliZSIsInNoZWV0TWFuYWdlciIsImdldCIsInNldCIsInNoZWV0TWFuYWdlclRoZW1lIiwicmVmcyIsInNoZWV0Iiwic3R5bGVzIiwiY3JlYXRlIiwibWV0YSIsImNyZWF0ZVN0eWxlU2hlZXQiLCJkaXJlY3Rpb24iLCJsaW5rIiwic2hlZXRzUmVnaXN0cnkiLCJhZGQiLCJkZWxldGUiLCJyZW1vdmVTdHlsZVNoZWV0IiwicmVtb3ZlIiwiY2xhc3Nlc1Byb3AiLCJjbGFzc2VzIiwiaW5uZXJSZWYiLCJvdGhlciIsInJlbmRlcmVkQ2xhc3NlcyIsInNoZWV0c01hbmFnZXJUaGVtZSIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJhY2N1bXVsYXRvciIsImtleSIsIm1vcmUiLCJjb250ZXh0VHlwZXMiLCJvYmplY3QiLCJOYWtlZCIsImRpc3BsYXlOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0lBQVlBLEU7O0FBQ1o7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7OzZOQXJCQTs7OztBQXVCTyxJQUFNQywwQkFBUyxTQUFUQSxNQUFTO0FBQUEsU0FBTztBQUMzQkMsYUFBUyxDQUNQLDBCQURPLEVBRVAsMEJBRk8sRUFHUCw2QkFITyxFQUlQLCtCQUpPLEVBS1Asa0NBTE8sRUFNUCw2QkFOTztBQURrQixHQUFQO0FBQUEsQ0FBZjs7QUFXUDtBQUNBLElBQU1DLE1BQU0saUJBQU9GLFFBQVAsQ0FBWjs7QUFFQTtBQUNBLElBQU1HLG9CQUFvQix3Q0FBMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlDLGVBQWVDLE9BQU9DLGdCQUExQjs7QUFFTyxJQUFNQyx3Q0FBMkIsSUFBSUMsR0FBSixFQUFqQzs7QUFFUDtBQUNBLElBQU1DLFlBQVksRUFBbEI7O0FBRUE7QUFDQSxJQUFJQyxxQkFBSjs7QUFFQSxTQUFTQyxlQUFULEdBQTJCO0FBQ3pCLE1BQUlELFlBQUosRUFBa0I7QUFDaEIsV0FBT0EsWUFBUDtBQUNEOztBQUVEQSxpQkFBZSwrQkFBZjtBQUNBLFNBQU9BLFlBQVA7QUFDRDs7O0FBcUJDOzs7OztBQUlBOzs7Ozs7O0FBTUY7Ozs7Ozs7Ozs7OztBQUdBO0FBQ0E7QUFDQTs7Ozs7O0FBQ0EsSUFBTUUsYUFBYSxTQUFiQSxVQUFhLENBQ2pCQyxlQURpQjtBQUFBLE1BRWpCQyxPQUZpQix1RUFFRyxFQUZIO0FBQUEsU0FHc0MsVUFBQ0MsU0FBRCxFQUF5QjtBQUFBLDZCQUNoQkQsT0FEZ0IsQ0FDeEVFLFNBRHdFO0FBQUEsUUFDeEVBLFNBRHdFLHNDQUM1RCxLQUQ0RDtBQUFBLFFBQ3JEQyxJQURxRCxHQUNoQkgsT0FEZ0IsQ0FDckRHLElBRHFEO0FBQUEsUUFDL0NDLElBRCtDLEdBQ2hCSixPQURnQixDQUMvQ0ksSUFEK0M7QUFBQSxRQUN0Q0MsaUJBRHNDLDRCQUNoQkwsT0FEZ0I7O0FBRWhGLFFBQU1NLGdCQUFnQixnQ0FBaUJQLGVBQWpCLENBQXRCO0FBQ0EsUUFBTVEsZ0JBQWdCRCxjQUFjRSxjQUFkLElBQWdDTixTQUFoQyxJQUE2QyxPQUFPRSxJQUFQLEtBQWdCLFFBQW5GOztBQUVBLFFBQUlFLGNBQWNOLE9BQWQsQ0FBc0JTLEtBQXRCLEtBQWdDQyxTQUFwQyxFQUErQztBQUM3Q3BCLHNCQUFnQixDQUFoQjtBQUNBZ0Isb0JBQWNOLE9BQWQsQ0FBc0JTLEtBQXRCLEdBQThCbkIsWUFBOUI7QUFDRDs7QUFFRCwyQkFDRUEsZUFBZSxDQURqQixFQUVFLENBQ0UsNENBREYsRUFFRSxxREFGRixFQUdFcUIsSUFIRixDQUdPLEdBSFAsQ0FGRjs7QUFWZ0YsUUFrQjFFQyxLQWxCMEU7QUFBQTs7QUErQjlFLHFCQUFZQyxLQUFaLEVBQW1CQyxPQUFuQixFQUFvQztBQUFBOztBQUFBLGtIQUM1QkQsS0FENEIsRUFDckJDLE9BRHFCOztBQUFBLGNBMkJwQ0MsS0EzQm9DLEdBMkI1QixFQTNCNEI7QUFBQSxjQWdKcENDLGFBaEpvQyxHQWdKcEIsSUFoSm9CO0FBQUEsY0FpSnBDNUIsR0FqSm9DLEdBaUo5QixJQWpKOEI7QUFBQSxjQWtKcENLLGFBbEpvQyxHQWtKcEJBLGFBbEpvQjtBQUFBLGNBbUpwQ3dCLHVCQW5Kb0MsR0FtSlYsS0FuSlU7QUFBQSxjQW9KcENDLGtCQXBKb0MsR0FvSmYsSUFwSmU7QUFBQSxjQXFKcENDLEtBckpvQyxHQXFKNUIsSUFySjRCO0FBQUEsY0FzSnBDQyxZQXRKb0MsR0FzSnJCLElBdEpxQjtBQUFBLGNBdUpwQ0QsS0F2Sm9DLEdBdUo1QixJQXZKNEI7QUFBQSxZQUcxQkUsdUJBSDBCLEdBR0UsTUFBS1AsT0FIUCxDQUcxQk8sdUJBSDBCOzs7QUFLbEMsY0FBS2pDLEdBQUwsR0FBVyxNQUFLMEIsT0FBTCxDQUFhN0IsR0FBR0csR0FBaEIsS0FBd0JBLEdBQW5DOztBQUVBLFlBQUlpQyx1QkFBSixFQUE2QjtBQUMzQixjQUFJQSx3QkFBd0I1QixhQUE1QixFQUEyQztBQUN6QyxrQkFBS0EsYUFBTCxHQUFxQjRCLHdCQUF3QjVCLGFBQTdDO0FBQ0Q7O0FBRUQsZ0JBQUt3Qix1QkFBTCxHQUErQkksd0JBQXdCSix1QkFBdkQ7QUFDRDs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxjQUFLQyxrQkFBTCxHQUEwQlosYUFBMUI7QUFDQSxjQUFLYyxZQUFMO0FBQ0UvQjtBQURGLFdBRUssTUFBS3lCLE9BQUwsQ0FBYTdCLEdBQUdtQyxZQUFoQixDQUZMO0FBSUE7QUFDQSxjQUFLRCxLQUFMLEdBQWFaLGdCQUFnQix3QkFBY2UsT0FBZCxDQUFzQlIsT0FBdEIsS0FBa0NqQixpQkFBbEQsR0FBc0VGLFNBQW5GO0FBeEJrQztBQXlCbkM7O0FBNUJEOzs7QUFIQTs7O0FBekI4RTtBQUFBO0FBQUEsNkNBNER6RDtBQUNuQixlQUFLNEIsTUFBTCxDQUFZLEtBQUtKLEtBQWpCO0FBQ0Q7QUE5RDZFO0FBQUE7QUFBQSw0Q0FnRTFEO0FBQUE7O0FBQ2xCLGNBQUksQ0FBQ1osYUFBTCxFQUFvQjtBQUNsQjtBQUNEOztBQUVELGVBQUtTLGFBQUwsR0FBcUIsd0JBQWNRLFNBQWQsQ0FBd0IsS0FBS1YsT0FBN0IsRUFBc0MsaUJBQVM7QUFDbEUsZ0JBQU1XLFdBQVcsT0FBS04sS0FBdEI7QUFDQSxtQkFBS0EsS0FBTCxHQUFhQSxLQUFiO0FBQ0EsbUJBQUtJLE1BQUwsQ0FBWSxPQUFLSixLQUFqQjs7QUFFQTtBQUNBO0FBQ0EsbUJBQUtPLFFBQUwsQ0FBYyxFQUFkLEVBQWtCLFlBQU07QUFDdEIscUJBQUtDLE1BQUwsQ0FBWUYsUUFBWjtBQUNELGFBRkQ7QUFHRCxXQVZvQixDQUFyQjtBQVdEO0FBaEY2RTtBQUFBO0FBQUEsb0RBa0ZsRDtBQUMxQjtBQUNBLGNBQUksS0FBS1Asa0JBQUwsS0FBNEJaLGFBQTVCLElBQTZDc0IsUUFBUUMsR0FBUixDQUFZQyxRQUFaLEtBQXlCLFlBQTFFLEVBQXdGO0FBQ3RGO0FBQ0Q7O0FBRUQsZUFBS0gsTUFBTCxDQUFZLEtBQUtSLEtBQWpCO0FBQ0EsZUFBS0Qsa0JBQUwsR0FBMEJaLGFBQTFCO0FBQ0EsZUFBS2lCLE1BQUwsQ0FBWSxLQUFLSixLQUFqQjtBQUNEO0FBM0Y2RTtBQUFBO0FBQUEsK0NBNkZ2RDtBQUNyQixlQUFLUSxNQUFMLENBQVksS0FBS1IsS0FBakI7O0FBRUEsY0FBSSxLQUFLSCxhQUFMLEtBQXVCLElBQTNCLEVBQWlDO0FBQy9CLG9DQUFjZSxXQUFkLENBQTBCLEtBQUtqQixPQUEvQixFQUF3QyxLQUFLRSxhQUE3QztBQUNEO0FBQ0Y7QUFuRzZFO0FBQUE7QUFBQSwrQkFxR3ZFRyxLQXJHdUUsRUFxR3hEO0FBQ3BCLGNBQUksS0FBS0YsdUJBQVQsRUFBa0M7QUFDaEM7QUFDRDs7QUFFRCxjQUFNQyxxQkFBcUIsS0FBS0Esa0JBQWhDO0FBQ0EsY0FBSWMsZUFBZSxLQUFLdkMsYUFBTCxDQUFtQndDLEdBQW5CLENBQXVCZixrQkFBdkIsQ0FBbkI7O0FBRUEsY0FBSSxDQUFDYyxZQUFMLEVBQW1CO0FBQ2pCQSwyQkFBZSxJQUFJdEMsR0FBSixFQUFmO0FBQ0EsaUJBQUtELGFBQUwsQ0FBbUJ5QyxHQUFuQixDQUF1QmhCLGtCQUF2QixFQUEyQ2MsWUFBM0M7QUFDRDs7QUFFRCxjQUFJRyxvQkFBb0JILGFBQWFDLEdBQWIsQ0FBaUJkLEtBQWpCLENBQXhCOztBQUVBLGNBQUksQ0FBQ2dCLGlCQUFMLEVBQXdCO0FBQ3RCQSxnQ0FBb0I7QUFDbEJDLG9CQUFNLENBRFk7QUFFbEJDLHFCQUFPO0FBRlcsYUFBcEI7QUFJQUwseUJBQWFFLEdBQWIsQ0FBaUJmLEtBQWpCLEVBQXdCZ0IsaUJBQXhCO0FBQ0Q7O0FBRUQsY0FBSUEsa0JBQWtCQyxJQUFsQixLQUEyQixDQUEvQixFQUFrQztBQUNoQyxnQkFBTUUsU0FBU3BCLG1CQUFtQnFCLE1BQW5CLENBQTBCcEIsS0FBMUIsRUFBaUNmLElBQWpDLENBQWY7QUFDQSxnQkFBSW9DLGNBQUo7O0FBRUEsZ0JBQUlaLFFBQVFDLEdBQVIsQ0FBWUMsUUFBWixLQUF5QixZQUE3QixFQUEyQztBQUN6Q1Usc0JBQU9wQyxRQUFRLDhCQUFlSCxTQUFmLENBQWY7QUFDRDs7QUFFRCxnQkFBTW9DLFFBQVEsS0FBS2pELEdBQUwsQ0FBU3FELGdCQUFULENBQTBCSCxNQUExQjtBQUNaRSx5QkFEWTtBQUVackMsb0JBQU0sT0FBT0EsSUFBUCxLQUFnQixTQUFoQixHQUE0QkEsSUFBNUIsR0FBbUNnQixNQUFNdUIsU0FBTixLQUFvQixLQUZqRDtBQUdaQyxvQkFBTTtBQUhNLGVBSVQsS0FBS3ZCLFlBSkksRUFLVEYsbUJBQW1CbEIsT0FMVjtBQU1aSTtBQU5ZLGVBT1RDLGlCQVBTLEVBQWQ7O0FBVUE4Qiw4QkFBa0JFLEtBQWxCLEdBQTBCQSxLQUExQjtBQUNBQSxrQkFBTWQsTUFBTjs7QUFFQSxnQkFBTXFCLGlCQUFpQixLQUFLOUIsT0FBTCxDQUFhN0IsR0FBRzJELGNBQWhCLENBQXZCO0FBQ0EsZ0JBQUlBLGNBQUosRUFBb0I7QUFDbEJBLDZCQUFlQyxHQUFmLENBQW1CUixLQUFuQjtBQUNEO0FBQ0Y7O0FBRURGLDRCQUFrQkMsSUFBbEIsSUFBMEIsQ0FBMUI7QUFDRDtBQXhKNkU7QUFBQTtBQUFBLCtCQTBKdkVqQixLQTFKdUUsRUEwSnhEO0FBQ3BCLGNBQUksS0FBS0YsdUJBQVQsRUFBa0M7QUFDaEM7QUFDRDs7QUFFRCxjQUFNQyxxQkFBcUIsS0FBS0Esa0JBQWhDO0FBQ0EsY0FBTWMsZUFBZSxLQUFLdkMsYUFBTCxDQUFtQndDLEdBQW5CLENBQXVCZixrQkFBdkIsQ0FBckI7QUFDQSxjQUFNaUIsb0JBQW9CSCxhQUFhQyxHQUFiLENBQWlCZCxLQUFqQixDQUExQjs7QUFFQWdCLDRCQUFrQkMsSUFBbEIsSUFBMEIsQ0FBMUI7O0FBRUEsY0FBSUQsa0JBQWtCQyxJQUFsQixLQUEyQixDQUEvQixFQUFrQztBQUNoQ0oseUJBQWFjLE1BQWIsQ0FBb0IzQixLQUFwQjtBQUNBLGlCQUFLL0IsR0FBTCxDQUFTMkQsZ0JBQVQsQ0FBMEJaLGtCQUFrQkUsS0FBNUM7QUFDQSxnQkFBTU8saUJBQWlCLEtBQUs5QixPQUFMLENBQWE3QixHQUFHMkQsY0FBaEIsQ0FBdkI7QUFDQSxnQkFBSUEsY0FBSixFQUFvQjtBQUNsQkEsNkJBQWVJLE1BQWYsQ0FBc0JiLGtCQUFrQkUsS0FBeEM7QUFDRDtBQUNGO0FBQ0Y7QUE3SzZFO0FBQUE7QUFBQSxpQ0F3THJFO0FBQUE7O0FBQUEsdUJBQzhDLEtBQUt4QixLQURuRDtBQUFBLGNBQ1VvQyxXQURWLFVBQ0NDLE9BREQ7QUFBQSxjQUN1QkMsUUFEdkIsVUFDdUJBLFFBRHZCO0FBQUEsY0FDb0NDLEtBRHBDOztBQUdQLGNBQUlGLGdCQUFKO0FBQ0EsY0FBSUcsa0JBQWtCLEVBQXRCOztBQUVBLGNBQUksQ0FBQyxLQUFLcEMsdUJBQVYsRUFBbUM7QUFDakMsZ0JBQU1lLGVBQWUsS0FBS3ZDLGFBQUwsQ0FBbUJ3QyxHQUFuQixDQUF1QixLQUFLZixrQkFBNUIsQ0FBckI7QUFDQSxnQkFBTW9DLHFCQUFxQnRCLGFBQWFDLEdBQWIsQ0FBaUIsS0FBS2QsS0FBdEIsQ0FBM0I7QUFDQWtDLDhCQUFrQkMsbUJBQW1CakIsS0FBbkIsQ0FBeUJhLE9BQTNDO0FBQ0Q7O0FBRUQsY0FBSUQsV0FBSixFQUFpQjtBQUNmQyxtQ0FDS0csZUFETCxFQUVLRSxPQUFPQyxJQUFQLENBQVlQLFdBQVosRUFBeUJRLE1BQXpCLENBQWdDLFVBQUNDLFdBQUQsRUFBY0MsR0FBZCxFQUFzQjtBQUN2RCxxQ0FDRU4sZ0JBQWdCTSxHQUFoQixLQUF3QixPQUFLMUMsdUJBRC9CLEVBRUUsQ0FDRSwyQkFBMEIwQyxHQUExQix1RUFDNEQsOEJBQ3hEMUQsU0FEd0QsQ0FENUQsT0FERixtREFLaURzRCxPQUFPQyxJQUFQLENBQVlILGVBQVosRUFBNkIxQyxJQUE3QixDQUM3QyxHQUQ2QyxDQUxqRCxFQVFFQSxJQVJGLENBUU8sSUFSUCxDQUZGOztBQWFBLHFDQUNFLENBQUNzQyxZQUFZVSxHQUFaLENBQUQsSUFBcUIsT0FBT1YsWUFBWVUsR0FBWixDQUFQLEtBQTRCLFFBRG5ELEVBRUUsQ0FDRSwyQkFBMEJBLEdBQTFCLGtFQUN1RCw4QkFBZTFELFNBQWYsQ0FEdkQsT0FERiwwREFHd0RnRCxZQUFZVSxHQUFaLENBSHhELFFBSUVoRCxJQUpGLENBSU8sSUFKUCxDQUZGOztBQVNBLGtCQUFJc0MsWUFBWVUsR0FBWixDQUFKLEVBQXNCO0FBQ3BCRCw0QkFBWUMsR0FBWixJQUFzQk4sZ0JBQWdCTSxHQUFoQixDQUF0QixTQUE4Q1YsWUFBWVUsR0FBWixDQUE5QztBQUNEOztBQUVELHFCQUFPRCxXQUFQO0FBQ0QsYUE1QkUsRUE0QkEsRUE1QkEsQ0FGTDtBQWdDRCxXQWpDRCxNQWlDTztBQUNMUixzQkFBVUcsZUFBVjtBQUNEOztBQUVELGNBQU1PLE9BQU8sRUFBYjs7QUFFQTtBQUNBO0FBQ0EsY0FBSTFELFNBQUosRUFBZTtBQUNiMEQsaUJBQUt6QyxLQUFMLEdBQWEsS0FBS0EsS0FBbEI7QUFDRDs7QUFFRCxpQkFBTyw4QkFBQyxTQUFELGFBQVcsU0FBUytCLE9BQXBCLElBQWlDVSxJQUFqQyxFQUEyQ1IsS0FBM0MsSUFBa0QsS0FBS0QsUUFBdkQsSUFBUDtBQUNEO0FBbFA2RTs7QUFBQTtBQUFBLE1Ba0I1RCxnQkFBTWxELFNBbEJzRDs7QUFrQjFFVyxTQWxCMEUsQ0FtQnZFaUQsWUFuQnVFO0FBb0I1RXhDLCtCQUF5QixvQkFBVXlDO0FBcEJ5QywrQkFzQnhFdkQsZ0JBQWdCLHdCQUFjc0QsWUFBOUIsR0FBNkMsRUF0QjJCO0FBa0IxRWpELFNBbEIwRSxDQTZCdkVtRCxLQTdCdUUsR0E2Qi9EOUQsU0E3QitEO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQXFQaEYsd0NBQXFCVyxLQUFyQixFQUE0QlgsU0FBNUI7O0FBRUE7QUFDQVcsVUFBTVosT0FBTixHQUFnQkEsT0FBaEI7O0FBRUEsUUFBSTRCLFFBQVFDLEdBQVIsQ0FBWUMsUUFBWixLQUF5QixZQUE3QixFQUEyQztBQUN6Q2xCLFlBQU1vRCxXQUFOLEdBQW9CLCtCQUFnQi9ELFNBQWhCLEVBQTJCLFlBQTNCLENBQXBCO0FBQ0Q7O0FBRUQsV0FBT1csS0FBUDtBQUNELEdBbFFrQjtBQUFBLENBQW5COztrQkFvUWVkLFUiLCJmaWxlIjoid2l0aFN0eWxlcy5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9sdWthc3MvRG9jdW1lbnRzL3ByaXZhdGUvbWF0ZXJpYWwtdWkiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvdyB3ZWFrXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAnd2FybmluZyc7XG5pbXBvcnQgdHlwZSB7IEhpZ2hlck9yZGVyQ29tcG9uZW50IH0gZnJvbSAncmVhY3QtZmxvdy10eXBlcyc7XG5pbXBvcnQgaG9pc3ROb25SZWFjdFN0YXRpY3MgZnJvbSAnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnO1xuaW1wb3J0IHdyYXBEaXNwbGF5TmFtZSBmcm9tICdyZWNvbXBvc2Uvd3JhcERpc3BsYXlOYW1lJztcbmltcG9ydCBnZXREaXNwbGF5TmFtZSBmcm9tICdyZWNvbXBvc2UvZ2V0RGlzcGxheU5hbWUnO1xuaW1wb3J0IGNvbnRleHRUeXBlcyBmcm9tICdyZWFjdC1qc3MvbGliL2NvbnRleHRUeXBlcyc7XG5pbXBvcnQgeyBjcmVhdGUgfSBmcm9tICdqc3MnO1xuaW1wb3J0IGpzc0dsb2JhbCBmcm9tICdqc3MtZ2xvYmFsJztcbmltcG9ydCBqc3NOZXN0ZWQgZnJvbSAnanNzLW5lc3RlZCc7XG5pbXBvcnQganNzQ2FtZWxDYXNlIGZyb20gJ2pzcy1jYW1lbC1jYXNlJztcbmltcG9ydCBqc3NEZWZhdWx0VW5pdCBmcm9tICdqc3MtZGVmYXVsdC11bml0JztcbmltcG9ydCBqc3NWZW5kb3JQcmVmaXhlciBmcm9tICdqc3MtdmVuZG9yLXByZWZpeGVyJztcbmltcG9ydCBqc3NQcm9wc1NvcnQgZnJvbSAnanNzLXByb3BzLXNvcnQnO1xuaW1wb3J0ICogYXMgbnMgZnJvbSAncmVhY3QtanNzL2xpYi9ucyc7XG5pbXBvcnQgY3JlYXRlTXVpVGhlbWUgZnJvbSAnLi9jcmVhdGVNdWlUaGVtZSc7XG5pbXBvcnQgdGhlbWVMaXN0ZW5lciBmcm9tICcuL3RoZW1lTGlzdGVuZXInO1xuaW1wb3J0IGNyZWF0ZUdlbmVyYXRlQ2xhc3NOYW1lIGZyb20gJy4vY3JlYXRlR2VuZXJhdGVDbGFzc05hbWUnO1xuaW1wb3J0IGdldFN0eWxlc0NyZWF0b3IgZnJvbSAnLi9nZXRTdHlsZXNDcmVhdG9yJztcblxuZXhwb3J0IGNvbnN0IHByZXNldCA9ICgpID0+ICh7XG4gIHBsdWdpbnM6IFtcbiAgICBqc3NHbG9iYWwoKSxcbiAgICBqc3NOZXN0ZWQoKSxcbiAgICBqc3NDYW1lbENhc2UoKSxcbiAgICBqc3NEZWZhdWx0VW5pdCgpLFxuICAgIGpzc1ZlbmRvclByZWZpeGVyKCksXG4gICAganNzUHJvcHNTb3J0KCksXG4gIF0sXG59KTtcblxuLy8gTmV3IEpTUyBpbnN0YW5jZS5cbmNvbnN0IGpzcyA9IGNyZWF0ZShwcmVzZXQoKSk7XG5cbi8vIFVzZSBhIHNpbmdsZXRvbiBvciB0aGUgcHJvdmlkZWQgb25lIGJ5IHRoZSBjb250ZXh0LlxuY29uc3QgZ2VuZXJhdGVDbGFzc05hbWUgPSBjcmVhdGVHZW5lcmF0ZUNsYXNzTmFtZSgpO1xuXG4vLyBHbG9iYWwgaW5kZXggY291bnRlciB0byBwcmVzZXJ2ZSBzb3VyY2Ugb3JkZXIuXG4vLyBBcyB3ZSBjcmVhdGUgdGhlIHN0eWxlIHNoZWV0IGR1cmluZyBjb21wb25lbnRXaWxsTW91bnQgbGlmZWN5Y2xlLFxuLy8gY2hpbGRyZW4gYXJlIGhhbmRsZWQgYWZ0ZXIgdGhlIHBhcmVudHMsIHNvIHRoZSBvcmRlciBvZiBzdHlsZSBlbGVtZW50cyB3b3VsZFxuLy8gYmUgcGFyZW50LT5jaGlsZC4gSXQgaXMgYSBwcm9ibGVtIHRob3VnaCB3aGVuIGEgcGFyZW50IHBhc3NlcyBhIGNsYXNzTmFtZVxuLy8gd2hpY2ggbmVlZHMgdG8gb3ZlcnJpZGUgYW55IGNoaWxkcyBzdHlsZXMuIFN0eWxlU2hlZXQgb2YgdGhlIGNoaWxkIGhhcyBhIGhpZ2hlclxuLy8gc3BlY2lmaWNpdHksIGJlY2F1c2Ugb2YgdGhlIHNvdXJjZSBvcmRlci5cbi8vIFNvIG91ciBzb2x1dGlvbiBpcyB0byByZW5kZXIgc2hlZXRzIHRoZW0gaW4gdGhlIHJldmVyc2Ugb3JkZXIgY2hpbGQtPnNoZWV0LCBzb1xuLy8gdGhhdCBwYXJlbnQgaGFzIGEgaGlnaGVyIHNwZWNpZmljaXR5LlxubGV0IGluZGV4Q291bnRlciA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuXG5leHBvcnQgY29uc3Qgc2hlZXRzTWFuYWdlcjogTWFwPCosICo+ID0gbmV3IE1hcCgpO1xuXG4vLyBXZSB1c2UgdGhlIHNhbWUgZW1wdHkgb2JqZWN0IHRvIHJlZiBjb3VudCB0aGUgc3R5bGVzIHRoYXQgZG9uJ3QgbmVlZCBhIHRoZW1lIG9iamVjdC5cbmNvbnN0IG5vb3BUaGVtZSA9IHt9O1xuXG4vLyBJbiBvcmRlciB0byBoYXZlIHNlbGYtc3VwcG9ydGluZyBjb21wb25lbnRzLCB3ZSByZWx5IG9uIGRlZmF1bHQgdGhlbWUgd2hlbiBub3QgcHJvdmlkZWQuXG5sZXQgZGVmYXVsdFRoZW1lO1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0VGhlbWUoKSB7XG4gIGlmIChkZWZhdWx0VGhlbWUpIHtcbiAgICByZXR1cm4gZGVmYXVsdFRoZW1lO1xuICB9XG5cbiAgZGVmYXVsdFRoZW1lID0gY3JlYXRlTXVpVGhlbWUoKTtcbiAgcmV0dXJuIGRlZmF1bHRUaGVtZTtcbn1cblxudHlwZSBPcHRpb25zID0ge1xuICBmbGlwPzogYm9vbGVhbixcbiAgd2l0aFRoZW1lPzogYm9vbGVhbixcbiAgbmFtZT86IHN0cmluZyxcblxuICAvLyBQcm9ibGVtOiBodHRwczovL2dpdGh1Yi5jb20vYnJpZ2FuZC9iYWJlbC1wbHVnaW4tZmxvdy1yZWFjdC1wcm9wdHlwZXMvaXNzdWVzLzEyN1xuICAvLyBpbXBvcnQgdHlwZSB7IFN0eWxlU2hlZXRGYWN0b3J5T3B0aW9ucyB9IGZyb20gJ2pzcy9saWIvdHlwZXMnO1xuICAvLyAgLi4uU3R5bGVTaGVldEZhY3RvcnlPcHRpb25zLFxuICAvLyBhbmQgdGhlIGZhY3QgdGhhdCB3ZSBjdXJyZW50bHkgY2Fubm90IGltcG9ydC9zcHJlYWQgdHlwZXMgd2l0aFxuICAvLyAgaHR0cHM6Ly9naXRodWIuY29tL2JyaWdhbmQvYmFiZWwtcGx1Z2luLWZsb3ctcmVhY3QtcHJvcHR5cGVzL2lzc3Vlcy8xMDZcbiAgbWVkaWE/OiBzdHJpbmcsXG4gIG1ldGE/OiBzdHJpbmcsXG4gIGluZGV4PzogbnVtYmVyLFxuICBsaW5rPzogYm9vbGVhbixcbiAgZWxlbWVudD86IEhUTUxTdHlsZUVsZW1lbnQsXG4gIGdlbmVyYXRlQ2xhc3NOYW1lPzogRnVuY3Rpb24sIC8vIGdlbmVyYXRlQ2xhc3NOYW1lIC0gdXNlIGdlbmVyaWMgdG8gc3RvcCB0aGUgYmxlZWRpbmcuXG59O1xuXG5leHBvcnQgdHlwZSBSZXF1aXJlZFByb3BzID0ge1xuICAvKipcbiAgICogVXNlZnVsIHRvIGV4dGVuZCB0aGUgc3R5bGUgYXBwbGllZCB0byBjb21wb25lbnRzLlxuICAgKi9cbiAgY2xhc3Nlcz86IE9iamVjdCxcbiAgLyoqXG4gICAqIFVzZSB0aGF0IHByb3BlcnR5IHRvIHBhc3MgYSByZWYgY2FsbGJhY2sgdG8gdGhlIGRlY29yYXRlZCBjb21wb25lbnQuXG4gICAqL1xuICBpbm5lclJlZj86IEZ1bmN0aW9uLFxufTtcblxuLy8gTm90ZSwgdGhlbWUgaXMgY29uZGl0aW9uYWxseSBpbmplY3RlZCwgYnV0IGZsb3cgaXMgc3RhdGljIGFuYWx5c2lzIHNvIHdlIG5lZWQgdG8gaW5jbHVkZSBpdC5cbmV4cG9ydCB0eXBlIEluamVjdGVkUHJvcHMgPSB7IGNsYXNzZXM6IE9iamVjdCwgdGhlbWU/OiBPYmplY3QgfTtcblxuLy8gTGluayBhIHN0eWxlIHNoZWV0IHdpdGggYSBjb21wb25lbnQuXG4vLyBJdCBkb2VzIG5vdCBtb2RpZnkgdGhlIGNvbXBvbmVudCBwYXNzZWQgdG8gaXQ7XG4vLyBpbnN0ZWFkLCBpdCByZXR1cm5zIGEgbmV3IGNvbXBvbmVudCwgd2l0aCBhIGBjbGFzc2VzYCBwcm9wZXJ0eS5cbmNvbnN0IHdpdGhTdHlsZXMgPSAoXG4gIHN0eWxlc09yQ3JlYXRvcjogT2JqZWN0LFxuICBvcHRpb25zPzogT3B0aW9ucyA9IHt9LFxuKTogSGlnaGVyT3JkZXJDb21wb25lbnQ8UmVxdWlyZWRQcm9wcywgSW5qZWN0ZWRQcm9wcz4gPT4gKENvbXBvbmVudDogYW55KTogYW55ID0+IHtcbiAgY29uc3QgeyB3aXRoVGhlbWUgPSBmYWxzZSwgZmxpcCwgbmFtZSwgLi4uc3R5bGVTaGVldE9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHN0eWxlc0NyZWF0b3IgPSBnZXRTdHlsZXNDcmVhdG9yKHN0eWxlc09yQ3JlYXRvcik7XG4gIGNvbnN0IGxpc3RlblRvVGhlbWUgPSBzdHlsZXNDcmVhdG9yLnRoZW1pbmdFbmFibGVkIHx8IHdpdGhUaGVtZSB8fCB0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZyc7XG5cbiAgaWYgKHN0eWxlc0NyZWF0b3Iub3B0aW9ucy5pbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaW5kZXhDb3VudGVyICs9IDE7XG4gICAgc3R5bGVzQ3JlYXRvci5vcHRpb25zLmluZGV4ID0gaW5kZXhDb3VudGVyO1xuICB9XG5cbiAgd2FybmluZyhcbiAgICBpbmRleENvdW50ZXIgPCAwLFxuICAgIFtcbiAgICAgICdNYXRlcmlhbC1VSTogeW91IG1pZ2h0IGhhdmUgYSBtZW1vcnkgbGVhay4nLFxuICAgICAgJ1RoZSBpbmRleENvdW50ZXIgaXMgbm90IHN1cHBvc2VkIHRvIGdyb3cgdGhhdCBtdWNoLicsXG4gICAgXS5qb2luKCcgJyksXG4gICk7XG5cbiAgY2xhc3MgU3R5bGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UmVxdWlyZWRQcm9wcz4ge1xuICAgIHN0YXRpYyBjb250ZXh0VHlwZXMgPSB7XG4gICAgICBtdWlUaGVtZVByb3ZpZGVyT3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgIC4uLmNvbnRleHRUeXBlcyxcbiAgICAgIC4uLihsaXN0ZW5Ub1RoZW1lID8gdGhlbWVMaXN0ZW5lci5jb250ZXh0VHlwZXMgOiB7fSksXG4gICAgfTtcblxuICAgIC8vIEV4cG9zZWQgZm9yIHRlc3RzIHB1cnBvc2VzXG4gICAgc3RhdGljIG9wdGlvbnM6ID9PcHRpb25zO1xuXG4gICAgLy8gRXhwb3NlZCBmb3IgdGVzdCBwdXJwb3Nlcy5cbiAgICBzdGF0aWMgTmFrZWQgPSBDb21wb25lbnQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcywgY29udGV4dDogT2JqZWN0KSB7XG4gICAgICBzdXBlcihwcm9wcywgY29udGV4dCk7XG5cbiAgICAgIGNvbnN0IHsgbXVpVGhlbWVQcm92aWRlck9wdGlvbnMgfSA9IHRoaXMuY29udGV4dDtcblxuICAgICAgdGhpcy5qc3MgPSB0aGlzLmNvbnRleHRbbnMuanNzXSB8fCBqc3M7XG5cbiAgICAgIGlmIChtdWlUaGVtZVByb3ZpZGVyT3B0aW9ucykge1xuICAgICAgICBpZiAobXVpVGhlbWVQcm92aWRlck9wdGlvbnMuc2hlZXRzTWFuYWdlcikge1xuICAgICAgICAgIHRoaXMuc2hlZXRzTWFuYWdlciA9IG11aVRoZW1lUHJvdmlkZXJPcHRpb25zLnNoZWV0c01hbmFnZXI7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRpc2FibGVTdHlsZXNHZW5lcmF0aW9uID0gbXVpVGhlbWVQcm92aWRlck9wdGlvbnMuZGlzYWJsZVN0eWxlc0dlbmVyYXRpb247XG4gICAgICB9XG5cbiAgICAgIC8vIEF0dGFjaCB0aGUgc3R5bGVzQ3JlYXRvciB0byB0aGUgaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudCBhcyBpbiB0aGUgY29udGV4dFxuICAgICAgLy8gb2YgcmVhY3QtaG90LWxvYWRlciB0aGUgaG9va3MgY2FuIGJlIGV4ZWN1dGVkIGluIGEgZGlmZmVyZW50IGNsb3N1cmUgY29udGV4dDpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nYWVhcm9uL3JlYWN0LWhvdC1sb2FkZXIvYmxvYi9tYXN0ZXIvc3JjL3BhdGNoLmRldi5qcyNMMTA3XG4gICAgICB0aGlzLnN0eWxlc0NyZWF0b3JTYXZlZCA9IHN0eWxlc0NyZWF0b3I7XG4gICAgICB0aGlzLnNoZWV0T3B0aW9ucyA9IHtcbiAgICAgICAgZ2VuZXJhdGVDbGFzc05hbWUsXG4gICAgICAgIC4uLnRoaXMuY29udGV4dFtucy5zaGVldE9wdGlvbnNdLFxuICAgICAgfTtcbiAgICAgIC8vIFdlIHVzZSB8fCBhcyBpdCdzIGxhenkgZXZhbHVhdGVkLlxuICAgICAgdGhpcy50aGVtZSA9IGxpc3RlblRvVGhlbWUgPyB0aGVtZUxpc3RlbmVyLmluaXRpYWwoY29udGV4dCkgfHwgZ2V0RGVmYXVsdFRoZW1lKCkgOiBub29wVGhlbWU7XG4gICAgfVxuXG4gICAgc3RhdGUgPSB7fTtcblxuICAgIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcbiAgICAgIHRoaXMuYXR0YWNoKHRoaXMudGhlbWUpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKCFsaXN0ZW5Ub1RoZW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy51bnN1YnNjcmliZUlkID0gdGhlbWVMaXN0ZW5lci5zdWJzY3JpYmUodGhpcy5jb250ZXh0LCB0aGVtZSA9PiB7XG4gICAgICAgIGNvbnN0IG9sZFRoZW1lID0gdGhpcy50aGVtZTtcbiAgICAgICAgdGhpcy50aGVtZSA9IHRoZW1lO1xuICAgICAgICB0aGlzLmF0dGFjaCh0aGlzLnRoZW1lKTtcblxuICAgICAgICAvLyBSZXJlbmRlciB0aGUgY29tcG9uZW50IHNvIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudCBnZXRzIHRoZSB0aGVtZSB1cGRhdGUuXG4gICAgICAgIC8vIEJ5IHRoZW1lIHVwZGF0ZSB3ZSBtZWFuIHJlY2VpdmluZyBhbmQgYXBwbHlpbmcgdGhlIG5ldyBjbGFzcyBuYW1lcy5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7fSwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGV0YWNoKG9sZFRoZW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCkge1xuICAgICAgLy8gcmVhY3QtaG90LWxvYWRlciBzcGVjaWZpYyBsb2dpY1xuICAgICAgaWYgKHRoaXMuc3R5bGVzQ3JlYXRvclNhdmVkID09PSBzdHlsZXNDcmVhdG9yIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRldGFjaCh0aGlzLnRoZW1lKTtcbiAgICAgIHRoaXMuc3R5bGVzQ3JlYXRvclNhdmVkID0gc3R5bGVzQ3JlYXRvcjtcbiAgICAgIHRoaXMuYXR0YWNoKHRoaXMudGhlbWUpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5kZXRhY2godGhpcy50aGVtZSk7XG5cbiAgICAgIGlmICh0aGlzLnVuc3Vic2NyaWJlSWQgIT09IG51bGwpIHtcbiAgICAgICAgdGhlbWVMaXN0ZW5lci51bnN1YnNjcmliZSh0aGlzLmNvbnRleHQsIHRoaXMudW5zdWJzY3JpYmVJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXR0YWNoKHRoZW1lOiBPYmplY3QpIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVTdHlsZXNHZW5lcmF0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3R5bGVzQ3JlYXRvclNhdmVkID0gdGhpcy5zdHlsZXNDcmVhdG9yU2F2ZWQ7XG4gICAgICBsZXQgc2hlZXRNYW5hZ2VyID0gdGhpcy5zaGVldHNNYW5hZ2VyLmdldChzdHlsZXNDcmVhdG9yU2F2ZWQpO1xuXG4gICAgICBpZiAoIXNoZWV0TWFuYWdlcikge1xuICAgICAgICBzaGVldE1hbmFnZXIgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuc2hlZXRzTWFuYWdlci5zZXQoc3R5bGVzQ3JlYXRvclNhdmVkLCBzaGVldE1hbmFnZXIpO1xuICAgICAgfVxuXG4gICAgICBsZXQgc2hlZXRNYW5hZ2VyVGhlbWUgPSBzaGVldE1hbmFnZXIuZ2V0KHRoZW1lKTtcblxuICAgICAgaWYgKCFzaGVldE1hbmFnZXJUaGVtZSkge1xuICAgICAgICBzaGVldE1hbmFnZXJUaGVtZSA9IHtcbiAgICAgICAgICByZWZzOiAwLFxuICAgICAgICAgIHNoZWV0OiBudWxsLFxuICAgICAgICB9O1xuICAgICAgICBzaGVldE1hbmFnZXIuc2V0KHRoZW1lLCBzaGVldE1hbmFnZXJUaGVtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaGVldE1hbmFnZXJUaGVtZS5yZWZzID09PSAwKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlcyA9IHN0eWxlc0NyZWF0b3JTYXZlZC5jcmVhdGUodGhlbWUsIG5hbWUpO1xuICAgICAgICBsZXQgbWV0YTtcblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIG1ldGEgPSBuYW1lIHx8IGdldERpc3BsYXlOYW1lKENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaGVldCA9IHRoaXMuanNzLmNyZWF0ZVN0eWxlU2hlZXQoc3R5bGVzLCB7XG4gICAgICAgICAgbWV0YSxcbiAgICAgICAgICBmbGlwOiB0eXBlb2YgZmxpcCA9PT0gJ2Jvb2xlYW4nID8gZmxpcCA6IHRoZW1lLmRpcmVjdGlvbiA9PT0gJ3J0bCcsXG4gICAgICAgICAgbGluazogZmFsc2UsXG4gICAgICAgICAgLi4udGhpcy5zaGVldE9wdGlvbnMsXG4gICAgICAgICAgLi4uc3R5bGVzQ3JlYXRvclNhdmVkLm9wdGlvbnMsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICAuLi5zdHlsZVNoZWV0T3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2hlZXRNYW5hZ2VyVGhlbWUuc2hlZXQgPSBzaGVldDtcbiAgICAgICAgc2hlZXQuYXR0YWNoKCk7XG5cbiAgICAgICAgY29uc3Qgc2hlZXRzUmVnaXN0cnkgPSB0aGlzLmNvbnRleHRbbnMuc2hlZXRzUmVnaXN0cnldO1xuICAgICAgICBpZiAoc2hlZXRzUmVnaXN0cnkpIHtcbiAgICAgICAgICBzaGVldHNSZWdpc3RyeS5hZGQoc2hlZXQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNoZWV0TWFuYWdlclRoZW1lLnJlZnMgKz0gMTtcbiAgICB9XG5cbiAgICBkZXRhY2godGhlbWU6IE9iamVjdCkge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZVN0eWxlc0dlbmVyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdHlsZXNDcmVhdG9yU2F2ZWQgPSB0aGlzLnN0eWxlc0NyZWF0b3JTYXZlZDtcbiAgICAgIGNvbnN0IHNoZWV0TWFuYWdlciA9IHRoaXMuc2hlZXRzTWFuYWdlci5nZXQoc3R5bGVzQ3JlYXRvclNhdmVkKTtcbiAgICAgIGNvbnN0IHNoZWV0TWFuYWdlclRoZW1lID0gc2hlZXRNYW5hZ2VyLmdldCh0aGVtZSk7XG5cbiAgICAgIHNoZWV0TWFuYWdlclRoZW1lLnJlZnMgLT0gMTtcblxuICAgICAgaWYgKHNoZWV0TWFuYWdlclRoZW1lLnJlZnMgPT09IDApIHtcbiAgICAgICAgc2hlZXRNYW5hZ2VyLmRlbGV0ZSh0aGVtZSk7XG4gICAgICAgIHRoaXMuanNzLnJlbW92ZVN0eWxlU2hlZXQoc2hlZXRNYW5hZ2VyVGhlbWUuc2hlZXQpO1xuICAgICAgICBjb25zdCBzaGVldHNSZWdpc3RyeSA9IHRoaXMuY29udGV4dFtucy5zaGVldHNSZWdpc3RyeV07XG4gICAgICAgIGlmIChzaGVldHNSZWdpc3RyeSkge1xuICAgICAgICAgIHNoZWV0c1JlZ2lzdHJ5LnJlbW92ZShzaGVldE1hbmFnZXJUaGVtZS5zaGVldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB1bnN1YnNjcmliZUlkID0gbnVsbDtcbiAgICBqc3MgPSBudWxsO1xuICAgIHNoZWV0c01hbmFnZXIgPSBzaGVldHNNYW5hZ2VyO1xuICAgIGRpc2FibGVTdHlsZXNHZW5lcmF0aW9uID0gZmFsc2U7XG4gICAgc3R5bGVzQ3JlYXRvclNhdmVkID0gbnVsbDtcbiAgICB0aGVtZSA9IG51bGw7XG4gICAgc2hlZXRPcHRpb25zID0gbnVsbDtcbiAgICB0aGVtZSA9IG51bGw7XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzZXM6IGNsYXNzZXNQcm9wLCBpbm5lclJlZiwgLi4ub3RoZXIgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGxldCBjbGFzc2VzO1xuICAgICAgbGV0IHJlbmRlcmVkQ2xhc3NlcyA9IHt9O1xuXG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZVN0eWxlc0dlbmVyYXRpb24pIHtcbiAgICAgICAgY29uc3Qgc2hlZXRNYW5hZ2VyID0gdGhpcy5zaGVldHNNYW5hZ2VyLmdldCh0aGlzLnN0eWxlc0NyZWF0b3JTYXZlZCk7XG4gICAgICAgIGNvbnN0IHNoZWV0c01hbmFnZXJUaGVtZSA9IHNoZWV0TWFuYWdlci5nZXQodGhpcy50aGVtZSk7XG4gICAgICAgIHJlbmRlcmVkQ2xhc3NlcyA9IHNoZWV0c01hbmFnZXJUaGVtZS5zaGVldC5jbGFzc2VzO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2xhc3Nlc1Byb3ApIHtcbiAgICAgICAgY2xhc3NlcyA9IHtcbiAgICAgICAgICAuLi5yZW5kZXJlZENsYXNzZXMsXG4gICAgICAgICAgLi4uT2JqZWN0LmtleXMoY2xhc3Nlc1Byb3ApLnJlZHVjZSgoYWNjdW11bGF0b3IsIGtleSkgPT4ge1xuICAgICAgICAgICAgd2FybmluZyhcbiAgICAgICAgICAgICAgcmVuZGVyZWRDbGFzc2VzW2tleV0gfHwgdGhpcy5kaXNhYmxlU3R5bGVzR2VuZXJhdGlvbixcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIGBNYXRlcmlhbC1VSTogdGhlIGtleSBcXGAke2tleX1cXGAgYCArXG4gICAgICAgICAgICAgICAgICBgcHJvdmlkZWQgdG8gdGhlIGNsYXNzZXMgcHJvcGVydHkgaXMgbm90IGltcGxlbWVudGVkIGluICR7Z2V0RGlzcGxheU5hbWUoXG4gICAgICAgICAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICl9LmAsXG4gICAgICAgICAgICAgICAgYFlvdSBjYW4gb25seSBvdmVycmlkZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogJHtPYmplY3Qua2V5cyhyZW5kZXJlZENsYXNzZXMpLmpvaW4oXG4gICAgICAgICAgICAgICAgICAnLCcsXG4gICAgICAgICAgICAgICAgKX1gLFxuICAgICAgICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgd2FybmluZyhcbiAgICAgICAgICAgICAgIWNsYXNzZXNQcm9wW2tleV0gfHwgdHlwZW9mIGNsYXNzZXNQcm9wW2tleV0gPT09ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgYE1hdGVyaWFsLVVJOiB0aGUga2V5IFxcYCR7a2V5fVxcYCBgICtcbiAgICAgICAgICAgICAgICAgIGBwcm92aWRlZCB0byB0aGUgY2xhc3NlcyBwcm9wZXJ0eSBpcyBub3QgdmFsaWQgZm9yICR7Z2V0RGlzcGxheU5hbWUoQ29tcG9uZW50KX0uYCxcbiAgICAgICAgICAgICAgICBgWW91IG5lZWQgdG8gcHJvdmlkZSBhIG5vbiBlbXB0eSBzdHJpbmcgaW5zdGVhZCBvZjogJHtjbGFzc2VzUHJvcFtrZXldfS5gLFxuICAgICAgICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGNsYXNzZXNQcm9wW2tleV0pIHtcbiAgICAgICAgICAgICAgYWNjdW11bGF0b3Jba2V5XSA9IGAke3JlbmRlcmVkQ2xhc3Nlc1trZXldfSAke2NsYXNzZXNQcm9wW2tleV19YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgICAgIH0sIHt9KSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsYXNzZXMgPSByZW5kZXJlZENsYXNzZXM7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1vcmUgPSB7fTtcblxuICAgICAgLy8gUHJvdmlkZSB0aGUgdGhlbWUgdG8gdGhlIHdyYXBwZWQgY29tcG9uZW50LlxuICAgICAgLy8gU28gd2UgZG9uJ3QgaGF2ZSB0byB1c2UgdGhlIGB3aXRoVGhlbWUoKWAgSGlnaGVyLW9yZGVyIENvbXBvbmVudC5cbiAgICAgIGlmICh3aXRoVGhlbWUpIHtcbiAgICAgICAgbW9yZS50aGVtZSA9IHRoaXMudGhlbWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiA8Q29tcG9uZW50IGNsYXNzZXM9e2NsYXNzZXN9IHsuLi5tb3JlfSB7Li4ub3RoZXJ9IHJlZj17aW5uZXJSZWZ9IC8+O1xuICAgIH1cbiAgfVxuXG4gIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFN0eWxlLCBDb21wb25lbnQpO1xuXG4gIC8vIEhpZ2hlciBzcGVjaWZpY2l0eVxuICBTdHlsZS5vcHRpb25zID0gb3B0aW9ucztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIFN0eWxlLmRpc3BsYXlOYW1lID0gd3JhcERpc3BsYXlOYW1lKENvbXBvbmVudCwgJ3dpdGhTdHlsZXMnKTtcbiAgfVxuXG4gIHJldHVybiBTdHlsZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZXM7XG4iXX0=
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)))
/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
Copyright (c) 2016 Jed Watson.
Licensed under the MIT License (MIT), see
http://jedwatson.github.io/classnames
*/
/* global define */
(function () {
'use strict';
var hasOwn = {}.hasOwnProperty;
function classNames () {
var classes = [];
for (var i = 0; i < arguments.length; i++) {
var arg = arguments[i];
if (!arg) continue;
var argType = typeof arg;
if (argType === 'string' || argType === 'number') {
classes.push(arg);
} else if (Array.isArray(arg)) {
classes.push(classNames.apply(null, arg));
} else if (argType === 'object') {
for (var key in arg) {
if (hasOwn.call(arg, key) && arg[key]) {
classes.push(key);
}
}
}
}
return classes.join(' ');
}
if (typeof module !== 'undefined' && module.exports) {
module.exports = classNames;
} else if (true) {
// register as 'classnames', consistent with npm package name
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {
return classNames;
}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
} else {
window.classNames = classNames;
}
}());
/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(process) {/**
* Copyright 2014-2015, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
/**
* Similar to invariant but only logs a warning if the condition is not met.
* This can be used to log issues in development environments in critical
* paths. Removing the logging code for production environments will keep the
* same logic and follow the same code paths.
*/
var warning = function() {};
if (process.env.NODE_ENV !== 'production') {
warning = function(condition, format, args) {
var len = arguments.length;
args = new Array(len > 2 ? len - 2 : 0);
for (var key = 2; key < len; key++) {
args[key - 2] = arguments[key];
}
if (format === undefined) {
throw new Error(
'`warning(condition, format, ...args)` requires a warning ' +
'message argument'
);
}
if (format.length < 10 || (/^[s\W]*$/).test(format)) {
throw new Err