apeman-react-sign
Version:
apeman react package for sign components
334 lines (295 loc) • 28.5 kB
JavaScript
/**
* Form for signin
* @class ApSigninForm
*/
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ApSigninForm = 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 = require('react');
var _react2 = _interopRequireDefault(_react);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _apemanReactForm = require('apeman-react-form');
var _apemanReactField = require('apeman-react-field');
var _apemanReactButton = require('apeman-react-button');
var _apemanReactText = require('apeman-react-text');
var _apemanReactPassword = require('apeman-react-password');
var _apemanReactCheckbox = require('apeman-react-checkbox');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return 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; }
var noop = function noop(e) {
return console.log(e);
};
/** @lends ApSigninForm */
var ApSigninForm = function (_Component) {
_inherits(ApSigninForm, _Component);
function ApSigninForm(props) {
_classCallCheck(this, ApSigninForm);
var _this = _possibleConstructorReturn(this, (ApSigninForm.__proto__ || Object.getPrototypeOf(ApSigninForm)).call(this, props));
var s = _this;
s.state = {};
return _this;
}
_createClass(ApSigninForm, [{
key: 'render',
value: function render() {
var s = this;
var props = s.props;
var id = props.id;
var values = props.values;
var labels = props.labels;
var icons = props.icons;
var idOf = props.idOf;
var onUpdate = props.onUpdate;
var _onSubmit = props.onSubmit;
var spinning = props.spinning;
var errorList = props.errorList;
var errorStyle = props.errorStyle;
var actions = props.actions;
var centered = props.centered;
var rememberEnabled = props.rememberEnabled;
return _react2.default.createElement(
_apemanReactForm.ApForm,
{ id: id,
centered: centered,
spinning: spinning,
className: (0, _classnames2.default)('ap-signin-form', props.className),
style: Object.assign({}, props.style)
},
_react2.default.createElement(
_apemanReactField.ApFieldSet,
{ plain: true },
errorList,
errorStyle,
_react2.default.createElement(ApSigninForm.KeyField, { values: values, labels: labels, idOf: idOf, onUpdate: onUpdate }),
_react2.default.createElement(ApSigninForm.PasswordField, { values: values, labels: labels, idOf: idOf, onUpdate: onUpdate }),
_react2.default.createElement(ApSigninForm.RememberField, _extends({ labels: labels, idOf: idOf }, {
enabled: rememberEnabled,
onToggle: actions.toggleRemember
})),
_react2.default.createElement(ApSigninForm.ButtonField, _extends({ labels: labels, idOf: idOf }, {
onSubmit: function onSubmit() {
return _onSubmit(s.props.values);
} }))
),
_react2.default.createElement(ApSigninForm.MenuFieldSet, { actions: props.menu,
labels: labels,
idOf: idOf
}),
_react2.default.createElement(ApSigninForm.ButtonFieldSet, { actions: props.buttons,
labels: labels,
icons: icons,
idOf: idOf })
);
}
}]);
return ApSigninForm;
}(_react.Component);
Object.assign(ApSigninForm, {
// --------------------
// Specs
// --------------------
propTypes: {
labels: _react.PropTypes.object,
icons: _react.PropTypes.object,
menu: _react.PropTypes.objectOf(_react.PropTypes.func),
buttons: _react.PropTypes.objectOf(_react.PropTypes.func),
rememberEnabled: _react.PropTypes.bool
},
defaultProps: {
labels: {
key: 'Username or Email',
password: 'Password',
remember: 'Remember Me',
submit: 'Sign In',
signup: 'Sign Up',
recover: 'Forget Password?',
twitter: 'Sign in with Twitter',
google: 'Sign in with Google',
facebook: 'Sign in with Facebook'
},
icons: {
facebook: 'fa fa-facebook',
twitter: 'fa fa-twitter',
google: 'fa fa-google'
},
actions: {
toggleRemember: noop
},
menu: null,
buttons: null,
rememberEnabled: false
},
// ------------------
// Sub Components
// ------------------
KeyField: function KeyField(_ref) {
var values = _ref.values;
var labels = _ref.labels;
var idOf = _ref.idOf;
var onUpdate = _ref.onUpdate;
var name = 'key';
return _react2.default.createElement(
_apemanReactField.ApField,
null,
_react2.default.createElement(
_apemanReactField.ApFieldLabel,
{ htmlFor: idOf(name) },
labels[[name]]
),
_react2.default.createElement(
_apemanReactField.ApFieldValue,
null,
_react2.default.createElement(_apemanReactText.ApText, { autoFocus: true,
id: idOf(name),
name: name,
value: values[name],
onChange: function onChange(e) {
return onUpdate(_defineProperty({}, name, e.target.value));
}
})
)
);
},
PasswordField: function PasswordField(_ref2) {
var values = _ref2.values;
var labels = _ref2.labels;
var idOf = _ref2.idOf;
var onUpdate = _ref2.onUpdate;
var name = 'password';
return _react2.default.createElement(
_apemanReactField.ApField,
null,
_react2.default.createElement(
_apemanReactField.ApFieldLabel,
{ htmlFor: idOf(name) },
labels[name]
),
_react2.default.createElement(
_apemanReactField.ApFieldValue,
null,
_react2.default.createElement(_apemanReactPassword.ApPassword, { id: idOf(name),
value: values[name],
name: name,
onChange: function onChange(e) {
return onUpdate(_defineProperty({}, name, e.target.value));
}
})
)
);
},
RememberField: function RememberField(_ref3) {
var labels = _ref3.labels;
var idOf = _ref3.idOf;
var enabled = _ref3.enabled;
var onToggle = _ref3.onToggle;
var name = 'remember';
return _react2.default.createElement(
_apemanReactField.ApField,
{ className: 'ap-signin-form-sub-field' },
_react2.default.createElement(_apemanReactField.ApFieldLabel, { htmlFor: idOf(name) }),
_react2.default.createElement(
_apemanReactField.ApFieldValue,
null,
_react2.default.createElement(_apemanReactCheckbox.ApCheckbox, { id: idOf(name),
value: 'YES',
checked: enabled,
title: labels[name],
name: name,
onChange: function onChange() {
return onToggle(!enabled);
}
})
)
);
},
ButtonField: function ButtonField(_ref4) {
var labels = _ref4.labels;
var idOf = _ref4.idOf;
var onSubmit = _ref4.onSubmit;
var name = 'submit';
return _react2.default.createElement(
_apemanReactField.ApField,
{ center: true,
className: 'ap-signin-form-button-field' },
_react2.default.createElement(
_apemanReactButton.ApButton,
{ wide: true,
primary: true,
onTap: onSubmit,
id: idOf(name)
},
labels[name]
)
);
},
MenuFieldSet: function MenuFieldSet(_ref5) {
var actions = _ref5.actions;
var labels = _ref5.labels;
var idOf = _ref5.idOf;
if (!actions) {
return null;
}
return _react2.default.createElement(
_apemanReactField.ApFieldSet,
{ plain: true },
_react2.default.createElement(
_apemanReactField.ApField,
{ center: true,
className: 'ap-signin-form-action-field' },
_react2.default.createElement(
_apemanReactButton.ApCellButtonRow,
{ className: 'ap-signin-form-action-button-row' },
Object.keys(actions).map(function (name) {
return _react2.default.createElement(_apemanReactButton.ApCellButton, { id: idOf(name),
key: name,
onTap: function onTap(e) {
return actions[name]();
},
text: labels[name] });
})
)
)
);
},
ButtonFieldSet: function ButtonFieldSet(_ref6) {
var actions = _ref6.actions;
var labels = _ref6.labels;
var icons = _ref6.icons;
var idOf = _ref6.idOf;
if (!actions) {
return null;
}
return _react2.default.createElement(
_apemanReactField.ApFieldSet,
{ plain: true },
_react2.default.createElement(
_apemanReactField.ApField,
{ className: 'ap-signin-form-action-field' },
_react2.default.createElement(
_apemanReactButton.ApIconButtonRow,
{ className: 'ap-signin-form-action-button-row' },
Object.keys(actions).map(function (name) {
return _react2.default.createElement(_apemanReactButton.ApIconButton, { id: idOf(name),
key: name,
onTap: function onTap(e) {
return actions[name]();
},
icon: icons[name],
text: labels[name] });
})
)
)
);
}
});
exports.ApSigninForm = ApSigninForm;
exports.default = (0, _apemanReactForm.withForm)(ApSigninForm);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwX3NpZ25pbl9mb3JtLmpzeCJdLCJuYW1lcyI6WyJub29wIiwiZSIsImNvbnNvbGUiLCJsb2ciLCJBcFNpZ25pbkZvcm0iLCJwcm9wcyIsInMiLCJzdGF0ZSIsImlkIiwidmFsdWVzIiwibGFiZWxzIiwiaWNvbnMiLCJpZE9mIiwib25VcGRhdGUiLCJvblN1Ym1pdCIsInNwaW5uaW5nIiwiZXJyb3JMaXN0IiwiZXJyb3JTdHlsZSIsImFjdGlvbnMiLCJjZW50ZXJlZCIsInJlbWVtYmVyRW5hYmxlZCIsImNsYXNzTmFtZSIsIk9iamVjdCIsImFzc2lnbiIsInN0eWxlIiwidG9nZ2xlUmVtZW1iZXIiLCJtZW51IiwiYnV0dG9ucyIsInByb3BUeXBlcyIsIm9iamVjdCIsIm9iamVjdE9mIiwiZnVuYyIsImJvb2wiLCJkZWZhdWx0UHJvcHMiLCJrZXkiLCJwYXNzd29yZCIsInJlbWVtYmVyIiwic3VibWl0Iiwic2lnbnVwIiwicmVjb3ZlciIsInR3aXR0ZXIiLCJnb29nbGUiLCJmYWNlYm9vayIsIktleUZpZWxkIiwibmFtZSIsInRhcmdldCIsInZhbHVlIiwiUGFzc3dvcmRGaWVsZCIsIlJlbWVtYmVyRmllbGQiLCJlbmFibGVkIiwib25Ub2dnbGUiLCJCdXR0b25GaWVsZCIsIk1lbnVGaWVsZFNldCIsImtleXMiLCJtYXAiLCJCdXR0b25GaWVsZFNldCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0FBS0E7Ozs7Ozs7Ozs7O0FBRUE7Ozs7QUFDQTs7OztBQUNBOztBQUdBOztBQUdBOztBQUdBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxPQUFPLFNBQVBBLElBQU8sQ0FBQ0MsQ0FBRDtBQUFBLFNBQU9DLFFBQVFDLEdBQVIsQ0FBWUYsQ0FBWixDQUFQO0FBQUEsQ0FBYjs7QUFFQTs7SUFDTUcsWTs7O0FBQ0osd0JBQWFDLEtBQWIsRUFBb0I7QUFBQTs7QUFBQSw0SEFDWkEsS0FEWTs7QUFFbEIsUUFBTUMsU0FBTjtBQUNBQSxNQUFFQyxLQUFGLEdBQVUsRUFBVjtBQUhrQjtBQUluQjs7Ozs2QkFFUztBQUNSLFVBQU1ELElBQUksSUFBVjtBQURRLFVBRUZELEtBRkUsR0FFUUMsQ0FGUixDQUVGRCxLQUZFO0FBQUEsVUFJTkcsRUFKTSxHQWlCSkgsS0FqQkksQ0FJTkcsRUFKTTtBQUFBLFVBS05DLE1BTE0sR0FpQkpKLEtBakJJLENBS05JLE1BTE07QUFBQSxVQU1OQyxNQU5NLEdBaUJKTCxLQWpCSSxDQU1OSyxNQU5NO0FBQUEsVUFPTkMsS0FQTSxHQWlCSk4sS0FqQkksQ0FPTk0sS0FQTTtBQUFBLFVBUU5DLElBUk0sR0FpQkpQLEtBakJJLENBUU5PLElBUk07QUFBQSxVQVNOQyxRQVRNLEdBaUJKUixLQWpCSSxDQVNOUSxRQVRNO0FBQUEsVUFVTkMsU0FWTSxHQWlCSlQsS0FqQkksQ0FVTlMsUUFWTTtBQUFBLFVBV05DLFFBWE0sR0FpQkpWLEtBakJJLENBV05VLFFBWE07QUFBQSxVQVlOQyxTQVpNLEdBaUJKWCxLQWpCSSxDQVlOVyxTQVpNO0FBQUEsVUFhTkMsVUFiTSxHQWlCSlosS0FqQkksQ0FhTlksVUFiTTtBQUFBLFVBY05DLE9BZE0sR0FpQkpiLEtBakJJLENBY05hLE9BZE07QUFBQSxVQWVOQyxRQWZNLEdBaUJKZCxLQWpCSSxDQWVOYyxRQWZNO0FBQUEsVUFnQk5DLGVBaEJNLEdBaUJKZixLQWpCSSxDQWdCTmUsZUFoQk07O0FBa0JSLGFBQ0U7QUFBQTtBQUFBLFVBQVEsSUFBS1osRUFBYjtBQUNRLG9CQUFXVyxRQURuQjtBQUVRLG9CQUFXSixRQUZuQjtBQUdRLHFCQUFZLDBCQUFXLGdCQUFYLEVBQTZCVixNQUFNZ0IsU0FBbkMsQ0FIcEI7QUFJUSxpQkFBUUMsT0FBT0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JsQixNQUFNbUIsS0FBeEI7QUFKaEI7QUFNRTtBQUFBO0FBQUEsWUFBWSxXQUFaO0FBQ0lSLG1CQURKO0FBRUlDLG9CQUZKO0FBR0Usd0NBQUMsWUFBRCxDQUFjLFFBQWQsRUFBNEIsRUFBRVIsY0FBRixFQUFVQyxjQUFWLEVBQWtCRSxVQUFsQixFQUF3QkMsa0JBQXhCLEVBQTVCLENBSEY7QUFJRSx3Q0FBQyxZQUFELENBQWMsYUFBZCxFQUFpQyxFQUFFSixjQUFGLEVBQVVDLGNBQVYsRUFBa0JFLFVBQWxCLEVBQXdCQyxrQkFBeEIsRUFBakMsQ0FKRjtBQUtFLHdDQUFDLFlBQUQsQ0FBYyxhQUFkLFdBQWlDLEVBQUVILGNBQUYsRUFBVUUsVUFBVixFQUFqQztBQUM0QixxQkFBVVEsZUFEdEM7QUFFNEIsc0JBQVdGLFFBQVFPO0FBRi9DLGFBTEY7QUFTRSx3Q0FBQyxZQUFELENBQWMsV0FBZCxXQUErQixFQUFFZixjQUFGLEVBQVVFLFVBQVYsRUFBL0I7QUFDMEIsc0JBQVc7QUFBQSxxQkFBTUUsVUFBU1IsRUFBRUQsS0FBRixDQUFRSSxNQUFqQixDQUFOO0FBQUEsYUFEckM7QUFURixTQU5GO0FBa0JFLHNDQUFDLFlBQUQsQ0FBYyxZQUFkLElBQTJCLFNBQVVKLE1BQU1xQixJQUEzQztBQUMyQixrQkFBU2hCLE1BRHBDO0FBRTJCLGdCQUFPRTtBQUZsQyxVQWxCRjtBQXNCRSxzQ0FBQyxZQUFELENBQWMsY0FBZCxJQUE2QixTQUFVUCxNQUFNc0IsT0FBN0M7QUFDNkIsa0JBQVNqQixNQUR0QztBQUU2QixpQkFBUUMsS0FGckM7QUFHNkIsZ0JBQU9DLElBSHBDO0FBdEJGLE9BREY7QUE2QkQ7Ozs7OztBQUdIVSxPQUFPQyxNQUFQLENBQWNuQixZQUFkLEVBQTRCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBd0IsYUFBVztBQUNUbEIsWUFBUSxpQkFBTW1CLE1BREw7QUFFVGxCLFdBQU8saUJBQU1rQixNQUZKO0FBR1RILFVBQU0saUJBQU1JLFFBQU4sQ0FBZSxpQkFBTUMsSUFBckIsQ0FIRztBQUlUSixhQUFTLGlCQUFNRyxRQUFOLENBQWUsaUJBQU1DLElBQXJCLENBSkE7QUFLVFgscUJBQWlCLGlCQUFNWTtBQUxkLEdBSmU7O0FBWTFCQyxnQkFBYztBQUNadkIsWUFBUTtBQUNOd0IsV0FBSyxtQkFEQztBQUVOQyxnQkFBVSxVQUZKO0FBR05DLGdCQUFVLGFBSEo7QUFJTkMsY0FBUSxTQUpGO0FBS05DLGNBQVEsU0FMRjtBQU1OQyxlQUFTLGtCQU5IO0FBT05DLGVBQVMsc0JBUEg7QUFRTkMsY0FBUSxxQkFSRjtBQVNOQyxnQkFBVTtBQVRKLEtBREk7QUFZWi9CLFdBQU87QUFDTCtCLGdCQUFVLGdCQURMO0FBRUxGLGVBQVMsZUFGSjtBQUdMQyxjQUFRO0FBSEgsS0FaSztBQWlCWnZCLGFBQVM7QUFDUE8sc0JBQWdCekI7QUFEVCxLQWpCRztBQW9CWjBCLFVBQU0sSUFwQk07QUFxQlpDLGFBQVMsSUFyQkc7QUFzQlpQLHFCQUFpQjtBQXRCTCxHQVpZOztBQXFDMUI7QUFDQTtBQUNBOztBQUVBdUIsVUF6QzBCLDBCQXlDb0I7QUFBQSxRQUFsQ2xDLE1BQWtDLFFBQWxDQSxNQUFrQztBQUFBLFFBQTFCQyxNQUEwQixRQUExQkEsTUFBMEI7QUFBQSxRQUFsQkUsSUFBa0IsUUFBbEJBLElBQWtCO0FBQUEsUUFBWkMsUUFBWSxRQUFaQSxRQUFZOztBQUM1QyxRQUFJK0IsT0FBTyxLQUFYO0FBQ0EsV0FDRTtBQUFBO0FBQUE7QUFDRTtBQUFBO0FBQUEsVUFBYyxTQUFVaEMsS0FBS2dDLElBQUwsQ0FBeEI7QUFDSWxDLGVBQVEsQ0FBRWtDLElBQUYsQ0FBUjtBQURKLE9BREY7QUFJRTtBQUFBO0FBQUE7QUFDRSxpRUFBUSxlQUFSO0FBQ1EsY0FBS2hDLEtBQUtnQyxJQUFMLENBRGI7QUFFUSxnQkFBT0EsSUFGZjtBQUdRLGlCQUFRbkMsT0FBUW1DLElBQVIsQ0FIaEI7QUFJUSxvQkFBVyxrQkFBQzNDLENBQUQ7QUFBQSxtQkFBT1ksNkJBQVkrQixJQUFaLEVBQW1CM0MsRUFBRTRDLE1BQUYsQ0FBU0MsS0FBNUIsRUFBUDtBQUFBO0FBSm5CO0FBREY7QUFKRixLQURGO0FBZUQsR0ExRHlCO0FBNEQxQkMsZUE1RDBCLGdDQTREeUI7QUFBQSxRQUFsQ3RDLE1BQWtDLFNBQWxDQSxNQUFrQztBQUFBLFFBQTFCQyxNQUEwQixTQUExQkEsTUFBMEI7QUFBQSxRQUFsQkUsSUFBa0IsU0FBbEJBLElBQWtCO0FBQUEsUUFBWkMsUUFBWSxTQUFaQSxRQUFZOztBQUNqRCxRQUFJK0IsT0FBTyxVQUFYO0FBQ0EsV0FDRTtBQUFBO0FBQUE7QUFDRTtBQUFBO0FBQUEsVUFBYyxTQUFVaEMsS0FBS2dDLElBQUwsQ0FBeEI7QUFDSWxDLGVBQVFrQyxJQUFSO0FBREosT0FERjtBQUlFO0FBQUE7QUFBQTtBQUNFLHlFQUFZLElBQUtoQyxLQUFLZ0MsSUFBTCxDQUFqQjtBQUNZLGlCQUFRbkMsT0FBUW1DLElBQVIsQ0FEcEI7QUFFWSxnQkFBT0EsSUFGbkI7QUFHWSxvQkFBVyxrQkFBQzNDLENBQUQ7QUFBQSxtQkFBT1ksNkJBQVkrQixJQUFaLEVBQW1CM0MsRUFBRTRDLE1BQUYsQ0FBU0MsS0FBNUIsRUFBUDtBQUFBO0FBSHZCO0FBREY7QUFKRixLQURGO0FBY0QsR0E1RXlCO0FBOEUxQkUsZUE5RTBCLGdDQThFMEI7QUFBQSxRQUFuQ3RDLE1BQW1DLFNBQW5DQSxNQUFtQztBQUFBLFFBQTNCRSxJQUEyQixTQUEzQkEsSUFBMkI7QUFBQSxRQUFyQnFDLE9BQXFCLFNBQXJCQSxPQUFxQjtBQUFBLFFBQVpDLFFBQVksU0FBWkEsUUFBWTs7QUFDbEQsUUFBSU4sT0FBTyxVQUFYO0FBQ0EsV0FDRTtBQUFBO0FBQUEsUUFBUyxXQUFVLDBCQUFuQjtBQUNFLHNFQUFjLFNBQVVoQyxLQUFLZ0MsSUFBTCxDQUF4QixHQURGO0FBR0U7QUFBQTtBQUFBO0FBQ0UseUVBQVksSUFBS2hDLEtBQUtnQyxJQUFMLENBQWpCO0FBQ1ksaUJBQU0sS0FEbEI7QUFFWSxtQkFBVUssT0FGdEI7QUFHWSxpQkFBUXZDLE9BQVFrQyxJQUFSLENBSHBCO0FBSVksZ0JBQU9BLElBSm5CO0FBS1ksb0JBQVc7QUFBQSxtQkFBTU0sU0FBUyxDQUFDRCxPQUFWLENBQU47QUFBQTtBQUx2QjtBQURGO0FBSEYsS0FERjtBQWVELEdBL0Z5QjtBQWlHMUJFLGFBakcwQiw4QkFpR2U7QUFBQSxRQUExQnpDLE1BQTBCLFNBQTFCQSxNQUEwQjtBQUFBLFFBQWxCRSxJQUFrQixTQUFsQkEsSUFBa0I7QUFBQSxRQUFaRSxRQUFZLFNBQVpBLFFBQVk7O0FBQ3ZDLFFBQUk4QixPQUFPLFFBQVg7QUFDQSxXQUNFO0FBQUE7QUFBQSxRQUFTLFlBQVQ7QUFDUyxtQkFBVSw2QkFEbkI7QUFFRTtBQUFBO0FBQUEsVUFBVSxVQUFWO0FBQ1UsdUJBRFY7QUFFVSxpQkFBUTlCLFFBRmxCO0FBR1UsY0FBS0YsS0FBS2dDLElBQUw7QUFIZjtBQUlHbEMsZUFBUWtDLElBQVI7QUFKSDtBQUZGLEtBREY7QUFVRCxHQTdHeUI7QUErRzFCUSxjQS9HMEIsK0JBK0dlO0FBQUEsUUFBekJsQyxPQUF5QixTQUF6QkEsT0FBeUI7QUFBQSxRQUFoQlIsTUFBZ0IsU0FBaEJBLE1BQWdCO0FBQUEsUUFBUkUsSUFBUSxTQUFSQSxJQUFROztBQUN2QyxRQUFJLENBQUNNLE9BQUwsRUFBYztBQUNaLGFBQU8sSUFBUDtBQUNEO0FBQ0QsV0FDRTtBQUFBO0FBQUEsUUFBWSxXQUFaO0FBQ0U7QUFBQTtBQUFBLFVBQVMsWUFBVDtBQUNTLHFCQUFVLDZCQURuQjtBQUVFO0FBQUE7QUFBQSxZQUFpQixXQUFVLGtDQUEzQjtBQUVJSSxpQkFBTytCLElBQVAsQ0FBWW5DLE9BQVosRUFBcUJvQyxHQUFyQixDQUF5QixVQUFDVixJQUFEO0FBQUEsbUJBQ3ZCLGlFQUFjLElBQUtoQyxLQUFLZ0MsSUFBTCxDQUFuQjtBQUNjLG1CQUFNQSxJQURwQjtBQUVjLHFCQUFRLGVBQUMzQyxDQUFEO0FBQUEsdUJBQU9pQixRQUFTMEIsSUFBVCxHQUFQO0FBQUEsZUFGdEI7QUFHYyxvQkFBT2xDLE9BQVFrQyxJQUFSLENBSHJCLEdBRHVCO0FBQUEsV0FBekI7QUFGSjtBQUZGO0FBREYsS0FERjtBQWlCRCxHQXBJeUI7QUFzSTFCVyxnQkF0STBCLGlDQXNJd0I7QUFBQSxRQUFoQ3JDLE9BQWdDLFNBQWhDQSxPQUFnQztBQUFBLFFBQXZCUixNQUF1QixTQUF2QkEsTUFBdUI7QUFBQSxRQUFmQyxLQUFlLFNBQWZBLEtBQWU7QUFBQSxRQUFSQyxJQUFRLFNBQVJBLElBQVE7O0FBQ2hELFFBQUksQ0FBQ00sT0FBTCxFQUFjO0FBQ1osYUFBTyxJQUFQO0FBQ0Q7QUFDRCxXQUNFO0FBQUE7QUFBQSxRQUFZLFdBQVo7QUFDRTtBQUFBO0FBQUEsVUFBUyxXQUFVLDZCQUFuQjtBQUNFO0FBQUE7QUFBQSxZQUFpQixXQUFVLGtDQUEzQjtBQUVJSSxpQkFBTytCLElBQVAsQ0FBWW5DLE9BQVosRUFBcUJvQyxHQUFyQixDQUF5QixVQUFDVixJQUFEO0FBQUEsbUJBQ3ZCLGlFQUFjLElBQUtoQyxLQUFLZ0MsSUFBTCxDQUFuQjtBQUNjLG1CQUFNQSxJQURwQjtBQUVjLHFCQUFRLGVBQUMzQyxDQUFEO0FBQUEsdUJBQU9pQixRQUFTMEIsSUFBVCxHQUFQO0FBQUEsZUFGdEI7QUFHYyxvQkFBT2pDLE1BQU9pQyxJQUFQLENBSHJCO0FBSWMsb0JBQU9sQyxPQUFRa0MsSUFBUixDQUpyQixHQUR1QjtBQUFBLFdBQXpCO0FBRko7QUFERjtBQURGLEtBREY7QUFpQkQ7QUEzSnlCLENBQTVCOztRQThKU3hDLFksR0FBQUEsWTtrQkFDTSwrQkFBU0EsWUFBVCxDIiwiZmlsZSI6ImFwX3NpZ25pbl9mb3JtLmpzeCIsInNvdXJjZVJvb3QiOiJsaWIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZvcm0gZm9yIHNpZ25pblxuICogQGNsYXNzIEFwU2lnbmluRm9ybVxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgYXMgdHlwZXMgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQge1xuICBBcEZvcm0sIHdpdGhGb3JtXG59IGZyb20gJ2FwZW1hbi1yZWFjdC1mb3JtJ1xuaW1wb3J0IHtcbiAgQXBGaWVsZFNldCwgQXBGaWVsZCwgQXBGaWVsZExhYmVsLCBBcEZpZWxkVmFsdWVcbn0gZnJvbSAnYXBlbWFuLXJlYWN0LWZpZWxkJ1xuaW1wb3J0IHtcbiAgQXBCdXR0b24sIEFwQ2VsbEJ1dHRvbiwgQXBDZWxsQnV0dG9uUm93LCBBcEljb25CdXR0b24sIEFwSWNvbkJ1dHRvblJvd1xufSBmcm9tICdhcGVtYW4tcmVhY3QtYnV0dG9uJ1xuaW1wb3J0IHsgQXBUZXh0IH0gZnJvbSAnYXBlbWFuLXJlYWN0LXRleHQnXG5pbXBvcnQgeyBBcFBhc3N3b3JkIH0gZnJvbSAnYXBlbWFuLXJlYWN0LXBhc3N3b3JkJ1xuaW1wb3J0IHsgQXBDaGVja2JveCB9IGZyb20gJ2FwZW1hbi1yZWFjdC1jaGVja2JveCdcblxuY29uc3Qgbm9vcCA9IChlKSA9PiBjb25zb2xlLmxvZyhlKVxuXG4vKiogQGxlbmRzIEFwU2lnbmluRm9ybSAqL1xuY2xhc3MgQXBTaWduaW5Gb3JtIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IgKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpXG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBzLnN0YXRlID0ge31cbiAgfVxuXG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBwcm9wcyB9ID0gc1xuICAgIGxldCB7XG4gICAgICBpZCxcbiAgICAgIHZhbHVlcyxcbiAgICAgIGxhYmVscyxcbiAgICAgIGljb25zLFxuICAgICAgaWRPZixcbiAgICAgIG9uVXBkYXRlLFxuICAgICAgb25TdWJtaXQsXG4gICAgICBzcGlubmluZyxcbiAgICAgIGVycm9yTGlzdCxcbiAgICAgIGVycm9yU3R5bGUsXG4gICAgICBhY3Rpb25zLFxuICAgICAgY2VudGVyZWQsXG4gICAgICByZW1lbWJlckVuYWJsZWRcbiAgICB9ID0gcHJvcHNcbiAgICByZXR1cm4gKFxuICAgICAgPEFwRm9ybSBpZD17IGlkIH1cbiAgICAgICAgICAgICAgY2VudGVyZWQ9eyBjZW50ZXJlZCB9XG4gICAgICAgICAgICAgIHNwaW5uaW5nPXsgc3Bpbm5pbmcgfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9eyBjbGFzc25hbWVzKCdhcC1zaWduaW4tZm9ybScsIHByb3BzLmNsYXNzTmFtZSl9XG4gICAgICAgICAgICAgIHN0eWxlPXsgT2JqZWN0LmFzc2lnbih7fSwgcHJvcHMuc3R5bGUpIH1cbiAgICAgID5cbiAgICAgICAgPEFwRmllbGRTZXQgcGxhaW4+XG4gICAgICAgICAgeyBlcnJvckxpc3QgfVxuICAgICAgICAgIHsgZXJyb3JTdHlsZSB9XG4gICAgICAgICAgPEFwU2lnbmluRm9ybS5LZXlGaWVsZCB7IC4uLnsgdmFsdWVzLCBsYWJlbHMsIGlkT2YsIG9uVXBkYXRlIH0gfS8+XG4gICAgICAgICAgPEFwU2lnbmluRm9ybS5QYXNzd29yZEZpZWxkIHsgLi4ueyB2YWx1ZXMsIGxhYmVscywgaWRPZiwgb25VcGRhdGUgfSB9Lz5cbiAgICAgICAgICA8QXBTaWduaW5Gb3JtLlJlbWVtYmVyRmllbGQgeyAuLi57IGxhYmVscywgaWRPZiB9IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZD17IHJlbWVtYmVyRW5hYmxlZCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVG9nZ2xlPXsgYWN0aW9ucy50b2dnbGVSZW1lbWJlciB9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8QXBTaWduaW5Gb3JtLkJ1dHRvbkZpZWxkIHsgLi4ueyBsYWJlbHMsIGlkT2YgfSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblN1Ym1pdD17ICgpID0+IG9uU3VibWl0KHMucHJvcHMudmFsdWVzKSB9Lz5cbiAgICAgICAgPC9BcEZpZWxkU2V0PlxuICAgICAgICA8QXBTaWduaW5Gb3JtLk1lbnVGaWVsZFNldCBhY3Rpb25zPXsgcHJvcHMubWVudSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscz17IGxhYmVscyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkT2Y9eyBpZE9mIH1cbiAgICAgICAgLz5cbiAgICAgICAgPEFwU2lnbmluRm9ybS5CdXR0b25GaWVsZFNldCBhY3Rpb25zPXsgcHJvcHMuYnV0dG9ucyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzPXsgbGFiZWxzIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29ucz17IGljb25zIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZE9mPXsgaWRPZiB9Lz5cbiAgICAgIDwvQXBGb3JtPlxuICAgIClcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKEFwU2lnbmluRm9ybSwge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBTcGVjc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBwcm9wVHlwZXM6IHtcbiAgICBsYWJlbHM6IHR5cGVzLm9iamVjdCxcbiAgICBpY29uczogdHlwZXMub2JqZWN0LFxuICAgIG1lbnU6IHR5cGVzLm9iamVjdE9mKHR5cGVzLmZ1bmMpLFxuICAgIGJ1dHRvbnM6IHR5cGVzLm9iamVjdE9mKHR5cGVzLmZ1bmMpLFxuICAgIHJlbWVtYmVyRW5hYmxlZDogdHlwZXMuYm9vbFxuICB9LFxuXG4gIGRlZmF1bHRQcm9wczoge1xuICAgIGxhYmVsczoge1xuICAgICAga2V5OiAnVXNlcm5hbWUgb3IgRW1haWwnLFxuICAgICAgcGFzc3dvcmQ6ICdQYXNzd29yZCcsXG4gICAgICByZW1lbWJlcjogJ1JlbWVtYmVyIE1lJyxcbiAgICAgIHN1Ym1pdDogJ1NpZ24gSW4nLFxuICAgICAgc2lnbnVwOiAnU2lnbiBVcCcsXG4gICAgICByZWNvdmVyOiAnRm9yZ2V0IFBhc3N3b3JkPycsXG4gICAgICB0d2l0dGVyOiAnU2lnbiBpbiB3aXRoIFR3aXR0ZXInLFxuICAgICAgZ29vZ2xlOiAnU2lnbiBpbiB3aXRoIEdvb2dsZScsXG4gICAgICBmYWNlYm9vazogJ1NpZ24gaW4gd2l0aCBGYWNlYm9vaydcbiAgICB9LFxuICAgIGljb25zOiB7XG4gICAgICBmYWNlYm9vazogJ2ZhIGZhLWZhY2Vib29rJyxcbiAgICAgIHR3aXR0ZXI6ICdmYSBmYS10d2l0dGVyJyxcbiAgICAgIGdvb2dsZTogJ2ZhIGZhLWdvb2dsZSdcbiAgICB9LFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIHRvZ2dsZVJlbWVtYmVyOiBub29wXG4gICAgfSxcbiAgICBtZW51OiBudWxsLFxuICAgIGJ1dHRvbnM6IG51bGwsXG4gICAgcmVtZW1iZXJFbmFibGVkOiBmYWxzZVxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBTdWIgQ29tcG9uZW50c1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cblxuICBLZXlGaWVsZCAoeyB2YWx1ZXMsIGxhYmVscywgaWRPZiwgb25VcGRhdGUgfSkge1xuICAgIGxldCBuYW1lID0gJ2tleSdcbiAgICByZXR1cm4gKFxuICAgICAgPEFwRmllbGQ+XG4gICAgICAgIDxBcEZpZWxkTGFiZWwgaHRtbEZvcj17IGlkT2YobmFtZSkgfT5cbiAgICAgICAgICB7IGxhYmVsc1sgWyBuYW1lIF0gXSB9XG4gICAgICAgIDwvQXBGaWVsZExhYmVsPlxuICAgICAgICA8QXBGaWVsZFZhbHVlPlxuICAgICAgICAgIDxBcFRleHQgYXV0b0ZvY3VzXG4gICAgICAgICAgICAgICAgICBpZD17IGlkT2YobmFtZSkgfVxuICAgICAgICAgICAgICAgICAgbmFtZT17IG5hbWUgfVxuICAgICAgICAgICAgICAgICAgdmFsdWU9eyB2YWx1ZXNbIG5hbWUgXSB9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17IChlKSA9PiBvblVwZGF0ZSh7IFtuYW1lXTogZS50YXJnZXQudmFsdWUgfSkgfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvQXBGaWVsZFZhbHVlPlxuICAgICAgPC9BcEZpZWxkPlxuICAgIClcbiAgfSxcblxuICBQYXNzd29yZEZpZWxkICh7IHZhbHVlcywgbGFiZWxzLCBpZE9mLCBvblVwZGF0ZSB9KSB7XG4gICAgbGV0IG5hbWUgPSAncGFzc3dvcmQnXG4gICAgcmV0dXJuIChcbiAgICAgIDxBcEZpZWxkPlxuICAgICAgICA8QXBGaWVsZExhYmVsIGh0bWxGb3I9eyBpZE9mKG5hbWUpIH0+XG4gICAgICAgICAgeyBsYWJlbHNbIG5hbWUgXSB9XG4gICAgICAgIDwvQXBGaWVsZExhYmVsPlxuICAgICAgICA8QXBGaWVsZFZhbHVlPlxuICAgICAgICAgIDxBcFBhc3N3b3JkIGlkPXsgaWRPZihuYW1lKSB9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9eyB2YWx1ZXNbIG5hbWUgXSB9XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT17IG5hbWUgfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsgKGUpID0+IG9uVXBkYXRlKHsgW25hbWVdOiBlLnRhcmdldC52YWx1ZSB9KSB9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9BcEZpZWxkVmFsdWU+XG4gICAgICA8L0FwRmllbGQ+XG4gICAgKVxuICB9LFxuXG4gIFJlbWVtYmVyRmllbGQgKHsgbGFiZWxzLCBpZE9mLCBlbmFibGVkLCBvblRvZ2dsZSB9KSB7XG4gICAgbGV0IG5hbWUgPSAncmVtZW1iZXInXG4gICAgcmV0dXJuIChcbiAgICAgIDxBcEZpZWxkIGNsYXNzTmFtZT0nYXAtc2lnbmluLWZvcm0tc3ViLWZpZWxkJz5cbiAgICAgICAgPEFwRmllbGRMYWJlbCBodG1sRm9yPXsgaWRPZihuYW1lKSB9PlxuICAgICAgICA8L0FwRmllbGRMYWJlbD5cbiAgICAgICAgPEFwRmllbGRWYWx1ZT5cbiAgICAgICAgICA8QXBDaGVja2JveCBpZD17IGlkT2YobmFtZSkgfVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSdZRVMnXG4gICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17IGVuYWJsZWQgfVxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXsgbGFiZWxzWyBuYW1lIF0gfVxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9eyBuYW1lIH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17ICgpID0+IG9uVG9nZ2xlKCFlbmFibGVkKSB9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9BcEZpZWxkVmFsdWU+XG4gICAgICA8L0FwRmllbGQ+XG4gICAgKVxuICB9LFxuXG4gIEJ1dHRvbkZpZWxkICh7IGxhYmVscywgaWRPZiwgb25TdWJtaXQgfSkge1xuICAgIGxldCBuYW1lID0gJ3N1Ym1pdCdcbiAgICByZXR1cm4gKFxuICAgICAgPEFwRmllbGQgY2VudGVyXG4gICAgICAgICAgICAgICBjbGFzc05hbWU9J2FwLXNpZ25pbi1mb3JtLWJ1dHRvbi1maWVsZCc+XG4gICAgICAgIDxBcEJ1dHRvbiB3aWRlXG4gICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICBvblRhcD17IG9uU3VibWl0IH1cbiAgICAgICAgICAgICAgICAgIGlkPXsgaWRPZihuYW1lKSB9XG4gICAgICAgID57IGxhYmVsc1sgbmFtZSBdIH08L0FwQnV0dG9uPlxuICAgICAgPC9BcEZpZWxkPlxuICAgIClcbiAgfSxcblxuICBNZW51RmllbGRTZXQgKHsgYWN0aW9ucywgbGFiZWxzLCBpZE9mIH0pIHtcbiAgICBpZiAoIWFjdGlvbnMpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8QXBGaWVsZFNldCBwbGFpbj5cbiAgICAgICAgPEFwRmllbGQgY2VudGVyXG4gICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nYXAtc2lnbmluLWZvcm0tYWN0aW9uLWZpZWxkJz5cbiAgICAgICAgICA8QXBDZWxsQnV0dG9uUm93IGNsYXNzTmFtZT0nYXAtc2lnbmluLWZvcm0tYWN0aW9uLWJ1dHRvbi1yb3cnPlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhhY3Rpb25zKS5tYXAoKG5hbWUpID0+IChcbiAgICAgICAgICAgICAgICA8QXBDZWxsQnV0dG9uIGlkPXsgaWRPZihuYW1lKSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9eyBuYW1lIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVGFwPXsgKGUpID0+IGFjdGlvbnNbIG5hbWUgXSgpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9eyBsYWJlbHNbIG5hbWUgXSB9Lz5cbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L0FwQ2VsbEJ1dHRvblJvdz5cbiAgICAgICAgPC9BcEZpZWxkPlxuICAgICAgPC9BcEZpZWxkU2V0PlxuICAgIClcbiAgfSxcblxuICBCdXR0b25GaWVsZFNldCAoeyBhY3Rpb25zLCBsYWJlbHMsIGljb25zLCBpZE9mIH0pIHtcbiAgICBpZiAoIWFjdGlvbnMpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8QXBGaWVsZFNldCBwbGFpbj5cbiAgICAgICAgPEFwRmllbGQgY2xhc3NOYW1lPSdhcC1zaWduaW4tZm9ybS1hY3Rpb24tZmllbGQnPlxuICAgICAgICAgIDxBcEljb25CdXR0b25Sb3cgY2xhc3NOYW1lPSdhcC1zaWduaW4tZm9ybS1hY3Rpb24tYnV0dG9uLXJvdyc+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKGFjdGlvbnMpLm1hcCgobmFtZSkgPT4gKFxuICAgICAgICAgICAgICAgIDxBcEljb25CdXR0b24gaWQ9eyBpZE9mKG5hbWUpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17IG5hbWUgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25UYXA9eyAoZSkgPT4gYWN0aW9uc1sgbmFtZSBdKCkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17IGljb25zWyBuYW1lIF0gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD17IGxhYmVsc1sgbmFtZSBdIH0vPlxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvQXBJY29uQnV0dG9uUm93PlxuICAgICAgICA8L0FwRmllbGQ+XG4gICAgICA8L0FwRmllbGRTZXQ+XG4gICAgKVxuICB9XG59KVxuXG5leHBvcnQgeyBBcFNpZ25pbkZvcm0gfVxuZXhwb3J0IGRlZmF1bHQgd2l0aEZvcm0oQXBTaWduaW5Gb3JtKVxuIl19