webpackJsonp([5],{"+66z":function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},"+99L":function(t,e,n){var r={"./v2/measurement_schema.json":["oGp6",23],"./v2/message_schema.json":["2BTs",22],"./v2/process_schema.json":["rRyJ",21],"./v3/measurement_schema.json":["PpY5",20],"./v3/message_schema.json":["1SJ2",19],"./v3/process_schema.json":["uwRd",18]};function i(t){var e=r[t];return e?n.e(e[1]).then(function(){return n(e[0])}):Promise.reject(new Error("Cannot find module '"+t+"'."))}i.keys=function(){return Object.keys(r)},i.id="+99L",t.exports=i},"+gg+":function(t,e,n){var r=n("TQ3y")["__core-js_shared__"];t.exports=r},"/GnY":function(t,e,n){var r=n("HT7L"),i=n("W529"),a=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return i(t);var e=[];for(var n in Object(t))a.call(t,n)&&"constructor"!=n&&e.push(n);return e}},"/I3N":function(t,e){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},"037f":function(t,e,n){var r=n("1oyr"),i=n("p0bc"),a=n("wSKX"),o=i?function(t,e){return i(t,"toString",{configurable:!0,enumerable:!1,value:r(e),writable:!0})}:a;t.exports=o},"09Qt":function(t,e,n){var r=n("uIr7"),i=n("vi0E"),a=n("l9Lx"),o=n("C0hh"),s=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)r(e,a(t)),t=i(t);return e}:o;t.exports=s},"0DSl":function(t,e,n){var r=n("YkxI"),i=n("zBOP");t.exports=function(t){return r(function(e,n){var r=-1,a=n.length,o=a>1?n[a-1]:void 0,s=a>2?n[2]:void 0;for(o=t.length>3&&"function"==typeof o?(a--,o):void 0,s&&i(n[0],n[1],s)&&(o=a<3?void 0:o,a=1),e=Object(e);++r<a;){var c=n[r];c&&t(e,c,r,o)}return e})}},"0uX4":function(t,e,n){var r=n("NkRn"),i=r?r.prototype:void 0,a=i?i.valueOf:void 0;t.exports=function(t){return a?Object(a.call(t)):{}}},"1C79":function(t,e,n){var r=n("uIr7"),i=n("Qp3N");t.exports=function t(e,n,a,o,s){var c=-1,u=e.length;for(a||(a=i),s||(s=[]);++c<u;){var l=e[c];n>0&&a(l)?n>1?t(l,n-1,a,o,s):r(s,l):o||(s[s.length]=l)}return s}},"1QDk":function(t,e,n){var r=n("tv3T"),i=n("09Qt");t.exports=function(t,e){return r(t,i(t),e)}},"1Yb9":function(t,e,n){var r=n("mgnk"),i=n("UnEC"),a=Object.prototype,o=a.hasOwnProperty,s=a.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(t){return i(t)&&o.call(t,"callee")&&!s.call(t,"callee")};t.exports=c},"1oyr":function(t,e){t.exports=function(t){return function(){return t}}},"22B7":function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},"2Hvv":function(t,e,n){var r=n("imBK");t.exports=function(t){return r(this.__data__,t)>-1}},"2N6f":function(t,e,n){var r=n("rCVp"),i=n("Q2wK"),a=n("WHce");t.exports=function(t){return a(i(t,void 0,r),t+"")}},"3IRH":function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},"3rZI":function(t,e){t.exports=function(t,e,n,r){var i=-1,a=null==t?0:t.length;for(r&&a&&(n=t[++i]);++i<a;)n=e(n,t[i],i,t);return n}},"4yG7":function(t,e,n){var r=n("HAGj");t.exports=function(t,e,n){return null==t?t:r(t,e,n)}},"5/Qr":function(t,e,n){var r=n("Kzd6"),i=n("6Git"),a=n("Jqj6"),o=n("WyC4"),s=n("7jYp"),c=n("0uX4"),u=n("Ilb/"),l="[object Boolean]",f="[object Date]",p="[object Map]",d="[object Number]",v="[object RegExp]",h="[object Set]",m="[object String]",b="[object Symbol]",y="[object ArrayBuffer]",_="[object DataView]",g="[object Float32Array]",x="[object Float64Array]",j="[object Int8Array]",C="[object Int16Array]",O="[object Int32Array]",w="[object Uint8Array]",k="[object Uint8ClampedArray]",T="[object Uint16Array]",P="[object Uint32Array]";t.exports=function(t,e,n,A){var S=t.constructor;switch(e){case y:return r(t);case l:case f:return new S(+t);case _:return i(t,A);case g:case x:case j:case C:case O:case w:case k:case T:case P:return u(t,A);case p:return a(t,A,n);case d:case m:return new S(t);case v:return o(t);case h:return s(t,A,n);case b:return c(t)}}},"5N57":function(t,e,n){var r=n("ICSD")(n("TQ3y"),"Set");t.exports=r},"5PlU":function(t,e,n){var r=n("RY/4"),i=n("dSzd")("iterator"),a=n("/bQp");t.exports=n("FeBl").isIterable=function(t){var e=Object(t);return void 0!==e[i]||"@@iterator"in e||a.hasOwnProperty(r(e))}},"5pwE":function(t,e,n){(t.exports=n("YHym")(!1)).push([t.i,".schemaDetail a{text-decoration:none}.schemaDetail .property ul{list-style-type:disc;padding-left:1em;margin-left:0;margin-top:0}",""])},"5zde":function(t,e,n){n("zQR9"),n("qyJz"),t.exports=n("FeBl").Array.from},"6Git":function(t,e,n){var r=n("Kzd6");t.exports=function(t,e){var n=e?r(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}},"6MiT":function(t,e,n){var r=n("aCM0"),i=n("UnEC"),a="[object Symbol]";t.exports=function(t){return"symbol"==typeof t||i(t)&&r(t)==a}},"77aO":function(t,e,n){"use strict";e.a={props:{collapsed:{type:Boolean,default:!1}},data:function(){return{expanded:!this.collapsed,transitioning:!1}},watch:{collapsed:function(t){this.expanded=!t}},methods:{beforeenter:function(t){this.transitioning=!0,t.style.height=0},enter:function(t){t.style.height=t.scrollHeight+"px"},afterenter:function(t){t.style.height="",this.transitioning=!1},beforeleave:function(t){this.transitioning=!0,t.style.height=t.offsetHeight+"px",t.offsetHeight},leave:function(t){t.style.height=0,t.offsetHeight},afterleave:function(t){this.transitioning=!1},toggle:function(){this.transitioning||(this.expanded=!this.expanded,this.$emit(this.expanded?"expanding":"collapsing",this.id))}}}},"7e4z":function(t,e,n){var r=n("uieL"),i=n("1Yb9"),a=n("NGEn"),o=n("ggOT"),s=n("ZGh9"),c=n("YsVG"),u=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=a(t),l=!n&&i(t),f=!n&&!l&&o(t),p=!n&&!l&&!f&&c(t),d=n||l||f||p,v=d?r(t.length,String):[],h=v.length;for(var m in t)!e&&!u.call(t,m)||d&&("length"==m||f&&("offset"==m||"parent"==m)||p&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||s(m,h))||v.push(m);return v}},"7jYp":function(t,e,n){var r=n("nWuj"),i=n("3rZI"),a=n("octw"),o=1;t.exports=function(t,e,n){var s=e?n(a(t),o):a(t);return i(s,r,new t.constructor)}},"8AZL":function(t,e){t.exports=function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}},"8gK5":function(t,e){t.exports=function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}},"94sX":function(t,e,n){var r=n("dCZQ");t.exports=function(){this.__data__=r?r(null):{},this.size=0}},"9UkZ":function(t,e,n){var r=n("aCM0"),i=n("vi0E"),a=n("UnEC"),o="[object Object]",s=Function.prototype,c=Object.prototype,u=s.toString,l=c.hasOwnProperty,f=u.call(Object);t.exports=function(t){if(!a(t)||r(t)!=o)return!1;var e=i(t);if(null===e)return!0;var n=l.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&u.call(n)==f}},A51D:function(t,e,n){var r=n("5pwE");"string"==typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);n("rjj0")("188b52d2",r,!1)},A9mX:function(t,e,n){var r=n("pTUa");t.exports=function(t){var e=r(this,t).delete(t);return this.size-=e?1:0,e}},"Ai/T":function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},AxiT:function(t,e,n){var r=n("Lw7C");"string"==typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);n("rjj0")("0868896c",r,!1)},C0hh:function(t,e){t.exports=function(){return[]}},CW5P:function(t,e,n){var r=n("T/bE"),i=n("duB3"),a=n("POb3");t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||i),string:new r}}},Cf65:function(t,e,n){var r=n("uCi2"),i=n("M1c9");t.exports=function(t,e){return e.length<2?t:r(t,i(e,0,-1))}},D9sP:function(t,e,n){"use strict";var r=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"schemaDetail",class:{"is-loading":t.loading},attrs:{id:"schema-detail"}},[n("div",{staticClass:"accordion"},[null!==t.masterSchema?n("card",{attrs:{collapsed:!0}},[n("template",{slot:"header"},[t._v("\n        Structure of the payload\n      ")]),n("ul",t._l(t.masterSchema.properties,function(t,e){return n("schemaToc",{key:e,attrs:{schema:t}})}))],2):t._e(),t._t("default")],2),n("h1",[n("a",{attrs:{id:t.type+"-schema-detail",title:t.type+" Fields definition"}}),t._v("\n    Fields definition\n  ")]),t._l(t.schemas,function(e){return n("div",{key:e.$id,staticClass:"card property"},[n("header",{staticClass:"card-header"},[n("a",{attrs:{id:"p-"+e.$id}}),n("p",{staticClass:"card-header-title"},[n("span",{domProps:{innerHTML:t._s(e.getPath())}})]),n("nuxt-link",{staticClass:"card-header-icon",attrs:{to:"#schema-detail",title:"go up"}},[n("span",{staticClass:"icon"},[n("i",{staticClass:"fa fa-angle-up"})])])],1),n("div",{staticClass:"card-content"},[e.description||e.type?n("div",{staticClass:"field is-horizontal"},[t._m(0,!0),e.description?n("div",{staticClass:"field-body"},[t._v("\n          "+t._s(e.description)+"\n        ")]):e.type?n("div",{staticClass:"field-body"},[t._v("\n          A simple "+t._s(t._f("capitalize")(e.type))+"\n        ")]):t._e()]):t._e(),e.$parent?n("div",{staticClass:"field is-horizontal"},[t._m(1,!0),n("div",{staticClass:"field-body"},[n("nuxt-link",{attrs:{to:"#p-"+e.$parent.schema.$id}},[n("span",{domProps:{innerHTML:t._s(e.$parent.schema.getPath())}})])],1)]):t._e(),e.type?n("div",{staticClass:"field is-horizontal"},[t._m(2,!0),n("div",{staticClass:"field-body"},[t._v("\n          "+t._s(t._f("capitalize")(e.type,e))+"\n        ")])]):t._e(),e.format?n("div",{staticClass:"field is-horizontal"},[t._m(3,!0),n("div",{staticClass:"field-body"},[t._v("\n          "+t._s(e.format)+"\n          "),t.$static.formats[e.format]?n("a",{attrs:{href:t.$static.formats[e.format].link}},[t._v(" ("+t._s(t.$static.formats[e.format].name)+")")]):t._e()])]):t._e(),e.enum&&e.enum.length?n("div",{staticClass:"field is-horizontal"},[t._m(4,!0),n("div",{staticClass:"field-body"},[n("div",[t._v("\n            "+t._s(e.enum.join(", "))+"\n          ")])])]):t._e(),e.hasOwnProperty("default")?n("div",{staticClass:"field is-horizontal"},[t._m(5,!0),n("div",{staticClass:"field-body"},[n("div",[t._v("\n            "+t._s(e.default)+"\n          ")])])]):t._e(),e.maxLength?n("div",{staticClass:"field is-horizontal"},[t._m(6,!0),n("div",{staticClass:"field-body"},[n("div",[t._v("\n            "+t._s(e.maxLength)+"\n          ")])])]):t._e(),e.properties||e.patternProperties||e.items?n("div",{staticClass:"field is-horizontal"},[t._m(7,!0),n("div",{staticClass:"field-body"},[Object.keys(e.properties||{}).length>0?n("schemaLink",{attrs:{link:e.properties}}):t._e(),Object.keys(e.patternProperties||{}).length>0?n("schemaLink",{attrs:{link:e.patternProperties}},[n("div",[t._v("Matching regular expressions:")])]):t._e(),!e.items||e.items instanceof Array?e.items?n("schemaLink",{attrs:{link:e.items}},[n("div",[t._v("Ordered items of type:")])]):t._e():n("schemaLink",{attrs:{link:e.items}}),Object.keys(e.properties||{}).length+Object.keys(e.patternProperties||{}).length!==0||e.items?t._e():[t._v("none")]],2)]):t._e(),e.minProperties?n("div",{staticClass:"field is-horizontal"},[t._m(8,!0),n("div",{staticClass:"field-body"},[n("div",[t._v("\n            "+t._s(e.minProperties)+"\n          ")])])]):t._e(),e.minItems?n("div",{staticClass:"field is-horizontal"},[t._m(9,!0),n("div",{staticClass:"field-body"},[n("div",[t._v("\n            "+t._s(e.minItems)+"\n          ")])])]):t._e(),e.hasOwnProperty("additionalProperties")?n("div",{staticClass:"field is-horizontal"},[t._m(10,!0),"boolean"==typeof e.additionalProperties?n("schemaLink",{staticClass:"field-body",attrs:{link:e.additionalProperties}}):n("div",{staticClass:"field-body"},[t._v("\n          if fulfilling "),n("schemaLink",{staticClass:"field-body",attrs:{link:e.additionalProperties}})],1)],1):t._e(),e.not||e.oneOf||e.allOf||e.anyOf?n("div",{staticClass:"field is-horizontal"},[t._m(11,!0),n("div",{staticClass:"field-body"},[e.not?n("schemaLink",{attrs:{link:e.not}},[t._v("\n            Not fulfilling \n          ")]):t._e(),e.oneOf?n("schemaLink",{attrs:{link:e.oneOf}},[n("div",[t._v("Fulfilling exactly one of:")])]):t._e(),e.allOf?n("schemaLink",{attrs:{link:e.allOf}},[n("div",[t._v("Fulfilling all of:")])]):t._e(),e.anyOf?n("schemaLink",{attrs:{link:e.anyOf}},[n("div",[t._v("Fulfilling one of:")])]):t._e()],1)]):t._e(),e.required&&e.required.length?n("div",{staticClass:"field is-horizontal"},[t._m(12,!0),n("div",{staticClass:"field-body"},[t._v("\n          "+t._s(e.required.join(", "))+"\n        ")])]):t._e(),e.examples?n("div",{staticClass:"field is-horizontal"},[t._m(13,!0),n("div",{staticClass:"field-body"},t._l(e.examples,function(e,r){return n("prism",{key:r,attrs:{language:"json"}},[t._v(t._s(t._f("stringify")(e)))])}))]):t._e()])])})],2)};r._withStripped=!0;var i={render:r,staticRenderFns:[function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Description:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Parent:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Type:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Format:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Possible values:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Defaults to:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Maximum length:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Restriction on subfields:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Minimum amount of subfields:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Minimum amount of items:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Allows additional fields:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Restriction with boolean logic:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Required fields:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Example:")])])}]};e.a=i},Dc0G:function(t,e,n){(function(t){var r=n("blYT"),i="object"==typeof e&&e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===i&&r.process,s=function(){try{return o&&o.binding&&o.binding("util")}catch(t){}}();t.exports=s}).call(e,n("3IRH")(t))},Dc7M:function(t,e,n){var r=n("Hxdr"),i=n("Fkvj"),a=n("Vi3P"),o=n("bIjD"),s=n("tv3T"),c=n("dYhQ"),u=n("2N6f"),l=n("xond"),f=u(function(t,e){var n={};if(null==t)return n;var u=!1;e=r(e,function(e){return e=o(e,t),u||(u=e.length>1),e}),s(t,l(t),n),u&&(n=i(n,7,c));for(var f=e.length;f--;)a(n,e[f]);return n});t.exports=f},Dv2r:function(t,e,n){var r=n("pTUa");t.exports=function(t,e){var n=r(this,t),i=n.size;return n.set(t,e),this.size+=n.size==i?0:1,this}},E4Hj:function(t,e){t.exports=function(t){return this.__data__.get(t)}},FCuZ:function(t,e,n){var r=n("uIr7"),i=n("NGEn");t.exports=function(t,e,n){var a=e(t);return i(t)?a:r(a,n(t))}},Fkvj:function(t,e,n){var r=n("bJWQ"),i=n("PqYH"),a=n("i4ON"),o=n("jD7S"),s=n("py9u"),c=n("mKB/"),u=n("hrPF"),l=n("Nkkh"),f=n("1QDk"),p=n("MoMe"),d=n("xond"),v=n("gHOb"),h=n("UfSK"),m=n("5/Qr"),b=n("WQFf"),y=n("NGEn"),_=n("ggOT"),g=n("yCNF"),x=n("ktak"),j=1,C=2,O=4,w="[object Arguments]",k="[object Function]",T="[object GeneratorFunction]",P="[object Object]",A={};A[w]=A["[object Array]"]=A["[object ArrayBuffer]"]=A["[object DataView]"]=A["[object Boolean]"]=A["[object Date]"]=A["[object Float32Array]"]=A["[object Float64Array]"]=A["[object Int8Array]"]=A["[object Int16Array]"]=A["[object Int32Array]"]=A["[object Map]"]=A["[object Number]"]=A[P]=A["[object RegExp]"]=A["[object Set]"]=A["[object String]"]=A["[object Symbol]"]=A["[object Uint8Array]"]=A["[object Uint8ClampedArray]"]=A["[object Uint16Array]"]=A["[object Uint32Array]"]=!0,A["[object Error]"]=A[k]=A["[object WeakMap]"]=!1,t.exports=function t(e,n,S,E,M,I){var $,F=n&j,D=n&C,z=n&O;if(S&&($=M?S(e,E,M,I):S(e)),void 0!==$)return $;if(!g(e))return e;var N=y(e);if(N){if($=h(e),!F)return u(e,$)}else{var U=v(e),Q=U==k||U==T;if(_(e))return c(e,F);if(U==P||U==w||Q&&!M){if($=D||Q?{}:b(e),!F)return D?f(e,s($,e)):l(e,o($,e))}else{if(!A[U])return M?e:{};$=m(e,U,t,F)}}I||(I=new r);var G=I.get(e);if(G)return G;I.set(e,$);var H=z?D?d:p:D?keysIn:x,L=N?void 0:H(e);return i(L||e,function(r,i){L&&(r=e[i=r]),a($,i,t(r,n,S,i,e,I))}),$}},Fp5l:function(t,e,n){var r=n("bGc4"),i=n("UnEC");t.exports=function(t){return i(t)&&r(t)}},G0Wc:function(t,e,n){var r=n("yCNF"),i=n("HT7L"),a=n("8gK5"),o=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return a(t);var e=i(t),n=[];for(var s in t)("constructor"!=s||!e&&o.call(t,s))&&n.push(s);return n}},G2xm:function(t,e){t.exports=function(t){return this.__data__.has(t)}},Gs0Q:function(t,e,n){"use strict";e.a={name:"schemaToc",props:{tag:{type:String,default:"li"},schema:{type:Object,required:!0}}}},Gu7T:function(t,e,n){"use strict";e.__esModule=!0;var r,i=n("c/Tr"),a=(r=i)&&r.__esModule?r:{default:r};e.default=function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return(0,a.default)(t)}},HAGj:function(t,e,n){var r=n("i4ON"),i=n("bIjD"),a=n("ZGh9"),o=n("yCNF"),s=n("Ubhr");t.exports=function(t,e,n,c){if(!o(t))return t;for(var u=-1,l=(e=i(e,t)).length,f=l-1,p=t;null!=p&&++u<l;){var d=s(e[u]),v=n;if(u!=f){var h=p[d];void 0===(v=c?c(h,d,p):void 0)&&(v=o(h)?h:a(e[u+1])?[]:{})}r(p,d,v),p=p[d]}return t}},HN2V:function(t,e,n){var r=n("HbnZ"),i=n("0DSl")(function(t,e,n){r(t,e,n)});t.exports=i},HT7L:function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},HbnZ:function(t,e,n){var r=n("bJWQ"),i=n("O1jc"),a=n("rpnb"),o=n("jMi8"),s=n("yCNF"),c=n("t8rQ");t.exports=function t(e,n,u,l,f){e!==n&&a(n,function(a,c){if(s(a))f||(f=new r),o(e,n,c,u,t,l,f);else{var p=l?l(e[c],a,c+"",e,n,f):void 0;void 0===p&&(p=a),i(e,c,p)}},c)}},Hxdr:function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}},ICSD:function(t,e,n){var r=n("ITwD"),i=n("mTAn");t.exports=function(t,e){var n=i(t,e);return r(n)?n:void 0}},ITwD:function(t,e,n){var r=n("gGqR"),i=n("eFps"),a=n("yCNF"),o=n("Ai/T"),s=/^\[object .+?Constructor\]$/,c=Function.prototype,u=Object.prototype,l=c.toString,f=u.hasOwnProperty,p=RegExp("^"+l.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!a(t)||i(t))&&(r(t)?p:s).test(o(t))}},"Ilb/":function(t,e,n){var r=n("Kzd6");t.exports=function(t,e){var n=e?r(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}},JBvZ:function(t,e,n){var r=n("imBK");t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},Jqj6:function(t,e,n){var r=n("U7Aq"),i=n("3rZI"),a=n("WFiI"),o=1;t.exports=function(t,e,n){var s=e?n(a(t),o):a(t);return i(s,r,new t.constructor)}},KmWZ:function(t,e,n){var r=n("duB3");t.exports=function(){this.__data__=new r,this.size=0}},Kzd6:function(t,e,n){var r=n("qwTf");t.exports=function(t){var e=new t.constructor(t.byteLength);return new r(e).set(new r(t)),e}},LJry:function(t,e,n){"use strict";var r={functional:!0,props:{code:{type:String},language:{type:String,default:"markup"}},render:function(t,e){var n=e.props.code||e.children[0].text,r=e.props.language,i=Prism.languages[r],a="language-"+r;return t("pre",function(t){for(var e=arguments,n=1;n<arguments.length;n++)for(var r in arguments[n])t[r]=e[n][r];return t}({},e.data,{class:[e.data.class,a]}),[t("code",{class:a,domProps:{innerHTML:Prism.highlight(n,i)}})])}};t.exports=r},Lw7C:function(t,e,n){(t.exports=n("YHym")(!1)).push([t.i,"@keyframes spinAround{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}",""])},M1c9:function(t,e){t.exports=function(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var a=Array(i);++r<i;)a[r]=t[r+e];return a}},MoMe:function(t,e,n){var r=n("FCuZ"),i=n("l9Lx"),a=n("ktak");t.exports=function(t){return r(t,a,i)}},NGEn:function(t,e){var n=Array.isArray;t.exports=n},NVTU:function(t,e,n){"use strict";var r=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"card collapsibleCard",class:{collapsed:!t.expanded}},[t.$slots.header?n("header",{staticClass:"card-header",on:{click:function(e){e.preventDefault(),t.toggle()}}},[n("p",{staticClass:"card-header-title"},[!t.$slots.headerCollapsed||t.expanded?t._t("header"):t._t("headerCollapsed")],2),n("a",{staticClass:"card-header-icon"},[n("span",{staticClass:"icon"},[n("i",{staticClass:"fa",class:{"fa-angle-down":t.expanded,"fa-angle-up":!t.expanded}})])])]):t._e(),n("transition",{attrs:{name:"rollup","leave-active-class":"collapsing","enter-active-class":"collapsing"},on:{"before-leave":t.beforeleave,leave:t.leave,"after-leave":t.afterleave,"before-enter":t.beforeenter,enter:t.enter,"after-enter":t.afterenter}},[n("div",{directives:[{name:"show",rawName:"v-show",value:t.expanded,expression:"expanded"}]},[n("div",{staticClass:"card-content"},[t._t("default")],2)])])],1)};r._withStripped=!0;var i={render:r,staticRenderFns:[]};e.a=i},NkRn:function(t,e,n){var r=n("TQ3y").Symbol;t.exports=r},Nkkh:function(t,e,n){var r=n("tv3T"),i=n("l9Lx");t.exports=function(t,e){return r(t,i(t),e)}},NqZt:function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},O1jc:function(t,e,n){var r=n("nw3t"),i=n("22B7");t.exports=function(t,e,n){(void 0===n||i(t[e],n))&&(void 0!==n||e in t)||r(t,e,n)}},POb3:function(t,e,n){var r=n("ICSD")(n("TQ3y"),"Map");t.exports=r},PqYH:function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}},Q2wK:function(t,e,n){var r=n("8AZL"),i=Math.max;t.exports=function(t,e,n){return e=i(void 0===e?t.length-1:e,0),function(){for(var a=arguments,o=-1,s=i(a.length-e,0),c=Array(s);++o<s;)c[o]=a[e+o];o=-1;for(var u=Array(e+1);++o<e;)u[o]=a[o];return u[e]=n(c),r(t,this,u)}}},Q7hp:function(t,e,n){var r=n("uCi2");t.exports=function(t,e,n){var i=null==t?void 0:r(t,e);return void 0===i?n:i}},Qp3N:function(t,e,n){var r=n("NkRn"),i=n("1Yb9"),a=n("NGEn"),o=r?r.isConcatSpreadable:void 0;t.exports=function(t){return a(t)||i(t)||!!(o&&t&&t[o])}},RGrk:function(t,e,n){var r=n("dCZQ"),i=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return r?void 0!==e[t]:i.call(e,t)}},Rh28:function(t,e){var n=9007199254740991;t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=n}},S7p9:function(t,e){t.exports=function(t){return function(e){return t(e)}}},"T/bE":function(t,e,n){var r=n("94sX"),i=n("ue/d"),a=n("eVIm"),o=n("RGrk"),s=n("Z2pD");function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=a,c.prototype.has=o,c.prototype.set=s,t.exports=c},T9Hf:function(t,e,n){"use strict";var r=n("77aO"),i=n("NVTU"),a=!1;var o=function(t){a||n("WVEp")},s=n("VU/8")(r.a,i.a,!1,o,null,null);s.options.__file="components\\collapsibleCard.vue",e.a=s.exports},TQ3y:function(t,e,n){var r=n("blYT"),i="object"==typeof self&&self&&self.Object===Object&&self,a=r||i||Function("return this")();t.exports=a},TlPD:function(t,e,n){var r=n("tv3T"),i=n("t8rQ");t.exports=function(t){return r(t,i(t))}},TmV0:function(t,e,n){n("fZOM"),t.exports=n("FeBl").Object.values},U7Aq:function(t,e){t.exports=function(t,e){return t.set(e[0],e[1]),t}},Ubhr:function(t,e,n){var r=n("6MiT"),i=1/0;t.exports=function(t){if("string"==typeof t||r(t))return t;var e=t+"";return"0"==e&&1/t==-i?"-0":e}},UfSK:function(t,e){var n=Object.prototype.hasOwnProperty;t.exports=function(t){var e=t.length,r=t.constructor(e);return e&&"string"==typeof t[0]&&n.call(t,"index")&&(r.index=t.index,r.input=t.input),r}},UnEC:function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},UnLw:function(t,e,n){var r=/^\./,i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,o=n("fMqj")(function(t){var e=[];return r.test(t)&&e.push(""),t.replace(i,function(t,n,r,i){e.push(r?i.replace(a,"$1"):n||t)}),e});t.exports=o},VORN:function(t,e,n){var r=n("yCNF"),i=Object.create,a=function(){function t(){}return function(e){if(!r(e))return{};if(i)return i(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=a},Vi3P:function(t,e,n){var r=n("bIjD"),i=n("oqL2"),a=n("Cf65"),o=n("Ubhr");t.exports=function(t,e){return e=r(e,t),null==(t=a(t,e))||delete t[o(i(e))]}},Vx7L:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n("g3IF"),i=n("ZgSN"),a=n("VU/8")(r.a,i.a,!1,null,null,null);a.options.__file="pages\\specification\\v2\\machine-message.vue",e.default=a.exports},W3Iv:function(t,e,n){t.exports={default:n("wEtr"),__esModule:!0}},W529:function(t,e,n){var r=n("f931")(Object.keys,Object);t.exports=r},WFiI:function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}},WHce:function(t,e,n){var r=n("037f"),i=n("Zk5a")(r);t.exports=i},WQFf:function(t,e,n){var r=n("VORN"),i=n("vi0E"),a=n("HT7L");t.exports=function(t){return"function"!=typeof t.constructor||a(t)?{}:r(i(t))}},WVEp:function(t,e,n){var r=n("a3hs");"string"==typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);n("rjj0")("52cedc5e",r,!1)},WxI4:function(t,e){t.exports=function(){this.__data__=[],this.size=0}},WyC4:function(t,e){var n=/\w*$/;t.exports=function(t){var e=new t.constructor(t.source,n.exec(t));return e.lastIndex=t.lastIndex,e}},Xd32:function(t,e,n){n("+tPU"),n("zQR9"),t.exports=n("5PlU")},YeCl:function(t,e,n){var r=n("CW5P"),i=n("A9mX"),a=n("v8Dt"),o=n("agim"),s=n("Dv2r");function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=a,c.prototype.has=o,c.prototype.set=s,t.exports=c},YkxI:function(t,e,n){var r=n("wSKX"),i=n("Q2wK"),a=n("WHce");t.exports=function(t,e){return a(i(t,e,r),t+"")}},YsVG:function(t,e,n){var r=n("z4hc"),i=n("S7p9"),a=n("Dc0G"),o=a&&a.isTypedArray,s=o?i(o):r;t.exports=s},Z2pD:function(t,e,n){var r=n("dCZQ"),i="__lodash_hash_undefined__";t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=r&&void 0===e?i:e,this}},ZGh9:function(t,e){var n=9007199254740991,r=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){return!!(e=null==e?n:e)&&("number"==typeof t||r.test(t))&&t>-1&&t%1==0&&t<e}},ZT2e:function(t,e,n){var r=n("o2mx");t.exports=function(t){return null==t?"":r(t)}},ZgSN:function(t,e,n){"use strict";var r=function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"machine-message content"},[this._m(0),e("p",[this._v("The main purpose of the machine message format is to allow devices and integrators to send messages containing an interpretation of measurement data or status.")]),e("img",{staticClass:"is-centered",attrs:{src:"images/specification/v2/messagePayload.svg",alt:"Class diagram of the Machine Message payload",title:"Class diagram of the Machine Message payload"}}),e("schemaDetail",{attrs:{type:"v2/message",examples:this.$static.examples}},[e("card",{attrs:{collapsed:!0}},[e("template",{slot:"header"},[this._v("\n        Minimal message example\n      ")]),e("prism",{attrs:{language:"json"}},[this._v(this._s(this._f("stringify")(this.$static.message)))])],2),e("card",{attrs:{collapsed:!0}},[e("template",{slot:"header"},[this._v("\n        Multiple message example\n      ")]),e("prism",{attrs:{language:"json"}},[this._v(this._s(this._f("stringify")(this.$static.multipleMachineMessages)))])],2)],1)],1)};r._withStripped=!0;var i={render:r,staticRenderFns:[function(){var t=this.$createElement,e=this._self._c||t;return e("h1",[e("a",{attrs:{id:"Message-Payload",title:"Machine Message payload"}}),this._v("\n    Machine Message Payload\n  ")])}]};e.a=i},Zk5a:function(t,e){var n=800,r=16,i=Date.now;t.exports=function(t){var e=0,a=0;return function(){var o=i(),s=r-(o-a);if(a=o,s>0){if(++e>=n)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},Zrlr:function(t,e,n){"use strict";e.__esModule=!0,e.default=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}},a3hs:function(t,e,n){(t.exports=n("YHym")(!1)).push([t.i,"@keyframes spinAround{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.card.collapsibleCard>header{cursor:pointer;background-color:#f5f5f5;border-bottom:1px solid hsla(0,0%,4%,.1)}.card.collapsibleCard>header .card-header-icon{text-decoration:none}.card.collapsibleCard>header .card-header-title{font-weight:400}.card.collapsibleCard>header p{margin-bottom:0}.card.collapsibleCard.collapsed header{border-bottom:none}.card.collapsibleCard>div.collapsing{position:relative;height:0;overflow:hidden;display:block;transition-property:height;transition-duration:.35s;transition-timing-function:ease}",""])},aCM0:function(t,e,n){var r=n("NkRn"),i=n("uLhX"),a=n("+66z"),o="[object Null]",s="[object Undefined]",c=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?s:o:c&&c in Object(t)?i(t):a(t)}},agim:function(t,e,n){var r=n("pTUa");t.exports=function(t){return r(this,t).has(t)}},bGc4:function(t,e,n){var r=n("gGqR"),i=n("Rh28");t.exports=function(t){return null!=t&&i(t.length)&&!r(t)}},bIbi:function(t,e,n){var r=n("ICSD")(n("TQ3y"),"WeakMap");t.exports=r},bIjD:function(t,e,n){var r=n("NGEn"),i=n("hIPy"),a=n("UnLw"),o=n("ZT2e");t.exports=function(t,e){return r(t)?t:i(t,e)?[t]:a(o(t))}},bJWQ:function(t,e,n){var r=n("duB3"),i=n("KmWZ"),a=n("NqZt"),o=n("E4Hj"),s=n("G2xm"),c=n("zpVT");function u(t){var e=this.__data__=new r(t);this.size=e.size}u.prototype.clear=i,u.prototype.delete=a,u.prototype.get=o,u.prototype.has=s,u.prototype.set=c,t.exports=u},bO0Y:function(t,e,n){var r=n("ICSD")(n("TQ3y"),"Promise");t.exports=r},"bXX+":function(t,e,n){"use strict";var r=n("jhkR"),i=n("fvMW"),a=n("VU/8")(r.a,i.a,!1,null,null,null);a.options.__file="components\\schemaLink.vue",e.a=a.exports},bklM:function(t,e,n){var r=n("Fkvj"),i=1,a=4;t.exports=function(t){return r(t,i|a)}},blYT:function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(e,n("DuR2"))},"c/Tr":function(t,e,n){t.exports={default:n("5zde"),__esModule:!0}},cER1:function(t,e,n){"use strict";var r=n("mvHQ"),i=n.n(r),a=n("fZjL"),o=n.n(a),s=n("Gu7T"),c=n.n(s),u=n("gRE1"),l=n.n(u),f=n("d7EF"),p=n.n(f),d=n("W3Iv"),v=n.n(d),h=n("T9Hf"),m=n("rVUV"),b=(n.n(m),n("Q7hp")),y=n.n(b),_=n("HN2V"),g=n.n(_),x=n("LJry"),j=n.n(x),C=n("lOo0"),O=n("bXX+"),w=n("mQxp"),k=n("4yG7"),T=n.n(k);e.a={props:{type:{type:String,required:!0},examples:{type:Object,required:!1,default:function(){return{}}}},data:function(){return{masterSchema:null,loading:!0}},created:function(){var t=this,e={date:{link:"https://tools.ietf.org/html/rfc3339#section-5.6",name:"RFC3339, 5.6"},email:{link:"https://tools.ietf.org/html/rfc5322#section-3.4.1",name:"RFC5322, 3.4.1"}};n("+99L")("./"+this.type+"_schema.json").then(function(e){return t.masterSchema=new C.a("$",null,e),v()(t.examples).forEach(function(e){var n=p()(e,2),r=n[0],i=n[1];y()(t.masterSchema,r)?T()(t.masterSchema,r+".examples",i):console.error("schema path not found in "+t.type+": "+r)}),t.loading=!1,e}).catch(function(t){throw t}),this.$static={formats:{"date-time":e.date,date:e.date,time:e.date,email:e.email}}},methods:{traverse:function(t,e){var n=this;t instanceof C.a?(e(t),v()(t).filter(function(t){var e=p()(t,2),n=e[0];e[1];return"$parent"!==n}).forEach(function(t){var r=p()(t,2),i=(r[0],r[1]);return n.traverse(i,e)})):t instanceof Array?t.forEach(function(t){return n.traverse(t,e)}):t instanceof Object&&l()(t).forEach(function(t){return n.traverse(t,e)})},simplifySchema:function(t){var e=function(t){return t.anyOf&&t.anyOf.indexOf(!0)>=0?[t,!0]:t.allOf&&t.allOf.indexOf(!1)>=0?[t,!1]:t.allOf&&t.allOf.length?[t,new C.a(t.$step,t.$parent,g.a.apply(void 0,[{}].concat(c()(t.allOf.map(function(t){return t.toJSON()})))))]:!0===t.not?[t,!1]:0===o()(t).filter(function(t){return"$"!==t[0]}).length?[t,!0]:null};return this.traverse(t,function(t){!function t(n){if(n){var r=p()(n,2),i=r[0],a=r[1],o=i.$parent;o&&T()(o.schema,o.path,a),i.$parent=null,t(e(o.schema))}}(e(t))}),t}},computed:{schemas:function(){if(!this.masterSchema)return null;var t={};return this.traverse(this.simplifySchema(this.masterSchema),function(e){t[e.$id]=e}),t}},filters:{stringify:function(t){return i()(t," ",2)},capitalize:function(t,e){return t?(t instanceof Array||(t=[t]),t.map(function(t){return""+t[0].toUpperCase()+t.slice(1)}).join(", ")):""}},components:{card:h.a,prism:j.a,schemaToc:w.a,schemaLink:O.a}}},d4US:function(t,e,n){var r=n("ICSD")(n("TQ3y"),"DataView");t.exports=r},d7EF:function(t,e,n){"use strict";e.__esModule=!0;var r=a(n("us/S")),i=a(n("BO1k"));function a(t){return t&&t.__esModule?t:{default:t}}e.default=function(){return function(t,e){if(Array.isArray(t))return t;if((0,r.default)(Object(t)))return function(t,e){var n=[],r=!0,a=!1,o=void 0;try{for(var s,c=(0,i.default)(t);!(r=(s=c.next()).done)&&(n.push(s.value),!e||n.length!==e);r=!0);}catch(t){a=!0,o=t}finally{try{!r&&c.return&&c.return()}finally{if(a)throw o}}return n}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},dCZQ:function(t,e,n){var r=n("ICSD")(Object,"create");t.exports=r},dFpP:function(t,e,n){var r=n("imBK"),i=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0||(n==e.length-1?e.pop():i.call(e,n,1),--this.size,0))}},dYhQ:function(t,e,n){var r=n("9UkZ");t.exports=function(t){return r(t)?void 0:t}},deUO:function(t,e,n){var r=n("imBK");t.exports=function(t,e){var n=this.__data__,i=r(n,t);return i<0?(++this.size,n.push([t,e])):n[i][1]=e,this}},duB3:function(t,e,n){var r=n("WxI4"),i=n("dFpP"),a=n("JBvZ"),o=n("2Hvv"),s=n("deUO");function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=a,c.prototype.has=o,c.prototype.set=s,t.exports=c},eFps:function(t,e,n){var r,i=n("+gg+"),a=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!a&&a in t}},eVIm:function(t,e,n){var r=n("dCZQ"),i="__lodash_hash_undefined__",a=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(r){var n=e[t];return n===i?void 0:n}return a.call(e,t)?e[t]:void 0}},f931:function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},fBQ2:function(t,e,n){"use strict";var r=n("evD5"),i=n("X8DO");t.exports=function(t,e,n){e in t?r.f(t,e,i(0,n)):t[e]=n}},fMqj:function(t,e,n){var r=n("zGZ6"),i=500;t.exports=function(t){var e=r(t,function(t){return n.size===i&&n.clear(),t}),n=e.cache;return e}},fZOM:function(t,e,n){var r=n("kM2E"),i=n("mbce")(!1);r(r.S,"Object",{values:function(t){return i(t)}})},fvMW:function(t,e,n){"use strict";var r=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[t._t("default"),!0===t.link?[t._v("\n    yes \n  ")]:!1===t.link?[t._v("\n    no \n  ")]:t.isSchema(t.link)?[n("nuxt-link",{attrs:{to:"#p-"+t.link.$id}},[n("span",{domProps:{innerHTML:t._s(t.link.getPath())}})])]:t.link instanceof Array?n("ul",t._l(t.link,function(e){return n("li",{key:e.$id},[n("nuxt-link",{attrs:{to:"#p-"+e.$id}},[n("span",{domProps:{innerHTML:t._s(e.getPath())}})])],1)})):t.link instanceof Object?n("ul",t._l(t.link,function(e,r){return n("li",[n("nuxt-link",{attrs:{to:"#p-"+e.$id}},[t._v("\n        "+t._s(r)+"\n      ")])],1)})):t._e()],2)};r._withStripped=!0;var i={render:r,staticRenderFns:[]};e.a=i},g3IF:function(t,e,n){"use strict";var r=n("mvHQ"),i=n.n(r),a=n("d7EF"),o=n.n(a),s=n("Dd8w"),c=n.n(s),u=n("W3Iv"),l=n.n(u),f=n("LJry"),p=n.n(f),d=n("T9Hf"),v=n("Q7hp"),h=n.n(v),m=n("s8mu");e.a={head:function(){return{title:"Specification for machine messages"}},created:function(){var t=this,e=new Date,n="a4927dad-58d4-4580-b460-79cefd56775b";this.$static={message:{"content-spec":"urn:spec://eclipse.org/unide/machine-message#v2",device:{deviceID:n},messages:[{ts:e.toISOString(),code:"190ABT"}]},multipleMachineMessages:{"content-spec":"urn:spec://eclipse.org/unide/machine-message#v2",device:{deviceID:n,operationalStatus:"normal",metaData:{swVersion:"2.0.3.13",swBuildID:"41535"}},messages:[{origin:"sensor-id-992.2393.22",ts:e.toISOString(),type:"DEVICE",severity:"HIGH",code:"190ABT",title:"control board damaged",description:"Electronic control board or its electrical connections are damaged",hint:"Check the control board",metaData:{firmware:"20130304_22.020"}},{ts:new Date(e.valueOf()+100).toISOString(),type:"TECHNICAL_INFO",severity:"HIGH",code:"33-02",title:"Disk size limit reached",description:"Disk size has reached limit. Unable to write log files."}]}},this.$static.examples=l()(c()({},["content-spec","device","device.deviceID","device.metaData","device.operationalStatus","messages","messages[0].ts","messages[0].origin","messages[0].type","messages[0].severity","messages[0].code","messages[0].title","messages[0].description","messages[0].hint","messages[0].metaData"].reduce(function(t,e){return t[e.replace(/(^|\.)/g,"$1properties.").replace(/\[[^]]*]/g,".items")]=e,t},{}))).reduce(function(e,n){var r=o()(n,2),i=r[0],a=r[1],s=h()(t.$static.message,a)||h()(t.$static.multipleMachineMessages,a);return s&&(e[i]=[s]),e},{})},filters:{stringify:function(t){return i()(t," ",2)}},components:{card:d.a,prism:p.a,schemaDetail:m.a}}},gGqR:function(t,e,n){var r=n("aCM0"),i=n("yCNF"),a="[object AsyncFunction]",o="[object Function]",s="[object GeneratorFunction]",c="[object Proxy]";t.exports=function(t){if(!i(t))return!1;var e=r(t);return e==o||e==s||e==a||e==c}},gHOb:function(t,e,n){var r=n("d4US"),i=n("POb3"),a=n("bO0Y"),o=n("5N57"),s=n("bIbi"),c=n("aCM0"),u=n("Ai/T"),l="[object Promise]",f="[object WeakMap]",p="[object DataView]",d=u(r),v=u(i),h=u(a),m=u(o),b=u(s),y=c;(r&&y(new r(new ArrayBuffer(1)))!=p||i&&"[object Map]"!=y(new i)||a&&y(a.resolve())!=l||o&&"[object Set]"!=y(new o)||s&&y(new s)!=f)&&(y=function(t){var e=c(t),n="[object Object]"==e?t.constructor:void 0,r=n?u(n):"";if(r)switch(r){case d:return p;case v:return"[object Map]";case h:return l;case m:return"[object Set]";case b:return f}return e}),t.exports=y},gRE1:function(t,e,n){t.exports={default:n("TmV0"),__esModule:!0}},gSvA:function(t,e,n){var r=n("kM2E"),i=n("mbce")(!0);r(r.S,"Object",{entries:function(t){return i(t)}})},ggOT:function(t,e,n){(function(t){var r=n("TQ3y"),i=n("gwcX"),a="object"==typeof e&&e&&!e.nodeType&&e,o=a&&"object"==typeof t&&t&&!t.nodeType&&t,s=o&&o.exports===a?r.Buffer:void 0,c=(s?s.isBuffer:void 0)||i;t.exports=c}).call(e,n("3IRH")(t))},gwcX:function(t,e){t.exports=function(){return!1}},hIPy:function(t,e,n){var r=n("NGEn"),i=n("6MiT"),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,o=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!i(t))||o.test(t)||!a.test(t)||null!=e&&t in Object(e)}},hrPF:function(t,e){t.exports=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}},hvFG:function(t,e,n){"use strict";var r=function(){var t=this.$createElement,e=this._self._c||t;return e(this.tag,{tag:"component"},[e("nuxt-link",{attrs:{to:"#p-"+this.schema.$id}},[e("span",{domProps:{innerHTML:this._s(this.schema.$step)}})]),this.schema.properties||this.schema.patternProperties||this.schema.items?e("ul",[this._l(this.schema.properties,function(t,n){return e("schemaToc",{key:n,attrs:{schema:t}})}),this._l(this.schema.patternProperties,function(t,n){return e("schemaToc",{key:n,attrs:{schema:t}})}),this.schema.items?[this.schema.items instanceof Array?this._l(this.schema.items,function(t,n){return e("schemaToc",{key:n,attrs:{schema:t}})}):e("schemaToc",{attrs:{schema:this.schema.items}})]:this._e()],2):this._e()],1)};r._withStripped=!0;var i={render:r,staticRenderFns:[]};e.a=i},i4ON:function(t,e,n){var r=n("nw3t"),i=n("22B7"),a=Object.prototype.hasOwnProperty;t.exports=function(t,e,n){var o=t[e];a.call(t,e)&&i(o,n)&&(void 0!==n||e in t)||r(t,e,n)}},imBK:function(t,e,n){var r=n("22B7");t.exports=function(t,e){for(var n=t.length;n--;)if(r(t[n][0],e))return n;return-1}},jD7S:function(t,e,n){var r=n("tv3T"),i=n("ktak");t.exports=function(t,e){return t&&r(e,i(e),t)}},jMi8:function(t,e,n){var r=n("O1jc"),i=n("mKB/"),a=n("Ilb/"),o=n("hrPF"),s=n("WQFf"),c=n("1Yb9"),u=n("NGEn"),l=n("Fp5l"),f=n("ggOT"),p=n("gGqR"),d=n("yCNF"),v=n("9UkZ"),h=n("YsVG"),m=n("TlPD");t.exports=function(t,e,n,b,y,_,g){var x=t[n],j=e[n],C=g.get(j);if(C)r(t,n,C);else{var O=_?_(x,j,n+"",t,e,g):void 0,w=void 0===O;if(w){var k=u(j),T=!k&&f(j),P=!k&&!T&&h(j);O=j,k||T||P?u(x)?O=x:l(x)?O=o(x):T?(w=!1,O=i(j,!0)):P?(w=!1,O=a(j,!0)):O=[]:v(j)||c(j)?(O=x,c(x)?O=m(x):(!d(x)||b&&p(x))&&(O=s(j))):w=!1}w&&(g.set(j,O),y(O,j,b,_,g),g.delete(j)),r(t,n,O)}}},jhkR:function(t,e,n){"use strict";var r=n("lOo0");e.a={props:{link:{required:!0}},methods:{isSchema:function(t){return t instanceof r.a}}}},ktak:function(t,e,n){var r=n("7e4z"),i=n("/GnY"),a=n("bGc4");t.exports=function(t){return a(t)?r(t):i(t)}},l9Lx:function(t,e,n){var r=n("lb6C"),i=n("C0hh"),a=Object.prototype.propertyIsEnumerable,o=Object.getOwnPropertySymbols,s=o?function(t){return null==t?[]:(t=Object(t),r(o(t),function(e){return a.call(t,e)}))}:i;t.exports=s},lOo0:function(t,e,n){"use strict";var r=n("woOf"),i=n.n(r),a=n("d7EF"),o=n.n(a),s=n("W3Iv"),c=n.n(s),u=n("Zrlr"),l=n.n(u),f=n("wxAW"),p=n.n(f),d=n("bklM"),v=n.n(d),h=n("rVUV"),m=n.n(h),b=n("Dc7M"),y=n.n(b),_=function(){function t(e,n,r){l()(this,t),this.$id=t.idx++,this.$step=e+"&#8203",this.$parent=n,r&&this.parseFrom(r)}return p()(t,[{key:"toJSON",value:function(){var e=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this;return m()(n,function(n,r,i,a){if(n instanceof t)return c()(n).filter(function(t){var e=o()(t,2),n=e[0];e[1];return["$id","$step","$parent"].indexOf(n)<0}).reduce(function(t,n){var r=o()(n,2),i=r[0],a=r[1];return t[i]=e.toJSON(a),t},{})})}},{key:"getPath",value:function(){var t="";return this.$parent&&(t+=this.$parent.schema.getPath(),"object"===this.$parent.schema.type&&(t+=".")),t+=this.$step,this.getPath=function(){return t},t}},{key:"parseFrom",value:function(e){var n=this;return!0===e?e={}:!1===e&&(e={not:!0}),i()(this,y()(v()(e),["$step","$id","$parent","items","properties","patternProperties","additionalItems","additionalProperties","contains","propertyNames","not","allOf","anyOf","oneOf"])),e.items&&(e.items instanceof Array?this.items=e.items.map(function(r,i){return new t("["+i+"]",{schema:n,path:"items["+i+"]"},e.items[i])}):this.items=new t("[*]",{schema:this,path:"items"},e.items)),["properties","patternProperties"].filter(function(t){return e.hasOwnProperty(t)}).forEach(function(r){return c()(e[r]).forEach(function(e,i){var a=o()(e,2),s=a[0],c=a[1];n[r]=n[r]||{},n[r][s]=new t("patternProperties"===r?"&lt;field&gt;":s,{schema:n,path:r+'["'+s+'"]'},c)})}),["additionalItems","additionalProperties","contains","propertyNames","not"].filter(function(t){return e.hasOwnProperty(t)}).forEach(function(r){n[r]=new t("+",{schema:n,path:r},e[r])}),["allOf","anyOf","oneOf"].filter(function(t){return e.hasOwnProperty(t)}).forEach(function(r){return e[r].forEach(function(e,i){n[r]=n[r]||[],n[r].push(new t("("+i+")"+("anyOf"===r?"?":"+"),{schema:n,path:r+"["+i+"]"},e))})}),this}}]),t}();_.idx=0,e.a=_},lb6C:function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,i=0,a=[];++n<r;){var o=t[n];e(o,n,t)&&(a[i++]=o)}return a}},"mKB/":function(t,e,n){(function(t){var r=n("TQ3y"),i="object"==typeof e&&e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===i?r.Buffer:void 0,s=o?o.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var n=t.length,r=s?s(n):new t.constructor(n);return t.copy(r),r}}).call(e,n("3IRH")(t))},mQxp:function(t,e,n){"use strict";var r=n("Gs0Q"),i=n("hvFG"),a=!1;var o=function(t){a||n("AxiT")},s=n("VU/8")(r.a,i.a,!1,o,null,null);s.options.__file="components\\schemaToc.vue",e.a=s.exports},mTAn:function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},mbce:function(t,e,n){var r=n("lktj"),i=n("TcQ7"),a=n("NpIQ").f;t.exports=function(t){return function(e){for(var n,o=i(e),s=r(o),c=s.length,u=0,l=[];c>u;)a.call(o,n=s[u++])&&l.push(t?[n,o[n]]:o[n]);return l}}},mgnk:function(t,e,n){var r=n("aCM0"),i=n("UnEC"),a="[object Arguments]";t.exports=function(t){return i(t)&&r(t)==a}},nWuj:function(t,e){t.exports=function(t,e){return t.add(e),t}},nw3t:function(t,e,n){var r=n("p0bc");t.exports=function(t,e,n){"__proto__"==e&&r?r(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}},o2mx:function(t,e,n){var r=n("NkRn"),i=n("Hxdr"),a=n("NGEn"),o=n("6MiT"),s=1/0,c=r?r.prototype:void 0,u=c?c.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(a(e))return i(e,t)+"";if(o(e))return u?u.call(e):"";var n=e+"";return"0"==n&&1/e==-s?"-0":n}},octw:function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}},oqL2:function(t,e){t.exports=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}},p0bc:function(t,e,n){var r=n("ICSD"),i=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},pTUa:function(t,e,n){var r=n("/I3N");t.exports=function(t,e){var n=t.__data__;return r(e)?n["string"==typeof e?"string":"hash"]:n.map}},py9u:function(t,e,n){var r=n("tv3T"),i=n("t8rQ");t.exports=function(t,e){return t&&r(e,i(e),t)}},qwTf:function(t,e,n){var r=n("TQ3y").Uint8Array;t.exports=r},qyJz:function(t,e,n){"use strict";var r=n("+ZMJ"),i=n("kM2E"),a=n("sB3e"),o=n("msXi"),s=n("Mhyx"),c=n("QRG4"),u=n("fBQ2"),l=n("3fs2");i(i.S+i.F*!n("dY0y")(function(t){Array.from(t)}),"Array",{from:function(t){var e,n,i,f,p=a(t),d="function"==typeof this?this:Array,v=arguments.length,h=v>1?arguments[1]:void 0,m=void 0!==h,b=0,y=l(p);if(m&&(h=r(h,v>2?arguments[2]:void 0,2)),void 0==y||d==Array&&s(y))for(n=new d(e=c(p.length));e>b;b++)u(n,b,m?h(p[b],b):p[b]);else for(f=y.call(p),n=new d;!(i=f.next()).done;b++)u(n,b,m?o(f,h,[i.value,b],!0):i.value);return n.length=b,n}})},rCVp:function(t,e,n){var r=n("1C79");t.exports=function(t){return null!=t&&t.length?r(t,1):[]}},rVUV:function(t,e,n){var r=n("Fkvj"),i=1,a=4;t.exports=function(t,e){return r(t,i|a,e="function"==typeof e?e:void 0)}},rpnb:function(t,e,n){var r=n("tHks")();t.exports=r},s8mu:function(t,e,n){"use strict";var r=n("cER1"),i=n("D9sP"),a=!1;var o=function(t){a||n("A51D")},s=n("VU/8")(r.a,i.a,!1,o,null,null);s.options.__file="components\\schemaDetail.vue",e.a=s.exports},t8rQ:function(t,e,n){var r=n("7e4z"),i=n("G0Wc"),a=n("bGc4");t.exports=function(t){return a(t)?r(t,!0):i(t)}},tHks:function(t,e){t.exports=function(t){return function(e,n,r){for(var i=-1,a=Object(e),o=r(e),s=o.length;s--;){var c=o[t?s:++i];if(!1===n(a[c],c,a))break}return e}}},tv3T:function(t,e,n){var r=n("i4ON"),i=n("nw3t");t.exports=function(t,e,n,a){var o=!n;n||(n={});for(var s=-1,c=e.length;++s<c;){var u=e[s],l=a?a(n[u],t[u],u,n,t):void 0;void 0===l&&(l=t[u]),o?i(n,u,l):r(n,u,l)}return n}},uCi2:function(t,e,n){var r=n("bIjD"),i=n("Ubhr");t.exports=function(t,e){for(var n=0,a=(e=r(e,t)).length;null!=t&&n<a;)t=t[i(e[n++])];return n&&n==a?t:void 0}},uIr7:function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}},uLhX:function(t,e,n){var r=n("NkRn"),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=r?r.toStringTag:void 0;t.exports=function(t){var e=a.call(t,s),n=t[s];try{t[s]=void 0;var r=!0}catch(t){}var i=o.call(t);return r&&(e?t[s]=n:delete t[s]),i}},"ue/d":function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},uieL:function(t,e){t.exports=function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}},"us/S":function(t,e,n){t.exports={default:n("Xd32"),__esModule:!0}},v8Dt:function(t,e,n){var r=n("pTUa");t.exports=function(t){return r(this,t).get(t)}},vi0E:function(t,e,n){var r=n("f931")(Object.getPrototypeOf,Object);t.exports=r},wEtr:function(t,e,n){n("gSvA"),t.exports=n("FeBl").Object.entries},wSKX:function(t,e){t.exports=function(t){return t}},wxAW:function(t,e,n){"use strict";e.__esModule=!0;var r,i=n("C4MV"),a=(r=i)&&r.__esModule?r:{default:r};e.default=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),(0,a.default)(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}()},xond:function(t,e,n){var r=n("FCuZ"),i=n("09Qt"),a=n("t8rQ");t.exports=function(t){return r(t,a,i)}},yCNF:function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},z4hc:function(t,e,n){var r=n("aCM0"),i=n("Rh28"),a=n("UnEC"),o={};o["[object Float32Array]"]=o["[object Float64Array]"]=o["[object Int8Array]"]=o["[object Int16Array]"]=o["[object Int32Array]"]=o["[object Uint8Array]"]=o["[object Uint8ClampedArray]"]=o["[object Uint16Array]"]=o["[object Uint32Array]"]=!0,o["[object Arguments]"]=o["[object Array]"]=o["[object ArrayBuffer]"]=o["[object Boolean]"]=o["[object DataView]"]=o["[object Date]"]=o["[object Error]"]=o["[object Function]"]=o["[object Map]"]=o["[object Number]"]=o["[object Object]"]=o["[object RegExp]"]=o["[object Set]"]=o["[object String]"]=o["[object WeakMap]"]=!1,t.exports=function(t){return a(t)&&i(t.length)&&!!o[r(t)]}},zBOP:function(t,e,n){var r=n("22B7"),i=n("bGc4"),a=n("ZGh9"),o=n("yCNF");t.exports=function(t,e,n){if(!o(n))return!1;var s=typeof e;return!!("number"==s?i(n)&&a(e,n.length):"string"==s&&e in n)&&r(n[e],t)}},zGZ6:function(t,e,n){var r=n("YeCl"),i="Expected a function";function a(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError(i);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=t.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(a.Cache||r),n}a.Cache=r,t.exports=a},zpVT:function(t,e,n){var r=n("duB3"),i=n("POb3"),a=n("YeCl"),o=200;t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var s=n.__data__;if(!i||s.length<o-1)return s.push([t,e]),this.size=++n.size,this;n=this.__data__=new a(s)}return n.set(t,e),this.size=n.size,this}}});