From d5c38fa916c9a35ee8b80eca7871f148a2467296 Mon Sep 17 00:00:00 2001 From: Mohammed Moussaoui <42718534+Artister@users.noreply.github.com> Date: Fri, 15 Mar 2024 16:35:46 -0400 Subject: [PATCH] build docs --- docs/404.html | 2 +- docs/assets/images/framework.svg | 4 ++-- docs/index.html | 2 +- docs/main.0bc486036b631c30.js | 1 - docs/main.48e0f10c4ba8c0c7.js | 1 + 5 files changed, 5 insertions(+), 5 deletions(-) delete mode 100644 docs/main.0bc486036b631c30.js create mode 100644 docs/main.48e0f10c4ba8c0c7.js diff --git a/docs/404.html b/docs/404.html index f2590ba..3c84fb4 100644 --- a/docs/404.html +++ b/docs/404.html @@ -9,5 +9,5 @@ - + \ No newline at end of file diff --git a/docs/assets/images/framework.svg b/docs/assets/images/framework.svg index 8b2abfb..95cefe3 100644 --- a/docs/assets/images/framework.svg +++ b/docs/assets/images/framework.svg @@ -1,4 +1,4 @@ - + -
DevNet Framework Components
DevNet Framework Components
Web Library
Web Library
Entity ORM
Entity ORM
CLI Tools
CLI Tools
Core Library
Core Library
Application
Application
Text is not SVG - cannot display
\ No newline at end of file +
DevNet Architecture Layers
DevNet Architecture Layers
Common
Common
HTTP
HTTP
System
System
Application
Application
Core
Core
Security
Security
CLI
CLI
ORM
ORM
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/index.html b/docs/index.html index f2590ba..3c84fb4 100644 --- a/docs/index.html +++ b/docs/index.html @@ -9,5 +9,5 @@ - + \ No newline at end of file diff --git a/docs/main.0bc486036b631c30.js b/docs/main.0bc486036b631c30.js deleted file mode 100644 index baa73a2..0000000 --- a/docs/main.0bc486036b631c30.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkdevnet=self.webpackChunkdevnet||[]).push([[179],{76:(q,$,g)=>{"use strict";function v(e){return"function"==typeof e}function k(e){const n=e(r=>{Error.call(r),r.stack=(new Error).stack});return n.prototype=Object.create(Error.prototype),n.prototype.constructor=n,n}const x=k(e=>function(n){e(this),this.message=n?`${n.length} errors occurred during unsubscription:\n${n.map((r,o)=>`${o+1}) ${r.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=n});function R(e,t){if(e){const n=e.indexOf(t);0<=n&&e.splice(n,1)}}class N{constructor(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let t;if(!this.closed){this.closed=!0;const{_parentage:n}=this;if(n)if(this._parentage=null,Array.isArray(n))for(const i of n)i.remove(this);else n.remove(this);const{initialTeardown:r}=this;if(v(r))try{r()}catch(i){t=i instanceof x?i.errors:[i]}const{_finalizers:o}=this;if(o){this._finalizers=null;for(const i of o)try{T(i)}catch(a){t=t??[],a instanceof x?t=[...t,...a.errors]:t.push(a)}}if(t)throw new x(t)}}add(t){var n;if(t&&t!==this)if(this.closed)T(t);else{if(t instanceof N){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=null!==(n=this._finalizers)&&void 0!==n?n:[]).push(t)}}_hasParent(t){const{_parentage:n}=this;return n===t||Array.isArray(n)&&n.includes(t)}_addParent(t){const{_parentage:n}=this;this._parentage=Array.isArray(n)?(n.push(t),n):n?[n,t]:t}_removeParent(t){const{_parentage:n}=this;n===t?this._parentage=null:Array.isArray(n)&&R(n,t)}remove(t){const{_finalizers:n}=this;n&&R(n,t),t instanceof N&&t._removeParent(this)}}N.EMPTY=(()=>{const e=new N;return e.closed=!0,e})();const U=N.EMPTY;function M(e){return e instanceof N||e&&"closed"in e&&v(e.remove)&&v(e.add)&&v(e.unsubscribe)}function T(e){v(e)?e():e.unsubscribe()}const I={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},L={setTimeout(e,t,...n){const{delegate:r}=L;return r?.setTimeout?r.setTimeout(e,t,...n):setTimeout(e,t,...n)},clearTimeout(e){const{delegate:t}=L;return(t?.clearTimeout||clearTimeout)(e)},delegate:void 0};function F(e){L.setTimeout(()=>{const{onUnhandledError:t}=I;if(!t)throw e;t(e)})}function H(){}const G=K("C",void 0,void 0);function K(e,t,n){return{kind:e,value:t,error:n}}let ue=null;function me(e){if(I.useDeprecatedSynchronousErrorHandling){const t=!ue;if(t&&(ue={errorThrown:!1,error:null}),e(),t){const{errorThrown:n,error:r}=ue;if(ue=null,n)throw r}}else e()}class De extends N{constructor(t){super(),this.isStopped=!1,t?(this.destination=t,M(t)&&t.add(this)):this.destination=Mt}static create(t,n,r){return new Le(t,n,r)}next(t){this.isStopped?Nt(function Z(e){return K("N",e,void 0)}(t),this):this._next(t)}error(t){this.isStopped?Nt(function Q(e){return K("E",void 0,e)}(t),this):(this.isStopped=!0,this._error(t))}complete(){this.isStopped?Nt(G,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(t){this.destination.next(t)}_error(t){try{this.destination.error(t)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}}const Pe=Function.prototype.bind;function qe(e,t){return Pe.call(e,t)}class ne{constructor(t){this.partialObserver=t}next(t){const{partialObserver:n}=this;if(n.next)try{n.next(t)}catch(r){st(r)}}error(t){const{partialObserver:n}=this;if(n.error)try{n.error(t)}catch(r){st(r)}else st(t)}complete(){const{partialObserver:t}=this;if(t.complete)try{t.complete()}catch(n){st(n)}}}class Le extends De{constructor(t,n,r){let o;if(super(),v(t)||!t)o={next:t??void 0,error:n??void 0,complete:r??void 0};else{let i;this&&I.useDeprecatedNextContext?(i=Object.create(t),i.unsubscribe=()=>this.unsubscribe(),o={next:t.next&&qe(t.next,i),error:t.error&&qe(t.error,i),complete:t.complete&&qe(t.complete,i)}):o=t}this.destination=new ne(o)}}function st(e){I.useDeprecatedSynchronousErrorHandling?function Ee(e){I.useDeprecatedSynchronousErrorHandling&&ue&&(ue.errorThrown=!0,ue.error=e)}(e):F(e)}function Nt(e,t){const{onStoppedNotification:n}=I;n&&L.setTimeout(()=>n(e,t))}const Mt={closed:!0,next:H,error:function Ze(e){throw e},complete:H},at="function"==typeof Symbol&&Symbol.observable||"@@observable";function We(e){return e}function Lt(e){return 0===e.length?We:1===e.length?e[0]:function(n){return e.reduce((r,o)=>o(r),n)}}let Be=(()=>{class e{constructor(n){n&&(this._subscribe=n)}lift(n){const r=new e;return r.source=this,r.operator=n,r}subscribe(n,r,o){const i=function Pn(e){return e&&e instanceof De||function mr(e){return e&&v(e.next)&&v(e.error)&&v(e.complete)}(e)&&M(e)}(n)?n:new Le(n,r,o);return me(()=>{const{operator:a,source:u}=this;i.add(a?a.call(i,u):u?this._subscribe(i):this._trySubscribe(i))}),i}_trySubscribe(n){try{return this._subscribe(n)}catch(r){n.error(r)}}forEach(n,r){return new(r=gn(r))((o,i)=>{const a=new Le({next:u=>{try{n(u)}catch(d){i(d),a.unsubscribe()}},error:i,complete:o});this.subscribe(a)})}_subscribe(n){var r;return null===(r=this.source)||void 0===r?void 0:r.subscribe(n)}[at](){return this}pipe(...n){return Lt(n)(this)}toPromise(n){return new(n=gn(n))((r,o)=>{let i;this.subscribe(a=>i=a,a=>o(a),()=>r(i))})}}return e.create=t=>new e(t),e})();function gn(e){var t;return null!==(t=e??I.Promise)&&void 0!==t?t:Promise}const Qn=k(e=>function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});let It=(()=>{class e extends Be{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(n){const r=new Vt(this,this);return r.operator=n,r}_throwIfClosed(){if(this.closed)throw new Qn}next(n){me(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(const r of this.currentObservers)r.next(n)}})}error(n){me(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=n;const{observers:r}=this;for(;r.length;)r.shift().error(n)}})}complete(){me(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;const{observers:n}=this;for(;n.length;)n.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var n;return(null===(n=this.observers)||void 0===n?void 0:n.length)>0}_trySubscribe(n){return this._throwIfClosed(),super._trySubscribe(n)}_subscribe(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)}_innerSubscribe(n){const{hasError:r,isStopped:o,observers:i}=this;return r||o?U:(this.currentObservers=null,i.push(n),new N(()=>{this.currentObservers=null,R(i,n)}))}_checkFinalizedStatuses(n){const{hasError:r,thrownError:o,isStopped:i}=this;r?n.error(o):i&&n.complete()}asObservable(){const n=new Be;return n.source=this,n}}return e.create=(t,n)=>new Vt(t,n),e})();class Vt extends It{constructor(t,n){super(),this.destination=t,this.source=n}next(t){var n,r;null===(r=null===(n=this.destination)||void 0===n?void 0:n.next)||void 0===r||r.call(n,t)}error(t){var n,r;null===(r=null===(n=this.destination)||void 0===n?void 0:n.error)||void 0===r||r.call(n,t)}complete(){var t,n;null===(n=null===(t=this.destination)||void 0===t?void 0:t.complete)||void 0===n||n.call(t)}_subscribe(t){var n,r;return null!==(r=null===(n=this.source)||void 0===n?void 0:n.subscribe(t))&&void 0!==r?r:U}}function on(e){return v(e?.lift)}function Ae(e){return t=>{if(on(t))return t.lift(function(n){try{return e(n,this)}catch(r){this.error(r)}});throw new TypeError("Unable to lift unknown Observable type")}}function ye(e,t,n,r,o){return new xt(e,t,n,r,o)}class xt extends De{constructor(t,n,r,o,i,a){super(t),this.onFinalize=i,this.shouldUnsubscribe=a,this._next=n?function(u){try{n(u)}catch(d){t.error(d)}}:super._next,this._error=o?function(u){try{o(u)}catch(d){t.error(d)}finally{this.unsubscribe()}}:super._error,this._complete=r?function(){try{r()}catch(u){t.error(u)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var t;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){const{closed:n}=this;super.unsubscribe(),!n&&(null===(t=this.onFinalize)||void 0===t||t.call(this))}}}function Ce(e,t){return Ae((n,r)=>{let o=0;n.subscribe(ye(r,i=>{r.next(e.call(t,i,o++))}))})}function Dn(e){return this instanceof Dn?(this.v=e,this):new Dn(e)}function Qe(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n,t=e[Symbol.asyncIterator];return t?t.call(e):(e=function sn(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}(e),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(i){n[i]=e[i]&&function(a){return new Promise(function(u,d){!function o(i,a,u,d){Promise.resolve(d).then(function(p){i({value:p,done:u})},a)}(u,d,(a=e[i](a)).done,a.value)})}}}"function"==typeof SuppressedError&&SuppressedError;const w=e=>e&&"number"==typeof e.length&&"function"!=typeof e;function C(e){return v(e?.then)}function z(e){return v(e[at])}function be(e){return Symbol.asyncIterator&&v(e?.[Symbol.asyncIterator])}function ct(e){return new TypeError(`You provided ${null!==e&&"object"==typeof e?"an invalid object":`'${e}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}const J=function ut(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}();function Y(e){return v(e?.[J])}function se(e){return function Mo(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o,r=n.apply(e,t||[]),i=[];return o={},a("next"),a("throw"),a("return"),o[Symbol.asyncIterator]=function(){return this},o;function a(m){r[m]&&(o[m]=function(b){return new Promise(function(E,_){i.push([m,b,E,_])>1||u(m,b)})})}function u(m,b){try{!function d(m){m.value instanceof Dn?Promise.resolve(m.value.v).then(p,h):f(i[0][2],m)}(r[m](b))}catch(E){f(i[0][3],E)}}function p(m){u("next",m)}function h(m){u("throw",m)}function f(m,b){m(b),i.shift(),i.length&&u(i[0][0],i[0][1])}}(this,arguments,function*(){const n=e.getReader();try{for(;;){const{value:r,done:o}=yield Dn(n.read());if(o)return yield Dn(void 0);yield yield Dn(r)}}finally{n.releaseLock()}})}function bt(e){return v(e?.getReader)}function Ue(e){if(e instanceof Be)return e;if(null!=e){if(z(e))return function no(e){return new Be(t=>{const n=e[at]();if(v(n.subscribe))return n.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}(e);if(w(e))return function Gi(e){return new Be(t=>{for(let n=0;n{e.then(n=>{t.closed||(t.next(n),t.complete())},n=>t.error(n)).then(null,F)})}(e);if(be(e))return Oo(e);if(Y(e))return function kl(e){return new Be(t=>{for(const n of e)if(t.next(n),t.closed)return;t.complete()})}(e);if(bt(e))return function $l(e){return Oo(se(e))}(e)}throw ct(e)}function Oo(e){return new Be(t=>{(function Pl(e,t){var n,r,o,i;return function Jn(e,t,n,r){return new(n||(n=Promise))(function(i,a){function u(h){try{p(r.next(h))}catch(f){a(f)}}function d(h){try{p(r.throw(h))}catch(f){a(f)}}function p(h){h.done?i(h.value):function o(i){return i instanceof n?i:new n(function(a){a(i)})}(h.value).then(u,d)}p((r=r.apply(e,t||[])).next())})}(this,void 0,void 0,function*(){try{for(n=Qe(e);!(r=yield n.next()).done;)if(t.next(r.value),t.closed)return}catch(a){o={error:a}}finally{try{r&&!r.done&&(i=n.return)&&(yield i.call(n))}finally{if(o)throw o.error}}t.complete()})})(e,t).catch(n=>t.error(n))})}function Bn(e,t,n,r=0,o=!1){const i=t.schedule(function(){n(),o?e.add(this.schedule(null,r)):this.unsubscribe()},r);if(e.add(i),!o)return i}function pt(e,t,n=1/0){return v(t)?pt((r,o)=>Ce((i,a)=>t(r,i,o,a))(Ue(e(r,o))),n):("number"==typeof t&&(n=t),Ae((r,o)=>function _a(e,t,n,r,o,i,a,u){const d=[];let p=0,h=0,f=!1;const m=()=>{f&&!d.length&&!p&&t.complete()},b=_=>p{i&&t.next(_),p++;let O=!1;Ue(n(_,h++)).subscribe(ye(t,P=>{o?.(P),i?b(P):t.next(P)},()=>{O=!0},void 0,()=>{if(O)try{for(p--;d.length&&pE(P)):E(P)}m()}catch(P){t.error(P)}}))};return e.subscribe(ye(t,b,()=>{f=!0,m()})),()=>{u?.()}}(r,o,e,n)))}function Pr(e=1/0){return pt(We,e)}const Cn=new Be(e=>e.complete());function ko(e){return e[e.length-1]}function ro(e){return function tr(e){return e&&v(e.schedule)}(ko(e))?e.pop():void 0}function oo(e,t=0){return Ae((n,r)=>{n.subscribe(ye(r,o=>Bn(r,e,()=>r.next(o),t),()=>Bn(r,e,()=>r.complete(),t),o=>Bn(r,e,()=>r.error(o),t)))})}function Ca(e,t=0){return Ae((n,r)=>{r.add(e.schedule(()=>n.subscribe(r),t))})}function ht(e,t){if(!e)throw new Error("Iterable cannot be null");return new Be(n=>{Bn(n,t,()=>{const r=e[Symbol.asyncIterator]();Bn(n,t,()=>{r.next().then(o=>{o.done?n.complete():n.next(o.value)})},0,!0)})})}function ft(e,t){return t?function nr(e,t){if(null!=e){if(z(e))return function V(e,t){return Ue(e).pipe(Ca(t),oo(t))}(e,t);if(w(e))return function Ne(e,t){return new Be(n=>{let r=0;return t.schedule(function(){r===e.length?n.complete():(n.next(e[r++]),n.closed||this.schedule())})})}(e,t);if(C(e))return function re(e,t){return Ue(e).pipe(Ca(t),oo(t))}(e,t);if(be(e))return ht(e,t);if(Y(e))return function Xe(e,t){return new Be(n=>{let r;return Bn(n,t,()=>{r=e[J](),Bn(n,t,()=>{let o,i;try{({value:o,done:i}=r.next())}catch(a){return void n.error(a)}i?n.complete():n.next(o)},0,!0)}),()=>v(r?.return)&&r.return()})}(e,t);if(bt(e))return function mn(e,t){return ht(se(e),t)}(e,t)}throw ct(e)}(e,t):Ue(e)}class wt extends It{constructor(t){super(),this._value=t}get value(){return this.getValue()}_subscribe(t){const n=super._subscribe(t);return!n.closed&&t.next(this._value),n}getValue(){const{hasError:t,thrownError:n,_value:r}=this;if(t)throw n;return this._throwIfClosed(),r}next(t){super.next(this._value=t)}}function ae(...e){return ft(e,ro(e))}function Yi(e={}){const{connector:t=(()=>new It),resetOnError:n=!0,resetOnComplete:r=!0,resetOnRefCountZero:o=!0}=e;return i=>{let a,u,d,p=0,h=!1,f=!1;const m=()=>{u?.unsubscribe(),u=void 0},b=()=>{m(),a=d=void 0,h=f=!1},E=()=>{const _=a;b(),_?.unsubscribe()};return Ae((_,O)=>{p++,!f&&!h&&m();const P=d=d??t();O.add(()=>{p--,0===p&&!f&&!h&&(u=Zi(E,o))}),P.subscribe(O),!a&&p>0&&(a=new Le({next:D=>P.next(D),error:D=>{f=!0,m(),u=Zi(b,n,D),P.error(D)},complete:()=>{h=!0,m(),u=Zi(b,r),P.complete()}}),Ue(_).subscribe(a))})(i)}}function Zi(e,t,...n){if(!0===t)return void e();if(!1===t)return;const r=new Le({next:()=>{r.unsubscribe(),e()}});return t(...n).subscribe(r)}function Sn(e,t){return Ae((n,r)=>{let o=null,i=0,a=!1;const u=()=>a&&!o&&r.complete();n.subscribe(ye(r,d=>{o?.unsubscribe();let p=0;const h=i++;Ue(e(d,h)).subscribe(o=ye(r,f=>r.next(t?t(d,f,h,p++):f),()=>{o=null,u()}))},()=>{a=!0,u()}))})}function Ul(e,t){return e===t}function Oe(e){for(let t in e)if(e[t]===Oe)return t;throw Error("Could not find renamed property on target object.")}function Je(e){if("string"==typeof e)return e;if(Array.isArray(e))return"["+e.map(Je).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return`${e.overriddenName}`;if(e.name)return`${e.name}`;const t=e.toString();if(null==t)return""+t;const n=t.indexOf("\n");return-1===n?t:t.substring(0,n)}function Qi(e,t){return null==e||""===e?null===t?"":t:null==t||""===t?e:e+" "+t}const Xi=Oe({__forward_ref__:Oe});function fe(e){return e.__forward_ref__=fe,e.toString=function(){return Je(this())},e}function oe(e){return gt(e)?e():e}function gt(e){return"function"==typeof e&&e.hasOwnProperty(Xi)&&e.__forward_ref__===fe}function Ke(e){return e&&!!e.\u0275providers}const rr="https://g.co/ng/security#xss";class B extends Error{constructor(t,n){super(function Lr(e,t){return`NG0${Math.abs(e)}${t?": "+t:""}`}(t,n)),this.code=t}}function S(e){return"string"==typeof e?e:null==e?"":String(e)}function yn(e,t){throw new B(-201,!1)}function In(e,t){null==e&&function de(e,t,n,r){throw new Error(`ASSERTION ERROR: ${e}`+(null==r?"":` [Expected=> ${n} ${r} ${t} <=Actual]`))}(t,e,null,"!=")}function ce(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function mt(e){return{providers:e.providers||[],imports:e.imports||[]}}function Sa(e){return $h(e,Ta)||$h(e,Ph)}function $h(e,t){return e.hasOwnProperty(t)?e[t]:null}function Ia(e){return e&&(e.hasOwnProperty(Hl)||e.hasOwnProperty(k1))?e[Hl]:null}const Ta=Oe({\u0275prov:Oe}),Hl=Oe({\u0275inj:Oe}),Ph=Oe({ngInjectableDef:Oe}),k1=Oe({ngInjectorDef:Oe});var Me=function(e){return e[e.Default=0]="Default",e[e.Host=1]="Host",e[e.Self=2]="Self",e[e.SkipSelf=4]="SkipSelf",e[e.Optional=8]="Optional",e}(Me||{});let jl;function an(e){const t=jl;return jl=e,t}function Fh(e,t,n){const r=Sa(e);return r&&"root"==r.providedIn?void 0===r.value?r.value=r.factory():r.value:n&Me.Optional?null:void 0!==t?t:void yn(Je(e))}const tt=globalThis,es={},Gl="__NG_DI_FLAG__",Aa="ngTempTokenPath",L1=/\n/gm,Uh="__source";let $o;function Fr(e){const t=$o;return $o=e,t}function U1(e,t=Me.Default){if(void 0===$o)throw new B(-203,!1);return null===$o?Fh(e,void 0,t):$o.get(e,t&Me.Optional?null:void 0,t)}function ie(e,t=Me.Default){return(function Lh(){return jl}()||U1)(oe(e),t)}function X(e,t=Me.Default){return ie(e,Na(t))}function Na(e){return typeof e>"u"||"number"==typeof e?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function Kl(e){const t=[];for(let n=0;nt){a=i-1;break}}}for(;ii?"":o[f+1].toLowerCase();const b=8&r?m:null;if(b&&-1!==zh(b,p,0)||2&r&&p!==m){if(Hn(r))return!1;a=!0}}}}else{if(!a&&!Hn(r)&&!Hn(d))return!1;if(a&&Hn(d))continue;a=!1,r=d|1&r}}return Hn(r)||a}function Hn(e){return 0==(1&e)}function G1(e,t,n,r){if(null===t)return-1;let o=0;if(r||!n){let i=!1;for(;o-1)for(n++;n0?'="'+u+'"':"")+"]"}else 8&r?o+="."+a:4&r&&(o+=" "+a);else""!==o&&!Hn(a)&&(t+=Qh(i,o),o=""),r=a,i=i||!Hn(r);n++}return""!==o&&(t+=Qh(i,o)),t}function Ie(e){return vr(()=>{const t=Jh(e),n={...t,decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection===Ma.OnPush,directiveDefs:null,pipeDefs:null,dependencies:t.standalone&&e.dependencies||null,getStandaloneInjector:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||Un.Emulated,styles:e.styles||He,_:null,schemas:e.schemas||null,tView:null,id:""};ef(n);const r=e.dependencies;return n.directiveDefs=Ra(r,!1),n.pipeDefs=Ra(r,!0),n.id=function s_(e){let t=0;const n=[e.selectors,e.ngContentSelectors,e.hostVars,e.hostAttrs,e.consts,e.vars,e.decls,e.encapsulation,e.standalone,e.signals,e.exportAs,JSON.stringify(e.inputs),JSON.stringify(e.outputs),Object.getOwnPropertyNames(e.type.prototype),!!e.contentQueries,!!e.viewQuery].join("|");for(const o of n)t=Math.imul(31,t)+o.charCodeAt(0)<<0;return t+=2147483648,"c"+t}(n),n})}function n_(e){return ke(e)||Ot(e)}function r_(e){return null!==e}function Et(e){return vr(()=>({type:e.type,bootstrap:e.bootstrap||He,declarations:e.declarations||He,imports:e.imports||He,exports:e.exports||He,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function Xh(e,t){if(null==e)return or;const n={};for(const r in e)if(e.hasOwnProperty(r)){let o=e[r],i=o;Array.isArray(o)&&(i=o[1],o=o[0]),n[o]=r,t&&(t[o]=i)}return n}function Kt(e){return vr(()=>{const t=Jh(e);return ef(t),t})}function ke(e){return e[xa]||null}function Ot(e){return e[Yl]||null}function Yt(e){return e[Zl]||null}function vn(e,t){const n=e[jh]||null;if(!n&&!0===t)throw new Error(`Type ${Je(e)} does not have '\u0275mod' property.`);return n}function Jh(e){const t={};return{type:e.type,providersResolver:null,factory:null,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:t,inputTransforms:null,inputConfig:e.inputs||or,exportAs:e.exportAs||null,standalone:!0===e.standalone,signals:!0===e.signals,selectors:e.selectors||He,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,findHostDirectiveDefs:null,hostDirectives:null,inputs:Xh(e.inputs,t),outputs:Xh(e.outputs)}}function ef(e){e.features?.forEach(t=>t(e))}function Ra(e,t){if(!e)return null;const n=t?Yt:n_;return()=>("function"==typeof e?e():e).map(r=>n(r)).filter(r_)}const yt=0,W=1,we=2,lt=3,jn=4,os=5,Ft=6,Lo=7,_t=8,Br=9,Fo=10,ge=11,is=12,tf=13,Bo=14,Dt=15,ss=16,Uo=17,ir=18,as=19,nf=20,Ur=21,wr=22,cs=23,ls=24,xe=25,Xl=1,rf=2,sr=7,Ho=9,kt=11;function ln(e){return Array.isArray(e)&&"object"==typeof e[Xl]}function Zt(e){return Array.isArray(e)&&!0===e[Xl]}function Jl(e){return 0!=(4&e.flags)}function ao(e){return e.componentOffset>-1}function ka(e){return 1==(1&e.flags)}function Vn(e){return!!e.template}function eu(e){return 0!=(512&e[we])}function co(e,t){return e.hasOwnProperty(br)?e[br]:null}let $t=null,$a=!1;function Tn(e){const t=$t;return $t=e,t}const cf={version:0,dirty:!1,producerNode:void 0,producerLastReadVersion:void 0,producerIndexOfThis:void 0,nextProducerIndex:0,liveConsumerNode:void 0,liveConsumerIndexOfThis:void 0,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{}};function uf(e){if(!ds(e)||e.dirty){if(!e.producerMustRecompute(e)&&!hf(e))return void(e.dirty=!1);e.producerRecomputeValue(e),e.dirty=!1}}function pf(e){e.dirty=!0,function df(e){if(void 0===e.liveConsumerNode)return;const t=$a;$a=!0;try{for(const n of e.liveConsumerNode)n.dirty||pf(n)}finally{$a=t}}(e),e.consumerMarkedDirty?.(e)}function nu(e){return e&&(e.nextProducerIndex=0),Tn(e)}function ru(e,t){if(Tn(t),e&&void 0!==e.producerNode&&void 0!==e.producerIndexOfThis&&void 0!==e.producerLastReadVersion){if(ds(e))for(let n=e.nextProducerIndex;ne.nextProducerIndex;)e.producerNode.pop(),e.producerLastReadVersion.pop(),e.producerIndexOfThis.pop()}}function hf(e){jo(e);for(let t=0;t0}function jo(e){e.producerNode??=[],e.producerIndexOfThis??=[],e.producerLastReadVersion??=[]}let yf=null;const Ef=()=>{},b_=(()=>({...cf,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!1,consumerMarkedDirty:e=>{e.schedule(e.ref)},hasRun:!1,cleanupFn:Ef}))();class w_{constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}}function lo(){return _f}function _f(e){return e.type.prototype.ngOnChanges&&(e.setInput=__),E_}function E_(){const e=Cf(this),t=e?.current;if(t){const n=e.previous;if(n===or)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function __(e,t,n,r){const o=this.declaredInputs[n],i=Cf(e)||function D_(e,t){return e[Df]=t}(e,{previous:or,current:null}),a=i.current||(i.current={}),u=i.previous,d=u[o];a[o]=new w_(d&&d.currentValue,t,u===or),e[r]=t}lo.ngInherit=!0;const Df="__ngSimpleChanges__";function Cf(e){return e[Df]||null}const ar=function(e,t,n){};function nt(e){for(;Array.isArray(e);)e=e[yt];return e}function un(e,t){return nt(t[e.index])}function Tf(e,t){return e.data[t]}function bn(e,t){const n=t[e];return ln(n)?n:n[yt]}function jr(e,t){return null==t?null:e[t]}function Af(e){e[Uo]=0}function N_(e){1024&e[we]||(e[we]|=1024,Mf(e,1))}function Nf(e){1024&e[we]&&(e[we]&=-1025,Mf(e,-1))}function Mf(e,t){let n=e[lt];if(null===n)return;n[os]+=t;let r=n;for(n=n[lt];null!==n&&(1===t&&1===r[os]||-1===t&&0===r[os]);)n[os]+=t,r=n,n=n[lt]}const pe={lFrame:Hf(null),bindingsEnabled:!0,skipHydrationRootTNode:null};function Of(){return pe.bindingsEnabled}function A(){return pe.lFrame.lView}function $e(){return pe.lFrame.tView}function Pt(){let e=kf();for(;null!==e&&64===e.type;)e=e.parent;return e}function kf(){return pe.lFrame.currentTNode}function cr(e,t){const n=pe.lFrame;n.currentTNode=e,n.isParent=t}function cu(){return pe.lFrame.isParent}function V_(e,t){const n=pe.lFrame;n.bindingIndex=n.bindingRootIndex=e,uu(t)}function uu(e){pe.lFrame.currentDirectiveIndex=e}function Ff(){return pe.lFrame.currentQueryIndex}function pu(e){pe.lFrame.currentQueryIndex=e}function q_(e){const t=e[W];return 2===t.type?t.declTNode:1===t.type?e[Ft]:null}function Bf(e,t,n){if(n&Me.SkipSelf){let o=t,i=e;for(;!(o=o.parent,null!==o||n&Me.Host||(o=q_(i),null===o||(i=i[Bo],10&o.type))););if(null===o)return!1;t=o,e=i}const r=pe.lFrame=Uf();return r.currentTNode=t,r.lView=e,!0}function hu(e){const t=Uf(),n=e[W];pe.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function Uf(){const e=pe.lFrame,t=null===e?null:e.child;return null===t?Hf(e):t}function Hf(e){const t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return null!==e&&(e.child=t),t}function jf(){const e=pe.lFrame;return pe.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}const Vf=jf;function fu(){const e=jf();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function uo(e){pe.lFrame.selectedIndex=e}let qf=!0;function Fa(){return qf}function Vr(e){qf=e}function Ba(e,t){for(let n=t.directiveStart,r=t.directiveEnd;n=r)break}else t[d]<0&&(e[Uo]+=65536),(u>13>16&&(3&e[we])===t&&(e[we]+=8192,Gf(u,i)):Gf(u,i)}const Wo=-1;class hs{constructor(t,n,r){this.factory=t,this.resolving=!1,this.canSeeViewProviders=n,this.injectImpl=r}}function yu(e){return e!==Wo}function fs(e){return 32767&e}function gs(e,t){let n=function rD(e){return e>>16}(e),r=t;for(;n>0;)r=r[Bo],n--;return r}let vu=!0;function ja(e){const t=vu;return vu=e,t}const Kf=255,Yf=5;let oD=0;const lr={};function Va(e,t){const n=Zf(e,t);if(-1!==n)return n;const r=t[W];r.firstCreatePass&&(e.injectorIndex=t.length,bu(r.data,e),bu(t,null),bu(r.blueprint,null));const o=za(e,t),i=e.injectorIndex;if(yu(o)){const a=fs(o),u=gs(o,t),d=u[W].data;for(let p=0;p<8;p++)t[i+p]=u[a+p]|d[a+p]}return t[i+8]=o,i}function bu(e,t){e.push(0,0,0,0,0,0,0,0,t)}function Zf(e,t){return-1===e.injectorIndex||e.parent&&e.parent.injectorIndex===e.injectorIndex||null===t[e.injectorIndex+8]?-1:e.injectorIndex}function za(e,t){if(e.parent&&-1!==e.parent.injectorIndex)return e.parent.injectorIndex;let n=0,r=null,o=t;for(;null!==o;){if(r=og(o),null===r)return Wo;if(n++,o=o[Bo],-1!==r.injectorIndex)return r.injectorIndex|n<<16}return Wo}function wu(e,t,n){!function iD(e,t,n){let r;"string"==typeof n?r=n.charCodeAt(0)||0:n.hasOwnProperty(ns)&&(r=n[ns]),null==r&&(r=n[ns]=oD++);const o=r&Kf;t.data[e+(o>>Yf)]|=1<=0?t&Kf:uD:t}(n);if("function"==typeof i){if(!Bf(t,e,r))return r&Me.Host?Qf(o,0,r):Xf(t,n,r,o);try{let a;if(a=i(r),null!=a||r&Me.Optional)return a;yn()}finally{Vf()}}else if("number"==typeof i){let a=null,u=Zf(e,t),d=Wo,p=r&Me.Host?t[Dt][Ft]:null;for((-1===u||r&Me.SkipSelf)&&(d=-1===u?za(e,t):t[u+8],d!==Wo&&ng(r,!1)?(a=t[W],u=fs(d),t=gs(d,t)):u=-1);-1!==u;){const h=t[W];if(tg(i,u,h.data)){const f=aD(u,t,n,a,r,p);if(f!==lr)return f}d=t[u+8],d!==Wo&&ng(r,t[W].data[u+8]===p)&&tg(i,u,t)?(a=h,u=fs(d),t=gs(d,t)):u=-1}}return o}function aD(e,t,n,r,o,i){const a=t[W],u=a.data[e+8],h=qa(u,a,n,null==r?ao(u)&&vu:r!=a&&0!=(3&u.type),o&Me.Host&&i===u);return null!==h?po(t,a,h,u):lr}function qa(e,t,n,r,o){const i=e.providerIndexes,a=t.data,u=1048575&i,d=e.directiveStart,h=i>>20,m=o?u+h:e.directiveEnd;for(let b=r?u:u+h;b=d&&E.type===n)return b}if(o){const b=a[d];if(b&&Vn(b)&&b.type===n)return d}return null}function po(e,t,n,r){let o=e[n];const i=t.data;if(function eD(e){return e instanceof hs}(o)){const a=o;a.resolving&&function Se(e,t){const n=t?`. Dependency path: ${t.join(" > ")} > ${e}`:"";throw new B(-200,`Circular dependency in DI detected for ${e}${n}`)}(function j(e){return"function"==typeof e?e.name||e.toString():"object"==typeof e&&null!=e&&"function"==typeof e.type?e.type.name||e.type.toString():S(e)}(i[n]));const u=ja(a.canSeeViewProviders);a.resolving=!0;const p=a.injectImpl?an(a.injectImpl):null;Bf(e,r,Me.Default);try{o=e[n]=a.factory(void 0,i,e,r),t.firstCreatePass&&n>=r.directiveStart&&function X_(e,t,n){const{ngOnChanges:r,ngOnInit:o,ngDoCheck:i}=t.type.prototype;if(r){const a=_f(t);(n.preOrderHooks??=[]).push(e,a),(n.preOrderCheckHooks??=[]).push(e,a)}o&&(n.preOrderHooks??=[]).push(0-e,o),i&&((n.preOrderHooks??=[]).push(e,i),(n.preOrderCheckHooks??=[]).push(e,i))}(n,i[n],t)}finally{null!==p&&an(p),ja(u),a.resolving=!1,Vf()}}return o}function tg(e,t,n){return!!(n[t+(e>>Yf)]&1<{const t=Eu(oe(e));return t&&t()}:co(e)}function og(e){const t=e[W],n=t.type;return 2===n?t.declTNode:1===n?e[Ft]:null}const Ko="__parameters__";function Zo(e,t,n){return vr(()=>{const r=function _u(e){return function(...n){if(e){const r=e(...n);for(const o in r)this[o]=r[o]}}}(t);function o(...i){if(this instanceof o)return r.apply(this,i),this;const a=new o(...i);return u.annotation=a,u;function u(d,p,h){const f=d.hasOwnProperty(Ko)?d[Ko]:Object.defineProperty(d,Ko,{value:[]})[Ko];for(;f.length<=h;)f.push(null);return(f[h]=f[h]||[]).push(a),d}}return n&&(o.prototype=Object.create(n.prototype)),o.prototype.ngMetadataName=e,o.annotationCls=o,o})}function Xo(e,t){e.forEach(n=>Array.isArray(n)?Xo(n,t):t(n))}function sg(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function Ga(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}const Ya=ts(Zo("Optional"),8),Za=ts(Zo("SkipSelf"),4);function tc(e){return 128==(128&e.flags)}var zr=function(e){return e[e.Important=1]="Important",e[e.DashCase=2]="DashCase",e}(zr||{});const Au=new Map;let jD=0;const Mu="__ngContext__";function Bt(e,t){ln(t)?(e[Mu]=t[as],function zD(e){Au.set(e[as],e)}(t)):e[Mu]=t}let xu;function Ru(e,t){return xu(e,t)}function Es(e){const t=e[lt];return Zt(t)?t[lt]:t}function Tg(e){return Ng(e[is])}function Ag(e){return Ng(e[jn])}function Ng(e){for(;null!==e&&!Zt(e);)e=e[jn];return e}function ni(e,t,n,r,o){if(null!=r){let i,a=!1;Zt(r)?i=r:ln(r)&&(a=!0,r=r[yt]);const u=nt(r);0===e&&null!==n?null==o?Og(t,n,u):ho(t,n,u,o||null,!0):1===e&&null!==n?ho(t,n,u,o||null,!0):2===e?function cc(e,t,n){const r=sc(e,t);r&&function lC(e,t,n,r){e.removeChild(t,n,r)}(e,r,t,n)}(t,u,a):3===e&&t.destroyNode(u),null!=i&&function pC(e,t,n,r,o){const i=n[sr];i!==nt(n)&&ni(t,e,r,i,o);for(let u=kt;u0&&(e[n-1][jn]=r[jn]);const i=Ga(e,kt+t);!function tC(e,t){Ds(e,t,t[ge],2,null,null),t[yt]=null,t[Ft]=null}(r[W],r);const a=i[ir];null!==a&&a.detachView(i[W]),r[lt]=null,r[jn]=null,r[we]&=-129}return r}function ku(e,t){if(!(256&t[we])){const n=t[ge];t[cs]&&ff(t[cs]),t[ls]&&ff(t[ls]),n.destroyNode&&Ds(e,t,n,3,null,null),function oC(e){let t=e[is];if(!t)return $u(e[W],e);for(;t;){let n=null;if(ln(t))n=t[is];else{const r=t[kt];r&&(n=r)}if(!n){for(;t&&!t[jn]&&t!==e;)ln(t)&&$u(t[W],t),t=t[lt];null===t&&(t=e),ln(t)&&$u(t[W],t),n=t&&t[jn]}t=n}}(t)}}function $u(e,t){if(!(256&t[we])){t[we]&=-129,t[we]|=256,function cC(e,t){let n;if(null!=e&&null!=(n=e.destroyHooks))for(let r=0;r=0?r[a]():r[-a].unsubscribe(),i+=2}else n[i].call(r[n[i+1]]);null!==r&&(t[Lo]=null);const o=t[Ur];if(null!==o){t[Ur]=null;for(let i=0;i-1){const{encapsulation:i}=e.data[r.directiveStart+o];if(i===Un.None||i===Un.Emulated)return null}return un(r,n)}}(e,t.parent,n)}function ho(e,t,n,r,o){e.insertBefore(t,n,r,o)}function Og(e,t,n){e.appendChild(t,n)}function kg(e,t,n,r,o){null!==r?ho(e,t,n,r,o):Og(e,t,n)}function sc(e,t){return e.parentNode(t)}let Lu,Hu,uc,Lg=function Pg(e,t,n){return 40&e.type?un(e,n):null};function ac(e,t,n,r){const o=Pu(e,r,t),i=t[ge],u=function $g(e,t,n){return Lg(e,t,n)}(r.parent||t[Ft],r,t);if(null!=o)if(Array.isArray(n))for(let d=0;de,createScript:e=>e,createScriptURL:e=>e})}catch{}return uc}()?.createScriptURL(e)||e}class Gg{constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${rr})`}}function qr(e){return e instanceof Gg?e.changingThisBreaksApplicationSecurity:e}function Cs(e,t){const n=function CC(e){return e instanceof Gg&&e.getTypeName()||null}(e);if(null!=n&&n!==t){if("ResourceURL"===n&&"URL"===t)return!0;throw new Error(`Required a safe ${t}, got a ${n} (see ${rr})`)}return n===t}const AC=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i;var ii=function(e){return e[e.NONE=0]="NONE",e[e.HTML=1]="HTML",e[e.STYLE=2]="STYLE",e[e.SCRIPT=3]="SCRIPT",e[e.URL=4]="URL",e[e.RESOURCE_URL=5]="RESOURCE_URL",e}(ii||{});function em(e){const t=Is();return t?t.sanitize(ii.URL,e)||"":Cs(e,"URL")?qr(e):function Vu(e){return(e=String(e)).match(AC)?e:"unsafe:"+e}(S(e))}function tm(e){const t=Is();if(t)return Wg(t.sanitize(ii.RESOURCE_URL,e)||"");if(Cs(e,"ResourceURL"))return Wg(qr(e));throw new B(904,!1)}function Is(){const e=A();return e&&e[Fo].sanitizer}class te{constructor(t,n){this._desc=t,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof n?this.__NG_ELEMENT_ID__=n:void 0!==n&&(this.\u0275prov=ce({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}}const Ts=new te("ENVIRONMENT_INITIALIZER"),rm=new te("INJECTOR",-1),om=new te("INJECTOR_DEF_TYPES");class Gu{get(t,n=es){if(n===es){const r=new Error(`NullInjectorError: No provider for ${Je(t)}!`);throw r.name="NullInjectorError",r}return n}}function HC(...e){return{\u0275providers:sm(0,e),\u0275fromNgModule:!0}}function sm(e,...t){const n=[],r=new Set;let o;const i=a=>{n.push(a)};return Xo(t,a=>{const u=a;pc(u,i,[],r)&&(o||=[],o.push(u))}),void 0!==o&&am(o,i),n}function am(e,t){for(let n=0;n{t(i,r)})}}function pc(e,t,n,r){if(!(e=oe(e)))return!1;let o=null,i=Ia(e);const a=!i&&ke(e);if(i||a){if(a&&!a.standalone)return!1;o=e}else{const d=e.ngModule;if(i=Ia(d),!i)return!1;o=d}const u=r.has(o);if(a){if(u)return!1;if(r.add(o),a.dependencies){const d="function"==typeof a.dependencies?a.dependencies():a.dependencies;for(const p of d)pc(p,t,n,r)}}else{if(!i)return!1;{if(null!=i.imports&&!u){let p;r.add(o);try{Xo(i.imports,h=>{pc(h,t,n,r)&&(p||=[],p.push(h))})}finally{}void 0!==p&&am(p,t)}if(!u){const p=co(o)||(()=>new o);t({provide:o,useFactory:p,deps:He},o),t({provide:om,useValue:o,multi:!0},o),t({provide:Ts,useValue:()=>ie(o),multi:!0},o)}const d=i.providers;if(null!=d&&!u){const p=e;Ku(d,h=>{t(h,p)})}}}return o!==e&&void 0!==e.providers}function Ku(e,t){for(let n of e)Ke(n)&&(n=n.\u0275providers),Array.isArray(n)?Ku(n,t):t(n)}const jC=Oe({provide:String,useValue:Oe});function Yu(e){return null!==e&&"object"==typeof e&&jC in e}function fo(e){return"function"==typeof e}const Zu=new te("Set Injector scope."),hc={},zC={};let Qu;function fc(){return void 0===Qu&&(Qu=new Gu),Qu}class Nn{}class gc extends Nn{get destroyed(){return this._destroyed}constructor(t,n,r,o){super(),this.parent=n,this.source=r,this.scopes=o,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,Ju(t,a=>this.processProvider(a)),this.records.set(rm,si(void 0,this)),o.has("environment")&&this.records.set(Nn,si(void 0,this));const i=this.records.get(Zu);null!=i&&"string"==typeof i.value&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(om.multi,He,Me.Self))}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const n of this._ngOnDestroyHooks)n.ngOnDestroy();const t=this._onDestroyHooks;this._onDestroyHooks=[];for(const n of t)n()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear()}}onDestroy(t){return this.assertNotDestroyed(),this._onDestroyHooks.push(t),()=>this.removeOnDestroy(t)}runInContext(t){this.assertNotDestroyed();const n=Fr(this),r=an(void 0);try{return t()}finally{Fr(n),an(r)}}get(t,n=es,r=Me.Default){if(this.assertNotDestroyed(),t.hasOwnProperty(Vh))return t[Vh](this);r=Na(r);const i=Fr(this),a=an(void 0);try{if(!(r&Me.SkipSelf)){let d=this.records.get(t);if(void 0===d){const p=function YC(e){return"function"==typeof e||"object"==typeof e&&e instanceof te}(t)&&Sa(t);d=p&&this.injectableDefInScope(p)?si(Xu(t),hc):null,this.records.set(t,d)}if(null!=d)return this.hydrate(t,d)}return(r&Me.Self?fc():this.parent).get(t,n=r&Me.Optional&&n===es?null:n)}catch(u){if("NullInjectorError"===u.name){if((u[Aa]=u[Aa]||[]).unshift(Je(t)),i)throw u;return function j1(e,t,n,r){const o=e[Aa];throw t[Uh]&&o.unshift(t[Uh]),e.message=function V1(e,t,n,r=null){e=e&&"\n"===e.charAt(0)&&"\u0275"==e.charAt(1)?e.slice(2):e;let o=Je(t);if(Array.isArray(t))o=t.map(Je).join(" -> ");else if("object"==typeof t){let i=[];for(let a in t)if(t.hasOwnProperty(a)){let u=t[a];i.push(a+":"+("string"==typeof u?JSON.stringify(u):Je(u)))}o=`{${i.join(", ")}}`}return`${n}${r?"("+r+")":""}[${o}]: ${e.replace(L1,"\n ")}`}("\n"+e.message,o,n,r),e.ngTokenPath=o,e[Aa]=null,e}(u,t,"R3InjectorError",this.source)}throw u}finally{an(a),Fr(i)}}resolveInjectorInitializers(){const t=Fr(this),n=an(void 0);try{const o=this.get(Ts.multi,He,Me.Self);for(const i of o)i()}finally{Fr(t),an(n)}}toString(){const t=[],n=this.records;for(const r of n.keys())t.push(Je(r));return`R3Injector[${t.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new B(205,!1)}processProvider(t){let n=fo(t=oe(t))?t:oe(t&&t.provide);const r=function WC(e){return Yu(e)?si(void 0,e.useValue):si(function um(e,t,n){let r;if(fo(e)){const o=oe(e);return co(o)||Xu(o)}if(Yu(e))r=()=>oe(e.useValue);else if(function lm(e){return!(!e||!e.useFactory)}(e))r=()=>e.useFactory(...Kl(e.deps||[]));else if(function cm(e){return!(!e||!e.useExisting)}(e))r=()=>ie(oe(e.useExisting));else{const o=oe(e&&(e.useClass||e.provide));if(!function GC(e){return!!e.deps}(e))return co(o)||Xu(o);r=()=>new o(...Kl(e.deps))}return r}(e),hc)}(t);if(fo(t)||!0!==t.multi)this.records.get(n);else{let o=this.records.get(n);o||(o=si(void 0,hc,!0),o.factory=()=>Kl(o.multi),this.records.set(n,o)),n=t,o.multi.push(t)}this.records.set(n,r)}hydrate(t,n){return n.value===hc&&(n.value=zC,n.value=n.factory()),"object"==typeof n.value&&n.value&&function KC(e){return null!==e&&"object"==typeof e&&"function"==typeof e.ngOnDestroy}(n.value)&&this._ngOnDestroyHooks.add(n.value),n.value}injectableDefInScope(t){if(!t.providedIn)return!1;const n=oe(t.providedIn);return"string"==typeof n?"any"===n||this.scopes.has(n):this.injectorDefTypes.has(n)}removeOnDestroy(t){const n=this._onDestroyHooks.indexOf(t);-1!==n&&this._onDestroyHooks.splice(n,1)}}function Xu(e){const t=Sa(e),n=null!==t?t.factory:co(e);if(null!==n)return n;if(e instanceof te)throw new B(204,!1);if(e instanceof Function)return function qC(e){const t=e.length;if(t>0)throw function vs(e,t){const n=[];for(let r=0;rn.factory(e):()=>new e}(e);throw new B(204,!1)}function si(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function Ju(e,t){for(const n of e)Array.isArray(n)?Ju(n,t):n&&Ke(n)?Ju(n.\u0275providers,t):t(n)}const mc=new te("AppId",{providedIn:"root",factory:()=>ZC}),ZC="ng",dm=new te("Platform Initializer"),ai=new te("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),pm=new te("CSP nonce",{providedIn:"root",factory:()=>function oi(){if(void 0!==Hu)return Hu;if(typeof document<"u")return document;throw new B(210,!1)}().body?.querySelector("[ngCspNonce]")?.getAttribute("ngCspNonce")||null});let hm=(e,t,n)=>null;function ad(e,t,n=!1){return hm(e,t,n)}class a0{}class mm{}class l0{resolveComponentFactory(t){throw function c0(e){const t=Error(`No component factory found for ${Je(e)}.`);return t.ngComponent=e,t}(t)}}let _c=(()=>{class e{static#e=this.NULL=new l0}return e})();function u0(){return ui(Pt(),A())}function ui(e,t){return new Wr(un(e,t))}let Wr=(()=>{class e{constructor(n){this.nativeElement=n}static#e=this.__NG_ELEMENT_ID__=u0}return e})();function d0(e){return e instanceof Wr?e.nativeElement:e}class vm{}let Dc=(()=>{class e{constructor(){this.destroyNode=null}static#e=this.__NG_ELEMENT_ID__=()=>function p0(){const e=A(),n=bn(Pt().index,e);return(ln(n)?n:e)[ge]}()}return e})(),h0=(()=>{class e{static#e=this.\u0275prov=ce({token:e,providedIn:"root",factory:()=>null})}return e})();class Cc{constructor(t){this.full=t,this.major=t.split(".")[0],this.minor=t.split(".")[1],this.patch=t.split(".").slice(2).join(".")}}const f0=new Cc("16.2.10"),ud={};function _m(e,t=null,n=null,r){const o=Dm(e,t,n,r);return o.resolveInjectorInitializers(),o}function Dm(e,t=null,n=null,r,o=new Set){const i=[n||He,HC(e)];return r=r||("object"==typeof e?void 0:Je(e)),new gc(i,t||fc(),r||null,o)}let Mn=(()=>{class e{static#e=this.THROW_IF_NOT_FOUND=es;static#t=this.NULL=new Gu;static create(n,r){if(Array.isArray(n))return _m({name:""},r,n,"");{const o=n.name??"";return _m({name:o},n.parent,n.providers,o)}}static#n=this.\u0275prov=ce({token:e,providedIn:"any",factory:()=>ie(rm)});static#r=this.__NG_ELEMENT_ID__=-1}return e})();function pd(e){return e.ngOriginalError}class Cr{constructor(){this._console=console}handleError(t){const n=this._findOriginalError(t);this._console.error("ERROR",t),n&&this._console.error("ORIGINAL ERROR",n)}_findOriginalError(t){let n=t&&pd(t);for(;n&&pd(n);)n=pd(n);return n||null}}function fd(e){return t=>{setTimeout(e,void 0,t)}}const en=class E0 extends It{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,n,r){let o=t,i=n||(()=>null),a=r;if(t&&"object"==typeof t){const d=t;o=d.next?.bind(d),i=d.error?.bind(d),a=d.complete?.bind(d)}this.__isAsync&&(i=fd(i),o&&(o=fd(o)),a&&(a=fd(a)));const u=super.subscribe({next:o,error:i,complete:a});return t instanceof N&&t.add(u),u}};function Sm(...e){}class rt{constructor({enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new en(!1),this.onMicrotaskEmpty=new en(!1),this.onStable=new en(!1),this.onError=new en(!1),typeof Zone>"u")throw new B(908,!1);Zone.assertZonePatched();const o=this;o._nesting=0,o._outer=o._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(o._inner=o._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(o._inner=o._inner.fork(Zone.longStackTraceZoneSpec)),o.shouldCoalesceEventChangeDetection=!r&&n,o.shouldCoalesceRunChangeDetection=r,o.lastRequestAnimationFrameId=-1,o.nativeRequestAnimationFrame=function _0(){const e="function"==typeof tt.requestAnimationFrame;let t=tt[e?"requestAnimationFrame":"setTimeout"],n=tt[e?"cancelAnimationFrame":"clearTimeout"];if(typeof Zone<"u"&&t&&n){const r=t[Zone.__symbol__("OriginalDelegate")];r&&(t=r);const o=n[Zone.__symbol__("OriginalDelegate")];o&&(n=o)}return{nativeRequestAnimationFrame:t,nativeCancelAnimationFrame:n}}().nativeRequestAnimationFrame,function S0(e){const t=()=>{!function C0(e){e.isCheckStableRunning||-1!==e.lastRequestAnimationFrameId||(e.lastRequestAnimationFrameId=e.nativeRequestAnimationFrame.call(tt,()=>{e.fakeTopEventTask||(e.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{e.lastRequestAnimationFrameId=-1,md(e),e.isCheckStableRunning=!0,gd(e),e.isCheckStableRunning=!1},void 0,()=>{},()=>{})),e.fakeTopEventTask.invoke()}),md(e))}(e)};e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(n,r,o,i,a,u)=>{if(function T0(e){return!(!Array.isArray(e)||1!==e.length)&&!0===e[0].data?.__ignore_ng_zone__}(u))return n.invokeTask(o,i,a,u);try{return Im(e),n.invokeTask(o,i,a,u)}finally{(e.shouldCoalesceEventChangeDetection&&"eventTask"===i.type||e.shouldCoalesceRunChangeDetection)&&t(),Tm(e)}},onInvoke:(n,r,o,i,a,u,d)=>{try{return Im(e),n.invoke(o,i,a,u,d)}finally{e.shouldCoalesceRunChangeDetection&&t(),Tm(e)}},onHasTask:(n,r,o,i)=>{n.hasTask(o,i),r===o&&("microTask"==i.change?(e._hasPendingMicrotasks=i.microTask,md(e),gd(e)):"macroTask"==i.change&&(e.hasPendingMacrotasks=i.macroTask))},onHandleError:(n,r,o,i)=>(n.handleError(o,i),e.runOutsideAngular(()=>e.onError.emit(i)),!1)})}(o)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!rt.isInAngularZone())throw new B(909,!1)}static assertNotInAngularZone(){if(rt.isInAngularZone())throw new B(909,!1)}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,o){const i=this._inner,a=i.scheduleEventTask("NgZoneEvent: "+o,t,D0,Sm,Sm);try{return i.runTask(a,n,r)}finally{i.cancelTask(a)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}}const D0={};function gd(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function md(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&-1!==e.lastRequestAnimationFrameId)}function Im(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function Tm(e){e._nesting--,gd(e)}class I0{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new en,this.onMicrotaskEmpty=new en,this.onStable=new en,this.onError=new en}run(t,n,r){return t.apply(n,r)}runGuarded(t,n,r){return t.apply(n,r)}runOutsideAngular(t){return t()}runTask(t,n,r,o){return t.apply(n,r)}}const Am=new te("",{providedIn:"root",factory:Nm});function Nm(){const e=X(rt);let t=!0;return function Wt(...e){const t=ro(e),n=function Fl(e,t){return"number"==typeof ko(e)?e.pop():t}(e,1/0),r=e;return r.length?1===r.length?Ue(r[0]):Pr(n)(ft(r,t)):Cn}(new Be(o=>{t=e.isStable&&!e.hasPendingMacrotasks&&!e.hasPendingMicrotasks,e.runOutsideAngular(()=>{o.next(t),o.complete()})}),new Be(o=>{let i;e.runOutsideAngular(()=>{i=e.onStable.subscribe(()=>{rt.assertNotInAngularZone(),queueMicrotask(()=>{!t&&!e.hasPendingMacrotasks&&!e.hasPendingMicrotasks&&(t=!0,o.next(!0))})})});const a=e.onUnstable.subscribe(()=>{rt.assertInAngularZone(),t&&(t=!1,e.runOutsideAngular(()=>{o.next(!1)}))});return()=>{i.unsubscribe(),a.unsubscribe()}}).pipe(Yi()))}function Sr(e){return e instanceof Function?e():e}let yd=(()=>{class e{constructor(){this.renderDepth=0,this.handler=null}begin(){this.handler?.validateBegin(),this.renderDepth++}end(){this.renderDepth--,0===this.renderDepth&&this.handler?.execute()}ngOnDestroy(){this.handler?.destroy(),this.handler=null}static#e=this.\u0275prov=ce({token:e,providedIn:"root",factory:()=>new e})}return e})();function Ms(e){for(;e;){e[we]|=64;const t=Es(e);if(eu(e)&&!t)return e;e=t}return null}const km=new te("",{providedIn:"root",factory:()=>!1});let Ic=null;function Fm(e,t){return e[t]??Hm()}function Bm(e,t){const n=Hm();n.producerNode?.length&&(e[t]=Ic,n.lView=e,Ic=Um())}const L0={...cf,consumerIsAlwaysLive:!0,consumerMarkedDirty:e=>{Ms(e.lView)},lView:null};function Um(){return Object.create(L0)}function Hm(){return Ic??=Um(),Ic}const ve={};function le(e,t=Me.Default){const n=A();return null===n?ie(e,t):Jf(Pt(),n,oe(e),t)}function Tc(e,t,n,r,o,i,a,u,d,p,h){const f=t.blueprint.slice();return f[yt]=o,f[we]=140|r,(null!==p||e&&2048&e[we])&&(f[we]|=2048),Af(f),f[lt]=f[Bo]=e,f[_t]=n,f[Fo]=a||e&&e[Fo],f[ge]=u||e&&e[ge],f[Br]=d||e&&e[Br]||null,f[Ft]=i,f[as]=function VD(){return jD++}(),f[wr]=h,f[nf]=p,f[Dt]=2==t.type?e[Dt]:f,f}function hi(e,t,n,r,o){let i=e.data[t];if(null===i)i=function vd(e,t,n,r,o){const i=kf(),a=cu(),d=e.data[t]=function W0(e,t,n,r,o,i){let a=t?t.injectorIndex:-1,u=0;return function zo(){return null!==pe.skipHydrationRootTNode}()&&(u|=128),{type:n,index:r,insertBeforeIndex:null,injectorIndex:a,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,propertyBindings:null,flags:u,providerIndexes:0,value:o,attrs:i,mergedAttrs:null,localNames:null,initialInputs:void 0,inputs:null,outputs:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:t,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}(0,a?i:i&&i.parent,n,t,r,o);return null===e.firstChild&&(e.firstChild=d),null!==i&&(a?null==i.child&&null!==d.parent&&(i.child=d):null===i.next&&(i.next=d,d.prev=i)),d}(e,t,n,r,o),function j_(){return pe.lFrame.inI18n}()&&(i.flags|=32);else if(64&i.type){i.type=n,i.value=r,i.attrs=o;const a=function ps(){const e=pe.lFrame,t=e.currentTNode;return e.isParent?t:t.parent}();i.injectorIndex=null===a?-1:a.injectorIndex}return cr(i,!0),i}function xs(e,t,n,r){if(0===n)return-1;const o=t.length;for(let i=0;ixe&&function jm(e,t,n,r){if(!r)if(3==(3&t[we])){const i=e.preOrderCheckHooks;null!==i&&Ua(t,i,n)}else{const i=e.preOrderHooks;null!==i&&Ha(t,i,0,n)}uo(n)}(e,t,xe,!1),ar(u?2:0,o);const p=u?i:null,h=nu(p);try{null!==p&&(p.dirty=!1),n(r,o)}finally{ru(p,h)}}finally{u&&null===t[cs]&&Bm(t,cs),uo(a),ar(u?3:1,o)}}function bd(e,t,n){if(Jl(t)){const r=Tn(null);try{const i=t.directiveEnd;for(let a=t.directiveStart;anull;function Gm(e,t,n,r){for(let o in e)if(e.hasOwnProperty(o)){n=null===n?{}:n;const i=e[o];null===r?Km(n,t,o,i):r.hasOwnProperty(o)&&Km(n,t,r[o],i)}return n}function Km(e,t,n,r){e.hasOwnProperty(n)?e[n].push(t,r):e[n]=[t,r]}function Ym(e,t,n,r,o,i){for(let p=0;p0;){const n=e[--t];if("number"==typeof n&&n<0)return n}return 0})(a)!=u&&a.push(u),a.push(n,r,i)}}(e,t,r,xs(e,n,o.hostVars,ve),o)}function ur(e,t,n,r,o,i){const a=un(e,t);!function Sd(e,t,n,r,o,i,a){if(null==i)e.removeAttribute(t,o,n);else{const u=null==a?S(i):a(i,r||"",o);e.setAttribute(t,o,u,n)}}(t[ge],a,i,e.value,n,r,o)}function aS(e,t,n,r,o,i){const a=i[t];if(null!==a)for(let u=0;u{class e{constructor(){this.all=new Set,this.queue=new Map}create(n,r,o){const i=typeof Zone>"u"?null:Zone.current,a=function v_(e,t,n){const r=Object.create(b_);n&&(r.consumerAllowSignalWrites=!0),r.fn=e,r.schedule=t;const o=a=>{r.cleanupFn=a};return r.ref={notify:()=>pf(r),run:()=>{if(r.dirty=!1,r.hasRun&&!hf(r))return;r.hasRun=!0;const a=nu(r);try{r.cleanupFn(),r.cleanupFn=Ef,r.fn(o)}finally{ru(r,a)}},cleanup:()=>r.cleanupFn()},r.ref}(n,p=>{this.all.has(p)&&this.queue.set(p,i)},o);let u;this.all.add(a),a.notify();const d=()=>{a.cleanup(),u?.(),this.all.delete(a),this.queue.delete(a)};return u=r?.onDestroy(d),{destroy:d}}flush(){if(0!==this.queue.size)for(const[n,r]of this.queue)this.queue.delete(n),r?r.run(()=>n.run()):n.run()}get isQueueEmpty(){return 0===this.queue.size}static#e=this.\u0275prov=ce({token:e,providedIn:"root",factory:()=>new e})}return e})();function Nc(e,t,n){let r=n?e.styles:null,o=n?e.classes:null,i=0;if(null!==t)for(let a=0;a0){ay(e,1);const o=n.components;null!==o&&ly(e,o,1)}}function ly(e,t,n){for(let r=0;r-1&&(ic(t,r),Ga(n,r))}this._attachedToViewContainer=!1}ku(this._lView[W],this._lView)}onDestroy(t){!function xf(e,t){if(256==(256&e[we]))throw new B(911,!1);null===e[Ur]&&(e[Ur]=[]),e[Ur].push(t)}(this._lView,t)}markForCheck(){Ms(this._cdRefInjectingView||this._lView)}detach(){this._lView[we]&=-129}reattach(){this._lView[we]|=128}detectChanges(){Mc(this._lView[W],this._lView,this.context)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new B(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function rC(e,t){Ds(e,t,t[ge],2,null,null)}(this._lView[W],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new B(902,!1);this._appRef=t}}class mS extends Os{constructor(t){super(t),this._view=t}detectChanges(){const t=this._view;Mc(t[W],t,t[_t],!1)}checkNoChanges(){}get context(){return null}}class uy extends _c{constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){const n=ke(t);return new ks(n,this.ngModule)}}function dy(e){const t=[];for(let n in e)e.hasOwnProperty(n)&&t.push({propName:e[n],templateName:n});return t}class vS{constructor(t,n){this.injector=t,this.parentInjector=n}get(t,n,r){r=Na(r);const o=this.injector.get(t,ud,r);return o!==ud||n===ud?o:this.parentInjector.get(t,n,r)}}class ks extends mm{get inputs(){const t=this.componentDef,n=t.inputTransforms,r=dy(t.inputs);if(null!==n)for(const o of r)n.hasOwnProperty(o.propName)&&(o.transform=n[o.propName]);return r}get outputs(){return dy(this.componentDef.outputs)}constructor(t,n){super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=function J1(e){return e.map(X1).join(",")}(t.selectors),this.ngContentSelectors=t.ngContentSelectors?t.ngContentSelectors:[],this.isBoundToModule=!!n}create(t,n,r,o){let i=(o=o||this.ngModule)instanceof Nn?o:o?.injector;i&&null!==this.componentDef.getStandaloneInjector&&(i=this.componentDef.getStandaloneInjector(i)||i);const a=i?new vS(t,i):t,u=a.get(vm,null);if(null===u)throw new B(407,!1);const f={rendererFactory:u,sanitizer:a.get(h0,null),effectManager:a.get(oy,null),afterRenderEventManager:a.get(yd,null)},m=u.createRenderer(null,this.componentDef),b=this.componentDef.selectors[0][0]||"div",E=r?function H0(e,t,n,r){const i=r.get(km,!1)||n===Un.ShadowDom,a=e.selectRootElement(t,i);return function j0(e){Wm(e)}(a),a}(m,r,this.componentDef.encapsulation,a):oc(m,b,function yS(e){const t=e.toLowerCase();return"svg"===t?"svg":"math"===t?"math":null}(b)),P=this.componentDef.signals?4608:this.componentDef.onPush?576:528;let D=null;null!==E&&(D=ad(E,a,!0));const ee=_d(0,null,null,1,0,null,null,null,null,null,null),he=Tc(null,ee,null,P,null,null,f,m,a,null,D);let Re,fn;hu(he);try{const kr=this.componentDef;let Hi,xh=null;kr.findHostDirectiveDefs?(Hi=[],xh=new Map,kr.findHostDirectiveDefs(kr,Hi,xh),Hi.push(kr)):Hi=[kr];const g$=function wS(e,t){const n=e[W],r=xe;return e[r]=t,hi(n,r,2,"#host",null)}(he,E),m$=function ES(e,t,n,r,o,i,a){const u=o[W];!function _S(e,t,n,r){for(const o of e)t.mergedAttrs=rs(t.mergedAttrs,o.hostAttrs);null!==t.mergedAttrs&&(Nc(t,t.mergedAttrs,!0),null!==n&&Vg(r,n,t))}(r,e,t,a);let d=null;null!==t&&(d=ad(t,o[Br]));const p=i.rendererFactory.createRenderer(t,n);let h=16;n.signals?h=4096:n.onPush&&(h=64);const f=Tc(o,qm(n),null,h,o[e.index],e,i,p,null,null,d);return u.firstCreatePass&&Cd(u,e,r.length-1),Ac(o,f),o[e.index]=f}(g$,E,kr,Hi,he,f,m);fn=Tf(ee,xe),E&&function CS(e,t,n,r){if(r)Ql(e,n,["ng-version",f0.full]);else{const{attrs:o,classes:i}=function e_(e){const t=[],n=[];let r=1,o=2;for(;r0&&jg(e,n,i.join(" "))}}(m,kr,E,r),void 0!==n&&function SS(e,t,n){const r=e.projection=[];for(let o=0;o(Vr(!0),oc(r,o,function zf(){return pe.lFrame.currentNamespace}()));function Lc(e){return!!e&&"function"==typeof e.then}function Py(e){return!!e&&"function"==typeof e.subscribe}function Bd(e,t,n,r){const o=A(),i=$e(),a=Pt();return function Fy(e,t,n,r,o,i,a){const u=ka(r),p=e.firstCreatePass&&ty(e),h=t[_t],f=ey(t);let m=!0;if(3&r.type||a){const _=un(r,t),O=a?a(_):_,P=f.length,D=a?he=>a(nt(he[r.index])):r.index;let ee=null;if(!a&&u&&(ee=function fI(e,t,n,r){const o=e.cleanup;if(null!=o)for(let i=0;id?u[d]:null}"string"==typeof a&&(i+=2)}return null}(e,t,o,r.index)),null!==ee)(ee.__ngLastListenerFn__||ee).__ngNextListenerFn__=i,ee.__ngLastListenerFn__=i,m=!1;else{i=Uy(r,t,h,i,!1);const he=n.listen(O,o,i);f.push(i,he),p&&p.push(o,D,P,P+1)}}else i=Uy(r,t,h,i,!1);const b=r.outputs;let E;if(m&&null!==b&&(E=b[o])){const _=E.length;if(_)for(let O=0;O<_;O+=2){const Re=t[E[O]][E[O+1]].subscribe(i),fn=f.length;f.push(i,Re),p&&p.push(o,r.index,fn,-(fn+1))}}}(i,o,o[ge],a,e,t,r),Bd}function By(e,t,n,r){try{return ar(6,t,n),!1!==n(r)}catch(o){return ry(e,o),!1}finally{ar(7,t,n)}}function Uy(e,t,n,r,o){return function i(a){if(a===Function)return r;Ms(e.componentOffset>-1?bn(e.index,t):t);let d=By(t,n,r,a),p=i.__ngNextListenerFn__;for(;p;)d=By(t,n,p,a)&&d,p=p.__ngNextListenerFn__;return o&&!1===d&&a.preventDefault(),d}}function s(e,t=""){const n=A(),r=$e(),o=e+xe,i=r.firstCreatePass?hi(r,o,1,t,null):r.data[o],a=dv(r,n,i,t,e);n[o]=a,Fa()&&ac(r,n,a,i),cr(i,!1)}let dv=(e,t,n,r,o)=>(Vr(!0),function rc(e,t){return e.createText(t)}(t[ge],r));const Si="en-US";let kv=Si;class vo{}class sb{}class Xd extends vo{constructor(t,n,r){super(),this._parent=n,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new uy(this);const o=vn(t);this._bootstrapComponents=Sr(o.bootstrap),this._r3Injector=Dm(t,n,[{provide:vo,useValue:this},{provide:_c,useValue:this.componentFactoryResolver},...r],Je(t),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(t)}get injector(){return this._r3Injector}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class Jd extends sb{constructor(t){super(),this.moduleType=t}create(t){return new Xd(this.moduleType,t,[])}}class ab extends vo{constructor(t){super(),this.componentFactoryResolver=new uy(this),this.instance=null;const n=new gc([...t.providers,{provide:vo,useValue:this},{provide:_c,useValue:this.componentFactoryResolver}],t.parent||fc(),t.debugName,new Set(["environment"]));this.injector=n,t.runEnvironmentInitializers&&n.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(t){this.injector.onDestroy(t)}}function ep(e,t,n=null){return new ab({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector}let dA=(()=>{class e{constructor(n){this._injector=n,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(n){if(!n.standalone)return null;if(!this.cachedInjectors.has(n)){const r=sm(0,n.type),o=r.length>0?ep([r],this._injector,`Standalone[${n.type.name}]`):null;this.cachedInjectors.set(n,o)}return this.cachedInjectors.get(n)}ngOnDestroy(){try{for(const n of this.cachedInjectors.values())null!==n&&n.destroy()}finally{this.cachedInjectors.clear()}}static#e=this.\u0275prov=ce({token:e,providedIn:"environment",factory:()=>new e(ie(Nn))})}return e})();function cb(e){e.getStandaloneInjector=t=>t.get(dA).getOrCreateStandaloneInjector(e)}function LA(){return this._results[Symbol.iterator]()}class np{static#e=Symbol.iterator;get changes(){return this._changes||(this._changes=new en)}constructor(t=!1){this._emitDistinctChangesOnly=t,this.dirty=!0,this._results=[],this._changesDetected=!1,this._changes=null,this.length=0,this.first=void 0,this.last=void 0;const n=np.prototype;n[Symbol.iterator]||(n[Symbol.iterator]=LA)}get(t){return this._results[t]}map(t){return this._results.map(t)}filter(t){return this._results.filter(t)}find(t){return this._results.find(t)}reduce(t,n){return this._results.reduce(t,n)}forEach(t){this._results.forEach(t)}some(t){return this._results.some(t)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(t,n){const r=this;r.dirty=!1;const o=function An(e){return e.flat(Number.POSITIVE_INFINITY)}(t);(this._changesDetected=!function mD(e,t,n){if(e.length!==t.length)return!1;for(let r=0;r0&&(n[o-1][jn]=t),r{class e{static#e=this.__NG_ELEMENT_ID__=jA}return e})();const UA=Tr,HA=class extends UA{constructor(t,n,r){super(),this._declarationLView=t,this._declarationTContainer=n,this.elementRef=r}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(t,n){return this.createEmbeddedViewImpl(t,n)}createEmbeddedViewImpl(t,n,r){const o=function FA(e,t,n,r){const o=t.tView,u=Tc(e,o,n,4096&e[we]?4096:16,null,t,null,null,null,r?.injector??null,r?.hydrationInfo??null);u[ss]=e[t.index];const p=e[ir];return null!==p&&(u[ir]=p.createEmbeddedView(o)),Ad(o,u,n),u}(this._declarationLView,this._declarationTContainer,t,{injector:n,hydrationInfo:r});return new Os(o)}};function jA(){return zc(Pt(),A())}function zc(e,t){return 4&e.type?new HA(t,e,ui(e,t)):null}let Wn=(()=>{class e{static#e=this.__NG_ELEMENT_ID__=KA}return e})();function KA(){return Ib(Pt(),A())}const YA=Wn,Cb=class extends YA{constructor(t,n,r){super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r}get element(){return ui(this._hostTNode,this._hostLView)}get injector(){return new Jt(this._hostTNode,this._hostLView)}get parentInjector(){const t=za(this._hostTNode,this._hostLView);if(yu(t)){const n=gs(t,this._hostLView),r=fs(t);return new Jt(n[W].data[r+8],n)}return new Jt(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){const n=Sb(this._lContainer);return null!==n&&n[t]||null}get length(){return this._lContainer.length-kt}createEmbeddedView(t,n,r){let o,i;"number"==typeof r?o=r:null!=r&&(o=r.index,i=r.injector);const u=t.createEmbeddedViewImpl(n||{},i,null);return this.insertImpl(u,o,false),u}createComponent(t,n,r,o,i){const a=t&&!function ys(e){return"function"==typeof e}(t);let u;if(a)u=n;else{const _=n||{};u=_.index,r=_.injector,o=_.projectableNodes,i=_.environmentInjector||_.ngModuleRef}const d=a?t:new ks(ke(t)),p=r||this.parentInjector;if(!i&&null==d.ngModule){const O=(a?p:this.parentInjector).get(Nn,null);O&&(i=O)}ke(d.componentType??{});const b=d.create(p,o,null,i);return this.insertImpl(b.hostView,u,false),b}insert(t,n){return this.insertImpl(t,n,!1)}insertImpl(t,n,r){const o=t._lView;if(function A_(e){return Zt(e[lt])}(o)){const d=this.indexOf(t);if(-1!==d)this.detach(d);else{const p=o[lt],h=new Cb(p,p[Ft],p[lt]);h.detach(h.indexOf(t))}}const a=this._adjustIndex(n),u=this._lContainer;return BA(u,o,a,!r),t.attachToViewContainerRef(),sg(rp(u),a,t),t}move(t,n){return this.insert(t,n)}indexOf(t){const n=Sb(this._lContainer);return null!==n?n.indexOf(t):-1}remove(t){const n=this._adjustIndex(t,-1),r=ic(this._lContainer,n);r&&(Ga(rp(this._lContainer),n),ku(r[W],r))}detach(t){const n=this._adjustIndex(t,-1),r=ic(this._lContainer,n);return r&&null!=Ga(rp(this._lContainer),n)?new Os(r):null}_adjustIndex(t,n=0){return t??this.length+n}};function Sb(e){return e[8]}function rp(e){return e[8]||(e[8]=[])}function Ib(e,t){let n;const r=t[e.index];return Zt(r)?n=r:(n=function Xm(e,t,n,r){return[e,!0,!1,t,null,0,r,n,null,null,null]}(r,t,null,e),t[e.index]=n,Ac(t,n)),Tb(n,t,e,r),new Cb(n,e,t)}let Tb=function Ab(e,t,n,r){if(e[sr])return;let o;o=8&n.type?nt(r):function ZA(e,t){const n=e[ge],r=n.createComment(""),o=un(t,e);return ho(n,sc(n,o),r,function uC(e,t){return e.nextSibling(t)}(n,o),!1),r}(t,n),e[sr]=o};class op{constructor(t){this.queryList=t,this.matches=null}clone(){return new op(this.queryList)}setDirty(){this.queryList.setDirty()}}class ip{constructor(t=[]){this.queries=t}createEmbeddedView(t){const n=t.queries;if(null!==n){const r=null!==t.contentQueries?t.contentQueries[0]:n.length,o=[];for(let i=0;i0)r.push(a[u/2]);else{const p=i[u+1],h=t[-d];for(let f=kt;f{class e{constructor(){this.initialized=!1,this.done=!1,this.donePromise=new Promise((n,r)=>{this.resolve=n,this.reject=r}),this.appInits=X(fp,{optional:!0})??[]}runInitializers(){if(this.initialized)return;const n=[];for(const o of this.appInits){const i=o();if(Lc(i))n.push(i);else if(Py(i)){const a=new Promise((u,d)=>{i.subscribe({complete:u,error:d})});n.push(a)}}const r=()=>{this.done=!0,this.resolve()};Promise.all(n).then(()=>{r()}).catch(o=>{this.reject(o)}),0===n.length&&r(),this.initialized=!0}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),Jb=(()=>{class e{log(n){console.log(n)}warn(n){console.warn(n)}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})();const Ar=new te("LocaleId",{providedIn:"root",factory:()=>X(Ar,Me.Optional|Me.SkipSelf)||function TN(){return typeof $localize<"u"&&$localize.locale||Si}()});let ew=(()=>{class e{constructor(){this.taskId=0,this.pendingTasks=new Set,this.hasPendingTasks=new wt(!1)}add(){this.hasPendingTasks.next(!0);const n=this.taskId++;return this.pendingTasks.add(n),n}remove(n){this.pendingTasks.delete(n),0===this.pendingTasks.size&&this.hasPendingTasks.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this.hasPendingTasks.next(!1)}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();class MN{constructor(t,n){this.ngModuleFactory=t,this.componentFactories=n}}let tw=(()=>{class e{compileModuleSync(n){return new Jd(n)}compileModuleAsync(n){return Promise.resolve(this.compileModuleSync(n))}compileModuleAndAllComponentsSync(n){const r=this.compileModuleSync(n),i=Sr(vn(n).declarations).reduce((a,u)=>{const d=ke(u);return d&&a.push(new ks(d)),a},[]);return new MN(r,i)}compileModuleAndAllComponentsAsync(n){return Promise.resolve(this.compileModuleAndAllComponentsSync(n))}clearCache(){}clearCacheFor(n){}getModuleId(n){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();const iw=new te(""),Kc=new te("");let wp,vp=(()=>{class e{constructor(n,r,o){this._ngZone=n,this.registry=r,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,wp||(function ZN(e){wp=e}(o),o.addToWindow(r)),this._watchAngularEvents(),n.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{rt.assertNotInAngularZone(),queueMicrotask(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())queueMicrotask(()=>{for(;0!==this._callbacks.length;){let n=this._callbacks.pop();clearTimeout(n.timeoutId),n.doneCb(this._didWork)}this._didWork=!1});else{let n=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>!r.updateCb||!r.updateCb(n)||(clearTimeout(r.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(n=>({source:n.source,creationLocation:n.creationLocation,data:n.data})):[]}addCallback(n,r,o){let i=-1;r&&r>0&&(i=setTimeout(()=>{this._callbacks=this._callbacks.filter(a=>a.timeoutId!==i),n(this._didWork,this.getPendingTasks())},r)),this._callbacks.push({doneCb:n,timeoutId:i,updateCb:o})}whenStable(n,r,o){if(o&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(n,r,o),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(n){this.registry.registerApplication(n,this)}unregisterApplication(n){this.registry.unregisterApplication(n)}findProviders(n,r,o){return[]}static#e=this.\u0275fac=function(r){return new(r||e)(ie(rt),ie(bp),ie(Kc))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})(),bp=(()=>{class e{constructor(){this._applications=new Map}registerApplication(n,r){this._applications.set(n,r)}unregisterApplication(n){this._applications.delete(n)}unregisterAllApplications(){this._applications.clear()}getTestability(n){return this._applications.get(n)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(n,r=!0){return wp?.findTestabilityInTree(this,n,r)??null}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})(),Kr=null;const sw=new te("AllowMultipleToken"),Ep=new te("PlatformDestroyListeners"),_p=new te("appBootstrapListener");class cw{constructor(t,n){this.name=t,this.token=n}}function uw(e,t,n=[]){const r=`Platform: ${t}`,o=new te(r);return(i=[])=>{let a=Dp();if(!a||a.injector.get(sw,!1)){const u=[...n,...i,{provide:o,useValue:!0}];e?e(u):function JN(e){if(Kr&&!Kr.get(sw,!1))throw new B(400,!1);(function aw(){!function h_(e){yf=e}(()=>{throw new B(600,!1)})})(),Kr=e;const t=e.get(pw);(function lw(e){e.get(dm,null)?.forEach(n=>n())})(e)}(function dw(e=[],t){return Mn.create({name:t,providers:[{provide:Zu,useValue:"platform"},{provide:Ep,useValue:new Set([()=>Kr=null])},...e]})}(u,r))}return function tM(e){const t=Dp();if(!t)throw new B(401,!1);return t}()}}function Dp(){return Kr?.get(pw)??null}let pw=(()=>{class e{constructor(n){this._injector=n,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(n,r){const o=function nM(e="zone.js",t){return"noop"===e?new I0:"zone.js"===e?new rt(t):e}(r?.ngZone,function hw(e){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:e?.eventCoalescing??!1,shouldCoalesceRunChangeDetection:e?.runCoalescing??!1}}({eventCoalescing:r?.ngZoneEventCoalescing,runCoalescing:r?.ngZoneRunCoalescing}));return o.run(()=>{const i=function uA(e,t,n){return new Xd(e,t,n)}(n.moduleType,this.injector,function vw(e){return[{provide:rt,useFactory:e},{provide:Ts,multi:!0,useFactory:()=>{const t=X(oM,{optional:!0});return()=>t.initialize()}},{provide:yw,useFactory:rM},{provide:Am,useFactory:Nm}]}(()=>o)),a=i.injector.get(Cr,null);return o.runOutsideAngular(()=>{const u=o.onError.subscribe({next:d=>{a.handleError(d)}});i.onDestroy(()=>{Yc(this._modules,i),u.unsubscribe()})}),function fw(e,t,n){try{const r=n();return Lc(r)?r.catch(o=>{throw t.runOutsideAngular(()=>e.handleError(o)),o}):r}catch(r){throw t.runOutsideAngular(()=>e.handleError(r)),r}}(a,o,()=>{const u=i.injector.get(gp);return u.runInitializers(),u.donePromise.then(()=>(function $v(e){In(e,"Expected localeId to be defined"),"string"==typeof e&&(kv=e.toLowerCase().replace(/_/g,"-"))}(i.injector.get(Ar,Si)||Si),this._moduleDoBootstrap(i),i))})})}bootstrapModule(n,r=[]){const o=gw({},r);return function QN(e,t,n){const r=new Jd(n);return Promise.resolve(r)}(0,0,n).then(i=>this.bootstrapModuleFactory(i,o))}_moduleDoBootstrap(n){const r=n.injector.get(Ai);if(n._bootstrapComponents.length>0)n._bootstrapComponents.forEach(o=>r.bootstrap(o));else{if(!n.instance.ngDoBootstrap)throw new B(-403,!1);n.instance.ngDoBootstrap(r)}this._modules.push(n)}onDestroy(n){this._destroyListeners.push(n)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new B(404,!1);this._modules.slice().forEach(r=>r.destroy()),this._destroyListeners.forEach(r=>r());const n=this._injector.get(Ep,null);n&&(n.forEach(r=>r()),n.clear()),this._destroyed=!0}get destroyed(){return this._destroyed}static#e=this.\u0275fac=function(r){return new(r||e)(ie(Mn))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})();function gw(e,t){return Array.isArray(t)?t.reduce(gw,e):{...e,...t}}let Ai=(()=>{class e{constructor(){this._bootstrapListeners=[],this._runningTick=!1,this._destroyed=!1,this._destroyListeners=[],this._views=[],this.internalErrorHandler=X(yw),this.zoneIsStable=X(Am),this.componentTypes=[],this.components=[],this.isStable=X(ew).hasPendingTasks.pipe(Sn(n=>n?ae(!1):this.zoneIsStable),function Bl(e,t=We){return e=e??Ul,Ae((n,r)=>{let o,i=!0;n.subscribe(ye(r,a=>{const u=t(a);(i||!e(o,u))&&(i=!1,o=u,r.next(a))}))})}(),Yi()),this._injector=X(Nn)}get destroyed(){return this._destroyed}get injector(){return this._injector}bootstrap(n,r){const o=n instanceof mm;if(!this._injector.get(gp).done)throw!o&&function Po(e){const t=ke(e)||Ot(e)||Yt(e);return null!==t&&t.standalone}(n),new B(405,!1);let a;a=o?n:this._injector.get(_c).resolveComponentFactory(n),this.componentTypes.push(a.componentType);const u=function XN(e){return e.isBoundToModule}(a)?void 0:this._injector.get(vo),p=a.create(Mn.NULL,[],r||a.selector,u),h=p.location.nativeElement,f=p.injector.get(iw,null);return f?.registerApplication(h),p.onDestroy(()=>{this.detachView(p.hostView),Yc(this.components,p),f?.unregisterApplication(h)}),this._loadComponent(p),p}tick(){if(this._runningTick)throw new B(101,!1);try{this._runningTick=!0;for(let n of this._views)n.detectChanges()}catch(n){this.internalErrorHandler(n)}finally{this._runningTick=!1}}attachView(n){const r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){const r=n;Yc(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView),this.tick(),this.components.push(n);const r=this._injector.get(_p,[]);r.push(...this._bootstrapListeners),r.forEach(o=>o(n))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(n=>n()),this._views.slice().forEach(n=>n.destroy())}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(n){return this._destroyListeners.push(n),()=>Yc(this._destroyListeners,n)}destroy(){if(this._destroyed)throw new B(406,!1);const n=this._injector;n.destroy&&!n.destroyed&&n.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function Yc(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}const yw=new te("",{providedIn:"root",factory:()=>X(Cr).handleError.bind(void 0)});function rM(){const e=X(rt),t=X(Cr);return n=>e.runOutsideAngular(()=>t.handleError(n))}let oM=(()=>{class e{constructor(){this.zone=X(rt),this.applicationRef=X(Ai)}initialize(){this._onMicrotaskEmptySubscription||(this._onMicrotaskEmptySubscription=this.zone.onMicrotaskEmpty.subscribe({next:()=>{this.zone.run(()=>{this.applicationRef.tick()})}}))}ngOnDestroy(){this._onMicrotaskEmptySubscription?.unsubscribe()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();let Cp=(()=>{class e{static#e=this.__NG_ELEMENT_ID__=sM}return e})();function sM(e){return function aM(e,t,n){if(ao(e)&&!n){const r=bn(e.index,t);return new Os(r,r)}return 47&e.type?new Os(t[Dt],t):null}(Pt(),A(),16==(16&e))}const wM=uw(null,"core",[]);let EM=(()=>{class e{constructor(n){}static#e=this.\u0275fac=function(r){return new(r||e)(ie(Ai))};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({})}return e})();function Mp(e){return"boolean"==typeof e?e:null!=e&&"false"!==e}let xp=null;function Ni(){return xp}class $M{}const Rn=new te("DocumentToken");let Rp=(()=>{class e{historyGo(n){throw new Error("Not implemented")}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:function(){return X(LM)},providedIn:"platform"})}return e})();const PM=new te("Location Initialized");let LM=(()=>{class e extends Rp{constructor(){super(),this._doc=X(Rn),this._location=window.location,this._history=window.history}getBaseHrefFromDOM(){return Ni().getBaseHref(this._doc)}onPopState(n){const r=Ni().getGlobalEventTarget(this._doc,"window");return r.addEventListener("popstate",n,!1),()=>r.removeEventListener("popstate",n)}onHashChange(n){const r=Ni().getGlobalEventTarget(this._doc,"window");return r.addEventListener("hashchange",n,!1),()=>r.removeEventListener("hashchange",n)}get href(){return this._location.href}get protocol(){return this._location.protocol}get hostname(){return this._location.hostname}get port(){return this._location.port}get pathname(){return this._location.pathname}get search(){return this._location.search}get hash(){return this._location.hash}set pathname(n){this._location.pathname=n}pushState(n,r,o){this._history.pushState(n,r,o)}replaceState(n,r,o){this._history.replaceState(n,r,o)}forward(){this._history.forward()}back(){this._history.back()}historyGo(n=0){this._history.go(n)}getState(){return this._history.state}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:function(){return new e},providedIn:"platform"})}return e})();function Op(e,t){if(0==e.length)return t;if(0==t.length)return e;let n=0;return e.endsWith("/")&&n++,t.startsWith("/")&&n++,2==n?e+t.substring(1):1==n?e+t:e+"/"+t}function Pw(e){const t=e.match(/#|\?|$/),n=t&&t.index||e.length;return e.slice(0,n-("/"===e[n-1]?1:0))+e.slice(n)}function Nr(e){return e&&"?"!==e[0]?"?"+e:e}let wo=(()=>{class e{historyGo(n){throw new Error("Not implemented")}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:function(){return X(Fw)},providedIn:"root"})}return e})();const Lw=new te("appBaseHref");let Fw=(()=>{class e extends wo{constructor(n,r){super(),this._platformLocation=n,this._removeListenerFns=[],this._baseHref=r??this._platformLocation.getBaseHrefFromDOM()??X(Rn).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(n){this._removeListenerFns.push(this._platformLocation.onPopState(n),this._platformLocation.onHashChange(n))}getBaseHref(){return this._baseHref}prepareExternalUrl(n){return Op(this._baseHref,n)}path(n=!1){const r=this._platformLocation.pathname+Nr(this._platformLocation.search),o=this._platformLocation.hash;return o&&n?`${r}${o}`:r}pushState(n,r,o,i){const a=this.prepareExternalUrl(o+Nr(i));this._platformLocation.pushState(n,r,a)}replaceState(n,r,o,i){const a=this.prepareExternalUrl(o+Nr(i));this._platformLocation.replaceState(n,r,a)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(n=0){this._platformLocation.historyGo?.(n)}static#e=this.\u0275fac=function(r){return new(r||e)(ie(Rp),ie(Lw,8))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),FM=(()=>{class e extends wo{constructor(n,r){super(),this._platformLocation=n,this._baseHref="",this._removeListenerFns=[],null!=r&&(this._baseHref=r)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(n){this._removeListenerFns.push(this._platformLocation.onPopState(n),this._platformLocation.onHashChange(n))}getBaseHref(){return this._baseHref}path(n=!1){let r=this._platformLocation.hash;return null==r&&(r="#"),r.length>0?r.substring(1):r}prepareExternalUrl(n){const r=Op(this._baseHref,n);return r.length>0?"#"+r:r}pushState(n,r,o,i){let a=this.prepareExternalUrl(o+Nr(i));0==a.length&&(a=this._platformLocation.pathname),this._platformLocation.pushState(n,r,a)}replaceState(n,r,o,i){let a=this.prepareExternalUrl(o+Nr(i));0==a.length&&(a=this._platformLocation.pathname),this._platformLocation.replaceState(n,r,a)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(n=0){this._platformLocation.historyGo?.(n)}static#e=this.\u0275fac=function(r){return new(r||e)(ie(Rp),ie(Lw,8))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})(),kp=(()=>{class e{constructor(n){this._subject=new en,this._urlChangeListeners=[],this._urlChangeSubscription=null,this._locationStrategy=n;const r=this._locationStrategy.getBaseHref();this._basePath=function HM(e){if(new RegExp("^(https?:)?//").test(e)){const[,n]=e.split(/\/\/[^\/]+/);return n}return e}(Pw(Bw(r))),this._locationStrategy.onPopState(o=>{this._subject.emit({url:this.path(!0),pop:!0,state:o.state,type:o.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(n=!1){return this.normalize(this._locationStrategy.path(n))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(n,r=""){return this.path()==this.normalize(n+Nr(r))}normalize(n){return e.stripTrailingSlash(function UM(e,t){if(!e||!t.startsWith(e))return t;const n=t.substring(e.length);return""===n||["/",";","?","#"].includes(n[0])?n:t}(this._basePath,Bw(n)))}prepareExternalUrl(n){return n&&"/"!==n[0]&&(n="/"+n),this._locationStrategy.prepareExternalUrl(n)}go(n,r="",o=null){this._locationStrategy.pushState(o,"",n,r),this._notifyUrlChangeListeners(this.prepareExternalUrl(n+Nr(r)),o)}replaceState(n,r="",o=null){this._locationStrategy.replaceState(o,"",n,r),this._notifyUrlChangeListeners(this.prepareExternalUrl(n+Nr(r)),o)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(n=0){this._locationStrategy.historyGo?.(n)}onUrlChange(n){return this._urlChangeListeners.push(n),this._urlChangeSubscription||(this._urlChangeSubscription=this.subscribe(r=>{this._notifyUrlChangeListeners(r.url,r.state)})),()=>{const r=this._urlChangeListeners.indexOf(n);this._urlChangeListeners.splice(r,1),0===this._urlChangeListeners.length&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(n="",r){this._urlChangeListeners.forEach(o=>o(n,r))}subscribe(n,r,o){return this._subject.subscribe({next:n,error:r,complete:o})}static#e=this.normalizeQueryParams=Nr;static#t=this.joinWithSlash=Op;static#n=this.stripTrailingSlash=Pw;static#r=this.\u0275fac=function(r){return new(r||e)(ie(wo))};static#o=this.\u0275prov=ce({token:e,factory:function(){return function BM(){return new kp(ie(wo))}()},providedIn:"root"})}return e})();function Bw(e){return e.replace(/\/index.html$/,"")}let Yr=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({})}return e})();function tE(e){return"server"===e}let iR=(()=>{class e{static#e=this.\u0275prov=ce({token:e,providedIn:"root",factory:()=>new sR(ie(Rn),window)})}return e})();class sR{constructor(t,n){this.document=t,this.window=n,this.offset=()=>[0,0]}setOffset(t){this.offset=Array.isArray(t)?()=>t:t}getScrollPosition(){return this.supportsScrolling()?[this.window.pageXOffset,this.window.pageYOffset]:[0,0]}scrollToPosition(t){this.supportsScrolling()&&this.window.scrollTo(t[0],t[1])}scrollToAnchor(t){if(!this.supportsScrolling())return;const n=function aR(e,t){const n=e.getElementById(t)||e.getElementsByName(t)[0];if(n)return n;if("function"==typeof e.createTreeWalker&&e.body&&"function"==typeof e.body.attachShadow){const r=e.createTreeWalker(e.body,NodeFilter.SHOW_ELEMENT);let o=r.currentNode;for(;o;){const i=o.shadowRoot;if(i){const a=i.getElementById(t)||i.querySelector(`[name="${t}"]`);if(a)return a}o=r.nextNode()}}return null}(this.document,t);n&&(this.scrollToElement(n),n.focus())}setHistoryScrollRestoration(t){this.supportsScrolling()&&(this.window.history.scrollRestoration=t)}scrollToElement(t){const n=t.getBoundingClientRect(),r=n.left+this.window.pageXOffset,o=n.top+this.window.pageYOffset,i=this.offset();this.window.scrollTo(r-i[0],o-i[1])}supportsScrolling(){try{return!!this.window&&!!this.window.scrollTo&&"pageXOffset"in this.window}catch{return!1}}}class xR extends $M{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class Qp extends xR{static makeCurrent(){!function kM(e){xp||(xp=e)}(new Qp)}onAndCancel(t,n,r){return t.addEventListener(n,r),()=>{t.removeEventListener(n,r)}}dispatchEvent(t,n){t.dispatchEvent(n)}remove(t){t.parentNode&&t.parentNode.removeChild(t)}createElement(t,n){return(n=n||this.getDefaultDocument()).createElement(t)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(t){return t.nodeType===Node.ELEMENT_NODE}isShadowRoot(t){return t instanceof DocumentFragment}getGlobalEventTarget(t,n){return"window"===n?window:"document"===n?t:"body"===n?t.body:null}getBaseHref(t){const n=function RR(){return Js=Js||document.querySelector("base"),Js?Js.getAttribute("href"):null}();return null==n?null:function OR(e){pl=pl||document.createElement("a"),pl.setAttribute("href",e);const t=pl.pathname;return"/"===t.charAt(0)?t:`/${t}`}(n)}resetBaseElement(){Js=null}getUserAgent(){return window.navigator.userAgent}getCookie(t){return function Sx(e,t){t=encodeURIComponent(t);for(const n of e.split(";")){const r=n.indexOf("="),[o,i]=-1==r?[n,""]:[n.slice(0,r),n.slice(r+1)];if(o.trim()===t)return decodeURIComponent(i)}return null}(document.cookie,t)}}let pl,Js=null,$R=(()=>{class e{build(){return new XMLHttpRequest}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})();const Xp=new te("EventManagerPlugins");let sE=(()=>{class e{constructor(n,r){this._zone=r,this._eventNameToPlugin=new Map,n.forEach(o=>{o.manager=this}),this._plugins=n.slice().reverse()}addEventListener(n,r,o){return this._findPluginFor(r).addEventListener(n,r,o)}getZone(){return this._zone}_findPluginFor(n){let r=this._eventNameToPlugin.get(n);if(r)return r;if(r=this._plugins.find(i=>i.supports(n)),!r)throw new B(5101,!1);return this._eventNameToPlugin.set(n,r),r}static#e=this.\u0275fac=function(r){return new(r||e)(ie(Xp),ie(rt))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})();class aE{constructor(t){this._doc=t}}const Jp="ng-app-id";let cE=(()=>{class e{constructor(n,r,o,i={}){this.doc=n,this.appId=r,this.nonce=o,this.platformId=i,this.styleRef=new Map,this.hostNodes=new Set,this.styleNodesInDOM=this.collectServerRenderedStyles(),this.platformIsServer=tE(i),this.resetHostNodes()}addStyles(n){for(const r of n)1===this.changeUsageCount(r,1)&&this.onStyleAdded(r)}removeStyles(n){for(const r of n)this.changeUsageCount(r,-1)<=0&&this.onStyleRemoved(r)}ngOnDestroy(){const n=this.styleNodesInDOM;n&&(n.forEach(r=>r.remove()),n.clear());for(const r of this.getAllStyles())this.onStyleRemoved(r);this.resetHostNodes()}addHost(n){this.hostNodes.add(n);for(const r of this.getAllStyles())this.addStyleToHost(n,r)}removeHost(n){this.hostNodes.delete(n)}getAllStyles(){return this.styleRef.keys()}onStyleAdded(n){for(const r of this.hostNodes)this.addStyleToHost(r,n)}onStyleRemoved(n){const r=this.styleRef;r.get(n)?.elements?.forEach(o=>o.remove()),r.delete(n)}collectServerRenderedStyles(){const n=this.doc.head?.querySelectorAll(`style[${Jp}="${this.appId}"]`);if(n?.length){const r=new Map;return n.forEach(o=>{null!=o.textContent&&r.set(o.textContent,o)}),r}return null}changeUsageCount(n,r){const o=this.styleRef;if(o.has(n)){const i=o.get(n);return i.usage+=r,i.usage}return o.set(n,{usage:r,elements:[]}),r}getStyleElement(n,r){const o=this.styleNodesInDOM,i=o?.get(r);if(i?.parentNode===n)return o.delete(r),i.removeAttribute(Jp),i;{const a=this.doc.createElement("style");return this.nonce&&a.setAttribute("nonce",this.nonce),a.textContent=r,this.platformIsServer&&a.setAttribute(Jp,this.appId),a}}addStyleToHost(n,r){const o=this.getStyleElement(n,r);n.appendChild(o);const i=this.styleRef,a=i.get(r)?.elements;a?a.push(o):i.set(r,{elements:[o],usage:1})}resetHostNodes(){const n=this.hostNodes;n.clear(),n.add(this.doc.head)}static#e=this.\u0275fac=function(r){return new(r||e)(ie(Rn),ie(mc),ie(pm,8),ie(ai))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})();const eh={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},th=/%COMP%/g,BR=new te("RemoveStylesOnCompDestroy",{providedIn:"root",factory:()=>!1});function uE(e,t){return t.map(n=>n.replace(th,e))}let dE=(()=>{class e{constructor(n,r,o,i,a,u,d,p=null){this.eventManager=n,this.sharedStylesHost=r,this.appId=o,this.removeStylesOnCompDestroy=i,this.doc=a,this.platformId=u,this.ngZone=d,this.nonce=p,this.rendererByCompId=new Map,this.platformIsServer=tE(u),this.defaultRenderer=new nh(n,a,d,this.platformIsServer)}createRenderer(n,r){if(!n||!r)return this.defaultRenderer;this.platformIsServer&&r.encapsulation===Un.ShadowDom&&(r={...r,encapsulation:Un.Emulated});const o=this.getOrCreateRenderer(n,r);return o instanceof hE?o.applyToHost(n):o instanceof rh&&o.applyStyles(),o}getOrCreateRenderer(n,r){const o=this.rendererByCompId;let i=o.get(r.id);if(!i){const a=this.doc,u=this.ngZone,d=this.eventManager,p=this.sharedStylesHost,h=this.removeStylesOnCompDestroy,f=this.platformIsServer;switch(r.encapsulation){case Un.Emulated:i=new hE(d,p,r,this.appId,h,a,u,f);break;case Un.ShadowDom:return new VR(d,p,n,r,a,u,this.nonce,f);default:i=new rh(d,p,r,h,a,u,f)}o.set(r.id,i)}return i}ngOnDestroy(){this.rendererByCompId.clear()}static#e=this.\u0275fac=function(r){return new(r||e)(ie(sE),ie(cE),ie(mc),ie(BR),ie(Rn),ie(ai),ie(rt),ie(pm))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})();class nh{constructor(t,n,r,o){this.eventManager=t,this.doc=n,this.ngZone=r,this.platformIsServer=o,this.data=Object.create(null),this.destroyNode=null}destroy(){}createElement(t,n){return n?this.doc.createElementNS(eh[n]||n,t):this.doc.createElement(t)}createComment(t){return this.doc.createComment(t)}createText(t){return this.doc.createTextNode(t)}appendChild(t,n){(pE(t)?t.content:t).appendChild(n)}insertBefore(t,n,r){t&&(pE(t)?t.content:t).insertBefore(n,r)}removeChild(t,n){t&&t.removeChild(n)}selectRootElement(t,n){let r="string"==typeof t?this.doc.querySelector(t):t;if(!r)throw new B(-5104,!1);return n||(r.textContent=""),r}parentNode(t){return t.parentNode}nextSibling(t){return t.nextSibling}setAttribute(t,n,r,o){if(o){n=o+":"+n;const i=eh[o];i?t.setAttributeNS(i,n,r):t.setAttribute(n,r)}else t.setAttribute(n,r)}removeAttribute(t,n,r){if(r){const o=eh[r];o?t.removeAttributeNS(o,n):t.removeAttribute(`${r}:${n}`)}else t.removeAttribute(n)}addClass(t,n){t.classList.add(n)}removeClass(t,n){t.classList.remove(n)}setStyle(t,n,r,o){o&(zr.DashCase|zr.Important)?t.style.setProperty(n,r,o&zr.Important?"important":""):t.style[n]=r}removeStyle(t,n,r){r&zr.DashCase?t.style.removeProperty(n):t.style[n]=""}setProperty(t,n,r){t[n]=r}setValue(t,n){t.nodeValue=n}listen(t,n,r){if("string"==typeof t&&!(t=Ni().getGlobalEventTarget(this.doc,t)))throw new Error(`Unsupported event target ${t} for event ${n}`);return this.eventManager.addEventListener(t,n,this.decoratePreventDefault(r))}decoratePreventDefault(t){return n=>{if("__ngUnwrap__"===n)return t;!1===(this.platformIsServer?this.ngZone.runGuarded(()=>t(n)):t(n))&&n.preventDefault()}}}function pE(e){return"TEMPLATE"===e.tagName&&void 0!==e.content}class VR extends nh{constructor(t,n,r,o,i,a,u,d){super(t,i,a,d),this.sharedStylesHost=n,this.hostEl=r,this.shadowRoot=r.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const p=uE(o.id,o.styles);for(const h of p){const f=document.createElement("style");u&&f.setAttribute("nonce",u),f.textContent=h,this.shadowRoot.appendChild(f)}}nodeOrShadowRoot(t){return t===this.hostEl?this.shadowRoot:t}appendChild(t,n){return super.appendChild(this.nodeOrShadowRoot(t),n)}insertBefore(t,n,r){return super.insertBefore(this.nodeOrShadowRoot(t),n,r)}removeChild(t,n){return super.removeChild(this.nodeOrShadowRoot(t),n)}parentNode(t){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(t)))}destroy(){this.sharedStylesHost.removeHost(this.shadowRoot)}}class rh extends nh{constructor(t,n,r,o,i,a,u,d){super(t,i,a,u),this.sharedStylesHost=n,this.removeStylesOnCompDestroy=o,this.styles=d?uE(d,r.styles):r.styles}applyStyles(){this.sharedStylesHost.addStyles(this.styles)}destroy(){this.removeStylesOnCompDestroy&&this.sharedStylesHost.removeStyles(this.styles)}}class hE extends rh{constructor(t,n,r,o,i,a,u,d){const p=o+"-"+r.id;super(t,n,r,i,a,u,d,p),this.contentAttr=function UR(e){return"_ngcontent-%COMP%".replace(th,e)}(p),this.hostAttr=function HR(e){return"_nghost-%COMP%".replace(th,e)}(p)}applyToHost(t){this.applyStyles(),this.setAttribute(t,this.hostAttr,"")}createElement(t,n){const r=super.createElement(t,n);return super.setAttribute(r,this.contentAttr,""),r}}let zR=(()=>{class e extends aE{constructor(n){super(n)}supports(n){return!0}addEventListener(n,r,o){return n.addEventListener(r,o,!1),()=>this.removeEventListener(n,r,o)}removeEventListener(n,r,o){return n.removeEventListener(r,o)}static#e=this.\u0275fac=function(r){return new(r||e)(ie(Rn))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})();const fE=["alt","control","meta","shift"],qR={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},WR={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey};let GR=(()=>{class e extends aE{constructor(n){super(n)}supports(n){return null!=e.parseEventName(n)}addEventListener(n,r,o){const i=e.parseEventName(r),a=e.eventCallback(i.fullKey,o,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>Ni().onAndCancel(n,i.domEventName,a))}static parseEventName(n){const r=n.toLowerCase().split("."),o=r.shift();if(0===r.length||"keydown"!==o&&"keyup"!==o)return null;const i=e._normalizeKey(r.pop());let a="",u=r.indexOf("code");if(u>-1&&(r.splice(u,1),a="code."),fE.forEach(p=>{const h=r.indexOf(p);h>-1&&(r.splice(h,1),a+=p+".")}),a+=i,0!=r.length||0===i.length)return null;const d={};return d.domEventName=o,d.fullKey=a,d}static matchEventFullKeyCode(n,r){let o=qR[n.key]||n.key,i="";return r.indexOf("code.")>-1&&(o=n.code,i="code."),!(null==o||!o)&&(o=o.toLowerCase()," "===o?o="space":"."===o&&(o="dot"),fE.forEach(a=>{a!==o&&(0,WR[a])(n)&&(i+=a+".")}),i+=o,i===r)}static eventCallback(n,r,o){return i=>{e.matchEventFullKeyCode(i,n)&&o.runGuarded(()=>r(i))}}static _normalizeKey(n){return"esc"===n?"escape":n}static#e=this.\u0275fac=function(r){return new(r||e)(ie(Rn))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})();const QR=uw(wM,"browser",[{provide:ai,useValue:"browser"},{provide:dm,useValue:function KR(){Qp.makeCurrent()},multi:!0},{provide:Rn,useFactory:function ZR(){return function vC(e){Hu=e}(document),document},deps:[]}]),XR=new te(""),yE=[{provide:Kc,useClass:class kR{addToWindow(t){tt.getAngularTestability=(r,o=!0)=>{const i=t.findTestabilityInTree(r,o);if(null==i)throw new B(5103,!1);return i},tt.getAllAngularTestabilities=()=>t.getAllTestabilities(),tt.getAllAngularRootElements=()=>t.getAllRootElements(),tt.frameworkStabilizers||(tt.frameworkStabilizers=[]),tt.frameworkStabilizers.push(r=>{const o=tt.getAllAngularTestabilities();let i=o.length,a=!1;const u=function(d){a=a||d,i--,0==i&&r(a)};o.forEach(d=>{d.whenStable(u)})})}findTestabilityInTree(t,n,r){return null==n?null:t.getTestability(n)??(r?Ni().isShadowRoot(n)?this.findTestabilityInTree(t,n.host,!0):this.findTestabilityInTree(t,n.parentElement,!0):null)}},deps:[]},{provide:iw,useClass:vp,deps:[rt,bp,Kc]},{provide:vp,useClass:vp,deps:[rt,bp,Kc]}],vE=[{provide:Zu,useValue:"root"},{provide:Cr,useFactory:function YR(){return new Cr},deps:[]},{provide:Xp,useClass:zR,multi:!0,deps:[Rn,rt,ai]},{provide:Xp,useClass:GR,multi:!0,deps:[Rn]},dE,cE,sE,{provide:vm,useExisting:dE},{provide:class cR{},useClass:$R,deps:[]},[]];let JR=(()=>{class e{constructor(n){}static withServerTransition(n){return{ngModule:e,providers:[{provide:mc,useValue:n.appId}]}}static#e=this.\u0275fac=function(r){return new(r||e)(ie(XR,12))};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({providers:[...vE,...yE],imports:[Yr,EM]})}return e})(),bE=(()=>{class e{constructor(n){this._doc=n}getTitle(){return this._doc.title}setTitle(n){this._doc.title=n||""}static#e=this.\u0275fac=function(r){return new(r||e)(ie(Rn))};static#t=this.\u0275prov=ce({token:e,factory:function(r){let o=null;return o=r?new r:function tO(){return new bE(ie(Rn))}(),o},providedIn:"root"})}return e})();typeof window<"u"&&window;const{isArray:aO}=Array,{getPrototypeOf:cO,prototype:lO,keys:uO}=Object;const{isArray:hO}=Array;function ih(...e){const t=ro(e),n=function Da(e){return v(ko(e))?e.pop():void 0}(e),{args:r,keys:o}=function dO(e){if(1===e.length){const t=e[0];if(aO(t))return{args:t,keys:null};if(function pO(e){return e&&"object"==typeof e&&cO(e)===lO}(t)){const n=uO(t);return{args:n.map(r=>t[r]),keys:n}}}return{args:e,keys:null}}(e);if(0===r.length)return ft([],t);const i=new Be(function yO(e,t,n=We){return r=>{DE(t,()=>{const{length:o}=e,i=new Array(o);let a=o,u=o;for(let d=0;d{const p=ft(e[d],t);let h=!1;p.subscribe(ye(r,f=>{i[d]=f,h||(h=!0,u--),u||r.next(n(i.slice()))},()=>{--a||r.complete()}))},r)},r)}}(r,t,o?a=>function mO(e,t){return e.reduce((n,r,o)=>(n[r]=t[o],n),{})}(o,a):We));return n?i.pipe(function gO(e){return Ce(t=>function fO(e,t){return hO(t)?e(...t):e(t)}(e,t))}(n)):i}function DE(e,t,n){e?Bn(n,e,t):t()}const hl=k(e=>function(){e(this),this.name="EmptyError",this.message="no elements in sequence"});function sh(...e){return function vO(){return Pr(1)}()(ft(e,ro(e)))}function CE(e){return new Be(t=>{Ue(e()).subscribe(t)})}function ea(e,t){const n=v(e)?e:()=>e,r=o=>o.error(n());return new Be(t?o=>t.schedule(r,0,o):r)}function ah(){return Ae((e,t)=>{let n=null;e._refCount++;const r=ye(t,void 0,void 0,void 0,()=>{if(!e||e._refCount<=0||0<--e._refCount)return void(n=null);const o=e._connection,i=n;n=null,o&&(!i||o===i)&&o.unsubscribe(),t.unsubscribe()});e.subscribe(r),r.closed||(n=e.connect())})}class SE extends Be{constructor(t,n){super(),this.source=t,this.subjectFactory=n,this._subject=null,this._refCount=0,this._connection=null,on(t)&&(this.lift=t.lift)}_subscribe(t){return this.getSubject().subscribe(t)}getSubject(){const t=this._subject;return(!t||t.isStopped)&&(this._subject=this.subjectFactory()),this._subject}_teardown(){this._refCount=0;const{_connection:t}=this;this._subject=this._connection=null,t?.unsubscribe()}connect(){let t=this._connection;if(!t){t=this._connection=new N;const n=this.getSubject();t.add(this.source.subscribe(ye(n,void 0,()=>{this._teardown(),n.complete()},r=>{this._teardown(),n.error(r)},()=>this._teardown()))),t.closed&&(this._connection=null,t=N.EMPTY)}return t}refCount(){return ah()(this)}}function xi(e){return e<=0?()=>Cn:Ae((t,n)=>{let r=0;t.subscribe(ye(n,o=>{++r<=e&&(n.next(o),e<=r&&n.complete())}))})}function Qr(e,t){return Ae((n,r)=>{let o=0;n.subscribe(ye(r,i=>e.call(t,i,o++)&&r.next(i)))})}function fl(e){return Ae((t,n)=>{let r=!1;t.subscribe(ye(n,o=>{r=!0,n.next(o)},()=>{r||n.next(e),n.complete()}))})}function IE(e=wO){return Ae((t,n)=>{let r=!1;t.subscribe(ye(n,o=>{r=!0,n.next(o)},()=>r?n.complete():n.error(e())))})}function wO(){return new hl}function Eo(e,t){const n=arguments.length>=2;return r=>r.pipe(e?Qr((o,i)=>e(o,i,r)):We,xi(1),n?fl(t):IE(()=>new hl))}function ta(e,t){return v(t)?pt(e,t,1):pt(e,1)}function Ht(e,t,n){const r=v(e)||t||n?{next:e,error:t,complete:n}:e;return r?Ae((o,i)=>{var a;null===(a=r.subscribe)||void 0===a||a.call(r);let u=!0;o.subscribe(ye(i,d=>{var p;null===(p=r.next)||void 0===p||p.call(r,d),i.next(d)},()=>{var d;u=!1,null===(d=r.complete)||void 0===d||d.call(r),i.complete()},d=>{var p;u=!1,null===(p=r.error)||void 0===p||p.call(r,d),i.error(d)},()=>{var d,p;u&&(null===(d=r.unsubscribe)||void 0===d||d.call(r)),null===(p=r.finalize)||void 0===p||p.call(r)}))}):We}function _o(e){return Ae((t,n)=>{let i,r=null,o=!1;r=t.subscribe(ye(n,void 0,void 0,a=>{i=Ue(e(a,_o(e)(t))),r?(r.unsubscribe(),r=null,i.subscribe(n)):o=!0})),o&&(r.unsubscribe(),r=null,i.subscribe(n))})}function ch(e){return e<=0?()=>Cn:Ae((t,n)=>{let r=[];t.subscribe(ye(n,o=>{r.push(o),e{for(const o of r)n.next(o);n.complete()},void 0,()=>{r=null}))})}function lh(e){return Ae((t,n)=>{try{t.subscribe(n)}finally{n.add(e)}})}const _e="primary",na=Symbol("RouteTitle");class IO{constructor(t){this.params=t||{}}has(t){return Object.prototype.hasOwnProperty.call(this.params,t)}get(t){if(this.has(t)){const n=this.params[t];return Array.isArray(n)?n[0]:n}return null}getAll(t){if(this.has(t)){const n=this.params[t];return Array.isArray(n)?n:[n]}return[]}get keys(){return Object.keys(this.params)}}function Ri(e){return new IO(e)}function TO(e,t,n){const r=n.path.split("/");if(r.length>e.length||"full"===n.pathMatch&&(t.hasChildren()||r.lengthr[i]===o)}return e===t}function AE(e){return e.length>0?e[e.length-1]:null}function Xr(e){return function sO(e){return!!e&&(e instanceof Be||v(e.lift)&&v(e.subscribe))}(e)?e:Lc(e)?ft(Promise.resolve(e)):ae(e)}const NO={exact:function xE(e,t,n){if(!Do(e.segments,t.segments)||!gl(e.segments,t.segments,n)||e.numberOfChildren!==t.numberOfChildren)return!1;for(const r in t.children)if(!e.children[r]||!xE(e.children[r],t.children[r],n))return!1;return!0},subset:RE},NE={exact:function MO(e,t){return fr(e,t)},subset:function xO(e,t){return Object.keys(t).length<=Object.keys(e).length&&Object.keys(t).every(n=>TE(e[n],t[n]))},ignored:()=>!0};function ME(e,t,n){return NO[n.paths](e.root,t.root,n.matrixParams)&&NE[n.queryParams](e.queryParams,t.queryParams)&&!("exact"===n.fragment&&e.fragment!==t.fragment)}function RE(e,t,n){return OE(e,t,t.segments,n)}function OE(e,t,n,r){if(e.segments.length>n.length){const o=e.segments.slice(0,n.length);return!(!Do(o,n)||t.hasChildren()||!gl(o,n,r))}if(e.segments.length===n.length){if(!Do(e.segments,n)||!gl(e.segments,n,r))return!1;for(const o in t.children)if(!e.children[o]||!RE(e.children[o],t.children[o],r))return!1;return!0}{const o=n.slice(0,e.segments.length),i=n.slice(e.segments.length);return!!(Do(e.segments,o)&&gl(e.segments,o,r)&&e.children[_e])&&OE(e.children[_e],t,i,r)}}function gl(e,t,n){return t.every((r,o)=>NE[n](e[o].parameters,r.parameters))}class Oi{constructor(t=new Ye([],{}),n={},r=null){this.root=t,this.queryParams=n,this.fragment=r}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Ri(this.queryParams)),this._queryParamMap}toString(){return kO.serialize(this)}}class Ye{constructor(t,n){this.segments=t,this.children=n,this.parent=null,Object.values(n).forEach(r=>r.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return ml(this)}}class ra{constructor(t,n){this.path=t,this.parameters=n}get parameterMap(){return this._parameterMap||(this._parameterMap=Ri(this.parameters)),this._parameterMap}toString(){return PE(this)}}function Do(e,t){return e.length===t.length&&e.every((n,r)=>n.path===t[r].path)}let oa=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:function(){return new uh},providedIn:"root"})}return e})();class uh{parse(t){const n=new qO(t);return new Oi(n.parseRootSegment(),n.parseQueryParams(),n.parseFragment())}serialize(t){const n=`/${ia(t.root,!0)}`,r=function LO(e){const t=Object.keys(e).map(n=>{const r=e[n];return Array.isArray(r)?r.map(o=>`${yl(n)}=${yl(o)}`).join("&"):`${yl(n)}=${yl(r)}`}).filter(n=>!!n);return t.length?`?${t.join("&")}`:""}(t.queryParams);return`${n}${r}${"string"==typeof t.fragment?`#${function $O(e){return encodeURI(e)}(t.fragment)}`:""}`}}const kO=new uh;function ml(e){return e.segments.map(t=>PE(t)).join("/")}function ia(e,t){if(!e.hasChildren())return ml(e);if(t){const n=e.children[_e]?ia(e.children[_e],!1):"",r=[];return Object.entries(e.children).forEach(([o,i])=>{o!==_e&&r.push(`${o}:${ia(i,!1)}`)}),r.length>0?`${n}(${r.join("//")})`:n}{const n=function OO(e,t){let n=[];return Object.entries(e.children).forEach(([r,o])=>{r===_e&&(n=n.concat(t(o,r)))}),Object.entries(e.children).forEach(([r,o])=>{r!==_e&&(n=n.concat(t(o,r)))}),n}(e,(r,o)=>o===_e?[ia(e.children[_e],!1)]:[`${o}:${ia(r,!1)}`]);return 1===Object.keys(e.children).length&&null!=e.children[_e]?`${ml(e)}/${n[0]}`:`${ml(e)}/(${n.join("//")})`}}function kE(e){return encodeURIComponent(e).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function yl(e){return kE(e).replace(/%3B/gi,";")}function dh(e){return kE(e).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function vl(e){return decodeURIComponent(e)}function $E(e){return vl(e.replace(/\+/g,"%20"))}function PE(e){return`${dh(e.path)}${function PO(e){return Object.keys(e).map(t=>`;${dh(t)}=${dh(e[t])}`).join("")}(e.parameters)}`}const FO=/^[^\/()?;#]+/;function ph(e){const t=e.match(FO);return t?t[0]:""}const BO=/^[^\/()?;=#]+/,HO=/^[^=?&#]+/,VO=/^[^&#]+/;class qO{constructor(t){this.url=t,this.remaining=t}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new Ye([],{}):new Ye([],this.parseChildren())}parseQueryParams(){const t={};if(this.consumeOptional("?"))do{this.parseQueryParam(t)}while(this.consumeOptional("&"));return t}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const t=[];for(this.peekStartsWith("(")||t.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),t.push(this.parseSegment());let n={};this.peekStartsWith("/(")&&(this.capture("/"),n=this.parseParens(!0));let r={};return this.peekStartsWith("(")&&(r=this.parseParens(!1)),(t.length>0||Object.keys(n).length>0)&&(r[_e]=new Ye(t,n)),r}parseSegment(){const t=ph(this.remaining);if(""===t&&this.peekStartsWith(";"))throw new B(4009,!1);return this.capture(t),new ra(vl(t),this.parseMatrixParams())}parseMatrixParams(){const t={};for(;this.consumeOptional(";");)this.parseParam(t);return t}parseParam(t){const n=function UO(e){const t=e.match(BO);return t?t[0]:""}(this.remaining);if(!n)return;this.capture(n);let r="";if(this.consumeOptional("=")){const o=ph(this.remaining);o&&(r=o,this.capture(r))}t[vl(n)]=vl(r)}parseQueryParam(t){const n=function jO(e){const t=e.match(HO);return t?t[0]:""}(this.remaining);if(!n)return;this.capture(n);let r="";if(this.consumeOptional("=")){const a=function zO(e){const t=e.match(VO);return t?t[0]:""}(this.remaining);a&&(r=a,this.capture(r))}const o=$E(n),i=$E(r);if(t.hasOwnProperty(o)){let a=t[o];Array.isArray(a)||(a=[a],t[o]=a),a.push(i)}else t[o]=i}parseParens(t){const n={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const r=ph(this.remaining),o=this.remaining[r.length];if("/"!==o&&")"!==o&&";"!==o)throw new B(4010,!1);let i;r.indexOf(":")>-1?(i=r.slice(0,r.indexOf(":")),this.capture(i),this.capture(":")):t&&(i=_e);const a=this.parseChildren();n[i]=1===Object.keys(a).length?a[_e]:new Ye([],a),this.consumeOptional("//")}return n}peekStartsWith(t){return this.remaining.startsWith(t)}consumeOptional(t){return!!this.peekStartsWith(t)&&(this.remaining=this.remaining.substring(t.length),!0)}capture(t){if(!this.consumeOptional(t))throw new B(4011,!1)}}function LE(e){return e.segments.length>0?new Ye([],{[_e]:e}):e}function FE(e){const t={};for(const r of Object.keys(e.children)){const i=FE(e.children[r]);if(r===_e&&0===i.segments.length&&i.hasChildren())for(const[a,u]of Object.entries(i.children))t[a]=u;else(i.segments.length>0||i.hasChildren())&&(t[r]=i)}return function WO(e){if(1===e.numberOfChildren&&e.children[_e]){const t=e.children[_e];return new Ye(e.segments.concat(t.segments),t.children)}return e}(new Ye(e.segments,t))}function Co(e){return e instanceof Oi}function BE(e){let t;const o=LE(function n(i){const a={};for(const d of i.children){const p=n(d);a[d.outlet]=p}const u=new Ye(i.url,a);return i===e&&(t=u),u}(e.root));return t??o}function UE(e,t,n,r){let o=e;for(;o.parent;)o=o.parent;if(0===t.length)return hh(o,o,o,n,r);const i=function KO(e){if("string"==typeof e[0]&&1===e.length&&"/"===e[0])return new jE(!0,0,e);let t=0,n=!1;const r=e.reduce((o,i,a)=>{if("object"==typeof i&&null!=i){if(i.outlets){const u={};return Object.entries(i.outlets).forEach(([d,p])=>{u[d]="string"==typeof p?p.split("/"):p}),[...o,{outlets:u}]}if(i.segmentPath)return[...o,i.segmentPath]}return"string"!=typeof i?[...o,i]:0===a?(i.split("/").forEach((u,d)=>{0==d&&"."===u||(0==d&&""===u?n=!0:".."===u?t++:""!=u&&o.push(u))}),o):[...o,i]},[]);return new jE(n,t,r)}(t);if(i.toRoot())return hh(o,o,new Ye([],{}),n,r);const a=function YO(e,t,n){if(e.isAbsolute)return new wl(t,!0,0);if(!n)return new wl(t,!1,NaN);if(null===n.parent)return new wl(n,!0,0);const r=bl(e.commands[0])?0:1;return function ZO(e,t,n){let r=e,o=t,i=n;for(;i>o;){if(i-=o,r=r.parent,!r)throw new B(4005,!1);o=r.segments.length}return new wl(r,!1,o-i)}(n,n.segments.length-1+r,e.numberOfDoubleDots)}(i,o,e),u=a.processChildren?aa(a.segmentGroup,a.index,i.commands):VE(a.segmentGroup,a.index,i.commands);return hh(o,a.segmentGroup,u,n,r)}function bl(e){return"object"==typeof e&&null!=e&&!e.outlets&&!e.segmentPath}function sa(e){return"object"==typeof e&&null!=e&&e.outlets}function hh(e,t,n,r,o){let a,i={};r&&Object.entries(r).forEach(([d,p])=>{i[d]=Array.isArray(p)?p.map(h=>`${h}`):`${p}`}),a=e===t?n:HE(e,t,n);const u=LE(FE(a));return new Oi(u,i,o)}function HE(e,t,n){const r={};return Object.entries(e.children).forEach(([o,i])=>{r[o]=i===t?n:HE(i,t,n)}),new Ye(e.segments,r)}class jE{constructor(t,n,r){if(this.isAbsolute=t,this.numberOfDoubleDots=n,this.commands=r,t&&r.length>0&&bl(r[0]))throw new B(4003,!1);const o=r.find(sa);if(o&&o!==AE(r))throw new B(4004,!1)}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class wl{constructor(t,n,r){this.segmentGroup=t,this.processChildren=n,this.index=r}}function VE(e,t,n){if(e||(e=new Ye([],{})),0===e.segments.length&&e.hasChildren())return aa(e,t,n);const r=function XO(e,t,n){let r=0,o=t;const i={match:!1,pathIndex:0,commandIndex:0};for(;o=n.length)return i;const a=e.segments[o],u=n[r];if(sa(u))break;const d=`${u}`,p=r0&&void 0===d)break;if(d&&p&&"object"==typeof p&&void 0===p.outlets){if(!qE(d,p,a))return i;r+=2}else{if(!qE(d,{},a))return i;r++}o++}return{match:!0,pathIndex:o,commandIndex:r}}(e,t,n),o=n.slice(r.commandIndex);if(r.match&&r.pathIndexi!==_e)&&e.children[_e]&&1===e.numberOfChildren&&0===e.children[_e].segments.length){const i=aa(e.children[_e],t,n);return new Ye(e.segments,i.children)}return Object.entries(r).forEach(([i,a])=>{"string"==typeof a&&(a=[a]),null!==a&&(o[i]=VE(e.children[i],t,a))}),Object.entries(e.children).forEach(([i,a])=>{void 0===r[i]&&(o[i]=a)}),new Ye(e.segments,o)}}function fh(e,t,n){const r=e.segments.slice(0,t);let o=0;for(;o{"string"==typeof r&&(r=[r]),null!==r&&(t[n]=fh(new Ye([],{}),0,r))}),t}function zE(e){const t={};return Object.entries(e).forEach(([n,r])=>t[n]=`${r}`),t}function qE(e,t,n){return e==n.path&&fr(t,n.parameters)}const ca="imperative";class gr{constructor(t,n){this.id=t,this.url=n}}class El extends gr{constructor(t,n,r="imperative",o=null){super(t,n),this.type=0,this.navigationTrigger=r,this.restoredState=o}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class Jr extends gr{constructor(t,n,r){super(t,n),this.urlAfterRedirects=r,this.type=1}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class la extends gr{constructor(t,n,r,o){super(t,n),this.reason=r,this.code=o,this.type=2}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class ki extends gr{constructor(t,n,r,o){super(t,n),this.reason=r,this.code=o,this.type=16}}class _l extends gr{constructor(t,n,r,o){super(t,n),this.error=r,this.target=o,this.type=3}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class WE extends gr{constructor(t,n,r,o){super(t,n),this.urlAfterRedirects=r,this.state=o,this.type=4}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class ek extends gr{constructor(t,n,r,o){super(t,n),this.urlAfterRedirects=r,this.state=o,this.type=7}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class tk extends gr{constructor(t,n,r,o,i){super(t,n),this.urlAfterRedirects=r,this.state=o,this.shouldActivate=i,this.type=8}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class nk extends gr{constructor(t,n,r,o){super(t,n),this.urlAfterRedirects=r,this.state=o,this.type=5}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class rk extends gr{constructor(t,n,r,o){super(t,n),this.urlAfterRedirects=r,this.state=o,this.type=6}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class ok{constructor(t){this.route=t,this.type=9}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class ik{constructor(t){this.route=t,this.type=10}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class sk{constructor(t){this.snapshot=t,this.type=11}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class ak{constructor(t){this.snapshot=t,this.type=12}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class ck{constructor(t){this.snapshot=t,this.type=13}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class lk{constructor(t){this.snapshot=t,this.type=14}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class GE{constructor(t,n,r){this.routerEvent=t,this.position=n,this.anchor=r,this.type=15}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}class gh{}class mh{constructor(t){this.url=t}}class uk{constructor(){this.outlet=null,this.route=null,this.injector=null,this.children=new ua,this.attachRef=null}}let ua=(()=>{class e{constructor(){this.contexts=new Map}onChildOutletCreated(n,r){const o=this.getOrCreateContext(n);o.outlet=r,this.contexts.set(n,o)}onChildOutletDestroyed(n){const r=this.getContext(n);r&&(r.outlet=null,r.attachRef=null)}onOutletDeactivated(){const n=this.contexts;return this.contexts=new Map,n}onOutletReAttached(n){this.contexts=n}getOrCreateContext(n){let r=this.getContext(n);return r||(r=new uk,this.contexts.set(n,r)),r}getContext(n){return this.contexts.get(n)||null}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();class KE{constructor(t){this._root=t}get root(){return this._root.value}parent(t){const n=this.pathFromRoot(t);return n.length>1?n[n.length-2]:null}children(t){const n=yh(t,this._root);return n?n.children.map(r=>r.value):[]}firstChild(t){const n=yh(t,this._root);return n&&n.children.length>0?n.children[0].value:null}siblings(t){const n=vh(t,this._root);return n.length<2?[]:n[n.length-2].children.map(o=>o.value).filter(o=>o!==t)}pathFromRoot(t){return vh(t,this._root).map(n=>n.value)}}function yh(e,t){if(e===t.value)return t;for(const n of t.children){const r=yh(e,n);if(r)return r}return null}function vh(e,t){if(e===t.value)return[t];for(const n of t.children){const r=vh(e,n);if(r.length)return r.unshift(t),r}return[]}class Rr{constructor(t,n){this.value=t,this.children=n}toString(){return`TreeNode(${this.value})`}}function $i(e){const t={};return e&&e.children.forEach(n=>t[n.value.outlet]=n),t}class YE extends KE{constructor(t,n){super(t),this.snapshot=n,bh(this,t)}toString(){return this.snapshot.toString()}}function ZE(e,t){const n=function dk(e,t){const a=new Dl([],{},{},"",{},_e,t,null,{});return new XE("",new Rr(a,[]))}(0,t),r=new wt([new ra("",{})]),o=new wt({}),i=new wt({}),a=new wt({}),u=new wt(""),d=new Pi(r,o,a,u,i,_e,t,n.root);return d.snapshot=n.root,new YE(new Rr(d,[]),n)}class Pi{constructor(t,n,r,o,i,a,u,d){this.urlSubject=t,this.paramsSubject=n,this.queryParamsSubject=r,this.fragmentSubject=o,this.dataSubject=i,this.outlet=a,this.component=u,this._futureSnapshot=d,this.title=this.dataSubject?.pipe(Ce(p=>p[na]))??ae(void 0),this.url=t,this.params=n,this.queryParams=r,this.fragment=o,this.data=i}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=this.params.pipe(Ce(t=>Ri(t)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe(Ce(t=>Ri(t)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function QE(e,t="emptyOnly"){const n=e.pathFromRoot;let r=0;if("always"!==t)for(r=n.length-1;r>=1;){const o=n[r],i=n[r-1];if(o.routeConfig&&""===o.routeConfig.path)r--;else{if(i.component)break;r--}}return function pk(e){return e.reduce((t,n)=>({params:{...t.params,...n.params},data:{...t.data,...n.data},resolve:{...n.data,...t.resolve,...n.routeConfig?.data,...n._resolvedData}}),{params:{},data:{},resolve:{}})}(n.slice(r))}class Dl{get title(){return this.data?.[na]}constructor(t,n,r,o,i,a,u,d,p){this.url=t,this.params=n,this.queryParams=r,this.fragment=o,this.data=i,this.outlet=a,this.component=u,this.routeConfig=d,this._resolve=p}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=Ri(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Ri(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(r=>r.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class XE extends KE{constructor(t,n){super(n),this.url=t,bh(this,n)}toString(){return JE(this._root)}}function bh(e,t){t.value._routerState=e,t.children.forEach(n=>bh(e,n))}function JE(e){const t=e.children.length>0?` { ${e.children.map(JE).join(", ")} } `:"";return`${e.value}${t}`}function wh(e){if(e.snapshot){const t=e.snapshot,n=e._futureSnapshot;e.snapshot=n,fr(t.queryParams,n.queryParams)||e.queryParamsSubject.next(n.queryParams),t.fragment!==n.fragment&&e.fragmentSubject.next(n.fragment),fr(t.params,n.params)||e.paramsSubject.next(n.params),function AO(e,t){if(e.length!==t.length)return!1;for(let n=0;nfr(n.parameters,t[r].parameters))}(e.url,t.url);return n&&!(!e.parent!=!t.parent)&&(!e.parent||Eh(e.parent,t.parent))}let _h=(()=>{class e{constructor(){this.activated=null,this._activatedRoute=null,this.name=_e,this.activateEvents=new en,this.deactivateEvents=new en,this.attachEvents=new en,this.detachEvents=new en,this.parentContexts=X(ua),this.location=X(Wn),this.changeDetector=X(Cp),this.environmentInjector=X(Nn),this.inputBinder=X(Cl,{optional:!0}),this.supportsBindingToComponentInputs=!0}get activatedComponentRef(){return this.activated}ngOnChanges(n){if(n.name){const{firstChange:r,previousValue:o}=n.name;if(r)return;this.isTrackedInParentContexts(o)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(o)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name),this.inputBinder?.unsubscribeFromRouteData(this)}isTrackedInParentContexts(n){return this.parentContexts.getContext(n)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;const n=this.parentContexts.getContext(this.name);n?.route&&(n.attachRef?this.attach(n.attachRef,n.route):this.activateWith(n.route,n.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new B(4012,!1);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new B(4012,!1);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new B(4012,!1);this.location.detach();const n=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(n.instance),n}attach(n,r){this.activated=n,this._activatedRoute=r,this.location.insert(n.hostView),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.attachEvents.emit(n.instance)}deactivate(){if(this.activated){const n=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(n)}}activateWith(n,r){if(this.isActivated)throw new B(4013,!1);this._activatedRoute=n;const o=this.location,a=n.snapshot.component,u=this.parentContexts.getOrCreateContext(this.name).children,d=new hk(n,u,o.injector);this.activated=o.createComponent(a,{index:o.length,injector:d,environmentInjector:r??this.environmentInjector}),this.changeDetector.markForCheck(),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.activateEvents.emit(this.activated.instance)}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275dir=Kt({type:e,selectors:[["router-outlet"]],inputs:{name:"name"},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],standalone:!0,features:[lo]})}return e})();class hk{constructor(t,n,r){this.route=t,this.childContexts=n,this.parent=r}get(t,n){return t===Pi?this.route:t===ua?this.childContexts:this.parent.get(t,n)}}const Cl=new te("");let e1=(()=>{class e{constructor(){this.outletDataSubscriptions=new Map}bindActivatedRouteToOutletComponent(n){this.unsubscribeFromRouteData(n),this.subscribeToRouteData(n)}unsubscribeFromRouteData(n){this.outletDataSubscriptions.get(n)?.unsubscribe(),this.outletDataSubscriptions.delete(n)}subscribeToRouteData(n){const{activatedRoute:r}=n,o=ih([r.queryParams,r.params,r.data]).pipe(Sn(([i,a,u],d)=>(u={...i,...a,...u},0===d?ae(u):Promise.resolve(u)))).subscribe(i=>{if(!n.isActivated||!n.activatedComponentRef||n.activatedRoute!==r||null===r.component)return void this.unsubscribeFromRouteData(n);const a=function OM(e){const t=ke(e);if(!t)return null;const n=new ks(t);return{get selector(){return n.selector},get type(){return n.componentType},get inputs(){return n.inputs},get outputs(){return n.outputs},get ngContentSelectors(){return n.ngContentSelectors},get isStandalone(){return t.standalone},get isSignal(){return t.signals}}}(r.component);if(a)for(const{templateName:u}of a.inputs)n.activatedComponentRef.setInput(u,i[u]);else this.unsubscribeFromRouteData(n)});this.outletDataSubscriptions.set(n,o)}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})();function da(e,t,n){if(n&&e.shouldReuseRoute(t.value,n.value.snapshot)){const r=n.value;r._futureSnapshot=t.value;const o=function gk(e,t,n){return t.children.map(r=>{for(const o of n.children)if(e.shouldReuseRoute(r.value,o.value.snapshot))return da(e,r,o);return da(e,r)})}(e,t,n);return new Rr(r,o)}{if(e.shouldAttach(t.value)){const i=e.retrieve(t.value);if(null!==i){const a=i.route;return a.value._futureSnapshot=t.value,a.children=t.children.map(u=>da(e,u)),a}}const r=function mk(e){return new Pi(new wt(e.url),new wt(e.params),new wt(e.queryParams),new wt(e.fragment),new wt(e.data),e.outlet,e.component,e)}(t.value),o=t.children.map(i=>da(e,i));return new Rr(r,o)}}const Dh="ngNavigationCancelingError";function t1(e,t){const{redirectTo:n,navigationBehaviorOptions:r}=Co(t)?{redirectTo:t,navigationBehaviorOptions:void 0}:t,o=n1(!1,0,t);return o.url=n,o.navigationBehaviorOptions=r,o}function n1(e,t,n){const r=new Error("NavigationCancelingError: "+(e||""));return r[Dh]=!0,r.cancellationCode=t,n&&(r.url=n),r}function r1(e){return e&&e[Dh]}let o1=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["ng-component"]],standalone:!0,features:[cb],decls:1,vars:0,template:function(r,o){1&r&&y(0,"router-outlet")},dependencies:[_h],encapsulation:2})}return e})();function Ch(e){const t=e.children&&e.children.map(Ch),n=t?{...e,children:t}:{...e};return!n.component&&!n.loadComponent&&(t||n.loadChildren)&&n.outlet&&n.outlet!==_e&&(n.component=o1),n}function Yn(e){return e.outlet||_e}function pa(e){if(!e)return null;if(e.routeConfig?._injector)return e.routeConfig._injector;for(let t=e.parent;t;t=t.parent){const n=t.routeConfig;if(n?._loadedInjector)return n._loadedInjector;if(n?._injector)return n._injector}return null}class Ck{constructor(t,n,r,o,i){this.routeReuseStrategy=t,this.futureState=n,this.currState=r,this.forwardEvent=o,this.inputBindingEnabled=i}activate(t){const n=this.futureState._root,r=this.currState?this.currState._root:null;this.deactivateChildRoutes(n,r,t),wh(this.futureState.root),this.activateChildRoutes(n,r,t)}deactivateChildRoutes(t,n,r){const o=$i(n);t.children.forEach(i=>{const a=i.value.outlet;this.deactivateRoutes(i,o[a],r),delete o[a]}),Object.values(o).forEach(i=>{this.deactivateRouteAndItsChildren(i,r)})}deactivateRoutes(t,n,r){const o=t.value,i=n?n.value:null;if(o===i)if(o.component){const a=r.getContext(o.outlet);a&&this.deactivateChildRoutes(t,n,a.children)}else this.deactivateChildRoutes(t,n,r);else i&&this.deactivateRouteAndItsChildren(n,r)}deactivateRouteAndItsChildren(t,n){t.value.component&&this.routeReuseStrategy.shouldDetach(t.value.snapshot)?this.detachAndStoreRouteSubtree(t,n):this.deactivateRouteAndOutlet(t,n)}detachAndStoreRouteSubtree(t,n){const r=n.getContext(t.value.outlet),o=r&&t.value.component?r.children:n,i=$i(t);for(const a of Object.keys(i))this.deactivateRouteAndItsChildren(i[a],o);if(r&&r.outlet){const a=r.outlet.detach(),u=r.children.onOutletDeactivated();this.routeReuseStrategy.store(t.value.snapshot,{componentRef:a,route:t,contexts:u})}}deactivateRouteAndOutlet(t,n){const r=n.getContext(t.value.outlet),o=r&&t.value.component?r.children:n,i=$i(t);for(const a of Object.keys(i))this.deactivateRouteAndItsChildren(i[a],o);r&&(r.outlet&&(r.outlet.deactivate(),r.children.onOutletDeactivated()),r.attachRef=null,r.route=null)}activateChildRoutes(t,n,r){const o=$i(n);t.children.forEach(i=>{this.activateRoutes(i,o[i.value.outlet],r),this.forwardEvent(new lk(i.value.snapshot))}),t.children.length&&this.forwardEvent(new ak(t.value.snapshot))}activateRoutes(t,n,r){const o=t.value,i=n?n.value:null;if(wh(o),o===i)if(o.component){const a=r.getOrCreateContext(o.outlet);this.activateChildRoutes(t,n,a.children)}else this.activateChildRoutes(t,n,r);else if(o.component){const a=r.getOrCreateContext(o.outlet);if(this.routeReuseStrategy.shouldAttach(o.snapshot)){const u=this.routeReuseStrategy.retrieve(o.snapshot);this.routeReuseStrategy.store(o.snapshot,null),a.children.onOutletReAttached(u.contexts),a.attachRef=u.componentRef,a.route=u.route.value,a.outlet&&a.outlet.attach(u.componentRef,u.route.value),wh(u.route.value),this.activateChildRoutes(t,null,a.children)}else{const u=pa(o.snapshot);a.attachRef=null,a.route=o,a.injector=u,a.outlet&&a.outlet.activateWith(o,a.injector),this.activateChildRoutes(t,null,a.children)}}else this.activateChildRoutes(t,null,r)}}class i1{constructor(t){this.path=t,this.route=this.path[this.path.length-1]}}class Sl{constructor(t,n){this.component=t,this.route=n}}function Sk(e,t,n){const r=e._root;return ha(r,t?t._root:null,n,[r.value])}function Li(e,t){const n=Symbol(),r=t.get(e,n);return r===n?"function"!=typeof e||function R1(e){return null!==Sa(e)}(e)?t.get(e):e:r}function ha(e,t,n,r,o={canDeactivateChecks:[],canActivateChecks:[]}){const i=$i(t);return e.children.forEach(a=>{(function Tk(e,t,n,r,o={canDeactivateChecks:[],canActivateChecks:[]}){const i=e.value,a=t?t.value:null,u=n?n.getContext(e.value.outlet):null;if(a&&i.routeConfig===a.routeConfig){const d=function Ak(e,t,n){if("function"==typeof n)return n(e,t);switch(n){case"pathParamsChange":return!Do(e.url,t.url);case"pathParamsOrQueryParamsChange":return!Do(e.url,t.url)||!fr(e.queryParams,t.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!Eh(e,t)||!fr(e.queryParams,t.queryParams);default:return!Eh(e,t)}}(a,i,i.routeConfig.runGuardsAndResolvers);d?o.canActivateChecks.push(new i1(r)):(i.data=a.data,i._resolvedData=a._resolvedData),ha(e,t,i.component?u?u.children:null:n,r,o),d&&u&&u.outlet&&u.outlet.isActivated&&o.canDeactivateChecks.push(new Sl(u.outlet.component,a))}else a&&fa(t,u,o),o.canActivateChecks.push(new i1(r)),ha(e,null,i.component?u?u.children:null:n,r,o)})(a,i[a.value.outlet],n,r.concat([a.value]),o),delete i[a.value.outlet]}),Object.entries(i).forEach(([a,u])=>fa(u,n.getContext(a),o)),o}function fa(e,t,n){const r=$i(e),o=e.value;Object.entries(r).forEach(([i,a])=>{fa(a,o.component?t?t.children.getContext(i):null:t,n)}),n.canDeactivateChecks.push(new Sl(o.component&&t&&t.outlet&&t.outlet.isActivated?t.outlet.component:null,o))}function ga(e){return"function"==typeof e}function s1(e){return e instanceof hl||"EmptyError"===e?.name}const Il=Symbol("INITIAL_VALUE");function Fi(){return Sn(e=>ih(e.map(t=>t.pipe(xi(1),function bO(...e){const t=ro(e);return Ae((n,r)=>{(t?sh(e,n,t):sh(e,n)).subscribe(r)})}(Il)))).pipe(Ce(t=>{for(const n of t)if(!0!==n){if(n===Il)return Il;if(!1===n||n instanceof Oi)return n}return!0}),Qr(t=>t!==Il),xi(1)))}function a1(e){return function Zn(...e){return Lt(e)}(Ht(t=>{if(Co(t))throw t1(0,t)}),Ce(t=>!0===t))}class Tl{constructor(t){this.segmentGroup=t||null}}class c1{constructor(t){this.urlTree=t}}function Bi(e){return ea(new Tl(e))}function l1(e){return ea(new c1(e))}class Kk{constructor(t,n){this.urlSerializer=t,this.urlTree=n}noMatchError(t){return new B(4002,!1)}lineralizeSegments(t,n){let r=[],o=n.root;for(;;){if(r=r.concat(o.segments),0===o.numberOfChildren)return ae(r);if(o.numberOfChildren>1||!o.children[_e])return ea(new B(4e3,!1));o=o.children[_e]}}applyRedirectCommands(t,n,r){return this.applyRedirectCreateUrlTree(n,this.urlSerializer.parse(n),t,r)}applyRedirectCreateUrlTree(t,n,r,o){const i=this.createSegmentGroup(t,n.root,r,o);return new Oi(i,this.createQueryParams(n.queryParams,this.urlTree.queryParams),n.fragment)}createQueryParams(t,n){const r={};return Object.entries(t).forEach(([o,i])=>{if("string"==typeof i&&i.startsWith(":")){const u=i.substring(1);r[o]=n[u]}else r[o]=i}),r}createSegmentGroup(t,n,r,o){const i=this.createSegments(t,n.segments,r,o);let a={};return Object.entries(n.children).forEach(([u,d])=>{a[u]=this.createSegmentGroup(t,d,r,o)}),new Ye(i,a)}createSegments(t,n,r,o){return n.map(i=>i.path.startsWith(":")?this.findPosParam(t,i,o):this.findOrReturn(i,r))}findPosParam(t,n,r){const o=r[n.path.substring(1)];if(!o)throw new B(4001,!1);return o}findOrReturn(t,n){let r=0;for(const o of n){if(o.path===t.path)return n.splice(r),o;r++}return t}}const Sh={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function Yk(e,t,n,r,o){const i=Ih(e,t,n);return i.matched?(r=function vk(e,t){return e.providers&&!e._injector&&(e._injector=ep(e.providers,t,`Route: ${e.path}`)),e._injector??t}(t,r),function qk(e,t,n,r){const o=t.canMatch;return o&&0!==o.length?ae(o.map(a=>{const u=Li(a,e);return Xr(function kk(e){return e&&ga(e.canMatch)}(u)?u.canMatch(t,n):e.runInContext(()=>u(t,n)))})).pipe(Fi(),a1()):ae(!0)}(r,t,n).pipe(Ce(a=>!0===a?i:{...Sh}))):ae(i)}function Ih(e,t,n){if(""===t.path)return"full"===t.pathMatch&&(e.hasChildren()||n.length>0)?{...Sh}:{matched:!0,consumedSegments:[],remainingSegments:n,parameters:{},positionalParamSegments:{}};const o=(t.matcher||TO)(n,e,t);if(!o)return{...Sh};const i={};Object.entries(o.posParams??{}).forEach(([u,d])=>{i[u]=d.path});const a=o.consumed.length>0?{...i,...o.consumed[o.consumed.length-1].parameters}:i;return{matched:!0,consumedSegments:o.consumed,remainingSegments:n.slice(o.consumed.length),parameters:a,positionalParamSegments:o.posParams??{}}}function u1(e,t,n,r){return n.length>0&&function Xk(e,t,n){return n.some(r=>Al(e,t,r)&&Yn(r)!==_e)}(e,n,r)?{segmentGroup:new Ye(t,Qk(r,new Ye(n,e.children))),slicedSegments:[]}:0===n.length&&function Jk(e,t,n){return n.some(r=>Al(e,t,r))}(e,n,r)?{segmentGroup:new Ye(e.segments,Zk(e,0,n,r,e.children)),slicedSegments:n}:{segmentGroup:new Ye(e.segments,e.children),slicedSegments:n}}function Zk(e,t,n,r,o){const i={};for(const a of r)if(Al(e,n,a)&&!o[Yn(a)]){const u=new Ye([],{});i[Yn(a)]=u}return{...o,...i}}function Qk(e,t){const n={};n[_e]=t;for(const r of e)if(""===r.path&&Yn(r)!==_e){const o=new Ye([],{});n[Yn(r)]=o}return n}function Al(e,t,n){return(!(e.hasChildren()||t.length>0)||"full"!==n.pathMatch)&&""===n.path}class r2{constructor(t,n,r,o,i,a,u){this.injector=t,this.configLoader=n,this.rootComponentType=r,this.config=o,this.urlTree=i,this.paramsInheritanceStrategy=a,this.urlSerializer=u,this.allowRedirects=!0,this.applyRedirects=new Kk(this.urlSerializer,this.urlTree)}noMatchError(t){return new B(4002,!1)}recognize(){const t=u1(this.urlTree.root,[],[],this.config).segmentGroup;return this.processSegmentGroup(this.injector,this.config,t,_e).pipe(_o(n=>{if(n instanceof c1)return this.allowRedirects=!1,this.urlTree=n.urlTree,this.match(n.urlTree);throw n instanceof Tl?this.noMatchError(n):n}),Ce(n=>{const r=new Dl([],Object.freeze({}),Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,{},_e,this.rootComponentType,null,{}),o=new Rr(r,n),i=new XE("",o),a=function GO(e,t,n=null,r=null){return UE(BE(e),t,n,r)}(r,[],this.urlTree.queryParams,this.urlTree.fragment);return a.queryParams=this.urlTree.queryParams,i.url=this.urlSerializer.serialize(a),this.inheritParamsAndData(i._root),{state:i,tree:a}}))}match(t){return this.processSegmentGroup(this.injector,this.config,t.root,_e).pipe(_o(r=>{throw r instanceof Tl?this.noMatchError(r):r}))}inheritParamsAndData(t){const n=t.value,r=QE(n,this.paramsInheritanceStrategy);n.params=Object.freeze(r.params),n.data=Object.freeze(r.data),t.children.forEach(o=>this.inheritParamsAndData(o))}processSegmentGroup(t,n,r,o){return 0===r.segments.length&&r.hasChildren()?this.processChildren(t,n,r):this.processSegment(t,n,r,r.segments,o,!0)}processChildren(t,n,r){const o=[];for(const i of Object.keys(r.children))"primary"===i?o.unshift(i):o.push(i);return ft(o).pipe(ta(i=>{const a=r.children[i],u=function _k(e,t){const n=e.filter(r=>Yn(r)===t);return n.push(...e.filter(r=>Yn(r)!==t)),n}(n,i);return this.processSegmentGroup(t,u,a,i)}),function _O(e,t){return Ae(function EO(e,t,n,r,o){return(i,a)=>{let u=n,d=t,p=0;i.subscribe(ye(a,h=>{const f=p++;d=u?e(d,h,f):(u=!0,h),r&&a.next(d)},o&&(()=>{u&&a.next(d),a.complete()})))}}(e,t,arguments.length>=2,!0))}((i,a)=>(i.push(...a),i)),fl(null),function DO(e,t){const n=arguments.length>=2;return r=>r.pipe(e?Qr((o,i)=>e(o,i,r)):We,ch(1),n?fl(t):IE(()=>new hl))}(),pt(i=>{if(null===i)return Bi(r);const a=d1(i);return function o2(e){e.sort((t,n)=>t.value.outlet===_e?-1:n.value.outlet===_e?1:t.value.outlet.localeCompare(n.value.outlet))}(a),ae(a)}))}processSegment(t,n,r,o,i,a){return ft(n).pipe(ta(u=>this.processSegmentAgainstRoute(u._injector??t,n,u,r,o,i,a).pipe(_o(d=>{if(d instanceof Tl)return ae(null);throw d}))),Eo(u=>!!u),_o(u=>{if(s1(u))return function t2(e,t,n){return 0===t.length&&!e.children[n]}(r,o,i)?ae([]):Bi(r);throw u}))}processSegmentAgainstRoute(t,n,r,o,i,a,u){return function e2(e,t,n,r){return!!(Yn(e)===r||r!==_e&&Al(t,n,e))&&("**"===e.path||Ih(t,e,n).matched)}(r,o,i,a)?void 0===r.redirectTo?this.matchSegmentAgainstRoute(t,o,r,i,a,u):u&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(t,o,n,r,i,a):Bi(o):Bi(o)}expandSegmentAgainstRouteUsingRedirect(t,n,r,o,i,a){return"**"===o.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(t,r,o,a):this.expandRegularSegmentAgainstRouteUsingRedirect(t,n,r,o,i,a)}expandWildCardWithParamsAgainstRouteUsingRedirect(t,n,r,o){const i=this.applyRedirects.applyRedirectCommands([],r.redirectTo,{});return r.redirectTo.startsWith("/")?l1(i):this.applyRedirects.lineralizeSegments(r,i).pipe(pt(a=>{const u=new Ye(a,{});return this.processSegment(t,n,u,a,o,!1)}))}expandRegularSegmentAgainstRouteUsingRedirect(t,n,r,o,i,a){const{matched:u,consumedSegments:d,remainingSegments:p,positionalParamSegments:h}=Ih(n,o,i);if(!u)return Bi(n);const f=this.applyRedirects.applyRedirectCommands(d,o.redirectTo,h);return o.redirectTo.startsWith("/")?l1(f):this.applyRedirects.lineralizeSegments(o,f).pipe(pt(m=>this.processSegment(t,r,n,m.concat(p),a,!1)))}matchSegmentAgainstRoute(t,n,r,o,i,a){let u;if("**"===r.path){const d=o.length>0?AE(o).parameters:{};u=ae({snapshot:new Dl(o,d,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,p1(r),Yn(r),r.component??r._loadedComponent??null,r,h1(r)),consumedSegments:[],remainingSegments:[]}),n.children={}}else u=Yk(n,r,o,t).pipe(Ce(({matched:d,consumedSegments:p,remainingSegments:h,parameters:f})=>d?{snapshot:new Dl(p,f,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,p1(r),Yn(r),r.component??r._loadedComponent??null,r,h1(r)),consumedSegments:p,remainingSegments:h}:null));return u.pipe(Sn(d=>null===d?Bi(n):this.getChildConfig(t=r._injector??t,r,o).pipe(Sn(({routes:p})=>{const h=r._loadedInjector??t,{snapshot:f,consumedSegments:m,remainingSegments:b}=d,{segmentGroup:E,slicedSegments:_}=u1(n,m,b,p);if(0===_.length&&E.hasChildren())return this.processChildren(h,p,E).pipe(Ce(P=>null===P?null:[new Rr(f,P)]));if(0===p.length&&0===_.length)return ae([new Rr(f,[])]);const O=Yn(r)===i;return this.processSegment(h,p,E,_,O?_e:i,!0).pipe(Ce(P=>[new Rr(f,P)]))}))))}getChildConfig(t,n,r){return n.children?ae({routes:n.children,injector:t}):n.loadChildren?void 0!==n._loadedRoutes?ae({routes:n._loadedRoutes,injector:n._loadedInjector}):function zk(e,t,n,r){const o=t.canLoad;return void 0===o||0===o.length?ae(!0):ae(o.map(a=>{const u=Li(a,e);return Xr(function Mk(e){return e&&ga(e.canLoad)}(u)?u.canLoad(t,n):e.runInContext(()=>u(t,n)))})).pipe(Fi(),a1())}(t,n,r).pipe(pt(o=>o?this.configLoader.loadChildren(t,n).pipe(Ht(i=>{n._loadedRoutes=i.routes,n._loadedInjector=i.injector})):function Gk(e){return ea(n1(!1,3))}())):ae({routes:[],injector:t})}}function i2(e){const t=e.value.routeConfig;return t&&""===t.path}function d1(e){const t=[],n=new Set;for(const r of e){if(!i2(r)){t.push(r);continue}const o=t.find(i=>r.value.routeConfig===i.value.routeConfig);void 0!==o?(o.children.push(...r.children),n.add(o)):t.push(r)}for(const r of n){const o=d1(r.children);t.push(new Rr(r.value,o))}return t.filter(r=>!n.has(r))}function p1(e){return e.data||{}}function h1(e){return e.resolve||{}}function f1(e){return"string"==typeof e.title||null===e.title}function Th(e){return Sn(t=>{const n=e(t);return n?ft(n).pipe(Ce(()=>t)):ae(t)})}const Ui=new te("ROUTES");let Ah=(()=>{class e{constructor(){this.componentLoaders=new WeakMap,this.childrenLoaders=new WeakMap,this.compiler=X(tw)}loadComponent(n){if(this.componentLoaders.get(n))return this.componentLoaders.get(n);if(n._loadedComponent)return ae(n._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(n);const r=Xr(n.loadComponent()).pipe(Ce(g1),Ht(i=>{this.onLoadEndListener&&this.onLoadEndListener(n),n._loadedComponent=i}),lh(()=>{this.componentLoaders.delete(n)})),o=new SE(r,()=>new It).pipe(ah());return this.componentLoaders.set(n,o),o}loadChildren(n,r){if(this.childrenLoaders.get(r))return this.childrenLoaders.get(r);if(r._loadedRoutes)return ae({routes:r._loadedRoutes,injector:r._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(r);const i=function p2(e,t,n,r){return Xr(e.loadChildren()).pipe(Ce(g1),pt(o=>o instanceof sb||Array.isArray(o)?ae(o):ft(t.compileModuleAsync(o))),Ce(o=>{r&&r(e);let i,a,u=!1;return Array.isArray(o)?(a=o,!0):(i=o.create(n).injector,a=i.get(Ui,[],{optional:!0,self:!0}).flat()),{routes:a.map(Ch),injector:i}}))}(r,this.compiler,n,this.onLoadEndListener).pipe(lh(()=>{this.childrenLoaders.delete(r)})),a=new SE(i,()=>new It).pipe(ah());return this.childrenLoaders.set(r,a),a}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function g1(e){return function h2(e){return e&&"object"==typeof e&&"default"in e}(e)?e.default:e}let Nl=(()=>{class e{get hasRequestedNavigation(){return 0!==this.navigationId}constructor(){this.currentNavigation=null,this.currentTransition=null,this.lastSuccessfulNavigation=null,this.events=new It,this.transitionAbortSubject=new It,this.configLoader=X(Ah),this.environmentInjector=X(Nn),this.urlSerializer=X(oa),this.rootContexts=X(ua),this.inputBindingEnabled=null!==X(Cl,{optional:!0}),this.navigationId=0,this.afterPreactivation=()=>ae(void 0),this.rootComponentType=null,this.configLoader.onLoadEndListener=o=>this.events.next(new ik(o)),this.configLoader.onLoadStartListener=o=>this.events.next(new ok(o))}complete(){this.transitions?.complete()}handleNavigationRequest(n){const r=++this.navigationId;this.transitions?.next({...this.transitions.value,...n,id:r})}setupNavigations(n,r,o){return this.transitions=new wt({id:0,currentUrlTree:r,currentRawUrl:r,currentBrowserUrl:r,extractedUrl:n.urlHandlingStrategy.extract(r),urlAfterRedirects:n.urlHandlingStrategy.extract(r),rawUrl:r,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:ca,restoredState:null,currentSnapshot:o.snapshot,targetSnapshot:null,currentRouterState:o,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.transitions.pipe(Qr(i=>0!==i.id),Ce(i=>({...i,extractedUrl:n.urlHandlingStrategy.extract(i.rawUrl)})),Sn(i=>{this.currentTransition=i;let a=!1,u=!1;return ae(i).pipe(Ht(d=>{this.currentNavigation={id:d.id,initialUrl:d.rawUrl,extractedUrl:d.extractedUrl,trigger:d.source,extras:d.extras,previousNavigation:this.lastSuccessfulNavigation?{...this.lastSuccessfulNavigation,previousNavigation:null}:null}}),Sn(d=>{const p=d.currentBrowserUrl.toString(),h=!n.navigated||d.extractedUrl.toString()!==p||p!==d.currentUrlTree.toString();if(!h&&"reload"!==(d.extras.onSameUrlNavigation??n.onSameUrlNavigation)){const m="";return this.events.next(new ki(d.id,this.urlSerializer.serialize(d.rawUrl),m,0)),d.resolve(null),Cn}if(n.urlHandlingStrategy.shouldProcessUrl(d.rawUrl))return ae(d).pipe(Sn(m=>{const b=this.transitions?.getValue();return this.events.next(new El(m.id,this.urlSerializer.serialize(m.extractedUrl),m.source,m.restoredState)),b!==this.transitions?.getValue()?Cn:Promise.resolve(m)}),function s2(e,t,n,r,o,i){return pt(a=>function n2(e,t,n,r,o,i,a="emptyOnly"){return new r2(e,t,n,r,o,a,i).recognize()}(e,t,n,r,a.extractedUrl,o,i).pipe(Ce(({state:u,tree:d})=>({...a,targetSnapshot:u,urlAfterRedirects:d}))))}(this.environmentInjector,this.configLoader,this.rootComponentType,n.config,this.urlSerializer,n.paramsInheritanceStrategy),Ht(m=>{i.targetSnapshot=m.targetSnapshot,i.urlAfterRedirects=m.urlAfterRedirects,this.currentNavigation={...this.currentNavigation,finalUrl:m.urlAfterRedirects};const b=new WE(m.id,this.urlSerializer.serialize(m.extractedUrl),this.urlSerializer.serialize(m.urlAfterRedirects),m.targetSnapshot);this.events.next(b)}));if(h&&n.urlHandlingStrategy.shouldProcessUrl(d.currentRawUrl)){const{id:m,extractedUrl:b,source:E,restoredState:_,extras:O}=d,P=new El(m,this.urlSerializer.serialize(b),E,_);this.events.next(P);const D=ZE(0,this.rootComponentType).snapshot;return this.currentTransition=i={...d,targetSnapshot:D,urlAfterRedirects:b,extras:{...O,skipLocationChange:!1,replaceUrl:!1}},ae(i)}{const m="";return this.events.next(new ki(d.id,this.urlSerializer.serialize(d.extractedUrl),m,1)),d.resolve(null),Cn}}),Ht(d=>{const p=new ek(d.id,this.urlSerializer.serialize(d.extractedUrl),this.urlSerializer.serialize(d.urlAfterRedirects),d.targetSnapshot);this.events.next(p)}),Ce(d=>(this.currentTransition=i={...d,guards:Sk(d.targetSnapshot,d.currentSnapshot,this.rootContexts)},i)),function Pk(e,t){return pt(n=>{const{targetSnapshot:r,currentSnapshot:o,guards:{canActivateChecks:i,canDeactivateChecks:a}}=n;return 0===a.length&&0===i.length?ae({...n,guardsResult:!0}):function Lk(e,t,n,r){return ft(e).pipe(pt(o=>function Vk(e,t,n,r,o){const i=t&&t.routeConfig?t.routeConfig.canDeactivate:null;return i&&0!==i.length?ae(i.map(u=>{const d=pa(t)??o,p=Li(u,d);return Xr(function Ok(e){return e&&ga(e.canDeactivate)}(p)?p.canDeactivate(e,t,n,r):d.runInContext(()=>p(e,t,n,r))).pipe(Eo())})).pipe(Fi()):ae(!0)}(o.component,o.route,n,t,r)),Eo(o=>!0!==o,!0))}(a,r,o,e).pipe(pt(u=>u&&function Nk(e){return"boolean"==typeof e}(u)?function Fk(e,t,n,r){return ft(t).pipe(ta(o=>sh(function Uk(e,t){return null!==e&&t&&t(new sk(e)),ae(!0)}(o.route.parent,r),function Bk(e,t){return null!==e&&t&&t(new ck(e)),ae(!0)}(o.route,r),function jk(e,t,n){const r=t[t.length-1],i=t.slice(0,t.length-1).reverse().map(a=>function Ik(e){const t=e.routeConfig?e.routeConfig.canActivateChild:null;return t&&0!==t.length?{node:e,guards:t}:null}(a)).filter(a=>null!==a).map(a=>CE(()=>ae(a.guards.map(d=>{const p=pa(a.node)??n,h=Li(d,p);return Xr(function Rk(e){return e&&ga(e.canActivateChild)}(h)?h.canActivateChild(r,e):p.runInContext(()=>h(r,e))).pipe(Eo())})).pipe(Fi())));return ae(i).pipe(Fi())}(e,o.path,n),function Hk(e,t,n){const r=t.routeConfig?t.routeConfig.canActivate:null;if(!r||0===r.length)return ae(!0);const o=r.map(i=>CE(()=>{const a=pa(t)??n,u=Li(i,a);return Xr(function xk(e){return e&&ga(e.canActivate)}(u)?u.canActivate(t,e):a.runInContext(()=>u(t,e))).pipe(Eo())}));return ae(o).pipe(Fi())}(e,o.route,n))),Eo(o=>!0!==o,!0))}(r,i,e,t):ae(u)),Ce(u=>({...n,guardsResult:u})))})}(this.environmentInjector,d=>this.events.next(d)),Ht(d=>{if(i.guardsResult=d.guardsResult,Co(d.guardsResult))throw t1(0,d.guardsResult);const p=new tk(d.id,this.urlSerializer.serialize(d.extractedUrl),this.urlSerializer.serialize(d.urlAfterRedirects),d.targetSnapshot,!!d.guardsResult);this.events.next(p)}),Qr(d=>!!d.guardsResult||(this.cancelNavigationTransition(d,"",3),!1)),Th(d=>{if(d.guards.canActivateChecks.length)return ae(d).pipe(Ht(p=>{const h=new nk(p.id,this.urlSerializer.serialize(p.extractedUrl),this.urlSerializer.serialize(p.urlAfterRedirects),p.targetSnapshot);this.events.next(h)}),Sn(p=>{let h=!1;return ae(p).pipe(function a2(e,t){return pt(n=>{const{targetSnapshot:r,guards:{canActivateChecks:o}}=n;if(!o.length)return ae(n);let i=0;return ft(o).pipe(ta(a=>function c2(e,t,n,r){const o=e.routeConfig,i=e._resolve;return void 0!==o?.title&&!f1(o)&&(i[na]=o.title),function l2(e,t,n,r){const o=function u2(e){return[...Object.keys(e),...Object.getOwnPropertySymbols(e)]}(e);if(0===o.length)return ae({});const i={};return ft(o).pipe(pt(a=>function d2(e,t,n,r){const o=pa(t)??r,i=Li(e,o);return Xr(i.resolve?i.resolve(t,n):o.runInContext(()=>i(t,n)))}(e[a],t,n,r).pipe(Eo(),Ht(u=>{i[a]=u}))),ch(1),function CO(e){return Ce(()=>e)}(i),_o(a=>s1(a)?Cn:ea(a)))}(i,e,t,r).pipe(Ce(a=>(e._resolvedData=a,e.data=QE(e,n).resolve,o&&f1(o)&&(e.data[na]=o.title),null)))}(a.route,r,e,t)),Ht(()=>i++),ch(1),pt(a=>i===o.length?ae(n):Cn))})}(n.paramsInheritanceStrategy,this.environmentInjector),Ht({next:()=>h=!0,complete:()=>{h||this.cancelNavigationTransition(p,"",2)}}))}),Ht(p=>{const h=new rk(p.id,this.urlSerializer.serialize(p.extractedUrl),this.urlSerializer.serialize(p.urlAfterRedirects),p.targetSnapshot);this.events.next(h)}))}),Th(d=>{const p=h=>{const f=[];h.routeConfig?.loadComponent&&!h.routeConfig._loadedComponent&&f.push(this.configLoader.loadComponent(h.routeConfig).pipe(Ht(m=>{h.component=m}),Ce(()=>{})));for(const m of h.children)f.push(...p(m));return f};return ih(p(d.targetSnapshot.root)).pipe(fl(),xi(1))}),Th(()=>this.afterPreactivation()),Ce(d=>{const p=function fk(e,t,n){const r=da(e,t._root,n?n._root:void 0);return new YE(r,t)}(n.routeReuseStrategy,d.targetSnapshot,d.currentRouterState);return this.currentTransition=i={...d,targetRouterState:p},i}),Ht(()=>{this.events.next(new gh)}),((e,t,n,r)=>Ce(o=>(new Ck(t,o.targetRouterState,o.currentRouterState,n,r).activate(e),o)))(this.rootContexts,n.routeReuseStrategy,d=>this.events.next(d),this.inputBindingEnabled),xi(1),Ht({next:d=>{a=!0,this.lastSuccessfulNavigation=this.currentNavigation,this.events.next(new Jr(d.id,this.urlSerializer.serialize(d.extractedUrl),this.urlSerializer.serialize(d.urlAfterRedirects))),n.titleStrategy?.updateTitle(d.targetRouterState.snapshot),d.resolve(!0)},complete:()=>{a=!0}}),function SO(e){return Ae((t,n)=>{Ue(e).subscribe(ye(n,()=>n.complete(),H)),!n.closed&&t.subscribe(n)})}(this.transitionAbortSubject.pipe(Ht(d=>{throw d}))),lh(()=>{a||u||this.cancelNavigationTransition(i,"",1),this.currentNavigation?.id===i.id&&(this.currentNavigation=null)}),_o(d=>{if(u=!0,r1(d))this.events.next(new la(i.id,this.urlSerializer.serialize(i.extractedUrl),d.message,d.cancellationCode)),function yk(e){return r1(e)&&Co(e.url)}(d)?this.events.next(new mh(d.url)):i.resolve(!1);else{this.events.next(new _l(i.id,this.urlSerializer.serialize(i.extractedUrl),d,i.targetSnapshot??void 0));try{i.resolve(n.errorHandler(d))}catch(p){i.reject(p)}}return Cn}))}))}cancelNavigationTransition(n,r,o){const i=new la(n.id,this.urlSerializer.serialize(n.extractedUrl),r,o);this.events.next(i),n.resolve(!1)}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function m1(e){return e!==ca}let y1=(()=>{class e{buildTitle(n){let r,o=n.root;for(;void 0!==o;)r=this.getResolvedTitleForRoute(o)??r,o=o.children.find(i=>i.outlet===_e);return r}getResolvedTitleForRoute(n){return n.data[na]}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:function(){return X(f2)},providedIn:"root"})}return e})(),f2=(()=>{class e extends y1{constructor(n){super(),this.title=n}updateTitle(n){const r=this.buildTitle(n);void 0!==r&&this.title.setTitle(r)}static#e=this.\u0275fac=function(r){return new(r||e)(ie(bE))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),g2=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:function(){return X(y2)},providedIn:"root"})}return e})();class m2{shouldDetach(t){return!1}store(t,n){}shouldAttach(t){return!1}retrieve(t){return null}shouldReuseRoute(t,n){return t.routeConfig===n.routeConfig}}let y2=(()=>{class e extends m2{static#e=this.\u0275fac=function(){let n;return function(o){return(n||(n=function rg(e){return vr(()=>{const t=e.prototype.constructor,n=t[br]||Eu(t),r=Object.prototype;let o=Object.getPrototypeOf(e.prototype).constructor;for(;o&&o!==r;){const i=o[br]||Eu(o);if(i&&i!==n)return i;o=Object.getPrototypeOf(o)}return i=>new i})}(e)))(o||e)}}();static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();const Ml=new te("",{providedIn:"root",factory:()=>({})});let v2=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:function(){return X(b2)},providedIn:"root"})}return e})(),b2=(()=>{class e{shouldProcessUrl(n){return!0}extract(n){return n}merge(n,r){return n}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var ma=function(e){return e[e.COMPLETE=0]="COMPLETE",e[e.FAILED=1]="FAILED",e[e.REDIRECTING=2]="REDIRECTING",e}(ma||{});function v1(e,t){e.events.pipe(Qr(n=>n instanceof Jr||n instanceof la||n instanceof _l||n instanceof ki),Ce(n=>n instanceof Jr||n instanceof ki?ma.COMPLETE:n instanceof la&&(0===n.code||1===n.code)?ma.REDIRECTING:ma.FAILED),Qr(n=>n!==ma.REDIRECTING),xi(1)).subscribe(()=>{t()})}function w2(e){throw e}function E2(e,t,n){return t.parse("/")}const _2={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},D2={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"};let $n=(()=>{class e{get navigationId(){return this.navigationTransitions.navigationId}get browserPageId(){return"computed"!==this.canceledNavigationResolution?this.currentPageId:this.location.getState()?.\u0275routerPageId??this.currentPageId}get events(){return this._events}constructor(){this.disposed=!1,this.currentPageId=0,this.console=X(Jb),this.isNgZoneEnabled=!1,this._events=new It,this.options=X(Ml,{optional:!0})||{},this.pendingTasks=X(ew),this.errorHandler=this.options.errorHandler||w2,this.malformedUriErrorHandler=this.options.malformedUriErrorHandler||E2,this.navigated=!1,this.lastSuccessfulId=-1,this.urlHandlingStrategy=X(v2),this.routeReuseStrategy=X(g2),this.titleStrategy=X(y1),this.onSameUrlNavigation=this.options.onSameUrlNavigation||"ignore",this.paramsInheritanceStrategy=this.options.paramsInheritanceStrategy||"emptyOnly",this.urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred",this.canceledNavigationResolution=this.options.canceledNavigationResolution||"replace",this.config=X(Ui,{optional:!0})?.flat()??[],this.navigationTransitions=X(Nl),this.urlSerializer=X(oa),this.location=X(kp),this.componentInputBindingEnabled=!!X(Cl,{optional:!0}),this.eventsSubscription=new N,this.isNgZoneEnabled=X(rt)instanceof rt&&rt.isInAngularZone(),this.resetConfig(this.config),this.currentUrlTree=new Oi,this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.routerState=ZE(0,null),this.navigationTransitions.setupNavigations(this,this.currentUrlTree,this.routerState).subscribe(n=>{this.lastSuccessfulId=n.id,this.currentPageId=this.browserPageId},n=>{this.console.warn(`Unhandled Navigation Error: ${n}`)}),this.subscribeToNavigationEvents()}subscribeToNavigationEvents(){const n=this.navigationTransitions.events.subscribe(r=>{try{const{currentTransition:o}=this.navigationTransitions;if(null===o)return void(b1(r)&&this._events.next(r));if(r instanceof El)m1(o.source)&&(this.browserUrlTree=o.extractedUrl);else if(r instanceof ki)this.rawUrlTree=o.rawUrl;else if(r instanceof WE){if("eager"===this.urlUpdateStrategy){if(!o.extras.skipLocationChange){const i=this.urlHandlingStrategy.merge(o.urlAfterRedirects,o.rawUrl);this.setBrowserUrl(i,o)}this.browserUrlTree=o.urlAfterRedirects}}else if(r instanceof gh)this.currentUrlTree=o.urlAfterRedirects,this.rawUrlTree=this.urlHandlingStrategy.merge(o.urlAfterRedirects,o.rawUrl),this.routerState=o.targetRouterState,"deferred"===this.urlUpdateStrategy&&(o.extras.skipLocationChange||this.setBrowserUrl(this.rawUrlTree,o),this.browserUrlTree=o.urlAfterRedirects);else if(r instanceof la)0!==r.code&&1!==r.code&&(this.navigated=!0),(3===r.code||2===r.code)&&this.restoreHistory(o);else if(r instanceof mh){const i=this.urlHandlingStrategy.merge(r.url,o.currentRawUrl),a={skipLocationChange:o.extras.skipLocationChange,replaceUrl:"eager"===this.urlUpdateStrategy||m1(o.source)};this.scheduleNavigation(i,ca,null,a,{resolve:o.resolve,reject:o.reject,promise:o.promise})}r instanceof _l&&this.restoreHistory(o,!0),r instanceof Jr&&(this.navigated=!0),b1(r)&&this._events.next(r)}catch(o){this.navigationTransitions.transitionAbortSubject.next(o)}});this.eventsSubscription.add(n)}resetRootComponentType(n){this.routerState.root.component=n,this.navigationTransitions.rootComponentType=n}initialNavigation(){if(this.setUpLocationChangeListener(),!this.navigationTransitions.hasRequestedNavigation){const n=this.location.getState();this.navigateToSyncWithBrowser(this.location.path(!0),ca,n)}}setUpLocationChangeListener(){this.locationSubscription||(this.locationSubscription=this.location.subscribe(n=>{const r="popstate"===n.type?"popstate":"hashchange";"popstate"===r&&setTimeout(()=>{this.navigateToSyncWithBrowser(n.url,r,n.state)},0)}))}navigateToSyncWithBrowser(n,r,o){const i={replaceUrl:!0},a=o?.navigationId?o:null;if(o){const d={...o};delete d.navigationId,delete d.\u0275routerPageId,0!==Object.keys(d).length&&(i.state=d)}const u=this.parseUrl(n);this.scheduleNavigation(u,r,a,i)}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.navigationTransitions.currentNavigation}get lastSuccessfulNavigation(){return this.navigationTransitions.lastSuccessfulNavigation}resetConfig(n){this.config=n.map(Ch),this.navigated=!1,this.lastSuccessfulId=-1}ngOnDestroy(){this.dispose()}dispose(){this.navigationTransitions.complete(),this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=void 0),this.disposed=!0,this.eventsSubscription.unsubscribe()}createUrlTree(n,r={}){const{relativeTo:o,queryParams:i,fragment:a,queryParamsHandling:u,preserveFragment:d}=r,p=d?this.currentUrlTree.fragment:a;let f,h=null;switch(u){case"merge":h={...this.currentUrlTree.queryParams,...i};break;case"preserve":h=this.currentUrlTree.queryParams;break;default:h=i||null}null!==h&&(h=this.removeEmptyProps(h));try{f=BE(o?o.snapshot:this.routerState.snapshot.root)}catch{("string"!=typeof n[0]||!n[0].startsWith("/"))&&(n=[]),f=this.currentUrlTree.root}return UE(f,n,h,p??null)}navigateByUrl(n,r={skipLocationChange:!1}){const o=Co(n)?n:this.parseUrl(n),i=this.urlHandlingStrategy.merge(o,this.rawUrlTree);return this.scheduleNavigation(i,ca,null,r)}navigate(n,r={skipLocationChange:!1}){return function C2(e){for(let t=0;t{const i=n[o];return null!=i&&(r[o]=i),r},{})}scheduleNavigation(n,r,o,i,a){if(this.disposed)return Promise.resolve(!1);let u,d,p;a?(u=a.resolve,d=a.reject,p=a.promise):p=new Promise((f,m)=>{u=f,d=m});const h=this.pendingTasks.add();return v1(this,()=>{queueMicrotask(()=>this.pendingTasks.remove(h))}),this.navigationTransitions.handleNavigationRequest({source:r,restoredState:o,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,currentBrowserUrl:this.browserUrlTree,rawUrl:n,extras:i,resolve:u,reject:d,promise:p,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),p.catch(f=>Promise.reject(f))}setBrowserUrl(n,r){const o=this.urlSerializer.serialize(n);if(this.location.isCurrentPathEqualTo(o)||r.extras.replaceUrl){const a={...r.extras.state,...this.generateNgRouterState(r.id,this.browserPageId)};this.location.replaceState(o,"",a)}else{const i={...r.extras.state,...this.generateNgRouterState(r.id,this.browserPageId+1)};this.location.go(o,"",i)}}restoreHistory(n,r=!1){if("computed"===this.canceledNavigationResolution){const i=this.currentPageId-this.browserPageId;0!==i?this.location.historyGo(i):this.currentUrlTree===this.getCurrentNavigation()?.finalUrl&&0===i&&(this.resetState(n),this.browserUrlTree=n.currentUrlTree,this.resetUrlToCurrentUrlTree())}else"replace"===this.canceledNavigationResolution&&(r&&this.resetState(n),this.resetUrlToCurrentUrlTree())}resetState(n){this.routerState=n.currentRouterState,this.currentUrlTree=n.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,n.rawUrl)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}generateNgRouterState(n,r){return"computed"===this.canceledNavigationResolution?{navigationId:n,\u0275routerPageId:r}:{navigationId:n}}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function b1(e){return!(e instanceof gh||e instanceof mh)}let Te=(()=>{class e{constructor(n,r,o,i,a,u){this.router=n,this.route=r,this.tabIndexAttribute=o,this.renderer=i,this.el=a,this.locationStrategy=u,this.href=null,this.commands=null,this.onChanges=new It,this.preserveFragment=!1,this.skipLocationChange=!1,this.replaceUrl=!1;const d=a.nativeElement.tagName?.toLowerCase();this.isAnchorElement="a"===d||"area"===d,this.isAnchorElement?this.subscription=n.events.subscribe(p=>{p instanceof Jr&&this.updateHref()}):this.setTabIndexIfNotOnNativeEl("0")}setTabIndexIfNotOnNativeEl(n){null!=this.tabIndexAttribute||this.isAnchorElement||this.applyAttributeValue("tabindex",n)}ngOnChanges(n){this.isAnchorElement&&this.updateHref(),this.onChanges.next(this)}set routerLink(n){null!=n?(this.commands=Array.isArray(n)?n:[n],this.setTabIndexIfNotOnNativeEl("0")):(this.commands=null,this.setTabIndexIfNotOnNativeEl(null))}onClick(n,r,o,i,a){return!!(null===this.urlTree||this.isAnchorElement&&(0!==n||r||o||i||a||"string"==typeof this.target&&"_self"!=this.target))||(this.router.navigateByUrl(this.urlTree,{skipLocationChange:this.skipLocationChange,replaceUrl:this.replaceUrl,state:this.state}),!this.isAnchorElement)}ngOnDestroy(){this.subscription?.unsubscribe()}updateHref(){this.href=null!==this.urlTree&&this.locationStrategy?this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(this.urlTree)):null;const n=null===this.href?null:function nm(e,t,n){return function UC(e,t){return"src"===t&&("embed"===e||"frame"===e||"iframe"===e||"media"===e||"script"===e)||"href"===t&&("base"===e||"link"===e)?tm:em}(t,n)(e)}(this.href,this.el.nativeElement.tagName.toLowerCase(),"href");this.applyAttributeValue("href",n)}applyAttributeValue(n,r){const o=this.renderer,i=this.el.nativeElement;null!==r?o.setAttribute(i,n,r):o.removeAttribute(i,n)}get urlTree(){return null===this.commands?null:this.router.createUrlTree(this.commands,{relativeTo:void 0!==this.relativeTo?this.relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:this.preserveFragment})}static#e=this.\u0275fac=function(r){return new(r||e)(le($n),le(Pi),function Wa(e){return function sD(e,t){if("class"===t)return e.classes;if("style"===t)return e.styles;const n=e.attrs;if(n){const r=n.length;let o=0;for(;o{class e{get isActive(){return this._isActive}constructor(n,r,o,i,a){this.router=n,this.element=r,this.renderer=o,this.cdr=i,this.link=a,this.classes=[],this._isActive=!1,this.routerLinkActiveOptions={exact:!1},this.isActiveChange=new en,this.routerEventsSubscription=n.events.subscribe(u=>{u instanceof Jr&&this.update()})}ngAfterContentInit(){ae(this.links.changes,ae(null)).pipe(Pr()).subscribe(n=>{this.update(),this.subscribeToEachLinkOnChanges()})}subscribeToEachLinkOnChanges(){this.linkInputChangesSubscription?.unsubscribe();const n=[...this.links.toArray(),this.link].filter(r=>!!r).map(r=>r.onChanges);this.linkInputChangesSubscription=ft(n).pipe(Pr()).subscribe(r=>{this._isActive!==this.isLinkActive(this.router)(r)&&this.update()})}set routerLinkActive(n){const r=Array.isArray(n)?n:n.split(" ");this.classes=r.filter(o=>!!o)}ngOnChanges(n){this.update()}ngOnDestroy(){this.routerEventsSubscription.unsubscribe(),this.linkInputChangesSubscription?.unsubscribe()}update(){!this.links||!this.router.navigated||queueMicrotask(()=>{const n=this.hasActiveLinks();this._isActive!==n&&(this._isActive=n,this.cdr.markForCheck(),this.classes.forEach(r=>{n?this.renderer.addClass(this.element.nativeElement,r):this.renderer.removeClass(this.element.nativeElement,r)}),n&&void 0!==this.ariaCurrentWhenActive?this.renderer.setAttribute(this.element.nativeElement,"aria-current",this.ariaCurrentWhenActive.toString()):this.renderer.removeAttribute(this.element.nativeElement,"aria-current"),this.isActiveChange.emit(n))})}isLinkActive(n){const r=function S2(e){return!!e.paths}(this.routerLinkActiveOptions)?this.routerLinkActiveOptions:this.routerLinkActiveOptions.exact||!1;return o=>!!o.urlTree&&n.isActive(o.urlTree,r)}hasActiveLinks(){const n=this.isLinkActive(this.router);return this.link&&n(this.link)||this.links.some(n)}static#e=this.\u0275fac=function(r){return new(r||e)(le($n),le(Wr),le(Dc),le(Cp),le(Te,8))};static#t=this.\u0275dir=Kt({type:e,selectors:[["","routerLinkActive",""]],contentQueries:function(r,o,i){if(1&r&&Rb(i,Te,5),2&r){let a;xb(a=function Ob(){return function oN(e,t){return e[ir].queries[t].queryList}(A(),Ff())}())&&(o.links=a)}},inputs:{routerLinkActiveOptions:"routerLinkActiveOptions",ariaCurrentWhenActive:"ariaCurrentWhenActive",routerLinkActive:"routerLinkActive"},outputs:{isActiveChange:"isActiveChange"},exportAs:["routerLinkActive"],standalone:!0,features:[lo]})}return e})();class E1{}let I2=(()=>{class e{constructor(n,r,o,i,a){this.router=n,this.injector=o,this.preloadingStrategy=i,this.loader=a}setUpPreloading(){this.subscription=this.router.events.pipe(Qr(n=>n instanceof Jr),ta(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(n,r){const o=[];for(const i of r){i.providers&&!i._injector&&(i._injector=ep(i.providers,n,`Route: ${i.path}`));const a=i._injector??n,u=i._loadedInjector??a;(i.loadChildren&&!i._loadedRoutes&&void 0===i.canLoad||i.loadComponent&&!i._loadedComponent)&&o.push(this.preloadConfig(a,i)),(i.children||i._loadedRoutes)&&o.push(this.processRoutes(u,i.children??i._loadedRoutes))}return ft(o).pipe(Pr())}preloadConfig(n,r){return this.preloadingStrategy.preload(r,()=>{let o;o=r.loadChildren&&void 0===r.canLoad?this.loader.loadChildren(n,r):ae(null);const i=o.pipe(pt(a=>null===a?ae(void 0):(r._loadedRoutes=a.routes,r._loadedInjector=a.injector,this.processRoutes(a.injector??n,a.routes))));return r.loadComponent&&!r._loadedComponent?ft([i,this.loader.loadComponent(r)]).pipe(Pr()):i})}static#e=this.\u0275fac=function(r){return new(r||e)(ie($n),ie(tw),ie(Nn),ie(E1),ie(Ah))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();const Nh=new te("");let _1=(()=>{class e{constructor(n,r,o,i,a={}){this.urlSerializer=n,this.transitions=r,this.viewportScroller=o,this.zone=i,this.options=a,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},a.scrollPositionRestoration=a.scrollPositionRestoration||"disabled",a.anchorScrolling=a.anchorScrolling||"disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.transitions.events.subscribe(n=>{n instanceof El?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=n.navigationTrigger,this.restoredId=n.restoredState?n.restoredState.navigationId:0):n instanceof Jr?(this.lastId=n.id,this.scheduleScrollEvent(n,this.urlSerializer.parse(n.urlAfterRedirects).fragment)):n instanceof ki&&0===n.code&&(this.lastSource=void 0,this.restoredId=0,this.scheduleScrollEvent(n,this.urlSerializer.parse(n.url).fragment))})}consumeScrollEvents(){return this.transitions.events.subscribe(n=>{n instanceof GE&&(n.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(n.position):n.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(n.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(n,r){this.zone.runOutsideAngular(()=>{setTimeout(()=>{this.zone.run(()=>{this.transitions.events.next(new GE(n,"popstate"===this.lastSource?this.store[this.restoredId]:null,r))})},0)})}ngOnDestroy(){this.routerEventsSubscription?.unsubscribe(),this.scrollEventsSubscription?.unsubscribe()}static#e=this.\u0275fac=function(r){!function Vm(){throw new Error("invalid")}()};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})();function Or(e,t){return{\u0275kind:e,\u0275providers:t}}function C1(){const e=X(Mn);return t=>{const n=e.get(Ai);if(t!==n.components[0])return;const r=e.get($n),o=e.get(S1);1===e.get(Mh)&&r.initialNavigation(),e.get(I1,null,Me.Optional)?.setUpPreloading(),e.get(Nh,null,Me.Optional)?.init(),r.resetRootComponentType(n.componentTypes[0]),o.closed||(o.next(),o.complete(),o.unsubscribe())}}const S1=new te("",{factory:()=>new It}),Mh=new te("",{providedIn:"root",factory:()=>1}),I1=new te("");function M2(e){return Or(0,[{provide:I1,useExisting:I2},{provide:E1,useExisting:e}])}const T1=new te("ROUTER_FORROOT_GUARD"),R2=[kp,{provide:oa,useClass:uh},$n,ua,{provide:Pi,useFactory:function D1(e){return e.routerState.root},deps:[$n]},Ah,[]];function O2(){return new cw("Router",$n)}let jt=(()=>{class e{constructor(n){}static forRoot(n,r){return{ngModule:e,providers:[R2,[],{provide:Ui,multi:!0,useValue:n},{provide:T1,useFactory:L2,deps:[[$n,new Ya,new Za]]},{provide:Ml,useValue:r||{}},r?.useHash?{provide:wo,useClass:FM}:{provide:wo,useClass:Fw},{provide:Nh,useFactory:()=>{const e=X(iR),t=X(rt),n=X(Ml),r=X(Nl),o=X(oa);return n.scrollOffset&&e.setOffset(n.scrollOffset),new _1(o,r,e,t,n)}},r?.preloadingStrategy?M2(r.preloadingStrategy).\u0275providers:[],{provide:cw,multi:!0,useFactory:O2},r?.initialNavigation?F2(r):[],r?.bindToComponentInputs?Or(8,[e1,{provide:Cl,useExisting:e1}]).\u0275providers:[],[{provide:A1,useFactory:C1},{provide:_p,multi:!0,useExisting:A1}]]}}static forChild(n){return{ngModule:e,providers:[{provide:Ui,multi:!0,useValue:n}]}}static#e=this.\u0275fac=function(r){return new(r||e)(ie(T1,8))};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({})}return e})();function L2(e){return"guarded"}function F2(e){return["disabled"===e.initialNavigation?Or(3,[{provide:fp,multi:!0,useFactory:()=>{const t=X($n);return()=>{t.setUpLocationChangeListener()}}},{provide:Mh,useValue:2}]).\u0275providers:[],"enabledBlocking"===e.initialNavigation?Or(2,[{provide:Mh,useValue:0},{provide:fp,multi:!0,deps:[Mn],useFactory:t=>{const n=t.get(PM,Promise.resolve());return()=>n.then(()=>new Promise(r=>{const o=t.get($n),i=t.get(S1);v1(o,()=>{r(!0)}),t.get(Nl).afterPreactivation=()=>(r(!0),i.closed?ae(void 0):i),o.initialNavigation()}))}}]).\u0275providers:[]]}const A1=new te(""),U2=[{path:"",component:(()=>{class e{constructor(){}ngOnInit(){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["app-home"]],decls:10,vars:0,consts:[[1,"d-flex","flex-column","justify-content-center","text-center","py-4","my-5"],[1,"display-3","mx-auto"],[1,"lead","w-75","mx-auto"],[1,"d-grid","gap-2","d-md-flex","justify-content-center"],["routerLink","/docs",1,"btn","btn-danger","px-4","me-md-2"],["href","https://github.com/DevNet-Framework",1,"btn","btn-outline-secondary","px-4"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"h1",1),s(2,"DevNet Framework"),c(),l(3,"p",2),s(4," A free open-source software, and cross-platform, inspired by ASP.NET Core, built in PHP for rapid application development, APIs, console and modern web application with high performance. "),c(),l(5,"div",3)(6,"a",4),s(7,"Documentation"),c(),l(8,"a",5),s(9,"View on GitHub"),c()()())},dependencies:[Te]})}return e})()},{path:"docs",component:(()=>{class e{constructor(){}ngOnInit(){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["app-docs"]],decls:56,vars:0,consts:[[1,"d-flex","flex-column","justify-content-center","text-center","p-3",2,"min-height","280px","background-color","rebeccapurple"],[1,"text-white","display-4","mx-auto"],[1,"lead","text-white","w-75","mx-auto"],[1,"pt-3"],[1,"container"],[1,"row"],[1,"col-sm-6","col-md-4","mb-3"],[1,"card","shadow-sm","h-100","p-3"],[1,"card-body"],[1,"card-title"],[1,"card-text","mb-0"],["routerLink","/docs/setup",1,"card-link","stretched-link"],["routerLink","/docs/console",1,"card-link","stretched-link"],["routerLink","/docs/core",1,"card-link","stretched-link"],["routerLink","/docs/web",1,"card-link","stretched-link"],["routerLink","/docs/security",1,"card-link","stretched-link"],["routerLink","/docs/entity",1,"card-link","stretched-link"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"h1",1),s(2,"DevNet Documentation"),c(),l(3,"p",2),s(4,"Learn how to use DevNet Framework for rapid application development on any platform, using PHP with a new experience to the next level."),c()(),l(5,"section",3)(6,"div",4)(7,"div",5)(8,"div",6)(9,"div",7)(10,"div",8)(11,"h5",9),s(12,"Setup"),c(),l(13,"p",10),s(14,"Installing the framework and configuring the deployment environment"),c(),y(15,"a",11),c()()(),l(16,"div",6)(17,"div",7)(18,"div",8)(19,"h5",9),s(20,"Console Application"),c(),l(21,"p",10),s(22,"Creating console applications and command lines"),c(),y(23,"a",12),c()()(),l(24,"div",6)(25,"div",7)(26,"div",8)(27,"h5",9),s(28,"Fundamentals"),c(),l(29,"p",10),s(30,"Exploring the fundamental features of the core library"),c(),y(31,"a",13),c()()(),l(32,"div",6)(33,"div",7)(34,"div",8)(35,"h5",9),s(36,"Web Application"),c(),l(37,"p",10),s(38,"Creating web applications, web APIs and microservices"),c(),y(39,"a",14),c()()(),l(40,"div",6)(41,"div",7)(42,"div",8)(43,"h5",9),s(44,"Security"),c(),l(45,"p",10),s(46,"Protecting and controlling the access to the resources"),c(),y(47,"a",15),c()()(),l(48,"div",6)(49,"div",7)(50,"div",8)(51,"h5",9),s(52,"Entity ORM"),c(),l(53,"p",10),s(54,"Manipulating the database using the object relational mapper"),c(),y(55,"a",16),c()()()()()())},dependencies:[Te]})}return e})()},{path:"**",component:(()=>{class e{constructor(){}ngOnInit(){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["app-error"]],decls:8,vars:0,consts:[[1,"container"],[1,"d-flex","flex-column","justify-content-center","text-center",2,"height","75vh"],[1,"text-danger","display-6","mx-auto","fw-normal"],[1,"text-danger","display-1","mx-auto","fw-normal"],[1,"lead","w-75","mx-auto","text-dark","fw-normal"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"span",2),s(3,"ERROR"),c(),l(4,"h1",3),s(5,"404"),c(),l(6,"p",4),s(7,"Page not found!"),c()()())}})}return e})()}];let H2=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[jt.forRoot(U2,{scrollPositionRestoration:"enabled"}),jt]})}return e})();const j2=[];let V2=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[jt.forChild(j2),jt]})}return e})(),So=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[Yr,V2]})}return e})();const Fe=g(782);function q2(e){const r={className:"number",begin:/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?/};return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:/<\/?/,end:/>/,contains:[r,{className:"number",begin:/:\d{1,5}/},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",begin:/\w+/,relevance:0,keywords:{_:["order","deny","allow","setenv","rewriterule","rewriteengine","rewritecond","documentroot","sethandler","errordocument","loadmodule","options","header","listen","serverroot","servername"]},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},contains:[{className:"meta",begin:/\s\[/,end:/\]$/},{className:"variable",begin:/[\$%]\{/,end:/\}/,contains:["self",{className:"number",begin:/[$%]\d+/}]},r,{className:"number",begin:/\b\d+/},e.QUOTE_STRING_MODE]}}],illegal:/\S/}}function W2(e){const t=e.regex,n={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{\w+\}/},{begin:t.concat(/[$@]/,e.UNDERSCORE_IDENT_RE)}]},o={endsWithParent:!0,keywords:{$pattern:/[a-z_]{2,}|\/dev\/poll/,literal:["on","off","yes","no","true","false","none","blocked","debug","info","notice","warn","error","crit","select","break","last","permanent","redirect","kqueue","rtsig","epoll","poll","/dev/poll"]},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[n]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:"\\s\\^",end:"\\s|\\{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|\\{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]?\\b",relevance:0},n]};return{name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{beginKeywords:"upstream location",end:/;|\{/,contains:o.contains,keywords:{section:"upstream location"}},{className:"section",begin:t.concat(e.UNDERSCORE_IDENT_RE+t.lookahead(/\s+\{/)),relevance:0},{begin:t.lookahead(e.UNDERSCORE_IDENT_RE+"\\s"),end:";|\\{",contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:o}],relevance:0}],illegal:"[^\\s\\}\\{]"}}let je=(()=>{class e{constructor(){}ngOnInit(){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["app-sidebar"]],decls:128,vars:0,consts:[[1,"position-sticky","top-0","overflow-auto","bg-white","p-2"],["id","menu",1,"list-unstyled","ps-0"],[1,"mb-1"],["data-bs-toggle","collapse","data-bs-target","#start-collapse","aria-expanded","false",1,"btn","btn-toggle","d-inline-flex","align-items-center","rounded","border-0","collapsed"],["id","start-collapse","data-bs-parent","#menu","routerLinkActive","show",1,"collapse"],[1,"btn-toggle-nav","list-unstyled","fw-normal","pb-1","small"],["routerLink","/docs/setup/overview","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/setup/installation","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/setup/deployment","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["data-bs-toggle","collapse","data-bs-target","#console-collapse","aria-expanded","false",1,"btn","btn-toggle","d-inline-flex","align-items-center","rounded","border-0","collapsed"],["id","console-collapse","data-bs-parent","#menu","routerLinkActive","show",1,"collapse"],["routerLink","/docs/console/start","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/console/output","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/console/input","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/console/command","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["data-bs-toggle","collapse","data-bs-target","#fundamentals-collapse","aria-expanded","false",1,"btn","btn-toggle","d-inline-flex","align-items-center","rounded","border-0","collapsed"],["id","fundamentals-collapse","data-bs-parent","#menu","routerLinkActive","show",1,"collapse"],["routerLink","/docs/core/overview","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/core/properties","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/core/extension","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/core/linq","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/core/generics","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/core/asynchronous","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/core/delegates","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["data-bs-toggle","collapse","data-bs-target","#web-collapse","aria-expanded","false",1,"btn","btn-toggle","d-inline-flex","align-items-center","rounded","border-0","collapsed"],["id","web-collapse","data-bs-parent","#menu","routerLinkActive","show",1,"collapse"],["routerLink","/docs/web/start","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/web/http","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/web/middleware","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/web/routing","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/web/controller","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/web/view","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/web/filter","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/web/exception","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/web/dependency","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["data-bs-toggle","collapse","data-bs-target","#security-collapse","aria-expanded","false",1,"btn","btn-toggle","d-inline-flex","align-items-center","rounded","border-0","collapsed"],["id","security-collapse","data-bs-parent","#menu","routerLinkActive","show",1,"collapse"],["routerLink","/docs/security/overview","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/security/authentication","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/security/authorization","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/security/antiforgery","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["data-bs-toggle","collapse","data-bs-target","#entity-collapse","aria-expanded","false",1,"btn","btn-toggle","d-inline-flex","align-items-center","rounded","border-0","collapsed"],["id","entity-collapse","data-bs-parent","#menu","routerLinkActive","show",1,"collapse"],["routerLink","/docs/entity/start","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/entity/query","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/entity/save","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/entity/relationships","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/entity/migrations","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"ul",1)(2,"li",2)(3,"button",3),s(4," Setup "),c(),l(5,"div",4)(6,"ul",5)(7,"li")(8,"a",6),s(9,"Overview"),c()(),l(10,"li")(11,"a",7),s(12,"Installation"),c()(),l(13,"li")(14,"a",8),s(15,"Deployment"),c()()()()(),l(16,"li",2)(17,"button",9),s(18," Console "),c(),l(19,"div",10)(20,"ul",5)(21,"li")(22,"a",11),s(23,"Get Started"),c()(),l(24,"li")(25,"a",12),s(26,"Output"),c()(),l(27,"li")(28,"a",13),s(29,"Input"),c()(),l(30,"li")(31,"a",14),s(32,"Command Line"),c()()()()(),l(33,"li",2)(34,"button",15),s(35," Fundamentals "),c(),l(36,"div",16)(37,"ul",5)(38,"li")(39,"a",17),s(40,"Overview"),c()(),l(41,"li")(42,"a",18),s(43,"Accessor Properties"),c()(),l(44,"li")(45,"a",19),s(46,"Extension Methods"),c()(),l(47,"li")(48,"a",20),s(49,"LINQ Methods"),c()(),l(50,"li")(51,"a",21),s(52,"Generic Types"),c()(),l(53,"li")(54,"a",22),s(55,"Async Operations"),c()(),l(56,"li")(57,"a",23),s(58,"Delegates & Events"),c()()()()(),l(59,"li",2)(60,"button",24),s(61," Web "),c(),l(62,"div",25)(63,"ul",5)(64,"li")(65,"a",26),s(66,"Get Started"),c()(),l(67,"li")(68,"a",27),s(69,"Http Context"),c()(),l(70,"li")(71,"a",28),s(72,"Middleware"),c()(),l(73,"li")(74,"a",29),s(75,"Routing"),c()(),l(76,"li")(77,"a",30),s(78,"Controller"),c()(),l(79,"li")(80,"a",31),s(81,"Views"),c()(),l(82,"li")(83,"a",32),s(84,"Filters"),c()(),l(85,"li")(86,"a",33),s(87,"Exception Handler"),c()(),l(88,"li")(89,"a",34),s(90,"Dependency Injection"),c()()()()(),l(91,"li",2)(92,"button",35),s(93," Security "),c(),l(94,"div",36)(95,"ul",5)(96,"li")(97,"a",37),s(98,"Overview"),c()(),l(99,"li")(100,"a",38),s(101,"Authentication"),c()(),l(102,"li")(103,"a",39),s(104,"Authorization"),c()(),l(105,"li")(106,"a",40),s(107,"CSRF Prevention"),c()()()()(),l(108,"li",2)(109,"button",41),s(110," Entity ORM "),c(),l(111,"div",42)(112,"ul",5)(113,"li")(114,"a",43),s(115,"Get Started"),c()(),l(116,"li")(117,"a",44),s(118,"Query Data"),c()(),l(119,"li")(120,"a",45),s(121,"Save Data"),c()(),l(122,"li")(123,"a",46),s(124,"Relationships"),c()(),l(125,"li")(126,"a",47),s(127,"Migrations"),c()()()()()()())},dependencies:[Te,w1],styles:[".btn-toggle[_ngcontent-%COMP%]{padding:.25rem .5rem;font-weight:600;color:#000000a6;background-color:transparent}.btn-toggle[_ngcontent-%COMP%]:hover, .btn-toggle[_ngcontent-%COMP%]:focus{color:#000000d9;background-color:#d2f4ea}.btn-toggle[_ngcontent-%COMP%]:before{width:1.25em;line-height:0;content:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='rgba%280,0,0,.5%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/%3e%3c/svg%3e\");transition:transform .35s ease;transform-origin:.5em 50%}.btn-toggle[aria-expanded=true][_ngcontent-%COMP%]{color:#000000d9}.btn-toggle[aria-expanded=true][_ngcontent-%COMP%]:before{transform:rotate(90deg)}.btn-toggle-nav[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{border-left:2px solid #E0E0E0;margin-left:1rem}.btn-toggle-nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{padding:.1875rem .5rem;margin-top:.15rem;margin-left:.8rem}.btn-toggle-nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover, .btn-toggle-nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:focus{background-color:#d2f4ea}"]})}return e})();const G2=[{path:"docs/setup/overview",component:(()=>{class e{constructor(){}ngOnInit(){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["setup-overview"]],decls:56,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],["src","assets/images/framework.svg","alt","Web app home page","width","60%","height","auto"],[1,"alert","alert-info"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/setup/installation",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Overview"),c(),y(8,"hr"),l(9,"p"),s(10," DevNet framework is free open-source software, and cross-platform, built-in PHP with high-performance, for rapid application development, to build console applications, web applications, web APIs and microservices. "),c(),l(11,"h3"),s(12,"Architecture"),c(),l(13,"p"),s(14," The DevNet framework has a layered architecture, which can be represented by the following diagram, that shows the major components of the DevNet Framework in each layer. "),c(),l(15,"div"),y(16,"img",4),c(),l(17,"p"),s(18," The lowest layer of the system provides the fundamental functionality that all components rely on, while the subsequent layers contain more sophisticated services that build on the layer below. "),c(),l(19,"p"),s(20," Here a brief summary of the DevNet components: "),c(),l(21,"ul")(22,"li")(23,"b"),s(24,"Application:"),c(),s(25," a software that carry out specific tasks and operations, which the end-users interact with. "),c(),l(26,"li")(27,"b"),s(28,"CLI Tools:"),c(),s(29," a command-line interface tools, for creating console applications and managing DevNet projects. "),c(),l(30,"li")(31,"b"),s(32,"Web library:"),c(),s(33," a collection of web library and components, that helps to create web applications and web APIs. "),c(),l(34,"li")(35,"b"),s(36,"Entity ORM:"),c(),s(37," an object-relational mapping system, that helps to manipulate databases in an object-oriented way. "),c(),l(38,"li")(39,"b"),s(40,"Core library:"),c(),s(41," a runtime library that provides the fundamental utility and functionality to all DevNet components. "),c()(),l(42,"blockquote",5)(43,"b"),s(44,"Note:"),c(),s(45," These components will be discussed in detail in the upcoming chapters. "),c()(),l(46,"nav",6)(47,"ul",7)(48,"li",8)(49,"a",9),y(50,"i",10),s(51," Previous "),c()(),l(52,"li",8)(53,"a",11),s(54," Next "),y(55,"i",12),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/setup/installation",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["setup-installation"]],decls:87,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],["href","https://www.php.net/","rel","nofollow"],["href","https://getcomposer.org/","rel","nofollow"],[1,"alert","alert-warning"],[1,"language-shell"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/setup/overview",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/setup/deployment",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Installation"),c(),y(8,"hr"),l(9,"p"),s(10," DevNet Framework has some software requirements in order to work, so make sure your system meets the software requirements before getting to the installation. "),c(),l(11,"h3"),s(12,"Software Requirements"),c(),l(13,"ul")(14,"li")(15,"a",4),s(16,"PHP"),c(),s(17," version 8.1 or higher"),c(),l(18,"li")(19,"a",5),s(20,"Composer"),c(),s(21," version 2.0 or higher"),c(),l(22,"li"),s(23,"You may need to install or activate "),l(24,"code"),s(25,"PDO PHP Extensions"),c()()(),l(26,"blockquote",6)(27,"b"),s(28,"Important:"),c(),s(29," when you install composer on Linux operating system, please do not forget to add "),l(30,"code"),s(31,"composer/vendor/bin"),c(),s(32," into the system environment variables inside the file "),l(33,"code"),s(34,".bashrc"),c(),s(35," like this:"),y(36,"br"),l(37,"code"),s(38,'export PATH="$PATH:$HOME/.config/composer/vendor/bin"'),c()(),y(39,"br"),l(40,"h3"),s(41,"Installing DevNet Framework"),c(),l(42,"p"),s(43," It is recommended to Install the DevNet Framework globally in your system, just one framework runs multiple projects unless your projects use different versions of the DevNet framework, which may cause conflict because the composer doesn't support multi-versioning, in this case, you can solve this problem using docker container or installing the compatible version of DevNet framework locally inside its proper project. "),c(),l(44,"p"),s(45," To install the DevNet framework globally using composer run the following command line in the terminal: "),c(),l(46,"pre")(47,"code",7),s(48,"composer global require devnet/framework"),c()(),l(49,"p"),s(50," Or local installation inside your project by running the following command line in the terminal: "),c(),l(51,"pre")(52,"code",7),s(53,"composer require devnet/framework"),c()(),y(54,"br"),l(55,"h4"),s(56,"DevNet Installer"),c(),l(57,"p"),s(58," You can use the DevNet Installer to install the DevNet framework with more options, but you need first to add it to the composer as a plugin by running the following command line in your terminal: "),c(),l(59,"pre")(60,"code",7),s(61,"composer global require devnet/installer"),c()(),l(62,"p"),s(63,' When the composer asks if you trust the "devnet/installer", please select '),l(64,"samp"),s(65,"[yes]"),c(),s(66," to enable it. "),c(),l(67,"p"),s(68," Now, you can run the following command-line to complete the installation of the DevNet framework: "),c(),l(69,"pre")(70,"code",7),s(71,"composer devnet:install"),c()(),l(72,"p"),s(73," Then, DevNet Installer will ask you to select the type of installation mode: "),c(),l(74,"pre")(75,"code",7),s(76,"DevNet-Framework Installer v1.0.0\nPlease select the type of installation mode:\n [1] Full installation (DevNet CLI, Core Library, Web Library and Entity ORM)\n [2] Custom installation (Install selected DevNet package)\n [3] Exit the installation\n>"),c()()(),l(77,"nav",8)(78,"ul",9)(79,"li",10)(80,"a",11),y(81,"i",12),s(82," Previous "),c()(),l(83,"li",10)(84,"a",13),s(85," Next "),y(86,"i",14),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/setup/deployment",component:(()=>{class e{constructor(){}ngOnInit(){Fe.registerLanguage("apache",q2),Fe.registerLanguage("nginx",W2),Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["setup-deployment"]],decls:59,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-apache"],[1,"language-xml"],[1,"language-nginx"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/setup/installation",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/console/start",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Deployment"),c(),y(8,"hr"),l(9,"p"),s(10," DevNet web project comes with two default server configurations, Apache and IIS, to quickly deploy your web application, but you can add other server configurations like the Nginx server, which will discuss in this section. "),c(),l(11,"h3"),s(12,"Apache configuration"),c(),l(13,"p"),s(14," For quick deployment on Apache server, your web project contains already "),l(15,"code"),s(16,".htaccess"),c(),s(17," file in the public directory "),l(18,"code"),s(19,"./webroot/"),c(),s(20," with the following configuration: "),c(),l(21,"pre")(22,"code",4),s(23,"RewriteEngine On\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteRule ^ index.php [QSA,L]"),c()(),y(24,"br"),l(25,"h3"),s(26,"IIS configuration"),c(),l(27,"p"),s(28," For IIS server deployment, your web project contains also the file "),l(29,"code"),s(30,"./webroot/Web.config"),c(),s(31," with the following configuration: "),c(),l(32,"pre")(33,"code",5),s(34,'\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n'),c()(),y(35,"br"),l(36,"h3"),s(37,"Nginx configuration"),c(),l(38,"p"),s(39," Assuming you have a PHP-FPM server installed in your system and running on "),l(40,"code"),s(41,"127.0.0.1:9000"),c(),s(42,", and you want to deploy your web application on the Nginx server, so you can configure the file "),l(43,"code"),s(44,"nginx.conf"),c(),s(45," like below: "),c(),l(46,"pre")(47,"code",6),s(48,"server {\n listen 80;\n server_name localhost;\n root /path/to/webroot;\n index index.php;\n error_page 404 /index.php;\n\n location / {\n try_files $uri $uri/ /index.php?$query_string;\n }\n\n location ~ \\.php$ {\n fastcgi_pass 127.0.0.1:9000;\n fastcgi_index index.php;\n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n include fastcgi_params;\n }\n}"),c()()(),l(49,"nav",7)(50,"ul",8)(51,"li",9)(52,"a",10),y(53,"i",11),s(54," Previous "),c()(),l(55,"li",9)(56,"a",12),s(57," Next "),y(58,"i",13),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/setup",redirectTo:"docs/setup/overview",pathMatch:"full"}];let K2=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[jt.forChild(G2),jt]})}return e})(),Y2=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[Yr,K2,So]})}return e})();const Z2=[{path:"docs/core/overview",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["core-overview"]],decls:44,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-shell"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/console/command",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/core/properties",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Overview"),c(),y(8,"hr"),l(9,"p"),s(10," DevNet Core is the heart of the DevNet framework, and all of its components rely on it. It is a base class library that provides several fundamental features that make it easier to develop applications in PHP. These features include: "),c(),l(11,"ul")(12,"li"),s(13,"Accessor Properties"),c(),l(14,"li"),s(15,"Extension Methods"),c(),l(16,"li"),s(17,"LINQ Methods"),c(),l(18,"li"),s(19,"Generic Types"),c(),l(20,"li"),s(21,"Asynchronous Operations"),c(),l(22,"li"),s(23,"Delegates & Events"),c(),l(24,"li"),s(25,"And more..."),c()(),y(26,"br"),l(27,"h3"),s(28,"Installation"),c(),l(29,"p"),s(30," If you have installed any of the DevNet packages in your system or project, then you already have the DevNet Core. However, you can still install DevNet Core as a third-party library to work with any PHP project by running the following command in the terminal using composer: "),c(),l(31,"pre")(32,"code",4),s(33,"composer require devnet/core"),c()()(),l(34,"nav",5)(35,"ul",6)(36,"li",7)(37,"a",8),y(38,"i",9),s(39," Previous "),c()(),l(40,"li",7)(41,"a",10),s(42," Next "),y(43,"i",11),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/core/properties",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["core-properties"]],decls:61,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/core/overview",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/core/extension",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Accessor Properties"),c(),y(8,"hr"),l(9,"p"),s(10," Accessor properties are methods that look like regular data properties from the outside but are invoked as methods internally when accessed as properties. This allows us to define custom logic for reading and writing the values of an object's properties, with more control over the property's behavior, such as how to validate or modify the input or output, unlike the data properties, which directly store a fixed value. "),c(),l(11,"p"),s(12," To enable the accessor property feature, you need to include the trait "),l(13,"code"),s(14,"DevNet\\System\\PropertyTrait"),c(),s(15," in your class. "),c(),l(16,"h3"),s(17,"Getter Accessor"),c(),l(18,"p"),s(19," The getter accessor is a function bound to a computed property and returns a value when that property is looked up. "),c(),l(20,"p"),s(21," Here is an example that shows how to define a getter accessor property, which is a method that has a property name prefixed with "),l(22,"code"),s(23,"get_"),c(),s(24," accessor and return a value. "),c(),l(25,"pre")(26,"code",4),s(27,"FirstName . ' ' . $this->LastName;\n }\n}\n"),c()(),l(28,"p"),s(29," And here how you can access the computed property: "),c(),l(30,"pre")(31,"code",4),s(32,'FirstName = "John";\n$person->LastName = "Doe";\n\n// Accessing the computed property.\nprint($person->FullName); // Output: John Doe\n'),c()(),y(33,"br"),l(34,"h3"),s(35,"Setter Accessor"),c(),l(36,"p"),s(37," The setter accessor is a function bound to a computed property and will be called when there is an attempt to set that property. "),c(),l(38,"p"),s(39," The following example shows how to define a setter accessor property as a method prefixed with "),l(40,"code"),s(41,"set_"),c(),s(42," accessor and take a value parameter to set object. "),c(),l(43,"pre")(44,"code",4),s(45,"FirstName = $segments[0] ?? '';\n $this->LastName = $segments[1] ?? '';\n }\n}\n"),c()(),l(46,"p"),s(47," And here how to set the computed property: "),c(),l(48,"pre")(49,"code",4),s(50,'FullName = "John Doe";\n\nprint($person->FirstName); // Output: John\nprint($person->LastName); // Output: Doe\n'),c()()(),l(51,"nav",5)(52,"ul",6)(53,"li",7)(54,"a",8),y(55,"i",9),s(56," Previous "),c()(),l(57,"li",7)(58,"a",10),s(59," Next "),y(60,"i",11),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/core/extension",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["core-extension"]],decls:73,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"text-justify"],[1,"alert","alert-info"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/core/properties",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/core/linq",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Extension Methods"),c(),y(8,"hr"),l(9,"p"),s(10," Extension methods are static methods that can be added to an existing class without modifying the class itself or creating a new derived one, and they can be called as if they were instance methods on that extended class. "),c(),l(11,"h3"),s(12,"Extended class"),c(),l(13,"p"),s(14," The extended class is the class that the extension method operates on, and must include the trait "),l(15,"code"),s(16,"DevNet\\System\\MethodTrait"),c(),s(17," to enable this feature like in the following code example: "),c(),l(18,"pre")(19,"code",4),s(20,"Salary - $employee->Salary * $tax;\n }\n}\n"),c()(),y(40,"br"),l(41,"h3"),s(42,"Calling the extension method"),c(),l(43,"p",5),s(44," To call an extension method as if it were an instance method on a particular extended class, the extension class must be brought into the same scope where that instance calls the extension method, using the keyword "),l(45,"code"),s(46,"use"),c()(),l(47,"pre")(48,"code",4),s(49,'Name = "John Doe";\n$employee->Salary = 25000;\n$tax = 0.15;\n\n// Calling the extension method as if it belongs to the employee instance.\n$income = $employee->getIncome($tax);\n\nprint("Income: {$income}$"); // Income: 21250$\n'),c()(),l(50,"p"),s(51," When calling the extension method, the first parameter will be skipped because it's the target reference, and the second parameter will become the first one, the third one will become the second one, and so on... "),c(),y(52,"br"),l(53,"blockquote",6)(54,"b"),s(55,"Note:"),c(),s(56," One of the best examples of extension methods is the "),l(57,"b"),s(58,"LINQ"),c(),s(59," methods that allow to perform queries on collections of type "),l(60,"code"),s(61,"IEnumerable"),c(),s(62,", More details about this feature in the upcoming section. "),c()(),l(63,"nav",7)(64,"ul",8)(65,"li",9)(66,"a",10),y(67,"i",11),s(68," Previous "),c()(),l(69,"li",9)(70,"a",12),s(71," Next "),y(72,"i",13),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/core/linq",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["core-linq"]],decls:137,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"language-shell"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/core/extension",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/core/generics",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Language Integrated Query"),c(),y(8,"hr"),l(9,"p"),s(10," LINQ, or Language Integrated Query, is an integration of query capabilities as expressions of extension methods against data, such as in-memory data, document databases, or SQL databases. "),c(),l(11,"p"),s(12," Any collection class of type "),l(13,"code"),s(14,"IEnumerable"),c(),s(15," or "),l(16,"code"),s(17,"IQueryable"),c(),s(18," that uses the "),l(19,"code"),s(20,"DevNet\\System\\MethodTrait"),c(),s(21," to support the extension method can take advantage of using LINQ extension methods. "),c(),l(22,"p"),s(23," The difference between "),l(24,"code"),s(25,"IEnumerable"),c(),s(26," and "),l(27,"code"),s(28,"IQueryable"),c(),s(29," types is that the implementation of the "),l(30,"code"),s(31,"IEnumerable"),c(),s(32," type, like the "),l(33,"code"),s(34,"ArrayList"),c(),s(35,", uses LINQ against in-memory data, while the implementation of the "),l(36,"code"),s(37,"IQueryable"),c(),s(38," type, like the "),l(39,"code"),s(40,"EntitySet"),c(),s(41," repository of DevNet Entity ORM, uses LINQ against SQL database, which means that this one uses "),l(42,"code"),s(43,"IQueryProvider"),c(),s(44," to compile the predicate expressions of the LINQ methods to SQL query syntax. "),c(),l(45,"h3"),s(46,"Using LINQ extension methods"),c(),l(47,"p"),s(48," We use the "),l(49,"code"),s(50,"ArrayList"),c(),s(51," collection as an example to show you how to use the Linq extension methods with the "),l(52,"code"),s(53,"IEnumerable"),c(),s(54," collection and make sure to declare the namespace "),l(55,"code"),s(56,"DevNet\\System\\Linq"),c(),s(57," to be able to use those extension methods. "),c(),l(58,"pre")(59,"code",4),s(60,"first();\n$last = $list->last();\nprint("First employee is {$first->Name} with Id {$first->Id}\\n");\nprint("Last employee is {$last->Name} with Id {$last->Id}\\n");\n'),c()(),l(67,"h6"),s(68,"Output:"),c(),l(69,"pre")(70,"code",5),s(71,"First employee is bob with Id 1\nLast employee is ted with Id 6\n"),c()(),y(72,"br"),l(73,"h5"),s(74,"Filtering"),c(),l(75,"pre")(76,"code",4),s(77,'print("Employees with Id greater than 2\\n");\n\n$employees = $list->where(fn($employee) => $employee->Id > 2);\nforeach ($employees as $employee) {\n print("{$employee->Id} => {$employee->Name}\\n");\n}\n\nprint("\\n");\nprint("Employees with Name ted\\n");\n\n$employees = $list->where(fn($employee) => $employee->Name == \'ted\');\nforeach ($employees as $employee) {\n print("{$employee->Id} => {$employee->Name}\\n");\n}\n'),c()(),l(78,"h6"),s(79,"Output:"),c(),l(80,"pre")(81,"code",5),s(82,"Employees with Id greater than 2\n3 => ted\n4 => alice\n5 => carol\n6 => ted\n\nEmployees with Name ted\n3 => ted\n6 => ted\n"),c()(),y(83,"br"),l(84,"h5"),s(85,"Sorting"),c(),l(86,"pre")(87,"code",4),s(88,'print("Ascending order by Name\\n");\n\n$employees = $list->orderBy(fn($employee) => $employee->Name);\nforeach ($employees as $employee) {\nprint("{$employee->Id} => {$employee->Name}\\n");\n}\n\nprint("\\n");\nprint("Descending order by Id\\n");\n\n$employees = $list->orderByDescending(fn($employee) => $employee->Id);\nforeach ($employees as $employee) {\nprint("{$employee->Id} => {$employee->Name}\\n");\n}\n'),c()(),l(89,"h6"),s(90,"Output:"),c(),l(91,"pre")(92,"code",5),s(93,"Ascending order by Name\n4 => alice\n1 => bob \n2 => carol\n5 => carol\n3 => ted \n6 => ted \n\nDescending order by Id\n6 => ted \n5 => carol\n4 => alice\n3 => ted \n2 => carol\n1 => bob\n"),c()(),y(94,"br"),l(95,"h5"),s(96,"Paging"),c(),l(97,"pre")(98,"code",4),s(99,'// Skips the first 2 employees then take just 3 from the rest of employees.\n$employees = $list->skip(2)->take(3);\n\nforeach ($employees as $employee) {\n print("{$employee->Id} => {$employee->Name}\\n");\n}\n'),c()(),l(100,"h6"),s(101,"Output:"),c(),l(102,"pre")(103,"code",5),s(104,"3 => ted\n4 => alice\n5 => carol\n"),c()(),y(105,"br"),l(106,"h5"),s(107,"Aggregating"),c(),l(108,"pre")(109,"code",4),s(110,'$count = $list->count();\n$max = $list->max(fn($employee) => $employee->Id);\n$min = $list->min(fn($employee) => $employee->Id);\n\nprint("Total employees => {$count}\\n");\nprint("Max employee Id => {$max}\\n");\nprint("Min employee Id => {$min}\\n");\n'),c()(),l(111,"h6"),s(112,"Output:"),c(),l(113,"pre")(114,"code",5),s(115,"Total employees => 6\nMax employee Id => 6\nMin employee Id => 1\n"),c()(),y(116,"br"),l(117,"h5"),s(118,"Grouping"),c(),l(119,"pre")(120,"code",4),s(121,'// Creates a groups of employees share the same name.\n$groups = $list->groupBy(fn($employee) => $employee->Name);\n\nforeach ($groups as $group) {\n print("Total employees in {$group->Key} group => {$group->count()}\\n");\n}\n'),c()(),l(122,"h6"),s(123,"Output:"),c(),l(124,"pre")(125,"code",5),s(126,"Total employees in bob group => 1\nTotal employees in carol group => 2\nTotal employees in ted group => 2\nTotal employees in alice group => 1\n"),c()()(),l(127,"nav",6)(128,"ul",7)(129,"li",8)(130,"a",9),y(131,"i",10),s(132," Previous "),c()(),l(133,"li",8)(134,"a",11),s(135," Next "),y(136,"i",12),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/core/generics",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["core-generics"]],decls:137,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/core/extension",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/core/asynchronous",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Generic Types"),c(),y(8,"hr"),l(9,"p"),s(10," A generic type or parameterized type is a class with type parameters used in class operations without being specific to a particular data type, then defers the specification of these type parameters until the instantiation of the generic type to allow the code re-use. "),c(),l(11,"h3"),s(12,"Generic type parameter"),c(),l(13,"p"),s(14," The generic type parameter is a placeholder for a type that will be specified when an instance of the generic type is created. e.g. "),l(15,"code"),s(16,"TypeName"),c(),s(17," where "),l(18,"code"),s(19,"T"),c(),s(20," is a generic type parameter. "),c(),l(21,"p"),s(22," This feature can be added to your class by using the trait "),l(23,"code"),s(24,"DevNet\\System\\TypeTrait"),c(),s(25,". You can then define the generic type parameters using the attribute "),l(26,"code"),s(27,"DevNet\\System\\Template"),c(),s(28," on the generic class to specify the type parameters, and pass the generic type arguments via the constructor injection using the method "),l(29,"code"),s(30,"setGenericArguments()"),c()(),l(31,"p"),s(32," The type parameter can be used as the type of a method parameter using the attribute "),l(33,"code"),s(34,"DevNet\\System\\Type"),c(),s(35,", where the concrete type would ordinarily be used, and the method "),l(36,"code"),s(37,"checkArgumentTypes()"),c(),s(38," is the first to be called inside the method needed for the type checking. "),c(),l(39,"p"),s(40," Here is an example explaining how to create a generic class using this feature: "),c(),l(41,"pre")(42,"code",4),s(43,"setGenericArguments($typeName);\n }\n\n private function add(#[Type('T')] $item): void\n {\n // Checking the the type of the arguments before using them.\n $this->checkArgumentTypes(func_get_args());\n $this->items[] = $item;\n }\n\n public function getIterator(): Enumerator\n {\n return new Enumerator($this->items);\n }\n}\n"),c()(),y(44,"br"),l(45,"h3"),s(46,"Generic type argument"),c(),l(47,"p"),s(48," The generic type argument is a type that is passed to the generic type parameter when an instance of the generic type is created. e.g. "),l(49,"code"),s(50,"TypeName"),c(),s(51," where "),l(52,"code"),s(53,"string"),c(),s(54," is a generic type argument. "),c(),l(55,"p"),s(56," The following example uses the generic "),l(57,"code"),s(58,"Collection"),c(),s(59," class created in the previous example to show how to specify the actual type argument at the time of instantiation to make it work only with that specified type. "),c(),l(60,"pre")(61,"code",4),s(62,"Id = 1;\n$employee->Name = 'Alice';\n\n// Create an instance of type Collection\n$employees = new Collection(Employee::class);\n\n// Now this method accepts only arguments of type Employee, other wise will throw a TypeException.\n$employees->add($employee);\n"),c()(),y(63,"br"),l(64,"h3"),s(65,"Checking generic type"),c(),l(66,"p"),s(67," You can use the method "),l(68,"code"),s(69,"checkArgumentTypes()"),c(),s(70," to check the type of any method parameter, including the parameterized type defined in the "),l(71,"code"),s(72,"DevNet\\System\\Type"),c(),s(73," attribute. "),c(),l(74,"p"),s(75," The example below represents a class "),l(76,"code"),s(77,"EmployeeProvider"),c(),s(78," that accepts only the injection of "),l(79,"code"),s(80,"Collection"),c(),s(81," through the constructor. "),c(),l(82,"pre")(83,"code",4),s(84,"\n public function __construct(#[Type(Collection::class, [Employee::class])] $employees)\n {\n $this->checkArgumentTypes(func_get_args());\n $this->employees = $employees;\n }\n\n public function get(int $id): ?Employee\n {\n foreach ($this->employees as $employee) {\n if ($employee->Id == $id) {\n return $employee;\n }\n }\n return null;\n }\n}\n"),c()(),y(85,"br"),l(86,"h3"),s(87,"Multiple type parameters"),c(),l(88,"p"),s(89," As mentioned earlier, the generic class can have multiple type parameters, like a pair of key-value type parameters, which are demonstrated in the following example: "),c(),l(90,"pre")(91,"code",4),s(92,"setGenericArguments($keyTypeName, $valueTypeName);\n }\n\n private function add(#[Type('K')] $key, #[Type('V')] $value): void\n {\n $this->checkArgumentTypes(func_get_args());\n $this->items[$key()] = $value();\n }\n ...\n}\n"),c()(),y(93,"br"),l(94,"h3"),s(95,"Built-in generic collections"),c(),l(96,"p"),s(97," For rapid development, the DevNet Core library provides two types of generic collections: "),c(),l(98,"ul")(99,"li")(100,"code"),s(101,"ArrayList"),c(),s(102," an indexed generic collection, where the parameter "),l(103,"code"),s(104,"T"),c(),s(105," is the type of the items in the collection."),c(),l(106,"li")(107,"code"),s(108,"Dictionary"),c(),s(109," a key-value pairs generic collection, where the parameter "),l(110,"code"),s(111,"K"),c(),s(112," is the type of the keys, and the parameter "),l(113,"code"),s(114,"V"),c(),s(115," is the type of the values in the collection."),c()(),l(116,"h5"),s(117,"ArrayList Example:"),c(),l(118,"pre")(119,"code",4),s(120,".\n$array = new ArrayList('string');\n$array[] = 'Bob';\n\n// This will throw a TypeException because the key must be of type integer.\n$array['1'] = 'Alice';\n\n// This will throw a TypeException because the value must be of type string.\n$array[1] = 50;\n"),c()(),y(121,"br"),l(122,"h5"),s(123,"Dictionary Example:"),c(),l(124,"pre")(125,"code",4),s(126,".\n$array = new Dictionary('string', 'float');\n$array['width'] = 90.5;\n\n// This will throw a TypeException because the value must be of type float.\n$array['height'] = '50';\n\n// This will throw a TypeException because the key must be of type string.\n$array[1] = 50;\n"),c()()(),l(127,"nav",5)(128,"ul",6)(129,"li",7)(130,"a",8),y(131,"i",9),s(132," Previous "),c()(),l(133,"li",7)(134,"a",10),s(135," Next "),y(136,"i",11),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/core/asynchronous",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["core-asynchronous"]],decls:58,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"text-justify"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/core/generics",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/core/delegates",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Asynchronous Operations"),c(),y(8,"hr"),l(9,"p"),s(10," Asynchronous programming is a cooperative multitasking technique that allows the program to perform other operations while concurrently waiting for a long-running task to complete and then return the result when that task is complete. This technique is useful when working with an independent process that runs in the background or with I/O stream operations such as network access or database queries. "),c(),l(11,"h3"),s(12,"Coroutine Task"),c(),l(13,"p"),s(14," A coroutine task is an object that represents an asynchronous operation. It is used to perform work without blocking the main thread's execution by suspending and resuming the execution of the task's operations until the task completes and then returns a result on success or throws an exception on failure. "),c(),l(15,"pre")(16,"code",4),s(17,"wait();\nwhile (true) {\n if ($task->IsCompleted) {\n break;\n }\n}\n\ntry {\n // Getting the result when the task is completed.\n $result = $task->Result;\n} catch ($exception $e) {\n // Logging the error report if the task is failed.\n}\n"),c()(),y(18,"br"),l(19,"h3"),s(20,"Continuation Task"),c(),l(21,"p",5),s(22," A continuation task is an asynchronous task that is chained to another task by calling the "),l(23,"code"),s(24,"then()"),c(),s(25," method which will be executed when its antecedent task completes its execution. "),c(),l(26,"pre")(27,"code",4),s(28,"then(function($task1) {\n $data = $task1->Result;\n return json_decode($data);\n });\n\n return $task2;\n}\n\n$task = readJsonAsync('path/to/data.json');\n$data = $task->Result;\n"),c()(),y(29,"br"),l(30,"h3"),s(31,"Async/Await Pattern"),c(),l(32,"p"),s(33," The async/await pattern is a feature related to the coroutine concept, where the async function can use the await operator to suspend the asynchronous operation until that operation completes and then returns a result. This enables asynchronous non-blocking functions to be structured like normal synchronous functions in the enclosing scope without blocking the main thread during the execution of the async function, which also returns a task object that represents an asynchronous operation and provides a result when the task completes successfully. "),c(),l(34,"pre")(35,"code",4),s(36,"readAsync($file->Length));\n $data = json_decode($json);\n\n $file->close();\n return $data;\n});\n\n$task = $readJsonAsync('path/to/data.json');\n$data = $task->getAwaiter()->getResult();\n"),c()(),l(37,"p"),s(38," Here is the same example in an object-oriented way, where the async method must be prefixed with the "),l(39,"code"),s(40,"async_"),c(),s(41," keyword, and the class that has the async method must use the trait "),l(42,"code"),s(43,"DevNet\\System\\MethodTrait"),c(),s(44," to enable this feature. "),c(),l(45,"pre")(46,"code",4),s(47,"readAsync($file->Length));\n $data = json_decode($json);\n \n $file->close();\n return $data;\n });\n}\n\n$reader = new Reader();\n$task = $reader->readJsonAsync('path/to/data.json');\n$data = $task->getAwaiter()->getResult();\n"),c()()(),l(48,"nav",6)(49,"ul",7)(50,"li",8)(51,"a",9),y(52,"i",10),s(53," Previous "),c()(),l(54,"li",8)(55,"a",11),s(56," Next "),y(57,"i",12),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/core/delegates",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["core-delegates"]],decls:111,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/core/asynchronous",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/web/start",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Delegates & Events"),c(),y(8,"hr"),l(9,"p"),s(10," A delegate is a type that holds references to methods or functions with a particular signature of parameters and return type, and any method or function compatible with the delegate signature can be associated with the instance of that delegate and can be called by invoking the delegate instance. "),c(),l(11,"h3"),s(12,"Defining the delegate"),c(),l(13,"p"),s(14," A delegate is constructed by extending the abstract class Delegate, defining the method signature with an empty body, and having the same name as the name of the defined delegate class, as shown in the code example below. "),c(),l(15,"pre")(16,"code",4),s(17,"invoke($args);\n}\n"),c()(),y(42,"br"),l(43,"h3"),s(44,"Event"),c(),l(45,"p"),s(46," An event is a special type of delegate that enables an object to notify other objects when something of interest occurs, where the class that sends or raises the event is called the publisher (other names: sender, subject), and the classes that receive or handle the event are called subscribers (other names: receivers, observers, listeners, handlers). "),c(),l(47,"h5"),s(48,"Event Handler"),c(),l(49,"p"),s(50," DevNet provides an easy way to subscribe to the event by using "),l(51,"code"),s(52,"DevNet\\System\\Event\\EventHandler"),c(),s(53,", which has the following delegate signature "),l(54,"code"),s(55,"function(object $sender, EventArgs $args): void"),c()(),l(56,"ul")(57,"li")(58,"b"),s(59,"$sender:"),c(),s(60," ("),l(61,"code"),s(62,"object"),c(),s(63,") represents the publisher that raises the event, and the reason for passing the sender as a parameter to the handler, is because the handler can be subscribed to multiple publishers, and sometimes we need to know which publisher raises the event."),c(),l(64,"li")(65,"b"),s(66,"$args:"),c(),s(67," ("),l(68,"code"),s(69,"DevNet\\System\\Event\\EventArgs"),c(),s(70,") represents the event arguments to be handled by the handler."),c()(),l(71,"p"),s(72," The example below represents a "),l(73,"code"),s(74,"Button"),c(),s(75," class as a publisher with two events: The "),l(76,"code"),s(77,"click"),c(),s(78," and "),l(79,"code"),s(80,"keypress"),c(),s(81," events, which can be associated with event listeners. "),c(),l(82,"pre")(83,"code",4),s(84,"Title = $title;\n $this->click = new EventHandler();\n $this->keypress = new EventHandler();\n }\n\n public function addListener(string $event, callable $handler): void\n {\n switch($event) {\n case 'click':\n $this->click[] = $handler;\n break;\n case 'keypress':\n $this->keypress[] = $handler;\n break;\n default:\n throw \\Exception(\"The event {$event} does not exist!\");\n }\n }\n\n public function click(): void\n {\n $this->click->invoke($this, new EventArgs);\n }\n\n public function keypress(): void\n {\n $this->keypress->invoke($this, new EventArgs);\n }\n}\n"),c()(),l(85,"p"),s(86," And the following example represents a "),l(87,"code"),s(88,"Window"),c(),s(89," class as a subscriber that can subscribe handlers to the "),l(90,"code"),s(91,"Button"),c(),s(92," events. "),c(),l(93,"pre")(94,"code",4),s(95,"Title = $title;\n $this->MyButton = new Button(\"My button\");\n // Subscribe to the click event.\n $this->MyButton->addListener('click', [$this, 'onMyButtonClick']);\n }\n\n public function onMyButtonClick(object $sender, EventArgs $event): void\n {\n print(\"{$sender->Title} was clicked\");\n }\n}\n"),c()(),l(96,"p"),s(97," And here is a working example of triggering the click event of the Window's button. "),c(),l(98,"pre")(99,"code",4),s(100,'MyButton->click();\n'),c()()(),l(101,"nav",5)(102,"ul",6)(103,"li",7)(104,"a",8),y(105,"i",9),s(106," Previous "),c()(),l(107,"li",7)(108,"a",10),s(109," Next "),y(110,"i",11),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/core",redirectTo:"docs/core/overview",pathMatch:"full"}];let Q2=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[jt.forChild(Z2),jt]})}return e})(),X2=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[Yr,Q2,So]})}return e})();const J2=[{path:"docs/console/start",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["console-start"]],decls:78,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-shell"],[1,"language-php"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/setup/deployment",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/console/output",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Console Application"),c(),y(8,"hr"),l(9,"p"),s(10," This chapter shows how to create and run a DevNet console application. "),c(),l(11,"h3"),s(12,"Create Console Project"),c(),l(13,"p"),s(14," To create a DevNet console project, enter the command below in the Terminal, where the argument "),l(15,"code"),s(16,"project-name"),c(),s(17," is any name you give to your project: "),c(),l(18,"pre")(19,"code",4),s(20,"devnet new console --output project-name"),c()(),l(21,"p"),s(22," Or, using the composer command-line: "),c(),l(23,"pre")(24,"code",4),s(25,"composer create-project devnet/console-template project-name"),c()(),y(26,"br"),l(27,"h4"),s(28,"Project Structure"),c(),l(29,"p"),s(30," The DevNet console project has the following folder structure: "),c(),l(31,"pre")(32,"code",4),s(33,"console-project/\n\u251c\u2500\u2500 bin/\n| \u251c\u2500\u2500 apphost\n| \u251c\u2500\u2500 run.bat\n| \u2514\u2500\u2500 run\n\u251c\u2500\u2500 src/\n| \u2514\u2500\u2500 Program.php\n\u251c\u2500\u2500 vendor/\n\u2514\u2500\u2500 devnet.proj"),c()(),y(34,"br"),l(35,"h4"),s(36,"Entry Point"),c(),l(37,"p"),s(38," By default, the entry point is the static method "),l(39,"code"),s(40,"Application\\Program::main(array $args)"),c(),s(41,", but you can change that in the project file "),l(42,"code"),s(43,"devnet.proj"),c()(),l(44,"pre")(45,"code",5),s(46,'{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["console-output"]],decls:211,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"language-shell"],[1,"table"],["scope","col"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/console/start",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/console/input",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Console Output"),c(),y(8,"hr"),l(9,"p"),s(10," Console output is the text that is printed to the console screen or terminal window when a program is run, by writing data to the standard output stream. "),c(),l(11,"h3"),s(12,"Write to the console"),c(),l(13,"p"),s(14," To write data to the standard output stream, the following static methods are used: "),c(),l(15,"ul")(16,"li")(17,"code"),s(18,"DevNet\\System\\IO\\Console::write(string, $format, array|string ...$args)"),c()(),l(19,"li")(20,"code"),s(21,"DevNet\\System\\IO\\Console::writeLine(string, $format, array|string ...$args)"),c()()(),l(22,"p"),s(23," Both methods are similar, except that "),l(24,"code"),s(25,"Console::writeLine()"),c(),s(26," prints data along with a new line at the end of the output, while the "),l(27,"code"),s(28,"Console::write()"),c(),s(29," prints data without adding a new line, as shown in the following example. "),c(),l(30,"pre")(31,"code",4),s(32,'value, $color->name);\n }\n\n Console::writeLine();\n Console::$ForegroundColor = ConsoleColor::Black;\n Console::$BackgroundColor = ConsoleColor::White;\n Console::writeLine("List of the background colors:");\n Console::resetColor();\n\n foreach (ConsoleColor::cases() as $color) {\n Console::$BackgroundColor = $color;\n Console::writeLine("The background color {0} is {1}", $color->value, $color->name);\n }\n\n Console::resetColor();\n }\n}\n'),c()(),y(105,"br"),l(106,"h4"),s(107,"Colors"),c(),l(108,"p"),s(109," The enumeration "),l(110,"code"),s(111,"DevNet\\System\\IO\\ConsoleColor"),c(),s(112,", that defines the foreground and background colors for the console window, has the following fields: "),c(),l(113,"table",6)(114,"thead")(115,"tr")(116,"th",7),s(117,"Name"),c(),l(118,"th",7),s(119,"Code"),c()()(),l(120,"tbody")(121,"tr")(122,"td"),s(123,"Black"),c(),l(124,"td"),s(125,"0"),c()(),l(126,"tr")(127,"td"),s(128,"DarkGrey"),c(),l(129,"td"),s(130,"1"),c()(),l(131,"tr")(132,"td"),s(133,"DarkRed"),c(),l(134,"td"),s(135,"2"),c()(),l(136,"tr")(137,"td"),s(138,"DarkMagenta"),c(),l(139,"td"),s(140,"3"),c()(),l(141,"tr")(142,"td"),s(143,"DarkBlue"),c(),l(144,"td"),s(145,"4"),c()(),l(146,"tr")(147,"td"),s(148,"DarkCyan"),c(),l(149,"td"),s(150,"5"),c()(),l(151,"tr")(152,"td"),s(153,"DarkGreen"),c(),l(154,"td"),s(155,"6"),c()(),l(156,"tr")(157,"td"),s(158,"DarkYellow"),c(),l(159,"td"),s(160,"7"),c()(),l(161,"tr")(162,"td"),s(163,"Gray"),c(),l(164,"td"),s(165,"8"),c()(),l(166,"tr")(167,"td"),s(168,"Red"),c(),l(169,"td"),s(170,"9"),c()(),l(171,"tr")(172,"td"),s(173,"Magenta"),c(),l(174,"td"),s(175,"10"),c()(),l(176,"tr")(177,"td"),s(178,"Blue"),c(),l(179,"td"),s(180,"11"),c()(),l(181,"tr")(182,"td"),s(183,"Cyan"),c(),l(184,"td"),s(185,"12"),c()(),l(186,"tr")(187,"td"),s(188,"Green"),c(),l(189,"td"),s(190,"13"),c()(),l(191,"tr")(192,"td"),s(193,"Yellow"),c(),l(194,"td"),s(195,"14"),c()(),l(196,"tr")(197,"td"),s(198,"White"),c(),l(199,"td"),s(200,"15"),c()()()()(),l(201,"nav",8)(202,"ul",9)(203,"li",10)(204,"a",11),y(205,"i",12),s(206," Previous "),c()(),l(207,"li",10)(208,"a",13),s(209," Next "),y(210,"i",14),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/console/input",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["console-input"]],decls:66,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"language-shell"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/console/output",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/console/command",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Console Input"),c(),y(8,"hr"),l(9,"p"),s(10," Console input is the input data that is entered by the user through the console window, to interact with system programs or other console applications. "),c(),l(11,"h3"),s(12,"User input"),c(),l(13,"p"),s(14," The static method "),l(15,"code"),s(16,"DevNet\\System\\IO\\Console::readLine()"),c(),s(17,", is used to read the user input data from the standard input stream. "),c(),l(18,"p"),s(19," In the following example, the program prompts the user to enter his name, then reads the user input data and prints it in a greeting message. "),c(),l(20,"pre")(21,"code",4),s(22,'{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["console-command"]],decls:147,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-shell"],[1,"table"],["scope","col"],[1,"language-php"],[1,"alert","alert-info"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/console/input",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/core/overview",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Command-Line Dispatcher"),c(),y(8,"hr"),l(9,"p"),s(10," The command-line dispatcher is a component used for building command-line applications, it provides a way to organize functionality into logical groups by creating a hierarchy of commands that can be navigated using subcommands, options, and arguments to execute particular actions, like providing the help information for the application. "),c(),l(11,"h3"),s(12,"Command-line syntax"),c(),l(13,"p"),s(14," The command-line parser will parse the input into tokens, which are strings delimited by spaces interpreted as commands, options, and arguments. "),c(),l(15,"p"),s(16," For example, consider the following command line: "),c(),l(17,"pre")(18,"code",4),s(19,"devnet add class --output MyClass"),c()(),l(20,"p"),s(21," The following table shows how the command-line parser interprets the preceding example: "),c(),l(22,"table",5)(23,"thead")(24,"tr")(25,"th",6),s(26,"Token"),c(),l(27,"th",6),s(28,"Description"),c()()(),l(29,"tbody")(30,"tr")(31,"td"),s(32,"devnet"),c(),l(33,"td"),s(34,"Root command"),c()(),l(35,"tr")(36,"td"),s(37,"add"),c(),l(38,"td"),s(39,"Child command"),c()(),l(40,"tr")(41,"td"),s(42,"class"),c(),l(43,"td"),s(44,"Argument for "),l(45,"b"),s(46,"add"),c(),s(47," command"),c()(),l(48,"tr")(49,"td"),s(50,"--output"),c(),l(51,"td"),s(52,"Option for "),l(53,"b"),s(54,"add"),c(),s(55," command"),c()(),l(56,"tr")(57,"td"),s(58,"MyClass"),c(),l(59,"td"),s(60,"Argument for "),l(61,"b"),s(62,"--output"),c(),s(63," option"),c()()()(),l(64,"h4"),s(65,"Root command"),c(),l(66,"p"),s(67," The root command is the top-level command that is executed when the application is run, is the one that specifies the name of the app's executable, and can accept parameters, such as subcommands, options, and arguments. "),c(),l(68,"h4"),s(69,"Child commands"),c(),l(70,"p"),s(71," The child commands, also known as subcommands or verbs, are commands nested within another, used to specify a particular action, and can accept additional subcommands as parameters, as well as options and arguments. "),c(),l(72,"h4"),s(73,"Options"),c(),l(74,"p"),s(75," Options are named parameters passed to a command optionally to modify its behavior, and they can accept an argument or be just flags without it. "),c(),l(76,"h4"),s(77,"Arguments"),c(),l(78,"p"),s(79," Arguments are values passed to a command or an option to provide additional information. "),c(),y(80,"br"),l(81,"h3"),s(82,"Define commands"),c(),l(83,"p"),s(84," You can define a root command, with some options and arguments, by creating an instance of the class "),l(85,"code"),s(86,"DevNet\\System\\Command\\CommandLine"),c(),s(87,", then you can define subcommands in the same way and add them to it. "),c(),l(88,"p"),s(89," The following code example is a command line application that can display the time according to the specified timezone. "),c(),l(90,"pre")(91,"code",7),s(92,"addOption('--version', 'Display the version information.', '-v');\n\n $rootCommand->setHandler(function (object $sender, CommandEventArgs $args): void {\n $version = $args->get('--version');\n if ($version) {\n Console::writeLine(\"watch command-line: v1.0.0\");\n return;\n }\n\n Console::writeLine(\"Try 'watch --help' to get information about the command's usage.\");\n });\n\n // Defines the child command.\n $subcommand = new CommandLine('time', 'Display the current time');\n $subcommand->addArgument('timezone', 'Define the time zone');\n\n $subcommand->setHandler(function (object $sender, CommandEventArgs $args): void {\n $datetime = new DateTime('now');\n $timezone = $args->get('timezone');\n if ($timezone) {\n $datetime->setTimezone(new DateTimeZone($timezone->Value));\n }\n\n Console::writeLine($datetime->format('H:i:s'));\n }\n\n // Adds the child command.\n $rootCommand->addCommand($subcommand);\n\n // Parsing the input, then invoking the command.\n $rootCommand->invoke($args);\n }\n}\n"),c()(),l(93,"blockquote",8)(94,"b"),s(95,"Note:"),c(),s(96," You can run your command-line application by executing the bin file of your application "),l(97,"code"),s(98,"./bin/run"),c()(),l(99,"p"),s(100," In this example, we have renamed the bin files "),l(101,"code"),s(102,"./bin/run"),c(),s(103," and "),l(104,"code"),s(105,"./bin/run.bat"),c(),s(106," to "),l(107,"code"),s(108,"./bin/watch"),c(),s(109," and "),l(110,"code"),s(111,"./bin/watch.bat"),c(),s(112," to match the name of the root command. "),c(),l(113,"p"),s(114," Now you can execute the command with a given time zone argument to get the current time of that zone. "),c(),l(115,"pre")(116,"code",4),s(117,"./bin/watch time America/Toronto"),c()(),l(118,"h5"),s(119,"Output"),c(),l(120,"pre")(121,"code",4),s(122,"19:29:01"),c()(),y(123,"br"),l(124,"p"),s(125," Or execute the command with the option "),l(126,"code"),s(127,"--version"),c(),s(128," to get the version information. "),c(),l(129,"pre")(130,"code",4),s(131,"./bin/watch --version"),c()(),l(132,"h5"),s(133,"Output"),c(),l(134,"pre")(135,"code",4),s(136,"watch command-line: v1.0.0"),c()()(),l(137,"nav",9)(138,"ul",10)(139,"li",11)(140,"a",12),y(141,"i",13),s(142," Previous "),c()(),l(143,"li",11)(144,"a",14),s(145," Next "),y(146,"i",15),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/console",redirectTo:"docs/console/start",pathMatch:"full"}];let e$=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[jt.forChild(J2),jt]})}return e})(),t$=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[Yr,e$,So]})}return e})();const n$=[{path:"docs/web/start",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["web-start"]],decls:121,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-shell"],[1,"language-php"],[1,"alert","alert-info"],["href","http://localhost:8000"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/core/delegates",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/web/http",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Web Application"),c(),y(8,"hr"),l(9,"p"),s(10," DevNet web application is based on Middleware architecture with Action-Domain-Responder architectural pattern, which is suitable for creating a minimal web APIs, but it supports also Model-View-Controller architectural pattern which is available as an action dispatcher with a template engine that can be integrated into the services and invoked in the middleware endpoint. "),c(),l(11,"h3"),s(12,"Create a web project"),c(),l(13,"p"),s(14," To create a DevNet web project, enter the command below in the Terminal, where the argument "),l(15,"code"),s(16,"project-name"),c(),s(17," is any name you give to your web project: "),c(),l(18,"pre")(19,"code",4),s(20,"devnet new web --output project-name"),c()(),l(21,"p"),s(22," Or, using the composer command-line: "),c(),l(23,"pre")(24,"code",4),s(25,"composer create-project devnet/web-template project-name"),c()(),l(26,"p"),s(27," You can also create a DevNet web project from MVC template: "),c(),l(28,"pre")(29,"code",4),s(30,"composer create-project devnet/mvc-template project-name"),c()(),y(31,"br"),l(32,"h4"),s(33,"Project Structure"),c(),l(34,"p"),s(35," The DevNet web project has the following folder structure: "),c(),l(36,"pre")(37,"code",4),s(38,"web-project/\n\u251c\u2500\u2500 bin/\n| \u251c\u2500\u2500 apphost\n| \u251c\u2500\u2500 run.bat\n| \u2514\u2500\u2500 run\n\u251c\u2500\u2500 src/\n| \u2514\u2500\u2500 Program.php\n\u251c\u2500\u2500 webroot/\n| \u251c\u2500\u2500 css/\n| \u251c\u2500\u2500 js/\n| \u251c\u2500\u2500 lib/\n| \u251c\u2500\u2500 .htaccess\n| \u251c\u2500\u2500 index.php\n| \u2514\u2500\u2500 web.config\n\u251c\u2500\u2500 vendor/\n\u251c\u2500\u2500 devnet.proj\n\u2514\u2500\u2500 settings.json"),c()(),y(39,"br"),l(40,"h4"),s(41,"Entry Point"),c(),l(42,"p"),s(43," Like the console project, the entry point by default is the static method "),l(44,"code"),s(45,"Application\\Program::main(array $args)"),c(),s(46,", and you can change that in the project file: "),l(47,"samp"),s(48,'"devnet.proj"'),c()(),l(49,"p"),s(50," The entry point method calls the static method "),l(51,"code"),s(52,"WebHost::createDefaultBuilder(array $args)"),c(),s(53," to create a "),l(54,"code"),s(55,"WebHostBuilder"),c(),s(56," instance which can configure services through the method "),l(57,"code"),s(58,"register()"),c(),s(59,", and builds a "),l(60,"code"),s(61,"WebHost"),c(),s(62," instance which calls the "),l(63,"code"),s(64,"start()"),c(),s(65," method to configure the app's request pipeline, then runs the application as shown in the code below: "),c(),l(66,"pre")(67,"code",5),s(68,'register(function ($services) {\n // Services\n });\n\n $host = $builder->build();\n $host->start(function ($app) {\n // Middlewares\n $app->useRouter();\n $app->useEndpoint(function ($routes) {\n // Routes\n $routes->mapGet("/", fn () => "Hello World!");\n });\n });\n }\n}'),c()(),l(69,"blockquote",6)(70,"b"),s(71,"Note:"),c(),s(72," Working with services, middlewares and routes will be discussed in details in the upcoming sections."),c(),y(73,"br"),l(74,"h3"),s(75,"Run the application"),c(),l(76,"p"),s(77," To run the web application, run the following command in the Terminal : "),c(),l(78,"pre")(79,"code",4),s(80,"devnet run"),c()(),l(81,"p"),s(82," This will start the development web server at "),l(83,"a",7),s(84,"http://localhost:8000"),c(),s(85," in "),l(86,"samp"),s(87,"/webroot"),c(),s(88," folder, and optionally you can override this default server settings by adding arguments to the following parameters "),l(89,"code"),s(90,"--host"),c(),s(91,", "),l(92,"code"),s(93,"--port"),c(),s(94," and "),l(95,"code"),s(96,"--root"),c(),s(97," to the "),l(98,"code"),s(99,"run"),c(),s(100," command in the terminal like the following example: "),c(),l(101,"pre")(102,"code",4),s(103,"devnet run --host 127.0.0.1 --port 8888 --root webroot"),c()(),l(104,"blockquote",6)(105,"b"),s(106,"Note:"),c(),s(107," In Visual Studio Code with the PHP Xdebug extension, you can press the "),l(108,"b"),s(109,"F5"),c(),s(110," key button to launch the application in debug mode."),c()(),l(111,"nav",8)(112,"ul",9)(113,"li",10)(114,"a",11),y(115,"i",12),s(116," Previous "),c()(),l(117,"li",10)(118,"a",13),s(119," Next "),y(120,"i",14),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/web/http",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["web-http"]],decls:157,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"text-justify"],[1,"language-php"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/web/start",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/web/middleware",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"HTTP Client-Server "),c(),y(8,"hr"),l(9,"h3"),s(10,"Http Server"),c(),l(11,"p",4),s(12," DevNet provides the HttpContext class which encapsulates all HTTP information about the HTTP server request received from the client, and HTTP server response that will be sent to the client. "),c(),l(13,"p",4),s(14," HttpContext already injected in the your application, and you can access it through middlewares and request handler endpoints, but if you want to use HttpContext as a third-party component to another project than DevNet, you can create an instance of HttpContext using "),l(15,"code"),s(16,"HttpContextFactory"),c(),s(17," it will create a default instance with global server variables. "),c(),l(18,"pre")(19,"code",5),s(20,"Request->Method;"),c()(),y(37,"br"),l(38,"h6"),s(39,"The Request URL"),c(),l(40,"pre")(41,"code",5),s(42,"$scheme = $httpContext->Request->Scheme;\n$host = $httpContext->Request->Host->Name;\n$port = $httpContext->Request->Host->Port;\n$path = $httpContext->Request->Path;\n$url = $scheme . '://' . $host . $path;"),c()(),y(43,"br"),l(44,"h6"),s(45,"The Request Query"),c(),l(46,"pre")(47,"code",5),s(48,"$query = $httpContext->Request->Query;\n$value = $query->getValue('name');"),c()(),l(49,"h6"),s(50,"The Request Form"),c(),l(51,"pre")(52,"code",5),s(53,"$form = $httpContext->Request->Form;\n$value = $form->getValue('name');"),c()(),y(54,"br"),l(55,"h6"),s(56,"The Request From Files"),c(),l(57,"pre")(58,"code",5),s(59,"$files = $httpContext->Request->Form->Files;\n$file = $files->getFile('name');\n \n$file->copyTo('path');"),c()(),y(60,"br"),l(61,"h6"),s(62,"The Request Headers"),c(),l(63,"pre")(64,"code",5),s(65,"$headers = $httpContext->Request->Headers;\n$values = $headers->getValues('name');\n$value = $values[0];"),c()(),y(66,"br"),l(67,"h6"),s(68,"The Request Cookies"),c(),l(69,"pre")(70,"code",5),s(71,"$cookies = $httpContext->Request->Cookies;\n$value = $cookies->getValue('name');"),c()(),y(72,"br"),l(73,"h4"),s(74,"Http Response"),c(),l(75,"p",4),s(76," You can access the "),l(77,"code"),s(78,"HttpResponse"),c(),s(79," property from the "),l(80,"code"),s(81,"HttpContext"),c(),s(82," and set the HTTP response data as shown below. "),c(),l(83,"h6"),s(84,"Adding Response Header"),c(),l(85,"pre")(86,"code",5),s(87,"$httpContext->Response->Headers->add('name', 'value', replace: true);"),c()(),y(88,"br"),l(89,"h6"),s(90,"Adding Response Cookie"),c(),l(91,"pre")(92,"code",5),s(93,"$options = new \\DevNet\\Web\\Http\\CookieOptions(expires: new DateTime('7 days'), path: '/');\n$httpContext->Response->Cookies->add('name', 'value', $options);"),c()(),y(94,"br"),l(95,"h6"),s(96,"Writing Response Content"),c(),l(97,"pre")(98,"code",5),s(99,"$httpContext->Response->Body->write('content');"),c()(),y(100,"br"),l(101,"h6"),s(102,"Writing Response Content Asynchronously"),c(),l(103,"pre")(104,"code",5),s(105,"$task = $httpContext->Response->writeAsync('content');\n$task = $httpContext->Response->writeJsonAsync($object);"),c()(),y(106,"br"),l(107,"h6"),s(108,"Send Redirect Response"),c(),l(109,"pre")(110,"code",5),s(111,"$httpContext->Response->redirect('path');"),c()(),y(112,"br"),l(113,"h6"),s(114,"Set Response Status Code"),c(),l(115,"pre")(116,"code",5),s(117,"$httpContext->Response->setStatusCode(403);"),c()(),y(118,"br"),l(119,"h4"),s(120,"Http Client"),c(),l(121,"p",4),s(122," DevNet Provides a "),l(123,"code"),s(124,"HttpClient"),c(),s(125," class for sending HTTP requests to a web API server and receiving back HTTP responses. "),c(),l(126,"pre")(127,"code",5),s(128,"requestAsync('GET', 'www.example.com');\n $response = await($task);\n $content = null;\n while(!$response->Body->EndOfStream) {\n $content .= await($response->Body->readAsync(1024));\n }\n return $content;\n});\n\n$task = $action();"),c()(),y(129,"br"),l(130,"h6"),s(131,"Send request content"),c(),l(132,"pre")(133,"code",5),s(134,"$form = \"Username=john_doe&Password=123456\";\n$content = new HttpRequestContent('application/x-www-form-urlencoded', $form);\n$task = $client->requestAsync('POST', 'www.example.com', $content);"),c()(),y(135,"br"),l(136,"h6"),s(137,"Send HTTP method request using short calls"),c(),l(138,"pre")(139,"code",5),s(140,"$task = $client->getRequestAsync('www.example.com', $requestContent);\n$task = $client->postRequestAsync('www.example.com', $requestContent);\n$task = $client->putRequestAsync('www.example.com', $requestContent);\n$task = $client->deleteRequestAsync('www.example.com', $requestContent);"),c()(),y(141,"br"),l(142,"h6"),s(143,"Send get request that returns response content"),c(),l(144,"pre")(145,"code",5),s(146,"$task = $client->getStringAsync('www.example.com');"),c()()(),l(147,"nav",6)(148,"ul",7)(149,"li",8)(150,"a",9),y(151,"i",10),s(152," Previous "),c()(),l(153,"li",8)(154,"a",11),s(155," Next "),y(156,"i",12),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/web/middleware",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["web-middleware"]],decls:92,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],["src","assets/images/middleware.svg","alt","Web app home page","width","100%","height","auto"],[1,"language-php"],[1,"table"],["scope","col"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/core/http",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/web/routing",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Middleware"),c(),y(8,"hr"),l(9,"p"),s(10," Middlewares are software components that are chained into the application pipeline to handle HTTP requests and responses, Each middleware component in the request pipeline is responsible for invoking the next component called Request Delegate, till reaching the endpoint of the application, and can perform work before and after the next component in the pipeline or short-circuiting the chain to prevent the next middlewares from processing the request. "),c(),l(11,"p"),s(12," The following diagram represents the DevNet request pipeline, which consists of a sequence of request delegates, called one after the other. "),c(),y(13,"br")(14,"img",4)(15,"br")(16,"br")(17,"br"),l(18,"p"),s(19," The following code represents an example of a middleware class called "),l(20,"code"),s(21,"RedirectMiddleware"),c(),s(22,", it redirects the old URL requested that has been changed permanently to the new URL before the request gets to the Router middleware. "),c(),l(23,"pre")(24,"code",5),s(25,'Request->Uri->Path == "/old/path") {\n $context->Response->setStatusCode(301);\n $context->Response->redirect("/new/path");\n return;\n }\n // Await next request delegate to chain the pipeline to the next middleware or endpoint.\n await($next($context));\n // Logging or other works can be done here after calling the next request delegate.\n }\n}'),c()(),y(26,"br"),l(27,"h3"),s(28,"Registering Middlewares"),c(),l(29,"p"),s(30," Inside the method "),l(31,"code"),s(32,"WebHost::start(Closure $configure)"),c(),s(33,", middlewares can be registered to the pipeline as a class that implements the interface "),l(34,"code"),s(35,"DevNet\\Web\\Middleware\\IMiddleware"),c(),s(36," or as an in-line middleware defined by an anonymous async function, with the help of the following methods: "),c(),l(37,"ul")(38,"li")(39,"code"),s(40,"ApplicationBuilder::use(callable $middleware)"),c()(),l(41,"li")(42,"code"),s(43,"ApplicationBuilderExtensions::useMiddleware(string $middleware, ...$args)"),c()()(),l(44,"pre")(45,"code",5),s(46,"start(function ($app) {\n $app->UseExceptionHandler();\n\n // Using middleware class\n $app->useMiddleware(RedirectMiddleware::class);\n $app->useRouter();\n\n // Using in-line middleware\n $app->use(async(function($context, $next) { //;\n // Some works can be done here before calling the next request delegate.\n await($next($context));\n // Other works can be done here after calling the next request delegate.\n }));\n\n // Other middlewares can be used here.\n\n $app->useEndpoint(function($routes) {\n // Routes\n });\n});"),c()(),y(47,"br"),l(48,"h3"),s(49,"Built-in middlewares"),c(),l(50,"table",6)(51,"thead")(52,"tr")(53,"th",7),s(54,"Method"),c(),l(55,"th",7),s(56,"Description"),c()()(),l(57,"tbody")(58,"tr")(59,"td")(60,"code"),s(61,"ApplicationBuilder::useExceptionHandler()"),c()(),l(62,"td"),s(63,"add ExceptionHandler middleware to the pipeline"),c()(),l(64,"tr")(65,"td")(66,"code"),s(67,"ApplicationBuilder::useRouter()"),c()(),l(68,"td"),s(69,"add Router matcher middleware to the pipeline"),c()(),l(70,"tr")(71,"td")(72,"code"),s(73,"ApplicationBuilder::useAuthentication()"),c()(),l(74,"td"),s(75,"add Authentication middleware to the pipeline"),c()(),l(76,"tr")(77,"td")(78,"code"),s(79,"ApplicationBuilder::useEndpoint()"),c()(),l(80,"td"),s(81,"add Endpoint dispatcher middleware to the pipeline"),c()()()()(),l(82,"nav",8)(83,"ul",9)(84,"li",10)(85,"a",11),y(86,"i",12),s(87," Previous "),c()(),l(88,"li",10)(89,"a",13),s(90," Next "),y(91,"i",14),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/web/routing",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["web-routing"]],decls:200,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"table"],["scope","col",1,"col-md-6"],["scope","col",1,"col-md-4"],["scope","col",1,"col-3"],[1,"alert","alert-warning"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/web/middleware",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/web/controller",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Routing"),c(),y(8,"hr"),l(9,"p"),s(10," The router is a component responsible for matching incoming HTTP requests and dispatching those requests to the app's executable endpoints, which are executable actions responsible for request-handling, defined and configured in the application builder, and selected and executed when request URL matches a defined URL Pattern called Route Template. "),c(),l(11,"p"),s(12," The endpoint matching process can also filter HTTP requests by allowing restraint HTTP Verbs and can extract values from the request's URL and provide those values for request processing."),y(13,"br"),s(14," Routing is also able to generate URLs that map to endpoints. "),c(),l(15,"h3"),s(16,"Routing basics"),c(),l(17,"p"),s(18," Router is registered in the middleware pipeline in the "),l(19,"code"),s(20,"start()"),c(),s(21," method of "),l(22,"code"),s(23,"WebHost"),c(),s(24," class."),y(25,"br"),s(26," by using a pair of middleware, defined by "),l(27,"code"),s(28,"useRouter()"),c(),s(29," and "),l(30,"code"),s(31,"useEndpoint(RouteCollection $routes)"),c(),s(32," methods: "),c(),l(33,"ul")(34,"li")(35,"b"),s(36,"UseRouter"),c(),s(37," adds route matching middleware to the middleware pipeline, and this middleware looks at the set of endpoints defined in the App and selects the best match based on the request. "),c(),l(38,"li")(39,"b"),s(40,"UseEndpoint"),c(),s(41," adds endpoint execution middleware to the middleware pipeline, which runs the request delegate associated with the selected endpoint. "),c()(),l(42,"p"),s(43," The following code below shows a basic routing example, write "),l(44,"code"),s(45,'"Hello World!"'),c(),s(46," to the HTTP response when an HTTP GET request is sent to the root URL "),l(47,"code"),s(48,'"/"'),c(),s(49,", which is By default is "),l(50,"code"),s(51,"https://localhost:8000/"),c(),y(52,"br"),s(53," else If the request doesn't match any route, an HTTP 404 page not found is returned. "),c(),l(54,"pre")(55,"code",4),s(56,'start(function ($app) {\n $app->UseExceptionHandler();\n $app->useRouter();\n // Additional middlewares here\n $app->useEndpoint(function ($routes) {\n // Routes\n $routes->mapGet("/", fn () => "Hello World!");\n });\n});'),c()(),l(57,"p"),s(58," The following table shows the available routing methods and their descriptions. "),c(),l(59,"table",5)(60,"thead")(61,"tr")(62,"th",6),s(63,"Methods"),c(),l(64,"th",7),s(65,"Description"),c()()(),l(66,"tbody")(67,"tr")(68,"td")(69,"code"),s(70,"mapGet(string $pattern string|callable|array $handler)"),c()(),l(71,"td"),s(72,"Route that matches HTTP GET request for the specified path."),c()(),l(73,"tr")(74,"td")(75,"code"),s(76,"mapPost(string $pattern, string|callable|array $handler)"),c()(),l(77,"td"),s(78,"Route that matches HTTP POST request for the specified path."),c()(),l(79,"tr")(80,"td")(81,"code"),s(82,"mapPut(string $pattern, string|callable|array $handler)"),c()(),l(83,"td"),s(84,"Route that matches HTTP PUT request for the specified path."),c()(),l(85,"tr")(86,"td")(87,"code"),s(88,"mapDelete(string $pattern, string|callable|array $handler)"),c()(),l(89,"td"),s(90,"Route that matches HTTP DELETE request for the specified path."),c()(),l(91,"tr")(92,"td")(93,"code"),s(94,"mapPatch(string $pattern, string|callable|array $handler)"),c()(),l(95,"td"),s(96,"Route that matches HTTP PATCH request for the specified path."),c()(),l(97,"tr")(98,"td")(99,"code"),s(100,"mapRoute(string $pattern, string|callable|array $handler, ?string $verb = null)"),c()(),l(101,"td"),s(102,"Route that matches HTTP request for the specified path and HTTP method, or any HTTP method if it's not specified."),c()()()(),y(103,"br"),l(104,"h3"),s(105,"Async Handler"),c(),l(106,"p"),s(107," DevNet route can accept the Request Handler as an async function to handle the HTTP request asynchronously, like in the following example: "),c(),l(108,"pre")(109,"code",4),s(110,"useEndpoint(function($routes) {\n $routes->mapGet(\"/\", async(function(HttpContext $context) {\n $client = new HttpClient();\n $content = await($client->getStringAsync('www.example.com'));\n await($context->Response->writeAsync($content));\n }));\n});"),c()(),y(111,"br"),l(112,"h3"),s(113,"Route Template"),c(),l(114,"p"),s(115," A route template is a string pattern composed of segments, separated by a slash "),l(116,"code"),s(117,'"/"'),c(),s(118," used to define how the endpoint matches the URL Path, by splitting the URL path into segments and matching each segment with the route pattern segment in the same corresponding order. "),c(),l(119,"p"),s(120," The segment pattern can be literal or parameter enclosed in curly brackets "),l(121,"code"),s(122,'"{ }"'),c(),s(123," to hold a potential value of its corresponding matched URL segment, and this parameter can be mandatory or optionally by adding interrogation point "),l(124,"code"),s(125,'"?"'),c(),s(126," or it can have a default value using the equal sign "),l(127,"code"),s(128,'"="'),c(),s(129," after the route parameter name followed by a value. "),c(),l(130,"p"),s(131," The following code example shows a simple get route with a callback request handler, that retrieves the value of the parameter "),l(132,"code"),s(133,"{id}"),c(),s(134," from "),l(135,"code"),s(136,"HttpContext"),c(),s(137," to look for a product in the repository and then returns the data as a JSON response. "),c(),l(138,"pre")(139,"code",4),s(140,'...\n$app->useEndpoint(function($routes) {\n $routes->mapGet("/api/products/{id?}", function(HttpContext $context) {\n $id = $context->Request->RouteValues["id"];\n $product = ProductRepository::find($id);\n return $context->Response->writeJsonAsync($product);\n });\n});'),c()(),l(141,"p"),s(142," The following table demonstrates a list of route templates examples: "),c(),l(143,"table",5)(144,"thead")(145,"tr")(146,"th",8),s(147,"Route template"),c(),l(148,"th",8),s(149,"Matching URL example"),c()()(),l(150,"tbody")(151,"tr")(152,"td"),s(153,"/contact"),c(),l(154,"td"),s(155,"/contact"),c()(),l(156,"tr")(157,"td"),s(158,"/{language}/shop"),c(),l(159,"td"),s(160,"/en/shop"),c()(),l(161,"tr")(162,"td"),s(163,"/posts/{title?}"),c(),l(164,"td"),s(165,"/posts or /posts/my-post"),c()(),l(166,"tr")(167,"td"),s(168,"/{page=home}"),c(),l(169,"td"),s(170,"/ or /about"),c()()()(),l(171,"blockquote",9)(172,"b"),s(173,"Important:"),c(),s(174," The order of the routes is important, if a route matches the request URL, it will not check the next route, so make sure to not put a route with a greedy pattern at the top, because it will catch all the URLs. "),c(),y(175,"br"),l(176,"h3"),s(177,"Attribute Routing"),c(),l(178,"p"),s(179," Attribute routing is a technique that allows routes to be defined directly on the controller actions by using attributes that specify the URL patterns and HTTP methods that match the HTTP requests, giving more control and flexibility over the routing behavior. "),c(),l(180,"p"),s(181," The following code example shows how to map routes to MVC controllers. "),c(),l(182,"pre")(183,"code",4),s(184,"...\n$app->useEndpoint(function($routes) {\n $routes->mapControllers();\n});"),c()(),l(185,"p"),s(186," Then, you can use attributes to decorate your controller's action methods with their associated routes. "),c(),l(187,"pre")(188,"code",4),s(189,"view();\n }\n\n // Accept only the HTTP method GET.\n #[Route(path: '/contact', method: 'GET')]\n public function contact(): IActionResult\n {\n return $this->view();\n }\n\n // Accept only the HTTP method POST.\n #[Route(path: '/contact/submit', method: 'POST')]\n public function submit(string $subject, string $message): IActionResult\n {\n mail(\"email@example.com\", $subject, $message);\n return $this->statusCode(200);\n }\n}"),c()()(),l(190,"nav",10)(191,"ul",11)(192,"li",12)(193,"a",13),y(194,"i",14),s(195," Previous "),c()(),l(196,"li",12)(197,"a",15),s(198," Next "),y(199,"i",16),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/web/controller",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["web-controller"]],decls:179,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],["src","assets/images/mvc.svg","alt","Web app home page","width","80%","height","auto"],[1,"language-shell"],[1,"language-php"],[1,"table"],["scope","col"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/web/routing",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/web/view",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Controller"),c(),y(8,"hr"),l(9,"p"),s(10," A controller is one of the important components of the architectural pattern MVC (Model View Controller) which helps to achieve the separation of concerns, it is the brain of the application that controls how the data is displayed, where each browser request is mapped to a particular method of a particular controller class called Action, and this action will handle the HTTP request and return data as HTTP response via the view engine. "),c(),y(11,"img",4)(12,"br")(13,"br")(14,"br"),l(15,"h3"),s(16,"Adding Controller Class"),c(),l(17,"p"),s(18," Controller class can be created manually or by using the devnet command-line: "),c(),l(19,"pre")(20,"code",5),s(21,"devnet add controller --name HomeController"),c()(),l(22,"p"),s(23," The class below represent an example of a controller class named "),l(24,"code"),s(25,"HomeController"),c(),s(26," extends a "),l(27,"code"),s(28,"Controller"),c(),s(29," base class to inherit some MVC features, and has one action method called "),l(30,"code"),s(31,"index()"),c(),s(32," that returns an instance of "),l(33,"code"),s(34,"IActionResult"),c(),s(35,", with a content of "),l(36,"samp"),s(37,'"Hello World!"'),c(),s(38," as a response."),y(39,"br"),c(),l(40,"pre")(41,"code",6),s(42,"content(\"Hello World!\");\n }\n}"),c()(),y(43,"br"),l(44,"h3"),s(45,"Action Result"),c(),l(46,"p"),s(47," The action result represents the result of the action method, which returns a HTTP response. "),c(),l(48,"p"),s(49," The following table shows a list of controller methods that return an action result for different kinds of responses: "),c(),l(50,"table",7)(51,"thead")(52,"tr")(53,"th",8),s(54,"Method"),c(),l(55,"th",8),s(56,"Description"),c()()(),l(57,"tbody")(58,"tr")(59,"td")(60,"code"),s(61,"view(object|array $data, ?string $name): IActionResult"),c()(),l(62,"td"),s(63,"Return HTML content result"),c()(),l(64,"tr")(65,"td")(66,"code"),s(67,"json(object|array $data): IActionResult"),c()(),l(68,"td"),s(69,"Return JSON data result"),c()(),l(70,"tr")(71,"td")(72,"code"),s(73,"content(string $content, ?string $contentType): IActionResult"),c()(),l(74,"td"),s(75,"Return text content result"),c()(),l(76,"tr")(77,"td")(78,"code"),s(79,"file(string $path, ?string $contentType): IActionResult"),c()(),l(80,"td"),s(81,"Return HTML content result"),c()(),l(82,"tr")(83,"td")(84,"code"),s(85,"redirect(string $url): IActionResult"),c()(),l(86,"td"),s(87,"Redirect the request to the giving path"),c()(),l(88,"tr")(89,"td")(90,"code"),s(91,"statusCode(int $code): IActionResult"),c()(),l(92,"td"),s(93,"Return HTTP status code result"),c()()()(),y(94,"br"),l(95,"h3"),s(96,"Async Action"),c(),l(97,"p"),s(98," DevNet Controller can use async method to handle the HTTP request asynchronously. "),c(),l(99,"pre")(100,"code",6),s(101,"content($content);\n }\n}"),c()(),y(102,"br"),l(103,"h3"),s(104,"Model binding"),c(),l(105,"p"),s(106," Model Bidding is a mechanism that retrieves data from the HTTP request and provides it to the controller action method parameters as simple data types or updates the data into the properties of a complex type parameter. "),c(),l(107,"p"),s(108," It automates the process of retrieving data from various sources, such as: "),c(),l(109,"ul")(110,"li"),s(111,"Route data."),c(),l(112,"li"),s(113,"Query strings."),c(),l(114,"li"),s(115,"Form fields."),c(),l(116,"li"),s(117,"Uploaded files."),c()(),l(118,"h4"),s(119,"Simple type binding"),c(),l(120,"p"),s(121," Simple model bidding is a technique that automatically assigns values to the controller action method parameters that have the same names as the request data and are of simple types such as string, int, or bool, etc. "),c(),l(122,"p"),s(123," The following example shows how the Model Binder maps the route data and query string to the controller action method parameters of simple types. "),c(),l(124,"pre")(125,"code",6),s(126,"content(\"Excerpt from the content of the post: {$id}\");\n }\n\n return $this->content(\"The full content of the post: {$id}\");\n }\n}"),c()(),l(127,"p"),s(128," Assuming the user requests the following URL: "),l(129,"samp"),s(130,'"/posts/1/?excerpt=true"'),c(),y(131,"br"),s(132," The model binder will retrieve the value "),l(133,"code"),s(134,"1"),c(),s(135," from the route data and provide it to the "),l(136,"code"),s(137,"$id"),c(),s(138," parameter and the value "),l(139,"code"),s(140,"true"),c(),s(141," from the query string to the "),l(142,"code"),s(143,"$excerpt"),c(),s(144," parameter. "),c(),y(145,"br"),l(146,"h4"),s(147,"Complex type binding"),c(),l(148,"p"),s(149," The complex-type binding is an automatic way of mapping the request data to the public properties of an object that is passed as a parameter to a controller action method. This provides easy access to the data of the HTTP request without having to parse it manually. "),c(),l(150,"p"),s(151," The code example below shows a controller with a "),l(152,"code"),s(153,"send()"),c(),s(154," action method that accepts a complex type parameter of type "),l(155,"code"),s(156,"Contact"),c(),s(157,", where the Model Binder automatically populates the request form data into the public properties of the Contact object, which is used to validate the data before sending it via email when the user submits the contact form. "),c(),l(158,"pre")(159,"code",6),s(160,"isValid()) {\n return $this->content(\"All required fields must be filled out!\");\n }\n\n mail(\"email@example.com\", $form->Subject, $form->Message);\n return $this->statusCode(200);\n }\n}"),c()(),l(161,"p"),s(162," And here is the code for the "),l(163,"code"),s(164,"Contact"),c(),s(165," model that is used as a parameter in the controller action method.\n"),c(),l(166,"pre")(167,"code",6),s(168,"Subject) && isset($this->Message)) {\n return true\n }\n\n return false;\n }\n}"),c()()(),l(169,"nav",9)(170,"ul",10)(171,"li",11)(172,"a",12),y(173,"i",13),s(174," Previous "),c()(),l(175,"li",11)(176,"a",14),s(177," Next "),y(178,"i",15),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/web/view",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["web-view"]],decls:240,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php-template"],[1,"alert","alert-warning"],[1,"language-php"],[1,"alert","alert-info"],["target","_blank","href","https://www.php.net/manual/en/control-structures.alternative-syntax.php"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/web/controller",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/web/filter",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Views"),c(),y(8,"hr"),l(9,"p"),s(10," Views are the presentation details of the user\u2019s interaction, in form of HTML templates with minimal of embedded PHP code that generate content to send to the client, views are "),l(11,"samp"),s(12,".phtml"),c(),s(13," files stored by default in a Views folder at the root of the application, typically each controller will have its own folder, in which are views for specific controller actions. "),c(),l(14,"p"),s(15," By convention, all the views stored in the folder called "),l(16,"b"),s(17,'"Views"'),c(),s(18,", grouped into sub-folders have the same name as the the name of the controller they belong to, and each view file has the same name as the name of the action that return it. "),c(),l(19,"p"),s(20," The following code represent a view template with a sample HTML code, stored in "),l(21,"code"),s(22,'"/Views/Home/index.phtml"'),c(),y(23,"br"),s(24," assuming that the controller name is "),l(25,"b"),s(26,'"Home"'),c(),s(27," and the action name is "),l(28,"b"),s(29,'"index"'),c(),s(30,". "),c(),l(31,"pre")(32,"code",4),s(33,'\n\n\n \n \n <?= $viewName ?>\n\n\n

Hello World!

\n\n'),c()(),l(34,"blockquote",5)(35,"b"),s(36,"Important:"),c(),s(37," DevNet view engine uses its own PHP short tag syntax "),l(38,"code"),s(39,""),c(),s(40," without causing any conflict with XML tags, and there is no need to enable it in "),l(41,"samp"),s(42,'"php.ini"'),c()(),y(43,"br"),l(44,"h3"),s(45,"Returning the View"),c(),l(46,"p"),s(47," Typically views are returned from actions as a "),l(48,"code"),s(49,"ViewResult"),c(),s(50,", which is a type of "),l(51,"code"),s(52,"IActionResult"),c(),s(53,", the Action method can create and return a ViewResult directly, but that isn't commonly done, since controllers inherit from Controller base class, you simply use the method "),l(54,"code"),s(55,"view()"),c(),s(56," to return the ViewResult. "),c(),l(57,"pre")(58,"code",6),s(59,"view();\n }\n}"),c()(),y(60,"br"),l(61,"h4"),s(62,"Returning Explicit View"),c(),l(63,"p"),s(64," If your view doesn't follow the naming convention, you can return an explicit view, by passing a string argument to view method that define a relative path to the view file without the extension file "),l(65,"samp"),s(66,'".phtml"'),c()(),l(67,"p"),s(68," The following code shows an example of controller with action "),l(69,"code"),s(70,"index"),c(),s(71," that returns a content of an explicit view called "),l(72,"samp"),s(73,'"home.phtml"'),c(),s(74,", belong to the folder "),l(75,"samp"),s(76,'"Template"'),c()(),l(77,"pre")(78,"code",6),s(79,'view(name: "Template/home");\n }\n}'),c()(),y(80,"br"),l(81,"h3"),s(82,"Passing data to the view"),c(),l(83,"p"),s(84," The view data is an MVC communication mechanism for passing data from the controller's action method to the view. The data is passed as a key-value array argument and can then be retrieved in the view by accessing its corresponding keys in the ViewData property or by using variables with the same names as the keys. "),c(),l(85,"p"),s(86," Here is an example of a controller that passes key-value data to the view. "),c(),l(87,"pre")(88,"code",6),s(89," 'MySite',\n 'page' => 'Home'\n ];\n return $this->view($data);\n }\n}"),c()(),l(90,"p"),s(91," And here is an example of a view that retrieves the passed data by accessing the keys of the ViewData property. "),c(),l(92,"pre")(93,"code",4),s(94,'\n\n\n \n \n <?= $this->ViewData[\'site\'] . \'-\' . $this->ViewData[\'page\'] ?><title>\n ...\n'),c()(),l(95,"p"),s(96," Or, retrieve the view data as variables with the same names as the keys of the ViewData property. "),c(),l(97,"pre")(98,"code",4),s(99,'<!DOCTYPE html>\n<html lang="en">\n<head>\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n <title><?= $site . \'-\' . $page ?><title>\n ...\n'),c()(),y(100,"br"),l(101,"h3"),s(102,"Layout"),c(),l(103,"p"),s(104," The layout or master page is common UI (User Interface) a template of common HTML elements that remains the same throughout the application, such as header, navigation bar, or footer section, to reduce duplicate code in views and make it easy to maintain. "),c(),l(105,"p"),s(106," By default layouts placed in the folder "),l(107,"samp"),s(108,'"/views/layouts"'),c(),s(109," and, an individual views can specify a layout by calling the method "),l(110,"code"),s(111,"layout(string $layoutName)"),c(),s(112,", the string parameter "),l(113,"code"),s(114,"$layoutName"),c(),s(115," define the relative path to the layout file without the extension file "),l(116,"samp"),s(117,'".phtml"'),c(),s(118," as shown in the following example: "),c(),l(119,"pre")(120,"code",4),s(121,"<? $this->layout('Shared/layout') ?>\n \n<h1>Hello World!</h1>"),c()(),l(122,"p"),s(123," Layout can include the view contents, by calling the method "),l(124,"code"),s(125,"renderBody()"),c(),s(126," and wherever the call to this method is placed, the contents of the view will be rendered. "),c(),l(127,"p"),s(128," In this example the view engin catch the content "),l(129,"code"),s(130,"<h1>Hello World!</h1>"),c(),s(131," of the view and rendered it into the body of the layout where the method "),l(132,"code"),s(133,"renderBody()"),c(),s(134," is called. "),c(),l(135,"pre")(136,"code",4),s(137,'<!DOCTYPE html>\n<html lang="en">\n<head>\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n <link rel="stylesheet" type="text/css" href="/css/style.css" />\n <title>DevNet\n\n\n
\n \n
\n
\n renderBody() ?>\n
\n\n'),c()(),y(138,"br"),l(139,"h4"),s(140,"Partial views"),c(),l(141,"p"),s(142," A partial view is a reusable portion of the layout, which means Layout can be split into many files that contains HTML code, It can be used in one or more views or layout views, You can use the same partial view at multiple places and eliminates the redundant code. "),c(),l(143,"pre")(144,"code",4),s(145,'\n\n\n \n \n \n DevNet\n\n\n
\n renderPartial(\'Shared/navbar\') ?>\n
\n
\n renderBody() ?>\n
\n\n'),c()(),l(146,"p"),s(147," The code below is the content of the partial view in separated file: "),l(148,"samp"),s(149,'"/Views/layouts/navbar.phtml"'),c(),s(150,". "),c(),l(151,"pre")(152,"code",4),s(153,''),c()(),y(154,"br"),l(155,"h4"),s(156,"Sections"),c(),l(157,"p"),s(158," Sections provide a dynamic way to organize where certain page elements should be placed, unlike the partial view which they remains the same throughout all the application, sections can be changed for each view. "),c(),l(159,"p"),s(160," To be able to use a section in a layout, we must first define a section in the view, by writing a block of content between the methods "),l(161,"code"),s(162,"section(string $sectionName)"),c(),s(163," and "),l(164,"code"),s(165,"endSection()"),c(),s(166," and give a ane to the section, which help us later to select which section to be rendered in the layout. "),c(),l(167,"pre")(168,"code",4),s(169,"layout('Shared/layout') ?>\n \n

Hello World!

\n\nsection('sidebar') ?>\n
    \n
  • \n
  • \n
\nendSection() ?>"),c()(),l(170,"p"),s(171," A layout can include one or more view sections, by calling the method "),l(172,"code"),s(173,"RenderSection(string $sectionName)"),c(),s(174," with specifying the name of the section be rendered, and where the call of this method is placed, the view section contents will be rendered. "),c(),l(175,"pre")(176,"code",4),s(177,'\n\n\n \n \n \n DevNet\n\n\n
\n renderPartial(\'Shared/navbar\') ?>\n
\n
\n \n
\n renderBody() ?>\n
\n
\n\n'),c()(),y(178,"br"),l(179,"h3"),s(180,"The control structures"),c(),l(181,"p"),s(182," DevNet view engine uses the PHP alternative syntax for control structures, such as "),l(183,"code"),s(184,"if"),c(),s(185,", "),l(186,"code"),s(187,"while"),c(),s(188,", "),l(189,"code"),s(190,"for"),c(),s(191,", "),l(192,"code"),s(193,"foreach"),c(),s(194,", and "),l(195,"code"),s(196,"switch"),c(),s(197,", which use the colon ("),l(198,"code"),s(199,":"),c(),s(200,") instead of opening brace and the "),l(201,"code"),s(202,"endif;"),c(),s(203,", "),l(204,"code"),s(205,"endwhile;"),c(),s(206,", "),l(207,"code"),s(208,"endfor;"),c(),s(209,", "),l(210,"code"),s(211,"endforeach;"),c(),s(212,", or "),l(213,"code"),s(214,"endswitch;"),c(),s(215,", respectively, instead of the closing brace. "),c(),l(216,"p"),s(217," The following example uses the alternative syntax of the "),l(218,"code"),s(219,"if"),c(),s(220," statement to display different navbars based on the user's authentication status, where the user identity is injected into the view by default when using the MVC controller. "),c(),l(221,"pre")(222,"code",4),s(223,'\n\n\n \n \n \n DevNet\n\n\n
\n User->isAuthenticated()): ?>\n renderPartial(\'Shared/authenticatedUserNavbar\') ?>\n \n renderPartial(\'Shared/anonymousUserNavbar\') ?>\n \n
\n
\n renderBody() ?>\n
\n\n'),c()(),l(224,"blockquote",7)(225,"b"),s(226,"Note:"),c(),s(227," For more information about the PHP alternative syntax, you can visit the PHP documentation website "),l(228,"a",8),s(229,"here"),c()()(),l(230,"nav",9)(231,"ul",10)(232,"li",11)(233,"a",12),y(234,"i",13),s(235," Previous "),c()(),l(236,"li",11)(237,"a",14),s(238," Next "),y(239,"i",15),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/web/filter",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["web-filter"]],decls:67,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"table"],["scope","col"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/web/layout",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/web/exception",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Action Filters"),c(),y(8,"hr"),l(9,"p"),s(10," Action Filters are similar to Middlewares, they allow code to be run before or after specific stages in the request processing pipeline and can choose to short-circuit the pipeline or pass the request to the next filter or the endpoint action, but the difference is that the action filters are invoked after the dispatcher selects the action to execute, just before and after the execution of the action. "),c(),l(11,"p"),s(12," The following code example represents an action filter class called "),l(13,"code"),s(14,"AuthenticationFilter"),c(),s(15," that prevents accessing the requested resources if the user is not authenticated. "),c(),l(16,"pre")(17,"code",4),s(18,"HttpContext->User) {\n $context->HttpContext->Response->setStatusCode(401);\n return;\n }\n // Await next action delegate to chain the pipeline to the next filter before executing the action.\n await($next($context));\n // Logging or other works can be done here after executing the action.\n }\n}\n"),c()(),y(19,"br"),l(20,"h3"),s(21,"Registering action filters"),c(),l(22,"p"),s(23," The code example below shows how to add action filters to the route endpoint handler as class or as an anonymous async function, with the help of the method "),l(24,"code"),s(25,"RouteHandler::addFilter(callable|string $filter, ...$args)"),c()(),l(26,"pre")(27,"code",4),s(28,'start(function ($app) {\n // Middlewares\n $app->UseExceptionHandler();\n $app->useRouter();\n $app->useEndpoint(function ($routes) {\n $routes->mapGet("/users", function ($httpContext) {\n // Code...\n })\n // Adding action filter class.\n ->addFilter(AuthenticationFilter::class)\n\n // Adding in-line action filter as anonymous async function.\n ->addFilter(async(function ($actionContext, $next)) {\n // Some works can be done here before executing the action.\n await($next);\n // Other works can be done here after executing the action.\n }));\n\n // Other routes.\n });\n});'),c()(),l(29,"p"),s(30," You can apply the action filter to a controller using the attribute syntax and decorate the controller class or the action method with the filter name, as shown in the following code example.\n"),c(),l(31,"pre")(32,"code",4),s(33,"view();\n }\n\n // This filter will be applied only to this action method.\n #[Validate]\n #[Route(path: '/user/create', method: 'POST')]\n public function create(Profile $form): IActionResult\n {\n // Code...\n }\n}\n"),c()(),y(34,"br"),l(35,"h3"),s(36,"Built-in filters"),c(),l(37,"table",5)(38,"thead")(39,"tr")(40,"th",6),s(41,"Filter"),c(),l(42,"th",6),s(43,"Description"),c()()(),l(44,"tbody")(45,"tr")(46,"td")(47,"code"),s(48,"DevNet\\Web\\Security\\Authorization\\Authorize"),c()(),l(49,"td"),s(50,"Prevent a non-authorized user from accessing the resources."),c()(),l(51,"tr")(52,"td")(53,"code"),s(54,"DevNet\\Web\\Security\\Tokens\\Csrf\\Validate"),c()(),l(55,"td"),s(56,"Prevent Cross-Site Request Forgery"),c()()()()(),l(57,"nav",7)(58,"ul",8)(59,"li",9)(60,"a",10),y(61,"i",11),s(62," Previous "),c()(),l(63,"li",9)(64,"a",12),s(65," Next "),y(66,"i",13),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/web/dependency",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["web-dependency"]],decls:161,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"table"],["scope","col"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/web/exception",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/security/overview",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Dependency Injection"),c(),y(8,"hr"),l(9,"p"),s(10," Dependency injection (DI) is a technique for achieving loose coupling between objects and dependencies rather than directly instantiating dependencies or using static references, most often the dependency objects are provided to the class which depends on, via constructor injection declaration, allowing them to follow the Explicit Dependencies Principle. "),c(),l(11,"p"),s(12," The following code represents a class "),l(13,"code"),s(14,"MyService"),c(),s(15," that depends on the class "),l(16,"code"),s(17,"MyDependency"),c(),s(18,", which will be injected automatically into its constructor by the service container. "),c(),l(19,"pre")(20,"code",4),s(21,"Dependency = $dependency;\n }\n}\n"),c()(),y(22,"br"),l(23,"h2"),s(24,"Service Container"),c(),l(25,"p"),s(26," Service Container is an implementation of Dependency Injection Container (aka Inversion of Controller Container), a system that implements an automatic dependency injection, it creates an object of the specified class as a service and injects all the dependency objects through their constructor by its type and manages its lifetime, whether Transient or Singleton lifetime. "),c(),l(27,"h5"),s(28,"Transient"),c(),l(29,"p"),s(30," Transient lifetime services are created each time they're requested from the service container. This lifetime works best for lightweight, stateless services. "),c(),l(31,"h5"),s(32,"Singleton"),c(),l(33,"p"),s(34," Singleton lifetime services are created only once, and Every subsequent request uses the same instance in the application life cycle. "),c(),l(35,"h2"),s(36,"Registering services"),c(),l(37,"p"),s(38," Typically the method "),l(39,"code"),s(40,"WebHostBuilder::register(IServiceCollection $services)"),c(),s(41," is responsible for defining the services that will be used throw your application without hard coding, and you can add services to the container with complex dependencies by using one of the following methods: "),c(),l(42,"ul")(43,"li")(44,"code"),s(45,"IServiceCollection::addSingleton(String $serviceType, String|Object|Closure $service);"),c()(),l(46,"li")(47,"code"),s(48,"IServiceCollection::addTransient(String $serviceType, String|Object|Closure $service);"),c()()(),l(49,"p"),s(50," Services are defined by the same service type class, parent class, or interface that the service is implementing, which will be used later to call the service from the service provider. "),c(),l(51,"p"),s(52," The following code shows an example of registering two services, "),l(53,"code"),s(54,"MyDependency"),c(),s(55," registered with Transient lifetime, defined by the same service type, and "),l(56,"code"),s(57,"MyService"),c(),s(58," with singleton lifetime defined by "),l(59,"code"),s(60,"IMyService"),c(),s(61," interface: "),c(),l(62,"pre")(63,"code",4),s(64,"register(function ($services) {\n // Adding services\n $services->addTransient(MyDependency::class);\n $services->addSingleton(IMyService::class, MyService::class);\n });\n ...\n }\n}\n"),c()(),y(65,"br"),l(66,"h3"),s(67,"Registering services using custom factory"),c(),l(68,"p"),s(69," Devnet Service container uses Service Activator to create your dependency when you call it, but if you want to resolve the instantiation of your dependency in your way, DevNet service container allows you to implement your own factory using a closure function that has "),l(70,"code"),s(71,"IServiceProvider"),c(),s(72," parameter to allow you to call any service registered within "),l(73,"code"),s(74,"IServiceCollection"),c(),s(75," and use it as a dependency for your service creation process as shown in the following example: "),c(),l(76,"pre")(77,"code",4),s(78,"register(function ($services) {\n $services->addSingleton(IService::class,\n fn($provider) => new MyService($provider->getService(MyDependency::class)));\n \n $services->addTransient(MyDependency::class);\n });\n ...\n }\n}\n"),c()(),y(79,"br"),l(80,"h3"),s(81,"Requesting Services"),c(),l(82,"p"),s(83," Services can be requested by their type using the method "),l(84,"code"),s(85,"IServiceProvider::getService(string $type)"),c(),s(86,", which can be accessible from the property "),l(87,"code"),s(88,"HttpContext::Services"),c(),s(89,", like in the following example. "),c(),l(90,"pre")(91,"code",4),s(92,'\n...\n$app->useEndpoint(function($routes) {\n $routes->mapGet("/service", function(HttpContext $context) {\n // Getting the services\n $service1 = $context->Services->getService(IService::class);\n $service2 = $context->Services->getService(MyService::class);\n // Code...\n });\n});\n'),c()(),y(93,"br"),l(94,"h3"),s(95,"Requesting services through controller"),c(),l(96,"p"),s(97," Services are injected into controllers as a constructor parameter during the creation of the controller, the service activator resolves the services from "),l(98,"code"),s(99,"IServiceCollection"),c(),s(100," that matches the parameter types of the controller's constructor and injects them into it automatically. "),c(),l(101,"pre")(102,"code",4),s(103,"MyService = $myService;\n }\n ...\n}\n"),c()(),y(104,"br"),l(105,"h3"),s(106,"Built-in services"),c(),l(107,"table",5)(108,"thead")(109,"tr")(110,"th",6),s(111,"Method"),c(),l(112,"th",6),s(113,"Description"),c()()(),l(114,"tbody")(115,"tr")(116,"td")(117,"code"),s(118,"addAntiforgery(?Closure $configuration)"),c()(),l(119,"td"),s(120,"Register IAntiforgery service."),c()(),l(121,"tr")(122,"td")(123,"code"),s(124,"addAuthentication(?Closure $configuration)"),c()(),l(125,"td"),s(126,"Register IAuthentication service."),c()(),l(127,"tr")(128,"td")(129,"code"),s(130,"addAuthorization(?Closure $configuration)"),c()(),l(131,"td"),s(132,"Register IAuthorization service."),c()(),l(133,"tr")(134,"td")(135,"code"),s(136,"addEntityContext(?Closure $configuration)"),c()(),l(137,"td"),s(138,"Register EntityContext service."),c()(),l(139,"tr")(140,"td")(141,"code"),s(142,"addHttpClient(?Closure $configuration)"),c()(),l(143,"td"),s(144,"Register HttpClient service."),c()(),l(145,"tr")(146,"td")(147,"code"),s(148,"addLogging(?Closure $configuration)"),c()(),l(149,"td"),s(150,"Register ILoggerFactory service."),c()()()()(),l(151,"nav",7)(152,"ul",8)(153,"li",9)(154,"a",10),y(155,"i",11),s(156," Previous "),c()(),l(157,"li",9)(158,"a",12),s(159," Next "),y(160,"i",13),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/web/exception",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["web-exception"]],decls:90,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"language-json"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/web/filter",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/web/dependency",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Exception Handler"),c(),y(8,"hr"),l(9,"p"),s(10," The exception handler is a middleware that displays detailed information about unhandled request exceptions, it's the first middleware that runs in the request pipeline so that it can catch all the unhandled exceptions thrown in the middleware that follows. "),c(),l(11,"h3"),s(12,"Registering the Exception Handler"),c(),l(13,"p"),s(14," Exception Handler is enabled through the method "),l(15,"code"),s(16,"WebHost::start(Closure $configure)"),c(),s(17," by calling the extension method "),l(18,"code"),s(19,"ApplicationBuilderExtensions::useExceptionHandler()"),c(),s(20," of the Application builder, which adds the pre-built middleware "),l(21,"code"),s(22,"ExceptionHandlerMiddleware"),c(),s(23," to the request pipeline, and must be in the top order of all middlewares. "),c(),l(24,"pre")(25,"code",4),s(26,"start(function ($app) {\n // Registering the exception handler in the top order.\n $app->useExceptionHandler();\n // Some middlewares here.\n});\n"),c()(),y(27,"br"),l(28,"h3"),s(29,"Custom error handling"),c(),l(30,"p"),s(31," The default configuration of the exception handler displays the Developer Exception page that shows detailed information about the error exception, which is very useful for debugging, but it is not recommended for deploying the application in the production environment, instead you need to handle the errors differently with a custom error handler, e.g. log the errors and return only the status code. "),c(),l(32,"p"),s(33," The following example shows how to register an exception handler that redirects the errors to a custom error handler endpoint to handle the errors differently. "),c(),l(34,"pre")(35,"code",4),s(36,'start(function ($app) {\n // Registering an exception handler that redirects the errors to a custom error handler.\n $app->useExceptionHandler("/error");\n $app->useRouter();\n $app->useEndpoint(function ($routes) {\n $routes->mapGet("/", fn () => "Hello World!");\n // The custom error handler endpoint.\n $routes->mapGet("/error", function ($context) {\n $error = $context->Items->getValue(\'ErrorException\');\n $code = $error ? $error->getCode() : 404;\n $code = $error instanceof HttpException ? $code : 500;\n if ($code == 401) {\n $context->Response->redirect(\'/login\');\n } else {\n $context->Response->setStatusCode($code);\n // You may need to log the error message here.\n // e.g. Logger::log(LogLevel::Error, $error->getMessage());\n }\n });\n });\n});\n'),c()(),y(37,"br"),l(38,"h3"),s(39,"Runtime environment"),c(),l(40,"p"),s(41," The DevNet web application can determine the runtime environment by reading the environment variable "),l(42,"samp")(43,"b"),s(44,"DEVNET_ENVIRONMENT"),c()(),s(45," from your system environment variables or from the "),l(46,"samp"),s(47,'"lunch.json"'),c(),s(48," file of Visual Studio Code, which can have two values: "),l(49,"code"),s(50,"development"),c(),s(51," or "),l(52,"code"),s(53,"production"),c(),s(54,", so you can use it as an advantage to control the error-handling behavior of your application. "),c(),l(55,"p"),s(56," The environment variable "),l(57,"samp")(58,"b"),s(59,"DEVNET_ENVIRONMENT"),c()(),s(60," is set to "),l(61,"code"),s(62,"development"),c(),s(63," in the "),l(64,"samp"),s(65,'"lunch.json"'),c(),s(66," file, so when you debug your application, it runs in development mode. "),c(),l(67,"pre")(68,"code",5),s(69,'"configurations": [\n {\n "name": "Launch Built-in web server",\n "type": "php",\n "request": "launch",\n "cwd": "${workspaceRoot}/webroot",\n "runtimeArgs": [\n "-dxdebug.mode=debug",\n "-dxdebug.start_with_request=yes",\n "-S",\n "localhost:8000"\n ],\n "env": {\n "DEVNET_ENVIRONMENT": "development"\n }\n }\n]\n'),c()(),y(70,"br"),l(71,"h4"),s(72,"Controlling the error-handling conditions"),c(),l(73,"p"),s(74," By default, the Developer Exception page is enabled when the runtime environment is set to development mode, without the need to register it, but that can be controlled by adding a condition in your application pipeline to use a custom exception handler if the runtime environment is not in development mode. "),c(),l(75,"pre")(76,"code",4),s(77,'start(function ($app) {\n if (!$app->Environment->isDevolvement()) {\n $app->useExceptionHandler("/error");\n }\n // The rest of middlewares.\n ...\n});\n'),c()(),l(78,"p"),s(79," In this way, your application will run in development or production mode, depending on the runtime environment of your system or your application. "),c()(),l(80,"nav",6)(81,"ul",7)(82,"li",8)(83,"a",9),y(84,"i",10),s(85," Previous "),c()(),l(86,"li",8)(87,"a",11),s(88," Next "),y(89,"i",12),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/web",redirectTo:"docs/web/start",pathMatch:"full"}];let r$=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[jt.forChild(n$),jt]})}return e})(),o$=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[Yr,r$,So]})}return e})();const i$=[{path:"docs/entity/start",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["entity-start"]],decls:210,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],["src","assets/images/orm.svg","width","100%","height","auto"],[1,"language-shell"],[1,"language-php"],[1,"table"],["scope","col"],[1,"language-json"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/security/antiforgery",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/entity/query",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Get Started"),c(),y(8,"hr"),l(9,"p"),s(10," Entity ORM (Object-relational Mapping) is a system that offers an automated mechanism to developers for accessing and storing the data in the database in an object-oriented way, by performing the work required to map between Entities defined in an application's programming language as classes and data stored in relational data sources as tables, without needing the data-access code to be written. "),c(),l(11,"p"),s(12," The following diagram is an abstraction of Entity ORM architecture. "),c(),y(13,"img",4)(14,"br")(15,"br"),l(16,"p")(17,"b"),s(18,"EntityContext:"),c(),s(19," is an implementation of the Unit of work pattern, represents a gateway to the database by providing an API to communicate with the database with the following capabilities: "),c(),l(20,"ul")(21,"li"),s(22,"Database Connections"),c(),l(23,"li"),s(24,"Data querying and persistance"),c(),l(25,"li"),s(26,"Change Tracking"),c(),l(27,"li"),s(28,"Model building"),c(),l(29,"li"),s(30,"Data Mapping"),c(),l(31,"li"),s(32,"Transaction management"),c()(),l(33,"p")(34,"b"),s(35,"EntitySet:"),c(),s(36," is an implementation of the Repository pattern, a class that holds a collection of entities of the same type related to a table in the database, and each entity is an instance that represents a data row in that table. "),c(),y(37,"br"),l(38,"h3"),s(39,"Installation"),c(),l(40,"p"),s(41," If the DevNet framework is not fully installed, you can install the Entity ORM package into your project using Composer by running the following command in your terminal: "),c(),l(42,"pre")(43,"code",5),s(44,"composer require devnet/entity"),c()(),y(45,"br"),l(46,"h3"),s(47,"Defining the EntityContext"),c(),l(48,"p"),s(49," The recommended way to work with Entity ORM is to define a context class in the "),l(50,"b"),s(51,'"Models"'),c(),s(52," folder that derives from "),l(53,"code"),s(54,"DevNet\\Entity\\EntityContext"),c(),s(55," and exposes "),l(56,"code"),s(57,"DevNet\\Entity\\EntitySet"),c(),s(58," properties that represent collections of the specified entities in the context, as shown in the following example. "),c(),l(59,"pre")(60,"code",6),s(61,"Posts = $this->set(Post::class);\n }\n}\n"),c()(),y(62,"br"),l(63,"h4"),s(64,"Entity Type"),c(),l(65,"p"),s(66," By convention, the entity types that are exposed in "),l(67,"code"),s(68,"EntitySet"),c(),s(69," properties in "),l(70,"code"),s(71,"EntityContext"),c(),s(72," are included in the model and mapped automatically to the database tables based on their shape. "),c(),l(73,"ul")(74,"li"),s(75," Each entity class will be mapped automatically to the corresponding database table with the same name. "),c(),l(76,"li"),s(77," Each public property will be mapped to the corresponding column with the same name in the table. "),c(),l(78,"li"),s(79," By default, the property that is named "),l(80,"b"),s(81,'"Id"'),c(),s(82," will be considered as the primary key. "),c()(),l(83,"p"),s(84," The following code example is the entity class "),l(85,"code"),s(86,"Application\\Models\\Post"),c(),s(87," used in the previous context, and it represents the "),l(88,"b"),s(89,'"Post"'),c(),s(90," table in the database where the properties represent the columns of that table. "),c(),l(91,"pre")(92,"code",6),s(93,"ProviderType = SqliteDataProvider::class;\n$options->ConnectionString = "/path/to/database.db3";\n\n$blog = new BlogContext($options);\n$posts = $blog->Posts;\n'),c()(),y(121,"br"),l(122,"h4"),s(123,"Database Providers"),c(),l(124,"p"),s(125," The following table shows a list of database providers that are supported by Entity ORM. "),c(),l(126,"table",7)(127,"thead")(128,"tr")(129,"th",8),s(130,"Database Provider"),c(),l(131,"th",8),s(132,"Database Engine"),c()()(),l(133,"tbody")(134,"tr")(135,"td")(136,"code"),s(137,"DevNet\\Entity\\MySql\\MySqlDataProvider"),c()(),l(138,"td"),s(139,"MySql"),c()(),l(140,"tr")(141,"td")(142,"code"),s(143,"DevNet\\Entity\\PgSql\\PgSqlDataProvider"),c()(),l(144,"td"),s(145,"PostgreSql"),c()(),l(146,"tr")(147,"td")(148,"code"),s(149,"DevNet\\Entity\\Sqlite\\SqliteDataProvider"),c()(),l(150,"td"),s(151,"SQLite"),c()()()(),l(152,"h4"),s(153,"Connection String"),c(),l(154,"p"),s(155,' The client-server database providers like "MySql" and "PostgreSql" use the following connection string format:'),y(156,"br"),l(157,"code"),s(158,'"host=hostname;port=port;database=dbname;user=username;password=password"'),c()(),l(159,"p"),s(160,' The serverless database providers like "SQLite" use the following connection string format:'),y(161,"br"),l(162,"code"),s(163,'"/path/to/database.db3"'),c(),s(164," or "),l(165,"code"),s(166,'":memory:"'),c()(),y(167,"br"),l(168,"h3"),s(169,"Registering the EntityContext"),c(),l(170,"p"),s(171," It is recommended that you register the Entity ORM as a reusable service to be injected into your application using the "),l(172,"code"),s(173,"ServiceCollectionExtensions::addEntityContext()"),c(),s(174," Extension method, which is called within the "),l(175,"code"),s(176,"WebHostBuilder::register()"),c(),s(177," method, with the use of the configuration provider that gets the database configuration from the "),l(178,"samp"),s(179,'"settings.json"'),c(),s(180," file as shown in the following code example: "),c(),l(181,"pre")(182,"code",6),s(183,"Configuration;\n $builder->register(function ($services) use ($configuration) { //;\n // Adding EntityContext\n $services->addEntityContext(BlogContext::class,\n function ($options) {\n $options->ProviderType = $configuration->getValue('Database:ProviderType');\n $options->ConnectionString = $configuration->getValue('Database:ConnectionString');\n }\n );\n });\n ...\n }\n}\n"),c()(),l(184,"p"),s(185," In the "),l(186,"samp"),s(187,'"settings.json"'),c(),s(188," file, you need to set the database configuration, like in the following example: "),c(),l(189,"pre")(190,"code",9),s(191,'"Database": {\n "ProviderType": "DevNet\\\\Entity\\\\PgSql\\\\PgSqlDataProvider",\n "ConnectionString": "host=localhost;database=dbname;user=username;password=password"\n}\n'),c()(),l(192,"p"),s(193," Then, you can get the "),l(194,"code"),s(195,"EntityContext"),c(),s(196," using the controller constructor injection, like this: "),c(),l(197,"pre")(198,"code",6),s(199,"blog = $blog;\n }\n\n #[Route(\"/blog\")]\n public function index(): IActionResult\n {\n $this->view(['posts' => $this->blog->Posts]);\n }\n}\n"),c()()(),l(200,"nav",10)(201,"ul",11)(202,"li",12)(203,"a",13),y(204,"i",14),s(205," Previous "),c()(),l(206,"li",12)(207,"a",15),s(208," Next "),y(209,"i",16),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/entity/query",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["entity-query"]],decls:192,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"alert","alert-warning"],[1,"language-sql"],[1,"alert","alert-info"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/entity/start",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/entity/save",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Querying Data"),c(),y(8,"hr"),l(9,"p"),s(10," The entity repository represents a collection of all records of a particular entity type and can be used to query a single entity or multiple entities. "),c(),l(11,"h3"),s(12,"Loading All Entities"),c(),l(13,"p"),s(14," The entity repository is an iterable collection, so you can load all the entities by iterating the "),l(15,"code"),s(16,"EntitySet"),c(),s(17," instance using the "),l(18,"code"),s(19,"foreach"),c(),s(20," statement, like in the following example: "),c(),l(21,"pre")(22,"code",4),s(23,"Posts as $post) {\n print($post->Title . PHP_EOL);\n}\n"),c()(),l(24,"p"),s(25," Or you can just export all the entities to an array to deal with them later by using the method "),l(26,"code"),s(27,"toArray()"),c(),s(28," like this: "),c(),l(29,"pre")(30,"code",4),s(31,"$posts = $blog->Posts->toArray();"),c()(),y(32,"br"),l(33,"h3"),s(34,"Loading a single entity"),c(),l(35,"p"),s(36," To load a single particular entity selected by its Id, use the method "),l(37,"code"),s(38,"EntitySet::find(string $keyValue)"),c(),s(39,", which will look first if it's already loaded in the tracker to return it quickly, and if it's not, then will load it from the database to the tracker and return it, and here is an example of how to use this method: "),c(),l(40,"pre")(41,"code",4),s(42,"$post = $blog->Posts->find($id);"),c()(),l(43,"p"),s(44," Otherwise, you can use the method "),l(45,"code"),s(46,"EntitySet::first()"),c(),s(47," to load to the first entity of the record or use the method "),l(48,"code"),s(49,"EntitySet::last()"),c(),s(50," to load the last one. "),c(),l(51,"pre")(52,"code",4),s(53,"$firstPost = $blog->Posts->first();\n$lastPost = $blog->Posts->last();\n"),c()(),y(54,"br"),l(55,"h3"),s(56,"Linq Query"),c(),l(57,"p")(58,"code"),s(59,"EntitySet"),c(),s(60," implements the "),l(61,"code"),s(62,"IQueryable"),c(),s(63," interface so it can use LINQ (Language-Integrated Query) to query data from the database, which are chained methods that represent SQL operations, compiled by the database provider to be sent as a specific database query language (MySQL, SQLite, ...) and then to get the result set. "),c(),l(64,"blockquote",5)(65,"b"),s(66,"Important:"),c(),s(67," Linq methods are extension methods, so to use this feature, you have to declare the use of the Linq namespace "),l(68,"code"),s(69,"DevNet\\System\\Linq"),c(),s(70," in every class or code that uses Linq methods with an instance of "),l(71,"code"),s(72,"EntitySet"),c(),s(73,". "),c(),y(74,"br"),l(75,"h4"),s(76,"Filtering Data"),c(),l(77,"p"),s(78," The method "),l(79,"code"),s(80,"where()"),c(),s(81," is used to restrict the result set to contain only those elements that satisfy the specified condition in the arrow function, like in the following code example: "),c(),l(82,"pre")(83,"code",4),s(84,'Posts->where(fn($post) => $post->Title == "My first post")->first();\n'),c()(),l(85,"p"),s(86," Which will be compiled to SQL then executed like this: "),c(),l(87,"pre")(88,"code",6),s(89,"SELECT * FROM Blog.Post WHERE Title = 'My first post';"),c()(),y(90,"br"),l(91,"h4"),s(92,"Ordering Data"),c(),l(93,"p"),s(94," To sort the result set in ascending order by a specified column, use the method "),l(95,"code"),s(96,"orderBy()"),c(),s(97,", and if the rows have the same value in that column, you can optionally chain it with the method "),l(98,"code"),s(99,"thenBy()"),c(),s(100," to sort them by another column, like in the following code: "),c(),l(101,"pre")(102,"code",4),s(103,"posts = $blog->Posts->orderBy(fn($p) => $p->Date)->thenBy(fn($p) => $p->Title)->toArray();"),c()(),l(104,"p"),s(105," And that will be compiled then executed in SQL like this: "),c(),l(106,"pre")(107,"code",6),s(108,"SELECT * FROM Blog.Post ORDER BY Date, Title;"),c()(),l(109,"p"),s(110," You can also sort the result set in descending order by a specified column using the method "),l(111,"code"),s(112,"orderByDescending()"),c(),s(113,", and optionally you can chain it by the method "),l(114,"code"),s(115,"ThenBy()"),c(),s(116," or "),l(117,"code"),s(118,"thenByDescending()"),c(),s(119," to sort the rows of the same values by another column, like in the code below: "),c(),l(120,"pre")(121,"code",4),s(122,"$posts = $blog->Posts->orderByDescending(fn($p) => $p->Date)\n ->thenByDescending(fn($p) => $p->Title)\n ->toArray();\n"),c()(),l(123,"p"),s(124," And this one will be compiled then executed in SQL like this: "),c(),l(125,"pre")(126,"code",6),s(127,"SELECT * FROM Blog.Post ORDER BY Date DESC, Title DESC;"),c()(),y(128,"br"),l(129,"h4"),s(130,"Partitioning Data"),c(),l(131,"p"),s(132," The partitioning data is the operation of dividing an input sequence into sections without changing the order of the elements and then returning one of those sections. "),c(),l(133,"p"),s(134," You can use the method "),l(135,"code"),s(136,"skip()"),c(),s(137," to skip a specified number of elements from the beginning of a sequence and then return the remaining elements, and use the method "),l(138,"code"),s(139,"take()"),c(),s(140," to return a specified number of contiguous elements from the start of a sequence, like in the following code example: "),c(),l(141,"pre")(142,"code",4),s(143,"$posts = $blog->Posts->skip(5)->take(10)->toArray();"),c()(),l(144,"p"),s(145," Which will be executed in SQL like this: "),c(),l(146,"pre")(147,"code",6),s(148,"SELECT * FROM Blog.Post LIMIT 5,10;"),c()(),y(149,"br"),l(150,"h5"),s(151,"Pagination Example"),c(),l(152,"p"),s(153," You can implement data pagination in Entity ORM using the LINQ methods "),l(154,"code"),s(155,"skip()"),c(),s(156," and "),l(157,"code"),s(158,"take()"),c(),s(159," like this: "),c(),l(160,"pre")(161,"code",4),s(162,"$page = 1; // The page number you want to retrieve.\n$size = 10; // The number of items per page.\n$posts = $blog->Posts->skip(($page - 1) * $size)->take($size)->toArray();\n"),c()(),l(163,"p"),s(164," Page number 1 will display the first 10 posts, page 2 will skip the first 10 posts and display the next 10 posts, page 3 will skip 20 posts and display the next 10 posts, and so on... "),c(),y(165,"br"),l(166,"h4"),s(167,"Complex Query"),c(),l(168,"p"),s(169," Sometimes a simple query is not enough to solve a complex problem, so you can combine two or more clauses together to reach what you need as shown in the following code example: "),c(),l(170,"pre")(171,"code",4),s(172,"$posts = $blog->Posts->where(fn($p) =>$p->Date == '2023-01-01' && $p->Likes > 200)\n ->orderBy(fn($p) => $p->Title)\n ->take(10)\n ->toArray();\n"),c()(),l(173,"p"),s(174," Which will be compiled then executed in SQL like this: "),c(),l(175,"pre")(176,"code",6),s(177,"SELECT * FROM Blog.Post WHERE Date = '2023-01-01' AND Likes > 200 ORDER BY Title LIMIT 10;"),c()(),l(178,"blockquote",7)(179,"b"),s(180,"Note:"),c(),s(181," Linq queries are always executed against the database even if the entities returned already exist in the tracker. "),c()(),l(182,"nav",8)(183,"ul",9)(184,"li",10)(185,"a",11),y(186,"i",12),s(187," Previous "),c()(),l(188,"li",10)(189,"a",13),s(190," Next "),y(191,"i",14),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/entity/save",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["entity-save"]],decls:70,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/entity/query",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/entity/relationships",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Saving Data"),c(),y(8,"hr"),l(9,"p"),s(10," Saving data is the process of persisting the changes made to the entities in the context to be applied to the database, such as adding new entities, removing entities, or modifying the properties of existing entities. "),c(),l(11,"h3"),s(12,"Adding Data"),c(),l(13,"p"),s(14," The "),l(15,"code"),s(16,"EntitySet::add(object $entity)"),c(),s(17," method adds a new entity instance to the context to be inserted into the database when calling the "),l(18,"code"),s(19,"EntityContext::save()"),c(),s(20," method. "),c(),l(21,"pre")(22,"code",4),s(23,'Title = "Post Title";\n$post->Content = "Some content...";\n$post->Date = new DateTime("now");\n\n$blog = new BlogContext();\n$blog->Post->add($post);\n$blog->Post->save();\n'),c()(),y(24,"br"),l(25,"h3"),s(26,"Deleting Data"),c(),l(27,"p"),s(28," The "),l(29,"code"),s(30,"EntitySet::remove(object $entity)"),c(),s(31," method attaches the selected entity instance to the context with deleted status, to be deleted from the database when calling the "),l(32,"code"),s(33,"EntityContext::save()"),c(),s(34," method. "),c(),l(35,"pre")(36,"code",4),s(37,"Post->find(1);\n$blog->Post->remove($post);\n$blog->save();\n"),c()(),y(38,"br"),l(39,"h3"),s(40,"Updating Data"),c(),l(41,"p"),s(42," To update a record in the database table, modify the values of the loaded entity instance, and when calling the method "),l(43,"code"),s(44,"EntityContext::save()"),c(),s(45,", the changes will be automatically detected and updated in the database. "),c(),l(46,"pre")(47,"code",4),s(48,'Post->find(1);\n$post->Content = "Updated content";\n$blog->save();\n'),c()(),y(49,"br"),l(50,"h3"),s(51,"Multiple Operations"),c(),l(52,"p"),s(53," You can combine multiple operations (Add/Update/Remove) and then persist all the changes in a single call to the "),l(54,"code"),s(55,"EntityContext::save()"),c(),s(56," method, and here an example: "),c(),l(57,"pre")(58,"code",4),s(59,'Title = "Post Title";\n$post->Content = "Some content...";\n$post->Date = new DateTime("now");\n$blog->Post->add($post);\n\n// Deletes post with id = 2\n$post = $blog->Post->find(2);\n$blog->Post->remove($post);\n\n// Updates post with id = 1\n$post = $blog->Post->find(1);\n$post->Content = "Updated content";\n\n// Persists all the operations\n$blog->Post->save();\n'),c()()(),l(60,"nav",5)(61,"ul",6)(62,"li",7)(63,"a",8),y(64,"i",9),s(65," Previous "),c()(),l(66,"li",7)(67,"a",10),s(68," Next "),y(69,"i",11),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/entity/relationships",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["entity-relationships"]],decls:164,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"mb-2"],[1,"language-php"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/entity/save",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/entity/migrations",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Relationships"),c(),y(8,"hr"),l(9,"p"),s(10," A relationship describes how entities are associated with each other, represented by a referential constraint that defines which entity is the principal or dependent role in the relationship, and there are many kinds of entity relationships, such as one-to-one, one-to-many, many-to-one, and many-to-many. "),c(),l(11,"ul")(12,"li",4)(13,"b"),s(14,"Dependent entity:"),c(),s(15,' sometimes called the "child" is the entity that contains the foreign key, which is a reference to the primary key of the principal entity.'),c(),l(16,"li",4)(17,"b"),s(18,"Principal entity:"),c(),s(19,' sometimes called the "parent" is the entity that contains the primary key, which is referenced as a foreign key in the dependent entity.'),c()(),l(20,"h3"),s(21,"Navigation property:"),c(),l(22,"p"),s(23," A navigation property is a public property presented in the principal or dependent entity that can have a reference type to single or multiple related entities to allow navigation from one entity to another. "),c(),l(24,"ul")(25,"li",4)(26,"b"),s(27,"Collection navigation property:"),c(),s(28," is a property that contains references to multiple related entities, used to navigate through one-to-many and many-to-many relationships, defined by the type "),l(29,"code"),s(30,"DevNet\\System\\Collections\\ICollection"),c(),s(31," with the annotation "),l(32,"code"),s(33,"DevNet\\System\\Generic"),c(),s(34," which specifies the type of the related entity collection."),c(),l(35,"li",4)(36,"b"),s(37,"Reference navigation property:"),c(),s(38," is a property that contains a reference to a single related entity, used to navigate through one-to-one and many-to-one relationships, has the same type as the type of the related entity, and may have the annotation "),l(39,"code"),s(40,"DevNet\\Entity\\Annotations\\ForeignKey"),c(),s(41," to define the name of the property that is used as a foreign key in the dependent entity."),c()(),l(42,"p"),s(43," The example below demonstrates an entity class named "),l(44,"code"),s(45,"Post"),c(),s(46," that has two navigation properties: a reference property called "),l(47,"code"),s(48,"Post::User"),c(),s(49,", and a collection property called "),l(50,"code"),s(51,"Post::Classifications"),c(),s(52,". "),c(),l(53,"pre")(54,"code",5),s(55,"Users->find($id);\n// Iterating through the posts that are related to the selected user.\nforeach($user->Posts as $post) {\n $post->Title;\n}\n"),c()(),y(83,"br"),l(84,"h3"),s(85,"One to one"),c(),l(86,"p"),s(87," A one-to-one relationship is one entity associated with at most one other entity by introducing a unique constraint to the foreign key to ensure only one dependent is related to the principal entity. "),c(),l(88,"p"),s(89," The following example represents an entity class "),l(90,"code"),s(91,"Profile"),c(),s(92," that has a one-to-one relationship with the entity class "),l(93,"code"),s(94,"User"),c(),s(95," presented in the previous example, and both entities have reference navigate to each other, except the entity "),l(96,"code"),s(97,"Profile"),c(),s(98," is a dependent entity has the property "),l(99,"code"),s(100,"Profile::UserId"),c(),s(101," defined as a foreign key. "),c(),l(102,"pre")(103,"code",5),s(104,"Users->find($id);\n// Getting the related Profile entity from the User entity.\n$profile = $user->Profile;\n// Getting the related User entity from the Profile entity.\n$user = $profile->User;\n"),c()(),y(110,"br"),l(111,"h3"),s(112,"Many to Many"),c(),l(113,"p"),s(114," A many-to-many relationship is any number of entities of the same entity type associated with any number of entities of another entity type, this relationship is composed of two on-to-many relationships, represented by a joining table that includes the foreign keys of both tables, and these foreign keys are composite primary keys. "),c(),l(115,"p"),s(116," Here is an example of an entity named "),l(117,"code"),s(118,"Category"),c(),s(119,", which has a many-to-many relationship with the entity "),l(120,"code"),s(121,"Post"),c(),s(122," demonstrated in the first example, through the junction entity "),l(123,"code"),s(124,"Classification"),c(),s(125,". "),c(),l(126,"pre")(127,"code",5),s(128,"Categories->find($id);\n// Iterates the related entities through the junction entity.\nforeach($category->Classifications as $classification) {\n $classification->Post->Title;\n}\n"),c()()(),l(154,"nav",6)(155,"ul",7)(156,"li",8)(157,"a",9),y(158,"i",10),s(159," Previous "),c()(),l(160,"li",8)(161,"a",11),s(162," Next "),y(163,"i",12),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/entity/migrations",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["entity-migrations"]],decls:137,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-shell"],[1,"language-php"],[1,"text-justify"],[1,"alert","alert-warning"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/entity/relationships",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Migrations"),c(),y(8,"hr"),l(9,"p"),s(10," Migration provides a way to update the database schema incrementally, To keep it in sync with the changes in the data model, Without losing the existing data in the database. "),c(),l(11,"h3"),s(12,"Creating a migration"),c(),l(13,"p"),s(14," To create a migration, navigate to the root of your project and run the following command in the terminal: "),c(),l(15,"pre")(16,"code",4),s(17,"devnet add migration --name InitialMigration"),c()(),l(18,"p"),s(19," This will generate an empty migration class in the "),l(20,"samp"),s(21,'"Migrations"'),c(),s(22," folder, And the class file name will be prefixed by a timestamp date as an Id. "),c(),l(23,"p"),s(24," e.g. "),l(25,"samp"),s(26,'"/Migrations/20230701082859_InitialMigration.php"'),c()(),l(27,"pre")(28,"code",5),s(29,"createTable('User', function ($table) {\n $table->column('Id', 'integer')->identity(); // auto-increment\n $table->column('Fullname', 'string', 45)->nullable(false);\n $table->column('Username', 'string', 45)->nullable(false);\n $table->column('Password', 'string', 60)->nullable(false);\n $table->column('Role', 'string', 45)->default('User');\n $table->primaryKey('Id');\n $table->uniqueConstraint('Username');\n });\n\n $builder->createTable('Post', function ($table) {\n $table->column('Id', 'integer')->identity();\n $table->column('UserId', 'integer');\n $table->column('Title', 'string', 60)->nullable(false);\n $table->column('Content', 'text');\n $table->column('Date', 'date');\n $table->primaryKey('Id');\n $table->foreignKey('UserId')->references('User', 'Id')->onDelete('cascade');\n });\n\n $builder->createTable('Category', function ($table) {\n $table->column('Id', 'integer')->identity();\n $table->column('Name', 'string', 45)->nullable(false);\n $table->column('Description', 'string', 255)->nullable();\n $table->primaryKey('Id');\n $table->uniqueConstraint('Name');\n });\n\n $builder->createTable('PostCategory', function ($table) {\n $table->column('PostId', 'integer');\n $table->column('CategoryId', 'integer');\n $table->primaryKey('PostId', 'CategoryId');\n $table->foreignKey('PostId')->references('Post', 'Id')->onDelete('cascade');\n $table->foreignKey('CategoryId')->references('Category', 'Id')->onDelete('cascade');\n });\n }\n\n public function down(MigrationBuilder $builder): void\n {\n // if the constraint ON DELETE is configured as \"strict\" and which is the default configuration,\n // the child table must be dropped before the parent table, otherwise will throw an error.\n $builder->dropTable('PostCategory');\n $builder->dropTable('Category');\n $builder->dropTable('Post');\n $builder->dropTable('User');\n }\n}\n"),c()(),y(66,"br"),l(67,"h4"),s(68,"Updating the database schema"),c(),l(69,"p"),s(70," If the domain entity has been changed, it might be necessary to update the database schema to match it, and this can be done by creating another migration to make necessary alterations, as shown in the example below: "),c(),l(71,"pre")(72,"code",5),s(73,"alterTable('User', function ($table) {\n $table->addColumn('Email', 'string', 45);\n $table->addColumn('Phone', 'string', 15);\n $table->addColumn('Location', 'string', 45);\n });\n\n $builder->alterTable('Category', function ($table) {\n $table->renameColumn('Description', 'Definition');\n });\n\n $builder->renameTable('PostCategory', 'Classification');\n }\n\n public function down(MigrationBuilder $builder): void\n {\n $builder->alterTable('User', function ($table) {\n $table->removeColumn('Fullname');\n $table->removeColumn('Email';\n $table->removeColumn('Phone');\n $table->removeColumn('Location');\n });\n\n $builder->alterTable('Category', function ($table) {\n $table->renameColumn('Definition', 'Description');\n });\n\n $builder->renameTable('Classification', 'PostCategory');\n }\n}\n"),c()(),y(74,"br"),l(75,"h4"),s(76,"Seeding the database"),c(),l(77,"p",6),s(78," Seed data is data that populates the database at the time of migration execution, used to provide initial values for lookup lists or demo or test purposes, etc... "),c(),l(79,"pre")(80,"code",5),s(81," $name) {\n $builder->insertData('Category', [\n 'Id' => ++$id,\n 'Name' => $name\n ]);\n }\n }\n\n public function down(MigrationBuilder $builder): void\n {\n for ($i = 1; $i <= 4; $i++) {\n $builder->deleteData('Category', ['Id' => $i]);\n }\n }\n}\n"),c()(),y(82,"br"),l(83,"h3"),s(84,"Applying migrations"),c(),l(85,"p"),s(86," When you run the migration command for the first time, a migration history table will be created, which tracks the history of the applied migrations to determine later whether to upgrade or downgrade the migrations. "),c(),l(87,"p"),s(88," If the migration target is higher than the last migration applied, it will upgrade to the migration target. On the other hand, if it's lower, it will downgrade to the migration target. However, if the migration target has already been applied, then no action will be taken. "),c(),l(89,"p"),s(90," And here is an example shows how to run the migrate command targeting the migration that we created earlier: "),c(),l(91,"pre")(92,"code",4),s(93,"devnet migrate --target 20230701082859_InitialMigration"),c()(),l(94,"blockquote",7)(95,"b"),s(96,"Important:"),c(),s(97," Make sure to specify the database configuration in the "),l(98,"samp")(99,"b"),s(100,"settings.json"),c()(),s(101," before running the "),l(102,"code"),s(103,"migrate"),c(),s(104," command or pass it to the command as parameters using the options: "),l(105,"code"),s(106,"--provider"),c(),s(107," and "),l(108,"code"),s(109,"--connection"),c(),s(110,". "),c(),y(111,"br"),l(112,"h4"),s(113,"Applying all migrations"),c(),l(114,"p"),s(115," When you run the migration command without specifying the migration target, it will apply all migrations or continue from the latest migration applied. If all migrations have already been applied, no action will be taken. "),c(),l(116,"pre")(117,"code",4),s(118,"devnet migrate"),c()(),y(119,"br"),l(120,"h4"),s(121,"Reversing all migrations"),c(),l(122,"p"),s(123," To reverse all migrations to roll back to the state zero, run the migrate command with a target of 0 (zero), like this: "),c(),l(124,"pre")(125,"code",4),s(126,"devnet migrate --target 0"),c()()(),l(127,"nav",8)(128,"ul",9)(129,"li",10)(130,"a",11),y(131,"i",12),s(132," Previous "),c()(),l(133,"li",10)(134,"a",13),s(135," Next "),y(136,"i",14),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/entity",redirectTo:"docs/entity/start",pathMatch:"full"}];let s$=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[jt.forChild(i$),jt]})}return e})(),a$=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[Yr,s$,So]})}return e})();const c$=[{path:"docs/security/overview",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["security-overview"]],decls:40,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-shell"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/web/dependency",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/security/authentication",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Overview"),c(),y(8,"hr"),l(9,"p"),s(10," DevNet Web provides many security tools and libraries for building secure web applications and APIs, and these security features are: "),c(),l(11,"ul")(12,"li"),s(13,"Cookie-based Authentication"),c(),l(14,"li"),s(15,"Token-based Authentication"),c(),l(16,"li"),s(17,"Role-based Authorization"),c(),l(18,"li"),s(19,"Policy-based Authorization"),c(),l(20,"li"),s(21,"CSRF Prevention"),c()(),y(22,"br"),l(23,"h3"),s(24,"Requirement"),c(),l(25,"p"),s(26," These security features are part of the DevNet Web package, and if it's not already installed on your system or project, you still can install it using the composer command line: "),c(),l(27,"pre")(28,"code",4),s(29,"composer require devnet/web"),c()()(),l(30,"nav",5)(31,"ul",6)(32,"li",7)(33,"a",8),y(34,"i",9),s(35," Previous "),c()(),l(36,"li",7)(37,"a",10),s(38," Next "),y(39,"i",11),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/security/authentication",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["security-authentication"]],decls:86,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"alert","alert-warning"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/security/overview",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/security/authorization",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Authentication"),c(),y(8,"hr"),l(9,"p"),s(10," Authentication is the process of verifying the identity of the user who accesses a web application. This may require the user to input a username and password to log into the web application. "),c(),l(11,"p"),s(12," Authentication is handled by the authentication middleware, which uses the registered authentication service that can have multiple authentication schemes, and each scheme is related to an authentication handler to determine later in the authorization policies which authentication handler should be used to authenticate the user and provides a "),l(13,"code"),s(14,"ClaimsIdentity"),c(),s(15," that represents the user in the request context. "),c(),l(16,"h3"),s(17,"Configuration"),c(),l(18,"p"),s(19," The authentication service is added to the application by calling the "),l(20,"code"),s(21,"addAuthentication()"),c(),s(22," method, and then authentication schemes can be specified by calling one of the following methods: "),c(),l(23,"ul")(24,"li")(25,"code"),s(26,"AddCookie()"),c(),s(27," for cookie-based authentication"),c(),l(28,"li")(29,"code"),s(30,"AddJwtBearer()"),c(),s(31," for token-based authentication"),c()(),l(32,"p"),s(33," The authentication middleware is used in the application by calling the "),l(34,"code"),s(35,"useAuthentication()"),c(),s(36," method and must be called before any middleware that depends on the user being authenticated. "),c(),l(37,"p"),s(38," This example shows the configuration of both approaches, cookie-based and token-based authentication, but you can choose one of the two approaches. "),c(),l(39,"pre")(40,"code",4),s(41,'register(function ($services) {\n // Adding authentication service\n $services->addAuthentication(function ($builder) {\n // Adding cookie-based authentication handler\n $builder->addCookie(AuthenticationScheme::CookieSession, function ($options) {\n // Optimally you can modify the following default options.\n $options->CookieName = "Identity";\n $options->CookiePath = "/";\n $options->ExpireTime = TimeSpan::fromDays(7);\n });\n // Adding token-based authentication handler\n $builder->addJwtBearer(AuthenticationScheme::JwtBearer, function ($options) {\n $options->SecurityKey = "jwt security key";\n // Optionally you can configure the following validation options\n $options->Issuer = "127.0.0.1:8000"; // server address\n $options->Audience = "127.0.0.1:8080"; // client address\n });\n });\n });\n \n $host = $builder->build();\n\n $host->start(function ($app) {\n $app->UseExceptionHandler();\n $app->useRouter();\n // Adding the authentication middleware before the endpoint middleware.\n $app->useAuthentication();\n $app->useEndpoint(function ($routes) {\n // Routes\n });\n });\n }\n}\n'),c()(),y(42,"br"),l(43,"h3"),s(44,"Cookie-based Authentication"),c(),l(45,"p"),s(46," The cookie-based authentication is a stateful process, which means that the server stores the user session data and sends to the client a cookie that contains a session reference, which is often stored in the browser and sent back to the server with every request to authenticate the client requests and maintain session information on the server over the stateless HTTP protocol. "),c(),l(47,"p"),s(48," The following example demonstrates the working process of cookie-based authentication using "),l(49,"code"),s(50,"ClaimsIdentity"),c(),s(51," and the "),l(52,"code"),s(53,"IAuthentication"),c(),s(54," service to log in and log out the user. "),c(),l(55,"pre")(56,"code",4),s(57,"useEndpoint(function($routes) {\n $routes->mapPost(\"/login\", function(HttpContext $context) {\n $user = $context->User;\n if (!$user->isAuthenticated()) {\n $form = $context->Request->Form;\n $json = file_get_contents(__DIR__ . '/path/to/data.json');\n $data = json_decode($json, true);\n $users = new ArrayList('object');\n $users->addRange($data);\n\n $user = $users->where(fn ($user) => $user->Username == $form->getValue('username'))->first();\n if (!$user || !password_verify($form->getValue('password'), $user->Password)) {\n return $context->Response->setStatusCode(401);\n }\n\n $identity = new ClaimsIdentity(AuthenticationScheme::CookieSession);\n $identity->addClaim(new Claim('Username' , $form->getValue('username')));\n $identity->addClaim(new Claim('Role', $user->Role));\n\n $authentication = $context->Services->getService(IAuthentication::class);\n $authentication->signIn($identity, $form->getValue('remember'));\n }\n\n return $context->Response->redirect('/account');\n });\n\n $routes->mapGet(\"/logout\", function(HttpContext $context) {\n $authentication = $context->Services->getService(IAuthentication::class);\n $authentication->signOut();\n return $context->Response->redirect('/login');\n })\n});"),c()(),y(58,"br"),l(59,"h3"),s(60,"Token-based Authentication"),c(),l(61,"p"),s(62," The token-based authentication is a stateless process. This means that the server does not store any session information about the user on its side. Instead, it sends to the client an encrypted token, typically JWT (JSON Web Token), that contains the user information and expiration time, and the client stores this token and sends it back to the server with every request, where the server does the token validation and grants access to the user. "),c(),l(63,"p"),s(64," The following example demonstrates the working process of token-based authentication using ClaimsIdentity and JwtSecurityTokenHandler to generate a JWT token and send it to the client to send it back later for authentication. "),c(),l(65,"p"),s(66," Due to the limitations of this approach, there is no option for remembering or logging out the user on the server side. However, you can easily log out by removing the token from your request header on the client side. "),c(),l(67,"pre")(68,"code",4),s(69,"useEndpoint(function($routes) {\n $routes->mapGet(\"/login\", (function(HttpContext $context) {\n $user = $context->User;\n if (!$user->isAuthenticated()) {\n $form = $context->Request->Form;\n $json = file_get_contents(__DIR__ . '/path/to/data.json');\n $data = json_decode($json, true);\n $users = new ArrayList('object');\n $users->addRange($data);\n\n $user = $users->where(fn ($user) => $user->Username == $form->getValue('username'))->first();\n if (!$user || $user->Password != $form->getValue('password')) {\n return $context->Response->setStatusCode(401);\n }\n\n $claims = new ClaimsIdentity(AuthenticationScheme::JwtBearer);\n $claims->addClaim(new Claim('sub', $form->getValue('username')));\n $claims->addClaim(new Claim('role', $user->Role));\n $claims->addClaim(new Claim('iss', '127.0.0.1:8000'));\n $claims->addClaim(new Claim('aud', '127.0.0.1:8080'));\n\n // The asymmetric encryption RSA not supported yet, only the symmetric encryption HSA for now.\n $token = new JwtSecurityToken($claims, 'HS256', new DateTime('7 days'));\n $jwtHandler = new JwtSecurityTokenHandler();\n $signedToken = $jwtHandler->writeToken($token, \"jwt security key\");\n\n // Need to send the token to the client.\n return $context->Response->WriteJsonAsync(['jwt' => $signedToken]);\n }\n\n return $context->Response->redirect('/account');\n }));\n});"),c()(),l(70,"blockquote",5)(71,"b"),s(72,"Important:"),c(),s(73," The client should send back the JWT token in the Authorization header using the Bearer schema in the following format: "),l(74,"code"),s(75,"Authorization: Bearer "),c()()(),l(76,"nav",6)(77,"ul",7)(78,"li",8)(79,"a",9),y(80,"i",10),s(81," Previous "),c()(),l(82,"li",8)(83,"a",11),s(84," Next "),y(85,"i",12),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/security/authorization",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["security-authorization"]],decls:135,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/security/authentication",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/security/antiforgery",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Authorization"),c(),y(8,"hr"),l(9,"p"),s(10," Authorization is the process that determines if the user has permission to access or use resources, and usually is coupled with authentication so that the server has some concept of who the user is before determining what the user can do. "),c(),l(11,"p"),s(12," The authorization is controlled by the "),l(13,"code"),s(14,"Authorize"),c(),s(15," filter which is responsible for enforcing the authorization policy on the endpoint action. It uses the "),l(16,"code"),s(17,"IAuthorization"),c(),s(18," service to evaluate the policy and decide which rule applies to the action. The rule can allow or deny access to the action based on various criteria. "),c(),l(19,"h3"),s(20,"Configuration"),c(),l(21,"p"),s(22," To use the authorization feature in your application, you need first to add the "),l(23,"code"),s(24,"IAuthorization"),c(),s(25," service to the dependency, which also depends on the "),l(26,"code"),s(27,"IAuthentication"),c(),s(28," service, and the code below shows a simple way to add this feature. "),c(),l(29,"pre")(30,"code",4),s(31,"register(function ($services) {\n // The authentication service is needed for authorization service.\n $services->addAuthentication(function ($builder) {\n $builder->addCookie();\n });\n // Adding the authorization service\n $services->addAuthorization();\n });\n ...\n }\n}"),c()(),y(32,"br"),l(33,"h3"),s(34,"Simple Authorization"),c(),l(35,"p"),s(36," By default, applying the "),l(37,"code"),s(38,"Authorize"),c(),s(39," filter on the endpoint action without specifying any option will restrict the execution of that action only for authenticated users, as shown in the code example below. "),c(),l(40,"pre")(41,"code",4),s(42,'useEndpoint(function($routes) {\n $routes->mapGet("/account", function(HttpContext $context) {\n $user = $context->User;\n $claim = $user->findClaim(fn ($claim) => $claim->Type == "name");\n $name = $claim ? $claim->Value : null;\n return $context->Response->writeAsync("Welcome {$name}");\n })\n // Adding the authorize filter.\n ->addFilter(new Authorize());\n});'),c()(),l(43,"p"),s(44," You can also apply the "),l(45,"code"),s(46,"Authorize"),c(),s(47," filter to a controller's action methods using the attribute syntax. "),c(),l(48,"pre")(49,"code",4),s(50,"Context->User;\n $claim = $user->findClaim(fn ($claim) => $claim->Type == \"name\");\n $name = $claim ? $claim->Value : null;\n return $this->content(\"Welcome {$name}\");\n }\n\n #[Route('/register', 'GET')]\n public function register(): IActionResult\n {\n return $this->view();\n }\n\n #[Route('/account/create', 'POST')]\n public function create(Registration $form): IActionResult\n {\n if (!$form->isValid()) {\n return $this->redirect('/register');\n }\n\n $data = [];\n if (file_exists(__DIR__ . '/../../data.json')) {\n $json = file_get_contents(__DIR__ . '/../../data.json');\n $data = json_decode($json);\n }\n\n $user = new User();\n $user->Username = $form->Username;\n $user->Password = password_hash($form->Password, PASSWORD_DEFAULT);\n $user->Role = \"User\";\n\n $data[] = $user;\n $json = json_encode($data, JSON_PRETTY_PRINT);\n file_put_contents(__DIR__ . '/../../data.json', $json);\n\n return $this->content(\"The user was successfully created.\");\n }\n}"),c()(),l(51,"p"),s(52," Another way to restrict access to the controller's action method is to use the Authorize attribute on the entire controller class, which applies the Authorize filter to all the action methods in the controller. But, If you want to exclude some action methods from that, you can use the "),l(53,"code"),s(54,'Authorize("Anonymous")'),c(),s(55," attribute on those methods to override the class-level filter that requires the user to be authenticated and allow access to anyone. "),c(),l(56,"p"),s(57," In this example, the Authorize filter is applied to all controller methods except for the "),l(58,"code"),s(59,"register()"),c(),s(60," and "),l(61,"code"),s(62,"login()"),c(),s(63," methods. "),c(),l(64,"pre")(65,"code",4),s(66,"content(\"Hello Administrator\");\n }\n}"),c()(),y(92,"br"),l(93,"h4"),s(94,"Authorization with multiple roles"),c(),l(95,"p"),s(96," Multiple roles can be specified as an array of strings using the named argument "),l(97,"code"),s(98,"roles:"),c(),s(99," in the Authorize attribute, and the user must have at least one of these roles to access the resources. "),c(),l(100,"pre")(101,"code",4),s(102,"content(\"Hello to either Administrator or Manager\");\n }\n}"),c()(),l(103,"p"),s(104," When applying multiple Authorize attributes, the associated resources can only be accessed if the user satisfies all specified roles, unlike the previous example, where the user only needs to have at least one of the roles. "),c(),l(105,"pre")(106,"code",4),s(107,"content(\"Hello to Administrator and Manager\");\n }\n}"),c()(),y(108,"br"),l(109,"h3"),s(110,"Policy-based Authorization"),c(),l(111,"p"),s(112," Policy-based authorization is a way of creating authorization rules that depend on claims requirements that the user must satisfy to access a resource. It can require any user's claims such as ID, Name, Email, Role, etc., unlike role-based authorization, which is just a special case of policy-based authorization that only requires the role claim. "),c(),l(113,"p"),s(114," To use a policy in your application, you must first define it in the Authorization service by calling the addPolicy() method, which allows you to specify a group of claim requirements, as shown in the following example. "),c(),l(115,"pre")(116,"code",4),s(117,"register(function ($services) {\n $services->addAuthentication(function ($builder) {\n $builder->addCookie();\n });\n // Adding the authorization service with policy\n $services->addAuthorization(function($config) {\n $config->addPolicy(\"Administration\", function ($policy) {\n $policy->RequireClaim('EmployeeNumber');\n $policy->RequireClaim('Role', ['Administrator', 'Manager']);\n }\n });\n });\n ...\n }\n}\n"),c()(),l(118,"p"),s(119," And here is an example of how to apply a policy in the Authorize attribute using the named argument "),l(120,"code"),s(121,"policy:"),c()(),l(122,"pre")(123,"code",4),s(124,"content(\"Administration space\");\n }\n}"),c()()(),l(125,"nav",5)(126,"ul",6)(127,"li",7)(128,"a",8),y(129,"i",9),s(130," Previous "),c()(),l(131,"li",7)(132,"a",10),s(133," Next "),y(134,"i",11),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/security/antiforgery",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["security-antiforgery"]],decls:120,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"mb-2"],[1,"language-html"],[1,"language-php"],[1,"language-php-template"],[1,"language-javascript"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/security/authorization",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/entity/start",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),y(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"CSRF Prevention"),c(),y(8,"hr"),l(9,"p"),s(10," Cross-site request forgery, abbreviated as CSRF or XSRF and also known as a one-click attack or session riding, is a malicious attack that takes advantage of a user's previously authenticated session to execute unwanted actions by manipulating the interaction between a client browser and a trusted web application. "),c(),l(11,"p"),s(12," To better understand the CSRF attack, consider the following scenario: "),c(),l(13,"ul")(14,"li",4),s(15," A user signs into his account on a vulnerable website, which trusts any request received with a valid authentication cookie. "),c(),l(16,"li",4),s(17," Then, the user visits a malicious site that contains a fake HTML form to win a prize, but in the background, it posts to the vulnerable website like the following example: "),c()(),l(18,"pre")(19,"code",5),s(20,'

Congratulations! You\'re a Winner!

\n
\n \n \n
\n'),c()(),l(21,"ul")(22,"li",4),s(23," When the user clicks on the submit button. The browser sends a request that includes the authentication cookie for the requested domain. "),c(),l(24,"li",4),s(25," The vulnerable server trusts the request with the authentication context and allows any action that an authenticated user can perform. "),c()(),l(26,"p"),s(27," In addition to this scenario, the malicious site could run a script that automatically submits the form by sending the form submission as an AJAX request. "),c(),y(28,"br"),l(29,"h3"),s(30,"Antiforgory"),c(),l(31,"p"),s(32," To prevent cross-site request forgery attacks, the DevNet framework provides the "),l(33,"code"),s(34,"Antiforgery"),c(),s(35," service that generates a CSRF token, which should be included in the form data or in the request header to be verified by the server when the form is submitted. "),c(),l(36,"p"),s(37," To use the "),l(38,"code"),s(39,"Antiforgory"),c(),s(40," service across your application, you need to register it as a dependency in your application services with the help of the extension method "),l(41,"code"),s(42,"addAntiforgory()"),c(),s(43," inside the method "),l(44,"code"),s(45,"register()"),c(),s(46," of the "),l(47,"code"),s(48,"WebHostBuilder"),c(),s(49," and have the option to customize the default configurations. "),c(),l(50,"pre")(51,"code",6),s(52,"register(function ($services) {\n // Add antiforgery service.\n $services->addAntiforgery();\n });\n ...\n }\n}\n"),c()(),y(53,"br"),l(54,"h3"),s(55,"X-CSRF-TOKEN"),c(),l(56,"p"),s(57," In traditional HTML-based applications, the Antiforgery tokens are passed to the server using hidden form fields, and usually, the token used in this technique is called "),l(58,"samp"),s(59,"X-CSRF-TOKEN"),c(),s(60,". "),c(),l(61,"p"),s(62," After registering the Antiforgery service with the MVC web application, it will be injected into the view so that you can generate a token in the HTML form. "),c(),l(63,"pre")(64,"code",7),s(65,'
\n Username ?>" />\n \n \n
\n'),c()(),l(66,"p"),s(67," The controller in this example sends the view that is presented above with an Antiforgory token via the "),l(68,"code"),s(69,"edit()"),c(),s(70," method when the user requests to edit his account, and when the user submits the HTML form, the controller receives the request via the "),l(71,"code"),s(72,"update()"),c(),s(73," method, which is decorated with the "),l(74,"code"),s(75,"DevNet\\Web\\Security\\Tokens\\Csrf\\Validate"),c(),s(76," attribute to check if the request is trusted before updating the data. "),c(),l(77,"pre")(78,"code",6),s(79,"addRange($data);\n\n $user = $users->where(fn ($user) => $user->Id == $id)->first();\n if (!$user) {\n Throw \\Exception(\"page not found!\", 404);\n }\n return $this->view(['user' => $user]);\n }\n\n // Adds AntiForgery validation filter as an attribute.\n #[Validate]\n #[Route(path: '/account/update/{id}', method: 'POST')]\n public function update(int $id, User $form): IActionResult\n {\n $json = file_get_contents(__DIR__ . '/path/to/data.json');\n $data = json_decode($json, true);\n $users = new ArrayList('object');\n $users->addRange($data);\n\n $user = $users->where(fn ($user) => $user->Id == $id)->first();\n if (!$user) {\n Throw \\Exception(\"page not found!\", 404);\n }\n $user->Username = $from->Username;\n $user->Email = $from->Username;\n $json = json_encode($users->toArray(), JSON_PRETTY_PRINT);\n file_put_contents('path/to/data.json', $json);\n\n return $this->statusCode(200);\n }\n}\n"),c()(),y(80,"br"),l(81,"h3"),s(82,"X-XSRF-TOKEN"),c(),l(83,"p"),s(84," In modern JavaScript-based applications, the Antiforgery tokens are sent to the server via the AJAX request headers, and usually, the token used in this technique is called "),l(85,"samp"),s(86,"X-XSRF-TOKEN"),c(),s(87,". "),c(),l(88,"p"),s(89," In the following example, when the user requests the "),l(90,"samp"),s(91,'"/account/create"'),c(),s(92," endpoint to create a new account, the server returns an HTML form response with "),l(93,"samp"),s(94,"XSRF-TOKEN"),c(),s(95," as a cookie, which must be sent back to the server via the AJAX request header when the user submits the form to the "),l(96,"samp"),s(97,'"/account/store"'),c(),s(98," endpoint, which this one has an Antiforgory filter to check if the request is trusted or not before storing the data. "),c(),l(99,"pre")(100,"code",6),s(101,'useEndpoint(function($routes) {\n $routes->mapGet("/account/create", (function(HttpContext $context) {\n $token = $context->Antiforgery->getToken();\n $context.Response->Cookies->add("XSRF-TOKEN", token);\n $html = file_get_contents("path/to/editFrom.phtml");\n $context->Response->Body->write($html);\n }));\n\n $routes.MapPost("/account/store", (function(HttpContext $context) {\n $form = $context->Request->Form;\n $user = new User();\n $user->Username = $form->getValue(\'username\');\n $user->Password = password_hash($form->getValue(\'password\'), PASSWORD_DEFAULT);\n\n $json = file_get_contents(\'path/to/data.json\');\n $data = json_decode($json);\n\n $data[] = $user;\n $json = json_encode($data, JSON_PRETTY_PRINT);\n file_put_contents(\'path/to/data.json\', $json);\n $context->Response->setStatusCode(200);\n })\n // Adds Antiforgery validation filter to the endpoint "/account/store".\n ->addFilter(Validate::class);\n});'),c()(),l(102,"p"),s(103," Here is a Javascript example that uses the AJAX request to send back the "),l(104,"samp"),s(105,"XSRF-TOKEN"),c(),s(106," to the server after receiving it from the server via the response cookie. "),c(),l(107,"pre")(108,"code",8),s(109,'const xsrfToken = document.cookie\n .split("; ")\n .find(row => row.startsWith("XSRF-TOKEN="))\n .split("=")[1];\n\nvar request = new XMLHttpRequest();\nrequest.open("POST", "https://example.com/account/edit");\nrequest.setRequestHeader("X-XSRF-TOKEN", xsrfToken);\nrequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");\nrequest.send("username=user&email=user@example.com");\nrequest.onload = function() {\n console.log(this.status);\n }\n'),c()()(),l(110,"nav",9)(111,"ul",10)(112,"li",11)(113,"a",12),y(114,"i",13),s(115," Previous "),c()(),l(116,"li",11)(117,"a",14),s(118," Next "),y(119,"i",15),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/security",redirectTo:"docs/security/overview",pathMatch:"full"}];let l$=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[jt.forChild(c$),jt]})}return e})(),u$=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[Yr,l$,So]})}return e})(),d$=(()=>{class e{constructor(){}ngOnInit(){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["app-header"]],decls:19,vars:0,consts:[[1,"navbar","navbar-expand-lg","navbar-light","bg-white","border-bottom","shadow-sm"],[1,"container"],["routerLink","/",1,"navbar-brand"],["type","button","data-bs-toggle","collapse","data-bs-target","#navbarSupportedContent","aria-controls","navbarSupportedContent","aria-expanded","false","aria-label","Toggle navigation",1,"navbar-toggler"],[1,"navbar-toggler-icon"],["id","navbarSupportedContent",1,"collapse","navbar-collapse"],[1,"navbar-nav","me-auto","mb-2","mb-lg-0"],[1,"nav-item"],["aria-current","page","routerLink","/docs",1,"nav-link","active"],[1,"navbar-nav","ms-auto","mb-2","mb-lg-0"],[1,"nav-item","dropdown"],["href","#","id","navbarDropdown","role","button","data-bs-toggle","dropdown","aria-expanded","false",1,"nav-link","dropdown-toggle"],["aria-labelledby","navbarDropdown",1,"dropdown-menu","dropdown-menu-end"],["routerLink","/docs",1,"dropdown-item"]],template:function(r,o){1&r&&(l(0,"nav",0)(1,"div",1)(2,"a",2),s(3,"DevNet"),c(),l(4,"button",3),y(5,"span",4),c(),l(6,"div",5)(7,"ul",6)(8,"li",7)(9,"a",8),s(10,"Documentation"),c()()(),l(11,"ul",9)(12,"li",10)(13,"a",11),s(14," Versions "),c(),l(15,"ul",12)(16,"li")(17,"a",13),s(18,"v1.0.0"),c()()()()()()()())},dependencies:[Te]})}return e})(),p$=(()=>{class e{constructor(){}ngOnInit(){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["app-footer"]],decls:3,vars:0,consts:[[1,"text-muted","bg-white","border-top","py-3"],[1,"container"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1),s(2," \xa9 2023 - DevNet by M. Moussaoui. "),c()())}})}return e})(),h$=(()=>{class e{constructor(){this.title="devnet"}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["app-root"]],decls:6,vars:0,consts:[["role","main"],[1,"mt-auto"]],template:function(r,o){1&r&&(l(0,"header"),y(1,"app-header"),c(),l(2,"main",0),y(3,"router-outlet"),c(),l(4,"footer",1),y(5,"app-footer"),c())},dependencies:[_h,d$,p$]})}return e})(),f$=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e,bootstrap:[h$]});static#n=this.\u0275inj=mt({imports:[JR,Y2,X2,t$,o$,a$,u$,H2,So]})}return e})();QR().bootstrapModule(f$).catch(e=>console.error(e))},782:(q,$,g)=>{var v=g(548);v.registerLanguage("xml",g(149)),v.registerLanguage("bash",g(725)),v.registerLanguage("c",g(242)),v.registerLanguage("cpp",g(94)),v.registerLanguage("csharp",g(120)),v.registerLanguage("css",g(240)),v.registerLanguage("markdown",g(5)),v.registerLanguage("diff",g(826)),v.registerLanguage("ruby",g(185)),v.registerLanguage("go",g(626)),v.registerLanguage("graphql",g(653)),v.registerLanguage("ini",g(372)),v.registerLanguage("java",g(984)),v.registerLanguage("javascript",g(354)),v.registerLanguage("json",g(454)),v.registerLanguage("kotlin",g(643)),v.registerLanguage("less",g(580)),v.registerLanguage("lua",g(739)),v.registerLanguage("makefile",g(910)),v.registerLanguage("perl",g(330)),v.registerLanguage("objectivec",g(102)),v.registerLanguage("php",g(188)),v.registerLanguage("php-template",g(164)),v.registerLanguage("plaintext",g(100)),v.registerLanguage("python",g(847)),v.registerLanguage("python-repl",g(990)),v.registerLanguage("r",g(553)),v.registerLanguage("rust",g(929)),v.registerLanguage("scss",g(574)),v.registerLanguage("shell",g(498)),v.registerLanguage("sql",g(239)),v.registerLanguage("swift",g(597)),v.registerLanguage("yaml",g(84)),v.registerLanguage("typescript",g(603)),v.registerLanguage("vbnet",g(410)),v.registerLanguage("wasm",g(65)),v.HighlightJS=v,v.default=v,q.exports=v},548:q=>{var $={exports:{}};function g(w){return w instanceof Map?w.clear=w.delete=w.set=function(){throw new Error("map is read-only")}:w instanceof Set&&(w.add=w.clear=w.delete=function(){throw new Error("set is read-only")}),Object.freeze(w),Object.getOwnPropertyNames(w).forEach(function(C){var z=w[C];"object"==typeof z&&!Object.isFrozen(z)&&g(z)}),w}$.exports=g,$.exports.default=g;class v{constructor(C){void 0===C.data&&(C.data={}),this.data=C.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function k(w){return w.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function x(w,...C){const z=Object.create(null);for(const be in w)z[be]=w[be];return C.forEach(function(be){for(const ct in be)z[ct]=be[ct]}),z}const N=w=>!!w.scope||w.sublanguage&&w.language;class M{constructor(C,z){this.buffer="",this.classPrefix=z.classPrefix,C.walk(this)}addText(C){this.buffer+=k(C)}openNode(C){if(!N(C))return;let z="";z=C.sublanguage?`language-${C.language}`:((w,{prefix:C})=>{if(w.includes(".")){const z=w.split(".");return[`${C}${z.shift()}`,...z.map((be,ct)=>`${be}${"_".repeat(ct+1)}`)].join(" ")}return`${C}${w}`})(C.scope,{prefix:this.classPrefix}),this.span(z)}closeNode(C){N(C)&&(this.buffer+="")}value(){return this.buffer}span(C){this.buffer+=``}}const T=(w={})=>{const C={children:[]};return Object.assign(C,w),C};class I{constructor(){this.rootNode=T(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(C){this.top.children.push(C)}openNode(C){const z=T({scope:C});this.add(z),this.stack.push(z)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(C){return this.constructor._walk(C,this.rootNode)}static _walk(C,z){return"string"==typeof z?C.addText(z):z.children&&(C.openNode(z),z.children.forEach(be=>this._walk(C,be)),C.closeNode(z)),C}static _collapse(C){"string"!=typeof C&&C.children&&(C.children.every(z=>"string"==typeof z)?C.children=[C.children.join("")]:C.children.forEach(z=>{I._collapse(z)}))}}class L extends I{constructor(C){super(),this.options=C}addKeyword(C,z){""!==C&&(this.openNode(z),this.addText(C),this.closeNode())}addText(C){""!==C&&this.add(C)}addSublanguage(C,z){const be=C.root;be.sublanguage=!0,be.language=z,this.add(be)}toHTML(){return new M(this,this.options).value()}finalize(){return!0}}function F(w){return w?"string"==typeof w?w:w.source:null}function H(w){return Z("(?=",w,")")}function G(w){return Z("(?:",w,")*")}function Q(w){return Z("(?:",w,")?")}function Z(...w){return w.map(z=>F(z)).join("")}function ue(...w){return"("+(function K(w){const C=w[w.length-1];return"object"==typeof C&&C.constructor===Object?(w.splice(w.length-1,1),C):{}}(w).capture?"":"?:")+w.map(be=>F(be)).join("|")+")"}function me(w){return new RegExp(w.toString()+"|").exec("").length-1}const De=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function Pe(w,{joinWith:C}){let z=0;return w.map(be=>{z+=1;const ct=z;let ut=F(be),J="";for(;ut.length>0;){const Y=De.exec(ut);if(!Y){J+=ut;break}J+=ut.substring(0,Y.index),ut=ut.substring(Y.index+Y[0].length),"\\"===Y[0][0]&&Y[1]?J+="\\"+String(Number(Y[1])+ct):(J+=Y[0],"("===Y[0]&&z++)}return J}).map(be=>`(${be})`).join(C)}const ne="[a-zA-Z]\\w*",Le="[a-zA-Z_]\\w*",st="\\b\\d+(\\.\\d+)?",Ze="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",Nt="\\b(0b[01]+)",We={begin:"\\\\[\\s\\S]",relevance:0},Zn={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[We]},Lt={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[We]},gn=function(w,C,z={}){const be=x({scope:"comment",begin:w,end:C,contains:[]},z);be.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const ct=ue("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return be.contains.push({begin:Z(/[ ]+/,"(",ct,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),be},mr=gn("//","$"),Pn=gn("/\\*","\\*/"),Qn=gn("#","$");var qt=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:ne,UNDERSCORE_IDENT_RE:Le,NUMBER_RE:st,C_NUMBER_RE:Ze,BINARY_NUMBER_RE:Nt,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(w={})=>{const C=/^#![ ]*\//;return w.binary&&(w.begin=Z(C,/.*\b/,w.binary,/\b.*/)),x({scope:"meta",begin:C,end:/$/,relevance:0,"on:begin":(z,be)=>{0!==z.index&&be.ignoreMatch()}},w)},BACKSLASH_ESCAPE:We,APOS_STRING_MODE:Zn,QUOTE_STRING_MODE:Lt,PHRASAL_WORDS_MODE:{begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},COMMENT:gn,C_LINE_COMMENT_MODE:mr,C_BLOCK_COMMENT_MODE:Pn,HASH_COMMENT_MODE:Qn,NUMBER_MODE:{scope:"number",begin:st,relevance:0},C_NUMBER_MODE:{scope:"number",begin:Ze,relevance:0},BINARY_NUMBER_MODE:{scope:"number",begin:Nt,relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{scope:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[We,{begin:/\[/,end:/\]/,relevance:0,contains:[We]}]}]},TITLE_MODE:{scope:"title",begin:ne,relevance:0},UNDERSCORE_TITLE_MODE:{scope:"title",begin:Le,relevance:0},METHOD_GUARD:{begin:"\\.\\s*"+Le,relevance:0},END_SAME_AS_BEGIN:function(w){return Object.assign(w,{"on:begin":(C,z)=>{z.data._beginMatch=C[1]},"on:end":(C,z)=>{z.data._beginMatch!==C[1]&&z.ignoreMatch()}})}});function Ln(w,C){"."===w.input[w.index-1]&&C.ignoreMatch()}function Xn(w,C){void 0!==w.className&&(w.scope=w.className,delete w.className)}function Io(w,C){C&&w.beginKeywords&&(w.begin="\\b("+w.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",w.__beforeBegin=Ln,w.keywords=w.keywords||w.beginKeywords,delete w.beginKeywords,void 0===w.relevance&&(w.relevance=0))}function ji(w,C){Array.isArray(w.illegal)&&(w.illegal=ue(...w.illegal))}function ya(w,C){if(w.match){if(w.begin||w.end)throw new Error("begin & end are not supported with match");w.begin=w.match,delete w.match}}function To(w,C){void 0===w.relevance&&(w.relevance=1)}const va=(w,C)=>{if(!w.beforeMatch)return;if(w.starts)throw new Error("beforeMatch cannot be used with starts");const z=Object.assign({},w);Object.keys(w).forEach(be=>{delete w[be]}),w.keywords=z.keywords,w.begin=Z(z.beforeMatch,H(z.begin)),w.starts={relevance:0,contains:[Object.assign(z,{endsParent:!0})]},w.relevance=0,delete z.beforeMatch},ba=["of","and","for","in","not","or","if","then","parent","list","value"],Vi="keyword";function Jn(w,C,z=Vi){const be=Object.create(null);return"string"==typeof w?ct(z,w.split(" ")):Array.isArray(w)?ct(z,w):Object.keys(w).forEach(function(ut){Object.assign(be,Jn(w[ut],C,ut))}),be;function ct(ut,J){C&&(J=J.map(Y=>Y.toLowerCase())),J.forEach(function(Y){const se=Y.split("|");be[se[0]]=[ut,Fn(se[0],se[1])]})}}function Fn(w,C){return C?Number(C):function eo(w){return ba.includes(w.toLowerCase())}(w)?0:1}const Ao={},sn=w=>{console.error(w)},$r=(w,...C)=>{console.log(`WARN: ${w}`,...C)},er=(w,C)=>{Ao[`${w}/${C}`]||(console.log(`Deprecated as of ${w}. ${C}`),Ao[`${w}/${C}`]=!0)},yr=new Error;function No(w,C,{key:z}){let be=0;const ct=w[z],ut={},J={};for(let Y=1;Y<=C.length;Y++)J[Y+be]=ct[Y],ut[Y+be]=!0,be+=me(C[Y-1]);w[z]=J,w[z]._emit=ut,w[z]._multi=!0}function Qe(w){(function zi(w){w.scope&&"object"==typeof w.scope&&null!==w.scope&&(w.beginScope=w.scope,delete w.scope)})(w),"string"==typeof w.beginScope&&(w.beginScope={_wrap:w.beginScope}),"string"==typeof w.endScope&&(w.endScope={_wrap:w.endScope}),function Dn(w){if(Array.isArray(w.begin)){if(w.skip||w.excludeBegin||w.returnBegin)throw sn("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),yr;if("object"!=typeof w.beginScope||null===w.beginScope)throw sn("beginScope must be object"),yr;No(w,w.begin,{key:"beginScope"}),w.begin=Pe(w.begin,{joinWith:""})}}(w),function Mo(w){if(Array.isArray(w.end)){if(w.skip||w.excludeEnd||w.returnEnd)throw sn("skip, excludeEnd, returnEnd not compatible with endScope: {}"),yr;if("object"!=typeof w.endScope||null===w.endScope)throw sn("endScope must be object"),yr;No(w,w.end,{key:"endScope"}),w.end=Pe(w.end,{joinWith:""})}}(w)}function xo(w){function C(J,Y){return new RegExp(F(J),"m"+(w.case_insensitive?"i":"")+(w.unicodeRegex?"u":"")+(Y?"g":""))}class z{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(Y,se){se.position=this.position++,this.matchIndexes[this.matchAt]=se,this.regexes.push([se,Y]),this.matchAt+=me(Y)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const Y=this.regexes.map(se=>se[1]);this.matcherRe=C(Pe(Y,{joinWith:"|"}),!0),this.lastIndex=0}exec(Y){this.matcherRe.lastIndex=this.lastIndex;const se=this.matcherRe.exec(Y);if(!se)return null;const bt=se.findIndex((no,Gi)=>Gi>0&&void 0!==no),Ue=this.matchIndexes[bt];return se.splice(0,bt),Object.assign(se,Ue)}}class be{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(Y){if(this.multiRegexes[Y])return this.multiRegexes[Y];const se=new z;return this.rules.slice(Y).forEach(([bt,Ue])=>se.addRule(bt,Ue)),se.compile(),this.multiRegexes[Y]=se,se}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(Y,se){this.rules.push([Y,se]),"begin"===se.type&&this.count++}exec(Y){const se=this.getMatcher(this.regexIndex);se.lastIndex=this.lastIndex;let bt=se.exec(Y);if(this.resumingScanAtSamePosition()&&(!bt||bt.index!==this.lastIndex)){const Ue=this.getMatcher(0);Ue.lastIndex=this.lastIndex+1,bt=Ue.exec(Y)}return bt&&(this.regexIndex+=bt.position+1,this.regexIndex===this.count&&this.considerAll()),bt}}if(w.compilerExtensions||(w.compilerExtensions=[]),w.contains&&w.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return w.classNameAliases=x(w.classNameAliases||{}),function ut(J,Y){const se=J;if(J.isCompiled)return se;[Xn,ya,Qe,va].forEach(Ue=>Ue(J,Y)),w.compilerExtensions.forEach(Ue=>Ue(J,Y)),J.__beforeBegin=null,[Io,ji,To].forEach(Ue=>Ue(J,Y)),J.isCompiled=!0;let bt=null;return"object"==typeof J.keywords&&J.keywords.$pattern&&(J.keywords=Object.assign({},J.keywords),bt=J.keywords.$pattern,delete J.keywords.$pattern),bt=bt||/\w+/,J.keywords&&(J.keywords=Jn(J.keywords,w.case_insensitive)),se.keywordPatternRe=C(bt,!0),Y&&(J.begin||(J.begin=/\B|\b/),se.beginRe=C(se.begin),!J.end&&!J.endsWithParent&&(J.end=/\B|\b/),J.end&&(se.endRe=C(se.end)),se.terminatorEnd=F(se.end)||"",J.endsWithParent&&Y.terminatorEnd&&(se.terminatorEnd+=(J.end?"|":"")+Y.terminatorEnd)),J.illegal&&(se.illegalRe=C(J.illegal)),J.contains||(J.contains=[]),J.contains=[].concat(...J.contains.map(function(Ue){return function qi(w){return w.variants&&!w.cachedVariants&&(w.cachedVariants=w.variants.map(function(C){return x(w,{variants:null},C)})),w.cachedVariants?w.cachedVariants:to(w)?x(w,{starts:w.starts?x(w.starts):null}):Object.isFrozen(w)?x(w):w}("self"===Ue?J:Ue)})),J.contains.forEach(function(Ue){ut(Ue,se)}),J.starts&&ut(J.starts,Y),se.matcher=function ct(J){const Y=new be;return J.contains.forEach(se=>Y.addRule(se.begin,{rule:se,type:"begin"})),J.terminatorEnd&&Y.addRule(J.terminatorEnd,{type:"end"}),J.illegal&&Y.addRule(J.illegal,{type:"illegal"}),Y}(se),se}(w)}function to(w){return!!w&&(w.endsWithParent||to(w.starts))}class Rl extends Error{constructor(C,z){super(C),this.name="HTMLInjectionError",this.html=z}}const Wi=k,wa=x,Ea=Symbol("nomatch");var Ro=function(w){const C=Object.create(null),z=Object.create(null),be=[];let ct=!0;const ut="Could not find the language '{}', did you forget to load/include a language module?",J={disableAutodetect:!0,name:"Plain text",contains:[]};let Y={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:L};function se(V){return Y.noHighlightRe.test(V)}function Ue(V,re,Ne){let Xe="",ht="";"object"==typeof re?(Xe=V,Ne=re.ignoreIllegals,ht=re.language):(er("10.7.0","highlight(lang, code, ...args) has been deprecated."),er("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),ht=V,Xe=re),void 0===Ne&&(Ne=!0);const mn={code:Xe,language:ht};oo("before:highlight",mn);const nr=mn.result?mn.result:no(mn.language,mn.code,Ne);return nr.code=mn.code,oo("after:highlight",nr),nr}function no(V,re,Ne,Xe){const ht=Object.create(null);function mn(S,j){return S.keywords[j]}function nr(){if(!fe.keywords)return void gt.addText(Ke);let S=0;fe.keywordPatternRe.lastIndex=0;let j=fe.keywordPatternRe.exec(Ke),Se="";for(;j;){Se+=Ke.substring(S,j.index);const Ge=Je.case_insensitive?j[0].toLowerCase():j[0],Rt=mn(fe,Ge);if(Rt){const[yn,Gt]=Rt;gt.addText(Se),Se="",ht[Ge]=(ht[Ge]||0)+1,ht[Ge]<=7&&(Ji+=Gt),yn.startsWith("_")?Se+=j[0]:gt.addKeyword(j[0],Je.classNameAliases[yn]||yn)}else Se+=j[0];S=fe.keywordPatternRe.lastIndex,j=fe.keywordPatternRe.exec(Ke)}Se+=Ke.substring(S),gt.addText(Se)}function Wt(){null!=fe.subLanguage?function ft(){if(""===Ke)return;let S=null;if("string"==typeof fe.subLanguage){if(!C[fe.subLanguage])return void gt.addText(Ke);S=no(fe.subLanguage,Ke,!0,oe[fe.subLanguage]),oe[fe.subLanguage]=S._top}else S=Ki(Ke,fe.subLanguage.length?fe.subLanguage:null);fe.relevance>0&&(Ji+=S.relevance),gt.addSublanguage(S._emitter,S.language)}():nr(),Ke=""}function wt(S,j){let Se=1;const Ge=j.length-1;for(;Se<=Ge;){if(!S._emit[Se]){Se++;continue}const Rt=Je.classNameAliases[S[Se]]||S[Se],yn=j[Se];Rt?gt.addKeyword(yn,Rt):(Ke=yn,nr(),Ke=""),Se++}}function ae(S,j){return S.scope&&"string"==typeof S.scope&>.openNode(Je.classNameAliases[S.scope]||S.scope),S.beginScope&&(S.beginScope._wrap?(gt.addKeyword(Ke,Je.classNameAliases[S.beginScope._wrap]||S.beginScope._wrap),Ke=""):S.beginScope._multi&&(wt(S.beginScope,j),Ke="")),fe=Object.create(S,{parent:{value:fe}}),fe}function Yi(S,j,Se){let Ge=function Ee(w,C){const z=w&&w.exec(C);return z&&0===z.index}(S.endRe,Se);if(Ge){if(S["on:end"]){const Rt=new v(S);S["on:end"](j,Rt),Rt.isMatchIgnored&&(Ge=!1)}if(Ge){for(;S.endsParent&&S.parent;)S=S.parent;return S}}if(S.endsWithParent)return Yi(S.parent,j,Se)}function Zi(S){return 0===fe.matcher.regexIndex?(Ke+=S[0],1):(Lr=!0,0)}function Bl(S){const j=S[0],Se=re.substring(S.index),Ge=Yi(fe,S,Se);if(!Ge)return Ea;const Rt=fe;fe.endScope&&fe.endScope._wrap?(Wt(),gt.addKeyword(j,fe.endScope._wrap)):fe.endScope&&fe.endScope._multi?(Wt(),wt(fe.endScope,S)):Rt.skip?Ke+=j:(Rt.returnEnd||Rt.excludeEnd||(Ke+=j),Wt(),Rt.excludeEnd&&(Ke=j));do{fe.scope&>.closeNode(),!fe.skip&&!fe.subLanguage&&(Ji+=fe.relevance),fe=fe.parent}while(fe!==Ge.parent);return Ge.starts&&ae(Ge.starts,S),Rt.returnEnd?0:j.length}let Oe={};function io(S,j){const Se=j&&j[0];if(Ke+=S,null==Se)return Wt(),0;if("begin"===Oe.type&&"end"===j.type&&Oe.index===j.index&&""===Se){if(Ke+=re.slice(j.index,j.index+1),!ct){const Ge=new Error(`0 width match regex (${V})`);throw Ge.languageName=V,Ge.badRule=Oe.rule,Ge}return 1}if(Oe=j,"begin"===j.type)return function Sn(S){const j=S[0],Se=S.rule,Ge=new v(Se),Rt=[Se.__beforeBegin,Se["on:begin"]];for(const yn of Rt)if(yn&&(yn(S,Ge),Ge.isMatchIgnored))return Zi(j);return Se.skip?Ke+=j:(Se.excludeBegin&&(Ke+=j),Wt(),!Se.returnBegin&&!Se.excludeBegin&&(Ke=j)),ae(Se,S),Se.returnBegin?0:j.length}(j);if("illegal"===j.type&&!Ne){const Ge=new Error('Illegal lexeme "'+Se+'" for mode "'+(fe.scope||"")+'"');throw Ge.mode=fe,Ge}if("end"===j.type){const Ge=Bl(j);if(Ge!==Ea)return Ge}if("illegal"===j.type&&""===Se)return 1;if(B>1e5&&B>3*j.index)throw new Error("potential infinite loop, way more iterations than matches");return Ke+=Se,Se.length}const Je=tr(V);if(!Je)throw sn(ut.replace("{}",V)),new Error('Unknown language: "'+V+'"');const Qi=xo(Je);let Xi="",fe=Xe||Qi;const oe={},gt=new Y.__emitter(Y);!function Ul(){const S=[];for(let j=fe;j!==Je;j=j.parent)j.scope&&S.unshift(j.scope);S.forEach(j=>gt.openNode(j))}();let Ke="",Ji=0,rr=0,B=0,Lr=!1;try{for(fe.matcher.considerAll();;){B++,Lr?Lr=!1:fe.matcher.considerAll(),fe.matcher.lastIndex=rr;const S=fe.matcher.exec(re);if(!S)break;const Se=io(re.substring(rr,S.index),S);rr=S.index+Se}return io(re.substring(rr)),gt.closeAllNodes(),gt.finalize(),Xi=gt.toHTML(),{language:V,value:Xi,relevance:Ji,illegal:!1,_emitter:gt,_top:fe}}catch(S){if(S.message&&S.message.includes("Illegal"))return{language:V,value:Wi(re),illegal:!0,relevance:0,_illegalBy:{message:S.message,index:rr,context:re.slice(rr-100,rr+100),mode:S.mode,resultSoFar:Xi},_emitter:gt};if(ct)return{language:V,value:Wi(re),illegal:!1,relevance:0,errorRaised:S,_emitter:gt,_top:fe};throw S}}function Ki(V,re){re=re||Y.languages||Object.keys(C);const Ne=function Gi(V){const re={value:Wi(V),illegal:!1,relevance:0,_top:J,_emitter:new Y.__emitter(Y)};return re._emitter.addText(V),re}(V),Xe=re.filter(tr).filter(Da).map(Wt=>no(Wt,V,!1));Xe.unshift(Ne);const ht=Xe.sort((Wt,wt)=>{if(Wt.relevance!==wt.relevance)return wt.relevance-Wt.relevance;if(Wt.language&&wt.language){if(tr(Wt.language).supersetOf===wt.language)return 1;if(tr(wt.language).supersetOf===Wt.language)return-1}return 0}),[mn,nr]=ht,ft=mn;return ft.secondBest=nr,ft}function Oo(V){let re=null;const Ne=function bt(V){let re=V.className+" ";re+=V.parentNode?V.parentNode.className:"";const Ne=Y.languageDetectRe.exec(re);if(Ne){const Xe=tr(Ne[1]);return Xe||($r(ut.replace("{}",Ne[1])),$r("Falling back to no-highlight mode for this block.",V)),Xe?Ne[1]:"no-highlight"}return re.split(/\s+/).find(Xe=>se(Xe)||tr(Xe))}(V);if(se(Ne))return;if(oo("before:highlightElement",{el:V,language:Ne}),V.children.length>0&&(Y.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(V)),Y.throwUnescapedHTML))throw new Rl("One of your code blocks includes unescaped HTML.",V.innerHTML);re=V;const Xe=re.textContent,ht=Ne?Ue(Xe,{language:Ne,ignoreIllegals:!0}):Ki(Xe);V.innerHTML=ht.value,function kl(V,re,Ne){const Xe=re&&z[re]||Ne;V.classList.add("hljs"),V.classList.add(`language-${Xe}`)}(V,Ne,ht.language),V.result={language:ht.language,re:ht.relevance,relevance:ht.relevance},ht.secondBest&&(V.secondBest={language:ht.secondBest.language,relevance:ht.secondBest.relevance}),oo("after:highlightElement",{el:V,result:ht,text:Xe})}let _a=!1;function pt(){"loading"!==document.readyState?document.querySelectorAll(Y.cssSelector).forEach(Oo):_a=!0}function tr(V){return V=(V||"").toLowerCase(),C[V]||C[z[V]]}function ko(V,{languageName:re}){"string"==typeof V&&(V=[V]),V.forEach(Ne=>{z[Ne.toLowerCase()]=re})}function Da(V){const re=tr(V);return re&&!re.disableAutodetect}function oo(V,re){const Ne=V;be.forEach(function(Xe){Xe[Ne]&&Xe[Ne](re)})}typeof window<"u"&&window.addEventListener&&window.addEventListener("DOMContentLoaded",function Pr(){_a&&pt()},!1),Object.assign(w,{highlight:Ue,highlightAuto:Ki,highlightAll:pt,highlightElement:Oo,highlightBlock:function Ca(V){return er("10.7.0","highlightBlock will be removed entirely in v12.0"),er("10.7.0","Please use highlightElement now."),Oo(V)},configure:function $l(V){Y=wa(Y,V)},initHighlighting:()=>{pt(),er("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")},initHighlightingOnLoad:function Bn(){pt(),er("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")},registerLanguage:function Cn(V,re){let Ne=null;try{Ne=re(w)}catch(Xe){if(sn("Language definition for '{}' could not be registered.".replace("{}",V)),!ct)throw Xe;sn(Xe),Ne=J}Ne.name||(Ne.name=V),C[V]=Ne,Ne.rawDefinition=re.bind(null,w),Ne.aliases&&ko(Ne.aliases,{languageName:V})},unregisterLanguage:function Oh(V){delete C[V];for(const re of Object.keys(z))z[re]===V&&delete z[re]},listLanguages:function Ll(){return Object.keys(C)},getLanguage:tr,registerAliases:ko,autoDetection:Da,inherit:wa,addPlugin:function Fl(V){(function ro(V){V["before:highlightBlock"]&&!V["before:highlightElement"]&&(V["before:highlightElement"]=re=>{V["before:highlightBlock"](Object.assign({block:re.el},re))}),V["after:highlightBlock"]&&!V["after:highlightElement"]&&(V["after:highlightElement"]=re=>{V["after:highlightBlock"](Object.assign({block:re.el},re))})})(V),be.push(V)}}),w.debugMode=function(){ct=!1},w.safeMode=function(){ct=!0},w.versionString="11.6.0",w.regex={concat:Z,lookahead:H,either:ue,optional:Q,anyNumberOfTimes:G};for(const V in qt)"object"==typeof qt[V]&&$.exports(qt[V]);return Object.assign(w,qt),w}({});q.exports=Ro,Ro.HighlightJS=Ro,Ro.default=Ro},725:q=>{q.exports=function $(g){const k={},x={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[k]}]};Object.assign(k,{className:"variable",variants:[{begin:g.regex.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},x]});const R={className:"subst",begin:/\$\(/,end:/\)/,contains:[g.BACKSLASH_ESCAPE]},N={begin:/<<-?\s*(?=\w+)/,starts:{contains:[g.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},U={className:"string",begin:/"/,end:/"/,contains:[g.BACKSLASH_ESCAPE,k,R]};R.contains.push(U);const I={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},g.NUMBER_MODE,k]},F=g.SHEBANG({binary:`(${["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"].join("|")})`,relevance:10}),H={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[g.inherit(g.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:["if","then","else","elif","fi","for","while","in","do","done","case","esac","function"],literal:["true","false"],built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"]},contains:[F,g.SHEBANG(),H,I,g.HASH_COMMENT_MODE,N,{match:/(\/[a-z._-]+)+/},U,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},k]}}},242:q=>{q.exports=function $(g){const v=g.regex,k=g.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),x="decltype\\(auto\\)",R="[a-zA-Z_]\\w*::",U="("+x+"|"+v.optional(R)+"[a-zA-Z_]\\w*"+v.optional("<[^<>]+>")+")",M={className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{match:/\batomic_[a-z]{3,6}\b/}]},I={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[g.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},g.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},L={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},F={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},g.inherit(I,{className:"string"}),{className:"string",begin:/<.*?>/},k,g.C_BLOCK_COMMENT_MODE]},H={className:"title",begin:v.optional(R)+g.IDENT_RE,relevance:0},G=v.optional(R)+g.IDENT_RE+"\\s*\\(",K={keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"],type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal128","const","static","complex","bool","imaginary"],literal:"true false NULL",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr"},ue=[F,M,k,g.C_BLOCK_COMMENT_MODE,L,I],me={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:K,contains:ue.concat([{begin:/\(/,end:/\)/,keywords:K,contains:ue.concat(["self"]),relevance:0}]),relevance:0},Ee={begin:"("+U+"[\\*&\\s]+)+"+G,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:K,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:x,keywords:K,relevance:0},{begin:G,returnBegin:!0,contains:[g.inherit(H,{className:"title.function"})],relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:K,relevance:0,contains:[k,g.C_BLOCK_COMMENT_MODE,I,L,M,{begin:/\(/,end:/\)/,keywords:K,relevance:0,contains:["self",k,g.C_BLOCK_COMMENT_MODE,I,L,M]}]},M,k,g.C_BLOCK_COMMENT_MODE,F]};return{name:"C",aliases:["h"],keywords:K,disableAutodetect:!0,illegal:"=]/,contains:[{beginKeywords:"final class struct"},g.TITLE_MODE]}]),exports:{preprocessor:F,strings:I,keywords:K}}}},94:q=>{q.exports=function $(g){const v=g.regex,k=g.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),x="decltype\\(auto\\)",R="[a-zA-Z_]\\w*::",U="(?!struct)("+x+"|"+v.optional(R)+"[a-zA-Z_]\\w*"+v.optional("<[^<>]+>")+")",M={className:"type",begin:"\\b[a-z\\d_]*_t\\b"},I={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[g.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},g.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},L={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},F={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},g.inherit(I,{className:"string"}),{className:"string",begin:/<.*?>/},k,g.C_BLOCK_COMMENT_MODE]},H={className:"title",begin:v.optional(R)+g.IDENT_RE,relevance:0},G=v.optional(R)+g.IDENT_RE+"\\s*\\(",De={type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"]},Pe={className:"function.dispatch",relevance:0,keywords:{_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"]},begin:v.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,g.IDENT_RE,v.lookahead(/(<[^<>]+>|)\s*\(/))},qe=[Pe,F,M,k,g.C_BLOCK_COMMENT_MODE,L,I],ne={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:De,contains:qe.concat([{begin:/\(/,end:/\)/,keywords:De,contains:qe.concat(["self"]),relevance:0}]),relevance:0};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:De,illegal:".]/,contains:[{begin:x,keywords:De,relevance:0},{begin:G,returnBegin:!0,contains:[H],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[I,L]},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:De,relevance:0,contains:[k,g.C_BLOCK_COMMENT_MODE,I,L,M,{begin:/\(/,end:/\)/,keywords:De,relevance:0,contains:["self",k,g.C_BLOCK_COMMENT_MODE,I,L,M]}]},M,k,g.C_BLOCK_COMMENT_MODE,F]},Pe,qe,[F,{begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\s*<(?!<)",end:">",keywords:De,contains:["self",M]},{begin:g.IDENT_RE+"::",keywords:De},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:"keyword",3:"title.class"}}])}}},120:q=>{q.exports=function $(g){const U={keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","async","await","by","descending","equals","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","remove","select","set","unmanaged","value|0","var","when","where","with","yield"]),built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"],literal:["default","false","null","true"]},M=g.inherit(g.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),T={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},I={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},L=g.inherit(I,{illegal:/\n/}),F={className:"subst",begin:/\{/,end:/\}/,keywords:U},H=g.inherit(F,{illegal:/\n/}),G={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},g.BACKSLASH_ESCAPE,H]},Q={className:"string",begin:/\$@"/,end:'"',contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},F]},Z=g.inherit(Q,{illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},H]});F.contains=[Q,G,I,g.APOS_STRING_MODE,g.QUOTE_STRING_MODE,T,g.C_BLOCK_COMMENT_MODE],H.contains=[Z,G,L,g.APOS_STRING_MODE,g.QUOTE_STRING_MODE,T,g.inherit(g.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];const K={variants:[Q,G,I,g.APOS_STRING_MODE,g.QUOTE_STRING_MODE]},ue={begin:"<",end:">",contains:[{beginKeywords:"in out"},M]},me=g.IDENT_RE+"(<"+g.IDENT_RE+"(\\s*,\\s*"+g.IDENT_RE+")*>)?(\\[\\])?",Ee={begin:"@"+g.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:U,illegal:/::/,contains:[g.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:""}]}]}),g.C_LINE_COMMENT_MODE,g.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{keyword:"if else elif endif define undef warning error line region endregion pragma checksum"}},K,T,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},M,ue,g.C_LINE_COMMENT_MODE,g.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[M,g.C_LINE_COMMENT_MODE,g.C_BLOCK_COMMENT_MODE]},{beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[M,ue,g.C_LINE_COMMENT_MODE,g.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+me+"\\s+)+"+g.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:U,contains:[{beginKeywords:["public","private","protected","static","internal","protected","abstract","async","extern","override","unsafe","virtual","new","sealed","partial"].join(" "),relevance:0},{begin:g.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,contains:[g.TITLE_MODE,ue],relevance:0},{match:/\(\)/},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:U,relevance:0,contains:[K,T,g.C_BLOCK_COMMENT_MODE]},g.C_LINE_COMMENT_MODE,g.C_BLOCK_COMMENT_MODE]},Ee]}}},240:q=>{const g=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],v=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],k=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],x=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],R=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse();q.exports=function N(U){const M=U.regex,T=(U=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:U.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[U.APOS_STRING_MODE,U.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:U.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}}))(U),G=[U.APOS_STRING_MODE,U.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[T.BLOCK_COMMENT,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/},T.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},T.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+k.join("|")+")"},{begin:":(:)?("+x.join("|")+")"}]},T.CSS_VARIABLE,{className:"attribute",begin:"\\b("+R.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[T.BLOCK_COMMENT,T.HEXCOLOR,T.IMPORTANT,T.CSS_NUMBER_MODE,...G,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...G,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},T.FUNCTION_DISPATCH]},{begin:M.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only",attribute:v.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...G,T.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+g.join("|")+")\\b"}]}}},826:q=>{q.exports=function $(g){const v=g.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:v.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:v.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}},626:q=>{q.exports=function $(g){const N={keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"],type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"],literal:["true","false","iota","nil"],built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"]};return{name:"Go",aliases:["golang"],keywords:N,illegal:"{q.exports=function $(g){const v=g.regex;return{name:"GraphQL",aliases:["gql"],case_insensitive:!0,disableAutodetect:!1,keywords:{keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"],literal:["true","false","null"]},contains:[g.HASH_COMMENT_MODE,g.QUOTE_STRING_MODE,g.NUMBER_MODE,{scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation",begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/,end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{scope:"symbol",begin:v.concat(/[_A-Za-z][_0-9A-Za-z]*/,v.lookahead(/\s*:/)),relevance:0}],illegal:[/[;<']/,/BEGIN/]}}},372:q=>{q.exports=function $(g){const v=g.regex,k={className:"number",relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{begin:g.NUMBER_RE}]},x=g.COMMENT();x.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];const R={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)\}/}]},N={className:"literal",begin:/\bon|off|true|false|yes|no\b/},U={className:"string",contains:[g.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]},M={begin:/\[/,end:/\]/,contains:[x,N,R,U,k,"self"],relevance:0},F=v.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[x,{className:"section",begin:/\[+/,end:/\]+/},{begin:v.concat(F,"(\\s*\\.\\s*",F,")*",v.lookahead(/\s*=\s*[^#\s]/)),className:"attr",starts:{end:/$/,contains:[x,M,N,R,U,k]}}]}}},984:q=>{var $="[0-9](_*[0-9])*",g=`\\.(${$})`,v="[0-9a-fA-F](_*[0-9a-fA-F])*",k={className:"number",variants:[{begin:`(\\b(${$})((${g})|\\.)?|(${g}))[eE][+-]?(${$})[fFdD]?\\b`},{begin:`\\b(${$})((${g})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${g})[fFdD]?\\b`},{begin:`\\b(${$})[fFdD]\\b`},{begin:`\\b0[xX]((${v})\\.?|(${v})?\\.(${v}))[pP][+-]?(${$})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${v})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function x(N,U,M){return-1===M?"":N.replace(U,T=>x(N,U,M-1))}q.exports=function R(N){const U=N.regex,M="[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",T=M+x("(?:<"+M+"~~~(?:\\s*,\\s*"+M+"~~~)*>)?",/~~~/g,2),G={keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed"],literal:["false","true","null"],type:["char","boolean","long","float","int","byte","short","double"],built_in:["super","this"]},Q={className:"meta",begin:"@"+M,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},Z={className:"params",begin:/\(/,end:/\)/,keywords:G,relevance:0,contains:[N.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:"Java",aliases:["jsp"],keywords:G,illegal:/<\/|#/,contains:[N.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},N.C_LINE_COMMENT_MODE,N.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:"string",contains:[N.BACKSLASH_ESCAPE]},N.APOS_STRING_MODE,N.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,M],className:{1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{begin:[U.concat(/(?!else)/,M),/\s+/,M,/\s+/,/=(?!=)/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,M],className:{1:"keyword",3:"title.class"},contains:[Z,N.C_LINE_COMMENT_MODE,N.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+T+"\\s+)",N.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:G,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:G,relevance:0,contains:[Q,N.APOS_STRING_MODE,N.QUOTE_STRING_MODE,k,N.C_BLOCK_COMMENT_MODE]},N.C_LINE_COMMENT_MODE,N.C_BLOCK_COMMENT_MODE]},k,Q]}}},354:q=>{const $="[A-Za-z$_][0-9A-Za-z$_]*",g=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],v=["true","false","null","undefined","NaN","Infinity"],k=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],x=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],R=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],N=["arguments","this","super","console","window","document","localStorage","module","global"],U=[].concat(R,k,x);q.exports=function M(T){const I=T.regex,F=$,Q={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(Ae,ye)=>{const xt=Ae[0].length+Ae.index,Ce=Ae.input[xt];if("<"===Ce||","===Ce)return void ye.ignoreMatch();let zt;">"===Ce&&(((Ae,{after:ye})=>{const xt="",on={match:[/const|var|let/,/\s+/,F,/\s*/,/=\s*/,/(async\s*)?/,I.lookahead(Vt)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[at]};return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:Z,exports:{PARAMS_CONTAINS:Mt,CLASS_REFERENCE:Zn},illegal:/#(?![$_A-z])/,contains:[T.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},T.APOS_STRING_MODE,T.QUOTE_STRING_MODE,Pe,qe,ne,st,Ee,Zn,{className:"attr",begin:F+I.lookahead(":"),relevance:0},on,{begin:"("+T.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[st,T.REGEXP_MODE,{className:"function",begin:Vt,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:T.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:Z,contains:Mt}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:""},{match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:Q.begin,"on:begin":Q.isTrulyOpeningTag,end:Q.end}],subLanguage:"xml",contains:[{begin:Q.begin,end:Q.end,skip:!0,contains:["self"]}]}]},Be,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+T.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[at,T.inherit(T.TITLE_MODE,{begin:F,className:"title.function"})]},{match:/\.\.\./,relevance:0},Qn,{match:"\\$"+F,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[at]},Pn,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},We,It,{match:/\$[(.]/}]}}},454:q=>{q.exports=function $(g){const x=["true","false","null"],R={scope:"literal",beginKeywords:x.join(" ")};return{name:"JSON",keywords:{literal:x},contains:[{className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},{match:/[{}[\],:]/,className:"punctuation",relevance:0},g.QUOTE_STRING_MODE,R,g.C_NUMBER_MODE,g.C_LINE_COMMENT_MODE,g.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}},643:q=>{var $="[0-9](_*[0-9])*",g=`\\.(${$})`,v="[0-9a-fA-F](_*[0-9a-fA-F])*",k={className:"number",variants:[{begin:`(\\b(${$})((${g})|\\.)?|(${g}))[eE][+-]?(${$})[fFdD]?\\b`},{begin:`\\b(${$})((${g})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${g})[fFdD]?\\b`},{begin:`\\b(${$})[fFdD]\\b`},{begin:`\\b0[xX]((${v})\\.?|(${v})?\\.(${v}))[pP][+-]?(${$})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${v})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};q.exports=function x(R){const N={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},M={className:"symbol",begin:R.UNDERSCORE_IDENT_RE+"@"},T={className:"subst",begin:/\$\{/,end:/\}/,contains:[R.C_NUMBER_MODE]},I={className:"variable",begin:"\\$"+R.UNDERSCORE_IDENT_RE},L={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[I,T]},{begin:"'",end:"'",illegal:/\n/,contains:[R.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[R.BACKSLASH_ESCAPE,I,T]}]};T.contains.push(L);const F={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+R.UNDERSCORE_IDENT_RE+")?"},H={className:"meta",begin:"@"+R.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[R.inherit(L,{className:"string"}),"self"]}]},G=k,Q=R.COMMENT("/\\*","\\*/",{contains:[R.C_BLOCK_COMMENT_MODE]}),Z={variants:[{className:"type",begin:R.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},K=Z;return K.variants[1].contains=[Z],Z.variants[1].contains=[K],{name:"Kotlin",aliases:["kt","kts"],keywords:N,contains:[R.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),R.C_LINE_COMMENT_MODE,Q,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},M,F,H,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:N,relevance:5,contains:[{begin:R.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[R.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:N,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[Z,R.C_LINE_COMMENT_MODE,Q],relevance:0},R.C_LINE_COMMENT_MODE,Q,F,H,L,R.C_NUMBER_MODE]},Q]},{begin:[/class|interface|trait/,/\s+/,R.UNDERSCORE_IDENT_RE],beginScope:{3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},R.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/,excludeBegin:!0,returnEnd:!0},F,H]},L,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},G]}}},580:q=>{const g=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],v=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],k=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],x=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],R=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse(),N=k.concat(x);q.exports=function U(M){const T=(M=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:M.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[M.APOS_STRING_MODE,M.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:M.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}}))(M),I=N,F="[\\w-]+",H="("+F+"|@\\{"+F+"\\})",G=[],Q=[],Z=function(Ze){return{className:"string",begin:"~?"+Ze+".*?"+Ze}},K=function(Ze,Nt,Mt){return{className:Ze,begin:Nt,relevance:Mt}},ue={$pattern:/[a-z-]+/,keyword:"and or not only",attribute:v.join(" ")},me={begin:"\\(",end:"\\)",contains:Q,keywords:ue,relevance:0};Q.push(M.C_LINE_COMMENT_MODE,M.C_BLOCK_COMMENT_MODE,Z("'"),Z('"'),T.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},T.HEXCOLOR,me,K("variable","@@?"+F,10),K("variable","@\\{"+F+"\\}"),K("built_in","~?`[^`]*?`"),{className:"attribute",begin:F+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0},T.IMPORTANT,{beginKeywords:"and not"},T.FUNCTION_DISPATCH);const Ee=Q.concat({begin:/\{/,end:/\}/,contains:G}),De={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(Q)},Pe={begin:H+"\\s*:",returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/},T.CSS_VARIABLE,{className:"attribute",begin:"\\b("+R.join("|")+")\\b",end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:Q}}]},qe={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",keywords:ue,returnEnd:!0,contains:Q,relevance:0}},ne={className:"variable",variants:[{begin:"@"+F+"\\s*:",relevance:15},{begin:"@"+F}],starts:{end:"[;}]",returnEnd:!0,contains:Ee}},Le={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:H,end:/\{/}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[M.C_LINE_COMMENT_MODE,M.C_BLOCK_COMMENT_MODE,De,K("keyword","all\\b"),K("variable","@\\{"+F+"\\}"),{begin:"\\b("+g.join("|")+")\\b",className:"selector-tag"},T.CSS_NUMBER_MODE,K("selector-tag",H,0),K("selector-id","#"+H),K("selector-class","\\."+H,0),K("selector-tag","&",0),T.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",begin:":("+k.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+x.join("|")+")"},{begin:/\(/,end:/\)/,relevance:0,contains:Ee},{begin:"!important"},T.FUNCTION_DISPATCH]},st={begin:F+`:(:)?(${I.join("|")})`,returnBegin:!0,contains:[Le]};return G.push(M.C_LINE_COMMENT_MODE,M.C_BLOCK_COMMENT_MODE,qe,ne,st,Pe,Le,De,T.FUNCTION_DISPATCH),{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:G}}},739:q=>{q.exports=function $(g){const v="\\[=*\\[",k="\\]=*\\]",x={begin:v,end:k,contains:["self"]},R=[g.COMMENT("--(?!"+v+")","$"),g.COMMENT("--"+v,k,{contains:[x],relevance:10})];return{name:"Lua",keywords:{$pattern:g.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:R.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[g.inherit(g.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:R}].concat(R)},g.C_NUMBER_MODE,g.APOS_STRING_MODE,g.QUOTE_STRING_MODE,{className:"string",begin:v,end:k,contains:[x],relevance:5}])}}},910:q=>{q.exports=function $(g){const v={className:"variable",variants:[{begin:"\\$\\("+g.UNDERSCORE_IDENT_RE+"\\)",contains:[g.BACKSLASH_ESCAPE]},{begin:/\$[@%{q.exports=function $(g){const k={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},T={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:g.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},I={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},L={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]},F=g.inherit(I,{contains:[]}),H=g.inherit(L,{contains:[]});I.contains.push(H),L.contains.push(F);let G=[k,T];return[I,L,F,H].forEach(K=>{K.contains=K.contains.concat(G)}),G=G.concat(I,L),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:G},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:G}]}]},k,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},I,L,{className:"quote",begin:"^>\\s+",contains:G,end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},T,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}},102:q=>{q.exports=function $(g){const k=/[a-zA-Z@][a-zA-Z0-9_]*/,T={$pattern:k,keyword:["@interface","@class","@protocol","@implementation"]};return{name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"],keywords:{"variable.language":["this","super"],$pattern:k,keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"],literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"],built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"],type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"]},illegal:"/,end:/$/,illegal:"\\n"},g.C_LINE_COMMENT_MODE,g.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+T.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:T,contains:[g.UNDERSCORE_TITLE_MODE]},{begin:"\\."+g.UNDERSCORE_IDENT_RE,relevance:0}]}}},330:q=>{q.exports=function $(g){const v=g.regex,x=/[dualxmsipngr]{0,12}/,R={$pattern:/[\w.]+/,keyword:["abs","accept","alarm","and","atan2","bind","binmode","bless","break","caller","chdir","chmod","chomp","chop","chown","chr","chroot","close","closedir","connect","continue","cos","crypt","dbmclose","dbmopen","defined","delete","die","do","dump","each","else","elsif","endgrent","endhostent","endnetent","endprotoent","endpwent","endservent","eof","eval","exec","exists","exit","exp","fcntl","fileno","flock","for","foreach","fork","format","formline","getc","getgrent","getgrgid","getgrnam","gethostbyaddr","gethostbyname","gethostent","getlogin","getnetbyaddr","getnetbyname","getnetent","getpeername","getpgrp","getpriority","getprotobyname","getprotobynumber","getprotoent","getpwent","getpwnam","getpwuid","getservbyname","getservbyport","getservent","getsockname","getsockopt","given","glob","gmtime","goto","grep","gt","hex","if","index","int","ioctl","join","keys","kill","last","lc","lcfirst","length","link","listen","local","localtime","log","lstat","lt","ma","map","mkdir","msgctl","msgget","msgrcv","msgsnd","my","ne","next","no","not","oct","open","opendir","or","ord","our","pack","package","pipe","pop","pos","print","printf","prototype","push","q|0","qq","quotemeta","qw","qx","rand","read","readdir","readline","readlink","readpipe","recv","redo","ref","rename","require","reset","return","reverse","rewinddir","rindex","rmdir","say","scalar","seek","seekdir","select","semctl","semget","semop","send","setgrent","sethostent","setnetent","setpgrp","setpriority","setprotoent","setpwent","setservent","setsockopt","shift","shmctl","shmget","shmread","shmwrite","shutdown","sin","sleep","socket","socketpair","sort","splice","split","sprintf","sqrt","srand","stat","state","study","sub","substr","symlink","syscall","sysopen","sysread","sysseek","system","syswrite","tell","telldir","tie","tied","time","times","tr","truncate","uc","ucfirst","umask","undef","unless","unlink","unpack","unshift","untie","until","use","utime","values","vec","wait","waitpid","wantarray","warn","when","while","write","x|0","xor","y|0"].join(" ")},N={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:R},U={begin:/->\{/,end:/\}/},M={variants:[{begin:/\$\d/},{begin:v.concat(/[$%@](\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])")},{begin:/[$%@][^\s\w{]/,relevance:0}]},T=[g.BACKSLASH_ESCAPE,N,M],I=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],L=(G,Q,Z="\\1")=>{const K="\\1"===Z?Z:v.concat(Z,Q);return v.concat(v.concat("(?:",G,")"),Q,/(?:\\.|[^\\\/])*?/,K,/(?:\\.|[^\\\/])*?/,Z,x)},F=(G,Q,Z)=>v.concat(v.concat("(?:",G,")"),Q,/(?:\\.|[^\\\/])*?/,Z,x),H=[M,g.HASH_COMMENT_MODE,g.COMMENT(/^=\w/,/=cut/,{endsWithParent:!0}),U,{className:"string",contains:T,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[g.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[g.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{begin:"-?\\w+\\s*=>",relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+g.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[g.HASH_COMMENT_MODE,{className:"regexp",variants:[{begin:L("s|tr|y",v.either(...I,{capture:!0}))},{begin:L("s|tr|y","\\(","\\)")},{begin:L("s|tr|y","\\[","\\]")},{begin:L("s|tr|y","\\{","\\}")}],relevance:2},{className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{begin:F("(?:m|qr)?",/\//,/\//)},{begin:F("m|qr",v.either(...I,{capture:!0}),/\1/)},{begin:F("m|qr",/\(/,/\)/)},{begin:F("m|qr",/\[/,/\]/)},{begin:F("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[g.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return N.contains=H,U.contains=H,{name:"Perl",aliases:["pl","pm"],keywords:R,contains:H}}},164:q=>{q.exports=function $(g){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},g.inherit(g.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),g.inherit(g.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}},188:q=>{q.exports=function $(g){const v=g.regex,k=/(?![A-Za-z0-9])(?![$])/,x=v.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,k),R=v.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,k),N={scope:"variable",match:"\\$+"+x},M={scope:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},T=g.inherit(g.APOS_STRING_MODE,{illegal:null}),F="[ \t\n]",H={scope:"string",variants:[g.inherit(g.QUOTE_STRING_MODE,{illegal:null,contains:g.QUOTE_STRING_MODE.contains.concat(M)}),T,g.END_SAME_AS_BEGIN({begin:/<<<[ \t]*(\w+)\n/,end:/[ \t]*(\w+)\b/,contains:g.QUOTE_STRING_MODE.contains.concat(M)})]},G={scope:"number",variants:[{begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?"}],relevance:0},Q=["false","null","true"],Z=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],K=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],me={keyword:Z,literal:(Mt=>{const at=[];return Mt.forEach(We=>{at.push(We),We.toLowerCase()===We?at.push(We.toUpperCase()):at.push(We.toLowerCase())}),at})(Q),built_in:K},Ee=Mt=>Mt.map(at=>at.replace(/\|\d+$/,"")),De={variants:[{match:[/new/,v.concat(F,"+"),v.concat("(?!",Ee(K).join("\\b|"),"\\b)"),R],scope:{1:"keyword",4:"title.class"}}]},Pe=v.concat(x,"\\b(?!\\()"),qe={variants:[{match:[v.concat(/::/,v.lookahead(/(?!class\b)/)),Pe],scope:{2:"variable.constant"}},{match:[/::/,/class/],scope:{2:"variable.language"}},{match:[R,v.concat(/::/,v.lookahead(/(?!class\b)/)),Pe],scope:{1:"title.class",3:"variable.constant"}},{match:[R,v.concat("::",v.lookahead(/(?!class\b)/))],scope:{1:"title.class"}},{match:[R,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]},ne={scope:"attr",match:v.concat(x,v.lookahead(":"),v.lookahead(/(?!::)/))},Le={relevance:0,begin:/\(/,end:/\)/,keywords:me,contains:[ne,N,qe,g.C_BLOCK_COMMENT_MODE,H,G,De]},st={relevance:0,match:[/\b/,v.concat("(?!fn\\b|function\\b|",Ee(Z).join("\\b|"),"|",Ee(K).join("\\b|"),"\\b)"),x,v.concat(F,"*"),v.lookahead(/(?=\()/)],scope:{3:"title.function.invoke"},contains:[Le]};Le.contains.push(st);const Ze=[ne,qe,g.C_BLOCK_COMMENT_MODE,H,G,De];return{case_insensitive:!1,keywords:me,contains:[{begin:v.concat(/#\[\s*/,R),beginScope:"meta",end:/]/,endScope:"meta",keywords:{literal:Q,keyword:["new","array"]},contains:[{begin:/\[/,end:/]/,keywords:{literal:Q,keyword:["new","array"]},contains:["self",...Ze]},...Ze,{scope:"meta",match:R}]},g.HASH_COMMENT_MODE,g.COMMENT("//","$"),g.COMMENT("/\\*","\\*/",{contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,keywords:"__halt_compiler",starts:{scope:"comment",end:g.MATCH_NOTHING_RE,contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},{scope:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},{scope:"variable.language",match:/\$this\b/},N,st,qe,{match:[/const/,/\s/,x],scope:{1:"keyword",3:"variable.constant"}},De,{scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},g.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:me,contains:["self",N,qe,g.C_BLOCK_COMMENT_MODE,H,G]}]},{scope:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},g.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[g.inherit(g.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{beginKeywords:"use",relevance:0,end:";",contains:[{match:/\b(as|const|function)\b/,scope:"keyword"},g.UNDERSCORE_TITLE_MODE]},H,G]}}},100:q=>{q.exports=function $(g){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}},990:q=>{q.exports=function $(g){return{aliases:["pycon"],contains:[{className:"meta.prompt",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}},847:q=>{q.exports=function $(g){const v=g.regex,k=/[\p{XID_Start}_]\p{XID_Continue}*/u,x=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],M={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:x,built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},T={className:"meta",begin:/^(>>>|\.\.\.) /},I={className:"subst",begin:/\{/,end:/\}/,keywords:M,illegal:/#/},L={begin:/\{\{/,relevance:0},F={className:"string",contains:[g.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[g.BACKSLASH_ESCAPE,T],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[g.BACKSLASH_ESCAPE,T],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[g.BACKSLASH_ESCAPE,T,L,I]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[g.BACKSLASH_ESCAPE,T,L,I]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[g.BACKSLASH_ESCAPE,L,I]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[g.BACKSLASH_ESCAPE,L,I]},g.APOS_STRING_MODE,g.QUOTE_STRING_MODE]},H="[0-9](_?[0-9])*",G=`(\\b(${H}))?\\.(${H})|\\b(${H})\\.`,Q=`\\b|${x.join("|")}`,Z={className:"number",relevance:0,variants:[{begin:`(\\b(${H})|(${G}))[eE][+-]?(${H})[jJ]?(?=${Q})`},{begin:`(${G})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${Q})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${Q})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${Q})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${Q})`},{begin:`\\b(${H})[jJ](?=${Q})`}]},K={className:"comment",begin:v.lookahead(/# type:/),end:/$/,keywords:M,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},ue={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:M,contains:["self",T,Z,F,g.HASH_COMMENT_MODE]}]};return I.contains=[F,Z,T],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:M,illegal:/(<\/|->|\?)|=>/,contains:[T,Z,{begin:/\bself\b/},{beginKeywords:"if",relevance:0},F,K,g.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,k],scope:{1:"keyword",3:"title.function"},contains:[ue]},{variants:[{match:[/\bclass/,/\s+/,k,/\s*/,/\(\s*/,k,/\s*\)/]},{match:[/\bclass/,/\s+/,k]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[Z,ue,F]}]}}},553:q=>{q.exports=function $(g){const v=g.regex,k=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,x=v.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),R=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,N=v.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/);return{name:"R",keywords:{$pattern:k,keyword:"function if in break next repeat else for while",literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10",built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm"},contains:[g.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/,starts:{end:v.lookahead(v.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)),endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{scope:"variable",variants:[{match:k},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0}]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}]}),g.HASH_COMMENT_MODE,{scope:"string",contains:[g.BACKSLASH_ESCAPE],variants:[g.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/}),g.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/}),g.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/}),g.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/}),g.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/}),g.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"',relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{1:"operator",2:"number"},match:[R,x]},{scope:{1:"operator",2:"number"},match:[/%[^%]*%/,x]},{scope:{1:"punctuation",2:"number"},match:[N,x]},{scope:{2:"number"},match:[/[^a-zA-Z0-9._]|^/,x]}]},{scope:{3:"operator"},match:[k,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:R},{match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:N},{begin:"`",end:"`",contains:[{begin:/\\./}]}]}}},185:q=>{q.exports=function $(g){const v=g.regex,k="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",x=v.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),R=v.concat(x,/(::\w+)*/),N={"variable.constant":["__FILE__","__LINE__"],"variable.language":["self","super"],keyword:["alias","and","attr_accessor","attr_reader","attr_writer","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","include","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield"],built_in:["proc","lambda"],literal:["true","false","nil"]},U={className:"doctag",begin:"@[A-Za-z]+"},M={begin:"#<",end:">"},T=[g.COMMENT("#","$",{contains:[U]}),g.COMMENT("^=begin","^=end",{contains:[U],relevance:10}),g.COMMENT("^__END__",g.MATCH_NOTHING_RE)],I={className:"subst",begin:/#\{/,end:/\}/,keywords:N},L={className:"string",contains:[g.BACKSLASH_ESCAPE,I],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{begin:v.concat(/<<[-~]?'?/,v.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),contains:[g.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[g.BACKSLASH_ESCAPE,I]})]}]},H="[0-9](_?[0-9])*",Q={variants:[{match:/\(\)/},{className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,keywords:N}]},Ee=[L,{variants:[{match:[/class\s+/,R,/\s+<\s+/,R]},{match:[/class\s+/,R]}],scope:{2:"title.class",4:"title.class.inherited"},keywords:N},{relevance:0,match:[R,/\.new[ (]/],scope:{1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},{match:[/def/,/\s+/,k],scope:{1:"keyword",3:"title.function"},contains:[Q]},{begin:g.IDENT_RE+"::"},{className:"symbol",begin:g.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[L,{begin:k}],relevance:0},{className:"number",relevance:0,variants:[{begin:`\\b([1-9](_?[0-9])*|0)(\\.(${H}))?([eE][+-]?(${H})|r)?i?\\b`},{begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{begin:"\\b0(_?[0-7])+r?i?\\b"}]},{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{className:"params",begin:/\|/,end:/\|/,excludeBegin:!0,excludeEnd:!0,relevance:0,keywords:N},{begin:"("+g.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{className:"regexp",contains:[g.BACKSLASH_ESCAPE,I],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(M,T),relevance:0}].concat(M,T);I.contains=Ee,Q.contains=Ee;const ne=[{begin:/^\s*=>/,starts:{end:"$",contains:Ee}},{className:"meta.prompt",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])",starts:{end:"$",keywords:N,contains:Ee}}];return T.unshift(M),{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:N,illegal:/\/\*/,contains:[g.SHEBANG({binary:"ruby"})].concat(ne).concat(T).concat(Ee)}}},929:q=>{q.exports=function $(g){const v=g.regex,k={className:"title.function.invoke",relevance:0,begin:v.concat(/\b/,/(?!let\b)/,g.IDENT_RE,v.lookahead(/\s*\(/))},x="([ui](8|16|32|64|128|size)|f(32|64))?",U=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],M=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"];return{name:"Rust",aliases:["rs"],keywords:{$pattern:g.IDENT_RE+"!?",type:M,keyword:["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","unsafe","unsized","use","virtual","where","while","yield"],literal:["true","false","Some","None","Ok","Err"],built_in:U},illegal:""},k]}}},574:q=>{const g=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],v=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],k=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],x=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],R=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse();q.exports=function N(U){const M=(U=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:U.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[U.APOS_STRING_MODE,U.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:U.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}}))(U),T=x,I=k,L="@[a-z-]+",G={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b",relevance:0};return{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[U.C_LINE_COMMENT_MODE,U.C_BLOCK_COMMENT_MODE,M.CSS_NUMBER_MODE,{className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},M.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag",begin:"\\b("+g.join("|")+")\\b",relevance:0},{className:"selector-pseudo",begin:":("+I.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+T.join("|")+")"},G,{begin:/\(/,end:/\)/,contains:[M.CSS_NUMBER_MODE]},M.CSS_VARIABLE,{className:"attribute",begin:"\\b("+R.join("|")+")\\b"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:/:/,end:/[;}{]/,relevance:0,contains:[M.BLOCK_COMMENT,G,M.HEXCOLOR,M.CSS_NUMBER_MODE,U.QUOTE_STRING_MODE,U.APOS_STRING_MODE,M.IMPORTANT,M.FUNCTION_DISPATCH]},{begin:"@(page|font-face)",keywords:{$pattern:L,keyword:"@page @font-face"}},{begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only",attribute:v.join(" ")},contains:[{begin:L,className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"},G,U.QUOTE_STRING_MODE,U.APOS_STRING_MODE,M.HEXCOLOR,M.CSS_NUMBER_MODE]},M.FUNCTION_DISPATCH]}}},498:q=>{q.exports=function $(g){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}},239:q=>{q.exports=function $(g){const v=g.regex,k=g.COMMENT("--","$"),N=["true","false","unknown"],M=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],L=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],H=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],G=L,Q=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter(Ee=>!L.includes(Ee)),ue={begin:v.concat(/\b/,v.either(...G),/\s*\(/),relevance:0,keywords:{built_in:G}};return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:function me(Ee,{exceptions:De,when:Pe}={}){const qe=Pe;return De=De||[],Ee.map(ne=>ne.match(/\|\d+$/)||De.includes(ne)?ne:qe(ne)?`${ne}|0`:ne)}(Q,{when:Ee=>Ee.length<3}),literal:N,type:M,built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"]},contains:[{begin:v.either(...H),relevance:0,keywords:{$pattern:/[\w\.]+/,keyword:Q.concat(H),literal:N,type:M}},{className:"type",begin:v.either("double precision","large object","with timezone","without timezone")},ue,{className:"variable",begin:/@[a-z0-9]+/},{className:"string",variants:[{begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/"/,end:/"/,contains:[{begin:/""/}]},g.C_NUMBER_MODE,g.C_BLOCK_COMMENT_MODE,k,{className:"operator",begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}}},597:q=>{function $(ne){return ne?"string"==typeof ne?ne:ne.source:null}function g(ne){return v("(?=",ne,")")}function v(...ne){return ne.map(st=>$(st)).join("")}function x(...ne){return"("+(function k(ne){const Le=ne[ne.length-1];return"object"==typeof Le&&Le.constructor===Object?(ne.splice(ne.length-1,1),Le):{}}(ne).capture?"":"?:")+ne.map(Ze=>$(Ze)).join("|")+")"}const R=ne=>v(/\b/,ne,/\w$/.test(ne)?/\b/:/\B/),N=["Protocol","Type"].map(R),U=["init","self"].map(R),M=["Any","Self"],T=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","break","case","catch","class","continue","convenience","default","defer","deinit","didSet","distributed","do","dynamic","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],I=["false","nil","true"],L=["assignment","associativity","higherThan","left","lowerThan","none","right"],F=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warn_unqualified_access","#warning"],H=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],G=x(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),Q=x(G,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),Z=v(G,Q,"*"),K=x(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),ue=x(K,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),me=v(K,ue,"*"),Ee=v(/[A-Z]/,ue,"*"),De=["autoclosure",v(/convention\(/,x("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",v(/objc\(/,me,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","testable","UIApplicationMain","unknown","usableFromInline"],Pe=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"];q.exports=function qe(ne){const Le={match:/\s+/,relevance:0},st=ne.COMMENT("/\\*","\\*/",{contains:["self"]}),Ze=[ne.C_LINE_COMMENT_MODE,st],Nt={match:[/\./,x(...N,...U)],className:{2:"keyword"}},Mt={match:v(/\./,x(...T)),relevance:0},at=T.filter(Qe=>"string"==typeof Qe).concat(["_|0"]),Zn={variants:[{className:"keyword",match:x(...T.filter(Qe=>"string"!=typeof Qe).concat(M).map(R),...U)}]},Lt={$pattern:x(/\b\w+/,/#\w+/),keyword:at.concat(F),literal:I},Be=[Nt,Mt,Zn],Pn=[{match:v(/\./,x(...H)),relevance:0},{className:"built_in",match:v(/\b/,x(...H),/(?=\()/)}],Qn={match:/->/,relevance:0},Vt=[Qn,{className:"operator",relevance:0,variants:[{match:Z},{match:`\\.(\\.|${Q})+`}]}],on="([0-9]_*)+",Ae="([0-9a-fA-F]_*)+",ye={className:"number",relevance:0,variants:[{match:`\\b(${on})(\\.(${on}))?([eE][+-]?(${on}))?\\b`},{match:`\\b0x(${Ae})(\\.(${Ae}))?([pP][+-]?(${on}))?\\b`},{match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},xt=(Qe="")=>({className:"subst",variants:[{match:v(/\\/,Qe,/[0\\tnr"']/)},{match:v(/\\/,Qe,/u\{[0-9a-fA-F]{1,8}\}/)}]}),Ce=(Qe="")=>({className:"subst",match:v(/\\/,Qe,/[\t ]*(?:[\r\n]|\r\n)/)}),zt=(Qe="")=>({className:"subst",label:"interpol",begin:v(/\\/,Qe,/\(/),end:/\)/}),qt=(Qe="")=>({begin:v(Qe,/"""/),end:v(/"""/,Qe),contains:[xt(Qe),Ce(Qe),zt(Qe)]}),Ln=(Qe="")=>({begin:v(Qe,/"/),end:v(/"/,Qe),contains:[xt(Qe),zt(Qe)]}),Xn={className:"string",variants:[qt(),qt("#"),qt("##"),qt("###"),Ln(),Ln("#"),Ln("##"),Ln("###")]},Io={match:v(/`/,me,/`/)},To=[Io,{className:"variable",match:/\$\d+/},{className:"variable",match:`\\$${ue}+`}],Jn=[{match:/(@|#(un)?)available/,className:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:Pe,contains:[...Vt,ye,Xn]}]}},{className:"keyword",match:v(/@/,x(...De))},{className:"meta",match:v(/@/,me)}],Fn={match:g(/\b[A-Z]/),relevance:0,contains:[{className:"type",match:v(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,ue,"+")},{className:"type",match:Ee,relevance:0},{match:/[?!]+/,relevance:0},{match:/\.\.\./,relevance:0},{match:v(/\s+&\s+/,g(Ee)),relevance:0}]},eo={begin://,keywords:Lt,contains:[...Ze,...Be,...Jn,Qn,Fn]};Fn.contains.push(eo);const sn={begin:/\(/,end:/\)/,relevance:0,keywords:Lt,contains:["self",{match:v(me,/\s*:/),keywords:"_|0",relevance:0},...Ze,...Be,...Pn,...Vt,ye,Xn,...To,...Jn,Fn]},$r={begin://,contains:[...Ze,Fn]},yr={begin:/\(/,end:/\)/,keywords:Lt,contains:[{begin:x(g(v(me,/\s*:/)),g(v(me,/\s+/,me,/\s*:/))),end:/:/,relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:me}]},...Ze,...Be,...Vt,ye,Xn,...Jn,Fn,sn],endsParent:!0,illegal:/["']/},No={match:[/func/,/\s+/,x(Io.match,me,Z)],className:{1:"keyword",3:"title.function"},contains:[$r,yr,Le],illegal:[/\[/,/%/]},Dn={match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"},contains:[$r,yr,Le],illegal:/\[|%/},Mo={match:[/operator/,/\s+/,Z],className:{1:"keyword",3:"title"}},zi={begin:[/precedencegroup/,/\s+/,Ee],className:{1:"keyword",3:"title"},contains:[Fn],keywords:[...L,...I],end:/}/};for(const Qe of Xn.variants){const xo=Qe.contains.find(qi=>"interpol"===qi.label);xo.keywords=Lt;const to=[...Be,...Pn,...Vt,ye,Xn,...To];xo.contains=[...to,{begin:/\(/,end:/\)/,contains:["self",...to]}]}return{name:"Swift",keywords:Lt,contains:[...Ze,No,Dn,{beginKeywords:"struct protocol class extension enum actor",end:"\\{",excludeEnd:!0,keywords:Lt,contains:[ne.inherit(ne.TITLE_MODE,{className:"title.class",begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/}),...Be]},Mo,zi,{beginKeywords:"import",end:/$/,contains:[...Ze],relevance:0},...Be,...Pn,...Vt,ye,Xn,...To,...Jn,Fn,sn]}}},603:q=>{const $="[A-Za-z$_][0-9A-Za-z$_]*",g=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],v=["true","false","null","undefined","NaN","Infinity"],k=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],x=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],R=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],N=["arguments","this","super","console","window","document","localStorage","module","global"],U=[].concat(R,k,x);q.exports=function T(I){const L=function M(I){const L=I.regex,H=$,Z={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(ye,xt)=>{const Ce=ye[0].length+ye.index,zt=ye.input[Ce];if("<"===zt||","===zt)return void xt.ignoreMatch();let qt;">"===zt&&(((ye,{after:xt})=>{const Ce="",Ae={match:[/const|var|let/,/\s+/,H,/\s*/,/=\s*/,/(async\s*)?/,L.lookahead(on)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[We]};return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:K,exports:{PARAMS_CONTAINS:at,CLASS_REFERENCE:Lt},illegal:/#(?![$_A-z])/,contains:[I.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,qe,ne,Le,Ze,De,Lt,{className:"attr",begin:H+L.lookahead(":"),relevance:0},Ae,{begin:"("+I.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[Ze,I.REGEXP_MODE,{className:"function",begin:on,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:I.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:K,contains:at}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:""},{match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:Z.begin,"on:begin":Z.isTrulyOpeningTag,end:Z.end}],subLanguage:"xml",contains:[{begin:Z.begin,end:Z.end,skip:!0,contains:["self"]}]}]},gn,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+I.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[We,I.inherit(I.TITLE_MODE,{begin:H,className:"title.function"})]},{match:/\.\.\./,relevance:0},It,{match:"\\$"+H,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[We]},Qn,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},Zn,Vt,{match:/\$[(.]/}]}}(I),F=$,H=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],G={beginKeywords:"namespace",end:/\{/,excludeEnd:!0,contains:[L.exports.CLASS_REFERENCE]},Q={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:H},contains:[L.exports.CLASS_REFERENCE]},ue={$pattern:$,keyword:g.concat(["type","namespace","interface","public","private","protected","implements","declare","abstract","readonly","enum","override"]),literal:v,built_in:U.concat(H),"variable.language":N},me={className:"meta",begin:"@"+F},Ee=(Pe,qe,ne)=>{const Le=Pe.contains.findIndex(st=>st.label===qe);if(-1===Le)throw new Error("can not find mode to replace");Pe.contains.splice(Le,1,ne)};return Object.assign(L.keywords,ue),L.exports.PARAMS_CONTAINS.push(me),L.contains=L.contains.concat([me,G,Q]),Ee(L,"shebang",I.SHEBANG()),Ee(L,"use_strict",{className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/}),L.contains.find(Pe=>"func.def"===Pe.label).relevance=0,Object.assign(L,{name:"TypeScript",aliases:["ts","tsx"]}),L}},410:q=>{q.exports=function $(g){const v=g.regex,R=/\d{1,2}\/\d{1,2}\/\d{4}/,N=/\d{4}-\d{1,2}-\d{1,2}/,U=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,M=/\d{1,2}(:\d{1,2}){1,2}/,T={className:"literal",variants:[{begin:v.concat(/# */,v.either(N,R),/ *#/)},{begin:v.concat(/# */,M,/ *#/)},{begin:v.concat(/# */,U,/ *#/)},{begin:v.concat(/# */,v.either(N,R),/ +/,v.either(U,M),/ *#/)}]},F=g.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}]}),H=g.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]});return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0,classNameAliases:{label:"symbol"},keywords:{keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield",built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort",type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort",literal:"true false nothing"},illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[{className:"string",begin:/"(""|[^/n])"C\b/},{className:"string",begin:/"/,end:/"/,illegal:/\n/,contains:[{begin:/""/}]},T,{className:"number",relevance:0,variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},{className:"label",begin:/^\w+:/},F,H,{className:"meta",begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/,end:/$/,keywords:{keyword:"const disable else elseif enable end externalsource if region then"},contains:[H]}]}}},65:q=>{q.exports=function $(g){const v=g.COMMENT(/\(;/,/;\)/);return v.contains.push("self"),{name:"WebAssembly",keywords:{$pattern:/[\w.]+/,keyword:["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"]},contains:[g.COMMENT(/;;/,/$/),v,{match:[/(?:offset|align)/,/\s*/,/=/],className:{1:"keyword",3:"operator"}},{className:"variable",begin:/\$[\w_]+/},{match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},{begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword",3:"title.function"}},g.QUOTE_STRING_MODE,{match:/(i32|i64|f32|f64)(?!\.)/,className:"type"},{className:"keyword",match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/},{className:"number",relevance:0,match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/}]}}},149:q=>{q.exports=function $(g){const v=g.regex,k=v.concat(/[\p{L}_]/u,v.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),R={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},N={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},U=g.inherit(N,{begin:/\(/,end:/\)/}),M=g.inherit(g.APOS_STRING_MODE,{className:"string"}),T=g.inherit(g.QUOTE_STRING_MODE,{className:"string"}),I={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[N,T,M,U,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[N,U,T,M]}]}]},g.COMMENT(//,{relevance:10}),{begin://,relevance:10},R,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[T]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[I],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[I],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:v.concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:k,relevance:0,starts:I}]},{className:"tag",begin:v.concat(/<\//,v.lookahead(v.concat(k,/>/))),contains:[{className:"name",begin:k,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}},84:q=>{q.exports=function $(g){const v="true false yes no null",k="[\\w#;/?:@&=+$,.~*'()[\\]]+",N={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[g.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},U=g.inherit(N,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),H={end:",",endsWithParent:!0,excludeEnd:!0,keywords:v,relevance:0},Z=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+k},{className:"type",begin:"!<"+k+">"},{className:"type",begin:"!"+k},{className:"type",begin:"!!"+k},{className:"meta",begin:"&"+g.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+g.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},g.HASH_COMMENT_MODE,{beginKeywords:v,keywords:{literal:v}},{className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},{className:"number",begin:g.C_NUMBER_RE+"\\b",relevance:0},{begin:/\{/,end:/\}/,contains:[H],illegal:"\\n",relevance:0},{begin:"\\[",end:"\\]",contains:[H],illegal:"\\n",relevance:0},N],K=[...Z];return K.pop(),K.push(U),H.contains=K,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:Z}}}},q=>{q(q.s=76)}]); \ No newline at end of file diff --git a/docs/main.48e0f10c4ba8c0c7.js b/docs/main.48e0f10c4ba8c0c7.js new file mode 100644 index 0000000..1c6bd9e --- /dev/null +++ b/docs/main.48e0f10c4ba8c0c7.js @@ -0,0 +1 @@ +(self.webpackChunkdevnet=self.webpackChunkdevnet||[]).push([[179],{601:(q,$,g)=>{"use strict";function y(e){return"function"==typeof e}function k(e){const n=e(r=>{Error.call(r),r.stack=(new Error).stack});return n.prototype=Object.create(Error.prototype),n.prototype.constructor=n,n}const x=k(e=>function(n){e(this),this.message=n?`${n.length} errors occurred during unsubscription:\n${n.map((r,o)=>`${o+1}) ${r.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=n});function R(e,t){if(e){const n=e.indexOf(t);0<=n&&e.splice(n,1)}}class A{constructor(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let t;if(!this.closed){this.closed=!0;const{_parentage:n}=this;if(n)if(this._parentage=null,Array.isArray(n))for(const i of n)i.remove(this);else n.remove(this);const{initialTeardown:r}=this;if(y(r))try{r()}catch(i){t=i instanceof x?i.errors:[i]}const{_finalizers:o}=this;if(o){this._finalizers=null;for(const i of o)try{T(i)}catch(a){t=t??[],a instanceof x?t=[...t,...a.errors]:t.push(a)}}if(t)throw new x(t)}}add(t){var n;if(t&&t!==this)if(this.closed)T(t);else{if(t instanceof A){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=null!==(n=this._finalizers)&&void 0!==n?n:[]).push(t)}}_hasParent(t){const{_parentage:n}=this;return n===t||Array.isArray(n)&&n.includes(t)}_addParent(t){const{_parentage:n}=this;this._parentage=Array.isArray(n)?(n.push(t),n):n?[n,t]:t}_removeParent(t){const{_parentage:n}=this;n===t?this._parentage=null:Array.isArray(n)&&R(n,t)}remove(t){const{_finalizers:n}=this;n&&R(n,t),t instanceof A&&t._removeParent(this)}}A.EMPTY=(()=>{const e=new A;return e.closed=!0,e})();const U=A.EMPTY;function M(e){return e instanceof A||e&&"closed"in e&&y(e.remove)&&y(e.add)&&y(e.unsubscribe)}function T(e){y(e)?e():e.unsubscribe()}const I={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},L={setTimeout(e,t,...n){const{delegate:r}=L;return r?.setTimeout?r.setTimeout(e,t,...n):setTimeout(e,t,...n)},clearTimeout(e){const{delegate:t}=L;return(t?.clearTimeout||clearTimeout)(e)},delegate:void 0};function F(e){L.setTimeout(()=>{const{onUnhandledError:t}=I;if(!t)throw e;t(e)})}function H(){}const W=K("C",void 0,void 0);function K(e,t,n){return{kind:e,value:t,error:n}}let ue=null;function me(e){if(I.useDeprecatedSynchronousErrorHandling){const t=!ue;if(t&&(ue={errorThrown:!1,error:null}),e(),t){const{errorThrown:n,error:r}=ue;if(ue=null,n)throw r}}else e()}class De extends A{constructor(t){super(),this.isStopped=!1,t?(this.destination=t,M(t)&&t.add(this)):this.destination=Mt}static create(t,n,r){return new Le(t,n,r)}next(t){this.isStopped?At(function Z(e){return K("N",e,void 0)}(t),this):this._next(t)}error(t){this.isStopped?At(function Q(e){return K("E",void 0,e)}(t),this):(this.isStopped=!0,this._error(t))}complete(){this.isStopped?At(W,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(t){this.destination.next(t)}_error(t){try{this.destination.error(t)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}}const Pe=Function.prototype.bind;function qe(e,t){return Pe.call(e,t)}class ne{constructor(t){this.partialObserver=t}next(t){const{partialObserver:n}=this;if(n.next)try{n.next(t)}catch(r){st(r)}}error(t){const{partialObserver:n}=this;if(n.error)try{n.error(t)}catch(r){st(r)}else st(t)}complete(){const{partialObserver:t}=this;if(t.complete)try{t.complete()}catch(n){st(n)}}}class Le extends De{constructor(t,n,r){let o;if(super(),y(t)||!t)o={next:t??void 0,error:n??void 0,complete:r??void 0};else{let i;this&&I.useDeprecatedNextContext?(i=Object.create(t),i.unsubscribe=()=>this.unsubscribe(),o={next:t.next&&qe(t.next,i),error:t.error&&qe(t.error,i),complete:t.complete&&qe(t.complete,i)}):o=t}this.destination=new ne(o)}}function st(e){I.useDeprecatedSynchronousErrorHandling?function Ee(e){I.useDeprecatedSynchronousErrorHandling&&ue&&(ue.errorThrown=!0,ue.error=e)}(e):F(e)}function At(e,t){const{onStoppedNotification:n}=I;n&&L.setTimeout(()=>n(e,t))}const Mt={closed:!0,next:H,error:function Ze(e){throw e},complete:H},at="function"==typeof Symbol&&Symbol.observable||"@@observable";function Ge(e){return e}function Lt(e){return 0===e.length?Ge:1===e.length?e[0]:function(n){return e.reduce((r,o)=>o(r),n)}}let Be=(()=>{class e{constructor(n){n&&(this._subscribe=n)}lift(n){const r=new e;return r.source=this,r.operator=n,r}subscribe(n,r,o){const i=function Pn(e){return e&&e instanceof De||function mr(e){return e&&y(e.next)&&y(e.error)&&y(e.complete)}(e)&&M(e)}(n)?n:new Le(n,r,o);return me(()=>{const{operator:a,source:u}=this;i.add(a?a.call(i,u):u?this._subscribe(i):this._trySubscribe(i))}),i}_trySubscribe(n){try{return this._subscribe(n)}catch(r){n.error(r)}}forEach(n,r){return new(r=gn(r))((o,i)=>{const a=new Le({next:u=>{try{n(u)}catch(d){i(d),a.unsubscribe()}},error:i,complete:o});this.subscribe(a)})}_subscribe(n){var r;return null===(r=this.source)||void 0===r?void 0:r.subscribe(n)}[at](){return this}pipe(...n){return Lt(n)(this)}toPromise(n){return new(n=gn(n))((r,o)=>{let i;this.subscribe(a=>i=a,a=>o(a),()=>r(i))})}}return e.create=t=>new e(t),e})();function gn(e){var t;return null!==(t=e??I.Promise)&&void 0!==t?t:Promise}const Qn=k(e=>function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});let It=(()=>{class e extends Be{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(n){const r=new Vt(this,this);return r.operator=n,r}_throwIfClosed(){if(this.closed)throw new Qn}next(n){me(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(const r of this.currentObservers)r.next(n)}})}error(n){me(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=n;const{observers:r}=this;for(;r.length;)r.shift().error(n)}})}complete(){me(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;const{observers:n}=this;for(;n.length;)n.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var n;return(null===(n=this.observers)||void 0===n?void 0:n.length)>0}_trySubscribe(n){return this._throwIfClosed(),super._trySubscribe(n)}_subscribe(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)}_innerSubscribe(n){const{hasError:r,isStopped:o,observers:i}=this;return r||o?U:(this.currentObservers=null,i.push(n),new A(()=>{this.currentObservers=null,R(i,n)}))}_checkFinalizedStatuses(n){const{hasError:r,thrownError:o,isStopped:i}=this;r?n.error(o):i&&n.complete()}asObservable(){const n=new Be;return n.source=this,n}}return e.create=(t,n)=>new Vt(t,n),e})();class Vt extends It{constructor(t,n){super(),this.destination=t,this.source=n}next(t){var n,r;null===(r=null===(n=this.destination)||void 0===n?void 0:n.next)||void 0===r||r.call(n,t)}error(t){var n,r;null===(r=null===(n=this.destination)||void 0===n?void 0:n.error)||void 0===r||r.call(n,t)}complete(){var t,n;null===(n=null===(t=this.destination)||void 0===t?void 0:t.complete)||void 0===n||n.call(t)}_subscribe(t){var n,r;return null!==(r=null===(n=this.source)||void 0===n?void 0:n.subscribe(t))&&void 0!==r?r:U}}function on(e){return y(e?.lift)}function Ne(e){return t=>{if(on(t))return t.lift(function(n){try{return e(n,this)}catch(r){this.error(r)}});throw new TypeError("Unable to lift unknown Observable type")}}function ve(e,t,n,r,o){return new xt(e,t,n,r,o)}class xt extends De{constructor(t,n,r,o,i,a){super(t),this.onFinalize=i,this.shouldUnsubscribe=a,this._next=n?function(u){try{n(u)}catch(d){t.error(d)}}:super._next,this._error=o?function(u){try{o(u)}catch(d){t.error(d)}finally{this.unsubscribe()}}:super._error,this._complete=r?function(){try{r()}catch(u){t.error(u)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var t;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){const{closed:n}=this;super.unsubscribe(),!n&&(null===(t=this.onFinalize)||void 0===t||t.call(this))}}}function Ce(e,t){return Ne((n,r)=>{let o=0;n.subscribe(ve(r,i=>{r.next(e.call(t,i,o++))}))})}function Dn(e){return this instanceof Dn?(this.v=e,this):new Dn(e)}function Qe(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n,t=e[Symbol.asyncIterator];return t?t.call(e):(e=function sn(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}(e),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(i){n[i]=e[i]&&function(a){return new Promise(function(u,d){!function o(i,a,u,d){Promise.resolve(d).then(function(p){i({value:p,done:u})},a)}(u,d,(a=e[i](a)).done,a.value)})}}}"function"==typeof SuppressedError&&SuppressedError;const w=e=>e&&"number"==typeof e.length&&"function"!=typeof e;function C(e){return y(e?.then)}function z(e){return y(e[at])}function be(e){return Symbol.asyncIterator&&y(e?.[Symbol.asyncIterator])}function ct(e){return new TypeError(`You provided ${null!==e&&"object"==typeof e?"an invalid object":`'${e}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}const J=function ut(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}();function Y(e){return y(e?.[J])}function se(e){return function Mo(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o,r=n.apply(e,t||[]),i=[];return o={},a("next"),a("throw"),a("return"),o[Symbol.asyncIterator]=function(){return this},o;function a(m){r[m]&&(o[m]=function(b){return new Promise(function(E,_){i.push([m,b,E,_])>1||u(m,b)})})}function u(m,b){try{!function d(m){m.value instanceof Dn?Promise.resolve(m.value.v).then(p,h):f(i[0][2],m)}(r[m](b))}catch(E){f(i[0][3],E)}}function p(m){u("next",m)}function h(m){u("throw",m)}function f(m,b){m(b),i.shift(),i.length&&u(i[0][0],i[0][1])}}(this,arguments,function*(){const n=e.getReader();try{for(;;){const{value:r,done:o}=yield Dn(n.read());if(o)return yield Dn(void 0);yield yield Dn(r)}}finally{n.releaseLock()}})}function bt(e){return y(e?.getReader)}function Ue(e){if(e instanceof Be)return e;if(null!=e){if(z(e))return function no(e){return new Be(t=>{const n=e[at]();if(y(n.subscribe))return n.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}(e);if(w(e))return function Wi(e){return new Be(t=>{for(let n=0;n{e.then(n=>{t.closed||(t.next(n),t.complete())},n=>t.error(n)).then(null,F)})}(e);if(be(e))return Oo(e);if(Y(e))return function kl(e){return new Be(t=>{for(const n of e)if(t.next(n),t.closed)return;t.complete()})}(e);if(bt(e))return function $l(e){return Oo(se(e))}(e)}throw ct(e)}function Oo(e){return new Be(t=>{(function Pl(e,t){var n,r,o,i;return function Jn(e,t,n,r){return new(n||(n=Promise))(function(i,a){function u(h){try{p(r.next(h))}catch(f){a(f)}}function d(h){try{p(r.throw(h))}catch(f){a(f)}}function p(h){h.done?i(h.value):function o(i){return i instanceof n?i:new n(function(a){a(i)})}(h.value).then(u,d)}p((r=r.apply(e,t||[])).next())})}(this,void 0,void 0,function*(){try{for(n=Qe(e);!(r=yield n.next()).done;)if(t.next(r.value),t.closed)return}catch(a){o={error:a}}finally{try{r&&!r.done&&(i=n.return)&&(yield i.call(n))}finally{if(o)throw o.error}}t.complete()})})(e,t).catch(n=>t.error(n))})}function Bn(e,t,n,r=0,o=!1){const i=t.schedule(function(){n(),o?e.add(this.schedule(null,r)):this.unsubscribe()},r);if(e.add(i),!o)return i}function pt(e,t,n=1/0){return y(t)?pt((r,o)=>Ce((i,a)=>t(r,i,o,a))(Ue(e(r,o))),n):("number"==typeof t&&(n=t),Ne((r,o)=>function _a(e,t,n,r,o,i,a,u){const d=[];let p=0,h=0,f=!1;const m=()=>{f&&!d.length&&!p&&t.complete()},b=_=>p{i&&t.next(_),p++;let O=!1;Ue(n(_,h++)).subscribe(ve(t,P=>{o?.(P),i?b(P):t.next(P)},()=>{O=!0},void 0,()=>{if(O)try{for(p--;d.length&&pE(P)):E(P)}m()}catch(P){t.error(P)}}))};return e.subscribe(ve(t,b,()=>{f=!0,m()})),()=>{u?.()}}(r,o,e,n)))}function Pr(e=1/0){return pt(Ge,e)}const Cn=new Be(e=>e.complete());function ko(e){return e[e.length-1]}function ro(e){return function tr(e){return e&&y(e.schedule)}(ko(e))?e.pop():void 0}function oo(e,t=0){return Ne((n,r)=>{n.subscribe(ve(r,o=>Bn(r,e,()=>r.next(o),t),()=>Bn(r,e,()=>r.complete(),t),o=>Bn(r,e,()=>r.error(o),t)))})}function Ca(e,t=0){return Ne((n,r)=>{r.add(e.schedule(()=>n.subscribe(r),t))})}function ht(e,t){if(!e)throw new Error("Iterable cannot be null");return new Be(n=>{Bn(n,t,()=>{const r=e[Symbol.asyncIterator]();Bn(n,t,()=>{r.next().then(o=>{o.done?n.complete():n.next(o.value)})},0,!0)})})}function ft(e,t){return t?function nr(e,t){if(null!=e){if(z(e))return function V(e,t){return Ue(e).pipe(Ca(t),oo(t))}(e,t);if(w(e))return function Ae(e,t){return new Be(n=>{let r=0;return t.schedule(function(){r===e.length?n.complete():(n.next(e[r++]),n.closed||this.schedule())})})}(e,t);if(C(e))return function re(e,t){return Ue(e).pipe(Ca(t),oo(t))}(e,t);if(be(e))return ht(e,t);if(Y(e))return function Xe(e,t){return new Be(n=>{let r;return Bn(n,t,()=>{r=e[J](),Bn(n,t,()=>{let o,i;try{({value:o,done:i}=r.next())}catch(a){return void n.error(a)}i?n.complete():n.next(o)},0,!0)}),()=>y(r?.return)&&r.return()})}(e,t);if(bt(e))return function mn(e,t){return ht(se(e),t)}(e,t)}throw ct(e)}(e,t):Ue(e)}class wt extends It{constructor(t){super(),this._value=t}get value(){return this.getValue()}_subscribe(t){const n=super._subscribe(t);return!n.closed&&t.next(this._value),n}getValue(){const{hasError:t,thrownError:n,_value:r}=this;if(t)throw n;return this._throwIfClosed(),r}next(t){super.next(this._value=t)}}function ae(...e){return ft(e,ro(e))}function Yi(e={}){const{connector:t=(()=>new It),resetOnError:n=!0,resetOnComplete:r=!0,resetOnRefCountZero:o=!0}=e;return i=>{let a,u,d,p=0,h=!1,f=!1;const m=()=>{u?.unsubscribe(),u=void 0},b=()=>{m(),a=d=void 0,h=f=!1},E=()=>{const _=a;b(),_?.unsubscribe()};return Ne((_,O)=>{p++,!f&&!h&&m();const P=d=d??t();O.add(()=>{p--,0===p&&!f&&!h&&(u=Zi(E,o))}),P.subscribe(O),!a&&p>0&&(a=new Le({next:D=>P.next(D),error:D=>{f=!0,m(),u=Zi(b,n,D),P.error(D)},complete:()=>{h=!0,m(),u=Zi(b,r),P.complete()}}),Ue(_).subscribe(a))})(i)}}function Zi(e,t,...n){if(!0===t)return void e();if(!1===t)return;const r=new Le({next:()=>{r.unsubscribe(),e()}});return t(...n).subscribe(r)}function Sn(e,t){return Ne((n,r)=>{let o=null,i=0,a=!1;const u=()=>a&&!o&&r.complete();n.subscribe(ve(r,d=>{o?.unsubscribe();let p=0;const h=i++;Ue(e(d,h)).subscribe(o=ve(r,f=>r.next(t?t(d,f,h,p++):f),()=>{o=null,u()}))},()=>{a=!0,u()}))})}function Ul(e,t){return e===t}function Oe(e){for(let t in e)if(e[t]===Oe)return t;throw Error("Could not find renamed property on target object.")}function Je(e){if("string"==typeof e)return e;if(Array.isArray(e))return"["+e.map(Je).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return`${e.overriddenName}`;if(e.name)return`${e.name}`;const t=e.toString();if(null==t)return""+t;const n=t.indexOf("\n");return-1===n?t:t.substring(0,n)}function Qi(e,t){return null==e||""===e?null===t?"":t:null==t||""===t?e:e+" "+t}const Xi=Oe({__forward_ref__:Oe});function fe(e){return e.__forward_ref__=fe,e.toString=function(){return Je(this())},e}function oe(e){return gt(e)?e():e}function gt(e){return"function"==typeof e&&e.hasOwnProperty(Xi)&&e.__forward_ref__===fe}function Ke(e){return e&&!!e.\u0275providers}const rr="https://g.co/ng/security#xss";class B extends Error{constructor(t,n){super(function Lr(e,t){return`NG0${Math.abs(e)}${t?": "+t:""}`}(t,n)),this.code=t}}function S(e){return"string"==typeof e?e:null==e?"":String(e)}function vn(e,t){throw new B(-201,!1)}function In(e,t){null==e&&function de(e,t,n,r){throw new Error(`ASSERTION ERROR: ${e}`+(null==r?"":` [Expected=> ${n} ${r} ${t} <=Actual]`))}(t,e,null,"!=")}function ce(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function mt(e){return{providers:e.providers||[],imports:e.imports||[]}}function Sa(e){return $h(e,Ta)||$h(e,Ph)}function $h(e,t){return e.hasOwnProperty(t)?e[t]:null}function Ia(e){return e&&(e.hasOwnProperty(Hl)||e.hasOwnProperty(k1))?e[Hl]:null}const Ta=Oe({\u0275prov:Oe}),Hl=Oe({\u0275inj:Oe}),Ph=Oe({ngInjectableDef:Oe}),k1=Oe({ngInjectorDef:Oe});var Me=function(e){return e[e.Default=0]="Default",e[e.Host=1]="Host",e[e.Self=2]="Self",e[e.SkipSelf=4]="SkipSelf",e[e.Optional=8]="Optional",e}(Me||{});let jl;function an(e){const t=jl;return jl=e,t}function Fh(e,t,n){const r=Sa(e);return r&&"root"==r.providedIn?void 0===r.value?r.value=r.factory():r.value:n&Me.Optional?null:void 0!==t?t:void vn(Je(e))}const tt=globalThis,es={},Wl="__NG_DI_FLAG__",Na="ngTempTokenPath",L1=/\n/gm,Uh="__source";let $o;function Fr(e){const t=$o;return $o=e,t}function U1(e,t=Me.Default){if(void 0===$o)throw new B(-203,!1);return null===$o?Fh(e,void 0,t):$o.get(e,t&Me.Optional?null:void 0,t)}function ie(e,t=Me.Default){return(function Lh(){return jl}()||U1)(oe(e),t)}function X(e,t=Me.Default){return ie(e,Aa(t))}function Aa(e){return typeof e>"u"||"number"==typeof e?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function Kl(e){const t=[];for(let n=0;nt){a=i-1;break}}}for(;ii?"":o[f+1].toLowerCase();const b=8&r?m:null;if(b&&-1!==zh(b,p,0)||2&r&&p!==m){if(Hn(r))return!1;a=!0}}}}else{if(!a&&!Hn(r)&&!Hn(d))return!1;if(a&&Hn(d))continue;a=!1,r=d|1&r}}return Hn(r)||a}function Hn(e){return 0==(1&e)}function W1(e,t,n,r){if(null===t)return-1;let o=0;if(r||!n){let i=!1;for(;o-1)for(n++;n0?'="'+u+'"':"")+"]"}else 8&r?o+="."+a:4&r&&(o+=" "+a);else""!==o&&!Hn(a)&&(t+=Qh(i,o),o=""),r=a,i=i||!Hn(r);n++}return""!==o&&(t+=Qh(i,o)),t}function Ie(e){return yr(()=>{const t=Jh(e),n={...t,decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection===Ma.OnPush,directiveDefs:null,pipeDefs:null,dependencies:t.standalone&&e.dependencies||null,getStandaloneInjector:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||Un.Emulated,styles:e.styles||He,_:null,schemas:e.schemas||null,tView:null,id:""};ef(n);const r=e.dependencies;return n.directiveDefs=Ra(r,!1),n.pipeDefs=Ra(r,!0),n.id=function s_(e){let t=0;const n=[e.selectors,e.ngContentSelectors,e.hostVars,e.hostAttrs,e.consts,e.vars,e.decls,e.encapsulation,e.standalone,e.signals,e.exportAs,JSON.stringify(e.inputs),JSON.stringify(e.outputs),Object.getOwnPropertyNames(e.type.prototype),!!e.contentQueries,!!e.viewQuery].join("|");for(const o of n)t=Math.imul(31,t)+o.charCodeAt(0)<<0;return t+=2147483648,"c"+t}(n),n})}function n_(e){return ke(e)||Ot(e)}function r_(e){return null!==e}function Et(e){return yr(()=>({type:e.type,bootstrap:e.bootstrap||He,declarations:e.declarations||He,imports:e.imports||He,exports:e.exports||He,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function Xh(e,t){if(null==e)return or;const n={};for(const r in e)if(e.hasOwnProperty(r)){let o=e[r],i=o;Array.isArray(o)&&(i=o[1],o=o[0]),n[o]=r,t&&(t[o]=i)}return n}function Kt(e){return yr(()=>{const t=Jh(e);return ef(t),t})}function ke(e){return e[xa]||null}function Ot(e){return e[Yl]||null}function Yt(e){return e[Zl]||null}function yn(e,t){const n=e[jh]||null;if(!n&&!0===t)throw new Error(`Type ${Je(e)} does not have '\u0275mod' property.`);return n}function Jh(e){const t={};return{type:e.type,providersResolver:null,factory:null,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:t,inputTransforms:null,inputConfig:e.inputs||or,exportAs:e.exportAs||null,standalone:!0===e.standalone,signals:!0===e.signals,selectors:e.selectors||He,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,findHostDirectiveDefs:null,hostDirectives:null,inputs:Xh(e.inputs,t),outputs:Xh(e.outputs)}}function ef(e){e.features?.forEach(t=>t(e))}function Ra(e,t){if(!e)return null;const n=t?Yt:n_;return()=>("function"==typeof e?e():e).map(r=>n(r)).filter(r_)}const vt=0,G=1,we=2,lt=3,jn=4,os=5,Ft=6,Lo=7,_t=8,Br=9,Fo=10,ge=11,is=12,tf=13,Bo=14,Dt=15,ss=16,Uo=17,ir=18,as=19,nf=20,Ur=21,wr=22,cs=23,ls=24,xe=25,Xl=1,rf=2,sr=7,Ho=9,kt=11;function ln(e){return Array.isArray(e)&&"object"==typeof e[Xl]}function Zt(e){return Array.isArray(e)&&!0===e[Xl]}function Jl(e){return 0!=(4&e.flags)}function ao(e){return e.componentOffset>-1}function ka(e){return 1==(1&e.flags)}function Vn(e){return!!e.template}function eu(e){return 0!=(512&e[we])}function co(e,t){return e.hasOwnProperty(br)?e[br]:null}let $t=null,$a=!1;function Tn(e){const t=$t;return $t=e,t}const cf={version:0,dirty:!1,producerNode:void 0,producerLastReadVersion:void 0,producerIndexOfThis:void 0,nextProducerIndex:0,liveConsumerNode:void 0,liveConsumerIndexOfThis:void 0,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{}};function uf(e){if(!ds(e)||e.dirty){if(!e.producerMustRecompute(e)&&!hf(e))return void(e.dirty=!1);e.producerRecomputeValue(e),e.dirty=!1}}function pf(e){e.dirty=!0,function df(e){if(void 0===e.liveConsumerNode)return;const t=$a;$a=!0;try{for(const n of e.liveConsumerNode)n.dirty||pf(n)}finally{$a=t}}(e),e.consumerMarkedDirty?.(e)}function nu(e){return e&&(e.nextProducerIndex=0),Tn(e)}function ru(e,t){if(Tn(t),e&&void 0!==e.producerNode&&void 0!==e.producerIndexOfThis&&void 0!==e.producerLastReadVersion){if(ds(e))for(let n=e.nextProducerIndex;ne.nextProducerIndex;)e.producerNode.pop(),e.producerLastReadVersion.pop(),e.producerIndexOfThis.pop()}}function hf(e){jo(e);for(let t=0;t0}function jo(e){e.producerNode??=[],e.producerIndexOfThis??=[],e.producerLastReadVersion??=[]}let vf=null;const Ef=()=>{},b_=(()=>({...cf,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!1,consumerMarkedDirty:e=>{e.schedule(e.ref)},hasRun:!1,cleanupFn:Ef}))();class w_{constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}}function lo(){return _f}function _f(e){return e.type.prototype.ngOnChanges&&(e.setInput=__),E_}function E_(){const e=Cf(this),t=e?.current;if(t){const n=e.previous;if(n===or)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function __(e,t,n,r){const o=this.declaredInputs[n],i=Cf(e)||function D_(e,t){return e[Df]=t}(e,{previous:or,current:null}),a=i.current||(i.current={}),u=i.previous,d=u[o];a[o]=new w_(d&&d.currentValue,t,u===or),e[r]=t}lo.ngInherit=!0;const Df="__ngSimpleChanges__";function Cf(e){return e[Df]||null}const ar=function(e,t,n){};function nt(e){for(;Array.isArray(e);)e=e[vt];return e}function un(e,t){return nt(t[e.index])}function Tf(e,t){return e.data[t]}function bn(e,t){const n=t[e];return ln(n)?n:n[vt]}function jr(e,t){return null==t?null:e[t]}function Nf(e){e[Uo]=0}function A_(e){1024&e[we]||(e[we]|=1024,Mf(e,1))}function Af(e){1024&e[we]&&(e[we]&=-1025,Mf(e,-1))}function Mf(e,t){let n=e[lt];if(null===n)return;n[os]+=t;let r=n;for(n=n[lt];null!==n&&(1===t&&1===r[os]||-1===t&&0===r[os]);)n[os]+=t,r=n,n=n[lt]}const pe={lFrame:Hf(null),bindingsEnabled:!0,skipHydrationRootTNode:null};function Of(){return pe.bindingsEnabled}function N(){return pe.lFrame.lView}function $e(){return pe.lFrame.tView}function Pt(){let e=kf();for(;null!==e&&64===e.type;)e=e.parent;return e}function kf(){return pe.lFrame.currentTNode}function cr(e,t){const n=pe.lFrame;n.currentTNode=e,n.isParent=t}function cu(){return pe.lFrame.isParent}function V_(e,t){const n=pe.lFrame;n.bindingIndex=n.bindingRootIndex=e,uu(t)}function uu(e){pe.lFrame.currentDirectiveIndex=e}function Ff(){return pe.lFrame.currentQueryIndex}function pu(e){pe.lFrame.currentQueryIndex=e}function q_(e){const t=e[G];return 2===t.type?t.declTNode:1===t.type?e[Ft]:null}function Bf(e,t,n){if(n&Me.SkipSelf){let o=t,i=e;for(;!(o=o.parent,null!==o||n&Me.Host||(o=q_(i),null===o||(i=i[Bo],10&o.type))););if(null===o)return!1;t=o,e=i}const r=pe.lFrame=Uf();return r.currentTNode=t,r.lView=e,!0}function hu(e){const t=Uf(),n=e[G];pe.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function Uf(){const e=pe.lFrame,t=null===e?null:e.child;return null===t?Hf(e):t}function Hf(e){const t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return null!==e&&(e.child=t),t}function jf(){const e=pe.lFrame;return pe.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}const Vf=jf;function fu(){const e=jf();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function uo(e){pe.lFrame.selectedIndex=e}let qf=!0;function Fa(){return qf}function Vr(e){qf=e}function Ba(e,t){for(let n=t.directiveStart,r=t.directiveEnd;n=r)break}else t[d]<0&&(e[Uo]+=65536),(u>13>16&&(3&e[we])===t&&(e[we]+=8192,Wf(u,i)):Wf(u,i)}const Go=-1;class hs{constructor(t,n,r){this.factory=t,this.resolving=!1,this.canSeeViewProviders=n,this.injectImpl=r}}function vu(e){return e!==Go}function fs(e){return 32767&e}function gs(e,t){let n=function rD(e){return e>>16}(e),r=t;for(;n>0;)r=r[Bo],n--;return r}let yu=!0;function ja(e){const t=yu;return yu=e,t}const Kf=255,Yf=5;let oD=0;const lr={};function Va(e,t){const n=Zf(e,t);if(-1!==n)return n;const r=t[G];r.firstCreatePass&&(e.injectorIndex=t.length,bu(r.data,e),bu(t,null),bu(r.blueprint,null));const o=za(e,t),i=e.injectorIndex;if(vu(o)){const a=fs(o),u=gs(o,t),d=u[G].data;for(let p=0;p<8;p++)t[i+p]=u[a+p]|d[a+p]}return t[i+8]=o,i}function bu(e,t){e.push(0,0,0,0,0,0,0,0,t)}function Zf(e,t){return-1===e.injectorIndex||e.parent&&e.parent.injectorIndex===e.injectorIndex||null===t[e.injectorIndex+8]?-1:e.injectorIndex}function za(e,t){if(e.parent&&-1!==e.parent.injectorIndex)return e.parent.injectorIndex;let n=0,r=null,o=t;for(;null!==o;){if(r=og(o),null===r)return Go;if(n++,o=o[Bo],-1!==r.injectorIndex)return r.injectorIndex|n<<16}return Go}function wu(e,t,n){!function iD(e,t,n){let r;"string"==typeof n?r=n.charCodeAt(0)||0:n.hasOwnProperty(ns)&&(r=n[ns]),null==r&&(r=n[ns]=oD++);const o=r&Kf;t.data[e+(o>>Yf)]|=1<=0?t&Kf:uD:t}(n);if("function"==typeof i){if(!Bf(t,e,r))return r&Me.Host?Qf(o,0,r):Xf(t,n,r,o);try{let a;if(a=i(r),null!=a||r&Me.Optional)return a;vn()}finally{Vf()}}else if("number"==typeof i){let a=null,u=Zf(e,t),d=Go,p=r&Me.Host?t[Dt][Ft]:null;for((-1===u||r&Me.SkipSelf)&&(d=-1===u?za(e,t):t[u+8],d!==Go&&ng(r,!1)?(a=t[G],u=fs(d),t=gs(d,t)):u=-1);-1!==u;){const h=t[G];if(tg(i,u,h.data)){const f=aD(u,t,n,a,r,p);if(f!==lr)return f}d=t[u+8],d!==Go&&ng(r,t[G].data[u+8]===p)&&tg(i,u,t)?(a=h,u=fs(d),t=gs(d,t)):u=-1}}return o}function aD(e,t,n,r,o,i){const a=t[G],u=a.data[e+8],h=qa(u,a,n,null==r?ao(u)&&yu:r!=a&&0!=(3&u.type),o&Me.Host&&i===u);return null!==h?po(t,a,h,u):lr}function qa(e,t,n,r,o){const i=e.providerIndexes,a=t.data,u=1048575&i,d=e.directiveStart,h=i>>20,m=o?u+h:e.directiveEnd;for(let b=r?u:u+h;b=d&&E.type===n)return b}if(o){const b=a[d];if(b&&Vn(b)&&b.type===n)return d}return null}function po(e,t,n,r){let o=e[n];const i=t.data;if(function eD(e){return e instanceof hs}(o)){const a=o;a.resolving&&function Se(e,t){const n=t?`. Dependency path: ${t.join(" > ")} > ${e}`:"";throw new B(-200,`Circular dependency in DI detected for ${e}${n}`)}(function j(e){return"function"==typeof e?e.name||e.toString():"object"==typeof e&&null!=e&&"function"==typeof e.type?e.type.name||e.type.toString():S(e)}(i[n]));const u=ja(a.canSeeViewProviders);a.resolving=!0;const p=a.injectImpl?an(a.injectImpl):null;Bf(e,r,Me.Default);try{o=e[n]=a.factory(void 0,i,e,r),t.firstCreatePass&&n>=r.directiveStart&&function X_(e,t,n){const{ngOnChanges:r,ngOnInit:o,ngDoCheck:i}=t.type.prototype;if(r){const a=_f(t);(n.preOrderHooks??=[]).push(e,a),(n.preOrderCheckHooks??=[]).push(e,a)}o&&(n.preOrderHooks??=[]).push(0-e,o),i&&((n.preOrderHooks??=[]).push(e,i),(n.preOrderCheckHooks??=[]).push(e,i))}(n,i[n],t)}finally{null!==p&&an(p),ja(u),a.resolving=!1,Vf()}}return o}function tg(e,t,n){return!!(n[t+(e>>Yf)]&1<{const t=Eu(oe(e));return t&&t()}:co(e)}function og(e){const t=e[G],n=t.type;return 2===n?t.declTNode:1===n?e[Ft]:null}const Ko="__parameters__";function Zo(e,t,n){return yr(()=>{const r=function _u(e){return function(...n){if(e){const r=e(...n);for(const o in r)this[o]=r[o]}}}(t);function o(...i){if(this instanceof o)return r.apply(this,i),this;const a=new o(...i);return u.annotation=a,u;function u(d,p,h){const f=d.hasOwnProperty(Ko)?d[Ko]:Object.defineProperty(d,Ko,{value:[]})[Ko];for(;f.length<=h;)f.push(null);return(f[h]=f[h]||[]).push(a),d}}return n&&(o.prototype=Object.create(n.prototype)),o.prototype.ngMetadataName=e,o.annotationCls=o,o})}function Xo(e,t){e.forEach(n=>Array.isArray(n)?Xo(n,t):t(n))}function sg(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function Wa(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}const Ya=ts(Zo("Optional"),8),Za=ts(Zo("SkipSelf"),4);function tc(e){return 128==(128&e.flags)}var zr=function(e){return e[e.Important=1]="Important",e[e.DashCase=2]="DashCase",e}(zr||{});const Nu=new Map;let jD=0;const Mu="__ngContext__";function Bt(e,t){ln(t)?(e[Mu]=t[as],function zD(e){Nu.set(e[as],e)}(t)):e[Mu]=t}let xu;function Ru(e,t){return xu(e,t)}function Es(e){const t=e[lt];return Zt(t)?t[lt]:t}function Tg(e){return Ag(e[is])}function Ng(e){return Ag(e[jn])}function Ag(e){for(;null!==e&&!Zt(e);)e=e[jn];return e}function ni(e,t,n,r,o){if(null!=r){let i,a=!1;Zt(r)?i=r:ln(r)&&(a=!0,r=r[vt]);const u=nt(r);0===e&&null!==n?null==o?Og(t,n,u):ho(t,n,u,o||null,!0):1===e&&null!==n?ho(t,n,u,o||null,!0):2===e?function cc(e,t,n){const r=sc(e,t);r&&function lC(e,t,n,r){e.removeChild(t,n,r)}(e,r,t,n)}(t,u,a):3===e&&t.destroyNode(u),null!=i&&function pC(e,t,n,r,o){const i=n[sr];i!==nt(n)&&ni(t,e,r,i,o);for(let u=kt;u0&&(e[n-1][jn]=r[jn]);const i=Wa(e,kt+t);!function tC(e,t){Ds(e,t,t[ge],2,null,null),t[vt]=null,t[Ft]=null}(r[G],r);const a=i[ir];null!==a&&a.detachView(i[G]),r[lt]=null,r[jn]=null,r[we]&=-129}return r}function ku(e,t){if(!(256&t[we])){const n=t[ge];t[cs]&&ff(t[cs]),t[ls]&&ff(t[ls]),n.destroyNode&&Ds(e,t,n,3,null,null),function oC(e){let t=e[is];if(!t)return $u(e[G],e);for(;t;){let n=null;if(ln(t))n=t[is];else{const r=t[kt];r&&(n=r)}if(!n){for(;t&&!t[jn]&&t!==e;)ln(t)&&$u(t[G],t),t=t[lt];null===t&&(t=e),ln(t)&&$u(t[G],t),n=t&&t[jn]}t=n}}(t)}}function $u(e,t){if(!(256&t[we])){t[we]&=-129,t[we]|=256,function cC(e,t){let n;if(null!=e&&null!=(n=e.destroyHooks))for(let r=0;r=0?r[a]():r[-a].unsubscribe(),i+=2}else n[i].call(r[n[i+1]]);null!==r&&(t[Lo]=null);const o=t[Ur];if(null!==o){t[Ur]=null;for(let i=0;i-1){const{encapsulation:i}=e.data[r.directiveStart+o];if(i===Un.None||i===Un.Emulated)return null}return un(r,n)}}(e,t.parent,n)}function ho(e,t,n,r,o){e.insertBefore(t,n,r,o)}function Og(e,t,n){e.appendChild(t,n)}function kg(e,t,n,r,o){null!==r?ho(e,t,n,r,o):Og(e,t,n)}function sc(e,t){return e.parentNode(t)}let Lu,Hu,uc,Lg=function Pg(e,t,n){return 40&e.type?un(e,n):null};function ac(e,t,n,r){const o=Pu(e,r,t),i=t[ge],u=function $g(e,t,n){return Lg(e,t,n)}(r.parent||t[Ft],r,t);if(null!=o)if(Array.isArray(n))for(let d=0;de,createScript:e=>e,createScriptURL:e=>e})}catch{}return uc}()?.createScriptURL(e)||e}class Wg{constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${rr})`}}function qr(e){return e instanceof Wg?e.changingThisBreaksApplicationSecurity:e}function Cs(e,t){const n=function CC(e){return e instanceof Wg&&e.getTypeName()||null}(e);if(null!=n&&n!==t){if("ResourceURL"===n&&"URL"===t)return!0;throw new Error(`Required a safe ${t}, got a ${n} (see ${rr})`)}return n===t}const NC=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i;var ii=function(e){return e[e.NONE=0]="NONE",e[e.HTML=1]="HTML",e[e.STYLE=2]="STYLE",e[e.SCRIPT=3]="SCRIPT",e[e.URL=4]="URL",e[e.RESOURCE_URL=5]="RESOURCE_URL",e}(ii||{});function em(e){const t=Is();return t?t.sanitize(ii.URL,e)||"":Cs(e,"URL")?qr(e):function Vu(e){return(e=String(e)).match(NC)?e:"unsafe:"+e}(S(e))}function tm(e){const t=Is();if(t)return Gg(t.sanitize(ii.RESOURCE_URL,e)||"");if(Cs(e,"ResourceURL"))return Gg(qr(e));throw new B(904,!1)}function Is(){const e=N();return e&&e[Fo].sanitizer}class te{constructor(t,n){this._desc=t,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof n?this.__NG_ELEMENT_ID__=n:void 0!==n&&(this.\u0275prov=ce({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}}const Ts=new te("ENVIRONMENT_INITIALIZER"),rm=new te("INJECTOR",-1),om=new te("INJECTOR_DEF_TYPES");class Wu{get(t,n=es){if(n===es){const r=new Error(`NullInjectorError: No provider for ${Je(t)}!`);throw r.name="NullInjectorError",r}return n}}function HC(...e){return{\u0275providers:sm(0,e),\u0275fromNgModule:!0}}function sm(e,...t){const n=[],r=new Set;let o;const i=a=>{n.push(a)};return Xo(t,a=>{const u=a;pc(u,i,[],r)&&(o||=[],o.push(u))}),void 0!==o&&am(o,i),n}function am(e,t){for(let n=0;n{t(i,r)})}}function pc(e,t,n,r){if(!(e=oe(e)))return!1;let o=null,i=Ia(e);const a=!i&&ke(e);if(i||a){if(a&&!a.standalone)return!1;o=e}else{const d=e.ngModule;if(i=Ia(d),!i)return!1;o=d}const u=r.has(o);if(a){if(u)return!1;if(r.add(o),a.dependencies){const d="function"==typeof a.dependencies?a.dependencies():a.dependencies;for(const p of d)pc(p,t,n,r)}}else{if(!i)return!1;{if(null!=i.imports&&!u){let p;r.add(o);try{Xo(i.imports,h=>{pc(h,t,n,r)&&(p||=[],p.push(h))})}finally{}void 0!==p&&am(p,t)}if(!u){const p=co(o)||(()=>new o);t({provide:o,useFactory:p,deps:He},o),t({provide:om,useValue:o,multi:!0},o),t({provide:Ts,useValue:()=>ie(o),multi:!0},o)}const d=i.providers;if(null!=d&&!u){const p=e;Ku(d,h=>{t(h,p)})}}}return o!==e&&void 0!==e.providers}function Ku(e,t){for(let n of e)Ke(n)&&(n=n.\u0275providers),Array.isArray(n)?Ku(n,t):t(n)}const jC=Oe({provide:String,useValue:Oe});function Yu(e){return null!==e&&"object"==typeof e&&jC in e}function fo(e){return"function"==typeof e}const Zu=new te("Set Injector scope."),hc={},zC={};let Qu;function fc(){return void 0===Qu&&(Qu=new Wu),Qu}class An{}class gc extends An{get destroyed(){return this._destroyed}constructor(t,n,r,o){super(),this.parent=n,this.source=r,this.scopes=o,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,Ju(t,a=>this.processProvider(a)),this.records.set(rm,si(void 0,this)),o.has("environment")&&this.records.set(An,si(void 0,this));const i=this.records.get(Zu);null!=i&&"string"==typeof i.value&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(om.multi,He,Me.Self))}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const n of this._ngOnDestroyHooks)n.ngOnDestroy();const t=this._onDestroyHooks;this._onDestroyHooks=[];for(const n of t)n()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear()}}onDestroy(t){return this.assertNotDestroyed(),this._onDestroyHooks.push(t),()=>this.removeOnDestroy(t)}runInContext(t){this.assertNotDestroyed();const n=Fr(this),r=an(void 0);try{return t()}finally{Fr(n),an(r)}}get(t,n=es,r=Me.Default){if(this.assertNotDestroyed(),t.hasOwnProperty(Vh))return t[Vh](this);r=Aa(r);const i=Fr(this),a=an(void 0);try{if(!(r&Me.SkipSelf)){let d=this.records.get(t);if(void 0===d){const p=function YC(e){return"function"==typeof e||"object"==typeof e&&e instanceof te}(t)&&Sa(t);d=p&&this.injectableDefInScope(p)?si(Xu(t),hc):null,this.records.set(t,d)}if(null!=d)return this.hydrate(t,d)}return(r&Me.Self?fc():this.parent).get(t,n=r&Me.Optional&&n===es?null:n)}catch(u){if("NullInjectorError"===u.name){if((u[Na]=u[Na]||[]).unshift(Je(t)),i)throw u;return function j1(e,t,n,r){const o=e[Na];throw t[Uh]&&o.unshift(t[Uh]),e.message=function V1(e,t,n,r=null){e=e&&"\n"===e.charAt(0)&&"\u0275"==e.charAt(1)?e.slice(2):e;let o=Je(t);if(Array.isArray(t))o=t.map(Je).join(" -> ");else if("object"==typeof t){let i=[];for(let a in t)if(t.hasOwnProperty(a)){let u=t[a];i.push(a+":"+("string"==typeof u?JSON.stringify(u):Je(u)))}o=`{${i.join(", ")}}`}return`${n}${r?"("+r+")":""}[${o}]: ${e.replace(L1,"\n ")}`}("\n"+e.message,o,n,r),e.ngTokenPath=o,e[Na]=null,e}(u,t,"R3InjectorError",this.source)}throw u}finally{an(a),Fr(i)}}resolveInjectorInitializers(){const t=Fr(this),n=an(void 0);try{const o=this.get(Ts.multi,He,Me.Self);for(const i of o)i()}finally{Fr(t),an(n)}}toString(){const t=[],n=this.records;for(const r of n.keys())t.push(Je(r));return`R3Injector[${t.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new B(205,!1)}processProvider(t){let n=fo(t=oe(t))?t:oe(t&&t.provide);const r=function GC(e){return Yu(e)?si(void 0,e.useValue):si(function um(e,t,n){let r;if(fo(e)){const o=oe(e);return co(o)||Xu(o)}if(Yu(e))r=()=>oe(e.useValue);else if(function lm(e){return!(!e||!e.useFactory)}(e))r=()=>e.useFactory(...Kl(e.deps||[]));else if(function cm(e){return!(!e||!e.useExisting)}(e))r=()=>ie(oe(e.useExisting));else{const o=oe(e&&(e.useClass||e.provide));if(!function WC(e){return!!e.deps}(e))return co(o)||Xu(o);r=()=>new o(...Kl(e.deps))}return r}(e),hc)}(t);if(fo(t)||!0!==t.multi)this.records.get(n);else{let o=this.records.get(n);o||(o=si(void 0,hc,!0),o.factory=()=>Kl(o.multi),this.records.set(n,o)),n=t,o.multi.push(t)}this.records.set(n,r)}hydrate(t,n){return n.value===hc&&(n.value=zC,n.value=n.factory()),"object"==typeof n.value&&n.value&&function KC(e){return null!==e&&"object"==typeof e&&"function"==typeof e.ngOnDestroy}(n.value)&&this._ngOnDestroyHooks.add(n.value),n.value}injectableDefInScope(t){if(!t.providedIn)return!1;const n=oe(t.providedIn);return"string"==typeof n?"any"===n||this.scopes.has(n):this.injectorDefTypes.has(n)}removeOnDestroy(t){const n=this._onDestroyHooks.indexOf(t);-1!==n&&this._onDestroyHooks.splice(n,1)}}function Xu(e){const t=Sa(e),n=null!==t?t.factory:co(e);if(null!==n)return n;if(e instanceof te)throw new B(204,!1);if(e instanceof Function)return function qC(e){const t=e.length;if(t>0)throw function ys(e,t){const n=[];for(let r=0;rn.factory(e):()=>new e}(e);throw new B(204,!1)}function si(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function Ju(e,t){for(const n of e)Array.isArray(n)?Ju(n,t):n&&Ke(n)?Ju(n.\u0275providers,t):t(n)}const mc=new te("AppId",{providedIn:"root",factory:()=>ZC}),ZC="ng",dm=new te("Platform Initializer"),ai=new te("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),pm=new te("CSP nonce",{providedIn:"root",factory:()=>function oi(){if(void 0!==Hu)return Hu;if(typeof document<"u")return document;throw new B(210,!1)}().body?.querySelector("[ngCspNonce]")?.getAttribute("ngCspNonce")||null});let hm=(e,t,n)=>null;function ad(e,t,n=!1){return hm(e,t,n)}class a0{}class mm{}class l0{resolveComponentFactory(t){throw function c0(e){const t=Error(`No component factory found for ${Je(e)}.`);return t.ngComponent=e,t}(t)}}let _c=(()=>{class e{static#e=this.NULL=new l0}return e})();function u0(){return ui(Pt(),N())}function ui(e,t){return new Gr(un(e,t))}let Gr=(()=>{class e{constructor(n){this.nativeElement=n}static#e=this.__NG_ELEMENT_ID__=u0}return e})();function d0(e){return e instanceof Gr?e.nativeElement:e}class ym{}let Dc=(()=>{class e{constructor(){this.destroyNode=null}static#e=this.__NG_ELEMENT_ID__=()=>function p0(){const e=N(),n=bn(Pt().index,e);return(ln(n)?n:e)[ge]}()}return e})(),h0=(()=>{class e{static#e=this.\u0275prov=ce({token:e,providedIn:"root",factory:()=>null})}return e})();class Cc{constructor(t){this.full=t,this.major=t.split(".")[0],this.minor=t.split(".")[1],this.patch=t.split(".").slice(2).join(".")}}const f0=new Cc("16.2.10"),ud={};function _m(e,t=null,n=null,r){const o=Dm(e,t,n,r);return o.resolveInjectorInitializers(),o}function Dm(e,t=null,n=null,r,o=new Set){const i=[n||He,HC(e)];return r=r||("object"==typeof e?void 0:Je(e)),new gc(i,t||fc(),r||null,o)}let Mn=(()=>{class e{static#e=this.THROW_IF_NOT_FOUND=es;static#t=this.NULL=new Wu;static create(n,r){if(Array.isArray(n))return _m({name:""},r,n,"");{const o=n.name??"";return _m({name:o},n.parent,n.providers,o)}}static#n=this.\u0275prov=ce({token:e,providedIn:"any",factory:()=>ie(rm)});static#r=this.__NG_ELEMENT_ID__=-1}return e})();function pd(e){return e.ngOriginalError}class Cr{constructor(){this._console=console}handleError(t){const n=this._findOriginalError(t);this._console.error("ERROR",t),n&&this._console.error("ORIGINAL ERROR",n)}_findOriginalError(t){let n=t&&pd(t);for(;n&&pd(n);)n=pd(n);return n||null}}function fd(e){return t=>{setTimeout(e,void 0,t)}}const en=class E0 extends It{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,n,r){let o=t,i=n||(()=>null),a=r;if(t&&"object"==typeof t){const d=t;o=d.next?.bind(d),i=d.error?.bind(d),a=d.complete?.bind(d)}this.__isAsync&&(i=fd(i),o&&(o=fd(o)),a&&(a=fd(a)));const u=super.subscribe({next:o,error:i,complete:a});return t instanceof A&&t.add(u),u}};function Sm(...e){}class rt{constructor({enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new en(!1),this.onMicrotaskEmpty=new en(!1),this.onStable=new en(!1),this.onError=new en(!1),typeof Zone>"u")throw new B(908,!1);Zone.assertZonePatched();const o=this;o._nesting=0,o._outer=o._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(o._inner=o._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(o._inner=o._inner.fork(Zone.longStackTraceZoneSpec)),o.shouldCoalesceEventChangeDetection=!r&&n,o.shouldCoalesceRunChangeDetection=r,o.lastRequestAnimationFrameId=-1,o.nativeRequestAnimationFrame=function _0(){const e="function"==typeof tt.requestAnimationFrame;let t=tt[e?"requestAnimationFrame":"setTimeout"],n=tt[e?"cancelAnimationFrame":"clearTimeout"];if(typeof Zone<"u"&&t&&n){const r=t[Zone.__symbol__("OriginalDelegate")];r&&(t=r);const o=n[Zone.__symbol__("OriginalDelegate")];o&&(n=o)}return{nativeRequestAnimationFrame:t,nativeCancelAnimationFrame:n}}().nativeRequestAnimationFrame,function S0(e){const t=()=>{!function C0(e){e.isCheckStableRunning||-1!==e.lastRequestAnimationFrameId||(e.lastRequestAnimationFrameId=e.nativeRequestAnimationFrame.call(tt,()=>{e.fakeTopEventTask||(e.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{e.lastRequestAnimationFrameId=-1,md(e),e.isCheckStableRunning=!0,gd(e),e.isCheckStableRunning=!1},void 0,()=>{},()=>{})),e.fakeTopEventTask.invoke()}),md(e))}(e)};e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(n,r,o,i,a,u)=>{if(function T0(e){return!(!Array.isArray(e)||1!==e.length)&&!0===e[0].data?.__ignore_ng_zone__}(u))return n.invokeTask(o,i,a,u);try{return Im(e),n.invokeTask(o,i,a,u)}finally{(e.shouldCoalesceEventChangeDetection&&"eventTask"===i.type||e.shouldCoalesceRunChangeDetection)&&t(),Tm(e)}},onInvoke:(n,r,o,i,a,u,d)=>{try{return Im(e),n.invoke(o,i,a,u,d)}finally{e.shouldCoalesceRunChangeDetection&&t(),Tm(e)}},onHasTask:(n,r,o,i)=>{n.hasTask(o,i),r===o&&("microTask"==i.change?(e._hasPendingMicrotasks=i.microTask,md(e),gd(e)):"macroTask"==i.change&&(e.hasPendingMacrotasks=i.macroTask))},onHandleError:(n,r,o,i)=>(n.handleError(o,i),e.runOutsideAngular(()=>e.onError.emit(i)),!1)})}(o)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!rt.isInAngularZone())throw new B(909,!1)}static assertNotInAngularZone(){if(rt.isInAngularZone())throw new B(909,!1)}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,o){const i=this._inner,a=i.scheduleEventTask("NgZoneEvent: "+o,t,D0,Sm,Sm);try{return i.runTask(a,n,r)}finally{i.cancelTask(a)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}}const D0={};function gd(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function md(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&-1!==e.lastRequestAnimationFrameId)}function Im(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function Tm(e){e._nesting--,gd(e)}class I0{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new en,this.onMicrotaskEmpty=new en,this.onStable=new en,this.onError=new en}run(t,n,r){return t.apply(n,r)}runGuarded(t,n,r){return t.apply(n,r)}runOutsideAngular(t){return t()}runTask(t,n,r,o){return t.apply(n,r)}}const Nm=new te("",{providedIn:"root",factory:Am});function Am(){const e=X(rt);let t=!0;return function Gt(...e){const t=ro(e),n=function Fl(e,t){return"number"==typeof ko(e)?e.pop():t}(e,1/0),r=e;return r.length?1===r.length?Ue(r[0]):Pr(n)(ft(r,t)):Cn}(new Be(o=>{t=e.isStable&&!e.hasPendingMacrotasks&&!e.hasPendingMicrotasks,e.runOutsideAngular(()=>{o.next(t),o.complete()})}),new Be(o=>{let i;e.runOutsideAngular(()=>{i=e.onStable.subscribe(()=>{rt.assertNotInAngularZone(),queueMicrotask(()=>{!t&&!e.hasPendingMacrotasks&&!e.hasPendingMicrotasks&&(t=!0,o.next(!0))})})});const a=e.onUnstable.subscribe(()=>{rt.assertInAngularZone(),t&&(t=!1,e.runOutsideAngular(()=>{o.next(!1)}))});return()=>{i.unsubscribe(),a.unsubscribe()}}).pipe(Yi()))}function Sr(e){return e instanceof Function?e():e}let vd=(()=>{class e{constructor(){this.renderDepth=0,this.handler=null}begin(){this.handler?.validateBegin(),this.renderDepth++}end(){this.renderDepth--,0===this.renderDepth&&this.handler?.execute()}ngOnDestroy(){this.handler?.destroy(),this.handler=null}static#e=this.\u0275prov=ce({token:e,providedIn:"root",factory:()=>new e})}return e})();function Ms(e){for(;e;){e[we]|=64;const t=Es(e);if(eu(e)&&!t)return e;e=t}return null}const km=new te("",{providedIn:"root",factory:()=>!1});let Ic=null;function Fm(e,t){return e[t]??Hm()}function Bm(e,t){const n=Hm();n.producerNode?.length&&(e[t]=Ic,n.lView=e,Ic=Um())}const L0={...cf,consumerIsAlwaysLive:!0,consumerMarkedDirty:e=>{Ms(e.lView)},lView:null};function Um(){return Object.create(L0)}function Hm(){return Ic??=Um(),Ic}const ye={};function le(e,t=Me.Default){const n=N();return null===n?ie(e,t):Jf(Pt(),n,oe(e),t)}function Tc(e,t,n,r,o,i,a,u,d,p,h){const f=t.blueprint.slice();return f[vt]=o,f[we]=140|r,(null!==p||e&&2048&e[we])&&(f[we]|=2048),Nf(f),f[lt]=f[Bo]=e,f[_t]=n,f[Fo]=a||e&&e[Fo],f[ge]=u||e&&e[ge],f[Br]=d||e&&e[Br]||null,f[Ft]=i,f[as]=function VD(){return jD++}(),f[wr]=h,f[nf]=p,f[Dt]=2==t.type?e[Dt]:f,f}function hi(e,t,n,r,o){let i=e.data[t];if(null===i)i=function yd(e,t,n,r,o){const i=kf(),a=cu(),d=e.data[t]=function G0(e,t,n,r,o,i){let a=t?t.injectorIndex:-1,u=0;return function zo(){return null!==pe.skipHydrationRootTNode}()&&(u|=128),{type:n,index:r,insertBeforeIndex:null,injectorIndex:a,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,propertyBindings:null,flags:u,providerIndexes:0,value:o,attrs:i,mergedAttrs:null,localNames:null,initialInputs:void 0,inputs:null,outputs:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:t,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}(0,a?i:i&&i.parent,n,t,r,o);return null===e.firstChild&&(e.firstChild=d),null!==i&&(a?null==i.child&&null!==d.parent&&(i.child=d):null===i.next&&(i.next=d,d.prev=i)),d}(e,t,n,r,o),function j_(){return pe.lFrame.inI18n}()&&(i.flags|=32);else if(64&i.type){i.type=n,i.value=r,i.attrs=o;const a=function ps(){const e=pe.lFrame,t=e.currentTNode;return e.isParent?t:t.parent}();i.injectorIndex=null===a?-1:a.injectorIndex}return cr(i,!0),i}function xs(e,t,n,r){if(0===n)return-1;const o=t.length;for(let i=0;ixe&&function jm(e,t,n,r){if(!r)if(3==(3&t[we])){const i=e.preOrderCheckHooks;null!==i&&Ua(t,i,n)}else{const i=e.preOrderHooks;null!==i&&Ha(t,i,0,n)}uo(n)}(e,t,xe,!1),ar(u?2:0,o);const p=u?i:null,h=nu(p);try{null!==p&&(p.dirty=!1),n(r,o)}finally{ru(p,h)}}finally{u&&null===t[cs]&&Bm(t,cs),uo(a),ar(u?3:1,o)}}function bd(e,t,n){if(Jl(t)){const r=Tn(null);try{const i=t.directiveEnd;for(let a=t.directiveStart;anull;function Wm(e,t,n,r){for(let o in e)if(e.hasOwnProperty(o)){n=null===n?{}:n;const i=e[o];null===r?Km(n,t,o,i):r.hasOwnProperty(o)&&Km(n,t,r[o],i)}return n}function Km(e,t,n,r){e.hasOwnProperty(n)?e[n].push(t,r):e[n]=[t,r]}function Ym(e,t,n,r,o,i){for(let p=0;p0;){const n=e[--t];if("number"==typeof n&&n<0)return n}return 0})(a)!=u&&a.push(u),a.push(n,r,i)}}(e,t,r,xs(e,n,o.hostVars,ye),o)}function ur(e,t,n,r,o,i){const a=un(e,t);!function Sd(e,t,n,r,o,i,a){if(null==i)e.removeAttribute(t,o,n);else{const u=null==a?S(i):a(i,r||"",o);e.setAttribute(t,o,u,n)}}(t[ge],a,i,e.value,n,r,o)}function aS(e,t,n,r,o,i){const a=i[t];if(null!==a)for(let u=0;u{class e{constructor(){this.all=new Set,this.queue=new Map}create(n,r,o){const i=typeof Zone>"u"?null:Zone.current,a=function y_(e,t,n){const r=Object.create(b_);n&&(r.consumerAllowSignalWrites=!0),r.fn=e,r.schedule=t;const o=a=>{r.cleanupFn=a};return r.ref={notify:()=>pf(r),run:()=>{if(r.dirty=!1,r.hasRun&&!hf(r))return;r.hasRun=!0;const a=nu(r);try{r.cleanupFn(),r.cleanupFn=Ef,r.fn(o)}finally{ru(r,a)}},cleanup:()=>r.cleanupFn()},r.ref}(n,p=>{this.all.has(p)&&this.queue.set(p,i)},o);let u;this.all.add(a),a.notify();const d=()=>{a.cleanup(),u?.(),this.all.delete(a),this.queue.delete(a)};return u=r?.onDestroy(d),{destroy:d}}flush(){if(0!==this.queue.size)for(const[n,r]of this.queue)this.queue.delete(n),r?r.run(()=>n.run()):n.run()}get isQueueEmpty(){return 0===this.queue.size}static#e=this.\u0275prov=ce({token:e,providedIn:"root",factory:()=>new e})}return e})();function Ac(e,t,n){let r=n?e.styles:null,o=n?e.classes:null,i=0;if(null!==t)for(let a=0;a0){av(e,1);const o=n.components;null!==o&&lv(e,o,1)}}function lv(e,t,n){for(let r=0;r-1&&(ic(t,r),Wa(n,r))}this._attachedToViewContainer=!1}ku(this._lView[G],this._lView)}onDestroy(t){!function xf(e,t){if(256==(256&e[we]))throw new B(911,!1);null===e[Ur]&&(e[Ur]=[]),e[Ur].push(t)}(this._lView,t)}markForCheck(){Ms(this._cdRefInjectingView||this._lView)}detach(){this._lView[we]&=-129}reattach(){this._lView[we]|=128}detectChanges(){Mc(this._lView[G],this._lView,this.context)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new B(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function rC(e,t){Ds(e,t,t[ge],2,null,null)}(this._lView[G],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new B(902,!1);this._appRef=t}}class mS extends Os{constructor(t){super(t),this._view=t}detectChanges(){const t=this._view;Mc(t[G],t,t[_t],!1)}checkNoChanges(){}get context(){return null}}class uv extends _c{constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){const n=ke(t);return new ks(n,this.ngModule)}}function dv(e){const t=[];for(let n in e)e.hasOwnProperty(n)&&t.push({propName:e[n],templateName:n});return t}class yS{constructor(t,n){this.injector=t,this.parentInjector=n}get(t,n,r){r=Aa(r);const o=this.injector.get(t,ud,r);return o!==ud||n===ud?o:this.parentInjector.get(t,n,r)}}class ks extends mm{get inputs(){const t=this.componentDef,n=t.inputTransforms,r=dv(t.inputs);if(null!==n)for(const o of r)n.hasOwnProperty(o.propName)&&(o.transform=n[o.propName]);return r}get outputs(){return dv(this.componentDef.outputs)}constructor(t,n){super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=function J1(e){return e.map(X1).join(",")}(t.selectors),this.ngContentSelectors=t.ngContentSelectors?t.ngContentSelectors:[],this.isBoundToModule=!!n}create(t,n,r,o){let i=(o=o||this.ngModule)instanceof An?o:o?.injector;i&&null!==this.componentDef.getStandaloneInjector&&(i=this.componentDef.getStandaloneInjector(i)||i);const a=i?new yS(t,i):t,u=a.get(ym,null);if(null===u)throw new B(407,!1);const f={rendererFactory:u,sanitizer:a.get(h0,null),effectManager:a.get(ov,null),afterRenderEventManager:a.get(vd,null)},m=u.createRenderer(null,this.componentDef),b=this.componentDef.selectors[0][0]||"div",E=r?function H0(e,t,n,r){const i=r.get(km,!1)||n===Un.ShadowDom,a=e.selectRootElement(t,i);return function j0(e){Gm(e)}(a),a}(m,r,this.componentDef.encapsulation,a):oc(m,b,function vS(e){const t=e.toLowerCase();return"svg"===t?"svg":"math"===t?"math":null}(b)),P=this.componentDef.signals?4608:this.componentDef.onPush?576:528;let D=null;null!==E&&(D=ad(E,a,!0));const ee=_d(0,null,null,1,0,null,null,null,null,null,null),he=Tc(null,ee,null,P,null,null,f,m,a,null,D);let Re,fn;hu(he);try{const kr=this.componentDef;let Hi,xh=null;kr.findHostDirectiveDefs?(Hi=[],xh=new Map,kr.findHostDirectiveDefs(kr,Hi,xh),Hi.push(kr)):Hi=[kr];const g$=function wS(e,t){const n=e[G],r=xe;return e[r]=t,hi(n,r,2,"#host",null)}(he,E),m$=function ES(e,t,n,r,o,i,a){const u=o[G];!function _S(e,t,n,r){for(const o of e)t.mergedAttrs=rs(t.mergedAttrs,o.hostAttrs);null!==t.mergedAttrs&&(Ac(t,t.mergedAttrs,!0),null!==n&&Vg(r,n,t))}(r,e,t,a);let d=null;null!==t&&(d=ad(t,o[Br]));const p=i.rendererFactory.createRenderer(t,n);let h=16;n.signals?h=4096:n.onPush&&(h=64);const f=Tc(o,qm(n),null,h,o[e.index],e,i,p,null,null,d);return u.firstCreatePass&&Cd(u,e,r.length-1),Nc(o,f),o[e.index]=f}(g$,E,kr,Hi,he,f,m);fn=Tf(ee,xe),E&&function CS(e,t,n,r){if(r)Ql(e,n,["ng-version",f0.full]);else{const{attrs:o,classes:i}=function e_(e){const t=[],n=[];let r=1,o=2;for(;r0&&jg(e,n,i.join(" "))}}(m,kr,E,r),void 0!==n&&function SS(e,t,n){const r=e.projection=[];for(let o=0;o(Vr(!0),oc(r,o,function zf(){return pe.lFrame.currentNamespace}()));function Lc(e){return!!e&&"function"==typeof e.then}function Pv(e){return!!e&&"function"==typeof e.subscribe}function Bd(e,t,n,r){const o=N(),i=$e(),a=Pt();return function Fv(e,t,n,r,o,i,a){const u=ka(r),p=e.firstCreatePass&&tv(e),h=t[_t],f=ev(t);let m=!0;if(3&r.type||a){const _=un(r,t),O=a?a(_):_,P=f.length,D=a?he=>a(nt(he[r.index])):r.index;let ee=null;if(!a&&u&&(ee=function fI(e,t,n,r){const o=e.cleanup;if(null!=o)for(let i=0;id?u[d]:null}"string"==typeof a&&(i+=2)}return null}(e,t,o,r.index)),null!==ee)(ee.__ngLastListenerFn__||ee).__ngNextListenerFn__=i,ee.__ngLastListenerFn__=i,m=!1;else{i=Uv(r,t,h,i,!1);const he=n.listen(O,o,i);f.push(i,he),p&&p.push(o,D,P,P+1)}}else i=Uv(r,t,h,i,!1);const b=r.outputs;let E;if(m&&null!==b&&(E=b[o])){const _=E.length;if(_)for(let O=0;O<_;O+=2){const Re=t[E[O]][E[O+1]].subscribe(i),fn=f.length;f.push(i,Re),p&&p.push(o,r.index,fn,-(fn+1))}}}(i,o,o[ge],a,e,t,r),Bd}function Bv(e,t,n,r){try{return ar(6,t,n),!1!==n(r)}catch(o){return rv(e,o),!1}finally{ar(7,t,n)}}function Uv(e,t,n,r,o){return function i(a){if(a===Function)return r;Ms(e.componentOffset>-1?bn(e.index,t):t);let d=Bv(t,n,r,a),p=i.__ngNextListenerFn__;for(;p;)d=Bv(t,n,p,a)&&d,p=p.__ngNextListenerFn__;return o&&!1===d&&a.preventDefault(),d}}function s(e,t=""){const n=N(),r=$e(),o=e+xe,i=r.firstCreatePass?hi(r,o,1,t,null):r.data[o],a=dy(r,n,i,t,e);n[o]=a,Fa()&&ac(r,n,a,i),cr(i,!1)}let dy=(e,t,n,r,o)=>(Vr(!0),function rc(e,t){return e.createText(t)}(t[ge],r));const Si="en-US";let ky=Si;class yo{}class sb{}class Xd extends yo{constructor(t,n,r){super(),this._parent=n,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new uv(this);const o=yn(t);this._bootstrapComponents=Sr(o.bootstrap),this._r3Injector=Dm(t,n,[{provide:yo,useValue:this},{provide:_c,useValue:this.componentFactoryResolver},...r],Je(t),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(t)}get injector(){return this._r3Injector}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class Jd extends sb{constructor(t){super(),this.moduleType=t}create(t){return new Xd(this.moduleType,t,[])}}class ab extends yo{constructor(t){super(),this.componentFactoryResolver=new uv(this),this.instance=null;const n=new gc([...t.providers,{provide:yo,useValue:this},{provide:_c,useValue:this.componentFactoryResolver}],t.parent||fc(),t.debugName,new Set(["environment"]));this.injector=n,t.runEnvironmentInitializers&&n.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(t){this.injector.onDestroy(t)}}function ep(e,t,n=null){return new ab({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector}let dN=(()=>{class e{constructor(n){this._injector=n,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(n){if(!n.standalone)return null;if(!this.cachedInjectors.has(n)){const r=sm(0,n.type),o=r.length>0?ep([r],this._injector,`Standalone[${n.type.name}]`):null;this.cachedInjectors.set(n,o)}return this.cachedInjectors.get(n)}ngOnDestroy(){try{for(const n of this.cachedInjectors.values())null!==n&&n.destroy()}finally{this.cachedInjectors.clear()}}static#e=this.\u0275prov=ce({token:e,providedIn:"environment",factory:()=>new e(ie(An))})}return e})();function cb(e){e.getStandaloneInjector=t=>t.get(dN).getOrCreateStandaloneInjector(e)}function LN(){return this._results[Symbol.iterator]()}class np{static#e=Symbol.iterator;get changes(){return this._changes||(this._changes=new en)}constructor(t=!1){this._emitDistinctChangesOnly=t,this.dirty=!0,this._results=[],this._changesDetected=!1,this._changes=null,this.length=0,this.first=void 0,this.last=void 0;const n=np.prototype;n[Symbol.iterator]||(n[Symbol.iterator]=LN)}get(t){return this._results[t]}map(t){return this._results.map(t)}filter(t){return this._results.filter(t)}find(t){return this._results.find(t)}reduce(t,n){return this._results.reduce(t,n)}forEach(t){this._results.forEach(t)}some(t){return this._results.some(t)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(t,n){const r=this;r.dirty=!1;const o=function Nn(e){return e.flat(Number.POSITIVE_INFINITY)}(t);(this._changesDetected=!function mD(e,t,n){if(e.length!==t.length)return!1;for(let r=0;r0&&(n[o-1][jn]=t),r{class e{static#e=this.__NG_ELEMENT_ID__=jN}return e})();const UN=Tr,HN=class extends UN{constructor(t,n,r){super(),this._declarationLView=t,this._declarationTContainer=n,this.elementRef=r}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(t,n){return this.createEmbeddedViewImpl(t,n)}createEmbeddedViewImpl(t,n,r){const o=function FN(e,t,n,r){const o=t.tView,u=Tc(e,o,n,4096&e[we]?4096:16,null,t,null,null,null,r?.injector??null,r?.hydrationInfo??null);u[ss]=e[t.index];const p=e[ir];return null!==p&&(u[ir]=p.createEmbeddedView(o)),Nd(o,u,n),u}(this._declarationLView,this._declarationTContainer,t,{injector:n,hydrationInfo:r});return new Os(o)}};function jN(){return zc(Pt(),N())}function zc(e,t){return 4&e.type?new HN(t,e,ui(e,t)):null}let Gn=(()=>{class e{static#e=this.__NG_ELEMENT_ID__=KN}return e})();function KN(){return Ib(Pt(),N())}const YN=Gn,Cb=class extends YN{constructor(t,n,r){super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r}get element(){return ui(this._hostTNode,this._hostLView)}get injector(){return new Jt(this._hostTNode,this._hostLView)}get parentInjector(){const t=za(this._hostTNode,this._hostLView);if(vu(t)){const n=gs(t,this._hostLView),r=fs(t);return new Jt(n[G].data[r+8],n)}return new Jt(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){const n=Sb(this._lContainer);return null!==n&&n[t]||null}get length(){return this._lContainer.length-kt}createEmbeddedView(t,n,r){let o,i;"number"==typeof r?o=r:null!=r&&(o=r.index,i=r.injector);const u=t.createEmbeddedViewImpl(n||{},i,null);return this.insertImpl(u,o,false),u}createComponent(t,n,r,o,i){const a=t&&!function vs(e){return"function"==typeof e}(t);let u;if(a)u=n;else{const _=n||{};u=_.index,r=_.injector,o=_.projectableNodes,i=_.environmentInjector||_.ngModuleRef}const d=a?t:new ks(ke(t)),p=r||this.parentInjector;if(!i&&null==d.ngModule){const O=(a?p:this.parentInjector).get(An,null);O&&(i=O)}ke(d.componentType??{});const b=d.create(p,o,null,i);return this.insertImpl(b.hostView,u,false),b}insert(t,n){return this.insertImpl(t,n,!1)}insertImpl(t,n,r){const o=t._lView;if(function N_(e){return Zt(e[lt])}(o)){const d=this.indexOf(t);if(-1!==d)this.detach(d);else{const p=o[lt],h=new Cb(p,p[Ft],p[lt]);h.detach(h.indexOf(t))}}const a=this._adjustIndex(n),u=this._lContainer;return BN(u,o,a,!r),t.attachToViewContainerRef(),sg(rp(u),a,t),t}move(t,n){return this.insert(t,n)}indexOf(t){const n=Sb(this._lContainer);return null!==n?n.indexOf(t):-1}remove(t){const n=this._adjustIndex(t,-1),r=ic(this._lContainer,n);r&&(Wa(rp(this._lContainer),n),ku(r[G],r))}detach(t){const n=this._adjustIndex(t,-1),r=ic(this._lContainer,n);return r&&null!=Wa(rp(this._lContainer),n)?new Os(r):null}_adjustIndex(t,n=0){return t??this.length+n}};function Sb(e){return e[8]}function rp(e){return e[8]||(e[8]=[])}function Ib(e,t){let n;const r=t[e.index];return Zt(r)?n=r:(n=function Xm(e,t,n,r){return[e,!0,!1,t,null,0,r,n,null,null,null]}(r,t,null,e),t[e.index]=n,Nc(t,n)),Tb(n,t,e,r),new Cb(n,e,t)}let Tb=function Nb(e,t,n,r){if(e[sr])return;let o;o=8&n.type?nt(r):function ZN(e,t){const n=e[ge],r=n.createComment(""),o=un(t,e);return ho(n,sc(n,o),r,function uC(e,t){return e.nextSibling(t)}(n,o),!1),r}(t,n),e[sr]=o};class op{constructor(t){this.queryList=t,this.matches=null}clone(){return new op(this.queryList)}setDirty(){this.queryList.setDirty()}}class ip{constructor(t=[]){this.queries=t}createEmbeddedView(t){const n=t.queries;if(null!==n){const r=null!==t.contentQueries?t.contentQueries[0]:n.length,o=[];for(let i=0;i0)r.push(a[u/2]);else{const p=i[u+1],h=t[-d];for(let f=kt;f{class e{constructor(){this.initialized=!1,this.done=!1,this.donePromise=new Promise((n,r)=>{this.resolve=n,this.reject=r}),this.appInits=X(fp,{optional:!0})??[]}runInitializers(){if(this.initialized)return;const n=[];for(const o of this.appInits){const i=o();if(Lc(i))n.push(i);else if(Pv(i)){const a=new Promise((u,d)=>{i.subscribe({complete:u,error:d})});n.push(a)}}const r=()=>{this.done=!0,this.resolve()};Promise.all(n).then(()=>{r()}).catch(o=>{this.reject(o)}),0===n.length&&r(),this.initialized=!0}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),Jb=(()=>{class e{log(n){console.log(n)}warn(n){console.warn(n)}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})();const Nr=new te("LocaleId",{providedIn:"root",factory:()=>X(Nr,Me.Optional|Me.SkipSelf)||function TA(){return typeof $localize<"u"&&$localize.locale||Si}()});let ew=(()=>{class e{constructor(){this.taskId=0,this.pendingTasks=new Set,this.hasPendingTasks=new wt(!1)}add(){this.hasPendingTasks.next(!0);const n=this.taskId++;return this.pendingTasks.add(n),n}remove(n){this.pendingTasks.delete(n),0===this.pendingTasks.size&&this.hasPendingTasks.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this.hasPendingTasks.next(!1)}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();class MA{constructor(t,n){this.ngModuleFactory=t,this.componentFactories=n}}let tw=(()=>{class e{compileModuleSync(n){return new Jd(n)}compileModuleAsync(n){return Promise.resolve(this.compileModuleSync(n))}compileModuleAndAllComponentsSync(n){const r=this.compileModuleSync(n),i=Sr(yn(n).declarations).reduce((a,u)=>{const d=ke(u);return d&&a.push(new ks(d)),a},[]);return new MA(r,i)}compileModuleAndAllComponentsAsync(n){return Promise.resolve(this.compileModuleAndAllComponentsSync(n))}clearCache(){}clearCacheFor(n){}getModuleId(n){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();const iw=new te(""),Kc=new te("");let wp,yp=(()=>{class e{constructor(n,r,o){this._ngZone=n,this.registry=r,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,wp||(function ZA(e){wp=e}(o),o.addToWindow(r)),this._watchAngularEvents(),n.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{rt.assertNotInAngularZone(),queueMicrotask(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())queueMicrotask(()=>{for(;0!==this._callbacks.length;){let n=this._callbacks.pop();clearTimeout(n.timeoutId),n.doneCb(this._didWork)}this._didWork=!1});else{let n=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>!r.updateCb||!r.updateCb(n)||(clearTimeout(r.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(n=>({source:n.source,creationLocation:n.creationLocation,data:n.data})):[]}addCallback(n,r,o){let i=-1;r&&r>0&&(i=setTimeout(()=>{this._callbacks=this._callbacks.filter(a=>a.timeoutId!==i),n(this._didWork,this.getPendingTasks())},r)),this._callbacks.push({doneCb:n,timeoutId:i,updateCb:o})}whenStable(n,r,o){if(o&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(n,r,o),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(n){this.registry.registerApplication(n,this)}unregisterApplication(n){this.registry.unregisterApplication(n)}findProviders(n,r,o){return[]}static#e=this.\u0275fac=function(r){return new(r||e)(ie(rt),ie(bp),ie(Kc))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})(),bp=(()=>{class e{constructor(){this._applications=new Map}registerApplication(n,r){this._applications.set(n,r)}unregisterApplication(n){this._applications.delete(n)}unregisterAllApplications(){this._applications.clear()}getTestability(n){return this._applications.get(n)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(n,r=!0){return wp?.findTestabilityInTree(this,n,r)??null}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})(),Kr=null;const sw=new te("AllowMultipleToken"),Ep=new te("PlatformDestroyListeners"),_p=new te("appBootstrapListener");class cw{constructor(t,n){this.name=t,this.token=n}}function uw(e,t,n=[]){const r=`Platform: ${t}`,o=new te(r);return(i=[])=>{let a=Dp();if(!a||a.injector.get(sw,!1)){const u=[...n,...i,{provide:o,useValue:!0}];e?e(u):function JA(e){if(Kr&&!Kr.get(sw,!1))throw new B(400,!1);(function aw(){!function h_(e){vf=e}(()=>{throw new B(600,!1)})})(),Kr=e;const t=e.get(pw);(function lw(e){e.get(dm,null)?.forEach(n=>n())})(e)}(function dw(e=[],t){return Mn.create({name:t,providers:[{provide:Zu,useValue:"platform"},{provide:Ep,useValue:new Set([()=>Kr=null])},...e]})}(u,r))}return function tM(e){const t=Dp();if(!t)throw new B(401,!1);return t}()}}function Dp(){return Kr?.get(pw)??null}let pw=(()=>{class e{constructor(n){this._injector=n,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(n,r){const o=function nM(e="zone.js",t){return"noop"===e?new I0:"zone.js"===e?new rt(t):e}(r?.ngZone,function hw(e){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:e?.eventCoalescing??!1,shouldCoalesceRunChangeDetection:e?.runCoalescing??!1}}({eventCoalescing:r?.ngZoneEventCoalescing,runCoalescing:r?.ngZoneRunCoalescing}));return o.run(()=>{const i=function uN(e,t,n){return new Xd(e,t,n)}(n.moduleType,this.injector,function yw(e){return[{provide:rt,useFactory:e},{provide:Ts,multi:!0,useFactory:()=>{const t=X(oM,{optional:!0});return()=>t.initialize()}},{provide:vw,useFactory:rM},{provide:Nm,useFactory:Am}]}(()=>o)),a=i.injector.get(Cr,null);return o.runOutsideAngular(()=>{const u=o.onError.subscribe({next:d=>{a.handleError(d)}});i.onDestroy(()=>{Yc(this._modules,i),u.unsubscribe()})}),function fw(e,t,n){try{const r=n();return Lc(r)?r.catch(o=>{throw t.runOutsideAngular(()=>e.handleError(o)),o}):r}catch(r){throw t.runOutsideAngular(()=>e.handleError(r)),r}}(a,o,()=>{const u=i.injector.get(gp);return u.runInitializers(),u.donePromise.then(()=>(function $y(e){In(e,"Expected localeId to be defined"),"string"==typeof e&&(ky=e.toLowerCase().replace(/_/g,"-"))}(i.injector.get(Nr,Si)||Si),this._moduleDoBootstrap(i),i))})})}bootstrapModule(n,r=[]){const o=gw({},r);return function QA(e,t,n){const r=new Jd(n);return Promise.resolve(r)}(0,0,n).then(i=>this.bootstrapModuleFactory(i,o))}_moduleDoBootstrap(n){const r=n.injector.get(Ni);if(n._bootstrapComponents.length>0)n._bootstrapComponents.forEach(o=>r.bootstrap(o));else{if(!n.instance.ngDoBootstrap)throw new B(-403,!1);n.instance.ngDoBootstrap(r)}this._modules.push(n)}onDestroy(n){this._destroyListeners.push(n)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new B(404,!1);this._modules.slice().forEach(r=>r.destroy()),this._destroyListeners.forEach(r=>r());const n=this._injector.get(Ep,null);n&&(n.forEach(r=>r()),n.clear()),this._destroyed=!0}get destroyed(){return this._destroyed}static#e=this.\u0275fac=function(r){return new(r||e)(ie(Mn))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})();function gw(e,t){return Array.isArray(t)?t.reduce(gw,e):{...e,...t}}let Ni=(()=>{class e{constructor(){this._bootstrapListeners=[],this._runningTick=!1,this._destroyed=!1,this._destroyListeners=[],this._views=[],this.internalErrorHandler=X(vw),this.zoneIsStable=X(Nm),this.componentTypes=[],this.components=[],this.isStable=X(ew).hasPendingTasks.pipe(Sn(n=>n?ae(!1):this.zoneIsStable),function Bl(e,t=Ge){return e=e??Ul,Ne((n,r)=>{let o,i=!0;n.subscribe(ve(r,a=>{const u=t(a);(i||!e(o,u))&&(i=!1,o=u,r.next(a))}))})}(),Yi()),this._injector=X(An)}get destroyed(){return this._destroyed}get injector(){return this._injector}bootstrap(n,r){const o=n instanceof mm;if(!this._injector.get(gp).done)throw!o&&function Po(e){const t=ke(e)||Ot(e)||Yt(e);return null!==t&&t.standalone}(n),new B(405,!1);let a;a=o?n:this._injector.get(_c).resolveComponentFactory(n),this.componentTypes.push(a.componentType);const u=function XA(e){return e.isBoundToModule}(a)?void 0:this._injector.get(yo),p=a.create(Mn.NULL,[],r||a.selector,u),h=p.location.nativeElement,f=p.injector.get(iw,null);return f?.registerApplication(h),p.onDestroy(()=>{this.detachView(p.hostView),Yc(this.components,p),f?.unregisterApplication(h)}),this._loadComponent(p),p}tick(){if(this._runningTick)throw new B(101,!1);try{this._runningTick=!0;for(let n of this._views)n.detectChanges()}catch(n){this.internalErrorHandler(n)}finally{this._runningTick=!1}}attachView(n){const r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){const r=n;Yc(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView),this.tick(),this.components.push(n);const r=this._injector.get(_p,[]);r.push(...this._bootstrapListeners),r.forEach(o=>o(n))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(n=>n()),this._views.slice().forEach(n=>n.destroy())}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(n){return this._destroyListeners.push(n),()=>Yc(this._destroyListeners,n)}destroy(){if(this._destroyed)throw new B(406,!1);const n=this._injector;n.destroy&&!n.destroyed&&n.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function Yc(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}const vw=new te("",{providedIn:"root",factory:()=>X(Cr).handleError.bind(void 0)});function rM(){const e=X(rt),t=X(Cr);return n=>e.runOutsideAngular(()=>t.handleError(n))}let oM=(()=>{class e{constructor(){this.zone=X(rt),this.applicationRef=X(Ni)}initialize(){this._onMicrotaskEmptySubscription||(this._onMicrotaskEmptySubscription=this.zone.onMicrotaskEmpty.subscribe({next:()=>{this.zone.run(()=>{this.applicationRef.tick()})}}))}ngOnDestroy(){this._onMicrotaskEmptySubscription?.unsubscribe()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();let Cp=(()=>{class e{static#e=this.__NG_ELEMENT_ID__=sM}return e})();function sM(e){return function aM(e,t,n){if(ao(e)&&!n){const r=bn(e.index,t);return new Os(r,r)}return 47&e.type?new Os(t[Dt],t):null}(Pt(),N(),16==(16&e))}const wM=uw(null,"core",[]);let EM=(()=>{class e{constructor(n){}static#e=this.\u0275fac=function(r){return new(r||e)(ie(Ni))};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({})}return e})();function Mp(e){return"boolean"==typeof e?e:null!=e&&"false"!==e}let xp=null;function Ai(){return xp}class $M{}const Rn=new te("DocumentToken");let Rp=(()=>{class e{historyGo(n){throw new Error("Not implemented")}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:function(){return X(LM)},providedIn:"platform"})}return e})();const PM=new te("Location Initialized");let LM=(()=>{class e extends Rp{constructor(){super(),this._doc=X(Rn),this._location=window.location,this._history=window.history}getBaseHrefFromDOM(){return Ai().getBaseHref(this._doc)}onPopState(n){const r=Ai().getGlobalEventTarget(this._doc,"window");return r.addEventListener("popstate",n,!1),()=>r.removeEventListener("popstate",n)}onHashChange(n){const r=Ai().getGlobalEventTarget(this._doc,"window");return r.addEventListener("hashchange",n,!1),()=>r.removeEventListener("hashchange",n)}get href(){return this._location.href}get protocol(){return this._location.protocol}get hostname(){return this._location.hostname}get port(){return this._location.port}get pathname(){return this._location.pathname}get search(){return this._location.search}get hash(){return this._location.hash}set pathname(n){this._location.pathname=n}pushState(n,r,o){this._history.pushState(n,r,o)}replaceState(n,r,o){this._history.replaceState(n,r,o)}forward(){this._history.forward()}back(){this._history.back()}historyGo(n=0){this._history.go(n)}getState(){return this._history.state}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:function(){return new e},providedIn:"platform"})}return e})();function Op(e,t){if(0==e.length)return t;if(0==t.length)return e;let n=0;return e.endsWith("/")&&n++,t.startsWith("/")&&n++,2==n?e+t.substring(1):1==n?e+t:e+"/"+t}function Pw(e){const t=e.match(/#|\?|$/),n=t&&t.index||e.length;return e.slice(0,n-("/"===e[n-1]?1:0))+e.slice(n)}function Ar(e){return e&&"?"!==e[0]?"?"+e:e}let wo=(()=>{class e{historyGo(n){throw new Error("Not implemented")}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:function(){return X(Fw)},providedIn:"root"})}return e})();const Lw=new te("appBaseHref");let Fw=(()=>{class e extends wo{constructor(n,r){super(),this._platformLocation=n,this._removeListenerFns=[],this._baseHref=r??this._platformLocation.getBaseHrefFromDOM()??X(Rn).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(n){this._removeListenerFns.push(this._platformLocation.onPopState(n),this._platformLocation.onHashChange(n))}getBaseHref(){return this._baseHref}prepareExternalUrl(n){return Op(this._baseHref,n)}path(n=!1){const r=this._platformLocation.pathname+Ar(this._platformLocation.search),o=this._platformLocation.hash;return o&&n?`${r}${o}`:r}pushState(n,r,o,i){const a=this.prepareExternalUrl(o+Ar(i));this._platformLocation.pushState(n,r,a)}replaceState(n,r,o,i){const a=this.prepareExternalUrl(o+Ar(i));this._platformLocation.replaceState(n,r,a)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(n=0){this._platformLocation.historyGo?.(n)}static#e=this.\u0275fac=function(r){return new(r||e)(ie(Rp),ie(Lw,8))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),FM=(()=>{class e extends wo{constructor(n,r){super(),this._platformLocation=n,this._baseHref="",this._removeListenerFns=[],null!=r&&(this._baseHref=r)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(n){this._removeListenerFns.push(this._platformLocation.onPopState(n),this._platformLocation.onHashChange(n))}getBaseHref(){return this._baseHref}path(n=!1){let r=this._platformLocation.hash;return null==r&&(r="#"),r.length>0?r.substring(1):r}prepareExternalUrl(n){const r=Op(this._baseHref,n);return r.length>0?"#"+r:r}pushState(n,r,o,i){let a=this.prepareExternalUrl(o+Ar(i));0==a.length&&(a=this._platformLocation.pathname),this._platformLocation.pushState(n,r,a)}replaceState(n,r,o,i){let a=this.prepareExternalUrl(o+Ar(i));0==a.length&&(a=this._platformLocation.pathname),this._platformLocation.replaceState(n,r,a)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(n=0){this._platformLocation.historyGo?.(n)}static#e=this.\u0275fac=function(r){return new(r||e)(ie(Rp),ie(Lw,8))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})(),kp=(()=>{class e{constructor(n){this._subject=new en,this._urlChangeListeners=[],this._urlChangeSubscription=null,this._locationStrategy=n;const r=this._locationStrategy.getBaseHref();this._basePath=function HM(e){if(new RegExp("^(https?:)?//").test(e)){const[,n]=e.split(/\/\/[^\/]+/);return n}return e}(Pw(Bw(r))),this._locationStrategy.onPopState(o=>{this._subject.emit({url:this.path(!0),pop:!0,state:o.state,type:o.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(n=!1){return this.normalize(this._locationStrategy.path(n))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(n,r=""){return this.path()==this.normalize(n+Ar(r))}normalize(n){return e.stripTrailingSlash(function UM(e,t){if(!e||!t.startsWith(e))return t;const n=t.substring(e.length);return""===n||["/",";","?","#"].includes(n[0])?n:t}(this._basePath,Bw(n)))}prepareExternalUrl(n){return n&&"/"!==n[0]&&(n="/"+n),this._locationStrategy.prepareExternalUrl(n)}go(n,r="",o=null){this._locationStrategy.pushState(o,"",n,r),this._notifyUrlChangeListeners(this.prepareExternalUrl(n+Ar(r)),o)}replaceState(n,r="",o=null){this._locationStrategy.replaceState(o,"",n,r),this._notifyUrlChangeListeners(this.prepareExternalUrl(n+Ar(r)),o)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(n=0){this._locationStrategy.historyGo?.(n)}onUrlChange(n){return this._urlChangeListeners.push(n),this._urlChangeSubscription||(this._urlChangeSubscription=this.subscribe(r=>{this._notifyUrlChangeListeners(r.url,r.state)})),()=>{const r=this._urlChangeListeners.indexOf(n);this._urlChangeListeners.splice(r,1),0===this._urlChangeListeners.length&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(n="",r){this._urlChangeListeners.forEach(o=>o(n,r))}subscribe(n,r,o){return this._subject.subscribe({next:n,error:r,complete:o})}static#e=this.normalizeQueryParams=Ar;static#t=this.joinWithSlash=Op;static#n=this.stripTrailingSlash=Pw;static#r=this.\u0275fac=function(r){return new(r||e)(ie(wo))};static#o=this.\u0275prov=ce({token:e,factory:function(){return function BM(){return new kp(ie(wo))}()},providedIn:"root"})}return e})();function Bw(e){return e.replace(/\/index.html$/,"")}let Yr=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({})}return e})();function tE(e){return"server"===e}let iR=(()=>{class e{static#e=this.\u0275prov=ce({token:e,providedIn:"root",factory:()=>new sR(ie(Rn),window)})}return e})();class sR{constructor(t,n){this.document=t,this.window=n,this.offset=()=>[0,0]}setOffset(t){this.offset=Array.isArray(t)?()=>t:t}getScrollPosition(){return this.supportsScrolling()?[this.window.pageXOffset,this.window.pageYOffset]:[0,0]}scrollToPosition(t){this.supportsScrolling()&&this.window.scrollTo(t[0],t[1])}scrollToAnchor(t){if(!this.supportsScrolling())return;const n=function aR(e,t){const n=e.getElementById(t)||e.getElementsByName(t)[0];if(n)return n;if("function"==typeof e.createTreeWalker&&e.body&&"function"==typeof e.body.attachShadow){const r=e.createTreeWalker(e.body,NodeFilter.SHOW_ELEMENT);let o=r.currentNode;for(;o;){const i=o.shadowRoot;if(i){const a=i.getElementById(t)||i.querySelector(`[name="${t}"]`);if(a)return a}o=r.nextNode()}}return null}(this.document,t);n&&(this.scrollToElement(n),n.focus())}setHistoryScrollRestoration(t){this.supportsScrolling()&&(this.window.history.scrollRestoration=t)}scrollToElement(t){const n=t.getBoundingClientRect(),r=n.left+this.window.pageXOffset,o=n.top+this.window.pageYOffset,i=this.offset();this.window.scrollTo(r-i[0],o-i[1])}supportsScrolling(){try{return!!this.window&&!!this.window.scrollTo&&"pageXOffset"in this.window}catch{return!1}}}class xR extends $M{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class Qp extends xR{static makeCurrent(){!function kM(e){xp||(xp=e)}(new Qp)}onAndCancel(t,n,r){return t.addEventListener(n,r),()=>{t.removeEventListener(n,r)}}dispatchEvent(t,n){t.dispatchEvent(n)}remove(t){t.parentNode&&t.parentNode.removeChild(t)}createElement(t,n){return(n=n||this.getDefaultDocument()).createElement(t)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(t){return t.nodeType===Node.ELEMENT_NODE}isShadowRoot(t){return t instanceof DocumentFragment}getGlobalEventTarget(t,n){return"window"===n?window:"document"===n?t:"body"===n?t.body:null}getBaseHref(t){const n=function RR(){return Js=Js||document.querySelector("base"),Js?Js.getAttribute("href"):null}();return null==n?null:function OR(e){pl=pl||document.createElement("a"),pl.setAttribute("href",e);const t=pl.pathname;return"/"===t.charAt(0)?t:`/${t}`}(n)}resetBaseElement(){Js=null}getUserAgent(){return window.navigator.userAgent}getCookie(t){return function Sx(e,t){t=encodeURIComponent(t);for(const n of e.split(";")){const r=n.indexOf("="),[o,i]=-1==r?[n,""]:[n.slice(0,r),n.slice(r+1)];if(o.trim()===t)return decodeURIComponent(i)}return null}(document.cookie,t)}}let pl,Js=null,$R=(()=>{class e{build(){return new XMLHttpRequest}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})();const Xp=new te("EventManagerPlugins");let sE=(()=>{class e{constructor(n,r){this._zone=r,this._eventNameToPlugin=new Map,n.forEach(o=>{o.manager=this}),this._plugins=n.slice().reverse()}addEventListener(n,r,o){return this._findPluginFor(r).addEventListener(n,r,o)}getZone(){return this._zone}_findPluginFor(n){let r=this._eventNameToPlugin.get(n);if(r)return r;if(r=this._plugins.find(i=>i.supports(n)),!r)throw new B(5101,!1);return this._eventNameToPlugin.set(n,r),r}static#e=this.\u0275fac=function(r){return new(r||e)(ie(Xp),ie(rt))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})();class aE{constructor(t){this._doc=t}}const Jp="ng-app-id";let cE=(()=>{class e{constructor(n,r,o,i={}){this.doc=n,this.appId=r,this.nonce=o,this.platformId=i,this.styleRef=new Map,this.hostNodes=new Set,this.styleNodesInDOM=this.collectServerRenderedStyles(),this.platformIsServer=tE(i),this.resetHostNodes()}addStyles(n){for(const r of n)1===this.changeUsageCount(r,1)&&this.onStyleAdded(r)}removeStyles(n){for(const r of n)this.changeUsageCount(r,-1)<=0&&this.onStyleRemoved(r)}ngOnDestroy(){const n=this.styleNodesInDOM;n&&(n.forEach(r=>r.remove()),n.clear());for(const r of this.getAllStyles())this.onStyleRemoved(r);this.resetHostNodes()}addHost(n){this.hostNodes.add(n);for(const r of this.getAllStyles())this.addStyleToHost(n,r)}removeHost(n){this.hostNodes.delete(n)}getAllStyles(){return this.styleRef.keys()}onStyleAdded(n){for(const r of this.hostNodes)this.addStyleToHost(r,n)}onStyleRemoved(n){const r=this.styleRef;r.get(n)?.elements?.forEach(o=>o.remove()),r.delete(n)}collectServerRenderedStyles(){const n=this.doc.head?.querySelectorAll(`style[${Jp}="${this.appId}"]`);if(n?.length){const r=new Map;return n.forEach(o=>{null!=o.textContent&&r.set(o.textContent,o)}),r}return null}changeUsageCount(n,r){const o=this.styleRef;if(o.has(n)){const i=o.get(n);return i.usage+=r,i.usage}return o.set(n,{usage:r,elements:[]}),r}getStyleElement(n,r){const o=this.styleNodesInDOM,i=o?.get(r);if(i?.parentNode===n)return o.delete(r),i.removeAttribute(Jp),i;{const a=this.doc.createElement("style");return this.nonce&&a.setAttribute("nonce",this.nonce),a.textContent=r,this.platformIsServer&&a.setAttribute(Jp,this.appId),a}}addStyleToHost(n,r){const o=this.getStyleElement(n,r);n.appendChild(o);const i=this.styleRef,a=i.get(r)?.elements;a?a.push(o):i.set(r,{elements:[o],usage:1})}resetHostNodes(){const n=this.hostNodes;n.clear(),n.add(this.doc.head)}static#e=this.\u0275fac=function(r){return new(r||e)(ie(Rn),ie(mc),ie(pm,8),ie(ai))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})();const eh={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},th=/%COMP%/g,BR=new te("RemoveStylesOnCompDestroy",{providedIn:"root",factory:()=>!1});function uE(e,t){return t.map(n=>n.replace(th,e))}let dE=(()=>{class e{constructor(n,r,o,i,a,u,d,p=null){this.eventManager=n,this.sharedStylesHost=r,this.appId=o,this.removeStylesOnCompDestroy=i,this.doc=a,this.platformId=u,this.ngZone=d,this.nonce=p,this.rendererByCompId=new Map,this.platformIsServer=tE(u),this.defaultRenderer=new nh(n,a,d,this.platformIsServer)}createRenderer(n,r){if(!n||!r)return this.defaultRenderer;this.platformIsServer&&r.encapsulation===Un.ShadowDom&&(r={...r,encapsulation:Un.Emulated});const o=this.getOrCreateRenderer(n,r);return o instanceof hE?o.applyToHost(n):o instanceof rh&&o.applyStyles(),o}getOrCreateRenderer(n,r){const o=this.rendererByCompId;let i=o.get(r.id);if(!i){const a=this.doc,u=this.ngZone,d=this.eventManager,p=this.sharedStylesHost,h=this.removeStylesOnCompDestroy,f=this.platformIsServer;switch(r.encapsulation){case Un.Emulated:i=new hE(d,p,r,this.appId,h,a,u,f);break;case Un.ShadowDom:return new VR(d,p,n,r,a,u,this.nonce,f);default:i=new rh(d,p,r,h,a,u,f)}o.set(r.id,i)}return i}ngOnDestroy(){this.rendererByCompId.clear()}static#e=this.\u0275fac=function(r){return new(r||e)(ie(sE),ie(cE),ie(mc),ie(BR),ie(Rn),ie(ai),ie(rt),ie(pm))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})();class nh{constructor(t,n,r,o){this.eventManager=t,this.doc=n,this.ngZone=r,this.platformIsServer=o,this.data=Object.create(null),this.destroyNode=null}destroy(){}createElement(t,n){return n?this.doc.createElementNS(eh[n]||n,t):this.doc.createElement(t)}createComment(t){return this.doc.createComment(t)}createText(t){return this.doc.createTextNode(t)}appendChild(t,n){(pE(t)?t.content:t).appendChild(n)}insertBefore(t,n,r){t&&(pE(t)?t.content:t).insertBefore(n,r)}removeChild(t,n){t&&t.removeChild(n)}selectRootElement(t,n){let r="string"==typeof t?this.doc.querySelector(t):t;if(!r)throw new B(-5104,!1);return n||(r.textContent=""),r}parentNode(t){return t.parentNode}nextSibling(t){return t.nextSibling}setAttribute(t,n,r,o){if(o){n=o+":"+n;const i=eh[o];i?t.setAttributeNS(i,n,r):t.setAttribute(n,r)}else t.setAttribute(n,r)}removeAttribute(t,n,r){if(r){const o=eh[r];o?t.removeAttributeNS(o,n):t.removeAttribute(`${r}:${n}`)}else t.removeAttribute(n)}addClass(t,n){t.classList.add(n)}removeClass(t,n){t.classList.remove(n)}setStyle(t,n,r,o){o&(zr.DashCase|zr.Important)?t.style.setProperty(n,r,o&zr.Important?"important":""):t.style[n]=r}removeStyle(t,n,r){r&zr.DashCase?t.style.removeProperty(n):t.style[n]=""}setProperty(t,n,r){t[n]=r}setValue(t,n){t.nodeValue=n}listen(t,n,r){if("string"==typeof t&&!(t=Ai().getGlobalEventTarget(this.doc,t)))throw new Error(`Unsupported event target ${t} for event ${n}`);return this.eventManager.addEventListener(t,n,this.decoratePreventDefault(r))}decoratePreventDefault(t){return n=>{if("__ngUnwrap__"===n)return t;!1===(this.platformIsServer?this.ngZone.runGuarded(()=>t(n)):t(n))&&n.preventDefault()}}}function pE(e){return"TEMPLATE"===e.tagName&&void 0!==e.content}class VR extends nh{constructor(t,n,r,o,i,a,u,d){super(t,i,a,d),this.sharedStylesHost=n,this.hostEl=r,this.shadowRoot=r.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const p=uE(o.id,o.styles);for(const h of p){const f=document.createElement("style");u&&f.setAttribute("nonce",u),f.textContent=h,this.shadowRoot.appendChild(f)}}nodeOrShadowRoot(t){return t===this.hostEl?this.shadowRoot:t}appendChild(t,n){return super.appendChild(this.nodeOrShadowRoot(t),n)}insertBefore(t,n,r){return super.insertBefore(this.nodeOrShadowRoot(t),n,r)}removeChild(t,n){return super.removeChild(this.nodeOrShadowRoot(t),n)}parentNode(t){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(t)))}destroy(){this.sharedStylesHost.removeHost(this.shadowRoot)}}class rh extends nh{constructor(t,n,r,o,i,a,u,d){super(t,i,a,u),this.sharedStylesHost=n,this.removeStylesOnCompDestroy=o,this.styles=d?uE(d,r.styles):r.styles}applyStyles(){this.sharedStylesHost.addStyles(this.styles)}destroy(){this.removeStylesOnCompDestroy&&this.sharedStylesHost.removeStyles(this.styles)}}class hE extends rh{constructor(t,n,r,o,i,a,u,d){const p=o+"-"+r.id;super(t,n,r,i,a,u,d,p),this.contentAttr=function UR(e){return"_ngcontent-%COMP%".replace(th,e)}(p),this.hostAttr=function HR(e){return"_nghost-%COMP%".replace(th,e)}(p)}applyToHost(t){this.applyStyles(),this.setAttribute(t,this.hostAttr,"")}createElement(t,n){const r=super.createElement(t,n);return super.setAttribute(r,this.contentAttr,""),r}}let zR=(()=>{class e extends aE{constructor(n){super(n)}supports(n){return!0}addEventListener(n,r,o){return n.addEventListener(r,o,!1),()=>this.removeEventListener(n,r,o)}removeEventListener(n,r,o){return n.removeEventListener(r,o)}static#e=this.\u0275fac=function(r){return new(r||e)(ie(Rn))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})();const fE=["alt","control","meta","shift"],qR={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},GR={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey};let WR=(()=>{class e extends aE{constructor(n){super(n)}supports(n){return null!=e.parseEventName(n)}addEventListener(n,r,o){const i=e.parseEventName(r),a=e.eventCallback(i.fullKey,o,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>Ai().onAndCancel(n,i.domEventName,a))}static parseEventName(n){const r=n.toLowerCase().split("."),o=r.shift();if(0===r.length||"keydown"!==o&&"keyup"!==o)return null;const i=e._normalizeKey(r.pop());let a="",u=r.indexOf("code");if(u>-1&&(r.splice(u,1),a="code."),fE.forEach(p=>{const h=r.indexOf(p);h>-1&&(r.splice(h,1),a+=p+".")}),a+=i,0!=r.length||0===i.length)return null;const d={};return d.domEventName=o,d.fullKey=a,d}static matchEventFullKeyCode(n,r){let o=qR[n.key]||n.key,i="";return r.indexOf("code.")>-1&&(o=n.code,i="code."),!(null==o||!o)&&(o=o.toLowerCase()," "===o?o="space":"."===o&&(o="dot"),fE.forEach(a=>{a!==o&&(0,GR[a])(n)&&(i+=a+".")}),i+=o,i===r)}static eventCallback(n,r,o){return i=>{e.matchEventFullKeyCode(i,n)&&o.runGuarded(()=>r(i))}}static _normalizeKey(n){return"esc"===n?"escape":n}static#e=this.\u0275fac=function(r){return new(r||e)(ie(Rn))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})();const QR=uw(wM,"browser",[{provide:ai,useValue:"browser"},{provide:dm,useValue:function KR(){Qp.makeCurrent()},multi:!0},{provide:Rn,useFactory:function ZR(){return function yC(e){Hu=e}(document),document},deps:[]}]),XR=new te(""),vE=[{provide:Kc,useClass:class kR{addToWindow(t){tt.getAngularTestability=(r,o=!0)=>{const i=t.findTestabilityInTree(r,o);if(null==i)throw new B(5103,!1);return i},tt.getAllAngularTestabilities=()=>t.getAllTestabilities(),tt.getAllAngularRootElements=()=>t.getAllRootElements(),tt.frameworkStabilizers||(tt.frameworkStabilizers=[]),tt.frameworkStabilizers.push(r=>{const o=tt.getAllAngularTestabilities();let i=o.length,a=!1;const u=function(d){a=a||d,i--,0==i&&r(a)};o.forEach(d=>{d.whenStable(u)})})}findTestabilityInTree(t,n,r){return null==n?null:t.getTestability(n)??(r?Ai().isShadowRoot(n)?this.findTestabilityInTree(t,n.host,!0):this.findTestabilityInTree(t,n.parentElement,!0):null)}},deps:[]},{provide:iw,useClass:yp,deps:[rt,bp,Kc]},{provide:yp,useClass:yp,deps:[rt,bp,Kc]}],yE=[{provide:Zu,useValue:"root"},{provide:Cr,useFactory:function YR(){return new Cr},deps:[]},{provide:Xp,useClass:zR,multi:!0,deps:[Rn,rt,ai]},{provide:Xp,useClass:WR,multi:!0,deps:[Rn]},dE,cE,sE,{provide:ym,useExisting:dE},{provide:class cR{},useClass:$R,deps:[]},[]];let JR=(()=>{class e{constructor(n){}static withServerTransition(n){return{ngModule:e,providers:[{provide:mc,useValue:n.appId}]}}static#e=this.\u0275fac=function(r){return new(r||e)(ie(XR,12))};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({providers:[...yE,...vE],imports:[Yr,EM]})}return e})(),bE=(()=>{class e{constructor(n){this._doc=n}getTitle(){return this._doc.title}setTitle(n){this._doc.title=n||""}static#e=this.\u0275fac=function(r){return new(r||e)(ie(Rn))};static#t=this.\u0275prov=ce({token:e,factory:function(r){let o=null;return o=r?new r:function tO(){return new bE(ie(Rn))}(),o},providedIn:"root"})}return e})();typeof window<"u"&&window;const{isArray:aO}=Array,{getPrototypeOf:cO,prototype:lO,keys:uO}=Object;const{isArray:hO}=Array;function ih(...e){const t=ro(e),n=function Da(e){return y(ko(e))?e.pop():void 0}(e),{args:r,keys:o}=function dO(e){if(1===e.length){const t=e[0];if(aO(t))return{args:t,keys:null};if(function pO(e){return e&&"object"==typeof e&&cO(e)===lO}(t)){const n=uO(t);return{args:n.map(r=>t[r]),keys:n}}}return{args:e,keys:null}}(e);if(0===r.length)return ft([],t);const i=new Be(function vO(e,t,n=Ge){return r=>{DE(t,()=>{const{length:o}=e,i=new Array(o);let a=o,u=o;for(let d=0;d{const p=ft(e[d],t);let h=!1;p.subscribe(ve(r,f=>{i[d]=f,h||(h=!0,u--),u||r.next(n(i.slice()))},()=>{--a||r.complete()}))},r)},r)}}(r,t,o?a=>function mO(e,t){return e.reduce((n,r,o)=>(n[r]=t[o],n),{})}(o,a):Ge));return n?i.pipe(function gO(e){return Ce(t=>function fO(e,t){return hO(t)?e(...t):e(t)}(e,t))}(n)):i}function DE(e,t,n){e?Bn(n,e,t):t()}const hl=k(e=>function(){e(this),this.name="EmptyError",this.message="no elements in sequence"});function sh(...e){return function yO(){return Pr(1)}()(ft(e,ro(e)))}function CE(e){return new Be(t=>{Ue(e()).subscribe(t)})}function ea(e,t){const n=y(e)?e:()=>e,r=o=>o.error(n());return new Be(t?o=>t.schedule(r,0,o):r)}function ah(){return Ne((e,t)=>{let n=null;e._refCount++;const r=ve(t,void 0,void 0,void 0,()=>{if(!e||e._refCount<=0||0<--e._refCount)return void(n=null);const o=e._connection,i=n;n=null,o&&(!i||o===i)&&o.unsubscribe(),t.unsubscribe()});e.subscribe(r),r.closed||(n=e.connect())})}class SE extends Be{constructor(t,n){super(),this.source=t,this.subjectFactory=n,this._subject=null,this._refCount=0,this._connection=null,on(t)&&(this.lift=t.lift)}_subscribe(t){return this.getSubject().subscribe(t)}getSubject(){const t=this._subject;return(!t||t.isStopped)&&(this._subject=this.subjectFactory()),this._subject}_teardown(){this._refCount=0;const{_connection:t}=this;this._subject=this._connection=null,t?.unsubscribe()}connect(){let t=this._connection;if(!t){t=this._connection=new A;const n=this.getSubject();t.add(this.source.subscribe(ve(n,void 0,()=>{this._teardown(),n.complete()},r=>{this._teardown(),n.error(r)},()=>this._teardown()))),t.closed&&(this._connection=null,t=A.EMPTY)}return t}refCount(){return ah()(this)}}function xi(e){return e<=0?()=>Cn:Ne((t,n)=>{let r=0;t.subscribe(ve(n,o=>{++r<=e&&(n.next(o),e<=r&&n.complete())}))})}function Qr(e,t){return Ne((n,r)=>{let o=0;n.subscribe(ve(r,i=>e.call(t,i,o++)&&r.next(i)))})}function fl(e){return Ne((t,n)=>{let r=!1;t.subscribe(ve(n,o=>{r=!0,n.next(o)},()=>{r||n.next(e),n.complete()}))})}function IE(e=wO){return Ne((t,n)=>{let r=!1;t.subscribe(ve(n,o=>{r=!0,n.next(o)},()=>r?n.complete():n.error(e())))})}function wO(){return new hl}function Eo(e,t){const n=arguments.length>=2;return r=>r.pipe(e?Qr((o,i)=>e(o,i,r)):Ge,xi(1),n?fl(t):IE(()=>new hl))}function ta(e,t){return y(t)?pt(e,t,1):pt(e,1)}function Ht(e,t,n){const r=y(e)||t||n?{next:e,error:t,complete:n}:e;return r?Ne((o,i)=>{var a;null===(a=r.subscribe)||void 0===a||a.call(r);let u=!0;o.subscribe(ve(i,d=>{var p;null===(p=r.next)||void 0===p||p.call(r,d),i.next(d)},()=>{var d;u=!1,null===(d=r.complete)||void 0===d||d.call(r),i.complete()},d=>{var p;u=!1,null===(p=r.error)||void 0===p||p.call(r,d),i.error(d)},()=>{var d,p;u&&(null===(d=r.unsubscribe)||void 0===d||d.call(r)),null===(p=r.finalize)||void 0===p||p.call(r)}))}):Ge}function _o(e){return Ne((t,n)=>{let i,r=null,o=!1;r=t.subscribe(ve(n,void 0,void 0,a=>{i=Ue(e(a,_o(e)(t))),r?(r.unsubscribe(),r=null,i.subscribe(n)):o=!0})),o&&(r.unsubscribe(),r=null,i.subscribe(n))})}function ch(e){return e<=0?()=>Cn:Ne((t,n)=>{let r=[];t.subscribe(ve(n,o=>{r.push(o),e{for(const o of r)n.next(o);n.complete()},void 0,()=>{r=null}))})}function lh(e){return Ne((t,n)=>{try{t.subscribe(n)}finally{n.add(e)}})}const _e="primary",na=Symbol("RouteTitle");class IO{constructor(t){this.params=t||{}}has(t){return Object.prototype.hasOwnProperty.call(this.params,t)}get(t){if(this.has(t)){const n=this.params[t];return Array.isArray(n)?n[0]:n}return null}getAll(t){if(this.has(t)){const n=this.params[t];return Array.isArray(n)?n:[n]}return[]}get keys(){return Object.keys(this.params)}}function Ri(e){return new IO(e)}function TO(e,t,n){const r=n.path.split("/");if(r.length>e.length||"full"===n.pathMatch&&(t.hasChildren()||r.lengthr[i]===o)}return e===t}function NE(e){return e.length>0?e[e.length-1]:null}function Xr(e){return function sO(e){return!!e&&(e instanceof Be||y(e.lift)&&y(e.subscribe))}(e)?e:Lc(e)?ft(Promise.resolve(e)):ae(e)}const AO={exact:function xE(e,t,n){if(!Do(e.segments,t.segments)||!gl(e.segments,t.segments,n)||e.numberOfChildren!==t.numberOfChildren)return!1;for(const r in t.children)if(!e.children[r]||!xE(e.children[r],t.children[r],n))return!1;return!0},subset:RE},AE={exact:function MO(e,t){return fr(e,t)},subset:function xO(e,t){return Object.keys(t).length<=Object.keys(e).length&&Object.keys(t).every(n=>TE(e[n],t[n]))},ignored:()=>!0};function ME(e,t,n){return AO[n.paths](e.root,t.root,n.matrixParams)&&AE[n.queryParams](e.queryParams,t.queryParams)&&!("exact"===n.fragment&&e.fragment!==t.fragment)}function RE(e,t,n){return OE(e,t,t.segments,n)}function OE(e,t,n,r){if(e.segments.length>n.length){const o=e.segments.slice(0,n.length);return!(!Do(o,n)||t.hasChildren()||!gl(o,n,r))}if(e.segments.length===n.length){if(!Do(e.segments,n)||!gl(e.segments,n,r))return!1;for(const o in t.children)if(!e.children[o]||!RE(e.children[o],t.children[o],r))return!1;return!0}{const o=n.slice(0,e.segments.length),i=n.slice(e.segments.length);return!!(Do(e.segments,o)&&gl(e.segments,o,r)&&e.children[_e])&&OE(e.children[_e],t,i,r)}}function gl(e,t,n){return t.every((r,o)=>AE[n](e[o].parameters,r.parameters))}class Oi{constructor(t=new Ye([],{}),n={},r=null){this.root=t,this.queryParams=n,this.fragment=r}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Ri(this.queryParams)),this._queryParamMap}toString(){return kO.serialize(this)}}class Ye{constructor(t,n){this.segments=t,this.children=n,this.parent=null,Object.values(n).forEach(r=>r.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return ml(this)}}class ra{constructor(t,n){this.path=t,this.parameters=n}get parameterMap(){return this._parameterMap||(this._parameterMap=Ri(this.parameters)),this._parameterMap}toString(){return PE(this)}}function Do(e,t){return e.length===t.length&&e.every((n,r)=>n.path===t[r].path)}let oa=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:function(){return new uh},providedIn:"root"})}return e})();class uh{parse(t){const n=new qO(t);return new Oi(n.parseRootSegment(),n.parseQueryParams(),n.parseFragment())}serialize(t){const n=`/${ia(t.root,!0)}`,r=function LO(e){const t=Object.keys(e).map(n=>{const r=e[n];return Array.isArray(r)?r.map(o=>`${vl(n)}=${vl(o)}`).join("&"):`${vl(n)}=${vl(r)}`}).filter(n=>!!n);return t.length?`?${t.join("&")}`:""}(t.queryParams);return`${n}${r}${"string"==typeof t.fragment?`#${function $O(e){return encodeURI(e)}(t.fragment)}`:""}`}}const kO=new uh;function ml(e){return e.segments.map(t=>PE(t)).join("/")}function ia(e,t){if(!e.hasChildren())return ml(e);if(t){const n=e.children[_e]?ia(e.children[_e],!1):"",r=[];return Object.entries(e.children).forEach(([o,i])=>{o!==_e&&r.push(`${o}:${ia(i,!1)}`)}),r.length>0?`${n}(${r.join("//")})`:n}{const n=function OO(e,t){let n=[];return Object.entries(e.children).forEach(([r,o])=>{r===_e&&(n=n.concat(t(o,r)))}),Object.entries(e.children).forEach(([r,o])=>{r!==_e&&(n=n.concat(t(o,r)))}),n}(e,(r,o)=>o===_e?[ia(e.children[_e],!1)]:[`${o}:${ia(r,!1)}`]);return 1===Object.keys(e.children).length&&null!=e.children[_e]?`${ml(e)}/${n[0]}`:`${ml(e)}/(${n.join("//")})`}}function kE(e){return encodeURIComponent(e).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function vl(e){return kE(e).replace(/%3B/gi,";")}function dh(e){return kE(e).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function yl(e){return decodeURIComponent(e)}function $E(e){return yl(e.replace(/\+/g,"%20"))}function PE(e){return`${dh(e.path)}${function PO(e){return Object.keys(e).map(t=>`;${dh(t)}=${dh(e[t])}`).join("")}(e.parameters)}`}const FO=/^[^\/()?;#]+/;function ph(e){const t=e.match(FO);return t?t[0]:""}const BO=/^[^\/()?;=#]+/,HO=/^[^=?&#]+/,VO=/^[^&#]+/;class qO{constructor(t){this.url=t,this.remaining=t}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new Ye([],{}):new Ye([],this.parseChildren())}parseQueryParams(){const t={};if(this.consumeOptional("?"))do{this.parseQueryParam(t)}while(this.consumeOptional("&"));return t}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const t=[];for(this.peekStartsWith("(")||t.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),t.push(this.parseSegment());let n={};this.peekStartsWith("/(")&&(this.capture("/"),n=this.parseParens(!0));let r={};return this.peekStartsWith("(")&&(r=this.parseParens(!1)),(t.length>0||Object.keys(n).length>0)&&(r[_e]=new Ye(t,n)),r}parseSegment(){const t=ph(this.remaining);if(""===t&&this.peekStartsWith(";"))throw new B(4009,!1);return this.capture(t),new ra(yl(t),this.parseMatrixParams())}parseMatrixParams(){const t={};for(;this.consumeOptional(";");)this.parseParam(t);return t}parseParam(t){const n=function UO(e){const t=e.match(BO);return t?t[0]:""}(this.remaining);if(!n)return;this.capture(n);let r="";if(this.consumeOptional("=")){const o=ph(this.remaining);o&&(r=o,this.capture(r))}t[yl(n)]=yl(r)}parseQueryParam(t){const n=function jO(e){const t=e.match(HO);return t?t[0]:""}(this.remaining);if(!n)return;this.capture(n);let r="";if(this.consumeOptional("=")){const a=function zO(e){const t=e.match(VO);return t?t[0]:""}(this.remaining);a&&(r=a,this.capture(r))}const o=$E(n),i=$E(r);if(t.hasOwnProperty(o)){let a=t[o];Array.isArray(a)||(a=[a],t[o]=a),a.push(i)}else t[o]=i}parseParens(t){const n={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const r=ph(this.remaining),o=this.remaining[r.length];if("/"!==o&&")"!==o&&";"!==o)throw new B(4010,!1);let i;r.indexOf(":")>-1?(i=r.slice(0,r.indexOf(":")),this.capture(i),this.capture(":")):t&&(i=_e);const a=this.parseChildren();n[i]=1===Object.keys(a).length?a[_e]:new Ye([],a),this.consumeOptional("//")}return n}peekStartsWith(t){return this.remaining.startsWith(t)}consumeOptional(t){return!!this.peekStartsWith(t)&&(this.remaining=this.remaining.substring(t.length),!0)}capture(t){if(!this.consumeOptional(t))throw new B(4011,!1)}}function LE(e){return e.segments.length>0?new Ye([],{[_e]:e}):e}function FE(e){const t={};for(const r of Object.keys(e.children)){const i=FE(e.children[r]);if(r===_e&&0===i.segments.length&&i.hasChildren())for(const[a,u]of Object.entries(i.children))t[a]=u;else(i.segments.length>0||i.hasChildren())&&(t[r]=i)}return function GO(e){if(1===e.numberOfChildren&&e.children[_e]){const t=e.children[_e];return new Ye(e.segments.concat(t.segments),t.children)}return e}(new Ye(e.segments,t))}function Co(e){return e instanceof Oi}function BE(e){let t;const o=LE(function n(i){const a={};for(const d of i.children){const p=n(d);a[d.outlet]=p}const u=new Ye(i.url,a);return i===e&&(t=u),u}(e.root));return t??o}function UE(e,t,n,r){let o=e;for(;o.parent;)o=o.parent;if(0===t.length)return hh(o,o,o,n,r);const i=function KO(e){if("string"==typeof e[0]&&1===e.length&&"/"===e[0])return new jE(!0,0,e);let t=0,n=!1;const r=e.reduce((o,i,a)=>{if("object"==typeof i&&null!=i){if(i.outlets){const u={};return Object.entries(i.outlets).forEach(([d,p])=>{u[d]="string"==typeof p?p.split("/"):p}),[...o,{outlets:u}]}if(i.segmentPath)return[...o,i.segmentPath]}return"string"!=typeof i?[...o,i]:0===a?(i.split("/").forEach((u,d)=>{0==d&&"."===u||(0==d&&""===u?n=!0:".."===u?t++:""!=u&&o.push(u))}),o):[...o,i]},[]);return new jE(n,t,r)}(t);if(i.toRoot())return hh(o,o,new Ye([],{}),n,r);const a=function YO(e,t,n){if(e.isAbsolute)return new wl(t,!0,0);if(!n)return new wl(t,!1,NaN);if(null===n.parent)return new wl(n,!0,0);const r=bl(e.commands[0])?0:1;return function ZO(e,t,n){let r=e,o=t,i=n;for(;i>o;){if(i-=o,r=r.parent,!r)throw new B(4005,!1);o=r.segments.length}return new wl(r,!1,o-i)}(n,n.segments.length-1+r,e.numberOfDoubleDots)}(i,o,e),u=a.processChildren?aa(a.segmentGroup,a.index,i.commands):VE(a.segmentGroup,a.index,i.commands);return hh(o,a.segmentGroup,u,n,r)}function bl(e){return"object"==typeof e&&null!=e&&!e.outlets&&!e.segmentPath}function sa(e){return"object"==typeof e&&null!=e&&e.outlets}function hh(e,t,n,r,o){let a,i={};r&&Object.entries(r).forEach(([d,p])=>{i[d]=Array.isArray(p)?p.map(h=>`${h}`):`${p}`}),a=e===t?n:HE(e,t,n);const u=LE(FE(a));return new Oi(u,i,o)}function HE(e,t,n){const r={};return Object.entries(e.children).forEach(([o,i])=>{r[o]=i===t?n:HE(i,t,n)}),new Ye(e.segments,r)}class jE{constructor(t,n,r){if(this.isAbsolute=t,this.numberOfDoubleDots=n,this.commands=r,t&&r.length>0&&bl(r[0]))throw new B(4003,!1);const o=r.find(sa);if(o&&o!==NE(r))throw new B(4004,!1)}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class wl{constructor(t,n,r){this.segmentGroup=t,this.processChildren=n,this.index=r}}function VE(e,t,n){if(e||(e=new Ye([],{})),0===e.segments.length&&e.hasChildren())return aa(e,t,n);const r=function XO(e,t,n){let r=0,o=t;const i={match:!1,pathIndex:0,commandIndex:0};for(;o=n.length)return i;const a=e.segments[o],u=n[r];if(sa(u))break;const d=`${u}`,p=r0&&void 0===d)break;if(d&&p&&"object"==typeof p&&void 0===p.outlets){if(!qE(d,p,a))return i;r+=2}else{if(!qE(d,{},a))return i;r++}o++}return{match:!0,pathIndex:o,commandIndex:r}}(e,t,n),o=n.slice(r.commandIndex);if(r.match&&r.pathIndexi!==_e)&&e.children[_e]&&1===e.numberOfChildren&&0===e.children[_e].segments.length){const i=aa(e.children[_e],t,n);return new Ye(e.segments,i.children)}return Object.entries(r).forEach(([i,a])=>{"string"==typeof a&&(a=[a]),null!==a&&(o[i]=VE(e.children[i],t,a))}),Object.entries(e.children).forEach(([i,a])=>{void 0===r[i]&&(o[i]=a)}),new Ye(e.segments,o)}}function fh(e,t,n){const r=e.segments.slice(0,t);let o=0;for(;o{"string"==typeof r&&(r=[r]),null!==r&&(t[n]=fh(new Ye([],{}),0,r))}),t}function zE(e){const t={};return Object.entries(e).forEach(([n,r])=>t[n]=`${r}`),t}function qE(e,t,n){return e==n.path&&fr(t,n.parameters)}const ca="imperative";class gr{constructor(t,n){this.id=t,this.url=n}}class El extends gr{constructor(t,n,r="imperative",o=null){super(t,n),this.type=0,this.navigationTrigger=r,this.restoredState=o}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class Jr extends gr{constructor(t,n,r){super(t,n),this.urlAfterRedirects=r,this.type=1}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class la extends gr{constructor(t,n,r,o){super(t,n),this.reason=r,this.code=o,this.type=2}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class ki extends gr{constructor(t,n,r,o){super(t,n),this.reason=r,this.code=o,this.type=16}}class _l extends gr{constructor(t,n,r,o){super(t,n),this.error=r,this.target=o,this.type=3}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class GE extends gr{constructor(t,n,r,o){super(t,n),this.urlAfterRedirects=r,this.state=o,this.type=4}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class ek extends gr{constructor(t,n,r,o){super(t,n),this.urlAfterRedirects=r,this.state=o,this.type=7}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class tk extends gr{constructor(t,n,r,o,i){super(t,n),this.urlAfterRedirects=r,this.state=o,this.shouldActivate=i,this.type=8}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class nk extends gr{constructor(t,n,r,o){super(t,n),this.urlAfterRedirects=r,this.state=o,this.type=5}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class rk extends gr{constructor(t,n,r,o){super(t,n),this.urlAfterRedirects=r,this.state=o,this.type=6}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class ok{constructor(t){this.route=t,this.type=9}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class ik{constructor(t){this.route=t,this.type=10}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class sk{constructor(t){this.snapshot=t,this.type=11}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class ak{constructor(t){this.snapshot=t,this.type=12}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class ck{constructor(t){this.snapshot=t,this.type=13}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class lk{constructor(t){this.snapshot=t,this.type=14}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class WE{constructor(t,n,r){this.routerEvent=t,this.position=n,this.anchor=r,this.type=15}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}class gh{}class mh{constructor(t){this.url=t}}class uk{constructor(){this.outlet=null,this.route=null,this.injector=null,this.children=new ua,this.attachRef=null}}let ua=(()=>{class e{constructor(){this.contexts=new Map}onChildOutletCreated(n,r){const o=this.getOrCreateContext(n);o.outlet=r,this.contexts.set(n,o)}onChildOutletDestroyed(n){const r=this.getContext(n);r&&(r.outlet=null,r.attachRef=null)}onOutletDeactivated(){const n=this.contexts;return this.contexts=new Map,n}onOutletReAttached(n){this.contexts=n}getOrCreateContext(n){let r=this.getContext(n);return r||(r=new uk,this.contexts.set(n,r)),r}getContext(n){return this.contexts.get(n)||null}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();class KE{constructor(t){this._root=t}get root(){return this._root.value}parent(t){const n=this.pathFromRoot(t);return n.length>1?n[n.length-2]:null}children(t){const n=vh(t,this._root);return n?n.children.map(r=>r.value):[]}firstChild(t){const n=vh(t,this._root);return n&&n.children.length>0?n.children[0].value:null}siblings(t){const n=yh(t,this._root);return n.length<2?[]:n[n.length-2].children.map(o=>o.value).filter(o=>o!==t)}pathFromRoot(t){return yh(t,this._root).map(n=>n.value)}}function vh(e,t){if(e===t.value)return t;for(const n of t.children){const r=vh(e,n);if(r)return r}return null}function yh(e,t){if(e===t.value)return[t];for(const n of t.children){const r=yh(e,n);if(r.length)return r.unshift(t),r}return[]}class Rr{constructor(t,n){this.value=t,this.children=n}toString(){return`TreeNode(${this.value})`}}function $i(e){const t={};return e&&e.children.forEach(n=>t[n.value.outlet]=n),t}class YE extends KE{constructor(t,n){super(t),this.snapshot=n,bh(this,t)}toString(){return this.snapshot.toString()}}function ZE(e,t){const n=function dk(e,t){const a=new Dl([],{},{},"",{},_e,t,null,{});return new XE("",new Rr(a,[]))}(0,t),r=new wt([new ra("",{})]),o=new wt({}),i=new wt({}),a=new wt({}),u=new wt(""),d=new Pi(r,o,a,u,i,_e,t,n.root);return d.snapshot=n.root,new YE(new Rr(d,[]),n)}class Pi{constructor(t,n,r,o,i,a,u,d){this.urlSubject=t,this.paramsSubject=n,this.queryParamsSubject=r,this.fragmentSubject=o,this.dataSubject=i,this.outlet=a,this.component=u,this._futureSnapshot=d,this.title=this.dataSubject?.pipe(Ce(p=>p[na]))??ae(void 0),this.url=t,this.params=n,this.queryParams=r,this.fragment=o,this.data=i}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=this.params.pipe(Ce(t=>Ri(t)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe(Ce(t=>Ri(t)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function QE(e,t="emptyOnly"){const n=e.pathFromRoot;let r=0;if("always"!==t)for(r=n.length-1;r>=1;){const o=n[r],i=n[r-1];if(o.routeConfig&&""===o.routeConfig.path)r--;else{if(i.component)break;r--}}return function pk(e){return e.reduce((t,n)=>({params:{...t.params,...n.params},data:{...t.data,...n.data},resolve:{...n.data,...t.resolve,...n.routeConfig?.data,...n._resolvedData}}),{params:{},data:{},resolve:{}})}(n.slice(r))}class Dl{get title(){return this.data?.[na]}constructor(t,n,r,o,i,a,u,d,p){this.url=t,this.params=n,this.queryParams=r,this.fragment=o,this.data=i,this.outlet=a,this.component=u,this.routeConfig=d,this._resolve=p}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=Ri(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Ri(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(r=>r.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class XE extends KE{constructor(t,n){super(n),this.url=t,bh(this,n)}toString(){return JE(this._root)}}function bh(e,t){t.value._routerState=e,t.children.forEach(n=>bh(e,n))}function JE(e){const t=e.children.length>0?` { ${e.children.map(JE).join(", ")} } `:"";return`${e.value}${t}`}function wh(e){if(e.snapshot){const t=e.snapshot,n=e._futureSnapshot;e.snapshot=n,fr(t.queryParams,n.queryParams)||e.queryParamsSubject.next(n.queryParams),t.fragment!==n.fragment&&e.fragmentSubject.next(n.fragment),fr(t.params,n.params)||e.paramsSubject.next(n.params),function NO(e,t){if(e.length!==t.length)return!1;for(let n=0;nfr(n.parameters,t[r].parameters))}(e.url,t.url);return n&&!(!e.parent!=!t.parent)&&(!e.parent||Eh(e.parent,t.parent))}let _h=(()=>{class e{constructor(){this.activated=null,this._activatedRoute=null,this.name=_e,this.activateEvents=new en,this.deactivateEvents=new en,this.attachEvents=new en,this.detachEvents=new en,this.parentContexts=X(ua),this.location=X(Gn),this.changeDetector=X(Cp),this.environmentInjector=X(An),this.inputBinder=X(Cl,{optional:!0}),this.supportsBindingToComponentInputs=!0}get activatedComponentRef(){return this.activated}ngOnChanges(n){if(n.name){const{firstChange:r,previousValue:o}=n.name;if(r)return;this.isTrackedInParentContexts(o)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(o)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name),this.inputBinder?.unsubscribeFromRouteData(this)}isTrackedInParentContexts(n){return this.parentContexts.getContext(n)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;const n=this.parentContexts.getContext(this.name);n?.route&&(n.attachRef?this.attach(n.attachRef,n.route):this.activateWith(n.route,n.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new B(4012,!1);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new B(4012,!1);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new B(4012,!1);this.location.detach();const n=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(n.instance),n}attach(n,r){this.activated=n,this._activatedRoute=r,this.location.insert(n.hostView),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.attachEvents.emit(n.instance)}deactivate(){if(this.activated){const n=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(n)}}activateWith(n,r){if(this.isActivated)throw new B(4013,!1);this._activatedRoute=n;const o=this.location,a=n.snapshot.component,u=this.parentContexts.getOrCreateContext(this.name).children,d=new hk(n,u,o.injector);this.activated=o.createComponent(a,{index:o.length,injector:d,environmentInjector:r??this.environmentInjector}),this.changeDetector.markForCheck(),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.activateEvents.emit(this.activated.instance)}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275dir=Kt({type:e,selectors:[["router-outlet"]],inputs:{name:"name"},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],standalone:!0,features:[lo]})}return e})();class hk{constructor(t,n,r){this.route=t,this.childContexts=n,this.parent=r}get(t,n){return t===Pi?this.route:t===ua?this.childContexts:this.parent.get(t,n)}}const Cl=new te("");let e1=(()=>{class e{constructor(){this.outletDataSubscriptions=new Map}bindActivatedRouteToOutletComponent(n){this.unsubscribeFromRouteData(n),this.subscribeToRouteData(n)}unsubscribeFromRouteData(n){this.outletDataSubscriptions.get(n)?.unsubscribe(),this.outletDataSubscriptions.delete(n)}subscribeToRouteData(n){const{activatedRoute:r}=n,o=ih([r.queryParams,r.params,r.data]).pipe(Sn(([i,a,u],d)=>(u={...i,...a,...u},0===d?ae(u):Promise.resolve(u)))).subscribe(i=>{if(!n.isActivated||!n.activatedComponentRef||n.activatedRoute!==r||null===r.component)return void this.unsubscribeFromRouteData(n);const a=function OM(e){const t=ke(e);if(!t)return null;const n=new ks(t);return{get selector(){return n.selector},get type(){return n.componentType},get inputs(){return n.inputs},get outputs(){return n.outputs},get ngContentSelectors(){return n.ngContentSelectors},get isStandalone(){return t.standalone},get isSignal(){return t.signals}}}(r.component);if(a)for(const{templateName:u}of a.inputs)n.activatedComponentRef.setInput(u,i[u]);else this.unsubscribeFromRouteData(n)});this.outletDataSubscriptions.set(n,o)}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})();function da(e,t,n){if(n&&e.shouldReuseRoute(t.value,n.value.snapshot)){const r=n.value;r._futureSnapshot=t.value;const o=function gk(e,t,n){return t.children.map(r=>{for(const o of n.children)if(e.shouldReuseRoute(r.value,o.value.snapshot))return da(e,r,o);return da(e,r)})}(e,t,n);return new Rr(r,o)}{if(e.shouldAttach(t.value)){const i=e.retrieve(t.value);if(null!==i){const a=i.route;return a.value._futureSnapshot=t.value,a.children=t.children.map(u=>da(e,u)),a}}const r=function mk(e){return new Pi(new wt(e.url),new wt(e.params),new wt(e.queryParams),new wt(e.fragment),new wt(e.data),e.outlet,e.component,e)}(t.value),o=t.children.map(i=>da(e,i));return new Rr(r,o)}}const Dh="ngNavigationCancelingError";function t1(e,t){const{redirectTo:n,navigationBehaviorOptions:r}=Co(t)?{redirectTo:t,navigationBehaviorOptions:void 0}:t,o=n1(!1,0,t);return o.url=n,o.navigationBehaviorOptions=r,o}function n1(e,t,n){const r=new Error("NavigationCancelingError: "+(e||""));return r[Dh]=!0,r.cancellationCode=t,n&&(r.url=n),r}function r1(e){return e&&e[Dh]}let o1=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["ng-component"]],standalone:!0,features:[cb],decls:1,vars:0,template:function(r,o){1&r&&v(0,"router-outlet")},dependencies:[_h],encapsulation:2})}return e})();function Ch(e){const t=e.children&&e.children.map(Ch),n=t?{...e,children:t}:{...e};return!n.component&&!n.loadComponent&&(t||n.loadChildren)&&n.outlet&&n.outlet!==_e&&(n.component=o1),n}function Yn(e){return e.outlet||_e}function pa(e){if(!e)return null;if(e.routeConfig?._injector)return e.routeConfig._injector;for(let t=e.parent;t;t=t.parent){const n=t.routeConfig;if(n?._loadedInjector)return n._loadedInjector;if(n?._injector)return n._injector}return null}class Ck{constructor(t,n,r,o,i){this.routeReuseStrategy=t,this.futureState=n,this.currState=r,this.forwardEvent=o,this.inputBindingEnabled=i}activate(t){const n=this.futureState._root,r=this.currState?this.currState._root:null;this.deactivateChildRoutes(n,r,t),wh(this.futureState.root),this.activateChildRoutes(n,r,t)}deactivateChildRoutes(t,n,r){const o=$i(n);t.children.forEach(i=>{const a=i.value.outlet;this.deactivateRoutes(i,o[a],r),delete o[a]}),Object.values(o).forEach(i=>{this.deactivateRouteAndItsChildren(i,r)})}deactivateRoutes(t,n,r){const o=t.value,i=n?n.value:null;if(o===i)if(o.component){const a=r.getContext(o.outlet);a&&this.deactivateChildRoutes(t,n,a.children)}else this.deactivateChildRoutes(t,n,r);else i&&this.deactivateRouteAndItsChildren(n,r)}deactivateRouteAndItsChildren(t,n){t.value.component&&this.routeReuseStrategy.shouldDetach(t.value.snapshot)?this.detachAndStoreRouteSubtree(t,n):this.deactivateRouteAndOutlet(t,n)}detachAndStoreRouteSubtree(t,n){const r=n.getContext(t.value.outlet),o=r&&t.value.component?r.children:n,i=$i(t);for(const a of Object.keys(i))this.deactivateRouteAndItsChildren(i[a],o);if(r&&r.outlet){const a=r.outlet.detach(),u=r.children.onOutletDeactivated();this.routeReuseStrategy.store(t.value.snapshot,{componentRef:a,route:t,contexts:u})}}deactivateRouteAndOutlet(t,n){const r=n.getContext(t.value.outlet),o=r&&t.value.component?r.children:n,i=$i(t);for(const a of Object.keys(i))this.deactivateRouteAndItsChildren(i[a],o);r&&(r.outlet&&(r.outlet.deactivate(),r.children.onOutletDeactivated()),r.attachRef=null,r.route=null)}activateChildRoutes(t,n,r){const o=$i(n);t.children.forEach(i=>{this.activateRoutes(i,o[i.value.outlet],r),this.forwardEvent(new lk(i.value.snapshot))}),t.children.length&&this.forwardEvent(new ak(t.value.snapshot))}activateRoutes(t,n,r){const o=t.value,i=n?n.value:null;if(wh(o),o===i)if(o.component){const a=r.getOrCreateContext(o.outlet);this.activateChildRoutes(t,n,a.children)}else this.activateChildRoutes(t,n,r);else if(o.component){const a=r.getOrCreateContext(o.outlet);if(this.routeReuseStrategy.shouldAttach(o.snapshot)){const u=this.routeReuseStrategy.retrieve(o.snapshot);this.routeReuseStrategy.store(o.snapshot,null),a.children.onOutletReAttached(u.contexts),a.attachRef=u.componentRef,a.route=u.route.value,a.outlet&&a.outlet.attach(u.componentRef,u.route.value),wh(u.route.value),this.activateChildRoutes(t,null,a.children)}else{const u=pa(o.snapshot);a.attachRef=null,a.route=o,a.injector=u,a.outlet&&a.outlet.activateWith(o,a.injector),this.activateChildRoutes(t,null,a.children)}}else this.activateChildRoutes(t,null,r)}}class i1{constructor(t){this.path=t,this.route=this.path[this.path.length-1]}}class Sl{constructor(t,n){this.component=t,this.route=n}}function Sk(e,t,n){const r=e._root;return ha(r,t?t._root:null,n,[r.value])}function Li(e,t){const n=Symbol(),r=t.get(e,n);return r===n?"function"!=typeof e||function R1(e){return null!==Sa(e)}(e)?t.get(e):e:r}function ha(e,t,n,r,o={canDeactivateChecks:[],canActivateChecks:[]}){const i=$i(t);return e.children.forEach(a=>{(function Tk(e,t,n,r,o={canDeactivateChecks:[],canActivateChecks:[]}){const i=e.value,a=t?t.value:null,u=n?n.getContext(e.value.outlet):null;if(a&&i.routeConfig===a.routeConfig){const d=function Nk(e,t,n){if("function"==typeof n)return n(e,t);switch(n){case"pathParamsChange":return!Do(e.url,t.url);case"pathParamsOrQueryParamsChange":return!Do(e.url,t.url)||!fr(e.queryParams,t.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!Eh(e,t)||!fr(e.queryParams,t.queryParams);default:return!Eh(e,t)}}(a,i,i.routeConfig.runGuardsAndResolvers);d?o.canActivateChecks.push(new i1(r)):(i.data=a.data,i._resolvedData=a._resolvedData),ha(e,t,i.component?u?u.children:null:n,r,o),d&&u&&u.outlet&&u.outlet.isActivated&&o.canDeactivateChecks.push(new Sl(u.outlet.component,a))}else a&&fa(t,u,o),o.canActivateChecks.push(new i1(r)),ha(e,null,i.component?u?u.children:null:n,r,o)})(a,i[a.value.outlet],n,r.concat([a.value]),o),delete i[a.value.outlet]}),Object.entries(i).forEach(([a,u])=>fa(u,n.getContext(a),o)),o}function fa(e,t,n){const r=$i(e),o=e.value;Object.entries(r).forEach(([i,a])=>{fa(a,o.component?t?t.children.getContext(i):null:t,n)}),n.canDeactivateChecks.push(new Sl(o.component&&t&&t.outlet&&t.outlet.isActivated?t.outlet.component:null,o))}function ga(e){return"function"==typeof e}function s1(e){return e instanceof hl||"EmptyError"===e?.name}const Il=Symbol("INITIAL_VALUE");function Fi(){return Sn(e=>ih(e.map(t=>t.pipe(xi(1),function bO(...e){const t=ro(e);return Ne((n,r)=>{(t?sh(e,n,t):sh(e,n)).subscribe(r)})}(Il)))).pipe(Ce(t=>{for(const n of t)if(!0!==n){if(n===Il)return Il;if(!1===n||n instanceof Oi)return n}return!0}),Qr(t=>t!==Il),xi(1)))}function a1(e){return function Zn(...e){return Lt(e)}(Ht(t=>{if(Co(t))throw t1(0,t)}),Ce(t=>!0===t))}class Tl{constructor(t){this.segmentGroup=t||null}}class c1{constructor(t){this.urlTree=t}}function Bi(e){return ea(new Tl(e))}function l1(e){return ea(new c1(e))}class Kk{constructor(t,n){this.urlSerializer=t,this.urlTree=n}noMatchError(t){return new B(4002,!1)}lineralizeSegments(t,n){let r=[],o=n.root;for(;;){if(r=r.concat(o.segments),0===o.numberOfChildren)return ae(r);if(o.numberOfChildren>1||!o.children[_e])return ea(new B(4e3,!1));o=o.children[_e]}}applyRedirectCommands(t,n,r){return this.applyRedirectCreateUrlTree(n,this.urlSerializer.parse(n),t,r)}applyRedirectCreateUrlTree(t,n,r,o){const i=this.createSegmentGroup(t,n.root,r,o);return new Oi(i,this.createQueryParams(n.queryParams,this.urlTree.queryParams),n.fragment)}createQueryParams(t,n){const r={};return Object.entries(t).forEach(([o,i])=>{if("string"==typeof i&&i.startsWith(":")){const u=i.substring(1);r[o]=n[u]}else r[o]=i}),r}createSegmentGroup(t,n,r,o){const i=this.createSegments(t,n.segments,r,o);let a={};return Object.entries(n.children).forEach(([u,d])=>{a[u]=this.createSegmentGroup(t,d,r,o)}),new Ye(i,a)}createSegments(t,n,r,o){return n.map(i=>i.path.startsWith(":")?this.findPosParam(t,i,o):this.findOrReturn(i,r))}findPosParam(t,n,r){const o=r[n.path.substring(1)];if(!o)throw new B(4001,!1);return o}findOrReturn(t,n){let r=0;for(const o of n){if(o.path===t.path)return n.splice(r),o;r++}return t}}const Sh={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function Yk(e,t,n,r,o){const i=Ih(e,t,n);return i.matched?(r=function yk(e,t){return e.providers&&!e._injector&&(e._injector=ep(e.providers,t,`Route: ${e.path}`)),e._injector??t}(t,r),function qk(e,t,n,r){const o=t.canMatch;return o&&0!==o.length?ae(o.map(a=>{const u=Li(a,e);return Xr(function kk(e){return e&&ga(e.canMatch)}(u)?u.canMatch(t,n):e.runInContext(()=>u(t,n)))})).pipe(Fi(),a1()):ae(!0)}(r,t,n).pipe(Ce(a=>!0===a?i:{...Sh}))):ae(i)}function Ih(e,t,n){if(""===t.path)return"full"===t.pathMatch&&(e.hasChildren()||n.length>0)?{...Sh}:{matched:!0,consumedSegments:[],remainingSegments:n,parameters:{},positionalParamSegments:{}};const o=(t.matcher||TO)(n,e,t);if(!o)return{...Sh};const i={};Object.entries(o.posParams??{}).forEach(([u,d])=>{i[u]=d.path});const a=o.consumed.length>0?{...i,...o.consumed[o.consumed.length-1].parameters}:i;return{matched:!0,consumedSegments:o.consumed,remainingSegments:n.slice(o.consumed.length),parameters:a,positionalParamSegments:o.posParams??{}}}function u1(e,t,n,r){return n.length>0&&function Xk(e,t,n){return n.some(r=>Nl(e,t,r)&&Yn(r)!==_e)}(e,n,r)?{segmentGroup:new Ye(t,Qk(r,new Ye(n,e.children))),slicedSegments:[]}:0===n.length&&function Jk(e,t,n){return n.some(r=>Nl(e,t,r))}(e,n,r)?{segmentGroup:new Ye(e.segments,Zk(e,0,n,r,e.children)),slicedSegments:n}:{segmentGroup:new Ye(e.segments,e.children),slicedSegments:n}}function Zk(e,t,n,r,o){const i={};for(const a of r)if(Nl(e,n,a)&&!o[Yn(a)]){const u=new Ye([],{});i[Yn(a)]=u}return{...o,...i}}function Qk(e,t){const n={};n[_e]=t;for(const r of e)if(""===r.path&&Yn(r)!==_e){const o=new Ye([],{});n[Yn(r)]=o}return n}function Nl(e,t,n){return(!(e.hasChildren()||t.length>0)||"full"!==n.pathMatch)&&""===n.path}class r2{constructor(t,n,r,o,i,a,u){this.injector=t,this.configLoader=n,this.rootComponentType=r,this.config=o,this.urlTree=i,this.paramsInheritanceStrategy=a,this.urlSerializer=u,this.allowRedirects=!0,this.applyRedirects=new Kk(this.urlSerializer,this.urlTree)}noMatchError(t){return new B(4002,!1)}recognize(){const t=u1(this.urlTree.root,[],[],this.config).segmentGroup;return this.processSegmentGroup(this.injector,this.config,t,_e).pipe(_o(n=>{if(n instanceof c1)return this.allowRedirects=!1,this.urlTree=n.urlTree,this.match(n.urlTree);throw n instanceof Tl?this.noMatchError(n):n}),Ce(n=>{const r=new Dl([],Object.freeze({}),Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,{},_e,this.rootComponentType,null,{}),o=new Rr(r,n),i=new XE("",o),a=function WO(e,t,n=null,r=null){return UE(BE(e),t,n,r)}(r,[],this.urlTree.queryParams,this.urlTree.fragment);return a.queryParams=this.urlTree.queryParams,i.url=this.urlSerializer.serialize(a),this.inheritParamsAndData(i._root),{state:i,tree:a}}))}match(t){return this.processSegmentGroup(this.injector,this.config,t.root,_e).pipe(_o(r=>{throw r instanceof Tl?this.noMatchError(r):r}))}inheritParamsAndData(t){const n=t.value,r=QE(n,this.paramsInheritanceStrategy);n.params=Object.freeze(r.params),n.data=Object.freeze(r.data),t.children.forEach(o=>this.inheritParamsAndData(o))}processSegmentGroup(t,n,r,o){return 0===r.segments.length&&r.hasChildren()?this.processChildren(t,n,r):this.processSegment(t,n,r,r.segments,o,!0)}processChildren(t,n,r){const o=[];for(const i of Object.keys(r.children))"primary"===i?o.unshift(i):o.push(i);return ft(o).pipe(ta(i=>{const a=r.children[i],u=function _k(e,t){const n=e.filter(r=>Yn(r)===t);return n.push(...e.filter(r=>Yn(r)!==t)),n}(n,i);return this.processSegmentGroup(t,u,a,i)}),function _O(e,t){return Ne(function EO(e,t,n,r,o){return(i,a)=>{let u=n,d=t,p=0;i.subscribe(ve(a,h=>{const f=p++;d=u?e(d,h,f):(u=!0,h),r&&a.next(d)},o&&(()=>{u&&a.next(d),a.complete()})))}}(e,t,arguments.length>=2,!0))}((i,a)=>(i.push(...a),i)),fl(null),function DO(e,t){const n=arguments.length>=2;return r=>r.pipe(e?Qr((o,i)=>e(o,i,r)):Ge,ch(1),n?fl(t):IE(()=>new hl))}(),pt(i=>{if(null===i)return Bi(r);const a=d1(i);return function o2(e){e.sort((t,n)=>t.value.outlet===_e?-1:n.value.outlet===_e?1:t.value.outlet.localeCompare(n.value.outlet))}(a),ae(a)}))}processSegment(t,n,r,o,i,a){return ft(n).pipe(ta(u=>this.processSegmentAgainstRoute(u._injector??t,n,u,r,o,i,a).pipe(_o(d=>{if(d instanceof Tl)return ae(null);throw d}))),Eo(u=>!!u),_o(u=>{if(s1(u))return function t2(e,t,n){return 0===t.length&&!e.children[n]}(r,o,i)?ae([]):Bi(r);throw u}))}processSegmentAgainstRoute(t,n,r,o,i,a,u){return function e2(e,t,n,r){return!!(Yn(e)===r||r!==_e&&Nl(t,n,e))&&("**"===e.path||Ih(t,e,n).matched)}(r,o,i,a)?void 0===r.redirectTo?this.matchSegmentAgainstRoute(t,o,r,i,a,u):u&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(t,o,n,r,i,a):Bi(o):Bi(o)}expandSegmentAgainstRouteUsingRedirect(t,n,r,o,i,a){return"**"===o.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(t,r,o,a):this.expandRegularSegmentAgainstRouteUsingRedirect(t,n,r,o,i,a)}expandWildCardWithParamsAgainstRouteUsingRedirect(t,n,r,o){const i=this.applyRedirects.applyRedirectCommands([],r.redirectTo,{});return r.redirectTo.startsWith("/")?l1(i):this.applyRedirects.lineralizeSegments(r,i).pipe(pt(a=>{const u=new Ye(a,{});return this.processSegment(t,n,u,a,o,!1)}))}expandRegularSegmentAgainstRouteUsingRedirect(t,n,r,o,i,a){const{matched:u,consumedSegments:d,remainingSegments:p,positionalParamSegments:h}=Ih(n,o,i);if(!u)return Bi(n);const f=this.applyRedirects.applyRedirectCommands(d,o.redirectTo,h);return o.redirectTo.startsWith("/")?l1(f):this.applyRedirects.lineralizeSegments(o,f).pipe(pt(m=>this.processSegment(t,r,n,m.concat(p),a,!1)))}matchSegmentAgainstRoute(t,n,r,o,i,a){let u;if("**"===r.path){const d=o.length>0?NE(o).parameters:{};u=ae({snapshot:new Dl(o,d,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,p1(r),Yn(r),r.component??r._loadedComponent??null,r,h1(r)),consumedSegments:[],remainingSegments:[]}),n.children={}}else u=Yk(n,r,o,t).pipe(Ce(({matched:d,consumedSegments:p,remainingSegments:h,parameters:f})=>d?{snapshot:new Dl(p,f,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,p1(r),Yn(r),r.component??r._loadedComponent??null,r,h1(r)),consumedSegments:p,remainingSegments:h}:null));return u.pipe(Sn(d=>null===d?Bi(n):this.getChildConfig(t=r._injector??t,r,o).pipe(Sn(({routes:p})=>{const h=r._loadedInjector??t,{snapshot:f,consumedSegments:m,remainingSegments:b}=d,{segmentGroup:E,slicedSegments:_}=u1(n,m,b,p);if(0===_.length&&E.hasChildren())return this.processChildren(h,p,E).pipe(Ce(P=>null===P?null:[new Rr(f,P)]));if(0===p.length&&0===_.length)return ae([new Rr(f,[])]);const O=Yn(r)===i;return this.processSegment(h,p,E,_,O?_e:i,!0).pipe(Ce(P=>[new Rr(f,P)]))}))))}getChildConfig(t,n,r){return n.children?ae({routes:n.children,injector:t}):n.loadChildren?void 0!==n._loadedRoutes?ae({routes:n._loadedRoutes,injector:n._loadedInjector}):function zk(e,t,n,r){const o=t.canLoad;return void 0===o||0===o.length?ae(!0):ae(o.map(a=>{const u=Li(a,e);return Xr(function Mk(e){return e&&ga(e.canLoad)}(u)?u.canLoad(t,n):e.runInContext(()=>u(t,n)))})).pipe(Fi(),a1())}(t,n,r).pipe(pt(o=>o?this.configLoader.loadChildren(t,n).pipe(Ht(i=>{n._loadedRoutes=i.routes,n._loadedInjector=i.injector})):function Wk(e){return ea(n1(!1,3))}())):ae({routes:[],injector:t})}}function i2(e){const t=e.value.routeConfig;return t&&""===t.path}function d1(e){const t=[],n=new Set;for(const r of e){if(!i2(r)){t.push(r);continue}const o=t.find(i=>r.value.routeConfig===i.value.routeConfig);void 0!==o?(o.children.push(...r.children),n.add(o)):t.push(r)}for(const r of n){const o=d1(r.children);t.push(new Rr(r.value,o))}return t.filter(r=>!n.has(r))}function p1(e){return e.data||{}}function h1(e){return e.resolve||{}}function f1(e){return"string"==typeof e.title||null===e.title}function Th(e){return Sn(t=>{const n=e(t);return n?ft(n).pipe(Ce(()=>t)):ae(t)})}const Ui=new te("ROUTES");let Nh=(()=>{class e{constructor(){this.componentLoaders=new WeakMap,this.childrenLoaders=new WeakMap,this.compiler=X(tw)}loadComponent(n){if(this.componentLoaders.get(n))return this.componentLoaders.get(n);if(n._loadedComponent)return ae(n._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(n);const r=Xr(n.loadComponent()).pipe(Ce(g1),Ht(i=>{this.onLoadEndListener&&this.onLoadEndListener(n),n._loadedComponent=i}),lh(()=>{this.componentLoaders.delete(n)})),o=new SE(r,()=>new It).pipe(ah());return this.componentLoaders.set(n,o),o}loadChildren(n,r){if(this.childrenLoaders.get(r))return this.childrenLoaders.get(r);if(r._loadedRoutes)return ae({routes:r._loadedRoutes,injector:r._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(r);const i=function p2(e,t,n,r){return Xr(e.loadChildren()).pipe(Ce(g1),pt(o=>o instanceof sb||Array.isArray(o)?ae(o):ft(t.compileModuleAsync(o))),Ce(o=>{r&&r(e);let i,a,u=!1;return Array.isArray(o)?(a=o,!0):(i=o.create(n).injector,a=i.get(Ui,[],{optional:!0,self:!0}).flat()),{routes:a.map(Ch),injector:i}}))}(r,this.compiler,n,this.onLoadEndListener).pipe(lh(()=>{this.childrenLoaders.delete(r)})),a=new SE(i,()=>new It).pipe(ah());return this.childrenLoaders.set(r,a),a}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function g1(e){return function h2(e){return e&&"object"==typeof e&&"default"in e}(e)?e.default:e}let Al=(()=>{class e{get hasRequestedNavigation(){return 0!==this.navigationId}constructor(){this.currentNavigation=null,this.currentTransition=null,this.lastSuccessfulNavigation=null,this.events=new It,this.transitionAbortSubject=new It,this.configLoader=X(Nh),this.environmentInjector=X(An),this.urlSerializer=X(oa),this.rootContexts=X(ua),this.inputBindingEnabled=null!==X(Cl,{optional:!0}),this.navigationId=0,this.afterPreactivation=()=>ae(void 0),this.rootComponentType=null,this.configLoader.onLoadEndListener=o=>this.events.next(new ik(o)),this.configLoader.onLoadStartListener=o=>this.events.next(new ok(o))}complete(){this.transitions?.complete()}handleNavigationRequest(n){const r=++this.navigationId;this.transitions?.next({...this.transitions.value,...n,id:r})}setupNavigations(n,r,o){return this.transitions=new wt({id:0,currentUrlTree:r,currentRawUrl:r,currentBrowserUrl:r,extractedUrl:n.urlHandlingStrategy.extract(r),urlAfterRedirects:n.urlHandlingStrategy.extract(r),rawUrl:r,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:ca,restoredState:null,currentSnapshot:o.snapshot,targetSnapshot:null,currentRouterState:o,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.transitions.pipe(Qr(i=>0!==i.id),Ce(i=>({...i,extractedUrl:n.urlHandlingStrategy.extract(i.rawUrl)})),Sn(i=>{this.currentTransition=i;let a=!1,u=!1;return ae(i).pipe(Ht(d=>{this.currentNavigation={id:d.id,initialUrl:d.rawUrl,extractedUrl:d.extractedUrl,trigger:d.source,extras:d.extras,previousNavigation:this.lastSuccessfulNavigation?{...this.lastSuccessfulNavigation,previousNavigation:null}:null}}),Sn(d=>{const p=d.currentBrowserUrl.toString(),h=!n.navigated||d.extractedUrl.toString()!==p||p!==d.currentUrlTree.toString();if(!h&&"reload"!==(d.extras.onSameUrlNavigation??n.onSameUrlNavigation)){const m="";return this.events.next(new ki(d.id,this.urlSerializer.serialize(d.rawUrl),m,0)),d.resolve(null),Cn}if(n.urlHandlingStrategy.shouldProcessUrl(d.rawUrl))return ae(d).pipe(Sn(m=>{const b=this.transitions?.getValue();return this.events.next(new El(m.id,this.urlSerializer.serialize(m.extractedUrl),m.source,m.restoredState)),b!==this.transitions?.getValue()?Cn:Promise.resolve(m)}),function s2(e,t,n,r,o,i){return pt(a=>function n2(e,t,n,r,o,i,a="emptyOnly"){return new r2(e,t,n,r,o,a,i).recognize()}(e,t,n,r,a.extractedUrl,o,i).pipe(Ce(({state:u,tree:d})=>({...a,targetSnapshot:u,urlAfterRedirects:d}))))}(this.environmentInjector,this.configLoader,this.rootComponentType,n.config,this.urlSerializer,n.paramsInheritanceStrategy),Ht(m=>{i.targetSnapshot=m.targetSnapshot,i.urlAfterRedirects=m.urlAfterRedirects,this.currentNavigation={...this.currentNavigation,finalUrl:m.urlAfterRedirects};const b=new GE(m.id,this.urlSerializer.serialize(m.extractedUrl),this.urlSerializer.serialize(m.urlAfterRedirects),m.targetSnapshot);this.events.next(b)}));if(h&&n.urlHandlingStrategy.shouldProcessUrl(d.currentRawUrl)){const{id:m,extractedUrl:b,source:E,restoredState:_,extras:O}=d,P=new El(m,this.urlSerializer.serialize(b),E,_);this.events.next(P);const D=ZE(0,this.rootComponentType).snapshot;return this.currentTransition=i={...d,targetSnapshot:D,urlAfterRedirects:b,extras:{...O,skipLocationChange:!1,replaceUrl:!1}},ae(i)}{const m="";return this.events.next(new ki(d.id,this.urlSerializer.serialize(d.extractedUrl),m,1)),d.resolve(null),Cn}}),Ht(d=>{const p=new ek(d.id,this.urlSerializer.serialize(d.extractedUrl),this.urlSerializer.serialize(d.urlAfterRedirects),d.targetSnapshot);this.events.next(p)}),Ce(d=>(this.currentTransition=i={...d,guards:Sk(d.targetSnapshot,d.currentSnapshot,this.rootContexts)},i)),function Pk(e,t){return pt(n=>{const{targetSnapshot:r,currentSnapshot:o,guards:{canActivateChecks:i,canDeactivateChecks:a}}=n;return 0===a.length&&0===i.length?ae({...n,guardsResult:!0}):function Lk(e,t,n,r){return ft(e).pipe(pt(o=>function Vk(e,t,n,r,o){const i=t&&t.routeConfig?t.routeConfig.canDeactivate:null;return i&&0!==i.length?ae(i.map(u=>{const d=pa(t)??o,p=Li(u,d);return Xr(function Ok(e){return e&&ga(e.canDeactivate)}(p)?p.canDeactivate(e,t,n,r):d.runInContext(()=>p(e,t,n,r))).pipe(Eo())})).pipe(Fi()):ae(!0)}(o.component,o.route,n,t,r)),Eo(o=>!0!==o,!0))}(a,r,o,e).pipe(pt(u=>u&&function Ak(e){return"boolean"==typeof e}(u)?function Fk(e,t,n,r){return ft(t).pipe(ta(o=>sh(function Uk(e,t){return null!==e&&t&&t(new sk(e)),ae(!0)}(o.route.parent,r),function Bk(e,t){return null!==e&&t&&t(new ck(e)),ae(!0)}(o.route,r),function jk(e,t,n){const r=t[t.length-1],i=t.slice(0,t.length-1).reverse().map(a=>function Ik(e){const t=e.routeConfig?e.routeConfig.canActivateChild:null;return t&&0!==t.length?{node:e,guards:t}:null}(a)).filter(a=>null!==a).map(a=>CE(()=>ae(a.guards.map(d=>{const p=pa(a.node)??n,h=Li(d,p);return Xr(function Rk(e){return e&&ga(e.canActivateChild)}(h)?h.canActivateChild(r,e):p.runInContext(()=>h(r,e))).pipe(Eo())})).pipe(Fi())));return ae(i).pipe(Fi())}(e,o.path,n),function Hk(e,t,n){const r=t.routeConfig?t.routeConfig.canActivate:null;if(!r||0===r.length)return ae(!0);const o=r.map(i=>CE(()=>{const a=pa(t)??n,u=Li(i,a);return Xr(function xk(e){return e&&ga(e.canActivate)}(u)?u.canActivate(t,e):a.runInContext(()=>u(t,e))).pipe(Eo())}));return ae(o).pipe(Fi())}(e,o.route,n))),Eo(o=>!0!==o,!0))}(r,i,e,t):ae(u)),Ce(u=>({...n,guardsResult:u})))})}(this.environmentInjector,d=>this.events.next(d)),Ht(d=>{if(i.guardsResult=d.guardsResult,Co(d.guardsResult))throw t1(0,d.guardsResult);const p=new tk(d.id,this.urlSerializer.serialize(d.extractedUrl),this.urlSerializer.serialize(d.urlAfterRedirects),d.targetSnapshot,!!d.guardsResult);this.events.next(p)}),Qr(d=>!!d.guardsResult||(this.cancelNavigationTransition(d,"",3),!1)),Th(d=>{if(d.guards.canActivateChecks.length)return ae(d).pipe(Ht(p=>{const h=new nk(p.id,this.urlSerializer.serialize(p.extractedUrl),this.urlSerializer.serialize(p.urlAfterRedirects),p.targetSnapshot);this.events.next(h)}),Sn(p=>{let h=!1;return ae(p).pipe(function a2(e,t){return pt(n=>{const{targetSnapshot:r,guards:{canActivateChecks:o}}=n;if(!o.length)return ae(n);let i=0;return ft(o).pipe(ta(a=>function c2(e,t,n,r){const o=e.routeConfig,i=e._resolve;return void 0!==o?.title&&!f1(o)&&(i[na]=o.title),function l2(e,t,n,r){const o=function u2(e){return[...Object.keys(e),...Object.getOwnPropertySymbols(e)]}(e);if(0===o.length)return ae({});const i={};return ft(o).pipe(pt(a=>function d2(e,t,n,r){const o=pa(t)??r,i=Li(e,o);return Xr(i.resolve?i.resolve(t,n):o.runInContext(()=>i(t,n)))}(e[a],t,n,r).pipe(Eo(),Ht(u=>{i[a]=u}))),ch(1),function CO(e){return Ce(()=>e)}(i),_o(a=>s1(a)?Cn:ea(a)))}(i,e,t,r).pipe(Ce(a=>(e._resolvedData=a,e.data=QE(e,n).resolve,o&&f1(o)&&(e.data[na]=o.title),null)))}(a.route,r,e,t)),Ht(()=>i++),ch(1),pt(a=>i===o.length?ae(n):Cn))})}(n.paramsInheritanceStrategy,this.environmentInjector),Ht({next:()=>h=!0,complete:()=>{h||this.cancelNavigationTransition(p,"",2)}}))}),Ht(p=>{const h=new rk(p.id,this.urlSerializer.serialize(p.extractedUrl),this.urlSerializer.serialize(p.urlAfterRedirects),p.targetSnapshot);this.events.next(h)}))}),Th(d=>{const p=h=>{const f=[];h.routeConfig?.loadComponent&&!h.routeConfig._loadedComponent&&f.push(this.configLoader.loadComponent(h.routeConfig).pipe(Ht(m=>{h.component=m}),Ce(()=>{})));for(const m of h.children)f.push(...p(m));return f};return ih(p(d.targetSnapshot.root)).pipe(fl(),xi(1))}),Th(()=>this.afterPreactivation()),Ce(d=>{const p=function fk(e,t,n){const r=da(e,t._root,n?n._root:void 0);return new YE(r,t)}(n.routeReuseStrategy,d.targetSnapshot,d.currentRouterState);return this.currentTransition=i={...d,targetRouterState:p},i}),Ht(()=>{this.events.next(new gh)}),((e,t,n,r)=>Ce(o=>(new Ck(t,o.targetRouterState,o.currentRouterState,n,r).activate(e),o)))(this.rootContexts,n.routeReuseStrategy,d=>this.events.next(d),this.inputBindingEnabled),xi(1),Ht({next:d=>{a=!0,this.lastSuccessfulNavigation=this.currentNavigation,this.events.next(new Jr(d.id,this.urlSerializer.serialize(d.extractedUrl),this.urlSerializer.serialize(d.urlAfterRedirects))),n.titleStrategy?.updateTitle(d.targetRouterState.snapshot),d.resolve(!0)},complete:()=>{a=!0}}),function SO(e){return Ne((t,n)=>{Ue(e).subscribe(ve(n,()=>n.complete(),H)),!n.closed&&t.subscribe(n)})}(this.transitionAbortSubject.pipe(Ht(d=>{throw d}))),lh(()=>{a||u||this.cancelNavigationTransition(i,"",1),this.currentNavigation?.id===i.id&&(this.currentNavigation=null)}),_o(d=>{if(u=!0,r1(d))this.events.next(new la(i.id,this.urlSerializer.serialize(i.extractedUrl),d.message,d.cancellationCode)),function vk(e){return r1(e)&&Co(e.url)}(d)?this.events.next(new mh(d.url)):i.resolve(!1);else{this.events.next(new _l(i.id,this.urlSerializer.serialize(i.extractedUrl),d,i.targetSnapshot??void 0));try{i.resolve(n.errorHandler(d))}catch(p){i.reject(p)}}return Cn}))}))}cancelNavigationTransition(n,r,o){const i=new la(n.id,this.urlSerializer.serialize(n.extractedUrl),r,o);this.events.next(i),n.resolve(!1)}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function m1(e){return e!==ca}let v1=(()=>{class e{buildTitle(n){let r,o=n.root;for(;void 0!==o;)r=this.getResolvedTitleForRoute(o)??r,o=o.children.find(i=>i.outlet===_e);return r}getResolvedTitleForRoute(n){return n.data[na]}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:function(){return X(f2)},providedIn:"root"})}return e})(),f2=(()=>{class e extends v1{constructor(n){super(),this.title=n}updateTitle(n){const r=this.buildTitle(n);void 0!==r&&this.title.setTitle(r)}static#e=this.\u0275fac=function(r){return new(r||e)(ie(bE))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),g2=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:function(){return X(v2)},providedIn:"root"})}return e})();class m2{shouldDetach(t){return!1}store(t,n){}shouldAttach(t){return!1}retrieve(t){return null}shouldReuseRoute(t,n){return t.routeConfig===n.routeConfig}}let v2=(()=>{class e extends m2{static#e=this.\u0275fac=function(){let n;return function(o){return(n||(n=function rg(e){return yr(()=>{const t=e.prototype.constructor,n=t[br]||Eu(t),r=Object.prototype;let o=Object.getPrototypeOf(e.prototype).constructor;for(;o&&o!==r;){const i=o[br]||Eu(o);if(i&&i!==n)return i;o=Object.getPrototypeOf(o)}return i=>new i})}(e)))(o||e)}}();static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();const Ml=new te("",{providedIn:"root",factory:()=>({})});let y2=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:function(){return X(b2)},providedIn:"root"})}return e})(),b2=(()=>{class e{shouldProcessUrl(n){return!0}extract(n){return n}merge(n,r){return n}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var ma=function(e){return e[e.COMPLETE=0]="COMPLETE",e[e.FAILED=1]="FAILED",e[e.REDIRECTING=2]="REDIRECTING",e}(ma||{});function y1(e,t){e.events.pipe(Qr(n=>n instanceof Jr||n instanceof la||n instanceof _l||n instanceof ki),Ce(n=>n instanceof Jr||n instanceof ki?ma.COMPLETE:n instanceof la&&(0===n.code||1===n.code)?ma.REDIRECTING:ma.FAILED),Qr(n=>n!==ma.REDIRECTING),xi(1)).subscribe(()=>{t()})}function w2(e){throw e}function E2(e,t,n){return t.parse("/")}const _2={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},D2={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"};let $n=(()=>{class e{get navigationId(){return this.navigationTransitions.navigationId}get browserPageId(){return"computed"!==this.canceledNavigationResolution?this.currentPageId:this.location.getState()?.\u0275routerPageId??this.currentPageId}get events(){return this._events}constructor(){this.disposed=!1,this.currentPageId=0,this.console=X(Jb),this.isNgZoneEnabled=!1,this._events=new It,this.options=X(Ml,{optional:!0})||{},this.pendingTasks=X(ew),this.errorHandler=this.options.errorHandler||w2,this.malformedUriErrorHandler=this.options.malformedUriErrorHandler||E2,this.navigated=!1,this.lastSuccessfulId=-1,this.urlHandlingStrategy=X(y2),this.routeReuseStrategy=X(g2),this.titleStrategy=X(v1),this.onSameUrlNavigation=this.options.onSameUrlNavigation||"ignore",this.paramsInheritanceStrategy=this.options.paramsInheritanceStrategy||"emptyOnly",this.urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred",this.canceledNavigationResolution=this.options.canceledNavigationResolution||"replace",this.config=X(Ui,{optional:!0})?.flat()??[],this.navigationTransitions=X(Al),this.urlSerializer=X(oa),this.location=X(kp),this.componentInputBindingEnabled=!!X(Cl,{optional:!0}),this.eventsSubscription=new A,this.isNgZoneEnabled=X(rt)instanceof rt&&rt.isInAngularZone(),this.resetConfig(this.config),this.currentUrlTree=new Oi,this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.routerState=ZE(0,null),this.navigationTransitions.setupNavigations(this,this.currentUrlTree,this.routerState).subscribe(n=>{this.lastSuccessfulId=n.id,this.currentPageId=this.browserPageId},n=>{this.console.warn(`Unhandled Navigation Error: ${n}`)}),this.subscribeToNavigationEvents()}subscribeToNavigationEvents(){const n=this.navigationTransitions.events.subscribe(r=>{try{const{currentTransition:o}=this.navigationTransitions;if(null===o)return void(b1(r)&&this._events.next(r));if(r instanceof El)m1(o.source)&&(this.browserUrlTree=o.extractedUrl);else if(r instanceof ki)this.rawUrlTree=o.rawUrl;else if(r instanceof GE){if("eager"===this.urlUpdateStrategy){if(!o.extras.skipLocationChange){const i=this.urlHandlingStrategy.merge(o.urlAfterRedirects,o.rawUrl);this.setBrowserUrl(i,o)}this.browserUrlTree=o.urlAfterRedirects}}else if(r instanceof gh)this.currentUrlTree=o.urlAfterRedirects,this.rawUrlTree=this.urlHandlingStrategy.merge(o.urlAfterRedirects,o.rawUrl),this.routerState=o.targetRouterState,"deferred"===this.urlUpdateStrategy&&(o.extras.skipLocationChange||this.setBrowserUrl(this.rawUrlTree,o),this.browserUrlTree=o.urlAfterRedirects);else if(r instanceof la)0!==r.code&&1!==r.code&&(this.navigated=!0),(3===r.code||2===r.code)&&this.restoreHistory(o);else if(r instanceof mh){const i=this.urlHandlingStrategy.merge(r.url,o.currentRawUrl),a={skipLocationChange:o.extras.skipLocationChange,replaceUrl:"eager"===this.urlUpdateStrategy||m1(o.source)};this.scheduleNavigation(i,ca,null,a,{resolve:o.resolve,reject:o.reject,promise:o.promise})}r instanceof _l&&this.restoreHistory(o,!0),r instanceof Jr&&(this.navigated=!0),b1(r)&&this._events.next(r)}catch(o){this.navigationTransitions.transitionAbortSubject.next(o)}});this.eventsSubscription.add(n)}resetRootComponentType(n){this.routerState.root.component=n,this.navigationTransitions.rootComponentType=n}initialNavigation(){if(this.setUpLocationChangeListener(),!this.navigationTransitions.hasRequestedNavigation){const n=this.location.getState();this.navigateToSyncWithBrowser(this.location.path(!0),ca,n)}}setUpLocationChangeListener(){this.locationSubscription||(this.locationSubscription=this.location.subscribe(n=>{const r="popstate"===n.type?"popstate":"hashchange";"popstate"===r&&setTimeout(()=>{this.navigateToSyncWithBrowser(n.url,r,n.state)},0)}))}navigateToSyncWithBrowser(n,r,o){const i={replaceUrl:!0},a=o?.navigationId?o:null;if(o){const d={...o};delete d.navigationId,delete d.\u0275routerPageId,0!==Object.keys(d).length&&(i.state=d)}const u=this.parseUrl(n);this.scheduleNavigation(u,r,a,i)}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.navigationTransitions.currentNavigation}get lastSuccessfulNavigation(){return this.navigationTransitions.lastSuccessfulNavigation}resetConfig(n){this.config=n.map(Ch),this.navigated=!1,this.lastSuccessfulId=-1}ngOnDestroy(){this.dispose()}dispose(){this.navigationTransitions.complete(),this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=void 0),this.disposed=!0,this.eventsSubscription.unsubscribe()}createUrlTree(n,r={}){const{relativeTo:o,queryParams:i,fragment:a,queryParamsHandling:u,preserveFragment:d}=r,p=d?this.currentUrlTree.fragment:a;let f,h=null;switch(u){case"merge":h={...this.currentUrlTree.queryParams,...i};break;case"preserve":h=this.currentUrlTree.queryParams;break;default:h=i||null}null!==h&&(h=this.removeEmptyProps(h));try{f=BE(o?o.snapshot:this.routerState.snapshot.root)}catch{("string"!=typeof n[0]||!n[0].startsWith("/"))&&(n=[]),f=this.currentUrlTree.root}return UE(f,n,h,p??null)}navigateByUrl(n,r={skipLocationChange:!1}){const o=Co(n)?n:this.parseUrl(n),i=this.urlHandlingStrategy.merge(o,this.rawUrlTree);return this.scheduleNavigation(i,ca,null,r)}navigate(n,r={skipLocationChange:!1}){return function C2(e){for(let t=0;t{const i=n[o];return null!=i&&(r[o]=i),r},{})}scheduleNavigation(n,r,o,i,a){if(this.disposed)return Promise.resolve(!1);let u,d,p;a?(u=a.resolve,d=a.reject,p=a.promise):p=new Promise((f,m)=>{u=f,d=m});const h=this.pendingTasks.add();return y1(this,()=>{queueMicrotask(()=>this.pendingTasks.remove(h))}),this.navigationTransitions.handleNavigationRequest({source:r,restoredState:o,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,currentBrowserUrl:this.browserUrlTree,rawUrl:n,extras:i,resolve:u,reject:d,promise:p,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),p.catch(f=>Promise.reject(f))}setBrowserUrl(n,r){const o=this.urlSerializer.serialize(n);if(this.location.isCurrentPathEqualTo(o)||r.extras.replaceUrl){const a={...r.extras.state,...this.generateNgRouterState(r.id,this.browserPageId)};this.location.replaceState(o,"",a)}else{const i={...r.extras.state,...this.generateNgRouterState(r.id,this.browserPageId+1)};this.location.go(o,"",i)}}restoreHistory(n,r=!1){if("computed"===this.canceledNavigationResolution){const i=this.currentPageId-this.browserPageId;0!==i?this.location.historyGo(i):this.currentUrlTree===this.getCurrentNavigation()?.finalUrl&&0===i&&(this.resetState(n),this.browserUrlTree=n.currentUrlTree,this.resetUrlToCurrentUrlTree())}else"replace"===this.canceledNavigationResolution&&(r&&this.resetState(n),this.resetUrlToCurrentUrlTree())}resetState(n){this.routerState=n.currentRouterState,this.currentUrlTree=n.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,n.rawUrl)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}generateNgRouterState(n,r){return"computed"===this.canceledNavigationResolution?{navigationId:n,\u0275routerPageId:r}:{navigationId:n}}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function b1(e){return!(e instanceof gh||e instanceof mh)}let Te=(()=>{class e{constructor(n,r,o,i,a,u){this.router=n,this.route=r,this.tabIndexAttribute=o,this.renderer=i,this.el=a,this.locationStrategy=u,this.href=null,this.commands=null,this.onChanges=new It,this.preserveFragment=!1,this.skipLocationChange=!1,this.replaceUrl=!1;const d=a.nativeElement.tagName?.toLowerCase();this.isAnchorElement="a"===d||"area"===d,this.isAnchorElement?this.subscription=n.events.subscribe(p=>{p instanceof Jr&&this.updateHref()}):this.setTabIndexIfNotOnNativeEl("0")}setTabIndexIfNotOnNativeEl(n){null!=this.tabIndexAttribute||this.isAnchorElement||this.applyAttributeValue("tabindex",n)}ngOnChanges(n){this.isAnchorElement&&this.updateHref(),this.onChanges.next(this)}set routerLink(n){null!=n?(this.commands=Array.isArray(n)?n:[n],this.setTabIndexIfNotOnNativeEl("0")):(this.commands=null,this.setTabIndexIfNotOnNativeEl(null))}onClick(n,r,o,i,a){return!!(null===this.urlTree||this.isAnchorElement&&(0!==n||r||o||i||a||"string"==typeof this.target&&"_self"!=this.target))||(this.router.navigateByUrl(this.urlTree,{skipLocationChange:this.skipLocationChange,replaceUrl:this.replaceUrl,state:this.state}),!this.isAnchorElement)}ngOnDestroy(){this.subscription?.unsubscribe()}updateHref(){this.href=null!==this.urlTree&&this.locationStrategy?this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(this.urlTree)):null;const n=null===this.href?null:function nm(e,t,n){return function UC(e,t){return"src"===t&&("embed"===e||"frame"===e||"iframe"===e||"media"===e||"script"===e)||"href"===t&&("base"===e||"link"===e)?tm:em}(t,n)(e)}(this.href,this.el.nativeElement.tagName.toLowerCase(),"href");this.applyAttributeValue("href",n)}applyAttributeValue(n,r){const o=this.renderer,i=this.el.nativeElement;null!==r?o.setAttribute(i,n,r):o.removeAttribute(i,n)}get urlTree(){return null===this.commands?null:this.router.createUrlTree(this.commands,{relativeTo:void 0!==this.relativeTo?this.relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:this.preserveFragment})}static#e=this.\u0275fac=function(r){return new(r||e)(le($n),le(Pi),function Ga(e){return function sD(e,t){if("class"===t)return e.classes;if("style"===t)return e.styles;const n=e.attrs;if(n){const r=n.length;let o=0;for(;o{class e{get isActive(){return this._isActive}constructor(n,r,o,i,a){this.router=n,this.element=r,this.renderer=o,this.cdr=i,this.link=a,this.classes=[],this._isActive=!1,this.routerLinkActiveOptions={exact:!1},this.isActiveChange=new en,this.routerEventsSubscription=n.events.subscribe(u=>{u instanceof Jr&&this.update()})}ngAfterContentInit(){ae(this.links.changes,ae(null)).pipe(Pr()).subscribe(n=>{this.update(),this.subscribeToEachLinkOnChanges()})}subscribeToEachLinkOnChanges(){this.linkInputChangesSubscription?.unsubscribe();const n=[...this.links.toArray(),this.link].filter(r=>!!r).map(r=>r.onChanges);this.linkInputChangesSubscription=ft(n).pipe(Pr()).subscribe(r=>{this._isActive!==this.isLinkActive(this.router)(r)&&this.update()})}set routerLinkActive(n){const r=Array.isArray(n)?n:n.split(" ");this.classes=r.filter(o=>!!o)}ngOnChanges(n){this.update()}ngOnDestroy(){this.routerEventsSubscription.unsubscribe(),this.linkInputChangesSubscription?.unsubscribe()}update(){!this.links||!this.router.navigated||queueMicrotask(()=>{const n=this.hasActiveLinks();this._isActive!==n&&(this._isActive=n,this.cdr.markForCheck(),this.classes.forEach(r=>{n?this.renderer.addClass(this.element.nativeElement,r):this.renderer.removeClass(this.element.nativeElement,r)}),n&&void 0!==this.ariaCurrentWhenActive?this.renderer.setAttribute(this.element.nativeElement,"aria-current",this.ariaCurrentWhenActive.toString()):this.renderer.removeAttribute(this.element.nativeElement,"aria-current"),this.isActiveChange.emit(n))})}isLinkActive(n){const r=function S2(e){return!!e.paths}(this.routerLinkActiveOptions)?this.routerLinkActiveOptions:this.routerLinkActiveOptions.exact||!1;return o=>!!o.urlTree&&n.isActive(o.urlTree,r)}hasActiveLinks(){const n=this.isLinkActive(this.router);return this.link&&n(this.link)||this.links.some(n)}static#e=this.\u0275fac=function(r){return new(r||e)(le($n),le(Gr),le(Dc),le(Cp),le(Te,8))};static#t=this.\u0275dir=Kt({type:e,selectors:[["","routerLinkActive",""]],contentQueries:function(r,o,i){if(1&r&&Rb(i,Te,5),2&r){let a;xb(a=function Ob(){return function oA(e,t){return e[ir].queries[t].queryList}(N(),Ff())}())&&(o.links=a)}},inputs:{routerLinkActiveOptions:"routerLinkActiveOptions",ariaCurrentWhenActive:"ariaCurrentWhenActive",routerLinkActive:"routerLinkActive"},outputs:{isActiveChange:"isActiveChange"},exportAs:["routerLinkActive"],standalone:!0,features:[lo]})}return e})();class E1{}let I2=(()=>{class e{constructor(n,r,o,i,a){this.router=n,this.injector=o,this.preloadingStrategy=i,this.loader=a}setUpPreloading(){this.subscription=this.router.events.pipe(Qr(n=>n instanceof Jr),ta(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(n,r){const o=[];for(const i of r){i.providers&&!i._injector&&(i._injector=ep(i.providers,n,`Route: ${i.path}`));const a=i._injector??n,u=i._loadedInjector??a;(i.loadChildren&&!i._loadedRoutes&&void 0===i.canLoad||i.loadComponent&&!i._loadedComponent)&&o.push(this.preloadConfig(a,i)),(i.children||i._loadedRoutes)&&o.push(this.processRoutes(u,i.children??i._loadedRoutes))}return ft(o).pipe(Pr())}preloadConfig(n,r){return this.preloadingStrategy.preload(r,()=>{let o;o=r.loadChildren&&void 0===r.canLoad?this.loader.loadChildren(n,r):ae(null);const i=o.pipe(pt(a=>null===a?ae(void 0):(r._loadedRoutes=a.routes,r._loadedInjector=a.injector,this.processRoutes(a.injector??n,a.routes))));return r.loadComponent&&!r._loadedComponent?ft([i,this.loader.loadComponent(r)]).pipe(Pr()):i})}static#e=this.\u0275fac=function(r){return new(r||e)(ie($n),ie(tw),ie(An),ie(E1),ie(Nh))};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();const Ah=new te("");let _1=(()=>{class e{constructor(n,r,o,i,a={}){this.urlSerializer=n,this.transitions=r,this.viewportScroller=o,this.zone=i,this.options=a,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},a.scrollPositionRestoration=a.scrollPositionRestoration||"disabled",a.anchorScrolling=a.anchorScrolling||"disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.transitions.events.subscribe(n=>{n instanceof El?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=n.navigationTrigger,this.restoredId=n.restoredState?n.restoredState.navigationId:0):n instanceof Jr?(this.lastId=n.id,this.scheduleScrollEvent(n,this.urlSerializer.parse(n.urlAfterRedirects).fragment)):n instanceof ki&&0===n.code&&(this.lastSource=void 0,this.restoredId=0,this.scheduleScrollEvent(n,this.urlSerializer.parse(n.url).fragment))})}consumeScrollEvents(){return this.transitions.events.subscribe(n=>{n instanceof WE&&(n.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(n.position):n.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(n.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(n,r){this.zone.runOutsideAngular(()=>{setTimeout(()=>{this.zone.run(()=>{this.transitions.events.next(new WE(n,"popstate"===this.lastSource?this.store[this.restoredId]:null,r))})},0)})}ngOnDestroy(){this.routerEventsSubscription?.unsubscribe(),this.scrollEventsSubscription?.unsubscribe()}static#e=this.\u0275fac=function(r){!function Vm(){throw new Error("invalid")}()};static#t=this.\u0275prov=ce({token:e,factory:e.\u0275fac})}return e})();function Or(e,t){return{\u0275kind:e,\u0275providers:t}}function C1(){const e=X(Mn);return t=>{const n=e.get(Ni);if(t!==n.components[0])return;const r=e.get($n),o=e.get(S1);1===e.get(Mh)&&r.initialNavigation(),e.get(I1,null,Me.Optional)?.setUpPreloading(),e.get(Ah,null,Me.Optional)?.init(),r.resetRootComponentType(n.componentTypes[0]),o.closed||(o.next(),o.complete(),o.unsubscribe())}}const S1=new te("",{factory:()=>new It}),Mh=new te("",{providedIn:"root",factory:()=>1}),I1=new te("");function M2(e){return Or(0,[{provide:I1,useExisting:I2},{provide:E1,useExisting:e}])}const T1=new te("ROUTER_FORROOT_GUARD"),R2=[kp,{provide:oa,useClass:uh},$n,ua,{provide:Pi,useFactory:function D1(e){return e.routerState.root},deps:[$n]},Nh,[]];function O2(){return new cw("Router",$n)}let jt=(()=>{class e{constructor(n){}static forRoot(n,r){return{ngModule:e,providers:[R2,[],{provide:Ui,multi:!0,useValue:n},{provide:T1,useFactory:L2,deps:[[$n,new Ya,new Za]]},{provide:Ml,useValue:r||{}},r?.useHash?{provide:wo,useClass:FM}:{provide:wo,useClass:Fw},{provide:Ah,useFactory:()=>{const e=X(iR),t=X(rt),n=X(Ml),r=X(Al),o=X(oa);return n.scrollOffset&&e.setOffset(n.scrollOffset),new _1(o,r,e,t,n)}},r?.preloadingStrategy?M2(r.preloadingStrategy).\u0275providers:[],{provide:cw,multi:!0,useFactory:O2},r?.initialNavigation?F2(r):[],r?.bindToComponentInputs?Or(8,[e1,{provide:Cl,useExisting:e1}]).\u0275providers:[],[{provide:N1,useFactory:C1},{provide:_p,multi:!0,useExisting:N1}]]}}static forChild(n){return{ngModule:e,providers:[{provide:Ui,multi:!0,useValue:n}]}}static#e=this.\u0275fac=function(r){return new(r||e)(ie(T1,8))};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({})}return e})();function L2(e){return"guarded"}function F2(e){return["disabled"===e.initialNavigation?Or(3,[{provide:fp,multi:!0,useFactory:()=>{const t=X($n);return()=>{t.setUpLocationChangeListener()}}},{provide:Mh,useValue:2}]).\u0275providers:[],"enabledBlocking"===e.initialNavigation?Or(2,[{provide:Mh,useValue:0},{provide:fp,multi:!0,deps:[Mn],useFactory:t=>{const n=t.get(PM,Promise.resolve());return()=>n.then(()=>new Promise(r=>{const o=t.get($n),i=t.get(S1);y1(o,()=>{r(!0)}),t.get(Al).afterPreactivation=()=>(r(!0),i.closed?ae(void 0):i),o.initialNavigation()}))}}]).\u0275providers:[]]}const N1=new te(""),U2=[{path:"",component:(()=>{class e{constructor(){}ngOnInit(){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["app-home"]],decls:10,vars:0,consts:[[1,"d-flex","flex-column","justify-content-center","text-center","py-4","my-5"],[1,"display-3","mx-auto"],[1,"lead","w-75","mx-auto"],[1,"d-grid","gap-2","d-md-flex","justify-content-center"],["routerLink","/docs",1,"btn","btn-danger","px-4","me-md-2"],["href","https://github.com/DevNet-Framework",1,"btn","btn-outline-secondary","px-4"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"h1",1),s(2,"DevNet Framework"),c(),l(3,"p",2),s(4," A free open-source software, and cross-platform, inspired by ASP.NET Core, built in PHP for rapid application development, APIs, console and modern web application with high performance. "),c(),l(5,"div",3)(6,"a",4),s(7,"Documentation"),c(),l(8,"a",5),s(9,"View on GitHub"),c()()())},dependencies:[Te]})}return e})()},{path:"docs",component:(()=>{class e{constructor(){}ngOnInit(){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["app-docs"]],decls:56,vars:0,consts:[[1,"d-flex","flex-column","justify-content-center","text-center","p-3",2,"min-height","280px","background-color","rebeccapurple"],[1,"text-white","display-4","mx-auto"],[1,"lead","text-white","w-75","mx-auto"],[1,"pt-3"],[1,"container"],[1,"row"],[1,"col-sm-6","col-md-4","mb-3"],[1,"card","shadow-sm","h-100","p-3"],[1,"card-body"],[1,"card-title"],[1,"card-text","mb-0"],["routerLink","/docs/setup",1,"card-link","stretched-link"],["routerLink","/docs/console",1,"card-link","stretched-link"],["routerLink","/docs/system",1,"card-link","stretched-link"],["routerLink","/docs/web",1,"card-link","stretched-link"],["routerLink","/docs/security",1,"card-link","stretched-link"],["routerLink","/docs/orm",1,"card-link","stretched-link"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"h1",1),s(2,"DevNet Documentation"),c(),l(3,"p",2),s(4,"Learn how to use DevNet Framework for rapid application development on any platform, using PHP with a new experience to the next level."),c()(),l(5,"section",3)(6,"div",4)(7,"div",5)(8,"div",6)(9,"div",7)(10,"div",8)(11,"h5",9),s(12,"Setup"),c(),l(13,"p",10),s(14,"Installing the framework and configuring the deployment environment"),c(),v(15,"a",11),c()()(),l(16,"div",6)(17,"div",7)(18,"div",8)(19,"h5",9),s(20,"Console Application"),c(),l(21,"p",10),s(22,"Creating console applications and command lines"),c(),v(23,"a",12),c()()(),l(24,"div",6)(25,"div",7)(26,"div",8)(27,"h5",9),s(28,"Fundamentals"),c(),l(29,"p",10),s(30,"Exploring the fundamental features of the core library"),c(),v(31,"a",13),c()()(),l(32,"div",6)(33,"div",7)(34,"div",8)(35,"h5",9),s(36,"Web Application"),c(),l(37,"p",10),s(38,"Creating web applications, web APIs and microservices"),c(),v(39,"a",14),c()()(),l(40,"div",6)(41,"div",7)(42,"div",8)(43,"h5",9),s(44,"Security"),c(),l(45,"p",10),s(46,"Protecting and controlling the access to the resources"),c(),v(47,"a",15),c()()(),l(48,"div",6)(49,"div",7)(50,"div",8)(51,"h5",9),s(52,"ORM"),c(),l(53,"p",10),s(54,"Manipulating the database using the object relational mapper"),c(),v(55,"a",16),c()()()()()())},dependencies:[Te]})}return e})()},{path:"**",component:(()=>{class e{constructor(){}ngOnInit(){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["app-error"]],decls:8,vars:0,consts:[[1,"container"],[1,"d-flex","flex-column","justify-content-center","text-center",2,"height","75vh"],[1,"text-danger","display-6","mx-auto","fw-normal"],[1,"text-danger","display-1","mx-auto","fw-normal"],[1,"lead","w-75","mx-auto","text-dark","fw-normal"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"span",2),s(3,"ERROR"),c(),l(4,"h1",3),s(5,"404"),c(),l(6,"p",4),s(7,"Page not found!"),c()()())}})}return e})()}];let H2=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[jt.forRoot(U2,{scrollPositionRestoration:"enabled"}),jt]})}return e})();const j2=[];let V2=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[jt.forChild(j2),jt]})}return e})(),So=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[Yr,V2]})}return e})();const Fe=g(782);function q2(e){const r={className:"number",begin:/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?/};return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:/<\/?/,end:/>/,contains:[r,{className:"number",begin:/:\d{1,5}/},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",begin:/\w+/,relevance:0,keywords:{_:["order","deny","allow","setenv","rewriterule","rewriteengine","rewritecond","documentroot","sethandler","errordocument","loadmodule","options","header","listen","serverroot","servername"]},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},contains:[{className:"meta",begin:/\s\[/,end:/\]$/},{className:"variable",begin:/[\$%]\{/,end:/\}/,contains:["self",{className:"number",begin:/[$%]\d+/}]},r,{className:"number",begin:/\b\d+/},e.QUOTE_STRING_MODE]}}],illegal:/\S/}}function G2(e){const t=e.regex,n={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{\w+\}/},{begin:t.concat(/[$@]/,e.UNDERSCORE_IDENT_RE)}]},o={endsWithParent:!0,keywords:{$pattern:/[a-z_]{2,}|\/dev\/poll/,literal:["on","off","yes","no","true","false","none","blocked","debug","info","notice","warn","error","crit","select","break","last","permanent","redirect","kqueue","rtsig","epoll","poll","/dev/poll"]},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[n]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:"\\s\\^",end:"\\s|\\{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|\\{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]?\\b",relevance:0},n]};return{name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{beginKeywords:"upstream location",end:/;|\{/,contains:o.contains,keywords:{section:"upstream location"}},{className:"section",begin:t.concat(e.UNDERSCORE_IDENT_RE+t.lookahead(/\s+\{/)),relevance:0},{begin:t.lookahead(e.UNDERSCORE_IDENT_RE+"\\s"),end:";|\\{",contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:o}],relevance:0}],illegal:"[^\\s\\}\\{]"}}let je=(()=>{class e{constructor(){}ngOnInit(){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["app-sidebar"]],decls:128,vars:0,consts:[[1,"position-sticky","top-0","overflow-auto","bg-white","p-2"],["id","menu",1,"list-unstyled","ps-0"],[1,"mb-1"],["data-bs-toggle","collapse","data-bs-target","#start-collapse","aria-expanded","false",1,"btn","btn-toggle","d-inline-flex","align-items-center","rounded","border-0","collapsed"],["id","start-collapse","data-bs-parent","#menu","routerLinkActive","show",1,"collapse"],[1,"btn-toggle-nav","list-unstyled","fw-normal","pb-1","small"],["routerLink","/docs/setup/overview","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/setup/installation","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/setup/deployment","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["data-bs-toggle","collapse","data-bs-target","#console-collapse","aria-expanded","false",1,"btn","btn-toggle","d-inline-flex","align-items-center","rounded","border-0","collapsed"],["id","console-collapse","data-bs-parent","#menu","routerLinkActive","show",1,"collapse"],["routerLink","/docs/console/start","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/console/output","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/console/input","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/console/command","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["data-bs-toggle","collapse","data-bs-target","#fundamentals-collapse","aria-expanded","false",1,"btn","btn-toggle","d-inline-flex","align-items-center","rounded","border-0","collapsed"],["id","fundamentals-collapse","data-bs-parent","#menu","routerLinkActive","show",1,"collapse"],["routerLink","/docs/system/overview","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/system/properties","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/system/extension","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/system/linq","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/system/generics","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/system/asynchronous","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/system/delegates","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["data-bs-toggle","collapse","data-bs-target","#web-collapse","aria-expanded","false",1,"btn","btn-toggle","d-inline-flex","align-items-center","rounded","border-0","collapsed"],["id","web-collapse","data-bs-parent","#menu","routerLinkActive","show",1,"collapse"],["routerLink","/docs/web/start","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/web/http","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/web/middleware","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/web/routing","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/web/controller","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/web/view","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/web/filter","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/web/exception","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/web/dependency","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["data-bs-toggle","collapse","data-bs-target","#security-collapse","aria-expanded","false",1,"btn","btn-toggle","d-inline-flex","align-items-center","rounded","border-0","collapsed"],["id","security-collapse","data-bs-parent","#menu","routerLinkActive","show",1,"collapse"],["routerLink","/docs/security/overview","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/security/authentication","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/security/authorization","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/security/antiforgery","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["data-bs-toggle","collapse","data-bs-target","#entity-collapse","aria-expanded","false",1,"btn","btn-toggle","d-inline-flex","align-items-center","rounded","border-0","collapsed"],["id","entity-collapse","data-bs-parent","#menu","routerLinkActive","show",1,"collapse"],["routerLink","/docs/orm/start","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/orm/query","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/orm/save","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/orm/relationships","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"],["routerLink","/docs/orm/migrations","routerLinkActive","fw-bold",1,"link-dark","d-inline-flex","text-decoration-none","rounded"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"ul",1)(2,"li",2)(3,"button",3),s(4," Setup "),c(),l(5,"div",4)(6,"ul",5)(7,"li")(8,"a",6),s(9,"Overview"),c()(),l(10,"li")(11,"a",7),s(12,"Installation"),c()(),l(13,"li")(14,"a",8),s(15,"Deployment"),c()()()()(),l(16,"li",2)(17,"button",9),s(18," Console "),c(),l(19,"div",10)(20,"ul",5)(21,"li")(22,"a",11),s(23,"Get Started"),c()(),l(24,"li")(25,"a",12),s(26,"Output"),c()(),l(27,"li")(28,"a",13),s(29,"Input"),c()(),l(30,"li")(31,"a",14),s(32,"Command Line"),c()()()()(),l(33,"li",2)(34,"button",15),s(35," Fundamentals "),c(),l(36,"div",16)(37,"ul",5)(38,"li")(39,"a",17),s(40,"Overview"),c()(),l(41,"li")(42,"a",18),s(43,"Accessor Properties"),c()(),l(44,"li")(45,"a",19),s(46,"Extension Methods"),c()(),l(47,"li")(48,"a",20),s(49,"LINQ Methods"),c()(),l(50,"li")(51,"a",21),s(52,"Generic Types"),c()(),l(53,"li")(54,"a",22),s(55,"Async Operations"),c()(),l(56,"li")(57,"a",23),s(58,"Delegates & Events"),c()()()()(),l(59,"li",2)(60,"button",24),s(61," Web "),c(),l(62,"div",25)(63,"ul",5)(64,"li")(65,"a",26),s(66,"Get Started"),c()(),l(67,"li")(68,"a",27),s(69,"Http Context"),c()(),l(70,"li")(71,"a",28),s(72,"Middleware"),c()(),l(73,"li")(74,"a",29),s(75,"Routing"),c()(),l(76,"li")(77,"a",30),s(78,"Controller"),c()(),l(79,"li")(80,"a",31),s(81,"Views"),c()(),l(82,"li")(83,"a",32),s(84,"Filters"),c()(),l(85,"li")(86,"a",33),s(87,"Exception Handler"),c()(),l(88,"li")(89,"a",34),s(90,"Dependency Injection"),c()()()()(),l(91,"li",2)(92,"button",35),s(93," Security "),c(),l(94,"div",36)(95,"ul",5)(96,"li")(97,"a",37),s(98,"Overview"),c()(),l(99,"li")(100,"a",38),s(101,"Authentication"),c()(),l(102,"li")(103,"a",39),s(104,"Authorization"),c()(),l(105,"li")(106,"a",40),s(107,"CSRF Prevention"),c()()()()(),l(108,"li",2)(109,"button",41),s(110," ORM "),c(),l(111,"div",42)(112,"ul",5)(113,"li")(114,"a",43),s(115,"Get Started"),c()(),l(116,"li")(117,"a",44),s(118,"Query Data"),c()(),l(119,"li")(120,"a",45),s(121,"Save Data"),c()(),l(122,"li")(123,"a",46),s(124,"Relationships"),c()(),l(125,"li")(126,"a",47),s(127,"Migrations"),c()()()()()()())},dependencies:[Te,w1],styles:[".btn-toggle[_ngcontent-%COMP%]{padding:.25rem .5rem;font-weight:600;color:#000000a6;background-color:transparent}.btn-toggle[_ngcontent-%COMP%]:hover, .btn-toggle[_ngcontent-%COMP%]:focus{color:#000000d9;background-color:#d2f4ea}.btn-toggle[_ngcontent-%COMP%]:before{width:1.25em;line-height:0;content:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='rgba%280,0,0,.5%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/%3e%3c/svg%3e\");transition:transform .35s ease;transform-origin:.5em 50%}.btn-toggle[aria-expanded=true][_ngcontent-%COMP%]{color:#000000d9}.btn-toggle[aria-expanded=true][_ngcontent-%COMP%]:before{transform:rotate(90deg)}.btn-toggle-nav[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{border-left:2px solid #E0E0E0;margin-left:1rem}.btn-toggle-nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{padding:.1875rem .5rem;margin-top:.15rem;margin-left:.8rem}.btn-toggle-nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover, .btn-toggle-nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:focus{background-color:#d2f4ea}"]})}return e})();const W2=[{path:"docs/setup/overview",component:(()=>{class e{constructor(){}ngOnInit(){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["setup-overview"]],decls:33,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],["src","assets/images/framework.svg","alt","Web app home page","width","60%","height","auto"],[1,"alert","alert-info"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/setup/installation",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Overview"),c(),v(8,"hr"),l(9,"p"),s(10," DevNet Framework is a free open-source PHP library and toolset for rapid application development with high performance to build console applications, web applications, web APIs, and microservices. "),c(),l(11,"h3"),s(12,"Architecture"),c(),l(13,"p"),s(14," The DevNet framework has a layered architecture, which can be represented by the following diagram, that shows the major components of the DevNet Framework in each layer. "),c(),l(15,"div"),v(16,"img",4),c(),l(17,"p"),s(18," The top layer is the application that performs specific tasks and operations that end users interact with, which is built on top of subsequent layers that contain more sophisticated services that are also built on layers below, down to the lowest layer of the system that provides the basic functionality that all components rely on. "),c(),l(19,"blockquote",5)(20,"b"),s(21,"Note:"),c(),s(22," Each of these components will be discussed in more detail in the upcoming chapters. "),c()(),l(23,"nav",6)(24,"ul",7)(25,"li",8)(26,"a",9),v(27,"i",10),s(28," Previous "),c()(),l(29,"li",8)(30,"a",11),s(31," Next "),v(32,"i",12),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/setup/installation",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["setup-installation"]],decls:64,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],["href","https://www.php.net/","rel","nofollow"],["href","https://getcomposer.org/","rel","nofollow"],[1,"alert","alert-warning"],[1,"language-shell"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/setup/overview",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/setup/deployment",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Installation"),c(),v(8,"hr"),l(9,"p"),s(10," DevNet Framework has some software requirements in order to work, so make sure your system meets the software requirements before getting to the installation. "),c(),l(11,"h3"),s(12,"Software Requirements"),c(),l(13,"ul")(14,"li")(15,"a",4),s(16,"PHP"),c(),s(17," version 8.1 or higher"),c(),l(18,"li")(19,"a",5),s(20,"Composer"),c(),s(21," version 2.0 or higher"),c(),l(22,"li"),s(23,"You may need to install or activate "),l(24,"code"),s(25,"PDO PHP Extensions"),c()()(),l(26,"blockquote",6)(27,"b"),s(28,"Important:"),c(),s(29," When you install composer on Linux operating system, please do not forget to add "),l(30,"code"),s(31,"composer/vendor/bin"),c(),s(32," into the system environment variables inside the file "),l(33,"code"),s(34,".bashrc"),c(),s(35," like this:"),v(36,"br"),l(37,"code"),s(38,'export PATH="$PATH:$HOME/.config/composer/vendor/bin"'),c()(),v(39,"br"),l(40,"h3"),s(41,"Installing DevNet Framework"),c(),l(42,"p"),s(43," It is recommended to Install the DevNet Framework globally in your system, just one framework runs multiple projects unless your projects use different versions of the DevNet framework, which may cause conflict because the composer doesn't support multi-versioning, in this case, you can solve this problem using docker container or installing the compatible version of DevNet framework locally inside its proper project. "),c(),l(44,"p"),s(45," To install DevNet Framework, open your terminal and run the following composer command-line: "),c(),l(46,"pre")(47,"code",7),s(48,"composer global require devnet/framework"),c()(),l(49,"p"),s(50," Then you can use the DevNet CLI to create and manage your project. "),c(),l(51,"pre")(52,"code",7),s(53,"devnet --help"),c()()(),l(54,"nav",8)(55,"ul",9)(56,"li",10)(57,"a",11),v(58,"i",12),s(59," Previous "),c()(),l(60,"li",10)(61,"a",13),s(62," Next "),v(63,"i",14),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/setup/deployment",component:(()=>{class e{constructor(){}ngOnInit(){Fe.registerLanguage("apache",q2),Fe.registerLanguage("nginx",G2),Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["setup-deployment"]],decls:59,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-apache"],[1,"language-xml"],[1,"language-nginx"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/setup/installation",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/console/start",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Deployment"),c(),v(8,"hr"),l(9,"p"),s(10," DevNet web project comes with two default server configurations, Apache and IIS, to quickly deploy your web application, but you can add other server configurations, like the configuration of Nginx server, which is demonstrated in the last example of this section. "),c(),l(11,"h3"),s(12,"Apache configuration"),c(),l(13,"p"),s(14," For quick deployment on Apache server, your web project contains already "),l(15,"code"),s(16,".htaccess"),c(),s(17," file in the public directory "),l(18,"code"),s(19,"./webroot/"),c(),s(20," with the following configuration: "),c(),l(21,"pre")(22,"code",4),s(23,"RewriteEngine On\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteRule ^ index.php [QSA,L]"),c()(),v(24,"br"),l(25,"h3"),s(26,"IIS configuration"),c(),l(27,"p"),s(28," For IIS server deployment, your web project contains also the file "),l(29,"code"),s(30,"./webroot/Web.config"),c(),s(31," with the following configuration: "),c(),l(32,"pre")(33,"code",5),s(34,'\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n'),c()(),v(35,"br"),l(36,"h3"),s(37,"Nginx configuration"),c(),l(38,"p"),s(39," Assuming you have a PHP-FPM server installed in your system and running on "),l(40,"code"),s(41,"127.0.0.1:9000"),c(),s(42,", and you want to deploy your web application on the Nginx server, so you can configure the file "),l(43,"code"),s(44,"nginx.conf"),c(),s(45," like below: "),c(),l(46,"pre")(47,"code",6),s(48,"server {\n listen 80;\n server_name localhost;\n root /path/to/webroot;\n index index.php;\n error_page 404 /index.php;\n\n location / {\n try_files $uri $uri/ /index.php?$query_string;\n }\n\n location ~ \\.php$ {\n fastcgi_pass 127.0.0.1:9000;\n fastcgi_index index.php;\n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n include fastcgi_params;\n }\n}"),c()()(),l(49,"nav",7)(50,"ul",8)(51,"li",9)(52,"a",10),v(53,"i",11),s(54," Previous "),c()(),l(55,"li",9)(56,"a",12),s(57," Next "),v(58,"i",13),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/setup",redirectTo:"docs/setup/overview",pathMatch:"full"}];let K2=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[jt.forChild(W2),jt]})}return e})(),Y2=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[Yr,K2,So]})}return e})();const Z2=[{path:"docs/system/overview",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["system-overview"]],decls:46,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-shell"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/console/command",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/system/properties",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Overview"),c(),v(8,"hr"),l(9,"p"),s(10," DevNet System is a low-level library that provides the fundamental functionalities of the DevNet framework, which can be represented in the following features: "),c(),l(11,"ul")(12,"li"),s(13,"Accessor Properties"),c(),l(14,"li"),s(15,"Extension Methods"),c(),l(16,"li"),s(17,"LINQ Methods"),c(),l(18,"li"),s(19,"Generic Types"),c(),l(20,"li"),s(21,"Asynchronous Operations"),c(),l(22,"li"),s(23,"Delegates & Events"),c(),l(24,"li"),s(25,"Database Access"),c(),l(26,"li"),s(27,"And more..."),c()(),v(28,"br"),l(29,"h3"),s(30,"Installation"),c(),l(31,"p"),s(32," If you have installed any of the DevNet packages, then you already have the DevNet System. However, you can still install DevNet System as a third-party library to work with any PHP project by running the following composer command-line: "),c(),l(33,"pre")(34,"code",4),s(35,"composer require devnet/system"),c()()(),l(36,"nav",5)(37,"ul",6)(38,"li",7)(39,"a",8),v(40,"i",9),s(41," Previous "),c()(),l(42,"li",7)(43,"a",10),s(44," Next "),v(45,"i",11),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/system/properties",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["system-properties"]],decls:61,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/system/overview",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/system/extension",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Accessor Properties"),c(),v(8,"hr"),l(9,"p"),s(10," Accessor properties are methods that look like regular data properties from the outside but are invoked as methods internally when accessed as properties. This allows us to define custom logic for reading and writing the values of an object's properties, with more control over the property's behavior, such as how to validate or modify the input or output, unlike the data properties, which directly store a fixed value. "),c(),l(11,"p"),s(12," To enable the accessor property feature, you need to include the trait "),l(13,"code"),s(14,"DevNet\\System\\PropertyTrait"),c(),s(15," in your class. "),c(),l(16,"h3"),s(17,"Getter Accessor"),c(),l(18,"p"),s(19," The getter accessor is a function bound to a computed property and returns a value when that property is looked up. "),c(),l(20,"p"),s(21," Here is an example that shows how to define a getter accessor property, which is a method that has a property name prefixed with "),l(22,"code"),s(23,"get_"),c(),s(24," accessor and return a value. "),c(),l(25,"pre")(26,"code",4),s(27,"FirstName . ' ' . $this->LastName;\n }\n}\n"),c()(),l(28,"p"),s(29," And here how you can access the computed property: "),c(),l(30,"pre")(31,"code",4),s(32,'FirstName = "John";\n$person->LastName = "Doe";\n\n// Accessing the computed property.\nprint($person->FullName); // Output: John Doe\n'),c()(),v(33,"br"),l(34,"h3"),s(35,"Setter Accessor"),c(),l(36,"p"),s(37," The setter accessor is a function bound to a computed property and will be called when there is an attempt to set that property. "),c(),l(38,"p"),s(39," The following example shows how to define a setter accessor property as a method prefixed with "),l(40,"code"),s(41,"set_"),c(),s(42," accessor and take a value parameter to set object. "),c(),l(43,"pre")(44,"code",4),s(45,"FirstName = $segments[0] ?? '';\n $this->LastName = $segments[1] ?? '';\n }\n}\n"),c()(),l(46,"p"),s(47," And here how to set the computed property: "),c(),l(48,"pre")(49,"code",4),s(50,'FullName = "John Doe";\n\nprint($person->FirstName); // Output: John\nprint($person->LastName); // Output: Doe\n'),c()()(),l(51,"nav",5)(52,"ul",6)(53,"li",7)(54,"a",8),v(55,"i",9),s(56," Previous "),c()(),l(57,"li",7)(58,"a",10),s(59," Next "),v(60,"i",11),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/system/extension",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["system-extension"]],decls:73,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"text-justify"],[1,"alert","alert-info"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/system/properties",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/system/linq",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Extension Methods"),c(),v(8,"hr"),l(9,"p"),s(10," Extension methods are static methods that can be added to an existing class without modifying the class itself or creating a new derived one, and they can be called as if they were instance methods on that extended class. "),c(),l(11,"h3"),s(12,"Extended class"),c(),l(13,"p"),s(14," The extended class is the class that the extension method operates on, and must include the trait "),l(15,"code"),s(16,"DevNet\\System\\MethodTrait"),c(),s(17," to enable this feature like in the following code example: "),c(),l(18,"pre")(19,"code",4),s(20,"Salary - $employee->Salary * $tax;\n }\n}\n"),c()(),v(40,"br"),l(41,"h3"),s(42,"Calling the extension method"),c(),l(43,"p",5),s(44," To call an extension method as if it were an instance method on a particular extended class, the extension class must be brought into the same scope where that instance calls the extension method, using the keyword "),l(45,"code"),s(46,"use"),c()(),l(47,"pre")(48,"code",4),s(49,'Name = "John Doe";\n$employee->Salary = 25000;\n$tax = 0.15;\n\n// Calling the extension method as if it belongs to the employee instance.\n$income = $employee->getIncome($tax);\n\nprint("Income: {$income}$"); // Income: 21250$\n'),c()(),l(50,"p"),s(51," When calling the extension method, the first parameter will be skipped because it's the target reference, and the second parameter will become the first one, the third one will become the second one, and so on... "),c(),v(52,"br"),l(53,"blockquote",6)(54,"b"),s(55,"Note:"),c(),s(56," One of the best examples of extension methods is the "),l(57,"b"),s(58,"LINQ"),c(),s(59," methods that allow to perform queries on collections of type "),l(60,"code"),s(61,"IEnumerable"),c(),s(62,", More details about this feature in the upcoming section. "),c()(),l(63,"nav",7)(64,"ul",8)(65,"li",9)(66,"a",10),v(67,"i",11),s(68," Previous "),c()(),l(69,"li",9)(70,"a",12),s(71," Next "),v(72,"i",13),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/system/linq",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["system-linq"]],decls:137,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"language-shell"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/system/extension",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/system/generics",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Language Integrated Query"),c(),v(8,"hr"),l(9,"p"),s(10," LINQ, or Language Integrated Query, is an integration of query capabilities as expressions of extension methods against data, such as in-memory data, document databases, or SQL databases. "),c(),l(11,"p"),s(12," Any collection class of type "),l(13,"code"),s(14,"IEnumerable"),c(),s(15," or "),l(16,"code"),s(17,"IQueryable"),c(),s(18," that uses the "),l(19,"code"),s(20,"DevNet\\System\\MethodTrait"),c(),s(21," to support the extension method can take advantage of using LINQ extension methods. "),c(),l(22,"p"),s(23," The difference between "),l(24,"code"),s(25,"IEnumerable"),c(),s(26," and "),l(27,"code"),s(28,"IQueryable"),c(),s(29," types is that the implementation of the "),l(30,"code"),s(31,"IEnumerable"),c(),s(32," type, like the "),l(33,"code"),s(34,"ArrayList"),c(),s(35,", uses LINQ against in-memory data, while the implementation of the "),l(36,"code"),s(37,"IQueryable"),c(),s(38," type, like the "),l(39,"code"),s(40,"EntitySet"),c(),s(41," repository of DevNet DevNet ORM, uses LINQ against SQL database, which means that this one uses "),l(42,"code"),s(43,"IQueryProvider"),c(),s(44," to compile the predicate expressions of the LINQ methods to SQL query syntax. "),c(),l(45,"h3"),s(46,"Using LINQ extension methods"),c(),l(47,"p"),s(48," We use the "),l(49,"code"),s(50,"ArrayList"),c(),s(51," collection as an example to show you how to use the Linq extension methods with the "),l(52,"code"),s(53,"IEnumerable"),c(),s(54," collection and make sure to declare the namespace "),l(55,"code"),s(56,"DevNet\\System\\Linq"),c(),s(57," to be able to use those extension methods. "),c(),l(58,"pre")(59,"code",4),s(60,"first();\n$last = $list->last();\nprint("First employee is {$first->Name} with Id {$first->Id}\\n");\nprint("Last employee is {$last->Name} with Id {$last->Id}\\n");\n'),c()(),l(67,"h6"),s(68,"Output:"),c(),l(69,"pre")(70,"code",5),s(71,"First employee is bob with Id 1\nLast employee is ted with Id 6\n"),c()(),v(72,"br"),l(73,"h5"),s(74,"Filtering"),c(),l(75,"pre")(76,"code",4),s(77,'print("Employees with Id greater than 2\\n");\n\n$employees = $list->where(fn($employee) => $employee->Id > 2);\nforeach ($employees as $employee) {\n print("{$employee->Id} => {$employee->Name}\\n");\n}\n\nprint("\\n");\nprint("Employees with Name ted\\n");\n\n$employees = $list->where(fn($employee) => $employee->Name == \'ted\');\nforeach ($employees as $employee) {\n print("{$employee->Id} => {$employee->Name}\\n");\n}\n'),c()(),l(78,"h6"),s(79,"Output:"),c(),l(80,"pre")(81,"code",5),s(82,"Employees with Id greater than 2\n3 => ted\n4 => alice\n5 => carol\n6 => ted\n\nEmployees with Name ted\n3 => ted\n6 => ted\n"),c()(),v(83,"br"),l(84,"h5"),s(85,"Sorting"),c(),l(86,"pre")(87,"code",4),s(88,'print("Ascending order by Name\\n");\n\n$employees = $list->orderBy(fn($employee) => $employee->Name);\nforeach ($employees as $employee) {\nprint("{$employee->Id} => {$employee->Name}\\n");\n}\n\nprint("\\n");\nprint("Descending order by Id\\n");\n\n$employees = $list->orderByDescending(fn($employee) => $employee->Id);\nforeach ($employees as $employee) {\nprint("{$employee->Id} => {$employee->Name}\\n");\n}\n'),c()(),l(89,"h6"),s(90,"Output:"),c(),l(91,"pre")(92,"code",5),s(93,"Ascending order by Name\n4 => alice\n1 => bob \n2 => carol\n5 => carol\n3 => ted \n6 => ted \n\nDescending order by Id\n6 => ted \n5 => carol\n4 => alice\n3 => ted \n2 => carol\n1 => bob\n"),c()(),v(94,"br"),l(95,"h5"),s(96,"Paging"),c(),l(97,"pre")(98,"code",4),s(99,'// Skips the first 2 employees then take just 3 from the rest of employees.\n$employees = $list->skip(2)->take(3);\n\nforeach ($employees as $employee) {\n print("{$employee->Id} => {$employee->Name}\\n");\n}\n'),c()(),l(100,"h6"),s(101,"Output:"),c(),l(102,"pre")(103,"code",5),s(104,"3 => ted\n4 => alice\n5 => carol\n"),c()(),v(105,"br"),l(106,"h5"),s(107,"Aggregating"),c(),l(108,"pre")(109,"code",4),s(110,'$count = $list->count();\n$max = $list->max(fn($employee) => $employee->Id);\n$min = $list->min(fn($employee) => $employee->Id);\n\nprint("Total employees => {$count}\\n");\nprint("Max employee Id => {$max}\\n");\nprint("Min employee Id => {$min}\\n");\n'),c()(),l(111,"h6"),s(112,"Output:"),c(),l(113,"pre")(114,"code",5),s(115,"Total employees => 6\nMax employee Id => 6\nMin employee Id => 1\n"),c()(),v(116,"br"),l(117,"h5"),s(118,"Grouping"),c(),l(119,"pre")(120,"code",4),s(121,'// Creates a groups of employees share the same name.\n$groups = $list->groupBy(fn($employee) => $employee->Name);\n\nforeach ($groups as $group) {\n print("Total employees in {$group->Key} group => {$group->count()}\\n");\n}\n'),c()(),l(122,"h6"),s(123,"Output:"),c(),l(124,"pre")(125,"code",5),s(126,"Total employees in bob group => 1\nTotal employees in carol group => 2\nTotal employees in ted group => 2\nTotal employees in alice group => 1\n"),c()()(),l(127,"nav",6)(128,"ul",7)(129,"li",8)(130,"a",9),v(131,"i",10),s(132," Previous "),c()(),l(133,"li",8)(134,"a",11),s(135," Next "),v(136,"i",12),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/system/generics",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["system-generics"]],decls:137,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/system/extension",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/system/asynchronous",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Generic Types"),c(),v(8,"hr"),l(9,"p"),s(10," A generic type or parameterized type is a class with type parameters used in class operations without being specific to a particular data type, then defers the specification of these type parameters until the instantiation of the generic type to allow the code re-use. "),c(),l(11,"h3"),s(12,"Generic type parameter"),c(),l(13,"p"),s(14," The generic type parameter is a placeholder for a type that will be specified when an instance of the generic type is created. e.g. "),l(15,"code"),s(16,"TypeName"),c(),s(17," where "),l(18,"code"),s(19,"T"),c(),s(20," is a generic type parameter. "),c(),l(21,"p"),s(22," This feature can be added to your class by using the trait "),l(23,"code"),s(24,"DevNet\\System\\TypeTrait"),c(),s(25,". You can then define the generic type parameters using the attribute "),l(26,"code"),s(27,"DevNet\\System\\Template"),c(),s(28," on the generic class to specify the type parameters, and pass the generic type arguments via the constructor injection using the method "),l(29,"code"),s(30,"setGenericArguments()"),c()(),l(31,"p"),s(32," The type parameter can be used as the type of a method parameter using the attribute "),l(33,"code"),s(34,"DevNet\\System\\Type"),c(),s(35,", where the concrete type would ordinarily be used, and the method "),l(36,"code"),s(37,"checkArgumentTypes()"),c(),s(38," is the first to be called inside the method needed for the type checking. "),c(),l(39,"p"),s(40," Here is an example explaining how to create a generic class using this feature: "),c(),l(41,"pre")(42,"code",4),s(43,"setGenericArguments($typeName);\n }\n\n private function add(#[Type('T')] $item): void\n {\n // Checking the the type of the arguments before using them.\n $this->checkArgumentTypes(func_get_args());\n $this->items[] = $item;\n }\n\n public function getIterator(): Enumerator\n {\n return new Enumerator($this->items);\n }\n}\n"),c()(),v(44,"br"),l(45,"h3"),s(46,"Generic type argument"),c(),l(47,"p"),s(48," The generic type argument is a type that is passed to the generic type parameter when an instance of the generic type is created. e.g. "),l(49,"code"),s(50,"TypeName"),c(),s(51," where "),l(52,"code"),s(53,"string"),c(),s(54," is a generic type argument. "),c(),l(55,"p"),s(56," The following example uses the generic "),l(57,"code"),s(58,"Collection"),c(),s(59," class created in the previous example to show how to specify the actual type argument at the time of instantiation to make it work only with that specified type. "),c(),l(60,"pre")(61,"code",4),s(62,"Id = 1;\n$employee->Name = 'Alice';\n\n// Create an instance of type Collection\n$employees = new Collection(Employee::class);\n\n// Now this method accepts only arguments of type Employee, other wise will throw a TypeException.\n$employees->add($employee);\n"),c()(),v(63,"br"),l(64,"h3"),s(65,"Checking generic type"),c(),l(66,"p"),s(67," You can use the method "),l(68,"code"),s(69,"checkArgumentTypes()"),c(),s(70," to check the type of any method parameter, including the parameterized type defined in the "),l(71,"code"),s(72,"DevNet\\System\\Type"),c(),s(73," attribute. "),c(),l(74,"p"),s(75," The example below represents a class "),l(76,"code"),s(77,"EmployeeProvider"),c(),s(78," that accepts only the injection of "),l(79,"code"),s(80,"Collection"),c(),s(81," through the constructor. "),c(),l(82,"pre")(83,"code",4),s(84,"\n public function __construct(#[Type(Collection::class, [Employee::class])] $employees)\n {\n $this->checkArgumentTypes(func_get_args());\n $this->employees = $employees;\n }\n\n public function get(int $id): ?Employee\n {\n foreach ($this->employees as $employee) {\n if ($employee->Id == $id) {\n return $employee;\n }\n }\n return null;\n }\n}\n"),c()(),v(85,"br"),l(86,"h3"),s(87,"Multiple type parameters"),c(),l(88,"p"),s(89," As mentioned earlier, the generic class can have multiple type parameters, like a pair of key-value type parameters, which are demonstrated in the following example: "),c(),l(90,"pre")(91,"code",4),s(92,"setGenericArguments($keyTypeName, $valueTypeName);\n }\n\n private function add(#[Type('K')] $key, #[Type('V')] $value): void\n {\n $this->checkArgumentTypes(func_get_args());\n $this->items[$key()] = $value();\n }\n ...\n}\n"),c()(),v(93,"br"),l(94,"h3"),s(95,"Built-in generic collections"),c(),l(96,"p"),s(97," For rapid development, the DevNet Core library provides two types of generic collections: "),c(),l(98,"ul")(99,"li")(100,"code"),s(101,"ArrayList"),c(),s(102," an indexed generic collection, where the parameter "),l(103,"code"),s(104,"T"),c(),s(105," is the type of the items in the collection."),c(),l(106,"li")(107,"code"),s(108,"Dictionary"),c(),s(109," a key-value pairs generic collection, where the parameter "),l(110,"code"),s(111,"K"),c(),s(112," is the type of the keys, and the parameter "),l(113,"code"),s(114,"V"),c(),s(115," is the type of the values in the collection."),c()(),l(116,"h5"),s(117,"ArrayList Example:"),c(),l(118,"pre")(119,"code",4),s(120,".\n$array = new ArrayList('string');\n$array[] = 'Bob';\n\n// This will throw a TypeException because the key must be of type integer.\n$array['1'] = 'Alice';\n\n// This will throw a TypeException because the value must be of type string.\n$array[1] = 50;\n"),c()(),v(121,"br"),l(122,"h5"),s(123,"Dictionary Example:"),c(),l(124,"pre")(125,"code",4),s(126,".\n$array = new Dictionary('string', 'float');\n$array['width'] = 90.5;\n\n// This will throw a TypeException because the value must be of type float.\n$array['height'] = '50';\n\n// This will throw a TypeException because the key must be of type string.\n$array[1] = 50;\n"),c()()(),l(127,"nav",5)(128,"ul",6)(129,"li",7)(130,"a",8),v(131,"i",9),s(132," Previous "),c()(),l(133,"li",7)(134,"a",10),s(135," Next "),v(136,"i",11),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/system/asynchronous",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["system-asynchronous"]],decls:58,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"text-justify"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/system/generics",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/system/delegates",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Asynchronous Operations"),c(),v(8,"hr"),l(9,"p"),s(10," Asynchronous programming is a cooperative multitasking technique that allows the program to perform other operations while concurrently waiting for a long-running task to complete and then return the result when that task is complete. This technique is useful when working with an independent process that runs in the background or with I/O stream operations such as network access or database queries. "),c(),l(11,"h3"),s(12,"Coroutine Task"),c(),l(13,"p"),s(14," A coroutine task is an object that represents an asynchronous operation. It is used to perform work without blocking the main thread's execution by suspending and resuming the execution of the task's operations until the task completes and then returns a result on success or throws an exception on failure. "),c(),l(15,"pre")(16,"code",4),s(17,"wait();\nwhile (true) {\n if ($task->IsCompleted) {\n break;\n }\n}\n\ntry {\n // Getting the result when the task is completed.\n $result = $task->Result;\n} catch ($exception $e) {\n // Logging the error report if the task is failed.\n}\n"),c()(),v(18,"br"),l(19,"h3"),s(20,"Continuation Task"),c(),l(21,"p",5),s(22," A continuation task is an asynchronous task that is chained to another task by calling the "),l(23,"code"),s(24,"then()"),c(),s(25," method which will be executed when its antecedent task completes its execution. "),c(),l(26,"pre")(27,"code",4),s(28,"then(function($task1) {\n $data = $task1->Result;\n return json_decode($data);\n });\n\n return $task2;\n}\n\n$task = readJsonAsync('path/to/data.json');\n$data = $task->Result;\n"),c()(),v(29,"br"),l(30,"h3"),s(31,"Async/Await Pattern"),c(),l(32,"p"),s(33," The async/await pattern is a feature related to the coroutine concept, where the async function can use the await operator to suspend the asynchronous operation until that operation completes and then returns a result. This enables asynchronous non-blocking functions to be structured like normal synchronous functions in the enclosing scope without blocking the main thread during the execution of the async function, which also returns a task object that represents an asynchronous operation and provides a result when the task completes successfully. "),c(),l(34,"pre")(35,"code",4),s(36,"readAsync($file->Length));\n $data = json_decode($json);\n\n $file->close();\n return $data;\n});\n\n$task = $readJsonAsync('path/to/data.json');\n$data = $task->getAwaiter()->getResult();\n"),c()(),l(37,"p"),s(38," Here is the same example in an object-oriented way, where the async method must be prefixed with the "),l(39,"code"),s(40,"async_"),c(),s(41," keyword, and the class that has the async method must use the trait "),l(42,"code"),s(43,"DevNet\\System\\MethodTrait"),c(),s(44," to enable this feature. "),c(),l(45,"pre")(46,"code",4),s(47,"readAsync($file->Length));\n $data = json_decode($json);\n \n $file->close();\n return $data;\n });\n}\n\n$reader = new Reader();\n$task = $reader->readJsonAsync('path/to/data.json');\n$data = $task->getAwaiter()->getResult();\n"),c()()(),l(48,"nav",6)(49,"ul",7)(50,"li",8)(51,"a",9),v(52,"i",10),s(53," Previous "),c()(),l(54,"li",8)(55,"a",11),s(56," Next "),v(57,"i",12),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/system/delegates",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["system-delegates"]],decls:111,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/system/asynchronous",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/web/start",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Delegates & Events"),c(),v(8,"hr"),l(9,"p"),s(10," A delegate is a type that holds references to methods or functions with a particular signature of parameters and return type, and any method or function compatible with the delegate signature can be associated with the instance of that delegate and can be called by invoking the delegate instance. "),c(),l(11,"h3"),s(12,"Defining the delegate"),c(),l(13,"p"),s(14," A delegate is constructed by extending the abstract class Delegate, defining the method signature with an empty body, and having the same name as the name of the defined delegate class, as shown in the code example below. "),c(),l(15,"pre")(16,"code",4),s(17,"invoke($args);\n}\n"),c()(),v(42,"br"),l(43,"h3"),s(44,"Event"),c(),l(45,"p"),s(46," An event is a special type of delegate that enables an object to notify other objects when something of interest occurs, where the class that sends or raises the event is called the publisher (other names: sender, subject), and the classes that receive or handle the event are called subscribers (other names: receivers, observers, listeners, handlers). "),c(),l(47,"h5"),s(48,"Event Handler"),c(),l(49,"p"),s(50," DevNet provides an easy way to subscribe to the event by using "),l(51,"code"),s(52,"DevNet\\System\\Event\\EventHandler"),c(),s(53,", which has the following delegate signature "),l(54,"code"),s(55,"function(object $sender, EventArgs $args): void"),c()(),l(56,"ul")(57,"li")(58,"b"),s(59,"$sender:"),c(),s(60," ("),l(61,"code"),s(62,"object"),c(),s(63,") represents the publisher that raises the event, and the reason for passing the sender as a parameter to the handler, is because the handler can be subscribed to multiple publishers, and sometimes we need to know which publisher raises the event."),c(),l(64,"li")(65,"b"),s(66,"$args:"),c(),s(67," ("),l(68,"code"),s(69,"DevNet\\System\\Event\\EventArgs"),c(),s(70,") represents the event arguments to be handled by the handler."),c()(),l(71,"p"),s(72," The example below represents a "),l(73,"code"),s(74,"Button"),c(),s(75," class as a publisher with two events: The "),l(76,"code"),s(77,"click"),c(),s(78," and "),l(79,"code"),s(80,"keypress"),c(),s(81," events, which can be associated with event listeners. "),c(),l(82,"pre")(83,"code",4),s(84,"Title = $title;\n $this->click = new EventHandler();\n $this->keypress = new EventHandler();\n }\n\n public function addListener(string $event, callable $handler): void\n {\n switch($event) {\n case 'click':\n $this->click[] = $handler;\n break;\n case 'keypress':\n $this->keypress[] = $handler;\n break;\n default:\n throw \\Exception(\"The event {$event} does not exist!\");\n }\n }\n\n public function click(): void\n {\n $this->click->invoke($this, new EventArgs);\n }\n\n public function keypress(): void\n {\n $this->keypress->invoke($this, new EventArgs);\n }\n}\n"),c()(),l(85,"p"),s(86," And the following example represents a "),l(87,"code"),s(88,"Window"),c(),s(89," class as a subscriber that can subscribe handlers to the "),l(90,"code"),s(91,"Button"),c(),s(92," events. "),c(),l(93,"pre")(94,"code",4),s(95,"Title = $title;\n $this->MyButton = new Button(\"My button\");\n // Subscribe to the click event.\n $this->MyButton->addListener('click', [$this, 'onMyButtonClick']);\n }\n\n public function onMyButtonClick(object $sender, EventArgs $event): void\n {\n print(\"{$sender->Title} was clicked\");\n }\n}\n"),c()(),l(96,"p"),s(97," And here is a working example of triggering the click event of the Window's button. "),c(),l(98,"pre")(99,"code",4),s(100,'MyButton->click();\n'),c()()(),l(101,"nav",5)(102,"ul",6)(103,"li",7)(104,"a",8),v(105,"i",9),s(106," Previous "),c()(),l(107,"li",7)(108,"a",10),s(109," Next "),v(110,"i",11),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/system",redirectTo:"docs/system/overview",pathMatch:"full"}];let Q2=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[jt.forChild(Z2),jt]})}return e})(),X2=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[Yr,Q2,So]})}return e})();const J2=[{path:"docs/console/start",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["console-start"]],decls:78,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-shell"],[1,"language-php"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/setup/deployment",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/console/output",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Console Application"),c(),v(8,"hr"),l(9,"p"),s(10," This chapter shows how to create and run a DevNet console application. "),c(),l(11,"h3"),s(12,"Create Console Project"),c(),l(13,"p"),s(14," To create a DevNet console project, enter the command below in the Terminal, where the argument "),l(15,"code"),s(16,"project-name"),c(),s(17," is any name you give to your project: "),c(),l(18,"pre")(19,"code",4),s(20,"devnet new console --output project-name"),c()(),l(21,"p"),s(22," Or, using the composer command-line: "),c(),l(23,"pre")(24,"code",4),s(25,"composer create-project devnet/console project-name"),c()(),v(26,"br"),l(27,"h4"),s(28,"Project Structure"),c(),l(29,"p"),s(30," The DevNet console project has the following folder structure: "),c(),l(31,"pre")(32,"code",4),s(33,"console-project/\n\u251c\u2500\u2500 bin/\n| \u251c\u2500\u2500 apphost\n| \u251c\u2500\u2500 run.bat\n| \u2514\u2500\u2500 run\n\u251c\u2500\u2500 src/\n| \u2514\u2500\u2500 Program.php\n\u251c\u2500\u2500 vendor/\n\u2514\u2500\u2500 devnet.proj"),c()(),v(34,"br"),l(35,"h4"),s(36,"Entry Point"),c(),l(37,"p"),s(38," By default, the entry point is the static method "),l(39,"code"),s(40,"Application\\Program::main(array $args)"),c(),s(41,", but you can change that in the project file "),l(42,"code"),s(43,"devnet.proj"),c()(),l(44,"pre")(45,"code",5),s(46,'{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["console-output"]],decls:211,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"language-shell"],[1,"table"],["scope","col"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/console/start",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/console/input",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Console Output"),c(),v(8,"hr"),l(9,"p"),s(10," Console output is the text that is printed to the console screen or terminal window when a program is run, by writing data to the standard output stream. "),c(),l(11,"h3"),s(12,"Write to the console"),c(),l(13,"p"),s(14," To write data to the standard output stream, the following static methods are used: "),c(),l(15,"ul")(16,"li")(17,"code"),s(18,"DevNet\\System\\IO\\Console::write(string, $format, array|string ...$args)"),c()(),l(19,"li")(20,"code"),s(21,"DevNet\\System\\IO\\Console::writeLine(string, $format, array|string ...$args)"),c()()(),l(22,"p"),s(23," Both methods are similar, except that "),l(24,"code"),s(25,"Console::writeLine()"),c(),s(26," prints data along with a new line at the end of the output, while the "),l(27,"code"),s(28,"Console::write()"),c(),s(29," prints data without adding a new line, as shown in the following example. "),c(),l(30,"pre")(31,"code",4),s(32,'value, $color->name);\n }\n\n Console::writeLine();\n Console::$ForegroundColor = ConsoleColor::Black;\n Console::$BackgroundColor = ConsoleColor::White;\n Console::writeLine("List of the background colors:");\n Console::resetColor();\n\n foreach (ConsoleColor::cases() as $color) {\n Console::$BackgroundColor = $color;\n Console::writeLine("The background color {0} is {1}", $color->value, $color->name);\n }\n\n Console::resetColor();\n }\n}\n'),c()(),v(105,"br"),l(106,"h4"),s(107,"Colors"),c(),l(108,"p"),s(109," The enumeration "),l(110,"code"),s(111,"DevNet\\System\\IO\\ConsoleColor"),c(),s(112,", that defines the foreground and background colors for the console window, has the following fields: "),c(),l(113,"table",6)(114,"thead")(115,"tr")(116,"th",7),s(117,"Name"),c(),l(118,"th",7),s(119,"Code"),c()()(),l(120,"tbody")(121,"tr")(122,"td"),s(123,"Black"),c(),l(124,"td"),s(125,"0"),c()(),l(126,"tr")(127,"td"),s(128,"DarkGrey"),c(),l(129,"td"),s(130,"1"),c()(),l(131,"tr")(132,"td"),s(133,"DarkRed"),c(),l(134,"td"),s(135,"2"),c()(),l(136,"tr")(137,"td"),s(138,"DarkMagenta"),c(),l(139,"td"),s(140,"3"),c()(),l(141,"tr")(142,"td"),s(143,"DarkBlue"),c(),l(144,"td"),s(145,"4"),c()(),l(146,"tr")(147,"td"),s(148,"DarkCyan"),c(),l(149,"td"),s(150,"5"),c()(),l(151,"tr")(152,"td"),s(153,"DarkGreen"),c(),l(154,"td"),s(155,"6"),c()(),l(156,"tr")(157,"td"),s(158,"DarkYellow"),c(),l(159,"td"),s(160,"7"),c()(),l(161,"tr")(162,"td"),s(163,"Gray"),c(),l(164,"td"),s(165,"8"),c()(),l(166,"tr")(167,"td"),s(168,"Red"),c(),l(169,"td"),s(170,"9"),c()(),l(171,"tr")(172,"td"),s(173,"Magenta"),c(),l(174,"td"),s(175,"10"),c()(),l(176,"tr")(177,"td"),s(178,"Blue"),c(),l(179,"td"),s(180,"11"),c()(),l(181,"tr")(182,"td"),s(183,"Cyan"),c(),l(184,"td"),s(185,"12"),c()(),l(186,"tr")(187,"td"),s(188,"Green"),c(),l(189,"td"),s(190,"13"),c()(),l(191,"tr")(192,"td"),s(193,"Yellow"),c(),l(194,"td"),s(195,"14"),c()(),l(196,"tr")(197,"td"),s(198,"White"),c(),l(199,"td"),s(200,"15"),c()()()()(),l(201,"nav",8)(202,"ul",9)(203,"li",10)(204,"a",11),v(205,"i",12),s(206," Previous "),c()(),l(207,"li",10)(208,"a",13),s(209," Next "),v(210,"i",14),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/console/input",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["console-input"]],decls:66,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"language-shell"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/console/output",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/console/command",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Console Input"),c(),v(8,"hr"),l(9,"p"),s(10," Console input is the input data that is entered by the user through the console window, to interact with system programs or other console applications. "),c(),l(11,"h3"),s(12,"User input"),c(),l(13,"p"),s(14," The static method "),l(15,"code"),s(16,"DevNet\\System\\IO\\Console::readLine()"),c(),s(17,", is used to read the user input data from the standard input stream. "),c(),l(18,"p"),s(19," In the following example, the program prompts the user to enter his name, then reads the user input data and prints it in a greeting message. "),c(),l(20,"pre")(21,"code",4),s(22,'{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["console-command"]],decls:147,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-shell"],[1,"table"],["scope","col"],[1,"language-php"],[1,"alert","alert-info"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/console/input",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/system/overview",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Command-Line Dispatcher"),c(),v(8,"hr"),l(9,"p"),s(10," The command-line dispatcher is a component used for building command-line applications, it provides a way to organize functionality into logical groups by creating a hierarchy of commands that can be navigated using subcommands, options, and arguments to execute particular actions, like providing the help information for the application. "),c(),l(11,"h3"),s(12,"Command-line syntax"),c(),l(13,"p"),s(14," The command-line parser will parse the input into tokens, which are strings delimited by spaces interpreted as commands, options, and arguments. "),c(),l(15,"p"),s(16," For example, consider the following command line: "),c(),l(17,"pre")(18,"code",4),s(19,"devnet add class --output MyClass"),c()(),l(20,"p"),s(21," The following table shows how the command-line parser interprets the preceding example: "),c(),l(22,"table",5)(23,"thead")(24,"tr")(25,"th",6),s(26,"Token"),c(),l(27,"th",6),s(28,"Description"),c()()(),l(29,"tbody")(30,"tr")(31,"td"),s(32,"devnet"),c(),l(33,"td"),s(34,"Root command"),c()(),l(35,"tr")(36,"td"),s(37,"add"),c(),l(38,"td"),s(39,"Child command"),c()(),l(40,"tr")(41,"td"),s(42,"class"),c(),l(43,"td"),s(44,"Argument for "),l(45,"b"),s(46,"add"),c(),s(47," command"),c()(),l(48,"tr")(49,"td"),s(50,"--output"),c(),l(51,"td"),s(52,"Option for "),l(53,"b"),s(54,"add"),c(),s(55," command"),c()(),l(56,"tr")(57,"td"),s(58,"MyClass"),c(),l(59,"td"),s(60,"Argument for "),l(61,"b"),s(62,"--output"),c(),s(63," option"),c()()()(),l(64,"h4"),s(65,"Root command"),c(),l(66,"p"),s(67," The root command is the top-level command that is executed when the application is run, is the one that specifies the name of the app's executable, and can accept parameters, such as subcommands, options, and arguments. "),c(),l(68,"h4"),s(69,"Child commands"),c(),l(70,"p"),s(71," The child commands, also known as subcommands or verbs, are commands nested within another, used to specify a particular action, and can accept additional subcommands as parameters, as well as options and arguments. "),c(),l(72,"h4"),s(73,"Options"),c(),l(74,"p"),s(75," Options are named parameters passed to a command optionally to modify its behavior, and they can accept an argument or be just flags without it. "),c(),l(76,"h4"),s(77,"Arguments"),c(),l(78,"p"),s(79," Arguments are values passed to a command or an option to provide additional information. "),c(),v(80,"br"),l(81,"h3"),s(82,"Define commands"),c(),l(83,"p"),s(84," You can define a root command, with some options and arguments, by creating an instance of the class "),l(85,"code"),s(86,"DevNet\\System\\Command\\CommandLine"),c(),s(87,", then you can define subcommands in the same way and add them to it. "),c(),l(88,"p"),s(89," The following code example is a command line application that can display the time according to the specified timezone. "),c(),l(90,"pre")(91,"code",7),s(92,"addOption('--version', 'Display the version information.', '-v');\n\n $rootCommand->setHandler(function (object $sender, CommandEventArgs $args): void {\n $version = $args->get('--version');\n if ($version) {\n Console::writeLine(\"watch command-line: v1.0.0\");\n return;\n }\n\n Console::writeLine(\"Try 'watch --help' to get information about the command's usage.\");\n });\n\n // Defines the child command.\n $subcommand = new CommandLine('time', 'Display the current time');\n $subcommand->addArgument('timezone', 'Define the time zone');\n\n $subcommand->setHandler(function (object $sender, CommandEventArgs $args): void {\n $datetime = new DateTime('now');\n $timezone = $args->get('timezone');\n if ($timezone) {\n $datetime->setTimezone(new DateTimeZone($timezone->Value));\n }\n\n Console::writeLine($datetime->format('H:i:s'));\n }\n\n // Adds the child command.\n $rootCommand->addCommand($subcommand);\n\n // Parsing the input, then invoking the command.\n $rootCommand->invoke($args);\n }\n}\n"),c()(),l(93,"blockquote",8)(94,"b"),s(95,"Note:"),c(),s(96," You can run your command-line application by executing the bin file of your application "),l(97,"code"),s(98,"./bin/run"),c()(),l(99,"p"),s(100," In this example, we have renamed the bin files "),l(101,"code"),s(102,"./bin/run"),c(),s(103," and "),l(104,"code"),s(105,"./bin/run.bat"),c(),s(106," to "),l(107,"code"),s(108,"./bin/watch"),c(),s(109," and "),l(110,"code"),s(111,"./bin/watch.bat"),c(),s(112," to match the name of the root command. "),c(),l(113,"p"),s(114," Now you can execute the command with a given time zone argument to get the current time of that zone. "),c(),l(115,"pre")(116,"code",4),s(117,"./bin/watch time America/Toronto"),c()(),l(118,"h5"),s(119,"Output"),c(),l(120,"pre")(121,"code",4),s(122,"19:29:01"),c()(),v(123,"br"),l(124,"p"),s(125," Or execute the command with the option "),l(126,"code"),s(127,"--version"),c(),s(128," to get the version information. "),c(),l(129,"pre")(130,"code",4),s(131,"./bin/watch --version"),c()(),l(132,"h5"),s(133,"Output"),c(),l(134,"pre")(135,"code",4),s(136,"watch command-line: v1.0.0"),c()()(),l(137,"nav",9)(138,"ul",10)(139,"li",11)(140,"a",12),v(141,"i",13),s(142," Previous "),c()(),l(143,"li",11)(144,"a",14),s(145," Next "),v(146,"i",15),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/console",redirectTo:"docs/console/start",pathMatch:"full"}];let e$=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[jt.forChild(J2),jt]})}return e})(),t$=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[Yr,e$,So]})}return e})();const n$=[{path:"docs/web/start",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["web-start"]],decls:121,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-shell"],[1,"language-php"],[1,"alert","alert-info"],["href","http://localhost:8000"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/system/delegates",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/web/http",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Web Application"),c(),v(8,"hr"),l(9,"p"),s(10," DevNet web application is based on Middleware architecture with Action-Domain-Responder architectural pattern, which is suitable for creating a minimal web APIs, but it supports also Model-View-Controller architectural pattern which is available as an action dispatcher with a template engine that can be integrated into the services and invoked in the middleware endpoint. "),c(),l(11,"h3"),s(12,"Create a web project"),c(),l(13,"p"),s(14," To create a DevNet web project, enter the command below in the Terminal, where the argument "),l(15,"code"),s(16,"project-name"),c(),s(17," is any name you give to your web project: "),c(),l(18,"pre")(19,"code",4),s(20,"devnet new web --output project-name"),c()(),l(21,"p"),s(22," Or, using the composer command-line: "),c(),l(23,"pre")(24,"code",4),s(25,"composer create-project devnet/web project-name"),c()(),l(26,"p"),s(27," You can also create a DevNet web project from MVC template: "),c(),l(28,"pre")(29,"code",4),s(30,"composer create-project devnet/mvc project-name"),c()(),v(31,"br"),l(32,"h4"),s(33,"Project Structure"),c(),l(34,"p"),s(35," The DevNet web project has the following folder structure: "),c(),l(36,"pre")(37,"code",4),s(38,"web-project/\n\u251c\u2500\u2500 bin/\n| \u251c\u2500\u2500 apphost\n| \u251c\u2500\u2500 run.bat\n| \u2514\u2500\u2500 run\n\u251c\u2500\u2500 src/\n| \u2514\u2500\u2500 Program.php\n\u251c\u2500\u2500 webroot/\n| \u251c\u2500\u2500 css/\n| \u251c\u2500\u2500 js/\n| \u251c\u2500\u2500 lib/\n| \u251c\u2500\u2500 .htaccess\n| \u251c\u2500\u2500 index.php\n| \u2514\u2500\u2500 web.config\n\u251c\u2500\u2500 vendor/\n\u251c\u2500\u2500 devnet.proj\n\u2514\u2500\u2500 settings.json"),c()(),v(39,"br"),l(40,"h4"),s(41,"Entry Point"),c(),l(42,"p"),s(43," Like the console project, the entry point by default is the static method "),l(44,"code"),s(45,"Application\\Program::main(array $args)"),c(),s(46,", and you can change that in the project file: "),l(47,"samp"),s(48,'"devnet.proj"'),c()(),l(49,"p"),s(50," The entry point method calls the static method "),l(51,"code"),s(52,"WebHost::createDefaultBuilder(array $args)"),c(),s(53," to create a "),l(54,"code"),s(55,"WebHostBuilder"),c(),s(56," instance which can configure services through the method "),l(57,"code"),s(58,"register()"),c(),s(59,", and builds a "),l(60,"code"),s(61,"WebHost"),c(),s(62," instance which calls the "),l(63,"code"),s(64,"start()"),c(),s(65," method to configure the app's request pipeline, then runs the application as shown in the code below: "),c(),l(66,"pre")(67,"code",5),s(68,'register(function ($services) {\n // Services\n });\n\n $host = $builder->build();\n $host->start(function ($app) {\n // Middlewares\n $app->useRouter();\n $app->useEndpoint(function ($routes) {\n // Routes\n $routes->mapGet("/", fn () => "Hello World!");\n });\n });\n }\n}'),c()(),l(69,"blockquote",6)(70,"b"),s(71,"Note:"),c(),s(72," Working with services, middlewares and routes will be discussed in details in the upcoming sections."),c(),v(73,"br"),l(74,"h3"),s(75,"Run the application"),c(),l(76,"p"),s(77," To run the web application, run the following command in the Terminal : "),c(),l(78,"pre")(79,"code",4),s(80,"devnet run"),c()(),l(81,"p"),s(82," This will start the development web server at "),l(83,"a",7),s(84,"http://localhost:8000"),c(),s(85," in "),l(86,"samp"),s(87,"/webroot"),c(),s(88," folder, and optionally you can override this default server settings by adding arguments to the following parameters "),l(89,"code"),s(90,"--host"),c(),s(91,", "),l(92,"code"),s(93,"--port"),c(),s(94," and "),l(95,"code"),s(96,"--root"),c(),s(97," to the "),l(98,"code"),s(99,"run"),c(),s(100," command in the terminal like the following example: "),c(),l(101,"pre")(102,"code",4),s(103,"devnet run --host 127.0.0.1 --port 8888 --root webroot"),c()(),l(104,"blockquote",6)(105,"b"),s(106,"Note:"),c(),s(107," In Visual Studio Code with the PHP Xdebug extension, you can press the "),l(108,"b"),s(109,"F5"),c(),s(110," key button to launch the application in debug mode."),c()(),l(111,"nav",8)(112,"ul",9)(113,"li",10)(114,"a",11),v(115,"i",12),s(116," Previous "),c()(),l(117,"li",10)(118,"a",13),s(119," Next "),v(120,"i",14),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/web/http",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["web-http"]],decls:157,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"text-justify"],[1,"language-php"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/web/start",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/web/middleware",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"HTTP Client-Server "),c(),v(8,"hr"),l(9,"h3"),s(10,"Http Server"),c(),l(11,"p",4),s(12," DevNet provides the HttpContext class which encapsulates all HTTP information about the HTTP server request received from the client, and HTTP server response that will be sent to the client. "),c(),l(13,"p",4),s(14," HttpContext already injected in the your application, and you can access it through middlewares and request handler endpoints, but if you want to use HttpContext as a third-party component to another project than DevNet, you can create an instance of HttpContext using "),l(15,"code"),s(16,"HttpContextFactory"),c(),s(17," it will create a default instance with global server variables. "),c(),l(18,"pre")(19,"code",5),s(20,"Request->Method;"),c()(),v(37,"br"),l(38,"h6"),s(39,"The Request URL"),c(),l(40,"pre")(41,"code",5),s(42,"$scheme = $httpContext->Request->Scheme;\n$host = $httpContext->Request->Host->Name;\n$port = $httpContext->Request->Host->Port;\n$path = $httpContext->Request->Path;\n$url = $scheme . '://' . $host . $path;"),c()(),v(43,"br"),l(44,"h6"),s(45,"The Request Query"),c(),l(46,"pre")(47,"code",5),s(48,"$query = $httpContext->Request->Query;\n$value = $query->getValue('name');"),c()(),l(49,"h6"),s(50,"The Request Form"),c(),l(51,"pre")(52,"code",5),s(53,"$form = $httpContext->Request->Form;\n$value = $form->getValue('name');"),c()(),v(54,"br"),l(55,"h6"),s(56,"The Request From Files"),c(),l(57,"pre")(58,"code",5),s(59,"$files = $httpContext->Request->Form->Files;\n$file = $files->getFile('name');\n \n$file->copyTo('path');"),c()(),v(60,"br"),l(61,"h6"),s(62,"The Request Headers"),c(),l(63,"pre")(64,"code",5),s(65,"$headers = $httpContext->Request->Headers;\n$values = $headers->getValues('name');\n$value = $values[0];"),c()(),v(66,"br"),l(67,"h6"),s(68,"The Request Cookies"),c(),l(69,"pre")(70,"code",5),s(71,"$cookies = $httpContext->Request->Cookies;\n$value = $cookies->getValue('name');"),c()(),v(72,"br"),l(73,"h4"),s(74,"Http Response"),c(),l(75,"p",4),s(76," You can access the "),l(77,"code"),s(78,"HttpResponse"),c(),s(79," property from the "),l(80,"code"),s(81,"HttpContext"),c(),s(82," and set the HTTP response data as shown below. "),c(),l(83,"h6"),s(84,"Adding Response Header"),c(),l(85,"pre")(86,"code",5),s(87,"$httpContext->Response->Headers->add('name', 'value', replace: true);"),c()(),v(88,"br"),l(89,"h6"),s(90,"Adding Response Cookie"),c(),l(91,"pre")(92,"code",5),s(93,"$options = new \\DevNet\\Http\\Message\\CookieOptions(expires: new DateTime('7 days'), path: '/');\n$httpContext->Response->Cookies->add('name', 'value', $options);"),c()(),v(94,"br"),l(95,"h6"),s(96,"Writing Response Content"),c(),l(97,"pre")(98,"code",5),s(99,"$httpContext->Response->Body->write('content');"),c()(),v(100,"br"),l(101,"h6"),s(102,"Writing Response Content Asynchronously"),c(),l(103,"pre")(104,"code",5),s(105,"$task = $httpContext->Response->writeAsync('content');\n$task = $httpContext->Response->writeJsonAsync($object);"),c()(),v(106,"br"),l(107,"h6"),s(108,"Send Redirect Response"),c(),l(109,"pre")(110,"code",5),s(111,"$httpContext->Response->redirect('path');"),c()(),v(112,"br"),l(113,"h6"),s(114,"Set Response Status Code"),c(),l(115,"pre")(116,"code",5),s(117,"$httpContext->Response->setStatusCode(403);"),c()(),v(118,"br"),l(119,"h4"),s(120,"Http Client"),c(),l(121,"p",4),s(122," DevNet Provides a "),l(123,"code"),s(124,"HttpClient"),c(),s(125," class for sending HTTP requests to a web API server and receiving back HTTP responses. "),c(),l(126,"pre")(127,"code",5),s(128,"requestAsync('GET', 'www.example.com');\n $response = await($task);\n $content = null;\n while(!$response->Body->EndOfStream) {\n $content .= await($response->Body->readAsync(1024));\n }\n return $content;\n});\n\n$task = $action();"),c()(),v(129,"br"),l(130,"h6"),s(131,"Send request content"),c(),l(132,"pre")(133,"code",5),s(134,"$form = \"Username=john_doe&Password=123456\";\n$content = new HttpRequestContent('application/x-www-form-urlencoded', $form);\n$task = $client->requestAsync('POST', 'www.example.com', $content);"),c()(),v(135,"br"),l(136,"h6"),s(137,"Send HTTP method request using short calls"),c(),l(138,"pre")(139,"code",5),s(140,"$task = $client->getRequestAsync('www.example.com', $requestContent);\n$task = $client->postRequestAsync('www.example.com', $requestContent);\n$task = $client->putRequestAsync('www.example.com', $requestContent);\n$task = $client->deleteRequestAsync('www.example.com', $requestContent);"),c()(),v(141,"br"),l(142,"h6"),s(143,"Send get request that returns response content"),c(),l(144,"pre")(145,"code",5),s(146,"$task = $client->getStringAsync('www.example.com');"),c()()(),l(147,"nav",6)(148,"ul",7)(149,"li",8)(150,"a",9),v(151,"i",10),s(152," Previous "),c()(),l(153,"li",8)(154,"a",11),s(155," Next "),v(156,"i",12),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/web/middleware",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["web-middleware"]],decls:92,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],["src","assets/images/middleware.svg","alt","Web app home page","width","100%","height","auto"],[1,"language-php"],[1,"table"],["scope","col"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/core/http",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/web/routing",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Middleware"),c(),v(8,"hr"),l(9,"p"),s(10," Middlewares are software components that are chained into the application pipeline to handle HTTP requests and responses, Each middleware component in the request pipeline is responsible for invoking the next component called Request Delegate, till reaching the endpoint of the application, and can perform work before and after the next component in the pipeline or short-circuiting the chain to prevent the next middlewares from processing the request. "),c(),l(11,"p"),s(12," The following diagram represents the DevNet request pipeline, which consists of a sequence of request delegates, called one after the other. "),c(),v(13,"br")(14,"img",4)(15,"br")(16,"br")(17,"br"),l(18,"p"),s(19," The following code represents an example of a middleware class called "),l(20,"code"),s(21,"RedirectMiddleware"),c(),s(22,", it redirects the old URL requested that has been changed permanently to the new URL before the request gets to the Router middleware. "),c(),l(23,"pre")(24,"code",5),s(25,'Request->Uri->Path == "/old/path") {\n $context->Response->setStatusCode(301);\n $context->Response->redirect("/new/path");\n return;\n }\n // Await next request delegate to chain the pipeline to the next middleware or endpoint.\n await($next($context));\n // Logging or other works can be done here after calling the next request delegate.\n }\n}'),c()(),v(26,"br"),l(27,"h3"),s(28,"Registering Middlewares"),c(),l(29,"p"),s(30," Inside the method "),l(31,"code"),s(32,"WebHost::start(Closure $configure)"),c(),s(33,", middlewares can be registered to the pipeline as a class that implements the interface "),l(34,"code"),s(35,"DevNet\\Http\\Middleware\\IMiddleware"),c(),s(36," or as an in-line middleware defined by an anonymous async function, with the help of the following methods: "),c(),l(37,"ul")(38,"li")(39,"code"),s(40,"ApplicationBuilder::use(callable $middleware)"),c()(),l(41,"li")(42,"code"),s(43,"ApplicationBuilderExtensions::useMiddleware(string $middleware, ...$args)"),c()()(),l(44,"pre")(45,"code",5),s(46,"start(function ($app) {\n $app->UseExceptionHandler();\n\n // Using middleware class\n $app->useMiddleware(RedirectMiddleware::class);\n $app->useRouter();\n\n // Using in-line middleware\n $app->use(async(function($context, $next) { //;\n // Some works can be done here before calling the next request delegate.\n await($next($context));\n // Other works can be done here after calling the next request delegate.\n }));\n\n // Other middlewares can be used here.\n\n $app->useEndpoint(function($routes) {\n // Routes\n });\n});"),c()(),v(47,"br"),l(48,"h3"),s(49,"Built-in middlewares"),c(),l(50,"table",6)(51,"thead")(52,"tr")(53,"th",7),s(54,"Method"),c(),l(55,"th",7),s(56,"Description"),c()()(),l(57,"tbody")(58,"tr")(59,"td")(60,"code"),s(61,"ApplicationBuilder::useExceptionHandler()"),c()(),l(62,"td"),s(63,"add ExceptionHandler middleware to the pipeline"),c()(),l(64,"tr")(65,"td")(66,"code"),s(67,"ApplicationBuilder::useRouter()"),c()(),l(68,"td"),s(69,"add Router matcher middleware to the pipeline"),c()(),l(70,"tr")(71,"td")(72,"code"),s(73,"ApplicationBuilder::useAuthentication()"),c()(),l(74,"td"),s(75,"add Authentication middleware to the pipeline"),c()(),l(76,"tr")(77,"td")(78,"code"),s(79,"ApplicationBuilder::useEndpoint()"),c()(),l(80,"td"),s(81,"add Endpoint dispatcher middleware to the pipeline"),c()()()()(),l(82,"nav",8)(83,"ul",9)(84,"li",10)(85,"a",11),v(86,"i",12),s(87," Previous "),c()(),l(88,"li",10)(89,"a",13),s(90," Next "),v(91,"i",14),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/web/routing",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["web-routing"]],decls:200,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"table"],["scope","col",1,"col-md-6"],["scope","col",1,"col-md-4"],["scope","col",1,"col-3"],[1,"alert","alert-warning"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/web/middleware",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/web/controller",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Routing"),c(),v(8,"hr"),l(9,"p"),s(10," The router is a component responsible for matching incoming HTTP requests and dispatching those requests to the app's executable endpoints, which are executable actions responsible for request-handling, defined and configured in the application builder, and selected and executed when request URL matches a defined URL Pattern called Route Template. "),c(),l(11,"p"),s(12," The endpoint matching process can also filter HTTP requests by allowing restraint HTTP Verbs and can extract values from the request's URL and provide those values for request processing."),v(13,"br"),s(14," Routing is also able to generate URLs that map to endpoints. "),c(),l(15,"h3"),s(16,"Routing basics"),c(),l(17,"p"),s(18," Router is registered in the middleware pipeline in the "),l(19,"code"),s(20,"start()"),c(),s(21," method of "),l(22,"code"),s(23,"WebHost"),c(),s(24," class."),v(25,"br"),s(26," by using a pair of middleware, defined by "),l(27,"code"),s(28,"useRouter()"),c(),s(29," and "),l(30,"code"),s(31,"useEndpoint(RouteCollection $routes)"),c(),s(32," methods: "),c(),l(33,"ul")(34,"li")(35,"b"),s(36,"UseRouter"),c(),s(37," adds route matching middleware to the middleware pipeline, and this middleware looks at the set of endpoints defined in the App and selects the best match based on the request. "),c(),l(38,"li")(39,"b"),s(40,"UseEndpoint"),c(),s(41," adds endpoint execution middleware to the middleware pipeline, which runs the request delegate associated with the selected endpoint. "),c()(),l(42,"p"),s(43," The following code below shows a basic routing example, write "),l(44,"code"),s(45,'"Hello World!"'),c(),s(46," to the HTTP response when an HTTP GET request is sent to the root URL "),l(47,"code"),s(48,'"/"'),c(),s(49,", which is By default is "),l(50,"code"),s(51,"https://localhost:8000/"),c(),v(52,"br"),s(53," else If the request doesn't match any route, an HTTP 404 page not found is returned. "),c(),l(54,"pre")(55,"code",4),s(56,'start(function ($app) {\n $app->UseExceptionHandler();\n $app->useRouter();\n // Additional middlewares here\n $app->useEndpoint(function ($routes) {\n // Routes\n $routes->mapGet("/", fn () => "Hello World!");\n });\n});'),c()(),l(57,"p"),s(58," The following table shows the available routing methods and their descriptions. "),c(),l(59,"table",5)(60,"thead")(61,"tr")(62,"th",6),s(63,"Methods"),c(),l(64,"th",7),s(65,"Description"),c()()(),l(66,"tbody")(67,"tr")(68,"td")(69,"code"),s(70,"mapGet(string $pattern callable $handler)"),c()(),l(71,"td"),s(72,"Route that matches HTTP GET request for the specified path."),c()(),l(73,"tr")(74,"td")(75,"code"),s(76,"mapPost(string $pattern, callable $handler)"),c()(),l(77,"td"),s(78,"Route that matches HTTP POST request for the specified path."),c()(),l(79,"tr")(80,"td")(81,"code"),s(82,"mapPut(string $pattern, callable $handler)"),c()(),l(83,"td"),s(84,"Route that matches HTTP PUT request for the specified path."),c()(),l(85,"tr")(86,"td")(87,"code"),s(88,"mapDelete(string $pattern, callable $handler)"),c()(),l(89,"td"),s(90,"Route that matches HTTP DELETE request for the specified path."),c()(),l(91,"tr")(92,"td")(93,"code"),s(94,"mapPatch(string $pattern, callable $handler)"),c()(),l(95,"td"),s(96,"Route that matches HTTP PATCH request for the specified path."),c()(),l(97,"tr")(98,"td")(99,"code"),s(100,"mapRoute(string $pattern, callable $handler, ?string $verb = null)"),c()(),l(101,"td"),s(102,"Route that matches HTTP request for the specified path and HTTP method, or any HTTP method if it's not specified."),c()()()(),v(103,"br"),l(104,"h3"),s(105,"Async Handler"),c(),l(106,"p"),s(107," DevNet route can accept the Request Handler as an async function to handle the HTTP request asynchronously, like in the following example: "),c(),l(108,"pre")(109,"code",4),s(110,"useEndpoint(function($routes) {\n $routes->mapGet(\"/\", async(function(HttpContext $context) {\n $client = new HttpClient();\n $content = await($client->getStringAsync('www.example.com'));\n await($context->Response->writeAsync($content));\n }));\n});"),c()(),v(111,"br"),l(112,"h3"),s(113,"Route Template"),c(),l(114,"p"),s(115," A route template is a string pattern composed of segments, separated by a slash "),l(116,"code"),s(117,'"/"'),c(),s(118," used to define how the endpoint matches the URL Path, by splitting the URL path into segments and matching each segment with the route pattern segment in the same corresponding order. "),c(),l(119,"p"),s(120," The segment pattern can be literal or parameter enclosed in curly brackets "),l(121,"code"),s(122,'"{ }"'),c(),s(123," to hold a potential value of its corresponding matched URL segment, and this parameter can be mandatory or optionally by adding interrogation point "),l(124,"code"),s(125,'"?"'),c(),s(126," or it can have a default value using the equal sign "),l(127,"code"),s(128,'"="'),c(),s(129," after the route parameter name followed by a value. "),c(),l(130,"p"),s(131," The following code example shows a simple get route with a callback request handler, that retrieves the value of the parameter "),l(132,"code"),s(133,"{id}"),c(),s(134," from "),l(135,"code"),s(136,"HttpContext"),c(),s(137," to look for a product in the repository and then returns the data as a JSON response. "),c(),l(138,"pre")(139,"code",4),s(140,'...\n$app->useEndpoint(function($routes) {\n $routes->mapGet("/api/products/{id?}", function(HttpContext $context) {\n $id = $context->Request->RouteValues["id"];\n $product = ProductRepository::find($id);\n return $context->Response->writeJsonAsync($product);\n });\n});'),c()(),l(141,"p"),s(142," The following table demonstrates a list of route templates examples: "),c(),l(143,"table",5)(144,"thead")(145,"tr")(146,"th",8),s(147,"Route template"),c(),l(148,"th",8),s(149,"Matching URL example"),c()()(),l(150,"tbody")(151,"tr")(152,"td"),s(153,"/contact"),c(),l(154,"td"),s(155,"/contact"),c()(),l(156,"tr")(157,"td"),s(158,"/{language}/shop"),c(),l(159,"td"),s(160,"/en/shop"),c()(),l(161,"tr")(162,"td"),s(163,"/posts/{title?}"),c(),l(164,"td"),s(165,"/posts or /posts/my-post"),c()(),l(166,"tr")(167,"td"),s(168,"/{page=home}"),c(),l(169,"td"),s(170,"/ or /about"),c()()()(),l(171,"blockquote",9)(172,"b"),s(173,"Important:"),c(),s(174," The order of the routes is important, if a route matches the request URL, it will not check the next route, so make sure to not put a route with a greedy pattern at the top, because it will catch all the URLs. "),c(),v(175,"br"),l(176,"h3"),s(177,"Attribute Routing"),c(),l(178,"p"),s(179," Attribute routing is a technique that allows routes to be defined directly on the controller actions by using attributes that specify the URL patterns and HTTP methods that match the HTTP requests, giving more control and flexibility over the routing behavior. "),c(),l(180,"p"),s(181," The following code example shows how to map routes to MVC controllers. "),c(),l(182,"pre")(183,"code",4),s(184,"...\n$app->useEndpoint(function($routes) {\n $routes->mapControllers();\n});"),c()(),l(185,"p"),s(186," Then, you can use attributes to decorate your controller's action methods with their associated routes. "),c(),l(187,"pre")(188,"code",4),s(189,"view();\n }\n\n // Accept only the HTTP method GET.\n #[Route(path: '/contact', method: 'GET')]\n public function contact(): IActionResult\n {\n return $this->view();\n }\n\n // Accept only the HTTP method POST.\n #[Route(path: '/contact/submit', method: 'POST')]\n public function submit(string $subject, string $message): IActionResult\n {\n mail(\"email@example.com\", $subject, $message);\n return $this->statusCode(200);\n }\n}"),c()()(),l(190,"nav",10)(191,"ul",11)(192,"li",12)(193,"a",13),v(194,"i",14),s(195," Previous "),c()(),l(196,"li",12)(197,"a",15),s(198," Next "),v(199,"i",16),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/web/controller",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["web-controller"]],decls:179,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],["src","assets/images/mvc.svg","alt","Web app home page","width","80%","height","auto"],[1,"language-shell"],[1,"language-php"],[1,"table"],["scope","col"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/web/routing",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/web/view",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Controller"),c(),v(8,"hr"),l(9,"p"),s(10," A controller is one of the important components of the architectural pattern MVC (Model View Controller) which helps to achieve the separation of concerns, it is the brain of the application that controls how the data is displayed, where each browser request is mapped to a particular method of a particular controller class called Action, and this action will handle the HTTP request and return data as HTTP response via the view engine. "),c(),v(11,"img",4)(12,"br")(13,"br")(14,"br"),l(15,"h3"),s(16,"Adding Controller Class"),c(),l(17,"p"),s(18," Controller class can be created manually or by using the devnet command-line: "),c(),l(19,"pre")(20,"code",5),s(21,"devnet add controller --name HomeController"),c()(),l(22,"p"),s(23," The class below represent an example of a controller class named "),l(24,"code"),s(25,"HomeController"),c(),s(26," extends a "),l(27,"code"),s(28,"Controller"),c(),s(29," base class to inherit some MVC features, and has one action method called "),l(30,"code"),s(31,"index()"),c(),s(32," that returns an instance of "),l(33,"code"),s(34,"IActionResult"),c(),s(35,", with a content of "),l(36,"samp"),s(37,'"Hello World!"'),c(),s(38," as a response."),v(39,"br"),c(),l(40,"pre")(41,"code",6),s(42,"content(\"Hello World!\");\n }\n}"),c()(),v(43,"br"),l(44,"h3"),s(45,"Action Result"),c(),l(46,"p"),s(47," The action result represents the result of the action method, which returns a HTTP response. "),c(),l(48,"p"),s(49," The following table shows a list of controller methods that return an action result for different kinds of responses: "),c(),l(50,"table",7)(51,"thead")(52,"tr")(53,"th",8),s(54,"Method"),c(),l(55,"th",8),s(56,"Description"),c()()(),l(57,"tbody")(58,"tr")(59,"td")(60,"code"),s(61,"view(object|array $data, ?string $name): IActionResult"),c()(),l(62,"td"),s(63,"Return HTML content result"),c()(),l(64,"tr")(65,"td")(66,"code"),s(67,"json(object|array $data): IActionResult"),c()(),l(68,"td"),s(69,"Return JSON data result"),c()(),l(70,"tr")(71,"td")(72,"code"),s(73,"content(string $content, ?string $contentType): IActionResult"),c()(),l(74,"td"),s(75,"Return text content result"),c()(),l(76,"tr")(77,"td")(78,"code"),s(79,"file(string $path, ?string $contentType): IActionResult"),c()(),l(80,"td"),s(81,"Return HTML content result"),c()(),l(82,"tr")(83,"td")(84,"code"),s(85,"redirect(string $url): IActionResult"),c()(),l(86,"td"),s(87,"Redirect the request to the giving path"),c()(),l(88,"tr")(89,"td")(90,"code"),s(91,"statusCode(int $code): IActionResult"),c()(),l(92,"td"),s(93,"Return HTTP status code result"),c()()()(),v(94,"br"),l(95,"h3"),s(96,"Async Action"),c(),l(97,"p"),s(98," DevNet Controller can use async method to handle the HTTP request asynchronously. "),c(),l(99,"pre")(100,"code",6),s(101,"content($content);\n }\n}"),c()(),v(102,"br"),l(103,"h3"),s(104,"Model binding"),c(),l(105,"p"),s(106," Model Bidding is a mechanism that retrieves data from the HTTP request and provides it to the controller action method parameters as simple data types or updates the data into the properties of a complex type parameter. "),c(),l(107,"p"),s(108," It automates the process of retrieving data from various sources, such as: "),c(),l(109,"ul")(110,"li"),s(111,"Route data."),c(),l(112,"li"),s(113,"Query strings."),c(),l(114,"li"),s(115,"Form fields."),c(),l(116,"li"),s(117,"Uploaded files."),c()(),l(118,"h4"),s(119,"Simple type binding"),c(),l(120,"p"),s(121," Simple model bidding is a technique that automatically assigns values to the controller action method parameters that have the same names as the request data and are of simple types such as string, int, or bool, etc. "),c(),l(122,"p"),s(123," The following example shows how the Model Binder maps the route data and query string to the controller action method parameters of simple types. "),c(),l(124,"pre")(125,"code",6),s(126,"content(\"Excerpt from the content of the post: {$id}\");\n }\n\n return $this->content(\"The full content of the post: {$id}\");\n }\n}"),c()(),l(127,"p"),s(128," Assuming the user requests the following URL: "),l(129,"samp"),s(130,'"/posts/1/?excerpt=true"'),c(),v(131,"br"),s(132," The model binder will retrieve the value "),l(133,"code"),s(134,"1"),c(),s(135," from the route data and provide it to the "),l(136,"code"),s(137,"$id"),c(),s(138," parameter and the value "),l(139,"code"),s(140,"true"),c(),s(141," from the query string to the "),l(142,"code"),s(143,"$excerpt"),c(),s(144," parameter. "),c(),v(145,"br"),l(146,"h4"),s(147,"Complex type binding"),c(),l(148,"p"),s(149," The complex-type binding is an automatic way of mapping the request data to the public properties of an object that is passed as a parameter to a controller action method. This provides easy access to the data of the HTTP request without having to parse it manually. "),c(),l(150,"p"),s(151," The code example below shows a controller with a "),l(152,"code"),s(153,"send()"),c(),s(154," action method that accepts a complex type parameter of type "),l(155,"code"),s(156,"Contact"),c(),s(157,", where the Model Binder automatically populates the request form data into the public properties of the Contact object, which is used to validate the data before sending it via email when the user submits the contact form. "),c(),l(158,"pre")(159,"code",6),s(160,"isValid()) {\n return $this->content(\"All required fields must be filled out!\");\n }\n\n mail(\"email@example.com\", $form->Subject, $form->Message);\n return $this->statusCode(200);\n }\n}"),c()(),l(161,"p"),s(162," And here is the code for the "),l(163,"code"),s(164,"Contact"),c(),s(165," model that is used as a parameter in the controller action method.\n"),c(),l(166,"pre")(167,"code",6),s(168,"Subject) && isset($this->Message)) {\n return true\n }\n\n return false;\n }\n}"),c()()(),l(169,"nav",9)(170,"ul",10)(171,"li",11)(172,"a",12),v(173,"i",13),s(174," Previous "),c()(),l(175,"li",11)(176,"a",14),s(177," Next "),v(178,"i",15),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/web/view",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["web-view"]],decls:240,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php-template"],[1,"alert","alert-warning"],[1,"language-php"],[1,"alert","alert-info"],["target","_blank","href","https://www.php.net/manual/en/control-structures.alternative-syntax.php"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/web/controller",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/web/filter",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Views"),c(),v(8,"hr"),l(9,"p"),s(10," Views are the presentation details of the user\u2019s interaction, in form of HTML templates with minimal of embedded PHP code that generate content to send to the client, views are "),l(11,"samp"),s(12,".phtml"),c(),s(13," files stored by default in a Views folder at the root of the application, typically each controller will have its own folder, in which are views for specific controller actions. "),c(),l(14,"p"),s(15," By convention, all the views stored in the folder called "),l(16,"b"),s(17,'"Views"'),c(),s(18,", grouped into sub-folders have the same name as the the name of the controller they belong to, and each view file has the same name as the name of the action that return it. "),c(),l(19,"p"),s(20," The following code represent a view template with a sample HTML code, stored in "),l(21,"code"),s(22,'"/Views/Home/index.phtml"'),c(),v(23,"br"),s(24," assuming that the controller name is "),l(25,"b"),s(26,'"Home"'),c(),s(27," and the action name is "),l(28,"b"),s(29,'"index"'),c(),s(30,". "),c(),l(31,"pre")(32,"code",4),s(33,'\n\n\n \n \n <?= $viewName ?>\n\n\n

Hello World!

\n\n'),c()(),l(34,"blockquote",5)(35,"b"),s(36,"Important:"),c(),s(37," DevNet view engine uses its own PHP short tag syntax "),l(38,"code"),s(39,""),c(),s(40," without causing any conflict with XML tags, and there is no need to enable it in "),l(41,"samp"),s(42,'"php.ini"'),c()(),v(43,"br"),l(44,"h3"),s(45,"Returning the View"),c(),l(46,"p"),s(47," Typically views are returned from actions as a "),l(48,"code"),s(49,"ViewResult"),c(),s(50,", which is a type of "),l(51,"code"),s(52,"IActionResult"),c(),s(53,", the Action method can create and return a ViewResult directly, but that isn't commonly done, since controllers inherit from Controller base class, you simply use the method "),l(54,"code"),s(55,"view()"),c(),s(56," to return the ViewResult. "),c(),l(57,"pre")(58,"code",6),s(59,"view();\n }\n}"),c()(),v(60,"br"),l(61,"h4"),s(62,"Returning Explicit View"),c(),l(63,"p"),s(64," If your view doesn't follow the naming convention, you can return an explicit view, by passing a string argument to view method that define a relative path to the view file without the extension file "),l(65,"samp"),s(66,'".phtml"'),c()(),l(67,"p"),s(68," The following code shows an example of controller with action "),l(69,"code"),s(70,"index"),c(),s(71," that returns a content of an explicit view called "),l(72,"samp"),s(73,'"home.phtml"'),c(),s(74,", belong to the folder "),l(75,"samp"),s(76,'"Template"'),c()(),l(77,"pre")(78,"code",6),s(79,'view(name: "Template/home");\n }\n}'),c()(),v(80,"br"),l(81,"h3"),s(82,"Passing data to the view"),c(),l(83,"p"),s(84," The view data is an MVC communication mechanism for passing data from the controller's action method to the view. The data is passed as a key-value array argument and can then be retrieved in the view by accessing its corresponding keys in the ViewData property or by using variables with the same names as the keys. "),c(),l(85,"p"),s(86," Here is an example of a controller that passes key-value data to the view. "),c(),l(87,"pre")(88,"code",6),s(89," 'MySite',\n 'page' => 'Home'\n ];\n return $this->view($data);\n }\n}"),c()(),l(90,"p"),s(91," And here is an example of a view that retrieves the passed data by accessing the keys of the ViewData property. "),c(),l(92,"pre")(93,"code",4),s(94,'\n\n\n \n \n <?= $this->ViewData[\'site\'] . \'-\' . $this->ViewData[\'page\'] ?><title>\n ...\n'),c()(),l(95,"p"),s(96," Or, retrieve the view data as variables with the same names as the keys of the ViewData property. "),c(),l(97,"pre")(98,"code",4),s(99,'<!DOCTYPE html>\n<html lang="en">\n<head>\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n <title><?= $site . \'-\' . $page ?><title>\n ...\n'),c()(),v(100,"br"),l(101,"h3"),s(102,"Layout"),c(),l(103,"p"),s(104," The layout or master page is common UI (User Interface) a template of common HTML elements that remains the same throughout the application, such as header, navigation bar, or footer section, to reduce duplicate code in views and make it easy to maintain. "),c(),l(105,"p"),s(106," By default layouts placed in the folder "),l(107,"samp"),s(108,'"/views/layouts"'),c(),s(109," and, an individual views can specify a layout by calling the method "),l(110,"code"),s(111,"layout(string $layoutName)"),c(),s(112,", the string parameter "),l(113,"code"),s(114,"$layoutName"),c(),s(115," define the relative path to the layout file without the extension file "),l(116,"samp"),s(117,'".phtml"'),c(),s(118," as shown in the following example: "),c(),l(119,"pre")(120,"code",4),s(121,"<? $this->layout('Shared/layout') ?>\n \n<h1>Hello World!</h1>"),c()(),l(122,"p"),s(123," Layout can include the view contents, by calling the method "),l(124,"code"),s(125,"renderBody()"),c(),s(126," and wherever the call to this method is placed, the contents of the view will be rendered. "),c(),l(127,"p"),s(128," In this example the view engin catch the content "),l(129,"code"),s(130,"<h1>Hello World!</h1>"),c(),s(131," of the view and rendered it into the body of the layout where the method "),l(132,"code"),s(133,"renderBody()"),c(),s(134," is called. "),c(),l(135,"pre")(136,"code",4),s(137,'<!DOCTYPE html>\n<html lang="en">\n<head>\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n <link rel="stylesheet" type="text/css" href="/css/style.css" />\n <title>DevNet\n\n\n
\n \n
\n
\n renderBody() ?>\n
\n\n'),c()(),v(138,"br"),l(139,"h4"),s(140,"Partial views"),c(),l(141,"p"),s(142," A partial view is a reusable portion of the layout, which means Layout can be split into many files that contains HTML code, It can be used in one or more views or layout views, You can use the same partial view at multiple places and eliminates the redundant code. "),c(),l(143,"pre")(144,"code",4),s(145,'\n\n\n \n \n \n DevNet\n\n\n
\n renderPartial(\'Shared/navbar\') ?>\n
\n
\n renderBody() ?>\n
\n\n'),c()(),l(146,"p"),s(147," The code below is the content of the partial view in separated file: "),l(148,"samp"),s(149,'"/Views/layouts/navbar.phtml"'),c(),s(150,". "),c(),l(151,"pre")(152,"code",4),s(153,''),c()(),v(154,"br"),l(155,"h4"),s(156,"Sections"),c(),l(157,"p"),s(158," Sections provide a dynamic way to organize where certain page elements should be placed, unlike the partial view which they remains the same throughout all the application, sections can be changed for each view. "),c(),l(159,"p"),s(160," To be able to use a section in a layout, we must first define a section in the view, by writing a block of content between the methods "),l(161,"code"),s(162,"section(string $sectionName)"),c(),s(163," and "),l(164,"code"),s(165,"endSection()"),c(),s(166," and give a ane to the section, which help us later to select which section to be rendered in the layout. "),c(),l(167,"pre")(168,"code",4),s(169,"layout('Shared/layout') ?>\n \n

Hello World!

\n\nsection('sidebar') ?>\n
    \n
  • \n
  • \n
\nendSection() ?>"),c()(),l(170,"p"),s(171," A layout can include one or more view sections, by calling the method "),l(172,"code"),s(173,"RenderSection(string $sectionName)"),c(),s(174," with specifying the name of the section be rendered, and where the call of this method is placed, the view section contents will be rendered. "),c(),l(175,"pre")(176,"code",4),s(177,'\n\n\n \n \n \n DevNet\n\n\n
\n renderPartial(\'Shared/navbar\') ?>\n
\n
\n \n
\n renderBody() ?>\n
\n
\n\n'),c()(),v(178,"br"),l(179,"h3"),s(180,"The control structures"),c(),l(181,"p"),s(182," DevNet view engine uses the PHP alternative syntax for control structures, such as "),l(183,"code"),s(184,"if"),c(),s(185,", "),l(186,"code"),s(187,"while"),c(),s(188,", "),l(189,"code"),s(190,"for"),c(),s(191,", "),l(192,"code"),s(193,"foreach"),c(),s(194,", and "),l(195,"code"),s(196,"switch"),c(),s(197,", which use the colon ("),l(198,"code"),s(199,":"),c(),s(200,") instead of opening brace and the "),l(201,"code"),s(202,"endif;"),c(),s(203,", "),l(204,"code"),s(205,"endwhile;"),c(),s(206,", "),l(207,"code"),s(208,"endfor;"),c(),s(209,", "),l(210,"code"),s(211,"endforeach;"),c(),s(212,", or "),l(213,"code"),s(214,"endswitch;"),c(),s(215,", respectively, instead of the closing brace. "),c(),l(216,"p"),s(217," The following example uses the alternative syntax of the "),l(218,"code"),s(219,"if"),c(),s(220," statement to display different navbars based on the user's authentication status, where the user identity is injected into the view by default when using the MVC controller. "),c(),l(221,"pre")(222,"code",4),s(223,'\n\n\n \n \n \n DevNet\n\n\n
\n User->isAuthenticated()): ?>\n renderPartial(\'Shared/authenticatedUserNavbar\') ?>\n \n renderPartial(\'Shared/anonymousUserNavbar\') ?>\n \n
\n
\n renderBody() ?>\n
\n\n'),c()(),l(224,"blockquote",7)(225,"b"),s(226,"Note:"),c(),s(227," For more information about the PHP alternative syntax, you can visit the PHP documentation website "),l(228,"a",8),s(229,"here"),c()()(),l(230,"nav",9)(231,"ul",10)(232,"li",11)(233,"a",12),v(234,"i",13),s(235," Previous "),c()(),l(236,"li",11)(237,"a",14),s(238," Next "),v(239,"i",15),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/web/filter",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["web-filter"]],decls:67,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"table"],["scope","col"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/web/layout",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/web/exception",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Action Filters"),c(),v(8,"hr"),l(9,"p"),s(10," Action Filters are similar to Middlewares, they allow code to be run before or after specific stages in the request processing pipeline and can choose to short-circuit the pipeline or pass the request to the next filter or the endpoint action, but the difference is that the action filters are invoked after the dispatcher selects the action to execute, just before and after the execution of the action. "),c(),l(11,"p"),s(12," The following code example represents an action filter class called "),l(13,"code"),s(14,"AuthenticationFilter"),c(),s(15," that prevents accessing the requested resources if the user is not authenticated. "),c(),l(16,"pre")(17,"code",4),s(18,"HttpContext->User) {\n $context->HttpContext->Response->setStatusCode(401);\n return;\n }\n // Await next action delegate to chain the pipeline to the next filter before executing the action.\n await($next($context));\n // Logging or other works can be done here after executing the action.\n }\n}\n"),c()(),v(19,"br"),l(20,"h3"),s(21,"Registering action filters"),c(),l(22,"p"),s(23," The code example below shows how to add action filters to the route endpoint handler as class or as an anonymous async function, with the help of the method "),l(24,"code"),s(25,"RouteHandler::addFilter(callable|string $filter, ...$args)"),c()(),l(26,"pre")(27,"code",4),s(28,'start(function ($app) {\n // Middlewares\n $app->UseExceptionHandler();\n $app->useRouter();\n $app->useEndpoint(function ($routes) {\n $routes->mapGet("/users", function ($httpContext) {\n // Code...\n })\n // Adding action filter class.\n ->addFilter(AuthenticationFilter::class)\n\n // Adding in-line action filter as anonymous async function.\n ->addFilter(async(function ($actionContext, $next)) {\n // Some works can be done here before executing the action.\n await($next);\n // Other works can be done here after executing the action.\n }));\n\n // Other routes.\n });\n});'),c()(),l(29,"p"),s(30," You can apply the action filter to a controller using the attribute syntax and decorate the controller class or the action method with the filter name, as shown in the following code example.\n"),c(),l(31,"pre")(32,"code",4),s(33,"view();\n }\n\n // This filter will be applied only to this action method.\n #[Validate]\n #[Route(path: '/user/create', method: 'POST')]\n public function create(Profile $form): IActionResult\n {\n // Code...\n }\n}\n"),c()(),v(34,"br"),l(35,"h3"),s(36,"Built-in filters"),c(),l(37,"table",5)(38,"thead")(39,"tr")(40,"th",6),s(41,"Filter"),c(),l(42,"th",6),s(43,"Description"),c()()(),l(44,"tbody")(45,"tr")(46,"td")(47,"code"),s(48,"DevNet\\Core\\Endpoint\\Filters\\Authorize"),c()(),l(49,"td"),s(50,"Prevent a non-authorized user from accessing the resources."),c()(),l(51,"tr")(52,"td")(53,"code"),s(54,"DevNet\\Core\\Endpoint\\Filters\\ValidateAntiForgery"),c()(),l(55,"td"),s(56,"Prevent Cross-Site Request Forgery"),c()()()()(),l(57,"nav",7)(58,"ul",8)(59,"li",9)(60,"a",10),v(61,"i",11),s(62," Previous "),c()(),l(63,"li",9)(64,"a",12),s(65," Next "),v(66,"i",13),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/web/dependency",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["web-dependency"]],decls:161,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"table"],["scope","col"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/web/exception",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/security/overview",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Dependency Injection"),c(),v(8,"hr"),l(9,"p"),s(10," Dependency injection (DI) is a technique for achieving loose coupling between objects and dependencies rather than directly instantiating dependencies or using static references, most often the dependency objects are provided to the class which depends on, via constructor injection declaration, allowing them to follow the Explicit Dependencies Principle. "),c(),l(11,"p"),s(12," The following code represents a class "),l(13,"code"),s(14,"MyService"),c(),s(15," that depends on the class "),l(16,"code"),s(17,"MyDependency"),c(),s(18,", which will be injected automatically into its constructor by the service container. "),c(),l(19,"pre")(20,"code",4),s(21,"Dependency = $dependency;\n }\n}\n"),c()(),v(22,"br"),l(23,"h2"),s(24,"Service Container"),c(),l(25,"p"),s(26," Service Container is an implementation of Dependency Injection Container (aka Inversion of Controller Container), a system that implements an automatic dependency injection, it creates an object of the specified class as a service and injects all the dependency objects through their constructor by its type and manages its lifetime, whether Transient or Singleton lifetime. "),c(),l(27,"h5"),s(28,"Transient"),c(),l(29,"p"),s(30," Transient lifetime services are created each time they're requested from the service container. This lifetime works best for lightweight, stateless services. "),c(),l(31,"h5"),s(32,"Singleton"),c(),l(33,"p"),s(34," Singleton lifetime services are created only once, and Every subsequent request uses the same instance in the application life cycle. "),c(),l(35,"h2"),s(36,"Registering services"),c(),l(37,"p"),s(38," Typically the method "),l(39,"code"),s(40,"WebHostBuilder::register(IServiceCollection $services)"),c(),s(41," is responsible for defining the services that will be used throw your application without hard coding, and you can add services to the container with complex dependencies by using one of the following methods: "),c(),l(42,"ul")(43,"li")(44,"code"),s(45,"IServiceCollection::addSingleton(String $serviceType, String|Object|Closure $service);"),c()(),l(46,"li")(47,"code"),s(48,"IServiceCollection::addTransient(String $serviceType, String|Object|Closure $service);"),c()()(),l(49,"p"),s(50," Services are defined by the same service type class, parent class, or interface that the service is implementing, which will be used later to call the service from the service provider. "),c(),l(51,"p"),s(52," The following code shows an example of registering two services, "),l(53,"code"),s(54,"MyDependency"),c(),s(55," registered with Transient lifetime, defined by the same service type, and "),l(56,"code"),s(57,"MyService"),c(),s(58," with singleton lifetime defined by "),l(59,"code"),s(60,"IMyService"),c(),s(61," interface: "),c(),l(62,"pre")(63,"code",4),s(64,"register(function ($services) {\n // Adding services\n $services->addTransient(MyDependency::class);\n $services->addSingleton(IMyService::class, MyService::class);\n });\n ...\n }\n}\n"),c()(),v(65,"br"),l(66,"h3"),s(67,"Registering services using custom factory"),c(),l(68,"p"),s(69," Devnet Service container uses Service Activator to create your dependency when you call it, but if you want to resolve the instantiation of your dependency in your way, DevNet service container allows you to implement your own factory using a closure function that has "),l(70,"code"),s(71,"IServiceProvider"),c(),s(72," parameter to allow you to call any service registered within "),l(73,"code"),s(74,"IServiceCollection"),c(),s(75," and use it as a dependency for your service creation process as shown in the following example: "),c(),l(76,"pre")(77,"code",4),s(78,"register(function ($services) {\n $services->addSingleton(IService::class,\n fn($provider) => new MyService($provider->getService(MyDependency::class)));\n \n $services->addTransient(MyDependency::class);\n });\n ...\n }\n}\n"),c()(),v(79,"br"),l(80,"h3"),s(81,"Requesting Services"),c(),l(82,"p"),s(83," Services can be requested by their type using the method "),l(84,"code"),s(85,"IServiceProvider::getService(string $type)"),c(),s(86,", which can be accessible from the property "),l(87,"code"),s(88,"HttpContext::Services"),c(),s(89,", like in the following example. "),c(),l(90,"pre")(91,"code",4),s(92,'\n...\n$app->useEndpoint(function($routes) {\n $routes->mapGet("/service", function(HttpContext $context) {\n // Getting the services\n $service1 = $context->Services->getService(IService::class);\n $service2 = $context->Services->getService(MyService::class);\n // Code...\n });\n});\n'),c()(),v(93,"br"),l(94,"h3"),s(95,"Requesting services through controller"),c(),l(96,"p"),s(97," Services are injected into controllers as a constructor parameter during the creation of the controller, the service activator resolves the services from "),l(98,"code"),s(99,"IServiceCollection"),c(),s(100," that matches the parameter types of the controller's constructor and injects them into it automatically. "),c(),l(101,"pre")(102,"code",4),s(103,"MyService = $myService;\n }\n ...\n}\n"),c()(),v(104,"br"),l(105,"h3"),s(106,"Built-in services"),c(),l(107,"table",5)(108,"thead")(109,"tr")(110,"th",6),s(111,"Method"),c(),l(112,"th",6),s(113,"Description"),c()()(),l(114,"tbody")(115,"tr")(116,"td")(117,"code"),s(118,"addAntiForgery(?Closure $configuration)"),c()(),l(119,"td"),s(120,"Register IAntiForgery service."),c()(),l(121,"tr")(122,"td")(123,"code"),s(124,"addAuthentication(?Closure $configuration)"),c()(),l(125,"td"),s(126,"Register IAuthentication service."),c()(),l(127,"tr")(128,"td")(129,"code"),s(130,"addAuthorization(?Closure $configuration)"),c()(),l(131,"td"),s(132,"Register IAuthorization service."),c()(),l(133,"tr")(134,"td")(135,"code"),s(136,"addEntityContext(?Closure $configuration)"),c()(),l(137,"td"),s(138,"Register EntityContext service."),c()(),l(139,"tr")(140,"td")(141,"code"),s(142,"addHttpClient(?Closure $configuration)"),c()(),l(143,"td"),s(144,"Register HttpClient service."),c()(),l(145,"tr")(146,"td")(147,"code"),s(148,"addLogging(?Closure $configuration)"),c()(),l(149,"td"),s(150,"Register ILoggerFactory service."),c()()()()(),l(151,"nav",7)(152,"ul",8)(153,"li",9)(154,"a",10),v(155,"i",11),s(156," Previous "),c()(),l(157,"li",9)(158,"a",12),s(159," Next "),v(160,"i",13),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/web/exception",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["web-exception"]],decls:90,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"language-json"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/web/filter",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/web/dependency",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Exception Handler"),c(),v(8,"hr"),l(9,"p"),s(10," The exception handler is a middleware that displays detailed information about unhandled request exceptions, it's the first middleware that runs in the request pipeline so that it can catch all the unhandled exceptions thrown in the middleware that follows. "),c(),l(11,"h3"),s(12,"Registering the Exception Handler"),c(),l(13,"p"),s(14," Exception Handler is enabled through the method "),l(15,"code"),s(16,"WebHost::start(Closure $configure)"),c(),s(17," by calling the extension method "),l(18,"code"),s(19,"ApplicationBuilderExtensions::useExceptionHandler()"),c(),s(20," of the Application builder, which adds the pre-built middleware "),l(21,"code"),s(22,"ExceptionHandlerMiddleware"),c(),s(23," to the request pipeline, and must be in the top order of all middlewares. "),c(),l(24,"pre")(25,"code",4),s(26,"start(function ($app) {\n // Registering the exception handler in the top order.\n $app->useExceptionHandler();\n // Some middlewares here.\n});\n"),c()(),v(27,"br"),l(28,"h3"),s(29,"Custom error handling"),c(),l(30,"p"),s(31," The default configuration of the exception handler displays the Developer Exception page that shows detailed information about the error exception, which is very useful for debugging, but it is not recommended for deploying the application in the production environment, instead you need to handle the errors differently with a custom error handler, e.g. log the errors and return only the status code. "),c(),l(32,"p"),s(33," The following example shows how to register an exception handler that redirects the errors to a custom error handler endpoint to handle the errors differently. "),c(),l(34,"pre")(35,"code",4),s(36,'start(function ($app) {\n // Registering an exception handler that redirects the errors to a custom error handler.\n $app->useExceptionHandler("/error");\n $app->useRouter();\n $app->useEndpoint(function ($routes) {\n $routes->mapGet("/", fn () => "Hello World!");\n // The custom error handler endpoint.\n $routes->mapGet("/error", function ($context) {\n $error = $context->Items->getValue(\'ErrorException\');\n $code = $error ? $error->getCode() : 404;\n $code = $code != 0 ? $code : 500;\n if ($code == 401) {\n $context->Response->redirect(\'/login\');\n } else {\n $context->Response->setStatusCode($code);\n // You may need to log the error message here.\n // e.g. Logger::log(LogLevel::Error, $error->getMessage());\n }\n });\n });\n});\n'),c()(),v(37,"br"),l(38,"h3"),s(39,"Runtime environment"),c(),l(40,"p"),s(41," The DevNet web application can determine the runtime environment by reading the environment variable "),l(42,"samp")(43,"b"),s(44,"DEVNET_ENVIRONMENT"),c()(),s(45," from your system environment variables or from the "),l(46,"samp"),s(47,'"lunch.json"'),c(),s(48," file of Visual Studio Code, which can have two values: "),l(49,"code"),s(50,"development"),c(),s(51," or "),l(52,"code"),s(53,"production"),c(),s(54,", so you can use it as an advantage to control the error-handling behavior of your application. "),c(),l(55,"p"),s(56," The environment variable "),l(57,"samp")(58,"b"),s(59,"DEVNET_ENVIRONMENT"),c()(),s(60," is set to "),l(61,"code"),s(62,"development"),c(),s(63," in the "),l(64,"samp"),s(65,'"lunch.json"'),c(),s(66," file, so when you debug your application, it runs in development mode. "),c(),l(67,"pre")(68,"code",5),s(69,'"configurations": [\n {\n "name": "Launch Built-in web server",\n "type": "php",\n "request": "launch",\n "cwd": "${workspaceRoot}/webroot",\n "runtimeArgs": [\n "-dxdebug.mode=debug",\n "-dxdebug.start_with_request=yes",\n "-S",\n "localhost:8000"\n ],\n "env": {\n "DEVNET_ENVIRONMENT": "development"\n }\n }\n]\n'),c()(),v(70,"br"),l(71,"h4"),s(72,"Controlling the error-handling conditions"),c(),l(73,"p"),s(74," By default, the Developer Exception page is enabled when the runtime environment is set to development mode, without the need to register it, but that can be controlled by adding a condition in your application pipeline to use a custom exception handler if the runtime environment is not in development mode. "),c(),l(75,"pre")(76,"code",4),s(77,'start(function ($app) {\n if (!$app->Environment->isDevolvement()) {\n $app->useExceptionHandler("/error");\n }\n // The rest of middlewares.\n ...\n});\n'),c()(),l(78,"p"),s(79," In this way, your application will run in development or production mode, depending on the runtime environment of your system or your application. "),c()(),l(80,"nav",6)(81,"ul",7)(82,"li",8)(83,"a",9),v(84,"i",10),s(85," Previous "),c()(),l(86,"li",8)(87,"a",11),s(88," Next "),v(89,"i",12),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/web",redirectTo:"docs/web/start",pathMatch:"full"}];let r$=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[jt.forChild(n$),jt]})}return e})(),o$=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[Yr,r$,So]})}return e})();const i$=[{path:"docs/orm/start",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["orm-start"]],decls:210,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],["src","assets/images/orm.svg","width","100%","height","auto"],[1,"language-shell"],[1,"language-php"],[1,"table"],["scope","col"],[1,"language-json"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/security/antiforgery",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/orm/query",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Get Started"),c(),v(8,"hr"),l(9,"p"),s(10," DevNet ORM (Object-relational Mapping) is a system that offers an automated mechanism to developers for accessing and storing the data in the database in an object-oriented way, by performing the work required to map between Entities defined in an application's programming language as classes and data stored in relational data sources as tables, without needing the data-access code to be written. "),c(),l(11,"p"),s(12," The following diagram is an abstraction of DevNet ORM architecture. "),c(),v(13,"img",4)(14,"br")(15,"br"),l(16,"p")(17,"b"),s(18,"EntityContext:"),c(),s(19," is an implementation of the Unit of work pattern, represents a gateway to the database by providing an API to communicate with the database with the following capabilities: "),c(),l(20,"ul")(21,"li"),s(22,"Database Connections"),c(),l(23,"li"),s(24,"Data querying and persistance"),c(),l(25,"li"),s(26,"Change Tracking"),c(),l(27,"li"),s(28,"Model building"),c(),l(29,"li"),s(30,"Data Mapping"),c(),l(31,"li"),s(32,"Transaction management"),c()(),l(33,"p")(34,"b"),s(35,"EntitySet:"),c(),s(36," is an implementation of the Repository pattern, a class that holds a collection of entities of the same type related to a table in the database, and each entity is an instance that represents a data row in that table. "),c(),v(37,"br"),l(38,"h3"),s(39,"Installation"),c(),l(40,"p"),s(41," If the DevNet framework is not fully installed, you can install the DevNet ORM package into your project using Composer by running the following command in your terminal: "),c(),l(42,"pre")(43,"code",5),s(44,"composer require devnet/entity"),c()(),v(45,"br"),l(46,"h3"),s(47,"Defining the EntityContext"),c(),l(48,"p"),s(49," The recommended way to work with DevNet ORM is to define a context class in the "),l(50,"b"),s(51,'"Models"'),c(),s(52," folder that derives from "),l(53,"code"),s(54,"DevNet\\ORM\\EntityContext"),c(),s(55," and exposes "),l(56,"code"),s(57,"DevNet\\ORM\\EntitySet"),c(),s(58," properties that represent collections of the specified entities in the context, as shown in the following example. "),c(),l(59,"pre")(60,"code",6),s(61,"Posts = $this->set(Post::class);\n }\n}\n"),c()(),v(62,"br"),l(63,"h4"),s(64,"Entity Type"),c(),l(65,"p"),s(66," By convention, the entity types that are exposed in "),l(67,"code"),s(68,"EntitySet"),c(),s(69," properties in "),l(70,"code"),s(71,"EntityContext"),c(),s(72," are included in the model and mapped automatically to the database tables based on their shape. "),c(),l(73,"ul")(74,"li"),s(75," Each entity class will be mapped automatically to the corresponding database table with the same name. "),c(),l(76,"li"),s(77," Each public property will be mapped to the corresponding column with the same name in the table. "),c(),l(78,"li"),s(79," By default, the property that is named "),l(80,"b"),s(81,'"Id"'),c(),s(82," will be considered as the primary key. "),c()(),l(83,"p"),s(84," The following code example is the entity class "),l(85,"code"),s(86,"Application\\Models\\Post"),c(),s(87," used in the previous context, and it represents the "),l(88,"b"),s(89,'"Post"'),c(),s(90," table in the database where the properties represent the columns of that table. "),c(),l(91,"pre")(92,"code",6),s(93,"ProviderType = SqliteDataProvider::class;\n$options->ConnectionString = "/path/to/database.db3";\n\n$blog = new BlogContext($options);\n$posts = $blog->Posts;\n'),c()(),v(121,"br"),l(122,"h4"),s(123,"Database Providers"),c(),l(124,"p"),s(125," The following table shows a list of database providers that are supported by DevNet ORM. "),c(),l(126,"table",7)(127,"thead")(128,"tr")(129,"th",8),s(130,"Database Provider"),c(),l(131,"th",8),s(132,"Database Engine"),c()()(),l(133,"tbody")(134,"tr")(135,"td")(136,"code"),s(137,"DevNet\\ORM\\MySql\\MySqlDataProvider"),c()(),l(138,"td"),s(139,"MySql"),c()(),l(140,"tr")(141,"td")(142,"code"),s(143,"DevNet\\ORM\\PgSql\\PgSqlDataProvider"),c()(),l(144,"td"),s(145,"PostgreSql"),c()(),l(146,"tr")(147,"td")(148,"code"),s(149,"DevNet\\ORM\\Sqlite\\SqliteDataProvider"),c()(),l(150,"td"),s(151,"SQLite"),c()()()(),l(152,"h4"),s(153,"Connection String"),c(),l(154,"p"),s(155,' The client-server database providers like "MySql" and "PostgreSql" use the following connection string format:'),v(156,"br"),l(157,"code"),s(158,'"host=hostname;port=port;database=dbname;user=username;password=password"'),c()(),l(159,"p"),s(160,' The serverless database providers like "SQLite" use the following connection string format:'),v(161,"br"),l(162,"code"),s(163,'"/path/to/database.db3"'),c(),s(164," or "),l(165,"code"),s(166,'":memory:"'),c()(),v(167,"br"),l(168,"h3"),s(169,"Registering the EntityContext"),c(),l(170,"p"),s(171," It is recommended that you register the DevNet ORM as a reusable service to be injected into your application using the "),l(172,"code"),s(173,"ServiceCollectionExtensions::addEntityContext()"),c(),s(174," Extension method, which is called within the "),l(175,"code"),s(176,"WebHostBuilder::register()"),c(),s(177," method, with the use of the configuration provider that gets the database configuration from the "),l(178,"samp"),s(179,'"settings.json"'),c(),s(180," file as shown in the following code example: "),c(),l(181,"pre")(182,"code",6),s(183,"Configuration;\n $builder->register(function ($services) use ($configuration) { //;\n // Adding EntityContext\n $services->addEntityContext(BlogContext::class,\n function ($options) {\n $options->ProviderType = $configuration->getValue('Database:ProviderType');\n $options->ConnectionString = $configuration->getValue('Database:ConnectionString');\n }\n );\n });\n ...\n }\n}\n"),c()(),l(184,"p"),s(185," In the "),l(186,"samp"),s(187,'"settings.json"'),c(),s(188," file, you need to set the database configuration, like in the following example: "),c(),l(189,"pre")(190,"code",9),s(191,'"Database": {\n "ProviderType": "DevNet\\\\Entity\\\\PgSql\\\\PgSqlDataProvider",\n "ConnectionString": "host=localhost;database=dbname;user=username;password=password"\n}\n'),c()(),l(192,"p"),s(193," Then, you can get the "),l(194,"code"),s(195,"EntityContext"),c(),s(196," using the controller constructor injection, like this: "),c(),l(197,"pre")(198,"code",6),s(199,"blog = $blog;\n }\n\n #[Route(\"/blog\")]\n public function index(): IActionResult\n {\n $this->view(['posts' => $this->blog->Posts]);\n }\n}\n"),c()()(),l(200,"nav",10)(201,"ul",11)(202,"li",12)(203,"a",13),v(204,"i",14),s(205," Previous "),c()(),l(206,"li",12)(207,"a",15),s(208," Next "),v(209,"i",16),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/orm/query",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["orm-query"]],decls:192,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"alert","alert-warning"],[1,"language-sql"],[1,"alert","alert-info"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/orm/start",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/orm/save",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Querying Data"),c(),v(8,"hr"),l(9,"p"),s(10," The entity repository represents a collection of all records of a particular entity type and can be used to query a single entity or multiple entities. "),c(),l(11,"h3"),s(12,"Loading All Entities"),c(),l(13,"p"),s(14," The entity repository is an iterable collection, so you can load all the entities by iterating the "),l(15,"code"),s(16,"EntitySet"),c(),s(17," instance using the "),l(18,"code"),s(19,"foreach"),c(),s(20," statement, like in the following example: "),c(),l(21,"pre")(22,"code",4),s(23,"Posts as $post) {\n print($post->Title . PHP_EOL);\n}\n"),c()(),l(24,"p"),s(25," Or you can just export all the entities to an array to deal with them later by using the method "),l(26,"code"),s(27,"toArray()"),c(),s(28," like this: "),c(),l(29,"pre")(30,"code",4),s(31,"$posts = $blog->Posts->toArray();"),c()(),v(32,"br"),l(33,"h3"),s(34,"Loading a single entity"),c(),l(35,"p"),s(36," To load a single particular entity selected by its Id, use the method "),l(37,"code"),s(38,"EntitySet::find(string $keyValue)"),c(),s(39,", which will look first if it's already loaded in the tracker to return it quickly, and if it's not, then will load it from the database to the tracker and return it, and here is an example of how to use this method: "),c(),l(40,"pre")(41,"code",4),s(42,"$post = $blog->Posts->find($id);"),c()(),l(43,"p"),s(44," Otherwise, you can use the method "),l(45,"code"),s(46,"EntitySet::first()"),c(),s(47," to load to the first entity of the record or use the method "),l(48,"code"),s(49,"EntitySet::last()"),c(),s(50," to load the last one. "),c(),l(51,"pre")(52,"code",4),s(53,"$firstPost = $blog->Posts->first();\n$lastPost = $blog->Posts->last();\n"),c()(),v(54,"br"),l(55,"h3"),s(56,"Linq Query"),c(),l(57,"p")(58,"code"),s(59,"EntitySet"),c(),s(60," implements the "),l(61,"code"),s(62,"IQueryable"),c(),s(63," interface so it can use LINQ (Language-Integrated Query) to query data from the database, which are chained methods that represent SQL operations, compiled by the database provider to be sent as a specific database query language (MySQL, SQLite, ...) and then to get the result set. "),c(),l(64,"blockquote",5)(65,"b"),s(66,"Important:"),c(),s(67," Linq methods are extension methods, so to use this feature, you have to declare the use of the Linq namespace "),l(68,"code"),s(69,"DevNet\\System\\Linq"),c(),s(70," in every class or code that uses Linq methods with an instance of "),l(71,"code"),s(72,"EntitySet"),c(),s(73,". "),c(),v(74,"br"),l(75,"h4"),s(76,"Filtering Data"),c(),l(77,"p"),s(78," The method "),l(79,"code"),s(80,"where()"),c(),s(81," is used to restrict the result set to contain only those elements that satisfy the specified condition in the arrow function, like in the following code example: "),c(),l(82,"pre")(83,"code",4),s(84,'Posts->where(fn($post) => $post->Title == "My first post")->first();\n'),c()(),l(85,"p"),s(86," Which will be compiled to SQL then executed like this: "),c(),l(87,"pre")(88,"code",6),s(89,"SELECT * FROM Blog.Post WHERE Title = 'My first post';"),c()(),v(90,"br"),l(91,"h4"),s(92,"Ordering Data"),c(),l(93,"p"),s(94," To sort the result set in ascending order by a specified column, use the method "),l(95,"code"),s(96,"orderBy()"),c(),s(97,", and if the rows have the same value in that column, you can optionally chain it with the method "),l(98,"code"),s(99,"thenBy()"),c(),s(100," to sort them by another column, like in the following code: "),c(),l(101,"pre")(102,"code",4),s(103,"posts = $blog->Posts->orderBy(fn($p) => $p->Date)->thenBy(fn($p) => $p->Title)->toArray();"),c()(),l(104,"p"),s(105," And that will be compiled then executed in SQL like this: "),c(),l(106,"pre")(107,"code",6),s(108,"SELECT * FROM Blog.Post ORDER BY Date, Title;"),c()(),l(109,"p"),s(110," You can also sort the result set in descending order by a specified column using the method "),l(111,"code"),s(112,"orderByDescending()"),c(),s(113,", and optionally you can chain it by the method "),l(114,"code"),s(115,"ThenBy()"),c(),s(116," or "),l(117,"code"),s(118,"thenByDescending()"),c(),s(119," to sort the rows of the same values by another column, like in the code below: "),c(),l(120,"pre")(121,"code",4),s(122,"$posts = $blog->Posts->orderByDescending(fn($p) => $p->Date)\n ->thenByDescending(fn($p) => $p->Title)\n ->toArray();\n"),c()(),l(123,"p"),s(124," And this one will be compiled then executed in SQL like this: "),c(),l(125,"pre")(126,"code",6),s(127,"SELECT * FROM Blog.Post ORDER BY Date DESC, Title DESC;"),c()(),v(128,"br"),l(129,"h4"),s(130,"Partitioning Data"),c(),l(131,"p"),s(132," The partitioning data is the operation of dividing an input sequence into sections without changing the order of the elements and then returning one of those sections. "),c(),l(133,"p"),s(134," You can use the method "),l(135,"code"),s(136,"skip()"),c(),s(137," to skip a specified number of elements from the beginning of a sequence and then return the remaining elements, and use the method "),l(138,"code"),s(139,"take()"),c(),s(140," to return a specified number of contiguous elements from the start of a sequence, like in the following code example: "),c(),l(141,"pre")(142,"code",4),s(143,"$posts = $blog->Posts->skip(5)->take(10)->toArray();"),c()(),l(144,"p"),s(145," Which will be executed in SQL like this: "),c(),l(146,"pre")(147,"code",6),s(148,"SELECT * FROM Blog.Post LIMIT 5,10;"),c()(),v(149,"br"),l(150,"h5"),s(151,"Pagination Example"),c(),l(152,"p"),s(153," You can implement data pagination in DevNet ORM using the LINQ methods "),l(154,"code"),s(155,"skip()"),c(),s(156," and "),l(157,"code"),s(158,"take()"),c(),s(159," like this: "),c(),l(160,"pre")(161,"code",4),s(162,"$page = 1; // The page number you want to retrieve.\n$size = 10; // The number of items per page.\n$posts = $blog->Posts->skip(($page - 1) * $size)->take($size)->toArray();\n"),c()(),l(163,"p"),s(164," Page number 1 will display the first 10 posts, page 2 will skip the first 10 posts and display the next 10 posts, page 3 will skip 20 posts and display the next 10 posts, and so on... "),c(),v(165,"br"),l(166,"h4"),s(167,"Complex Query"),c(),l(168,"p"),s(169," Sometimes a simple query is not enough to solve a complex problem, so you can combine two or more clauses together to reach what you need as shown in the following code example: "),c(),l(170,"pre")(171,"code",4),s(172,"$posts = $blog->Posts->where(fn($p) =>$p->Date == '2023-01-01' && $p->Likes > 200)\n ->orderBy(fn($p) => $p->Title)\n ->take(10)\n ->toArray();\n"),c()(),l(173,"p"),s(174," Which will be compiled then executed in SQL like this: "),c(),l(175,"pre")(176,"code",6),s(177,"SELECT * FROM Blog.Post WHERE Date = '2023-01-01' AND Likes > 200 ORDER BY Title LIMIT 10;"),c()(),l(178,"blockquote",7)(179,"b"),s(180,"Note:"),c(),s(181," Linq queries are always executed against the database even if the entities returned already exist in the tracker. "),c()(),l(182,"nav",8)(183,"ul",9)(184,"li",10)(185,"a",11),v(186,"i",12),s(187," Previous "),c()(),l(188,"li",10)(189,"a",13),s(190," Next "),v(191,"i",14),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/orm/save",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["orm-save"]],decls:70,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/orm/query",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/orm/relationships",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Saving Data"),c(),v(8,"hr"),l(9,"p"),s(10," Saving data is the process of persisting the changes made to the entities in the context to be applied to the database, such as adding new entities, removing entities, or modifying the properties of existing entities. "),c(),l(11,"h3"),s(12,"Adding Data"),c(),l(13,"p"),s(14," The "),l(15,"code"),s(16,"EntitySet::add(object $entity)"),c(),s(17," method adds a new entity instance to the context to be inserted into the database when calling the "),l(18,"code"),s(19,"EntityContext::save()"),c(),s(20," method. "),c(),l(21,"pre")(22,"code",4),s(23,'Title = "Post Title";\n$post->Content = "Some content...";\n$post->Date = new DateTime("now");\n\n$blog = new BlogContext();\n$blog->Post->add($post);\n$blog->Post->save();\n'),c()(),v(24,"br"),l(25,"h3"),s(26,"Deleting Data"),c(),l(27,"p"),s(28," The "),l(29,"code"),s(30,"EntitySet::remove(object $entity)"),c(),s(31," method attaches the selected entity instance to the context with deleted status, to be deleted from the database when calling the "),l(32,"code"),s(33,"EntityContext::save()"),c(),s(34," method. "),c(),l(35,"pre")(36,"code",4),s(37,"Post->find(1);\n$blog->Post->remove($post);\n$blog->save();\n"),c()(),v(38,"br"),l(39,"h3"),s(40,"Updating Data"),c(),l(41,"p"),s(42," To update a record in the database table, modify the values of the loaded entity instance, and when calling the method "),l(43,"code"),s(44,"EntityContext::save()"),c(),s(45,", the changes will be automatically detected and updated in the database. "),c(),l(46,"pre")(47,"code",4),s(48,'Post->find(1);\n$post->Content = "Updated content";\n$blog->save();\n'),c()(),v(49,"br"),l(50,"h3"),s(51,"Multiple Operations"),c(),l(52,"p"),s(53," You can combine multiple operations (Add/Update/Remove) and then persist all the changes in a single call to the "),l(54,"code"),s(55,"EntityContext::save()"),c(),s(56," method, and here an example: "),c(),l(57,"pre")(58,"code",4),s(59,'Title = "Post Title";\n$post->Content = "Some content...";\n$post->Date = new DateTime("now");\n$blog->Post->add($post);\n\n// Deletes post with id = 2\n$post = $blog->Post->find(2);\n$blog->Post->remove($post);\n\n// Updates post with id = 1\n$post = $blog->Post->find(1);\n$post->Content = "Updated content";\n\n// Persists all the operations\n$blog->Post->save();\n'),c()()(),l(60,"nav",5)(61,"ul",6)(62,"li",7)(63,"a",8),v(64,"i",9),s(65," Previous "),c()(),l(66,"li",7)(67,"a",10),s(68," Next "),v(69,"i",11),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/orm/relationships",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["orm-relationships"]],decls:164,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"mb-2"],[1,"language-php"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/orm/save",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/orm/migrations",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Relationships"),c(),v(8,"hr"),l(9,"p"),s(10," A relationship describes how entities are associated with each other, represented by a referential constraint that defines which entity is the principal or dependent role in the relationship, and there are many kinds of entity relationships, such as one-to-one, one-to-many, many-to-one, and many-to-many. "),c(),l(11,"ul")(12,"li",4)(13,"b"),s(14,"Dependent entity:"),c(),s(15,' sometimes called the "child" is the entity that contains the foreign key, which is a reference to the primary key of the principal entity.'),c(),l(16,"li",4)(17,"b"),s(18,"Principal entity:"),c(),s(19,' sometimes called the "parent" is the entity that contains the primary key, which is referenced as a foreign key in the dependent entity.'),c()(),l(20,"h3"),s(21,"Navigation property:"),c(),l(22,"p"),s(23," A navigation property is a public property presented in the principal or dependent entity that can have a reference type to single or multiple related entities to allow navigation from one entity to another. "),c(),l(24,"ul")(25,"li",4)(26,"b"),s(27,"Collection navigation property:"),c(),s(28," is a property that contains references to multiple related entities, used to navigate through one-to-many and many-to-many relationships, defined by the type "),l(29,"code"),s(30,"DevNet\\System\\Collections\\ICollection"),c(),s(31," with the annotation "),l(32,"code"),s(33,"DevNet\\System\\Generic"),c(),s(34," which specifies the type of the related entity collection."),c(),l(35,"li",4)(36,"b"),s(37,"Reference navigation property:"),c(),s(38," is a property that contains a reference to a single related entity, used to navigate through one-to-one and many-to-one relationships, has the same type as the type of the related entity, and may have the annotation "),l(39,"code"),s(40,"DevNet\\ORM\\Annotations\\ForeignKey"),c(),s(41," to define the name of the property that is used as a foreign key in the dependent entity."),c()(),l(42,"p"),s(43," The example below demonstrates an entity class named "),l(44,"code"),s(45,"Post"),c(),s(46," that has two navigation properties: a reference property called "),l(47,"code"),s(48,"Post::User"),c(),s(49,", and a collection property called "),l(50,"code"),s(51,"Post::Classifications"),c(),s(52,". "),c(),l(53,"pre")(54,"code",5),s(55,"Users->find($id);\n// Iterating through the posts that are related to the selected user.\nforeach($user->Posts as $post) {\n $post->Title;\n}\n"),c()(),v(83,"br"),l(84,"h3"),s(85,"One to one"),c(),l(86,"p"),s(87," A one-to-one relationship is one entity associated with at most one other entity by introducing a unique constraint to the foreign key to ensure only one dependent is related to the principal entity. "),c(),l(88,"p"),s(89," The following example represents an entity class "),l(90,"code"),s(91,"Profile"),c(),s(92," that has a one-to-one relationship with the entity class "),l(93,"code"),s(94,"User"),c(),s(95," presented in the previous example, and both entities have reference navigate to each other, except the entity "),l(96,"code"),s(97,"Profile"),c(),s(98," is a dependent entity has the property "),l(99,"code"),s(100,"Profile::UserId"),c(),s(101," defined as a foreign key. "),c(),l(102,"pre")(103,"code",5),s(104,"Users->find($id);\n// Getting the related Profile entity from the User entity.\n$profile = $user->Profile;\n// Getting the related User entity from the Profile entity.\n$user = $profile->User;\n"),c()(),v(110,"br"),l(111,"h3"),s(112,"Many to Many"),c(),l(113,"p"),s(114," A many-to-many relationship is any number of entities of the same entity type associated with any number of entities of another entity type, this relationship is composed of two on-to-many relationships, represented by a joining table that includes the foreign keys of both tables, and these foreign keys are composite primary keys. "),c(),l(115,"p"),s(116," Here is an example of an entity named "),l(117,"code"),s(118,"Category"),c(),s(119,", which has a many-to-many relationship with the entity "),l(120,"code"),s(121,"Post"),c(),s(122," demonstrated in the first example, through the junction entity "),l(123,"code"),s(124,"Classification"),c(),s(125,". "),c(),l(126,"pre")(127,"code",5),s(128,"Categories->find($id);\n// Iterates the related entities through the junction entity.\nforeach($category->Classifications as $classification) {\n $classification->Post->Title;\n}\n"),c()()(),l(154,"nav",6)(155,"ul",7)(156,"li",8)(157,"a",9),v(158,"i",10),s(159," Previous "),c()(),l(160,"li",8)(161,"a",11),s(162," Next "),v(163,"i",12),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/orm/migrations",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["orm-migrations"]],decls:137,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-shell"],[1,"language-php"],[1,"text-justify"],[1,"alert","alert-warning"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/orm/relationships",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Migrations"),c(),v(8,"hr"),l(9,"p"),s(10," Migration provides a way to update the database schema incrementally, To keep it in sync with the changes in the data model, Without losing the existing data in the database. "),c(),l(11,"h3"),s(12,"Creating a migration"),c(),l(13,"p"),s(14," To create a migration, navigate to the root of your project and run the following command in the terminal: "),c(),l(15,"pre")(16,"code",4),s(17,"devnet add migration --name InitialMigration"),c()(),l(18,"p"),s(19," This will generate an empty migration class in the "),l(20,"samp"),s(21,'"Migrations"'),c(),s(22," folder, And the class file name will be prefixed by a timestamp date as an Id. "),c(),l(23,"p"),s(24," e.g. "),l(25,"samp"),s(26,'"/Migrations/20230701082859_InitialMigration.php"'),c()(),l(27,"pre")(28,"code",5),s(29,"createTable('User', function ($table) {\n $table->column('Id', 'integer')->identity(); // auto-increment\n $table->column('Fullname', 'string', 45)->nullable(false);\n $table->column('Username', 'string', 45)->nullable(false);\n $table->column('Password', 'string', 60)->nullable(false);\n $table->column('Role', 'string', 45)->default('User');\n $table->primaryKey('Id');\n $table->uniqueConstraint('Username');\n });\n\n $builder->createTable('Post', function ($table) {\n $table->column('Id', 'integer')->identity();\n $table->column('UserId', 'integer');\n $table->column('Title', 'string', 60)->nullable(false);\n $table->column('Content', 'text');\n $table->column('Date', 'date');\n $table->primaryKey('Id');\n $table->foreignKey('UserId')->references('User', 'Id')->onDelete('cascade');\n });\n\n $builder->createTable('Category', function ($table) {\n $table->column('Id', 'integer')->identity();\n $table->column('Name', 'string', 45)->nullable(false);\n $table->column('Description', 'string', 255)->nullable();\n $table->primaryKey('Id');\n $table->uniqueConstraint('Name');\n });\n\n $builder->createTable('PostCategory', function ($table) {\n $table->column('PostId', 'integer');\n $table->column('CategoryId', 'integer');\n $table->primaryKey('PostId', 'CategoryId');\n $table->foreignKey('PostId')->references('Post', 'Id')->onDelete('cascade');\n $table->foreignKey('CategoryId')->references('Category', 'Id')->onDelete('cascade');\n });\n }\n\n public function down(MigrationBuilder $builder): void\n {\n // if the constraint ON DELETE is configured as \"strict\" and which is the default configuration,\n // the child table must be dropped before the parent table, otherwise will throw an error.\n $builder->dropTable('PostCategory');\n $builder->dropTable('Category');\n $builder->dropTable('Post');\n $builder->dropTable('User');\n }\n}\n"),c()(),v(66,"br"),l(67,"h4"),s(68,"Updating the database schema"),c(),l(69,"p"),s(70," If the domain entity has been changed, it might be necessary to update the database schema to match it, and this can be done by creating another migration to make necessary alterations, as shown in the example below: "),c(),l(71,"pre")(72,"code",5),s(73,"alterTable('User', function ($table) {\n $table->addColumn('Email', 'string', 45);\n $table->addColumn('Phone', 'string', 15);\n $table->addColumn('Location', 'string', 45);\n });\n\n $builder->alterTable('Category', function ($table) {\n $table->renameColumn('Description', 'Definition');\n });\n\n $builder->renameTable('PostCategory', 'Classification');\n }\n\n public function down(MigrationBuilder $builder): void\n {\n $builder->alterTable('User', function ($table) {\n $table->removeColumn('Fullname');\n $table->removeColumn('Email';\n $table->removeColumn('Phone');\n $table->removeColumn('Location');\n });\n\n $builder->alterTable('Category', function ($table) {\n $table->renameColumn('Definition', 'Description');\n });\n\n $builder->renameTable('Classification', 'PostCategory');\n }\n}\n"),c()(),v(74,"br"),l(75,"h4"),s(76,"Seeding the database"),c(),l(77,"p",6),s(78," Seed data is data that populates the database at the time of migration execution, used to provide initial values for lookup lists or demo or test purposes, etc... "),c(),l(79,"pre")(80,"code",5),s(81," $name) {\n $builder->insertData('Category', [\n 'Id' => ++$id,\n 'Name' => $name\n ]);\n }\n }\n\n public function down(MigrationBuilder $builder): void\n {\n for ($i = 1; $i <= 4; $i++) {\n $builder->deleteData('Category', ['Id' => $i]);\n }\n }\n}\n"),c()(),v(82,"br"),l(83,"h3"),s(84,"Applying migrations"),c(),l(85,"p"),s(86," When you run the migration command for the first time, a migration history table will be created, which tracks the history of the applied migrations to determine later whether to upgrade or downgrade the migrations. "),c(),l(87,"p"),s(88," If the migration target is higher than the last migration applied, it will upgrade to the migration target. On the other hand, if it's lower, it will downgrade to the migration target. However, if the migration target has already been applied, then no action will be taken. "),c(),l(89,"p"),s(90," And here is an example shows how to run the migrate command targeting the migration that we created earlier: "),c(),l(91,"pre")(92,"code",4),s(93,"devnet migrate --target 20230701082859_InitialMigration"),c()(),l(94,"blockquote",7)(95,"b"),s(96,"Important:"),c(),s(97," Make sure to specify the database configuration in the "),l(98,"samp")(99,"b"),s(100,"settings.json"),c()(),s(101," before running the "),l(102,"code"),s(103,"migrate"),c(),s(104," command or pass it to the command as parameters using the options: "),l(105,"code"),s(106,"--provider"),c(),s(107," and "),l(108,"code"),s(109,"--connection"),c(),s(110,". "),c(),v(111,"br"),l(112,"h4"),s(113,"Applying all migrations"),c(),l(114,"p"),s(115," When you run the migration command without specifying the migration target, it will apply all migrations or continue from the latest migration applied. If all migrations have already been applied, no action will be taken. "),c(),l(116,"pre")(117,"code",4),s(118,"devnet migrate"),c()(),v(119,"br"),l(120,"h4"),s(121,"Reversing all migrations"),c(),l(122,"p"),s(123," To reverse all migrations to roll back to the state zero, run the migrate command with a target of 0 (zero), like this: "),c(),l(124,"pre")(125,"code",4),s(126,"devnet migrate --target 0"),c()()(),l(127,"nav",8)(128,"ul",9)(129,"li",10)(130,"a",11),v(131,"i",12),s(132," Previous "),c()(),l(133,"li",10)(134,"a",13),s(135," Next "),v(136,"i",14),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/orm",redirectTo:"docs/orm/start",pathMatch:"full"}];let s$=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[jt.forChild(i$),jt]})}return e})(),a$=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[Yr,s$,So]})}return e})();const c$=[{path:"docs/security/overview",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["security-overview"]],decls:40,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-shell"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/web/dependency",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/security/authentication",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Overview"),c(),v(8,"hr"),l(9,"p"),s(10," DevNet Security package provides several security libraries for building secure web applications and APIs, based on the following features: "),c(),l(11,"ul")(12,"li"),s(13,"Cookie-based Authentication"),c(),l(14,"li"),s(15,"Token-based Authentication"),c(),l(16,"li"),s(17,"Role-based Authorization"),c(),l(18,"li"),s(19,"Policy-based Authorization"),c(),l(20,"li"),s(21,"CSRF Prevention"),c()(),v(22,"br"),l(23,"h3"),s(24,"Requirement"),c(),l(25,"p"),s(26," DevNet Security package is part of the DevNet Framework, and if it's not already installed on your system or project, you still can install it using the composer command line: "),c(),l(27,"pre")(28,"code",4),s(29,"composer require devnet/security"),c()()(),l(30,"nav",5)(31,"ul",6)(32,"li",7)(33,"a",8),v(34,"i",9),s(35," Previous "),c()(),l(36,"li",7)(37,"a",10),s(38," Next "),v(39,"i",11),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/security/authentication",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["security-authentication"]],decls:86,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],[1,"alert","alert-warning"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/security/overview",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/security/authorization",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Authentication"),c(),v(8,"hr"),l(9,"p"),s(10," Authentication is the process of verifying the identity of the user who accesses a web application. This may require the user to input a username and password to log into the web application. "),c(),l(11,"p"),s(12," Authentication is handled by the authentication middleware, which uses the registered authentication service that can have multiple authentication schemes, and each scheme is related to an authentication handler to determine later in the authorization policies which authentication handler should be used to authenticate the user and provides a "),l(13,"code"),s(14,"ClaimsIdentity"),c(),s(15," that represents the user in the request context. "),c(),l(16,"h3"),s(17,"Configuration"),c(),l(18,"p"),s(19," The authentication service is added to the application by calling the "),l(20,"code"),s(21,"addAuthentication()"),c(),s(22," method, and then authentication schemes can be specified by calling one of the following methods: "),c(),l(23,"ul")(24,"li")(25,"code"),s(26,"AddCookie()"),c(),s(27," for cookie-based authentication"),c(),l(28,"li")(29,"code"),s(30,"AddJwtBearer()"),c(),s(31," for token-based authentication"),c()(),l(32,"p"),s(33," The authentication middleware is used in the application by calling the "),l(34,"code"),s(35,"useAuthentication()"),c(),s(36," method and must be called before any middleware that depends on the user being authenticated. "),c(),l(37,"p"),s(38," This example shows the configuration of both approaches, cookie-based and token-based authentication, but you can choose one of the two approaches. "),c(),l(39,"pre")(40,"code",4),s(41,'register(function ($services) {\n // Adding authentication service\n $services->addAuthentication(function ($builder) {\n // Adding cookie-based authentication handler\n $builder->addCookie(AuthenticationScheme::CookieSession, function ($options) {\n // Optimally you can modify the following default options.\n $options->CookieName = "Identity";\n $options->CookiePath = "/";\n $options->ExpireTime = TimeSpan::fromDays(7);\n });\n // Adding token-based authentication handler\n $builder->addJwtBearer(AuthenticationScheme::JwtBearer, function ($options) {\n $options->SecurityKey = "jwt security key";\n // Optionally you can configure the following validation options\n $options->Issuer = "127.0.0.1:8000"; // server address\n $options->Audience = "127.0.0.1:8080"; // client address\n });\n });\n });\n \n $host = $builder->build();\n\n $host->start(function ($app) {\n $app->UseExceptionHandler();\n $app->useRouter();\n // Adding the authentication middleware before the endpoint middleware.\n $app->useAuthentication();\n $app->useEndpoint(function ($routes) {\n // Routes\n });\n });\n }\n}\n'),c()(),v(42,"br"),l(43,"h3"),s(44,"Cookie-based Authentication"),c(),l(45,"p"),s(46," The cookie-based authentication is a stateful process, which means that the server stores the user session data and sends to the client a cookie that contains a session reference, which is often stored in the browser and sent back to the server with every request to authenticate the client requests and maintain session information on the server over the stateless HTTP protocol. "),c(),l(47,"p"),s(48," The following example demonstrates the working process of cookie-based authentication using "),l(49,"code"),s(50,"ClaimsIdentity"),c(),s(51," and the "),l(52,"code"),s(53,"IAuthentication"),c(),s(54," service to log in and log out the user. "),c(),l(55,"pre")(56,"code",4),s(57,"useEndpoint(function($routes) {\n $routes->mapPost(\"/login\", function(HttpContext $context) {\n $user = $context->User;\n if (!$user->isAuthenticated()) {\n $form = $context->Request->Form;\n $json = file_get_contents(__DIR__ . '/path/to/data.json');\n $data = json_decode($json, true);\n $users = new ArrayList('object');\n $users->addRange($data);\n\n $user = $users->where(fn ($user) => $user->Username == $form->getValue('username'))->first();\n if (!$user || !password_verify($form->getValue('password'), $user->Password)) {\n return $context->Response->setStatusCode(401);\n }\n\n $identity = new ClaimsIdentity(AuthenticationScheme::CookieSession);\n $identity->addClaim(new Claim('Username' , $form->getValue('username')));\n $identity->addClaim(new Claim('Role', $user->Role));\n\n $authentication = $context->Services->getService(IAuthentication::class);\n $authentication->signIn($identity, $form->getValue('remember'));\n }\n\n return $context->Response->redirect('/account');\n });\n\n $routes->mapGet(\"/logout\", function(HttpContext $context) {\n $authentication = $context->Services->getService(IAuthentication::class);\n $authentication->signOut();\n return $context->Response->redirect('/login');\n })\n});"),c()(),v(58,"br"),l(59,"h3"),s(60,"Token-based Authentication"),c(),l(61,"p"),s(62," The token-based authentication is a stateless process. This means that the server does not store any session information about the user on its side. Instead, it sends to the client an encrypted token, typically JWT (JSON Web Token), that contains the user information and expiration time, and the client stores this token and sends it back to the server with every request, where the server does the token validation and grants access to the user. "),c(),l(63,"p"),s(64," The following example demonstrates the working process of token-based authentication using ClaimsIdentity and JwtSecurityTokenHandler to generate a JWT token and send it to the client to send it back later for authentication. "),c(),l(65,"p"),s(66," Due to the limitations of this approach, there is no option for remembering or logging out the user on the server side. However, you can easily log out by removing the token from your request header on the client side. "),c(),l(67,"pre")(68,"code",4),s(69,"useEndpoint(function($routes) {\n $routes->mapGet(\"/login\", (function(HttpContext $context) {\n $user = $context->User;\n if (!$user->isAuthenticated()) {\n $form = $context->Request->Form;\n $json = file_get_contents(__DIR__ . '/path/to/data.json');\n $data = json_decode($json, true);\n $users = new ArrayList('object');\n $users->addRange($data);\n\n $user = $users->where(fn ($user) => $user->Username == $form->getValue('username'))->first();\n if (!$user || $user->Password != $form->getValue('password')) {\n return $context->Response->setStatusCode(401);\n }\n\n $claims = new ClaimsIdentity(AuthenticationScheme::JwtBearer);\n $claims->addClaim(new Claim('sub', $form->getValue('username')));\n $claims->addClaim(new Claim('role', $user->Role));\n $claims->addClaim(new Claim('iss', '127.0.0.1:8000'));\n $claims->addClaim(new Claim('aud', '127.0.0.1:8080'));\n\n // The asymmetric encryption RSA not supported yet, only the symmetric encryption HSA for now.\n $token = new JwtSecurityToken($claims, 'HS256', new DateTime('7 days'));\n $jwtHandler = new JwtSecurityTokenHandler();\n $signedToken = $jwtHandler->writeToken($token, \"jwt security key\");\n\n // Need to send the token to the client.\n return $context->Response->WriteJsonAsync(['jwt' => $signedToken]);\n }\n\n return $context->Response->redirect('/account');\n }));\n});"),c()(),l(70,"blockquote",5)(71,"b"),s(72,"Important:"),c(),s(73," The client should send back the JWT token in the Authorization header using the Bearer schema in the following format: "),l(74,"code"),s(75,"Authorization: Bearer "),c()()(),l(76,"nav",6)(77,"ul",7)(78,"li",8)(79,"a",9),v(80,"i",10),s(81," Previous "),c()(),l(82,"li",8)(83,"a",11),s(84," Next "),v(85,"i",12),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/security/authorization",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["security-authorization"]],decls:135,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"language-php"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/security/authentication",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/security/antiforgery",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"Authorization"),c(),v(8,"hr"),l(9,"p"),s(10," Authorization is the process that determines if the user has permission to access or use resources, and usually is coupled with authentication so that the server has some concept of who the user is before determining what the user can do. "),c(),l(11,"p"),s(12," The authorization is controlled by the "),l(13,"code"),s(14,"Authorize"),c(),s(15," filter which is responsible for enforcing the authorization policy on the endpoint action. It uses the "),l(16,"code"),s(17,"IAuthorization"),c(),s(18," service to evaluate the policy and decide which rule applies to the action. The rule can allow or deny access to the action based on various criteria. "),c(),l(19,"h3"),s(20,"Configuration"),c(),l(21,"p"),s(22," To use the authorization feature in your application, you need first to add the "),l(23,"code"),s(24,"IAuthorization"),c(),s(25," service to the dependency, which also depends on the "),l(26,"code"),s(27,"IAuthentication"),c(),s(28," service, and the code below shows a simple way to add this feature. "),c(),l(29,"pre")(30,"code",4),s(31,"register(function ($services) {\n // The authentication service is needed for authorization service.\n $services->addAuthentication(function ($builder) {\n $builder->addCookie();\n });\n // Adding the authorization service\n $services->addAuthorization();\n });\n ...\n }\n}"),c()(),v(32,"br"),l(33,"h3"),s(34,"Simple Authorization"),c(),l(35,"p"),s(36," By default, applying the "),l(37,"code"),s(38,"Authorize"),c(),s(39," filter on the endpoint action without specifying any option will restrict the execution of that action only for authenticated users, as shown in the code example below. "),c(),l(40,"pre")(41,"code",4),s(42,'useEndpoint(function($routes) {\n $routes->mapGet("/account", function(HttpContext $context) {\n $user = $context->User;\n $claim = $user->findClaim(fn ($claim) => $claim->Type == "name");\n $name = $claim ? $claim->Value : null;\n return $context->Response->writeAsync("Welcome {$name}");\n })\n // Adding the authorize filter.\n ->addFilter(new Authorize());\n});'),c()(),l(43,"p"),s(44," You can also apply the "),l(45,"code"),s(46,"Authorize"),c(),s(47," filter to a controller's action methods using the attribute syntax. "),c(),l(48,"pre")(49,"code",4),s(50,"Context->User;\n $claim = $user->findClaim(fn ($claim) => $claim->Type == \"name\");\n $name = $claim ? $claim->Value : null;\n return $this->content(\"Welcome {$name}\");\n }\n\n #[Route('/register', 'GET')]\n public function register(): IActionResult\n {\n return $this->view();\n }\n\n #[Route('/account/create', 'POST')]\n public function create(Registration $form): IActionResult\n {\n if (!$form->isValid()) {\n return $this->redirect('/register');\n }\n\n $data = [];\n if (file_exists(__DIR__ . '/../../data.json')) {\n $json = file_get_contents(__DIR__ . '/../../data.json');\n $data = json_decode($json);\n }\n\n $user = new User();\n $user->Username = $form->Username;\n $user->Password = password_hash($form->Password, PASSWORD_DEFAULT);\n $user->Role = \"User\";\n\n $data[] = $user;\n $json = json_encode($data, JSON_PRETTY_PRINT);\n file_put_contents(__DIR__ . '/../../data.json', $json);\n\n return $this->content(\"The user was successfully created.\");\n }\n}"),c()(),l(51,"p"),s(52," Another way to restrict access to the controller's action method is to use the Authorize attribute on the entire controller class, which applies the Authorize filter to all the action methods in the controller. But, If you want to exclude some action methods from that, you can use the "),l(53,"code"),s(54,'Authorize("Anonymous")'),c(),s(55," attribute on those methods to override the class-level filter that requires the user to be authenticated and allow access to anyone. "),c(),l(56,"p"),s(57," In this example, the Authorize filter is applied to all controller methods except for the "),l(58,"code"),s(59,"register()"),c(),s(60," and "),l(61,"code"),s(62,"login()"),c(),s(63," methods. "),c(),l(64,"pre")(65,"code",4),s(66,"content(\"Hello Administrator\");\n }\n}"),c()(),v(92,"br"),l(93,"h4"),s(94,"Authorization with multiple roles"),c(),l(95,"p"),s(96," Multiple roles can be specified as an array of strings using the named argument "),l(97,"code"),s(98,"roles:"),c(),s(99," in the Authorize attribute, and the user must have at least one of these roles to access the resources. "),c(),l(100,"pre")(101,"code",4),s(102,"content(\"Hello to either Administrator or Manager\");\n }\n}"),c()(),l(103,"p"),s(104," When applying multiple Authorize attributes, the associated resources can only be accessed if the user satisfies all specified roles, unlike the previous example, where the user only needs to have at least one of the roles. "),c(),l(105,"pre")(106,"code",4),s(107,"content(\"Hello to Administrator and Manager\");\n }\n}"),c()(),v(108,"br"),l(109,"h3"),s(110,"Policy-based Authorization"),c(),l(111,"p"),s(112," Policy-based authorization is a way of creating authorization rules that depend on claims requirements that the user must satisfy to access a resource. It can require any user's claims such as ID, Name, Email, Role, etc., unlike role-based authorization, which is just a special case of policy-based authorization that only requires the role claim. "),c(),l(113,"p"),s(114," To use a policy in your application, you must first define it in the Authorization service by calling the addPolicy() method, which allows you to specify a group of claim requirements, as shown in the following example. "),c(),l(115,"pre")(116,"code",4),s(117,"register(function ($services) {\n $services->addAuthentication(function ($builder) {\n $builder->addCookie();\n });\n // Adding the authorization service with policy\n $services->addAuthorization(function($config) {\n $config->addPolicy(\"Administration\", function ($policy) {\n $policy->RequireClaim('EmployeeNumber');\n $policy->RequireClaim('Role', ['Administrator', 'Manager']);\n }\n });\n });\n ...\n }\n}\n"),c()(),l(118,"p"),s(119," And here is an example of how to apply a policy in the Authorize attribute using the named argument "),l(120,"code"),s(121,"policy:"),c()(),l(122,"pre")(123,"code",4),s(124,"content(\"Administration space\");\n }\n}"),c()()(),l(125,"nav",5)(126,"ul",6)(127,"li",7)(128,"a",8),v(129,"i",9),s(130," Previous "),c()(),l(131,"li",7)(132,"a",10),s(133," Next "),v(134,"i",11),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/security/antiforgery",component:(()=>{class e{constructor(){}ngOnInit(){Fe.highlightAll()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["security-antiforgery"]],decls:120,vars:0,consts:[[1,"container","pt-3"],[1,"row"],["id","sidebar",2,"width","260px"],["id","content",1,"flex-grow-1",2,"width","400px"],[1,"mb-2"],[1,"language-html"],[1,"language-php"],[1,"language-php-template"],[1,"language-javascript"],["aria-label","Page navigation",1,"no-print"],[1,"nav-page"],[1,"nav-page-item"],["routerLink","/docs/security/authorization",1,"nav-page-link"],[1,"chevron","left"],["routerLink","/docs/orm/start",1,"nav-page-link"],[1,"chevron","right"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1)(2,"div",2),v(3,"app-sidebar"),c(),l(4,"div",3)(5,"article")(6,"h1"),s(7,"CSRF Prevention"),c(),v(8,"hr"),l(9,"p"),s(10," Cross-site request forgery, abbreviated as CSRF or XSRF and also known as a one-click attack or session riding, is a malicious attack that takes advantage of a user's previously authenticated session to execute unwanted actions by manipulating the interaction between a client browser and a trusted web application. "),c(),l(11,"p"),s(12," To better understand the CSRF attack, consider the following scenario: "),c(),l(13,"ul")(14,"li",4),s(15," A user signs into his account on a vulnerable website, which trusts any request received with a valid authentication cookie. "),c(),l(16,"li",4),s(17," Then, the user visits a malicious site that contains a fake HTML form to win a prize, but in the background, it posts to the vulnerable website like the following example: "),c()(),l(18,"pre")(19,"code",5),s(20,'

Congratulations! You\'re a Winner!

\n
\n \n \n
\n'),c()(),l(21,"ul")(22,"li",4),s(23," When the user clicks on the submit button. The browser sends a request that includes the authentication cookie for the requested domain. "),c(),l(24,"li",4),s(25," The vulnerable server trusts the request with the authentication context and allows any action that an authenticated user can perform. "),c()(),l(26,"p"),s(27," In addition to this scenario, the malicious site could run a script that automatically submits the form by sending the form submission as an AJAX request. "),c(),v(28,"br"),l(29,"h3"),s(30,"AntiForgery"),c(),l(31,"p"),s(32," To prevent cross-site request forgery attacks, the DevNet framework provides the "),l(33,"code"),s(34,"AntiForgery"),c(),s(35," service that generates a CSRF token, which should be included in the form data or in the request header to be verified by the server when the form is submitted. "),c(),l(36,"p"),s(37," To use the "),l(38,"code"),s(39,"AntiForgery"),c(),s(40," service across your application, you need to register it as a dependency in your application services with the help of the extension method "),l(41,"code"),s(42,"addAntiforgory()"),c(),s(43," inside the method "),l(44,"code"),s(45,"register()"),c(),s(46," of the "),l(47,"code"),s(48,"WebHostBuilder"),c(),s(49," and have the option to customize the default configurations. "),c(),l(50,"pre")(51,"code",6),s(52,"register(function ($services) {\n // Add antiForgery service.\n $services->addAntiForgery();\n });\n ...\n }\n}\n"),c()(),v(53,"br"),l(54,"h3"),s(55,"X-CSRF-TOKEN"),c(),l(56,"p"),s(57," In traditional HTML-based applications, the AntiForgery tokens are passed to the server using hidden form fields, and usually, the token used in this technique is called "),l(58,"samp"),s(59,"X-CSRF-TOKEN"),c(),s(60,". "),c(),l(61,"p"),s(62," After registering the AntiForgery service with the MVC web application, it will be injected into the view so that you can generate a token in the HTML form. "),c(),l(63,"pre")(64,"code",7),s(65,'
\n Username ?>" />\n \n \n
\n'),c()(),l(66,"p"),s(67," The controller in this example sends the view that is presented above with an Antiforgory token via the "),l(68,"code"),s(69,"edit()"),c(),s(70," method when the user requests to edit his account, and when the user submits the HTML form, the controller receives the request via the "),l(71,"code"),s(72,"update()"),c(),s(73," method, which is decorated with the "),l(74,"code"),s(75,"DevNet\\Security\\Tokens\\Csrf\\Validate"),c(),s(76," attribute to check if the request is trusted before updating the data. "),c(),l(77,"pre")(78,"code",6),s(79,"addRange($data);\n\n $user = $users->where(fn ($user) => $user->Id == $id)->first();\n if (!$user) {\n Throw \\Exception(\"page not found!\", 404);\n }\n return $this->view(['user' => $user]);\n }\n\n // Adds AntiForgery validation filter as an attribute.\n #[Validate]\n #[Route(path: '/account/update/{id}', method: 'POST')]\n public function update(int $id, User $form): IActionResult\n {\n $json = file_get_contents(__DIR__ . '/path/to/data.json');\n $data = json_decode($json, true);\n $users = new ArrayList('object');\n $users->addRange($data);\n\n $user = $users->where(fn ($user) => $user->Id == $id)->first();\n if (!$user) {\n Throw \\Exception(\"page not found!\", 404);\n }\n $user->Username = $from->Username;\n $user->Email = $from->Username;\n $json = json_encode($users->toArray(), JSON_PRETTY_PRINT);\n file_put_contents('path/to/data.json', $json);\n\n return $this->statusCode(200);\n }\n}\n"),c()(),v(80,"br"),l(81,"h3"),s(82,"X-XSRF-TOKEN"),c(),l(83,"p"),s(84," In modern JavaScript-based applications, the AntiForgery tokens are sent to the server via the AJAX request headers, and usually, the token used in this technique is called "),l(85,"samp"),s(86,"X-XSRF-TOKEN"),c(),s(87,". "),c(),l(88,"p"),s(89," In the following example, when the user requests the "),l(90,"samp"),s(91,'"/account/create"'),c(),s(92," endpoint to create a new account, the server returns an HTML form response with "),l(93,"samp"),s(94,"XSRF-TOKEN"),c(),s(95," as a cookie, which must be sent back to the server via the AJAX request header when the user submits the form to the "),l(96,"samp"),s(97,'"/account/store"'),c(),s(98," endpoint, which this one has an Antiforgory filter to check if the request is trusted or not before storing the data. "),c(),l(99,"pre")(100,"code",6),s(101,'useEndpoint(function($routes) {\n $routes->mapGet("/account/create", (function(HttpContext $context) {\n $token = $context->AntiForgery->getToken();\n $context.Response->Cookies->add("XSRF-TOKEN", token);\n $html = file_get_contents("path/to/editFrom.phtml");\n $context->Response->Body->write($html);\n }));\n\n $routes.MapPost("/account/store", (function(HttpContext $context) {\n $form = $context->Request->Form;\n $user = new User();\n $user->Username = $form->getValue(\'username\');\n $user->Password = password_hash($form->getValue(\'password\'), PASSWORD_DEFAULT);\n\n $json = file_get_contents(\'path/to/data.json\');\n $data = json_decode($json);\n\n $data[] = $user;\n $json = json_encode($data, JSON_PRETTY_PRINT);\n file_put_contents(\'path/to/data.json\', $json);\n $context->Response->setStatusCode(200);\n })\n // Adds AntiForgery validation filter to the endpoint "/account/store".\n ->addFilter(Validate::class);\n});'),c()(),l(102,"p"),s(103," Here is a Javascript example that uses the AJAX request to send back the "),l(104,"samp"),s(105,"XSRF-TOKEN"),c(),s(106," to the server after receiving it from the server via the response cookie. "),c(),l(107,"pre")(108,"code",8),s(109,'const xsrfToken = document.cookie\n .split("; ")\n .find(row => row.startsWith("XSRF-TOKEN="))\n .split("=")[1];\n\nvar request = new XMLHttpRequest();\nrequest.open("POST", "https://example.com/account/edit");\nrequest.setRequestHeader("X-XSRF-TOKEN", xsrfToken);\nrequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");\nrequest.send("username=user&email=user@example.com");\nrequest.onload = function() {\n console.log(this.status);\n }\n'),c()()(),l(110,"nav",9)(111,"ul",10)(112,"li",11)(113,"a",12),v(114,"i",13),s(115," Previous "),c()(),l(116,"li",11)(117,"a",14),s(118," Next "),v(119,"i",15),c()()()()()()())},dependencies:[Te,je]})}return e})()},{path:"docs/security",redirectTo:"docs/security/overview",pathMatch:"full"}];let l$=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[jt.forChild(c$),jt]})}return e})(),u$=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e});static#n=this.\u0275inj=mt({imports:[Yr,l$,So]})}return e})(),d$=(()=>{class e{constructor(){}ngOnInit(){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["app-header"]],decls:19,vars:0,consts:[[1,"navbar","navbar-expand-lg","navbar-light","bg-white","border-bottom","shadow-sm"],[1,"container"],["routerLink","/",1,"navbar-brand"],["type","button","data-bs-toggle","collapse","data-bs-target","#navbarSupportedContent","aria-controls","navbarSupportedContent","aria-expanded","false","aria-label","Toggle navigation",1,"navbar-toggler"],[1,"navbar-toggler-icon"],["id","navbarSupportedContent",1,"collapse","navbar-collapse"],[1,"navbar-nav","me-auto","mb-2","mb-lg-0"],[1,"nav-item"],["aria-current","page","routerLink","/docs",1,"nav-link","active"],[1,"navbar-nav","ms-auto","mb-2","mb-lg-0"],[1,"nav-item","dropdown"],["href","#","id","navbarDropdown","role","button","data-bs-toggle","dropdown","aria-expanded","false",1,"nav-link","dropdown-toggle"],["aria-labelledby","navbarDropdown",1,"dropdown-menu","dropdown-menu-end"],["routerLink","/docs",1,"dropdown-item"]],template:function(r,o){1&r&&(l(0,"nav",0)(1,"div",1)(2,"a",2),s(3,"DevNet"),c(),l(4,"button",3),v(5,"span",4),c(),l(6,"div",5)(7,"ul",6)(8,"li",7)(9,"a",8),s(10,"Documentation"),c()()(),l(11,"ul",9)(12,"li",10)(13,"a",11),s(14," Versions "),c(),l(15,"ul",12)(16,"li")(17,"a",13),s(18,"v1.1.0"),c()()()()()()()())},dependencies:[Te]})}return e})(),p$=(()=>{class e{constructor(){}ngOnInit(){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["app-footer"]],decls:3,vars:0,consts:[[1,"text-muted","bg-white","border-top","py-3"],[1,"container"]],template:function(r,o){1&r&&(l(0,"div",0)(1,"div",1),s(2," \xa9 2023 - DevNet by M. Moussaoui. "),c()())}})}return e})(),h$=(()=>{class e{constructor(){this.title="devnet"}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=Ie({type:e,selectors:[["app-root"]],decls:6,vars:0,consts:[["role","main"],[1,"mt-auto"]],template:function(r,o){1&r&&(l(0,"header"),v(1,"app-header"),c(),l(2,"main",0),v(3,"router-outlet"),c(),l(4,"footer",1),v(5,"app-footer"),c())},dependencies:[_h,d$,p$]})}return e})(),f$=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Et({type:e,bootstrap:[h$]});static#n=this.\u0275inj=mt({imports:[JR,Y2,X2,t$,o$,a$,u$,H2,So]})}return e})();QR().bootstrapModule(f$).catch(e=>console.error(e))},782:(q,$,g)=>{var y=g(548);y.registerLanguage("xml",g(149)),y.registerLanguage("bash",g(725)),y.registerLanguage("c",g(242)),y.registerLanguage("cpp",g(94)),y.registerLanguage("csharp",g(120)),y.registerLanguage("css",g(240)),y.registerLanguage("markdown",g(5)),y.registerLanguage("diff",g(826)),y.registerLanguage("ruby",g(185)),y.registerLanguage("go",g(626)),y.registerLanguage("graphql",g(653)),y.registerLanguage("ini",g(372)),y.registerLanguage("java",g(984)),y.registerLanguage("javascript",g(354)),y.registerLanguage("json",g(454)),y.registerLanguage("kotlin",g(643)),y.registerLanguage("less",g(580)),y.registerLanguage("lua",g(739)),y.registerLanguage("makefile",g(910)),y.registerLanguage("perl",g(330)),y.registerLanguage("objectivec",g(102)),y.registerLanguage("php",g(188)),y.registerLanguage("php-template",g(164)),y.registerLanguage("plaintext",g(100)),y.registerLanguage("python",g(847)),y.registerLanguage("python-repl",g(990)),y.registerLanguage("r",g(553)),y.registerLanguage("rust",g(929)),y.registerLanguage("scss",g(574)),y.registerLanguage("shell",g(498)),y.registerLanguage("sql",g(239)),y.registerLanguage("swift",g(597)),y.registerLanguage("yaml",g(84)),y.registerLanguage("typescript",g(603)),y.registerLanguage("vbnet",g(410)),y.registerLanguage("wasm",g(65)),y.HighlightJS=y,y.default=y,q.exports=y},548:q=>{var $={exports:{}};function g(w){return w instanceof Map?w.clear=w.delete=w.set=function(){throw new Error("map is read-only")}:w instanceof Set&&(w.add=w.clear=w.delete=function(){throw new Error("set is read-only")}),Object.freeze(w),Object.getOwnPropertyNames(w).forEach(function(C){var z=w[C];"object"==typeof z&&!Object.isFrozen(z)&&g(z)}),w}$.exports=g,$.exports.default=g;class y{constructor(C){void 0===C.data&&(C.data={}),this.data=C.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function k(w){return w.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function x(w,...C){const z=Object.create(null);for(const be in w)z[be]=w[be];return C.forEach(function(be){for(const ct in be)z[ct]=be[ct]}),z}const A=w=>!!w.scope||w.sublanguage&&w.language;class M{constructor(C,z){this.buffer="",this.classPrefix=z.classPrefix,C.walk(this)}addText(C){this.buffer+=k(C)}openNode(C){if(!A(C))return;let z="";z=C.sublanguage?`language-${C.language}`:((w,{prefix:C})=>{if(w.includes(".")){const z=w.split(".");return[`${C}${z.shift()}`,...z.map((be,ct)=>`${be}${"_".repeat(ct+1)}`)].join(" ")}return`${C}${w}`})(C.scope,{prefix:this.classPrefix}),this.span(z)}closeNode(C){A(C)&&(this.buffer+="
")}value(){return this.buffer}span(C){this.buffer+=``}}const T=(w={})=>{const C={children:[]};return Object.assign(C,w),C};class I{constructor(){this.rootNode=T(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(C){this.top.children.push(C)}openNode(C){const z=T({scope:C});this.add(z),this.stack.push(z)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(C){return this.constructor._walk(C,this.rootNode)}static _walk(C,z){return"string"==typeof z?C.addText(z):z.children&&(C.openNode(z),z.children.forEach(be=>this._walk(C,be)),C.closeNode(z)),C}static _collapse(C){"string"!=typeof C&&C.children&&(C.children.every(z=>"string"==typeof z)?C.children=[C.children.join("")]:C.children.forEach(z=>{I._collapse(z)}))}}class L extends I{constructor(C){super(),this.options=C}addKeyword(C,z){""!==C&&(this.openNode(z),this.addText(C),this.closeNode())}addText(C){""!==C&&this.add(C)}addSublanguage(C,z){const be=C.root;be.sublanguage=!0,be.language=z,this.add(be)}toHTML(){return new M(this,this.options).value()}finalize(){return!0}}function F(w){return w?"string"==typeof w?w:w.source:null}function H(w){return Z("(?=",w,")")}function W(w){return Z("(?:",w,")*")}function Q(w){return Z("(?:",w,")?")}function Z(...w){return w.map(z=>F(z)).join("")}function ue(...w){return"("+(function K(w){const C=w[w.length-1];return"object"==typeof C&&C.constructor===Object?(w.splice(w.length-1,1),C):{}}(w).capture?"":"?:")+w.map(be=>F(be)).join("|")+")"}function me(w){return new RegExp(w.toString()+"|").exec("").length-1}const De=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function Pe(w,{joinWith:C}){let z=0;return w.map(be=>{z+=1;const ct=z;let ut=F(be),J="";for(;ut.length>0;){const Y=De.exec(ut);if(!Y){J+=ut;break}J+=ut.substring(0,Y.index),ut=ut.substring(Y.index+Y[0].length),"\\"===Y[0][0]&&Y[1]?J+="\\"+String(Number(Y[1])+ct):(J+=Y[0],"("===Y[0]&&z++)}return J}).map(be=>`(${be})`).join(C)}const ne="[a-zA-Z]\\w*",Le="[a-zA-Z_]\\w*",st="\\b\\d+(\\.\\d+)?",Ze="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",At="\\b(0b[01]+)",Ge={begin:"\\\\[\\s\\S]",relevance:0},Zn={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[Ge]},Lt={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[Ge]},gn=function(w,C,z={}){const be=x({scope:"comment",begin:w,end:C,contains:[]},z);be.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const ct=ue("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return be.contains.push({begin:Z(/[ ]+/,"(",ct,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),be},mr=gn("//","$"),Pn=gn("/\\*","\\*/"),Qn=gn("#","$");var qt=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:ne,UNDERSCORE_IDENT_RE:Le,NUMBER_RE:st,C_NUMBER_RE:Ze,BINARY_NUMBER_RE:At,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(w={})=>{const C=/^#![ ]*\//;return w.binary&&(w.begin=Z(C,/.*\b/,w.binary,/\b.*/)),x({scope:"meta",begin:C,end:/$/,relevance:0,"on:begin":(z,be)=>{0!==z.index&&be.ignoreMatch()}},w)},BACKSLASH_ESCAPE:Ge,APOS_STRING_MODE:Zn,QUOTE_STRING_MODE:Lt,PHRASAL_WORDS_MODE:{begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},COMMENT:gn,C_LINE_COMMENT_MODE:mr,C_BLOCK_COMMENT_MODE:Pn,HASH_COMMENT_MODE:Qn,NUMBER_MODE:{scope:"number",begin:st,relevance:0},C_NUMBER_MODE:{scope:"number",begin:Ze,relevance:0},BINARY_NUMBER_MODE:{scope:"number",begin:At,relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{scope:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[Ge,{begin:/\[/,end:/\]/,relevance:0,contains:[Ge]}]}]},TITLE_MODE:{scope:"title",begin:ne,relevance:0},UNDERSCORE_TITLE_MODE:{scope:"title",begin:Le,relevance:0},METHOD_GUARD:{begin:"\\.\\s*"+Le,relevance:0},END_SAME_AS_BEGIN:function(w){return Object.assign(w,{"on:begin":(C,z)=>{z.data._beginMatch=C[1]},"on:end":(C,z)=>{z.data._beginMatch!==C[1]&&z.ignoreMatch()}})}});function Ln(w,C){"."===w.input[w.index-1]&&C.ignoreMatch()}function Xn(w,C){void 0!==w.className&&(w.scope=w.className,delete w.className)}function Io(w,C){C&&w.beginKeywords&&(w.begin="\\b("+w.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",w.__beforeBegin=Ln,w.keywords=w.keywords||w.beginKeywords,delete w.beginKeywords,void 0===w.relevance&&(w.relevance=0))}function ji(w,C){Array.isArray(w.illegal)&&(w.illegal=ue(...w.illegal))}function va(w,C){if(w.match){if(w.begin||w.end)throw new Error("begin & end are not supported with match");w.begin=w.match,delete w.match}}function To(w,C){void 0===w.relevance&&(w.relevance=1)}const ya=(w,C)=>{if(!w.beforeMatch)return;if(w.starts)throw new Error("beforeMatch cannot be used with starts");const z=Object.assign({},w);Object.keys(w).forEach(be=>{delete w[be]}),w.keywords=z.keywords,w.begin=Z(z.beforeMatch,H(z.begin)),w.starts={relevance:0,contains:[Object.assign(z,{endsParent:!0})]},w.relevance=0,delete z.beforeMatch},ba=["of","and","for","in","not","or","if","then","parent","list","value"],Vi="keyword";function Jn(w,C,z=Vi){const be=Object.create(null);return"string"==typeof w?ct(z,w.split(" ")):Array.isArray(w)?ct(z,w):Object.keys(w).forEach(function(ut){Object.assign(be,Jn(w[ut],C,ut))}),be;function ct(ut,J){C&&(J=J.map(Y=>Y.toLowerCase())),J.forEach(function(Y){const se=Y.split("|");be[se[0]]=[ut,Fn(se[0],se[1])]})}}function Fn(w,C){return C?Number(C):function eo(w){return ba.includes(w.toLowerCase())}(w)?0:1}const No={},sn=w=>{console.error(w)},$r=(w,...C)=>{console.log(`WARN: ${w}`,...C)},er=(w,C)=>{No[`${w}/${C}`]||(console.log(`Deprecated as of ${w}. ${C}`),No[`${w}/${C}`]=!0)},vr=new Error;function Ao(w,C,{key:z}){let be=0;const ct=w[z],ut={},J={};for(let Y=1;Y<=C.length;Y++)J[Y+be]=ct[Y],ut[Y+be]=!0,be+=me(C[Y-1]);w[z]=J,w[z]._emit=ut,w[z]._multi=!0}function Qe(w){(function zi(w){w.scope&&"object"==typeof w.scope&&null!==w.scope&&(w.beginScope=w.scope,delete w.scope)})(w),"string"==typeof w.beginScope&&(w.beginScope={_wrap:w.beginScope}),"string"==typeof w.endScope&&(w.endScope={_wrap:w.endScope}),function Dn(w){if(Array.isArray(w.begin)){if(w.skip||w.excludeBegin||w.returnBegin)throw sn("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),vr;if("object"!=typeof w.beginScope||null===w.beginScope)throw sn("beginScope must be object"),vr;Ao(w,w.begin,{key:"beginScope"}),w.begin=Pe(w.begin,{joinWith:""})}}(w),function Mo(w){if(Array.isArray(w.end)){if(w.skip||w.excludeEnd||w.returnEnd)throw sn("skip, excludeEnd, returnEnd not compatible with endScope: {}"),vr;if("object"!=typeof w.endScope||null===w.endScope)throw sn("endScope must be object"),vr;Ao(w,w.end,{key:"endScope"}),w.end=Pe(w.end,{joinWith:""})}}(w)}function xo(w){function C(J,Y){return new RegExp(F(J),"m"+(w.case_insensitive?"i":"")+(w.unicodeRegex?"u":"")+(Y?"g":""))}class z{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(Y,se){se.position=this.position++,this.matchIndexes[this.matchAt]=se,this.regexes.push([se,Y]),this.matchAt+=me(Y)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const Y=this.regexes.map(se=>se[1]);this.matcherRe=C(Pe(Y,{joinWith:"|"}),!0),this.lastIndex=0}exec(Y){this.matcherRe.lastIndex=this.lastIndex;const se=this.matcherRe.exec(Y);if(!se)return null;const bt=se.findIndex((no,Wi)=>Wi>0&&void 0!==no),Ue=this.matchIndexes[bt];return se.splice(0,bt),Object.assign(se,Ue)}}class be{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(Y){if(this.multiRegexes[Y])return this.multiRegexes[Y];const se=new z;return this.rules.slice(Y).forEach(([bt,Ue])=>se.addRule(bt,Ue)),se.compile(),this.multiRegexes[Y]=se,se}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(Y,se){this.rules.push([Y,se]),"begin"===se.type&&this.count++}exec(Y){const se=this.getMatcher(this.regexIndex);se.lastIndex=this.lastIndex;let bt=se.exec(Y);if(this.resumingScanAtSamePosition()&&(!bt||bt.index!==this.lastIndex)){const Ue=this.getMatcher(0);Ue.lastIndex=this.lastIndex+1,bt=Ue.exec(Y)}return bt&&(this.regexIndex+=bt.position+1,this.regexIndex===this.count&&this.considerAll()),bt}}if(w.compilerExtensions||(w.compilerExtensions=[]),w.contains&&w.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return w.classNameAliases=x(w.classNameAliases||{}),function ut(J,Y){const se=J;if(J.isCompiled)return se;[Xn,va,Qe,ya].forEach(Ue=>Ue(J,Y)),w.compilerExtensions.forEach(Ue=>Ue(J,Y)),J.__beforeBegin=null,[Io,ji,To].forEach(Ue=>Ue(J,Y)),J.isCompiled=!0;let bt=null;return"object"==typeof J.keywords&&J.keywords.$pattern&&(J.keywords=Object.assign({},J.keywords),bt=J.keywords.$pattern,delete J.keywords.$pattern),bt=bt||/\w+/,J.keywords&&(J.keywords=Jn(J.keywords,w.case_insensitive)),se.keywordPatternRe=C(bt,!0),Y&&(J.begin||(J.begin=/\B|\b/),se.beginRe=C(se.begin),!J.end&&!J.endsWithParent&&(J.end=/\B|\b/),J.end&&(se.endRe=C(se.end)),se.terminatorEnd=F(se.end)||"",J.endsWithParent&&Y.terminatorEnd&&(se.terminatorEnd+=(J.end?"|":"")+Y.terminatorEnd)),J.illegal&&(se.illegalRe=C(J.illegal)),J.contains||(J.contains=[]),J.contains=[].concat(...J.contains.map(function(Ue){return function qi(w){return w.variants&&!w.cachedVariants&&(w.cachedVariants=w.variants.map(function(C){return x(w,{variants:null},C)})),w.cachedVariants?w.cachedVariants:to(w)?x(w,{starts:w.starts?x(w.starts):null}):Object.isFrozen(w)?x(w):w}("self"===Ue?J:Ue)})),J.contains.forEach(function(Ue){ut(Ue,se)}),J.starts&&ut(J.starts,Y),se.matcher=function ct(J){const Y=new be;return J.contains.forEach(se=>Y.addRule(se.begin,{rule:se,type:"begin"})),J.terminatorEnd&&Y.addRule(J.terminatorEnd,{type:"end"}),J.illegal&&Y.addRule(J.illegal,{type:"illegal"}),Y}(se),se}(w)}function to(w){return!!w&&(w.endsWithParent||to(w.starts))}class Rl extends Error{constructor(C,z){super(C),this.name="HTMLInjectionError",this.html=z}}const Gi=k,wa=x,Ea=Symbol("nomatch");var Ro=function(w){const C=Object.create(null),z=Object.create(null),be=[];let ct=!0;const ut="Could not find the language '{}', did you forget to load/include a language module?",J={disableAutodetect:!0,name:"Plain text",contains:[]};let Y={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:L};function se(V){return Y.noHighlightRe.test(V)}function Ue(V,re,Ae){let Xe="",ht="";"object"==typeof re?(Xe=V,Ae=re.ignoreIllegals,ht=re.language):(er("10.7.0","highlight(lang, code, ...args) has been deprecated."),er("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),ht=V,Xe=re),void 0===Ae&&(Ae=!0);const mn={code:Xe,language:ht};oo("before:highlight",mn);const nr=mn.result?mn.result:no(mn.language,mn.code,Ae);return nr.code=mn.code,oo("after:highlight",nr),nr}function no(V,re,Ae,Xe){const ht=Object.create(null);function mn(S,j){return S.keywords[j]}function nr(){if(!fe.keywords)return void gt.addText(Ke);let S=0;fe.keywordPatternRe.lastIndex=0;let j=fe.keywordPatternRe.exec(Ke),Se="";for(;j;){Se+=Ke.substring(S,j.index);const We=Je.case_insensitive?j[0].toLowerCase():j[0],Rt=mn(fe,We);if(Rt){const[vn,Wt]=Rt;gt.addText(Se),Se="",ht[We]=(ht[We]||0)+1,ht[We]<=7&&(Ji+=Wt),vn.startsWith("_")?Se+=j[0]:gt.addKeyword(j[0],Je.classNameAliases[vn]||vn)}else Se+=j[0];S=fe.keywordPatternRe.lastIndex,j=fe.keywordPatternRe.exec(Ke)}Se+=Ke.substring(S),gt.addText(Se)}function Gt(){null!=fe.subLanguage?function ft(){if(""===Ke)return;let S=null;if("string"==typeof fe.subLanguage){if(!C[fe.subLanguage])return void gt.addText(Ke);S=no(fe.subLanguage,Ke,!0,oe[fe.subLanguage]),oe[fe.subLanguage]=S._top}else S=Ki(Ke,fe.subLanguage.length?fe.subLanguage:null);fe.relevance>0&&(Ji+=S.relevance),gt.addSublanguage(S._emitter,S.language)}():nr(),Ke=""}function wt(S,j){let Se=1;const We=j.length-1;for(;Se<=We;){if(!S._emit[Se]){Se++;continue}const Rt=Je.classNameAliases[S[Se]]||S[Se],vn=j[Se];Rt?gt.addKeyword(vn,Rt):(Ke=vn,nr(),Ke=""),Se++}}function ae(S,j){return S.scope&&"string"==typeof S.scope&>.openNode(Je.classNameAliases[S.scope]||S.scope),S.beginScope&&(S.beginScope._wrap?(gt.addKeyword(Ke,Je.classNameAliases[S.beginScope._wrap]||S.beginScope._wrap),Ke=""):S.beginScope._multi&&(wt(S.beginScope,j),Ke="")),fe=Object.create(S,{parent:{value:fe}}),fe}function Yi(S,j,Se){let We=function Ee(w,C){const z=w&&w.exec(C);return z&&0===z.index}(S.endRe,Se);if(We){if(S["on:end"]){const Rt=new y(S);S["on:end"](j,Rt),Rt.isMatchIgnored&&(We=!1)}if(We){for(;S.endsParent&&S.parent;)S=S.parent;return S}}if(S.endsWithParent)return Yi(S.parent,j,Se)}function Zi(S){return 0===fe.matcher.regexIndex?(Ke+=S[0],1):(Lr=!0,0)}function Bl(S){const j=S[0],Se=re.substring(S.index),We=Yi(fe,S,Se);if(!We)return Ea;const Rt=fe;fe.endScope&&fe.endScope._wrap?(Gt(),gt.addKeyword(j,fe.endScope._wrap)):fe.endScope&&fe.endScope._multi?(Gt(),wt(fe.endScope,S)):Rt.skip?Ke+=j:(Rt.returnEnd||Rt.excludeEnd||(Ke+=j),Gt(),Rt.excludeEnd&&(Ke=j));do{fe.scope&>.closeNode(),!fe.skip&&!fe.subLanguage&&(Ji+=fe.relevance),fe=fe.parent}while(fe!==We.parent);return We.starts&&ae(We.starts,S),Rt.returnEnd?0:j.length}let Oe={};function io(S,j){const Se=j&&j[0];if(Ke+=S,null==Se)return Gt(),0;if("begin"===Oe.type&&"end"===j.type&&Oe.index===j.index&&""===Se){if(Ke+=re.slice(j.index,j.index+1),!ct){const We=new Error(`0 width match regex (${V})`);throw We.languageName=V,We.badRule=Oe.rule,We}return 1}if(Oe=j,"begin"===j.type)return function Sn(S){const j=S[0],Se=S.rule,We=new y(Se),Rt=[Se.__beforeBegin,Se["on:begin"]];for(const vn of Rt)if(vn&&(vn(S,We),We.isMatchIgnored))return Zi(j);return Se.skip?Ke+=j:(Se.excludeBegin&&(Ke+=j),Gt(),!Se.returnBegin&&!Se.excludeBegin&&(Ke=j)),ae(Se,S),Se.returnBegin?0:j.length}(j);if("illegal"===j.type&&!Ae){const We=new Error('Illegal lexeme "'+Se+'" for mode "'+(fe.scope||"")+'"');throw We.mode=fe,We}if("end"===j.type){const We=Bl(j);if(We!==Ea)return We}if("illegal"===j.type&&""===Se)return 1;if(B>1e5&&B>3*j.index)throw new Error("potential infinite loop, way more iterations than matches");return Ke+=Se,Se.length}const Je=tr(V);if(!Je)throw sn(ut.replace("{}",V)),new Error('Unknown language: "'+V+'"');const Qi=xo(Je);let Xi="",fe=Xe||Qi;const oe={},gt=new Y.__emitter(Y);!function Ul(){const S=[];for(let j=fe;j!==Je;j=j.parent)j.scope&&S.unshift(j.scope);S.forEach(j=>gt.openNode(j))}();let Ke="",Ji=0,rr=0,B=0,Lr=!1;try{for(fe.matcher.considerAll();;){B++,Lr?Lr=!1:fe.matcher.considerAll(),fe.matcher.lastIndex=rr;const S=fe.matcher.exec(re);if(!S)break;const Se=io(re.substring(rr,S.index),S);rr=S.index+Se}return io(re.substring(rr)),gt.closeAllNodes(),gt.finalize(),Xi=gt.toHTML(),{language:V,value:Xi,relevance:Ji,illegal:!1,_emitter:gt,_top:fe}}catch(S){if(S.message&&S.message.includes("Illegal"))return{language:V,value:Gi(re),illegal:!0,relevance:0,_illegalBy:{message:S.message,index:rr,context:re.slice(rr-100,rr+100),mode:S.mode,resultSoFar:Xi},_emitter:gt};if(ct)return{language:V,value:Gi(re),illegal:!1,relevance:0,errorRaised:S,_emitter:gt,_top:fe};throw S}}function Ki(V,re){re=re||Y.languages||Object.keys(C);const Ae=function Wi(V){const re={value:Gi(V),illegal:!1,relevance:0,_top:J,_emitter:new Y.__emitter(Y)};return re._emitter.addText(V),re}(V),Xe=re.filter(tr).filter(Da).map(Gt=>no(Gt,V,!1));Xe.unshift(Ae);const ht=Xe.sort((Gt,wt)=>{if(Gt.relevance!==wt.relevance)return wt.relevance-Gt.relevance;if(Gt.language&&wt.language){if(tr(Gt.language).supersetOf===wt.language)return 1;if(tr(wt.language).supersetOf===Gt.language)return-1}return 0}),[mn,nr]=ht,ft=mn;return ft.secondBest=nr,ft}function Oo(V){let re=null;const Ae=function bt(V){let re=V.className+" ";re+=V.parentNode?V.parentNode.className:"";const Ae=Y.languageDetectRe.exec(re);if(Ae){const Xe=tr(Ae[1]);return Xe||($r(ut.replace("{}",Ae[1])),$r("Falling back to no-highlight mode for this block.",V)),Xe?Ae[1]:"no-highlight"}return re.split(/\s+/).find(Xe=>se(Xe)||tr(Xe))}(V);if(se(Ae))return;if(oo("before:highlightElement",{el:V,language:Ae}),V.children.length>0&&(Y.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(V)),Y.throwUnescapedHTML))throw new Rl("One of your code blocks includes unescaped HTML.",V.innerHTML);re=V;const Xe=re.textContent,ht=Ae?Ue(Xe,{language:Ae,ignoreIllegals:!0}):Ki(Xe);V.innerHTML=ht.value,function kl(V,re,Ae){const Xe=re&&z[re]||Ae;V.classList.add("hljs"),V.classList.add(`language-${Xe}`)}(V,Ae,ht.language),V.result={language:ht.language,re:ht.relevance,relevance:ht.relevance},ht.secondBest&&(V.secondBest={language:ht.secondBest.language,relevance:ht.secondBest.relevance}),oo("after:highlightElement",{el:V,result:ht,text:Xe})}let _a=!1;function pt(){"loading"!==document.readyState?document.querySelectorAll(Y.cssSelector).forEach(Oo):_a=!0}function tr(V){return V=(V||"").toLowerCase(),C[V]||C[z[V]]}function ko(V,{languageName:re}){"string"==typeof V&&(V=[V]),V.forEach(Ae=>{z[Ae.toLowerCase()]=re})}function Da(V){const re=tr(V);return re&&!re.disableAutodetect}function oo(V,re){const Ae=V;be.forEach(function(Xe){Xe[Ae]&&Xe[Ae](re)})}typeof window<"u"&&window.addEventListener&&window.addEventListener("DOMContentLoaded",function Pr(){_a&&pt()},!1),Object.assign(w,{highlight:Ue,highlightAuto:Ki,highlightAll:pt,highlightElement:Oo,highlightBlock:function Ca(V){return er("10.7.0","highlightBlock will be removed entirely in v12.0"),er("10.7.0","Please use highlightElement now."),Oo(V)},configure:function $l(V){Y=wa(Y,V)},initHighlighting:()=>{pt(),er("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")},initHighlightingOnLoad:function Bn(){pt(),er("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")},registerLanguage:function Cn(V,re){let Ae=null;try{Ae=re(w)}catch(Xe){if(sn("Language definition for '{}' could not be registered.".replace("{}",V)),!ct)throw Xe;sn(Xe),Ae=J}Ae.name||(Ae.name=V),C[V]=Ae,Ae.rawDefinition=re.bind(null,w),Ae.aliases&&ko(Ae.aliases,{languageName:V})},unregisterLanguage:function Oh(V){delete C[V];for(const re of Object.keys(z))z[re]===V&&delete z[re]},listLanguages:function Ll(){return Object.keys(C)},getLanguage:tr,registerAliases:ko,autoDetection:Da,inherit:wa,addPlugin:function Fl(V){(function ro(V){V["before:highlightBlock"]&&!V["before:highlightElement"]&&(V["before:highlightElement"]=re=>{V["before:highlightBlock"](Object.assign({block:re.el},re))}),V["after:highlightBlock"]&&!V["after:highlightElement"]&&(V["after:highlightElement"]=re=>{V["after:highlightBlock"](Object.assign({block:re.el},re))})})(V),be.push(V)}}),w.debugMode=function(){ct=!1},w.safeMode=function(){ct=!0},w.versionString="11.6.0",w.regex={concat:Z,lookahead:H,either:ue,optional:Q,anyNumberOfTimes:W};for(const V in qt)"object"==typeof qt[V]&&$.exports(qt[V]);return Object.assign(w,qt),w}({});q.exports=Ro,Ro.HighlightJS=Ro,Ro.default=Ro},725:q=>{q.exports=function $(g){const k={},x={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[k]}]};Object.assign(k,{className:"variable",variants:[{begin:g.regex.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},x]});const R={className:"subst",begin:/\$\(/,end:/\)/,contains:[g.BACKSLASH_ESCAPE]},A={begin:/<<-?\s*(?=\w+)/,starts:{contains:[g.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},U={className:"string",begin:/"/,end:/"/,contains:[g.BACKSLASH_ESCAPE,k,R]};R.contains.push(U);const I={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},g.NUMBER_MODE,k]},F=g.SHEBANG({binary:`(${["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"].join("|")})`,relevance:10}),H={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[g.inherit(g.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:["if","then","else","elif","fi","for","while","in","do","done","case","esac","function"],literal:["true","false"],built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"]},contains:[F,g.SHEBANG(),H,I,g.HASH_COMMENT_MODE,A,{match:/(\/[a-z._-]+)+/},U,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},k]}}},242:q=>{q.exports=function $(g){const y=g.regex,k=g.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),x="decltype\\(auto\\)",R="[a-zA-Z_]\\w*::",U="("+x+"|"+y.optional(R)+"[a-zA-Z_]\\w*"+y.optional("<[^<>]+>")+")",M={className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{match:/\batomic_[a-z]{3,6}\b/}]},I={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[g.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},g.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},L={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},F={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},g.inherit(I,{className:"string"}),{className:"string",begin:/<.*?>/},k,g.C_BLOCK_COMMENT_MODE]},H={className:"title",begin:y.optional(R)+g.IDENT_RE,relevance:0},W=y.optional(R)+g.IDENT_RE+"\\s*\\(",K={keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"],type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal128","const","static","complex","bool","imaginary"],literal:"true false NULL",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr"},ue=[F,M,k,g.C_BLOCK_COMMENT_MODE,L,I],me={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:K,contains:ue.concat([{begin:/\(/,end:/\)/,keywords:K,contains:ue.concat(["self"]),relevance:0}]),relevance:0},Ee={begin:"("+U+"[\\*&\\s]+)+"+W,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:K,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:x,keywords:K,relevance:0},{begin:W,returnBegin:!0,contains:[g.inherit(H,{className:"title.function"})],relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:K,relevance:0,contains:[k,g.C_BLOCK_COMMENT_MODE,I,L,M,{begin:/\(/,end:/\)/,keywords:K,relevance:0,contains:["self",k,g.C_BLOCK_COMMENT_MODE,I,L,M]}]},M,k,g.C_BLOCK_COMMENT_MODE,F]};return{name:"C",aliases:["h"],keywords:K,disableAutodetect:!0,illegal:"=]/,contains:[{beginKeywords:"final class struct"},g.TITLE_MODE]}]),exports:{preprocessor:F,strings:I,keywords:K}}}},94:q=>{q.exports=function $(g){const y=g.regex,k=g.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),x="decltype\\(auto\\)",R="[a-zA-Z_]\\w*::",U="(?!struct)("+x+"|"+y.optional(R)+"[a-zA-Z_]\\w*"+y.optional("<[^<>]+>")+")",M={className:"type",begin:"\\b[a-z\\d_]*_t\\b"},I={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[g.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},g.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},L={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},F={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},g.inherit(I,{className:"string"}),{className:"string",begin:/<.*?>/},k,g.C_BLOCK_COMMENT_MODE]},H={className:"title",begin:y.optional(R)+g.IDENT_RE,relevance:0},W=y.optional(R)+g.IDENT_RE+"\\s*\\(",De={type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"]},Pe={className:"function.dispatch",relevance:0,keywords:{_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"]},begin:y.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,g.IDENT_RE,y.lookahead(/(<[^<>]+>|)\s*\(/))},qe=[Pe,F,M,k,g.C_BLOCK_COMMENT_MODE,L,I],ne={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:De,contains:qe.concat([{begin:/\(/,end:/\)/,keywords:De,contains:qe.concat(["self"]),relevance:0}]),relevance:0};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:De,illegal:".]/,contains:[{begin:x,keywords:De,relevance:0},{begin:W,returnBegin:!0,contains:[H],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[I,L]},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:De,relevance:0,contains:[k,g.C_BLOCK_COMMENT_MODE,I,L,M,{begin:/\(/,end:/\)/,keywords:De,relevance:0,contains:["self",k,g.C_BLOCK_COMMENT_MODE,I,L,M]}]},M,k,g.C_BLOCK_COMMENT_MODE,F]},Pe,qe,[F,{begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\s*<(?!<)",end:">",keywords:De,contains:["self",M]},{begin:g.IDENT_RE+"::",keywords:De},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:"keyword",3:"title.class"}}])}}},120:q=>{q.exports=function $(g){const U={keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","async","await","by","descending","equals","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","remove","select","set","unmanaged","value|0","var","when","where","with","yield"]),built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"],literal:["default","false","null","true"]},M=g.inherit(g.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),T={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},I={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},L=g.inherit(I,{illegal:/\n/}),F={className:"subst",begin:/\{/,end:/\}/,keywords:U},H=g.inherit(F,{illegal:/\n/}),W={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},g.BACKSLASH_ESCAPE,H]},Q={className:"string",begin:/\$@"/,end:'"',contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},F]},Z=g.inherit(Q,{illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},H]});F.contains=[Q,W,I,g.APOS_STRING_MODE,g.QUOTE_STRING_MODE,T,g.C_BLOCK_COMMENT_MODE],H.contains=[Z,W,L,g.APOS_STRING_MODE,g.QUOTE_STRING_MODE,T,g.inherit(g.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];const K={variants:[Q,W,I,g.APOS_STRING_MODE,g.QUOTE_STRING_MODE]},ue={begin:"<",end:">",contains:[{beginKeywords:"in out"},M]},me=g.IDENT_RE+"(<"+g.IDENT_RE+"(\\s*,\\s*"+g.IDENT_RE+")*>)?(\\[\\])?",Ee={begin:"@"+g.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:U,illegal:/::/,contains:[g.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:""}]}]}),g.C_LINE_COMMENT_MODE,g.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{keyword:"if else elif endif define undef warning error line region endregion pragma checksum"}},K,T,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},M,ue,g.C_LINE_COMMENT_MODE,g.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[M,g.C_LINE_COMMENT_MODE,g.C_BLOCK_COMMENT_MODE]},{beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[M,ue,g.C_LINE_COMMENT_MODE,g.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+me+"\\s+)+"+g.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:U,contains:[{beginKeywords:["public","private","protected","static","internal","protected","abstract","async","extern","override","unsafe","virtual","new","sealed","partial"].join(" "),relevance:0},{begin:g.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,contains:[g.TITLE_MODE,ue],relevance:0},{match:/\(\)/},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:U,relevance:0,contains:[K,T,g.C_BLOCK_COMMENT_MODE]},g.C_LINE_COMMENT_MODE,g.C_BLOCK_COMMENT_MODE]},Ee]}}},240:q=>{const g=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],y=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],k=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],x=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],R=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse();q.exports=function A(U){const M=U.regex,T=(U=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:U.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[U.APOS_STRING_MODE,U.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:U.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}}))(U),W=[U.APOS_STRING_MODE,U.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[T.BLOCK_COMMENT,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/},T.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},T.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+k.join("|")+")"},{begin:":(:)?("+x.join("|")+")"}]},T.CSS_VARIABLE,{className:"attribute",begin:"\\b("+R.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[T.BLOCK_COMMENT,T.HEXCOLOR,T.IMPORTANT,T.CSS_NUMBER_MODE,...W,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...W,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},T.FUNCTION_DISPATCH]},{begin:M.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only",attribute:y.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...W,T.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+g.join("|")+")\\b"}]}}},826:q=>{q.exports=function $(g){const y=g.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:y.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:y.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}},626:q=>{q.exports=function $(g){const A={keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"],type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"],literal:["true","false","iota","nil"],built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"]};return{name:"Go",aliases:["golang"],keywords:A,illegal:"{q.exports=function $(g){const y=g.regex;return{name:"GraphQL",aliases:["gql"],case_insensitive:!0,disableAutodetect:!1,keywords:{keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"],literal:["true","false","null"]},contains:[g.HASH_COMMENT_MODE,g.QUOTE_STRING_MODE,g.NUMBER_MODE,{scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation",begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/,end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{scope:"symbol",begin:y.concat(/[_A-Za-z][_0-9A-Za-z]*/,y.lookahead(/\s*:/)),relevance:0}],illegal:[/[;<']/,/BEGIN/]}}},372:q=>{q.exports=function $(g){const y=g.regex,k={className:"number",relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{begin:g.NUMBER_RE}]},x=g.COMMENT();x.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];const R={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)\}/}]},A={className:"literal",begin:/\bon|off|true|false|yes|no\b/},U={className:"string",contains:[g.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]},M={begin:/\[/,end:/\]/,contains:[x,A,R,U,k,"self"],relevance:0},F=y.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[x,{className:"section",begin:/\[+/,end:/\]+/},{begin:y.concat(F,"(\\s*\\.\\s*",F,")*",y.lookahead(/\s*=\s*[^#\s]/)),className:"attr",starts:{end:/$/,contains:[x,M,A,R,U,k]}}]}}},984:q=>{var $="[0-9](_*[0-9])*",g=`\\.(${$})`,y="[0-9a-fA-F](_*[0-9a-fA-F])*",k={className:"number",variants:[{begin:`(\\b(${$})((${g})|\\.)?|(${g}))[eE][+-]?(${$})[fFdD]?\\b`},{begin:`\\b(${$})((${g})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${g})[fFdD]?\\b`},{begin:`\\b(${$})[fFdD]\\b`},{begin:`\\b0[xX]((${y})\\.?|(${y})?\\.(${y}))[pP][+-]?(${$})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${y})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function x(A,U,M){return-1===M?"":A.replace(U,T=>x(A,U,M-1))}q.exports=function R(A){const U=A.regex,M="[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",T=M+x("(?:<"+M+"~~~(?:\\s*,\\s*"+M+"~~~)*>)?",/~~~/g,2),W={keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed"],literal:["false","true","null"],type:["char","boolean","long","float","int","byte","short","double"],built_in:["super","this"]},Q={className:"meta",begin:"@"+M,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},Z={className:"params",begin:/\(/,end:/\)/,keywords:W,relevance:0,contains:[A.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:"Java",aliases:["jsp"],keywords:W,illegal:/<\/|#/,contains:[A.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},A.C_LINE_COMMENT_MODE,A.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:"string",contains:[A.BACKSLASH_ESCAPE]},A.APOS_STRING_MODE,A.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,M],className:{1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{begin:[U.concat(/(?!else)/,M),/\s+/,M,/\s+/,/=(?!=)/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,M],className:{1:"keyword",3:"title.class"},contains:[Z,A.C_LINE_COMMENT_MODE,A.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+T+"\\s+)",A.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:W,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:W,relevance:0,contains:[Q,A.APOS_STRING_MODE,A.QUOTE_STRING_MODE,k,A.C_BLOCK_COMMENT_MODE]},A.C_LINE_COMMENT_MODE,A.C_BLOCK_COMMENT_MODE]},k,Q]}}},354:q=>{const $="[A-Za-z$_][0-9A-Za-z$_]*",g=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],y=["true","false","null","undefined","NaN","Infinity"],k=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],x=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],R=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],A=["arguments","this","super","console","window","document","localStorage","module","global"],U=[].concat(R,k,x);q.exports=function M(T){const I=T.regex,F=$,Q={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(Ne,ve)=>{const xt=Ne[0].length+Ne.index,Ce=Ne.input[xt];if("<"===Ce||","===Ce)return void ve.ignoreMatch();let zt;">"===Ce&&(((Ne,{after:ve})=>{const xt="",on={match:[/const|var|let/,/\s+/,F,/\s*/,/=\s*/,/(async\s*)?/,I.lookahead(Vt)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[at]};return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:Z,exports:{PARAMS_CONTAINS:Mt,CLASS_REFERENCE:Zn},illegal:/#(?![$_A-z])/,contains:[T.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},T.APOS_STRING_MODE,T.QUOTE_STRING_MODE,Pe,qe,ne,st,Ee,Zn,{className:"attr",begin:F+I.lookahead(":"),relevance:0},on,{begin:"("+T.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[st,T.REGEXP_MODE,{className:"function",begin:Vt,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:T.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:Z,contains:Mt}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:""},{match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:Q.begin,"on:begin":Q.isTrulyOpeningTag,end:Q.end}],subLanguage:"xml",contains:[{begin:Q.begin,end:Q.end,skip:!0,contains:["self"]}]}]},Be,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+T.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[at,T.inherit(T.TITLE_MODE,{begin:F,className:"title.function"})]},{match:/\.\.\./,relevance:0},Qn,{match:"\\$"+F,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[at]},Pn,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},Ge,It,{match:/\$[(.]/}]}}},454:q=>{q.exports=function $(g){const x=["true","false","null"],R={scope:"literal",beginKeywords:x.join(" ")};return{name:"JSON",keywords:{literal:x},contains:[{className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},{match:/[{}[\],:]/,className:"punctuation",relevance:0},g.QUOTE_STRING_MODE,R,g.C_NUMBER_MODE,g.C_LINE_COMMENT_MODE,g.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}},643:q=>{var $="[0-9](_*[0-9])*",g=`\\.(${$})`,y="[0-9a-fA-F](_*[0-9a-fA-F])*",k={className:"number",variants:[{begin:`(\\b(${$})((${g})|\\.)?|(${g}))[eE][+-]?(${$})[fFdD]?\\b`},{begin:`\\b(${$})((${g})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${g})[fFdD]?\\b`},{begin:`\\b(${$})[fFdD]\\b`},{begin:`\\b0[xX]((${y})\\.?|(${y})?\\.(${y}))[pP][+-]?(${$})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${y})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};q.exports=function x(R){const A={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},M={className:"symbol",begin:R.UNDERSCORE_IDENT_RE+"@"},T={className:"subst",begin:/\$\{/,end:/\}/,contains:[R.C_NUMBER_MODE]},I={className:"variable",begin:"\\$"+R.UNDERSCORE_IDENT_RE},L={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[I,T]},{begin:"'",end:"'",illegal:/\n/,contains:[R.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[R.BACKSLASH_ESCAPE,I,T]}]};T.contains.push(L);const F={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+R.UNDERSCORE_IDENT_RE+")?"},H={className:"meta",begin:"@"+R.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[R.inherit(L,{className:"string"}),"self"]}]},W=k,Q=R.COMMENT("/\\*","\\*/",{contains:[R.C_BLOCK_COMMENT_MODE]}),Z={variants:[{className:"type",begin:R.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},K=Z;return K.variants[1].contains=[Z],Z.variants[1].contains=[K],{name:"Kotlin",aliases:["kt","kts"],keywords:A,contains:[R.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),R.C_LINE_COMMENT_MODE,Q,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},M,F,H,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:A,relevance:5,contains:[{begin:R.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[R.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:A,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[Z,R.C_LINE_COMMENT_MODE,Q],relevance:0},R.C_LINE_COMMENT_MODE,Q,F,H,L,R.C_NUMBER_MODE]},Q]},{begin:[/class|interface|trait/,/\s+/,R.UNDERSCORE_IDENT_RE],beginScope:{3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},R.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/,excludeBegin:!0,returnEnd:!0},F,H]},L,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},W]}}},580:q=>{const g=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],y=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],k=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],x=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],R=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse(),A=k.concat(x);q.exports=function U(M){const T=(M=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:M.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[M.APOS_STRING_MODE,M.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:M.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}}))(M),I=A,F="[\\w-]+",H="("+F+"|@\\{"+F+"\\})",W=[],Q=[],Z=function(Ze){return{className:"string",begin:"~?"+Ze+".*?"+Ze}},K=function(Ze,At,Mt){return{className:Ze,begin:At,relevance:Mt}},ue={$pattern:/[a-z-]+/,keyword:"and or not only",attribute:y.join(" ")},me={begin:"\\(",end:"\\)",contains:Q,keywords:ue,relevance:0};Q.push(M.C_LINE_COMMENT_MODE,M.C_BLOCK_COMMENT_MODE,Z("'"),Z('"'),T.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},T.HEXCOLOR,me,K("variable","@@?"+F,10),K("variable","@\\{"+F+"\\}"),K("built_in","~?`[^`]*?`"),{className:"attribute",begin:F+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0},T.IMPORTANT,{beginKeywords:"and not"},T.FUNCTION_DISPATCH);const Ee=Q.concat({begin:/\{/,end:/\}/,contains:W}),De={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(Q)},Pe={begin:H+"\\s*:",returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/},T.CSS_VARIABLE,{className:"attribute",begin:"\\b("+R.join("|")+")\\b",end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:Q}}]},qe={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",keywords:ue,returnEnd:!0,contains:Q,relevance:0}},ne={className:"variable",variants:[{begin:"@"+F+"\\s*:",relevance:15},{begin:"@"+F}],starts:{end:"[;}]",returnEnd:!0,contains:Ee}},Le={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:H,end:/\{/}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[M.C_LINE_COMMENT_MODE,M.C_BLOCK_COMMENT_MODE,De,K("keyword","all\\b"),K("variable","@\\{"+F+"\\}"),{begin:"\\b("+g.join("|")+")\\b",className:"selector-tag"},T.CSS_NUMBER_MODE,K("selector-tag",H,0),K("selector-id","#"+H),K("selector-class","\\."+H,0),K("selector-tag","&",0),T.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",begin:":("+k.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+x.join("|")+")"},{begin:/\(/,end:/\)/,relevance:0,contains:Ee},{begin:"!important"},T.FUNCTION_DISPATCH]},st={begin:F+`:(:)?(${I.join("|")})`,returnBegin:!0,contains:[Le]};return W.push(M.C_LINE_COMMENT_MODE,M.C_BLOCK_COMMENT_MODE,qe,ne,st,Pe,Le,De,T.FUNCTION_DISPATCH),{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:W}}},739:q=>{q.exports=function $(g){const y="\\[=*\\[",k="\\]=*\\]",x={begin:y,end:k,contains:["self"]},R=[g.COMMENT("--(?!"+y+")","$"),g.COMMENT("--"+y,k,{contains:[x],relevance:10})];return{name:"Lua",keywords:{$pattern:g.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:R.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[g.inherit(g.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:R}].concat(R)},g.C_NUMBER_MODE,g.APOS_STRING_MODE,g.QUOTE_STRING_MODE,{className:"string",begin:y,end:k,contains:[x],relevance:5}])}}},910:q=>{q.exports=function $(g){const y={className:"variable",variants:[{begin:"\\$\\("+g.UNDERSCORE_IDENT_RE+"\\)",contains:[g.BACKSLASH_ESCAPE]},{begin:/\$[@%{q.exports=function $(g){const k={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},T={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:g.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},I={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},L={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]},F=g.inherit(I,{contains:[]}),H=g.inherit(L,{contains:[]});I.contains.push(H),L.contains.push(F);let W=[k,T];return[I,L,F,H].forEach(K=>{K.contains=K.contains.concat(W)}),W=W.concat(I,L),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:W},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:W}]}]},k,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},I,L,{className:"quote",begin:"^>\\s+",contains:W,end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},T,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}},102:q=>{q.exports=function $(g){const k=/[a-zA-Z@][a-zA-Z0-9_]*/,T={$pattern:k,keyword:["@interface","@class","@protocol","@implementation"]};return{name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"],keywords:{"variable.language":["this","super"],$pattern:k,keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"],literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"],built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"],type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"]},illegal:"/,end:/$/,illegal:"\\n"},g.C_LINE_COMMENT_MODE,g.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+T.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:T,contains:[g.UNDERSCORE_TITLE_MODE]},{begin:"\\."+g.UNDERSCORE_IDENT_RE,relevance:0}]}}},330:q=>{q.exports=function $(g){const y=g.regex,x=/[dualxmsipngr]{0,12}/,R={$pattern:/[\w.]+/,keyword:["abs","accept","alarm","and","atan2","bind","binmode","bless","break","caller","chdir","chmod","chomp","chop","chown","chr","chroot","close","closedir","connect","continue","cos","crypt","dbmclose","dbmopen","defined","delete","die","do","dump","each","else","elsif","endgrent","endhostent","endnetent","endprotoent","endpwent","endservent","eof","eval","exec","exists","exit","exp","fcntl","fileno","flock","for","foreach","fork","format","formline","getc","getgrent","getgrgid","getgrnam","gethostbyaddr","gethostbyname","gethostent","getlogin","getnetbyaddr","getnetbyname","getnetent","getpeername","getpgrp","getpriority","getprotobyname","getprotobynumber","getprotoent","getpwent","getpwnam","getpwuid","getservbyname","getservbyport","getservent","getsockname","getsockopt","given","glob","gmtime","goto","grep","gt","hex","if","index","int","ioctl","join","keys","kill","last","lc","lcfirst","length","link","listen","local","localtime","log","lstat","lt","ma","map","mkdir","msgctl","msgget","msgrcv","msgsnd","my","ne","next","no","not","oct","open","opendir","or","ord","our","pack","package","pipe","pop","pos","print","printf","prototype","push","q|0","qq","quotemeta","qw","qx","rand","read","readdir","readline","readlink","readpipe","recv","redo","ref","rename","require","reset","return","reverse","rewinddir","rindex","rmdir","say","scalar","seek","seekdir","select","semctl","semget","semop","send","setgrent","sethostent","setnetent","setpgrp","setpriority","setprotoent","setpwent","setservent","setsockopt","shift","shmctl","shmget","shmread","shmwrite","shutdown","sin","sleep","socket","socketpair","sort","splice","split","sprintf","sqrt","srand","stat","state","study","sub","substr","symlink","syscall","sysopen","sysread","sysseek","system","syswrite","tell","telldir","tie","tied","time","times","tr","truncate","uc","ucfirst","umask","undef","unless","unlink","unpack","unshift","untie","until","use","utime","values","vec","wait","waitpid","wantarray","warn","when","while","write","x|0","xor","y|0"].join(" ")},A={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:R},U={begin:/->\{/,end:/\}/},M={variants:[{begin:/\$\d/},{begin:y.concat(/[$%@](\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])")},{begin:/[$%@][^\s\w{]/,relevance:0}]},T=[g.BACKSLASH_ESCAPE,A,M],I=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],L=(W,Q,Z="\\1")=>{const K="\\1"===Z?Z:y.concat(Z,Q);return y.concat(y.concat("(?:",W,")"),Q,/(?:\\.|[^\\\/])*?/,K,/(?:\\.|[^\\\/])*?/,Z,x)},F=(W,Q,Z)=>y.concat(y.concat("(?:",W,")"),Q,/(?:\\.|[^\\\/])*?/,Z,x),H=[M,g.HASH_COMMENT_MODE,g.COMMENT(/^=\w/,/=cut/,{endsWithParent:!0}),U,{className:"string",contains:T,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[g.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[g.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{begin:"-?\\w+\\s*=>",relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+g.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[g.HASH_COMMENT_MODE,{className:"regexp",variants:[{begin:L("s|tr|y",y.either(...I,{capture:!0}))},{begin:L("s|tr|y","\\(","\\)")},{begin:L("s|tr|y","\\[","\\]")},{begin:L("s|tr|y","\\{","\\}")}],relevance:2},{className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{begin:F("(?:m|qr)?",/\//,/\//)},{begin:F("m|qr",y.either(...I,{capture:!0}),/\1/)},{begin:F("m|qr",/\(/,/\)/)},{begin:F("m|qr",/\[/,/\]/)},{begin:F("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[g.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return A.contains=H,U.contains=H,{name:"Perl",aliases:["pl","pm"],keywords:R,contains:H}}},164:q=>{q.exports=function $(g){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},g.inherit(g.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),g.inherit(g.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}},188:q=>{q.exports=function $(g){const y=g.regex,k=/(?![A-Za-z0-9])(?![$])/,x=y.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,k),R=y.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,k),A={scope:"variable",match:"\\$+"+x},M={scope:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},T=g.inherit(g.APOS_STRING_MODE,{illegal:null}),F="[ \t\n]",H={scope:"string",variants:[g.inherit(g.QUOTE_STRING_MODE,{illegal:null,contains:g.QUOTE_STRING_MODE.contains.concat(M)}),T,g.END_SAME_AS_BEGIN({begin:/<<<[ \t]*(\w+)\n/,end:/[ \t]*(\w+)\b/,contains:g.QUOTE_STRING_MODE.contains.concat(M)})]},W={scope:"number",variants:[{begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?"}],relevance:0},Q=["false","null","true"],Z=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],K=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],me={keyword:Z,literal:(Mt=>{const at=[];return Mt.forEach(Ge=>{at.push(Ge),Ge.toLowerCase()===Ge?at.push(Ge.toUpperCase()):at.push(Ge.toLowerCase())}),at})(Q),built_in:K},Ee=Mt=>Mt.map(at=>at.replace(/\|\d+$/,"")),De={variants:[{match:[/new/,y.concat(F,"+"),y.concat("(?!",Ee(K).join("\\b|"),"\\b)"),R],scope:{1:"keyword",4:"title.class"}}]},Pe=y.concat(x,"\\b(?!\\()"),qe={variants:[{match:[y.concat(/::/,y.lookahead(/(?!class\b)/)),Pe],scope:{2:"variable.constant"}},{match:[/::/,/class/],scope:{2:"variable.language"}},{match:[R,y.concat(/::/,y.lookahead(/(?!class\b)/)),Pe],scope:{1:"title.class",3:"variable.constant"}},{match:[R,y.concat("::",y.lookahead(/(?!class\b)/))],scope:{1:"title.class"}},{match:[R,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]},ne={scope:"attr",match:y.concat(x,y.lookahead(":"),y.lookahead(/(?!::)/))},Le={relevance:0,begin:/\(/,end:/\)/,keywords:me,contains:[ne,A,qe,g.C_BLOCK_COMMENT_MODE,H,W,De]},st={relevance:0,match:[/\b/,y.concat("(?!fn\\b|function\\b|",Ee(Z).join("\\b|"),"|",Ee(K).join("\\b|"),"\\b)"),x,y.concat(F,"*"),y.lookahead(/(?=\()/)],scope:{3:"title.function.invoke"},contains:[Le]};Le.contains.push(st);const Ze=[ne,qe,g.C_BLOCK_COMMENT_MODE,H,W,De];return{case_insensitive:!1,keywords:me,contains:[{begin:y.concat(/#\[\s*/,R),beginScope:"meta",end:/]/,endScope:"meta",keywords:{literal:Q,keyword:["new","array"]},contains:[{begin:/\[/,end:/]/,keywords:{literal:Q,keyword:["new","array"]},contains:["self",...Ze]},...Ze,{scope:"meta",match:R}]},g.HASH_COMMENT_MODE,g.COMMENT("//","$"),g.COMMENT("/\\*","\\*/",{contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,keywords:"__halt_compiler",starts:{scope:"comment",end:g.MATCH_NOTHING_RE,contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},{scope:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},{scope:"variable.language",match:/\$this\b/},A,st,qe,{match:[/const/,/\s/,x],scope:{1:"keyword",3:"variable.constant"}},De,{scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},g.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:me,contains:["self",A,qe,g.C_BLOCK_COMMENT_MODE,H,W]}]},{scope:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},g.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[g.inherit(g.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{beginKeywords:"use",relevance:0,end:";",contains:[{match:/\b(as|const|function)\b/,scope:"keyword"},g.UNDERSCORE_TITLE_MODE]},H,W]}}},100:q=>{q.exports=function $(g){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}},990:q=>{q.exports=function $(g){return{aliases:["pycon"],contains:[{className:"meta.prompt",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}},847:q=>{q.exports=function $(g){const y=g.regex,k=/[\p{XID_Start}_]\p{XID_Continue}*/u,x=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],M={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:x,built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},T={className:"meta",begin:/^(>>>|\.\.\.) /},I={className:"subst",begin:/\{/,end:/\}/,keywords:M,illegal:/#/},L={begin:/\{\{/,relevance:0},F={className:"string",contains:[g.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[g.BACKSLASH_ESCAPE,T],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[g.BACKSLASH_ESCAPE,T],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[g.BACKSLASH_ESCAPE,T,L,I]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[g.BACKSLASH_ESCAPE,T,L,I]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[g.BACKSLASH_ESCAPE,L,I]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[g.BACKSLASH_ESCAPE,L,I]},g.APOS_STRING_MODE,g.QUOTE_STRING_MODE]},H="[0-9](_?[0-9])*",W=`(\\b(${H}))?\\.(${H})|\\b(${H})\\.`,Q=`\\b|${x.join("|")}`,Z={className:"number",relevance:0,variants:[{begin:`(\\b(${H})|(${W}))[eE][+-]?(${H})[jJ]?(?=${Q})`},{begin:`(${W})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${Q})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${Q})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${Q})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${Q})`},{begin:`\\b(${H})[jJ](?=${Q})`}]},K={className:"comment",begin:y.lookahead(/# type:/),end:/$/,keywords:M,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},ue={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:M,contains:["self",T,Z,F,g.HASH_COMMENT_MODE]}]};return I.contains=[F,Z,T],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:M,illegal:/(<\/|->|\?)|=>/,contains:[T,Z,{begin:/\bself\b/},{beginKeywords:"if",relevance:0},F,K,g.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,k],scope:{1:"keyword",3:"title.function"},contains:[ue]},{variants:[{match:[/\bclass/,/\s+/,k,/\s*/,/\(\s*/,k,/\s*\)/]},{match:[/\bclass/,/\s+/,k]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[Z,ue,F]}]}}},553:q=>{q.exports=function $(g){const y=g.regex,k=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,x=y.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),R=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,A=y.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/);return{name:"R",keywords:{$pattern:k,keyword:"function if in break next repeat else for while",literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10",built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm"},contains:[g.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/,starts:{end:y.lookahead(y.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)),endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{scope:"variable",variants:[{match:k},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0}]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}]}),g.HASH_COMMENT_MODE,{scope:"string",contains:[g.BACKSLASH_ESCAPE],variants:[g.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/}),g.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/}),g.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/}),g.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/}),g.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/}),g.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"',relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{1:"operator",2:"number"},match:[R,x]},{scope:{1:"operator",2:"number"},match:[/%[^%]*%/,x]},{scope:{1:"punctuation",2:"number"},match:[A,x]},{scope:{2:"number"},match:[/[^a-zA-Z0-9._]|^/,x]}]},{scope:{3:"operator"},match:[k,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:R},{match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:A},{begin:"`",end:"`",contains:[{begin:/\\./}]}]}}},185:q=>{q.exports=function $(g){const y=g.regex,k="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",x=y.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),R=y.concat(x,/(::\w+)*/),A={"variable.constant":["__FILE__","__LINE__"],"variable.language":["self","super"],keyword:["alias","and","attr_accessor","attr_reader","attr_writer","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","include","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield"],built_in:["proc","lambda"],literal:["true","false","nil"]},U={className:"doctag",begin:"@[A-Za-z]+"},M={begin:"#<",end:">"},T=[g.COMMENT("#","$",{contains:[U]}),g.COMMENT("^=begin","^=end",{contains:[U],relevance:10}),g.COMMENT("^__END__",g.MATCH_NOTHING_RE)],I={className:"subst",begin:/#\{/,end:/\}/,keywords:A},L={className:"string",contains:[g.BACKSLASH_ESCAPE,I],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{begin:y.concat(/<<[-~]?'?/,y.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),contains:[g.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[g.BACKSLASH_ESCAPE,I]})]}]},H="[0-9](_?[0-9])*",Q={variants:[{match:/\(\)/},{className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,keywords:A}]},Ee=[L,{variants:[{match:[/class\s+/,R,/\s+<\s+/,R]},{match:[/class\s+/,R]}],scope:{2:"title.class",4:"title.class.inherited"},keywords:A},{relevance:0,match:[R,/\.new[ (]/],scope:{1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},{match:[/def/,/\s+/,k],scope:{1:"keyword",3:"title.function"},contains:[Q]},{begin:g.IDENT_RE+"::"},{className:"symbol",begin:g.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[L,{begin:k}],relevance:0},{className:"number",relevance:0,variants:[{begin:`\\b([1-9](_?[0-9])*|0)(\\.(${H}))?([eE][+-]?(${H})|r)?i?\\b`},{begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{begin:"\\b0(_?[0-7])+r?i?\\b"}]},{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{className:"params",begin:/\|/,end:/\|/,excludeBegin:!0,excludeEnd:!0,relevance:0,keywords:A},{begin:"("+g.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{className:"regexp",contains:[g.BACKSLASH_ESCAPE,I],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(M,T),relevance:0}].concat(M,T);I.contains=Ee,Q.contains=Ee;const ne=[{begin:/^\s*=>/,starts:{end:"$",contains:Ee}},{className:"meta.prompt",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])",starts:{end:"$",keywords:A,contains:Ee}}];return T.unshift(M),{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:A,illegal:/\/\*/,contains:[g.SHEBANG({binary:"ruby"})].concat(ne).concat(T).concat(Ee)}}},929:q=>{q.exports=function $(g){const y=g.regex,k={className:"title.function.invoke",relevance:0,begin:y.concat(/\b/,/(?!let\b)/,g.IDENT_RE,y.lookahead(/\s*\(/))},x="([ui](8|16|32|64|128|size)|f(32|64))?",U=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],M=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"];return{name:"Rust",aliases:["rs"],keywords:{$pattern:g.IDENT_RE+"!?",type:M,keyword:["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","unsafe","unsized","use","virtual","where","while","yield"],literal:["true","false","Some","None","Ok","Err"],built_in:U},illegal:""},k]}}},574:q=>{const g=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],y=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],k=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],x=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],R=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse();q.exports=function A(U){const M=(U=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:U.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[U.APOS_STRING_MODE,U.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:U.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}}))(U),T=x,I=k,L="@[a-z-]+",W={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b",relevance:0};return{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[U.C_LINE_COMMENT_MODE,U.C_BLOCK_COMMENT_MODE,M.CSS_NUMBER_MODE,{className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},M.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag",begin:"\\b("+g.join("|")+")\\b",relevance:0},{className:"selector-pseudo",begin:":("+I.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+T.join("|")+")"},W,{begin:/\(/,end:/\)/,contains:[M.CSS_NUMBER_MODE]},M.CSS_VARIABLE,{className:"attribute",begin:"\\b("+R.join("|")+")\\b"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:/:/,end:/[;}{]/,relevance:0,contains:[M.BLOCK_COMMENT,W,M.HEXCOLOR,M.CSS_NUMBER_MODE,U.QUOTE_STRING_MODE,U.APOS_STRING_MODE,M.IMPORTANT,M.FUNCTION_DISPATCH]},{begin:"@(page|font-face)",keywords:{$pattern:L,keyword:"@page @font-face"}},{begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only",attribute:y.join(" ")},contains:[{begin:L,className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"},W,U.QUOTE_STRING_MODE,U.APOS_STRING_MODE,M.HEXCOLOR,M.CSS_NUMBER_MODE]},M.FUNCTION_DISPATCH]}}},498:q=>{q.exports=function $(g){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}},239:q=>{q.exports=function $(g){const y=g.regex,k=g.COMMENT("--","$"),A=["true","false","unknown"],M=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],L=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],H=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],W=L,Q=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter(Ee=>!L.includes(Ee)),ue={begin:y.concat(/\b/,y.either(...W),/\s*\(/),relevance:0,keywords:{built_in:W}};return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:function me(Ee,{exceptions:De,when:Pe}={}){const qe=Pe;return De=De||[],Ee.map(ne=>ne.match(/\|\d+$/)||De.includes(ne)?ne:qe(ne)?`${ne}|0`:ne)}(Q,{when:Ee=>Ee.length<3}),literal:A,type:M,built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"]},contains:[{begin:y.either(...H),relevance:0,keywords:{$pattern:/[\w\.]+/,keyword:Q.concat(H),literal:A,type:M}},{className:"type",begin:y.either("double precision","large object","with timezone","without timezone")},ue,{className:"variable",begin:/@[a-z0-9]+/},{className:"string",variants:[{begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/"/,end:/"/,contains:[{begin:/""/}]},g.C_NUMBER_MODE,g.C_BLOCK_COMMENT_MODE,k,{className:"operator",begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}}},597:q=>{function $(ne){return ne?"string"==typeof ne?ne:ne.source:null}function g(ne){return y("(?=",ne,")")}function y(...ne){return ne.map(st=>$(st)).join("")}function x(...ne){return"("+(function k(ne){const Le=ne[ne.length-1];return"object"==typeof Le&&Le.constructor===Object?(ne.splice(ne.length-1,1),Le):{}}(ne).capture?"":"?:")+ne.map(Ze=>$(Ze)).join("|")+")"}const R=ne=>y(/\b/,ne,/\w$/.test(ne)?/\b/:/\B/),A=["Protocol","Type"].map(R),U=["init","self"].map(R),M=["Any","Self"],T=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","break","case","catch","class","continue","convenience","default","defer","deinit","didSet","distributed","do","dynamic","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],I=["false","nil","true"],L=["assignment","associativity","higherThan","left","lowerThan","none","right"],F=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warn_unqualified_access","#warning"],H=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],W=x(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),Q=x(W,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),Z=y(W,Q,"*"),K=x(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),ue=x(K,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),me=y(K,ue,"*"),Ee=y(/[A-Z]/,ue,"*"),De=["autoclosure",y(/convention\(/,x("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",y(/objc\(/,me,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","testable","UIApplicationMain","unknown","usableFromInline"],Pe=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"];q.exports=function qe(ne){const Le={match:/\s+/,relevance:0},st=ne.COMMENT("/\\*","\\*/",{contains:["self"]}),Ze=[ne.C_LINE_COMMENT_MODE,st],At={match:[/\./,x(...A,...U)],className:{2:"keyword"}},Mt={match:y(/\./,x(...T)),relevance:0},at=T.filter(Qe=>"string"==typeof Qe).concat(["_|0"]),Zn={variants:[{className:"keyword",match:x(...T.filter(Qe=>"string"!=typeof Qe).concat(M).map(R),...U)}]},Lt={$pattern:x(/\b\w+/,/#\w+/),keyword:at.concat(F),literal:I},Be=[At,Mt,Zn],Pn=[{match:y(/\./,x(...H)),relevance:0},{className:"built_in",match:y(/\b/,x(...H),/(?=\()/)}],Qn={match:/->/,relevance:0},Vt=[Qn,{className:"operator",relevance:0,variants:[{match:Z},{match:`\\.(\\.|${Q})+`}]}],on="([0-9]_*)+",Ne="([0-9a-fA-F]_*)+",ve={className:"number",relevance:0,variants:[{match:`\\b(${on})(\\.(${on}))?([eE][+-]?(${on}))?\\b`},{match:`\\b0x(${Ne})(\\.(${Ne}))?([pP][+-]?(${on}))?\\b`},{match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},xt=(Qe="")=>({className:"subst",variants:[{match:y(/\\/,Qe,/[0\\tnr"']/)},{match:y(/\\/,Qe,/u\{[0-9a-fA-F]{1,8}\}/)}]}),Ce=(Qe="")=>({className:"subst",match:y(/\\/,Qe,/[\t ]*(?:[\r\n]|\r\n)/)}),zt=(Qe="")=>({className:"subst",label:"interpol",begin:y(/\\/,Qe,/\(/),end:/\)/}),qt=(Qe="")=>({begin:y(Qe,/"""/),end:y(/"""/,Qe),contains:[xt(Qe),Ce(Qe),zt(Qe)]}),Ln=(Qe="")=>({begin:y(Qe,/"/),end:y(/"/,Qe),contains:[xt(Qe),zt(Qe)]}),Xn={className:"string",variants:[qt(),qt("#"),qt("##"),qt("###"),Ln(),Ln("#"),Ln("##"),Ln("###")]},Io={match:y(/`/,me,/`/)},To=[Io,{className:"variable",match:/\$\d+/},{className:"variable",match:`\\$${ue}+`}],Jn=[{match:/(@|#(un)?)available/,className:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:Pe,contains:[...Vt,ve,Xn]}]}},{className:"keyword",match:y(/@/,x(...De))},{className:"meta",match:y(/@/,me)}],Fn={match:g(/\b[A-Z]/),relevance:0,contains:[{className:"type",match:y(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,ue,"+")},{className:"type",match:Ee,relevance:0},{match:/[?!]+/,relevance:0},{match:/\.\.\./,relevance:0},{match:y(/\s+&\s+/,g(Ee)),relevance:0}]},eo={begin://,keywords:Lt,contains:[...Ze,...Be,...Jn,Qn,Fn]};Fn.contains.push(eo);const sn={begin:/\(/,end:/\)/,relevance:0,keywords:Lt,contains:["self",{match:y(me,/\s*:/),keywords:"_|0",relevance:0},...Ze,...Be,...Pn,...Vt,ve,Xn,...To,...Jn,Fn]},$r={begin://,contains:[...Ze,Fn]},vr={begin:/\(/,end:/\)/,keywords:Lt,contains:[{begin:x(g(y(me,/\s*:/)),g(y(me,/\s+/,me,/\s*:/))),end:/:/,relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:me}]},...Ze,...Be,...Vt,ve,Xn,...Jn,Fn,sn],endsParent:!0,illegal:/["']/},Ao={match:[/func/,/\s+/,x(Io.match,me,Z)],className:{1:"keyword",3:"title.function"},contains:[$r,vr,Le],illegal:[/\[/,/%/]},Dn={match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"},contains:[$r,vr,Le],illegal:/\[|%/},Mo={match:[/operator/,/\s+/,Z],className:{1:"keyword",3:"title"}},zi={begin:[/precedencegroup/,/\s+/,Ee],className:{1:"keyword",3:"title"},contains:[Fn],keywords:[...L,...I],end:/}/};for(const Qe of Xn.variants){const xo=Qe.contains.find(qi=>"interpol"===qi.label);xo.keywords=Lt;const to=[...Be,...Pn,...Vt,ve,Xn,...To];xo.contains=[...to,{begin:/\(/,end:/\)/,contains:["self",...to]}]}return{name:"Swift",keywords:Lt,contains:[...Ze,Ao,Dn,{beginKeywords:"struct protocol class extension enum actor",end:"\\{",excludeEnd:!0,keywords:Lt,contains:[ne.inherit(ne.TITLE_MODE,{className:"title.class",begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/}),...Be]},Mo,zi,{beginKeywords:"import",end:/$/,contains:[...Ze],relevance:0},...Be,...Pn,...Vt,ve,Xn,...To,...Jn,Fn,sn]}}},603:q=>{const $="[A-Za-z$_][0-9A-Za-z$_]*",g=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],y=["true","false","null","undefined","NaN","Infinity"],k=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],x=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],R=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],A=["arguments","this","super","console","window","document","localStorage","module","global"],U=[].concat(R,k,x);q.exports=function T(I){const L=function M(I){const L=I.regex,H=$,Z={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(ve,xt)=>{const Ce=ve[0].length+ve.index,zt=ve.input[Ce];if("<"===zt||","===zt)return void xt.ignoreMatch();let qt;">"===zt&&(((ve,{after:xt})=>{const Ce="",Ne={match:[/const|var|let/,/\s+/,H,/\s*/,/=\s*/,/(async\s*)?/,L.lookahead(on)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[Ge]};return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:K,exports:{PARAMS_CONTAINS:at,CLASS_REFERENCE:Lt},illegal:/#(?![$_A-z])/,contains:[I.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},I.APOS_STRING_MODE,I.QUOTE_STRING_MODE,qe,ne,Le,Ze,De,Lt,{className:"attr",begin:H+L.lookahead(":"),relevance:0},Ne,{begin:"("+I.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[Ze,I.REGEXP_MODE,{className:"function",begin:on,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:I.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:K,contains:at}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:""},{match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:Z.begin,"on:begin":Z.isTrulyOpeningTag,end:Z.end}],subLanguage:"xml",contains:[{begin:Z.begin,end:Z.end,skip:!0,contains:["self"]}]}]},gn,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+I.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[Ge,I.inherit(I.TITLE_MODE,{begin:H,className:"title.function"})]},{match:/\.\.\./,relevance:0},It,{match:"\\$"+H,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[Ge]},Qn,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},Zn,Vt,{match:/\$[(.]/}]}}(I),F=$,H=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],W={beginKeywords:"namespace",end:/\{/,excludeEnd:!0,contains:[L.exports.CLASS_REFERENCE]},Q={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:H},contains:[L.exports.CLASS_REFERENCE]},ue={$pattern:$,keyword:g.concat(["type","namespace","interface","public","private","protected","implements","declare","abstract","readonly","enum","override"]),literal:y,built_in:U.concat(H),"variable.language":A},me={className:"meta",begin:"@"+F},Ee=(Pe,qe,ne)=>{const Le=Pe.contains.findIndex(st=>st.label===qe);if(-1===Le)throw new Error("can not find mode to replace");Pe.contains.splice(Le,1,ne)};return Object.assign(L.keywords,ue),L.exports.PARAMS_CONTAINS.push(me),L.contains=L.contains.concat([me,W,Q]),Ee(L,"shebang",I.SHEBANG()),Ee(L,"use_strict",{className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/}),L.contains.find(Pe=>"func.def"===Pe.label).relevance=0,Object.assign(L,{name:"TypeScript",aliases:["ts","tsx"]}),L}},410:q=>{q.exports=function $(g){const y=g.regex,R=/\d{1,2}\/\d{1,2}\/\d{4}/,A=/\d{4}-\d{1,2}-\d{1,2}/,U=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,M=/\d{1,2}(:\d{1,2}){1,2}/,T={className:"literal",variants:[{begin:y.concat(/# */,y.either(A,R),/ *#/)},{begin:y.concat(/# */,M,/ *#/)},{begin:y.concat(/# */,U,/ *#/)},{begin:y.concat(/# */,y.either(A,R),/ +/,y.either(U,M),/ *#/)}]},F=g.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}]}),H=g.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]});return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0,classNameAliases:{label:"symbol"},keywords:{keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield",built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort",type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort",literal:"true false nothing"},illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[{className:"string",begin:/"(""|[^/n])"C\b/},{className:"string",begin:/"/,end:/"/,illegal:/\n/,contains:[{begin:/""/}]},T,{className:"number",relevance:0,variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},{className:"label",begin:/^\w+:/},F,H,{className:"meta",begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/,end:/$/,keywords:{keyword:"const disable else elseif enable end externalsource if region then"},contains:[H]}]}}},65:q=>{q.exports=function $(g){const y=g.COMMENT(/\(;/,/;\)/);return y.contains.push("self"),{name:"WebAssembly",keywords:{$pattern:/[\w.]+/,keyword:["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"]},contains:[g.COMMENT(/;;/,/$/),y,{match:[/(?:offset|align)/,/\s*/,/=/],className:{1:"keyword",3:"operator"}},{className:"variable",begin:/\$[\w_]+/},{match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},{begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword",3:"title.function"}},g.QUOTE_STRING_MODE,{match:/(i32|i64|f32|f64)(?!\.)/,className:"type"},{className:"keyword",match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/},{className:"number",relevance:0,match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/}]}}},149:q=>{q.exports=function $(g){const y=g.regex,k=y.concat(/[\p{L}_]/u,y.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),R={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},A={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},U=g.inherit(A,{begin:/\(/,end:/\)/}),M=g.inherit(g.APOS_STRING_MODE,{className:"string"}),T=g.inherit(g.QUOTE_STRING_MODE,{className:"string"}),I={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[A,T,M,U,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[A,U,T,M]}]}]},g.COMMENT(//,{relevance:10}),{begin://,relevance:10},R,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[T]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[I],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[I],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:y.concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:k,relevance:0,starts:I}]},{className:"tag",begin:y.concat(/<\//,y.lookahead(y.concat(k,/>/))),contains:[{className:"name",begin:k,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}},84:q=>{q.exports=function $(g){const y="true false yes no null",k="[\\w#;/?:@&=+$,.~*'()[\\]]+",A={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[g.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},U=g.inherit(A,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),H={end:",",endsWithParent:!0,excludeEnd:!0,keywords:y,relevance:0},Z=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+k},{className:"type",begin:"!<"+k+">"},{className:"type",begin:"!"+k},{className:"type",begin:"!!"+k},{className:"meta",begin:"&"+g.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+g.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},g.HASH_COMMENT_MODE,{beginKeywords:y,keywords:{literal:y}},{className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},{className:"number",begin:g.C_NUMBER_RE+"\\b",relevance:0},{begin:/\{/,end:/\}/,contains:[H],illegal:"\\n",relevance:0},{begin:"\\[",end:"\\]",contains:[H],illegal:"\\n",relevance:0},A],K=[...Z];return K.pop(),K.push(U),H.contains=K,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:Z}}}},q=>{q(q.s=601)}]); \ No newline at end of file