;
+const formData = {
+ title: "First task",
+ done: true
};
-render(, document.getElementById("app"));
+const log = (type) => console.log.bind(console, type);
+
+render((
+
+), document.getElementById("app"));
```
## License
diff --git a/dist/react-jsonschema-form-0.1.0.js b/dist/react-jsonschema-form-0.1.0.js
new file mode 100644
index 0000000000..6a3415c7a6
--- /dev/null
+++ b/dist/react-jsonschema-form-0.1.0.js
@@ -0,0 +1,3 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.JSONSchemaForm=t(require("react")):e.JSONSchemaForm=t(e.React)}(this,function(e){return function(e){function t(n){if(r[n])return r[n].exports;var a=r[n]={exports:{},id:n,loaded:!1};return e[n].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}var r={};return t.m=e,t.c=r,t.p="/dist/",t(0)}([function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(e){switch(e){case"array":return[];case"boolean":return!1;case"date-time":return"";case"number":return 0;case"object":return{};case"string":return"";default:return}}function u(e,t){return null===e?s(t.type):t["default"]?t["default"]:e}Object.defineProperty(t,"__esModule",{value:!0});var h=Object.assign||function(e){for(var t=1;t0}},{key:"asyncSetState",value:function(e){var t=this;this.setState(e,function(e){return t.props.onChange(t.state.items)})}},{key:"onAddClick",value:function(e){e.preventDefault(),this.setState({items:this.state.items.concat(this.defaultItem(this.props.schema.items))})}},{key:"onDropClick",value:function(e,t){t.preventDefault(),this.setState({items:this.state.items.filter(function(t,r){return r!==e})})}},{key:"onChange",value:function(e,t){this.asyncSetState({items:this.state.items.map(function(r,n){return e===n?t:r})})}},{key:"render",value:function(){var e=this,t=this.props.schema,r=this.state.items;return m["default"].createElement("fieldset",{className:"field field-array field-array-of-"+t.items.type},m["default"].createElement("legend",null,t.title),t.description?m["default"].createElement("div",null,t.description):null,m["default"].createElement("div",{className:"array-item-list"},r.map(function(n,a){return m["default"].createElement("div",{key:a},m["default"].createElement(w,{schema:t.items,formData:r[a],required:e.isItemRequired(t.items),onChange:e.onChange.bind(e,a)}),m["default"].createElement("p",{className:"array-item-remove"},m["default"].createElement("button",{type:"button",onClick:e.onDropClick.bind(e,a)},"-")))})),m["default"].createElement("p",{className:"array-item-add"},m["default"].createElement("button",{type:"button",onClick:this.onAddClick.bind(this)},"+")))}},{key:"itemTitle",get:function(){var e=this.props.schema;return e.items.title||e.items.description||"Item"}}]),t}(m["default"].Component),A=function(e){function t(e){i(this,t),f(Object.getPrototypeOf(t.prototype),"constructor",this).call(this,e),this.state=e.formData||e.schema["default"]||{}}return o(t,e),c(t,[{key:"isRequired",value:function(e){var t=this.props.schema;return Array.isArray(t.required)&&-1!==t.required.indexOf(e)}},{key:"asyncSetState",value:function(e){var t=this;this.setState(e,function(e){return t.props.onChange(t.state)})}},{key:"onChange",value:function(e,t){this.asyncSetState(a({},e,t))}},{key:"render",value:function(){var e=this,t=this.props.schema;return m["default"].createElement("fieldset",null,m["default"].createElement("legend",null,t.title||"Object"),Object.keys(t.properties).map(function(r,n){return m["default"].createElement(w,{key:n,name:r,required:e.isRequired(r),schema:t.properties[r],formData:e.state[r],onChange:e.onChange.bind(e,r)})}))}}]),t}(m["default"].Component),j=function(e){function t(){i(this,t),f(Object.getPrototypeOf(t.prototype),"constructor",this).apply(this,arguments)}return o(t,e),c(t,[{key:"render",value:function(){var e=this.props.errors;return 0===e.length?null:m["default"].createElement("div",{className:"errors"},m["default"].createElement("h2",null,"Errors"),m["default"].createElement("ul",null,e.map(function(e,t){return m["default"].createElement("li",{key:t},e.stack)})))}}]),t}(m["default"].Component),C=function(e){function t(e){i(this,t),f(Object.getPrototypeOf(t.prototype),"constructor",this).call(this,e);var r=!!e.formData,n=e.formData||e.schema["default"]||null;this.state={status:"initial",formData:n,edit:r,errors:r?this.validate(n):[]}}return o(t,e),c(t,[{key:"validate",value:function(e){var t=new p.Validator;return t.validate(e,this.props.schema).errors}},{key:"renderErrors",value:function(){return this.state.edit&&"editing"!==this.state.status?m["default"].createElement(j,{errors:this.state.errors}):null}},{key:"onChange",value:function(e){var t=this;this.setState({status:"editing",formData:e,errors:this.validate(e)},function(e){t.props.onChange&&t.props.onChange(t.state)})}},{key:"onSubmit",value:function(e){var t=this;e.preventDefault(),this.setState({status:"submitted"});var r=this.validate(this.state.formData);return Object.keys(r).length>0?void this.setState({errors:r},function(e){t.props.onError?t.props.onError(r):console.error("Form validation failed",r)}):(this.props.onSubmit&&this.props.onSubmit(this.state),void this.setState({status:"initial"}))}},{key:"render",value:function(){var e=this.props.schema,t=this.state.formData;return m["default"].createElement("form",{className:"generic-form",onSubmit:this.onSubmit.bind(this)},this.renderErrors(),m["default"].createElement(w,{schema:e,formData:t,onChange:this.onChange.bind(this)}),m["default"].createElement("p",null,m["default"].createElement("button",{type:"submit"},"Submit")))}}]),t}(m["default"].Component);t["default"]=C,e.exports=t["default"]},function(t,r){t.exports=e},function(e,t,r){"use strict";var n=e.exports.Validator=r(3);e.exports.ValidatorResult=r(11).ValidatorResult,e.exports.ValidationError=r(11).ValidationError,e.exports.SchemaError=r(11).SchemaError,e.exports.validate=function(e,t,r){var a=new n;return a.validate(e,t,r)}},function(e,t,r){"use strict";var n=r(4),a=r(10),i=r(11),o=i.ValidatorResult,s=i.SchemaError,u=i.SchemaContext,h=function(){this.schemas={},this.unresolvedRefs=[],this.types=Object.create(c),this.attributes=Object.create(a.validators)};h.prototype.schemas=null,h.prototype.types=null,h.prototype.attributes=null,h.prototype.unresolvedRefs=null,h.prototype.addSchema=function(e,t){if(!e)return null;var r=t||e.id;return this.addSubSchema(r,e),r&&(this.schemas[r]=e),this.schemas[r]},h.prototype.addSubSchema=function(e,t){if(t&&"object"==typeof t){if(t.$ref){var r=n.resolve(e,t.$ref);return void(void 0===this.schemas[r]&&(this.schemas[r]=null,this.unresolvedRefs.push(r)))}var a=t.id&&n.resolve(e,t.id),o=a||e;if(a){if(this.schemas[a]){if(!i.deepCompareStrict(this.schemas[a],t))throw new Error("Schema <"+t+"> already exists with different definition");return this.schemas[a]}this.schemas[a]=t;var s=a.replace(/^([^#]*)#$/,"$1");this.schemas[s]=t}return this.addSubSchemaArray(o,t.items instanceof Array?t.items:[t.items]),this.addSubSchemaArray(o,t["extends"]instanceof Array?t["extends"]:[t["extends"]]),this.addSubSchema(o,t.additionalItems),this.addSubSchemaObject(o,t.properties),this.addSubSchema(o,t.additionalProperties),this.addSubSchemaObject(o,t.definitions),this.addSubSchemaObject(o,t.patternProperties),this.addSubSchemaObject(o,t.dependencies),this.addSubSchemaArray(o,t.disallow),this.addSubSchemaArray(o,t.allOf),this.addSubSchemaArray(o,t.anyOf),this.addSubSchemaArray(o,t.oneOf),this.addSubSchema(o,t.not),this.schemas[a]}},h.prototype.addSubSchemaArray=function(e,t){if(t instanceof Array)for(var r=0;r",e);var h=i.objectGetPath(r.schemas[u],o.substr(1));if(void 0===h)throw new s("no such schema "+o+" located in <"+u+">",e);return{subschema:h,switchSchema:t}},h.prototype.testType=function(e,t,r,n,a){if("function"==typeof this.types[a])return this.types[a].call(this,e);if(a&&"object"==typeof a){var i=this.validateSchema(e,a,r,n);return void 0===i||!(i&&i.errors.length)}return!0};var c=h.prototype.types={};c.string=function(e){return"string"==typeof e},c.number=function(e){return"number"==typeof e},c.integer=function(e){return"number"==typeof e&&e%1===0},c["boolean"]=function(e){return"boolean"==typeof e},c.number=function(e){return"number"==typeof e},c.array=function(e){return e instanceof Array},c["null"]=function(e){return null===e},c.date=function(e){return e instanceof Date},c.any=function(e){return!0},c.object=function(e){return e&&"object"==typeof e&&!(e instanceof Array)&&!(e instanceof Date)},e.exports=h},function(e,t,r){"use strict";function n(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function a(e,t,r){if(e&&h(e)&&e instanceof n)return e;var a=new n;return a.parse(e,t,r),a}function i(e){return u(e)&&(e=a(e)),e instanceof n?e.format():n.prototype.format.call(e)}function o(e,t){return a(e,!1,!0).resolve(t)}function s(e,t){return e?a(e,!1,!0).resolveObject(t):t}function u(e){return"string"==typeof e}function h(e){return"object"==typeof e&&null!==e}function c(e){return null===e}function f(e){return null==e}var l=r(5);t.parse=a,t.resolve=o,t.resolveObject=s,t.format=i,t.Url=n;var m=/^([a-z0-9.+-]+:)/i,p=/:[0-9]*$/,d=["<",">",'"',"`"," ","\r","\n"," "],y=["{","}","|","\\","^","`"].concat(d),v=["'"].concat(y),g=["%","/","?",";","#"].concat(v),b=["/","?","#"],O=255,w=/^[a-z0-9A-Z_-]{0,63}$/,E=/^([a-z0-9A-Z_-]{0,63})(.*)$/,S={javascript:!0,"javascript:":!0},x={javascript:!0,"javascript:":!0},A={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},j=r(7);n.prototype.parse=function(e,t,r){if(!u(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var n=e;n=n.trim();var a=m.exec(n);if(a){a=a[0];var i=a.toLowerCase();this.protocol=i,n=n.substr(a.length)}if(r||a||n.match(/^\/\/[^@\/]+@[^@\/]+/)){var o="//"===n.substr(0,2);!o||a&&x[a]||(n=n.substr(2),this.slashes=!0)}if(!x[a]&&(o||a&&!A[a])){for(var s=-1,h=0;hc)&&(s=c)}var f,p;p=-1===s?n.lastIndexOf("@"):n.lastIndexOf("@",s),-1!==p&&(f=n.slice(0,p),n=n.slice(p+1),this.auth=decodeURIComponent(f)),s=-1;for(var h=0;hc)&&(s=c)}-1===s&&(s=n.length),this.host=n.slice(0,s),n=n.slice(s),this.parseHost(),this.hostname=this.hostname||"";var d="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!d)for(var y=this.hostname.split(/\./),h=0,C=y.length;C>h;h++){var k=y[h];if(k&&!k.match(w)){for(var P="",q=0,I=k.length;I>q;q++)P+=k.charCodeAt(q)>127?"x":k[q];if(!P.match(w)){var $=y.slice(0,h),F=y.slice(h+1),R=k.match(E);R&&($.push(R[1]),F.unshift(R[2])),F.length&&(n="/"+F.join(".")+n),this.hostname=$.join(".");break}}}if(this.hostname.length>O?this.hostname="":this.hostname=this.hostname.toLowerCase(),!d){for(var z=this.hostname.split("."),D=[],h=0;hh;h++){var M=v[h],L=encodeURIComponent(M);L===M&&(L=escape(M)),n=n.split(M).join(L)}var J=n.indexOf("#");-1!==J&&(this.hash=n.substr(J),n=n.slice(0,J));var T=n.indexOf("?");if(-1!==T?(this.search=n.substr(T),this.query=n.substr(T+1),t&&(this.query=j.parse(this.query)),n=n.slice(0,T)):t&&(this.search="",this.query={}),n&&(this.pathname=n),A[i]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var N=this.pathname||"",Z=this.search||"";this.path=N+Z}return this.href=this.format(),this},n.prototype.format=function(){var e=this.auth||"";e&&(e=encodeURIComponent(e),e=e.replace(/%3A/i,":"),e+="@");var t=this.protocol||"",r=this.pathname||"",n=this.hash||"",a=!1,i="";this.host?a=e+this.host:this.hostname&&(a=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(a+=":"+this.port)),this.query&&h(this.query)&&Object.keys(this.query).length&&(i=j.stringify(this.query));var o=this.search||i&&"?"+i||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||A[t])&&a!==!1?(a="//"+(a||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):a||(a=""),n&&"#"!==n.charAt(0)&&(n="#"+n),o&&"?"!==o.charAt(0)&&(o="?"+o),r=r.replace(/[?#]/g,function(e){return encodeURIComponent(e)}),o=o.replace("#","%23"),t+a+r+o+n},n.prototype.resolve=function(e){return this.resolveObject(a(e,!1,!0)).format()},n.prototype.resolveObject=function(e){if(u(e)){var t=new n;t.parse(e,!1,!0),e=t}var r=new n;if(Object.keys(this).forEach(function(e){r[e]=this[e]},this),r.hash=e.hash,""===e.href)return r.href=r.format(),r;if(e.slashes&&!e.protocol)return Object.keys(e).forEach(function(t){"protocol"!==t&&(r[t]=e[t])}),A[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(e.protocol&&e.protocol!==r.protocol){if(!A[e.protocol])return Object.keys(e).forEach(function(t){r[t]=e[t]}),r.href=r.format(),r;if(r.protocol=e.protocol,e.host||x[e.protocol])r.pathname=e.pathname;else{for(var a=(e.pathname||"").split("/");a.length&&!(e.host=a.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==a[0]&&a.unshift(""),a.length<2&&a.unshift(""),r.pathname=a.join("/")}if(r.search=e.search,r.query=e.query,r.host=e.host||"",r.auth=e.auth,r.hostname=e.hostname||e.host,r.port=e.port,r.pathname||r.search){var i=r.pathname||"",o=r.search||"";r.path=i+o}return r.slashes=r.slashes||e.slashes,r.href=r.format(),r}var s=r.pathname&&"/"===r.pathname.charAt(0),h=e.host||e.pathname&&"/"===e.pathname.charAt(0),l=h||s||r.host&&e.pathname,m=l,p=r.pathname&&r.pathname.split("/")||[],a=e.pathname&&e.pathname.split("/")||[],d=r.protocol&&!A[r.protocol];if(d&&(r.hostname="",r.port=null,r.host&&(""===p[0]?p[0]=r.host:p.unshift(r.host)),r.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===a[0]?a[0]=e.host:a.unshift(e.host)),e.host=null),l=l&&(""===a[0]||""===p[0])),h)r.host=e.host||""===e.host?e.host:r.host,r.hostname=e.hostname||""===e.hostname?e.hostname:r.hostname,r.search=e.search,r.query=e.query,p=a;else if(a.length)p||(p=[]),p.pop(),p=p.concat(a),r.search=e.search,r.query=e.query;else if(!f(e.search)){if(d){r.hostname=r.host=p.shift();var y=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;y&&(r.auth=y.shift(),r.host=r.hostname=y.shift())}return r.search=e.search,r.query=e.query,c(r.pathname)&&c(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!p.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var v=p.slice(-1)[0],g=(r.host||e.host)&&("."===v||".."===v)||""===v,b=0,O=p.length;O>=0;O--)v=p[O],"."==v?p.splice(O,1):".."===v?(p.splice(O,1),b++):b&&(p.splice(O,1),b--);if(!l&&!m)for(;b--;b)p.unshift("..");!l||""===p[0]||p[0]&&"/"===p[0].charAt(0)||p.unshift(""),g&&"/"!==p.join("/").substr(-1)&&p.push("");var w=""===p[0]||p[0]&&"/"===p[0].charAt(0);if(d){r.hostname=r.host=w?"":p.length?p.shift():"";var y=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;y&&(r.auth=y.shift(),r.host=r.hostname=y.shift())}return l=l||r.host&&p.length,l&&!w&&p.unshift(""),p.length?r.pathname=p.join("/"):(r.pathname=null,r.path=null),c(r.pathname)&&c(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=e.auth||r.auth,r.slashes=r.slashes||e.slashes,r.href=r.format(),r},n.prototype.parseHost=function(){var e=this.host,t=p.exec(e);t&&(t=t[0],":"!==t&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},function(e,t,r){var n;(function(e,a){/*! https://mths.be/punycode v1.3.2 by @mathias */
+"use strict";!function(i){function o(e){throw RangeError($[e])}function s(e,t){for(var r=e.length,n=[];r--;)n[r]=t(e[r]);return n}function u(e,t){var r=e.split("@"),n="";r.length>1&&(n=r[0]+"@",e=r[1]),e=e.replace(I,".");var a=e.split("."),i=s(a,t).join(".");return n+i}function h(e){for(var t,r,n=[],a=0,i=e.length;i>a;)t=e.charCodeAt(a++),t>=55296&&56319>=t&&i>a?(r=e.charCodeAt(a++),56320==(64512&r)?n.push(((1023&t)<<10)+(1023&r)+65536):(n.push(t),a--)):n.push(t);return n}function c(e){return s(e,function(e){var t="";return e>65535&&(e-=65536,t+=z(e>>>10&1023|55296),e=56320|1023&e),t+=z(e)}).join("")}function f(e){return 10>e-48?e-22:26>e-65?e-65:26>e-97?e-97:w}function l(e,t){return e+22+75*(26>e)-((0!=t)<<5)}function m(e,t,r){var n=0;for(e=r?R(e/A):e>>1,e+=R(e/t);e>F*S>>1;n+=w)e=R(e/F);return R(n+(F+1)*e/(e+x))}function p(e){var t,r,n,a,i,s,u,h,l,p,d=[],y=e.length,v=0,g=C,b=j;for(r=e.lastIndexOf(k),0>r&&(r=0),n=0;r>n;++n)e.charCodeAt(n)>=128&&o("not-basic"),d.push(e.charCodeAt(n));for(a=r>0?r+1:0;y>a;){for(i=v,s=1,u=w;a>=y&&o("invalid-input"),h=f(e.charCodeAt(a++)),(h>=w||h>R((O-v)/s))&&o("overflow"),v+=h*s,l=b>=u?E:u>=b+S?S:u-b,!(l>h);u+=w)p=w-l,s>R(O/p)&&o("overflow"),s*=p;t=d.length+1,b=m(v-i,t,0==i),R(v/t)>O-g&&o("overflow"),g+=R(v/t),v%=t,d.splice(v++,0,g)}return c(d)}function d(e){var t,r,n,a,i,s,u,c,f,p,d,y,v,g,b,x=[];for(e=h(e),y=e.length,t=C,r=0,i=j,s=0;y>s;++s)d=e[s],128>d&&x.push(z(d));for(n=a=x.length,a&&x.push(k);y>n;){for(u=O,s=0;y>s;++s)d=e[s],d>=t&&u>d&&(u=d);for(v=n+1,u-t>R((O-r)/v)&&o("overflow"),r+=(u-t)*v,t=u,s=0;y>s;++s)if(d=e[s],t>d&&++r>O&&o("overflow"),d==t){for(c=r,f=w;p=i>=f?E:f>=i+S?S:f-i,!(p>c);f+=w)b=c-p,g=w-p,x.push(z(l(p+b%g,0))),c=R(b/g);x.push(z(l(c,0))),i=m(r,v,n==a),r=0,++n}++r,++t}return x.join("")}function y(e){return u(e,function(e){return P.test(e)?p(e.slice(4).toLowerCase()):e})}function v(e){return u(e,function(e){return q.test(e)?"xn--"+d(e):e})}var g=("object"==typeof t&&t&&!t.nodeType&&t,"object"==typeof e&&e&&!e.nodeType&&e,"object"==typeof a&&a);(g.global===g||g.window===g||g.self===g)&&(i=g);var b,O=2147483647,w=36,E=1,S=26,x=38,A=700,j=72,C=128,k="-",P=/^xn--/,q=/[^\x20-\x7E]/,I=/[\x2E\u3002\uFF0E\uFF61]/g,$={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},F=w-E,R=Math.floor,z=String.fromCharCode;b={version:"1.3.2",ucs2:{decode:h,encode:c},decode:p,encode:d,toASCII:v,toUnicode:y},n=function(){return b}.call(t,r,t,e),!(void 0!==n&&(e.exports=n))}(void 0)}).call(t,r(6)(e),function(){return this}())},function(e,t){"use strict";e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children=[],e.webpackPolyfill=1),e}},function(e,t,r){"use strict";t.decode=t.parse=r(8),t.encode=t.stringify=r(9)},function(e,t){"use strict";function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,t,n,a){t=t||"&",n=n||"=";var i={};if("string"!=typeof e||0===e.length)return i;var o=/\+/g;e=e.split(t);var s=1e3;a&&"number"==typeof a.maxKeys&&(s=a.maxKeys);var u=e.length;s>0&&u>s&&(u=s);for(var h=0;u>h;++h){var c,f,l,m,p=e[h].replace(o,"%20"),d=p.indexOf(n);d>=0?(c=p.substr(0,d),f=p.substr(d+1)):(c=p,f=""),l=decodeURIComponent(c),m=decodeURIComponent(f),r(i,l)?Array.isArray(i[l])?i[l].push(m):i[l]=[i[l],m]:i[l]=m}return i}},function(e,t){"use strict";var r=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,t,n,a){return t=t||"&",n=n||"=",null===e&&(e=void 0),"object"==typeof e?Object.keys(e).map(function(a){var i=encodeURIComponent(r(a))+n;return Array.isArray(e[a])?e[a].map(function(e){return i+encodeURIComponent(r(e))}).join(t):i+encodeURIComponent(r(e[a]))}).join(t):a?encodeURIComponent(r(a))+n+encodeURIComponent(r(e)):""}},function(e,t,r){"use strict";function n(e,t,r,n){return this.validateSchema(e,n,t,r).valid}function a(e,t,r,n,a,i){if(!t.properties||void 0===t.properties[a])if(t.additionalProperties===!1)i.addError({name:"additionalProperties",argument:a,message:"additionalProperty "+JSON.stringify(a)+" exists in instance when not allowed"});else{var o=t.additionalProperties||{},s=this.validateSchema(e[a],o,r,n.makeChild(o,a));s.instance!==i.instance[a]&&(i.instance[a]=s.instance),i.importErrors(s)}}function i(e,t,r){var n,a=r.length;for(n=t+1,a;a>n;n++)if(o.deepCompareStrict(e,r[n]))return!1;return!0}var o=r(11),s=o.ValidatorResult,u=o.SchemaError,h={};h.ignoreProperties={id:!0,"default":!0,description:!0,title:!0,exclusiveMinimum:!0,exclusiveMaximum:!0,additionalItems:!0,$schema:!0,$ref:!0,"extends":!0};var c=h.validators={};c.type=function(e,t,r,n){if(void 0===e)return null;var a=new s(e,t,r,n),i=t.type instanceof Array?t.type:[t.type];if(!i.some(this.testType.bind(this,e,t,r,n))){var o=i.map(function(e){return e.id&&"<"+e.id+">"||e+""});a.addError({name:"type",argument:o,message:"is not of a type(s) "+o})}return a},c.anyOf=function(e,t,r,a){if(void 0===e)return null;var i=new s(e,t,r,a);if(!(t.anyOf instanceof Array))throw new u("anyOf must be an array");if(!t.anyOf.some(n.bind(this,e,r,a))){var o=t.anyOf.map(function(e,t){return e.id&&"<"+e.id+">"||e.title&&JSON.stringify(e.title)||e.$ref&&"<"+e.$ref+">"||"[subschema "+t+"]"});i.addError({name:"anyOf",argument:o,message:"is not any of "+o.join(",")})}return i},c.allOf=function(e,t,r,n){if(void 0===e)return null;if(!(t.allOf instanceof Array))throw new u("allOf must be an array");var a=new s(e,t,r,n),i=this;return t.allOf.forEach(function(t,o){var s=i.validateSchema(e,t,r,n);if(!s.valid){var u=t.id&&"<"+t.id+">"||t.title&&JSON.stringify(t.title)||t.$ref&&"<"+t.$ref+">"||"[subschema "+o+"]";a.addError({name:"allOf",argument:{id:u,length:s.errors.length,valid:s},message:"does not match allOf schema "+u+" with "+s.errors.length+" error[s]:"}),a.importErrors(s)}}),a},c.oneOf=function(e,t,r,a){if(void 0===e)return null;if(!(t.oneOf instanceof Array))throw new u("oneOf must be an array");var i=new s(e,t,r,a),o=t.oneOf.filter(n.bind(this,e,r,a)).length,h=t.oneOf.map(function(e,t){return e.id&&"<"+e.id+">"||e.title&&JSON.stringify(e.title)||e.$ref&&"<"+e.$ref+">"||"[subschema "+t+"]"});return 1!==o&&i.addError({name:"oneOf",argument:h,message:"is not exactly one from "+h.join(",")}),i},c.properties=function(e,t,r,n){if(void 0!==e&&e instanceof Object){var a=new s(e,t,r,n),i=t.properties||{};for(var o in i){var u=(e||void 0)&&e[o],h=this.validateSchema(u,i[o],r,n.makeChild(i[o],o));h.instance!==a.instance[o]&&(a.instance[o]=h.instance),a.importErrors(h)}return a}},c.patternProperties=function(e,t,r,n){if(void 0!==e&&this.types.object(e)){var i=new s(e,t,r,n),o=t.patternProperties||{};for(var u in e){var h=!0;for(var c in o){var f=new RegExp(c);if(f.test(u)){h=!1;var l=this.validateSchema(e[u],o[c],r,n.makeChild(o[c],u));l.instance!==i.instance[u]&&(i.instance[u]=l.instance),i.importErrors(l)}}h&&a.call(this,e,t,r,n,u,i)}return i}},c.additionalProperties=function(e,t,r,n){if(void 0!==e&&this.types.object(e)){if(t.patternProperties)return null;var i=new s(e,t,r,n);for(var o in e)a.call(this,e,t,r,n,o,i);return i}},c.minProperties=function(e,t,r,n){if(!e||"object"!=typeof e)return null;var a=new s(e,t,r,n),i=Object.keys(e);return i.length>=t.minProperties||a.addError({name:"minProperties",argument:t.minProperties,message:"does not meet minimum property length of "+t.minProperties}),a},c.maxProperties=function(e,t,r,n){if(!e||"object"!=typeof e)return null;var a=new s(e,t,r,n),i=Object.keys(e);return i.length<=t.maxProperties||a.addError({name:"maxProperties",argument:t.maxProperties,message:"does not meet maximum property length of "+t.maxProperties}),a},c.items=function(e,t,r,n){if(!(e instanceof Array))return null;var a=this,i=new s(e,t,r,n);return void 0!==e&&t.items?(e.every(function(e,o){var s=t.items instanceof Array?t.items[o]||t.additionalItems:t.items;if(void 0===s)return!0;if(s===!1)return i.addError({name:"items",message:"additionalItems not permitted"}),!1;var u=a.validateSchema(e,s,r,n.makeChild(s,o));return u.instance!==i.instance[o]&&(i.instance[o]=u.instance),i.importErrors(u),!0}),i):i},c.minimum=function(e,t,r,n){if("number"!=typeof e)return null;var a=new s(e,t,r,n),i=!0;return i=t.exclusiveMinimum&&t.exclusiveMinimum===!0?e>t.minimum:e>=t.minimum,i||a.addError({name:"minimum",argument:t.minimum,message:"must have a minimum value of "+t.minimum}),a},c.maximum=function(e,t,r,n){if("number"!=typeof e)return null;var a,i=new s(e,t,r,n);return a=t.exclusiveMaximum&&t.exclusiveMaximum===!0?e=t.minLength||a.addError({name:"minLength",argument:t.minLength,message:"does not meet minimum length of "+t.minLength}),a},c.maxLength=function(e,t,r,n){if("string"!=typeof e)return null;var a=new s(e,t,r,n);return e.length<=t.maxLength||a.addError({name:"maxLength",argument:t.maxLength,message:"does not meet maximum length of "+t.maxLength}),a},c.minItems=function(e,t,r,n){if(!(e instanceof Array))return null;var a=new s(e,t,r,n);return e.length>=t.minItems||a.addError({name:"minItems",argument:t.minItems,message:"does not meet minimum length of "+t.minItems}),a},c.maxItems=function(e,t,r,n){if(!(e instanceof Array))return null;var a=new s(e,t,r,n);return e.length<=t.maxItems||a.addError({name:"maxItems",argument:t.maxItems,message:"does not meet maximum length of "+t.maxItems}),a},c.uniqueItems=function(e,t,r,n){function a(e,t,r){for(var n=t+1;n"||o;i.addError({name:"not",argument:s,message:"is of prohibited type "+s})}}),i):null},e.exports=h},function(e,t,r){"use strict";var n=r(4),a=t.ValidationError=function(e,t,r,n,a,i){n&&(this.property=n),e&&(this.message=e),r&&(r.id?this.schema=r.id:this.schema=r),t&&(this.instance=t),this.name=a,this.argument=i,this.stack=this.toString()};a.prototype.toString=function(){return this.property+" "+this.message};var i=t.ValidatorResult=function(e,t,r,n){this.instance=e,this.schema=t,this.propertyPath=n.propertyPath,this.errors=[],this.throwError=r&&r.throwError};i.prototype.addError=function(e){var t;if("string"==typeof e)t=new a(e,this.instance,this.schema,this.propertyPath);else{if(!e)throw new Error("Missing error detail");if(!e.message)throw new Error("Missing error message");if(!e.name)throw new Error("Missing validator type");t=new a(e.message,this.instance,this.schema,this.propertyPath,e.name,e.argument)}if(this.throwError)throw t;return this.errors.push(t),t},i.prototype.importErrors=function(e){if("string"==typeof e||e&&e.validatorType)this.addError(e);else if(e&&e.errors){var t=this.errors;e.errors.forEach(function(e){t.push(e)})}},i.prototype.toString=function(e){return this.errors.map(function(e,t){return t+": "+e.toString()+"\n"}).join("")},Object.defineProperty(i.prototype,"valid",{get:function(){return!this.errors.length}});var o=t.SchemaError=function c(e,t){this.message=e,this.schema=t,Error.call(this,e),Error.captureStackTrace(this,c)};o.prototype=Object.create(Error.prototype,{constructor:{value:o,enumerable:!1},name:{value:"SchemaError",enumerable:!1}});var s=t.SchemaContext=function(e,t,r,n,a){this.schema=e,this.options=t,this.propertyPath=r,this.base=n,this.schemas=a};s.prototype.resolve=function(e){return n.resolve(this.base,e)},s.prototype.makeChild=function(e,t){var r=void 0===t?this.propertyPath:this.propertyPath+h(t),a=n.resolve(this.base,e.id||""),i=new s(e,this.options,r,a,Object.create(this.schemas));return e.id&&!i.schemas[a]&&(i.schemas[a]=e),i};var u=t.FORMAT_REGEXPS={"date-time":/^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}[tT ]\d{2}:\d{2}:\d{2}(\.\d+)?([zZ]|[+-]\d{2}:\d{2})$/,date:/^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}$/,time:/^\d{2}:\d{2}:\d{2}$/,email:/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!\.)){0,61}[a-zA-Z0-9]?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/,"ip-address":/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,ipv6:/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/,uri:/^[a-zA-Z][a-zA-Z0-9+-.]*:[^\s]*$/,color:/^(#?([0-9A-Fa-f]{3}){1,2}\b|aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow|(rgb\(\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*\))|(rgb\(\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*\)))$/,hostname:/^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?$/,"host-name":/^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?$/,alpha:/^[a-zA-Z]+$/,alphanumeric:/^[a-zA-Z0-9]+$/,"utc-millisec":function(e){return"string"==typeof e&&parseFloat(e)===parseInt(e,10)&&!isNaN(e)},regex:function(e){var t=!0;try{new RegExp(e)}catch(r){t=!1}return t},style:/\s*(.+?):\s*([^;]+);?/g,phone:/^\+(?:[0-9] ?){6,14}[0-9]$/};u.regexp=u.regex,u.pattern=u.regex,u.ipv4=u["ip-address"],t.isFormat=function(e,t){if(void 0!==u[t]){if(u[t]instanceof RegExp)return u[t].test(e);if("function"==typeof u[t])return u[t](e)}return!1};var h=t.makeSuffix=function(e){return e=e.toString(),e.match(/[.\s\[\]]/)||e.match(/^[\d]/)?e.match(/^\d+$/)?"["+e+"]":"["+JSON.stringify(e)+"]":"."+e};t.deepCompareStrict=function f(e,t){if(typeof e!=typeof t)return!1;if(e instanceof Array)return t instanceof Array?e.length!==t.length?!1:e.every(function(r,n){return f(e[n],t[n])}):!1;if("object"==typeof e){if(!e||!t)return e===t;var r=Object.keys(e),n=Object.keys(t);return r.length!==n.length?!1:r.every(function(r){return f(e[r],t[r])})}return e===t},e.exports.deepMerge=function l(e,t){var r=Array.isArray(t),n=r&&[]||{};return r?(e=e||[],n=n.concat(e),t.forEach(function(t,r){"object"==typeof t?n[r]=l(e[r],t):-1===e.indexOf(t)&&n.push(t)})):(e&&"object"==typeof e&&Object.keys(e).forEach(function(t){n[t]=e[t]}),Object.keys(t).forEach(function(r){"object"==typeof t[r]&&t[r]&&e[r]?n[r]=l(e[r],t[r]):n[r]=t[r]})),n},t.objectGetPath=function(e,t){for(var r,n=t.split("/").slice(1);"string"==typeof(r=n.shift());){var a=decodeURIComponent(r.replace(/~0/,"~").replace(/~1/g,"/"));if(!(a in e))return;e=e[a]}return e},t.encodePath=function(e){return e.map(function(e){return"/"+encodeURIComponent(e).replace(/~/g,"%7E")}).join("")}}])});
+//# sourceMappingURL=react-jsonschema-form-0.1.0.js.map
\ No newline at end of file
diff --git a/dist/react-jsonschema-form-0.1.0.js.map b/dist/react-jsonschema-form-0.1.0.js.map
new file mode 100644
index 0000000000..4338123b64
--- /dev/null
+++ b/dist/react-jsonschema-form-0.1.0.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///react-jsonschema-form-0.1.0.js","webpack:///webpack/bootstrap 02253ab57745a07b23e6","webpack:///./index.js","webpack:///external {\"root\":\"React\",\"commonjs\":\"react\",\"commonjs2\":\"react\",\"amd\":\"react\"}","webpack:///../~/jsonschema/lib/index.js","webpack:///../~/jsonschema/lib/validator.js","webpack:///../~/webpack/~/node-libs-browser/~/url/url.js","webpack:///../~/webpack/~/node-libs-browser/~/url/~/punycode/punycode.js","webpack:///../~/webpack/buildin/module.js","webpack:///../~/webpack/~/node-libs-browser/~/url/~/querystring/index.js","webpack:///../~/webpack/~/node-libs-browser/~/url/~/querystring/decode.js","webpack:///../~/webpack/~/node-libs-browser/~/url/~/querystring/encode.js","webpack:///../~/jsonschema/lib/attribute.js","webpack:///../~/jsonschema/lib/helpers.js"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE_1__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","_defineProperty","key","value","Object","defineProperty","enumerable","configurable","writable","_classCallCheck","instance","Constructor","TypeError","_inherits","subClass","superClass","prototype","create","constructor","setPrototypeOf","__proto__","defaultTypeValue","type","defaultFieldValue","formData","schema","_extends","assign","target","i","arguments","length","source","hasOwnProperty","_createClass","defineProperties","props","descriptor","protoProps","staticProps","_get","_x","_x2","_x3","_again","object","property","receiver","Function","desc","getOwnPropertyDescriptor","undefined","getter","get","parent","getPrototypeOf","_react","_react2","_jsonschema","REQUIRED_FIELD_SYMBOL","Field","_React$Component","apply","_props","children","createElement","className","label","_props2","required","Component","TextField","_React$Component2","event","onChange","_props3","placeholder","bind","CheckboxField","_React$Component3","checked","_props4","title","SelectField","_React$Component4","_props5","options","description","map","option","UnsupportedField","_React$Component5","JSON","stringify","SchemaField","_React$Component6","FieldComponent","fieldComponents","string","StringField","array","ArrayField","boolean","BooleanField","ObjectField","date-time","number","_React$Component7","_props6","commonProps","Array","isArray","_React$Component8","_props7","_React$Component9","state","items","itemsSchema","minLength","_this","setState","_","preventDefault","concat","defaultItem","index","filter","asyncSetState","item","_this2","isItemRequired","onClick","onDropClick","onAddClick","_React$Component10","name","indexOf","_this3","_this4","keys","properties","isRequired","ErrorList","_React$Component11","errors","error","stack","Form","_React$Component12","edit","status","validate","validator","Validator","_this5","_this6","onError","console","onSubmit","renderErrors","ValidatorResult","ValidationError","SchemaError","v","urilib","attribute","helpers","SchemaContext","schemas","unresolvedRefs","types","attributes","validators","addSchema","uri","ourUri","addSubSchema","baseuri","$ref","resolvedUri","resolve","push","ourBase","deepCompareStrict","Error","documentUri","replace","addSubSchemaArray","additionalItems","addSubSchemaObject","additionalProperties","definitions","patternProperties","dependencies","disallow","allOf","anyOf","oneOf","not","setSchemas","getSchema","urn","ctx","propertyName","base","result","validateSchema","shouldResolve","ref","self","subschema","forEach","s","deepMerge","switchSchema","resolved","subctx","propertyPath","skipAttributes","ignoreProperties","validatorErr","allowUnknownAttributes","importErrors","rewrite","parsed","parse","fragment","hash","document","substr","objectGetPath","testType","res","integer","date","Date","any","Url","protocol","slashes","auth","host","port","hostname","search","query","pathname","path","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","u","urlFormat","isString","format","urlResolve","relative","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","punycode","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","rest","trim","proto","exec","lowerProto","toLowerCase","match","hostEnd","hec","atSign","lastIndexOf","slice","decodeURIComponent","parseHost","ipv6Hostname","hostparts","split","l","part","newpart","j","k","charCodeAt","validParts","notHost","bit","unshift","join","domainArray","newOut","encode","h","ae","esc","encodeURIComponent","escape","qm","charAt","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","pop","authInHost","last","hasTrailingSlash","up","splice","isAbsolute","__WEBPACK_AMD_DEFINE_RESULT__","global","RangeError","fn","mapDomain","parts","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","ucs2encode","stringFromCharCode","basicToDigit","codePoint","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","oldi","w","t","baseMinusT","inputLength","n","initialN","bias","initialBias","delimiter","maxInt","tMin","handledCPCount","basicLength","q","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","test","toASCII","regexNonASCII","freeGlobal","nodeType","window","overflow","not-basic","invalid-input","Math","String","fromCharCode","version","ucs2","webpackPolyfill","deprecate","paths","prop","qs","sep","eq","regexp","maxKeys","len","kstr","vstr","x","idx","stringifyPrimitive","isFinite","ks","testSchema","valid","testAdditionalProperty","addError","argument","message","makeChild","testArrays","a","exclusiveMinimum","exclusiveMaximum","$schema","extends","some","list","msg","count","pattern","expr","RegExp","minProperties","maxProperties","every","minimum","maximum","divisibleBy","multipleOf","isFormat","maxLength","minItems","maxItems","uniqueItems","dep","childContext","notTypes","schemaId","toString","throwError","detail","err","validatorType","errs","captureStackTrace","makeSuffix","FORMAT_REGEXPS","time","email","ip-address","ipv6","color","host-name","alpha","alphanumeric","utc-millisec","parseFloat","parseInt","isNaN","regex","e","style","phone","ipv4","b","aKeys","bKeys","src","dst","o","encodePath"],"mappings":"CAAA,SAAAA,EAAAC,GACA,gBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,EAAAG,QAAA,UACA,kBAAAC,gBAAAC,IACAD,QAAA,SAAAJ,GACA,gBAAAC,SACAA,QAAA,eAAAD,EAAAG,QAAA,UAEAJ,EAAA,eAAAC,EAAAD,EAAA,QACCO,KAAA,SAAAC,GACD,MCAgB,UAAUC,GCN1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAT,OAGA,IAAAC,GAAAS,EAAAD,IACAT,WACAW,GAAAF,EACAG,QAAA,EAUA,OANAL,GAAAE,GAAAI,KAAAZ,EAAAD,QAAAC,IAAAD,QAAAQ,GAGAP,EAAAW,QAAA,EAGAX,EAAAD,QAvBA,GAAAU,KAqCA,OATAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,SAGAR,EAAA,KDgBM,SAASP,EAAQD,EAASQ,GAE/B,YAYA,SAASS,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,UAAWF,GAEzF,QAASG,GAAgBH,EAAKI,EAAKC,GAAiK,MAApJD,KAAOJ,GAAOM,OAAOC,eAAeP,EAAKI,GAAOC,MAAOA,EAAOG,YAAY,EAAMC,cAAc,EAAMC,UAAU,IAAkBV,EAAII,GAAOC,EAAgBL,EAE3M,QAASW,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASC,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIH,WAAU,iEAAoEG,GAAeD,GAASE,UAAYZ,OAAOa,OAAOF,GAAcA,EAAWC,WAAaE,aAAef,MAAOW,EAAUR,YAAY,EAAOE,UAAU,EAAMD,cAAc,KAAeQ,IAAYX,OAAOe,eAAiBf,OAAOe,eAAeL,EAAUC,GAAcD,EAASM,UAAYL,GErEle,QAASM,GAAiBC,GACxB,OAAQA,GACR,IAAK,QAAa,QAClB,KAAK,UAAa,OAAO,CACzB,KAAK,YAAa,MAAO,EACzB,KAAK,SAAa,MAAO,EACzB,KAAK,SAAa,QAClB,KAAK,SAAa,MAAO,EACzB,SAAgB,QAIlB,QAASC,GAAkBC,EAAUC,GACnC,MAAiB,QAAbD,EACKH,EAAiBI,EAAOH,MAE7BG,EAAM,WACDA,EAAM,WAERD,EFkCRpB,OAAOC,eAAezB,EAAS,cAC7BuB,OAAO,GAGT,IAAIuB,GAAWtB,OAAOuB,QAAU,SAAUC,GAAU,IAAK,GAAIC,GAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,GAAIG,GAASF,UAAUD,EAAI,KAAK,GAAI3B,KAAO8B,GAAc5B,OAAOY,UAAUiB,eAAexC,KAAKuC,EAAQ9B,KAAQ0B,EAAO1B,GAAO8B,EAAO9B,IAAY,MAAO0B,IAEnPM,EAAe,WAAe,QAASC,GAAiBP,EAAQQ,GAAS,IAAK,GAAIP,GAAI,EAAGA,EAAIO,EAAML,OAAQF,IAAK,CAAE,GAAIQ,GAAaD,EAAMP,EAAIQ,GAAW/B,WAAa+B,EAAW/B,aAAc,EAAO+B,EAAW9B,cAAe,EAAU,SAAW8B,KAAYA,EAAW7B,UAAW,GAAMJ,OAAOC,eAAeuB,EAAQS,EAAWnC,IAAKmC,IAAiB,MAAO,UAAU1B,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYH,EAAiBxB,EAAYK,UAAWsB,GAAiBC,GAAaJ,EAAiBxB,EAAa4B,GAAqB5B,MAE7hB6B,EAAO,SAAaC,EAAIC,EAAKC,GAAqC,IAA9B,GAAIC,IAAS,EAAwBA,GAAQ,CAAE,GAAIC,GAASJ,EAAIK,EAAWJ,EAAKK,EAAWJ,CAAKC,IAAS,EAAsB,OAAXC,IAAiBA,EAASG,SAAShC,UAAW,IAAIiC,GAAO7C,OAAO8C,yBAAyBL,EAAQC,EAAW,IAAaK,SAATF,EAAJ,CAA4O,GAAI,SAAWA,GAAQ,MAAOA,GAAK9C,KAAgB,IAAIiD,GAASH,EAAKI,GAAK,IAAeF,SAAXC,EAAwB,MAAoB,OAAOA,GAAO3D,KAAKsD,GAA/V,GAAIO,GAASlD,OAAOmD,eAAeV,EAAS,IAAe,OAAXS,EAAmB,MAA2Bb,GAAKa,EAAQZ,EAAMI,EAAUH,EAAMI,EAAUH,GAAS,EAAMK,EAAOK,EAASH,SAUxcK,EAASpE,EE5EI,GF8EbqE,EAAU5D,EAAuB2D,GAEjCE,EAActE,EE/EO,GAEpBuE,EAAwB,IAwBxBC,EAAK,SAAAC,GFyFR,QEzFGD,KF0FDnD,EAAgBxB,KE1Ff2E,GF4FDpB,EAAKpC,OAAOmD,eE5FXK,EAAK5C,WAAA,cAAA/B,MAAA6E,MAAA7E,KAAA6C,WFkIR,MA3CAjB,GEvFG+C,EAAKC,GF+FR3B,EE/FG0B,IFgGD1D,IAAK,SACLC,MErFG,WFsFD,GAAI4D,GErFkB9E,KAAKmD,MAAvBd,EAAIyC,EAAJzC,KAAM0C,EAAQD,EAARC,QACb,OACEP,GAAA,WAAAQ,cFwFG,OExFEC,UAAS,eAAiB5C,GAC7BmC,EAAA,WAAAQ,cF0FG,QACA,KE1FAhF,KAAKkF,MACLH,OFgGN9D,IAAK,QACLmD,IElHM,WFmHJ,GAAIe,GElHmBnF,KAAKmD,MAAxB+B,EAAKC,EAALD,MAAOE,EAAQD,EAARC,QACd,OAAKF,GAGDE,EACKF,EAAQR,EAEVQ,EALE,SAJPP,GAAcH,EAAA,WAAMa,WAyBpBC,EAAS,SAAAC,GF+GZ,QE/GGD,KFgHD9D,EAAgBxB,KEhHfsF,GFkHD/B,EAAKpC,OAAOmD,eElHXgB,EAASvD,WAAA,cAAA/B,MAAA6E,MAAA7E,KAAA6C,WFiJZ,MApCAjB,GE7GG0D,EAASC,GFqHZtC,EErHGqC,IFsHDrE,IAAK,WACLC,MEtHK,SAACsE,GACPxF,KAAKmD,MAAMsC,SAASD,EAAM7C,OAAOzB,UFyHhCD,IAAK,SACLC,MEvHG,WFwHD,GAAIwE,GEvHkD1F,KAAKmD,MAAvDX,EAAMkD,EAANlD,OAAQD,EAAQmD,EAARnD,SAAU2C,EAAKQ,EAALR,MAAOE,EAAQM,EAARN,SAAUO,EAAWD,EAAXC,WAC1C,OACEnB,GAAA,WAAAQ,cAACL,GAAMO,MAAOA,EAAOE,SAAUA,EAC7B/C,KAAMG,EAAOH,MACbmC,EAAA,WAAAQ,cAAA,SAAO3C,KAAK,OACVnB,MAAOoB,EAAkBC,EAAUC,GACnCmD,YAAaA,EACbP,SAAUA,EACVK,SAAUzF,KAAKyF,SAASG,KAAK5F,aAdjCsF,GAAkBd,EAAA,WAAMa,WAoBxBQ,EAAa,SAAAC,GFmIhB,QEnIGD,KFoIDrE,EAAgBxB,KEpIf6F,GFsIDtC,EAAKpC,OAAOmD,eEtIXuB,EAAa9D,WAAA,cAAA/B,MAAA6E,MAAA7E,KAAA6C,WFqKhB,MApCAjB,GEjIGiE,EAAaC,GFyIhB7C,EEzIG4C,IF0ID5E,IAAK,WACLC,ME1IK,SAACsE,GACPxF,KAAKmD,MAAMsC,SAASD,EAAM7C,OAAOoD,YF6IhC9E,IAAK,SACLC,ME3IG,WF4ID,GAAI8E,GE3IkDhG,KAAKmD,MAAvDX,EAAMwD,EAANxD,OAAQD,EAAQyD,EAARzD,SAAU2C,EAAKc,EAALd,MAAOE,EAAQY,EAARZ,SAAUO,EAAWK,EAAXL,WAC1C,OACEnB,GAAA,WAAAQ,cAACL,GAAMO,MAAOA,EAAOE,SAAUA,EAC7B/C,KAAMG,EAAOH,MACbmC,EAAA,WAAAQ,cAAA,SAAO3C,KAAK,WACV4D,MAAON,EACPI,QAASzD,EAAkBC,EAAUC,GACrC4C,SAAUA,EACVK,SAAUzF,KAAKyF,SAASG,KAAK5F,aAdjC6F,GAAsBrB,EAAA,WAAMa,WAoB5Ba,EAAW,SAAAC,GFuJd,QEvJGD,KFwJD1E,EAAgBxB,KExJfkG,GF0JD3C,EAAKpC,OAAOmD,eE1JX4B,EAAWnE,WAAA,cAAA/B,MAAA6E,MAAA7E,KAAA6C,WFgMd,MA3CAjB,GErJGsE,EAAWC,GF6JdlD,EE7JGiD,IF8JDjF,IAAK,WACLC,ME9JK,SAACsE,GACPxF,KAAKmD,MAAMsC,SAASD,EAAM7C,OAAOzB,UFiKhCD,IAAK,SACLC,ME/JG,WFgKD,GAAIkF,GE/J8CpG,KAAKmD,MAAnDX,EAAM4D,EAAN5D,OAAQD,EAAQ6D,EAAR7D,SAAU8D,EAAOD,EAAPC,QAASjB,EAAQgB,EAARhB,SAAUF,EAAKkB,EAALlB,KAC5C,OACEV,GAAA,WAAAQ,cAACL,GAAMO,MAAOA,EAAOE,SAAUA,GAC7BZ,EAAA,WAAAQ,cFuKG,UEvKK9D,MAAOoB,EAAkBC,EAAUC,GACzCyD,MAAOzD,EAAO8D,YACdb,SAAUzF,KAAKyF,SAASG,KAAK5F,OAC7BqG,EAAQE,IAAI,SAACC,EAAQ5D,GACnB,MAAO4B,GAAA,WAAAQ,cFyKJ,UEzKY/D,IAAK2B,GAAI4D,WAb9BN,GAAoB1B,EAAA,WAAMa,WAqB1BoB,EAAgB,SAAAC,GFiLnB,QEjLGD,KFkLDjF,EAAgBxB,KElLfyG,GFoLDlD,EAAKpC,OAAOmD,eEpLXmC,EAAgB1E,WAAA,cAAA/B,MAAA6E,MAAA7E,KAAA6C,WFqMnB,MAtBAjB,GE/KG6E,EAAgBC,GFuLnBzD,EEvLGwD,IFwLDxF,IAAK,SACLC,MExLG,WAEJ,MAAOsD,GAAA,WAAAQ,cFyLF,OEzLOC,UAAU,qBF2LjB,4BE1LuB0B,KAAKC,UAAU5G,KAAKmD,MAAMX,QF4LjD,SEhMHiE,GAAyBjC,EAAA,WAAMa,WAS/BwB,EAAW,SAAAC,GFkMd,QElMGD,KFmMDrF,EAAgBxB,KEnMf6G,GFqMDtD,EAAKpC,OAAOmD,eErMXuC,EAAW9E,WAAA,cAAA/B,MAAA6E,MAAA7E,KAAA6C,WF8Nd,MA9BAjB,GEhMGiF,EAAWC,GFwMd7D,EExMG4D,IFyMD5F,IAAK,SACLC,ME9LG,WF+LD,GE9LIsB,GAAUxC,KAAKmD,MAAfX,OACDuE,EAAiBF,EAAYG,gBAAgBxE,EAAOH,OACxDoE,CACF,OAAOjC,GAAA,WAAAQ,cAAC+B,EAAmB/G,KAAKmD,YFiM/BlC,IAAK,kBACLmD,IEjNuB,WACxB,OACE6C,OAAQC,EACRC,MAAQC,EACRC,UAASC,EACT1D,OAAQ2D,EACRC,YAAaN,EACbO,OAAQP,OARRL,GAAoBrC,EAAA,WAAMa,WAoB1B6B,EAAW,SAAAQ,GFgNd,QEhNGR,KFiND1F,EAAgBxB,KEjNfkH,GFmND3D,EAAKpC,OAAOmD,eEnNX4C,EAAWnF,WAAA,cAAA/B,MAAA6E,MAAA7E,KAAA6C,WF6Od,MA/BAjB,GE9MGsF,EAAWQ,GFsNdzE,EEtNGiE,IFuNDjG,IAAK,SACLC,MEvNG,WFwND,GAAIyG,GEvNwC3H,KAAKmD,MAA7CX,EAAMmF,EAANnF,OAAQD,EAAQoF,EAARpF,SAAU6C,EAAQuC,EAARvC,SAAUK,EAAQkC,EAARlC,SAC7BmC,GACJpF,SACA0C,MAAU1C,EAAOyD,MACjB1D,SAAUA,EACV6C,SAAUA,EACVK,SAAUA,EAASG,KAAK5F,MAE1B,OAAI6H,OAAMC,QAAQtF,EAAM,SACfgC,EAAA,WAAAQ,cAACkB,EAAWzD,GAAC4D,QAAS7D,EAAM,SAAWoF,IAEzCpD,EAAA,WAAAQ,cAACM,EAAS7C,GAACkD,YAAanD,EAAO8D,aAAiBsB,QAbrDV,GAAoB1C,EAAA,WAAMa,WAiB1BiC,EAAY,SAAAS,GFkOf,QElOGT,KFmOD9F,EAAgBxB,KEnOfsH,GFqOD/D,EAAKpC,OAAOmD,eErOXgD,EAAYvF,WAAA,cAAA/B,MAAA6E,MAAA7E,KAAA6C,WF4Pf,MA5BAjB,GEhOG0F,EAAYS,GFwOf9E,EExOGqE,IFyODrG,IAAK,SACLC,MEzOG,WF0OD,GAAI8G,GEzOwChI,KAAKmD,MAA7CX,EAAMwF,EAANxF,OAAQD,EAAQyF,EAARzF,SAAU6C,EAAQ4C,EAAR5C,SAAUK,EAAQuC,EAARvC,SAC7BmC,GACJpF,SACA0C,MAAU1C,EAAOyD,MACjB1D,SAAUA,EACV6C,SAAUA,EACVK,SAAUA,EAASG,KAAK5F,MAE1B,OAAOwE,GAAA,WAAAQ,cAACa,EAAapD,GAACkD,YAAanD,EAAO8D,aAAiBsB,QAVzDN,GAAqB9C,EAAA,WAAMa,WAc3B+B,EAAU,SAAAa,GACH,QADPb,GACQjE,GFoPT3B,EAAgBxB,KErPfoH,GAEF7D,EAAApC,OAAAmD,eAFE8C,EAAUrF,WAAA,cAAA/B,MAAAQ,KAAAR,KAENmD,EACN,IAAMZ,GAAWsF,MAAMC,QAAQ3E,EAAMZ,UAAYY,EAAMZ,SAAW,IAClEvC,MAAKkI,OAASC,MAAO5F,GAAYY,EAAMX,OAAM,gBF4W9C,MA9HAZ,GElPGwF,EAAUa,GF4PbhF,EE5PGmE,IF6PDnG,IAAK,cACLC,MElPQ,SAACkH,GACV,MAAIA,GAAW,WACNA,EAAW,WAEbhG,EAAiBgG,EAAY/F,SFqPnCpB,IAAK,iBACLC,MEnPW,SAACkH,GACb,MAA4B,WAArBA,EAAY/F,MAAqB+F,EAAYC,UAAY,KFsP/DpH,IAAK,gBACLC,MEpPU,SAACgH,GFqPT,GAAII,GAAQtI,IEnPfA,MAAKuI,SAASL,EAAO,SAAAM,GFuPhB,MEvPqBF,GAAKnF,MAAMsC,SAAS6C,EAAKJ,MAAMC,YF2PxDlH,IAAK,aACLC,MEzPO,SAACsE,GACTA,EAAMiD,iBACNzI,KAAKuI,UACHJ,MAAOnI,KAAKkI,MAAMC,MAAMO,OAAO1I,KAAK2I,YAAY3I,KAAKmD,MAAMX,OAAO2F,aF6PnElH,IAAK,cACLC,ME1PQ,SAAC0H,EAAOpD,GACjBA,EAAMiD,iBACNzI,KAAKuI,UACHJ,MAAOnI,KAAKkI,MAAMC,MAAMU,OAAO,SAACL,EAAG5F,GF2P9B,ME3PoCA,KAAMgG,SFgQhD3H,IAAK,WACLC,ME7PK,SAAC0H,EAAO1H,GACdlB,KAAK8I,eACHX,MAAOnI,KAAKkI,MAAMC,MAAM5B,IAAI,SAACwC,EAAMnG,GACjC,MAAOgG,KAAUhG,EAAI1B,EAAQ6H,SFkQhC9H,IAAK,SACLC,ME9PG,WF+PD,GAAI8H,GAAShJ,KE9PTwC,EAAUxC,KAAKmD,MAAfX,OACA2F,EAASnI,KAAKkI,MAAdC,KACP,OACE3D,GAAA,WAAAQ,cFiQG,YEhQDC,UAAS,oCAAsCzC,EAAO2F,MAAM9F,MAC5DmC,EAAA,WAAAQ,cFmQG,SACA,KEpQMxC,EAAOyD,OACfzD,EAAO8D,YAAc9B,EAAA,WAAAQ,cFuQnB,MACA,KExQyBxC,EAAO8D,aAAqB,KACxD9B,EAAA,WAAAQ,cF2QG,OE3QEC,UAAU,mBACbkD,EAAM5B,IAAI,SAACwC,EAAMH,GACf,MAAOpE,GAAA,WAAAQ,cF6QJ,OE7QS/D,IAAK2H,GACfpE,EAAA,WAAAQ,cAAC6B,GAAYrE,OAAQA,EAAO2F,MAC1B5F,SAAU4F,EAAMS,GAChBxD,SAAU4D,EAAKC,eAAezG,EAAO2F,OACrC1C,SAAUuD,EAAKvD,SAASG,KAAIoD,EAAOJ,KACrCpE,EAAA,WAAAQ,cF+QG,KE/QAC,UAAU,qBACXT,EAAA,WAAAQ,cFiRG,UEjRK3C,KAAK,SACX6G,QAASF,EAAKG,YAAYvD,KAAIoD,EAAOJ,IFmRpC,UE/QXpE,EAAA,WAAAQ,cFsRG,KEtRAC,UAAU,kBACXT,EAAA,WAAAQ,cFwRG,UExRK3C,KAAK,SAAS6G,QAASlJ,KAAKoJ,WAAWxD,KAAK5F,OF0RjD,UAMRiB,IAAK,YACLmD,IElWU,WFmWR,GElWI5B,GAAUxC,KAAKmD,MAAfX,MACP,OAAOA,GAAO2F,MAAMlC,OAASzD,EAAO2F,MAAM7B,aAAe,WATvDc,GAAmB5C,EAAA,WAAMa,WA+EzBkC,EAAW,SAAA8B,GACJ,QADP9B,GACQpE,GFuST3B,EAAgBxB,KExSfuH,GAEFhE,EAAApC,OAAAmD,eAFEiD,EAAWxF,WAAA,cAAA/B,MAAAQ,KAAAR,KAEPmD,GACNnD,KAAKkI,MAAQ/E,EAAMZ,UAAYY,EAAMX,OAAM,eF2V5C,MAzDAZ,GErSG2F,EAAW8B,GF8SdpG,EE9SGsE,IF+SDtG,IAAK,aACLC,ME1SO,SAACoI,GACT,GAAM9G,GAASxC,KAAKmD,MAAMX,MAC1B,OAAOqF,OAAMC,QAAQtF,EAAO4C,WACQ,KAAlC5C,EAAO4C,SAASmE,QAAQD,MF4SzBrI,IAAK,gBACLC,ME1SU,SAACgH,GF2ST,GAAIsB,GAASxJ,IEzShBA,MAAKuI,SAASL,EAAO,SAAAM,GF6ShB,ME7SqBgB,GAAKrG,MAAMsC,SAAS+D,EAAKtB,YFiTlDjH,IAAK,WACLC,ME/SK,SAACoI,EAAMpI,GACblB,KAAK8I,cAAa9H,KAAGsI,EAAOpI,OFkT3BD,IAAK,SACLC,MEhTG,WFiTD,GAAIuI,GAASzJ,KEhTTwC,EAAUxC,KAAKmD,MAAfX,MACP,OAAOgC,GAAA,WAAAQ,cFoTF,WACA,KEpTHR,EAAA,WAAAQ,cFsTK,SACA,KEvTIxC,EAAOyD,OAAS,UAEzB9E,OAAOuI,KAAKlH,EAAOmH,YAAYpD,IAAI,SAAC+C,EAAMV,GACxC,MAAOpE,GAAA,WAAAQ,cAAC6B,GAAY5F,IAAK2H,EACvBU,KAAMA,EACNlE,SAAUqE,EAAKG,WAAWN,GAC1B9G,OAAQA,EAAOmH,WAAWL,GAC1B/G,SAAUkH,EAAKvB,MAAMoB,GACrB7D,SAAUgE,EAAKhE,SAASG,KAAI6D,EAAOH,YAhCvC/B,GAAoB/C,EAAA,WAAMa,WAsC1BwE,EAAS,SAAAC,GF8TZ,QE9TGD,KF+TDrI,EAAgBxB,KE/Tf6J,GFiUDtG,EAAKpC,OAAOmD,eEjUXuF,EAAS9H,WAAA,cAAA/B,MAAA6E,MAAA7E,KAAA6C,WFmWZ,MAvCAjB,GE5TGiI,EAASC,GFoUZ7G,EEpUG4G,IFqUD5I,IAAK,SACLC,MErUG,WFsUD,GErUI6I,GAAU/J,KAAKmD,MAAf4G,MACP,OAAsB,KAAlBA,EAAOjH,OACF,KAEF0B,EAAA,WAAAQ,cFuUF,OEvUOC,UAAU,UACpBT,EAAA,WAAAQ,cFyUK,KACA,KACA,UE1ULR,EAAA,WAAAQ,cF6UK,KACA,KE7UH+E,EAAOxD,IAAI,SAACyD,EAAOpH,GACjB,MAAO4B,GAAA,WAAAQ,cF+UF,ME/UM/D,IAAK2B,GAAIoH,EAAMC,eAV9BJ,GAAkBrF,EAAA,WAAMa,WAiBT6E,EAAI,SAAAC,GACZ,QADQD,GACP/G,GFwVT3B,EAAgBxB,KEzVAkK,GAEjB3G,EAAApC,OAAAmD,eAFiB4F,EAAInI,WAAA,cAAA/B,MAAAQ,KAAAR,KAEfmD,EACN,IAAMiH,KAASjH,EAAMZ,SACfA,EAAWY,EAAMZ,UAAYY,EAAMX,OAAM,YAAY,IAC3DxC,MAAKkI,OACHmC,OAAQ,UACR9H,WACA6H,OACAL,OAAQK,EAAOpK,KAAKsK,SAAS/H,OF2ahC,MA9FAX,GEtVkBsI,EAAIC,GFsWtBlH,EEtWkBiH,IFuWhBjJ,IAAK,WACLC,ME3VK,SAACqB,GACP,GAAMgI,GAAY,GAAA9F,GAAA+F,SAClB,OAAOD,GAAUD,SAAS/H,EAAUvC,KAAKmD,MAAMX,QAAQuH,UF8VtD9I,IAAK,eACLC,ME5VS,WACV,MAAIlB,MAAKkI,MAAMkC,MAA8B,YAAtBpK,KAAKkI,MAAMmC,OACzB7F,EAAA,WAAAQ,cAAC6E,GAAUE,OAAQ/J,KAAKkI,MAAM6B,SAEhC,QF+VN9I,IAAK,WACLC,ME7VK,SAACqB,GF8VJ,GAAIkI,GAASzK,IE7VhBA,MAAKuI,UACH8B,OAAQ,UACR9H,WACAwH,OAAQ/J,KAAKsK,SAAS/H,IACrB,SAAAiG,GACGiC,EAAKtH,MAAMsC,UACbgF,EAAKtH,MAAMsC,SAASgF,EAAKvC,YFoW5BjH,IAAK,WACLC,MEhWK,SAACsE,GFiWJ,GAAIkF,GAAS1K,IEhWhBwF,GAAMiD,iBACNzI,KAAKuI,UAAU8B,OAAQ,aACvB,IAAMN,GAAS/J,KAAKsK,SAAStK,KAAKkI,MAAM3F,SACxC,OAAIpB,QAAOuI,KAAKK,GAAQjH,OAAS,MAC/B9C,MAAKuI,UAAUwB,UAAS,SAAAvB,GAClBkC,EAAKvH,MAAMwH,QACbD,EAAKvH,MAAMwH,QAAQZ,GAEnBa,QAAQZ,MAAM,yBAA0BD,MAInC/J,KAAKmD,MAAM0H,UACpB7K,KAAKmD,MAAM0H,SAAS7K,KAAKkI,WAE3BlI,MAAKuI,UAAU8B,OAAQ,gBFqWtBpJ,IAAK,SACLC,MEnWG,WFoWD,GEnWIsB,GAAUxC,KAAKmD,MAAfX,OACAD,EAAYvC,KAAKkI,MAAjB3F,QACP,OACEiC,GAAA,WAAAQ,cFoWG,QEpWGC,UAAU,eAAe4F,SAAU7K,KAAK6K,SAASjF,KAAK5F,OACzDA,KAAK8K,eACNtG,EAAA,WAAAQ,cAAC6B,GACCrE,OAAQA,EACRD,SAAUA,EACVkD,SAAUzF,KAAKyF,SAASG,KAAK5F,QAC/BwE,EAAA,WAAAQ,cFsWG,IACA,KEvWAR,EAAA,WAAAQ,cFyWE,UEzWM3C,KAAK,UF2WX,gBE7aQ6H,GAAa1F,EAAA,WAAMa,UFubvC1F,GAAQ,WEvbYuK,EFwbpBtK,EAAOD,QAAUA,EAAQ,YAIpB,SAASC,EAAQD,GG/uBvBC,EAAAD,QAAAM,GHqvBM,SAASL,EAAQD,EAASQ,GIrvBhC,YAEA,IAAIqK,GAAY5K,EAAOD,QAAQ6K,UAAYrK,EAAQ,EAEnDP,GAAOD,QAAQoL,gBAAkB5K,EAAQ,IAAa4K,gBACtDnL,EAAOD,QAAQqL,gBAAkB7K,EAAQ,IAAa6K,gBACtDpL,EAAOD,QAAQsL,YAAc9K,EAAQ,IAAa8K,YAElDrL,EAAOD,QAAQ2K,SAAW,SAAU7I,EAAUe,EAAQ6D,GACpD,GAAI6E,GAAI,GAAIV,EACZ,OAAOU,GAAEZ,SAAS7I,EAAUe,EAAQ6D,KJ4vBhC,SAASzG,EAAQD,EAASQ,GKtwBhC,YAEA,IAAIgL,GAAShL,EAAQ,GAEjBiL,EAAYjL,EAAQ,IACpBkL,EAAUlL,EAAQ,IAClB4K,EAAkBM,EAAQN,gBAC1BE,EAAcI,EAAQJ,YACtBK,EAAgBD,EAAQC,cAOxBd,EAAY,WACdxK,KAAKuL,WACLvL,KAAKwL,kBAGLxL,KAAKyL,MAAQtK,OAAOa,OAAOyJ,GAC3BzL,KAAK0L,WAAavK,OAAOa,OAAOoJ,EAAUO,YAI5CnB,GAAUzI,UAAUwJ,QAAU,KAC9Bf,EAAUzI,UAAU0J,MAAQ,KAC5BjB,EAAUzI,UAAU2J,WAAa,KACjClB,EAAUzI,UAAUyJ,eAAiB,KAQrChB,EAAUzI,UAAU6J,UAAY,SAAoBpJ,EAAQqJ,GAC1D,IAAKrJ,EACH,MAAO,KAET,IAAIsJ,GAASD,GAAOrJ,EAAOlC,EAK3B,OAJAN,MAAK+L,aAAaD,EAAQtJ,GACtBsJ,IACF9L,KAAKuL,QAAQO,GAAUtJ,GAElBxC,KAAKuL,QAAQO,IAGtBtB,EAAUzI,UAAUgK,aAAe,SAAsBC,EAASxJ,GAChE,GAAIA,GAAyB,gBAARA,GAArB,CAEA,GAAGA,EAAOyJ,KAAK,CACb,GAAIC,GAAcf,EAAOgB,QAAQH,EAASxJ,EAAOyJ,KAMjD,aAJkC/H,SAA9BlE,KAAKuL,QAAQW,KACflM,KAAKuL,QAAQW,GAAe,KAC5BlM,KAAKwL,eAAeY,KAAKF,KAI7B,GAAIJ,GAAStJ,EAAOlC,IAAM6K,EAAOgB,QAAQH,EAASxJ,EAAOlC,IACrD+L,EAAUP,GAAUE,CACxB,IAAIF,EAAQ,CACV,GAAG9L,KAAKuL,QAAQO,GAAQ,CACtB,IAAIT,EAAQiB,kBAAkBtM,KAAKuL,QAAQO,GAAStJ,GAClD,KAAM,IAAI+J,OAAM,WAAW/J,EAAO,6CAEpC,OAAOxC,MAAKuL,QAAQO,GAEtB9L,KAAKuL,QAAQO,GAAUtJ,CACvB,IAAIgK,GAAcV,EAAOW,QAAQ,aAAc,KAC/CzM,MAAKuL,QAAQiB,GAAehK,EAe9B,MAbAxC,MAAK0M,kBAAkBL,EAAW7J,EAAO2F,gBAAiBN,OAAOrF,EAAO2F,OAAO3F,EAAO2F,QACtFnI,KAAK0M,kBAAkBL,EAAW7J,EAAM,oBAAoBqF,OAAOrF,EAAM,YAAUA,EAAM,aACzFxC,KAAK+L,aAAaM,EAAS7J,EAAOmK,iBAClC3M,KAAK4M,mBAAmBP,EAAS7J,EAAOmH,YACxC3J,KAAK+L,aAAaM,EAAS7J,EAAOqK,sBAClC7M,KAAK4M,mBAAmBP,EAAS7J,EAAOsK,aACxC9M,KAAK4M,mBAAmBP,EAAS7J,EAAOuK,mBACxC/M,KAAK4M,mBAAmBP,EAAS7J,EAAOwK,cACxChN,KAAK0M,kBAAkBL,EAAS7J,EAAOyK,UACvCjN,KAAK0M,kBAAkBL,EAAS7J,EAAO0K,OACvClN,KAAK0M,kBAAkBL,EAAS7J,EAAO2K,OACvCnN,KAAK0M,kBAAkBL,EAAS7J,EAAO4K,OACvCpN,KAAK+L,aAAaM,EAAS7J,EAAO6K,KAC3BrN,KAAKuL,QAAQO,KAGtBtB,EAAUzI,UAAU2K,kBAAoB,SAA2BV,EAAST,GAC1E,GAAKA,YAAmB1D,OACxB,IAAI,GAAIjF,GAAE,EAAGA,EAAE2I,EAAQzI,OAAQF,IAC7B5C,KAAK+L,aAAaC,EAAST,EAAQ3I,KAIvC4H,EAAUzI,UAAU6K,mBAAqB,SAA2BZ,EAAST,GAC3E,GAAIA,GAA2B,gBAATA,GACtB,IAAI,GAAI5K,KAAK4K,GACXvL,KAAK+L,aAAaC,EAAST,EAAQ5K,KAUvC6J,EAAUzI,UAAUuL,WAAa,SAAqB/B,GACpDvL,KAAKuL,QAAUA,GAOjBf,EAAUzI,UAAUwL,UAAY,SAAoBC,GAClD,MAAOxN,MAAKuL,QAAQiC,IAWtBhD,EAAUzI,UAAUuI,SAAW,SAAmB7I,EAAUe,EAAQ6D,EAASoH,GACtEpH,IACHA,KAEF,IAAIqH,GAAerH,EAAQqH,cAAgB,WAEvCC,EAAOxC,EAAOgB,QAAQ9F,EAAQsH,MAAM,IAAKnL,EAAOlC,IAAI,GAOxD,IANImN,IACFA,EAAM,GAAInC,GAAc9I,EAAQ6D,EAASqH,EAAcC,EAAMxM,OAAOa,OAAOhC,KAAKuL,UAC3EkC,EAAIlC,QAAQoC,KACfF,EAAIlC,QAAQoC,GAAQnL,IAGpBA,EAAQ,CACV,GAAIoL,GAAS5N,KAAK6N,eAAepM,EAAUe,EAAQ6D,EAASoH,EAC5D,KAAKG,EACH,KAAM,IAAIrB,OAAM,mBAElB,OAAOqB,GAET,KAAM,IAAI3C,GAAY,sBAAuBzI,IAY/CgI,EAAUzI,UAAU8L,eAAiB,SAAyBpM,EAAUe,EAAQ6D,EAASoH,GAWvF,QAASK,GAActL,GACrB,GAAIuL,GAAyB,gBAAXvL,GAAuBA,EAASA,EAAOyJ,IACzD,OAAgB,gBAAL8B,GAAsBA,GAC1B,EAOT,QAAS5B,GAAQ3J,EAAQiL,GACvB,GAAIM,EACJ,QAAGA,EAAMD,EAActL,IACdwL,EAAK7B,QAAQ3J,EAAQuL,EAAKN,GAAKQ,UAEjCzL,EAzBT,GAAIwL,GAAOhO,KACP4N,EAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,EAC5D,KAAKjL,EACH,KAAM,IAAI+J,OAAM,sBAyBd/J,GAAO,aACLA,EAAO,oBAAsBqF,OAC/BrF,EAAO,WAAW0L,QAAQ,SAAUC,GAClC3L,EAAS6I,EAAQ+C,UAAU5L,EAAQ2J,EAAQgC,EAAGV,MAGhDjL,EAAS6I,EAAQ+C,UAAU5L,EAAQ2J,EAAQ3J,EAAO,WAAYiL,IAIlE,IAAIY,EACJ,IAAIA,EAAeP,EAActL,GAAS,CACxC,GAAI8L,GAAWtO,KAAKmM,QAAQ3J,EAAQ6L,EAAcZ,GAC9Cc,EAAS,GAAIjD,GAAcgD,EAASL,UAAW5H,EAASoH,EAAIe,aAAcF,EAASD,aAAcZ,EAAIlC,QACzG,OAAOvL,MAAK6N,eAAepM,EAAU6M,EAASL,UAAW5H,EAASkI,GAGpE,GAAIE,GAAiBpI,GAAWA,EAAQoI,kBAExC,KAAK,GAAIxN,KAAOuB,GACd,IAAK4I,EAAUsD,iBAAiBzN,IAAQwN,EAAelF,QAAQtI,GAAO,EAAG,CACvE,GAAI0N,GAAe,KACfpE,EAAYyD,EAAKtC,WAAWzK,EAChC,IAAIsJ,EACFoE,EAAepE,EAAU/J,KAAKwN,EAAMvM,EAAUe,EAAQ6D,EAASoH,OAC1D,IAAIpH,EAAQuI,0BAA2B,EAE5C,KAAM,IAAI3D,GAAY,0BAA4BhK,EAAKuB,EAErDmM,IACFf,EAAOiB,aAAaF,GAK1B,GAA8B,kBAAnBtI,GAAQyI,QAAuB,CACxC,GAAI5N,GAAQmF,EAAQyI,QAAQtO,KAAKR,KAAMyB,EAAUe,EAAQ6D,EAASoH,EAClEG,GAAOnM,SAAWP,EAEpB,MAAO0M,IAWTpD,EAAUzI,UAAUoK,QAAU,SAAkB3J,EAAQ6L,EAAcZ,GAGpE,GAFAY,EAAeZ,EAAItB,QAAQkC,GAEvBZ,EAAIlC,QAAQ8C,GACd,OAAQJ,UAAWR,EAAIlC,QAAQ8C,GAAeA,aAAcA,EAG9D,IAAIU,GAAS5D,EAAO6D,MAAMX,GACtBY,EAAWF,GAAUA,EAAOG,KAC5BC,EAAWF,GAAYA,EAASnM,QAAUuL,EAAae,OAAO,EAAGf,EAAavL,OAASmM,EAASnM,OACpG,KAAKqM,IAAa1B,EAAIlC,QAAQ4D,GAC5B,KAAM,IAAIlE,GAAY,mBAAqBoD,EAAe,IAAK7L,EAEjE,IAAIyL,GAAY5C,EAAQgE,cAAc5B,EAAIlC,QAAQ4D,GAAWF,EAASG,OAAO,GAC7E,IAAelL,SAAZ+J,EACD,KAAM,IAAIhD,GAAY,kBAAoBgE,EAAW,gBAAkBE,EAAW,IAAK3M,EAEzF,QAAQyL,UAAWA,EAAWI,aAAcA,IAa9C7D,EAAUzI,UAAUuN,SAAW,SAAuB7N,EAAUe,EAAQ6D,EAASoH,EAAKpL,GACpF,GAA+B,kBAApBrC,MAAKyL,MAAMpJ,GACpB,MAAOrC,MAAKyL,MAAMpJ,GAAM7B,KAAKR,KAAMyB,EAErC,IAAIY,GAAuB,gBAARA,GAAkB,CACnC,GAAIkN,GAAMvP,KAAK6N,eAAepM,EAAUY,EAAMgE,EAASoH,EACvD,OAAevJ,UAARqL,KAAuBA,GAAOA,EAAIxF,OAAOjH,QAGlD,OAAO,EAGT,IAAI2I,GAAQjB,EAAUzI,UAAU0J,QAChCA,GAAMxE,OAAS,SAAqBxF,GAClC,MAA0B,gBAAZA,IAEhBgK,EAAMhE,OAAS,SAAqBhG,GAClC,MAA0B,gBAAZA,IAEhBgK,EAAM+D,QAAU,SAAsB/N,GACpC,MAA2B,gBAAZA,IAAyBA,EAAW,IAAM,GAE3DgK,aAAgB,SAAsBhK,GACpC,MAA0B,iBAAZA,IAEhBgK,EAAMhE,OAAS,SAAqBhG,GAClC,MAA0B,gBAAZA,IAEhBgK,EAAMtE,MAAQ,SAAoB1F,GAChC,MAAOA,aAAoBoG,QAE7B4D,EAAM,QAAU,SAAmBhK,GACjC,MAAoB,QAAbA,GAETgK,EAAMgE,KAAO,SAAmBhO,GAC9B,MAAOA,aAAoBiO,OAE7BjE,EAAMkE,IAAM,SAAkBlO,GAC5B,OAAO,GAETgK,EAAM7H,OAAS,SAAqBnC,GAElC,MAAOA,IAAkC,gBAAdA,MAA4BA,YAAoBoG,WAAYpG,YAAoBiO,QAG7G9P,EAAOD,QAAU6K,GL0wBX,SAAS5K,EAAQD,EAASQ,GAuB/B,YM9jCD,SAASyP,KACP5P,KAAK6P,SAAW,KAChB7P,KAAK8P,QAAU,KACf9P,KAAK+P,KAAO,KACZ/P,KAAKgQ,KAAO,KACZhQ,KAAKiQ,KAAO,KACZjQ,KAAKkQ,SAAW,KAChBlQ,KAAKkP,KAAO,KACZlP,KAAKmQ,OAAS,KACdnQ,KAAKoQ,MAAQ,KACbpQ,KAAKqQ,SAAW,KAChBrQ,KAAKsQ,KAAO,KACZtQ,KAAKuQ,KAAO,KAqDd,QAASC,GAASC,EAAKC,EAAkBC,GACvC,GAAIF,GAAOG,EAASH,IAAQA,YAAeb,GAAK,MAAOa,EAEvD,IAAII,GAAI,GAAIjB,EAEZ,OADAiB,GAAE7B,MAAMyB,EAAKC,EAAkBC,GACxBE,EA6OT,QAASC,GAAUjQ,GAMjB,MADIkQ,GAASlQ,KAAMA,EAAM2P,EAAS3P,IAC5BA,YAAe+O,GACd/O,EAAImQ,SADuBpB,EAAI7N,UAAUiP,OAAOxQ,KAAKK,GA4D9D,QAASoQ,GAAWlO,EAAQmO,GAC1B,MAAOV,GAASzN,GAAQ,GAAO,GAAMoJ,QAAQ+E,GAO/C,QAASC,GAAiBpO,EAAQmO,GAChC,MAAKnO,GACEyN,EAASzN,GAAQ,GAAO,GAAMqO,cAAcF,GAD/BA,EAyRtB,QAASH,GAASM,GAChB,MAAsB,gBAARA,GAGhB,QAAST,GAASS,GAChB,MAAsB,gBAARA,IAA4B,OAARA,EAGpC,QAASC,GAAOD,GACd,MAAe,QAARA,EAET,QAASE,GAAkBF,GACzB,MAAe,OAAPA,EA5qBV,GAAIG,GAAWrR,EAAQ,EAEvBR,GAAQqP,MAAQwB,EAChB7Q,EAAQwM,QAAU8E,EAClBtR,EAAQyR,cAAgBD,EACxBxR,EAAQqR,OAASF,EAEjBnR,EAAQiQ,IAAMA,CAqBd,IAAI6B,GAAkB,oBAClBC,EAAc,WAIdC,GAAU,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAG/CC,GAAU,IAAK,IAAK,IAAK,KAAM,IAAK,KAAKlJ,OAAOiJ,GAGhDE,GAAc,KAAMnJ,OAAOkJ,GAK3BE,GAAgB,IAAK,IAAK,IAAK,IAAK,KAAKpJ,OAAOmJ,GAChDE,GAAmB,IAAK,IAAK,KAC7BC,EAAiB,IACjBC,EAAsB,wBACtBC,EAAoB,8BAEpBC,GACEC,YAAc,EACdC,eAAe,GAGjBC,GACEF,YAAc,EACdC,eAAe,GAGjBE,GACEC,MAAQ,EACRC,OAAS,EACTC,KAAO,EACPC,QAAU,EACVC,MAAQ,EACRC,SAAS,EACTC,UAAU,EACVC,QAAQ,EACRC,WAAW,EACXC,SAAS,GAEXC,EAAc/S,EAAQ,EAU1ByP,GAAI7N,UAAUiN,MAAQ,SAASyB,EAAKC,EAAkBC,GACpD,IAAKI,EAASN,GACZ,KAAM,IAAI9O,WAAU,+CAAkD8O,GAGxE,IAAI0C,GAAO1C,CAIX0C,GAAOA,EAAKC,MAEZ,IAAIC,GAAQ5B,EAAgB6B,KAAKH,EACjC,IAAIE,EAAO,CACTA,EAAQA,EAAM,EACd,IAAIE,GAAaF,EAAMG,aACvBxT,MAAK6P,SAAW0D,EAChBJ,EAAOA,EAAK/D,OAAOiE,EAAMvQ,QAO3B,GAAI6N,GAAqB0C,GAASF,EAAKM,MAAM,wBAAyB,CACpE,GAAI3D,GAAgC,OAAtBqD,EAAK/D,OAAO,EAAG,IACzBU,GAAauD,GAASf,EAAiBe,KACzCF,EAAOA,EAAK/D,OAAO,GACnBpP,KAAK8P,SAAU,GAInB,IAAKwC,EAAiBe,KACjBvD,GAAYuD,IAAUd,EAAgBc,IAAU,CAmBnD,IAAK,GADDK,GAAU,GACL9Q,EAAI,EAAGA,EAAImP,EAAgBjP,OAAQF,IAAK,CAC/C,GAAI+Q,GAAMR,EAAK5J,QAAQwI,EAAgBnP,GAC3B,MAAR+Q,IAA2B,KAAZD,GAAwBA,EAANC,KACnCD,EAAUC,GAKd,GAAI5D,GAAM6D,CAGRA,GAFc,KAAZF,EAEOP,EAAKU,YAAY,KAIjBV,EAAKU,YAAY,IAAKH,GAKlB,KAAXE,IACF7D,EAAOoD,EAAKW,MAAM,EAAGF,GACrBT,EAAOA,EAAKW,MAAMF,EAAS,GAC3B5T,KAAK+P,KAAOgE,mBAAmBhE,IAIjC2D,EAAU,EACV,KAAK,GAAI9Q,GAAI,EAAGA,EAAIkP,EAAahP,OAAQF,IAAK,CAC5C,GAAI+Q,GAAMR,EAAK5J,QAAQuI,EAAalP,GACxB,MAAR+Q,IAA2B,KAAZD,GAAwBA,EAANC,KACnCD,EAAUC,GAGE,KAAZD,IACFA,EAAUP,EAAKrQ,QAEjB9C,KAAKgQ,KAAOmD,EAAKW,MAAM,EAAGJ,GAC1BP,EAAOA,EAAKW,MAAMJ,GAGlB1T,KAAKgU,YAILhU,KAAKkQ,SAAWlQ,KAAKkQ,UAAY,EAIjC,IAAI+D,GAAoC,MAArBjU,KAAKkQ,SAAS,IACe,MAA5ClQ,KAAKkQ,SAASlQ,KAAKkQ,SAASpN,OAAS,EAGzC,KAAKmR,EAEH,IAAK,GADDC,GAAYlU,KAAKkQ,SAASiE,MAAM,MAC3BvR,EAAI,EAAGwR,EAAIF,EAAUpR,OAAYsR,EAAJxR,EAAOA,IAAK,CAChD,GAAIyR,GAAOH,EAAUtR,EACrB,IAAKyR,IACAA,EAAKZ,MAAMxB,GAAsB,CAEpC,IAAK,GADDqC,GAAU,GACLC,EAAI,EAAGC,EAAIH,EAAKvR,OAAY0R,EAAJD,EAAOA,IAKpCD,GAJED,EAAKI,WAAWF,GAAK,IAIZ,IAEAF,EAAKE,EAIpB,KAAKD,EAAQb,MAAMxB,GAAsB,CACvC,GAAIyC,GAAaR,EAAUJ,MAAM,EAAGlR,GAChC+R,EAAUT,EAAUJ,MAAMlR,EAAI,GAC9BgS,EAAMP,EAAKZ,MAAMvB,EACjB0C,KACFF,EAAWtI,KAAKwI,EAAI,IACpBD,EAAQE,QAAQD,EAAI,KAElBD,EAAQ7R,SACVqQ,EAAO,IAAMwB,EAAQG,KAAK,KAAO3B,GAEnCnT,KAAKkQ,SAAWwE,EAAWI,KAAK,IAChC,SAaR,GAPI9U,KAAKkQ,SAASpN,OAASkP,EACzBhS,KAAKkQ,SAAW,GAGhBlQ,KAAKkQ,SAAWlQ,KAAKkQ,SAASsD,eAG3BS,EAAc,CAOjB,IAAK,GAFDc,GAAc/U,KAAKkQ,SAASiE,MAAM,KAClCa,KACKpS,EAAI,EAAGA,EAAImS,EAAYjS,SAAUF,EAAG,CAC3C,GAAIuL,GAAI4G,EAAYnS,EACpBoS,GAAO5I,KAAK+B,EAAEsF,MAAM,kBAChB,OAASjC,EAASyD,OAAO9G,GAAKA,GAEpCnO,KAAKkQ,SAAW8E,EAAOF,KAAK,KAG9B,GAAInU,GAAIX,KAAKiQ,KAAO,IAAMjQ,KAAKiQ,KAAO,GAClCiF,EAAIlV,KAAKkQ,UAAY,EACzBlQ,MAAKgQ,KAAOkF,EAAIvU,EAChBX,KAAKuQ,MAAQvQ,KAAKgQ,KAIdiE,IACFjU,KAAKkQ,SAAWlQ,KAAKkQ,SAASd,OAAO,EAAGpP,KAAKkQ,SAASpN,OAAS,GAC/C,MAAZqQ,EAAK,KACPA,EAAO,IAAMA,IAOnB,IAAKhB,EAAeoB,GAKlB,IAAK,GAAI3Q,GAAI,EAAGwR,EAAIvC,EAAW/O,OAAYsR,EAAJxR,EAAOA,IAAK,CACjD,GAAIuS,GAAKtD,EAAWjP,GAChBwS,EAAMC,mBAAmBF,EACzBC,KAAQD,IACVC,EAAME,OAAOH,IAEfhC,EAAOA,EAAKgB,MAAMgB,GAAIL,KAAKM,GAM/B,GAAIlG,GAAOiE,EAAK5J,QAAQ,IACX,MAAT2F,IAEFlP,KAAKkP,KAAOiE,EAAK/D,OAAOF,GACxBiE,EAAOA,EAAKW,MAAM,EAAG5E,GAEvB,IAAIqG,GAAKpC,EAAK5J,QAAQ,IAoBtB,IAnBW,KAAPgM,GACFvV,KAAKmQ,OAASgD,EAAK/D,OAAOmG,GAC1BvV,KAAKoQ,MAAQ+C,EAAK/D,OAAOmG,EAAK,GAC1B7E,IACF1Q,KAAKoQ,MAAQ8C,EAAYlE,MAAMhP,KAAKoQ,QAEtC+C,EAAOA,EAAKW,MAAM,EAAGyB,IACZ7E,IAET1Q,KAAKmQ,OAAS,GACdnQ,KAAKoQ,UAEH+C,IAAMnT,KAAKqQ,SAAW8C,GACtBZ,EAAgBgB,IAChBvT,KAAKkQ,WAAalQ,KAAKqQ,WACzBrQ,KAAKqQ,SAAW,KAIdrQ,KAAKqQ,UAAYrQ,KAAKmQ,OAAQ,CAChC,GAAIxP,GAAIX,KAAKqQ,UAAY,GACrBlC,EAAInO,KAAKmQ,QAAU,EACvBnQ,MAAKsQ,KAAO3P,EAAIwN,EAKlB,MADAnO,MAAKuQ,KAAOvQ,KAAKgR,SACVhR,MAcT4P,EAAI7N,UAAUiP,OAAS,WACrB,GAAIjB,GAAO/P,KAAK+P,MAAQ,EACpBA,KACFA,EAAOsF,mBAAmBtF,GAC1BA,EAAOA,EAAKtD,QAAQ,OAAQ,KAC5BsD,GAAQ,IAGV,IAAIF,GAAW7P,KAAK6P,UAAY,GAC5BQ,EAAWrQ,KAAKqQ,UAAY,GAC5BnB,EAAOlP,KAAKkP,MAAQ,GACpBc,GAAO,EACPI,EAAQ,EAERpQ,MAAKgQ,KACPA,EAAOD,EAAO/P,KAAKgQ,KACVhQ,KAAKkQ,WACdF,EAAOD,GAAuC,KAA/B/P,KAAKkQ,SAAS3G,QAAQ,KACjCvJ,KAAKkQ,SACL,IAAMlQ,KAAKkQ,SAAW,KACtBlQ,KAAKiQ,OACPD,GAAQ,IAAMhQ,KAAKiQ,OAInBjQ,KAAKoQ,OACLQ,EAAS5Q,KAAKoQ,QACdjP,OAAOuI,KAAK1J,KAAKoQ,OAAOtN,SAC1BsN,EAAQ8C,EAAYtM,UAAU5G,KAAKoQ,OAGrC,IAAID,GAASnQ,KAAKmQ,QAAWC,GAAU,IAAMA,GAAW,EAsBxD,OApBIP,IAAoC,MAAxBA,EAAST,OAAO,MAAaS,GAAY,KAIrD7P,KAAK8P,WACHD,GAAY0C,EAAgB1C,KAAcG,KAAS,GACvDA,EAAO,MAAQA,GAAQ,IACnBK,GAAmC,MAAvBA,EAASmF,OAAO,KAAYnF,EAAW,IAAMA,IACnDL,IACVA,EAAO,IAGLd,GAA2B,MAAnBA,EAAKsG,OAAO,KAAYtG,EAAO,IAAMA,GAC7CiB,GAA+B,MAArBA,EAAOqF,OAAO,KAAYrF,EAAS,IAAMA,GAEvDE,EAAWA,EAAS5D,QAAQ,QAAS,SAASgH,GAC5C,MAAO4B,oBAAmB5B,KAE5BtD,EAASA,EAAO1D,QAAQ,IAAK,OAEtBoD,EAAWG,EAAOK,EAAWF,EAASjB,GAO/CU,EAAI7N,UAAUoK,QAAU,SAAS+E,GAC/B,MAAOlR,MAAKoR,cAAcZ,EAASU,GAAU,GAAO,IAAOF,UAQ7DpB,EAAI7N,UAAUqP,cAAgB,SAASF,GACrC,GAAIH,EAASG,GAAW,CACtB,GAAIuE,GAAM,GAAI7F,EACd6F,GAAIzG,MAAMkC,GAAU,GAAO,GAC3BA,EAAWuE,EAGb,GAAI7H,GAAS,GAAIgC,EAUjB,IATAzO,OAAOuI,KAAK1J,MAAMkO,QAAQ,SAASsG,GACjC5G,EAAO4G,GAAKxU,KAAKwU,IAChBxU,MAIH4N,EAAOsB,KAAOgC,EAAShC,KAGD,KAAlBgC,EAASX,KAEX,MADA3C,GAAO2C,KAAO3C,EAAOoD,SACdpD,CAIT,IAAIsD,EAASpB,UAAYoB,EAASrB,SAchC,MAZA1O,QAAOuI,KAAKwH,GAAUhD,QAAQ,SAASsG,GAC3B,aAANA,IACF5G,EAAO4G,GAAKtD,EAASsD,MAIrBjC,EAAgB3E,EAAOiC,WACvBjC,EAAOsC,WAAatC,EAAOyC,WAC7BzC,EAAO0C,KAAO1C,EAAOyC,SAAW,KAGlCzC,EAAO2C,KAAO3C,EAAOoD,SACdpD,CAGT,IAAIsD,EAASrB,UAAYqB,EAASrB,WAAajC,EAAOiC,SAAU,CAS9D,IAAK0C,EAAgBrB,EAASrB,UAK5B,MAJA1O,QAAOuI,KAAKwH,GAAUhD,QAAQ,SAASsG,GACrC5G,EAAO4G,GAAKtD,EAASsD,KAEvB5G,EAAO2C,KAAO3C,EAAOoD,SACdpD,CAIT,IADAA,EAAOiC,SAAWqB,EAASrB,SACtBqB,EAASlB,MAASsC,EAAiBpB,EAASrB,UAS/CjC,EAAOyC,SAAWa,EAASb,aAT+B,CAE1D,IADA,GAAIqF,IAAWxE,EAASb,UAAY,IAAI8D,MAAM,KACvCuB,EAAQ5S,UAAYoO,EAASlB,KAAO0F,EAAQC,WAC9CzE,EAASlB,OAAMkB,EAASlB,KAAO,IAC/BkB,EAAShB,WAAUgB,EAAShB,SAAW,IACzB,KAAfwF,EAAQ,IAAWA,EAAQb,QAAQ,IACnCa,EAAQ5S,OAAS,GAAG4S,EAAQb,QAAQ,IACxCjH,EAAOyC,SAAWqF,EAAQZ,KAAK,KAWjC,GAPAlH,EAAOuC,OAASe,EAASf,OACzBvC,EAAOwC,MAAQc,EAASd,MACxBxC,EAAOoC,KAAOkB,EAASlB,MAAQ,GAC/BpC,EAAOmC,KAAOmB,EAASnB,KACvBnC,EAAOsC,SAAWgB,EAAShB,UAAYgB,EAASlB,KAChDpC,EAAOqC,KAAOiB,EAASjB,KAEnBrC,EAAOyC,UAAYzC,EAAOuC,OAAQ,CACpC,GAAIxP,GAAIiN,EAAOyC,UAAY,GACvBlC,EAAIP,EAAOuC,QAAU,EACzBvC,GAAO0C,KAAO3P,EAAIwN,EAIpB,MAFAP,GAAOkC,QAAUlC,EAAOkC,SAAWoB,EAASpB,QAC5ClC,EAAO2C,KAAO3C,EAAOoD,SACdpD,EAGT,GAAIgI,GAAehI,EAAOyC,UAA0C,MAA9BzC,EAAOyC,SAASmF,OAAO,GACzDK,EACI3E,EAASlB,MACTkB,EAASb,UAA4C,MAAhCa,EAASb,SAASmF,OAAO,GAElDM,EAAcD,GAAYD,GACXhI,EAAOoC,MAAQkB,EAASb,SACvC0F,EAAgBD,EAChBE,EAAUpI,EAAOyC,UAAYzC,EAAOyC,SAAS8D,MAAM,SACnDuB,EAAUxE,EAASb,UAAYa,EAASb,SAAS8D,MAAM,SACvD8B,EAAYrI,EAAOiC,WAAa0C,EAAgB3E,EAAOiC,SA2B3D,IApBIoG,IACFrI,EAAOsC,SAAW,GAClBtC,EAAOqC,KAAO,KACVrC,EAAOoC,OACU,KAAfgG,EAAQ,GAAWA,EAAQ,GAAKpI,EAAOoC,KACtCgG,EAAQnB,QAAQjH,EAAOoC,OAE9BpC,EAAOoC,KAAO,GACVkB,EAASrB,WACXqB,EAAShB,SAAW,KACpBgB,EAASjB,KAAO,KACZiB,EAASlB,OACQ,KAAf0F,EAAQ,GAAWA,EAAQ,GAAKxE,EAASlB,KACxC0F,EAAQb,QAAQ3D,EAASlB,OAEhCkB,EAASlB,KAAO,MAElB8F,EAAaA,IAA8B,KAAfJ,EAAQ,IAA4B,KAAfM,EAAQ,KAGvDH,EAEFjI,EAAOoC,KAAQkB,EAASlB,MAA0B,KAAlBkB,EAASlB,KAC3BkB,EAASlB,KAAOpC,EAAOoC,KACrCpC,EAAOsC,SAAYgB,EAAShB,UAAkC,KAAtBgB,EAAShB,SAC/BgB,EAAShB,SAAWtC,EAAOsC,SAC7CtC,EAAOuC,OAASe,EAASf,OACzBvC,EAAOwC,MAAQc,EAASd,MACxB4F,EAAUN,MAEL,IAAIA,EAAQ5S,OAGZkT,IAASA,MACdA,EAAQE,MACRF,EAAUA,EAAQtN,OAAOgN,GACzB9H,EAAOuC,OAASe,EAASf,OACzBvC,EAAOwC,MAAQc,EAASd,UACnB,KAAKmB,EAAkBL,EAASf,QAAS,CAI9C,GAAI8F,EAAW,CACbrI,EAAOsC,SAAWtC,EAAOoC,KAAOgG,EAAQL,OAIxC,IAAIQ,GAAavI,EAAOoC,MAAQpC,EAAOoC,KAAKzG,QAAQ,KAAO,EAC1CqE,EAAOoC,KAAKmE,MAAM,MAAO,CACtCgC,KACFvI,EAAOmC,KAAOoG,EAAWR,QACzB/H,EAAOoC,KAAOpC,EAAOsC,SAAWiG,EAAWR,SAW/C,MARA/H,GAAOuC,OAASe,EAASf,OACzBvC,EAAOwC,MAAQc,EAASd,MAEnBkB,EAAO1D,EAAOyC,WAAciB,EAAO1D,EAAOuC,UAC7CvC,EAAO0C,MAAQ1C,EAAOyC,SAAWzC,EAAOyC,SAAW,KACpCzC,EAAOuC,OAASvC,EAAOuC,OAAS,KAEjDvC,EAAO2C,KAAO3C,EAAOoD,SACdpD,EAGT,IAAKoI,EAAQlT,OAWX,MARA8K,GAAOyC,SAAW,KAEdzC,EAAOuC,OACTvC,EAAO0C,KAAO,IAAM1C,EAAOuC,OAE3BvC,EAAO0C,KAAO,KAEhB1C,EAAO2C,KAAO3C,EAAOoD,SACdpD,CAcT,KAAK,GARDwI,GAAOJ,EAAQlC,MAAM,IAAI,GACzBuC,GACCzI,EAAOoC,MAAQkB,EAASlB,QAAmB,MAAToG,GAAyB,OAATA,IAC1C,KAATA,EAIAE,EAAK,EACA1T,EAAIoT,EAAQlT,OAAQF,GAAK,EAAGA,IACnCwT,EAAOJ,EAAQpT,GACH,KAARwT,EACFJ,EAAQO,OAAO3T,EAAG,GACA,OAATwT,GACTJ,EAAQO,OAAO3T,EAAG,GAClB0T,KACSA,IACTN,EAAQO,OAAO3T,EAAG,GAClB0T,IAKJ,KAAKR,IAAeC,EAClB,KAAOO,IAAMA,EACXN,EAAQnB,QAAQ,OAIhBiB,GAA6B,KAAfE,EAAQ,IACpBA,EAAQ,IAA+B,MAAzBA,EAAQ,GAAGR,OAAO,IACpCQ,EAAQnB,QAAQ,IAGdwB,GAAsD,MAAjCL,EAAQlB,KAAK,KAAK1F,OAAO,KAChD4G,EAAQ5J,KAAK,GAGf,IAAIoK,GAA4B,KAAfR,EAAQ,IACpBA,EAAQ,IAA+B,MAAzBA,EAAQ,GAAGR,OAAO,EAGrC,IAAIS,EAAW,CACbrI,EAAOsC,SAAWtC,EAAOoC,KAAOwG,EAAa,GACbR,EAAQlT,OAASkT,EAAQL,QAAU,EAInE,IAAIQ,GAAavI,EAAOoC,MAAQpC,EAAOoC,KAAKzG,QAAQ,KAAO,EAC1CqE,EAAOoC,KAAKmE,MAAM,MAAO,CACtCgC,KACFvI,EAAOmC,KAAOoG,EAAWR,QACzB/H,EAAOoC,KAAOpC,EAAOsC,SAAWiG,EAAWR,SAyB/C,MArBAG,GAAaA,GAAelI,EAAOoC,MAAQgG,EAAQlT,OAE/CgT,IAAeU,GACjBR,EAAQnB,QAAQ,IAGbmB,EAAQlT,OAIX8K,EAAOyC,SAAW2F,EAAQlB,KAAK,MAH/BlH,EAAOyC,SAAW,KAClBzC,EAAO0C,KAAO,MAMXgB,EAAO1D,EAAOyC,WAAciB,EAAO1D,EAAOuC,UAC7CvC,EAAO0C,MAAQ1C,EAAOyC,SAAWzC,EAAOyC,SAAW,KACpCzC,EAAOuC,OAASvC,EAAOuC,OAAS,KAEjDvC,EAAOmC,KAAOmB,EAASnB,MAAQnC,EAAOmC,KACtCnC,EAAOkC,QAAUlC,EAAOkC,SAAWoB,EAASpB,QAC5ClC,EAAO2C,KAAO3C,EAAOoD,SACdpD,GAGTgC,EAAI7N,UAAUiS,UAAY,WACxB,GAAIhE,GAAOhQ,KAAKgQ,KACZC,EAAOyB,EAAY4B,KAAKtD,EACxBC,KACFA,EAAOA,EAAK,GACC,MAATA,IACFjQ,KAAKiQ,KAAOA,EAAKb,OAAO,IAE1BY,EAAOA,EAAKZ,OAAO,EAAGY,EAAKlN,OAASmN,EAAKnN,SAEvCkN,IAAMhQ,KAAKkQ,SAAWF,KNikCtB,SAASpQ,EAAQD,EAASQ,GAE/B,GAAIsW,IAA0D,SAAS7W,EAAQ8W;AAC/E,cOrvDC,SAASjX,GAgEV,QAASuK,GAAM3H,GACd,KAAMsU,YAAW5M,EAAO1H,IAWzB,QAASkE,GAAIY,EAAOyP,GAGnB,IAFA,GAAI9T,GAASqE,EAAMrE,OACf8K,KACG9K,KACN8K,EAAO9K,GAAU8T,EAAGzP,EAAMrE,GAE3B,OAAO8K,GAaR,QAASiJ,GAAU5P,EAAQ2P,GAC1B,GAAIE,GAAQ7P,EAAOkN,MAAM,KACrBvG,EAAS,EACTkJ,GAAMhU,OAAS,IAGlB8K,EAASkJ,EAAM,GAAK,IACpB7P,EAAS6P,EAAM,IAGhB7P,EAASA,EAAOwF,QAAQsK,EAAiB,IACzC,IAAIC,GAAS/P,EAAOkN,MAAM,KACtB8C,EAAU1Q,EAAIyQ,EAAQJ,GAAI9B,KAAK,IACnC,OAAOlH,GAASqJ,EAgBjB,QAASC,GAAWjQ,GAMnB,IALA,GAGI/F,GACAiW,EAJAC,KACAC,EAAU,EACVvU,EAASmE,EAAOnE,OAGHA,EAAVuU,GACNnW,EAAQ+F,EAAOwN,WAAW4C,KACtBnW,GAAS,OAAmB,OAATA,GAA6B4B,EAAVuU,GAEzCF,EAAQlQ,EAAOwN,WAAW4C,KACF,QAAX,MAARF,GACJC,EAAOhL,OAAe,KAARlL,IAAkB,KAAe,KAARiW,GAAiB,QAIxDC,EAAOhL,KAAKlL,GACZmW,MAGDD,EAAOhL,KAAKlL,EAGd,OAAOkW,GAWR,QAASE,GAAWnQ,GACnB,MAAOZ,GAAIY,EAAO,SAASjG,GAC1B,GAAIkW,GAAS,EAOb,OANIlW,GAAQ,QACXA,GAAS,MACTkW,GAAUG,EAAmBrW,IAAU,GAAK,KAAQ,OACpDA,EAAQ,MAAiB,KAARA,GAElBkW,GAAUG,EAAmBrW,KAE3B4T,KAAK,IAYT,QAAS0C,GAAaC,GACrB,MAAqB,IAAjBA,EAAY,GACRA,EAAY,GAEC,GAAjBA,EAAY,GACRA,EAAY,GAEC,GAAjBA,EAAY,GACRA,EAAY,GAEb9J,EAcR,QAAS+J,GAAaC,EAAOC,GAG5B,MAAOD,GAAQ,GAAK,IAAc,GAARA,KAAwB,GAARC,IAAc,GAQzD,QAASC,GAAMC,EAAOC,EAAWC,GAChC,GAAIxD,GAAI,CAGR,KAFAsD,EAAQE,EAAYC,EAAMH,EAAQI,GAAQJ,GAAS,EACnDA,GAASG,EAAMH,EAAQC,GACOD,EAAQK,EAAgBC,GAAQ,EAAG5D,GAAK7G,EACrEmK,EAAQG,EAAMH,EAAQK,EAEvB,OAAOF,GAAMzD,GAAK2D,EAAgB,GAAKL,GAASA,EAAQO,IAUzD,QAASC,GAAOC,GAEf,GAEIC,GAIAC,EACAlE,EACA3L,EACA8P,EACAC,EACAnE,EACAmD,EACAiB,EAEAC,EAfAzB,KACA0B,EAAcP,EAAMzV,OAEpBF,EAAI,EACJmW,EAAIC,EACJC,EAAOC,CAqBX,KALAT,EAAQF,EAAM1E,YAAYsF,GACd,EAARV,IACHA,EAAQ,GAGJlE,EAAI,EAAOkE,EAAJlE,IAAaA,EAEpBgE,EAAM9D,WAAWF,IAAM,KAC1BvK,EAAM,aAEPoN,EAAOhL,KAAKmM,EAAM9D,WAAWF,GAM9B,KAAK3L,EAAQ6P,EAAQ,EAAIA,EAAQ,EAAI,EAAWK,EAARlQ,GAAgD,CAOvF,IAAK8P,EAAO9V,EAAG+V,EAAI,EAAGnE,EAAI7G,EAErB/E,GAASkQ,GACZ9O,EAAM,iBAGP2N,EAAQH,EAAae,EAAM9D,WAAW7L,OAElC+O,GAAShK,GAAQgK,EAAQM,GAAOmB,EAASxW,GAAK+V,KACjD3O,EAAM,YAGPpH,GAAK+U,EAAQgB,EACbC,EAASK,GAALzE,EAAY6E,EAAQ7E,GAAKyE,EAAOb,EAAOA,EAAO5D,EAAIyE,IAE1CL,EAARjB,GAf+CnD,GAAK7G,EAmBxDkL,EAAalL,EAAOiL,EAChBD,EAAIV,EAAMmB,EAASP,IACtB7O,EAAM,YAGP2O,GAAKE,CAINL,GAAMpB,EAAOtU,OAAS,EACtBmW,EAAOpB,EAAMjV,EAAI8V,EAAMF,EAAa,GAARE,GAIxBT,EAAMrV,EAAI4V,GAAOY,EAASL,GAC7B/O,EAAM,YAGP+O,GAAKd,EAAMrV,EAAI4V,GACf5V,GAAK4V,EAGLpB,EAAOb,OAAO3T,IAAK,EAAGmW,GAIvB,MAAOzB,GAAWF,GAUnB,QAASnC,GAAOsD,GACf,GAAIQ,GACAjB,EACAwB,EACAC,EACAN,EACA1E,EACA9T,EACA+Y,EACAhF,EACAoE,EACAa,EAGAX,EAEAY,EACAb,EACAc,EANAvC,IAoBJ,KAXAmB,EAAQrB,EAAWqB,GAGnBO,EAAcP,EAAMzV,OAGpBiW,EAAIC,EACJlB,EAAQ,EACRmB,EAAOC,EAGF3E,EAAI,EAAOuE,EAAJvE,IAAmBA,EAC9BkF,EAAelB,EAAMhE,GACF,IAAfkF,GACHrC,EAAOhL,KAAKmL,EAAmBkC,GAejC,KAXAH,EAAiBC,EAAcnC,EAAOtU,OAMlCyW,GACHnC,EAAOhL,KAAK+M,GAIWL,EAAjBQ,GAA8B,CAIpC,IAAK7Y,EAAI2Y,EAAQ7E,EAAI,EAAOuE,EAAJvE,IAAmBA,EAC1CkF,EAAelB,EAAMhE,GACjBkF,GAAgBV,GAAoBtY,EAAfgZ,IACxBhZ,EAAIgZ,EAcN,KARAC,EAAwBJ,EAAiB,EACrC7Y,EAAIsY,EAAId,GAAOmB,EAAStB,GAAS4B,IACpC1P,EAAM,YAGP8N,IAAUrX,EAAIsY,GAAKW,EACnBX,EAAItY,EAEC8T,EAAI,EAAOuE,EAAJvE,IAAmBA,EAO9B,GANAkF,EAAelB,EAAMhE,GAEFwE,EAAfU,KAAsB3B,EAAQsB,GACjCpP,EAAM,YAGHyP,GAAgBV,EAAG,CAEtB,IAAKS,EAAI1B,EAAOtD,EAAI7G,EACnBiL,EAASK,GAALzE,EAAY6E,EAAQ7E,GAAKyE,EAAOb,EAAOA,EAAO5D,EAAIyE,IAC9CL,EAAJY,GAFyChF,GAAK7G,EAKlDgM,EAAUH,EAAIZ,EACdC,EAAalL,EAAOiL,EACpBxB,EAAOhL,KACNmL,EAAmBG,EAAakB,EAAIe,EAAUd,EAAY,KAE3DW,EAAIvB,EAAM0B,EAAUd,EAGrBzB,GAAOhL,KAAKmL,EAAmBG,EAAa8B,EAAG,KAC/CP,EAAOpB,EAAMC,EAAO4B,EAAuBJ,GAAkBC,GAC7DzB,EAAQ,IACNwB,IAIFxB,IACAiB,EAGH,MAAO3B,GAAOtC,KAAK,IAcpB,QAAS8E,GAAUrB,GAClB,MAAO1B,GAAU0B,EAAO,SAAStR,GAChC,MAAO4S,GAAcC,KAAK7S,GACvBqR,EAAOrR,EAAO6M,MAAM,GAAGN,eACvBvM,IAeL,QAAS8S,GAAQxB,GAChB,MAAO1B,GAAU0B,EAAO,SAAStR,GAChC,MAAO+S,GAAcF,KAAK7S,GACvB,OAASgO,EAAOhO,GAChBA,IAvdL,GAIIgT,IAJgC,gBAAXta,IAAuBA,IAC9CA,EAAQua,UAAYva,EACY,gBAAVC,IAAsBA,IAC5CA,EAAOsa,UAAYta,EACa,gBAAV8W,IAAsBA,IAE7CuD,EAAWvD,SAAWuD,GACtBA,EAAWE,SAAWF,GACtBA,EAAWjM,OAASiM,KAEpBxa,EAAOwa,EAQR,IAAIzI,GAGJ4H,EAAS,WAGTzL,EAAO,GACP0L,EAAO,EACPjB,EAAO,GACPC,EAAO,GACPH,EAAO,IACPgB,EAAc,GACdF,EAAW,IACXG,EAAY,IAGZU,EAAgB,QAChBG,EAAgB,eAChBjD,EAAkB,4BAGlBhN,GACCqQ,SAAY,kDACZC,YAAa,iDACbC,gBAAiB,iBAIlBnC,EAAgBxK,EAAO0L,EACvBpB,EAAQsC,KAAKtC,MACbV,EAAqBiD,OAAOC,YA8a5BjJ,IAMCkJ,QAAW,QAQXC,MACCrC,OAAUpB,EACVjC,OAAUqC,GAEXgB,OAAUA,EACVrD,OAAUA,EACV8E,QAAWA,EACXH,UAAaA,GAWbnD,EAAmB,WAClB,MAAOjF,IACPhR,KAAAb,EAAAQ,EAAAR,EAAAC,KAAAsE,SAAAuS,IAAA7W,EAAAD,QAAA8W,KAaFvS,UPmvD6B1D,KAAKb,EAASQ,EAAoB,GAAGP,GAAU,WAAa,MAAOI,WAI3F,SAASJ,EAAQD,GAEtB,YQ1wEDC,GAAOD,QAAU,SAASC,GAQzB,MAPIA,GAAOgb,kBACVhb,EAAOib,UAAY,aACnBjb,EAAOkb,SAEPlb,EAAOmF,YACPnF,EAAOgb,gBAAkB,GAEnBhb,IRixEF,SAASA,EAAQD,EAASQ,GSzxEhC,YAEAR,GAAQ2Y,OAAS3Y,EAAQqP,MAAQ7O,EAAQ,GACzCR,EAAQsV,OAAStV,EAAQiH,UAAYzG,EAAQ,IT+xEvC,SAASP,EAAQD,GU7wEvB,YAKA,SAASqD,GAAenC,EAAKka,GAC3B,MAAO5Z,QAAOY,UAAUiB,eAAexC,KAAKK,EAAKka,GAGnDnb,EAAOD,QAAU,SAASqb,EAAIC,EAAKC,EAAI7U,GACrC4U,EAAMA,GAAO,IACbC,EAAKA,GAAM,GACX,IAAIra,KAEJ,IAAkB,gBAAPma,IAAiC,IAAdA,EAAGlY,OAC/B,MAAOjC,EAGT,IAAIsa,GAAS,KACbH,GAAKA,EAAG7G,MAAM8G,EAEd,IAAIG,GAAU,GACV/U,IAAsC,gBAApBA,GAAQ+U,UAC5BA,EAAU/U,EAAQ+U,QAGpB,IAAIC,GAAML,EAAGlY,MAETsY,GAAU,GAAKC,EAAMD,IACvBC,EAAMD,EAGR,KAAK,GAAIxY,GAAI,EAAOyY,EAAJzY,IAAWA,EAAG,CAC5B,GAEI0Y,GAAMC,EAAM/G,EAAGtJ,EAFfsQ,EAAIR,EAAGpY,GAAG6J,QAAQ0O,EAAQ,OAC1BM,EAAMD,EAAEjS,QAAQ2R,EAGhBO,IAAO,GACTH,EAAOE,EAAEpM,OAAO,EAAGqM,GACnBF,EAAOC,EAAEpM,OAAOqM,EAAM,KAEtBH,EAAOE,EACPD,EAAO,IAGT/G,EAAIT,mBAAmBuH,GACvBpQ,EAAI6I,mBAAmBwH,GAElBvY,EAAenC,EAAK2T,GAEd3M,MAAMC,QAAQjH,EAAI2T,IAC3B3T,EAAI2T,GAAGpI,KAAKlB,GAEZrK,EAAI2T,IAAM3T,EAAI2T,GAAItJ,GAJlBrK,EAAI2T,GAAKtJ,EAQb,MAAOrK,KV4yEH,SAASjB,EAAQD,GWr2EvB,YAEA,IAAI+b,GAAqB,SAASxQ,GAChC,aAAeA,IACb,IAAK,SACH,MAAOA,EAET,KAAK,UACH,MAAOA,GAAI,OAAS,OAEtB,KAAK,SACH,MAAOyQ,UAASzQ,GAAKA,EAAI,EAE3B,SACE,MAAO,IAIbtL,GAAOD,QAAU,SAASkB,EAAKoa,EAAKC,EAAI5R,GAOtC,MANA2R,GAAMA,GAAO,IACbC,EAAKA,GAAM,IACC,OAARra,IACFA,EAAMqD,QAGW,gBAARrD,GACFM,OAAOuI,KAAK7I,GAAK0F,IAAI,SAASiO,GACnC,GAAIoH,GAAKvG,mBAAmBqG,EAAmBlH,IAAM0G,CACrD,OAAIrT,OAAMC,QAAQjH,EAAI2T,IACb3T,EAAI2T,GAAGjO,IAAI,SAAS2E,GACzB,MAAO0Q,GAAKvG,mBAAmBqG,EAAmBxQ,MACjD4J,KAAKmG,GAEDW,EAAKvG,mBAAmBqG,EAAmB7a,EAAI2T,OAEvDM,KAAKmG,GAIL3R,EACE+L,mBAAmBqG,EAAmBpS,IAAS4R,EAC/C7F,mBAAmBqG,EAAmB7a,IAF3B,KXi4Ed,SAASjB,EAAQD,EAASQ,GY77EhC,YA4DA,SAAS0b,GAAWpa,EAAU4E,EAASoH,EAAKjL,GAC1C,MAAOxC,MAAK6N,eAAepM,EAAUe,EAAQ6D,EAASoH,GAAKqO,MA6H7D,QAASC,GAAwBta,EAAUe,EAAQ6D,EAASoH,EAAK5J,EAAU+J,GACzE,IAAIpL,EAAOmH,YAA8CzF,SAAhC1B,EAAOmH,WAAW9F,GAG3C,GAAIrB,EAAOqK,wBAAyB,EAClCe,EAAOoO,UACL1S,KAAM,uBACN2S,SAAUpY,EACVqY,QAAS,sBAAwBvV,KAAKC,UAAU/C,GAAY,6CAEzD,CACL,GAAIgJ,GAAuBrK,EAAOqK,yBAC9B0C,EAAMvP,KAAK6N,eAAepM,EAASoC,GAAWgJ,EAAsBxG,EAASoH,EAAI0O,UAAUtP,EAAsBhJ,GAClH0L,GAAI9N,WAAamM,EAAOnM,SAASoC,KAAW+J,EAAOnM,SAASoC,GAAY0L,EAAI9N,UAC/EmM,EAAOiB,aAAaU,IAscxB,QAAS6M,GAAYlR,EAAGtI,EAAGyZ,GACzB,GAAI9H,GAAG8G,EAAMgB,EAAEvZ,MACf,KAAKyR,EAAI3R,EAAI,EAAGyY,EAASA,EAAJ9G,EAASA,IAC5B,GAAIlJ,EAAQiB,kBAAkBpB,EAAGmR,EAAE9H,IACjC,OAAO,CAGX,QAAO,EAnpBT,GAAIlJ,GAAUlL,EAAQ,IAGlB4K,EAAkBM,EAAQN,gBAE1BE,EAAcI,EAAQJ,YAEtBG,IAEJA,GAAUsD,kBAERpO,IAAM,EACNS,WAAW,EACXuF,aAAe,EACfL,OAAS,EAETqW,kBAAoB,EACpBC,kBAAoB,EACpB5P,iBAAmB,EAEnB6P,SAAW,EACXvQ,MAAQ,EACRwQ,WAAW,EAMb,IAAI9Q,GAAaP,EAAUO,aAU3BA,GAAWtJ,KAAO,SAAuBZ,EAAUe,EAAQ6D,EAASoH,GAElE,GAAiBvJ,SAAbzC,EACF,MAAO,KAET,IAAImM,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,GACxDhC,EAASjJ,EAAOH,eAAgBwF,OAASrF,EAAOH,MAAQG,EAAOH,KACnE,KAAKoJ,EAAMiR,KAAK1c,KAAKsP,SAAS1J,KAAK5F,KAAMyB,EAAUe,EAAQ6D,EAASoH,IAAO,CACzE,GAAIkP,GAAOlR,EAAMlF,IAAI,SAAU2E,GAC7B,MAAOA,GAAE5K,IAAO,IAAM4K,EAAE5K,GAAK,KAAS4K,EAAE,IAE1C0C,GAAOoO,UACL1S,KAAM,OACN2S,SAAUU,EACVT,QAAS,uBAAyBS,IAGtC,MAAO/O,IAeTjC,EAAWwB,MAAQ,SAAwB1L,EAAUe,EAAQ6D,EAASoH,GAEpE,GAAiBvJ,SAAbzC,EACF,MAAO,KAET,IAAImM,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,EAC5D,MAAMjL,EAAO2K,gBAAiBtF,QAC5B,KAAM,IAAIoD,GAAY,yBAExB,KAAKzI,EAAO2K,MAAMuP,KAAKb,EAAWjW,KAAK5F,KAAMyB,EAAU4E,EAASoH,IAAO,CACrE,GAAIkP,GAAOna,EAAO2K,MAAM5G,IAAI,SAAU2E,EAAGtI,GACvC,MAAQsI,GAAE5K,IAAO,IAAM4K,EAAE5K,GAAK,KAAU4K,EAAEjF,OAASU,KAAKC,UAAUsE,EAAEjF,QAAYiF,EAAQ,MAAM,IAAMA,EAAQ,KAAI,KAAS,cAActI,EAAE,KAE3IgL,GAAOoO,UACL1S,KAAM,QACN2S,SAAUU,EACVT,QAAS,iBAAmBS,EAAK7H,KAAK,OAG1C,MAAOlH,IAWTjC,EAAWuB,MAAQ,SAAwBzL,EAAUe,EAAQ6D,EAASoH,GAEpE,GAAiBvJ,SAAbzC,EACF,MAAO,KAET,MAAMe,EAAO0K,gBAAiBrF,QAC5B,KAAM,IAAIoD,GAAY,yBAExB,IAAI2C,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,GACxDO,EAAOhO,IAaX,OAZAwC,GAAO0K,MAAMgB,QAAQ,SAAShD,EAAGtI,GAC/B,GAAIkZ,GAAQ9N,EAAKH,eAAepM,EAAUyJ,EAAG7E,EAASoH,EACtD,KAAIqO,EAAMA,MAAM,CACd,GAAIc,GAAO1R,EAAE5K,IAAO,IAAM4K,EAAE5K,GAAK,KAAU4K,EAAEjF,OAASU,KAAKC,UAAUsE,EAAEjF,QAAYiF,EAAQ,MAAM,IAAMA,EAAQ,KAAI,KAAS,cAActI,EAAE,GAC5IgL,GAAOoO,UACL1S,KAAM,QACN2S,UAAY3b,GAAIsc,EAAK9Z,OAAQgZ,EAAM/R,OAAOjH,OAAQgZ,MAAOA,GACzDI,QAAS,+BAAiCU,EAAM,SAAWd,EAAM/R,OAAOjH,OAAS,eAEnF8K,EAAOiB,aAAaiN,MAGjBlO,GAWTjC,EAAWyB,MAAQ,SAAwB3L,EAAUe,EAAQ6D,EAASoH,GAEpE,GAAiBvJ,SAAbzC,EACF,MAAO,KAET,MAAMe,EAAO4K,gBAAiBvF,QAC5B,KAAM,IAAIoD,GAAY,yBAExB,IAAI2C,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,GACxDoP,EAAQra,EAAO4K,MAAMvE,OAAOgT,EAAWjW,KAAK5F,KAAMyB,EAAU4E,EAASoH,IAAM3K,OAC3E6Z,EAAOna,EAAO4K,MAAM7G,IAAI,SAAU2E,EAAGtI,GACvC,MAAQsI,GAAE5K,IAAO,IAAM4K,EAAE5K,GAAK,KAAU4K,EAAEjF,OAASU,KAAKC,UAAUsE,EAAEjF,QAAYiF,EAAQ,MAAM,IAAMA,EAAQ,KAAI,KAAS,cAActI,EAAE,KAS3I,OAPY,KAARia,GACFjP,EAAOoO,UACL1S,KAAM,QACN2S,SAAUU,EACVT,QAAS,2BAA6BS,EAAK7H,KAAK,OAG7ClH,GAWTjC,EAAWhC,WAAa,SAA6BlI,EAAUe,EAAQ6D,EAASoH,GAC9E,GAAgBvJ,SAAbzC,GAA4BA,YAAoBN,QAAnD,CACA,GAAIyM,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,GACxD9D,EAAanH,EAAOmH,cACxB,KAAK,GAAI9F,KAAY8F,GAAY,CAC/B,GAAIoR,IAAQtZ,GAAYyC,SAAczC,EAASoC,GAC3C0L,EAAMvP,KAAK6N,eAAekN,EAAMpR,EAAW9F,GAAWwC,EAASoH,EAAI0O,UAAUxS,EAAW9F,GAAWA,GACpG0L,GAAI9N,WAAamM,EAAOnM,SAASoC,KAAW+J,EAAOnM,SAASoC,GAAY0L,EAAI9N,UAC/EmM,EAAOiB,aAAaU,GAEtB,MAAO3B,KAoCTjC,EAAWoB,kBAAoB,SAAoCtL,EAAUe,EAAQ6D,EAASoH,GAC5F,GAAgBvJ,SAAbzC,GACCzB,KAAKyL,MAAM7H,OAAOnC,GAAtB,CACA,GAAImM,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,GACxDV,EAAoBvK,EAAOuK,qBAE/B,KAAK,GAAIlJ,KAAYpC,GAAU,CAC7B,GAAIqY,IAAO,CACX,KAAK,GAAIgD,KAAW/P,GAAmB,CACrC,GAAIgQ,GAAO,GAAIC,QAAOF,EACtB,IAAKC,EAAKjD,KAAKjW,GAAf,CAGAiW,GAAO,CACP,IAAIvK,GAAMvP,KAAK6N,eAAepM,EAASoC,GAAWkJ,EAAkB+P,GAAUzW,EAASoH,EAAI0O,UAAUpP,EAAkB+P,GAAUjZ,GAC9H0L,GAAI9N,WAAamM,EAAOnM,SAASoC,KAAW+J,EAAOnM,SAASoC,GAAY0L,EAAI9N,UAC/EmM,EAAOiB,aAAaU,IAElBuK,GACFiC,EAAuBvb,KAAKR,KAAMyB,EAAUe,EAAQ6D,EAASoH,EAAK5J,EAAU+J,GAIhF,MAAOA,KAWTjC,EAAWkB,qBAAuB,SAAuCpL,EAAUe,EAAQ6D,EAASoH,GAClG,GAAgBvJ,SAAbzC,GACCzB,KAAKyL,MAAM7H,OAAOnC,GAAtB,CAEA,GAAIe,EAAOuK,kBACT,MAAO,KAET,IAAIa,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,EAC5D,KAAK,GAAI5J,KAAYpC,GACnBsa,EAAuBvb,KAAKR,KAAMyB,EAAUe,EAAQ6D,EAASoH,EAAK5J,EAAU+J,EAE9E,OAAOA,KASTjC,EAAWsR,cAAgB,SAAgCxb,EAAUe,EAAQ6D,EAASoH,GACpF,IAAKhM,GAAgC,gBAAbA,GACtB,MAAO,KAET,IAAImM,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,GACxD/D,EAAOvI,OAAOuI,KAAKjI,EAQvB,OAPMiI,GAAK5G,QAAUN,EAAOya,eAC1BrP,EAAOoO,UACL1S,KAAM,gBACN2S,SAAUzZ,EAAOya,cACjBf,QAAS,4CAA8C1Z,EAAOya,gBAG3DrP,GASTjC,EAAWuR,cAAgB,SAAgCzb,EAAUe,EAAQ6D,EAASoH,GACpF,IAAKhM,GAAgC,gBAAbA,GACtB,MAAO,KAET,IAAImM,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,GACxD/D,EAAOvI,OAAOuI,KAAKjI,EAQvB,OAPMiI,GAAK5G,QAAUN,EAAO0a,eAC1BtP,EAAOoO,UACL1S,KAAM,gBACN2S,SAAUzZ,EAAO0a,cACjBhB,QAAS,4CAA8C1Z,EAAO0a,gBAG3DtP,GAWTjC,EAAWxD,MAAQ,SAAwB1G,EAAUe,EAAQ6D,EAASoH,GACpE,KAAMhM,YAAoBoG,QACxB,MAAO,KAET,IAAImG,GAAOhO,KACP4N,EAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,EAC5D,OAAiBvJ,UAAbzC,GAA2Be,EAAO2F,OAGtC1G,EAAS0b,MAAM,SAAUjc,EAAO0B,GAC9B,GAAIuF,GAAS3F,EAAO2F,gBAAiBN,OAAUrF,EAAO2F,MAAMvF,IAAMJ,EAAOmK,gBAAmBnK,EAAO2F,KACnG,IAAcjE,SAAViE,EACF,OAAO,CAET,IAAIA,KAAU,EAKZ,MAJAyF,GAAOoO,UACL1S,KAAM,QACN4S,QAAS,mCAEJ,CAET,IAAI3M,GAAMvB,EAAKH,eAAe3M,EAAOiH,EAAO9B,EAASoH,EAAI0O,UAAUhU,EAAOvF,GAG1E,OAFG2M,GAAI9N,WAAamM,EAAOnM,SAASmB,KAAIgL,EAAOnM,SAASmB,GAAK2M,EAAI9N,UACjEmM,EAAOiB,aAAaU,IACb,IAEF3B,GAnBEA,GA4BXjC,EAAWyR,QAAU,SAA0B3b,EAAUe,EAAQ6D,EAASoH,GACxE,GAAwB,gBAAbhM,GACT,MAAO,KAET,IAAImM,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,GACxDqO,GAAQ,CAaZ,OAXEA,GADEtZ,EAAO8Z,kBAAoB9Z,EAAO8Z,oBAAqB,EACjD7a,EAAWe,EAAO4a,QAElB3b,GAAYe,EAAO4a,QAExBtB,GACHlO,EAAOoO,UACL1S,KAAM,UACN2S,SAAUzZ,EAAO4a,QACjBlB,QAAS,gCAAkC1Z,EAAO4a,UAG/CxP,GASTjC,EAAW0R,QAAU,SAA0B5b,EAAUe,EAAQ6D,EAASoH,GACxE,GAAwB,gBAAbhM,GACT,MAAO,KAET,IACIqa,GADAlO,EAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,EAc5D,OAXEqO,GADEtZ,EAAO+Z,kBAAoB/Z,EAAO+Z,oBAAqB,EACjD9a,EAAWe,EAAO6a,QAElB5b,GAAYe,EAAO6a,QAExBvB,GACHlO,EAAOoO,UACL1S,KAAM,UACN2S,SAAUzZ,EAAO6a,QACjBnB,QAAS,gCAAkC1Z,EAAO6a,UAG/CzP,GAWTjC,EAAW2R,YAAc,SAA8B7b,EAAUe,EAAQ6D,EAASoH,GAChF,GAAwB,gBAAbhM,GACT,MAAO,KAGT,IAA0B,GAAtBe,EAAO8a,YACT,KAAM,IAAIrS,GAAY,6BAGxB,IAAI2C,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,EAQ5D,OAPIhM,GAAWe,EAAO8a,YAAc,GAClC1P,EAAOoO,UACL1S,KAAM,cACN2S,SAAUzZ,EAAO8a,YACjBpB,QAAS,qCAAuCvV,KAAKC,UAAUpE,EAAO8a,eAGnE1P,GAWTjC,EAAW4R,WAAa,SAA6B9b,EAAUe,EAAQ6D,EAASoH,GAC9E,GAAwB,gBAAbhM,GACT,MAAO,KAGT,IAAyB,GAArBe,EAAO+a,WACT,KAAM,IAAItS,GAAY,4BAGxB,IAAI2C,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,EAQ5D,OAPIhM,GAAWe,EAAO+a,WAAa,GACjC3P,EAAOoO,UACL1S,KAAM,aACN2S,SAAWzZ,EAAO+a,WAClBrB,QAAS,uCAAyCvV,KAAKC,UAAUpE,EAAO+a,cAGrE3P,GASTjC,EAAWvG,SAAW,SAA2B3D,EAAUe,EAAQ6D,EAASoH,GAC1E,GAAIG,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,EAiB5D,OAhBiBvJ,UAAbzC,GAA0Be,EAAO4C,YAAa,EAChDwI,EAAOoO,UACL1S,KAAM,WACN4S,QAAS,gBAEFza,GAA8B,gBAAXA,IAAuBoG,MAAMC,QAAQtF,EAAO4C,WACxE5C,EAAO4C,SAAS8I,QAAQ,SAAS6K,GACd7U,SAAdzC,EAASsX,IACVnL,EAAOoO,UACL1S,KAAM,WACN2S,SAAUlD,EACVmD,QAAS,qBAAuBvV,KAAKC,UAAUmS,OAKhDnL,GASTjC,EAAWmR,QAAU,SAA0Brb,EAAUe,EAAQ6D,EAASoH,GACxE,GAAwB,gBAAbhM,GACT,MAAO,KAET,IAAImM,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,EAQ5D,OAPKhM,GAASgS,MAAMjR,EAAOsa,UACzBlP,EAAOoO,UACL1S,KAAM,UACN2S,SAAUzZ,EAAOsa,QACjBZ,QAAS,0BAA4BvV,KAAKC,UAAUpE,EAAOsa,WAGxDlP,GAuBTjC,EAAWqF,OAAS,SAAyBvP,EAAUe,EAAQ6D,EAASoH,GACtE,GAA0B,gBAAbhM,GACX,MAAO,KAET,IAAImM,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,EAQ5D,OAPKpC,GAAQmS,SAAS/b,EAAUe,EAAOwO,SACrCpD,EAAOoO,UACL1S,KAAM,SACN2S,SAAUzZ,EAAOwO,OACjBkL,QAAS,2BAA6BvV,KAAKC,UAAUpE,EAAOwO,QAAU,YAGnEpD,GASTjC,EAAWtD,UAAY,SAA4B5G,EAAUe,EAAQ6D,EAASoH,GAC5E,GAA0B,gBAAbhM,GACX,MAAO,KAET,IAAImM,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,EAQ5D,OAPMhM,GAASqB,QAAUN,EAAO6F,WAC9BuF,EAAOoO,UACL1S,KAAM,YACN2S,SAAUzZ,EAAO6F,UACjB6T,QAAS,mCAAqC1Z,EAAO6F,YAGlDuF,GASTjC,EAAW8R,UAAY,SAA4Bhc,EAAUe,EAAQ6D,EAASoH,GAC5E,GAA0B,gBAAbhM,GACX,MAAO,KAET,IAAImM,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,EAQ5D,OAPMhM,GAASqB,QAAUN,EAAOib,WAC9B7P,EAAOoO,UACL1S,KAAM,YACN2S,SAAUzZ,EAAOib,UACjBvB,QAAS,mCAAqC1Z,EAAOib,YAGlD7P,GASTjC,EAAW+R,SAAW,SAA2Bjc,EAAUe,EAAQ6D,EAASoH,GAC1E,KAAMhM,YAAoBoG,QACxB,MAAO,KAET,IAAI+F,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,EAQ5D,OAPMhM,GAASqB,QAAUN,EAAOkb,UAC9B9P,EAAOoO,UACL1S,KAAM,WACN2S,SAAUzZ,EAAOkb,SACjBxB,QAAS,mCAAqC1Z,EAAOkb,WAGlD9P,GASTjC,EAAWgS,SAAW,SAA2Blc,EAAUe,EAAQ6D,EAASoH,GAC1E,KAAMhM,YAAoBoG,QACxB,MAAO,KAET,IAAI+F,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,EAQ5D,OAPMhM,GAASqB,QAAUN,EAAOmb,UAC9B/P,EAAOoO,UACL1S,KAAM,WACN2S,SAAUzZ,EAAOmb,SACjBzB,QAAS,mCAAqC1Z,EAAOmb,WAGlD/P,GAWTjC,EAAWiS,YAAc,SAA8Bnc,EAAUe,EAAQ6D,EAASoH,GAKhF,QAAS2O,GAAYlR,EAAGtI,EAAGyZ,GACzB,IAAK,GAAI9H,GAAI3R,EAAI,EAAG2R,EAAI8H,EAAEvZ,OAAQyR,IAAK,GAAIlJ,EAAQiB,kBAAkBpB,EAAGmR,EAAE9H,IACxE,OAAO,CAET,QAAO,EART,GAAI3G,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,EAC5D,OAAMhM,aAAoBoG,QASrBpG,EAAS0b,MAAMf,IAClBxO,EAAOoO,UACL1S,KAAM,cACN4S,QAAS,4BAGNtO,GAdEA,GAwCXjC,EAAWiS,YAAc,SAA8Bnc,EAAUe,EAAQ6D,EAASoH,GAChF,KAAMhM,YAAoBoG,QACxB,MAAO,KAET,IAAI+F,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,EAO5D,OANKhM,GAAS0b,MAAMf,IAClBxO,EAAOoO,UACL1S,KAAM,cACN4S,QAAS,4BAGNtO,GAWTjC,EAAWqB,aAAe,SAA+BvL,EAAUe,EAAQ6D,EAASoH,GAClF,IAAKhM,GAA+B,gBAAZA,GACtB,MAAO,KAET,IAAImM,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,EAC5D,KAAK,GAAI5J,KAAYrB,GAAOwK,aAC1B,GAA2B9I,SAAvBzC,EAASoC,GAAb,CAGA,GAAIga,GAAMrb,EAAOwK,aAAanJ,GAC1Bia,EAAerQ,EAAI0O,UAAU0B,EAAKha,EAItC,IAHkB,gBAAPga,KACTA,GAAOA,IAELA,YAAehW,OACjBgW,EAAI3P,QAAQ,SAAU6M,GACG7W,SAAnBzC,EAASsZ,IACXnN,EAAOoO,UAGL1S,KAAM,eACN2S,SAAU6B,EAAatP,aACvB0N,QAAS,YAAcnB,EAAO,2BAA6B+C,EAAatP,qBAIzE,CACL,GAAIe,GAAMvP,KAAK6N,eAAepM,EAAUoc,EAAKxX,EAASyX,EACnDlQ,GAAOnM,WAAa8N,EAAI9N,WAAUmM,EAAOnM,SAAW8N,EAAI9N,UACvD8N,GAAOA,EAAIxF,OAAOjH,SACpB8K,EAAOoO,UACL1S,KAAM,eACN2S,SAAU6B,EAAatP,aACvB0N,QAAS,wCAA0C4B,EAAatP,eAElEZ,EAAOiB,aAAaU,KAI1B,MAAO3B,IAUTjC,EAAW,QAAU,SAAuBlK,EAAUe,EAAQ6D,EAASoH,GACrE,KAAMjL,EAAO,iBAAmBqF,QAC9B,KAAM,IAAIoD,GAAY,wBAAyBzI,EAEjD,IAAiB0B,SAAbzC,EACF,MAAO,KAET,IAAImM,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,EAQ5D,OAPKjL,GAAO,QAAQka,KAAKrR,EAAQiB,kBAAkB1G,KAAK,KAAMnE,KAC5DmM,EAAOoO,UACL1S,KAAM,OACN2S,SAAUzZ,EAAO,QACjB0Z,QAAS,8BAAgC1Z,EAAO,QAAQsS,KAAK,OAG1DlH,GAWTjC,EAAW0B,IAAM1B,EAAWsB,SAAW,SAAsBxL,EAAUe,EAAQ6D,EAASoH,GACtF,GAAIO,GAAOhO,IACX,IAAckE,SAAXzC,EAAsB,MAAO,KAChC,IAAImM,GAAS,GAAI7C,GAAgBtJ,EAAUe,EAAQ6D,EAASoH,GACxDsQ,EAAWvb,EAAO6K,KAAO7K,EAAOyK,QACpC,OAAI8Q,IACCA,YAAoBlW,SAAQkW,GAAUA,IAC3CA,EAAS7P,QAAQ,SAAU7L,GACzB,GAAI2L,EAAKsB,SAAS7N,EAAUe,EAAQ6D,EAASoH,EAAKpL,GAAO,CACvD,GAAI2b,GAAW3b,GAAQA,EAAK/B,IAAO,IAAM+B,EAAK/B,GAAK,KAAQ+B,CAC3DuL,GAAOoO,UACL1S,KAAM,MACN2S,SAAU+B,EACV9B,QAAS,yBAA2B8B,OAInCpQ,GAZc,MAevBhO,EAAOD,QAAUyL,GZo8EX,SAASxL,EAAQD,EAASQ,GattGhC,YAEA,IAAI0L,GAAM1L,EAAQ,GAEd6K,EAAkBrL,EAAQqL,gBAAkB,SAA0BkR,EAASza,EAAUe,EAAQgM,EAAclF,EAAM2S,GACnHzN,IACFxO,KAAK6D,SAAW2K,GAEd0N,IACFlc,KAAKkc,QAAUA,GAEb1Z,IACEA,EAAOlC,GACTN,KAAKwC,OAASA,EAAOlC,GAErBN,KAAKwC,OAASA,GAGdf,IACFzB,KAAKyB,SAAWA,GAElBzB,KAAKsJ,KAAOA,EACZtJ,KAAKic,SAAWA,EAChBjc,KAAKiK,MAAQjK,KAAKie,WAGpBjT,GAAgBjJ,UAAUkc,SAAW,WACnC,MAAOje,MAAK6D,SAAW,IAAM7D,KAAKkc,QAGpC,IAAInR,GAAkBpL,EAAQoL,gBAAkB,SAAyBtJ,EAAUe,EAAQ6D,EAASoH,GAClGzN,KAAKyB,SAAWA,EAChBzB,KAAKwC,OAASA,EACdxC,KAAKwO,aAAef,EAAIe,aACxBxO,KAAK+J,UACL/J,KAAKke,WAAa7X,GAAWA,EAAQ6X,WAGvCnT,GAAgBhJ,UAAUia,SAAW,SAAkBmC,GACrD,GAAIC,EACJ,IAAqB,gBAAVD,GACTC,EAAM,GAAIpT,GAAgBmT,EAAQne,KAAKyB,SAAUzB,KAAKwC,OAAQxC,KAAKwO,kBAC9D,CACL,IAAK2P,EAAQ,KAAM,IAAI5R,OAAM,uBAC7B,KAAK4R,EAAOjC,QAAS,KAAM,IAAI3P,OAAM,wBACrC,KAAK4R,EAAO7U,KAAM,KAAM,IAAIiD,OAAM,yBAClC6R,GAAM,GAAIpT,GAAgBmT,EAAOjC,QAASlc,KAAKyB,SAAUzB,KAAKwC,OAAQxC,KAAKwO,aAAc2P,EAAO7U,KAAM6U,EAAOlC,UAG/G,GAAIjc,KAAKke,WACP,KAAME,EAGR,OADApe,MAAK+J,OAAOqC,KAAKgS,GACVA,GAGTrT,EAAgBhJ,UAAU8M,aAAe,SAAsBU,GAC7D,GAAkB,gBAAPA,IAAoBA,GAAOA,EAAI8O,cACxCre,KAAKgc,SAASzM,OACT,IAAIA,GAAOA,EAAIxF,OAAQ,CAC5B,GAAIuU,GAAOte,KAAK+J,MAChBwF,GAAIxF,OAAOmE,QAAQ,SAAUhD,GAC3BoT,EAAKlS,KAAKlB,OAKhBH,EAAgBhJ,UAAUkc,SAAW,SAAkB1O,GACrD,MAAOvP,MAAK+J,OAAOxD,IAAI,SAAS2E,EAAEtI,GAAI,MAAOA,GAAE,KAAKsI,EAAE+S,WAAW,OAASnJ,KAAK,KAGjF3T,OAAOC,eAAe2J,EAAgBhJ,UAAW,SAAWqC,IAAK,WAC/D,OAAQpE,KAAK+J,OAAOjH,SAQtB,IAAImI,GAActL,EAAQsL,YAAc,QAASA,GAAa2R,EAAKpa,GACjExC,KAAKkc,QAAUU,EACf5c,KAAKwC,OAASA,EACd+J,MAAM/L,KAAKR,KAAM4c,GACjBrQ,MAAMgS,kBAAkBve,KAAMiL,GAEhCA,GAAYlJ,UAAYZ,OAAOa,OAAOuK,MAAMxK,WACxCE,aAAcf,MAAO+J,EAAa5J,YAAY,GAC9CiI,MAAOpI,MAAO,cAAeG,YAAY,IAG7C,IAAIiK,GAAgB3L,EAAQ2L,cAAgB,SAAwB9I,EAAQ6D,EAASmI,EAAcb,EAAMpC,GACvGvL,KAAKwC,OAASA,EACdxC,KAAKqG,QAAUA,EACfrG,KAAKwO,aAAeA,EACpBxO,KAAK2N,KAAOA,EACZ3N,KAAKuL,QAAUA,EAGjBD,GAAcvJ,UAAUoK,QAAU,SAAkBxJ,GAClD,MAAOkJ,GAAIM,QAAQnM,KAAK2N,KAAMhL,IAGhC2I,EAAcvJ,UAAUoa,UAAY,SAAmB3Z,EAAQkL,GAC7D,GAAIc,GAA+BtK,SAAfwJ,EAA4B1N,KAAKwO,aAAexO,KAAKwO,aAAagQ,EAAW9Q,GAC7FC,EAAO9B,EAAIM,QAAQnM,KAAK2N,KAAMnL,EAAOlC,IAAI,IACzCmN,EAAM,GAAInC,GAAc9I,EAAQxC,KAAKqG,QAASmI,EAAcb,EAAMxM,OAAOa,OAAOhC,KAAKuL,SAIzF,OAHG/I,GAAOlC,KAAOmN,EAAIlC,QAAQoC,KAC3BF,EAAIlC,QAAQoC,GAAQnL,GAEfiL,EAGT,IAAIgR,GAAiB9e,EAAQ8e,gBAC3BjX,YAAa,+FACbiI,KAAQ,2CACRiP,KAAQ,sBAERC,MAAS,ySACTC,aAAc,8FACdC,KAAQ,0jCACRhT,IAAO,mCAEPiT,MAAS,6YAGT5O,SAAY,gIACZ6O,YAAa,gIAEbC,MAAS,cACTC,aAAgB,iBAChBC,eAAgB,SAAU3G,GACxB,MAAyB,gBAAVA,IAAuB4G,WAAW5G,KAAW6G,SAAS7G,EAAO,MAAQ8G,MAAM9G,IAE5F+G,MAAS,SAAU/G,GACjB,GAAI3K,IAAS,CACb,KACE,GAAIoP,QAAOzE,GACX,MAAOgH,GACP3R,GAAS,EAEX,MAAOA,IAET4R,MAAS,yBACTC,MAAS,6BAGXhB,GAAetD,OAASsD,EAAea,MACvCb,EAAe3B,QAAU2B,EAAea,MACxCb,EAAeiB,KAAOjB,EAAe,cAErC9e,EAAQ6d,SAAW,SAAmBjF,EAAOvH,GAC3C,GAA+B9M,SAA3Bua,EAAezN,GAAuB,CACxC,GAAIyN,EAAezN,YAAmBgM,QACpC,MAAOyB,GAAezN,GAAQ8I,KAAKvB,EAErC,IAAsC,kBAA3BkG,GAAezN,GACxB,MAAOyN,GAAezN,GAAQuH,GAGlC,OAAO,EAGT,IAAIiG,GAAa7e,EAAQ6e,WAAa,SAAqBvd,GAKzD,MAJAA,GAAMA,EAAIgd,WAILhd,EAAIwS,MAAM,cAAiBxS,EAAIwS,MAAM,SAGtCxS,EAAIwS,MAAM,SACL,IAAMxS,EAAM,IAEd,IAAM0F,KAAKC,UAAU3F,GAAO,IAL1B,IAAMA,EAQjBtB,GAAQ2M,kBAAoB,QAASA,GAAmB+P,EAAGsD,GACzD,SAAWtD,UAAasD,GACtB,OAAO,CAET,IAAItD,YAAaxU,OACf,MAAM8X,aAAa9X,OAGfwU,EAAEvZ,SAAW6c,EAAE7c,QACV,EAEFuZ,EAAEc,MAAM,SAAUjS,EAAGtI,GAC1B,MAAO0J,GAAkB+P,EAAEzZ,GAAI+c,EAAE/c,OAN1B,CASX,IAAiB,gBAANyZ,GAAgB,CACzB,IAAKA,IAAMsD,EACT,MAAOtD,KAAMsD,CAEf,IAAIC,GAAQze,OAAOuI,KAAK2S,GACpBwD,EAAQ1e,OAAOuI,KAAKiW,EACxB,OAAIC,GAAM9c,SAAW+c,EAAM/c,QAClB,EAEF8c,EAAMzC,MAAM,SAAUjS,GAC3B,MAAOoB,GAAkB+P,EAAEnR,GAAIyU,EAAEzU,MAGrC,MAAOmR,KAAMsD,GAGf/f,EAAOD,QAAQyO,UAAY,QAASA,GAAWzL,EAAQmd,GACrD,GAAI3Y,GAAQU,MAAMC,QAAQgY,GACtBC,EAAM5Y,SAkCV,OAhCIA,IACFxE,EAASA,MACTod,EAAMA,EAAIrX,OAAO/F,GACjBmd,EAAI5R,QAAQ,SAAUqR,EAAG3c,GACN,gBAAN2c,GACTQ,EAAInd,GAAKwL,EAAUzL,EAAOC,GAAI2c,GAEJ,KAAtB5c,EAAO4G,QAAQgW,IACjBQ,EAAI3T,KAAKmT,OAKX5c,GAA4B,gBAAXA,IACnBxB,OAAOuI,KAAK/G,GAAQuL,QAAQ,SAAUjN,GACpC8e,EAAI9e,GAAO0B,EAAO1B,KAGtBE,OAAOuI,KAAKoW,GAAK5R,QAAQ,SAAUjN,GACT,gBAAb6e,GAAI7e,IAAsB6e,EAAI7e,IAIlC0B,EAAO1B,GAGV8e,EAAI9e,GAAOmN,EAAUzL,EAAO1B,GAAM6e,EAAI7e,IANxC8e,EAAI9e,GAAO6e,EAAI7e,MAYd8e,GAUTpgB,EAAQ0P,cAAgB,SAAuB2Q,EAAG7R,GAGhD,IAFA,GACIqG,GADAsC,EAAQ3I,EAAEgG,MAAM,KAAKL,MAAM,GAEI,iBAApBU,EAAEsC,EAAMnB,UAAsB,CAC3C,GAAIoD,GAAIhF,mBAAmBS,EAAE/H,QAAQ,KAAK,KAAKA,QAAQ,MAAM,KAC7D,MAAMsM,IAAKiH,IAAI,MACfA,GAAIA,EAAEjH,GAER,MAAOiH,IAQTrgB,EAAQsgB,WAAa,SAAuB5D,GAG3C,MAAOA,GAAE9V,IAAI,SAAS2E,GAAI,MAAO,IAAImK,mBAAmBnK,GAAGuB,QAAQ,KAAK,SAAWqI,KAAK","file":"react-jsonschema-form-0.1.0.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSONSchemaForm\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"JSONSchemaForm\"] = factory(root[\"React\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSONSchemaForm\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"JSONSchemaForm\"] = factory(root[\"React\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _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; };\n\t\n\tvar _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; }; })();\n\t\n\tvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\t\n\tfunction _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; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _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; }\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _jsonschema = __webpack_require__(2);\n\t\n\tvar REQUIRED_FIELD_SYMBOL = \"*\";\n\t\n\tfunction defaultTypeValue(type) {\n\t switch (type) {\n\t case \"array\":\n\t return [];\n\t case \"boolean\":\n\t return false;\n\t case \"date-time\":\n\t return \"\";\n\t case \"number\":\n\t return 0;\n\t case \"object\":\n\t return {};\n\t case \"string\":\n\t return \"\";\n\t default:\n\t return undefined;\n\t }\n\t}\n\t\n\tfunction defaultFieldValue(formData, schema) {\n\t if (formData === null) {\n\t return defaultTypeValue(schema.type);\n\t }\n\t if (schema[\"default\"]) {\n\t return schema[\"default\"];\n\t }\n\t return formData;\n\t}\n\t\n\tvar Field = (function (_React$Component) {\n\t _inherits(Field, _React$Component);\n\t\n\t function Field() {\n\t _classCallCheck(this, Field);\n\t\n\t _get(Object.getPrototypeOf(Field.prototype), \"constructor\", this).apply(this, arguments);\n\t }\n\t\n\t _createClass(Field, [{\n\t key: \"render\",\n\t value: function render() {\n\t var _props = this.props;\n\t var type = _props.type;\n\t var children = _props.children;\n\t\n\t return _react2[\"default\"].createElement(\n\t \"div\",\n\t { className: \"field field-\" + type },\n\t _react2[\"default\"].createElement(\n\t \"label\",\n\t null,\n\t this.label,\n\t children\n\t )\n\t );\n\t }\n\t }, {\n\t key: \"label\",\n\t get: function get() {\n\t var _props2 = this.props;\n\t var label = _props2.label;\n\t var required = _props2.required;\n\t\n\t if (!label) {\n\t return null;\n\t }\n\t if (required) {\n\t return label + REQUIRED_FIELD_SYMBOL;\n\t }\n\t return label;\n\t }\n\t }]);\n\t\n\t return Field;\n\t})(_react2[\"default\"].Component);\n\t\n\tvar TextField = (function (_React$Component2) {\n\t _inherits(TextField, _React$Component2);\n\t\n\t function TextField() {\n\t _classCallCheck(this, TextField);\n\t\n\t _get(Object.getPrototypeOf(TextField.prototype), \"constructor\", this).apply(this, arguments);\n\t }\n\t\n\t _createClass(TextField, [{\n\t key: \"onChange\",\n\t value: function onChange(event) {\n\t this.props.onChange(event.target.value);\n\t }\n\t }, {\n\t key: \"render\",\n\t value: function render() {\n\t var _props3 = this.props;\n\t var schema = _props3.schema;\n\t var formData = _props3.formData;\n\t var label = _props3.label;\n\t var required = _props3.required;\n\t var placeholder = _props3.placeholder;\n\t\n\t return _react2[\"default\"].createElement(\n\t Field,\n\t { label: label, required: required,\n\t type: schema.type },\n\t _react2[\"default\"].createElement(\"input\", { type: \"text\",\n\t value: defaultFieldValue(formData, schema),\n\t placeholder: placeholder,\n\t required: required,\n\t onChange: this.onChange.bind(this) })\n\t );\n\t }\n\t }]);\n\t\n\t return TextField;\n\t})(_react2[\"default\"].Component);\n\t\n\tvar CheckboxField = (function (_React$Component3) {\n\t _inherits(CheckboxField, _React$Component3);\n\t\n\t function CheckboxField() {\n\t _classCallCheck(this, CheckboxField);\n\t\n\t _get(Object.getPrototypeOf(CheckboxField.prototype), \"constructor\", this).apply(this, arguments);\n\t }\n\t\n\t _createClass(CheckboxField, [{\n\t key: \"onChange\",\n\t value: function onChange(event) {\n\t this.props.onChange(event.target.checked);\n\t }\n\t }, {\n\t key: \"render\",\n\t value: function render() {\n\t var _props4 = this.props;\n\t var schema = _props4.schema;\n\t var formData = _props4.formData;\n\t var label = _props4.label;\n\t var required = _props4.required;\n\t var placeholder = _props4.placeholder;\n\t\n\t return _react2[\"default\"].createElement(\n\t Field,\n\t { label: label, required: required,\n\t type: schema.type },\n\t _react2[\"default\"].createElement(\"input\", { type: \"checkbox\",\n\t title: placeholder,\n\t checked: defaultFieldValue(formData, schema),\n\t required: required,\n\t onChange: this.onChange.bind(this) })\n\t );\n\t }\n\t }]);\n\t\n\t return CheckboxField;\n\t})(_react2[\"default\"].Component);\n\t\n\tvar SelectField = (function (_React$Component4) {\n\t _inherits(SelectField, _React$Component4);\n\t\n\t function SelectField() {\n\t _classCallCheck(this, SelectField);\n\t\n\t _get(Object.getPrototypeOf(SelectField.prototype), \"constructor\", this).apply(this, arguments);\n\t }\n\t\n\t _createClass(SelectField, [{\n\t key: \"onChange\",\n\t value: function onChange(event) {\n\t this.props.onChange(event.target.value);\n\t }\n\t }, {\n\t key: \"render\",\n\t value: function render() {\n\t var _props5 = this.props;\n\t var schema = _props5.schema;\n\t var formData = _props5.formData;\n\t var options = _props5.options;\n\t var required = _props5.required;\n\t var label = _props5.label;\n\t\n\t return _react2[\"default\"].createElement(\n\t Field,\n\t { label: label, required: required },\n\t _react2[\"default\"].createElement(\n\t \"select\",\n\t { value: defaultFieldValue(formData, schema),\n\t title: schema.description,\n\t onChange: this.onChange.bind(this) },\n\t options.map(function (option, i) {\n\t return _react2[\"default\"].createElement(\n\t \"option\",\n\t { key: i },\n\t option\n\t );\n\t })\n\t )\n\t );\n\t }\n\t }]);\n\t\n\t return SelectField;\n\t})(_react2[\"default\"].Component);\n\t\n\tvar UnsupportedField = (function (_React$Component5) {\n\t _inherits(UnsupportedField, _React$Component5);\n\t\n\t function UnsupportedField() {\n\t _classCallCheck(this, UnsupportedField);\n\t\n\t _get(Object.getPrototypeOf(UnsupportedField.prototype), \"constructor\", this).apply(this, arguments);\n\t }\n\t\n\t _createClass(UnsupportedField, [{\n\t key: \"render\",\n\t value: function render() {\n\t // XXX render json as string so dev can inspect faulty subschema\n\t return _react2[\"default\"].createElement(\n\t \"div\",\n\t { className: \"unsupported-field\" },\n\t \"Unsupported field schema \",\n\t JSON.stringify(this.props.schema),\n\t \".\"\n\t );\n\t }\n\t }]);\n\t\n\t return UnsupportedField;\n\t})(_react2[\"default\"].Component);\n\t\n\tvar SchemaField = (function (_React$Component6) {\n\t _inherits(SchemaField, _React$Component6);\n\t\n\t function SchemaField() {\n\t _classCallCheck(this, SchemaField);\n\t\n\t _get(Object.getPrototypeOf(SchemaField.prototype), \"constructor\", this).apply(this, arguments);\n\t }\n\t\n\t _createClass(SchemaField, [{\n\t key: \"render\",\n\t value: function render() {\n\t var schema = this.props.schema;\n\t\n\t var FieldComponent = SchemaField.fieldComponents[schema.type] || UnsupportedField;\n\t return _react2[\"default\"].createElement(FieldComponent, this.props);\n\t }\n\t }], [{\n\t key: \"fieldComponents\",\n\t get: function get() {\n\t return {\n\t string: StringField,\n\t array: ArrayField,\n\t boolean: BooleanField,\n\t object: ObjectField,\n\t \"date-time\": StringField,\n\t number: StringField\n\t };\n\t }\n\t }]);\n\t\n\t return SchemaField;\n\t})(_react2[\"default\"].Component);\n\t\n\tvar StringField = (function (_React$Component7) {\n\t _inherits(StringField, _React$Component7);\n\t\n\t function StringField() {\n\t _classCallCheck(this, StringField);\n\t\n\t _get(Object.getPrototypeOf(StringField.prototype), \"constructor\", this).apply(this, arguments);\n\t }\n\t\n\t _createClass(StringField, [{\n\t key: \"render\",\n\t value: function render() {\n\t var _props6 = this.props;\n\t var schema = _props6.schema;\n\t var formData = _props6.formData;\n\t var required = _props6.required;\n\t var onChange = _props6.onChange;\n\t\n\t var commonProps = {\n\t schema: schema,\n\t label: schema.title,\n\t formData: formData,\n\t required: required,\n\t onChange: onChange.bind(this)\n\t };\n\t if (Array.isArray(schema[\"enum\"])) {\n\t return _react2[\"default\"].createElement(SelectField, _extends({ options: schema[\"enum\"] }, commonProps));\n\t }\n\t return _react2[\"default\"].createElement(TextField, _extends({ placeholder: schema.description }, commonProps));\n\t }\n\t }]);\n\t\n\t return StringField;\n\t})(_react2[\"default\"].Component);\n\t\n\tvar BooleanField = (function (_React$Component8) {\n\t _inherits(BooleanField, _React$Component8);\n\t\n\t function BooleanField() {\n\t _classCallCheck(this, BooleanField);\n\t\n\t _get(Object.getPrototypeOf(BooleanField.prototype), \"constructor\", this).apply(this, arguments);\n\t }\n\t\n\t _createClass(BooleanField, [{\n\t key: \"render\",\n\t value: function render() {\n\t var _props7 = this.props;\n\t var schema = _props7.schema;\n\t var formData = _props7.formData;\n\t var required = _props7.required;\n\t var onChange = _props7.onChange;\n\t\n\t var commonProps = {\n\t schema: schema,\n\t label: schema.title,\n\t formData: formData,\n\t required: required,\n\t onChange: onChange.bind(this)\n\t };\n\t return _react2[\"default\"].createElement(CheckboxField, _extends({ placeholder: schema.description }, commonProps));\n\t }\n\t }]);\n\t\n\t return BooleanField;\n\t})(_react2[\"default\"].Component);\n\t\n\tvar ArrayField = (function (_React$Component9) {\n\t _inherits(ArrayField, _React$Component9);\n\t\n\t function ArrayField(props) {\n\t _classCallCheck(this, ArrayField);\n\t\n\t _get(Object.getPrototypeOf(ArrayField.prototype), \"constructor\", this).call(this, props);\n\t var formData = Array.isArray(props.formData) ? props.formData : null;\n\t this.state = { items: formData || props.schema[\"default\"] || [] };\n\t }\n\t\n\t _createClass(ArrayField, [{\n\t key: \"defaultItem\",\n\t value: function defaultItem(itemsSchema) {\n\t if (itemsSchema[\"default\"]) {\n\t return itemsSchema[\"default\"];\n\t }\n\t return defaultTypeValue(itemsSchema.type);\n\t }\n\t }, {\n\t key: \"isItemRequired\",\n\t value: function isItemRequired(itemsSchema) {\n\t return itemsSchema.type === \"string\" && itemsSchema.minLength > 0;\n\t }\n\t }, {\n\t key: \"asyncSetState\",\n\t value: function asyncSetState(state) {\n\t var _this = this;\n\t\n\t // ensure state is propagated to parent component when it's actually set\n\t this.setState(state, function (_) {\n\t return _this.props.onChange(_this.state.items);\n\t });\n\t }\n\t }, {\n\t key: \"onAddClick\",\n\t value: function onAddClick(event) {\n\t event.preventDefault();\n\t this.setState({\n\t items: this.state.items.concat(this.defaultItem(this.props.schema.items))\n\t });\n\t }\n\t }, {\n\t key: \"onDropClick\",\n\t value: function onDropClick(index, event) {\n\t event.preventDefault();\n\t this.setState({\n\t items: this.state.items.filter(function (_, i) {\n\t return i !== index;\n\t })\n\t });\n\t }\n\t }, {\n\t key: \"onChange\",\n\t value: function onChange(index, value) {\n\t this.asyncSetState({\n\t items: this.state.items.map(function (item, i) {\n\t return index === i ? value : item;\n\t })\n\t });\n\t }\n\t }, {\n\t key: \"render\",\n\t value: function render() {\n\t var _this2 = this;\n\t\n\t var schema = this.props.schema;\n\t var items = this.state.items;\n\t\n\t return _react2[\"default\"].createElement(\n\t \"fieldset\",\n\t {\n\t className: \"field field-array field-array-of-\" + schema.items.type },\n\t _react2[\"default\"].createElement(\n\t \"legend\",\n\t null,\n\t schema.title\n\t ),\n\t schema.description ? _react2[\"default\"].createElement(\n\t \"div\",\n\t null,\n\t schema.description\n\t ) : null,\n\t _react2[\"default\"].createElement(\n\t \"div\",\n\t { className: \"array-item-list\" },\n\t items.map(function (item, index) {\n\t return _react2[\"default\"].createElement(\n\t \"div\",\n\t { key: index },\n\t _react2[\"default\"].createElement(SchemaField, { schema: schema.items,\n\t formData: items[index],\n\t required: _this2.isItemRequired(schema.items),\n\t onChange: _this2.onChange.bind(_this2, index) }),\n\t _react2[\"default\"].createElement(\n\t \"p\",\n\t { className: \"array-item-remove\" },\n\t _react2[\"default\"].createElement(\n\t \"button\",\n\t { type: \"button\",\n\t onClick: _this2.onDropClick.bind(_this2, index) },\n\t \"-\"\n\t )\n\t )\n\t );\n\t })\n\t ),\n\t _react2[\"default\"].createElement(\n\t \"p\",\n\t { className: \"array-item-add\" },\n\t _react2[\"default\"].createElement(\n\t \"button\",\n\t { type: \"button\", onClick: this.onAddClick.bind(this) },\n\t \"+\"\n\t )\n\t )\n\t );\n\t }\n\t }, {\n\t key: \"itemTitle\",\n\t get: function get() {\n\t var schema = this.props.schema;\n\t\n\t return schema.items.title || schema.items.description || \"Item\";\n\t }\n\t }]);\n\t\n\t return ArrayField;\n\t})(_react2[\"default\"].Component);\n\t\n\tvar ObjectField = (function (_React$Component10) {\n\t _inherits(ObjectField, _React$Component10);\n\t\n\t function ObjectField(props) {\n\t _classCallCheck(this, ObjectField);\n\t\n\t _get(Object.getPrototypeOf(ObjectField.prototype), \"constructor\", this).call(this, props);\n\t this.state = props.formData || props.schema[\"default\"] || {};\n\t }\n\t\n\t _createClass(ObjectField, [{\n\t key: \"isRequired\",\n\t value: function isRequired(name) {\n\t var schema = this.props.schema;\n\t return Array.isArray(schema.required) && schema.required.indexOf(name) !== -1;\n\t }\n\t }, {\n\t key: \"asyncSetState\",\n\t value: function asyncSetState(state) {\n\t var _this3 = this;\n\t\n\t // ensure state is propagated to parent component when it's actually set\n\t this.setState(state, function (_) {\n\t return _this3.props.onChange(_this3.state);\n\t });\n\t }\n\t }, {\n\t key: \"onChange\",\n\t value: function onChange(name, value) {\n\t this.asyncSetState(_defineProperty({}, name, value));\n\t }\n\t }, {\n\t key: \"render\",\n\t value: function render() {\n\t var _this4 = this;\n\t\n\t var schema = this.props.schema;\n\t\n\t return _react2[\"default\"].createElement(\n\t \"fieldset\",\n\t null,\n\t _react2[\"default\"].createElement(\n\t \"legend\",\n\t null,\n\t schema.title || \"Object\"\n\t ),\n\t Object.keys(schema.properties).map(function (name, index) {\n\t return _react2[\"default\"].createElement(SchemaField, { key: index,\n\t name: name,\n\t required: _this4.isRequired(name),\n\t schema: schema.properties[name],\n\t formData: _this4.state[name],\n\t onChange: _this4.onChange.bind(_this4, name) });\n\t })\n\t );\n\t }\n\t }]);\n\t\n\t return ObjectField;\n\t})(_react2[\"default\"].Component);\n\t\n\tvar ErrorList = (function (_React$Component11) {\n\t _inherits(ErrorList, _React$Component11);\n\t\n\t function ErrorList() {\n\t _classCallCheck(this, ErrorList);\n\t\n\t _get(Object.getPrototypeOf(ErrorList.prototype), \"constructor\", this).apply(this, arguments);\n\t }\n\t\n\t _createClass(ErrorList, [{\n\t key: \"render\",\n\t value: function render() {\n\t var errors = this.props.errors;\n\t\n\t if (errors.length === 0) {\n\t return null;\n\t }\n\t return _react2[\"default\"].createElement(\n\t \"div\",\n\t { className: \"errors\" },\n\t _react2[\"default\"].createElement(\n\t \"h2\",\n\t null,\n\t \"Errors\"\n\t ),\n\t _react2[\"default\"].createElement(\n\t \"ul\",\n\t null,\n\t errors.map(function (error, i) {\n\t return _react2[\"default\"].createElement(\n\t \"li\",\n\t { key: i },\n\t error.stack\n\t );\n\t })\n\t )\n\t );\n\t }\n\t }]);\n\t\n\t return ErrorList;\n\t})(_react2[\"default\"].Component);\n\t\n\tvar Form = (function (_React$Component12) {\n\t _inherits(Form, _React$Component12);\n\t\n\t function Form(props) {\n\t _classCallCheck(this, Form);\n\t\n\t _get(Object.getPrototypeOf(Form.prototype), \"constructor\", this).call(this, props);\n\t var edit = !!props.formData;\n\t var formData = props.formData || props.schema[\"default\"] || null;\n\t this.state = {\n\t status: \"initial\",\n\t formData: formData,\n\t edit: edit,\n\t errors: edit ? this.validate(formData) : []\n\t };\n\t }\n\t\n\t _createClass(Form, [{\n\t key: \"validate\",\n\t value: function validate(formData) {\n\t var validator = new _jsonschema.Validator();\n\t return validator.validate(formData, this.props.schema).errors;\n\t }\n\t }, {\n\t key: \"renderErrors\",\n\t value: function renderErrors() {\n\t if (this.state.edit && this.state.status !== \"editing\") {\n\t return _react2[\"default\"].createElement(ErrorList, { errors: this.state.errors });\n\t }\n\t return null;\n\t }\n\t }, {\n\t key: \"onChange\",\n\t value: function onChange(formData) {\n\t var _this5 = this;\n\t\n\t this.setState({\n\t status: \"editing\",\n\t formData: formData,\n\t errors: this.validate(formData)\n\t }, function (_) {\n\t if (_this5.props.onChange) {\n\t _this5.props.onChange(_this5.state);\n\t }\n\t });\n\t }\n\t }, {\n\t key: \"onSubmit\",\n\t value: function onSubmit(event) {\n\t var _this6 = this;\n\t\n\t event.preventDefault();\n\t this.setState({ status: \"submitted\" });\n\t var errors = this.validate(this.state.formData);\n\t if (Object.keys(errors).length > 0) {\n\t this.setState({ errors: errors }, function (_) {\n\t if (_this6.props.onError) {\n\t _this6.props.onError(errors);\n\t } else {\n\t console.error(\"Form validation failed\", errors);\n\t }\n\t });\n\t return;\n\t } else if (this.props.onSubmit) {\n\t this.props.onSubmit(this.state);\n\t }\n\t this.setState({ status: \"initial\" });\n\t }\n\t }, {\n\t key: \"render\",\n\t value: function render() {\n\t var schema = this.props.schema;\n\t var formData = this.state.formData;\n\t\n\t return _react2[\"default\"].createElement(\n\t \"form\",\n\t { className: \"generic-form\", onSubmit: this.onSubmit.bind(this) },\n\t this.renderErrors(),\n\t _react2[\"default\"].createElement(SchemaField, {\n\t schema: schema,\n\t formData: formData,\n\t onChange: this.onChange.bind(this) }),\n\t _react2[\"default\"].createElement(\n\t \"p\",\n\t null,\n\t _react2[\"default\"].createElement(\n\t \"button\",\n\t { type: \"submit\" },\n\t \"Submit\"\n\t )\n\t )\n\t );\n\t }\n\t }]);\n\t\n\t return Form;\n\t})(_react2[\"default\"].Component);\n\t\n\texports[\"default\"] = Form;\n\tmodule.exports = exports[\"default\"];\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar Validator = module.exports.Validator = __webpack_require__(3);\n\t\n\tmodule.exports.ValidatorResult = __webpack_require__(11).ValidatorResult;\n\tmodule.exports.ValidationError = __webpack_require__(11).ValidationError;\n\tmodule.exports.SchemaError = __webpack_require__(11).SchemaError;\n\t\n\tmodule.exports.validate = function (instance, schema, options) {\n\t var v = new Validator();\n\t return v.validate(instance, schema, options);\n\t};\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar urilib = __webpack_require__(4);\n\t\n\tvar attribute = __webpack_require__(10);\n\tvar helpers = __webpack_require__(11);\n\tvar ValidatorResult = helpers.ValidatorResult;\n\tvar SchemaError = helpers.SchemaError;\n\tvar SchemaContext = helpers.SchemaContext;\n\t\n\t/**\n\t * Creates a new Validator object\n\t * @name Validator\n\t * @constructor\n\t */\n\tvar Validator = function Validator() {\n\t this.schemas = {};\n\t this.unresolvedRefs = [];\n\t\n\t // Use Object.create to make this extensible without Validator instances stepping on each other's toes.\n\t this.types = Object.create(types);\n\t this.attributes = Object.create(attribute.validators);\n\t};\n\t\n\t// Hint at the presence of a property\n\tValidator.prototype.schemas = null;\n\tValidator.prototype.types = null;\n\tValidator.prototype.attributes = null;\n\tValidator.prototype.unresolvedRefs = null;\n\t\n\t/**\n\t * Adds a schema with a certain urn to the Validator instance.\n\t * @param schema\n\t * @param urn\n\t * @return {Object}\n\t */\n\tValidator.prototype.addSchema = function addSchema(schema, uri) {\n\t if (!schema) {\n\t return null;\n\t }\n\t var ourUri = uri || schema.id;\n\t this.addSubSchema(ourUri, schema);\n\t if (ourUri) {\n\t this.schemas[ourUri] = schema;\n\t }\n\t return this.schemas[ourUri];\n\t};\n\t\n\tValidator.prototype.addSubSchema = function addSubSchema(baseuri, schema) {\n\t if (!schema || typeof schema != 'object') return;\n\t // Mark all referenced schemas so we can tell later which schemas are referred to, but never defined\n\t if (schema.$ref) {\n\t var resolvedUri = urilib.resolve(baseuri, schema.$ref);\n\t // Only mark unknown schemas as unresolved\n\t if (this.schemas[resolvedUri] === undefined) {\n\t this.schemas[resolvedUri] = null;\n\t this.unresolvedRefs.push(resolvedUri);\n\t }\n\t return;\n\t }\n\t var ourUri = schema.id && urilib.resolve(baseuri, schema.id);\n\t var ourBase = ourUri || baseuri;\n\t if (ourUri) {\n\t if (this.schemas[ourUri]) {\n\t if (!helpers.deepCompareStrict(this.schemas[ourUri], schema)) {\n\t throw new Error('Schema <' + schema + '> already exists with different definition');\n\t }\n\t return this.schemas[ourUri];\n\t }\n\t this.schemas[ourUri] = schema;\n\t var documentUri = ourUri.replace(/^([^#]*)#$/, '$1');\n\t this.schemas[documentUri] = schema;\n\t }\n\t this.addSubSchemaArray(ourBase, schema.items instanceof Array ? schema.items : [schema.items]);\n\t this.addSubSchemaArray(ourBase, schema['extends'] instanceof Array ? schema['extends'] : [schema['extends']]);\n\t this.addSubSchema(ourBase, schema.additionalItems);\n\t this.addSubSchemaObject(ourBase, schema.properties);\n\t this.addSubSchema(ourBase, schema.additionalProperties);\n\t this.addSubSchemaObject(ourBase, schema.definitions);\n\t this.addSubSchemaObject(ourBase, schema.patternProperties);\n\t this.addSubSchemaObject(ourBase, schema.dependencies);\n\t this.addSubSchemaArray(ourBase, schema.disallow);\n\t this.addSubSchemaArray(ourBase, schema.allOf);\n\t this.addSubSchemaArray(ourBase, schema.anyOf);\n\t this.addSubSchemaArray(ourBase, schema.oneOf);\n\t this.addSubSchema(ourBase, schema.not);\n\t return this.schemas[ourUri];\n\t};\n\t\n\tValidator.prototype.addSubSchemaArray = function addSubSchemaArray(baseuri, schemas) {\n\t if (!(schemas instanceof Array)) return;\n\t for (var i = 0; i < schemas.length; i++) {\n\t this.addSubSchema(baseuri, schemas[i]);\n\t }\n\t};\n\t\n\tValidator.prototype.addSubSchemaObject = function addSubSchemaArray(baseuri, schemas) {\n\t if (!schemas || typeof schemas != 'object') return;\n\t for (var p in schemas) {\n\t this.addSubSchema(baseuri, schemas[p]);\n\t }\n\t};\n\t\n\t/**\n\t * Sets all the schemas of the Validator instance.\n\t * @param schemas\n\t */\n\tValidator.prototype.setSchemas = function setSchemas(schemas) {\n\t this.schemas = schemas;\n\t};\n\t\n\t/**\n\t * Returns the schema of a certain urn\n\t * @param urn\n\t */\n\tValidator.prototype.getSchema = function getSchema(urn) {\n\t return this.schemas[urn];\n\t};\n\t\n\t/**\n\t * Validates instance against the provided schema\n\t * @param instance\n\t * @param schema\n\t * @param [options]\n\t * @param [ctx]\n\t * @return {Array}\n\t */\n\tValidator.prototype.validate = function validate(instance, schema, options, ctx) {\n\t if (!options) {\n\t options = {};\n\t }\n\t var propertyName = options.propertyName || 'instance';\n\t // This will work so long as the function at uri.resolve() will resolve a relative URI to a relative URI\n\t var base = urilib.resolve(options.base || '/', schema.id || '');\n\t if (!ctx) {\n\t ctx = new SchemaContext(schema, options, propertyName, base, Object.create(this.schemas));\n\t if (!ctx.schemas[base]) {\n\t ctx.schemas[base] = schema;\n\t }\n\t }\n\t if (schema) {\n\t var result = this.validateSchema(instance, schema, options, ctx);\n\t if (!result) {\n\t throw new Error('Result undefined');\n\t }\n\t return result;\n\t }\n\t throw new SchemaError('no schema specified', schema);\n\t};\n\t\n\t/**\n\t * Validates an instance against the schema (the actual work horse)\n\t * @param instance\n\t * @param schema\n\t * @param options\n\t * @param ctx\n\t * @private\n\t * @return {ValidatorResult}\n\t */\n\tValidator.prototype.validateSchema = function validateSchema(instance, schema, options, ctx) {\n\t var self = this;\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t if (!schema) {\n\t throw new Error(\"schema is undefined\");\n\t }\n\t\n\t /**\n\t * @param Object schema\n\t * @return mixed schema uri or false\n\t */\n\t function shouldResolve(schema) {\n\t var ref = typeof schema === 'string' ? schema : schema.$ref;\n\t if (typeof ref == 'string') return ref;\n\t return false;\n\t }\n\t /**\n\t * @param Object schema\n\t * @param SchemaContext ctx\n\t * @returns Object schema or resolved schema\n\t */\n\t function resolve(schema, ctx) {\n\t var ref;\n\t if (ref = shouldResolve(schema)) {\n\t return self.resolve(schema, ref, ctx).subschema;\n\t }\n\t return schema;\n\t }\n\t\n\t if (schema['extends']) {\n\t if (schema['extends'] instanceof Array) {\n\t schema['extends'].forEach(function (s) {\n\t schema = helpers.deepMerge(schema, resolve(s, ctx));\n\t });\n\t } else {\n\t schema = helpers.deepMerge(schema, resolve(schema['extends'], ctx));\n\t }\n\t }\n\t\n\t var switchSchema;\n\t if (switchSchema = shouldResolve(schema)) {\n\t var resolved = this.resolve(schema, switchSchema, ctx);\n\t var subctx = new SchemaContext(resolved.subschema, options, ctx.propertyPath, resolved.switchSchema, ctx.schemas);\n\t return this.validateSchema(instance, resolved.subschema, options, subctx);\n\t }\n\t\n\t var skipAttributes = options && options.skipAttributes || [];\n\t // Validate each schema attribute against the instance\n\t for (var key in schema) {\n\t if (!attribute.ignoreProperties[key] && skipAttributes.indexOf(key) < 0) {\n\t var validatorErr = null;\n\t var validator = self.attributes[key];\n\t if (validator) {\n\t validatorErr = validator.call(self, instance, schema, options, ctx);\n\t } else if (options.allowUnknownAttributes === false) {\n\t // This represents an error with the schema itself, not an invalid instance\n\t throw new SchemaError(\"Unsupported attribute: \" + key, schema);\n\t }\n\t if (validatorErr) {\n\t result.importErrors(validatorErr);\n\t }\n\t }\n\t }\n\t\n\t if (typeof options.rewrite == 'function') {\n\t var value = options.rewrite.call(this, instance, schema, options, ctx);\n\t result.instance = value;\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t* @private\n\t* @param Object schema\n\t* @param Object switchSchema\n\t* @param SchemaContext ctx\n\t* @return Object resolved schemas {subschema:String, switchSchema: String}\n\t* @thorws SchemaError\n\t*/\n\tValidator.prototype.resolve = function resolve(schema, switchSchema, ctx) {\n\t switchSchema = ctx.resolve(switchSchema);\n\t // First see if the schema exists under the provided URI\n\t if (ctx.schemas[switchSchema]) {\n\t return { subschema: ctx.schemas[switchSchema], switchSchema: switchSchema };\n\t }\n\t // Else try walking the property pointer\n\t var parsed = urilib.parse(switchSchema);\n\t var fragment = parsed && parsed.hash;\n\t var document = fragment && fragment.length && switchSchema.substr(0, switchSchema.length - fragment.length);\n\t if (!document || !ctx.schemas[document]) {\n\t throw new SchemaError(\"no such schema <\" + switchSchema + \">\", schema);\n\t }\n\t var subschema = helpers.objectGetPath(ctx.schemas[document], fragment.substr(1));\n\t if (subschema === undefined) {\n\t throw new SchemaError(\"no such schema \" + fragment + \" located in <\" + document + \">\", schema);\n\t }\n\t return { subschema: subschema, switchSchema: switchSchema };\n\t};\n\t\n\t/**\n\t * Tests whether the instance if of a certain type.\n\t * @private\n\t * @param instance\n\t * @param schema\n\t * @param options\n\t * @param ctx\n\t * @param type\n\t * @return {boolean}\n\t */\n\tValidator.prototype.testType = function validateType(instance, schema, options, ctx, type) {\n\t if (typeof this.types[type] == 'function') {\n\t return this.types[type].call(this, instance);\n\t }\n\t if (type && typeof type == 'object') {\n\t var res = this.validateSchema(instance, type, options, ctx);\n\t return res === undefined || !(res && res.errors.length);\n\t }\n\t // Undefined or properties not on the list are acceptable, same as not being defined\n\t return true;\n\t};\n\t\n\tvar types = Validator.prototype.types = {};\n\ttypes.string = function testString(instance) {\n\t return typeof instance == 'string';\n\t};\n\ttypes.number = function testNumber(instance) {\n\t return typeof instance == 'number';\n\t};\n\ttypes.integer = function testInteger(instance) {\n\t return typeof instance == 'number' && instance % 1 === 0;\n\t};\n\ttypes.boolean = function testBoolean(instance) {\n\t return typeof instance == 'boolean';\n\t};\n\ttypes.number = function testNumber(instance) {\n\t return typeof instance == 'number';\n\t};\n\ttypes.array = function testArray(instance) {\n\t return instance instanceof Array;\n\t};\n\ttypes['null'] = function testNull(instance) {\n\t return instance === null;\n\t};\n\ttypes.date = function testDate(instance) {\n\t return instance instanceof Date;\n\t};\n\ttypes.any = function testAny(instance) {\n\t return true;\n\t};\n\ttypes.object = function testObject(instance) {\n\t // TODO: fix this - see #15\n\t return instance && typeof instance === 'object' && !(instance instanceof Array) && !(instance instanceof Date);\n\t};\n\t\n\tmodule.exports = Validator;\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// Copyright Joyent, Inc. and other Node contributors.\n\t//\n\t// Permission is hereby granted, free of charge, to any person obtaining a\n\t// copy of this software and associated documentation files (the\n\t// \"Software\"), to deal in the Software without restriction, including\n\t// without limitation the rights to use, copy, modify, merge, publish,\n\t// distribute, sublicense, and/or sell copies of the Software, and to permit\n\t// persons to whom the Software is furnished to do so, subject to the\n\t// following conditions:\n\t//\n\t// The above copyright notice and this permission notice shall be included\n\t// in all copies or substantial portions of the Software.\n\t//\n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\t// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\t// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n\t// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n\t// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n\t// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n\t// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\t\n\t'use strict';\n\t\n\tvar punycode = __webpack_require__(5);\n\t\n\texports.parse = urlParse;\n\texports.resolve = urlResolve;\n\texports.resolveObject = urlResolveObject;\n\texports.format = urlFormat;\n\t\n\texports.Url = Url;\n\t\n\tfunction Url() {\n\t this.protocol = null;\n\t this.slashes = null;\n\t this.auth = null;\n\t this.host = null;\n\t this.port = null;\n\t this.hostname = null;\n\t this.hash = null;\n\t this.search = null;\n\t this.query = null;\n\t this.pathname = null;\n\t this.path = null;\n\t this.href = null;\n\t}\n\t\n\t// Reference: RFC 3986, RFC 1808, RFC 2396\n\t\n\t// define these here so at least they only have to be\n\t// compiled once on the first module load.\n\tvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n\t portPattern = /:[0-9]*$/,\n\t\n\t// RFC 2396: characters reserved for delimiting URLs.\n\t// We actually just auto-escape these.\n\tdelims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\t\n\t// RFC 2396: characters not allowed for various reasons.\n\tunwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\t\n\t// Allowed by RFCs, but cause of XSS attacks. Always escape these.\n\tautoEscape = ['\\''].concat(unwise),\n\t\n\t// Characters that are never ever allowed in a hostname.\n\t// Note that any invalid chars are also handled, but these\n\t// are the ones that are *expected* to be seen, so we fast-path\n\t// them.\n\tnonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n\t hostEndingChars = ['/', '?', '#'],\n\t hostnameMaxLen = 255,\n\t hostnamePartPattern = /^[a-z0-9A-Z_-]{0,63}$/,\n\t hostnamePartStart = /^([a-z0-9A-Z_-]{0,63})(.*)$/,\n\t\n\t// protocols that can allow \"unsafe\" and \"unwise\" chars.\n\tunsafeProtocol = {\n\t 'javascript': true,\n\t 'javascript:': true\n\t},\n\t\n\t// protocols that never have a hostname.\n\thostlessProtocol = {\n\t 'javascript': true,\n\t 'javascript:': true\n\t},\n\t\n\t// protocols that always contain a // bit.\n\tslashedProtocol = {\n\t 'http': true,\n\t 'https': true,\n\t 'ftp': true,\n\t 'gopher': true,\n\t 'file': true,\n\t 'http:': true,\n\t 'https:': true,\n\t 'ftp:': true,\n\t 'gopher:': true,\n\t 'file:': true\n\t},\n\t querystring = __webpack_require__(7);\n\t\n\tfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n\t if (url && isObject(url) && url instanceof Url) return url;\n\t\n\t var u = new Url();\n\t u.parse(url, parseQueryString, slashesDenoteHost);\n\t return u;\n\t}\n\t\n\tUrl.prototype.parse = function (url, parseQueryString, slashesDenoteHost) {\n\t if (!isString(url)) {\n\t throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n\t }\n\t\n\t var rest = url;\n\t\n\t // trim before proceeding.\n\t // This is to support parse stuff like \" http://foo.com \\n\"\n\t rest = rest.trim();\n\t\n\t var proto = protocolPattern.exec(rest);\n\t if (proto) {\n\t proto = proto[0];\n\t var lowerProto = proto.toLowerCase();\n\t this.protocol = lowerProto;\n\t rest = rest.substr(proto.length);\n\t }\n\t\n\t // figure out if it's got a host\n\t // user@server is *always* interpreted as a hostname, and url\n\t // resolution will treat //foo/bar as host=foo,path=bar because that's\n\t // how the browser resolves relative URLs.\n\t if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n\t var slashes = rest.substr(0, 2) === '//';\n\t if (slashes && !(proto && hostlessProtocol[proto])) {\n\t rest = rest.substr(2);\n\t this.slashes = true;\n\t }\n\t }\n\t\n\t if (!hostlessProtocol[proto] && (slashes || proto && !slashedProtocol[proto])) {\n\t\n\t // there's a hostname.\n\t // the first instance of /, ?, ;, or # ends the host.\n\t //\n\t // If there is an @ in the hostname, then non-host chars *are* allowed\n\t // to the left of the last @ sign, unless some host-ending character\n\t // comes *before* the @-sign.\n\t // URLs are obnoxious.\n\t //\n\t // ex:\n\t // http://a@b@c/ => user:a@b host:c\n\t // http://a@b?@c => user:a host:c path:/?@c\n\t\n\t // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n\t // Review our test case against browsers more comprehensively.\n\t\n\t // find the first instance of any hostEndingChars\n\t var hostEnd = -1;\n\t for (var i = 0; i < hostEndingChars.length; i++) {\n\t var hec = rest.indexOf(hostEndingChars[i]);\n\t if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec;\n\t }\n\t\n\t // at this point, either we have an explicit point where the\n\t // auth portion cannot go past, or the last @ char is the decider.\n\t var auth, atSign;\n\t if (hostEnd === -1) {\n\t // atSign can be anywhere.\n\t atSign = rest.lastIndexOf('@');\n\t } else {\n\t // atSign must be in auth portion.\n\t // http://a@b/c@d => host:b auth:a path:/c@d\n\t atSign = rest.lastIndexOf('@', hostEnd);\n\t }\n\t\n\t // Now we have a portion which is definitely the auth.\n\t // Pull that off.\n\t if (atSign !== -1) {\n\t auth = rest.slice(0, atSign);\n\t rest = rest.slice(atSign + 1);\n\t this.auth = decodeURIComponent(auth);\n\t }\n\t\n\t // the host is the remaining to the left of the first non-host char\n\t hostEnd = -1;\n\t for (var i = 0; i < nonHostChars.length; i++) {\n\t var hec = rest.indexOf(nonHostChars[i]);\n\t if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec;\n\t }\n\t // if we still have not hit it, then the entire thing is a host.\n\t if (hostEnd === -1) hostEnd = rest.length;\n\t\n\t this.host = rest.slice(0, hostEnd);\n\t rest = rest.slice(hostEnd);\n\t\n\t // pull out port.\n\t this.parseHost();\n\t\n\t // we've indicated that there is a hostname,\n\t // so even if it's empty, it has to be present.\n\t this.hostname = this.hostname || '';\n\t\n\t // if hostname begins with [ and ends with ]\n\t // assume that it's an IPv6 address.\n\t var ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']';\n\t\n\t // validate a little.\n\t if (!ipv6Hostname) {\n\t var hostparts = this.hostname.split(/\\./);\n\t for (var i = 0, l = hostparts.length; i < l; i++) {\n\t var part = hostparts[i];\n\t if (!part) continue;\n\t if (!part.match(hostnamePartPattern)) {\n\t var newpart = '';\n\t for (var j = 0, k = part.length; j < k; j++) {\n\t if (part.charCodeAt(j) > 127) {\n\t // we replace non-ASCII char with a temporary placeholder\n\t // we need this to make sure size of hostname is not\n\t // broken by replacing non-ASCII by nothing\n\t newpart += 'x';\n\t } else {\n\t newpart += part[j];\n\t }\n\t }\n\t // we test again with ASCII char only\n\t if (!newpart.match(hostnamePartPattern)) {\n\t var validParts = hostparts.slice(0, i);\n\t var notHost = hostparts.slice(i + 1);\n\t var bit = part.match(hostnamePartStart);\n\t if (bit) {\n\t validParts.push(bit[1]);\n\t notHost.unshift(bit[2]);\n\t }\n\t if (notHost.length) {\n\t rest = '/' + notHost.join('.') + rest;\n\t }\n\t this.hostname = validParts.join('.');\n\t break;\n\t }\n\t }\n\t }\n\t }\n\t\n\t if (this.hostname.length > hostnameMaxLen) {\n\t this.hostname = '';\n\t } else {\n\t // hostnames are always lower case.\n\t this.hostname = this.hostname.toLowerCase();\n\t }\n\t\n\t if (!ipv6Hostname) {\n\t // IDNA Support: Returns a puny coded representation of \"domain\".\n\t // It only converts the part of the domain name that\n\t // has non ASCII characters. I.e. it dosent matter if\n\t // you call it with a domain that already is in ASCII.\n\t var domainArray = this.hostname.split('.');\n\t var newOut = [];\n\t for (var i = 0; i < domainArray.length; ++i) {\n\t var s = domainArray[i];\n\t newOut.push(s.match(/[^A-Za-z0-9_-]/) ? 'xn--' + punycode.encode(s) : s);\n\t }\n\t this.hostname = newOut.join('.');\n\t }\n\t\n\t var p = this.port ? ':' + this.port : '';\n\t var h = this.hostname || '';\n\t this.host = h + p;\n\t this.href += this.host;\n\t\n\t // strip [ and ] from the hostname\n\t // the host field still retains them, though\n\t if (ipv6Hostname) {\n\t this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n\t if (rest[0] !== '/') {\n\t rest = '/' + rest;\n\t }\n\t }\n\t }\n\t\n\t // now rest is set to the post-host stuff.\n\t // chop off any delim chars.\n\t if (!unsafeProtocol[lowerProto]) {\n\t\n\t // First, make 100% sure that any \"autoEscape\" chars get\n\t // escaped, even if encodeURIComponent doesn't think they\n\t // need to be.\n\t for (var i = 0, l = autoEscape.length; i < l; i++) {\n\t var ae = autoEscape[i];\n\t var esc = encodeURIComponent(ae);\n\t if (esc === ae) {\n\t esc = escape(ae);\n\t }\n\t rest = rest.split(ae).join(esc);\n\t }\n\t }\n\t\n\t // chop off from the tail first.\n\t var hash = rest.indexOf('#');\n\t if (hash !== -1) {\n\t // got a fragment string.\n\t this.hash = rest.substr(hash);\n\t rest = rest.slice(0, hash);\n\t }\n\t var qm = rest.indexOf('?');\n\t if (qm !== -1) {\n\t this.search = rest.substr(qm);\n\t this.query = rest.substr(qm + 1);\n\t if (parseQueryString) {\n\t this.query = querystring.parse(this.query);\n\t }\n\t rest = rest.slice(0, qm);\n\t } else if (parseQueryString) {\n\t // no query string, but parseQueryString still requested\n\t this.search = '';\n\t this.query = {};\n\t }\n\t if (rest) this.pathname = rest;\n\t if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) {\n\t this.pathname = '/';\n\t }\n\t\n\t //to support http.request\n\t if (this.pathname || this.search) {\n\t var p = this.pathname || '';\n\t var s = this.search || '';\n\t this.path = p + s;\n\t }\n\t\n\t // finally, reconstruct the href based on what has been validated.\n\t this.href = this.format();\n\t return this;\n\t};\n\t\n\t// format a parsed object into a url string\n\tfunction urlFormat(obj) {\n\t // ensure it's an object, and not a string url.\n\t // If it's an obj, this is a no-op.\n\t // this way, you can call url_format() on strings\n\t // to clean up potentially wonky urls.\n\t if (isString(obj)) obj = urlParse(obj);\n\t if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n\t return obj.format();\n\t}\n\t\n\tUrl.prototype.format = function () {\n\t var auth = this.auth || '';\n\t if (auth) {\n\t auth = encodeURIComponent(auth);\n\t auth = auth.replace(/%3A/i, ':');\n\t auth += '@';\n\t }\n\t\n\t var protocol = this.protocol || '',\n\t pathname = this.pathname || '',\n\t hash = this.hash || '',\n\t host = false,\n\t query = '';\n\t\n\t if (this.host) {\n\t host = auth + this.host;\n\t } else if (this.hostname) {\n\t host = auth + (this.hostname.indexOf(':') === -1 ? this.hostname : '[' + this.hostname + ']');\n\t if (this.port) {\n\t host += ':' + this.port;\n\t }\n\t }\n\t\n\t if (this.query && isObject(this.query) && Object.keys(this.query).length) {\n\t query = querystring.stringify(this.query);\n\t }\n\t\n\t var search = this.search || query && '?' + query || '';\n\t\n\t if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\t\n\t // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n\t // unless they had them to begin with.\n\t if (this.slashes || (!protocol || slashedProtocol[protocol]) && host !== false) {\n\t host = '//' + (host || '');\n\t if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n\t } else if (!host) {\n\t host = '';\n\t }\n\t\n\t if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n\t if (search && search.charAt(0) !== '?') search = '?' + search;\n\t\n\t pathname = pathname.replace(/[?#]/g, function (match) {\n\t return encodeURIComponent(match);\n\t });\n\t search = search.replace('#', '%23');\n\t\n\t return protocol + host + pathname + search + hash;\n\t};\n\t\n\tfunction urlResolve(source, relative) {\n\t return urlParse(source, false, true).resolve(relative);\n\t}\n\t\n\tUrl.prototype.resolve = function (relative) {\n\t return this.resolveObject(urlParse(relative, false, true)).format();\n\t};\n\t\n\tfunction urlResolveObject(source, relative) {\n\t if (!source) return relative;\n\t return urlParse(source, false, true).resolveObject(relative);\n\t}\n\t\n\tUrl.prototype.resolveObject = function (relative) {\n\t if (isString(relative)) {\n\t var rel = new Url();\n\t rel.parse(relative, false, true);\n\t relative = rel;\n\t }\n\t\n\t var result = new Url();\n\t Object.keys(this).forEach(function (k) {\n\t result[k] = this[k];\n\t }, this);\n\t\n\t // hash is always overridden, no matter what.\n\t // even href=\"\" will remove it.\n\t result.hash = relative.hash;\n\t\n\t // if the relative url is empty, then there's nothing left to do here.\n\t if (relative.href === '') {\n\t result.href = result.format();\n\t return result;\n\t }\n\t\n\t // hrefs like //foo/bar always cut to the protocol.\n\t if (relative.slashes && !relative.protocol) {\n\t // take everything except the protocol from relative\n\t Object.keys(relative).forEach(function (k) {\n\t if (k !== 'protocol') result[k] = relative[k];\n\t });\n\t\n\t //urlParse appends trailing / to urls like http://www.example.com\n\t if (slashedProtocol[result.protocol] && result.hostname && !result.pathname) {\n\t result.path = result.pathname = '/';\n\t }\n\t\n\t result.href = result.format();\n\t return result;\n\t }\n\t\n\t if (relative.protocol && relative.protocol !== result.protocol) {\n\t // if it's a known url protocol, then changing\n\t // the protocol does weird things\n\t // first, if it's not file:, then we MUST have a host,\n\t // and if there was a path\n\t // to begin with, then we MUST have a path.\n\t // if it is file:, then the host is dropped,\n\t // because that's known to be hostless.\n\t // anything else is assumed to be absolute.\n\t if (!slashedProtocol[relative.protocol]) {\n\t Object.keys(relative).forEach(function (k) {\n\t result[k] = relative[k];\n\t });\n\t result.href = result.format();\n\t return result;\n\t }\n\t\n\t result.protocol = relative.protocol;\n\t if (!relative.host && !hostlessProtocol[relative.protocol]) {\n\t var relPath = (relative.pathname || '').split('/');\n\t while (relPath.length && !(relative.host = relPath.shift()));\n\t if (!relative.host) relative.host = '';\n\t if (!relative.hostname) relative.hostname = '';\n\t if (relPath[0] !== '') relPath.unshift('');\n\t if (relPath.length < 2) relPath.unshift('');\n\t result.pathname = relPath.join('/');\n\t } else {\n\t result.pathname = relative.pathname;\n\t }\n\t result.search = relative.search;\n\t result.query = relative.query;\n\t result.host = relative.host || '';\n\t result.auth = relative.auth;\n\t result.hostname = relative.hostname || relative.host;\n\t result.port = relative.port;\n\t // to support http.request\n\t if (result.pathname || result.search) {\n\t var p = result.pathname || '';\n\t var s = result.search || '';\n\t result.path = p + s;\n\t }\n\t result.slashes = result.slashes || relative.slashes;\n\t result.href = result.format();\n\t return result;\n\t }\n\t\n\t var isSourceAbs = result.pathname && result.pathname.charAt(0) === '/',\n\t isRelAbs = relative.host || relative.pathname && relative.pathname.charAt(0) === '/',\n\t mustEndAbs = isRelAbs || isSourceAbs || result.host && relative.pathname,\n\t removeAllDots = mustEndAbs,\n\t srcPath = result.pathname && result.pathname.split('/') || [],\n\t relPath = relative.pathname && relative.pathname.split('/') || [],\n\t psychotic = result.protocol && !slashedProtocol[result.protocol];\n\t\n\t // if the url is a non-slashed url, then relative\n\t // links like ../.. should be able\n\t // to crawl up to the hostname, as well. This is strange.\n\t // result.protocol has already been set by now.\n\t // Later on, put the first path part into the host field.\n\t if (psychotic) {\n\t result.hostname = '';\n\t result.port = null;\n\t if (result.host) {\n\t if (srcPath[0] === '') srcPath[0] = result.host;else srcPath.unshift(result.host);\n\t }\n\t result.host = '';\n\t if (relative.protocol) {\n\t relative.hostname = null;\n\t relative.port = null;\n\t if (relative.host) {\n\t if (relPath[0] === '') relPath[0] = relative.host;else relPath.unshift(relative.host);\n\t }\n\t relative.host = null;\n\t }\n\t mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n\t }\n\t\n\t if (isRelAbs) {\n\t // it's absolute.\n\t result.host = relative.host || relative.host === '' ? relative.host : result.host;\n\t result.hostname = relative.hostname || relative.hostname === '' ? relative.hostname : result.hostname;\n\t result.search = relative.search;\n\t result.query = relative.query;\n\t srcPath = relPath;\n\t // fall through to the dot-handling below.\n\t } else if (relPath.length) {\n\t // it's relative\n\t // throw away the existing file, and take the new path instead.\n\t if (!srcPath) srcPath = [];\n\t srcPath.pop();\n\t srcPath = srcPath.concat(relPath);\n\t result.search = relative.search;\n\t result.query = relative.query;\n\t } else if (!isNullOrUndefined(relative.search)) {\n\t // just pull out the search.\n\t // like href='?foo'.\n\t // Put this after the other two cases because it simplifies the booleans\n\t if (psychotic) {\n\t result.hostname = result.host = srcPath.shift();\n\t //occationaly the auth can get stuck only in host\n\t //this especialy happens in cases like\n\t //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n\t var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;\n\t if (authInHost) {\n\t result.auth = authInHost.shift();\n\t result.host = result.hostname = authInHost.shift();\n\t }\n\t }\n\t result.search = relative.search;\n\t result.query = relative.query;\n\t //to support http.request\n\t if (!isNull(result.pathname) || !isNull(result.search)) {\n\t result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');\n\t }\n\t result.href = result.format();\n\t return result;\n\t }\n\t\n\t if (!srcPath.length) {\n\t // no path at all. easy.\n\t // we've already handled the other stuff above.\n\t result.pathname = null;\n\t //to support http.request\n\t if (result.search) {\n\t result.path = '/' + result.search;\n\t } else {\n\t result.path = null;\n\t }\n\t result.href = result.format();\n\t return result;\n\t }\n\t\n\t // if a url ENDs in . or .., then it must get a trailing slash.\n\t // however, if it ends in anything else non-slashy,\n\t // then it must NOT get a trailing slash.\n\t var last = srcPath.slice(-1)[0];\n\t var hasTrailingSlash = (result.host || relative.host) && (last === '.' || last === '..') || last === '';\n\t\n\t // strip single dots, resolve double dots to parent dir\n\t // if the path tries to go above the root, `up` ends up > 0\n\t var up = 0;\n\t for (var i = srcPath.length; i >= 0; i--) {\n\t last = srcPath[i];\n\t if (last == '.') {\n\t srcPath.splice(i, 1);\n\t } else if (last === '..') {\n\t srcPath.splice(i, 1);\n\t up++;\n\t } else if (up) {\n\t srcPath.splice(i, 1);\n\t up--;\n\t }\n\t }\n\t\n\t // if the path is allowed to go above the root, restore leading ..s\n\t if (!mustEndAbs && !removeAllDots) {\n\t for (; up--; up) {\n\t srcPath.unshift('..');\n\t }\n\t }\n\t\n\t if (mustEndAbs && srcPath[0] !== '' && (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n\t srcPath.unshift('');\n\t }\n\t\n\t if (hasTrailingSlash && srcPath.join('/').substr(-1) !== '/') {\n\t srcPath.push('');\n\t }\n\t\n\t var isAbsolute = srcPath[0] === '' || srcPath[0] && srcPath[0].charAt(0) === '/';\n\t\n\t // put the host back\n\t if (psychotic) {\n\t result.hostname = result.host = isAbsolute ? '' : srcPath.length ? srcPath.shift() : '';\n\t //occationaly the auth can get stuck only in host\n\t //this especialy happens in cases like\n\t //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n\t var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;\n\t if (authInHost) {\n\t result.auth = authInHost.shift();\n\t result.host = result.hostname = authInHost.shift();\n\t }\n\t }\n\t\n\t mustEndAbs = mustEndAbs || result.host && srcPath.length;\n\t\n\t if (mustEndAbs && !isAbsolute) {\n\t srcPath.unshift('');\n\t }\n\t\n\t if (!srcPath.length) {\n\t result.pathname = null;\n\t result.path = null;\n\t } else {\n\t result.pathname = srcPath.join('/');\n\t }\n\t\n\t //to support request.http\n\t if (!isNull(result.pathname) || !isNull(result.search)) {\n\t result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');\n\t }\n\t result.auth = relative.auth || result.auth;\n\t result.slashes = result.slashes || relative.slashes;\n\t result.href = result.format();\n\t return result;\n\t};\n\t\n\tUrl.prototype.parseHost = function () {\n\t var host = this.host;\n\t var port = portPattern.exec(host);\n\t if (port) {\n\t port = port[0];\n\t if (port !== ':') {\n\t this.port = port.substr(1);\n\t }\n\t host = host.substr(0, host.length - port.length);\n\t }\n\t if (host) this.hostname = host;\n\t};\n\t\n\tfunction isString(arg) {\n\t return typeof arg === \"string\";\n\t}\n\t\n\tfunction isObject(arg) {\n\t return typeof arg === 'object' && arg !== null;\n\t}\n\t\n\tfunction isNull(arg) {\n\t return arg === null;\n\t}\n\tfunction isNullOrUndefined(arg) {\n\t return arg == null;\n\t}\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/*! https://mths.be/punycode v1.3.2 by @mathias */\n\t'use strict';\n\t\n\t;(function (root) {\n\t\n\t\t/** Detect free variables */\n\t\tvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\t\tvar freeModule = typeof module == 'object' && module && !module.nodeType && module;\n\t\tvar freeGlobal = typeof global == 'object' && global;\n\t\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal) {\n\t\t\troot = freeGlobal;\n\t\t}\n\t\n\t\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\t\tvar punycode,\n\t\t \n\t\n\t\t/** Highest positive signed 32-bit float value */\n\t\tmaxInt = 2147483647,\n\t\t // aka. 0x7FFFFFFF or 2^31-1\n\t\n\t\t/** Bootstring parameters */\n\t\tbase = 36,\n\t\t tMin = 1,\n\t\t tMax = 26,\n\t\t skew = 38,\n\t\t damp = 700,\n\t\t initialBias = 72,\n\t\t initialN = 128,\n\t\t // 0x80\n\t\tdelimiter = '-',\n\t\t // '\\x2D'\n\t\n\t\t/** Regular expressions */\n\t\tregexPunycode = /^xn--/,\n\t\t regexNonASCII = /[^\\x20-\\x7E]/,\n\t\t // unprintable ASCII chars + non-ASCII chars\n\t\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g,\n\t\t // RFC 3490 separators\n\t\n\t\t/** Error messages */\n\t\terrors = {\n\t\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t\t'invalid-input': 'Invalid input'\n\t\t},\n\t\t \n\t\n\t\t/** Convenience shortcuts */\n\t\tbaseMinusTMin = base - tMin,\n\t\t floor = Math.floor,\n\t\t stringFromCharCode = String.fromCharCode,\n\t\t \n\t\n\t\t/** Temporary variable */\n\t\tkey;\n\t\n\t\t/*--------------------------------------------------------------------------*/\n\t\n\t\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\t\tfunction error(type) {\n\t\t\tthrow RangeError(errors[type]);\n\t\t}\n\t\n\t\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\t\tfunction map(array, fn) {\n\t\t\tvar length = array.length;\n\t\t\tvar result = [];\n\t\t\twhile (length--) {\n\t\t\t\tresult[length] = fn(array[length]);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\n\t\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\t\tfunction mapDomain(string, fn) {\n\t\t\tvar parts = string.split('@');\n\t\t\tvar result = '';\n\t\t\tif (parts.length > 1) {\n\t\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\t\tresult = parts[0] + '@';\n\t\t\t\tstring = parts[1];\n\t\t\t}\n\t\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\t\tvar labels = string.split('.');\n\t\t\tvar encoded = map(labels, fn).join('.');\n\t\t\treturn result + encoded;\n\t\t}\n\t\n\t\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\t\tfunction ucs2decode(string) {\n\t\t\tvar output = [],\n\t\t\t counter = 0,\n\t\t\t length = string.length,\n\t\t\t value,\n\t\t\t extra;\n\t\t\twhile (counter < length) {\n\t\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\t\tif ((extra & 0xFC00) == 0xDC00) {\n\t\t\t\t\t\t// low surrogate\n\t\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\t\toutput.push(value);\n\t\t\t\t\t\tcounter--;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\toutput.push(value);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\t\n\t\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\t\tfunction ucs2encode(array) {\n\t\t\treturn map(array, function (value) {\n\t\t\t\tvar output = '';\n\t\t\t\tif (value > 0xFFFF) {\n\t\t\t\t\tvalue -= 0x10000;\n\t\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t\t}\n\t\t\t\toutput += stringFromCharCode(value);\n\t\t\t\treturn output;\n\t\t\t}).join('');\n\t\t}\n\t\n\t\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\t\tfunction basicToDigit(codePoint) {\n\t\t\tif (codePoint - 48 < 10) {\n\t\t\t\treturn codePoint - 22;\n\t\t\t}\n\t\t\tif (codePoint - 65 < 26) {\n\t\t\t\treturn codePoint - 65;\n\t\t\t}\n\t\t\tif (codePoint - 97 < 26) {\n\t\t\t\treturn codePoint - 97;\n\t\t\t}\n\t\t\treturn base;\n\t\t}\n\t\n\t\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\t\tfunction digitToBasic(digit, flag) {\n\t\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t\t// 26..35 map to ASCII 0..9\n\t\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t\t}\n\t\n\t\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * http://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\t\tfunction adapt(delta, numPoints, firstTime) {\n\t\t\tvar k = 0;\n\t\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\t\tdelta += floor(delta / numPoints);\n\t\t\tfor (; /* no initialization */delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t\t}\n\t\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t\t}\n\t\n\t\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\t\tfunction decode(input) {\n\t\t\t// Don't use UCS-2\n\t\t\tvar output = [],\n\t\t\t inputLength = input.length,\n\t\t\t out,\n\t\t\t i = 0,\n\t\t\t n = initialN,\n\t\t\t bias = initialBias,\n\t\t\t basic,\n\t\t\t j,\n\t\t\t index,\n\t\t\t oldi,\n\t\t\t w,\n\t\t\t k,\n\t\t\t digit,\n\t\t\t t,\n\t\t\t \n\t\t\t/** Cached calculation results */\n\t\t\tbaseMinusT;\n\t\n\t\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t\t// the first basic code points to the output.\n\t\n\t\t\tbasic = input.lastIndexOf(delimiter);\n\t\t\tif (basic < 0) {\n\t\t\t\tbasic = 0;\n\t\t\t}\n\t\n\t\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t\t// if it's not a basic code point\n\t\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\t\terror('not-basic');\n\t\t\t\t}\n\t\t\t\toutput.push(input.charCodeAt(j));\n\t\t\t}\n\t\n\t\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t\t// points were copied; start at the beginning otherwise.\n\t\n\t\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength;) /* no final expression */{\n\t\n\t\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t\t// value at the end to obtain `delta`.\n\t\t\t\tfor (oldi = i, w = 1, k = base;; /* no condition */k += base) {\n\t\n\t\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\t\terror('invalid-input');\n\t\t\t\t\t}\n\t\n\t\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\t\n\t\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\t\terror('overflow');\n\t\t\t\t\t}\n\t\n\t\t\t\t\ti += digit * w;\n\t\t\t\t\tt = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\t\n\t\t\t\t\tif (digit < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\t\terror('overflow');\n\t\t\t\t\t}\n\t\n\t\t\t\t\tw *= baseMinusT;\n\t\t\t\t}\n\t\n\t\t\t\tout = output.length + 1;\n\t\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\t\n\t\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\t\n\t\t\t\tn += floor(i / out);\n\t\t\t\ti %= out;\n\t\n\t\t\t\t// Insert `n` at position `i` of the output\n\t\t\t\toutput.splice(i++, 0, n);\n\t\t\t}\n\t\n\t\t\treturn ucs2encode(output);\n\t\t}\n\t\n\t\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\t\tfunction encode(input) {\n\t\t\tvar n,\n\t\t\t delta,\n\t\t\t handledCPCount,\n\t\t\t basicLength,\n\t\t\t bias,\n\t\t\t j,\n\t\t\t m,\n\t\t\t q,\n\t\t\t k,\n\t\t\t t,\n\t\t\t currentValue,\n\t\t\t output = [],\n\t\t\t \n\t\t\t/** `inputLength` will hold the number of code points in `input`. */\n\t\t\tinputLength,\n\t\t\t \n\t\t\t/** Cached calculation results */\n\t\t\thandledCPCountPlusOne,\n\t\t\t baseMinusT,\n\t\t\t qMinusT;\n\t\n\t\t\t// Convert the input in UCS-2 to Unicode\n\t\t\tinput = ucs2decode(input);\n\t\n\t\t\t// Cache the length\n\t\t\tinputLength = input.length;\n\t\n\t\t\t// Initialize the state\n\t\t\tn = initialN;\n\t\t\tdelta = 0;\n\t\t\tbias = initialBias;\n\t\n\t\t\t// Handle the basic code points\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue < 0x80) {\n\t\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\thandledCPCount = basicLength = output.length;\n\t\n\t\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t\t// `basicLength` is the number of basic code points.\n\t\n\t\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\t\tif (basicLength) {\n\t\t\t\toutput.push(delimiter);\n\t\t\t}\n\t\n\t\t\t// Main encoding loop:\n\t\t\twhile (handledCPCount < inputLength) {\n\t\n\t\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t\t// larger one:\n\t\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\t\tcurrentValue = input[j];\n\t\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\t\tm = currentValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t\t// but guard against overflow\n\t\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\t\n\t\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\t\tn = m;\n\t\n\t\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\t\tcurrentValue = input[j];\n\t\n\t\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\t\terror('overflow');\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\t\tfor (q = delta, k = base;; /* no condition */k += base) {\n\t\t\t\t\t\t\tt = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\t\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)));\n\t\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\t\tdelta = 0;\n\t\t\t\t\t\t++handledCPCount;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t++delta;\n\t\t\t\t++n;\n\t\t\t}\n\t\t\treturn output.join('');\n\t\t}\n\t\n\t\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\t\tfunction toUnicode(input) {\n\t\t\treturn mapDomain(input, function (string) {\n\t\t\t\treturn regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string;\n\t\t\t});\n\t\t}\n\t\n\t\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\t\tfunction toASCII(input) {\n\t\t\treturn mapDomain(input, function (string) {\n\t\t\t\treturn regexNonASCII.test(string) ? 'xn--' + encode(string) : string;\n\t\t\t});\n\t\t}\n\t\n\t\t/*--------------------------------------------------------------------------*/\n\t\n\t\t/** Define the public API */\n\t\tpunycode = {\n\t\t\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t\t\t'version': '1.3.2',\n\t\t\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see \n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t\t\t'ucs2': {\n\t\t\t\t'decode': ucs2decode,\n\t\t\t\t'encode': ucs2encode\n\t\t\t},\n\t\t\t'decode': decode,\n\t\t\t'encode': encode,\n\t\t\t'toASCII': toASCII,\n\t\t\t'toUnicode': toUnicode\n\t\t};\n\t\n\t\t/** Expose `punycode` */\n\t\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t\t// like the following:\n\t\tif (true) {\n\t\t\t!(__WEBPACK_AMD_DEFINE_RESULT__ = function () {\n\t\t\t\treturn punycode;\n\t\t\t}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\t} else if (freeExports && freeModule) {\n\t\t\tif (module.exports == freeExports) {\n\t\t\t\t// in Node.js or RingoJS v0.8.0+\n\t\t\t\tfreeModule.exports = punycode;\n\t\t\t} else {\n\t\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\t\tfor (key in punycode) {\n\t\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// in Rhino or a web browser\n\t\t\troot.punycode = punycode;\n\t\t}\n\t})(undefined);\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)(module), (function() { return this; }())))\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\tmodule.exports = function (module) {\n\t\tif (!module.webpackPolyfill) {\n\t\t\tmodule.deprecate = function () {};\n\t\t\tmodule.paths = [];\n\t\t\t// module.parent = undefined by default\n\t\t\tmodule.children = [];\n\t\t\tmodule.webpackPolyfill = 1;\n\t\t}\n\t\treturn module;\n\t};\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.decode = exports.parse = __webpack_require__(8);\n\texports.encode = exports.stringify = __webpack_require__(9);\n\n/***/ },\n/* 8 */\n/***/ function(module, exports) {\n\n\t// Copyright Joyent, Inc. and other Node contributors.\n\t//\n\t// Permission is hereby granted, free of charge, to any person obtaining a\n\t// copy of this software and associated documentation files (the\n\t// \"Software\"), to deal in the Software without restriction, including\n\t// without limitation the rights to use, copy, modify, merge, publish,\n\t// distribute, sublicense, and/or sell copies of the Software, and to permit\n\t// persons to whom the Software is furnished to do so, subject to the\n\t// following conditions:\n\t//\n\t// The above copyright notice and this permission notice shall be included\n\t// in all copies or substantial portions of the Software.\n\t//\n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\t// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\t// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n\t// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n\t// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n\t// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n\t// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\t\n\t'use strict';\n\t\n\t// If obj.hasOwnProperty has been overridden, then calling\n\t// obj.hasOwnProperty(prop) will break.\n\t// See: https://github.com/joyent/node/issues/1707\n\tfunction hasOwnProperty(obj, prop) {\n\t return Object.prototype.hasOwnProperty.call(obj, prop);\n\t}\n\t\n\tmodule.exports = function (qs, sep, eq, options) {\n\t sep = sep || '&';\n\t eq = eq || '=';\n\t var obj = {};\n\t\n\t if (typeof qs !== 'string' || qs.length === 0) {\n\t return obj;\n\t }\n\t\n\t var regexp = /\\+/g;\n\t qs = qs.split(sep);\n\t\n\t var maxKeys = 1000;\n\t if (options && typeof options.maxKeys === 'number') {\n\t maxKeys = options.maxKeys;\n\t }\n\t\n\t var len = qs.length;\n\t // maxKeys <= 0 means that we should not limit keys count\n\t if (maxKeys > 0 && len > maxKeys) {\n\t len = maxKeys;\n\t }\n\t\n\t for (var i = 0; i < len; ++i) {\n\t var x = qs[i].replace(regexp, '%20'),\n\t idx = x.indexOf(eq),\n\t kstr,\n\t vstr,\n\t k,\n\t v;\n\t\n\t if (idx >= 0) {\n\t kstr = x.substr(0, idx);\n\t vstr = x.substr(idx + 1);\n\t } else {\n\t kstr = x;\n\t vstr = '';\n\t }\n\t\n\t k = decodeURIComponent(kstr);\n\t v = decodeURIComponent(vstr);\n\t\n\t if (!hasOwnProperty(obj, k)) {\n\t obj[k] = v;\n\t } else if (Array.isArray(obj[k])) {\n\t obj[k].push(v);\n\t } else {\n\t obj[k] = [obj[k], v];\n\t }\n\t }\n\t\n\t return obj;\n\t};\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n\t// Copyright Joyent, Inc. and other Node contributors.\n\t//\n\t// Permission is hereby granted, free of charge, to any person obtaining a\n\t// copy of this software and associated documentation files (the\n\t// \"Software\"), to deal in the Software without restriction, including\n\t// without limitation the rights to use, copy, modify, merge, publish,\n\t// distribute, sublicense, and/or sell copies of the Software, and to permit\n\t// persons to whom the Software is furnished to do so, subject to the\n\t// following conditions:\n\t//\n\t// The above copyright notice and this permission notice shall be included\n\t// in all copies or substantial portions of the Software.\n\t//\n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\t// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\t// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n\t// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n\t// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n\t// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n\t// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\t\n\t'use strict';\n\t\n\tvar stringifyPrimitive = function stringifyPrimitive(v) {\n\t switch (typeof v) {\n\t case 'string':\n\t return v;\n\t\n\t case 'boolean':\n\t return v ? 'true' : 'false';\n\t\n\t case 'number':\n\t return isFinite(v) ? v : '';\n\t\n\t default:\n\t return '';\n\t }\n\t};\n\t\n\tmodule.exports = function (obj, sep, eq, name) {\n\t sep = sep || '&';\n\t eq = eq || '=';\n\t if (obj === null) {\n\t obj = undefined;\n\t }\n\t\n\t if (typeof obj === 'object') {\n\t return Object.keys(obj).map(function (k) {\n\t var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n\t if (Array.isArray(obj[k])) {\n\t return obj[k].map(function (v) {\n\t return ks + encodeURIComponent(stringifyPrimitive(v));\n\t }).join(sep);\n\t } else {\n\t return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n\t }\n\t }).join(sep);\n\t }\n\t\n\t if (!name) return '';\n\t return encodeURIComponent(stringifyPrimitive(name)) + eq + encodeURIComponent(stringifyPrimitive(obj));\n\t};\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar helpers = __webpack_require__(11);\n\t\n\t/** @type ValidatorResult */\n\tvar ValidatorResult = helpers.ValidatorResult;\n\t/** @type SchemaError */\n\tvar SchemaError = helpers.SchemaError;\n\t\n\tvar attribute = {};\n\t\n\tattribute.ignoreProperties = {\n\t // informative properties\n\t 'id': true,\n\t 'default': true,\n\t 'description': true,\n\t 'title': true,\n\t // arguments to other properties\n\t 'exclusiveMinimum': true,\n\t 'exclusiveMaximum': true,\n\t 'additionalItems': true,\n\t // special-handled properties\n\t '$schema': true,\n\t '$ref': true,\n\t 'extends': true\n\t};\n\t\n\t/**\n\t * @name validators\n\t */\n\tvar validators = attribute.validators = {};\n\t\n\t/**\n\t * Validates whether the instance if of a certain type\n\t * @param instance\n\t * @param schema\n\t * @param options\n\t * @param ctx\n\t * @return {ValidatorResult|null}\n\t */\n\tvalidators.type = function validateType(instance, schema, options, ctx) {\n\t // Ignore undefined instances\n\t if (instance === undefined) {\n\t return null;\n\t }\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t var types = schema.type instanceof Array ? schema.type : [schema.type];\n\t if (!types.some(this.testType.bind(this, instance, schema, options, ctx))) {\n\t var list = types.map(function (v) {\n\t return v.id && '<' + v.id + '>' || v + '';\n\t });\n\t result.addError({\n\t name: 'type',\n\t argument: list,\n\t message: \"is not of a type(s) \" + list\n\t });\n\t }\n\t return result;\n\t};\n\t\n\tfunction testSchema(instance, options, ctx, schema) {\n\t return this.validateSchema(instance, schema, options, ctx).valid;\n\t}\n\t\n\t/**\n\t * Validates whether the instance matches some of the given schemas\n\t * @param instance\n\t * @param schema\n\t * @param options\n\t * @param ctx\n\t * @return {ValidatorResult|null}\n\t */\n\tvalidators.anyOf = function validateAnyOf(instance, schema, options, ctx) {\n\t // Ignore undefined instances\n\t if (instance === undefined) {\n\t return null;\n\t }\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t if (!(schema.anyOf instanceof Array)) {\n\t throw new SchemaError(\"anyOf must be an array\");\n\t }\n\t if (!schema.anyOf.some(testSchema.bind(this, instance, options, ctx))) {\n\t var list = schema.anyOf.map(function (v, i) {\n\t return v.id && '<' + v.id + '>' || v.title && JSON.stringify(v.title) || v['$ref'] && '<' + v['$ref'] + '>' || '[subschema ' + i + ']';\n\t });\n\t result.addError({\n\t name: 'anyOf',\n\t argument: list,\n\t message: \"is not any of \" + list.join(',')\n\t });\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates whether the instance matches every given schema\n\t * @param instance\n\t * @param schema\n\t * @param options\n\t * @param ctx\n\t * @return {String|null}\n\t */\n\tvalidators.allOf = function validateAllOf(instance, schema, options, ctx) {\n\t // Ignore undefined instances\n\t if (instance === undefined) {\n\t return null;\n\t }\n\t if (!(schema.allOf instanceof Array)) {\n\t throw new SchemaError(\"allOf must be an array\");\n\t }\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t var self = this;\n\t schema.allOf.forEach(function (v, i) {\n\t var valid = self.validateSchema(instance, v, options, ctx);\n\t if (!valid.valid) {\n\t var msg = v.id && '<' + v.id + '>' || v.title && JSON.stringify(v.title) || v['$ref'] && '<' + v['$ref'] + '>' || '[subschema ' + i + ']';\n\t result.addError({\n\t name: 'allOf',\n\t argument: { id: msg, length: valid.errors.length, valid: valid },\n\t message: 'does not match allOf schema ' + msg + ' with ' + valid.errors.length + ' error[s]:'\n\t });\n\t result.importErrors(valid);\n\t }\n\t });\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates whether the instance matches exactly one of the given schemas\n\t * @param instance\n\t * @param schema\n\t * @param options\n\t * @param ctx\n\t * @return {String|null}\n\t */\n\tvalidators.oneOf = function validateOneOf(instance, schema, options, ctx) {\n\t // Ignore undefined instances\n\t if (instance === undefined) {\n\t return null;\n\t }\n\t if (!(schema.oneOf instanceof Array)) {\n\t throw new SchemaError(\"oneOf must be an array\");\n\t }\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t var count = schema.oneOf.filter(testSchema.bind(this, instance, options, ctx)).length;\n\t var list = schema.oneOf.map(function (v, i) {\n\t return v.id && '<' + v.id + '>' || v.title && JSON.stringify(v.title) || v['$ref'] && '<' + v['$ref'] + '>' || '[subschema ' + i + ']';\n\t });\n\t if (count !== 1) {\n\t result.addError({\n\t name: 'oneOf',\n\t argument: list,\n\t message: \"is not exactly one from \" + list.join(',')\n\t });\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates properties\n\t * @param instance\n\t * @param schema\n\t * @param options\n\t * @param ctx\n\t * @return {String|null|ValidatorResult}\n\t */\n\tvalidators.properties = function validateProperties(instance, schema, options, ctx) {\n\t if (instance === undefined || !(instance instanceof Object)) return;\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t var properties = schema.properties || {};\n\t for (var property in properties) {\n\t var prop = (instance || undefined) && instance[property];\n\t var res = this.validateSchema(prop, properties[property], options, ctx.makeChild(properties[property], property));\n\t if (res.instance !== result.instance[property]) result.instance[property] = res.instance;\n\t result.importErrors(res);\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Test a specific property within in instance against the additionalProperties schema attribute\n\t * This ignores properties with definitions in the properties schema attribute, but no other attributes.\n\t * If too many more types of property-existance tests pop up they may need their own class of tests (like `type` has)\n\t * @private\n\t * @return {boolean}\n\t */\n\tfunction testAdditionalProperty(instance, schema, options, ctx, property, result) {\n\t if (schema.properties && schema.properties[property] !== undefined) {\n\t return;\n\t }\n\t if (schema.additionalProperties === false) {\n\t result.addError({\n\t name: 'additionalProperties',\n\t argument: property,\n\t message: \"additionalProperty \" + JSON.stringify(property) + \" exists in instance when not allowed\"\n\t });\n\t } else {\n\t var additionalProperties = schema.additionalProperties || {};\n\t var res = this.validateSchema(instance[property], additionalProperties, options, ctx.makeChild(additionalProperties, property));\n\t if (res.instance !== result.instance[property]) result.instance[property] = res.instance;\n\t result.importErrors(res);\n\t }\n\t}\n\t\n\t/**\n\t * Validates patternProperties\n\t * @param instance\n\t * @param schema\n\t * @param options\n\t * @param ctx\n\t * @return {String|null|ValidatorResult}\n\t */\n\tvalidators.patternProperties = function validatePatternProperties(instance, schema, options, ctx) {\n\t if (instance === undefined) return;\n\t if (!this.types.object(instance)) return;\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t var patternProperties = schema.patternProperties || {};\n\t\n\t for (var property in instance) {\n\t var test = true;\n\t for (var pattern in patternProperties) {\n\t var expr = new RegExp(pattern);\n\t if (!expr.test(property)) {\n\t continue;\n\t }\n\t test = false;\n\t var res = this.validateSchema(instance[property], patternProperties[pattern], options, ctx.makeChild(patternProperties[pattern], property));\n\t if (res.instance !== result.instance[property]) result.instance[property] = res.instance;\n\t result.importErrors(res);\n\t }\n\t if (test) {\n\t testAdditionalProperty.call(this, instance, schema, options, ctx, property, result);\n\t }\n\t }\n\t\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates additionalProperties\n\t * @param instance\n\t * @param schema\n\t * @param options\n\t * @param ctx\n\t * @return {String|null|ValidatorResult}\n\t */\n\tvalidators.additionalProperties = function validateAdditionalProperties(instance, schema, options, ctx) {\n\t if (instance === undefined) return;\n\t if (!this.types.object(instance)) return;\n\t // if patternProperties is defined then we'll test when that one is called instead\n\t if (schema.patternProperties) {\n\t return null;\n\t }\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t for (var property in instance) {\n\t testAdditionalProperty.call(this, instance, schema, options, ctx, property, result);\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates whether the instance value is at least of a certain length, when the instance value is a string.\n\t * @param instance\n\t * @param schema\n\t * @return {String|null}\n\t */\n\tvalidators.minProperties = function validateMinProperties(instance, schema, options, ctx) {\n\t if (!instance || typeof instance !== 'object') {\n\t return null;\n\t }\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t var keys = Object.keys(instance);\n\t if (!(keys.length >= schema.minProperties)) {\n\t result.addError({\n\t name: 'minProperties',\n\t argument: schema.minProperties,\n\t message: \"does not meet minimum property length of \" + schema.minProperties\n\t });\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates whether the instance value is at most of a certain length, when the instance value is a string.\n\t * @param instance\n\t * @param schema\n\t * @return {String|null}\n\t */\n\tvalidators.maxProperties = function validateMaxProperties(instance, schema, options, ctx) {\n\t if (!instance || typeof instance !== 'object') {\n\t return null;\n\t }\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t var keys = Object.keys(instance);\n\t if (!(keys.length <= schema.maxProperties)) {\n\t result.addError({\n\t name: 'maxProperties',\n\t argument: schema.maxProperties,\n\t message: \"does not meet maximum property length of \" + schema.maxProperties\n\t });\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates items when instance is an array\n\t * @param instance\n\t * @param schema\n\t * @param options\n\t * @param ctx\n\t * @return {String|null|ValidatorResult}\n\t */\n\tvalidators.items = function validateItems(instance, schema, options, ctx) {\n\t if (!(instance instanceof Array)) {\n\t return null;\n\t }\n\t var self = this;\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t if (instance === undefined || !schema.items) {\n\t return result;\n\t }\n\t instance.every(function (value, i) {\n\t var items = schema.items instanceof Array ? schema.items[i] || schema.additionalItems : schema.items;\n\t if (items === undefined) {\n\t return true;\n\t }\n\t if (items === false) {\n\t result.addError({\n\t name: 'items',\n\t message: \"additionalItems not permitted\"\n\t });\n\t return false;\n\t }\n\t var res = self.validateSchema(value, items, options, ctx.makeChild(items, i));\n\t if (res.instance !== result.instance[i]) result.instance[i] = res.instance;\n\t result.importErrors(res);\n\t return true;\n\t });\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates minimum and exclusiveMinimum when the type of the instance value is a number.\n\t * @param instance\n\t * @param schema\n\t * @return {String|null}\n\t */\n\tvalidators.minimum = function validateMinimum(instance, schema, options, ctx) {\n\t if (typeof instance !== 'number') {\n\t return null;\n\t }\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t var valid = true;\n\t if (schema.exclusiveMinimum && schema.exclusiveMinimum === true) {\n\t valid = instance > schema.minimum;\n\t } else {\n\t valid = instance >= schema.minimum;\n\t }\n\t if (!valid) {\n\t result.addError({\n\t name: 'minimum',\n\t argument: schema.minimum,\n\t message: \"must have a minimum value of \" + schema.minimum\n\t });\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates maximum and exclusiveMaximum when the type of the instance value is a number.\n\t * @param instance\n\t * @param schema\n\t * @return {String|null}\n\t */\n\tvalidators.maximum = function validateMaximum(instance, schema, options, ctx) {\n\t if (typeof instance !== 'number') {\n\t return null;\n\t }\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t var valid;\n\t if (schema.exclusiveMaximum && schema.exclusiveMaximum === true) {\n\t valid = instance < schema.maximum;\n\t } else {\n\t valid = instance <= schema.maximum;\n\t }\n\t if (!valid) {\n\t result.addError({\n\t name: 'maximum',\n\t argument: schema.maximum,\n\t message: \"must have a maximum value of \" + schema.maximum\n\t });\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates divisibleBy when the type of the instance value is a number.\n\t * Of course, this is susceptible to floating point error since it compares the floating points\n\t * and not the JSON byte sequences to arbitrary precision.\n\t * @param instance\n\t * @param schema\n\t * @return {String|null}\n\t */\n\tvalidators.divisibleBy = function validateDivisibleBy(instance, schema, options, ctx) {\n\t if (typeof instance !== 'number') {\n\t return null;\n\t }\n\t\n\t if (schema.divisibleBy == 0) {\n\t throw new SchemaError(\"divisibleBy cannot be zero\");\n\t }\n\t\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t if (instance / schema.divisibleBy % 1) {\n\t result.addError({\n\t name: 'divisibleBy',\n\t argument: schema.divisibleBy,\n\t message: \"is not divisible by (multiple of) \" + JSON.stringify(schema.divisibleBy)\n\t });\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates divisibleBy when the type of the instance value is a number.\n\t * Of course, this is susceptible to floating point error since it compares the floating points\n\t * and not the JSON byte sequences to arbitrary precision.\n\t * @param instance\n\t * @param schema\n\t * @return {String|null}\n\t */\n\tvalidators.multipleOf = function validateMultipleOf(instance, schema, options, ctx) {\n\t if (typeof instance !== 'number') {\n\t return null;\n\t }\n\t\n\t if (schema.multipleOf == 0) {\n\t throw new SchemaError(\"multipleOf cannot be zero\");\n\t }\n\t\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t if (instance / schema.multipleOf % 1) {\n\t result.addError({\n\t name: 'multipleOf',\n\t argument: schema.multipleOf,\n\t message: \"is not a multiple of (divisible by) \" + JSON.stringify(schema.multipleOf)\n\t });\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates whether the instance value is present.\n\t * @param instance\n\t * @param schema\n\t * @return {String|null}\n\t */\n\tvalidators.required = function validateRequired(instance, schema, options, ctx) {\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t if (instance === undefined && schema.required === true) {\n\t result.addError({\n\t name: 'required',\n\t message: \"is required\"\n\t });\n\t } else if (instance && typeof instance === 'object' && Array.isArray(schema.required)) {\n\t schema.required.forEach(function (n) {\n\t if (instance[n] === undefined) {\n\t result.addError({\n\t name: 'required',\n\t argument: n,\n\t message: \"requires property \" + JSON.stringify(n)\n\t });\n\t }\n\t });\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates whether the instance value matches the regular expression, when the instance value is a string.\n\t * @param instance\n\t * @param schema\n\t * @return {String|null}\n\t */\n\tvalidators.pattern = function validatePattern(instance, schema, options, ctx) {\n\t if (typeof instance !== 'string') {\n\t return null;\n\t }\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t if (!instance.match(schema.pattern)) {\n\t result.addError({\n\t name: 'pattern',\n\t argument: schema.pattern,\n\t message: \"does not match pattern \" + JSON.stringify(schema.pattern)\n\t });\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates whether the instance value is of a certain defined format, when the instance value is a string.\n\t * The following format are supported:\n\t * - date-time\n\t * - date\n\t * - time\n\t * - ip-address\n\t * - ipv6\n\t * - uri\n\t * - color\n\t * - host-name\n\t * - alpha\n\t * - alpha-numeric\n\t * - utc-millisec\n\t * @param instance\n\t * @param schema\n\t * @param [options]\n\t * @param [ctx]\n\t * @return {String|null}\n\t */\n\tvalidators.format = function validateFormat(instance, schema, options, ctx) {\n\t if (!(typeof instance === 'string')) {\n\t return null;\n\t }\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t if (!helpers.isFormat(instance, schema.format)) {\n\t result.addError({\n\t name: 'format',\n\t argument: schema.format,\n\t message: \"does not conform to the \" + JSON.stringify(schema.format) + \" format\"\n\t });\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates whether the instance value is at least of a certain length, when the instance value is a string.\n\t * @param instance\n\t * @param schema\n\t * @return {String|null}\n\t */\n\tvalidators.minLength = function validateMinLength(instance, schema, options, ctx) {\n\t if (!(typeof instance === 'string')) {\n\t return null;\n\t }\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t if (!(instance.length >= schema.minLength)) {\n\t result.addError({\n\t name: 'minLength',\n\t argument: schema.minLength,\n\t message: \"does not meet minimum length of \" + schema.minLength\n\t });\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates whether the instance value is at most of a certain length, when the instance value is a string.\n\t * @param instance\n\t * @param schema\n\t * @return {String|null}\n\t */\n\tvalidators.maxLength = function validateMaxLength(instance, schema, options, ctx) {\n\t if (!(typeof instance === 'string')) {\n\t return null;\n\t }\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t if (!(instance.length <= schema.maxLength)) {\n\t result.addError({\n\t name: 'maxLength',\n\t argument: schema.maxLength,\n\t message: \"does not meet maximum length of \" + schema.maxLength\n\t });\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates whether instance contains at least a minimum number of items, when the instance is an Array.\n\t * @param instance\n\t * @param schema\n\t * @return {String|null}\n\t */\n\tvalidators.minItems = function validateMinItems(instance, schema, options, ctx) {\n\t if (!(instance instanceof Array)) {\n\t return null;\n\t }\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t if (!(instance.length >= schema.minItems)) {\n\t result.addError({\n\t name: 'minItems',\n\t argument: schema.minItems,\n\t message: \"does not meet minimum length of \" + schema.minItems\n\t });\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates whether instance contains no more than a maximum number of items, when the instance is an Array.\n\t * @param instance\n\t * @param schema\n\t * @return {String|null}\n\t */\n\tvalidators.maxItems = function validateMaxItems(instance, schema, options, ctx) {\n\t if (!(instance instanceof Array)) {\n\t return null;\n\t }\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t if (!(instance.length <= schema.maxItems)) {\n\t result.addError({\n\t name: 'maxItems',\n\t argument: schema.maxItems,\n\t message: \"does not meet maximum length of \" + schema.maxItems\n\t });\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates that every item in an instance array is unique, when instance is an array\n\t * @param instance\n\t * @param schema\n\t * @param options\n\t * @param ctx\n\t * @return {String|null|ValidatorResult}\n\t */\n\tvalidators.uniqueItems = function validateUniqueItems(instance, schema, options, ctx) {\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t if (!(instance instanceof Array)) {\n\t return result;\n\t }\n\t function testArrays(v, i, a) {\n\t for (var j = i + 1; j < a.length; j++) if (helpers.deepCompareStrict(v, a[j])) {\n\t return false;\n\t }\n\t return true;\n\t }\n\t if (!instance.every(testArrays)) {\n\t result.addError({\n\t name: 'uniqueItems',\n\t message: \"contains duplicate item\"\n\t });\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Deep compares arrays for duplicates\n\t * @param v\n\t * @param i\n\t * @param a\n\t * @private\n\t * @return {boolean}\n\t */\n\tfunction testArrays(v, i, a) {\n\t var j,\n\t len = a.length;\n\t for (j = i + 1, len; j < len; j++) {\n\t if (helpers.deepCompareStrict(v, a[j])) {\n\t return false;\n\t }\n\t }\n\t return true;\n\t}\n\t\n\t/**\n\t * Validates whether there are no duplicates, when the instance is an Array.\n\t * @param instance\n\t * @return {String|null}\n\t */\n\tvalidators.uniqueItems = function validateUniqueItems(instance, schema, options, ctx) {\n\t if (!(instance instanceof Array)) {\n\t return null;\n\t }\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t if (!instance.every(testArrays)) {\n\t result.addError({\n\t name: 'uniqueItems',\n\t message: \"contains duplicate item\"\n\t });\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validate for the presence of dependency properties, if the instance is an object.\n\t * @param instance\n\t * @param schema\n\t * @param options\n\t * @param ctx\n\t * @return {null|ValidatorResult}\n\t */\n\tvalidators.dependencies = function validateDependencies(instance, schema, options, ctx) {\n\t if (!instance || typeof instance != 'object') {\n\t return null;\n\t }\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t for (var property in schema.dependencies) {\n\t if (instance[property] === undefined) {\n\t continue;\n\t }\n\t var dep = schema.dependencies[property];\n\t var childContext = ctx.makeChild(dep, property);\n\t if (typeof dep == 'string') {\n\t dep = [dep];\n\t }\n\t if (dep instanceof Array) {\n\t dep.forEach(function (prop) {\n\t if (instance[prop] === undefined) {\n\t result.addError({\n\t // FIXME there's two different \"dependencies\" errors here with slightly different outputs\n\t // Can we make these the same? Or should we create different error types?\n\t name: 'dependencies',\n\t argument: childContext.propertyPath,\n\t message: \"property \" + prop + \" not found, required by \" + childContext.propertyPath\n\t });\n\t }\n\t });\n\t } else {\n\t var res = this.validateSchema(instance, dep, options, childContext);\n\t if (result.instance !== res.instance) result.instance = res.instance;\n\t if (res && res.errors.length) {\n\t result.addError({\n\t name: 'dependencies',\n\t argument: childContext.propertyPath,\n\t message: \"does not meet dependency required by \" + childContext.propertyPath\n\t });\n\t result.importErrors(res);\n\t }\n\t }\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates whether the instance value is one of the enumerated values.\n\t *\n\t * @param instance\n\t * @param schema\n\t * @return {ValidatorResult|null}\n\t */\n\tvalidators['enum'] = function validateEnum(instance, schema, options, ctx) {\n\t if (!(schema['enum'] instanceof Array)) {\n\t throw new SchemaError(\"enum expects an array\", schema);\n\t }\n\t if (instance === undefined) {\n\t return null;\n\t }\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t if (!schema['enum'].some(helpers.deepCompareStrict.bind(null, instance))) {\n\t result.addError({\n\t name: 'enum',\n\t argument: schema['enum'],\n\t message: \"is not one of enum values: \" + schema['enum'].join(',')\n\t });\n\t }\n\t return result;\n\t};\n\t\n\t/**\n\t * Validates whether the instance if of a prohibited type.\n\t * @param instance\n\t * @param schema\n\t * @param options\n\t * @param ctx\n\t * @return {null|ValidatorResult}\n\t */\n\tvalidators.not = validators.disallow = function validateNot(instance, schema, options, ctx) {\n\t var self = this;\n\t if (instance === undefined) return null;\n\t var result = new ValidatorResult(instance, schema, options, ctx);\n\t var notTypes = schema.not || schema.disallow;\n\t if (!notTypes) return null;\n\t if (!(notTypes instanceof Array)) notTypes = [notTypes];\n\t notTypes.forEach(function (type) {\n\t if (self.testType(instance, schema, options, ctx, type)) {\n\t var schemaId = type && type.id && '<' + type.id + '>' || type;\n\t result.addError({\n\t name: 'not',\n\t argument: schemaId,\n\t message: \"is of prohibited type \" + schemaId\n\t });\n\t }\n\t });\n\t return result;\n\t};\n\t\n\tmodule.exports = attribute;\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar uri = __webpack_require__(4);\n\t\n\tvar ValidationError = exports.ValidationError = function ValidationError(message, instance, schema, propertyPath, name, argument) {\n\t if (propertyPath) {\n\t this.property = propertyPath;\n\t }\n\t if (message) {\n\t this.message = message;\n\t }\n\t if (schema) {\n\t if (schema.id) {\n\t this.schema = schema.id;\n\t } else {\n\t this.schema = schema;\n\t }\n\t }\n\t if (instance) {\n\t this.instance = instance;\n\t }\n\t this.name = name;\n\t this.argument = argument;\n\t this.stack = this.toString();\n\t};\n\t\n\tValidationError.prototype.toString = function toString() {\n\t return this.property + ' ' + this.message;\n\t};\n\t\n\tvar ValidatorResult = exports.ValidatorResult = function ValidatorResult(instance, schema, options, ctx) {\n\t this.instance = instance;\n\t this.schema = schema;\n\t this.propertyPath = ctx.propertyPath;\n\t this.errors = [];\n\t this.throwError = options && options.throwError;\n\t};\n\t\n\tValidatorResult.prototype.addError = function addError(detail) {\n\t var err;\n\t if (typeof detail == 'string') {\n\t err = new ValidationError(detail, this.instance, this.schema, this.propertyPath);\n\t } else {\n\t if (!detail) throw new Error('Missing error detail');\n\t if (!detail.message) throw new Error('Missing error message');\n\t if (!detail.name) throw new Error('Missing validator type');\n\t err = new ValidationError(detail.message, this.instance, this.schema, this.propertyPath, detail.name, detail.argument);\n\t }\n\t\n\t if (this.throwError) {\n\t throw err;\n\t }\n\t this.errors.push(err);\n\t return err;\n\t};\n\t\n\tValidatorResult.prototype.importErrors = function importErrors(res) {\n\t if (typeof res == 'string' || res && res.validatorType) {\n\t this.addError(res);\n\t } else if (res && res.errors) {\n\t var errs = this.errors;\n\t res.errors.forEach(function (v) {\n\t errs.push(v);\n\t });\n\t }\n\t};\n\t\n\tValidatorResult.prototype.toString = function toString(res) {\n\t return this.errors.map(function (v, i) {\n\t return i + ': ' + v.toString() + '\\n';\n\t }).join('');\n\t};\n\t\n\tObject.defineProperty(ValidatorResult.prototype, \"valid\", { get: function get() {\n\t return !this.errors.length;\n\t } });\n\t\n\t/**\n\t * Describes a problem with a Schema which prevents validation of an instance\n\t * @name SchemaError\n\t * @constructor\n\t */\n\tvar SchemaError = exports.SchemaError = function SchemaError(msg, schema) {\n\t this.message = msg;\n\t this.schema = schema;\n\t Error.call(this, msg);\n\t Error.captureStackTrace(this, SchemaError);\n\t};\n\tSchemaError.prototype = Object.create(Error.prototype, { constructor: { value: SchemaError, enumerable: false },\n\t name: { value: 'SchemaError', enumerable: false }\n\t});\n\t\n\tvar SchemaContext = exports.SchemaContext = function SchemaContext(schema, options, propertyPath, base, schemas) {\n\t this.schema = schema;\n\t this.options = options;\n\t this.propertyPath = propertyPath;\n\t this.base = base;\n\t this.schemas = schemas;\n\t};\n\t\n\tSchemaContext.prototype.resolve = function resolve(target) {\n\t return uri.resolve(this.base, target);\n\t};\n\t\n\tSchemaContext.prototype.makeChild = function makeChild(schema, propertyName) {\n\t var propertyPath = propertyName === undefined ? this.propertyPath : this.propertyPath + makeSuffix(propertyName);\n\t var base = uri.resolve(this.base, schema.id || '');\n\t var ctx = new SchemaContext(schema, this.options, propertyPath, base, Object.create(this.schemas));\n\t if (schema.id && !ctx.schemas[base]) {\n\t ctx.schemas[base] = schema;\n\t }\n\t return ctx;\n\t};\n\t\n\tvar FORMAT_REGEXPS = exports.FORMAT_REGEXPS = {\n\t 'date-time': /^\\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}[tT ]\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?([zZ]|[+-]\\d{2}:\\d{2})$/,\n\t 'date': /^\\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}$/,\n\t 'time': /^\\d{2}:\\d{2}:\\d{2}$/,\n\t\n\t 'email': /^(?:[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`\\{\\|\\}\\~]+\\.)*[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`\\{\\|\\}\\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-](?!\\.)){0,61}[a-zA-Z0-9]?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\\[(?:(?:[01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\.){3}(?:[01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\]))$/,\n\t 'ip-address': /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,\n\t 'ipv6': /^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/,\n\t 'uri': /^[a-zA-Z][a-zA-Z0-9+-.]*:[^\\s]*$/,\n\t\n\t 'color': /^(#?([0-9A-Fa-f]{3}){1,2}\\b|aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow|(rgb\\(\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*,\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*,\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*\\))|(rgb\\(\\s*(\\d?\\d%|100%)+\\s*,\\s*(\\d?\\d%|100%)+\\s*,\\s*(\\d?\\d%|100%)+\\s*\\)))$/,\n\t\n\t // hostname regex from: http://stackoverflow.com/a/1420225/5628\n\t 'hostname': /^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\\.?$/,\n\t 'host-name': /^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\\.?$/,\n\t\n\t 'alpha': /^[a-zA-Z]+$/,\n\t 'alphanumeric': /^[a-zA-Z0-9]+$/,\n\t 'utc-millisec': function utcMillisec(input) {\n\t return typeof input === 'string' && parseFloat(input) === parseInt(input, 10) && !isNaN(input);\n\t },\n\t 'regex': function regex(input) {\n\t var result = true;\n\t try {\n\t new RegExp(input);\n\t } catch (e) {\n\t result = false;\n\t }\n\t return result;\n\t },\n\t 'style': /\\s*(.+?):\\s*([^;]+);?/g,\n\t 'phone': /^\\+(?:[0-9] ?){6,14}[0-9]$/\n\t};\n\t\n\tFORMAT_REGEXPS.regexp = FORMAT_REGEXPS.regex;\n\tFORMAT_REGEXPS.pattern = FORMAT_REGEXPS.regex;\n\tFORMAT_REGEXPS.ipv4 = FORMAT_REGEXPS['ip-address'];\n\t\n\texports.isFormat = function isFormat(input, format) {\n\t if (FORMAT_REGEXPS[format] !== undefined) {\n\t if (FORMAT_REGEXPS[format] instanceof RegExp) {\n\t return FORMAT_REGEXPS[format].test(input);\n\t }\n\t if (typeof FORMAT_REGEXPS[format] === 'function') {\n\t return FORMAT_REGEXPS[format](input);\n\t }\n\t }\n\t return false;\n\t};\n\t\n\tvar makeSuffix = exports.makeSuffix = function makeSuffix(key) {\n\t key = key.toString();\n\t // This function could be capable of outputting valid a ECMAScript string, but the\n\t // resulting code for testing which form to use would be tens of thousands of characters long\n\t // That means this will use the name form for some illegal forms\n\t if (!key.match(/[.\\s\\[\\]]/) && !key.match(/^[\\d]/)) {\n\t return '.' + key;\n\t }\n\t if (key.match(/^\\d+$/)) {\n\t return '[' + key + ']';\n\t }\n\t return '[' + JSON.stringify(key) + ']';\n\t};\n\t\n\texports.deepCompareStrict = function deepCompareStrict(a, b) {\n\t if (typeof a !== typeof b) {\n\t return false;\n\t }\n\t if (a instanceof Array) {\n\t if (!(b instanceof Array)) {\n\t return false;\n\t }\n\t if (a.length !== b.length) {\n\t return false;\n\t }\n\t return a.every(function (v, i) {\n\t return deepCompareStrict(a[i], b[i]);\n\t });\n\t }\n\t if (typeof a === 'object') {\n\t if (!a || !b) {\n\t return a === b;\n\t }\n\t var aKeys = Object.keys(a);\n\t var bKeys = Object.keys(b);\n\t if (aKeys.length !== bKeys.length) {\n\t return false;\n\t }\n\t return aKeys.every(function (v) {\n\t return deepCompareStrict(a[v], b[v]);\n\t });\n\t }\n\t return a === b;\n\t};\n\t\n\tmodule.exports.deepMerge = function deepMerge(target, src) {\n\t var array = Array.isArray(src);\n\t var dst = array && [] || {};\n\t\n\t if (array) {\n\t target = target || [];\n\t dst = dst.concat(target);\n\t src.forEach(function (e, i) {\n\t if (typeof e === 'object') {\n\t dst[i] = deepMerge(target[i], e);\n\t } else {\n\t if (target.indexOf(e) === -1) {\n\t dst.push(e);\n\t }\n\t }\n\t });\n\t } else {\n\t if (target && typeof target === 'object') {\n\t Object.keys(target).forEach(function (key) {\n\t dst[key] = target[key];\n\t });\n\t }\n\t Object.keys(src).forEach(function (key) {\n\t if (typeof src[key] !== 'object' || !src[key]) {\n\t dst[key] = src[key];\n\t } else {\n\t if (!target[key]) {\n\t dst[key] = src[key];\n\t } else {\n\t dst[key] = deepMerge(target[key], src[key]);\n\t }\n\t }\n\t });\n\t }\n\t\n\t return dst;\n\t};\n\t\n\t/**\n\t * Validates instance against the provided schema\n\t * Implements URI+JSON Pointer encoding, e.g. \"%7e\"=\"~0\"=>\"~\", \"~1\"=\"%2f\"=>\"/\"\n\t * @param o\n\t * @param s The path to walk o along\n\t * @return any\n\t */\n\texports.objectGetPath = function objectGetPath(o, s) {\n\t var parts = s.split('/').slice(1);\n\t var k;\n\t while (typeof (k = parts.shift()) == 'string') {\n\t var n = decodeURIComponent(k.replace(/~0/, '~').replace(/~1/g, '/'));\n\t if (!(n in o)) return;\n\t o = o[n];\n\t }\n\t return o;\n\t};\n\t\n\t/**\n\t * Accept an Array of property names and return a JSON Pointer URI fragment\n\t * @param Array a\n\t * @return {String}\n\t */\n\texports.encodePath = function encodePointer(a) {\n\t // ~ must be encoded explicitly because hacks\n\t // the slash is encoded by encodeURIComponent\n\t return a.map(function (v) {\n\t return '/' + encodeURIComponent(v).replace(/~/g, '%7E');\n\t }).join('');\n\t};\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** react-jsonschema-form-0.1.0.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/dist/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 02253ab57745a07b23e6\n **/","import React from \"react\";\nimport { Validator } from \"jsonschema\";\n\nconst REQUIRED_FIELD_SYMBOL = \"*\";\n\nfunction defaultTypeValue(type) {\n switch (type) {\n case \"array\": return [];\n case \"boolean\": return false;\n case \"date-time\": return \"\";\n case \"number\": return 0;\n case \"object\": return {};\n case \"string\": return \"\";\n default: return undefined;\n }\n}\n\nfunction defaultFieldValue(formData, schema) {\n if (formData === null) {\n return defaultTypeValue(schema.type);\n }\n if (schema.default) {\n return schema.default;\n }\n return formData;\n}\n\nclass Field extends React.Component {\n get label() {\n const {label, required} = this.props;\n if (!label) {\n return null;\n }\n if (required) {\n return label + REQUIRED_FIELD_SYMBOL;\n }\n return label;\n }\n\n render() {\n const {type, children} = this.props;\n return (\n
;\n }\n}\n\nexport default class Form extends React.Component {\n constructor(props) {\n super(props);\n const edit = !!props.formData;\n const formData = props.formData || props.schema.default || null;\n this.state = {\n status: \"initial\",\n formData,\n edit,\n errors: edit ? this.validate(formData) : []\n };\n }\n\n validate(formData) {\n const validator = new Validator();\n return validator.validate(formData, this.props.schema).errors;\n }\n\n renderErrors() {\n if (this.state.edit && this.state.status !== \"editing\") {\n return ;\n }\n return null;\n }\n\n onChange(formData) {\n this.setState({\n status: \"editing\",\n formData,\n errors: this.validate(formData)\n }, _ => {\n if (this.props.onChange) {\n this.props.onChange(this.state);\n }\n });\n }\n\n onSubmit(event) {\n event.preventDefault();\n this.setState({status: \"submitted\"});\n const errors = this.validate(this.state.formData);\n if (Object.keys(errors).length > 0) {\n this.setState({errors}, _ => {\n if (this.props.onError) {\n this.props.onError(errors);\n } else {\n console.error(\"Form validation failed\", errors);\n }\n });\n return;\n } else if (this.props.onSubmit) {\n this.props.onSubmit(this.state);\n }\n this.setState({status: \"initial\"});\n }\n\n render() {\n const {schema} = this.props;\n const {formData} = this.state;\n return (\n \n );\n }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"root\":\"React\",\"commonjs\":\"react\",\"commonjs2\":\"react\",\"amd\":\"react\"}\n ** module id = 1\n ** module chunks = 0\n **/","'use strict';\n\nvar Validator = module.exports.Validator = require('./validator');\n\nmodule.exports.ValidatorResult = require('./helpers').ValidatorResult;\nmodule.exports.ValidationError = require('./helpers').ValidationError;\nmodule.exports.SchemaError = require('./helpers').SchemaError;\n\nmodule.exports.validate = function (instance, schema, options) {\n var v = new Validator();\n return v.validate(instance, schema, options);\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/jsonschema/lib/index.js\n **/","'use strict';\n\nvar urilib = require('url');\n\nvar attribute = require('./attribute');\nvar helpers = require('./helpers');\nvar ValidatorResult = helpers.ValidatorResult;\nvar SchemaError = helpers.SchemaError;\nvar SchemaContext = helpers.SchemaContext;\n\n/**\n * Creates a new Validator object\n * @name Validator\n * @constructor\n */\nvar Validator = function Validator () {\n this.schemas = {};\n this.unresolvedRefs = [];\n\n // Use Object.create to make this extensible without Validator instances stepping on each other's toes.\n this.types = Object.create(types);\n this.attributes = Object.create(attribute.validators);\n};\n\n// Hint at the presence of a property\nValidator.prototype.schemas = null;\nValidator.prototype.types = null;\nValidator.prototype.attributes = null;\nValidator.prototype.unresolvedRefs = null;\n\n/**\n * Adds a schema with a certain urn to the Validator instance.\n * @param schema\n * @param urn\n * @return {Object}\n */\nValidator.prototype.addSchema = function addSchema (schema, uri) {\n if (!schema) {\n return null;\n }\n var ourUri = uri || schema.id;\n this.addSubSchema(ourUri, schema);\n if (ourUri) {\n this.schemas[ourUri] = schema;\n }\n return this.schemas[ourUri];\n};\n\nValidator.prototype.addSubSchema = function addSubSchema(baseuri, schema) {\n if(!schema || typeof schema!='object') return;\n // Mark all referenced schemas so we can tell later which schemas are referred to, but never defined\n if(schema.$ref){\n var resolvedUri = urilib.resolve(baseuri, schema.$ref);\n // Only mark unknown schemas as unresolved\n if (this.schemas[resolvedUri] === undefined) {\n this.schemas[resolvedUri] = null;\n this.unresolvedRefs.push(resolvedUri);\n }\n return;\n }\n var ourUri = schema.id && urilib.resolve(baseuri, schema.id);\n var ourBase = ourUri || baseuri;\n if (ourUri) {\n if(this.schemas[ourUri]){\n if(!helpers.deepCompareStrict(this.schemas[ourUri], schema)){\n throw new Error('Schema <'+schema+'> already exists with different definition');\n }\n return this.schemas[ourUri];\n }\n this.schemas[ourUri] = schema;\n var documentUri = ourUri.replace(/^([^#]*)#$/, '$1');\n this.schemas[documentUri] = schema;\n }\n this.addSubSchemaArray(ourBase, ((schema.items instanceof Array)?schema.items:[schema.items]));\n this.addSubSchemaArray(ourBase, ((schema.extends instanceof Array)?schema.extends:[schema.extends]));\n this.addSubSchema(ourBase, schema.additionalItems);\n this.addSubSchemaObject(ourBase, schema.properties);\n this.addSubSchema(ourBase, schema.additionalProperties);\n this.addSubSchemaObject(ourBase, schema.definitions);\n this.addSubSchemaObject(ourBase, schema.patternProperties);\n this.addSubSchemaObject(ourBase, schema.dependencies);\n this.addSubSchemaArray(ourBase, schema.disallow);\n this.addSubSchemaArray(ourBase, schema.allOf);\n this.addSubSchemaArray(ourBase, schema.anyOf);\n this.addSubSchemaArray(ourBase, schema.oneOf);\n this.addSubSchema(ourBase, schema.not);\n return this.schemas[ourUri];\n};\n\nValidator.prototype.addSubSchemaArray = function addSubSchemaArray(baseuri, schemas) {\n if(!(schemas instanceof Array)) return;\n for(var i=0; i\", schema);\n }\n var subschema = helpers.objectGetPath(ctx.schemas[document], fragment.substr(1));\n if(subschema===undefined){\n throw new SchemaError(\"no such schema \" + fragment + \" located in <\" + document + \">\", schema);\n }\n return {subschema: subschema, switchSchema: switchSchema};\n};\n\n/**\n * Tests whether the instance if of a certain type.\n * @private\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @param type\n * @return {boolean}\n */\nValidator.prototype.testType = function validateType (instance, schema, options, ctx, type) {\n if (typeof this.types[type] == 'function') {\n return this.types[type].call(this, instance);\n }\n if (type && typeof type == 'object') {\n var res = this.validateSchema(instance, type, options, ctx);\n return res === undefined || !(res && res.errors.length);\n }\n // Undefined or properties not on the list are acceptable, same as not being defined\n return true;\n};\n\nvar types = Validator.prototype.types = {};\ntypes.string = function testString (instance) {\n return typeof instance == 'string';\n};\ntypes.number = function testNumber (instance) {\n return typeof instance == 'number';\n};\ntypes.integer = function testInteger (instance) {\n return (typeof instance == 'number') && instance % 1 === 0;\n};\ntypes.boolean = function testBoolean (instance) {\n return typeof instance == 'boolean';\n};\ntypes.number = function testNumber (instance) {\n return typeof instance == 'number';\n};\ntypes.array = function testArray (instance) {\n return instance instanceof Array;\n};\ntypes['null'] = function testNull (instance) {\n return instance === null;\n};\ntypes.date = function testDate (instance) {\n return instance instanceof Date;\n};\ntypes.any = function testAny (instance) {\n return true;\n};\ntypes.object = function testObject (instance) {\n // TODO: fix this - see #15\n return instance && (typeof instance) === 'object' && !(instance instanceof Array) && !(instance instanceof Date);\n};\n\nmodule.exports = Validator;\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/jsonschema/lib/validator.js\n **/","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar punycode = require('punycode');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a puny coded representation of \"domain\".\n // It only converts the part of the domain name that\n // has non ASCII characters. I.e. it dosent matter if\n // you call it with a domain that already is in ASCII.\n var domainArray = this.hostname.split('.');\n var newOut = [];\n for (var i = 0; i < domainArray.length; ++i) {\n var s = domainArray[i];\n newOut.push(s.match(/[^A-Za-z0-9_-]/) ?\n 'xn--' + punycode.encode(s) : s);\n }\n this.hostname = newOut.join('.');\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) this.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function() {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query &&\n isObject(this.query) &&\n Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n Object.keys(this).forEach(function(k) {\n result[k] = this[k];\n }, this);\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n Object.keys(relative).forEach(function(k) {\n if (k !== 'protocol')\n result[k] = relative[k];\n });\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n Object.keys(relative).forEach(function(k) {\n result[k] = relative[k];\n });\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especialy happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!isNull(result.pathname) || !isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host) && (last === '.' || last === '..') ||\n last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last == '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especialy happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!isNull(result.pathname) || !isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n\nfunction isString(arg) {\n return typeof arg === \"string\";\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isNull(arg) {\n return arg === null;\n}\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/webpack/~/node-libs-browser/~/url/url.js\n **/","/*! https://mths.be/punycode v1.3.2 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * http://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.3.2',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/webpack/~/node-libs-browser/~/url/~/punycode/punycode.js\n **/","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tmodule.children = [];\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/webpack/buildin/module.js\n **/","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/webpack/~/node-libs-browser/~/url/~/querystring/index.js\n **/","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (Array.isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/webpack/~/node-libs-browser/~/url/~/querystring/decode.js\n **/","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return Object.keys(obj).map(function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (Array.isArray(obj[k])) {\n return obj[k].map(function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/webpack/~/node-libs-browser/~/url/~/querystring/encode.js\n **/","'use strict';\n\nvar helpers = require('./helpers');\n\n/** @type ValidatorResult */\nvar ValidatorResult = helpers.ValidatorResult;\n/** @type SchemaError */\nvar SchemaError = helpers.SchemaError;\n\nvar attribute = {};\n\nattribute.ignoreProperties = {\n // informative properties\n 'id': true,\n 'default': true,\n 'description': true,\n 'title': true,\n // arguments to other properties\n 'exclusiveMinimum': true,\n 'exclusiveMaximum': true,\n 'additionalItems': true,\n // special-handled properties\n '$schema': true,\n '$ref': true,\n 'extends': true\n};\n\n/**\n * @name validators\n */\nvar validators = attribute.validators = {};\n\n/**\n * Validates whether the instance if of a certain type\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {ValidatorResult|null}\n */\nvalidators.type = function validateType (instance, schema, options, ctx) {\n // Ignore undefined instances\n if (instance === undefined) {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n var types = (schema.type instanceof Array) ? schema.type : [schema.type];\n if (!types.some(this.testType.bind(this, instance, schema, options, ctx))) {\n var list = types.map(function (v) {\n return v.id && ('<' + v.id + '>') || (v+'');\n });\n result.addError({\n name: 'type',\n argument: list,\n message: \"is not of a type(s) \" + list,\n });\n }\n return result;\n};\n\nfunction testSchema(instance, options, ctx, schema){\n return this.validateSchema(instance, schema, options, ctx).valid;\n}\n\n/**\n * Validates whether the instance matches some of the given schemas\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {ValidatorResult|null}\n */\nvalidators.anyOf = function validateAnyOf (instance, schema, options, ctx) {\n // Ignore undefined instances\n if (instance === undefined) {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (!(schema.anyOf instanceof Array)){\n throw new SchemaError(\"anyOf must be an array\");\n }\n if (!schema.anyOf.some(testSchema.bind(this, instance, options, ctx))) {\n var list = schema.anyOf.map(function (v, i) {\n return (v.id && ('<' + v.id + '>')) || (v.title && JSON.stringify(v.title)) || (v['$ref'] && ('<' + v['$ref'] + '>')) || '[subschema '+i+']';\n });\n result.addError({\n name: 'anyOf',\n argument: list,\n message: \"is not any of \" + list.join(','),\n });\n }\n return result;\n};\n\n/**\n * Validates whether the instance matches every given schema\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {String|null}\n */\nvalidators.allOf = function validateAllOf (instance, schema, options, ctx) {\n // Ignore undefined instances\n if (instance === undefined) {\n return null;\n }\n if (!(schema.allOf instanceof Array)){\n throw new SchemaError(\"allOf must be an array\");\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n var self = this;\n schema.allOf.forEach(function(v, i){\n var valid = self.validateSchema(instance, v, options, ctx);\n if(!valid.valid){\n var msg = (v.id && ('<' + v.id + '>')) || (v.title && JSON.stringify(v.title)) || (v['$ref'] && ('<' + v['$ref'] + '>')) || '[subschema '+i+']';\n result.addError({\n name: 'allOf',\n argument: { id: msg, length: valid.errors.length, valid: valid },\n message: 'does not match allOf schema ' + msg + ' with ' + valid.errors.length + ' error[s]:',\n });\n result.importErrors(valid);\n }\n });\n return result;\n};\n\n/**\n * Validates whether the instance matches exactly one of the given schemas\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {String|null}\n */\nvalidators.oneOf = function validateOneOf (instance, schema, options, ctx) {\n // Ignore undefined instances\n if (instance === undefined) {\n return null;\n }\n if (!(schema.oneOf instanceof Array)){\n throw new SchemaError(\"oneOf must be an array\");\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n var count = schema.oneOf.filter(testSchema.bind(this, instance, options, ctx)).length;\n var list = schema.oneOf.map(function (v, i) {\n return (v.id && ('<' + v.id + '>')) || (v.title && JSON.stringify(v.title)) || (v['$ref'] && ('<' + v['$ref'] + '>')) || '[subschema '+i+']';\n });\n if (count!==1) {\n result.addError({\n name: 'oneOf',\n argument: list,\n message: \"is not exactly one from \" + list.join(','),\n });\n }\n return result;\n};\n\n/**\n * Validates properties\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {String|null|ValidatorResult}\n */\nvalidators.properties = function validateProperties (instance, schema, options, ctx) {\n if(instance === undefined || !(instance instanceof Object)) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n var properties = schema.properties || {};\n for (var property in properties) {\n var prop = (instance || undefined) && instance[property];\n var res = this.validateSchema(prop, properties[property], options, ctx.makeChild(properties[property], property));\n if(res.instance !== result.instance[property]) result.instance[property] = res.instance;\n result.importErrors(res);\n }\n return result;\n};\n\n/**\n * Test a specific property within in instance against the additionalProperties schema attribute\n * This ignores properties with definitions in the properties schema attribute, but no other attributes.\n * If too many more types of property-existance tests pop up they may need their own class of tests (like `type` has)\n * @private\n * @return {boolean}\n */\nfunction testAdditionalProperty (instance, schema, options, ctx, property, result) {\n if (schema.properties && schema.properties[property] !== undefined) {\n return;\n }\n if (schema.additionalProperties === false) {\n result.addError({\n name: 'additionalProperties',\n argument: property,\n message: \"additionalProperty \" + JSON.stringify(property) + \" exists in instance when not allowed\",\n });\n } else {\n var additionalProperties = schema.additionalProperties || {};\n var res = this.validateSchema(instance[property], additionalProperties, options, ctx.makeChild(additionalProperties, property));\n if(res.instance !== result.instance[property]) result.instance[property] = res.instance;\n result.importErrors(res);\n }\n}\n\n/**\n * Validates patternProperties\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {String|null|ValidatorResult}\n */\nvalidators.patternProperties = function validatePatternProperties (instance, schema, options, ctx) {\n if(instance === undefined) return;\n if(!this.types.object(instance)) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n var patternProperties = schema.patternProperties || {};\n\n for (var property in instance) {\n var test = true;\n for (var pattern in patternProperties) {\n var expr = new RegExp(pattern);\n if (!expr.test(property)) {\n continue;\n }\n test = false;\n var res = this.validateSchema(instance[property], patternProperties[pattern], options, ctx.makeChild(patternProperties[pattern], property));\n if(res.instance !== result.instance[property]) result.instance[property] = res.instance;\n result.importErrors(res);\n }\n if (test) {\n testAdditionalProperty.call(this, instance, schema, options, ctx, property, result);\n }\n }\n\n return result;\n};\n\n/**\n * Validates additionalProperties\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {String|null|ValidatorResult}\n */\nvalidators.additionalProperties = function validateAdditionalProperties (instance, schema, options, ctx) {\n if(instance === undefined) return;\n if(!this.types.object(instance)) return;\n // if patternProperties is defined then we'll test when that one is called instead\n if (schema.patternProperties) {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n for (var property in instance) {\n testAdditionalProperty.call(this, instance, schema, options, ctx, property, result);\n }\n return result;\n};\n\n/**\n * Validates whether the instance value is at least of a certain length, when the instance value is a string.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.minProperties = function validateMinProperties (instance, schema, options, ctx) {\n if (!instance || typeof instance !== 'object') {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n var keys = Object.keys(instance);\n if (!(keys.length >= schema.minProperties)) {\n result.addError({\n name: 'minProperties',\n argument: schema.minProperties,\n message: \"does not meet minimum property length of \" + schema.minProperties,\n })\n }\n return result;\n};\n\n/**\n * Validates whether the instance value is at most of a certain length, when the instance value is a string.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.maxProperties = function validateMaxProperties (instance, schema, options, ctx) {\n if (!instance || typeof instance !== 'object') {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n var keys = Object.keys(instance);\n if (!(keys.length <= schema.maxProperties)) {\n result.addError({\n name: 'maxProperties',\n argument: schema.maxProperties,\n message: \"does not meet maximum property length of \" + schema.maxProperties,\n });\n }\n return result;\n};\n\n/**\n * Validates items when instance is an array\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {String|null|ValidatorResult}\n */\nvalidators.items = function validateItems (instance, schema, options, ctx) {\n if (!(instance instanceof Array)) {\n return null;\n }\n var self = this;\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (instance === undefined || !schema.items) {\n return result;\n }\n instance.every(function (value, i) {\n var items = (schema.items instanceof Array) ? (schema.items[i] || schema.additionalItems) : schema.items;\n if (items === undefined) {\n return true;\n }\n if (items === false) {\n result.addError({\n name: 'items',\n message: \"additionalItems not permitted\",\n });\n return false;\n }\n var res = self.validateSchema(value, items, options, ctx.makeChild(items, i));\n if(res.instance !== result.instance[i]) result.instance[i] = res.instance;\n result.importErrors(res);\n return true;\n });\n return result;\n};\n\n/**\n * Validates minimum and exclusiveMinimum when the type of the instance value is a number.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.minimum = function validateMinimum (instance, schema, options, ctx) {\n if (typeof instance !== 'number') {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n var valid = true;\n if (schema.exclusiveMinimum && schema.exclusiveMinimum === true) {\n valid = instance > schema.minimum;\n } else {\n valid = instance >= schema.minimum;\n }\n if (!valid) {\n result.addError({\n name: 'minimum',\n argument: schema.minimum,\n message: \"must have a minimum value of \" + schema.minimum,\n });\n }\n return result;\n};\n\n/**\n * Validates maximum and exclusiveMaximum when the type of the instance value is a number.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.maximum = function validateMaximum (instance, schema, options, ctx) {\n if (typeof instance !== 'number') {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n var valid;\n if (schema.exclusiveMaximum && schema.exclusiveMaximum === true) {\n valid = instance < schema.maximum;\n } else {\n valid = instance <= schema.maximum;\n }\n if (!valid) {\n result.addError({\n name: 'maximum',\n argument: schema.maximum,\n message: \"must have a maximum value of \" + schema.maximum,\n });\n }\n return result;\n};\n\n/**\n * Validates divisibleBy when the type of the instance value is a number.\n * Of course, this is susceptible to floating point error since it compares the floating points\n * and not the JSON byte sequences to arbitrary precision.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.divisibleBy = function validateDivisibleBy (instance, schema, options, ctx) {\n if (typeof instance !== 'number') {\n return null;\n }\n\n if (schema.divisibleBy == 0) {\n throw new SchemaError(\"divisibleBy cannot be zero\");\n }\n\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (instance / schema.divisibleBy % 1) {\n result.addError({\n name: 'divisibleBy',\n argument: schema.divisibleBy,\n message: \"is not divisible by (multiple of) \" + JSON.stringify(schema.divisibleBy),\n });\n }\n return result;\n};\n\n/**\n * Validates divisibleBy when the type of the instance value is a number.\n * Of course, this is susceptible to floating point error since it compares the floating points\n * and not the JSON byte sequences to arbitrary precision.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.multipleOf = function validateMultipleOf (instance, schema, options, ctx) {\n if (typeof instance !== 'number') {\n return null;\n }\n\n if (schema.multipleOf == 0) {\n throw new SchemaError(\"multipleOf cannot be zero\");\n }\n\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (instance / schema.multipleOf % 1) {\n result.addError({\n name: 'multipleOf',\n argument: schema.multipleOf,\n message: \"is not a multiple of (divisible by) \" + JSON.stringify(schema.multipleOf),\n });\n }\n return result;\n};\n\n/**\n * Validates whether the instance value is present.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.required = function validateRequired (instance, schema, options, ctx) {\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (instance === undefined && schema.required === true) {\n result.addError({\n name: 'required',\n message: \"is required\"\n });\n } else if (instance && typeof instance==='object' && Array.isArray(schema.required)) {\n schema.required.forEach(function(n){\n if(instance[n]===undefined){\n result.addError({\n name: 'required',\n argument: n,\n message: \"requires property \" + JSON.stringify(n),\n });\n }\n });\n }\n return result;\n};\n\n/**\n * Validates whether the instance value matches the regular expression, when the instance value is a string.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.pattern = function validatePattern (instance, schema, options, ctx) {\n if (typeof instance !== 'string') {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (!instance.match(schema.pattern)) {\n result.addError({\n name: 'pattern',\n argument: schema.pattern,\n message: \"does not match pattern \" + JSON.stringify(schema.pattern),\n });\n }\n return result;\n};\n\n/**\n * Validates whether the instance value is of a certain defined format, when the instance value is a string.\n * The following format are supported:\n * - date-time\n * - date\n * - time\n * - ip-address\n * - ipv6\n * - uri\n * - color\n * - host-name\n * - alpha\n * - alpha-numeric\n * - utc-millisec\n * @param instance\n * @param schema\n * @param [options]\n * @param [ctx]\n * @return {String|null}\n */\nvalidators.format = function validateFormat (instance, schema, options, ctx) {\n if (!(typeof instance === 'string')) {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (!helpers.isFormat(instance, schema.format)) {\n result.addError({\n name: 'format',\n argument: schema.format,\n message: \"does not conform to the \" + JSON.stringify(schema.format) + \" format\",\n });\n }\n return result;\n};\n\n/**\n * Validates whether the instance value is at least of a certain length, when the instance value is a string.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.minLength = function validateMinLength (instance, schema, options, ctx) {\n if (!(typeof instance === 'string')) {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (!(instance.length >= schema.minLength)) {\n result.addError({\n name: 'minLength',\n argument: schema.minLength,\n message: \"does not meet minimum length of \" + schema.minLength,\n });\n }\n return result;\n};\n\n/**\n * Validates whether the instance value is at most of a certain length, when the instance value is a string.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.maxLength = function validateMaxLength (instance, schema, options, ctx) {\n if (!(typeof instance === 'string')) {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (!(instance.length <= schema.maxLength)) {\n result.addError({\n name: 'maxLength',\n argument: schema.maxLength,\n message: \"does not meet maximum length of \" + schema.maxLength,\n });\n }\n return result;\n};\n\n/**\n * Validates whether instance contains at least a minimum number of items, when the instance is an Array.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.minItems = function validateMinItems (instance, schema, options, ctx) {\n if (!(instance instanceof Array)) {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (!(instance.length >= schema.minItems)) {\n result.addError({\n name: 'minItems',\n argument: schema.minItems,\n message: \"does not meet minimum length of \" + schema.minItems,\n });\n }\n return result;\n};\n\n/**\n * Validates whether instance contains no more than a maximum number of items, when the instance is an Array.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.maxItems = function validateMaxItems (instance, schema, options, ctx) {\n if (!(instance instanceof Array)) {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (!(instance.length <= schema.maxItems)) {\n result.addError({\n name: 'maxItems',\n argument: schema.maxItems,\n message: \"does not meet maximum length of \" + schema.maxItems,\n });\n }\n return result;\n};\n\n/**\n * Validates that every item in an instance array is unique, when instance is an array\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {String|null|ValidatorResult}\n */\nvalidators.uniqueItems = function validateUniqueItems (instance, schema, options, ctx) {\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (!(instance instanceof Array)) {\n return result;\n }\n function testArrays (v, i, a) {\n for (var j = i + 1; j < a.length; j++) if (helpers.deepCompareStrict(v, a[j])) {\n return false;\n }\n return true;\n }\n if (!instance.every(testArrays)) {\n result.addError({\n name: 'uniqueItems',\n message: \"contains duplicate item\",\n });\n }\n return result;\n};\n\n/**\n * Deep compares arrays for duplicates\n * @param v\n * @param i\n * @param a\n * @private\n * @return {boolean}\n */\nfunction testArrays (v, i, a) {\n var j, len = a.length;\n for (j = i + 1, len; j < len; j++) {\n if (helpers.deepCompareStrict(v, a[j])) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Validates whether there are no duplicates, when the instance is an Array.\n * @param instance\n * @return {String|null}\n */\nvalidators.uniqueItems = function validateUniqueItems (instance, schema, options, ctx) {\n if (!(instance instanceof Array)) {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (!instance.every(testArrays)) {\n result.addError({\n name: 'uniqueItems',\n message: \"contains duplicate item\",\n });\n }\n return result;\n};\n\n/**\n * Validate for the presence of dependency properties, if the instance is an object.\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {null|ValidatorResult}\n */\nvalidators.dependencies = function validateDependencies (instance, schema, options, ctx) {\n if (!instance || typeof instance != 'object') {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n for (var property in schema.dependencies) {\n if (instance[property] === undefined) {\n continue;\n }\n var dep = schema.dependencies[property];\n var childContext = ctx.makeChild(dep, property);\n if (typeof dep == 'string') {\n dep = [dep];\n }\n if (dep instanceof Array) {\n dep.forEach(function (prop) {\n if (instance[prop] === undefined) {\n result.addError({\n // FIXME there's two different \"dependencies\" errors here with slightly different outputs\n // Can we make these the same? Or should we create different error types?\n name: 'dependencies',\n argument: childContext.propertyPath,\n message: \"property \" + prop + \" not found, required by \" + childContext.propertyPath,\n });\n }\n });\n } else {\n var res = this.validateSchema(instance, dep, options, childContext);\n if(result.instance !== res.instance) result.instance = res.instance;\n if (res && res.errors.length) {\n result.addError({\n name: 'dependencies',\n argument: childContext.propertyPath,\n message: \"does not meet dependency required by \" + childContext.propertyPath,\n });\n result.importErrors(res);\n }\n }\n }\n return result;\n};\n\n/**\n * Validates whether the instance value is one of the enumerated values.\n *\n * @param instance\n * @param schema\n * @return {ValidatorResult|null}\n */\nvalidators['enum'] = function validateEnum (instance, schema, options, ctx) {\n if (!(schema['enum'] instanceof Array)) {\n throw new SchemaError(\"enum expects an array\", schema);\n }\n if (instance === undefined) {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (!schema['enum'].some(helpers.deepCompareStrict.bind(null, instance))) {\n result.addError({\n name: 'enum',\n argument: schema['enum'],\n message: \"is not one of enum values: \" + schema['enum'].join(','),\n });\n }\n return result;\n};\n\n/**\n * Validates whether the instance if of a prohibited type.\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {null|ValidatorResult}\n */\nvalidators.not = validators.disallow = function validateNot (instance, schema, options, ctx) {\n var self = this;\n if(instance===undefined) return null;\n var result = new ValidatorResult(instance, schema, options, ctx);\n var notTypes = schema.not || schema.disallow;\n if(!notTypes) return null;\n if(!(notTypes instanceof Array)) notTypes=[notTypes];\n notTypes.forEach(function (type) {\n if (self.testType(instance, schema, options, ctx, type)) {\n var schemaId = type && type.id && ('<' + type.id + '>') || type;\n result.addError({\n name: 'not',\n argument: schemaId,\n message: \"is of prohibited type \" + schemaId,\n });\n }\n });\n return result;\n};\n\nmodule.exports = attribute;\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/jsonschema/lib/attribute.js\n **/","'use strict';\n\nvar uri = require('url');\n\nvar ValidationError = exports.ValidationError = function ValidationError (message, instance, schema, propertyPath, name, argument) {\n if (propertyPath) {\n this.property = propertyPath;\n }\n if (message) {\n this.message = message;\n }\n if (schema) {\n if (schema.id) {\n this.schema = schema.id;\n } else {\n this.schema = schema;\n }\n }\n if (instance) {\n this.instance = instance;\n }\n this.name = name;\n this.argument = argument;\n this.stack = this.toString();\n};\n\nValidationError.prototype.toString = function toString() {\n return this.property + ' ' + this.message;\n};\n\nvar ValidatorResult = exports.ValidatorResult = function ValidatorResult(instance, schema, options, ctx) {\n this.instance = instance;\n this.schema = schema;\n this.propertyPath = ctx.propertyPath;\n this.errors = [];\n this.throwError = options && options.throwError;\n};\n\nValidatorResult.prototype.addError = function addError(detail) {\n var err;\n if (typeof detail == 'string') {\n err = new ValidationError(detail, this.instance, this.schema, this.propertyPath);\n } else {\n if (!detail) throw new Error('Missing error detail');\n if (!detail.message) throw new Error('Missing error message');\n if (!detail.name) throw new Error('Missing validator type');\n err = new ValidationError(detail.message, this.instance, this.schema, this.propertyPath, detail.name, detail.argument);\n }\n\n if (this.throwError) {\n throw err;\n }\n this.errors.push(err);\n return err;\n};\n\nValidatorResult.prototype.importErrors = function importErrors(res) {\n if (typeof res == 'string' || (res && res.validatorType)) {\n this.addError(res);\n } else if (res && res.errors) {\n var errs = this.errors;\n res.errors.forEach(function (v) {\n errs.push(v);\n });\n }\n};\n\nValidatorResult.prototype.toString = function toString(res) {\n return this.errors.map(function(v,i){ return i+': '+v.toString()+'\\n'; }).join('');\n};\n\nObject.defineProperty(ValidatorResult.prototype, \"valid\", { get: function() {\n return !this.errors.length;\n} });\n\n/**\n * Describes a problem with a Schema which prevents validation of an instance\n * @name SchemaError\n * @constructor\n */\nvar SchemaError = exports.SchemaError = function SchemaError (msg, schema) {\n this.message = msg;\n this.schema = schema;\n Error.call(this, msg);\n Error.captureStackTrace(this, SchemaError);\n};\nSchemaError.prototype = Object.create(Error.prototype,\n { constructor: {value: SchemaError, enumerable: false}\n , name: {value: 'SchemaError', enumerable: false}\n });\n\nvar SchemaContext = exports.SchemaContext = function SchemaContext (schema, options, propertyPath, base, schemas) {\n this.schema = schema;\n this.options = options;\n this.propertyPath = propertyPath;\n this.base = base;\n this.schemas = schemas;\n};\n\nSchemaContext.prototype.resolve = function resolve (target) {\n return uri.resolve(this.base, target);\n};\n\nSchemaContext.prototype.makeChild = function makeChild(schema, propertyName){\n var propertyPath = (propertyName===undefined) ? this.propertyPath : this.propertyPath+makeSuffix(propertyName);\n var base = uri.resolve(this.base, schema.id||'');\n var ctx = new SchemaContext(schema, this.options, propertyPath, base, Object.create(this.schemas));\n if(schema.id && !ctx.schemas[base]){\n ctx.schemas[base] = schema;\n }\n return ctx;\n}\n\nvar FORMAT_REGEXPS = exports.FORMAT_REGEXPS = {\n 'date-time': /^\\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}[tT ]\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?([zZ]|[+-]\\d{2}:\\d{2})$/,\n 'date': /^\\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}$/,\n 'time': /^\\d{2}:\\d{2}:\\d{2}$/,\n\n 'email': /^(?:[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`\\{\\|\\}\\~]+\\.)*[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`\\{\\|\\}\\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-](?!\\.)){0,61}[a-zA-Z0-9]?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\\[(?:(?:[01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\.){3}(?:[01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\]))$/,\n 'ip-address': /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,\n 'ipv6': /^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/,\n 'uri': /^[a-zA-Z][a-zA-Z0-9+-.]*:[^\\s]*$/,\n\n 'color': /^(#?([0-9A-Fa-f]{3}){1,2}\\b|aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow|(rgb\\(\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*,\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*,\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*\\))|(rgb\\(\\s*(\\d?\\d%|100%)+\\s*,\\s*(\\d?\\d%|100%)+\\s*,\\s*(\\d?\\d%|100%)+\\s*\\)))$/,\n\n // hostname regex from: http://stackoverflow.com/a/1420225/5628\n 'hostname': /^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\\.?$/,\n 'host-name': /^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\\.?$/,\n\n 'alpha': /^[a-zA-Z]+$/,\n 'alphanumeric': /^[a-zA-Z0-9]+$/,\n 'utc-millisec': function (input) {\n return (typeof input === 'string') && parseFloat(input) === parseInt(input, 10) && !isNaN(input);\n },\n 'regex': function (input) {\n var result = true;\n try {\n new RegExp(input);\n } catch (e) {\n result = false;\n }\n return result;\n },\n 'style': /\\s*(.+?):\\s*([^;]+);?/g,\n 'phone': /^\\+(?:[0-9] ?){6,14}[0-9]$/\n};\n\nFORMAT_REGEXPS.regexp = FORMAT_REGEXPS.regex;\nFORMAT_REGEXPS.pattern = FORMAT_REGEXPS.regex;\nFORMAT_REGEXPS.ipv4 = FORMAT_REGEXPS['ip-address'];\n\nexports.isFormat = function isFormat (input, format) {\n if (FORMAT_REGEXPS[format] !== undefined) {\n if (FORMAT_REGEXPS[format] instanceof RegExp) {\n return FORMAT_REGEXPS[format].test(input);\n }\n if (typeof FORMAT_REGEXPS[format] === 'function') {\n return FORMAT_REGEXPS[format](input);\n }\n }\n return false;\n};\n\nvar makeSuffix = exports.makeSuffix = function makeSuffix (key) {\n key = key.toString();\n // This function could be capable of outputting valid a ECMAScript string, but the\n // resulting code for testing which form to use would be tens of thousands of characters long\n // That means this will use the name form for some illegal forms\n if (!key.match(/[.\\s\\[\\]]/) && !key.match(/^[\\d]/)) {\n return '.' + key;\n }\n if (key.match(/^\\d+$/)) {\n return '[' + key + ']';\n }\n return '[' + JSON.stringify(key) + ']';\n};\n\nexports.deepCompareStrict = function deepCompareStrict (a, b) {\n if (typeof a !== typeof b) {\n return false;\n }\n if (a instanceof Array) {\n if (!(b instanceof Array)) {\n return false;\n }\n if (a.length !== b.length) {\n return false;\n }\n return a.every(function (v, i) {\n return deepCompareStrict(a[i], b[i]);\n });\n }\n if (typeof a === 'object') {\n if (!a || !b) {\n return a === b;\n }\n var aKeys = Object.keys(a);\n var bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n return aKeys.every(function (v) {\n return deepCompareStrict(a[v], b[v]);\n });\n }\n return a === b;\n};\n\nmodule.exports.deepMerge = function deepMerge (target, src) {\n var array = Array.isArray(src);\n var dst = array && [] || {};\n\n if (array) {\n target = target || [];\n dst = dst.concat(target);\n src.forEach(function (e, i) {\n if (typeof e === 'object') {\n dst[i] = deepMerge(target[i], e)\n } else {\n if (target.indexOf(e) === -1) {\n dst.push(e)\n }\n }\n });\n } else {\n if (target && typeof target === 'object') {\n Object.keys(target).forEach(function (key) {\n dst[key] = target[key];\n });\n }\n Object.keys(src).forEach(function (key) {\n if (typeof src[key] !== 'object' || !src[key]) {\n dst[key] = src[key];\n }\n else {\n if (!target[key]) {\n dst[key] = src[key];\n } else {\n dst[key] = deepMerge(target[key], src[key])\n }\n }\n });\n }\n\n return dst;\n};\n\n/**\n * Validates instance against the provided schema\n * Implements URI+JSON Pointer encoding, e.g. \"%7e\"=\"~0\"=>\"~\", \"~1\"=\"%2f\"=>\"/\"\n * @param o\n * @param s The path to walk o along\n * @return any\n */\nexports.objectGetPath = function objectGetPath(o, s) {\n var parts = s.split('/').slice(1);\n var k;\n while (typeof (k=parts.shift()) == 'string') {\n var n = decodeURIComponent(k.replace(/~0/,'~').replace(/~1/g,'/'));\n if (!(n in o)) return;\n o = o[n];\n }\n return o;\n};\n\n/**\n * Accept an Array of property names and return a JSON Pointer URI fragment\n * @param Array a\n * @return {String}\n */\nexports.encodePath = function encodePointer(a){\n\t// ~ must be encoded explicitly because hacks\n\t// the slash is encoded by encodeURIComponent\n\treturn a.map(function(v){ return '/'+encodeURIComponent(v).replace(/~/g,'%7E'); }).join('');\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/jsonschema/lib/helpers.js\n **/"],"sourceRoot":""}
\ No newline at end of file
diff --git a/package.json b/package.json
index 31a4ca8a8e..22fda32403 100644
--- a/package.json
+++ b/package.json
@@ -3,13 +3,15 @@
"version": "0.1.0",
"description": "A simple React component capable of building forms from a JSON schema.",
"scripts": {
- "build": "babel-node -d lib/ src/",
+ "dist": "babel -d lib/ src/ && rimraf dist && webpack --optimize-minimize",
"lint": "eslint src test",
+ "publish": "npm run dist && npm publish",
"tdd": "npm run test -- -w",
"test": "NODE_ENV=test mocha --compilers js:babel/register --recursive --require ./test/setup-jsdom.js $(find test -name '*_test.js')"
},
"main": "lib/index.js",
"files": [
+ "dist",
"lib"
],
"peerDependencies": {
@@ -23,19 +25,16 @@
"babel": "^5.8.20",
"babel-eslint": "^4.1.6",
"babel-loader": "^5.3.2",
- "babel-plugin-react-transform": "^1.1.1",
"chai": "^3.3.0",
- "css-loader": "^0.15.6",
"eslint": "^1.8.0",
"eslint-plugin-react": "^3.6.3",
"gh-pages": "^0.4.0",
"jsdom": "^7.2.1",
- "json-loader": "^0.5.4",
"mocha": "^2.3.0",
"react-addons-test-utils": "^0.14.3",
"rimraf": "^2.4.4",
"sinon": "^1.17.2",
- "style-loader": "^0.12.3"
+ "webpack": "^1.10.5"
},
"directories": {
"test": "test"
diff --git a/test/index.js b/test/index_test.js
similarity index 100%
rename from test/index.js
rename to test/index_test.js
diff --git a/webpack.config.js b/webpack.config.js
new file mode 100644
index 0000000000..bb9e9cd758
--- /dev/null
+++ b/webpack.config.js
@@ -0,0 +1,31 @@
+var pkg = require("./package");
+
+module.exports = {
+ cache: true,
+ context: __dirname + "/src",
+ entry: "./index.js",
+ output: {
+ path: "./dist",
+ publicPath: "/dist/",
+ filename: "react-jsonschema-form-" + pkg.version + ".js",
+ library: "JSONSchemaForm",
+ libraryTarget: "umd"
+ },
+ devtool: "source-map",
+ externals: {
+ react: {
+ root: "React",
+ commonjs: "react",
+ commonjs2: "react",
+ amd: "react"
+ }
+ },
+ module: {
+ loaders: [
+ {
+ test: /\.js$/,
+ loaders: ["babel"],
+ }
+ ]
+ }
+};